1 This is as.info, produced by makeinfo version 4.8 from 2 /home/jingyu/projects/gcc/android-toolchainsrc/build/../binutils/binutils-2.19/gas/doc/as.texinfo. 3 4 START-INFO-DIR-ENTRY 5 * As: (as). The GNU assembler. 6 * Gas: (as). The GNU assembler. 7 END-INFO-DIR-ENTRY 8 9 This file documents the GNU Assembler "as". 10 11 Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002, 12 2006, 2007 Free Software Foundation, Inc. 13 14 Permission is granted to copy, distribute and/or modify this document 15 under the terms of the GNU Free Documentation License, Version 1.1 or 16 any later version published by the Free Software Foundation; with no 17 Invariant Sections, with no Front-Cover Texts, and with no Back-Cover 18 Texts. A copy of the license is included in the section entitled "GNU 19 Free Documentation License". 20 21 22 File: as.info, Node: Top, Next: Overview, Up: (dir) 23 24 Using as 25 ******** 26 27 This file is a user guide to the GNU assembler `as' (GNU Binutils) 28 version 2.19. 29 30 This document is distributed under the terms of the GNU Free 31 Documentation License. A copy of the license is included in the 32 section entitled "GNU Free Documentation License". 33 34 * Menu: 35 36 * Overview:: Overview 37 * Invoking:: Command-Line Options 38 * Syntax:: Syntax 39 * Sections:: Sections and Relocation 40 * Symbols:: Symbols 41 * Expressions:: Expressions 42 * Pseudo Ops:: Assembler Directives 43 44 * Object Attributes:: Object Attributes 45 * Machine Dependencies:: Machine Dependent Features 46 * Reporting Bugs:: Reporting Bugs 47 * Acknowledgements:: Who Did What 48 * GNU Free Documentation License:: GNU Free Documentation License 49 * AS Index:: AS Index 50 51 52 File: as.info, Node: Overview, Next: Invoking, Prev: Top, Up: Top 53 54 1 Overview 55 ********** 56 57 Here is a brief summary of how to invoke `as'. For details, see *Note 58 Command-Line Options: Invoking. 59 60 as [-a[cdghlns][=FILE]] [-alternate] [-D] 61 [-debug-prefix-map OLD=NEW] 62 [-defsym SYM=VAL] [-f] [-g] [-gstabs] 63 [-gstabs+] [-gdwarf-2] [-help] [-I DIR] [-J] 64 [-K] [-L] [-listing-lhs-width=NUM] 65 [-listing-lhs-width2=NUM] [-listing-rhs-width=NUM] 66 [-listing-cont-lines=NUM] [-keep-locals] [-o 67 OBJFILE] [-R] [-reduce-memory-overheads] [-statistics] 68 [-v] [-version] [-version] [-W] [-warn] 69 [-fatal-warnings] [-w] [-x] [-Z] [@FILE] 70 [-target-help] [TARGET-OPTIONS] 71 [-|FILES ...] 72 73 _Target Alpha options:_ 74 [-mCPU] 75 [-mdebug | -no-mdebug] 76 [-relax] [-g] [-GSIZE] 77 [-F] [-32addr] 78 79 _Target ARC options:_ 80 [-marc[5|6|7|8]] 81 [-EB|-EL] 82 83 _Target ARM options:_ 84 [-mcpu=PROCESSOR[+EXTENSION...]] 85 [-march=ARCHITECTURE[+EXTENSION...]] 86 [-mfpu=FLOATING-POINT-FORMAT] 87 [-mfloat-abi=ABI] 88 [-meabi=VER] 89 [-mthumb] 90 [-EB|-EL] 91 [-mapcs-32|-mapcs-26|-mapcs-float| 92 -mapcs-reentrant] 93 [-mthumb-interwork] [-k] 94 95 _Target CRIS options:_ 96 [-underscore | -no-underscore] 97 [-pic] [-N] 98 [-emulation=criself | -emulation=crisaout] 99 [-march=v0_v10 | -march=v10 | -march=v32 | -march=common_v10_v32] 100 101 _Target D10V options:_ 102 [-O] 103 104 _Target D30V options:_ 105 [-O|-n|-N] 106 107 _Target H8/300 options:_ 108 [-h-tick-hex] 109 110 _Target i386 options:_ 111 [-32|-64] [-n] 112 [-march=CPU[+EXTENSION...]] [-mtune=CPU] 113 114 _Target i960 options:_ 115 [-ACA|-ACA_A|-ACB|-ACC|-AKA|-AKB| 116 -AKC|-AMC] 117 [-b] [-no-relax] 118 119 _Target IA-64 options:_ 120 [-mconstant-gp|-mauto-pic] 121 [-milp32|-milp64|-mlp64|-mp64] 122 [-mle|mbe] 123 [-mtune=itanium1|-mtune=itanium2] 124 [-munwind-check=warning|-munwind-check=error] 125 [-mhint.b=ok|-mhint.b=warning|-mhint.b=error] 126 [-x|-xexplicit] [-xauto] [-xdebug] 127 128 _Target IP2K options:_ 129 [-mip2022|-mip2022ext] 130 131 _Target M32C options:_ 132 [-m32c|-m16c] [-relax] [-h-tick-hex] 133 134 _Target M32R options:_ 135 [-m32rx|-[no-]warn-explicit-parallel-conflicts| 136 -W[n]p] 137 138 _Target M680X0 options:_ 139 [-l] [-m68000|-m68010|-m68020|...] 140 141 _Target M68HC11 options:_ 142 [-m68hc11|-m68hc12|-m68hcs12] 143 [-mshort|-mlong] 144 [-mshort-double|-mlong-double] 145 [-force-long-branches] [-short-branches] 146 [-strict-direct-mode] [-print-insn-syntax] 147 [-print-opcodes] [-generate-example] 148 149 _Target MCORE options:_ 150 [-jsri2bsr] [-sifilter] [-relax] 151 [-mcpu=[210|340]] 152 153 _Target MIPS options:_ 154 [-nocpp] [-EL] [-EB] [-O[OPTIMIZATION LEVEL]] 155 [-g[DEBUG LEVEL]] [-G NUM] [-KPIC] [-call_shared] 156 [-non_shared] [-xgot [-mvxworks-pic] 157 [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32] 158 [-march=CPU] [-mtune=CPU] [-mips1] [-mips2] 159 [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2] 160 [-mips64] [-mips64r2] 161 [-construct-floats] [-no-construct-floats] 162 [-trap] [-no-break] [-break] [-no-trap] 163 [-mfix7000] [-mno-fix7000] 164 [-mips16] [-no-mips16] 165 [-msmartmips] [-mno-smartmips] 166 [-mips3d] [-no-mips3d] 167 [-mdmx] [-no-mdmx] 168 [-mdsp] [-mno-dsp] 169 [-mdspr2] [-mno-dspr2] 170 [-mmt] [-mno-mt] 171 [-mdebug] [-no-mdebug] 172 [-mpdr] [-mno-pdr] 173 174 _Target MMIX options:_ 175 [-fixed-special-register-names] [-globalize-symbols] 176 [-gnu-syntax] [-relax] [-no-predefined-symbols] 177 [-no-expand] [-no-merge-gregs] [-x] 178 [-linker-allocated-gregs] 179 180 _Target PDP11 options:_ 181 [-mpic|-mno-pic] [-mall] [-mno-extensions] 182 [-mEXTENSION|-mno-EXTENSION] 183 [-mCPU] [-mMACHINE] 184 185 _Target picoJava options:_ 186 [-mb|-me] 187 188 _Target PowerPC options:_ 189 [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604| 190 -m403|-m405|-mppc64|-m620|-mppc64bridge|-mbooke| 191 -mbooke32|-mbooke64] 192 [-mcom|-many|-maltivec|-mvsx] [-memb] 193 [-mregnames|-mno-regnames] 194 [-mrelocatable|-mrelocatable-lib] 195 [-mlittle|-mlittle-endian|-mbig|-mbig-endian] 196 [-msolaris|-mno-solaris] 197 198 _Target SPARC options:_ 199 [-Av6|-Av7|-Av8|-Asparclet|-Asparclite 200 -Av8plus|-Av8plusa|-Av9|-Av9a] 201 [-xarch=v8plus|-xarch=v8plusa] [-bump] 202 [-32|-64] 203 204 _Target TIC54X options:_ 205 [-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf] 206 [-merrors-to-file <FILENAME>|-me <FILENAME>] 207 208 209 _Target Z80 options:_ 210 [-z80] [-r800] 211 [ -ignore-undocumented-instructions] [-Wnud] 212 [ -ignore-unportable-instructions] [-Wnup] 213 [ -warn-undocumented-instructions] [-Wud] 214 [ -warn-unportable-instructions] [-Wup] 215 [ -forbid-undocumented-instructions] [-Fud] 216 [ -forbid-unportable-instructions] [-Fup] 217 218 219 _Target Xtensa options:_ 220 [-[no-]text-section-literals] [-[no-]absolute-literals] 221 [-[no-]target-align] [-[no-]longcalls] 222 [-[no-]transform] 223 [-rename-section OLDNAME=NEWNAME] 224 225 `@FILE' 226 Read command-line options from FILE. The options read are 227 inserted in place of the original @FILE option. If FILE does not 228 exist, or cannot be read, then the option will be treated 229 literally, and not removed. 230 231 Options in FILE are separated by whitespace. A whitespace 232 character may be included in an option by surrounding the entire 233 option in either single or double quotes. Any character 234 (including a backslash) may be included by prefixing the character 235 to be included with a backslash. The FILE may itself contain 236 additional @FILE options; any such options will be processed 237 recursively. 238 239 `-a[cdghlmns]' 240 Turn on listings, in any of a variety of ways: 241 242 `-ac' 243 omit false conditionals 244 245 `-ad' 246 omit debugging directives 247 248 `-ag' 249 include general information, like as version and options 250 passed 251 252 `-ah' 253 include high-level source 254 255 `-al' 256 include assembly 257 258 `-am' 259 include macro expansions 260 261 `-an' 262 omit forms processing 263 264 `-as' 265 include symbols 266 267 `=file' 268 set the name of the listing file 269 270 You may combine these options; for example, use `-aln' for assembly 271 listing without forms processing. The `=file' option, if used, 272 must be the last one. By itself, `-a' defaults to `-ahls'. 273 274 `--alternate' 275 Begin in alternate macro mode. *Note `.altmacro': Altmacro. 276 277 `-D' 278 Ignored. This option is accepted for script compatibility with 279 calls to other assemblers. 280 281 `--debug-prefix-map OLD=NEW' 282 When assembling files in directory `OLD', record debugging 283 information describing them as in `NEW' instead. 284 285 `--defsym SYM=VALUE' 286 Define the symbol SYM to be VALUE before assembling the input file. 287 VALUE must be an integer constant. As in C, a leading `0x' 288 indicates a hexadecimal value, and a leading `0' indicates an octal 289 value. The value of the symbol can be overridden inside a source 290 file via the use of a `.set' pseudo-op. 291 292 `-f' 293 "fast"--skip whitespace and comment preprocessing (assume source is 294 compiler output). 295 296 `-g' 297 `--gen-debug' 298 Generate debugging information for each assembler source line 299 using whichever debug format is preferred by the target. This 300 currently means either STABS, ECOFF or DWARF2. 301 302 `--gstabs' 303 Generate stabs debugging information for each assembler line. This 304 may help debugging assembler code, if the debugger can handle it. 305 306 `--gstabs+' 307 Generate stabs debugging information for each assembler line, with 308 GNU extensions that probably only gdb can handle, and that could 309 make other debuggers crash or refuse to read your program. This 310 may help debugging assembler code. Currently the only GNU 311 extension is the location of the current working directory at 312 assembling time. 313 314 `--gdwarf-2' 315 Generate DWARF2 debugging information for each assembler line. 316 This may help debugging assembler code, if the debugger can handle 317 it. Note--this option is only supported by some targets, not all 318 of them. 319 320 `--help' 321 Print a summary of the command line options and exit. 322 323 `--target-help' 324 Print a summary of all target specific options and exit. 325 326 `-I DIR' 327 Add directory DIR to the search list for `.include' directives. 328 329 `-J' 330 Don't warn about signed overflow. 331 332 `-K' 333 Issue warnings when difference tables altered for long 334 displacements. 335 336 `-L' 337 `--keep-locals' 338 Keep (in the symbol table) local symbols. These symbols start with 339 system-specific local label prefixes, typically `.L' for ELF 340 systems or `L' for traditional a.out systems. *Note Symbol 341 Names::. 342 343 `--listing-lhs-width=NUMBER' 344 Set the maximum width, in words, of the output data column for an 345 assembler listing to NUMBER. 346 347 `--listing-lhs-width2=NUMBER' 348 Set the maximum width, in words, of the output data column for 349 continuation lines in an assembler listing to NUMBER. 350 351 `--listing-rhs-width=NUMBER' 352 Set the maximum width of an input source line, as displayed in a 353 listing, to NUMBER bytes. 354 355 `--listing-cont-lines=NUMBER' 356 Set the maximum number of lines printed in a listing for a single 357 line of input to NUMBER + 1. 358 359 `-o OBJFILE' 360 Name the object-file output from `as' OBJFILE. 361 362 `-R' 363 Fold the data section into the text section. 364 365 Set the default size of GAS's hash tables to a prime number close 366 to NUMBER. Increasing this value can reduce the length of time it 367 takes the assembler to perform its tasks, at the expense of 368 increasing the assembler's memory requirements. Similarly 369 reducing this value can reduce the memory requirements at the 370 expense of speed. 371 372 `--reduce-memory-overheads' 373 This option reduces GAS's memory requirements, at the expense of 374 making the assembly processes slower. Currently this switch is a 375 synonym for `--hash-size=4051', but in the future it may have 376 other effects as well. 377 378 `--statistics' 379 Print the maximum space (in bytes) and total time (in seconds) 380 used by assembly. 381 382 `--strip-local-absolute' 383 Remove local absolute symbols from the outgoing symbol table. 384 385 `-v' 386 `-version' 387 Print the `as' version. 388 389 `--version' 390 Print the `as' version and exit. 391 392 `-W' 393 `--no-warn' 394 Suppress warning messages. 395 396 `--fatal-warnings' 397 Treat warnings as errors. 398 399 `--warn' 400 Don't suppress warning messages or treat them as errors. 401 402 `-w' 403 Ignored. 404 405 `-x' 406 Ignored. 407 408 `-Z' 409 Generate an object file even after errors. 410 411 `-- | FILES ...' 412 Standard input, or source files to assemble. 413 414 415 The following options are available when as is configured for an ARC 416 processor. 417 418 `-marc[5|6|7|8]' 419 This option selects the core processor variant. 420 421 `-EB | -EL' 422 Select either big-endian (-EB) or little-endian (-EL) output. 423 424 The following options are available when as is configured for the ARM 425 processor family. 426 427 `-mcpu=PROCESSOR[+EXTENSION...]' 428 Specify which ARM processor variant is the target. 429 430 `-march=ARCHITECTURE[+EXTENSION...]' 431 Specify which ARM architecture variant is used by the target. 432 433 `-mfpu=FLOATING-POINT-FORMAT' 434 Select which Floating Point architecture is the target. 435 436 `-mfloat-abi=ABI' 437 Select which floating point ABI is in use. 438 439 `-mthumb' 440 Enable Thumb only instruction decoding. 441 442 `-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant' 443 Select which procedure calling convention is in use. 444 445 `-EB | -EL' 446 Select either big-endian (-EB) or little-endian (-EL) output. 447 448 `-mthumb-interwork' 449 Specify that the code has been generated with interworking between 450 Thumb and ARM code in mind. 451 452 `-k' 453 Specify that PIC code has been generated. 454 455 See the info pages for documentation of the CRIS-specific options. 456 457 The following options are available when as is configured for a D10V 458 processor. 459 `-O' 460 Optimize output by parallelizing instructions. 461 462 The following options are available when as is configured for a D30V 463 processor. 464 `-O' 465 Optimize output by parallelizing instructions. 466 467 `-n' 468 Warn when nops are generated. 469 470 `-N' 471 Warn when a nop after a 32-bit multiply instruction is generated. 472 473 The following options are available when as is configured for the 474 Intel 80960 processor. 475 476 `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC' 477 Specify which variant of the 960 architecture is the target. 478 479 `-b' 480 Add code to collect statistics about branches taken. 481 482 `-no-relax' 483 Do not alter compare-and-branch instructions for long 484 displacements; error if necessary. 485 486 487 The following options are available when as is configured for the 488 Ubicom IP2K series. 489 490 `-mip2022ext' 491 Specifies that the extended IP2022 instructions are allowed. 492 493 `-mip2022' 494 Restores the default behaviour, which restricts the permitted 495 instructions to just the basic IP2022 ones. 496 497 498 The following options are available when as is configured for the 499 Renesas M32C and M16C processors. 500 501 `-m32c' 502 Assemble M32C instructions. 503 504 `-m16c' 505 Assemble M16C instructions (the default). 506 507 `-relax' 508 Enable support for link-time relaxations. 509 510 `-h-tick-hex' 511 Support H'00 style hex constants in addition to 0x00 style. 512 513 514 The following options are available when as is configured for the 515 Renesas M32R (formerly Mitsubishi M32R) series. 516 517 `--m32rx' 518 Specify which processor in the M32R family is the target. The 519 default is normally the M32R, but this option changes it to the 520 M32RX. 521 522 `--warn-explicit-parallel-conflicts or --Wp' 523 Produce warning messages when questionable parallel constructs are 524 encountered. 525 526 `--no-warn-explicit-parallel-conflicts or --Wnp' 527 Do not produce warning messages when questionable parallel 528 constructs are encountered. 529 530 531 The following options are available when as is configured for the 532 Motorola 68000 series. 533 534 `-l' 535 Shorten references to undefined symbols, to one word instead of 536 two. 537 538 `-m68000 | -m68008 | -m68010 | -m68020 | -m68030' 539 `| -m68040 | -m68060 | -m68302 | -m68331 | -m68332' 540 `| -m68333 | -m68340 | -mcpu32 | -m5200' 541 Specify what processor in the 68000 family is the target. The 542 default is normally the 68020, but this can be changed at 543 configuration time. 544 545 `-m68881 | -m68882 | -mno-68881 | -mno-68882' 546 The target machine does (or does not) have a floating-point 547 coprocessor. The default is to assume a coprocessor for 68020, 548 68030, and cpu32. Although the basic 68000 is not compatible with 549 the 68881, a combination of the two can be specified, since it's 550 possible to do emulation of the coprocessor instructions with the 551 main processor. 552 553 `-m68851 | -mno-68851' 554 The target machine does (or does not) have a memory-management 555 unit coprocessor. The default is to assume an MMU for 68020 and 556 up. 557 558 559 For details about the PDP-11 machine dependent features options, see 560 *Note PDP-11-Options::. 561 562 `-mpic | -mno-pic' 563 Generate position-independent (or position-dependent) code. The 564 default is `-mpic'. 565 566 `-mall' 567 `-mall-extensions' 568 Enable all instruction set extensions. This is the default. 569 570 `-mno-extensions' 571 Disable all instruction set extensions. 572 573 `-mEXTENSION | -mno-EXTENSION' 574 Enable (or disable) a particular instruction set extension. 575 576 `-mCPU' 577 Enable the instruction set extensions supported by a particular 578 CPU, and disable all other extensions. 579 580 `-mMACHINE' 581 Enable the instruction set extensions supported by a particular 582 machine model, and disable all other extensions. 583 584 The following options are available when as is configured for a 585 picoJava processor. 586 587 `-mb' 588 Generate "big endian" format output. 589 590 `-ml' 591 Generate "little endian" format output. 592 593 594 The following options are available when as is configured for the 595 Motorola 68HC11 or 68HC12 series. 596 597 `-m68hc11 | -m68hc12 | -m68hcs12' 598 Specify what processor is the target. The default is defined by 599 the configuration option when building the assembler. 600 601 `-mshort' 602 Specify to use the 16-bit integer ABI. 603 604 `-mlong' 605 Specify to use the 32-bit integer ABI. 606 607 `-mshort-double' 608 Specify to use the 32-bit double ABI. 609 610 `-mlong-double' 611 Specify to use the 64-bit double ABI. 612 613 `--force-long-branches' 614 Relative branches are turned into absolute ones. This concerns 615 conditional branches, unconditional branches and branches to a sub 616 routine. 617 618 `-S | --short-branches' 619 Do not turn relative branches into absolute ones when the offset 620 is out of range. 621 622 `--strict-direct-mode' 623 Do not turn the direct addressing mode into extended addressing 624 mode when the instruction does not support direct addressing mode. 625 626 `--print-insn-syntax' 627 Print the syntax of instruction in case of error. 628 629 `--print-opcodes' 630 print the list of instructions with syntax and then exit. 631 632 `--generate-example' 633 print an example of instruction for each possible instruction and 634 then exit. This option is only useful for testing `as'. 635 636 637 The following options are available when `as' is configured for the 638 SPARC architecture: 639 640 `-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite' 641 `-Av8plus | -Av8plusa | -Av9 | -Av9a' 642 Explicitly select a variant of the SPARC architecture. 643 644 `-Av8plus' and `-Av8plusa' select a 32 bit environment. `-Av9' 645 and `-Av9a' select a 64 bit environment. 646 647 `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with 648 UltraSPARC extensions. 649 650 `-xarch=v8plus | -xarch=v8plusa' 651 For compatibility with the Solaris v9 assembler. These options are 652 equivalent to -Av8plus and -Av8plusa, respectively. 653 654 `-bump' 655 Warn when the assembler switches to another architecture. 656 657 The following options are available when as is configured for the 658 'c54x architecture. 659 660 `-mfar-mode' 661 Enable extended addressing mode. All addresses and relocations 662 will assume extended addressing (usually 23 bits). 663 664 `-mcpu=CPU_VERSION' 665 Sets the CPU version being compiled for. 666 667 `-merrors-to-file FILENAME' 668 Redirect error output to a file, for broken systems which don't 669 support such behaviour in the shell. 670 671 The following options are available when as is configured for a MIPS 672 processor. 673 674 `-G NUM' 675 This option sets the largest size of an object that can be 676 referenced implicitly with the `gp' register. It is only accepted 677 for targets that use ECOFF format, such as a DECstation running 678 Ultrix. The default value is 8. 679 680 `-EB' 681 Generate "big endian" format output. 682 683 `-EL' 684 Generate "little endian" format output. 685 686 `-mips1' 687 `-mips2' 688 `-mips3' 689 `-mips4' 690 `-mips5' 691 `-mips32' 692 `-mips32r2' 693 `-mips64' 694 `-mips64r2' 695 Generate code for a particular MIPS Instruction Set Architecture 696 level. `-mips1' is an alias for `-march=r3000', `-mips2' is an 697 alias for `-march=r6000', `-mips3' is an alias for `-march=r4000' 698 and `-mips4' is an alias for `-march=r8000'. `-mips5', `-mips32', 699 `-mips32r2', `-mips64', and `-mips64r2' correspond to generic 700 `MIPS V', `MIPS32', `MIPS32 Release 2', `MIPS64', and `MIPS64 701 Release 2' ISA processors, respectively. 702 703 `-march=CPU' 704 Generate code for a particular MIPS cpu. 705 706 `-mtune=CPU' 707 Schedule and tune for a particular MIPS cpu. 708 709 `-mfix7000' 710 `-mno-fix7000' 711 Cause nops to be inserted if the read of the destination register 712 of an mfhi or mflo instruction occurs in the following two 713 instructions. 714 715 `-mdebug' 716 `-no-mdebug' 717 Cause stabs-style debugging output to go into an ECOFF-style 718 .mdebug section instead of the standard ELF .stabs sections. 719 720 `-mpdr' 721 `-mno-pdr' 722 Control generation of `.pdr' sections. 723 724 `-mgp32' 725 `-mfp32' 726 The register sizes are normally inferred from the ISA and ABI, but 727 these flags force a certain group of registers to be treated as 32 728 bits wide at all times. `-mgp32' controls the size of 729 general-purpose registers and `-mfp32' controls the size of 730 floating-point registers. 731 732 `-mips16' 733 `-no-mips16' 734 Generate code for the MIPS 16 processor. This is equivalent to 735 putting `.set mips16' at the start of the assembly file. 736 `-no-mips16' turns off this option. 737 738 `-msmartmips' 739 `-mno-smartmips' 740 Enables the SmartMIPS extension to the MIPS32 instruction set. 741 This is equivalent to putting `.set smartmips' at the start of the 742 assembly file. `-mno-smartmips' turns off this option. 743 744 `-mips3d' 745 `-no-mips3d' 746 Generate code for the MIPS-3D Application Specific Extension. 747 This tells the assembler to accept MIPS-3D instructions. 748 `-no-mips3d' turns off this option. 749 750 `-mdmx' 751 `-no-mdmx' 752 Generate code for the MDMX Application Specific Extension. This 753 tells the assembler to accept MDMX instructions. `-no-mdmx' turns 754 off this option. 755 756 `-mdsp' 757 `-mno-dsp' 758 Generate code for the DSP Release 1 Application Specific Extension. 759 This tells the assembler to accept DSP Release 1 instructions. 760 `-mno-dsp' turns off this option. 761 762 `-mdspr2' 763 `-mno-dspr2' 764 Generate code for the DSP Release 2 Application Specific Extension. 765 This option implies -mdsp. This tells the assembler to accept DSP 766 Release 2 instructions. `-mno-dspr2' turns off this option. 767 768 `-mmt' 769 `-mno-mt' 770 Generate code for the MT Application Specific Extension. This 771 tells the assembler to accept MT instructions. `-mno-mt' turns 772 off this option. 773 774 `--construct-floats' 775 `--no-construct-floats' 776 The `--no-construct-floats' option disables the construction of 777 double width floating point constants by loading the two halves of 778 the value into the two single width floating point registers that 779 make up the double width register. By default 780 `--construct-floats' is selected, allowing construction of these 781 floating point constants. 782 783 `--emulation=NAME' 784 This option causes `as' to emulate `as' configured for some other 785 target, in all respects, including output format (choosing between 786 ELF and ECOFF only), handling of pseudo-opcodes which may generate 787 debugging information or store symbol table information, and 788 default endianness. The available configuration names are: 789 `mipsecoff', `mipself', `mipslecoff', `mipsbecoff', `mipslelf', 790 `mipsbelf'. The first two do not alter the default endianness 791 from that of the primary target for which the assembler was 792 configured; the others change the default to little- or big-endian 793 as indicated by the `b' or `l' in the name. Using `-EB' or `-EL' 794 will override the endianness selection in any case. 795 796 This option is currently supported only when the primary target 797 `as' is configured for is a MIPS ELF or ECOFF target. 798 Furthermore, the primary target or others specified with 799 `--enable-targets=...' at configuration time must include support 800 for the other format, if both are to be available. For example, 801 the Irix 5 configuration includes support for both. 802 803 Eventually, this option will support more configurations, with more 804 fine-grained control over the assembler's behavior, and will be 805 supported for more processors. 806 807 `-nocpp' 808 `as' ignores this option. It is accepted for compatibility with 809 the native tools. 810 811 `--trap' 812 `--no-trap' 813 `--break' 814 `--no-break' 815 Control how to deal with multiplication overflow and division by 816 zero. `--trap' or `--no-break' (which are synonyms) take a trap 817 exception (and only work for Instruction Set Architecture level 2 818 and higher); `--break' or `--no-trap' (also synonyms, and the 819 default) take a break exception. 820 821 `-n' 822 When this option is used, `as' will issue a warning every time it 823 generates a nop instruction from a macro. 824 825 The following options are available when as is configured for an 826 MCore processor. 827 828 `-jsri2bsr' 829 `-nojsri2bsr' 830 Enable or disable the JSRI to BSR transformation. By default this 831 is enabled. The command line option `-nojsri2bsr' can be used to 832 disable it. 833 834 `-sifilter' 835 `-nosifilter' 836 Enable or disable the silicon filter behaviour. By default this 837 is disabled. The default can be overridden by the `-sifilter' 838 command line option. 839 840 `-relax' 841 Alter jump instructions for long displacements. 842 843 `-mcpu=[210|340]' 844 Select the cpu type on the target hardware. This controls which 845 instructions can be assembled. 846 847 `-EB' 848 Assemble for a big endian target. 849 850 `-EL' 851 Assemble for a little endian target. 852 853 854 See the info pages for documentation of the MMIX-specific options. 855 856 The following options are available when as is configured for an 857 Xtensa processor. 858 859 `--text-section-literals | --no-text-section-literals' 860 With `--text-section-literals', literal pools are interspersed in 861 the text section. The default is `--no-text-section-literals', 862 which places literals in a separate section in the output file. 863 These options only affect literals referenced via PC-relative 864 `L32R' instructions; literals for absolute mode `L32R' 865 instructions are handled separately. 866 867 `--absolute-literals | --no-absolute-literals' 868 Indicate to the assembler whether `L32R' instructions use absolute 869 or PC-relative addressing. The default is to assume absolute 870 addressing if the Xtensa processor includes the absolute `L32R' 871 addressing option. Otherwise, only the PC-relative `L32R' mode 872 can be used. 873 874 `--target-align | --no-target-align' 875 Enable or disable automatic alignment to reduce branch penalties 876 at the expense of some code density. The default is 877 `--target-align'. 878 879 `--longcalls | --no-longcalls' 880 Enable or disable transformation of call instructions to allow 881 calls across a greater range of addresses. The default is 882 `--no-longcalls'. 883 884 `--transform | --no-transform' 885 Enable or disable all assembler transformations of Xtensa 886 instructions. The default is `--transform'; `--no-transform' 887 should be used only in the rare cases when the instructions must 888 be exactly as specified in the assembly source. 889 890 `--rename-section OLDNAME=NEWNAME' 891 When generating output sections, rename the OLDNAME section to 892 NEWNAME. 893 894 The following options are available when as is configured for a Z80 895 family processor. 896 `-z80' 897 Assemble for Z80 processor. 898 899 `-r800' 900 Assemble for R800 processor. 901 902 `-ignore-undocumented-instructions' 903 `-Wnud' 904 Assemble undocumented Z80 instructions that also work on R800 905 without warning. 906 907 `-ignore-unportable-instructions' 908 `-Wnup' 909 Assemble all undocumented Z80 instructions without warning. 910 911 `-warn-undocumented-instructions' 912 `-Wud' 913 Issue a warning for undocumented Z80 instructions that also work 914 on R800. 915 916 `-warn-unportable-instructions' 917 `-Wup' 918 Issue a warning for undocumented Z80 instructions that do not work 919 on R800. 920 921 `-forbid-undocumented-instructions' 922 `-Fud' 923 Treat all undocumented instructions as errors. 924 925 `-forbid-unportable-instructions' 926 `-Fup' 927 Treat undocumented Z80 instructions that do not work on R800 as 928 errors. 929 930 * Menu: 931 932 * Manual:: Structure of this Manual 933 * GNU Assembler:: The GNU Assembler 934 * Object Formats:: Object File Formats 935 * Command Line:: Command Line 936 * Input Files:: Input Files 937 * Object:: Output (Object) File 938 * Errors:: Error and Warning Messages 939 940 941 File: as.info, Node: Manual, Next: GNU Assembler, Up: Overview 942 943 1.1 Structure of this Manual 944 ============================ 945 946 This manual is intended to describe what you need to know to use GNU 947 `as'. We cover the syntax expected in source files, including notation 948 for symbols, constants, and expressions; the directives that `as' 949 understands; and of course how to invoke `as'. 950 951 This manual also describes some of the machine-dependent features of 952 various flavors of the assembler. 953 954 On the other hand, this manual is _not_ intended as an introduction 955 to programming in assembly language--let alone programming in general! 956 In a similar vein, we make no attempt to introduce the machine 957 architecture; we do _not_ describe the instruction set, standard 958 mnemonics, registers or addressing modes that are standard to a 959 particular architecture. You may want to consult the manufacturer's 960 machine architecture manual for this information. 961 962 963 File: as.info, Node: GNU Assembler, Next: Object Formats, Prev: Manual, Up: Overview 964 965 1.2 The GNU Assembler 966 ===================== 967 968 GNU `as' is really a family of assemblers. If you use (or have used) 969 the GNU assembler on one architecture, you should find a fairly similar 970 environment when you use it on another architecture. Each version has 971 much in common with the others, including object file formats, most 972 assembler directives (often called "pseudo-ops") and assembler syntax. 973 974 `as' is primarily intended to assemble the output of the GNU C 975 compiler `gcc' for use by the linker `ld'. Nevertheless, we've tried 976 to make `as' assemble correctly everything that other assemblers for 977 the same machine would assemble. Any exceptions are documented 978 explicitly (*note Machine Dependencies::). This doesn't mean `as' 979 always uses the same syntax as another assembler for the same 980 architecture; for example, we know of several incompatible versions of 981 680x0 assembly language syntax. 982 983 Unlike older assemblers, `as' is designed to assemble a source 984 program in one pass of the source file. This has a subtle impact on the 985 `.org' directive (*note `.org': Org.). 986 987 988 File: as.info, Node: Object Formats, Next: Command Line, Prev: GNU Assembler, Up: Overview 989 990 1.3 Object File Formats 991 ======================= 992 993 The GNU assembler can be configured to produce several alternative 994 object file formats. For the most part, this does not affect how you 995 write assembly language programs; but directives for debugging symbols 996 are typically different in different file formats. *Note Symbol 997 Attributes: Symbol Attributes. 998 999 1000 File: as.info, Node: Command Line, Next: Input Files, Prev: Object Formats, Up: Overview 1001 1002 1.4 Command Line 1003 ================ 1004 1005 After the program name `as', the command line may contain options and 1006 file names. Options may appear in any order, and may be before, after, 1007 or between file names. The order of file names is significant. 1008 1009 `--' (two hyphens) by itself names the standard input file 1010 explicitly, as one of the files for `as' to assemble. 1011 1012 Except for `--' any command line argument that begins with a hyphen 1013 (`-') is an option. Each option changes the behavior of `as'. No 1014 option changes the way another option works. An option is a `-' 1015 followed by one or more letters; the case of the letter is important. 1016 All options are optional. 1017 1018 Some options expect exactly one file name to follow them. The file 1019 name may either immediately follow the option's letter (compatible with 1020 older assemblers) or it may be the next command argument (GNU 1021 standard). These two command lines are equivalent: 1022 1023 as -o my-object-file.o mumble.s 1024 as -omy-object-file.o mumble.s 1025 1026 1027 File: as.info, Node: Input Files, Next: Object, Prev: Command Line, Up: Overview 1028 1029 1.5 Input Files 1030 =============== 1031 1032 We use the phrase "source program", abbreviated "source", to describe 1033 the program input to one run of `as'. The program may be in one or 1034 more files; how the source is partitioned into files doesn't change the 1035 meaning of the source. 1036 1037 The source program is a concatenation of the text in all the files, 1038 in the order specified. 1039 1040 Each time you run `as' it assembles exactly one source program. The 1041 source program is made up of one or more files. (The standard input is 1042 also a file.) 1043 1044 You give `as' a command line that has zero or more input file names. 1045 The input files are read (from left file name to right). A command 1046 line argument (in any position) that has no special meaning is taken to 1047 be an input file name. 1048 1049 If you give `as' no file names it attempts to read one input file 1050 from the `as' standard input, which is normally your terminal. You may 1051 have to type <ctl-D> to tell `as' there is no more program to assemble. 1052 1053 Use `--' if you need to explicitly name the standard input file in 1054 your command line. 1055 1056 If the source is empty, `as' produces a small, empty object file. 1057 1058 Filenames and Line-numbers 1059 -------------------------- 1060 1061 There are two ways of locating a line in the input file (or files) and 1062 either may be used in reporting error messages. One way refers to a 1063 line number in a physical file; the other refers to a line number in a 1064 "logical" file. *Note Error and Warning Messages: Errors. 1065 1066 "Physical files" are those files named in the command line given to 1067 `as'. 1068 1069 "Logical files" are simply names declared explicitly by assembler 1070 directives; they bear no relation to physical files. Logical file 1071 names help error messages reflect the original source file, when `as' 1072 source is itself synthesized from other files. `as' understands the 1073 `#' directives emitted by the `gcc' preprocessor. See also *Note 1074 `.file': File. 1075 1076 1077 File: as.info, Node: Object, Next: Errors, Prev: Input Files, Up: Overview 1078 1079 1.6 Output (Object) File 1080 ======================== 1081 1082 Every time you run `as' it produces an output file, which is your 1083 assembly language program translated into numbers. This file is the 1084 object file. Its default name is `a.out'. You can give it another 1085 name by using the `-o' option. Conventionally, object file names end 1086 with `.o'. The default name is used for historical reasons: older 1087 assemblers were capable of assembling self-contained programs directly 1088 into a runnable program. (For some formats, this isn't currently 1089 possible, but it can be done for the `a.out' format.) 1090 1091 The object file is meant for input to the linker `ld'. It contains 1092 assembled program code, information to help `ld' integrate the 1093 assembled program into a runnable file, and (optionally) symbolic 1094 information for the debugger. 1095 1096 1097 File: as.info, Node: Errors, Prev: Object, Up: Overview 1098 1099 1.7 Error and Warning Messages 1100 ============================== 1101 1102 `as' may write warnings and error messages to the standard error file 1103 (usually your terminal). This should not happen when a compiler runs 1104 `as' automatically. Warnings report an assumption made so that `as' 1105 could keep assembling a flawed program; errors report a grave problem 1106 that stops the assembly. 1107 1108 Warning messages have the format 1109 1110 file_name:NNN:Warning Message Text 1111 1112 (where NNN is a line number). If a logical file name has been given 1113 (*note `.file': File.) it is used for the filename, otherwise the name 1114 of the current input file is used. If a logical line number was given 1115 (*note `.line': Line.) then it is used to calculate the number printed, 1116 otherwise the actual line in the current source file is printed. The 1117 message text is intended to be self explanatory (in the grand Unix 1118 tradition). 1119 1120 Error messages have the format 1121 file_name:NNN:FATAL:Error Message Text 1122 The file name and line number are derived as for warning messages. 1123 The actual message text may be rather less explanatory because many of 1124 them aren't supposed to happen. 1125 1126 1127 File: as.info, Node: Invoking, Next: Syntax, Prev: Overview, Up: Top 1128 1129 2 Command-Line Options 1130 ********************** 1131 1132 This chapter describes command-line options available in _all_ versions 1133 of the GNU assembler; see *Note Machine Dependencies::, for options 1134 specific to particular machine architectures. 1135 1136 If you are invoking `as' via the GNU C compiler, you can use the 1137 `-Wa' option to pass arguments through to the assembler. The assembler 1138 arguments must be separated from each other (and the `-Wa') by commas. 1139 For example: 1140 1141 gcc -c -g -O -Wa,-alh,-L file.c 1142 1143 This passes two options to the assembler: `-alh' (emit a listing to 1144 standard output with high-level and assembly source) and `-L' (retain 1145 local symbols in the symbol table). 1146 1147 Usually you do not need to use this `-Wa' mechanism, since many 1148 compiler command-line options are automatically passed to the assembler 1149 by the compiler. (You can call the GNU compiler driver with the `-v' 1150 option to see precisely what options it passes to each compilation 1151 pass, including the assembler.) 1152 1153 * Menu: 1154 1155 * a:: -a[cdghlns] enable listings 1156 * alternate:: --alternate enable alternate macro syntax 1157 * D:: -D for compatibility 1158 * f:: -f to work faster 1159 * I:: -I for .include search path 1160 1161 * K:: -K for difference tables 1162 1163 * L:: -L to retain local symbols 1164 * listing:: --listing-XXX to configure listing output 1165 * M:: -M or --mri to assemble in MRI compatibility mode 1166 * MD:: --MD for dependency tracking 1167 * o:: -o to name the object file 1168 * R:: -R to join data and text sections 1169 * statistics:: --statistics to see statistics about assembly 1170 * traditional-format:: --traditional-format for compatible output 1171 * v:: -v to announce version 1172 * W:: -W, --no-warn, --warn, --fatal-warnings to control warnings 1173 * Z:: -Z to make object file even after errors 1174 1175 1176 File: as.info, Node: a, Next: alternate, Up: Invoking 1177 1178 2.1 Enable Listings: `-a[cdghlns]' 1179 ================================== 1180 1181 These options enable listing output from the assembler. By itself, 1182 `-a' requests high-level, assembly, and symbols listing. You can use 1183 other letters to select specific options for the list: `-ah' requests a 1184 high-level language listing, `-al' requests an output-program assembly 1185 listing, and `-as' requests a symbol table listing. High-level 1186 listings require that a compiler debugging option like `-g' be used, 1187 and that assembly listings (`-al') be requested also. 1188 1189 Use the `-ag' option to print a first section with general assembly 1190 information, like as version, switches passed, or time stamp. 1191 1192 Use the `-ac' option to omit false conditionals from a listing. Any 1193 lines which are not assembled because of a false `.if' (or `.ifdef', or 1194 any other conditional), or a true `.if' followed by an `.else', will be 1195 omitted from the listing. 1196 1197 Use the `-ad' option to omit debugging directives from the listing. 1198 1199 Once you have specified one of these options, you can further control 1200 listing output and its appearance using the directives `.list', 1201 `.nolist', `.psize', `.eject', `.title', and `.sbttl'. The `-an' 1202 option turns off all forms processing. If you do not request listing 1203 output with one of the `-a' options, the listing-control directives 1204 have no effect. 1205 1206 The letters after `-a' may be combined into one option, _e.g._, 1207 `-aln'. 1208 1209 Note if the assembler source is coming from the standard input (e.g., 1210 because it is being created by `gcc' and the `-pipe' command line switch 1211 is being used) then the listing will not contain any comments or 1212 preprocessor directives. This is because the listing code buffers 1213 input source lines from stdin only after they have been preprocessed by 1214 the assembler. This reduces memory usage and makes the code more 1215 efficient. 1216 1217 1218 File: as.info, Node: alternate, Next: D, Prev: a, Up: Invoking 1219 1220 2.2 `--alternate' 1221 ================= 1222 1223 Begin in alternate macro mode, see *Note `.altmacro': Altmacro. 1224 1225 1226 File: as.info, Node: D, Next: f, Prev: alternate, Up: Invoking 1227 1228 2.3 `-D' 1229 ======== 1230 1231 This option has no effect whatsoever, but it is accepted to make it more 1232 likely that scripts written for other assemblers also work with `as'. 1233 1234 1235 File: as.info, Node: f, Next: I, Prev: D, Up: Invoking 1236 1237 2.4 Work Faster: `-f' 1238 ===================== 1239 1240 `-f' should only be used when assembling programs written by a 1241 (trusted) compiler. `-f' stops the assembler from doing whitespace and 1242 comment preprocessing on the input file(s) before assembling them. 1243 *Note Preprocessing: Preprocessing. 1244 1245 _Warning:_ if you use `-f' when the files actually need to be 1246 preprocessed (if they contain comments, for example), `as' does 1247 not work correctly. 1248 1249 1250 File: as.info, Node: I, Next: K, Prev: f, Up: Invoking 1251 1252 2.5 `.include' Search Path: `-I' PATH 1253 ===================================== 1254 1255 Use this option to add a PATH to the list of directories `as' searches 1256 for files specified in `.include' directives (*note `.include': 1257 Include.). You may use `-I' as many times as necessary to include a 1258 variety of paths. The current working directory is always searched 1259 first; after that, `as' searches any `-I' directories in the same order 1260 as they were specified (left to right) on the command line. 1261 1262 1263 File: as.info, Node: K, Next: L, Prev: I, Up: Invoking 1264 1265 2.6 Difference Tables: `-K' 1266 =========================== 1267 1268 `as' sometimes alters the code emitted for directives of the form 1269 `.word SYM1-SYM2'. *Note `.word': Word. You can use the `-K' option 1270 if you want a warning issued when this is done. 1271 1272 1273 File: as.info, Node: L, Next: listing, Prev: K, Up: Invoking 1274 1275 2.7 Include Local Symbols: `-L' 1276 =============================== 1277 1278 Symbols beginning with system-specific local label prefixes, typically 1279 `.L' for ELF systems or `L' for traditional a.out systems, are called 1280 "local symbols". *Note Symbol Names::. Normally you do not see such 1281 symbols when debugging, because they are intended for the use of 1282 programs (like compilers) that compose assembler programs, not for your 1283 notice. Normally both `as' and `ld' discard such symbols, so you do 1284 not normally debug with them. 1285 1286 This option tells `as' to retain those local symbols in the object 1287 file. Usually if you do this you also tell the linker `ld' to preserve 1288 those symbols. 1289 1290 1291 File: as.info, Node: listing, Next: M, Prev: L, Up: Invoking 1292 1293 2.8 Configuring listing output: `--listing' 1294 =========================================== 1295 1296 The listing feature of the assembler can be enabled via the command 1297 line switch `-a' (*note a::). This feature combines the input source 1298 file(s) with a hex dump of the corresponding locations in the output 1299 object file, and displays them as a listing file. The format of this 1300 listing can be controlled by directives inside the assembler source 1301 (i.e., `.list' (*note List::), `.title' (*note Title::), `.sbttl' 1302 (*note Sbttl::), `.psize' (*note Psize::), and `.eject' (*note Eject::) 1303 and also by the following switches: 1304 1305 `--listing-lhs-width=`number'' 1306 Sets the maximum width, in words, of the first line of the hex 1307 byte dump. This dump appears on the left hand side of the listing 1308 output. 1309 1310 `--listing-lhs-width2=`number'' 1311 Sets the maximum width, in words, of any further lines of the hex 1312 byte dump for a given input source line. If this value is not 1313 specified, it defaults to being the same as the value specified 1314 for `--listing-lhs-width'. If neither switch is used the default 1315 is to one. 1316 1317 `--listing-rhs-width=`number'' 1318 Sets the maximum width, in characters, of the source line that is 1319 displayed alongside the hex dump. The default value for this 1320 parameter is 100. The source line is displayed on the right hand 1321 side of the listing output. 1322 1323 `--listing-cont-lines=`number'' 1324 Sets the maximum number of continuation lines of hex dump that 1325 will be displayed for a given single line of source input. The 1326 default value is 4. 1327 1328 1329 File: as.info, Node: M, Next: MD, Prev: listing, Up: Invoking 1330 1331 2.9 Assemble in MRI Compatibility Mode: `-M' 1332 ============================================ 1333 1334 The `-M' or `--mri' option selects MRI compatibility mode. This 1335 changes the syntax and pseudo-op handling of `as' to make it compatible 1336 with the `ASM68K' or the `ASM960' (depending upon the configured 1337 target) assembler from Microtec Research. The exact nature of the MRI 1338 syntax will not be documented here; see the MRI manuals for more 1339 information. Note in particular that the handling of macros and macro 1340 arguments is somewhat different. The purpose of this option is to 1341 permit assembling existing MRI assembler code using `as'. 1342 1343 The MRI compatibility is not complete. Certain operations of the 1344 MRI assembler depend upon its object file format, and can not be 1345 supported using other object file formats. Supporting these would 1346 require enhancing each object file format individually. These are: 1347 1348 * global symbols in common section 1349 1350 The m68k MRI assembler supports common sections which are merged 1351 by the linker. Other object file formats do not support this. 1352 `as' handles common sections by treating them as a single common 1353 symbol. It permits local symbols to be defined within a common 1354 section, but it can not support global symbols, since it has no 1355 way to describe them. 1356 1357 * complex relocations 1358 1359 The MRI assemblers support relocations against a negated section 1360 address, and relocations which combine the start addresses of two 1361 or more sections. These are not support by other object file 1362 formats. 1363 1364 * `END' pseudo-op specifying start address 1365 1366 The MRI `END' pseudo-op permits the specification of a start 1367 address. This is not supported by other object file formats. The 1368 start address may instead be specified using the `-e' option to 1369 the linker, or in a linker script. 1370 1371 * `IDNT', `.ident' and `NAME' pseudo-ops 1372 1373 The MRI `IDNT', `.ident' and `NAME' pseudo-ops assign a module 1374 name to the output file. This is not supported by other object 1375 file formats. 1376 1377 * `ORG' pseudo-op 1378 1379 The m68k MRI `ORG' pseudo-op begins an absolute section at a given 1380 address. This differs from the usual `as' `.org' pseudo-op, which 1381 changes the location within the current section. Absolute 1382 sections are not supported by other object file formats. The 1383 address of a section may be assigned within a linker script. 1384 1385 There are some other features of the MRI assembler which are not 1386 supported by `as', typically either because they are difficult or 1387 because they seem of little consequence. Some of these may be 1388 supported in future releases. 1389 1390 * EBCDIC strings 1391 1392 EBCDIC strings are not supported. 1393 1394 * packed binary coded decimal 1395 1396 Packed binary coded decimal is not supported. This means that the 1397 `DC.P' and `DCB.P' pseudo-ops are not supported. 1398 1399 * `FEQU' pseudo-op 1400 1401 The m68k `FEQU' pseudo-op is not supported. 1402 1403 * `NOOBJ' pseudo-op 1404 1405 The m68k `NOOBJ' pseudo-op is not supported. 1406 1407 * `OPT' branch control options 1408 1409 The m68k `OPT' branch control options--`B', `BRS', `BRB', `BRL', 1410 and `BRW'--are ignored. `as' automatically relaxes all branches, 1411 whether forward or backward, to an appropriate size, so these 1412 options serve no purpose. 1413 1414 * `OPT' list control options 1415 1416 The following m68k `OPT' list control options are ignored: `C', 1417 `CEX', `CL', `CRE', `E', `G', `I', `M', `MEX', `MC', `MD', `X'. 1418 1419 * other `OPT' options 1420 1421 The following m68k `OPT' options are ignored: `NEST', `O', `OLD', 1422 `OP', `P', `PCO', `PCR', `PCS', `R'. 1423 1424 * `OPT' `D' option is default 1425 1426 The m68k `OPT' `D' option is the default, unlike the MRI assembler. 1427 `OPT NOD' may be used to turn it off. 1428 1429 * `XREF' pseudo-op. 1430 1431 The m68k `XREF' pseudo-op is ignored. 1432 1433 * `.debug' pseudo-op 1434 1435 The i960 `.debug' pseudo-op is not supported. 1436 1437 * `.extended' pseudo-op 1438 1439 The i960 `.extended' pseudo-op is not supported. 1440 1441 * `.list' pseudo-op. 1442 1443 The various options of the i960 `.list' pseudo-op are not 1444 supported. 1445 1446 * `.optimize' pseudo-op 1447 1448 The i960 `.optimize' pseudo-op is not supported. 1449 1450 * `.output' pseudo-op 1451 1452 The i960 `.output' pseudo-op is not supported. 1453 1454 * `.setreal' pseudo-op 1455 1456 The i960 `.setreal' pseudo-op is not supported. 1457 1458 1459 1460 File: as.info, Node: MD, Next: o, Prev: M, Up: Invoking 1461 1462 2.10 Dependency Tracking: `--MD' 1463 ================================ 1464 1465 `as' can generate a dependency file for the file it creates. This file 1466 consists of a single rule suitable for `make' describing the 1467 dependencies of the main source file. 1468 1469 The rule is written to the file named in its argument. 1470 1471 This feature is used in the automatic updating of makefiles. 1472 1473 1474 File: as.info, Node: o, Next: R, Prev: MD, Up: Invoking 1475 1476 2.11 Name the Object File: `-o' 1477 =============================== 1478 1479 There is always one object file output when you run `as'. By default 1480 it has the name `a.out' (or `b.out', for Intel 960 targets only). You 1481 use this option (which takes exactly one filename) to give the object 1482 file a different name. 1483 1484 Whatever the object file is called, `as' overwrites any existing 1485 file of the same name. 1486 1487 1488 File: as.info, Node: R, Next: statistics, Prev: o, Up: Invoking 1489 1490 2.12 Join Data and Text Sections: `-R' 1491 ====================================== 1492 1493 `-R' tells `as' to write the object file as if all data-section data 1494 lives in the text section. This is only done at the very last moment: 1495 your binary data are the same, but data section parts are relocated 1496 differently. The data section part of your object file is zero bytes 1497 long because all its bytes are appended to the text section. (*Note 1498 Sections and Relocation: Sections.) 1499 1500 When you specify `-R' it would be possible to generate shorter 1501 address displacements (because we do not have to cross between text and 1502 data section). We refrain from doing this simply for compatibility with 1503 older versions of `as'. In future, `-R' may work this way. 1504 1505 When `as' is configured for COFF or ELF output, this option is only 1506 useful if you use sections named `.text' and `.data'. 1507 1508 `-R' is not supported for any of the HPPA targets. Using `-R' 1509 generates a warning from `as'. 1510 1511 1512 File: as.info, Node: statistics, Next: traditional-format, Prev: R, Up: Invoking 1513 1514 2.13 Display Assembly Statistics: `--statistics' 1515 ================================================ 1516 1517 Use `--statistics' to display two statistics about the resources used by 1518 `as': the maximum amount of space allocated during the assembly (in 1519 bytes), and the total execution time taken for the assembly (in CPU 1520 seconds). 1521 1522 1523 File: as.info, Node: traditional-format, Next: v, Prev: statistics, Up: Invoking 1524 1525 2.14 Compatible Output: `--traditional-format' 1526 ============================================== 1527 1528 For some targets, the output of `as' is different in some ways from the 1529 output of some existing assembler. This switch requests `as' to use 1530 the traditional format instead. 1531 1532 For example, it disables the exception frame optimizations which 1533 `as' normally does by default on `gcc' output. 1534 1535 1536 File: as.info, Node: v, Next: W, Prev: traditional-format, Up: Invoking 1537 1538 2.15 Announce Version: `-v' 1539 =========================== 1540 1541 You can find out what version of as is running by including the option 1542 `-v' (which you can also spell as `-version') on the command line. 1543 1544 1545 File: as.info, Node: W, Next: Z, Prev: v, Up: Invoking 1546 1547 2.16 Control Warnings: `-W', `--warn', `--no-warn', `--fatal-warnings' 1548 ====================================================================== 1549 1550 `as' should never give a warning or error message when assembling 1551 compiler output. But programs written by people often cause `as' to 1552 give a warning that a particular assumption was made. All such 1553 warnings are directed to the standard error file. 1554 1555 If you use the `-W' and `--no-warn' options, no warnings are issued. 1556 This only affects the warning messages: it does not change any 1557 particular of how `as' assembles your file. Errors, which stop the 1558 assembly, are still reported. 1559 1560 If you use the `--fatal-warnings' option, `as' considers files that 1561 generate warnings to be in error. 1562 1563 You can switch these options off again by specifying `--warn', which 1564 causes warnings to be output as usual. 1565 1566 1567 File: as.info, Node: Z, Prev: W, Up: Invoking 1568 1569 2.17 Generate Object File in Spite of Errors: `-Z' 1570 ================================================== 1571 1572 After an error message, `as' normally produces no output. If for some 1573 reason you are interested in object file output even after `as' gives 1574 an error message on your program, use the `-Z' option. If there are 1575 any errors, `as' continues anyways, and writes an object file after a 1576 final warning message of the form `N errors, M warnings, generating bad 1577 object file.' 1578 1579 1580 File: as.info, Node: Syntax, Next: Sections, Prev: Invoking, Up: Top 1581 1582 3 Syntax 1583 ******** 1584 1585 This chapter describes the machine-independent syntax allowed in a 1586 source file. `as' syntax is similar to what many other assemblers use; 1587 it is inspired by the BSD 4.2 assembler, except that `as' does not 1588 assemble Vax bit-fields. 1589 1590 * Menu: 1591 1592 * Preprocessing:: Preprocessing 1593 * Whitespace:: Whitespace 1594 * Comments:: Comments 1595 * Symbol Intro:: Symbols 1596 * Statements:: Statements 1597 * Constants:: Constants 1598 1599 1600 File: as.info, Node: Preprocessing, Next: Whitespace, Up: Syntax 1601 1602 3.1 Preprocessing 1603 ================= 1604 1605 The `as' internal preprocessor: 1606 * adjusts and removes extra whitespace. It leaves one space or tab 1607 before the keywords on a line, and turns any other whitespace on 1608 the line into a single space. 1609 1610 * removes all comments, replacing them with a single space, or an 1611 appropriate number of newlines. 1612 1613 * converts character constants into the appropriate numeric values. 1614 1615 It does not do macro processing, include file handling, or anything 1616 else you may get from your C compiler's preprocessor. You can do 1617 include file processing with the `.include' directive (*note 1618 `.include': Include.). You can use the GNU C compiler driver to get 1619 other "CPP" style preprocessing by giving the input file a `.S' suffix. 1620 *Note Options Controlling the Kind of Output: (gcc.info)Overall 1621 Options. 1622 1623 Excess whitespace, comments, and character constants cannot be used 1624 in the portions of the input text that are not preprocessed. 1625 1626 If the first line of an input file is `#NO_APP' or if you use the 1627 `-f' option, whitespace and comments are not removed from the input 1628 file. Within an input file, you can ask for whitespace and comment 1629 removal in specific portions of the by putting a line that says `#APP' 1630 before the text that may contain whitespace or comments, and putting a 1631 line that says `#NO_APP' after this text. This feature is mainly 1632 intend to support `asm' statements in compilers whose output is 1633 otherwise free of comments and whitespace. 1634 1635 1636 File: as.info, Node: Whitespace, Next: Comments, Prev: Preprocessing, Up: Syntax 1637 1638 3.2 Whitespace 1639 ============== 1640 1641 "Whitespace" is one or more blanks or tabs, in any order. Whitespace 1642 is used to separate symbols, and to make programs neater for people to 1643 read. Unless within character constants (*note Character Constants: 1644 Characters.), any whitespace means the same as exactly one space. 1645 1646 1647 File: as.info, Node: Comments, Next: Symbol Intro, Prev: Whitespace, Up: Syntax 1648 1649 3.3 Comments 1650 ============ 1651 1652 There are two ways of rendering comments to `as'. In both cases the 1653 comment is equivalent to one space. 1654 1655 Anything from `/*' through the next `*/' is a comment. This means 1656 you may not nest these comments. 1657 1658 /* 1659 The only way to include a newline ('\n') in a comment 1660 is to use this sort of comment. 1661 */ 1662 1663 /* This sort of comment does not nest. */ 1664 1665 Anything from the "line comment" character to the next newline is 1666 considered a comment and is ignored. The line comment character is `;' 1667 on the ARC; `@' on the ARM; `;' for the H8/300 family; `;' for the HPPA; 1668 `#' on the i386 and x86-64; `#' on the i960; `;' for the PDP-11; `;' 1669 for picoJava; `#' for Motorola PowerPC; `!' for the Renesas / SuperH SH; 1670 `!' on the SPARC; `#' on the ip2k; `#' on the m32c; `#' on the m32r; 1671 `|' on the 680x0; `#' on the 68HC11 and 68HC12; `#' on the Vax; `;' for 1672 the Z80; `!' for the Z8000; `#' on the V850; `#' for Xtensa systems; 1673 see *Note Machine Dependencies::. 1674 1675 On some machines there are two different line comment characters. 1676 One character only begins a comment if it is the first non-whitespace 1677 character on a line, while the other always begins a comment. 1678 1679 The V850 assembler also supports a double dash as starting a comment 1680 that extends to the end of the line. 1681 1682 `--'; 1683 1684 To be compatible with past assemblers, lines that begin with `#' 1685 have a special interpretation. Following the `#' should be an absolute 1686 expression (*note Expressions::): the logical line number of the _next_ 1687 line. Then a string (*note Strings: Strings.) is allowed: if present 1688 it is a new logical file name. The rest of the line, if any, should be 1689 whitespace. 1690 1691 If the first non-whitespace characters on the line are not numeric, 1692 the line is ignored. (Just like a comment.) 1693 1694 # This is an ordinary comment. 1695 # 42-6 "new_file_name" # New logical file name 1696 # This is logical line # 36. 1697 This feature is deprecated, and may disappear from future versions 1698 of `as'. 1699 1700 1701 File: as.info, Node: Symbol Intro, Next: Statements, Prev: Comments, Up: Syntax 1702 1703 3.4 Symbols 1704 =========== 1705 1706 A "symbol" is one or more characters chosen from the set of all letters 1707 (both upper and lower case), digits and the three characters `_.$'. On 1708 most machines, you can also use `$' in symbol names; exceptions are 1709 noted in *Note Machine Dependencies::. No symbol may begin with a 1710 digit. Case is significant. There is no length limit: all characters 1711 are significant. Symbols are delimited by characters not in that set, 1712 or by the beginning of a file (since the source program must end with a 1713 newline, the end of a file is not a possible symbol delimiter). *Note 1714 Symbols::. 1715 1716 1717 File: as.info, Node: Statements, Next: Constants, Prev: Symbol Intro, Up: Syntax 1718 1719 3.5 Statements 1720 ============== 1721 1722 A "statement" ends at a newline character (`\n') or line separator 1723 character. (The line separator is usually `;', unless this conflicts 1724 with the comment character; see *Note Machine Dependencies::.) The 1725 newline or separator character is considered part of the preceding 1726 statement. Newlines and separators within character constants are an 1727 exception: they do not end statements. 1728 1729 It is an error to end any statement with end-of-file: the last 1730 character of any input file should be a newline. 1731 1732 An empty statement is allowed, and may include whitespace. It is 1733 ignored. 1734 1735 A statement begins with zero or more labels, optionally followed by a 1736 key symbol which determines what kind of statement it is. The key 1737 symbol determines the syntax of the rest of the statement. If the 1738 symbol begins with a dot `.' then the statement is an assembler 1739 directive: typically valid for any computer. If the symbol begins with 1740 a letter the statement is an assembly language "instruction": it 1741 assembles into a machine language instruction. Different versions of 1742 `as' for different computers recognize different instructions. In 1743 fact, the same symbol may represent a different instruction in a 1744 different computer's assembly language. 1745 1746 A label is a symbol immediately followed by a colon (`:'). 1747 Whitespace before a label or after a colon is permitted, but you may not 1748 have whitespace between a label's symbol and its colon. *Note Labels::. 1749 1750 For HPPA targets, labels need not be immediately followed by a 1751 colon, but the definition of a label must begin in column zero. This 1752 also implies that only one label may be defined on each line. 1753 1754 label: .directive followed by something 1755 another_label: # This is an empty statement. 1756 instruction operand_1, operand_2, ... 1757 1758 1759 File: as.info, Node: Constants, Prev: Statements, Up: Syntax 1760 1761 3.6 Constants 1762 ============= 1763 1764 A constant is a number, written so that its value is known by 1765 inspection, without knowing any context. Like this: 1766 .byte 74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value. 1767 .ascii "Ring the bell\7" # A string constant. 1768 .octa 0x123456789abcdef0123456789ABCDEF0 # A bignum. 1769 .float 0f-314159265358979323846264338327\ 1770 95028841971.693993751E-40 # - pi, a flonum. 1771 1772 * Menu: 1773 1774 * Characters:: Character Constants 1775 * Numbers:: Number Constants 1776 1777 1778 File: as.info, Node: Characters, Next: Numbers, Up: Constants 1779 1780 3.6.1 Character Constants 1781 ------------------------- 1782 1783 There are two kinds of character constants. A "character" stands for 1784 one character in one byte and its value may be used in numeric 1785 expressions. String constants (properly called string _literals_) are 1786 potentially many bytes and their values may not be used in arithmetic 1787 expressions. 1788 1789 * Menu: 1790 1791 * Strings:: Strings 1792 * Chars:: Characters 1793 1794 1795 File: as.info, Node: Strings, Next: Chars, Up: Characters 1796 1797 3.6.1.1 Strings 1798 ............... 1799 1800 A "string" is written between double-quotes. It may contain 1801 double-quotes or null characters. The way to get special characters 1802 into a string is to "escape" these characters: precede them with a 1803 backslash `\' character. For example `\\' represents one backslash: 1804 the first `\' is an escape which tells `as' to interpret the second 1805 character literally as a backslash (which prevents `as' from 1806 recognizing the second `\' as an escape character). The complete list 1807 of escapes follows. 1808 1809 `\b' 1810 Mnemonic for backspace; for ASCII this is octal code 010. 1811 1812 `\f' 1813 Mnemonic for FormFeed; for ASCII this is octal code 014. 1814 1815 `\n' 1816 Mnemonic for newline; for ASCII this is octal code 012. 1817 1818 `\r' 1819 Mnemonic for carriage-Return; for ASCII this is octal code 015. 1820 1821 `\t' 1822 Mnemonic for horizontal Tab; for ASCII this is octal code 011. 1823 1824 `\ DIGIT DIGIT DIGIT' 1825 An octal character code. The numeric code is 3 octal digits. For 1826 compatibility with other Unix systems, 8 and 9 are accepted as 1827 digits: for example, `\008' has the value 010, and `\009' the 1828 value 011. 1829 1830 `\`x' HEX-DIGITS...' 1831 A hex character code. All trailing hex digits are combined. 1832 Either upper or lower case `x' works. 1833 1834 `\\' 1835 Represents one `\' character. 1836 1837 `\"' 1838 Represents one `"' character. Needed in strings to represent this 1839 character, because an unescaped `"' would end the string. 1840 1841 `\ ANYTHING-ELSE' 1842 Any other character when escaped by `\' gives a warning, but 1843 assembles as if the `\' was not present. The idea is that if you 1844 used an escape sequence you clearly didn't want the literal 1845 interpretation of the following character. However `as' has no 1846 other interpretation, so `as' knows it is giving you the wrong 1847 code and warns you of the fact. 1848 1849 Which characters are escapable, and what those escapes represent, 1850 varies widely among assemblers. The current set is what we think the 1851 BSD 4.2 assembler recognizes, and is a subset of what most C compilers 1852 recognize. If you are in doubt, do not use an escape sequence. 1853 1854 1855 File: as.info, Node: Chars, Prev: Strings, Up: Characters 1856 1857 3.6.1.2 Characters 1858 .................. 1859 1860 A single character may be written as a single quote immediately 1861 followed by that character. The same escapes apply to characters as to 1862 strings. So if you want to write the character backslash, you must 1863 write `'\\' where the first `\' escapes the second `\'. As you can 1864 see, the quote is an acute accent, not a grave accent. A newline 1865 immediately following an acute accent is taken as a literal character 1866 and does not count as the end of a statement. The value of a character 1867 constant in a numeric expression is the machine's byte-wide code for 1868 that character. `as' assumes your character code is ASCII: `'A' means 1869 65, `'B' means 66, and so on. 1870 1871 1872 File: as.info, Node: Numbers, Prev: Characters, Up: Constants 1873 1874 3.6.2 Number Constants 1875 ---------------------- 1876 1877 `as' distinguishes three kinds of numbers according to how they are 1878 stored in the target machine. _Integers_ are numbers that would fit 1879 into an `int' in the C language. _Bignums_ are integers, but they are 1880 stored in more than 32 bits. _Flonums_ are floating point numbers, 1881 described below. 1882 1883 * Menu: 1884 1885 * Integers:: Integers 1886 * Bignums:: Bignums 1887 * Flonums:: Flonums 1888 1889 1890 File: as.info, Node: Integers, Next: Bignums, Up: Numbers 1891 1892 3.6.2.1 Integers 1893 ................ 1894 1895 A binary integer is `0b' or `0B' followed by zero or more of the binary 1896 digits `01'. 1897 1898 An octal integer is `0' followed by zero or more of the octal digits 1899 (`01234567'). 1900 1901 A decimal integer starts with a non-zero digit followed by zero or 1902 more digits (`0123456789'). 1903 1904 A hexadecimal integer is `0x' or `0X' followed by one or more 1905 hexadecimal digits chosen from `0123456789abcdefABCDEF'. 1906 1907 Integers have the usual values. To denote a negative integer, use 1908 the prefix operator `-' discussed under expressions (*note Prefix 1909 Operators: Prefix Ops.). 1910 1911 1912 File: as.info, Node: Bignums, Next: Flonums, Prev: Integers, Up: Numbers 1913 1914 3.6.2.2 Bignums 1915 ............... 1916 1917 A "bignum" has the same syntax and semantics as an integer except that 1918 the number (or its negative) takes more than 32 bits to represent in 1919 binary. The distinction is made because in some places integers are 1920 permitted while bignums are not. 1921 1922 1923 File: as.info, Node: Flonums, Prev: Bignums, Up: Numbers 1924 1925 3.6.2.3 Flonums 1926 ............... 1927 1928 A "flonum" represents a floating point number. The translation is 1929 indirect: a decimal floating point number from the text is converted by 1930 `as' to a generic binary floating point number of more than sufficient 1931 precision. This generic floating point number is converted to a 1932 particular computer's floating point format (or formats) by a portion 1933 of `as' specialized to that computer. 1934 1935 A flonum is written by writing (in order) 1936 * The digit `0'. (`0' is optional on the HPPA.) 1937 1938 * A letter, to tell `as' the rest of the number is a flonum. `e' is 1939 recommended. Case is not important. 1940 1941 On the H8/300, Renesas / SuperH SH, and AMD 29K architectures, the 1942 letter must be one of the letters `DFPRSX' (in upper or lower 1943 case). 1944 1945 On the ARC, the letter must be one of the letters `DFRS' (in upper 1946 or lower case). 1947 1948 On the Intel 960 architecture, the letter must be one of the 1949 letters `DFT' (in upper or lower case). 1950 1951 On the HPPA architecture, the letter must be `E' (upper case only). 1952 1953 * An optional sign: either `+' or `-'. 1954 1955 * An optional "integer part": zero or more decimal digits. 1956 1957 * An optional "fractional part": `.' followed by zero or more 1958 decimal digits. 1959 1960 * An optional exponent, consisting of: 1961 1962 * An `E' or `e'. 1963 1964 * Optional sign: either `+' or `-'. 1965 1966 * One or more decimal digits. 1967 1968 1969 At least one of the integer part or the fractional part must be 1970 present. The floating point number has the usual base-10 value. 1971 1972 `as' does all processing using integers. Flonums are computed 1973 independently of any floating point hardware in the computer running 1974 `as'. 1975 1976 1977 File: as.info, Node: Sections, Next: Symbols, Prev: Syntax, Up: Top 1978 1979 4 Sections and Relocation 1980 ************************* 1981 1982 * Menu: 1983 1984 * Secs Background:: Background 1985 * Ld Sections:: Linker Sections 1986 * As Sections:: Assembler Internal Sections 1987 * Sub-Sections:: Sub-Sections 1988 * bss:: bss Section 1989 1990 1991 File: as.info, Node: Secs Background, Next: Ld Sections, Up: Sections 1992 1993 4.1 Background 1994 ============== 1995 1996 Roughly, a section is a range of addresses, with no gaps; all data "in" 1997 those addresses is treated the same for some particular purpose. For 1998 example there may be a "read only" section. 1999 2000 The linker `ld' reads many object files (partial programs) and 2001 combines their contents to form a runnable program. When `as' emits an 2002 object file, the partial program is assumed to start at address 0. 2003 `ld' assigns the final addresses for the partial program, so that 2004 different partial programs do not overlap. This is actually an 2005 oversimplification, but it suffices to explain how `as' uses sections. 2006 2007 `ld' moves blocks of bytes of your program to their run-time 2008 addresses. These blocks slide to their run-time addresses as rigid 2009 units; their length does not change and neither does the order of bytes 2010 within them. Such a rigid unit is called a _section_. Assigning 2011 run-time addresses to sections is called "relocation". It includes the 2012 task of adjusting mentions of object-file addresses so they refer to 2013 the proper run-time addresses. For the H8/300, and for the Renesas / 2014 SuperH SH, `as' pads sections if needed to ensure they end on a word 2015 (sixteen bit) boundary. 2016 2017 An object file written by `as' has at least three sections, any of 2018 which may be empty. These are named "text", "data" and "bss" sections. 2019 2020 When it generates COFF or ELF output, `as' can also generate 2021 whatever other named sections you specify using the `.section' 2022 directive (*note `.section': Section.). If you do not use any 2023 directives that place output in the `.text' or `.data' sections, these 2024 sections still exist, but are empty. 2025 2026 When `as' generates SOM or ELF output for the HPPA, `as' can also 2027 generate whatever other named sections you specify using the `.space' 2028 and `.subspace' directives. See `HP9000 Series 800 Assembly Language 2029 Reference Manual' (HP 92432-90001) for details on the `.space' and 2030 `.subspace' assembler directives. 2031 2032 Additionally, `as' uses different names for the standard text, data, 2033 and bss sections when generating SOM output. Program text is placed 2034 into the `$CODE$' section, data into `$DATA$', and BSS into `$BSS$'. 2035 2036 Within the object file, the text section starts at address `0', the 2037 data section follows, and the bss section follows the data section. 2038 2039 When generating either SOM or ELF output files on the HPPA, the text 2040 section starts at address `0', the data section at address `0x4000000', 2041 and the bss section follows the data section. 2042 2043 To let `ld' know which data changes when the sections are relocated, 2044 and how to change that data, `as' also writes to the object file 2045 details of the relocation needed. To perform relocation `ld' must 2046 know, each time an address in the object file is mentioned: 2047 * Where in the object file is the beginning of this reference to an 2048 address? 2049 2050 * How long (in bytes) is this reference? 2051 2052 * Which section does the address refer to? What is the numeric 2053 value of 2054 (ADDRESS) - (START-ADDRESS OF SECTION)? 2055 2056 * Is the reference to an address "Program-Counter relative"? 2057 2058 In fact, every address `as' ever uses is expressed as 2059 (SECTION) + (OFFSET INTO SECTION) 2060 Further, most expressions `as' computes have this section-relative 2061 nature. (For some object formats, such as SOM for the HPPA, some 2062 expressions are symbol-relative instead.) 2063 2064 In this manual we use the notation {SECNAME N} to mean "offset N 2065 into section SECNAME." 2066 2067 Apart from text, data and bss sections you need to know about the 2068 "absolute" section. When `ld' mixes partial programs, addresses in the 2069 absolute section remain unchanged. For example, address `{absolute 0}' 2070 is "relocated" to run-time address 0 by `ld'. Although the linker 2071 never arranges two partial programs' data sections with overlapping 2072 addresses after linking, _by definition_ their absolute sections must 2073 overlap. Address `{absolute 239}' in one part of a program is always 2074 the same address when the program is running as address `{absolute 2075 239}' in any other part of the program. 2076 2077 The idea of sections is extended to the "undefined" section. Any 2078 address whose section is unknown at assembly time is by definition 2079 rendered {undefined U}--where U is filled in later. Since numbers are 2080 always defined, the only way to generate an undefined address is to 2081 mention an undefined symbol. A reference to a named common block would 2082 be such a symbol: its value is unknown at assembly time so it has 2083 section _undefined_. 2084 2085 By analogy the word _section_ is used to describe groups of sections 2086 in the linked program. `ld' puts all partial programs' text sections 2087 in contiguous addresses in the linked program. It is customary to 2088 refer to the _text section_ of a program, meaning all the addresses of 2089 all partial programs' text sections. Likewise for data and bss 2090 sections. 2091 2092 Some sections are manipulated by `ld'; others are invented for use 2093 of `as' and have no meaning except during assembly. 2094 2095 2096 File: as.info, Node: Ld Sections, Next: As Sections, Prev: Secs Background, Up: Sections 2097 2098 4.2 Linker Sections 2099 =================== 2100 2101 `ld' deals with just four kinds of sections, summarized below. 2102 2103 *named sections* 2104 *text section* 2105 *data section* 2106 These sections hold your program. `as' and `ld' treat them as 2107 separate but equal sections. Anything you can say of one section 2108 is true of another. When the program is running, however, it is 2109 customary for the text section to be unalterable. The text 2110 section is often shared among processes: it contains instructions, 2111 constants and the like. The data section of a running program is 2112 usually alterable: for example, C variables would be stored in the 2113 data section. 2114 2115 *bss section* 2116 This section contains zeroed bytes when your program begins 2117 running. It is used to hold uninitialized variables or common 2118 storage. The length of each partial program's bss section is 2119 important, but because it starts out containing zeroed bytes there 2120 is no need to store explicit zero bytes in the object file. The 2121 bss section was invented to eliminate those explicit zeros from 2122 object files. 2123 2124 *absolute section* 2125 Address 0 of this section is always "relocated" to runtime address 2126 0. This is useful if you want to refer to an address that `ld' 2127 must not change when relocating. In this sense we speak of 2128 absolute addresses being "unrelocatable": they do not change 2129 during relocation. 2130 2131 *undefined section* 2132 This "section" is a catch-all for address references to objects 2133 not in the preceding sections. 2134 2135 An idealized example of three relocatable sections follows. The 2136 example uses the traditional section names `.text' and `.data'. Memory 2137 addresses are on the horizontal axis. 2138 2139 +-----+----+--+ 2140 partial program # 1: |ttttt|dddd|00| 2141 +-----+----+--+ 2142 2143 text data bss 2144 seg. seg. seg. 2145 2146 +---+---+---+ 2147 partial program # 2: |TTT|DDD|000| 2148 +---+---+---+ 2149 2150 +--+---+-----+--+----+---+-----+~~ 2151 linked program: | |TTT|ttttt| |dddd|DDD|00000| 2152 +--+---+-----+--+----+---+-----+~~ 2153 2154 addresses: 0 ... 2155 2156 2157 File: as.info, Node: As Sections, Next: Sub-Sections, Prev: Ld Sections, Up: Sections 2158 2159 4.3 Assembler Internal Sections 2160 =============================== 2161 2162 These sections are meant only for the internal use of `as'. They have 2163 no meaning at run-time. You do not really need to know about these 2164 sections for most purposes; but they can be mentioned in `as' warning 2165 messages, so it might be helpful to have an idea of their meanings to 2166 `as'. These sections are used to permit the value of every expression 2167 in your assembly language program to be a section-relative address. 2168 2169 ASSEMBLER-INTERNAL-LOGIC-ERROR! 2170 An internal assembler logic error has been found. This means 2171 there is a bug in the assembler. 2172 2173 expr section 2174 The assembler stores complex expression internally as combinations 2175 of symbols. When it needs to represent an expression as a symbol, 2176 it puts it in the expr section. 2177 2178 2179 File: as.info, Node: Sub-Sections, Next: bss, Prev: As Sections, Up: Sections 2180 2181 4.4 Sub-Sections 2182 ================ 2183 2184 Assembled bytes conventionally fall into two sections: text and data. 2185 You may have separate groups of data in named sections that you want to 2186 end up near to each other in the object file, even though they are not 2187 contiguous in the assembler source. `as' allows you to use 2188 "subsections" for this purpose. Within each section, there can be 2189 numbered subsections with values from 0 to 8192. Objects assembled 2190 into the same subsection go into the object file together with other 2191 objects in the same subsection. For example, a compiler might want to 2192 store constants in the text section, but might not want to have them 2193 interspersed with the program being assembled. In this case, the 2194 compiler could issue a `.text 0' before each section of code being 2195 output, and a `.text 1' before each group of constants being output. 2196 2197 Subsections are optional. If you do not use subsections, everything 2198 goes in subsection number zero. 2199 2200 Each subsection is zero-padded up to a multiple of four bytes. 2201 (Subsections may be padded a different amount on different flavors of 2202 `as'.) 2203 2204 Subsections appear in your object file in numeric order, lowest 2205 numbered to highest. (All this to be compatible with other people's 2206 assemblers.) The object file contains no representation of 2207 subsections; `ld' and other programs that manipulate object files see 2208 no trace of them. They just see all your text subsections as a text 2209 section, and all your data subsections as a data section. 2210 2211 To specify which subsection you want subsequent statements assembled 2212 into, use a numeric argument to specify it, in a `.text EXPRESSION' or 2213 a `.data EXPRESSION' statement. When generating COFF output, you can 2214 also use an extra subsection argument with arbitrary named sections: 2215 `.section NAME, EXPRESSION'. When generating ELF output, you can also 2216 use the `.subsection' directive (*note SubSection::) to specify a 2217 subsection: `.subsection EXPRESSION'. EXPRESSION should be an absolute 2218 expression (*note Expressions::). If you just say `.text' then `.text 2219 0' is assumed. Likewise `.data' means `.data 0'. Assembly begins in 2220 `text 0'. For instance: 2221 .text 0 # The default subsection is text 0 anyway. 2222 .ascii "This lives in the first text subsection. *" 2223 .text 1 2224 .ascii "But this lives in the second text subsection." 2225 .data 0 2226 .ascii "This lives in the data section," 2227 .ascii "in the first data subsection." 2228 .text 0 2229 .ascii "This lives in the first text section," 2230 .ascii "immediately following the asterisk (*)." 2231 2232 Each section has a "location counter" incremented by one for every 2233 byte assembled into that section. Because subsections are merely a 2234 convenience restricted to `as' there is no concept of a subsection 2235 location counter. There is no way to directly manipulate a location 2236 counter--but the `.align' directive changes it, and any label 2237 definition captures its current value. The location counter of the 2238 section where statements are being assembled is said to be the "active" 2239 location counter. 2240 2241 2242 File: as.info, Node: bss, Prev: Sub-Sections, Up: Sections 2243 2244 4.5 bss Section 2245 =============== 2246 2247 The bss section is used for local common variable storage. You may 2248 allocate address space in the bss section, but you may not dictate data 2249 to load into it before your program executes. When your program starts 2250 running, all the contents of the bss section are zeroed bytes. 2251 2252 The `.lcomm' pseudo-op defines a symbol in the bss section; see 2253 *Note `.lcomm': Lcomm. 2254 2255 The `.comm' pseudo-op may be used to declare a common symbol, which 2256 is another form of uninitialized symbol; see *Note `.comm': Comm. 2257 2258 When assembling for a target which supports multiple sections, such 2259 as ELF or COFF, you may switch into the `.bss' section and define 2260 symbols as usual; see *Note `.section': Section. You may only assemble 2261 zero values into the section. Typically the section will only contain 2262 symbol definitions and `.skip' directives (*note `.skip': Skip.). 2263 2264 2265 File: as.info, Node: Symbols, Next: Expressions, Prev: Sections, Up: Top 2266 2267 5 Symbols 2268 ********* 2269 2270 Symbols are a central concept: the programmer uses symbols to name 2271 things, the linker uses symbols to link, and the debugger uses symbols 2272 to debug. 2273 2274 _Warning:_ `as' does not place symbols in the object file in the 2275 same order they were declared. This may break some debuggers. 2276 2277 * Menu: 2278 2279 * Labels:: Labels 2280 * Setting Symbols:: Giving Symbols Other Values 2281 * Symbol Names:: Symbol Names 2282 * Dot:: The Special Dot Symbol 2283 * Symbol Attributes:: Symbol Attributes 2284 2285 2286 File: as.info, Node: Labels, Next: Setting Symbols, Up: Symbols 2287 2288 5.1 Labels 2289 ========== 2290 2291 A "label" is written as a symbol immediately followed by a colon `:'. 2292 The symbol then represents the current value of the active location 2293 counter, and is, for example, a suitable instruction operand. You are 2294 warned if you use the same symbol to represent two different locations: 2295 the first definition overrides any other definitions. 2296 2297 On the HPPA, the usual form for a label need not be immediately 2298 followed by a colon, but instead must start in column zero. Only one 2299 label may be defined on a single line. To work around this, the HPPA 2300 version of `as' also provides a special directive `.label' for defining 2301 labels more flexibly. 2302 2303 2304 File: as.info, Node: Setting Symbols, Next: Symbol Names, Prev: Labels, Up: Symbols 2305 2306 5.2 Giving Symbols Other Values 2307 =============================== 2308 2309 A symbol can be given an arbitrary value by writing a symbol, followed 2310 by an equals sign `=', followed by an expression (*note Expressions::). 2311 This is equivalent to using the `.set' directive. *Note `.set': Set. 2312 In the same way, using a double equals sign `='`=' here represents an 2313 equivalent of the `.eqv' directive. *Note `.eqv': Eqv. 2314 2315 2316 File: as.info, Node: Symbol Names, Next: Dot, Prev: Setting Symbols, Up: Symbols 2317 2318 5.3 Symbol Names 2319 ================ 2320 2321 Symbol names begin with a letter or with one of `._'. On most 2322 machines, you can also use `$' in symbol names; exceptions are noted in 2323 *Note Machine Dependencies::. That character may be followed by any 2324 string of digits, letters, dollar signs (unless otherwise noted for a 2325 particular target machine), and underscores. 2326 2327 Case of letters is significant: `foo' is a different symbol name than 2328 `Foo'. 2329 2330 Each symbol has exactly one name. Each name in an assembly language 2331 program refers to exactly one symbol. You may use that symbol name any 2332 number of times in a program. 2333 2334 Local Symbol Names 2335 ------------------ 2336 2337 A local symbol is any symbol beginning with certain local label 2338 prefixes. By default, the local label prefix is `.L' for ELF systems or 2339 `L' for traditional a.out systems, but each target may have its own set 2340 of local label prefixes. On the HPPA local symbols begin with `L$'. 2341 2342 Local symbols are defined and used within the assembler, but they are 2343 normally not saved in object files. Thus, they are not visible when 2344 debugging. You may use the `-L' option (*note Include Local Symbols: 2345 `-L': L.) to retain the local symbols in the object files. 2346 2347 Local Labels 2348 ------------ 2349 2350 Local labels help compilers and programmers use names temporarily. 2351 They create symbols which are guaranteed to be unique over the entire 2352 scope of the input source code and which can be referred to by a simple 2353 notation. To define a local label, write a label of the form `N:' 2354 (where N represents any positive integer). To refer to the most recent 2355 previous definition of that label write `Nb', using the same number as 2356 when you defined the label. To refer to the next definition of a local 2357 label, write `Nf'--the `b' stands for "backwards" and the `f' stands 2358 for "forwards". 2359 2360 There is no restriction on how you can use these labels, and you can 2361 reuse them too. So that it is possible to repeatedly define the same 2362 local label (using the same number `N'), although you can only refer to 2363 the most recently defined local label of that number (for a backwards 2364 reference) or the next definition of a specific local label for a 2365 forward reference. It is also worth noting that the first 10 local 2366 labels (`0:'...`9:') are implemented in a slightly more efficient 2367 manner than the others. 2368 2369 Here is an example: 2370 2371 1: branch 1f 2372 2: branch 1b 2373 1: branch 2f 2374 2: branch 1b 2375 2376 Which is the equivalent of: 2377 2378 label_1: branch label_3 2379 label_2: branch label_1 2380 label_3: branch label_4 2381 label_4: branch label_3 2382 2383 Local label names are only a notational device. They are immediately 2384 transformed into more conventional symbol names before the assembler 2385 uses them. The symbol names are stored in the symbol table, appear in 2386 error messages, and are optionally emitted to the object file. The 2387 names are constructed using these parts: 2388 2389 `_local label prefix_' 2390 All local symbols begin with the system-specific local label 2391 prefix. Normally both `as' and `ld' forget symbols that start 2392 with the local label prefix. These labels are used for symbols 2393 you are never intended to see. If you use the `-L' option then 2394 `as' retains these symbols in the object file. If you also 2395 instruct `ld' to retain these symbols, you may use them in 2396 debugging. 2397 2398 `NUMBER' 2399 This is the number that was used in the local label definition. 2400 So if the label is written `55:' then the number is `55'. 2401 2402 `C-B' 2403 This unusual character is included so you do not accidentally 2404 invent a symbol of the same name. The character has ASCII value 2405 of `\002' (control-B). 2406 2407 `_ordinal number_' 2408 This is a serial number to keep the labels distinct. The first 2409 definition of `0:' gets the number `1'. The 15th definition of 2410 `0:' gets the number `15', and so on. Likewise the first 2411 definition of `1:' gets the number `1' and its 15th definition 2412 gets `15' as well. 2413 2414 So for example, the first `1:' may be named `.L1C-B1', and the 44th 2415 `3:' may be named `.L3C-B44'. 2416 2417 Dollar Local Labels 2418 ------------------- 2419 2420 `as' also supports an even more local form of local labels called 2421 dollar labels. These labels go out of scope (i.e., they become 2422 undefined) as soon as a non-local label is defined. Thus they remain 2423 valid for only a small region of the input source code. Normal local 2424 labels, by contrast, remain in scope for the entire file, or until they 2425 are redefined by another occurrence of the same local label. 2426 2427 Dollar labels are defined in exactly the same way as ordinary local 2428 labels, except that instead of being terminated by a colon, they are 2429 terminated by a dollar sign, e.g., `55$'. 2430 2431 They can also be distinguished from ordinary local labels by their 2432 transformed names which use ASCII character `\001' (control-A) as the 2433 magic character to distinguish them from ordinary labels. For example, 2434 the fifth definition of `6$' may be named `.L6C-A5'. 2435 2436 2437 File: as.info, Node: Dot, Next: Symbol Attributes, Prev: Symbol Names, Up: Symbols 2438 2439 5.4 The Special Dot Symbol 2440 ========================== 2441 2442 The special symbol `.' refers to the current address that `as' is 2443 assembling into. Thus, the expression `melvin: .long .' defines 2444 `melvin' to contain its own address. Assigning a value to `.' is 2445 treated the same as a `.org' directive. Thus, the expression `.=.+4' 2446 is the same as saying `.space 4'. 2447 2448 2449 File: as.info, Node: Symbol Attributes, Prev: Dot, Up: Symbols 2450 2451 5.5 Symbol Attributes 2452 ===================== 2453 2454 Every symbol has, as well as its name, the attributes "Value" and 2455 "Type". Depending on output format, symbols can also have auxiliary 2456 attributes. 2457 2458 If you use a symbol without defining it, `as' assumes zero for all 2459 these attributes, and probably won't warn you. This makes the symbol 2460 an externally defined symbol, which is generally what you would want. 2461 2462 * Menu: 2463 2464 * Symbol Value:: Value 2465 * Symbol Type:: Type 2466 2467 2468 * a.out Symbols:: Symbol Attributes: `a.out' 2469 2470 * COFF Symbols:: Symbol Attributes for COFF 2471 2472 * SOM Symbols:: Symbol Attributes for SOM 2473 2474 2475 File: as.info, Node: Symbol Value, Next: Symbol Type, Up: Symbol Attributes 2476 2477 5.5.1 Value 2478 ----------- 2479 2480 The value of a symbol is (usually) 32 bits. For a symbol which labels a 2481 location in the text, data, bss or absolute sections the value is the 2482 number of addresses from the start of that section to the label. 2483 Naturally for text, data and bss sections the value of a symbol changes 2484 as `ld' changes section base addresses during linking. Absolute 2485 symbols' values do not change during linking: that is why they are 2486 called absolute. 2487 2488 The value of an undefined symbol is treated in a special way. If it 2489 is 0 then the symbol is not defined in this assembler source file, and 2490 `ld' tries to determine its value from other files linked into the same 2491 program. You make this kind of symbol simply by mentioning a symbol 2492 name without defining it. A non-zero value represents a `.comm' common 2493 declaration. The value is how much common storage to reserve, in bytes 2494 (addresses). The symbol refers to the first address of the allocated 2495 storage. 2496 2497 2498 File: as.info, Node: Symbol Type, Next: a.out Symbols, Prev: Symbol Value, Up: Symbol Attributes 2499 2500 5.5.2 Type 2501 ---------- 2502 2503 The type attribute of a symbol contains relocation (section) 2504 information, any flag settings indicating that a symbol is external, and 2505 (optionally), other information for linkers and debuggers. The exact 2506 format depends on the object-code output format in use. 2507 2508 2509 File: as.info, Node: a.out Symbols, Next: COFF Symbols, Prev: Symbol Type, Up: Symbol Attributes 2510 2511 5.5.3 Symbol Attributes: `a.out' 2512 -------------------------------- 2513 2514 * Menu: 2515 2516 * Symbol Desc:: Descriptor 2517 * Symbol Other:: Other 2518 2519 2520 File: as.info, Node: Symbol Desc, Next: Symbol Other, Up: a.out Symbols 2521 2522 5.5.3.1 Descriptor 2523 .................. 2524 2525 This is an arbitrary 16-bit value. You may establish a symbol's 2526 descriptor value by using a `.desc' statement (*note `.desc': Desc.). 2527 A descriptor value means nothing to `as'. 2528 2529 2530 File: as.info, Node: Symbol Other, Prev: Symbol Desc, Up: a.out Symbols 2531 2532 5.5.3.2 Other 2533 ............. 2534 2535 This is an arbitrary 8-bit value. It means nothing to `as'. 2536 2537 2538 File: as.info, Node: COFF Symbols, Next: SOM Symbols, Prev: a.out Symbols, Up: Symbol Attributes 2539 2540 5.5.4 Symbol Attributes for COFF 2541 -------------------------------- 2542 2543 The COFF format supports a multitude of auxiliary symbol attributes; 2544 like the primary symbol attributes, they are set between `.def' and 2545 `.endef' directives. 2546 2547 5.5.4.1 Primary Attributes 2548 .......................... 2549 2550 The symbol name is set with `.def'; the value and type, respectively, 2551 with `.val' and `.type'. 2552 2553 5.5.4.2 Auxiliary Attributes 2554 ............................ 2555 2556 The `as' directives `.dim', `.line', `.scl', `.size', `.tag', and 2557 `.weak' can generate auxiliary symbol table information for COFF. 2558 2559 2560 File: as.info, Node: SOM Symbols, Prev: COFF Symbols, Up: Symbol Attributes 2561 2562 5.5.5 Symbol Attributes for SOM 2563 ------------------------------- 2564 2565 The SOM format for the HPPA supports a multitude of symbol attributes 2566 set with the `.EXPORT' and `.IMPORT' directives. 2567 2568 The attributes are described in `HP9000 Series 800 Assembly Language 2569 Reference Manual' (HP 92432-90001) under the `IMPORT' and `EXPORT' 2570 assembler directive documentation. 2571 2572 2573 File: as.info, Node: Expressions, Next: Pseudo Ops, Prev: Symbols, Up: Top 2574 2575 6 Expressions 2576 ************* 2577 2578 An "expression" specifies an address or numeric value. Whitespace may 2579 precede and/or follow an expression. 2580 2581 The result of an expression must be an absolute number, or else an 2582 offset into a particular section. If an expression is not absolute, 2583 and there is not enough information when `as' sees the expression to 2584 know its section, a second pass over the source program might be 2585 necessary to interpret the expression--but the second pass is currently 2586 not implemented. `as' aborts with an error message in this situation. 2587 2588 * Menu: 2589 2590 * Empty Exprs:: Empty Expressions 2591 * Integer Exprs:: Integer Expressions 2592 2593 2594 File: as.info, Node: Empty Exprs, Next: Integer Exprs, Up: Expressions 2595 2596 6.1 Empty Expressions 2597 ===================== 2598 2599 An empty expression has no value: it is just whitespace or null. 2600 Wherever an absolute expression is required, you may omit the 2601 expression, and `as' assumes a value of (absolute) 0. This is 2602 compatible with other assemblers. 2603 2604 2605 File: as.info, Node: Integer Exprs, Prev: Empty Exprs, Up: Expressions 2606 2607 6.2 Integer Expressions 2608 ======================= 2609 2610 An "integer expression" is one or more _arguments_ delimited by 2611 _operators_. 2612 2613 * Menu: 2614 2615 * Arguments:: Arguments 2616 * Operators:: Operators 2617 * Prefix Ops:: Prefix Operators 2618 * Infix Ops:: Infix Operators 2619 2620 2621 File: as.info, Node: Arguments, Next: Operators, Up: Integer Exprs 2622 2623 6.2.1 Arguments 2624 --------------- 2625 2626 "Arguments" are symbols, numbers or subexpressions. In other contexts 2627 arguments are sometimes called "arithmetic operands". In this manual, 2628 to avoid confusing them with the "instruction operands" of the machine 2629 language, we use the term "argument" to refer to parts of expressions 2630 only, reserving the word "operand" to refer only to machine instruction 2631 operands. 2632 2633 Symbols are evaluated to yield {SECTION NNN} where SECTION is one of 2634 text, data, bss, absolute, or undefined. NNN is a signed, 2's 2635 complement 32 bit integer. 2636 2637 Numbers are usually integers. 2638 2639 A number can be a flonum or bignum. In this case, you are warned 2640 that only the low order 32 bits are used, and `as' pretends these 32 2641 bits are an integer. You may write integer-manipulating instructions 2642 that act on exotic constants, compatible with other assemblers. 2643 2644 Subexpressions are a left parenthesis `(' followed by an integer 2645 expression, followed by a right parenthesis `)'; or a prefix operator 2646 followed by an argument. 2647 2648 2649 File: as.info, Node: Operators, Next: Prefix Ops, Prev: Arguments, Up: Integer Exprs 2650 2651 6.2.2 Operators 2652 --------------- 2653 2654 "Operators" are arithmetic functions, like `+' or `%'. Prefix 2655 operators are followed by an argument. Infix operators appear between 2656 their arguments. Operators may be preceded and/or followed by 2657 whitespace. 2658 2659 2660 File: as.info, Node: Prefix Ops, Next: Infix Ops, Prev: Operators, Up: Integer Exprs 2661 2662 6.2.3 Prefix Operator 2663 --------------------- 2664 2665 `as' has the following "prefix operators". They each take one 2666 argument, which must be absolute. 2667 2668 `-' 2669 "Negation". Two's complement negation. 2670 2671 `~' 2672 "Complementation". Bitwise not. 2673 2674 2675 File: as.info, Node: Infix Ops, Prev: Prefix Ops, Up: Integer Exprs 2676 2677 6.2.4 Infix Operators 2678 --------------------- 2679 2680 "Infix operators" take two arguments, one on either side. Operators 2681 have precedence, but operations with equal precedence are performed left 2682 to right. Apart from `+' or `-', both arguments must be absolute, and 2683 the result is absolute. 2684 2685 1. Highest Precedence 2686 2687 `*' 2688 "Multiplication". 2689 2690 `/' 2691 "Division". Truncation is the same as the C operator `/' 2692 2693 `%' 2694 "Remainder". 2695 2696 `<<' 2697 "Shift Left". Same as the C operator `<<'. 2698 2699 `>>' 2700 "Shift Right". Same as the C operator `>>'. 2701 2702 2. Intermediate precedence 2703 2704 `|' 2705 "Bitwise Inclusive Or". 2706 2707 `&' 2708 "Bitwise And". 2709 2710 `^' 2711 "Bitwise Exclusive Or". 2712 2713 `!' 2714 "Bitwise Or Not". 2715 2716 3. Low Precedence 2717 2718 `+' 2719 "Addition". If either argument is absolute, the result has 2720 the section of the other argument. You may not add together 2721 arguments from different sections. 2722 2723 `-' 2724 "Subtraction". If the right argument is absolute, the result 2725 has the section of the left argument. If both arguments are 2726 in the same section, the result is absolute. You may not 2727 subtract arguments from different sections. 2728 2729 `==' 2730 "Is Equal To" 2731 2732 `<>' 2733 `!=' 2734 "Is Not Equal To" 2735 2736 `<' 2737 "Is Less Than" 2738 2739 `>' 2740 "Is Greater Than" 2741 2742 `>=' 2743 "Is Greater Than Or Equal To" 2744 2745 `<=' 2746 "Is Less Than Or Equal To" 2747 2748 The comparison operators can be used as infix operators. A 2749 true results has a value of -1 whereas a false result has a 2750 value of 0. Note, these operators perform signed 2751 comparisons. 2752 2753 4. Lowest Precedence 2754 2755 `&&' 2756 "Logical And". 2757 2758 `||' 2759 "Logical Or". 2760 2761 These two logical operations can be used to combine the 2762 results of sub expressions. Note, unlike the comparison 2763 operators a true result returns a value of 1 but a false 2764 results does still return 0. Also note that the logical or 2765 operator has a slightly lower precedence than logical and. 2766 2767 2768 In short, it's only meaningful to add or subtract the _offsets_ in an 2769 address; you can only have a defined section in one of the two 2770 arguments. 2771 2772 2773 File: as.info, Node: Pseudo Ops, Next: Object Attributes, Prev: Expressions, Up: Top 2774 2775 7 Assembler Directives 2776 ********************** 2777 2778 All assembler directives have names that begin with a period (`.'). 2779 The rest of the name is letters, usually in lower case. 2780 2781 This chapter discusses directives that are available regardless of 2782 the target machine configuration for the GNU assembler. Some machine 2783 configurations provide additional directives. *Note Machine 2784 Dependencies::. 2785 2786 * Menu: 2787 2788 * Abort:: `.abort' 2789 2790 * ABORT (COFF):: `.ABORT' 2791 2792 * Align:: `.align ABS-EXPR , ABS-EXPR' 2793 * Altmacro:: `.altmacro' 2794 * Ascii:: `.ascii "STRING"'... 2795 * Asciz:: `.asciz "STRING"'... 2796 * Balign:: `.balign ABS-EXPR , ABS-EXPR' 2797 * Byte:: `.byte EXPRESSIONS' 2798 * Comm:: `.comm SYMBOL , LENGTH ' 2799 2800 * CFI directives:: `.cfi_startproc [simple]', `.cfi_endproc', etc. 2801 2802 * Data:: `.data SUBSECTION' 2803 2804 * Def:: `.def NAME' 2805 2806 * Desc:: `.desc SYMBOL, ABS-EXPRESSION' 2807 2808 * Dim:: `.dim' 2809 2810 * Double:: `.double FLONUMS' 2811 * Eject:: `.eject' 2812 * Else:: `.else' 2813 * Elseif:: `.elseif' 2814 * End:: `.end' 2815 2816 * Endef:: `.endef' 2817 2818 * Endfunc:: `.endfunc' 2819 * Endif:: `.endif' 2820 * Equ:: `.equ SYMBOL, EXPRESSION' 2821 * Equiv:: `.equiv SYMBOL, EXPRESSION' 2822 * Eqv:: `.eqv SYMBOL, EXPRESSION' 2823 * Err:: `.err' 2824 * Error:: `.error STRING' 2825 * Exitm:: `.exitm' 2826 * Extern:: `.extern' 2827 * Fail:: `.fail' 2828 2829 * File:: `.file STRING' 2830 2831 * Fill:: `.fill REPEAT , SIZE , VALUE' 2832 * Float:: `.float FLONUMS' 2833 * Func:: `.func' 2834 * Global:: `.global SYMBOL', `.globl SYMBOL' 2835 2836 * Gnu_attribute:: `.gnu_attribute TAG,VALUE' 2837 * Hidden:: `.hidden NAMES' 2838 2839 * hword:: `.hword EXPRESSIONS' 2840 * Ident:: `.ident' 2841 * If:: `.if ABSOLUTE EXPRESSION' 2842 * Incbin:: `.incbin "FILE"[,SKIP[,COUNT]]' 2843 * Include:: `.include "FILE"' 2844 * Int:: `.int EXPRESSIONS' 2845 2846 * Internal:: `.internal NAMES' 2847 2848 * Irp:: `.irp SYMBOL,VALUES'... 2849 * Irpc:: `.irpc SYMBOL,VALUES'... 2850 * Lcomm:: `.lcomm SYMBOL , LENGTH' 2851 * Lflags:: `.lflags' 2852 2853 * Line:: `.line LINE-NUMBER' 2854 2855 * Linkonce:: `.linkonce [TYPE]' 2856 * List:: `.list' 2857 * Ln:: `.ln LINE-NUMBER' 2858 2859 * LNS directives:: `.file', `.loc', etc. 2860 2861 * Long:: `.long EXPRESSIONS' 2862 2863 * Macro:: `.macro NAME ARGS'... 2864 * MRI:: `.mri VAL' 2865 * Noaltmacro:: `.noaltmacro' 2866 * Nolist:: `.nolist' 2867 * Octa:: `.octa BIGNUMS' 2868 * Org:: `.org NEW-LC, FILL' 2869 * P2align:: `.p2align ABS-EXPR, ABS-EXPR, ABS-EXPR' 2870 2871 * PopSection:: `.popsection' 2872 * Previous:: `.previous' 2873 2874 * Print:: `.print STRING' 2875 2876 * Protected:: `.protected NAMES' 2877 2878 * Psize:: `.psize LINES, COLUMNS' 2879 * Purgem:: `.purgem NAME' 2880 2881 * PushSection:: `.pushsection NAME' 2882 2883 * Quad:: `.quad BIGNUMS' 2884 * Reloc:: `.reloc OFFSET, RELOC_NAME[, EXPRESSION]' 2885 * Rept:: `.rept COUNT' 2886 * Sbttl:: `.sbttl "SUBHEADING"' 2887 2888 * Scl:: `.scl CLASS' 2889 2890 * Section:: `.section NAME[, FLAGS]' 2891 2892 * Set:: `.set SYMBOL, EXPRESSION' 2893 * Short:: `.short EXPRESSIONS' 2894 * Single:: `.single FLONUMS' 2895 2896 * Size:: `.size [NAME , EXPRESSION]' 2897 2898 * Skip:: `.skip SIZE , FILL' 2899 * Sleb128:: `.sleb128 EXPRESSIONS' 2900 * Space:: `.space SIZE , FILL' 2901 2902 * Stab:: `.stabd, .stabn, .stabs' 2903 2904 * String:: `.string "STR"', `.string8 "STR"', `.string16 "STR"', `.string32 "STR"', `.string64 "STR"' 2905 * Struct:: `.struct EXPRESSION' 2906 2907 * SubSection:: `.subsection' 2908 * Symver:: `.symver NAME,NAME2@NODENAME' 2909 2910 2911 * Tag:: `.tag STRUCTNAME' 2912 2913 * Text:: `.text SUBSECTION' 2914 * Title:: `.title "HEADING"' 2915 2916 * Type:: `.type <INT | NAME , TYPE DESCRIPTION>' 2917 2918 * Uleb128:: `.uleb128 EXPRESSIONS' 2919 2920 * Val:: `.val ADDR' 2921 2922 2923 * Version:: `.version "STRING"' 2924 * VTableEntry:: `.vtable_entry TABLE, OFFSET' 2925 * VTableInherit:: `.vtable_inherit CHILD, PARENT' 2926 2927 * Warning:: `.warning STRING' 2928 * Weak:: `.weak NAMES' 2929 * Weakref:: `.weakref ALIAS, SYMBOL' 2930 * Word:: `.word EXPRESSIONS' 2931 * Deprecated:: Deprecated Directives 2932 2933 2934 File: as.info, Node: Abort, Next: ABORT (COFF), Up: Pseudo Ops 2935 2936 7.1 `.abort' 2937 ============ 2938 2939 This directive stops the assembly immediately. It is for compatibility 2940 with other assemblers. The original idea was that the assembly 2941 language source would be piped into the assembler. If the sender of 2942 the source quit, it could use this directive tells `as' to quit also. 2943 One day `.abort' will not be supported. 2944 2945 2946 File: as.info, Node: ABORT (COFF), Next: Align, Prev: Abort, Up: Pseudo Ops 2947 2948 7.2 `.ABORT' (COFF) 2949 =================== 2950 2951 When producing COFF output, `as' accepts this directive as a synonym 2952 for `.abort'. 2953 2954 2955 File: as.info, Node: Align, Next: Altmacro, Prev: ABORT (COFF), Up: Pseudo Ops 2956 2957 7.3 `.align ABS-EXPR, ABS-EXPR, ABS-EXPR' 2958 ========================================= 2959 2960 Pad the location counter (in the current subsection) to a particular 2961 storage boundary. The first expression (which must be absolute) is the 2962 alignment required, as described below. 2963 2964 The second expression (also absolute) gives the fill value to be 2965 stored in the padding bytes. It (and the comma) may be omitted. If it 2966 is omitted, the padding bytes are normally zero. However, on some 2967 systems, if the section is marked as containing code and the fill value 2968 is omitted, the space is filled with no-op instructions. 2969 2970 The third expression is also absolute, and is also optional. If it 2971 is present, it is the maximum number of bytes that should be skipped by 2972 this alignment directive. If doing the alignment would require 2973 skipping more bytes than the specified maximum, then the alignment is 2974 not done at all. You can omit the fill value (the second argument) 2975 entirely by simply using two commas after the required alignment; this 2976 can be useful if you want the alignment to be filled with no-op 2977 instructions when appropriate. 2978 2979 The way the required alignment is specified varies from system to 2980 system. For the arc, hppa, i386 using ELF, i860, iq2000, m68k, or32, 2981 s390, sparc, tic4x, tic80 and xtensa, the first expression is the 2982 alignment request in bytes. For example `.align 8' advances the 2983 location counter until it is a multiple of 8. If the location counter 2984 is already a multiple of 8, no change is needed. For the tic54x, the 2985 first expression is the alignment request in words. 2986 2987 For other systems, including ppc, i386 using a.out format, arm and 2988 strongarm, it is the number of low-order zero bits the location counter 2989 must have after advancement. For example `.align 3' advances the 2990 location counter until it a multiple of 8. If the location counter is 2991 already a multiple of 8, no change is needed. 2992 2993 This inconsistency is due to the different behaviors of the various 2994 native assemblers for these systems which GAS must emulate. GAS also 2995 provides `.balign' and `.p2align' directives, described later, which 2996 have a consistent behavior across all architectures (but are specific 2997 to GAS). 2998 2999 3000 File: as.info, Node: Ascii, Next: Asciz, Prev: Altmacro, Up: Pseudo Ops 3001 3002 7.4 `.ascii "STRING"'... 3003 ======================== 3004 3005 `.ascii' expects zero or more string literals (*note Strings::) 3006 separated by commas. It assembles each string (with no automatic 3007 trailing zero byte) into consecutive addresses. 3008 3009 3010 File: as.info, Node: Asciz, Next: Balign, Prev: Ascii, Up: Pseudo Ops 3011 3012 7.5 `.asciz "STRING"'... 3013 ======================== 3014 3015 `.asciz' is just like `.ascii', but each string is followed by a zero 3016 byte. The "z" in `.asciz' stands for "zero". 3017 3018 3019 File: as.info, Node: Balign, Next: Byte, Prev: Asciz, Up: Pseudo Ops 3020 3021 7.6 `.balign[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR' 3022 ============================================== 3023 3024 Pad the location counter (in the current subsection) to a particular 3025 storage boundary. The first expression (which must be absolute) is the 3026 alignment request in bytes. For example `.balign 8' advances the 3027 location counter until it is a multiple of 8. If the location counter 3028 is already a multiple of 8, no change is needed. 3029 3030 The second expression (also absolute) gives the fill value to be 3031 stored in the padding bytes. It (and the comma) may be omitted. If it 3032 is omitted, the padding bytes are normally zero. However, on some 3033 systems, if the section is marked as containing code and the fill value 3034 is omitted, the space is filled with no-op instructions. 3035 3036 The third expression is also absolute, and is also optional. If it 3037 is present, it is the maximum number of bytes that should be skipped by 3038 this alignment directive. If doing the alignment would require 3039 skipping more bytes than the specified maximum, then the alignment is 3040 not done at all. You can omit the fill value (the second argument) 3041 entirely by simply using two commas after the required alignment; this 3042 can be useful if you want the alignment to be filled with no-op 3043 instructions when appropriate. 3044 3045 The `.balignw' and `.balignl' directives are variants of the 3046 `.balign' directive. The `.balignw' directive treats the fill pattern 3047 as a two byte word value. The `.balignl' directives treats the fill 3048 pattern as a four byte longword value. For example, `.balignw 3049 4,0x368d' will align to a multiple of 4. If it skips two bytes, they 3050 will be filled in with the value 0x368d (the exact placement of the 3051 bytes depends upon the endianness of the processor). If it skips 1 or 3052 3 bytes, the fill value is undefined. 3053 3054 3055 File: as.info, Node: Byte, Next: Comm, Prev: Balign, Up: Pseudo Ops 3056 3057 7.7 `.byte EXPRESSIONS' 3058 ======================= 3059 3060 `.byte' expects zero or more expressions, separated by commas. Each 3061 expression is assembled into the next byte. 3062 3063 3064 File: as.info, Node: Comm, Next: CFI directives, Prev: Byte, Up: Pseudo Ops 3065 3066 7.8 `.comm SYMBOL , LENGTH ' 3067 ============================ 3068 3069 `.comm' declares a common symbol named SYMBOL. When linking, a common 3070 symbol in one object file may be merged with a defined or common symbol 3071 of the same name in another object file. If `ld' does not see a 3072 definition for the symbol-just one or more common symbols-then it will 3073 allocate LENGTH bytes of uninitialized memory. LENGTH must be an 3074 absolute expression. If `ld' sees multiple common symbols with the 3075 same name, and they do not all have the same size, it will allocate 3076 space using the largest size. 3077 3078 When using ELF, the `.comm' directive takes an optional third 3079 argument. This is the desired alignment of the symbol, specified as a 3080 byte boundary (for example, an alignment of 16 means that the least 3081 significant 4 bits of the address should be zero). The alignment must 3082 be an absolute expression, and it must be a power of two. If `ld' 3083 allocates uninitialized memory for the common symbol, it will use the 3084 alignment when placing the symbol. If no alignment is specified, `as' 3085 will set the alignment to the largest power of two less than or equal 3086 to the size of the symbol, up to a maximum of 16. 3087 3088 The syntax for `.comm' differs slightly on the HPPA. The syntax is 3089 `SYMBOL .comm, LENGTH'; SYMBOL is optional. 3090 3091 3092 File: as.info, Node: CFI directives, Next: Data, Prev: Comm, Up: Pseudo Ops 3093 3094 7.9 `.cfi_startproc [simple]' 3095 ============================= 3096 3097 `.cfi_startproc' is used at the beginning of each function that should 3098 have an entry in `.eh_frame'. It initializes some internal data 3099 structures. Don't forget to close the function by `.cfi_endproc'. 3100 3101 Unless `.cfi_startproc' is used along with parameter `simple' it 3102 also emits some architecture dependent initial CFI instructions. 3103 3104 7.10 `.cfi_endproc' 3105 =================== 3106 3107 `.cfi_endproc' is used at the end of a function where it closes its 3108 unwind entry previously opened by `.cfi_startproc', and emits it to 3109 `.eh_frame'. 3110 3111 7.11 `.cfi_personality ENCODING [, EXP]' 3112 ======================================== 3113 3114 `.cfi_personality' defines personality routine and its encoding. 3115 ENCODING must be a constant determining how the personality should be 3116 encoded. If it is 255 (`DW_EH_PE_omit'), second argument is not 3117 present, otherwise second argument should be a constant or a symbol 3118 name. When using indirect encodings, the symbol provided should be the 3119 location where personality can be loaded from, not the personality 3120 routine itself. The default after `.cfi_startproc' is 3121 `.cfi_personality 0xff', no personality routine. 3122 3123 7.12 `.cfi_lsda ENCODING [, EXP]' 3124 ================================= 3125 3126 `.cfi_lsda' defines LSDA and its encoding. ENCODING must be a constant 3127 determining how the LSDA should be encoded. If it is 255 3128 (`DW_EH_PE_omit'), second argument is not present, otherwise second 3129 argument should be a constant or a symbol name. The default after 3130 `.cfi_startproc' is `.cfi_lsda 0xff', no LSDA. 3131 3132 7.13 `.cfi_def_cfa REGISTER, OFFSET' 3133 ==================================== 3134 3135 `.cfi_def_cfa' defines a rule for computing CFA as: take address from 3136 REGISTER and add OFFSET to it. 3137 3138 7.14 `.cfi_def_cfa_register REGISTER' 3139 ===================================== 3140 3141 `.cfi_def_cfa_register' modifies a rule for computing CFA. From now on 3142 REGISTER will be used instead of the old one. Offset remains the same. 3143 3144 7.15 `.cfi_def_cfa_offset OFFSET' 3145 ================================= 3146 3147 `.cfi_def_cfa_offset' modifies a rule for computing CFA. Register 3148 remains the same, but OFFSET is new. Note that it is the absolute 3149 offset that will be added to a defined register to compute CFA address. 3150 3151 7.16 `.cfi_adjust_cfa_offset OFFSET' 3152 ==================================== 3153 3154 Same as `.cfi_def_cfa_offset' but OFFSET is a relative value that is 3155 added/substracted from the previous offset. 3156 3157 7.17 `.cfi_offset REGISTER, OFFSET' 3158 =================================== 3159 3160 Previous value of REGISTER is saved at offset OFFSET from CFA. 3161 3162 7.18 `.cfi_rel_offset REGISTER, OFFSET' 3163 ======================================= 3164 3165 Previous value of REGISTER is saved at offset OFFSET from the current 3166 CFA register. This is transformed to `.cfi_offset' using the known 3167 displacement of the CFA register from the CFA. This is often easier to 3168 use, because the number will match the code it's annotating. 3169 3170 7.19 `.cfi_register REGISTER1, REGISTER2' 3171 ========================================= 3172 3173 Previous value of REGISTER1 is saved in register REGISTER2. 3174 3175 7.20 `.cfi_restore REGISTER' 3176 ============================ 3177 3178 `.cfi_restore' says that the rule for REGISTER is now the same as it 3179 was at the beginning of the function, after all initial instruction 3180 added by `.cfi_startproc' were executed. 3181 3182 7.21 `.cfi_undefined REGISTER' 3183 ============================== 3184 3185 From now on the previous value of REGISTER can't be restored anymore. 3186 3187 7.22 `.cfi_same_value REGISTER' 3188 =============================== 3189 3190 Current value of REGISTER is the same like in the previous frame, i.e. 3191 no restoration needed. 3192 3193 7.23 `.cfi_remember_state', 3194 =========================== 3195 3196 First save all current rules for all registers by `.cfi_remember_state', 3197 then totally screw them up by subsequent `.cfi_*' directives and when 3198 everything is hopelessly bad, use `.cfi_restore_state' to restore the 3199 previous saved state. 3200 3201 7.24 `.cfi_return_column REGISTER' 3202 ================================== 3203 3204 Change return column REGISTER, i.e. the return address is either 3205 directly in REGISTER or can be accessed by rules for REGISTER. 3206 3207 7.25 `.cfi_signal_frame' 3208 ======================== 3209 3210 Mark current function as signal trampoline. 3211 3212 7.26 `.cfi_window_save' 3213 ======================= 3214 3215 SPARC register window has been saved. 3216 3217 7.27 `.cfi_escape' EXPRESSION[, ...] 3218 ==================================== 3219 3220 Allows the user to add arbitrary bytes to the unwind info. One might 3221 use this to add OS-specific CFI opcodes, or generic CFI opcodes that 3222 GAS does not yet support. 3223 3224 7.28 `.cfi_val_encoded_addr REGISTER, ENCODING, LABEL' 3225 ====================================================== 3226 3227 The current value of REGISTER is LABEL. The value of LABEL will be 3228 encoded in the output file according to ENCODING; see the description 3229 of `.cfi_personality' for details on this encoding. 3230 3231 The usefulness of equating a register to a fixed label is probably 3232 limited to the return address register. Here, it can be useful to mark 3233 a code segment that has only one return address which is reached by a 3234 direct branch and no copy of the return address exists in memory or 3235 another register. 3236 3237 3238 File: as.info, Node: LNS directives, Next: Long, Prev: Ln, Up: Pseudo Ops 3239 3240 7.29 `.file FILENO FILENAME' 3241 ============================ 3242 3243 When emitting dwarf2 line number information `.file' assigns filenames 3244 to the `.debug_line' file name table. The FILENO operand should be a 3245 unique positive integer to use as the index of the entry in the table. 3246 The FILENAME operand is a C string literal. 3247 3248 The detail of filename indices is exposed to the user because the 3249 filename table is shared with the `.debug_info' section of the dwarf2 3250 debugging information, and thus the user must know the exact indices 3251 that table entries will have. 3252 3253 7.30 `.loc FILENO LINENO [COLUMN] [OPTIONS]' 3254 ============================================ 3255 3256 The `.loc' directive will add row to the `.debug_line' line number 3257 matrix corresponding to the immediately following assembly instruction. 3258 The FILENO, LINENO, and optional COLUMN arguments will be applied to 3259 the `.debug_line' state machine before the row is added. 3260 3261 The OPTIONS are a sequence of the following tokens in any order: 3262 3263 `basic_block' 3264 This option will set the `basic_block' register in the 3265 `.debug_line' state machine to `true'. 3266 3267 `prologue_end' 3268 This option will set the `prologue_end' register in the 3269 `.debug_line' state machine to `true'. 3270 3271 `epilogue_begin' 3272 This option will set the `epilogue_begin' register in the 3273 `.debug_line' state machine to `true'. 3274 3275 `is_stmt VALUE' 3276 This option will set the `is_stmt' register in the `.debug_line' 3277 state machine to `value', which must be either 0 or 1. 3278 3279 `isa VALUE' 3280 This directive will set the `isa' register in the `.debug_line' 3281 state machine to VALUE, which must be an unsigned integer. 3282 3283 3284 7.31 `.loc_mark_labels ENABLE' 3285 ============================== 3286 3287 The `.loc_mark_labels' directive makes the assembler emit an entry to 3288 the `.debug_line' line number matrix with the `basic_block' register in 3289 the state machine set whenever a code label is seen. The ENABLE 3290 argument should be either 1 or 0, to enable or disable this function 3291 respectively. 3292 3293 3294 File: as.info, Node: Data, Next: Def, Prev: CFI directives, Up: Pseudo Ops 3295 3296 7.32 `.data SUBSECTION' 3297 ======================= 3298 3299 `.data' tells `as' to assemble the following statements onto the end of 3300 the data subsection numbered SUBSECTION (which is an absolute 3301 expression). If SUBSECTION is omitted, it defaults to zero. 3302 3303 3304 File: as.info, Node: Def, Next: Desc, Prev: Data, Up: Pseudo Ops 3305 3306 7.33 `.def NAME' 3307 ================ 3308 3309 Begin defining debugging information for a symbol NAME; the definition 3310 extends until the `.endef' directive is encountered. 3311 3312 3313 File: as.info, Node: Desc, Next: Dim, Prev: Def, Up: Pseudo Ops 3314 3315 7.34 `.desc SYMBOL, ABS-EXPRESSION' 3316 =================================== 3317 3318 This directive sets the descriptor of the symbol (*note Symbol 3319 Attributes::) to the low 16 bits of an absolute expression. 3320 3321 The `.desc' directive is not available when `as' is configured for 3322 COFF output; it is only for `a.out' or `b.out' object format. For the 3323 sake of compatibility, `as' accepts it, but produces no output, when 3324 configured for COFF. 3325 3326 3327 File: as.info, Node: Dim, Next: Double, Prev: Desc, Up: Pseudo Ops 3328 3329 7.35 `.dim' 3330 =========== 3331 3332 This directive is generated by compilers to include auxiliary debugging 3333 information in the symbol table. It is only permitted inside 3334 `.def'/`.endef' pairs. 3335 3336 3337 File: as.info, Node: Double, Next: Eject, Prev: Dim, Up: Pseudo Ops 3338 3339 7.36 `.double FLONUMS' 3340 ====================== 3341 3342 `.double' expects zero or more flonums, separated by commas. It 3343 assembles floating point numbers. The exact kind of floating point 3344 numbers emitted depends on how `as' is configured. *Note Machine 3345 Dependencies::. 3346 3347 3348 File: as.info, Node: Eject, Next: Else, Prev: Double, Up: Pseudo Ops 3349 3350 7.37 `.eject' 3351 ============= 3352 3353 Force a page break at this point, when generating assembly listings. 3354 3355 3356 File: as.info, Node: Else, Next: Elseif, Prev: Eject, Up: Pseudo Ops 3357 3358 7.38 `.else' 3359 ============ 3360 3361 `.else' is part of the `as' support for conditional assembly; see *Note 3362 `.if': If. It marks the beginning of a section of code to be assembled 3363 if the condition for the preceding `.if' was false. 3364 3365 3366 File: as.info, Node: Elseif, Next: End, Prev: Else, Up: Pseudo Ops 3367 3368 7.39 `.elseif' 3369 ============== 3370 3371 `.elseif' is part of the `as' support for conditional assembly; see 3372 *Note `.if': If. It is shorthand for beginning a new `.if' block that 3373 would otherwise fill the entire `.else' section. 3374 3375 3376 File: as.info, Node: End, Next: Endef, Prev: Elseif, Up: Pseudo Ops 3377 3378 7.40 `.end' 3379 =========== 3380 3381 `.end' marks the end of the assembly file. `as' does not process 3382 anything in the file past the `.end' directive. 3383 3384 3385 File: as.info, Node: Endef, Next: Endfunc, Prev: End, Up: Pseudo Ops 3386 3387 7.41 `.endef' 3388 ============= 3389 3390 This directive flags the end of a symbol definition begun with `.def'. 3391 3392 3393 File: as.info, Node: Endfunc, Next: Endif, Prev: Endef, Up: Pseudo Ops 3394 3395 7.42 `.endfunc' 3396 =============== 3397 3398 `.endfunc' marks the end of a function specified with `.func'. 3399 3400 3401 File: as.info, Node: Endif, Next: Equ, Prev: Endfunc, Up: Pseudo Ops 3402 3403 7.43 `.endif' 3404 ============= 3405 3406 `.endif' is part of the `as' support for conditional assembly; it marks 3407 the end of a block of code that is only assembled conditionally. *Note 3408 `.if': If. 3409 3410 3411 File: as.info, Node: Equ, Next: Equiv, Prev: Endif, Up: Pseudo Ops 3412 3413 7.44 `.equ SYMBOL, EXPRESSION' 3414 ============================== 3415 3416 This directive sets the value of SYMBOL to EXPRESSION. It is 3417 synonymous with `.set'; see *Note `.set': Set. 3418 3419 The syntax for `equ' on the HPPA is `SYMBOL .equ EXPRESSION'. 3420 3421 The syntax for `equ' on the Z80 is `SYMBOL equ EXPRESSION'. On the 3422 Z80 it is an eror if SYMBOL is already defined, but the symbol is not 3423 protected from later redefinition. Compare *Note Equiv::. 3424 3425 3426 File: as.info, Node: Equiv, Next: Eqv, Prev: Equ, Up: Pseudo Ops 3427 3428 7.45 `.equiv SYMBOL, EXPRESSION' 3429 ================================ 3430 3431 The `.equiv' directive is like `.equ' and `.set', except that the 3432 assembler will signal an error if SYMBOL is already defined. Note a 3433 symbol which has been referenced but not actually defined is considered 3434 to be undefined. 3435 3436 Except for the contents of the error message, this is roughly 3437 equivalent to 3438 .ifdef SYM 3439 .err 3440 .endif 3441 .equ SYM,VAL 3442 plus it protects the symbol from later redefinition. 3443 3444 3445 File: as.info, Node: Eqv, Next: Err, Prev: Equiv, Up: Pseudo Ops 3446 3447 7.46 `.eqv SYMBOL, EXPRESSION' 3448 ============================== 3449 3450 The `.eqv' directive is like `.equiv', but no attempt is made to 3451 evaluate the expression or any part of it immediately. Instead each 3452 time the resulting symbol is used in an expression, a snapshot of its 3453 current value is taken. 3454 3455 3456 File: as.info, Node: Err, Next: Error, Prev: Eqv, Up: Pseudo Ops 3457 3458 7.47 `.err' 3459 =========== 3460 3461 If `as' assembles a `.err' directive, it will print an error message 3462 and, unless the `-Z' option was used, it will not generate an object 3463 file. This can be used to signal an error in conditionally compiled 3464 code. 3465 3466 3467 File: as.info, Node: Error, Next: Exitm, Prev: Err, Up: Pseudo Ops 3468 3469 7.48 `.error "STRING"' 3470 ====================== 3471 3472 Similarly to `.err', this directive emits an error, but you can specify 3473 a string that will be emitted as the error message. If you don't 3474 specify the message, it defaults to `".error directive invoked in 3475 source file"'. *Note Error and Warning Messages: Errors. 3476 3477 .error "This code has not been assembled and tested." 3478 3479 3480 File: as.info, Node: Exitm, Next: Extern, Prev: Error, Up: Pseudo Ops 3481 3482 7.49 `.exitm' 3483 ============= 3484 3485 Exit early from the current macro definition. *Note Macro::. 3486 3487 3488 File: as.info, Node: Extern, Next: Fail, Prev: Exitm, Up: Pseudo Ops 3489 3490 7.50 `.extern' 3491 ============== 3492 3493 `.extern' is accepted in the source program--for compatibility with 3494 other assemblers--but it is ignored. `as' treats all undefined symbols 3495 as external. 3496 3497 3498 File: as.info, Node: Fail, Next: File, Prev: Extern, Up: Pseudo Ops 3499 3500 7.51 `.fail EXPRESSION' 3501 ======================= 3502 3503 Generates an error or a warning. If the value of the EXPRESSION is 500 3504 or more, `as' will print a warning message. If the value is less than 3505 500, `as' will print an error message. The message will include the 3506 value of EXPRESSION. This can occasionally be useful inside complex 3507 nested macros or conditional assembly. 3508 3509 3510 File: as.info, Node: File, Next: Fill, Prev: Fail, Up: Pseudo Ops 3511 3512 7.52 `.file STRING' 3513 =================== 3514 3515 `.file' tells `as' that we are about to start a new logical file. 3516 STRING is the new file name. In general, the filename is recognized 3517 whether or not it is surrounded by quotes `"'; but if you wish to 3518 specify an empty file name, you must give the quotes-`""'. This 3519 statement may go away in future: it is only recognized to be compatible 3520 with old `as' programs. 3521 3522 3523 File: as.info, Node: Fill, Next: Float, Prev: File, Up: Pseudo Ops 3524 3525 7.53 `.fill REPEAT , SIZE , VALUE' 3526 ================================== 3527 3528 REPEAT, SIZE and VALUE are absolute expressions. This emits REPEAT 3529 copies of SIZE bytes. REPEAT may be zero or more. SIZE may be zero or 3530 more, but if it is more than 8, then it is deemed to have the value 8, 3531 compatible with other people's assemblers. The contents of each REPEAT 3532 bytes is taken from an 8-byte number. The highest order 4 bytes are 3533 zero. The lowest order 4 bytes are VALUE rendered in the byte-order of 3534 an integer on the computer `as' is assembling for. Each SIZE bytes in 3535 a repetition is taken from the lowest order SIZE bytes of this number. 3536 Again, this bizarre behavior is compatible with other people's 3537 assemblers. 3538 3539 SIZE and VALUE are optional. If the second comma and VALUE are 3540 absent, VALUE is assumed zero. If the first comma and following tokens 3541 are absent, SIZE is assumed to be 1. 3542 3543 3544 File: as.info, Node: Float, Next: Func, Prev: Fill, Up: Pseudo Ops 3545 3546 7.54 `.float FLONUMS' 3547 ===================== 3548 3549 This directive assembles zero or more flonums, separated by commas. It 3550 has the same effect as `.single'. The exact kind of floating point 3551 numbers emitted depends on how `as' is configured. *Note Machine 3552 Dependencies::. 3553 3554 3555 File: as.info, Node: Func, Next: Global, Prev: Float, Up: Pseudo Ops 3556 3557 7.55 `.func NAME[,LABEL]' 3558 ========================= 3559 3560 `.func' emits debugging information to denote function NAME, and is 3561 ignored unless the file is assembled with debugging enabled. Only 3562 `--gstabs[+]' is currently supported. LABEL is the entry point of the 3563 function and if omitted NAME prepended with the `leading char' is used. 3564 `leading char' is usually `_' or nothing, depending on the target. All 3565 functions are currently defined to have `void' return type. The 3566 function must be terminated with `.endfunc'. 3567 3568 3569 File: as.info, Node: Global, Next: Gnu_attribute, Prev: Func, Up: Pseudo Ops 3570 3571 7.56 `.global SYMBOL', `.globl SYMBOL' 3572 ====================================== 3573 3574 `.global' makes the symbol visible to `ld'. If you define SYMBOL in 3575 your partial program, its value is made available to other partial 3576 programs that are linked with it. Otherwise, SYMBOL takes its 3577 attributes from a symbol of the same name from another file linked into 3578 the same program. 3579 3580 Both spellings (`.globl' and `.global') are accepted, for 3581 compatibility with other assemblers. 3582 3583 On the HPPA, `.global' is not always enough to make it accessible to 3584 other partial programs. You may need the HPPA-only `.EXPORT' directive 3585 as well. *Note HPPA Assembler Directives: HPPA Directives. 3586 3587 3588 File: as.info, Node: Gnu_attribute, Next: Hidden, Prev: Global, Up: Pseudo Ops 3589 3590 7.57 `.gnu_attribute TAG,VALUE' 3591 =============================== 3592 3593 Record a GNU object attribute for this file. *Note Object Attributes::. 3594 3595 3596 File: as.info, Node: Hidden, Next: hword, Prev: Gnu_attribute, Up: Pseudo Ops 3597 3598 7.58 `.hidden NAMES' 3599 ==================== 3600 3601 This is one of the ELF visibility directives. The other two are 3602 `.internal' (*note `.internal': Internal.) and `.protected' (*note 3603 `.protected': Protected.). 3604 3605 This directive overrides the named symbols default visibility (which 3606 is set by their binding: local, global or weak). The directive sets 3607 the visibility to `hidden' which means that the symbols are not visible 3608 to other components. Such symbols are always considered to be 3609 `protected' as well. 3610 3611 3612 File: as.info, Node: hword, Next: Ident, Prev: Hidden, Up: Pseudo Ops 3613 3614 7.59 `.hword EXPRESSIONS' 3615 ========================= 3616 3617 This expects zero or more EXPRESSIONS, and emits a 16 bit number for 3618 each. 3619 3620 This directive is a synonym for `.short'; depending on the target 3621 architecture, it may also be a synonym for `.word'. 3622 3623 3624 File: as.info, Node: Ident, Next: If, Prev: hword, Up: Pseudo Ops 3625 3626 7.60 `.ident' 3627 ============= 3628 3629 This directive is used by some assemblers to place tags in object 3630 files. The behavior of this directive varies depending on the target. 3631 When using the a.out object file format, `as' simply accepts the 3632 directive for source-file compatibility with existing assemblers, but 3633 does not emit anything for it. When using COFF, comments are emitted 3634 to the `.comment' or `.rdata' section, depending on the target. When 3635 using ELF, comments are emitted to the `.comment' section. 3636 3637 3638 File: as.info, Node: If, Next: Incbin, Prev: Ident, Up: Pseudo Ops 3639 3640 7.61 `.if ABSOLUTE EXPRESSION' 3641 ============================== 3642 3643 `.if' marks the beginning of a section of code which is only considered 3644 part of the source program being assembled if the argument (which must 3645 be an ABSOLUTE EXPRESSION) is non-zero. The end of the conditional 3646 section of code must be marked by `.endif' (*note `.endif': Endif.); 3647 optionally, you may include code for the alternative condition, flagged 3648 by `.else' (*note `.else': Else.). If you have several conditions to 3649 check, `.elseif' may be used to avoid nesting blocks if/else within 3650 each subsequent `.else' block. 3651 3652 The following variants of `.if' are also supported: 3653 `.ifdef SYMBOL' 3654 Assembles the following section of code if the specified SYMBOL 3655 has been defined. Note a symbol which has been referenced but not 3656 yet defined is considered to be undefined. 3657 3658 `.ifb TEXT' 3659 Assembles the following section of code if the operand is blank 3660 (empty). 3661 3662 `.ifc STRING1,STRING2' 3663 Assembles the following section of code if the two strings are the 3664 same. The strings may be optionally quoted with single quotes. 3665 If they are not quoted, the first string stops at the first comma, 3666 and the second string stops at the end of the line. Strings which 3667 contain whitespace should be quoted. The string comparison is 3668 case sensitive. 3669 3670 `.ifeq ABSOLUTE EXPRESSION' 3671 Assembles the following section of code if the argument is zero. 3672 3673 `.ifeqs STRING1,STRING2' 3674 Another form of `.ifc'. The strings must be quoted using double 3675 quotes. 3676 3677 `.ifge ABSOLUTE EXPRESSION' 3678 Assembles the following section of code if the argument is greater 3679 than or equal to zero. 3680 3681 `.ifgt ABSOLUTE EXPRESSION' 3682 Assembles the following section of code if the argument is greater 3683 than zero. 3684 3685 `.ifle ABSOLUTE EXPRESSION' 3686 Assembles the following section of code if the argument is less 3687 than or equal to zero. 3688 3689 `.iflt ABSOLUTE EXPRESSION' 3690 Assembles the following section of code if the argument is less 3691 than zero. 3692 3693 `.ifnb TEXT' 3694 Like `.ifb', but the sense of the test is reversed: this assembles 3695 the following section of code if the operand is non-blank 3696 (non-empty). 3697 3698 `.ifnc STRING1,STRING2.' 3699 Like `.ifc', but the sense of the test is reversed: this assembles 3700 the following section of code if the two strings are not the same. 3701 3702 `.ifndef SYMBOL' 3703 `.ifnotdef SYMBOL' 3704 Assembles the following section of code if the specified SYMBOL 3705 has not been defined. Both spelling variants are equivalent. 3706 Note a symbol which has been referenced but not yet defined is 3707 considered to be undefined. 3708 3709 `.ifne ABSOLUTE EXPRESSION' 3710 Assembles the following section of code if the argument is not 3711 equal to zero (in other words, this is equivalent to `.if'). 3712 3713 `.ifnes STRING1,STRING2' 3714 Like `.ifeqs', but the sense of the test is reversed: this 3715 assembles the following section of code if the two strings are not 3716 the same. 3717 3718 3719 File: as.info, Node: Incbin, Next: Include, Prev: If, Up: Pseudo Ops 3720 3721 7.62 `.incbin "FILE"[,SKIP[,COUNT]]' 3722 ==================================== 3723 3724 The `incbin' directive includes FILE verbatim at the current location. 3725 You can control the search paths used with the `-I' command-line option 3726 (*note Command-Line Options: Invoking.). Quotation marks are required 3727 around FILE. 3728 3729 The SKIP argument skips a number of bytes from the start of the 3730 FILE. The COUNT argument indicates the maximum number of bytes to 3731 read. Note that the data is not aligned in any way, so it is the user's 3732 responsibility to make sure that proper alignment is provided both 3733 before and after the `incbin' directive. 3734 3735 3736 File: as.info, Node: Include, Next: Int, Prev: Incbin, Up: Pseudo Ops 3737 3738 7.63 `.include "FILE"' 3739 ====================== 3740 3741 This directive provides a way to include supporting files at specified 3742 points in your source program. The code from FILE is assembled as if 3743 it followed the point of the `.include'; when the end of the included 3744 file is reached, assembly of the original file continues. You can 3745 control the search paths used with the `-I' command-line option (*note 3746 Command-Line Options: Invoking.). Quotation marks are required around 3747 FILE. 3748 3749 3750 File: as.info, Node: Int, Next: Internal, Prev: Include, Up: Pseudo Ops 3751 3752 7.64 `.int EXPRESSIONS' 3753 ======================= 3754 3755 Expect zero or more EXPRESSIONS, of any section, separated by commas. 3756 For each expression, emit a number that, at run time, is the value of 3757 that expression. The byte order and bit size of the number depends on 3758 what kind of target the assembly is for. 3759 3760 3761 File: as.info, Node: Internal, Next: Irp, Prev: Int, Up: Pseudo Ops 3762 3763 7.65 `.internal NAMES' 3764 ====================== 3765 3766 This is one of the ELF visibility directives. The other two are 3767 `.hidden' (*note `.hidden': Hidden.) and `.protected' (*note 3768 `.protected': Protected.). 3769 3770 This directive overrides the named symbols default visibility (which 3771 is set by their binding: local, global or weak). The directive sets 3772 the visibility to `internal' which means that the symbols are 3773 considered to be `hidden' (i.e., not visible to other components), and 3774 that some extra, processor specific processing must also be performed 3775 upon the symbols as well. 3776 3777 3778 File: as.info, Node: Irp, Next: Irpc, Prev: Internal, Up: Pseudo Ops 3779 3780 7.66 `.irp SYMBOL,VALUES'... 3781 ============================ 3782 3783 Evaluate a sequence of statements assigning different values to SYMBOL. 3784 The sequence of statements starts at the `.irp' directive, and is 3785 terminated by an `.endr' directive. For each VALUE, SYMBOL is set to 3786 VALUE, and the sequence of statements is assembled. If no VALUE is 3787 listed, the sequence of statements is assembled once, with SYMBOL set 3788 to the null string. To refer to SYMBOL within the sequence of 3789 statements, use \SYMBOL. 3790 3791 For example, assembling 3792 3793 .irp param,1,2,3 3794 move d\param,sp@- 3795 .endr 3796 3797 is equivalent to assembling 3798 3799 move d1,sp@- 3800 move d2,sp@- 3801 move d3,sp@- 3802 3803 For some caveats with the spelling of SYMBOL, see also *Note Macro::. 3804 3805 3806 File: as.info, Node: Irpc, Next: Lcomm, Prev: Irp, Up: Pseudo Ops 3807 3808 7.67 `.irpc SYMBOL,VALUES'... 3809 ============================= 3810 3811 Evaluate a sequence of statements assigning different values to SYMBOL. 3812 The sequence of statements starts at the `.irpc' directive, and is 3813 terminated by an `.endr' directive. For each character in VALUE, 3814 SYMBOL is set to the character, and the sequence of statements is 3815 assembled. If no VALUE is listed, the sequence of statements is 3816 assembled once, with SYMBOL set to the null string. To refer to SYMBOL 3817 within the sequence of statements, use \SYMBOL. 3818 3819 For example, assembling 3820 3821 .irpc param,123 3822 move d\param,sp@- 3823 .endr 3824 3825 is equivalent to assembling 3826 3827 move d1,sp@- 3828 move d2,sp@- 3829 move d3,sp@- 3830 3831 For some caveats with the spelling of SYMBOL, see also the discussion 3832 at *Note Macro::. 3833 3834 3835 File: as.info, Node: Lcomm, Next: Lflags, Prev: Irpc, Up: Pseudo Ops 3836 3837 7.68 `.lcomm SYMBOL , LENGTH' 3838 ============================= 3839 3840 Reserve LENGTH (an absolute expression) bytes for a local common 3841 denoted by SYMBOL. The section and value of SYMBOL are those of the 3842 new local common. The addresses are allocated in the bss section, so 3843 that at run-time the bytes start off zeroed. SYMBOL is not declared 3844 global (*note `.global': Global.), so is normally not visible to `ld'. 3845 3846 Some targets permit a third argument to be used with `.lcomm'. This 3847 argument specifies the desired alignment of the symbol in the bss 3848 section. 3849 3850 The syntax for `.lcomm' differs slightly on the HPPA. The syntax is 3851 `SYMBOL .lcomm, LENGTH'; SYMBOL is optional. 3852 3853 3854 File: as.info, Node: Lflags, Next: Line, Prev: Lcomm, Up: Pseudo Ops 3855 3856 7.69 `.lflags' 3857 ============== 3858 3859 `as' accepts this directive, for compatibility with other assemblers, 3860 but ignores it. 3861 3862 3863 File: as.info, Node: Line, Next: Linkonce, Prev: Lflags, Up: Pseudo Ops 3864 3865 7.70 `.line LINE-NUMBER' 3866 ======================== 3867 3868 Change the logical line number. LINE-NUMBER must be an absolute 3869 expression. The next line has that logical line number. Therefore any 3870 other statements on the current line (after a statement separator 3871 character) are reported as on logical line number LINE-NUMBER - 1. One 3872 day `as' will no longer support this directive: it is recognized only 3873 for compatibility with existing assembler programs. 3874 3875 Even though this is a directive associated with the `a.out' or 3876 `b.out' object-code formats, `as' still recognizes it when producing 3877 COFF output, and treats `.line' as though it were the COFF `.ln' _if_ 3878 it is found outside a `.def'/`.endef' pair. 3879 3880 Inside a `.def', `.line' is, instead, one of the directives used by 3881 compilers to generate auxiliary symbol information for debugging. 3882 3883 3884 File: as.info, Node: Linkonce, Next: List, Prev: Line, Up: Pseudo Ops 3885 3886 7.71 `.linkonce [TYPE]' 3887 ======================= 3888 3889 Mark the current section so that the linker only includes a single copy 3890 of it. This may be used to include the same section in several 3891 different object files, but ensure that the linker will only include it 3892 once in the final output file. The `.linkonce' pseudo-op must be used 3893 for each instance of the section. Duplicate sections are detected 3894 based on the section name, so it should be unique. 3895 3896 This directive is only supported by a few object file formats; as of 3897 this writing, the only object file format which supports it is the 3898 Portable Executable format used on Windows NT. 3899 3900 The TYPE argument is optional. If specified, it must be one of the 3901 following strings. For example: 3902 .linkonce same_size 3903 Not all types may be supported on all object file formats. 3904 3905 `discard' 3906 Silently discard duplicate sections. This is the default. 3907 3908 `one_only' 3909 Warn if there are duplicate sections, but still keep only one copy. 3910 3911 `same_size' 3912 Warn if any of the duplicates have different sizes. 3913 3914 `same_contents' 3915 Warn if any of the duplicates do not have exactly the same 3916 contents. 3917 3918 3919 File: as.info, Node: Ln, Next: LNS directives, Prev: List, Up: Pseudo Ops 3920 3921 7.72 `.ln LINE-NUMBER' 3922 ====================== 3923 3924 `.ln' is a synonym for `.line'. 3925 3926 3927 File: as.info, Node: MRI, Next: Noaltmacro, Prev: Macro, Up: Pseudo Ops 3928 3929 7.73 `.mri VAL' 3930 =============== 3931 3932 If VAL is non-zero, this tells `as' to enter MRI mode. If VAL is zero, 3933 this tells `as' to exit MRI mode. This change affects code assembled 3934 until the next `.mri' directive, or until the end of the file. *Note 3935 MRI mode: M. 3936 3937 3938 File: as.info, Node: List, Next: Ln, Prev: Linkonce, Up: Pseudo Ops 3939 3940 7.74 `.list' 3941 ============ 3942 3943 Control (in conjunction with the `.nolist' directive) whether or not 3944 assembly listings are generated. These two directives maintain an 3945 internal counter (which is zero initially). `.list' increments the 3946 counter, and `.nolist' decrements it. Assembly listings are generated 3947 whenever the counter is greater than zero. 3948 3949 By default, listings are disabled. When you enable them (with the 3950 `-a' command line option; *note Command-Line Options: Invoking.), the 3951 initial value of the listing counter is one. 3952 3953 3954 File: as.info, Node: Long, Next: Macro, Prev: LNS directives, Up: Pseudo Ops 3955 3956 7.75 `.long EXPRESSIONS' 3957 ======================== 3958 3959 `.long' is the same as `.int'. *Note `.int': Int. 3960 3961 3962 File: as.info, Node: Macro, Next: MRI, Prev: Long, Up: Pseudo Ops 3963 3964 7.76 `.macro' 3965 ============= 3966 3967 The commands `.macro' and `.endm' allow you to define macros that 3968 generate assembly output. For example, this definition specifies a 3969 macro `sum' that puts a sequence of numbers into memory: 3970 3971 .macro sum from=0, to=5 3972 .long \from 3973 .if \to-\from 3974 sum "(\from+1)",\to 3975 .endif 3976 .endm 3977 3978 With that definition, `SUM 0,5' is equivalent to this assembly input: 3979 3980 .long 0 3981 .long 1 3982 .long 2 3983 .long 3 3984 .long 4 3985 .long 5 3986 3987 `.macro MACNAME' 3988 `.macro MACNAME MACARGS ...' 3989 Begin the definition of a macro called MACNAME. If your macro 3990 definition requires arguments, specify their names after the macro 3991 name, separated by commas or spaces. You can qualify the macro 3992 argument to indicate whether all invocations must specify a 3993 non-blank value (through `:`req''), or whether it takes all of the 3994 remaining arguments (through `:`vararg''). You can supply a 3995 default value for any macro argument by following the name with 3996 `=DEFLT'. You cannot define two macros with the same MACNAME 3997 unless it has been subject to the `.purgem' directive (*note 3998 Purgem::) between the two definitions. For example, these are all 3999 valid `.macro' statements: 4000 4001 `.macro comm' 4002 Begin the definition of a macro called `comm', which takes no 4003 arguments. 4004 4005 `.macro plus1 p, p1' 4006 `.macro plus1 p p1' 4007 Either statement begins the definition of a macro called 4008 `plus1', which takes two arguments; within the macro 4009 definition, write `\p' or `\p1' to evaluate the arguments. 4010 4011 `.macro reserve_str p1=0 p2' 4012 Begin the definition of a macro called `reserve_str', with two 4013 arguments. The first argument has a default value, but not 4014 the second. After the definition is complete, you can call 4015 the macro either as `reserve_str A,B' (with `\p1' evaluating 4016 to A and `\p2' evaluating to B), or as `reserve_str ,B' (with 4017 `\p1' evaluating as the default, in this case `0', and `\p2' 4018 evaluating to B). 4019 4020 `.macro m p1:req, p2=0, p3:vararg' 4021 Begin the definition of a macro called `m', with at least 4022 three arguments. The first argument must always have a value 4023 specified, but not the second, which instead has a default 4024 value. The third formal will get assigned all remaining 4025 arguments specified at invocation time. 4026 4027 When you call a macro, you can specify the argument values 4028 either by position, or by keyword. For example, `sum 9,17' 4029 is equivalent to `sum to=17, from=9'. 4030 4031 4032 Note that since each of the MACARGS can be an identifier exactly 4033 as any other one permitted by the target architecture, there may be 4034 occasional problems if the target hand-crafts special meanings to 4035 certain characters when they occur in a special position. For 4036 example, if the colon (`:') is generally permitted to be part of a 4037 symbol name, but the architecture specific code special-cases it 4038 when occurring as the final character of a symbol (to denote a 4039 label), then the macro parameter replacement code will have no way 4040 of knowing that and consider the whole construct (including the 4041 colon) an identifier, and check only this identifier for being the 4042 subject to parameter substitution. So for example this macro 4043 definition: 4044 4045 .macro label l 4046 \l: 4047 .endm 4048 4049 might not work as expected. Invoking `label foo' might not create 4050 a label called `foo' but instead just insert the text `\l:' into 4051 the assembler source, probably generating an error about an 4052 unrecognised identifier. 4053 4054 Similarly problems might occur with the period character (`.') 4055 which is often allowed inside opcode names (and hence identifier 4056 names). So for example constructing a macro to build an opcode 4057 from a base name and a length specifier like this: 4058 4059 .macro opcode base length 4060 \base.\length 4061 .endm 4062 4063 and invoking it as `opcode store l' will not create a `store.l' 4064 instruction but instead generate some kind of error as the 4065 assembler tries to interpret the text `\base.\length'. 4066 4067 There are several possible ways around this problem: 4068 4069 `Insert white space' 4070 If it is possible to use white space characters then this is 4071 the simplest solution. eg: 4072 4073 .macro label l 4074 \l : 4075 .endm 4076 4077 `Use `\()'' 4078 The string `\()' can be used to separate the end of a macro 4079 argument from the following text. eg: 4080 4081 .macro opcode base length 4082 \base\().\length 4083 .endm 4084 4085 `Use the alternate macro syntax mode' 4086 In the alternative macro syntax mode the ampersand character 4087 (`&') can be used as a separator. eg: 4088 4089 .altmacro 4090 .macro label l 4091 l&: 4092 .endm 4093 4094 Note: this problem of correctly identifying string parameters to 4095 pseudo ops also applies to the identifiers used in `.irp' (*note 4096 Irp::) and `.irpc' (*note Irpc::) as well. 4097 4098 `.endm' 4099 Mark the end of a macro definition. 4100 4101 `.exitm' 4102 Exit early from the current macro definition. 4103 4104 `\@' 4105 `as' maintains a counter of how many macros it has executed in 4106 this pseudo-variable; you can copy that number to your output with 4107 `\@', but _only within a macro definition_. 4108 4109 `LOCAL NAME [ , ... ]' 4110 _Warning: `LOCAL' is only available if you select "alternate macro 4111 syntax" with `--alternate' or `.altmacro'._ *Note `.altmacro': 4112 Altmacro. 4113 4114 4115 File: as.info, Node: Altmacro, Next: Ascii, Prev: Align, Up: Pseudo Ops 4116 4117 7.77 `.altmacro' 4118 ================ 4119 4120 Enable alternate macro mode, enabling: 4121 4122 `LOCAL NAME [ , ... ]' 4123 One additional directive, `LOCAL', is available. It is used to 4124 generate a string replacement for each of the NAME arguments, and 4125 replace any instances of NAME in each macro expansion. The 4126 replacement string is unique in the assembly, and different for 4127 each separate macro expansion. `LOCAL' allows you to write macros 4128 that define symbols, without fear of conflict between separate 4129 macro expansions. 4130 4131 `String delimiters' 4132 You can write strings delimited in these other ways besides 4133 `"STRING"': 4134 4135 `'STRING'' 4136 You can delimit strings with single-quote characters. 4137 4138 `<STRING>' 4139 You can delimit strings with matching angle brackets. 4140 4141 `single-character string escape' 4142 To include any single character literally in a string (even if the 4143 character would otherwise have some special meaning), you can 4144 prefix the character with `!' (an exclamation mark). For example, 4145 you can write `<4.3 !> 5.4!!>' to get the literal text `4.3 > 4146 5.4!'. 4147 4148 `Expression results as strings' 4149 You can write `%EXPR' to evaluate the expression EXPR and use the 4150 result as a string. 4151 4152 4153 File: as.info, Node: Noaltmacro, Next: Nolist, Prev: MRI, Up: Pseudo Ops 4154 4155 7.78 `.noaltmacro' 4156 ================== 4157 4158 Disable alternate macro mode. *Note Altmacro::. 4159 4160 4161 File: as.info, Node: Nolist, Next: Octa, Prev: Noaltmacro, Up: Pseudo Ops 4162 4163 7.79 `.nolist' 4164 ============== 4165 4166 Control (in conjunction with the `.list' directive) whether or not 4167 assembly listings are generated. These two directives maintain an 4168 internal counter (which is zero initially). `.list' increments the 4169 counter, and `.nolist' decrements it. Assembly listings are generated 4170 whenever the counter is greater than zero. 4171 4172 4173 File: as.info, Node: Octa, Next: Org, Prev: Nolist, Up: Pseudo Ops 4174 4175 7.80 `.octa BIGNUMS' 4176 ==================== 4177 4178 This directive expects zero or more bignums, separated by commas. For 4179 each bignum, it emits a 16-byte integer. 4180 4181 The term "octa" comes from contexts in which a "word" is two bytes; 4182 hence _octa_-word for 16 bytes. 4183 4184 4185 File: as.info, Node: Org, Next: P2align, Prev: Octa, Up: Pseudo Ops 4186 4187 7.81 `.org NEW-LC , FILL' 4188 ========================= 4189 4190 Advance the location counter of the current section to NEW-LC. NEW-LC 4191 is either an absolute expression or an expression with the same section 4192 as the current subsection. That is, you can't use `.org' to cross 4193 sections: if NEW-LC has the wrong section, the `.org' directive is 4194 ignored. To be compatible with former assemblers, if the section of 4195 NEW-LC is absolute, `as' issues a warning, then pretends the section of 4196 NEW-LC is the same as the current subsection. 4197 4198 `.org' may only increase the location counter, or leave it 4199 unchanged; you cannot use `.org' to move the location counter backwards. 4200 4201 Because `as' tries to assemble programs in one pass, NEW-LC may not 4202 be undefined. If you really detest this restriction we eagerly await a 4203 chance to share your improved assembler. 4204 4205 Beware that the origin is relative to the start of the section, not 4206 to the start of the subsection. This is compatible with other people's 4207 assemblers. 4208 4209 When the location counter (of the current subsection) is advanced, 4210 the intervening bytes are filled with FILL which should be an absolute 4211 expression. If the comma and FILL are omitted, FILL defaults to zero. 4212 4213 4214 File: as.info, Node: P2align, Next: PopSection, Prev: Org, Up: Pseudo Ops 4215 4216 7.82 `.p2align[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR' 4217 ================================================ 4218 4219 Pad the location counter (in the current subsection) to a particular 4220 storage boundary. The first expression (which must be absolute) is the 4221 number of low-order zero bits the location counter must have after 4222 advancement. For example `.p2align 3' advances the location counter 4223 until it a multiple of 8. If the location counter is already a 4224 multiple of 8, no change is needed. 4225 4226 The second expression (also absolute) gives the fill value to be 4227 stored in the padding bytes. It (and the comma) may be omitted. If it 4228 is omitted, the padding bytes are normally zero. However, on some 4229 systems, if the section is marked as containing code and the fill value 4230 is omitted, the space is filled with no-op instructions. 4231 4232 The third expression is also absolute, and is also optional. If it 4233 is present, it is the maximum number of bytes that should be skipped by 4234 this alignment directive. If doing the alignment would require 4235 skipping more bytes than the specified maximum, then the alignment is 4236 not done at all. You can omit the fill value (the second argument) 4237 entirely by simply using two commas after the required alignment; this 4238 can be useful if you want the alignment to be filled with no-op 4239 instructions when appropriate. 4240 4241 The `.p2alignw' and `.p2alignl' directives are variants of the 4242 `.p2align' directive. The `.p2alignw' directive treats the fill 4243 pattern as a two byte word value. The `.p2alignl' directives treats the 4244 fill pattern as a four byte longword value. For example, `.p2alignw 4245 2,0x368d' will align to a multiple of 4. If it skips two bytes, they 4246 will be filled in with the value 0x368d (the exact placement of the 4247 bytes depends upon the endianness of the processor). If it skips 1 or 4248 3 bytes, the fill value is undefined. 4249 4250 4251 File: as.info, Node: Previous, Next: Print, Prev: PopSection, Up: Pseudo Ops 4252 4253 7.83 `.previous' 4254 ================ 4255 4256 This is one of the ELF section stack manipulation directives. The 4257 others are `.section' (*note Section::), `.subsection' (*note 4258 SubSection::), `.pushsection' (*note PushSection::), and `.popsection' 4259 (*note PopSection::). 4260 4261 This directive swaps the current section (and subsection) with most 4262 recently referenced section/subsection pair prior to this one. Multiple 4263 `.previous' directives in a row will flip between two sections (and 4264 their subsections). For example: 4265 4266 .section A 4267 .subsection 1 4268 .word 0x1234 4269 .subsection 2 4270 .word 0x5678 4271 .previous 4272 .word 0x9abc 4273 4274 Will place 0x1234 and 0x9abc into subsection 1 and 0x5678 into 4275 subsection 2 of section A. Whilst: 4276 4277 .section A 4278 .subsection 1 4279 # Now in section A subsection 1 4280 .word 0x1234 4281 .section B 4282 .subsection 0 4283 # Now in section B subsection 0 4284 .word 0x5678 4285 .subsection 1 4286 # Now in section B subsection 1 4287 .word 0x9abc 4288 .previous 4289 # Now in section B subsection 0 4290 .word 0xdef0 4291 4292 Will place 0x1234 into section A, 0x5678 and 0xdef0 into subsection 4293 0 of section B and 0x9abc into subsection 1 of section B. 4294 4295 In terms of the section stack, this directive swaps the current 4296 section with the top section on the section stack. 4297 4298 4299 File: as.info, Node: PopSection, Next: Previous, Prev: P2align, Up: Pseudo Ops 4300 4301 7.84 `.popsection' 4302 ================== 4303 4304 This is one of the ELF section stack manipulation directives. The 4305 others are `.section' (*note Section::), `.subsection' (*note 4306 SubSection::), `.pushsection' (*note PushSection::), and `.previous' 4307 (*note Previous::). 4308 4309 This directive replaces the current section (and subsection) with 4310 the top section (and subsection) on the section stack. This section is 4311 popped off the stack. 4312 4313 4314 File: as.info, Node: Print, Next: Protected, Prev: Previous, Up: Pseudo Ops 4315 4316 7.85 `.print STRING' 4317 ==================== 4318 4319 `as' will print STRING on the standard output during assembly. You 4320 must put STRING in double quotes. 4321 4322 4323 File: as.info, Node: Protected, Next: Psize, Prev: Print, Up: Pseudo Ops 4324 4325 7.86 `.protected NAMES' 4326 ======================= 4327 4328 This is one of the ELF visibility directives. The other two are 4329 `.hidden' (*note Hidden::) and `.internal' (*note Internal::). 4330 4331 This directive overrides the named symbols default visibility (which 4332 is set by their binding: local, global or weak). The directive sets 4333 the visibility to `protected' which means that any references to the 4334 symbols from within the components that defines them must be resolved 4335 to the definition in that component, even if a definition in another 4336 component would normally preempt this. 4337 4338 4339 File: as.info, Node: Psize, Next: Purgem, Prev: Protected, Up: Pseudo Ops 4340 4341 7.87 `.psize LINES , COLUMNS' 4342 ============================= 4343 4344 Use this directive to declare the number of lines--and, optionally, the 4345 number of columns--to use for each page, when generating listings. 4346 4347 If you do not use `.psize', listings use a default line-count of 60. 4348 You may omit the comma and COLUMNS specification; the default width is 4349 200 columns. 4350 4351 `as' generates formfeeds whenever the specified number of lines is 4352 exceeded (or whenever you explicitly request one, using `.eject'). 4353 4354 If you specify LINES as `0', no formfeeds are generated save those 4355 explicitly specified with `.eject'. 4356 4357 4358 File: as.info, Node: Purgem, Next: PushSection, Prev: Psize, Up: Pseudo Ops 4359 4360 7.88 `.purgem NAME' 4361 =================== 4362 4363 Undefine the macro NAME, so that later uses of the string will not be 4364 expanded. *Note Macro::. 4365 4366 4367 File: as.info, Node: PushSection, Next: Quad, Prev: Purgem, Up: Pseudo Ops 4368 4369 7.89 `.pushsection NAME [, SUBSECTION] [, "FLAGS"[, @TYPE[,ARGUMENTS]]]' 4370 ======================================================================== 4371 4372 This is one of the ELF section stack manipulation directives. The 4373 others are `.section' (*note Section::), `.subsection' (*note 4374 SubSection::), `.popsection' (*note PopSection::), and `.previous' 4375 (*note Previous::). 4376 4377 This directive pushes the current section (and subsection) onto the 4378 top of the section stack, and then replaces the current section and 4379 subsection with `name' and `subsection'. The optional `flags', `type' 4380 and `arguments' are treated the same as in the `.section' (*note 4381 Section::) directive. 4382 4383 4384 File: as.info, Node: Quad, Next: Reloc, Prev: PushSection, Up: Pseudo Ops 4385 4386 7.90 `.quad BIGNUMS' 4387 ==================== 4388 4389 `.quad' expects zero or more bignums, separated by commas. For each 4390 bignum, it emits an 8-byte integer. If the bignum won't fit in 8 4391 bytes, it prints a warning message; and just takes the lowest order 8 4392 bytes of the bignum. 4393 4394 The term "quad" comes from contexts in which a "word" is two bytes; 4395 hence _quad_-word for 8 bytes. 4396 4397 4398 File: as.info, Node: Reloc, Next: Rept, Prev: Quad, Up: Pseudo Ops 4399 4400 7.91 `.reloc OFFSET, RELOC_NAME[, EXPRESSION]' 4401 ============================================== 4402 4403 Generate a relocation at OFFSET of type RELOC_NAME with value 4404 EXPRESSION. If OFFSET is a number, the relocation is generated in the 4405 current section. If OFFSET is an expression that resolves to a symbol 4406 plus offset, the relocation is generated in the given symbol's section. 4407 EXPRESSION, if present, must resolve to a symbol plus addend or to an 4408 absolute value, but note that not all targets support an addend. e.g. 4409 ELF REL targets such as i386 store an addend in the section contents 4410 rather than in the relocation. This low level interface does not 4411 support addends stored in the section. 4412 4413 4414 File: as.info, Node: Rept, Next: Sbttl, Prev: Reloc, Up: Pseudo Ops 4415 4416 7.92 `.rept COUNT' 4417 ================== 4418 4419 Repeat the sequence of lines between the `.rept' directive and the next 4420 `.endr' directive COUNT times. 4421 4422 For example, assembling 4423 4424 .rept 3 4425 .long 0 4426 .endr 4427 4428 is equivalent to assembling 4429 4430 .long 0 4431 .long 0 4432 .long 0 4433 4434 4435 File: as.info, Node: Sbttl, Next: Scl, Prev: Rept, Up: Pseudo Ops 4436 4437 7.93 `.sbttl "SUBHEADING"' 4438 ========================== 4439 4440 Use SUBHEADING as the title (third line, immediately after the title 4441 line) when generating assembly listings. 4442 4443 This directive affects subsequent pages, as well as the current page 4444 if it appears within ten lines of the top of a page. 4445 4446 4447 File: as.info, Node: Scl, Next: Section, Prev: Sbttl, Up: Pseudo Ops 4448 4449 7.94 `.scl CLASS' 4450 ================= 4451 4452 Set the storage-class value for a symbol. This directive may only be 4453 used inside a `.def'/`.endef' pair. Storage class may flag whether a 4454 symbol is static or external, or it may record further symbolic 4455 debugging information. 4456 4457 4458 File: as.info, Node: Section, Next: Set, Prev: Scl, Up: Pseudo Ops 4459 4460 7.95 `.section NAME' 4461 ==================== 4462 4463 Use the `.section' directive to assemble the following code into a 4464 section named NAME. 4465 4466 This directive is only supported for targets that actually support 4467 arbitrarily named sections; on `a.out' targets, for example, it is not 4468 accepted, even with a standard `a.out' section name. 4469 4470 COFF Version 4471 ------------ 4472 4473 For COFF targets, the `.section' directive is used in one of the 4474 following ways: 4475 4476 .section NAME[, "FLAGS"] 4477 .section NAME[, SUBSECTION] 4478 4479 If the optional argument is quoted, it is taken as flags to use for 4480 the section. Each flag is a single character. The following flags are 4481 recognized: 4482 `b' 4483 bss section (uninitialized data) 4484 4485 `n' 4486 section is not loaded 4487 4488 `w' 4489 writable section 4490 4491 `d' 4492 data section 4493 4494 `r' 4495 read-only section 4496 4497 `x' 4498 executable section 4499 4500 `s' 4501 shared section (meaningful for PE targets) 4502 4503 `a' 4504 ignored. (For compatibility with the ELF version) 4505 4506 If no flags are specified, the default flags depend upon the section 4507 name. If the section name is not recognized, the default will be for 4508 the section to be loaded and writable. Note the `n' and `w' flags 4509 remove attributes from the section, rather than adding them, so if they 4510 are used on their own it will be as if no flags had been specified at 4511 all. 4512 4513 If the optional argument to the `.section' directive is not quoted, 4514 it is taken as a subsection number (*note Sub-Sections::). 4515 4516 ELF Version 4517 ----------- 4518 4519 This is one of the ELF section stack manipulation directives. The 4520 others are `.subsection' (*note SubSection::), `.pushsection' (*note 4521 PushSection::), `.popsection' (*note PopSection::), and `.previous' 4522 (*note Previous::). 4523 4524 For ELF targets, the `.section' directive is used like this: 4525 4526 .section NAME [, "FLAGS"[, @TYPE[,FLAG_SPECIFIC_ARGUMENTS]]] 4527 4528 The optional FLAGS argument is a quoted string which may contain any 4529 combination of the following characters: 4530 `a' 4531 section is allocatable 4532 4533 `w' 4534 section is writable 4535 4536 `x' 4537 section is executable 4538 4539 `M' 4540 section is mergeable 4541 4542 `S' 4543 section contains zero terminated strings 4544 4545 `G' 4546 section is a member of a section group 4547 4548 `T' 4549 section is used for thread-local-storage 4550 4551 The optional TYPE argument may contain one of the following 4552 constants: 4553 `@progbits' 4554 section contains data 4555 4556 `@nobits' 4557 section does not contain data (i.e., section only occupies space) 4558 4559 `@note' 4560 section contains data which is used by things other than the 4561 program 4562 4563 `@init_array' 4564 section contains an array of pointers to init functions 4565 4566 `@fini_array' 4567 section contains an array of pointers to finish functions 4568 4569 `@preinit_array' 4570 section contains an array of pointers to pre-init functions 4571 4572 Many targets only support the first three section types. 4573 4574 Note on targets where the `@' character is the start of a comment (eg 4575 ARM) then another character is used instead. For example the ARM port 4576 uses the `%' character. 4577 4578 If FLAGS contains the `M' symbol then the TYPE argument must be 4579 specified as well as an extra argument--ENTSIZE--like this: 4580 4581 .section NAME , "FLAGS"M, @TYPE, ENTSIZE 4582 4583 Sections with the `M' flag but not `S' flag must contain fixed size 4584 constants, each ENTSIZE octets long. Sections with both `M' and `S' 4585 must contain zero terminated strings where each character is ENTSIZE 4586 bytes long. The linker may remove duplicates within sections with the 4587 same name, same entity size and same flags. ENTSIZE must be an 4588 absolute expression. 4589 4590 If FLAGS contains the `G' symbol then the TYPE argument must be 4591 present along with an additional field like this: 4592 4593 .section NAME , "FLAGS"G, @TYPE, GROUPNAME[, LINKAGE] 4594 4595 The GROUPNAME field specifies the name of the section group to which 4596 this particular section belongs. The optional linkage field can 4597 contain: 4598 `comdat' 4599 indicates that only one copy of this section should be retained 4600 4601 `.gnu.linkonce' 4602 an alias for comdat 4603 4604 Note: if both the M and G flags are present then the fields for the 4605 Merge flag should come first, like this: 4606 4607 .section NAME , "FLAGS"MG, @TYPE, ENTSIZE, GROUPNAME[, LINKAGE] 4608 4609 If no flags are specified, the default flags depend upon the section 4610 name. If the section name is not recognized, the default will be for 4611 the section to have none of the above flags: it will not be allocated 4612 in memory, nor writable, nor executable. The section will contain data. 4613 4614 For ELF targets, the assembler supports another type of `.section' 4615 directive for compatibility with the Solaris assembler: 4616 4617 .section "NAME"[, FLAGS...] 4618 4619 Note that the section name is quoted. There may be a sequence of 4620 comma separated flags: 4621 `#alloc' 4622 section is allocatable 4623 4624 `#write' 4625 section is writable 4626 4627 `#execinstr' 4628 section is executable 4629 4630 `#tls' 4631 section is used for thread local storage 4632 4633 This directive replaces the current section and subsection. See the 4634 contents of the gas testsuite directory `gas/testsuite/gas/elf' for 4635 some examples of how this directive and the other section stack 4636 directives work. 4637 4638 4639 File: as.info, Node: Set, Next: Short, Prev: Section, Up: Pseudo Ops 4640 4641 7.96 `.set SYMBOL, EXPRESSION' 4642 ============================== 4643 4644 Set the value of SYMBOL to EXPRESSION. This changes SYMBOL's value and 4645 type to conform to EXPRESSION. If SYMBOL was flagged as external, it 4646 remains flagged (*note Symbol Attributes::). 4647 4648 You may `.set' a symbol many times in the same assembly. 4649 4650 If you `.set' a global symbol, the value stored in the object file 4651 is the last value stored into it. 4652 4653 The syntax for `set' on the HPPA is `SYMBOL .set EXPRESSION'. 4654 4655 On Z80 `set' is a real instruction, use `SYMBOL defl EXPRESSION' 4656 instead. 4657 4658 4659 File: as.info, Node: Short, Next: Single, Prev: Set, Up: Pseudo Ops 4660 4661 7.97 `.short EXPRESSIONS' 4662 ========================= 4663 4664 `.short' is normally the same as `.word'. *Note `.word': Word. 4665 4666 In some configurations, however, `.short' and `.word' generate 4667 numbers of different lengths. *Note Machine Dependencies::. 4668 4669 4670 File: as.info, Node: Single, Next: Size, Prev: Short, Up: Pseudo Ops 4671 4672 7.98 `.single FLONUMS' 4673 ====================== 4674 4675 This directive assembles zero or more flonums, separated by commas. It 4676 has the same effect as `.float'. The exact kind of floating point 4677 numbers emitted depends on how `as' is configured. *Note Machine 4678 Dependencies::. 4679 4680 4681 File: as.info, Node: Size, Next: Skip, Prev: Single, Up: Pseudo Ops 4682 4683 7.99 `.size' 4684 ============ 4685 4686 This directive is used to set the size associated with a symbol. 4687 4688 COFF Version 4689 ------------ 4690 4691 For COFF targets, the `.size' directive is only permitted inside 4692 `.def'/`.endef' pairs. It is used like this: 4693 4694 .size EXPRESSION 4695 4696 ELF Version 4697 ----------- 4698 4699 For ELF targets, the `.size' directive is used like this: 4700 4701 .size NAME , EXPRESSION 4702 4703 This directive sets the size associated with a symbol NAME. The 4704 size in bytes is computed from EXPRESSION which can make use of label 4705 arithmetic. This directive is typically used to set the size of 4706 function symbols. 4707 4708 4709 File: as.info, Node: Sleb128, Next: Space, Prev: Skip, Up: Pseudo Ops 4710 4711 7.100 `.sleb128 EXPRESSIONS' 4712 ============================ 4713 4714 SLEB128 stands for "signed little endian base 128." This is a compact, 4715 variable length representation of numbers used by the DWARF symbolic 4716 debugging format. *Note `.uleb128': Uleb128. 4717 4718 4719 File: as.info, Node: Skip, Next: Sleb128, Prev: Size, Up: Pseudo Ops 4720 4721 7.101 `.skip SIZE , FILL' 4722 ========================= 4723 4724 This directive emits SIZE bytes, each of value FILL. Both SIZE and 4725 FILL are absolute expressions. If the comma and FILL are omitted, FILL 4726 is assumed to be zero. This is the same as `.space'. 4727 4728 4729 File: as.info, Node: Space, Next: Stab, Prev: Sleb128, Up: Pseudo Ops 4730 4731 7.102 `.space SIZE , FILL' 4732 ========================== 4733 4734 This directive emits SIZE bytes, each of value FILL. Both SIZE and 4735 FILL are absolute expressions. If the comma and FILL are omitted, FILL 4736 is assumed to be zero. This is the same as `.skip'. 4737 4738 _Warning:_ `.space' has a completely different meaning for HPPA 4739 targets; use `.block' as a substitute. See `HP9000 Series 800 4740 Assembly Language Reference Manual' (HP 92432-90001) for the 4741 meaning of the `.space' directive. *Note HPPA Assembler 4742 Directives: HPPA Directives, for a summary. 4743 4744 4745 File: as.info, Node: Stab, Next: String, Prev: Space, Up: Pseudo Ops 4746 4747 7.103 `.stabd, .stabn, .stabs' 4748 ============================== 4749 4750 There are three directives that begin `.stab'. All emit symbols (*note 4751 Symbols::), for use by symbolic debuggers. The symbols are not entered 4752 in the `as' hash table: they cannot be referenced elsewhere in the 4753 source file. Up to five fields are required: 4754 4755 STRING 4756 This is the symbol's name. It may contain any character except 4757 `\000', so is more general than ordinary symbol names. Some 4758 debuggers used to code arbitrarily complex structures into symbol 4759 names using this field. 4760 4761 TYPE 4762 An absolute expression. The symbol's type is set to the low 8 4763 bits of this expression. Any bit pattern is permitted, but `ld' 4764 and debuggers choke on silly bit patterns. 4765 4766 OTHER 4767 An absolute expression. The symbol's "other" attribute is set to 4768 the low 8 bits of this expression. 4769 4770 DESC 4771 An absolute expression. The symbol's descriptor is set to the low 4772 16 bits of this expression. 4773 4774 VALUE 4775 An absolute expression which becomes the symbol's value. 4776 4777 If a warning is detected while reading a `.stabd', `.stabn', or 4778 `.stabs' statement, the symbol has probably already been created; you 4779 get a half-formed symbol in your object file. This is compatible with 4780 earlier assemblers! 4781 4782 `.stabd TYPE , OTHER , DESC' 4783 The "name" of the symbol generated is not even an empty string. 4784 It is a null pointer, for compatibility. Older assemblers used a 4785 null pointer so they didn't waste space in object files with empty 4786 strings. 4787 4788 The symbol's value is set to the location counter, relocatably. 4789 When your program is linked, the value of this symbol is the 4790 address of the location counter when the `.stabd' was assembled. 4791 4792 `.stabn TYPE , OTHER , DESC , VALUE' 4793 The name of the symbol is set to the empty string `""'. 4794 4795 `.stabs STRING , TYPE , OTHER , DESC , VALUE' 4796 All five fields are specified. 4797 4798 4799 File: as.info, Node: String, Next: Struct, Prev: Stab, Up: Pseudo Ops 4800 4801 7.104 `.string' "STR", `.string8' "STR", `.string16' 4802 ==================================================== 4803 4804 "STR", `.string32' "STR", `.string64' "STR" 4805 4806 Copy the characters in STR to the object file. You may specify more 4807 than one string to copy, separated by commas. Unless otherwise 4808 specified for a particular machine, the assembler marks the end of each 4809 string with a 0 byte. You can use any of the escape sequences 4810 described in *Note Strings: Strings. 4811 4812 The variants `string16', `string32' and `string64' differ from the 4813 `string' pseudo opcode in that each 8-bit character from STR is copied 4814 and expanded to 16, 32 or 64 bits respectively. The expanded characters 4815 are stored in target endianness byte order. 4816 4817 Example: 4818 .string32 "BYE" 4819 expands to: 4820 .string "B\0\0\0Y\0\0\0E\0\0\0" /* On little endian targets. */ 4821 .string "\0\0\0B\0\0\0Y\0\0\0E" /* On big endian targets. */ 4822 4823 4824 File: as.info, Node: Struct, Next: SubSection, Prev: String, Up: Pseudo Ops 4825 4826 7.105 `.struct EXPRESSION' 4827 ========================== 4828 4829 Switch to the absolute section, and set the section offset to 4830 EXPRESSION, which must be an absolute expression. You might use this 4831 as follows: 4832 .struct 0 4833 field1: 4834 .struct field1 + 4 4835 field2: 4836 .struct field2 + 4 4837 field3: 4838 This would define the symbol `field1' to have the value 0, the symbol 4839 `field2' to have the value 4, and the symbol `field3' to have the value 4840 8. Assembly would be left in the absolute section, and you would need 4841 to use a `.section' directive of some sort to change to some other 4842 section before further assembly. 4843 4844 4845 File: as.info, Node: SubSection, Next: Symver, Prev: Struct, Up: Pseudo Ops 4846 4847 7.106 `.subsection NAME' 4848 ======================== 4849 4850 This is one of the ELF section stack manipulation directives. The 4851 others are `.section' (*note Section::), `.pushsection' (*note 4852 PushSection::), `.popsection' (*note PopSection::), and `.previous' 4853 (*note Previous::). 4854 4855 This directive replaces the current subsection with `name'. The 4856 current section is not changed. The replaced subsection is put onto 4857 the section stack in place of the then current top of stack subsection. 4858 4859 4860 File: as.info, Node: Symver, Next: Tag, Prev: SubSection, Up: Pseudo Ops 4861 4862 7.107 `.symver' 4863 =============== 4864 4865 Use the `.symver' directive to bind symbols to specific version nodes 4866 within a source file. This is only supported on ELF platforms, and is 4867 typically used when assembling files to be linked into a shared library. 4868 There are cases where it may make sense to use this in objects to be 4869 bound into an application itself so as to override a versioned symbol 4870 from a shared library. 4871 4872 For ELF targets, the `.symver' directive can be used like this: 4873 .symver NAME, NAME2@NODENAME 4874 If the symbol NAME is defined within the file being assembled, the 4875 `.symver' directive effectively creates a symbol alias with the name 4876 NAME2@NODENAME, and in fact the main reason that we just don't try and 4877 create a regular alias is that the @ character isn't permitted in 4878 symbol names. The NAME2 part of the name is the actual name of the 4879 symbol by which it will be externally referenced. The name NAME itself 4880 is merely a name of convenience that is used so that it is possible to 4881 have definitions for multiple versions of a function within a single 4882 source file, and so that the compiler can unambiguously know which 4883 version of a function is being mentioned. The NODENAME portion of the 4884 alias should be the name of a node specified in the version script 4885 supplied to the linker when building a shared library. If you are 4886 attempting to override a versioned symbol from a shared library, then 4887 NODENAME should correspond to the nodename of the symbol you are trying 4888 to override. 4889 4890 If the symbol NAME is not defined within the file being assembled, 4891 all references to NAME will be changed to NAME2@NODENAME. If no 4892 reference to NAME is made, NAME2@NODENAME will be removed from the 4893 symbol table. 4894 4895 Another usage of the `.symver' directive is: 4896 .symver NAME, NAME2@@NODENAME 4897 In this case, the symbol NAME must exist and be defined within the 4898 file being assembled. It is similar to NAME2@NODENAME. The difference 4899 is NAME2@@NODENAME will also be used to resolve references to NAME2 by 4900 the linker. 4901 4902 The third usage of the `.symver' directive is: 4903 .symver NAME, NAME2@@@NODENAME 4904 When NAME is not defined within the file being assembled, it is 4905 treated as NAME2@NODENAME. When NAME is defined within the file being 4906 assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME. 4907 4908 4909 File: as.info, Node: Tag, Next: Text, Prev: Symver, Up: Pseudo Ops 4910 4911 7.108 `.tag STRUCTNAME' 4912 ======================= 4913 4914 This directive is generated by compilers to include auxiliary debugging 4915 information in the symbol table. It is only permitted inside 4916 `.def'/`.endef' pairs. Tags are used to link structure definitions in 4917 the symbol table with instances of those structures. 4918 4919 4920 File: as.info, Node: Text, Next: Title, Prev: Tag, Up: Pseudo Ops 4921 4922 7.109 `.text SUBSECTION' 4923 ======================== 4924 4925 Tells `as' to assemble the following statements onto the end of the 4926 text subsection numbered SUBSECTION, which is an absolute expression. 4927 If SUBSECTION is omitted, subsection number zero is used. 4928 4929 4930 File: as.info, Node: Title, Next: Type, Prev: Text, Up: Pseudo Ops 4931 4932 7.110 `.title "HEADING"' 4933 ======================== 4934 4935 Use HEADING as the title (second line, immediately after the source 4936 file name and pagenumber) when generating assembly listings. 4937 4938 This directive affects subsequent pages, as well as the current page 4939 if it appears within ten lines of the top of a page. 4940 4941 4942 File: as.info, Node: Type, Next: Uleb128, Prev: Title, Up: Pseudo Ops 4943 4944 7.111 `.type' 4945 ============= 4946 4947 This directive is used to set the type of a symbol. 4948 4949 COFF Version 4950 ------------ 4951 4952 For COFF targets, this directive is permitted only within 4953 `.def'/`.endef' pairs. It is used like this: 4954 4955 .type INT 4956 4957 This records the integer INT as the type attribute of a symbol table 4958 entry. 4959 4960 ELF Version 4961 ----------- 4962 4963 For ELF targets, the `.type' directive is used like this: 4964 4965 .type NAME , TYPE DESCRIPTION 4966 4967 This sets the type of symbol NAME to be either a function symbol or 4968 an object symbol. There are five different syntaxes supported for the 4969 TYPE DESCRIPTION field, in order to provide compatibility with various 4970 other assemblers. 4971 4972 Because some of the characters used in these syntaxes (such as `@' 4973 and `#') are comment characters for some architectures, some of the 4974 syntaxes below do not work on all architectures. The first variant 4975 will be accepted by the GNU assembler on all architectures so that 4976 variant should be used for maximum portability, if you do not need to 4977 assemble your code with other assemblers. 4978 4979 The syntaxes supported are: 4980 4981 .type <name> STT_<TYPE_IN_UPPER_CASE> 4982 .type <name>,#<type> 4983 .type <name>,@<type> 4984 .type <name>,%>type> 4985 .type <name>,"<type>" 4986 4987 The types supported are: 4988 4989 `STT_FUNC' 4990 `function' 4991 Mark the symbol as being a function name. 4992 4993 `STT_OBJECT' 4994 `object' 4995 Mark the symbol as being a data object. 4996 4997 `STT_TLS' 4998 `tls_object' 4999 Mark the symbol as being a thead-local data object. 5000 5001 `STT_COMMON' 5002 `common' 5003 Mark the symbol as being a common data object. 5004 5005 Note: Some targets support extra types in addition to those listed 5006 above. 5007 5008 5009 File: as.info, Node: Uleb128, Next: Val, Prev: Type, Up: Pseudo Ops 5010 5011 7.112 `.uleb128 EXPRESSIONS' 5012 ============================ 5013 5014 ULEB128 stands for "unsigned little endian base 128." This is a 5015 compact, variable length representation of numbers used by the DWARF 5016 symbolic debugging format. *Note `.sleb128': Sleb128. 5017 5018 5019 File: as.info, Node: Val, Next: Version, Prev: Uleb128, Up: Pseudo Ops 5020 5021 7.113 `.val ADDR' 5022 ================= 5023 5024 This directive, permitted only within `.def'/`.endef' pairs, records 5025 the address ADDR as the value attribute of a symbol table entry. 5026 5027 5028 File: as.info, Node: Version, Next: VTableEntry, Prev: Val, Up: Pseudo Ops 5029 5030 7.114 `.version "STRING"' 5031 ========================= 5032 5033 This directive creates a `.note' section and places into it an ELF 5034 formatted note of type NT_VERSION. The note's name is set to `string'. 5035 5036 5037 File: as.info, Node: VTableEntry, Next: VTableInherit, Prev: Version, Up: Pseudo Ops 5038 5039 7.115 `.vtable_entry TABLE, OFFSET' 5040 =================================== 5041 5042 This directive finds or creates a symbol `table' and creates a 5043 `VTABLE_ENTRY' relocation for it with an addend of `offset'. 5044 5045 5046 File: as.info, Node: VTableInherit, Next: Warning, Prev: VTableEntry, Up: Pseudo Ops 5047 5048 7.116 `.vtable_inherit CHILD, PARENT' 5049 ===================================== 5050 5051 This directive finds the symbol `child' and finds or creates the symbol 5052 `parent' and then creates a `VTABLE_INHERIT' relocation for the parent 5053 whose addend is the value of the child symbol. As a special case the 5054 parent name of `0' is treated as referring to the `*ABS*' section. 5055 5056 5057 File: as.info, Node: Warning, Next: Weak, Prev: VTableInherit, Up: Pseudo Ops 5058 5059 7.117 `.warning "STRING"' 5060 ========================= 5061 5062 Similar to the directive `.error' (*note `.error "STRING"': Error.), 5063 but just emits a warning. 5064 5065 5066 File: as.info, Node: Weak, Next: Weakref, Prev: Warning, Up: Pseudo Ops 5067 5068 7.118 `.weak NAMES' 5069 =================== 5070 5071 This directive sets the weak attribute on the comma separated list of 5072 symbol `names'. If the symbols do not already exist, they will be 5073 created. 5074 5075 On COFF targets other than PE, weak symbols are a GNU extension. 5076 This directive sets the weak attribute on the comma separated list of 5077 symbol `names'. If the symbols do not already exist, they will be 5078 created. 5079 5080 On the PE target, weak symbols are supported natively as weak 5081 aliases. When a weak symbol is created that is not an alias, GAS 5082 creates an alternate symbol to hold the default value. 5083 5084 5085 File: as.info, Node: Weakref, Next: Word, Prev: Weak, Up: Pseudo Ops 5086 5087 7.119 `.weakref ALIAS, TARGET' 5088 ============================== 5089 5090 This directive creates an alias to the target symbol that enables the 5091 symbol to be referenced with weak-symbol semantics, but without 5092 actually making it weak. If direct references or definitions of the 5093 symbol are present, then the symbol will not be weak, but if all 5094 references to it are through weak references, the symbol will be marked 5095 as weak in the symbol table. 5096 5097 The effect is equivalent to moving all references to the alias to a 5098 separate assembly source file, renaming the alias to the symbol in it, 5099 declaring the symbol as weak there, and running a reloadable link to 5100 merge the object files resulting from the assembly of the new source 5101 file and the old source file that had the references to the alias 5102 removed. 5103 5104 The alias itself never makes to the symbol table, and is entirely 5105 handled within the assembler. 5106 5107 5108 File: as.info, Node: Word, Next: Deprecated, Prev: Weakref, Up: Pseudo Ops 5109 5110 7.120 `.word EXPRESSIONS' 5111 ========================= 5112 5113 This directive expects zero or more EXPRESSIONS, of any section, 5114 separated by commas. 5115 5116 The size of the number emitted, and its byte order, depend on what 5117 target computer the assembly is for. 5118 5119 _Warning: Special Treatment to support Compilers_ 5120 5121 Machines with a 32-bit address space, but that do less than 32-bit 5122 addressing, require the following special treatment. If the machine of 5123 interest to you does 32-bit addressing (or doesn't require it; *note 5124 Machine Dependencies::), you can ignore this issue. 5125 5126 In order to assemble compiler output into something that works, `as' 5127 occasionally does strange things to `.word' directives. Directives of 5128 the form `.word sym1-sym2' are often emitted by compilers as part of 5129 jump tables. Therefore, when `as' assembles a directive of the form 5130 `.word sym1-sym2', and the difference between `sym1' and `sym2' does 5131 not fit in 16 bits, `as' creates a "secondary jump table", immediately 5132 before the next label. This secondary jump table is preceded by a 5133 short-jump to the first byte after the secondary table. This 5134 short-jump prevents the flow of control from accidentally falling into 5135 the new table. Inside the table is a long-jump to `sym2'. The 5136 original `.word' contains `sym1' minus the address of the long-jump to 5137 `sym2'. 5138 5139 If there were several occurrences of `.word sym1-sym2' before the 5140 secondary jump table, all of them are adjusted. If there was a `.word 5141 sym3-sym4', that also did not fit in sixteen bits, a long-jump to 5142 `sym4' is included in the secondary jump table, and the `.word' 5143 directives are adjusted to contain `sym3' minus the address of the 5144 long-jump to `sym4'; and so on, for as many entries in the original 5145 jump table as necessary. 5146 5147 5148 File: as.info, Node: Deprecated, Prev: Word, Up: Pseudo Ops 5149 5150 7.121 Deprecated Directives 5151 =========================== 5152 5153 One day these directives won't work. They are included for 5154 compatibility with older assemblers. 5155 .abort 5156 5157 .line 5158 5159 5160 File: as.info, Node: Object Attributes, Next: Machine Dependencies, Prev: Pseudo Ops, Up: Top 5161 5162 8 Object Attributes 5163 ******************* 5164 5165 `as' assembles source files written for a specific architecture into 5166 object files for that architecture. But not all object files are alike. 5167 Many architectures support incompatible variations. For instance, 5168 floating point arguments might be passed in floating point registers if 5169 the object file requires hardware floating point support--or floating 5170 point arguments might be passed in integer registers if the object file 5171 supports processors with no hardware floating point unit. Or, if two 5172 objects are built for different generations of the same architecture, 5173 the combination may require the newer generation at run-time. 5174 5175 This information is useful during and after linking. At link time, 5176 `ld' can warn about incompatible object files. After link time, tools 5177 like `gdb' can use it to process the linked file correctly. 5178 5179 Compatibility information is recorded as a series of object 5180 attributes. Each attribute has a "vendor", "tag", and "value". The 5181 vendor is a string, and indicates who sets the meaning of the tag. The 5182 tag is an integer, and indicates what property the attribute describes. 5183 The value may be a string or an integer, and indicates how the 5184 property affects this object. Missing attributes are the same as 5185 attributes with a zero value or empty string value. 5186 5187 Object attributes were developed as part of the ABI for the ARM 5188 Architecture. The file format is documented in `ELF for the ARM 5189 Architecture'. 5190 5191 * Menu: 5192 5193 * GNU Object Attributes:: GNU Object Attributes 5194 * Defining New Object Attributes:: Defining New Object Attributes 5195 5196 5197 File: as.info, Node: GNU Object Attributes, Next: Defining New Object Attributes, Up: Object Attributes 5198 5199 8.1 GNU Object Attributes 5200 ========================= 5201 5202 The `.gnu_attribute' directive records an object attribute with vendor 5203 `gnu'. 5204 5205 Except for `Tag_compatibility', which has both an integer and a 5206 string for its value, GNU attributes have a string value if the tag 5207 number is odd and an integer value if the tag number is even. The 5208 second bit (`TAG & 2' is set for architecture-independent attributes 5209 and clear for architecture-dependent ones. 5210 5211 8.1.1 Common GNU attributes 5212 --------------------------- 5213 5214 These attributes are valid on all architectures. 5215 5216 Tag_compatibility (32) 5217 The compatibility attribute takes an integer flag value and a 5218 vendor name. If the flag value is 0, the file is compatible with 5219 other toolchains. If it is 1, then the file is only compatible 5220 with the named toolchain. If it is greater than 1, the file can 5221 only be processed by other toolchains under some private 5222 arrangement indicated by the flag value and the vendor name. 5223 5224 8.1.2 MIPS Attributes 5225 --------------------- 5226 5227 Tag_GNU_MIPS_ABI_FP (4) 5228 The floating-point ABI used by this object file. The value will 5229 be: 5230 5231 * 0 for files not affected by the floating-point ABI. 5232 5233 * 1 for files using the hardware floating-point with a standard 5234 double-precision FPU. 5235 5236 * 2 for files using the hardware floating-point ABI with a 5237 single-precision FPU. 5238 5239 * 3 for files using the software floating-point ABI. 5240 5241 * 4 for files using the hardware floating-point ABI with 64-bit 5242 wide double-precision floating-point registers and 32-bit 5243 wide general purpose registers. 5244 5245 8.1.3 PowerPC Attributes 5246 ------------------------ 5247 5248 Tag_GNU_Power_ABI_FP (4) 5249 The floating-point ABI used by this object file. The value will 5250 be: 5251 5252 * 0 for files not affected by the floating-point ABI. 5253 5254 * 1 for files using double-precision hardware floating-point 5255 ABI. 5256 5257 * 2 for files using the software floating-point ABI. 5258 5259 * 3 for files using single-precision hardware floating-point 5260 ABI. 5261 5262 Tag_GNU_Power_ABI_Vector (8) 5263 The vector ABI used by this object file. The value will be: 5264 5265 * 0 for files not affected by the vector ABI. 5266 5267 * 1 for files using general purpose registers to pass vectors. 5268 5269 * 2 for files using AltiVec registers to pass vectors. 5270 5271 * 3 for files using SPE registers to pass vectors. 5272 5273 5274 File: as.info, Node: Defining New Object Attributes, Prev: GNU Object Attributes, Up: Object Attributes 5275 5276 8.2 Defining New Object Attributes 5277 ================================== 5278 5279 If you want to define a new GNU object attribute, here are the places 5280 you will need to modify. New attributes should be discussed on the 5281 `binutils' mailing list. 5282 5283 * This manual, which is the official register of attributes. 5284 5285 * The header for your architecture `include/elf', to define the tag. 5286 5287 * The `bfd' support file for your architecture, to merge the 5288 attribute and issue any appropriate link warnings. 5289 5290 * Test cases in `ld/testsuite' for merging and link warnings. 5291 5292 * `binutils/readelf.c' to display your attribute. 5293 5294 * GCC, if you want the compiler to mark the attribute automatically. 5295 5296 5297 File: as.info, Node: Machine Dependencies, Next: Reporting Bugs, Prev: Object Attributes, Up: Top 5298 5299 9 Machine Dependent Features 5300 **************************** 5301 5302 The machine instruction sets are (almost by definition) different on 5303 each machine where `as' runs. Floating point representations vary as 5304 well, and `as' often supports a few additional directives or 5305 command-line options for compatibility with other assemblers on a 5306 particular platform. Finally, some versions of `as' support special 5307 pseudo-instructions for branch optimization. 5308 5309 This chapter discusses most of these differences, though it does not 5310 include details on any machine's instruction set. For details on that 5311 subject, see the hardware manufacturer's manual. 5312 5313 * Menu: 5314 5315 5316 * Alpha-Dependent:: Alpha Dependent Features 5317 5318 * ARC-Dependent:: ARC Dependent Features 5319 5320 * ARM-Dependent:: ARM Dependent Features 5321 5322 * AVR-Dependent:: AVR Dependent Features 5323 5324 * BFIN-Dependent:: BFIN Dependent Features 5325 5326 * CR16-Dependent:: CR16 Dependent Features 5327 5328 * CRIS-Dependent:: CRIS Dependent Features 5329 5330 * D10V-Dependent:: D10V Dependent Features 5331 5332 * D30V-Dependent:: D30V Dependent Features 5333 5334 * H8/300-Dependent:: Renesas H8/300 Dependent Features 5335 5336 * HPPA-Dependent:: HPPA Dependent Features 5337 5338 * ESA/390-Dependent:: IBM ESA/390 Dependent Features 5339 5340 * i386-Dependent:: Intel 80386 and AMD x86-64 Dependent Features 5341 5342 * i860-Dependent:: Intel 80860 Dependent Features 5343 5344 * i960-Dependent:: Intel 80960 Dependent Features 5345 5346 * IA-64-Dependent:: Intel IA-64 Dependent Features 5347 5348 * IP2K-Dependent:: IP2K Dependent Features 5349 5350 * M32C-Dependent:: M32C Dependent Features 5351 5352 * M32R-Dependent:: M32R Dependent Features 5353 5354 * M68K-Dependent:: M680x0 Dependent Features 5355 5356 * M68HC11-Dependent:: M68HC11 and 68HC12 Dependent Features 5357 5358 * MIPS-Dependent:: MIPS Dependent Features 5359 5360 * MMIX-Dependent:: MMIX Dependent Features 5361 5362 * MSP430-Dependent:: MSP430 Dependent Features 5363 5364 * SH-Dependent:: Renesas / SuperH SH Dependent Features 5365 * SH64-Dependent:: SuperH SH64 Dependent Features 5366 5367 * PDP-11-Dependent:: PDP-11 Dependent Features 5368 5369 * PJ-Dependent:: picoJava Dependent Features 5370 5371 * PPC-Dependent:: PowerPC Dependent Features 5372 5373 * Sparc-Dependent:: SPARC Dependent Features 5374 5375 * TIC54X-Dependent:: TI TMS320C54x Dependent Features 5376 5377 * V850-Dependent:: V850 Dependent Features 5378 5379 * Xtensa-Dependent:: Xtensa Dependent Features 5380 5381 * Z80-Dependent:: Z80 Dependent Features 5382 5383 * Z8000-Dependent:: Z8000 Dependent Features 5384 5385 * Vax-Dependent:: VAX Dependent Features 5386 5387 5388 File: as.info, Node: Alpha-Dependent, Next: ARC-Dependent, Up: Machine Dependencies 5389 5390 9.1 Alpha Dependent Features 5391 ============================ 5392 5393 * Menu: 5394 5395 * Alpha Notes:: Notes 5396 * Alpha Options:: Options 5397 * Alpha Syntax:: Syntax 5398 * Alpha Floating Point:: Floating Point 5399 * Alpha Directives:: Alpha Machine Directives 5400 * Alpha Opcodes:: Opcodes 5401 5402 5403 File: as.info, Node: Alpha Notes, Next: Alpha Options, Up: Alpha-Dependent 5404 5405 9.1.1 Notes 5406 ----------- 5407 5408 The documentation here is primarily for the ELF object format. `as' 5409 also supports the ECOFF and EVAX formats, but features specific to 5410 these formats are not yet documented. 5411 5412 5413 File: as.info, Node: Alpha Options, Next: Alpha Syntax, Prev: Alpha Notes, Up: Alpha-Dependent 5414 5415 9.1.2 Options 5416 ------------- 5417 5418 `-mCPU' 5419 This option specifies the target processor. If an attempt is made 5420 to assemble an instruction which will not execute on the target 5421 processor, the assembler may either expand the instruction as a 5422 macro or issue an error message. This option is equivalent to the 5423 `.arch' directive. 5424 5425 The following processor names are recognized: `21064', `21064a', 5426 `21066', `21068', `21164', `21164a', `21164pc', `21264', `21264a', 5427 `21264b', `ev4', `ev5', `lca45', `ev5', `ev56', `pca56', `ev6', 5428 `ev67', `ev68'. The special name `all' may be used to allow the 5429 assembler to accept instructions valid for any Alpha processor. 5430 5431 In order to support existing practice in OSF/1 with respect to 5432 `.arch', and existing practice within `MILO' (the Linux ARC 5433 bootloader), the numbered processor names (e.g. 21064) enable the 5434 processor-specific PALcode instructions, while the 5435 "electro-vlasic" names (e.g. `ev4') do not. 5436 5437 `-mdebug' 5438 `-no-mdebug' 5439 Enables or disables the generation of `.mdebug' encapsulation for 5440 stabs directives and procedure descriptors. The default is to 5441 automatically enable `.mdebug' when the first stabs directive is 5442 seen. 5443 5444 `-relax' 5445 This option forces all relocations to be put into the object file, 5446 instead of saving space and resolving some relocations at assembly 5447 time. Note that this option does not propagate all symbol 5448 arithmetic into the object file, because not all symbol arithmetic 5449 can be represented. However, the option can still be useful in 5450 specific applications. 5451 5452 `-g' 5453 This option is used when the compiler generates debug information. 5454 When `gcc' is using `mips-tfile' to generate debug information 5455 for ECOFF, local labels must be passed through to the object file. 5456 Otherwise this option has no effect. 5457 5458 `-GSIZE' 5459 A local common symbol larger than SIZE is placed in `.bss', while 5460 smaller symbols are placed in `.sbss'. 5461 5462 `-F' 5463 `-32addr' 5464 These options are ignored for backward compatibility. 5465 5466 5467 File: as.info, Node: Alpha Syntax, Next: Alpha Floating Point, Prev: Alpha Options, Up: Alpha-Dependent 5468 5469 9.1.3 Syntax 5470 ------------ 5471 5472 The assembler syntax closely follow the Alpha Reference Manual; 5473 assembler directives and general syntax closely follow the OSF/1 and 5474 OpenVMS syntax, with a few differences for ELF. 5475 5476 * Menu: 5477 5478 * Alpha-Chars:: Special Characters 5479 * Alpha-Regs:: Register Names 5480 * Alpha-Relocs:: Relocations 5481 5482 5483 File: as.info, Node: Alpha-Chars, Next: Alpha-Regs, Up: Alpha Syntax 5484 5485 9.1.3.1 Special Characters 5486 .......................... 5487 5488 `#' is the line comment character. 5489 5490 `;' can be used instead of a newline to separate statements. 5491 5492 5493 File: as.info, Node: Alpha-Regs, Next: Alpha-Relocs, Prev: Alpha-Chars, Up: Alpha Syntax 5494 5495 9.1.3.2 Register Names 5496 ...................... 5497 5498 The 32 integer registers are referred to as `$N' or `$rN'. In 5499 addition, registers 15, 28, 29, and 30 may be referred to by the 5500 symbols `$fp', `$at', `$gp', and `$sp' respectively. 5501 5502 The 32 floating-point registers are referred to as `$fN'. 5503 5504 5505 File: as.info, Node: Alpha-Relocs, Prev: Alpha-Regs, Up: Alpha Syntax 5506 5507 9.1.3.3 Relocations 5508 ................... 5509 5510 Some of these relocations are available for ECOFF, but mostly only for 5511 ELF. They are modeled after the relocation format introduced in 5512 Digital Unix 4.0, but there are additions. 5513 5514 The format is `!TAG' or `!TAG!NUMBER' where TAG is the name of the 5515 relocation. In some cases NUMBER is used to relate specific 5516 instructions. 5517 5518 The relocation is placed at the end of the instruction like so: 5519 5520 ldah $0,a($29) !gprelhigh 5521 lda $0,a($0) !gprellow 5522 ldq $1,b($29) !literal!100 5523 ldl $2,0($1) !lituse_base!100 5524 5525 `!literal' 5526 `!literal!N' 5527 Used with an `ldq' instruction to load the address of a symbol 5528 from the GOT. 5529 5530 A sequence number N is optional, and if present is used to pair 5531 `lituse' relocations with this `literal' relocation. The `lituse' 5532 relocations are used by the linker to optimize the code based on 5533 the final location of the symbol. 5534 5535 Note that these optimizations are dependent on the data flow of the 5536 program. Therefore, if _any_ `lituse' is paired with a `literal' 5537 relocation, then _all_ uses of the register set by the `literal' 5538 instruction must also be marked with `lituse' relocations. This 5539 is because the original `literal' instruction may be deleted or 5540 transformed into another instruction. 5541 5542 Also note that there may be a one-to-many relationship between 5543 `literal' and `lituse', but not a many-to-one. That is, if there 5544 are two code paths that load up the same address and feed the 5545 value to a single use, then the use may not use a `lituse' 5546 relocation. 5547 5548 `!lituse_base!N' 5549 Used with any memory format instruction (e.g. `ldl') to indicate 5550 that the literal is used for an address load. The offset field of 5551 the instruction must be zero. During relaxation, the code may be 5552 altered to use a gp-relative load. 5553 5554 `!lituse_jsr!N' 5555 Used with a register branch format instruction (e.g. `jsr') to 5556 indicate that the literal is used for a call. During relaxation, 5557 the code may be altered to use a direct branch (e.g. `bsr'). 5558 5559 `!lituse_jsrdirect!N' 5560 Similar to `lituse_jsr', but also that this call cannot be vectored 5561 through a PLT entry. This is useful for functions with special 5562 calling conventions which do not allow the normal call-clobbered 5563 registers to be clobbered. 5564 5565 `!lituse_bytoff!N' 5566 Used with a byte mask instruction (e.g. `extbl') to indicate that 5567 only the low 3 bits of the address are relevant. During 5568 relaxation, the code may be altered to use an immediate instead of 5569 a register shift. 5570 5571 `!lituse_addr!N' 5572 Used with any other instruction to indicate that the original 5573 address is in fact used, and the original `ldq' instruction may 5574 not be altered or deleted. This is useful in conjunction with 5575 `lituse_jsr' to test whether a weak symbol is defined. 5576 5577 ldq $27,foo($29) !literal!1 5578 beq $27,is_undef !lituse_addr!1 5579 jsr $26,($27),foo !lituse_jsr!1 5580 5581 `!lituse_tlsgd!N' 5582 Used with a register branch format instruction to indicate that the 5583 literal is the call to `__tls_get_addr' used to compute the 5584 address of the thread-local storage variable whose descriptor was 5585 loaded with `!tlsgd!N'. 5586 5587 `!lituse_tlsldm!N' 5588 Used with a register branch format instruction to indicate that the 5589 literal is the call to `__tls_get_addr' used to compute the 5590 address of the base of the thread-local storage block for the 5591 current module. The descriptor for the module must have been 5592 loaded with `!tlsldm!N'. 5593 5594 `!gpdisp!N' 5595 Used with `ldah' and `lda' to load the GP from the current 5596 address, a-la the `ldgp' macro. The source register for the 5597 `ldah' instruction must contain the address of the `ldah' 5598 instruction. There must be exactly one `lda' instruction paired 5599 with the `ldah' instruction, though it may appear anywhere in the 5600 instruction stream. The immediate operands must be zero. 5601 5602 bsr $26,foo 5603 ldah $29,0($26) !gpdisp!1 5604 lda $29,0($29) !gpdisp!1 5605 5606 `!gprelhigh' 5607 Used with an `ldah' instruction to add the high 16 bits of a 5608 32-bit displacement from the GP. 5609 5610 `!gprellow' 5611 Used with any memory format instruction to add the low 16 bits of a 5612 32-bit displacement from the GP. 5613 5614 `!gprel' 5615 Used with any memory format instruction to add a 16-bit 5616 displacement from the GP. 5617 5618 `!samegp' 5619 Used with any branch format instruction to skip the GP load at the 5620 target address. The referenced symbol must have the same GP as the 5621 source object file, and it must be declared to either not use `$27' 5622 or perform a standard GP load in the first two instructions via the 5623 `.prologue' directive. 5624 5625 `!tlsgd' 5626 `!tlsgd!N' 5627 Used with an `lda' instruction to load the address of a TLS 5628 descriptor for a symbol in the GOT. 5629 5630 The sequence number N is optional, and if present it used to pair 5631 the descriptor load with both the `literal' loading the address of 5632 the `__tls_get_addr' function and the `lituse_tlsgd' marking the 5633 call to that function. 5634 5635 For proper relaxation, both the `tlsgd', `literal' and `lituse' 5636 relocations must be in the same extended basic block. That is, 5637 the relocation with the lowest address must be executed first at 5638 runtime. 5639 5640 `!tlsldm' 5641 `!tlsldm!N' 5642 Used with an `lda' instruction to load the address of a TLS 5643 descriptor for the current module in the GOT. 5644 5645 Similar in other respects to `tlsgd'. 5646 5647 `!gotdtprel' 5648 Used with an `ldq' instruction to load the offset of the TLS 5649 symbol within its module's thread-local storage block. Also known 5650 as the dynamic thread pointer offset or dtp-relative offset. 5651 5652 `!dtprelhi' 5653 `!dtprello' 5654 `!dtprel' 5655 Like `gprel' relocations except they compute dtp-relative offsets. 5656 5657 `!gottprel' 5658 Used with an `ldq' instruction to load the offset of the TLS 5659 symbol from the thread pointer. Also known as the tp-relative 5660 offset. 5661 5662 `!tprelhi' 5663 `!tprello' 5664 `!tprel' 5665 Like `gprel' relocations except they compute tp-relative offsets. 5666 5667 5668 File: as.info, Node: Alpha Floating Point, Next: Alpha Directives, Prev: Alpha Syntax, Up: Alpha-Dependent 5669 5670 9.1.4 Floating Point 5671 -------------------- 5672 5673 The Alpha family uses both IEEE and VAX floating-point numbers. 5674 5675 5676 File: as.info, Node: Alpha Directives, Next: Alpha Opcodes, Prev: Alpha Floating Point, Up: Alpha-Dependent 5677 5678 9.1.5 Alpha Assembler Directives 5679 -------------------------------- 5680 5681 `as' for the Alpha supports many additional directives for 5682 compatibility with the native assembler. This section describes them 5683 only briefly. 5684 5685 These are the additional directives in `as' for the Alpha: 5686 5687 `.arch CPU' 5688 Specifies the target processor. This is equivalent to the `-mCPU' 5689 command-line option. *Note Options: Alpha Options, for a list of 5690 values for CPU. 5691 5692 `.ent FUNCTION[, N]' 5693 Mark the beginning of FUNCTION. An optional number may follow for 5694 compatibility with the OSF/1 assembler, but is ignored. When 5695 generating `.mdebug' information, this will create a procedure 5696 descriptor for the function. In ELF, it will mark the symbol as a 5697 function a-la the generic `.type' directive. 5698 5699 `.end FUNCTION' 5700 Mark the end of FUNCTION. In ELF, it will set the size of the 5701 symbol a-la the generic `.size' directive. 5702 5703 `.mask MASK, OFFSET' 5704 Indicate which of the integer registers are saved in the current 5705 function's stack frame. MASK is interpreted a bit mask in which 5706 bit N set indicates that register N is saved. The registers are 5707 saved in a block located OFFSET bytes from the "canonical frame 5708 address" (CFA) which is the value of the stack pointer on entry to 5709 the function. The registers are saved sequentially, except that 5710 the return address register (normally `$26') is saved first. 5711 5712 This and the other directives that describe the stack frame are 5713 currently only used when generating `.mdebug' information. They 5714 may in the future be used to generate DWARF2 `.debug_frame' unwind 5715 information for hand written assembly. 5716 5717 `.fmask MASK, OFFSET' 5718 Indicate which of the floating-point registers are saved in the 5719 current stack frame. The MASK and OFFSET parameters are 5720 interpreted as with `.mask'. 5721 5722 `.frame FRAMEREG, FRAMEOFFSET, RETREG[, ARGOFFSET]' 5723 Describes the shape of the stack frame. The frame pointer in use 5724 is FRAMEREG; normally this is either `$fp' or `$sp'. The frame 5725 pointer is FRAMEOFFSET bytes below the CFA. The return address is 5726 initially located in RETREG until it is saved as indicated in 5727 `.mask'. For compatibility with OSF/1 an optional ARGOFFSET 5728 parameter is accepted and ignored. It is believed to indicate the 5729 offset from the CFA to the saved argument registers. 5730 5731 `.prologue N' 5732 Indicate that the stack frame is set up and all registers have been 5733 spilled. The argument N indicates whether and how the function 5734 uses the incoming "procedure vector" (the address of the called 5735 function) in `$27'. 0 indicates that `$27' is not used; 1 5736 indicates that the first two instructions of the function use `$27' 5737 to perform a load of the GP register; 2 indicates that `$27' is 5738 used in some non-standard way and so the linker cannot elide the 5739 load of the procedure vector during relaxation. 5740 5741 `.usepv FUNCTION, WHICH' 5742 Used to indicate the use of the `$27' register, similar to 5743 `.prologue', but without the other semantics of needing to be 5744 inside an open `.ent'/`.end' block. 5745 5746 The WHICH argument should be either `no', indicating that `$27' is 5747 not used, or `std', indicating that the first two instructions of 5748 the function perform a GP load. 5749 5750 One might use this directive instead of `.prologue' if you are 5751 also using dwarf2 CFI directives. 5752 5753 `.gprel32 EXPRESSION' 5754 Computes the difference between the address in EXPRESSION and the 5755 GP for the current object file, and stores it in 4 bytes. In 5756 addition to being smaller than a full 8 byte address, this also 5757 does not require a dynamic relocation when used in a shared 5758 library. 5759 5760 `.t_floating EXPRESSION' 5761 Stores EXPRESSION as an IEEE double precision value. 5762 5763 `.s_floating EXPRESSION' 5764 Stores EXPRESSION as an IEEE single precision value. 5765 5766 `.f_floating EXPRESSION' 5767 Stores EXPRESSION as a VAX F format value. 5768 5769 `.g_floating EXPRESSION' 5770 Stores EXPRESSION as a VAX G format value. 5771 5772 `.d_floating EXPRESSION' 5773 Stores EXPRESSION as a VAX D format value. 5774 5775 `.set FEATURE' 5776 Enables or disables various assembler features. Using the positive 5777 name of the feature enables while using `noFEATURE' disables. 5778 5779 `at' 5780 Indicates that macro expansions may clobber the "assembler 5781 temporary" (`$at' or `$28') register. Some macros may not be 5782 expanded without this and will generate an error message if 5783 `noat' is in effect. When `at' is in effect, a warning will 5784 be generated if `$at' is used by the programmer. 5785 5786 `macro' 5787 Enables the expansion of macro instructions. Note that 5788 variants of real instructions, such as `br label' vs `br 5789 $31,label' are considered alternate forms and not macros. 5790 5791 `move' 5792 `reorder' 5793 `volatile' 5794 These control whether and how the assembler may re-order 5795 instructions. Accepted for compatibility with the OSF/1 5796 assembler, but `as' does not do instruction scheduling, so 5797 these features are ignored. 5798 5799 The following directives are recognized for compatibility with the 5800 OSF/1 assembler but are ignored. 5801 5802 .proc .aproc 5803 .reguse .livereg 5804 .option .aent 5805 .ugen .eflag 5806 .alias .noalias 5807 5808 5809 File: as.info, Node: Alpha Opcodes, Prev: Alpha Directives, Up: Alpha-Dependent 5810 5811 9.1.6 Opcodes 5812 ------------- 5813 5814 For detailed information on the Alpha machine instruction set, see the 5815 Alpha Architecture Handbook 5816 (ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf). 5817 5818 5819 File: as.info, Node: ARC-Dependent, Next: ARM-Dependent, Prev: Alpha-Dependent, Up: Machine Dependencies 5820 5821 9.2 ARC Dependent Features 5822 ========================== 5823 5824 * Menu: 5825 5826 * ARC Options:: Options 5827 * ARC Syntax:: Syntax 5828 * ARC Floating Point:: Floating Point 5829 * ARC Directives:: ARC Machine Directives 5830 * ARC Opcodes:: Opcodes 5831 5832 5833 File: as.info, Node: ARC Options, Next: ARC Syntax, Up: ARC-Dependent 5834 5835 9.2.1 Options 5836 ------------- 5837 5838 `-marc[5|6|7|8]' 5839 This option selects the core processor variant. Using `-marc' is 5840 the same as `-marc6', which is also the default. 5841 5842 `arc5' 5843 Base instruction set. 5844 5845 `arc6' 5846 Jump-and-link (jl) instruction. No requirement of an 5847 instruction between setting flags and conditional jump. For 5848 example: 5849 5850 mov.f r0,r1 5851 beq foo 5852 5853 `arc7' 5854 Break (brk) and sleep (sleep) instructions. 5855 5856 `arc8' 5857 Software interrupt (swi) instruction. 5858 5859 5860 Note: the `.option' directive can to be used to select a core 5861 variant from within assembly code. 5862 5863 `-EB' 5864 This option specifies that the output generated by the assembler 5865 should be marked as being encoded for a big-endian processor. 5866 5867 `-EL' 5868 This option specifies that the output generated by the assembler 5869 should be marked as being encoded for a little-endian processor - 5870 this is the default. 5871 5872 5873 5874 File: as.info, Node: ARC Syntax, Next: ARC Floating Point, Prev: ARC Options, Up: ARC-Dependent 5875 5876 9.2.2 Syntax 5877 ------------ 5878 5879 * Menu: 5880 5881 * ARC-Chars:: Special Characters 5882 * ARC-Regs:: Register Names 5883 5884 5885 File: as.info, Node: ARC-Chars, Next: ARC-Regs, Up: ARC Syntax 5886 5887 9.2.2.1 Special Characters 5888 .......................... 5889 5890 *TODO* 5891 5892 5893 File: as.info, Node: ARC-Regs, Prev: ARC-Chars, Up: ARC Syntax 5894 5895 9.2.2.2 Register Names 5896 ...................... 5897 5898 *TODO* 5899 5900 5901 File: as.info, Node: ARC Floating Point, Next: ARC Directives, Prev: ARC Syntax, Up: ARC-Dependent 5902 5903 9.2.3 Floating Point 5904 -------------------- 5905 5906 The ARC core does not currently have hardware floating point support. 5907 Software floating point support is provided by `GCC' and uses IEEE 5908 floating-point numbers. 5909 5910 5911 File: as.info, Node: ARC Directives, Next: ARC Opcodes, Prev: ARC Floating Point, Up: ARC-Dependent 5912 5913 9.2.4 ARC Machine Directives 5914 ---------------------------- 5915 5916 The ARC version of `as' supports the following additional machine 5917 directives: 5918 5919 `.2byte EXPRESSIONS' 5920 *TODO* 5921 5922 `.3byte EXPRESSIONS' 5923 *TODO* 5924 5925 `.4byte EXPRESSIONS' 5926 *TODO* 5927 5928 `.extAuxRegister NAME,ADDRESS,MODE' 5929 The ARCtangent A4 has extensible auxiliary register space. The 5930 auxiliary registers can be defined in the assembler source code by 5931 using this directive. The first parameter is the NAME of the new 5932 auxiallry register. The second parameter is the ADDRESS of the 5933 register in the auxiliary register memory map for the variant of 5934 the ARC. The third parameter specifies the MODE in which the 5935 register can be operated is and it can be one of: 5936 5937 `r (readonly)' 5938 5939 `w (write only)' 5940 5941 `r|w (read or write)' 5942 5943 For example: 5944 5945 .extAuxRegister mulhi,0x12,w 5946 5947 This specifies an extension auxiliary register called _mulhi_ 5948 which is at address 0x12 in the memory space and which is only 5949 writable. 5950 5951 `.extCondCode SUFFIX,VALUE' 5952 The condition codes on the ARCtangent A4 are extensible and can be 5953 specified by means of this assembler directive. They are specified 5954 by the suffix and the value for the condition code. They can be 5955 used to specify extra condition codes with any values. For 5956 example: 5957 5958 .extCondCode is_busy,0x14 5959 5960 add.is_busy r1,r2,r3 5961 bis_busy _main 5962 5963 `.extCoreRegister NAME,REGNUM,MODE,SHORTCUT' 5964 Specifies an extension core register NAME for the application. 5965 This allows a register NAME with a valid REGNUM between 0 and 60, 5966 with the following as valid values for MODE 5967 5968 `_r_ (readonly)' 5969 5970 `_w_ (write only)' 5971 5972 `_r|w_ (read or write)' 5973 5974 The other parameter gives a description of the register having a 5975 SHORTCUT in the pipeline. The valid values are: 5976 5977 `can_shortcut' 5978 5979 `cannot_shortcut' 5980 5981 For example: 5982 5983 .extCoreRegister mlo,57,r,can_shortcut 5984 5985 This defines an extension core register mlo with the value 57 which 5986 can shortcut the pipeline. 5987 5988 `.extInstruction NAME,OPCODE,SUBOPCODE,SUFFIXCLASS,SYNTAXCLASS' 5989 The ARCtangent A4 allows the user to specify extension 5990 instructions. The extension instructions are not macros. The 5991 assembler creates encodings for use of these instructions 5992 according to the specification by the user. The parameters are: 5993 5994 *NAME 5995 Name of the extension instruction 5996 5997 *OPCODE 5998 Opcode to be used. (Bits 27:31 in the encoding). Valid values 5999 0x10-0x1f or 0x03 6000 6001 *SUBOPCODE 6002 Subopcode to be used. Valid values are from 0x09-0x3f. 6003 However the correct value also depends on SYNTAXCLASS 6004 6005 *SUFFIXCLASS 6006 Determines the kinds of suffixes to be allowed. Valid values 6007 are `SUFFIX_NONE', `SUFFIX_COND', `SUFFIX_FLAG' which 6008 indicates the absence or presence of conditional suffixes and 6009 flag setting by the extension instruction. It is also 6010 possible to specify that an instruction sets the flags and is 6011 conditional by using `SUFFIX_CODE' | `SUFFIX_FLAG'. 6012 6013 *SYNTAXCLASS 6014 Determines the syntax class for the instruction. It can have 6015 the following values: 6016 6017 ``SYNTAX_2OP':' 6018 2 Operand Instruction 6019 6020 ``SYNTAX_3OP':' 6021 3 Operand Instruction 6022 6023 In addition there could be modifiers for the syntax class as 6024 described below: 6025 6026 Syntax Class Modifiers are: 6027 6028 - `OP1_MUST_BE_IMM': Modifies syntax class SYNTAX_3OP, 6029 specifying that the first operand of a three-operand 6030 instruction must be an immediate (i.e., the result is 6031 discarded). OP1_MUST_BE_IMM is used by bitwise ORing it 6032 with SYNTAX_3OP as given in the example below. This 6033 could usually be used to set the flags using specific 6034 instructions and not retain results. 6035 6036 - `OP1_IMM_IMPLIED': Modifies syntax class SYNTAX_20P, it 6037 specifies that there is an implied immediate destination 6038 operand which does not appear in the syntax. For 6039 example, if the source code contains an instruction like: 6040 6041 inst r1,r2 6042 6043 it really means that the first argument is an implied 6044 immediate (that is, the result is discarded). This is 6045 the same as though the source code were: inst 0,r1,r2. 6046 You use OP1_IMM_IMPLIED by bitwise ORing it with 6047 SYNTAX_20P. 6048 6049 6050 For example, defining 64-bit multiplier with immediate operands: 6051 6052 .extInstruction mp64,0x14,0x0,SUFFIX_COND | SUFFIX_FLAG , 6053 SYNTAX_3OP|OP1_MUST_BE_IMM 6054 6055 The above specifies an extension instruction called mp64 which has 6056 3 operands, sets the flags, can be used with a condition code, for 6057 which the first operand is an immediate. (Equivalent to 6058 discarding the result of the operation). 6059 6060 .extInstruction mul64,0x14,0x00,SUFFIX_COND, SYNTAX_2OP|OP1_IMM_IMPLIED 6061 6062 This describes a 2 operand instruction with an implicit first 6063 immediate operand. The result of this operation would be 6064 discarded. 6065 6066 `.half EXPRESSIONS' 6067 *TODO* 6068 6069 `.long EXPRESSIONS' 6070 *TODO* 6071 6072 `.option ARC|ARC5|ARC6|ARC7|ARC8' 6073 The `.option' directive must be followed by the desired core 6074 version. Again `arc' is an alias for `arc6'. 6075 6076 Note: the `.option' directive overrides the command line option 6077 `-marc'; a warning is emitted when the version is not consistent 6078 between the two - even for the implicit default core version 6079 (arc6). 6080 6081 `.short EXPRESSIONS' 6082 *TODO* 6083 6084 `.word EXPRESSIONS' 6085 *TODO* 6086 6087 6088 6089 File: as.info, Node: ARC Opcodes, Prev: ARC Directives, Up: ARC-Dependent 6090 6091 9.2.5 Opcodes 6092 ------------- 6093 6094 For information on the ARC instruction set, see `ARC Programmers 6095 Reference Manual', ARC International (www.arc.com) 6096 6097 6098 File: as.info, Node: ARM-Dependent, Next: AVR-Dependent, Prev: ARC-Dependent, Up: Machine Dependencies 6099 6100 9.3 ARM Dependent Features 6101 ========================== 6102 6103 * Menu: 6104 6105 * ARM Options:: Options 6106 * ARM Syntax:: Syntax 6107 * ARM Floating Point:: Floating Point 6108 * ARM Directives:: ARM Machine Directives 6109 * ARM Opcodes:: Opcodes 6110 * ARM Mapping Symbols:: Mapping Symbols 6111 * ARM Unwinding Tutorial:: Unwinding 6112 6113 6114 File: as.info, Node: ARM Options, Next: ARM Syntax, Up: ARM-Dependent 6115 6116 9.3.1 Options 6117 ------------- 6118 6119 `-mcpu=PROCESSOR[+EXTENSION...]' 6120 This option specifies the target processor. The assembler will 6121 issue an error message if an attempt is made to assemble an 6122 instruction which will not execute on the target processor. The 6123 following processor names are recognized: `arm1', `arm2', `arm250', 6124 `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', 6125 `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', 6126 `arm700i', `arm710', `arm710t', `arm720', `arm720t', `arm740t', 6127 `arm710c', `arm7100', `arm7500', `arm7500fe', `arm7t', `arm7tdmi', 6128 `arm7tdmi-s', `arm8', `arm810', `strongarm', `strongarm1', 6129 `strongarm110', `strongarm1100', `strongarm1110', `arm9', `arm920', 6130 `arm920t', `arm922t', `arm940t', `arm9tdmi', `fa526' (Faraday 6131 FA526 processor), `fa626' (Faraday FA626 processor), `arm9e', 6132 `arm926e', `arm926ej-s', `arm946e-r0', `arm946e', `arm946e-s', 6133 `arm966e-r0', `arm966e', `arm966e-s', `arm968e-s', `arm10t', 6134 `arm10tdmi', `arm10e', `arm1020', `arm1020t', `arm1020e', 6135 `arm1022e', `arm1026ej-s', `fa626te' (Faraday FA626TE processor), 6136 `fa726te' (Faraday FA726TE processor), `arm1136j-s', `arm1136jf-s', 6137 `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s', 6138 `mpcore', `mpcorenovfp', `cortex-a8', `cortex-a9', `cortex-r4', 6139 `cortex-m3', `ep9312' (ARM920 with Cirrus Maverick coprocessor), 6140 `i80200' (Intel XScale processor) `iwmmxt' (Intel(r) XScale 6141 processor with Wireless MMX(tm) technology coprocessor) and 6142 `xscale'. The special name `all' may be used to allow the 6143 assembler to accept instructions valid for any ARM processor. 6144 6145 In addition to the basic instruction set, the assembler can be 6146 told to accept various extension mnemonics that extend the 6147 processor using the co-processor instruction space. For example, 6148 `-mcpu=arm920+maverick' is equivalent to specifying 6149 `-mcpu=ep9312'. The following extensions are currently supported: 6150 `+maverick' `+iwmmxt' and `+xscale'. 6151 6152 `-march=ARCHITECTURE[+EXTENSION...]' 6153 This option specifies the target architecture. The assembler will 6154 issue an error message if an attempt is made to assemble an 6155 instruction which will not execute on the target architecture. 6156 The following architecture names are recognized: `armv1', `armv2', 6157 `armv2a', `armv2s', `armv3', `armv3m', `armv4', `armv4xm', 6158 `armv4t', `armv4txm', `armv5', `armv5t', `armv5txm', `armv5te', 6159 `armv5texp', `armv6', `armv6j', `armv6k', `armv6z', `armv6zk', 6160 `armv7', `armv7-a', `armv7-r', `armv7-m', `iwmmxt' and `xscale'. 6161 If both `-mcpu' and `-march' are specified, the assembler will use 6162 the setting for `-mcpu'. 6163 6164 The architecture option can be extended with the same instruction 6165 set extension options as the `-mcpu' option. 6166 6167 `-mfpu=FLOATING-POINT-FORMAT' 6168 This option specifies the floating point format to assemble for. 6169 The assembler will issue an error message if an attempt is made to 6170 assemble an instruction which will not execute on the target 6171 floating point unit. The following format options are recognized: 6172 `softfpa', `fpe', `fpe2', `fpe3', `fpa', `fpa10', `fpa11', 6173 `arm7500fe', `softvfp', `softvfp+vfp', `vfp', `vfp10', `vfp10-r0', 6174 `vfp9', `vfpxd', `vfpv2' `vfpv3' `vfpv3-d16' `arm1020t', 6175 `arm1020e', `arm1136jf-s', `maverick' and `neon'. 6176 6177 In addition to determining which instructions are assembled, this 6178 option also affects the way in which the `.double' assembler 6179 directive behaves when assembling little-endian code. 6180 6181 The default is dependent on the processor selected. For 6182 Architecture 5 or later, the default is to assembler for VFP 6183 instructions; for earlier architectures the default is to assemble 6184 for FPA instructions. 6185 6186 `-mthumb' 6187 This option specifies that the assembler should start assembling 6188 Thumb instructions; that is, it should behave as though the file 6189 starts with a `.code 16' directive. 6190 6191 `-mthumb-interwork' 6192 This option specifies that the output generated by the assembler 6193 should be marked as supporting interworking. 6194 6195 `-mapcs `[26|32]'' 6196 This option specifies that the output generated by the assembler 6197 should be marked as supporting the indicated version of the Arm 6198 Procedure. Calling Standard. 6199 6200 `-matpcs' 6201 This option specifies that the output generated by the assembler 6202 should be marked as supporting the Arm/Thumb Procedure Calling 6203 Standard. If enabled this option will cause the assembler to 6204 create an empty debugging section in the object file called 6205 .arm.atpcs. Debuggers can use this to determine the ABI being 6206 used by. 6207 6208 `-mapcs-float' 6209 This indicates the floating point variant of the APCS should be 6210 used. In this variant floating point arguments are passed in FP 6211 registers rather than integer registers. 6212 6213 `-mapcs-reentrant' 6214 This indicates that the reentrant variant of the APCS should be 6215 used. This variant supports position independent code. 6216 6217 `-mfloat-abi=ABI' 6218 This option specifies that the output generated by the assembler 6219 should be marked as using specified floating point ABI. The 6220 following values are recognized: `soft', `softfp' and `hard'. 6221 6222 `-meabi=VER' 6223 This option specifies which EABI version the produced object files 6224 should conform to. The following values are recognized: `gnu', `4' 6225 and `5'. 6226 6227 `-EB' 6228 This option specifies that the output generated by the assembler 6229 should be marked as being encoded for a big-endian processor. 6230 6231 `-EL' 6232 This option specifies that the output generated by the assembler 6233 should be marked as being encoded for a little-endian processor. 6234 6235 `-k' 6236 This option specifies that the output of the assembler should be 6237 marked as position-independent code (PIC). 6238 6239 `--fix-v4bx' 6240 Allow `BX' instructions in ARMv4 code. This is intended for use 6241 with the linker option of the same name. 6242 6243 6244 6245 File: as.info, Node: ARM Syntax, Next: ARM Floating Point, Prev: ARM Options, Up: ARM-Dependent 6246 6247 9.3.2 Syntax 6248 ------------ 6249 6250 * Menu: 6251 6252 * ARM-Chars:: Special Characters 6253 * ARM-Regs:: Register Names 6254 * ARM-Relocations:: Relocations 6255 6256 6257 File: as.info, Node: ARM-Chars, Next: ARM-Regs, Up: ARM Syntax 6258 6259 9.3.2.1 Special Characters 6260 .......................... 6261 6262 The presence of a `@' on a line indicates the start of a comment that 6263 extends to the end of the current line. If a `#' appears as the first 6264 character of a line, the whole line is treated as a comment. 6265 6266 The `;' character can be used instead of a newline to separate 6267 statements. 6268 6269 Either `#' or `$' can be used to indicate immediate operands. 6270 6271 *TODO* Explain about /data modifier on symbols. 6272 6273 6274 File: as.info, Node: ARM-Regs, Next: ARM-Relocations, Prev: ARM-Chars, Up: ARM Syntax 6275 6276 9.3.2.2 Register Names 6277 ...................... 6278 6279 *TODO* Explain about ARM register naming, and the predefined names. 6280 6281 6282 File: as.info, Node: ARM Floating Point, Next: ARM Directives, Prev: ARM Syntax, Up: ARM-Dependent 6283 6284 9.3.3 Floating Point 6285 -------------------- 6286 6287 The ARM family uses IEEE floating-point numbers. 6288 6289 6290 File: as.info, Node: ARM-Relocations, Prev: ARM-Regs, Up: ARM Syntax 6291 6292 9.3.3.1 ARM relocation generation 6293 ................................. 6294 6295 Specific data relocations can be generated by putting the relocation 6296 name in parentheses after the symbol name. For example: 6297 6298 .word foo(TARGET1) 6299 6300 This will generate an `R_ARM_TARGET1' relocation against the symbol 6301 FOO. The following relocations are supported: `GOT', `GOTOFF', 6302 `TARGET1', `TARGET2', `SBREL', `TLSGD', `TLSLDM', `TLSLDO', `GOTTPOFF', 6303 `GOT_PREL' and `TPOFF'. 6304 6305 For compatibility with older toolchains the assembler also accepts 6306 `(PLT)' after branch targets. This will generate the deprecated 6307 `R_ARM_PLT32' relocation. 6308 6309 Relocations for `MOVW' and `MOVT' instructions can be generated by 6310 prefixing the value with `#:lower16:' and `#:upper16' respectively. 6311 For example to load the 32-bit address of foo into r0: 6312 6313 MOVW r0, #:lower16:foo 6314 MOVT r0, #:upper16:foo 6315 6316 6317 File: as.info, Node: ARM Directives, Next: ARM Opcodes, Prev: ARM Floating Point, Up: ARM-Dependent 6318 6319 9.3.4 ARM Machine Directives 6320 ---------------------------- 6321 6322 `.align EXPRESSION [, EXPRESSION]' 6323 This is the generic .ALIGN directive. For the ARM however if the 6324 first argument is zero (ie no alignment is needed) the assembler 6325 will behave as if the argument had been 2 (ie pad to the next four 6326 byte boundary). This is for compatibility with ARM's own 6327 assembler. 6328 6329 `NAME .req REGISTER NAME' 6330 This creates an alias for REGISTER NAME called NAME. For example: 6331 6332 foo .req r0 6333 6334 `.unreq ALIAS-NAME' 6335 This undefines a register alias which was previously defined using 6336 the `req', `dn' or `qn' directives. For example: 6337 6338 foo .req r0 6339 .unreq foo 6340 6341 An error occurs if the name is undefined. Note - this pseudo op 6342 can be used to delete builtin in register name aliases (eg 'r0'). 6343 This should only be done if it is really necessary. 6344 6345 `NAME .dn REGISTER NAME [.TYPE] [[INDEX]]' 6346 6347 `NAME .qn REGISTER NAME [.TYPE] [[INDEX]]' 6348 The `dn' and `qn' directives are used to create typed and/or 6349 indexed register aliases for use in Advanced SIMD Extension (Neon) 6350 instructions. The former should be used to create aliases of 6351 double-precision registers, and the latter to create aliases of 6352 quad-precision registers. 6353 6354 If these directives are used to create typed aliases, those 6355 aliases can be used in Neon instructions instead of writing types 6356 after the mnemonic or after each operand. For example: 6357 6358 x .dn d2.f32 6359 y .dn d3.f32 6360 z .dn d4.f32[1] 6361 vmul x,y,z 6362 6363 This is equivalent to writing the following: 6364 6365 vmul.f32 d2,d3,d4[1] 6366 6367 Aliases created using `dn' or `qn' can be destroyed using `unreq'. 6368 6369 `.code `[16|32]'' 6370 This directive selects the instruction set being generated. The 6371 value 16 selects Thumb, with the value 32 selecting ARM. 6372 6373 `.thumb' 6374 This performs the same action as .CODE 16. 6375 6376 `.arm' 6377 This performs the same action as .CODE 32. 6378 6379 `.force_thumb' 6380 This directive forces the selection of Thumb instructions, even if 6381 the target processor does not support those instructions 6382 6383 `.thumb_func' 6384 This directive specifies that the following symbol is the name of a 6385 Thumb encoded function. This information is necessary in order to 6386 allow the assembler and linker to generate correct code for 6387 interworking between Arm and Thumb instructions and should be used 6388 even if interworking is not going to be performed. The presence 6389 of this directive also implies `.thumb' 6390 6391 This directive is not neccessary when generating EABI objects. On 6392 these targets the encoding is implicit when generating Thumb code. 6393 6394 `.thumb_set' 6395 This performs the equivalent of a `.set' directive in that it 6396 creates a symbol which is an alias for another symbol (possibly 6397 not yet defined). This directive also has the added property in 6398 that it marks the aliased symbol as being a thumb function entry 6399 point, in the same way that the `.thumb_func' directive does. 6400 6401 `.ltorg' 6402 This directive causes the current contents of the literal pool to 6403 be dumped into the current section (which is assumed to be the 6404 .text section) at the current location (aligned to a word 6405 boundary). `GAS' maintains a separate literal pool for each 6406 section and each sub-section. The `.ltorg' directive will only 6407 affect the literal pool of the current section and sub-section. 6408 At the end of assembly all remaining, un-empty literal pools will 6409 automatically be dumped. 6410 6411 Note - older versions of `GAS' would dump the current literal pool 6412 any time a section change occurred. This is no longer done, since 6413 it prevents accurate control of the placement of literal pools. 6414 6415 `.pool' 6416 This is a synonym for .ltorg. 6417 6418 `.fnstart' 6419 Marks the start of a function with an unwind table entry. 6420 6421 `.fnend' 6422 Marks the end of a function with an unwind table entry. The 6423 unwind index table entry is created when this directive is 6424 processed. 6425 6426 If no personality routine has been specified then standard 6427 personality routine 0 or 1 will be used, depending on the number 6428 of unwind opcodes required. 6429 6430 `.cantunwind' 6431 Prevents unwinding through the current function. No personality 6432 routine or exception table data is required or permitted. 6433 6434 `.personality NAME' 6435 Sets the personality routine for the current function to NAME. 6436 6437 `.personalityindex INDEX' 6438 Sets the personality routine for the current function to the EABI 6439 standard routine number INDEX 6440 6441 `.handlerdata' 6442 Marks the end of the current function, and the start of the 6443 exception table entry for that function. Anything between this 6444 directive and the `.fnend' directive will be added to the 6445 exception table entry. 6446 6447 Must be preceded by a `.personality' or `.personalityindex' 6448 directive. 6449 6450 `.save REGLIST' 6451 Generate unwinder annotations to restore the registers in REGLIST. 6452 The format of REGLIST is the same as the corresponding 6453 store-multiple instruction. 6454 6455 _core registers_ 6456 .save {r4, r5, r6, lr} 6457 stmfd sp!, {r4, r5, r6, lr} 6458 _FPA registers_ 6459 .save f4, 2 6460 sfmfd f4, 2, [sp]! 6461 _VFP registers_ 6462 .save {d8, d9, d10} 6463 fstmdx sp!, {d8, d9, d10} 6464 _iWMMXt registers_ 6465 .save {wr10, wr11} 6466 wstrd wr11, [sp, #-8]! 6467 wstrd wr10, [sp, #-8]! 6468 or 6469 .save wr11 6470 wstrd wr11, [sp, #-8]! 6471 .save wr10 6472 wstrd wr10, [sp, #-8]! 6473 6474 `.vsave VFP-REGLIST' 6475 Generate unwinder annotations to restore the VFP registers in 6476 VFP-REGLIST using FLDMD. Also works for VFPv3 registers that are 6477 to be restored using VLDM. The format of VFP-REGLIST is the same 6478 as the corresponding store-multiple instruction. 6479 6480 _VFP registers_ 6481 .vsave {d8, d9, d10} 6482 fstmdd sp!, {d8, d9, d10} 6483 _VFPv3 registers_ 6484 .vsave {d15, d16, d17} 6485 vstm sp!, {d15, d16, d17} 6486 6487 Since FLDMX and FSTMX are now deprecated, this directive should be 6488 used in favour of `.save' for saving VFP registers for ARMv6 and 6489 above. 6490 6491 `.pad #COUNT' 6492 Generate unwinder annotations for a stack adjustment of COUNT 6493 bytes. A positive value indicates the function prologue allocated 6494 stack space by decrementing the stack pointer. 6495 6496 `.movsp REG [, #OFFSET]' 6497 Tell the unwinder that REG contains an offset from the current 6498 stack pointer. If OFFSET is not specified then it is assumed to be 6499 zero. 6500 6501 `.setfp FPREG, SPREG [, #OFFSET]' 6502 Make all unwinder annotations relaive to a frame pointer. Without 6503 this the unwinder will use offsets from the stack pointer. 6504 6505 The syntax of this directive is the same as the `sub' or `mov' 6506 instruction used to set the frame pointer. SPREG must be either 6507 `sp' or mentioned in a previous `.movsp' directive. 6508 6509 .movsp ip 6510 mov ip, sp 6511 ... 6512 .setfp fp, ip, #4 6513 sub fp, ip, #4 6514 6515 `.raw OFFSET, BYTE1, ...' 6516 Insert one of more arbitary unwind opcode bytes, which are known 6517 to adjust the stack pointer by OFFSET bytes. 6518 6519 For example `.unwind_raw 4, 0xb1, 0x01' is equivalent to `.save 6520 {r0}' 6521 6522 `.cpu NAME' 6523 Select the target processor. Valid values for NAME are the same as 6524 for the `-mcpu' commandline option. 6525 6526 `.arch NAME' 6527 Select the target architecture. Valid values for NAME are the 6528 same as for the `-march' commandline option. 6529 6530 `.object_arch NAME' 6531 Override the architecture recorded in the EABI object attribute 6532 section. Valid values for NAME are the same as for the `.arch' 6533 directive. Typically this is useful when code uses runtime 6534 detection of CPU features. 6535 6536 `.fpu NAME' 6537 Select the floating point unit to assemble for. Valid values for 6538 NAME are the same as for the `-mfpu' commandline option. 6539 6540 `.eabi_attribute TAG, VALUE' 6541 Set the EABI object attribute number TAG to VALUE. The value is 6542 either a `number', `"string"', or `number, "string"' depending on 6543 the tag. 6544 6545 6546 6547 File: as.info, Node: ARM Opcodes, Next: ARM Mapping Symbols, Prev: ARM Directives, Up: ARM-Dependent 6548 6549 9.3.5 Opcodes 6550 ------------- 6551 6552 `as' implements all the standard ARM opcodes. It also implements 6553 several pseudo opcodes, including several synthetic load instructions. 6554 6555 `NOP' 6556 nop 6557 6558 This pseudo op will always evaluate to a legal ARM instruction 6559 that does nothing. Currently it will evaluate to MOV r0, r0. 6560 6561 `LDR' 6562 ldr <register> , = <expression> 6563 6564 If expression evaluates to a numeric constant then a MOV or MVN 6565 instruction will be used in place of the LDR instruction, if the 6566 constant can be generated by either of these instructions. 6567 Otherwise the constant will be placed into the nearest literal 6568 pool (if it not already there) and a PC relative LDR instruction 6569 will be generated. 6570 6571 `ADR' 6572 adr <register> <label> 6573 6574 This instruction will load the address of LABEL into the indicated 6575 register. The instruction will evaluate to a PC relative ADD or 6576 SUB instruction depending upon where the label is located. If the 6577 label is out of range, or if it is not defined in the same file 6578 (and section) as the ADR instruction, then an error will be 6579 generated. This instruction will not make use of the literal pool. 6580 6581 `ADRL' 6582 adrl <register> <label> 6583 6584 This instruction will load the address of LABEL into the indicated 6585 register. The instruction will evaluate to one or two PC relative 6586 ADD or SUB instructions depending upon where the label is located. 6587 If a second instruction is not needed a NOP instruction will be 6588 generated in its place, so that this instruction is always 8 bytes 6589 long. 6590 6591 If the label is out of range, or if it is not defined in the same 6592 file (and section) as the ADRL instruction, then an error will be 6593 generated. This instruction will not make use of the literal pool. 6594 6595 6596 For information on the ARM or Thumb instruction sets, see `ARM 6597 Software Development Toolkit Reference Manual', Advanced RISC Machines 6598 Ltd. 6599 6600 6601 File: as.info, Node: ARM Mapping Symbols, Next: ARM Unwinding Tutorial, Prev: ARM Opcodes, Up: ARM-Dependent 6602 6603 9.3.6 Mapping Symbols 6604 --------------------- 6605 6606 The ARM ELF specification requires that special symbols be inserted 6607 into object files to mark certain features: 6608 6609 `$a' 6610 At the start of a region of code containing ARM instructions. 6611 6612 `$t' 6613 At the start of a region of code containing THUMB instructions. 6614 6615 `$d' 6616 At the start of a region of data. 6617 6618 6619 The assembler will automatically insert these symbols for you - there 6620 is no need to code them yourself. Support for tagging symbols ($b, $f, 6621 $p and $m) which is also mentioned in the current ARM ELF specification 6622 is not implemented. This is because they have been dropped from the 6623 new EABI and so tools cannot rely upon their presence. 6624 6625 6626 File: as.info, Node: ARM Unwinding Tutorial, Prev: ARM Mapping Symbols, Up: ARM-Dependent 6627 6628 9.3.7 Unwinding 6629 --------------- 6630 6631 The ABI for the ARM Architecture specifies a standard format for 6632 exception unwind information. This information is used when an 6633 exception is thrown to determine where control should be transferred. 6634 In particular, the unwind information is used to determine which 6635 function called the function that threw the exception, and which 6636 function called that one, and so forth. This information is also used 6637 to restore the values of callee-saved registers in the function 6638 catching the exception. 6639 6640 If you are writing functions in assembly code, and those functions 6641 call other functions that throw exceptions, you must use assembly 6642 pseudo ops to ensure that appropriate exception unwind information is 6643 generated. Otherwise, if one of the functions called by your assembly 6644 code throws an exception, the run-time library will be unable to unwind 6645 the stack through your assembly code and your program will not behave 6646 correctly. 6647 6648 To illustrate the use of these pseudo ops, we will examine the code 6649 that G++ generates for the following C++ input: 6650 6651 6652 void callee (int *); 6653 6654 int 6655 caller () 6656 { 6657 int i; 6658 callee (&i); 6659 return i; 6660 } 6661 6662 This example does not show how to throw or catch an exception from 6663 assembly code. That is a much more complex operation and should always 6664 be done in a high-level language, such as C++, that directly supports 6665 exceptions. 6666 6667 The code generated by one particular version of G++ when compiling 6668 the example above is: 6669 6670 6671 _Z6callerv: 6672 .fnstart 6673 .LFB2: 6674 @ Function supports interworking. 6675 @ args = 0, pretend = 0, frame = 8 6676 @ frame_needed = 1, uses_anonymous_args = 0 6677 stmfd sp!, {fp, lr} 6678 .save {fp, lr} 6679 .LCFI0: 6680 .setfp fp, sp, #4 6681 add fp, sp, #4 6682 .LCFI1: 6683 .pad #8 6684 sub sp, sp, #8 6685 .LCFI2: 6686 sub r3, fp, #8 6687 mov r0, r3 6688 bl _Z6calleePi 6689 ldr r3, [fp, #-8] 6690 mov r0, r3 6691 sub sp, fp, #4 6692 ldmfd sp!, {fp, lr} 6693 bx lr 6694 .LFE2: 6695 .fnend 6696 6697 Of course, the sequence of instructions varies based on the options 6698 you pass to GCC and on the version of GCC in use. The exact 6699 instructions are not important since we are focusing on the pseudo ops 6700 that are used to generate unwind information. 6701 6702 An important assumption made by the unwinder is that the stack frame 6703 does not change during the body of the function. In particular, since 6704 we assume that the assembly code does not itself throw an exception, 6705 the only point where an exception can be thrown is from a call, such as 6706 the `bl' instruction above. At each call site, the same saved 6707 registers (including `lr', which indicates the return address) must be 6708 located in the same locations relative to the frame pointer. 6709 6710 The `.fnstart' (*note .fnstart pseudo op: arm_fnstart.) pseudo op 6711 appears immediately before the first instruction of the function while 6712 the `.fnend' (*note .fnend pseudo op: arm_fnend.) pseudo op appears 6713 immediately after the last instruction of the function. These pseudo 6714 ops specify the range of the function. 6715 6716 Only the order of the other pseudos ops (e.g., `.setfp' or `.pad') 6717 matters; their exact locations are irrelevant. In the example above, 6718 the compiler emits the pseudo ops with particular instructions. That 6719 makes it easier to understand the code, but it is not required for 6720 correctness. It would work just as well to emit all of the pseudo ops 6721 other than `.fnend' in the same order, but immediately after `.fnstart'. 6722 6723 The `.save' (*note .save pseudo op: arm_save.) pseudo op indicates 6724 registers that have been saved to the stack so that they can be 6725 restored before the function returns. The argument to the `.save' 6726 pseudo op is a list of registers to save. If a register is 6727 "callee-saved" (as specified by the ABI) and is modified by the 6728 function you are writing, then your code must save the value before it 6729 is modified and restore the original value before the function returns. 6730 If an exception is thrown, the run-time library restores the values of 6731 these registers from their locations on the stack before returning 6732 control to the exception handler. (Of course, if an exception is not 6733 thrown, the function that contains the `.save' pseudo op restores these 6734 registers in the function epilogue, as is done with the `ldmfd' 6735 instruction above.) 6736 6737 You do not have to save callee-saved registers at the very beginning 6738 of the function and you do not need to use the `.save' pseudo op 6739 immediately following the point at which the registers are saved. 6740 However, if you modify a callee-saved register, you must save it on the 6741 stack before modifying it and before calling any functions which might 6742 throw an exception. And, you must use the `.save' pseudo op to 6743 indicate that you have done so. 6744 6745 The `.pad' (*note .pad: arm_pad.) pseudo op indicates a modification 6746 of the stack pointer that does not save any registers. The argument is 6747 the number of bytes (in decimal) that are subtracted from the stack 6748 pointer. (On ARM CPUs, the stack grows downwards, so subtracting from 6749 the stack pointer increases the size of the stack.) 6750 6751 The `.setfp' (*note .setfp pseudo op: arm_setfp.) pseudo op 6752 indicates the register that contains the frame pointer. The first 6753 argument is the register that is set, which is typically `fp'. The 6754 second argument indicates the register from which the frame pointer 6755 takes its value. The third argument, if present, is the value (in 6756 decimal) added to the register specified by the second argument to 6757 compute the value of the frame pointer. You should not modify the 6758 frame pointer in the body of the function. 6759 6760 If you do not use a frame pointer, then you should not use the 6761 `.setfp' pseudo op. If you do not use a frame pointer, then you should 6762 avoid modifying the stack pointer outside of the function prologue. 6763 Otherwise, the run-time library will be unable to find saved registers 6764 when it is unwinding the stack. 6765 6766 The pseudo ops described above are sufficient for writing assembly 6767 code that calls functions which may throw exceptions. If you need to 6768 know more about the object-file format used to represent unwind 6769 information, you may consult the `Exception Handling ABI for the ARM 6770 Architecture' available from `http://infocenter.arm.com'. 6771 6772 6773 File: as.info, Node: AVR-Dependent, Next: BFIN-Dependent, Prev: ARM-Dependent, Up: Machine Dependencies 6774 6775 9.4 AVR Dependent Features 6776 ========================== 6777 6778 * Menu: 6779 6780 * AVR Options:: Options 6781 * AVR Syntax:: Syntax 6782 * AVR Opcodes:: Opcodes 6783 6784 6785 File: as.info, Node: AVR Options, Next: AVR Syntax, Up: AVR-Dependent 6786 6787 9.4.1 Options 6788 ------------- 6789 6790 `-mmcu=MCU' 6791 Specify ATMEL AVR instruction set or MCU type. 6792 6793 Instruction set avr1 is for the minimal AVR core, not supported by 6794 the C compiler, only for assembler programs (MCU types: at90s1200, 6795 attiny11, attiny12, attiny15, attiny28). 6796 6797 Instruction set avr2 (default) is for the classic AVR core with up 6798 to 8K program memory space (MCU types: at90s2313, at90s2323, 6799 at90s2333, at90s2343, attiny22, attiny26, at90s4414, at90s4433, 6800 at90s4434, at90s8515, at90c8534, at90s8535). 6801 6802 Instruction set avr25 is for the classic AVR core with up to 8K 6803 program memory space plus the MOVW instruction (MCU types: 6804 attiny13, attiny13a, attiny2313, attiny24, attiny44, attiny84, 6805 attiny25, attiny45, attiny85, attiny261, attiny461, attiny861, 6806 attiny43u, attiny48, attiny88, at86rf401). 6807 6808 Instruction set avr3 is for the classic AVR core with up to 128K 6809 program memory space (MCU types: at43usb355, at76c711). 6810 6811 Instruction set avr31 is for the classic AVR core with exactly 6812 128K program memory space (MCU types: atmega103, at43usb320). 6813 6814 Instruction set avr35 is for classic AVR core plus MOVW, CALL, and 6815 JMP instructions (MCU types: attiny167, at90usb82, at90usb162). 6816 6817 Instruction set avr4 is for the enhanced AVR core with up to 8K 6818 program memory space (MCU types: atmega48, atmega48p,atmega8, 6819 atmega88, atmega88p, atmega8515, atmega8535, atmega8hva, at90pwm1, 6820 at90pwm2, at90pwm2b, at90pwm3, at90pwm3b). 6821 6822 Instruction set avr5 is for the enhanced AVR core with up to 128K 6823 program memory space (MCU types: atmega16, atmega161, atmega162, 6824 atmega163, atmega164p, atmega165, atmega165p, atmega168, 6825 atmega168p, atmega169, atmega169p, atmega32, atmega323, 6826 atmega324p, atmega325, atmega325p, atmega3250, atmega3250p, 6827 atmega328p, atmega329, atmega329p, atmega3290, atmega3290p, 6828 atmega406, atmega64, atmega640, atmega644, atmega644p, atmega645, 6829 atmega6450, atmega649, atmega6490, atmega16hva, at90can32, 6830 at90can64, at90pwm216, at90pwm316, atmega16u4, atmega32c1, 6831 atmega32m1, atmega32u4, at90usb646, at90usb647, at94k). 6832 6833 Instruction set avr51 is for the enhanced AVR core with exactly 6834 128K program memory space (MCU types: atmega128, atmega1280, 6835 atmega1281, atmega1284p, at90can128, at90usb1286, at90usb1287). 6836 6837 Instruction set avr6 is for the enhanced AVR core with a 3-byte PC 6838 (MCU types: atmega2560, atmega2561). 6839 6840 `-mall-opcodes' 6841 Accept all AVR opcodes, even if not supported by `-mmcu'. 6842 6843 `-mno-skip-bug' 6844 This option disable warnings for skipping two-word instructions. 6845 6846 `-mno-wrap' 6847 This option reject `rjmp/rcall' instructions with 8K wrap-around. 6848 6849 6850 6851 File: as.info, Node: AVR Syntax, Next: AVR Opcodes, Prev: AVR Options, Up: AVR-Dependent 6852 6853 9.4.2 Syntax 6854 ------------ 6855 6856 * Menu: 6857 6858 * AVR-Chars:: Special Characters 6859 * AVR-Regs:: Register Names 6860 * AVR-Modifiers:: Relocatable Expression Modifiers 6861 6862 6863 File: as.info, Node: AVR-Chars, Next: AVR-Regs, Up: AVR Syntax 6864 6865 9.4.2.1 Special Characters 6866 .......................... 6867 6868 The presence of a `;' on a line indicates the start of a comment that 6869 extends to the end of the current line. If a `#' appears as the first 6870 character of a line, the whole line is treated as a comment. 6871 6872 The `$' character can be used instead of a newline to separate 6873 statements. 6874 6875 6876 File: as.info, Node: AVR-Regs, Next: AVR-Modifiers, Prev: AVR-Chars, Up: AVR Syntax 6877 6878 9.4.2.2 Register Names 6879 ...................... 6880 6881 The AVR has 32 x 8-bit general purpose working registers `r0', `r1', 6882 ... `r31'. Six of the 32 registers can be used as three 16-bit 6883 indirect address register pointers for Data Space addressing. One of 6884 the these address pointers can also be used as an address pointer for 6885 look up tables in Flash program memory. These added function registers 6886 are the 16-bit `X', `Y' and `Z' - registers. 6887 6888 X = r26:r27 6889 Y = r28:r29 6890 Z = r30:r31 6891 6892 6893 File: as.info, Node: AVR-Modifiers, Prev: AVR-Regs, Up: AVR Syntax 6894 6895 9.4.2.3 Relocatable Expression Modifiers 6896 ........................................ 6897 6898 The assembler supports several modifiers when using relocatable 6899 addresses in AVR instruction operands. The general syntax is the 6900 following: 6901 6902 modifier(relocatable-expression) 6903 6904 `lo8' 6905 This modifier allows you to use bits 0 through 7 of an address 6906 expression as 8 bit relocatable expression. 6907 6908 `hi8' 6909 This modifier allows you to use bits 7 through 15 of an address 6910 expression as 8 bit relocatable expression. This is useful with, 6911 for example, the AVR `ldi' instruction and `lo8' modifier. 6912 6913 For example 6914 6915 ldi r26, lo8(sym+10) 6916 ldi r27, hi8(sym+10) 6917 6918 `hh8' 6919 This modifier allows you to use bits 16 through 23 of an address 6920 expression as 8 bit relocatable expression. Also, can be useful 6921 for loading 32 bit constants. 6922 6923 `hlo8' 6924 Synonym of `hh8'. 6925 6926 `hhi8' 6927 This modifier allows you to use bits 24 through 31 of an 6928 expression as 8 bit expression. This is useful with, for example, 6929 the AVR `ldi' instruction and `lo8', `hi8', `hlo8', `hhi8', 6930 modifier. 6931 6932 For example 6933 6934 ldi r26, lo8(285774925) 6935 ldi r27, hi8(285774925) 6936 ldi r28, hlo8(285774925) 6937 ldi r29, hhi8(285774925) 6938 ; r29,r28,r27,r26 = 285774925 6939 6940 `pm_lo8' 6941 This modifier allows you to use bits 0 through 7 of an address 6942 expression as 8 bit relocatable expression. This modifier useful 6943 for addressing data or code from Flash/Program memory. The using 6944 of `pm_lo8' similar to `lo8'. 6945 6946 `pm_hi8' 6947 This modifier allows you to use bits 8 through 15 of an address 6948 expression as 8 bit relocatable expression. This modifier useful 6949 for addressing data or code from Flash/Program memory. 6950 6951 `pm_hh8' 6952 This modifier allows you to use bits 15 through 23 of an address 6953 expression as 8 bit relocatable expression. This modifier useful 6954 for addressing data or code from Flash/Program memory. 6955 6956 6957 6958 File: as.info, Node: AVR Opcodes, Prev: AVR Syntax, Up: AVR-Dependent 6959 6960 9.4.3 Opcodes 6961 ------------- 6962 6963 For detailed information on the AVR machine instruction set, see 6964 `www.atmel.com/products/AVR'. 6965 6966 `as' implements all the standard AVR opcodes. The following table 6967 summarizes the AVR opcodes, and their arguments. 6968 6969 Legend: 6970 r any register 6971 d `ldi' register (r16-r31) 6972 v `movw' even register (r0, r2, ..., r28, r30) 6973 a `fmul' register (r16-r23) 6974 w `adiw' register (r24,r26,r28,r30) 6975 e pointer registers (X,Y,Z) 6976 b base pointer register and displacement ([YZ]+disp) 6977 z Z pointer register (for [e]lpm Rd,Z[+]) 6978 M immediate value from 0 to 255 6979 n immediate value from 0 to 255 ( n = ~M ). Relocation impossible 6980 s immediate value from 0 to 7 6981 P Port address value from 0 to 63. (in, out) 6982 p Port address value from 0 to 31. (cbi, sbi, sbic, sbis) 6983 K immediate value from 0 to 63 (used in `adiw', `sbiw') 6984 i immediate value 6985 l signed pc relative offset from -64 to 63 6986 L signed pc relative offset from -2048 to 2047 6987 h absolute code address (call, jmp) 6988 S immediate value from 0 to 7 (S = s << 4) 6989 ? use this opcode entry if no parameters, else use next opcode entry 6990 6991 1001010010001000 clc 6992 1001010011011000 clh 6993 1001010011111000 cli 6994 1001010010101000 cln 6995 1001010011001000 cls 6996 1001010011101000 clt 6997 1001010010111000 clv 6998 1001010010011000 clz 6999 1001010000001000 sec 7000 1001010001011000 seh 7001 1001010001111000 sei 7002 1001010000101000 sen 7003 1001010001001000 ses 7004 1001010001101000 set 7005 1001010000111000 sev 7006 1001010000011000 sez 7007 100101001SSS1000 bclr S 7008 100101000SSS1000 bset S 7009 1001010100001001 icall 7010 1001010000001001 ijmp 7011 1001010111001000 lpm ? 7012 1001000ddddd010+ lpm r,z 7013 1001010111011000 elpm ? 7014 1001000ddddd011+ elpm r,z 7015 0000000000000000 nop 7016 1001010100001000 ret 7017 1001010100011000 reti 7018 1001010110001000 sleep 7019 1001010110011000 break 7020 1001010110101000 wdr 7021 1001010111101000 spm 7022 000111rdddddrrrr adc r,r 7023 000011rdddddrrrr add r,r 7024 001000rdddddrrrr and r,r 7025 000101rdddddrrrr cp r,r 7026 000001rdddddrrrr cpc r,r 7027 000100rdddddrrrr cpse r,r 7028 001001rdddddrrrr eor r,r 7029 001011rdddddrrrr mov r,r 7030 100111rdddddrrrr mul r,r 7031 001010rdddddrrrr or r,r 7032 000010rdddddrrrr sbc r,r 7033 000110rdddddrrrr sub r,r 7034 001001rdddddrrrr clr r 7035 000011rdddddrrrr lsl r 7036 000111rdddddrrrr rol r 7037 001000rdddddrrrr tst r 7038 0111KKKKddddKKKK andi d,M 7039 0111KKKKddddKKKK cbr d,n 7040 1110KKKKddddKKKK ldi d,M 7041 11101111dddd1111 ser d 7042 0110KKKKddddKKKK ori d,M 7043 0110KKKKddddKKKK sbr d,M 7044 0011KKKKddddKKKK cpi d,M 7045 0100KKKKddddKKKK sbci d,M 7046 0101KKKKddddKKKK subi d,M 7047 1111110rrrrr0sss sbrc r,s 7048 1111111rrrrr0sss sbrs r,s 7049 1111100ddddd0sss bld r,s 7050 1111101ddddd0sss bst r,s 7051 10110PPdddddPPPP in r,P 7052 10111PPrrrrrPPPP out P,r 7053 10010110KKddKKKK adiw w,K 7054 10010111KKddKKKK sbiw w,K 7055 10011000pppppsss cbi p,s 7056 10011010pppppsss sbi p,s 7057 10011001pppppsss sbic p,s 7058 10011011pppppsss sbis p,s 7059 111101lllllll000 brcc l 7060 111100lllllll000 brcs l 7061 111100lllllll001 breq l 7062 111101lllllll100 brge l 7063 111101lllllll101 brhc l 7064 111100lllllll101 brhs l 7065 111101lllllll111 brid l 7066 111100lllllll111 brie l 7067 111100lllllll000 brlo l 7068 111100lllllll100 brlt l 7069 111100lllllll010 brmi l 7070 111101lllllll001 brne l 7071 111101lllllll010 brpl l 7072 111101lllllll000 brsh l 7073 111101lllllll110 brtc l 7074 111100lllllll110 brts l 7075 111101lllllll011 brvc l 7076 111100lllllll011 brvs l 7077 111101lllllllsss brbc s,l 7078 111100lllllllsss brbs s,l 7079 1101LLLLLLLLLLLL rcall L 7080 1100LLLLLLLLLLLL rjmp L 7081 1001010hhhhh111h call h 7082 1001010hhhhh110h jmp h 7083 1001010rrrrr0101 asr r 7084 1001010rrrrr0000 com r 7085 1001010rrrrr1010 dec r 7086 1001010rrrrr0011 inc r 7087 1001010rrrrr0110 lsr r 7088 1001010rrrrr0001 neg r 7089 1001000rrrrr1111 pop r 7090 1001001rrrrr1111 push r 7091 1001010rrrrr0111 ror r 7092 1001010rrrrr0010 swap r 7093 00000001ddddrrrr movw v,v 7094 00000010ddddrrrr muls d,d 7095 000000110ddd0rrr mulsu a,a 7096 000000110ddd1rrr fmul a,a 7097 000000111ddd0rrr fmuls a,a 7098 000000111ddd1rrr fmulsu a,a 7099 1001001ddddd0000 sts i,r 7100 1001000ddddd0000 lds r,i 7101 10o0oo0dddddbooo ldd r,b 7102 100!000dddddee-+ ld r,e 7103 10o0oo1rrrrrbooo std b,r 7104 100!001rrrrree-+ st e,r 7105 1001010100011001 eicall 7106 1001010000011001 eijmp 7107 7108 7109 File: as.info, Node: BFIN-Dependent, Next: CR16-Dependent, Prev: AVR-Dependent, Up: Machine Dependencies 7110 7111 9.5 Blackfin Dependent Features 7112 =============================== 7113 7114 * Menu: 7115 7116 * BFIN Syntax:: BFIN Syntax 7117 * BFIN Directives:: BFIN Directives 7118 7119 7120 File: as.info, Node: BFIN Syntax, Next: BFIN Directives, Up: BFIN-Dependent 7121 7122 9.5.1 Syntax 7123 ------------ 7124 7125 `Special Characters' 7126 Assembler input is free format and may appear anywhere on the line. 7127 One instruction may extend across multiple lines or more than one 7128 instruction may appear on the same line. White space (space, tab, 7129 comments or newline) may appear anywhere between tokens. A token 7130 must not have embedded spaces. Tokens include numbers, register 7131 names, keywords, user identifiers, and also some multicharacter 7132 special symbols like "+=", "/*" or "||". 7133 7134 `Instruction Delimiting' 7135 A semicolon must terminate every instruction. Sometimes a complete 7136 instruction will consist of more than one operation. There are two 7137 cases where this occurs. The first is when two general operations 7138 are combined. Normally a comma separates the different parts, as 7139 in 7140 7141 a0= r3.h * r2.l, a1 = r3.l * r2.h ; 7142 7143 The second case occurs when a general instruction is combined with 7144 one or two memory references for joint issue. The latter portions 7145 are set off by a "||" token. 7146 7147 a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++]; 7148 7149 `Register Names' 7150 The assembler treats register names and instruction keywords in a 7151 case insensitive manner. User identifiers are case sensitive. 7152 Thus, R3.l, R3.L, r3.l and r3.L are all equivalent input to the 7153 assembler. 7154 7155 Register names are reserved and may not be used as program 7156 identifiers. 7157 7158 Some operations (such as "Move Register") require a register pair. 7159 Register pairs are always data registers and are denoted using a 7160 colon, eg., R3:2. The larger number must be written firsts. Note 7161 that the hardware only supports odd-even pairs, eg., R7:6, R5:4, 7162 R3:2, and R1:0. 7163 7164 Some instructions (such as -SP (Push Multiple)) require a group of 7165 adjacent registers. Adjacent registers are denoted in the syntax 7166 by the range enclosed in parentheses and separated by a colon, 7167 eg., (R7:3). Again, the larger number appears first. 7168 7169 Portions of a particular register may be individually specified. 7170 This is written with a dot (".") following the register name and 7171 then a letter denoting the desired portion. For 32-bit registers, 7172 ".H" denotes the most significant ("High") portion. ".L" denotes 7173 the least-significant portion. The subdivisions of the 40-bit 7174 registers are described later. 7175 7176 `Accumulators' 7177 The set of 40-bit registers A1 and A0 that normally contain data 7178 that is being manipulated. Each accumulator can be accessed in 7179 four ways. 7180 7181 `one 40-bit register' 7182 The register will be referred to as A1 or A0. 7183 7184 `one 32-bit register' 7185 The registers are designated as A1.W or A0.W. 7186 7187 `two 16-bit registers' 7188 The registers are designated as A1.H, A1.L, A0.H or A0.L. 7189 7190 `one 8-bit register' 7191 The registers are designated as A1.X or A0.X for the bits that 7192 extend beyond bit 31. 7193 7194 `Data Registers' 7195 The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7) 7196 that normally contain data for manipulation. These are 7197 abbreviated as D-register or Dreg. Data registers can be accessed 7198 as 32-bit registers or as two independent 16-bit registers. The 7199 least significant 16 bits of each register is called the "low" 7200 half and is designated with ".L" following the register name. The 7201 most significant 16 bits are called the "high" half and is 7202 designated with ".H" following the name. 7203 7204 R7.L, r2.h, r4.L, R0.H 7205 7206 `Pointer Registers' 7207 The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP) 7208 that normally contain byte addresses of data structures. These are 7209 abbreviated as P-register or Preg. 7210 7211 p2, p5, fp, sp 7212 7213 `Stack Pointer SP' 7214 The stack pointer contains the 32-bit address of the last occupied 7215 byte location in the stack. The stack grows by decrementing the 7216 stack pointer. 7217 7218 `Frame Pointer FP' 7219 The frame pointer contains the 32-bit address of the previous frame 7220 pointer in the stack. It is located at the top of a frame. 7221 7222 `Loop Top' 7223 LT0 and LT1. These registers contain the 32-bit address of the 7224 top of a zero overhead loop. 7225 7226 `Loop Count' 7227 LC0 and LC1. These registers contain the 32-bit counter of the 7228 zero overhead loop executions. 7229 7230 `Loop Bottom' 7231 LB0 and LB1. These registers contain the 32-bit address of the 7232 bottom of a zero overhead loop. 7233 7234 `Index Registers' 7235 The set of 32-bit registers (I0, I1, I2, I3) that normally contain 7236 byte addresses of data structures. Abbreviated I-register or Ireg. 7237 7238 `Modify Registers' 7239 The set of 32-bit registers (M0, M1, M2, M3) that normally contain 7240 offset values that are added and subracted to one of the index 7241 registers. Abbreviated as Mreg. 7242 7243 `Length Registers' 7244 The set of 32-bit registers (L0, L1, L2, L3) that normally contain 7245 the length in bytes of the circular buffer. Abbreviated as Lreg. 7246 Clear the Lreg to disable circular addressing for the 7247 corresponding Ireg. 7248 7249 `Base Registers' 7250 The set of 32-bit registers (B0, B1, B2, B3) that normally contain 7251 the base address in bytes of the circular buffer. Abbreviated as 7252 Breg. 7253 7254 `Floating Point' 7255 The Blackfin family has no hardware floating point but the .float 7256 directive generates ieee floating point numbers for use with 7257 software floating point libraries. 7258 7259 `Blackfin Opcodes' 7260 For detailed information on the Blackfin machine instruction set, 7261 see the Blackfin(r) Processor Instruction Set Reference. 7262 7263 7264 7265 File: as.info, Node: BFIN Directives, Prev: BFIN Syntax, Up: BFIN-Dependent 7266 7267 9.5.2 Directives 7268 ---------------- 7269 7270 The following directives are provided for compatibility with the VDSP 7271 assembler. 7272 7273 `.byte2' 7274 Initializes a four byte data object. 7275 7276 `.byte4' 7277 Initializes a two byte data object. 7278 7279 `.db' 7280 TBD 7281 7282 `.dd' 7283 TBD 7284 7285 `.dw' 7286 TBD 7287 7288 `.var' 7289 Define and initialize a 32 bit data object. 7290 7291 7292 File: as.info, Node: CR16-Dependent, Next: CRIS-Dependent, Prev: BFIN-Dependent, Up: Machine Dependencies 7293 7294 9.6 CR16 Dependent Features 7295 =========================== 7296 7297 * Menu: 7298 7299 * CR16 Operand Qualifiers:: CR16 Machine Operand Qualifiers 7300 7301 7302 File: as.info, Node: CR16 Operand Qualifiers, Up: CR16-Dependent 7303 7304 9.6.1 CR16 Operand Qualifiers 7305 ----------------------------- 7306 7307 The National Semiconductor CR16 target of `as' has a few machine 7308 dependent operand qualifiers. 7309 7310 Operand expression type qualifier is an optional field in the 7311 instruction operand, to determines the type of the expression field of 7312 an operand. The `@' is required. CR16 architecture uses one of the 7313 following expression qualifiers: 7314 7315 `s' 7316 - `Specifies expression operand type as small' 7317 7318 `m' 7319 - `Specifies expression operand type as medium' 7320 7321 `l' 7322 - `Specifies expression operand type as large' 7323 7324 `c' 7325 - `Specifies the CR16 Assembler generates a relocation entry for 7326 the operand, where pc has implied bit, the expression is adjusted 7327 accordingly. The linker uses the relocation entry to update the 7328 operand address at link time.' 7329 7330 CR16 target operand qualifiers and its size (in bits): 7331 7332 `Immediate Operand' 7333 - s --- 4 bits 7334 7335 `' 7336 - m --- 16 bits, for movb and movw instructions. 7337 7338 `' 7339 - m --- 20 bits, movd instructions. 7340 7341 `' 7342 - l --- 32 bits 7343 7344 `Absolute Operand' 7345 - s --- Illegal specifier for this operand. 7346 7347 `' 7348 - m --- 20 bits, movd instructions. 7349 7350 `Displacement Operand' 7351 - s --- 8 bits 7352 7353 `' 7354 - m --- 16 bits 7355 7356 `' 7357 - l --- 24 bits 7358 7359 For example: 7360 1 `movw $_myfun@c,r1' 7361 7362 This loads the address of _myfun, shifted right by 1, into r1. 7363 7364 2 `movd $_myfun@c,(r2,r1)' 7365 7366 This loads the address of _myfun, shifted right by 1, into register-pair r2-r1. 7367 7368 3 `_myfun_ptr:' 7369 `.long _myfun@c' 7370 `loadd _myfun_ptr, (r1,r0)' 7371 `jal (r1,r0)' 7372 7373 This .long directive, the address of _myfunc, shifted right by 1 at link time. 7374 7375 7376 File: as.info, Node: CRIS-Dependent, Next: D10V-Dependent, Prev: CR16-Dependent, Up: Machine Dependencies 7377 7378 9.7 CRIS Dependent Features 7379 =========================== 7380 7381 * Menu: 7382 7383 * CRIS-Opts:: Command-line Options 7384 * CRIS-Expand:: Instruction expansion 7385 * CRIS-Symbols:: Symbols 7386 * CRIS-Syntax:: Syntax 7387 7388 7389 File: as.info, Node: CRIS-Opts, Next: CRIS-Expand, Up: CRIS-Dependent 7390 7391 9.7.1 Command-line Options 7392 -------------------------- 7393 7394 The CRIS version of `as' has these machine-dependent command-line 7395 options. 7396 7397 The format of the generated object files can be either ELF or a.out, 7398 specified by the command-line options `--emulation=crisaout' and 7399 `--emulation=criself'. The default is ELF (criself), unless `as' has 7400 been configured specifically for a.out by using the configuration name 7401 `cris-axis-aout'. 7402 7403 There are two different link-incompatible ELF object file variants 7404 for CRIS, for use in environments where symbols are expected to be 7405 prefixed by a leading `_' character and for environments without such a 7406 symbol prefix. The variant used for GNU/Linux port has no symbol 7407 prefix. Which variant to produce is specified by either of the options 7408 `--underscore' and `--no-underscore'. The default is `--underscore'. 7409 Since symbols in CRIS a.out objects are expected to have a `_' prefix, 7410 specifying `--no-underscore' when generating a.out objects is an error. 7411 Besides the object format difference, the effect of this option is to 7412 parse register names differently (*note crisnous::). The 7413 `--no-underscore' option makes a `$' register prefix mandatory. 7414 7415 The option `--pic' must be passed to `as' in order to recognize the 7416 symbol syntax used for ELF (SVR4 PIC) position-independent-code (*note 7417 crispic::). This will also affect expansion of instructions. The 7418 expansion with `--pic' will use PC-relative rather than (slightly 7419 faster) absolute addresses in those expansions. 7420 7421 The option `--march=ARCHITECTURE' specifies the recognized 7422 instruction set and recognized register names. It also controls the 7423 architecture type of the object file. Valid values for ARCHITECTURE 7424 are: 7425 `v0_v10' 7426 All instructions and register names for any architecture variant 7427 in the set v0...v10 are recognized. This is the default if the 7428 target is configured as cris-*. 7429 7430 `v10' 7431 Only instructions and register names for CRIS v10 (as found in 7432 ETRAX 100 LX) are recognized. This is the default if the target 7433 is configured as crisv10-*. 7434 7435 `v32' 7436 Only instructions and register names for CRIS v32 (code name 7437 Guinness) are recognized. This is the default if the target is 7438 configured as crisv32-*. This value implies `--no-mul-bug-abort'. 7439 (A subsequent `--mul-bug-abort' will turn it back on.) 7440 7441 `common_v10_v32' 7442 Only instructions with register names and addressing modes with 7443 opcodes common to the v10 and v32 are recognized. 7444 7445 When `-N' is specified, `as' will emit a warning when a 16-bit 7446 branch instruction is expanded into a 32-bit multiple-instruction 7447 construct (*note CRIS-Expand::). 7448 7449 Some versions of the CRIS v10, for example in the Etrax 100 LX, 7450 contain a bug that causes destabilizing memory accesses when a multiply 7451 instruction is executed with certain values in the first operand just 7452 before a cache-miss. When the `--mul-bug-abort' command line option is 7453 active (the default value), `as' will refuse to assemble a file 7454 containing a multiply instruction at a dangerous offset, one that could 7455 be the last on a cache-line, or is in a section with insufficient 7456 alignment. This placement checking does not catch any case where the 7457 multiply instruction is dangerously placed because it is located in a 7458 delay-slot. The `--mul-bug-abort' command line option turns off the 7459 checking. 7460 7461 7462 File: as.info, Node: CRIS-Expand, Next: CRIS-Symbols, Prev: CRIS-Opts, Up: CRIS-Dependent 7463 7464 9.7.2 Instruction expansion 7465 --------------------------- 7466 7467 `as' will silently choose an instruction that fits the operand size for 7468 `[register+constant]' operands. For example, the offset `127' in 7469 `move.d [r3+127],r4' fits in an instruction using a signed-byte offset. 7470 Similarly, `move.d [r2+32767],r1' will generate an instruction using a 7471 16-bit offset. For symbolic expressions and constants that do not fit 7472 in 16 bits including the sign bit, a 32-bit offset is generated. 7473 7474 For branches, `as' will expand from a 16-bit branch instruction into 7475 a sequence of instructions that can reach a full 32-bit address. Since 7476 this does not correspond to a single instruction, such expansions can 7477 optionally be warned about. *Note CRIS-Opts::. 7478 7479 If the operand is found to fit the range, a `lapc' mnemonic will 7480 translate to a `lapcq' instruction. Use `lapc.d' to force the 32-bit 7481 `lapc' instruction. 7482 7483 Similarly, the `addo' mnemonic will translate to the shortest 7484 fitting instruction of `addoq', `addo.w' and `addo.d', when used with a 7485 operand that is a constant known at assembly time. 7486 7487 7488 File: as.info, Node: CRIS-Symbols, Next: CRIS-Syntax, Prev: CRIS-Expand, Up: CRIS-Dependent 7489 7490 9.7.3 Symbols 7491 ------------- 7492 7493 Some symbols are defined by the assembler. They're intended to be used 7494 in conditional assembly, for example: 7495 .if ..asm.arch.cris.v32 7496 CODE FOR CRIS V32 7497 .elseif ..asm.arch.cris.common_v10_v32 7498 CODE COMMON TO CRIS V32 AND CRIS V10 7499 .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10 7500 CODE FOR V10 7501 .else 7502 .error "Code needs to be added here." 7503 .endif 7504 7505 These symbols are defined in the assembler, reflecting command-line 7506 options, either when specified or the default. They are always 7507 defined, to 0 or 1. 7508 `..asm.arch.cris.any_v0_v10' 7509 This symbol is non-zero when `--march=v0_v10' is specified or the 7510 default. 7511 7512 `..asm.arch.cris.common_v10_v32' 7513 Set according to the option `--march=common_v10_v32'. 7514 7515 `..asm.arch.cris.v10' 7516 Reflects the option `--march=v10'. 7517 7518 `..asm.arch.cris.v32' 7519 Corresponds to `--march=v10'. 7520 7521 Speaking of symbols, when a symbol is used in code, it can have a 7522 suffix modifying its value for use in position-independent code. *Note 7523 CRIS-Pic::. 7524 7525 7526 File: as.info, Node: CRIS-Syntax, Prev: CRIS-Symbols, Up: CRIS-Dependent 7527 7528 9.7.4 Syntax 7529 ------------ 7530 7531 There are different aspects of the CRIS assembly syntax. 7532 7533 * Menu: 7534 7535 * CRIS-Chars:: Special Characters 7536 * CRIS-Pic:: Position-Independent Code Symbols 7537 * CRIS-Regs:: Register Names 7538 * CRIS-Pseudos:: Assembler Directives 7539 7540 7541 File: as.info, Node: CRIS-Chars, Next: CRIS-Pic, Up: CRIS-Syntax 7542 7543 9.7.4.1 Special Characters 7544 .......................... 7545 7546 The character `#' is a line comment character. It starts a comment if 7547 and only if it is placed at the beginning of a line. 7548 7549 A `;' character starts a comment anywhere on the line, causing all 7550 characters up to the end of the line to be ignored. 7551 7552 A `@' character is handled as a line separator equivalent to a 7553 logical new-line character (except in a comment), so separate 7554 instructions can be specified on a single line. 7555 7556 7557 File: as.info, Node: CRIS-Pic, Next: CRIS-Regs, Prev: CRIS-Chars, Up: CRIS-Syntax 7558 7559 9.7.4.2 Symbols in position-independent code 7560 ............................................ 7561 7562 When generating position-independent code (SVR4 PIC) for use in 7563 cris-axis-linux-gnu or crisv32-axis-linux-gnu shared libraries, symbol 7564 suffixes are used to specify what kind of run-time symbol lookup will 7565 be used, expressed in the object as different _relocation types_. 7566 Usually, all absolute symbol values must be located in a table, the 7567 _global offset table_, leaving the code position-independent; 7568 independent of values of global symbols and independent of the address 7569 of the code. The suffix modifies the value of the symbol, into for 7570 example an index into the global offset table where the real symbol 7571 value is entered, or a PC-relative value, or a value relative to the 7572 start of the global offset table. All symbol suffixes start with the 7573 character `:' (omitted in the list below). Every symbol use in code or 7574 a read-only section must therefore have a PIC suffix to enable a useful 7575 shared library to be created. Usually, these constructs must not be 7576 used with an additive constant offset as is usually allowed, i.e. no 4 7577 as in `symbol + 4' is allowed. This restriction is checked at 7578 link-time, not at assembly-time. 7579 7580 `GOT' 7581 Attaching this suffix to a symbol in an instruction causes the 7582 symbol to be entered into the global offset table. The value is a 7583 32-bit index for that symbol into the global offset table. The 7584 name of the corresponding relocation is `R_CRIS_32_GOT'. Example: 7585 `move.d [$r0+extsym:GOT],$r9' 7586 7587 `GOT16' 7588 Same as for `GOT', but the value is a 16-bit index into the global 7589 offset table. The corresponding relocation is `R_CRIS_16_GOT'. 7590 Example: `move.d [$r0+asymbol:GOT16],$r10' 7591 7592 `PLT' 7593 This suffix is used for function symbols. It causes a _procedure 7594 linkage table_, an array of code stubs, to be created at the time 7595 the shared object is created or linked against, together with a 7596 global offset table entry. The value is a pc-relative offset to 7597 the corresponding stub code in the procedure linkage table. This 7598 arrangement causes the run-time symbol resolver to be called to 7599 look up and set the value of the symbol the first time the 7600 function is called (at latest; depending environment variables). 7601 It is only safe to leave the symbol unresolved this way if all 7602 references are function calls. The name of the relocation is 7603 `R_CRIS_32_PLT_PCREL'. Example: `add.d fnname:PLT,$pc' 7604 7605 `PLTG' 7606 Like PLT, but the value is relative to the beginning of the global 7607 offset table. The relocation is `R_CRIS_32_PLT_GOTREL'. Example: 7608 `move.d fnname:PLTG,$r3' 7609 7610 `GOTPLT' 7611 Similar to `PLT', but the value of the symbol is a 32-bit index 7612 into the global offset table. This is somewhat of a mix between 7613 the effect of the `GOT' and the `PLT' suffix; the difference to 7614 `GOT' is that there will be a procedure linkage table entry 7615 created, and that the symbol is assumed to be a function entry and 7616 will be resolved by the run-time resolver as with `PLT'. The 7617 relocation is `R_CRIS_32_GOTPLT'. Example: `jsr 7618 [$r0+fnname:GOTPLT]' 7619 7620 `GOTPLT16' 7621 A variant of `GOTPLT' giving a 16-bit value. Its relocation name 7622 is `R_CRIS_16_GOTPLT'. Example: `jsr [$r0+fnname:GOTPLT16]' 7623 7624 `GOTOFF' 7625 This suffix must only be attached to a local symbol, but may be 7626 used in an expression adding an offset. The value is the address 7627 of the symbol relative to the start of the global offset table. 7628 The relocation name is `R_CRIS_32_GOTREL'. Example: `move.d 7629 [$r0+localsym:GOTOFF],r3' 7630 7631 7632 File: as.info, Node: CRIS-Regs, Next: CRIS-Pseudos, Prev: CRIS-Pic, Up: CRIS-Syntax 7633 7634 9.7.4.3 Register names 7635 ...................... 7636 7637 A `$' character may always prefix a general or special register name in 7638 an instruction operand but is mandatory when the option 7639 `--no-underscore' is specified or when the `.syntax register_prefix' 7640 directive is in effect (*note crisnous::). Register names are 7641 case-insensitive. 7642 7643 7644 File: as.info, Node: CRIS-Pseudos, Prev: CRIS-Regs, Up: CRIS-Syntax 7645 7646 9.7.4.4 Assembler Directives 7647 ............................ 7648 7649 There are a few CRIS-specific pseudo-directives in addition to the 7650 generic ones. *Note Pseudo Ops::. Constants emitted by 7651 pseudo-directives are in little-endian order for CRIS. There is no 7652 support for floating-point-specific directives for CRIS. 7653 7654 `.dword EXPRESSIONS' 7655 The `.dword' directive is a synonym for `.int', expecting zero or 7656 more EXPRESSIONS, separated by commas. For each expression, a 7657 32-bit little-endian constant is emitted. 7658 7659 `.syntax ARGUMENT' 7660 The `.syntax' directive takes as ARGUMENT one of the following 7661 case-sensitive choices. 7662 7663 `no_register_prefix' 7664 The `.syntax no_register_prefix' directive makes a `$' 7665 character prefix on all registers optional. It overrides a 7666 previous setting, including the corresponding effect of the 7667 option `--no-underscore'. If this directive is used when 7668 ordinary symbols do not have a `_' character prefix, care 7669 must be taken to avoid ambiguities whether an operand is a 7670 register or a symbol; using symbols with names the same as 7671 general or special registers then invoke undefined behavior. 7672 7673 `register_prefix' 7674 This directive makes a `$' character prefix on all registers 7675 mandatory. It overrides a previous setting, including the 7676 corresponding effect of the option `--underscore'. 7677 7678 `leading_underscore' 7679 This is an assertion directive, emitting an error if the 7680 `--no-underscore' option is in effect. 7681 7682 `no_leading_underscore' 7683 This is the opposite of the `.syntax leading_underscore' 7684 directive and emits an error if the option `--underscore' is 7685 in effect. 7686 7687 `.arch ARGUMENT' 7688 This is an assertion directive, giving an error if the specified 7689 ARGUMENT is not the same as the specified or default value for the 7690 `--march=ARCHITECTURE' option (*note march-option::). 7691 7692 7693 7694 File: as.info, Node: D10V-Dependent, Next: D30V-Dependent, Prev: CRIS-Dependent, Up: Machine Dependencies 7695 7696 9.8 D10V Dependent Features 7697 =========================== 7698 7699 * Menu: 7700 7701 * D10V-Opts:: D10V Options 7702 * D10V-Syntax:: Syntax 7703 * D10V-Float:: Floating Point 7704 * D10V-Opcodes:: Opcodes 7705 7706 7707 File: as.info, Node: D10V-Opts, Next: D10V-Syntax, Up: D10V-Dependent 7708 7709 9.8.1 D10V Options 7710 ------------------ 7711 7712 The Mitsubishi D10V version of `as' has a few machine dependent options. 7713 7714 `-O' 7715 The D10V can often execute two sub-instructions in parallel. When 7716 this option is used, `as' will attempt to optimize its output by 7717 detecting when instructions can be executed in parallel. 7718 7719 `--nowarnswap' 7720 To optimize execution performance, `as' will sometimes swap the 7721 order of instructions. Normally this generates a warning. When 7722 this option is used, no warning will be generated when 7723 instructions are swapped. 7724 7725 `--gstabs-packing' 7726 7727 `--no-gstabs-packing' 7728 `as' packs adjacent short instructions into a single packed 7729 instruction. `--no-gstabs-packing' turns instruction packing off if 7730 `--gstabs' is specified as well; `--gstabs-packing' (the default) 7731 turns instruction packing on even when `--gstabs' is specified. 7732 7733 7734 File: as.info, Node: D10V-Syntax, Next: D10V-Float, Prev: D10V-Opts, Up: D10V-Dependent 7735 7736 9.8.2 Syntax 7737 ------------ 7738 7739 The D10V syntax is based on the syntax in Mitsubishi's D10V 7740 architecture manual. The differences are detailed below. 7741 7742 * Menu: 7743 7744 * D10V-Size:: Size Modifiers 7745 * D10V-Subs:: Sub-Instructions 7746 * D10V-Chars:: Special Characters 7747 * D10V-Regs:: Register Names 7748 * D10V-Addressing:: Addressing Modes 7749 * D10V-Word:: @WORD Modifier 7750 7751 7752 File: as.info, Node: D10V-Size, Next: D10V-Subs, Up: D10V-Syntax 7753 7754 9.8.2.1 Size Modifiers 7755 ...................... 7756 7757 The D10V version of `as' uses the instruction names in the D10V 7758 Architecture Manual. However, the names in the manual are sometimes 7759 ambiguous. There are instruction names that can assemble to a short or 7760 long form opcode. How does the assembler pick the correct form? `as' 7761 will always pick the smallest form if it can. When dealing with a 7762 symbol that is not defined yet when a line is being assembled, it will 7763 always use the long form. If you need to force the assembler to use 7764 either the short or long form of the instruction, you can append either 7765 `.s' (short) or `.l' (long) to it. For example, if you are writing an 7766 assembly program and you want to do a branch to a symbol that is 7767 defined later in your program, you can write `bra.s foo'. Objdump 7768 and GDB will always append `.s' or `.l' to instructions which have both 7769 short and long forms. 7770 7771 7772 File: as.info, Node: D10V-Subs, Next: D10V-Chars, Prev: D10V-Size, Up: D10V-Syntax 7773 7774 9.8.2.2 Sub-Instructions 7775 ........................ 7776 7777 The D10V assembler takes as input a series of instructions, either 7778 one-per-line, or in the special two-per-line format described in the 7779 next section. Some of these instructions will be short-form or 7780 sub-instructions. These sub-instructions can be packed into a single 7781 instruction. The assembler will do this automatically. It will also 7782 detect when it should not pack instructions. For example, when a label 7783 is defined, the next instruction will never be packaged with the 7784 previous one. Whenever a branch and link instruction is called, it 7785 will not be packaged with the next instruction so the return address 7786 will be valid. Nops are automatically inserted when necessary. 7787 7788 If you do not want the assembler automatically making these 7789 decisions, you can control the packaging and execution type (parallel 7790 or sequential) with the special execution symbols described in the next 7791 section. 7792 7793 7794 File: as.info, Node: D10V-Chars, Next: D10V-Regs, Prev: D10V-Subs, Up: D10V-Syntax 7795 7796 9.8.2.3 Special Characters 7797 .......................... 7798 7799 `;' and `#' are the line comment characters. Sub-instructions may be 7800 executed in order, in reverse-order, or in parallel. Instructions 7801 listed in the standard one-per-line format will be executed 7802 sequentially. To specify the executing order, use the following 7803 symbols: 7804 `->' 7805 Sequential with instruction on the left first. 7806 7807 `<-' 7808 Sequential with instruction on the right first. 7809 7810 `||' 7811 Parallel 7812 The D10V syntax allows either one instruction per line, one 7813 instruction per line with the execution symbol, or two instructions per 7814 line. For example 7815 `abs a1 -> abs r0' 7816 Execute these sequentially. The instruction on the right is in 7817 the right container and is executed second. 7818 7819 `abs r0 <- abs a1' 7820 Execute these reverse-sequentially. The instruction on the right 7821 is in the right container, and is executed first. 7822 7823 `ld2w r2,@r8+ || mac a0,r0,r7' 7824 Execute these in parallel. 7825 7826 `ld2w r2,@r8+ ||' 7827 `mac a0,r0,r7' 7828 Two-line format. Execute these in parallel. 7829 7830 `ld2w r2,@r8+' 7831 `mac a0,r0,r7' 7832 Two-line format. Execute these sequentially. Assembler will put 7833 them in the proper containers. 7834 7835 `ld2w r2,@r8+ ->' 7836 `mac a0,r0,r7' 7837 Two-line format. Execute these sequentially. Same as above but 7838 second instruction will always go into right container. 7839 Since `$' has no special meaning, you may use it in symbol names. 7840 7841 7842 File: as.info, Node: D10V-Regs, Next: D10V-Addressing, Prev: D10V-Chars, Up: D10V-Syntax 7843 7844 9.8.2.4 Register Names 7845 ...................... 7846 7847 You can use the predefined symbols `r0' through `r15' to refer to the 7848 D10V registers. You can also use `sp' as an alias for `r15'. The 7849 accumulators are `a0' and `a1'. There are special register-pair names 7850 that may optionally be used in opcodes that require even-numbered 7851 registers. Register names are not case sensitive. 7852 7853 Register Pairs 7854 `r0-r1' 7855 7856 `r2-r3' 7857 7858 `r4-r5' 7859 7860 `r6-r7' 7861 7862 `r8-r9' 7863 7864 `r10-r11' 7865 7866 `r12-r13' 7867 7868 `r14-r15' 7869 7870 The D10V also has predefined symbols for these control registers and 7871 status bits: 7872 `psw' 7873 Processor Status Word 7874 7875 `bpsw' 7876 Backup Processor Status Word 7877 7878 `pc' 7879 Program Counter 7880 7881 `bpc' 7882 Backup Program Counter 7883 7884 `rpt_c' 7885 Repeat Count 7886 7887 `rpt_s' 7888 Repeat Start address 7889 7890 `rpt_e' 7891 Repeat End address 7892 7893 `mod_s' 7894 Modulo Start address 7895 7896 `mod_e' 7897 Modulo End address 7898 7899 `iba' 7900 Instruction Break Address 7901 7902 `f0' 7903 Flag 0 7904 7905 `f1' 7906 Flag 1 7907 7908 `c' 7909 Carry flag 7910 7911 7912 File: as.info, Node: D10V-Addressing, Next: D10V-Word, Prev: D10V-Regs, Up: D10V-Syntax 7913 7914 9.8.2.5 Addressing Modes 7915 ........................ 7916 7917 `as' understands the following addressing modes for the D10V. `RN' in 7918 the following refers to any of the numbered registers, but _not_ the 7919 control registers. 7920 `RN' 7921 Register direct 7922 7923 `@RN' 7924 Register indirect 7925 7926 `@RN+' 7927 Register indirect with post-increment 7928 7929 `@RN-' 7930 Register indirect with post-decrement 7931 7932 `@-SP' 7933 Register indirect with pre-decrement 7934 7935 `@(DISP, RN)' 7936 Register indirect with displacement 7937 7938 `ADDR' 7939 PC relative address (for branch or rep). 7940 7941 `#IMM' 7942 Immediate data (the `#' is optional and ignored) 7943 7944 7945 File: as.info, Node: D10V-Word, Prev: D10V-Addressing, Up: D10V-Syntax 7946 7947 9.8.2.6 @WORD Modifier 7948 ...................... 7949 7950 Any symbol followed by `@word' will be replaced by the symbol's value 7951 shifted right by 2. This is used in situations such as loading a 7952 register with the address of a function (or any other code fragment). 7953 For example, if you want to load a register with the location of the 7954 function `main' then jump to that function, you could do it as follows: 7955 ldi r2, main@word 7956 jmp r2 7957 7958 7959 File: as.info, Node: D10V-Float, Next: D10V-Opcodes, Prev: D10V-Syntax, Up: D10V-Dependent 7960 7961 9.8.3 Floating Point 7962 -------------------- 7963 7964 The D10V has no hardware floating point, but the `.float' and `.double' 7965 directives generates IEEE floating-point numbers for compatibility with 7966 other development tools. 7967 7968 7969 File: as.info, Node: D10V-Opcodes, Prev: D10V-Float, Up: D10V-Dependent 7970 7971 9.8.4 Opcodes 7972 ------------- 7973 7974 For detailed information on the D10V machine instruction set, see `D10V 7975 Architecture: A VLIW Microprocessor for Multimedia Applications' 7976 (Mitsubishi Electric Corp.). `as' implements all the standard D10V 7977 opcodes. The only changes are those described in the section on size 7978 modifiers 7979 7980 7981 File: as.info, Node: D30V-Dependent, Next: H8/300-Dependent, Prev: D10V-Dependent, Up: Machine Dependencies 7982 7983 9.9 D30V Dependent Features 7984 =========================== 7985 7986 * Menu: 7987 7988 * D30V-Opts:: D30V Options 7989 * D30V-Syntax:: Syntax 7990 * D30V-Float:: Floating Point 7991 * D30V-Opcodes:: Opcodes 7992 7993 7994 File: as.info, Node: D30V-Opts, Next: D30V-Syntax, Up: D30V-Dependent 7995 7996 9.9.1 D30V Options 7997 ------------------ 7998 7999 The Mitsubishi D30V version of `as' has a few machine dependent options. 8000 8001 `-O' 8002 The D30V can often execute two sub-instructions in parallel. When 8003 this option is used, `as' will attempt to optimize its output by 8004 detecting when instructions can be executed in parallel. 8005 8006 `-n' 8007 When this option is used, `as' will issue a warning every time it 8008 adds a nop instruction. 8009 8010 `-N' 8011 When this option is used, `as' will issue a warning if it needs to 8012 insert a nop after a 32-bit multiply before a load or 16-bit 8013 multiply instruction. 8014 8015 8016 File: as.info, Node: D30V-Syntax, Next: D30V-Float, Prev: D30V-Opts, Up: D30V-Dependent 8017 8018 9.9.2 Syntax 8019 ------------ 8020 8021 The D30V syntax is based on the syntax in Mitsubishi's D30V 8022 architecture manual. The differences are detailed below. 8023 8024 * Menu: 8025 8026 * D30V-Size:: Size Modifiers 8027 * D30V-Subs:: Sub-Instructions 8028 * D30V-Chars:: Special Characters 8029 * D30V-Guarded:: Guarded Execution 8030 * D30V-Regs:: Register Names 8031 * D30V-Addressing:: Addressing Modes 8032 8033 8034 File: as.info, Node: D30V-Size, Next: D30V-Subs, Up: D30V-Syntax 8035 8036 9.9.2.1 Size Modifiers 8037 ...................... 8038 8039 The D30V version of `as' uses the instruction names in the D30V 8040 Architecture Manual. However, the names in the manual are sometimes 8041 ambiguous. There are instruction names that can assemble to a short or 8042 long form opcode. How does the assembler pick the correct form? `as' 8043 will always pick the smallest form if it can. When dealing with a 8044 symbol that is not defined yet when a line is being assembled, it will 8045 always use the long form. If you need to force the assembler to use 8046 either the short or long form of the instruction, you can append either 8047 `.s' (short) or `.l' (long) to it. For example, if you are writing an 8048 assembly program and you want to do a branch to a symbol that is 8049 defined later in your program, you can write `bra.s foo'. Objdump and 8050 GDB will always append `.s' or `.l' to instructions which have both 8051 short and long forms. 8052 8053 8054 File: as.info, Node: D30V-Subs, Next: D30V-Chars, Prev: D30V-Size, Up: D30V-Syntax 8055 8056 9.9.2.2 Sub-Instructions 8057 ........................ 8058 8059 The D30V assembler takes as input a series of instructions, either 8060 one-per-line, or in the special two-per-line format described in the 8061 next section. Some of these instructions will be short-form or 8062 sub-instructions. These sub-instructions can be packed into a single 8063 instruction. The assembler will do this automatically. It will also 8064 detect when it should not pack instructions. For example, when a label 8065 is defined, the next instruction will never be packaged with the 8066 previous one. Whenever a branch and link instruction is called, it 8067 will not be packaged with the next instruction so the return address 8068 will be valid. Nops are automatically inserted when necessary. 8069 8070 If you do not want the assembler automatically making these 8071 decisions, you can control the packaging and execution type (parallel 8072 or sequential) with the special execution symbols described in the next 8073 section. 8074 8075 8076 File: as.info, Node: D30V-Chars, Next: D30V-Guarded, Prev: D30V-Subs, Up: D30V-Syntax 8077 8078 9.9.2.3 Special Characters 8079 .......................... 8080 8081 `;' and `#' are the line comment characters. Sub-instructions may be 8082 executed in order, in reverse-order, or in parallel. Instructions 8083 listed in the standard one-per-line format will be executed 8084 sequentially unless you use the `-O' option. 8085 8086 To specify the executing order, use the following symbols: 8087 `->' 8088 Sequential with instruction on the left first. 8089 8090 `<-' 8091 Sequential with instruction on the right first. 8092 8093 `||' 8094 Parallel 8095 8096 The D30V syntax allows either one instruction per line, one 8097 instruction per line with the execution symbol, or two instructions per 8098 line. For example 8099 `abs r2,r3 -> abs r4,r5' 8100 Execute these sequentially. The instruction on the right is in 8101 the right container and is executed second. 8102 8103 `abs r2,r3 <- abs r4,r5' 8104 Execute these reverse-sequentially. The instruction on the right 8105 is in the right container, and is executed first. 8106 8107 `abs r2,r3 || abs r4,r5' 8108 Execute these in parallel. 8109 8110 `ldw r2,@(r3,r4) ||' 8111 `mulx r6,r8,r9' 8112 Two-line format. Execute these in parallel. 8113 8114 `mulx a0,r8,r9' 8115 `stw r2,@(r3,r4)' 8116 Two-line format. Execute these sequentially unless `-O' option is 8117 used. If the `-O' option is used, the assembler will determine if 8118 the instructions could be done in parallel (the above two 8119 instructions can be done in parallel), and if so, emit them as 8120 parallel instructions. The assembler will put them in the proper 8121 containers. In the above example, the assembler will put the 8122 `stw' instruction in left container and the `mulx' instruction in 8123 the right container. 8124 8125 `stw r2,@(r3,r4) ->' 8126 `mulx a0,r8,r9' 8127 Two-line format. Execute the `stw' instruction followed by the 8128 `mulx' instruction sequentially. The first instruction goes in the 8129 left container and the second instruction goes into right 8130 container. The assembler will give an error if the machine 8131 ordering constraints are violated. 8132 8133 `stw r2,@(r3,r4) <-' 8134 `mulx a0,r8,r9' 8135 Same as previous example, except that the `mulx' instruction is 8136 executed before the `stw' instruction. 8137 8138 Since `$' has no special meaning, you may use it in symbol names. 8139 8140 8141 File: as.info, Node: D30V-Guarded, Next: D30V-Regs, Prev: D30V-Chars, Up: D30V-Syntax 8142 8143 9.9.2.4 Guarded Execution 8144 ......................... 8145 8146 `as' supports the full range of guarded execution directives for each 8147 instruction. Just append the directive after the instruction proper. 8148 The directives are: 8149 8150 `/tx' 8151 Execute the instruction if flag f0 is true. 8152 8153 `/fx' 8154 Execute the instruction if flag f0 is false. 8155 8156 `/xt' 8157 Execute the instruction if flag f1 is true. 8158 8159 `/xf' 8160 Execute the instruction if flag f1 is false. 8161 8162 `/tt' 8163 Execute the instruction if both flags f0 and f1 are true. 8164 8165 `/tf' 8166 Execute the instruction if flag f0 is true and flag f1 is false. 8167 8168 8169 File: as.info, Node: D30V-Regs, Next: D30V-Addressing, Prev: D30V-Guarded, Up: D30V-Syntax 8170 8171 9.9.2.5 Register Names 8172 ...................... 8173 8174 You can use the predefined symbols `r0' through `r63' to refer to the 8175 D30V registers. You can also use `sp' as an alias for `r63' and `link' 8176 as an alias for `r62'. The accumulators are `a0' and `a1'. 8177 8178 The D30V also has predefined symbols for these control registers and 8179 status bits: 8180 `psw' 8181 Processor Status Word 8182 8183 `bpsw' 8184 Backup Processor Status Word 8185 8186 `pc' 8187 Program Counter 8188 8189 `bpc' 8190 Backup Program Counter 8191 8192 `rpt_c' 8193 Repeat Count 8194 8195 `rpt_s' 8196 Repeat Start address 8197 8198 `rpt_e' 8199 Repeat End address 8200 8201 `mod_s' 8202 Modulo Start address 8203 8204 `mod_e' 8205 Modulo End address 8206 8207 `iba' 8208 Instruction Break Address 8209 8210 `f0' 8211 Flag 0 8212 8213 `f1' 8214 Flag 1 8215 8216 `f2' 8217 Flag 2 8218 8219 `f3' 8220 Flag 3 8221 8222 `f4' 8223 Flag 4 8224 8225 `f5' 8226 Flag 5 8227 8228 `f6' 8229 Flag 6 8230 8231 `f7' 8232 Flag 7 8233 8234 `s' 8235 Same as flag 4 (saturation flag) 8236 8237 `v' 8238 Same as flag 5 (overflow flag) 8239 8240 `va' 8241 Same as flag 6 (sticky overflow flag) 8242 8243 `c' 8244 Same as flag 7 (carry/borrow flag) 8245 8246 `b' 8247 Same as flag 7 (carry/borrow flag) 8248 8249 8250 File: as.info, Node: D30V-Addressing, Prev: D30V-Regs, Up: D30V-Syntax 8251 8252 9.9.2.6 Addressing Modes 8253 ........................ 8254 8255 `as' understands the following addressing modes for the D30V. `RN' in 8256 the following refers to any of the numbered registers, but _not_ the 8257 control registers. 8258 `RN' 8259 Register direct 8260 8261 `@RN' 8262 Register indirect 8263 8264 `@RN+' 8265 Register indirect with post-increment 8266 8267 `@RN-' 8268 Register indirect with post-decrement 8269 8270 `@-SP' 8271 Register indirect with pre-decrement 8272 8273 `@(DISP, RN)' 8274 Register indirect with displacement 8275 8276 `ADDR' 8277 PC relative address (for branch or rep). 8278 8279 `#IMM' 8280 Immediate data (the `#' is optional and ignored) 8281 8282 8283 File: as.info, Node: D30V-Float, Next: D30V-Opcodes, Prev: D30V-Syntax, Up: D30V-Dependent 8284 8285 9.9.3 Floating Point 8286 -------------------- 8287 8288 The D30V has no hardware floating point, but the `.float' and `.double' 8289 directives generates IEEE floating-point numbers for compatibility with 8290 other development tools. 8291 8292 8293 File: as.info, Node: D30V-Opcodes, Prev: D30V-Float, Up: D30V-Dependent 8294 8295 9.9.4 Opcodes 8296 ------------- 8297 8298 For detailed information on the D30V machine instruction set, see `D30V 8299 Architecture: A VLIW Microprocessor for Multimedia Applications' 8300 (Mitsubishi Electric Corp.). `as' implements all the standard D30V 8301 opcodes. The only changes are those described in the section on size 8302 modifiers 8303 8304 8305 File: as.info, Node: H8/300-Dependent, Next: HPPA-Dependent, Prev: D30V-Dependent, Up: Machine Dependencies 8306 8307 9.10 H8/300 Dependent Features 8308 ============================== 8309 8310 * Menu: 8311 8312 * H8/300 Options:: Options 8313 * H8/300 Syntax:: Syntax 8314 * H8/300 Floating Point:: Floating Point 8315 * H8/300 Directives:: H8/300 Machine Directives 8316 * H8/300 Opcodes:: Opcodes 8317 8318 8319 File: as.info, Node: H8/300 Options, Next: H8/300 Syntax, Up: H8/300-Dependent 8320 8321 9.10.1 Options 8322 -------------- 8323 8324 The Renesas H8/300 version of `as' has one machine-dependent option: 8325 8326 `-h-tick-hex' 8327 Support H'00 style hex constants in addition to 0x00 style. 8328 8329 8330 8331 File: as.info, Node: H8/300 Syntax, Next: H8/300 Floating Point, Prev: H8/300 Options, Up: H8/300-Dependent 8332 8333 9.10.2 Syntax 8334 ------------- 8335 8336 * Menu: 8337 8338 * H8/300-Chars:: Special Characters 8339 * H8/300-Regs:: Register Names 8340 * H8/300-Addressing:: Addressing Modes 8341 8342 8343 File: as.info, Node: H8/300-Chars, Next: H8/300-Regs, Up: H8/300 Syntax 8344 8345 9.10.2.1 Special Characters 8346 ........................... 8347 8348 `;' is the line comment character. 8349 8350 `$' can be used instead of a newline to separate statements. 8351 Therefore _you may not use `$' in symbol names_ on the H8/300. 8352 8353 8354 File: as.info, Node: H8/300-Regs, Next: H8/300-Addressing, Prev: H8/300-Chars, Up: H8/300 Syntax 8355 8356 9.10.2.2 Register Names 8357 ....................... 8358 8359 You can use predefined symbols of the form `rNh' and `rNl' to refer to 8360 the H8/300 registers as sixteen 8-bit general-purpose registers. N is 8361 a digit from `0' to `7'); for instance, both `r0h' and `r7l' are valid 8362 register names. 8363 8364 You can also use the eight predefined symbols `rN' to refer to the 8365 H8/300 registers as 16-bit registers (you must use this form for 8366 addressing). 8367 8368 On the H8/300H, you can also use the eight predefined symbols `erN' 8369 (`er0' ... `er7') to refer to the 32-bit general purpose registers. 8370 8371 The two control registers are called `pc' (program counter; a 16-bit 8372 register, except on the H8/300H where it is 24 bits) and `ccr' 8373 (condition code register; an 8-bit register). `r7' is used as the 8374 stack pointer, and can also be called `sp'. 8375 8376 8377 File: as.info, Node: H8/300-Addressing, Prev: H8/300-Regs, Up: H8/300 Syntax 8378 8379 9.10.2.3 Addressing Modes 8380 ......................... 8381 8382 as understands the following addressing modes for the H8/300: 8383 `rN' 8384 Register direct 8385 8386 `@rN' 8387 Register indirect 8388 8389 `@(D, rN)' 8390 `@(D:16, rN)' 8391 `@(D:24, rN)' 8392 Register indirect: 16-bit or 24-bit displacement D from register 8393 N. (24-bit displacements are only meaningful on the H8/300H.) 8394 8395 `@rN+' 8396 Register indirect with post-increment 8397 8398 `@-rN' 8399 Register indirect with pre-decrement 8400 8401 ``@'AA' 8402 ``@'AA:8' 8403 ``@'AA:16' 8404 ``@'AA:24' 8405 Absolute address `aa'. (The address size `:24' only makes sense 8406 on the H8/300H.) 8407 8408 `#XX' 8409 `#XX:8' 8410 `#XX:16' 8411 `#XX:32' 8412 Immediate data XX. You may specify the `:8', `:16', or `:32' for 8413 clarity, if you wish; but `as' neither requires this nor uses 8414 it--the data size required is taken from context. 8415 8416 ``@'`@'AA' 8417 ``@'`@'AA:8' 8418 Memory indirect. You may specify the `:8' for clarity, if you 8419 wish; but `as' neither requires this nor uses it. 8420 8421 8422 File: as.info, Node: H8/300 Floating Point, Next: H8/300 Directives, Prev: H8/300 Syntax, Up: H8/300-Dependent 8423 8424 9.10.3 Floating Point 8425 --------------------- 8426 8427 The H8/300 family has no hardware floating point, but the `.float' 8428 directive generates IEEE floating-point numbers for compatibility with 8429 other development tools. 8430 8431 8432 File: as.info, Node: H8/300 Directives, Next: H8/300 Opcodes, Prev: H8/300 Floating Point, Up: H8/300-Dependent 8433 8434 9.10.4 H8/300 Machine Directives 8435 -------------------------------- 8436 8437 `as' has the following machine-dependent directives for the H8/300: 8438 8439 `.h8300h' 8440 Recognize and emit additional instructions for the H8/300H 8441 variant, and also make `.int' emit 32-bit numbers rather than the 8442 usual (16-bit) for the H8/300 family. 8443 8444 `.h8300s' 8445 Recognize and emit additional instructions for the H8S variant, and 8446 also make `.int' emit 32-bit numbers rather than the usual (16-bit) 8447 for the H8/300 family. 8448 8449 `.h8300hn' 8450 Recognize and emit additional instructions for the H8/300H variant 8451 in normal mode, and also make `.int' emit 32-bit numbers rather 8452 than the usual (16-bit) for the H8/300 family. 8453 8454 `.h8300sn' 8455 Recognize and emit additional instructions for the H8S variant in 8456 normal mode, and also make `.int' emit 32-bit numbers rather than 8457 the usual (16-bit) for the H8/300 family. 8458 8459 On the H8/300 family (including the H8/300H) `.word' directives 8460 generate 16-bit numbers. 8461 8462 8463 File: as.info, Node: H8/300 Opcodes, Prev: H8/300 Directives, Up: H8/300-Dependent 8464 8465 9.10.5 Opcodes 8466 -------------- 8467 8468 For detailed information on the H8/300 machine instruction set, see 8469 `H8/300 Series Programming Manual'. For information specific to the 8470 H8/300H, see `H8/300H Series Programming Manual' (Renesas). 8471 8472 `as' implements all the standard H8/300 opcodes. No additional 8473 pseudo-instructions are needed on this family. 8474 8475 The following table summarizes the H8/300 opcodes, and their 8476 arguments. Entries marked `*' are opcodes used only on the H8/300H. 8477 8478 Legend: 8479 Rs source register 8480 Rd destination register 8481 abs absolute address 8482 imm immediate data 8483 disp:N N-bit displacement from a register 8484 pcrel:N N-bit displacement relative to program counter 8485 8486 add.b #imm,rd * andc #imm,ccr 8487 add.b rs,rd band #imm,rd 8488 add.w rs,rd band #imm,@rd 8489 * add.w #imm,rd band #imm,@abs:8 8490 * add.l rs,rd bra pcrel:8 8491 * add.l #imm,rd * bra pcrel:16 8492 adds #imm,rd bt pcrel:8 8493 addx #imm,rd * bt pcrel:16 8494 addx rs,rd brn pcrel:8 8495 and.b #imm,rd * brn pcrel:16 8496 and.b rs,rd bf pcrel:8 8497 * and.w rs,rd * bf pcrel:16 8498 * and.w #imm,rd bhi pcrel:8 8499 * and.l #imm,rd * bhi pcrel:16 8500 * and.l rs,rd bls pcrel:8 8501 8502 * bls pcrel:16 bld #imm,rd 8503 bcc pcrel:8 bld #imm,@rd 8504 * bcc pcrel:16 bld #imm,@abs:8 8505 bhs pcrel:8 bnot #imm,rd 8506 * bhs pcrel:16 bnot #imm,@rd 8507 bcs pcrel:8 bnot #imm,@abs:8 8508 * bcs pcrel:16 bnot rs,rd 8509 blo pcrel:8 bnot rs,@rd 8510 * blo pcrel:16 bnot rs,@abs:8 8511 bne pcrel:8 bor #imm,rd 8512 * bne pcrel:16 bor #imm,@rd 8513 beq pcrel:8 bor #imm,@abs:8 8514 * beq pcrel:16 bset #imm,rd 8515 bvc pcrel:8 bset #imm,@rd 8516 * bvc pcrel:16 bset #imm,@abs:8 8517 bvs pcrel:8 bset rs,rd 8518 * bvs pcrel:16 bset rs,@rd 8519 bpl pcrel:8 bset rs,@abs:8 8520 * bpl pcrel:16 bsr pcrel:8 8521 bmi pcrel:8 bsr pcrel:16 8522 * bmi pcrel:16 bst #imm,rd 8523 bge pcrel:8 bst #imm,@rd 8524 * bge pcrel:16 bst #imm,@abs:8 8525 blt pcrel:8 btst #imm,rd 8526 * blt pcrel:16 btst #imm,@rd 8527 bgt pcrel:8 btst #imm,@abs:8 8528 * bgt pcrel:16 btst rs,rd 8529 ble pcrel:8 btst rs,@rd 8530 * ble pcrel:16 btst rs,@abs:8 8531 bclr #imm,rd bxor #imm,rd 8532 bclr #imm,@rd bxor #imm,@rd 8533 bclr #imm,@abs:8 bxor #imm,@abs:8 8534 bclr rs,rd cmp.b #imm,rd 8535 bclr rs,@rd cmp.b rs,rd 8536 bclr rs,@abs:8 cmp.w rs,rd 8537 biand #imm,rd cmp.w rs,rd 8538 biand #imm,@rd * cmp.w #imm,rd 8539 biand #imm,@abs:8 * cmp.l #imm,rd 8540 bild #imm,rd * cmp.l rs,rd 8541 bild #imm,@rd daa rs 8542 bild #imm,@abs:8 das rs 8543 bior #imm,rd dec.b rs 8544 bior #imm,@rd * dec.w #imm,rd 8545 bior #imm,@abs:8 * dec.l #imm,rd 8546 bist #imm,rd divxu.b rs,rd 8547 bist #imm,@rd * divxu.w rs,rd 8548 bist #imm,@abs:8 * divxs.b rs,rd 8549 bixor #imm,rd * divxs.w rs,rd 8550 bixor #imm,@rd eepmov 8551 bixor #imm,@abs:8 * eepmovw 8552 8553 * exts.w rd mov.w rs,@abs:16 8554 * exts.l rd * mov.l #imm,rd 8555 * extu.w rd * mov.l rs,rd 8556 * extu.l rd * mov.l @rs,rd 8557 inc rs * mov.l @(disp:16,rs),rd 8558 * inc.w #imm,rd * mov.l @(disp:24,rs),rd 8559 * inc.l #imm,rd * mov.l @rs+,rd 8560 jmp @rs * mov.l @abs:16,rd 8561 jmp abs * mov.l @abs:24,rd 8562 jmp @@abs:8 * mov.l rs,@rd 8563 jsr @rs * mov.l rs,@(disp:16,rd) 8564 jsr abs * mov.l rs,@(disp:24,rd) 8565 jsr @@abs:8 * mov.l rs,@-rd 8566 ldc #imm,ccr * mov.l rs,@abs:16 8567 ldc rs,ccr * mov.l rs,@abs:24 8568 * ldc @abs:16,ccr movfpe @abs:16,rd 8569 * ldc @abs:24,ccr movtpe rs,@abs:16 8570 * ldc @(disp:16,rs),ccr mulxu.b rs,rd 8571 * ldc @(disp:24,rs),ccr * mulxu.w rs,rd 8572 * ldc @rs+,ccr * mulxs.b rs,rd 8573 * ldc @rs,ccr * mulxs.w rs,rd 8574 * mov.b @(disp:24,rs),rd neg.b rs 8575 * mov.b rs,@(disp:24,rd) * neg.w rs 8576 mov.b @abs:16,rd * neg.l rs 8577 mov.b rs,rd nop 8578 mov.b @abs:8,rd not.b rs 8579 mov.b rs,@abs:8 * not.w rs 8580 mov.b rs,rd * not.l rs 8581 mov.b #imm,rd or.b #imm,rd 8582 mov.b @rs,rd or.b rs,rd 8583 mov.b @(disp:16,rs),rd * or.w #imm,rd 8584 mov.b @rs+,rd * or.w rs,rd 8585 mov.b @abs:8,rd * or.l #imm,rd 8586 mov.b rs,@rd * or.l rs,rd 8587 mov.b rs,@(disp:16,rd) orc #imm,ccr 8588 mov.b rs,@-rd pop.w rs 8589 mov.b rs,@abs:8 * pop.l rs 8590 mov.w rs,@rd push.w rs 8591 * mov.w @(disp:24,rs),rd * push.l rs 8592 * mov.w rs,@(disp:24,rd) rotl.b rs 8593 * mov.w @abs:24,rd * rotl.w rs 8594 * mov.w rs,@abs:24 * rotl.l rs 8595 mov.w rs,rd rotr.b rs 8596 mov.w #imm,rd * rotr.w rs 8597 mov.w @rs,rd * rotr.l rs 8598 mov.w @(disp:16,rs),rd rotxl.b rs 8599 mov.w @rs+,rd * rotxl.w rs 8600 mov.w @abs:16,rd * rotxl.l rs 8601 mov.w rs,@(disp:16,rd) rotxr.b rs 8602 mov.w rs,@-rd * rotxr.w rs 8603 8604 * rotxr.l rs * stc ccr,@(disp:24,rd) 8605 bpt * stc ccr,@-rd 8606 rte * stc ccr,@abs:16 8607 rts * stc ccr,@abs:24 8608 shal.b rs sub.b rs,rd 8609 * shal.w rs sub.w rs,rd 8610 * shal.l rs * sub.w #imm,rd 8611 shar.b rs * sub.l rs,rd 8612 * shar.w rs * sub.l #imm,rd 8613 * shar.l rs subs #imm,rd 8614 shll.b rs subx #imm,rd 8615 * shll.w rs subx rs,rd 8616 * shll.l rs * trapa #imm 8617 shlr.b rs xor #imm,rd 8618 * shlr.w rs xor rs,rd 8619 * shlr.l rs * xor.w #imm,rd 8620 sleep * xor.w rs,rd 8621 stc ccr,rd * xor.l #imm,rd 8622 * stc ccr,@rs * xor.l rs,rd 8623 * stc ccr,@(disp:16,rd) xorc #imm,ccr 8624 8625 Four H8/300 instructions (`add', `cmp', `mov', `sub') are defined 8626 with variants using the suffixes `.b', `.w', and `.l' to specify the 8627 size of a memory operand. `as' supports these suffixes, but does not 8628 require them; since one of the operands is always a register, `as' can 8629 deduce the correct size. 8630 8631 For example, since `r0' refers to a 16-bit register, 8632 mov r0,@foo 8633 is equivalent to 8634 mov.w r0,@foo 8635 8636 If you use the size suffixes, `as' issues a warning when the suffix 8637 and the register size do not match. 8638 8639 8640 File: as.info, Node: HPPA-Dependent, Next: ESA/390-Dependent, Prev: H8/300-Dependent, Up: Machine Dependencies 8641 8642 9.11 HPPA Dependent Features 8643 ============================ 8644 8645 * Menu: 8646 8647 * HPPA Notes:: Notes 8648 * HPPA Options:: Options 8649 * HPPA Syntax:: Syntax 8650 * HPPA Floating Point:: Floating Point 8651 * HPPA Directives:: HPPA Machine Directives 8652 * HPPA Opcodes:: Opcodes 8653 8654 8655 File: as.info, Node: HPPA Notes, Next: HPPA Options, Up: HPPA-Dependent 8656 8657 9.11.1 Notes 8658 ------------ 8659 8660 As a back end for GNU CC `as' has been throughly tested and should work 8661 extremely well. We have tested it only minimally on hand written 8662 assembly code and no one has tested it much on the assembly output from 8663 the HP compilers. 8664 8665 The format of the debugging sections has changed since the original 8666 `as' port (version 1.3X) was released; therefore, you must rebuild all 8667 HPPA objects and libraries with the new assembler so that you can debug 8668 the final executable. 8669 8670 The HPPA `as' port generates a small subset of the relocations 8671 available in the SOM and ELF object file formats. Additional relocation 8672 support will be added as it becomes necessary. 8673 8674 8675 File: as.info, Node: HPPA Options, Next: HPPA Syntax, Prev: HPPA Notes, Up: HPPA-Dependent 8676 8677 9.11.2 Options 8678 -------------- 8679 8680 `as' has no machine-dependent command-line options for the HPPA. 8681 8682 8683 File: as.info, Node: HPPA Syntax, Next: HPPA Floating Point, Prev: HPPA Options, Up: HPPA-Dependent 8684 8685 9.11.3 Syntax 8686 ------------- 8687 8688 The assembler syntax closely follows the HPPA instruction set reference 8689 manual; assembler directives and general syntax closely follow the HPPA 8690 assembly language reference manual, with a few noteworthy differences. 8691 8692 First, a colon may immediately follow a label definition. This is 8693 simply for compatibility with how most assembly language programmers 8694 write code. 8695 8696 Some obscure expression parsing problems may affect hand written 8697 code which uses the `spop' instructions, or code which makes significant 8698 use of the `!' line separator. 8699 8700 `as' is much less forgiving about missing arguments and other 8701 similar oversights than the HP assembler. `as' notifies you of missing 8702 arguments as syntax errors; this is regarded as a feature, not a bug. 8703 8704 Finally, `as' allows you to use an external symbol without 8705 explicitly importing the symbol. _Warning:_ in the future this will be 8706 an error for HPPA targets. 8707 8708 Special characters for HPPA targets include: 8709 8710 `;' is the line comment character. 8711 8712 `!' can be used instead of a newline to separate statements. 8713 8714 Since `$' has no special meaning, you may use it in symbol names. 8715 8716 8717 File: as.info, Node: HPPA Floating Point, Next: HPPA Directives, Prev: HPPA Syntax, Up: HPPA-Dependent 8718 8719 9.11.4 Floating Point 8720 --------------------- 8721 8722 The HPPA family uses IEEE floating-point numbers. 8723 8724 8725 File: as.info, Node: HPPA Directives, Next: HPPA Opcodes, Prev: HPPA Floating Point, Up: HPPA-Dependent 8726 8727 9.11.5 HPPA Assembler Directives 8728 -------------------------------- 8729 8730 `as' for the HPPA supports many additional directives for compatibility 8731 with the native assembler. This section describes them only briefly. 8732 For detailed information on HPPA-specific assembler directives, see 8733 `HP9000 Series 800 Assembly Language Reference Manual' (HP 92432-90001). 8734 8735 `as' does _not_ support the following assembler directives described 8736 in the HP manual: 8737 8738 .endm .liston 8739 .enter .locct 8740 .leave .macro 8741 .listoff 8742 8743 Beyond those implemented for compatibility, `as' supports one 8744 additional assembler directive for the HPPA: `.param'. It conveys 8745 register argument locations for static functions. Its syntax closely 8746 follows the `.export' directive. 8747 8748 These are the additional directives in `as' for the HPPA: 8749 8750 `.block N' 8751 `.blockz N' 8752 Reserve N bytes of storage, and initialize them to zero. 8753 8754 `.call' 8755 Mark the beginning of a procedure call. Only the special case 8756 with _no arguments_ is allowed. 8757 8758 `.callinfo [ PARAM=VALUE, ... ] [ FLAG, ... ]' 8759 Specify a number of parameters and flags that define the 8760 environment for a procedure. 8761 8762 PARAM may be any of `frame' (frame size), `entry_gr' (end of 8763 general register range), `entry_fr' (end of float register range), 8764 `entry_sr' (end of space register range). 8765 8766 The values for FLAG are `calls' or `caller' (proc has 8767 subroutines), `no_calls' (proc does not call subroutines), 8768 `save_rp' (preserve return pointer), `save_sp' (proc preserves 8769 stack pointer), `no_unwind' (do not unwind this proc), `hpux_int' 8770 (proc is interrupt routine). 8771 8772 `.code' 8773 Assemble into the standard section called `$TEXT$', subsection 8774 `$CODE$'. 8775 8776 `.copyright "STRING"' 8777 In the SOM object format, insert STRING into the object code, 8778 marked as a copyright string. 8779 8780 `.copyright "STRING"' 8781 In the ELF object format, insert STRING into the object code, 8782 marked as a version string. 8783 8784 `.enter' 8785 Not yet supported; the assembler rejects programs containing this 8786 directive. 8787 8788 `.entry' 8789 Mark the beginning of a procedure. 8790 8791 `.exit' 8792 Mark the end of a procedure. 8793 8794 `.export NAME [ ,TYP ] [ ,PARAM=R ]' 8795 Make a procedure NAME available to callers. TYP, if present, must 8796 be one of `absolute', `code' (ELF only, not SOM), `data', `entry', 8797 `data', `entry', `millicode', `plabel', `pri_prog', or `sec_prog'. 8798 8799 PARAM, if present, provides either relocation information for the 8800 procedure arguments and result, or a privilege level. PARAM may be 8801 `argwN' (where N ranges from `0' to `3', and indicates one of four 8802 one-word arguments); `rtnval' (the procedure's result); or 8803 `priv_lev' (privilege level). For arguments or the result, R 8804 specifies how to relocate, and must be one of `no' (not 8805 relocatable), `gr' (argument is in general register), `fr' (in 8806 floating point register), or `fu' (upper half of float register). 8807 For `priv_lev', R is an integer. 8808 8809 `.half N' 8810 Define a two-byte integer constant N; synonym for the portable 8811 `as' directive `.short'. 8812 8813 `.import NAME [ ,TYP ]' 8814 Converse of `.export'; make a procedure available to call. The 8815 arguments use the same conventions as the first two arguments for 8816 `.export'. 8817 8818 `.label NAME' 8819 Define NAME as a label for the current assembly location. 8820 8821 `.leave' 8822 Not yet supported; the assembler rejects programs containing this 8823 directive. 8824 8825 `.origin LC' 8826 Advance location counter to LC. Synonym for the `as' portable 8827 directive `.org'. 8828 8829 `.param NAME [ ,TYP ] [ ,PARAM=R ]' 8830 Similar to `.export', but used for static procedures. 8831 8832 `.proc' 8833 Use preceding the first statement of a procedure. 8834 8835 `.procend' 8836 Use following the last statement of a procedure. 8837 8838 `LABEL .reg EXPR' 8839 Synonym for `.equ'; define LABEL with the absolute expression EXPR 8840 as its value. 8841 8842 `.space SECNAME [ ,PARAMS ]' 8843 Switch to section SECNAME, creating a new section by that name if 8844 necessary. You may only use PARAMS when creating a new section, 8845 not when switching to an existing one. SECNAME may identify a 8846 section by number rather than by name. 8847 8848 If specified, the list PARAMS declares attributes of the section, 8849 identified by keywords. The keywords recognized are `spnum=EXP' 8850 (identify this section by the number EXP, an absolute expression), 8851 `sort=EXP' (order sections according to this sort key when linking; 8852 EXP is an absolute expression), `unloadable' (section contains no 8853 loadable data), `notdefined' (this section defined elsewhere), and 8854 `private' (data in this section not available to other programs). 8855 8856 `.spnum SECNAM' 8857 Allocate four bytes of storage, and initialize them with the 8858 section number of the section named SECNAM. (You can define the 8859 section number with the HPPA `.space' directive.) 8860 8861 `.string "STR"' 8862 Copy the characters in the string STR to the object file. *Note 8863 Strings: Strings, for information on escape sequences you can use 8864 in `as' strings. 8865 8866 _Warning!_ The HPPA version of `.string' differs from the usual 8867 `as' definition: it does _not_ write a zero byte after copying STR. 8868 8869 `.stringz "STR"' 8870 Like `.string', but appends a zero byte after copying STR to object 8871 file. 8872 8873 `.subspa NAME [ ,PARAMS ]' 8874 `.nsubspa NAME [ ,PARAMS ]' 8875 Similar to `.space', but selects a subsection NAME within the 8876 current section. You may only specify PARAMS when you create a 8877 subsection (in the first instance of `.subspa' for this NAME). 8878 8879 If specified, the list PARAMS declares attributes of the 8880 subsection, identified by keywords. The keywords recognized are 8881 `quad=EXPR' ("quadrant" for this subsection), `align=EXPR' 8882 (alignment for beginning of this subsection; a power of two), 8883 `access=EXPR' (value for "access rights" field), `sort=EXPR' 8884 (sorting order for this subspace in link), `code_only' (subsection 8885 contains only code), `unloadable' (subsection cannot be loaded 8886 into memory), `comdat' (subsection is comdat), `common' 8887 (subsection is common block), `dup_comm' (subsection may have 8888 duplicate names), or `zero' (subsection is all zeros, do not write 8889 in object file). 8890 8891 `.nsubspa' always creates a new subspace with the given name, even 8892 if one with the same name already exists. 8893 8894 `comdat', `common' and `dup_comm' can be used to implement various 8895 flavors of one-only support when using the SOM linker. The SOM 8896 linker only supports specific combinations of these flags. The 8897 details are not documented. A brief description is provided here. 8898 8899 `comdat' provides a form of linkonce support. It is useful for 8900 both code and data subspaces. A `comdat' subspace has a key symbol 8901 marked by the `is_comdat' flag or `ST_COMDAT'. Only the first 8902 subspace for any given key is selected. The key symbol becomes 8903 universal in shared links. This is similar to the behavior of 8904 `secondary_def' symbols. 8905 8906 `common' provides Fortran named common support. It is only useful 8907 for data subspaces. Symbols with the flag `is_common' retain this 8908 flag in shared links. Referencing a `is_common' symbol in a shared 8909 library from outside the library doesn't work. Thus, `is_common' 8910 symbols must be output whenever they are needed. 8911 8912 `common' and `dup_comm' together provide Cobol common support. 8913 The subspaces in this case must all be the same length. 8914 Otherwise, this support is similar to the Fortran common support. 8915 8916 `dup_comm' by itself provides a type of one-only support for code. 8917 Only the first `dup_comm' subspace is selected. There is a rather 8918 complex algorithm to compare subspaces. Code symbols marked with 8919 the `dup_common' flag are hidden. This support was intended for 8920 "C++ duplicate inlines". 8921 8922 A simplified technique is used to mark the flags of symbols based 8923 on the flags of their subspace. A symbol with the scope 8924 SS_UNIVERSAL and type ST_ENTRY, ST_CODE or ST_DATA is marked with 8925 the corresponding settings of `comdat', `common' and `dup_comm' 8926 from the subspace, respectively. This avoids having to introduce 8927 additional directives to mark these symbols. The HP assembler 8928 sets `is_common' from `common'. However, it doesn't set the 8929 `dup_common' from `dup_comm'. It doesn't have `comdat' support. 8930 8931 `.version "STR"' 8932 Write STR as version identifier in object code. 8933 8934 8935 File: as.info, Node: HPPA Opcodes, Prev: HPPA Directives, Up: HPPA-Dependent 8936 8937 9.11.6 Opcodes 8938 -------------- 8939 8940 For detailed information on the HPPA machine instruction set, see 8941 `PA-RISC Architecture and Instruction Set Reference Manual' (HP 8942 09740-90039). 8943 8944 8945 File: as.info, Node: ESA/390-Dependent, Next: i386-Dependent, Prev: HPPA-Dependent, Up: Machine Dependencies 8946 8947 9.12 ESA/390 Dependent Features 8948 =============================== 8949 8950 * Menu: 8951 8952 * ESA/390 Notes:: Notes 8953 * ESA/390 Options:: Options 8954 * ESA/390 Syntax:: Syntax 8955 * ESA/390 Floating Point:: Floating Point 8956 * ESA/390 Directives:: ESA/390 Machine Directives 8957 * ESA/390 Opcodes:: Opcodes 8958 8959 8960 File: as.info, Node: ESA/390 Notes, Next: ESA/390 Options, Up: ESA/390-Dependent 8961 8962 9.12.1 Notes 8963 ------------ 8964 8965 The ESA/390 `as' port is currently intended to be a back-end for the 8966 GNU CC compiler. It is not HLASM compatible, although it does support 8967 a subset of some of the HLASM directives. The only supported binary 8968 file format is ELF; none of the usual MVS/VM/OE/USS object file 8969 formats, such as ESD or XSD, are supported. 8970 8971 When used with the GNU CC compiler, the ESA/390 `as' will produce 8972 correct, fully relocated, functional binaries, and has been used to 8973 compile and execute large projects. However, many aspects should still 8974 be considered experimental; these include shared library support, 8975 dynamically loadable objects, and any relocation other than the 31-bit 8976 relocation. 8977 8978 8979 File: as.info, Node: ESA/390 Options, Next: ESA/390 Syntax, Prev: ESA/390 Notes, Up: ESA/390-Dependent 8980 8981 9.12.2 Options 8982 -------------- 8983 8984 `as' has no machine-dependent command-line options for the ESA/390. 8985 8986 8987 File: as.info, Node: ESA/390 Syntax, Next: ESA/390 Floating Point, Prev: ESA/390 Options, Up: ESA/390-Dependent 8988 8989 9.12.3 Syntax 8990 ------------- 8991 8992 The opcode/operand syntax follows the ESA/390 Principles of Operation 8993 manual; assembler directives and general syntax are loosely based on the 8994 prevailing AT&T/SVR4/ELF/Solaris style notation. HLASM-style directives 8995 are _not_ supported for the most part, with the exception of those 8996 described herein. 8997 8998 A leading dot in front of directives is optional, and the case of 8999 directives is ignored; thus for example, .using and USING have the same 9000 effect. 9001 9002 A colon may immediately follow a label definition. This is simply 9003 for compatibility with how most assembly language programmers write 9004 code. 9005 9006 `#' is the line comment character. 9007 9008 `;' can be used instead of a newline to separate statements. 9009 9010 Since `$' has no special meaning, you may use it in symbol names. 9011 9012 Registers can be given the symbolic names r0..r15, fp0, fp2, fp4, 9013 fp6. By using thesse symbolic names, `as' can detect simple syntax 9014 errors. The name rarg or r.arg is a synonym for r11, rtca or r.tca for 9015 r12, sp, r.sp, dsa r.dsa for r13, lr or r.lr for r14, rbase or r.base 9016 for r3 and rpgt or r.pgt for r4. 9017 9018 `*' is the current location counter. Unlike `.' it is always 9019 relative to the last USING directive. Note that this means that 9020 expressions cannot use multiplication, as any occurrence of `*' will be 9021 interpreted as a location counter. 9022 9023 All labels are relative to the last USING. Thus, branches to a label 9024 always imply the use of base+displacement. 9025 9026 Many of the usual forms of address constants / address literals are 9027 supported. Thus, 9028 .using *,r3 9029 L r15,=A(some_routine) 9030 LM r6,r7,=V(some_longlong_extern) 9031 A r1,=F'12' 9032 AH r0,=H'42' 9033 ME r6,=E'3.1416' 9034 MD r6,=D'3.14159265358979' 9035 O r6,=XL4'cacad0d0' 9036 .ltorg 9037 should all behave as expected: that is, an entry in the literal pool 9038 will be created (or reused if it already exists), and the instruction 9039 operands will be the displacement into the literal pool using the 9040 current base register (as last declared with the `.using' directive). 9041 9042 9043 File: as.info, Node: ESA/390 Floating Point, Next: ESA/390 Directives, Prev: ESA/390 Syntax, Up: ESA/390-Dependent 9044 9045 9.12.4 Floating Point 9046 --------------------- 9047 9048 The assembler generates only IEEE floating-point numbers. The older 9049 floating point formats are not supported. 9050 9051 9052 File: as.info, Node: ESA/390 Directives, Next: ESA/390 Opcodes, Prev: ESA/390 Floating Point, Up: ESA/390-Dependent 9053 9054 9.12.5 ESA/390 Assembler Directives 9055 ----------------------------------- 9056 9057 `as' for the ESA/390 supports all of the standard ELF/SVR4 assembler 9058 directives that are documented in the main part of this documentation. 9059 Several additional directives are supported in order to implement the 9060 ESA/390 addressing model. The most important of these are `.using' and 9061 `.ltorg' 9062 9063 These are the additional directives in `as' for the ESA/390: 9064 9065 `.dc' 9066 A small subset of the usual DC directive is supported. 9067 9068 `.drop REGNO' 9069 Stop using REGNO as the base register. The REGNO must have been 9070 previously declared with a `.using' directive in the same section 9071 as the current section. 9072 9073 `.ebcdic STRING' 9074 Emit the EBCDIC equivalent of the indicated string. The emitted 9075 string will be null terminated. Note that the directives 9076 `.string' etc. emit ascii strings by default. 9077 9078 `EQU' 9079 The standard HLASM-style EQU directive is not supported; however, 9080 the standard `as' directive .equ can be used to the same effect. 9081 9082 `.ltorg' 9083 Dump the literal pool accumulated so far; begin a new literal pool. 9084 The literal pool will be written in the current section; in order 9085 to generate correct assembly, a `.using' must have been previously 9086 specified in the same section. 9087 9088 `.using EXPR,REGNO' 9089 Use REGNO as the base register for all subsequent RX, RS, and SS 9090 form instructions. The EXPR will be evaluated to obtain the base 9091 address; usually, EXPR will merely be `*'. 9092 9093 This assembler allows two `.using' directives to be simultaneously 9094 outstanding, one in the `.text' section, and one in another section 9095 (typically, the `.data' section). This feature allows dynamically 9096 loaded objects to be implemented in a relatively straightforward 9097 way. A `.using' directive must always be specified in the `.text' 9098 section; this will specify the base register that will be used for 9099 branches in the `.text' section. A second `.using' may be 9100 specified in another section; this will specify the base register 9101 that is used for non-label address literals. When a second 9102 `.using' is specified, then the subsequent `.ltorg' must be put in 9103 the same section; otherwise an error will result. 9104 9105 Thus, for example, the following code uses `r3' to address branch 9106 targets and `r4' to address the literal pool, which has been 9107 written to the `.data' section. The is, the constants 9108 `=A(some_routine)', `=H'42'' and `=E'3.1416'' will all appear in 9109 the `.data' section. 9110 9111 .data 9112 .using LITPOOL,r4 9113 .text 9114 BASR r3,0 9115 .using *,r3 9116 B START 9117 .long LITPOOL 9118 START: 9119 L r4,4(,r3) 9120 L r15,=A(some_routine) 9121 LTR r15,r15 9122 BNE LABEL 9123 AH r0,=H'42' 9124 LABEL: 9125 ME r6,=E'3.1416' 9126 .data 9127 LITPOOL: 9128 .ltorg 9129 9130 Note that this dual-`.using' directive semantics extends and is 9131 not compatible with HLASM semantics. Note that this assembler 9132 directive does not support the full range of HLASM semantics. 9133 9134 9135 9136 File: as.info, Node: ESA/390 Opcodes, Prev: ESA/390 Directives, Up: ESA/390-Dependent 9137 9138 9.12.6 Opcodes 9139 -------------- 9140 9141 For detailed information on the ESA/390 machine instruction set, see 9142 `ESA/390 Principles of Operation' (IBM Publication Number DZ9AR004). 9143 9144 9145 File: as.info, Node: i386-Dependent, Next: i860-Dependent, Prev: ESA/390-Dependent, Up: Machine Dependencies 9146 9147 9.13 80386 Dependent Features 9148 ============================= 9149 9150 The i386 version `as' supports both the original Intel 386 9151 architecture in both 16 and 32-bit mode as well as AMD x86-64 9152 architecture extending the Intel architecture to 64-bits. 9153 9154 * Menu: 9155 9156 * i386-Options:: Options 9157 * i386-Directives:: X86 specific directives 9158 * i386-Syntax:: AT&T Syntax versus Intel Syntax 9159 * i386-Mnemonics:: Instruction Naming 9160 * i386-Regs:: Register Naming 9161 * i386-Prefixes:: Instruction Prefixes 9162 * i386-Memory:: Memory References 9163 * i386-Jumps:: Handling of Jump Instructions 9164 * i386-Float:: Floating Point 9165 * i386-SIMD:: Intel's MMX and AMD's 3DNow! SIMD Operations 9166 * i386-16bit:: Writing 16-bit Code 9167 * i386-Arch:: Specifying an x86 CPU architecture 9168 * i386-Bugs:: AT&T Syntax bugs 9169 * i386-Notes:: Notes 9170 9171 9172 File: as.info, Node: i386-Options, Next: i386-Directives, Up: i386-Dependent 9173 9174 9.13.1 Options 9175 -------------- 9176 9177 The i386 version of `as' has a few machine dependent options: 9178 9179 `--32 | --64' 9180 Select the word size, either 32 bits or 64 bits. Selecting 32-bit 9181 implies Intel i386 architecture, while 64-bit implies AMD x86-64 9182 architecture. 9183 9184 These options are only available with the ELF object file format, 9185 and require that the necessary BFD support has been included (on a 9186 32-bit platform you have to add -enable-64-bit-bfd to configure 9187 enable 64-bit usage and use x86-64 as target platform). 9188 9189 `-n' 9190 By default, x86 GAS replaces multiple nop instructions used for 9191 alignment within code sections with multi-byte nop instructions 9192 such as leal 0(%esi,1),%esi. This switch disables the 9193 optimization. 9194 9195 `--divide' 9196 On SVR4-derived platforms, the character `/' is treated as a 9197 comment character, which means that it cannot be used in 9198 expressions. The `--divide' option turns `/' into a normal 9199 character. This does not disable `/' at the beginning of a line 9200 starting a comment, or affect using `#' for starting a comment. 9201 9202 `-march=CPU[+EXTENSION...]' 9203 This option specifies the target processor. The assembler will 9204 issue an error message if an attempt is made to assemble an 9205 instruction which will not execute on the target processor. The 9206 following processor names are recognized: `i8086', `i186', `i286', 9207 `i386', `i486', `i586', `i686', `pentium', `pentiumpro', 9208 `pentiumii', `pentiumiii', `pentium4', `prescott', `nocona', 9209 `core', `core2', `k6', `k6_2', `athlon', `opteron', `k8', 9210 `amdfam10', `generic32' and `generic64'. 9211 9212 In addition to the basic instruction set, the assembler can be 9213 told to accept various extension mnemonics. For example, 9214 `-march=i686+sse4+vmx' extends I686 with SSE4 and VMX. The 9215 following extensions are currently supported: `mmx', `sse', `sse2', 9216 `sse3', `ssse3', `sse4.1', `sse4.2', `sse4', `avx', `vmx', `smx', 9217 `xsave', `aes', `pclmul', `fma', `movbe', `ept', `3dnow', `3dnowa', 9218 `sse4a', `sse5', `svme', `abm' and `padlock'. 9219 9220 When the `.arch' directive is used with `-march', the `.arch' 9221 directive will take precedent. 9222 9223 `-mtune=CPU' 9224 This option specifies a processor to optimize for. When used in 9225 conjunction with the `-march' option, only instructions of the 9226 processor specified by the `-march' option will be generated. 9227 9228 Valid CPU values are identical to the processor list of 9229 `-march=CPU'. 9230 9231 `-msse2avx' 9232 This option specifies that the assembler should encode SSE 9233 instructions with VEX prefix. 9234 9235 `-msse-check=NONE' 9236 9237 `-msse-check=WARNING' 9238 9239 `-msse-check=ERROR' 9240 These options control if the assembler should check SSE 9241 intructions. `-msse-check=NONE' will make the assembler not to 9242 check SSE instructions, which is the default. 9243 `-msse-check=WARNING' will make the assembler issue a warning for 9244 any SSE intruction. `-msse-check=ERROR' will make the assembler 9245 issue an error for any SSE intruction. 9246 9247 `-mmnemonic=ATT' 9248 9249 `-mmnemonic=INTEL' 9250 This option specifies instruction mnemonic for matching 9251 instructions. The `.att_mnemonic' and `.intel_mnemonic' 9252 directives will take precedent. 9253 9254 `-msyntax=ATT' 9255 9256 `-msyntax=INTEL' 9257 This option specifies instruction syntax when processing 9258 instructions. The `.att_syntax' and `.intel_syntax' directives 9259 will take precedent. 9260 9261 `-mnaked-reg' 9262 This opetion specifies that registers don't require a `%' prefix. 9263 The `.att_syntax' and `.intel_syntax' directives will take 9264 precedent. 9265 9266 9267 9268 File: as.info, Node: i386-Directives, Next: i386-Syntax, Prev: i386-Options, Up: i386-Dependent 9269 9270 9.13.2 x86 specific Directives 9271 ------------------------------ 9272 9273 `.lcomm SYMBOL , LENGTH[, ALIGNMENT]' 9274 Reserve LENGTH (an absolute expression) bytes for a local common 9275 denoted by SYMBOL. The section and value of SYMBOL are those of 9276 the new local common. The addresses are allocated in the bss 9277 section, so that at run-time the bytes start off zeroed. Since 9278 SYMBOL is not declared global, it is normally not visible to `ld'. 9279 The optional third parameter, ALIGNMENT, specifies the desired 9280 alignment of the symbol in the bss section. 9281 9282 This directive is only available for COFF based x86 targets. 9283 9284 9285 9286 File: as.info, Node: i386-Syntax, Next: i386-Mnemonics, Prev: i386-Directives, Up: i386-Dependent 9287 9288 9.13.3 AT&T Syntax versus Intel Syntax 9289 -------------------------------------- 9290 9291 `as' now supports assembly using Intel assembler syntax. 9292 `.intel_syntax' selects Intel mode, and `.att_syntax' switches back to 9293 the usual AT&T mode for compatibility with the output of `gcc'. Either 9294 of these directives may have an optional argument, `prefix', or 9295 `noprefix' specifying whether registers require a `%' prefix. AT&T 9296 System V/386 assembler syntax is quite different from Intel syntax. We 9297 mention these differences because almost all 80386 documents use Intel 9298 syntax. Notable differences between the two syntaxes are: 9299 9300 * AT&T immediate operands are preceded by `$'; Intel immediate 9301 operands are undelimited (Intel `push 4' is AT&T `pushl $4'). 9302 AT&T register operands are preceded by `%'; Intel register operands 9303 are undelimited. AT&T absolute (as opposed to PC relative) 9304 jump/call operands are prefixed by `*'; they are undelimited in 9305 Intel syntax. 9306 9307 * AT&T and Intel syntax use the opposite order for source and 9308 destination operands. Intel `add eax, 4' is `addl $4, %eax'. The 9309 `source, dest' convention is maintained for compatibility with 9310 previous Unix assemblers. Note that `bound', `invlpga', and 9311 instructions with 2 immediate operands, such as the `enter' 9312 instruction, do _not_ have reversed order. *Note i386-Bugs::. 9313 9314 * In AT&T syntax the size of memory operands is determined from the 9315 last character of the instruction mnemonic. Mnemonic suffixes of 9316 `b', `w', `l' and `q' specify byte (8-bit), word (16-bit), long 9317 (32-bit) and quadruple word (64-bit) memory references. Intel 9318 syntax accomplishes this by prefixing memory operands (_not_ the 9319 instruction mnemonics) with `byte ptr', `word ptr', `dword ptr' 9320 and `qword ptr'. Thus, Intel `mov al, byte ptr FOO' is `movb FOO, 9321 %al' in AT&T syntax. 9322 9323 * Immediate form long jumps and calls are `lcall/ljmp $SECTION, 9324 $OFFSET' in AT&T syntax; the Intel syntax is `call/jmp far 9325 SECTION:OFFSET'. Also, the far return instruction is `lret 9326 $STACK-ADJUST' in AT&T syntax; Intel syntax is `ret far 9327 STACK-ADJUST'. 9328 9329 * The AT&T assembler does not provide support for multiple section 9330 programs. Unix style systems expect all programs to be single 9331 sections. 9332 9333 9334 File: as.info, Node: i386-Mnemonics, Next: i386-Regs, Prev: i386-Syntax, Up: i386-Dependent 9335 9336 9.13.4 Instruction Naming 9337 ------------------------- 9338 9339 Instruction mnemonics are suffixed with one character modifiers which 9340 specify the size of operands. The letters `b', `w', `l' and `q' 9341 specify byte, word, long and quadruple word operands. If no suffix is 9342 specified by an instruction then `as' tries to fill in the missing 9343 suffix based on the destination register operand (the last one by 9344 convention). Thus, `mov %ax, %bx' is equivalent to `movw %ax, %bx'; 9345 also, `mov $1, %bx' is equivalent to `movw $1, bx'. Note that this is 9346 incompatible with the AT&T Unix assembler which assumes that a missing 9347 mnemonic suffix implies long operand size. (This incompatibility does 9348 not affect compiler output since compilers always explicitly specify 9349 the mnemonic suffix.) 9350 9351 Almost all instructions have the same names in AT&T and Intel format. 9352 There are a few exceptions. The sign extend and zero extend 9353 instructions need two sizes to specify them. They need a size to 9354 sign/zero extend _from_ and a size to zero extend _to_. This is 9355 accomplished by using two instruction mnemonic suffixes in AT&T syntax. 9356 Base names for sign extend and zero extend are `movs...' and `movz...' 9357 in AT&T syntax (`movsx' and `movzx' in Intel syntax). The instruction 9358 mnemonic suffixes are tacked on to this base name, the _from_ suffix 9359 before the _to_ suffix. Thus, `movsbl %al, %edx' is AT&T syntax for 9360 "move sign extend _from_ %al _to_ %edx." Possible suffixes, thus, are 9361 `bl' (from byte to long), `bw' (from byte to word), `wl' (from word to 9362 long), `bq' (from byte to quadruple word), `wq' (from word to quadruple 9363 word), and `lq' (from long to quadruple word). 9364 9365 The Intel-syntax conversion instructions 9366 9367 * `cbw' -- sign-extend byte in `%al' to word in `%ax', 9368 9369 * `cwde' -- sign-extend word in `%ax' to long in `%eax', 9370 9371 * `cwd' -- sign-extend word in `%ax' to long in `%dx:%ax', 9372 9373 * `cdq' -- sign-extend dword in `%eax' to quad in `%edx:%eax', 9374 9375 * `cdqe' -- sign-extend dword in `%eax' to quad in `%rax' (x86-64 9376 only), 9377 9378 * `cqo' -- sign-extend quad in `%rax' to octuple in `%rdx:%rax' 9379 (x86-64 only), 9380 9381 are called `cbtw', `cwtl', `cwtd', `cltd', `cltq', and `cqto' in AT&T 9382 naming. `as' accepts either naming for these instructions. 9383 9384 Far call/jump instructions are `lcall' and `ljmp' in AT&T syntax, 9385 but are `call far' and `jump far' in Intel convention. 9386 9387 9.13.5 AT&T Mnemonic versus Intel Mnemonic 9388 ------------------------------------------ 9389 9390 `as' supports assembly using Intel mnemonic. `.intel_mnemonic' selects 9391 Intel mnemonic with Intel syntax, and `.att_mnemonic' switches back to 9392 the usual AT&T mnemonic with AT&T syntax for compatibility with the 9393 output of `gcc'. Several x87 instructions, `fadd', `fdiv', `fdivp', 9394 `fdivr', `fdivrp', `fmul', `fsub', `fsubp', `fsubr' and `fsubrp', are 9395 implemented in AT&T System V/386 assembler with different mnemonics 9396 from those in Intel IA32 specification. `gcc' generates those 9397 instructions with AT&T mnemonic. 9398 9399 9400 File: as.info, Node: i386-Regs, Next: i386-Prefixes, Prev: i386-Mnemonics, Up: i386-Dependent 9401 9402 9.13.6 Register Naming 9403 ---------------------- 9404 9405 Register operands are always prefixed with `%'. The 80386 registers 9406 consist of 9407 9408 * the 8 32-bit registers `%eax' (the accumulator), `%ebx', `%ecx', 9409 `%edx', `%edi', `%esi', `%ebp' (the frame pointer), and `%esp' 9410 (the stack pointer). 9411 9412 * the 8 16-bit low-ends of these: `%ax', `%bx', `%cx', `%dx', `%di', 9413 `%si', `%bp', and `%sp'. 9414 9415 * the 8 8-bit registers: `%ah', `%al', `%bh', `%bl', `%ch', `%cl', 9416 `%dh', and `%dl' (These are the high-bytes and low-bytes of `%ax', 9417 `%bx', `%cx', and `%dx') 9418 9419 * the 6 section registers `%cs' (code section), `%ds' (data 9420 section), `%ss' (stack section), `%es', `%fs', and `%gs'. 9421 9422 * the 3 processor control registers `%cr0', `%cr2', and `%cr3'. 9423 9424 * the 6 debug registers `%db0', `%db1', `%db2', `%db3', `%db6', and 9425 `%db7'. 9426 9427 * the 2 test registers `%tr6' and `%tr7'. 9428 9429 * the 8 floating point register stack `%st' or equivalently 9430 `%st(0)', `%st(1)', `%st(2)', `%st(3)', `%st(4)', `%st(5)', 9431 `%st(6)', and `%st(7)'. These registers are overloaded by 8 MMX 9432 registers `%mm0', `%mm1', `%mm2', `%mm3', `%mm4', `%mm5', `%mm6' 9433 and `%mm7'. 9434 9435 * the 8 SSE registers registers `%xmm0', `%xmm1', `%xmm2', `%xmm3', 9436 `%xmm4', `%xmm5', `%xmm6' and `%xmm7'. 9437 9438 The AMD x86-64 architecture extends the register set by: 9439 9440 * enhancing the 8 32-bit registers to 64-bit: `%rax' (the 9441 accumulator), `%rbx', `%rcx', `%rdx', `%rdi', `%rsi', `%rbp' (the 9442 frame pointer), `%rsp' (the stack pointer) 9443 9444 * the 8 extended registers `%r8'-`%r15'. 9445 9446 * the 8 32-bit low ends of the extended registers: `%r8d'-`%r15d' 9447 9448 * the 8 16-bit low ends of the extended registers: `%r8w'-`%r15w' 9449 9450 * the 8 8-bit low ends of the extended registers: `%r8b'-`%r15b' 9451 9452 * the 4 8-bit registers: `%sil', `%dil', `%bpl', `%spl'. 9453 9454 * the 8 debug registers: `%db8'-`%db15'. 9455 9456 * the 8 SSE registers: `%xmm8'-`%xmm15'. 9457 9458 9459 File: as.info, Node: i386-Prefixes, Next: i386-Memory, Prev: i386-Regs, Up: i386-Dependent 9460 9461 9.13.7 Instruction Prefixes 9462 --------------------------- 9463 9464 Instruction prefixes are used to modify the following instruction. They 9465 are used to repeat string instructions, to provide section overrides, to 9466 perform bus lock operations, and to change operand and address sizes. 9467 (Most instructions that normally operate on 32-bit operands will use 9468 16-bit operands if the instruction has an "operand size" prefix.) 9469 Instruction prefixes are best written on the same line as the 9470 instruction they act upon. For example, the `scas' (scan string) 9471 instruction is repeated with: 9472 9473 repne scas %es:(%edi),%al 9474 9475 You may also place prefixes on the lines immediately preceding the 9476 instruction, but this circumvents checks that `as' does with prefixes, 9477 and will not work with all prefixes. 9478 9479 Here is a list of instruction prefixes: 9480 9481 * Section override prefixes `cs', `ds', `ss', `es', `fs', `gs'. 9482 These are automatically added by specifying using the 9483 SECTION:MEMORY-OPERAND form for memory references. 9484 9485 * Operand/Address size prefixes `data16' and `addr16' change 32-bit 9486 operands/addresses into 16-bit operands/addresses, while `data32' 9487 and `addr32' change 16-bit ones (in a `.code16' section) into 9488 32-bit operands/addresses. These prefixes _must_ appear on the 9489 same line of code as the instruction they modify. For example, in 9490 a 16-bit `.code16' section, you might write: 9491 9492 addr32 jmpl *(%ebx) 9493 9494 * The bus lock prefix `lock' inhibits interrupts during execution of 9495 the instruction it precedes. (This is only valid with certain 9496 instructions; see a 80386 manual for details). 9497 9498 * The wait for coprocessor prefix `wait' waits for the coprocessor to 9499 complete the current instruction. This should never be needed for 9500 the 80386/80387 combination. 9501 9502 * The `rep', `repe', and `repne' prefixes are added to string 9503 instructions to make them repeat `%ecx' times (`%cx' times if the 9504 current address size is 16-bits). 9505 9506 * The `rex' family of prefixes is used by x86-64 to encode 9507 extensions to i386 instruction set. The `rex' prefix has four 9508 bits -- an operand size overwrite (`64') used to change operand 9509 size from 32-bit to 64-bit and X, Y and Z extensions bits used to 9510 extend the register set. 9511 9512 You may write the `rex' prefixes directly. The `rex64xyz' 9513 instruction emits `rex' prefix with all the bits set. By omitting 9514 the `64', `x', `y' or `z' you may write other prefixes as well. 9515 Normally, there is no need to write the prefixes explicitly, since 9516 gas will automatically generate them based on the instruction 9517 operands. 9518 9519 9520 File: as.info, Node: i386-Memory, Next: i386-Jumps, Prev: i386-Prefixes, Up: i386-Dependent 9521 9522 9.13.8 Memory References 9523 ------------------------ 9524 9525 An Intel syntax indirect memory reference of the form 9526 9527 SECTION:[BASE + INDEX*SCALE + DISP] 9528 9529 is translated into the AT&T syntax 9530 9531 SECTION:DISP(BASE, INDEX, SCALE) 9532 9533 where BASE and INDEX are the optional 32-bit base and index registers, 9534 DISP is the optional displacement, and SCALE, taking the values 1, 2, 9535 4, and 8, multiplies INDEX to calculate the address of the operand. If 9536 no SCALE is specified, SCALE is taken to be 1. SECTION specifies the 9537 optional section register for the memory operand, and may override the 9538 default section register (see a 80386 manual for section register 9539 defaults). Note that section overrides in AT&T syntax _must_ be 9540 preceded by a `%'. If you specify a section override which coincides 9541 with the default section register, `as' does _not_ output any section 9542 register override prefixes to assemble the given instruction. Thus, 9543 section overrides can be specified to emphasize which section register 9544 is used for a given memory operand. 9545 9546 Here are some examples of Intel and AT&T style memory references: 9547 9548 AT&T: `-4(%ebp)', Intel: `[ebp - 4]' 9549 BASE is `%ebp'; DISP is `-4'. SECTION is missing, and the default 9550 section is used (`%ss' for addressing with `%ebp' as the base 9551 register). INDEX, SCALE are both missing. 9552 9553 AT&T: `foo(,%eax,4)', Intel: `[foo + eax*4]' 9554 INDEX is `%eax' (scaled by a SCALE 4); DISP is `foo'. All other 9555 fields are missing. The section register here defaults to `%ds'. 9556 9557 AT&T: `foo(,1)'; Intel `[foo]' 9558 This uses the value pointed to by `foo' as a memory operand. Note 9559 that BASE and INDEX are both missing, but there is only _one_ `,'. 9560 This is a syntactic exception. 9561 9562 AT&T: `%gs:foo'; Intel `gs:foo' 9563 This selects the contents of the variable `foo' with section 9564 register SECTION being `%gs'. 9565 9566 Absolute (as opposed to PC relative) call and jump operands must be 9567 prefixed with `*'. If no `*' is specified, `as' always chooses PC 9568 relative addressing for jump/call labels. 9569 9570 Any instruction that has a memory operand, but no register operand, 9571 _must_ specify its size (byte, word, long, or quadruple) with an 9572 instruction mnemonic suffix (`b', `w', `l' or `q', respectively). 9573 9574 The x86-64 architecture adds an RIP (instruction pointer relative) 9575 addressing. This addressing mode is specified by using `rip' as a base 9576 register. Only constant offsets are valid. For example: 9577 9578 AT&T: `1234(%rip)', Intel: `[rip + 1234]' 9579 Points to the address 1234 bytes past the end of the current 9580 instruction. 9581 9582 AT&T: `symbol(%rip)', Intel: `[rip + symbol]' 9583 Points to the `symbol' in RIP relative way, this is shorter than 9584 the default absolute addressing. 9585 9586 Other addressing modes remain unchanged in x86-64 architecture, 9587 except registers used are 64-bit instead of 32-bit. 9588 9589 9590 File: as.info, Node: i386-Jumps, Next: i386-Float, Prev: i386-Memory, Up: i386-Dependent 9591 9592 9.13.9 Handling of Jump Instructions 9593 ------------------------------------ 9594 9595 Jump instructions are always optimized to use the smallest possible 9596 displacements. This is accomplished by using byte (8-bit) displacement 9597 jumps whenever the target is sufficiently close. If a byte displacement 9598 is insufficient a long displacement is used. We do not support word 9599 (16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump 9600 instruction with the `data16' instruction prefix), since the 80386 9601 insists upon masking `%eip' to 16 bits after the word displacement is 9602 added. (See also *note i386-Arch::) 9603 9604 Note that the `jcxz', `jecxz', `loop', `loopz', `loope', `loopnz' 9605 and `loopne' instructions only come in byte displacements, so that if 9606 you use these instructions (`gcc' does not use them) you may get an 9607 error message (and incorrect code). The AT&T 80386 assembler tries to 9608 get around this problem by expanding `jcxz foo' to 9609 9610 jcxz cx_zero 9611 jmp cx_nonzero 9612 cx_zero: jmp foo 9613 cx_nonzero: 9614 9615 9616 File: as.info, Node: i386-Float, Next: i386-SIMD, Prev: i386-Jumps, Up: i386-Dependent 9617 9618 9.13.10 Floating Point 9619 ---------------------- 9620 9621 All 80387 floating point types except packed BCD are supported. (BCD 9622 support may be added without much difficulty). These data types are 9623 16-, 32-, and 64- bit integers, and single (32-bit), double (64-bit), 9624 and extended (80-bit) precision floating point. Each supported type 9625 has an instruction mnemonic suffix and a constructor associated with 9626 it. Instruction mnemonic suffixes specify the operand's data type. 9627 Constructors build these data types into memory. 9628 9629 * Floating point constructors are `.float' or `.single', `.double', 9630 and `.tfloat' for 32-, 64-, and 80-bit formats. These correspond 9631 to instruction mnemonic suffixes `s', `l', and `t'. `t' stands for 9632 80-bit (ten byte) real. The 80387 only supports this format via 9633 the `fldt' (load 80-bit real to stack top) and `fstpt' (store 9634 80-bit real and pop stack) instructions. 9635 9636 * Integer constructors are `.word', `.long' or `.int', and `.quad' 9637 for the 16-, 32-, and 64-bit integer formats. The corresponding 9638 instruction mnemonic suffixes are `s' (single), `l' (long), and 9639 `q' (quad). As with the 80-bit real format, the 64-bit `q' format 9640 is only present in the `fildq' (load quad integer to stack top) 9641 and `fistpq' (store quad integer and pop stack) instructions. 9642 9643 Register to register operations should not use instruction mnemonic 9644 suffixes. `fstl %st, %st(1)' will give a warning, and be assembled as 9645 if you wrote `fst %st, %st(1)', since all register to register 9646 operations use 80-bit floating point operands. (Contrast this with 9647 `fstl %st, mem', which converts `%st' from 80-bit to 64-bit floating 9648 point format, then stores the result in the 4 byte location `mem') 9649 9650 9651 File: as.info, Node: i386-SIMD, Next: i386-16bit, Prev: i386-Float, Up: i386-Dependent 9652 9653 9.13.11 Intel's MMX and AMD's 3DNow! SIMD Operations 9654 ---------------------------------------------------- 9655 9656 `as' supports Intel's MMX instruction set (SIMD instructions for 9657 integer data), available on Intel's Pentium MMX processors and Pentium 9658 II processors, AMD's K6 and K6-2 processors, Cyrix' M2 processor, and 9659 probably others. It also supports AMD's 3DNow! instruction set (SIMD 9660 instructions for 32-bit floating point data) available on AMD's K6-2 9661 processor and possibly others in the future. 9662 9663 Currently, `as' does not support Intel's floating point SIMD, Katmai 9664 (KNI). 9665 9666 The eight 64-bit MMX operands, also used by 3DNow!, are called 9667 `%mm0', `%mm1', ... `%mm7'. They contain eight 8-bit integers, four 9668 16-bit integers, two 32-bit integers, one 64-bit integer, or two 32-bit 9669 floating point values. The MMX registers cannot be used at the same 9670 time as the floating point stack. 9671 9672 See Intel and AMD documentation, keeping in mind that the operand 9673 order in instructions is reversed from the Intel syntax. 9674 9675 9676 File: as.info, Node: i386-16bit, Next: i386-Arch, Prev: i386-SIMD, Up: i386-Dependent 9677 9678 9.13.12 Writing 16-bit Code 9679 --------------------------- 9680 9681 While `as' normally writes only "pure" 32-bit i386 code or 64-bit 9682 x86-64 code depending on the default configuration, it also supports 9683 writing code to run in real mode or in 16-bit protected mode code 9684 segments. To do this, put a `.code16' or `.code16gcc' directive before 9685 the assembly language instructions to be run in 16-bit mode. You can 9686 switch `as' back to writing normal 32-bit code with the `.code32' 9687 directive. 9688 9689 `.code16gcc' provides experimental support for generating 16-bit 9690 code from gcc, and differs from `.code16' in that `call', `ret', 9691 `enter', `leave', `push', `pop', `pusha', `popa', `pushf', and `popf' 9692 instructions default to 32-bit size. This is so that the stack pointer 9693 is manipulated in the same way over function calls, allowing access to 9694 function parameters at the same stack offsets as in 32-bit mode. 9695 `.code16gcc' also automatically adds address size prefixes where 9696 necessary to use the 32-bit addressing modes that gcc generates. 9697 9698 The code which `as' generates in 16-bit mode will not necessarily 9699 run on a 16-bit pre-80386 processor. To write code that runs on such a 9700 processor, you must refrain from using _any_ 32-bit constructs which 9701 require `as' to output address or operand size prefixes. 9702 9703 Note that writing 16-bit code instructions by explicitly specifying a 9704 prefix or an instruction mnemonic suffix within a 32-bit code section 9705 generates different machine instructions than those generated for a 9706 16-bit code segment. In a 32-bit code section, the following code 9707 generates the machine opcode bytes `66 6a 04', which pushes the value 9708 `4' onto the stack, decrementing `%esp' by 2. 9709 9710 pushw $4 9711 9712 The same code in a 16-bit code section would generate the machine 9713 opcode bytes `6a 04' (i.e., without the operand size prefix), which is 9714 correct since the processor default operand size is assumed to be 16 9715 bits in a 16-bit code section. 9716 9717 9718 File: as.info, Node: i386-Bugs, Next: i386-Notes, Prev: i386-Arch, Up: i386-Dependent 9719 9720 9.13.13 AT&T Syntax bugs 9721 ------------------------ 9722 9723 The UnixWare assembler, and probably other AT&T derived ix86 Unix 9724 assemblers, generate floating point instructions with reversed source 9725 and destination registers in certain cases. Unfortunately, gcc and 9726 possibly many other programs use this reversed syntax, so we're stuck 9727 with it. 9728 9729 For example 9730 9731 fsub %st,%st(3) 9732 results in `%st(3)' being updated to `%st - %st(3)' rather than the 9733 expected `%st(3) - %st'. This happens with all the non-commutative 9734 arithmetic floating point operations with two register operands where 9735 the source register is `%st' and the destination register is `%st(i)'. 9736 9737 9738 File: as.info, Node: i386-Arch, Next: i386-Bugs, Prev: i386-16bit, Up: i386-Dependent 9739 9740 9.13.14 Specifying CPU Architecture 9741 ----------------------------------- 9742 9743 `as' may be told to assemble for a particular CPU (sub-)architecture 9744 with the `.arch CPU_TYPE' directive. This directive enables a warning 9745 when gas detects an instruction that is not supported on the CPU 9746 specified. The choices for CPU_TYPE are: 9747 9748 `i8086' `i186' `i286' `i386' 9749 `i486' `i586' `i686' `pentium' 9750 `pentiumpro' `pentiumii' `pentiumiii' `pentium4' 9751 `prescott' `nocona' `core' `core2' 9752 `k6' `k6_2' `athlon' `k8' 9753 `amdfam10' 9754 `generic32' `generic64' 9755 `.mmx' `.sse' `.sse2' `.sse3' 9756 `.ssse3' `.sse4.1' `.sse4.2' `.sse4' 9757 `.avx' `.vmx' `.smx' `.xsave' 9758 `.aes' `.pclmul' `.fma' `.movbe' 9759 `.ept' 9760 `.3dnow' `.3dnowa' `.sse4a' `.sse5' 9761 `.svme' `.abm' 9762 `.padlock' 9763 9764 Apart from the warning, there are only two other effects on `as' 9765 operation; Firstly, if you specify a CPU other than `i486', then shift 9766 by one instructions such as `sarl $1, %eax' will automatically use a 9767 two byte opcode sequence. The larger three byte opcode sequence is 9768 used on the 486 (and when no architecture is specified) because it 9769 executes faster on the 486. Note that you can explicitly request the 9770 two byte opcode by writing `sarl %eax'. Secondly, if you specify 9771 `i8086', `i186', or `i286', _and_ `.code16' or `.code16gcc' then byte 9772 offset conditional jumps will be promoted when necessary to a two 9773 instruction sequence consisting of a conditional jump of the opposite 9774 sense around an unconditional jump to the target. 9775 9776 Following the CPU architecture (but not a sub-architecture, which 9777 are those starting with a dot), you may specify `jumps' or `nojumps' to 9778 control automatic promotion of conditional jumps. `jumps' is the 9779 default, and enables jump promotion; All external jumps will be of the 9780 long variety, and file-local jumps will be promoted as necessary. 9781 (*note i386-Jumps::) `nojumps' leaves external conditional jumps as 9782 byte offset jumps, and warns about file-local conditional jumps that 9783 `as' promotes. Unconditional jumps are treated as for `jumps'. 9784 9785 For example 9786 9787 .arch i8086,nojumps 9788 9789 9790 File: as.info, Node: i386-Notes, Prev: i386-Bugs, Up: i386-Dependent 9791 9792 9.13.15 Notes 9793 ------------- 9794 9795 There is some trickery concerning the `mul' and `imul' instructions 9796 that deserves mention. The 16-, 32-, 64- and 128-bit expanding 9797 multiplies (base opcode `0xf6'; extension 4 for `mul' and 5 for `imul') 9798 can be output only in the one operand form. Thus, `imul %ebx, %eax' 9799 does _not_ select the expanding multiply; the expanding multiply would 9800 clobber the `%edx' register, and this would confuse `gcc' output. Use 9801 `imul %ebx' to get the 64-bit product in `%edx:%eax'. 9802 9803 We have added a two operand form of `imul' when the first operand is 9804 an immediate mode expression and the second operand is a register. 9805 This is just a shorthand, so that, multiplying `%eax' by 69, for 9806 example, can be done with `imul $69, %eax' rather than `imul $69, %eax, 9807 %eax'. 9808 9809 9810 File: as.info, Node: i860-Dependent, Next: i960-Dependent, Prev: i386-Dependent, Up: Machine Dependencies 9811 9812 9.14 Intel i860 Dependent Features 9813 ================================== 9814 9815 * Menu: 9816 9817 * Notes-i860:: i860 Notes 9818 * Options-i860:: i860 Command-line Options 9819 * Directives-i860:: i860 Machine Directives 9820 * Opcodes for i860:: i860 Opcodes 9821 9822 9823 File: as.info, Node: Notes-i860, Next: Options-i860, Up: i860-Dependent 9824 9825 9.14.1 i860 Notes 9826 ----------------- 9827 9828 This is a fairly complete i860 assembler which is compatible with the 9829 UNIX System V/860 Release 4 assembler. However, it does not currently 9830 support SVR4 PIC (i.e., `@GOT, @GOTOFF, @PLT'). 9831 9832 Like the SVR4/860 assembler, the output object format is ELF32. 9833 Currently, this is the only supported object format. If there is 9834 sufficient interest, other formats such as COFF may be implemented. 9835 9836 Both the Intel and AT&T/SVR4 syntaxes are supported, with the latter 9837 being the default. One difference is that AT&T syntax requires the '%' 9838 prefix on register names while Intel syntax does not. Another 9839 difference is in the specification of relocatable expressions. The 9840 Intel syntax is `ha%expression' whereas the SVR4 syntax is 9841 `[expression]@ha' (and similarly for the "l" and "h" selectors). 9842 9843 9844 File: as.info, Node: Options-i860, Next: Directives-i860, Prev: Notes-i860, Up: i860-Dependent 9845 9846 9.14.2 i860 Command-line Options 9847 -------------------------------- 9848 9849 9.14.2.1 SVR4 compatibility options 9850 ................................... 9851 9852 `-V' 9853 Print assembler version. 9854 9855 `-Qy' 9856 Ignored. 9857 9858 `-Qn' 9859 Ignored. 9860 9861 9.14.2.2 Other options 9862 ...................... 9863 9864 `-EL' 9865 Select little endian output (this is the default). 9866 9867 `-EB' 9868 Select big endian output. Note that the i860 always reads 9869 instructions as little endian data, so this option only effects 9870 data and not instructions. 9871 9872 `-mwarn-expand' 9873 Emit a warning message if any pseudo-instruction expansions 9874 occurred. For example, a `or' instruction with an immediate 9875 larger than 16-bits will be expanded into two instructions. This 9876 is a very undesirable feature to rely on, so this flag can help 9877 detect any code where it happens. One use of it, for instance, has 9878 been to find and eliminate any place where `gcc' may emit these 9879 pseudo-instructions. 9880 9881 `-mxp' 9882 Enable support for the i860XP instructions and control registers. 9883 By default, this option is disabled so that only the base 9884 instruction set (i.e., i860XR) is supported. 9885 9886 `-mintel-syntax' 9887 The i860 assembler defaults to AT&T/SVR4 syntax. This option 9888 enables the Intel syntax. 9889 9890 9891 File: as.info, Node: Directives-i860, Next: Opcodes for i860, Prev: Options-i860, Up: i860-Dependent 9892 9893 9.14.3 i860 Machine Directives 9894 ------------------------------ 9895 9896 `.dual' 9897 Enter dual instruction mode. While this directive is supported, the 9898 preferred way to use dual instruction mode is to explicitly code 9899 the dual bit with the `d.' prefix. 9900 9901 `.enddual' 9902 Exit dual instruction mode. While this directive is supported, the 9903 preferred way to use dual instruction mode is to explicitly code 9904 the dual bit with the `d.' prefix. 9905 9906 `.atmp' 9907 Change the temporary register used when expanding pseudo 9908 operations. The default register is `r31'. 9909 9910 The `.dual', `.enddual', and `.atmp' directives are available only 9911 in the Intel syntax mode. 9912 9913 Both syntaxes allow for the standard `.align' directive. However, 9914 the Intel syntax additionally allows keywords for the alignment 9915 parameter: "`.align type'", where `type' is one of `.short', `.long', 9916 `.quad', `.single', `.double' representing alignments of 2, 4, 16, 4, 9917 and 8, respectively. 9918 9919 9920 File: as.info, Node: Opcodes for i860, Prev: Directives-i860, Up: i860-Dependent 9921 9922 9.14.4 i860 Opcodes 9923 ------------------- 9924 9925 All of the Intel i860XR and i860XP machine instructions are supported. 9926 Please see either _i860 Microprocessor Programmer's Reference Manual_ 9927 or _i860 Microprocessor Architecture_ for more information. 9928 9929 9.14.4.1 Other instruction support (pseudo-instructions) 9930 ........................................................ 9931 9932 For compatibility with some other i860 assemblers, a number of 9933 pseudo-instructions are supported. While these are supported, they are 9934 a very undesirable feature that should be avoided - in particular, when 9935 they result in an expansion to multiple actual i860 instructions. Below 9936 are the pseudo-instructions that result in expansions. 9937 * Load large immediate into general register: 9938 9939 The pseudo-instruction `mov imm,%rn' (where the immediate does not 9940 fit within a signed 16-bit field) will be expanded into: 9941 orh large_imm@h,%r0,%rn 9942 or large_imm@l,%rn,%rn 9943 9944 * Load/store with relocatable address expression: 9945 9946 For example, the pseudo-instruction `ld.b addr_exp(%rx),%rn' will 9947 be expanded into: 9948 orh addr_exp@ha,%rx,%r31 9949 ld.l addr_exp@l(%r31),%rn 9950 9951 The analogous expansions apply to `ld.x, st.x, fld.x, pfld.x, 9952 fst.x', and `pst.x' as well. 9953 9954 * Signed large immediate with add/subtract: 9955 9956 If any of the arithmetic operations `adds, addu, subs, subu' are 9957 used with an immediate larger than 16-bits (signed), then they 9958 will be expanded. For instance, the pseudo-instruction `adds 9959 large_imm,%rx,%rn' expands to: 9960 orh large_imm@h,%r0,%r31 9961 or large_imm@l,%r31,%r31 9962 adds %r31,%rx,%rn 9963 9964 * Unsigned large immediate with logical operations: 9965 9966 Logical operations (`or, andnot, or, xor') also result in 9967 expansions. The pseudo-instruction `or large_imm,%rx,%rn' results 9968 in: 9969 orh large_imm@h,%rx,%r31 9970 or large_imm@l,%r31,%rn 9971 9972 Similarly for the others, except for `and' which expands to: 9973 andnot (-1 - large_imm)@h,%rx,%r31 9974 andnot (-1 - large_imm)@l,%r31,%rn 9975 9976 9977 File: as.info, Node: i960-Dependent, Next: IA-64-Dependent, Prev: i860-Dependent, Up: Machine Dependencies 9978 9979 9.15 Intel 80960 Dependent Features 9980 =================================== 9981 9982 * Menu: 9983 9984 * Options-i960:: i960 Command-line Options 9985 * Floating Point-i960:: Floating Point 9986 * Directives-i960:: i960 Machine Directives 9987 * Opcodes for i960:: i960 Opcodes 9988 9989 9990 File: as.info, Node: Options-i960, Next: Floating Point-i960, Up: i960-Dependent 9991 9992 9.15.1 i960 Command-line Options 9993 -------------------------------- 9994 9995 `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC' 9996 Select the 80960 architecture. Instructions or features not 9997 supported by the selected architecture cause fatal errors. 9998 9999 `-ACA' is equivalent to `-ACA_A'; `-AKC' is equivalent to `-AMC'. 10000 Synonyms are provided for compatibility with other tools. 10001 10002 If you do not specify any of these options, `as' generates code 10003 for any instruction or feature that is supported by _some_ version 10004 of the 960 (even if this means mixing architectures!). In 10005 principle, `as' attempts to deduce the minimal sufficient 10006 processor type if none is specified; depending on the object code 10007 format, the processor type may be recorded in the object file. If 10008 it is critical that the `as' output match a specific architecture, 10009 specify that architecture explicitly. 10010 10011 `-b' 10012 Add code to collect information about conditional branches taken, 10013 for later optimization using branch prediction bits. (The 10014 conditional branch instructions have branch prediction bits in the 10015 CA, CB, and CC architectures.) If BR represents a conditional 10016 branch instruction, the following represents the code generated by 10017 the assembler when `-b' is specified: 10018 10019 call INCREMENT ROUTINE 10020 .word 0 # pre-counter 10021 Label: BR 10022 call INCREMENT ROUTINE 10023 .word 0 # post-counter 10024 10025 The counter following a branch records the number of times that 10026 branch was _not_ taken; the difference between the two counters is 10027 the number of times the branch _was_ taken. 10028 10029 A table of every such `Label' is also generated, so that the 10030 external postprocessor `gbr960' (supplied by Intel) can locate all 10031 the counters. This table is always labeled `__BRANCH_TABLE__'; 10032 this is a local symbol to permit collecting statistics for many 10033 separate object files. The table is word aligned, and begins with 10034 a two-word header. The first word, initialized to 0, is used in 10035 maintaining linked lists of branch tables. The second word is a 10036 count of the number of entries in the table, which follow 10037 immediately: each is a word, pointing to one of the labels 10038 illustrated above. 10039 10040 +------------+------------+------------+ ... +------------+ 10041 | | | | | | 10042 | *NEXT | COUNT: N | *BRLAB 1 | | *BRLAB N | 10043 | | | | | | 10044 +------------+------------+------------+ ... +------------+ 10045 10046 __BRANCH_TABLE__ layout 10047 10048 The first word of the header is used to locate multiple branch 10049 tables, since each object file may contain one. Normally the links 10050 are maintained with a call to an initialization routine, placed at 10051 the beginning of each function in the file. The GNU C compiler 10052 generates these calls automatically when you give it a `-b' option. 10053 For further details, see the documentation of `gbr960'. 10054 10055 `-no-relax' 10056 Normally, Compare-and-Branch instructions with targets that require 10057 displacements greater than 13 bits (or that have external targets) 10058 are replaced with the corresponding compare (or `chkbit') and 10059 branch instructions. You can use the `-no-relax' option to 10060 specify that `as' should generate errors instead, if the target 10061 displacement is larger than 13 bits. 10062 10063 This option does not affect the Compare-and-Jump instructions; the 10064 code emitted for them is _always_ adjusted when necessary 10065 (depending on displacement size), regardless of whether you use 10066 `-no-relax'. 10067 10068 10069 File: as.info, Node: Floating Point-i960, Next: Directives-i960, Prev: Options-i960, Up: i960-Dependent 10070 10071 9.15.2 Floating Point 10072 --------------------- 10073 10074 `as' generates IEEE floating-point numbers for the directives `.float', 10075 `.double', `.extended', and `.single'. 10076 10077 10078 File: as.info, Node: Directives-i960, Next: Opcodes for i960, Prev: Floating Point-i960, Up: i960-Dependent 10079 10080 9.15.3 i960 Machine Directives 10081 ------------------------------ 10082 10083 `.bss SYMBOL, LENGTH, ALIGN' 10084 Reserve LENGTH bytes in the bss section for a local SYMBOL, 10085 aligned to the power of two specified by ALIGN. LENGTH and ALIGN 10086 must be positive absolute expressions. This directive differs 10087 from `.lcomm' only in that it permits you to specify an alignment. 10088 *Note `.lcomm': Lcomm. 10089 10090 `.extended FLONUMS' 10091 `.extended' expects zero or more flonums, separated by commas; for 10092 each flonum, `.extended' emits an IEEE extended-format (80-bit) 10093 floating-point number. 10094 10095 `.leafproc CALL-LAB, BAL-LAB' 10096 You can use the `.leafproc' directive in conjunction with the 10097 optimized `callj' instruction to enable faster calls of leaf 10098 procedures. If a procedure is known to call no other procedures, 10099 you may define an entry point that skips procedure prolog code 10100 (and that does not depend on system-supplied saved context), and 10101 declare it as the BAL-LAB using `.leafproc'. If the procedure 10102 also has an entry point that goes through the normal prolog, you 10103 can specify that entry point as CALL-LAB. 10104 10105 A `.leafproc' declaration is meant for use in conjunction with the 10106 optimized call instruction `callj'; the directive records the data 10107 needed later to choose between converting the `callj' into a `bal' 10108 or a `call'. 10109 10110 CALL-LAB is optional; if only one argument is present, or if the 10111 two arguments are identical, the single argument is assumed to be 10112 the `bal' entry point. 10113 10114 `.sysproc NAME, INDEX' 10115 The `.sysproc' directive defines a name for a system procedure. 10116 After you define it using `.sysproc', you can use NAME to refer to 10117 the system procedure identified by INDEX when calling procedures 10118 with the optimized call instruction `callj'. 10119 10120 Both arguments are required; INDEX must be between 0 and 31 10121 (inclusive). 10122 10123 10124 File: as.info, Node: Opcodes for i960, Prev: Directives-i960, Up: i960-Dependent 10125 10126 9.15.4 i960 Opcodes 10127 ------------------- 10128 10129 All Intel 960 machine instructions are supported; *note i960 10130 Command-line Options: Options-i960. for a discussion of selecting the 10131 instruction subset for a particular 960 architecture. 10132 10133 Some opcodes are processed beyond simply emitting a single 10134 corresponding instruction: `callj', and Compare-and-Branch or 10135 Compare-and-Jump instructions with target displacements larger than 13 10136 bits. 10137 10138 * Menu: 10139 10140 * callj-i960:: `callj' 10141 * Compare-and-branch-i960:: Compare-and-Branch 10142 10143 10144 File: as.info, Node: callj-i960, Next: Compare-and-branch-i960, Up: Opcodes for i960 10145 10146 9.15.4.1 `callj' 10147 ................ 10148 10149 You can write `callj' to have the assembler or the linker determine the 10150 most appropriate form of subroutine call: `call', `bal', or `calls'. 10151 If the assembly source contains enough information--a `.leafproc' or 10152 `.sysproc' directive defining the operand--then `as' translates the 10153 `callj'; if not, it simply emits the `callj', leaving it for the linker 10154 to resolve. 10155 10156 10157 File: as.info, Node: Compare-and-branch-i960, Prev: callj-i960, Up: Opcodes for i960 10158 10159 9.15.4.2 Compare-and-Branch 10160 ........................... 10161 10162 The 960 architectures provide combined Compare-and-Branch instructions 10163 that permit you to store the branch target in the lower 13 bits of the 10164 instruction word itself. However, if you specify a branch target far 10165 enough away that its address won't fit in 13 bits, the assembler can 10166 either issue an error, or convert your Compare-and-Branch instruction 10167 into separate instructions to do the compare and the branch. 10168 10169 Whether `as' gives an error or expands the instruction depends on 10170 two choices you can make: whether you use the `-no-relax' option, and 10171 whether you use a "Compare and Branch" instruction or a "Compare and 10172 Jump" instruction. The "Jump" instructions are _always_ expanded if 10173 necessary; the "Branch" instructions are expanded when necessary 10174 _unless_ you specify `-no-relax'--in which case `as' gives an error 10175 instead. 10176 10177 These are the Compare-and-Branch instructions, their "Jump" variants, 10178 and the instruction pairs they may expand into: 10179 10180 Compare and 10181 Branch Jump Expanded to 10182 ------ ------ ------------ 10183 bbc chkbit; bno 10184 bbs chkbit; bo 10185 cmpibe cmpije cmpi; be 10186 cmpibg cmpijg cmpi; bg 10187 cmpibge cmpijge cmpi; bge 10188 cmpibl cmpijl cmpi; bl 10189 cmpible cmpijle cmpi; ble 10190 cmpibno cmpijno cmpi; bno 10191 cmpibne cmpijne cmpi; bne 10192 cmpibo cmpijo cmpi; bo 10193 cmpobe cmpoje cmpo; be 10194 cmpobg cmpojg cmpo; bg 10195 cmpobge cmpojge cmpo; bge 10196 cmpobl cmpojl cmpo; bl 10197 cmpoble cmpojle cmpo; ble 10198 cmpobne cmpojne cmpo; bne 10199 10200 10201 File: as.info, Node: IA-64-Dependent, Next: IP2K-Dependent, Prev: i960-Dependent, Up: Machine Dependencies 10202 10203 9.16 IA-64 Dependent Features 10204 ============================= 10205 10206 * Menu: 10207 10208 * IA-64 Options:: Options 10209 * IA-64 Syntax:: Syntax 10210 * IA-64 Opcodes:: Opcodes 10211 10212 10213 File: as.info, Node: IA-64 Options, Next: IA-64 Syntax, Up: IA-64-Dependent 10214 10215 9.16.1 Options 10216 -------------- 10217 10218 `-mconstant-gp' 10219 This option instructs the assembler to mark the resulting object 10220 file as using the "constant GP" model. With this model, it is 10221 assumed that the entire program uses a single global pointer (GP) 10222 value. Note that this option does not in any fashion affect the 10223 machine code emitted by the assembler. All it does is turn on the 10224 EF_IA_64_CONS_GP flag in the ELF file header. 10225 10226 `-mauto-pic' 10227 This option instructs the assembler to mark the resulting object 10228 file as using the "constant GP without function descriptor" data 10229 model. This model is like the "constant GP" model, except that it 10230 additionally does away with function descriptors. What this means 10231 is that the address of a function refers directly to the 10232 function's code entry-point. Normally, such an address would 10233 refer to a function descriptor, which contains both the code 10234 entry-point and the GP-value needed by the function. Note that 10235 this option does not in any fashion affect the machine code 10236 emitted by the assembler. All it does is turn on the 10237 EF_IA_64_NOFUNCDESC_CONS_GP flag in the ELF file header. 10238 10239 `-milp32' 10240 10241 `-milp64' 10242 10243 `-mlp64' 10244 10245 `-mp64' 10246 These options select the data model. The assembler defaults to 10247 `-mlp64' (LP64 data model). 10248 10249 `-mle' 10250 10251 `-mbe' 10252 These options select the byte order. The `-mle' option selects 10253 little-endian byte order (default) and `-mbe' selects big-endian 10254 byte order. Note that IA-64 machine code always uses 10255 little-endian byte order. 10256 10257 `-mtune=itanium1' 10258 10259 `-mtune=itanium2' 10260 Tune for a particular IA-64 CPU, ITANIUM1 or ITANIUM2. The default 10261 is ITANIUM2. 10262 10263 `-munwind-check=warning' 10264 10265 `-munwind-check=error' 10266 These options control what the assembler will do when performing 10267 consistency checks on unwind directives. `-munwind-check=warning' 10268 will make the assembler issue a warning when an unwind directive 10269 check fails. This is the default. `-munwind-check=error' will 10270 make the assembler issue an error when an unwind directive check 10271 fails. 10272 10273 `-mhint.b=ok' 10274 10275 `-mhint.b=warning' 10276 10277 `-mhint.b=error' 10278 These options control what the assembler will do when the `hint.b' 10279 instruction is used. `-mhint.b=ok' will make the assembler accept 10280 `hint.b'. `-mint.b=warning' will make the assembler issue a 10281 warning when `hint.b' is used. `-mhint.b=error' will make the 10282 assembler treat `hint.b' as an error, which is the default. 10283 10284 `-x' 10285 10286 `-xexplicit' 10287 These options turn on dependency violation checking. 10288 10289 `-xauto' 10290 This option instructs the assembler to automatically insert stop 10291 bits where necessary to remove dependency violations. This is the 10292 default mode. 10293 10294 `-xnone' 10295 This option turns off dependency violation checking. 10296 10297 `-xdebug' 10298 This turns on debug output intended to help tracking down bugs in 10299 the dependency violation checker. 10300 10301 `-xdebugn' 10302 This is a shortcut for -xnone -xdebug. 10303 10304 `-xdebugx' 10305 This is a shortcut for -xexplicit -xdebug. 10306 10307 10308 10309 File: as.info, Node: IA-64 Syntax, Next: IA-64 Opcodes, Prev: IA-64 Options, Up: IA-64-Dependent 10310 10311 9.16.2 Syntax 10312 ------------- 10313 10314 The assembler syntax closely follows the IA-64 Assembly Language 10315 Reference Guide. 10316 10317 * Menu: 10318 10319 * IA-64-Chars:: Special Characters 10320 * IA-64-Regs:: Register Names 10321 * IA-64-Bits:: Bit Names 10322 10323 10324 File: as.info, Node: IA-64-Chars, Next: IA-64-Regs, Up: IA-64 Syntax 10325 10326 9.16.2.1 Special Characters 10327 ........................... 10328 10329 `//' is the line comment token. 10330 10331 `;' can be used instead of a newline to separate statements. 10332 10333 10334 File: as.info, Node: IA-64-Regs, Next: IA-64-Bits, Prev: IA-64-Chars, Up: IA-64 Syntax 10335 10336 9.16.2.2 Register Names 10337 ....................... 10338 10339 The 128 integer registers are referred to as `rN'. The 128 10340 floating-point registers are referred to as `fN'. The 128 application 10341 registers are referred to as `arN'. The 128 control registers are 10342 referred to as `crN'. The 64 one-bit predicate registers are referred 10343 to as `pN'. The 8 branch registers are referred to as `bN'. In 10344 addition, the assembler defines a number of aliases: `gp' (`r1'), `sp' 10345 (`r12'), `rp' (`b0'), `ret0' (`r8'), `ret1' (`r9'), `ret2' (`r10'), 10346 `ret3' (`r9'), `fargN' (`f8+N'), and `fretN' (`f8+N'). 10347 10348 For convenience, the assembler also defines aliases for all named 10349 application and control registers. For example, `ar.bsp' refers to the 10350 register backing store pointer (`ar17'). Similarly, `cr.eoi' refers to 10351 the end-of-interrupt register (`cr67'). 10352 10353 10354 File: as.info, Node: IA-64-Bits, Prev: IA-64-Regs, Up: IA-64 Syntax 10355 10356 9.16.2.3 IA-64 Processor-Status-Register (PSR) Bit Names 10357 ........................................................ 10358 10359 The assembler defines bit masks for each of the bits in the IA-64 10360 processor status register. For example, `psr.ic' corresponds to a 10361 value of 0x2000. These masks are primarily intended for use with the 10362 `ssm'/`sum' and `rsm'/`rum' instructions, but they can be used anywhere 10363 else where an integer constant is expected. 10364 10365 10366 File: as.info, Node: IA-64 Opcodes, Prev: IA-64 Syntax, Up: IA-64-Dependent 10367 10368 9.16.3 Opcodes 10369 -------------- 10370 10371 For detailed information on the IA-64 machine instruction set, see the 10372 IA-64 Architecture Handbook 10373 (http://developer.intel.com/design/itanium/arch_spec.htm). 10374 10375 10376 File: as.info, Node: IP2K-Dependent, Next: M32C-Dependent, Prev: IA-64-Dependent, Up: Machine Dependencies 10377 10378 9.17 IP2K Dependent Features 10379 ============================ 10380 10381 * Menu: 10382 10383 * IP2K-Opts:: IP2K Options 10384 10385 10386 File: as.info, Node: IP2K-Opts, Up: IP2K-Dependent 10387 10388 9.17.1 IP2K Options 10389 ------------------- 10390 10391 The Ubicom IP2K version of `as' has a few machine dependent options: 10392 10393 `-mip2022ext' 10394 `as' can assemble the extended IP2022 instructions, but it will 10395 only do so if this is specifically allowed via this command line 10396 option. 10397 10398 `-mip2022' 10399 This option restores the assembler's default behaviour of not 10400 permitting the extended IP2022 instructions to be assembled. 10401 10402 10403 10404 File: as.info, Node: M32C-Dependent, Next: M32R-Dependent, Prev: IP2K-Dependent, Up: Machine Dependencies 10405 10406 9.18 M32C Dependent Features 10407 ============================ 10408 10409 `as' can assemble code for several different members of the Renesas 10410 M32C family. Normally the default is to assemble code for the M16C 10411 microprocessor. The `-m32c' option may be used to change the default 10412 to the M32C microprocessor. 10413 10414 * Menu: 10415 10416 * M32C-Opts:: M32C Options 10417 * M32C-Modifiers:: Symbolic Operand Modifiers 10418 10419 10420 File: as.info, Node: M32C-Opts, Next: M32C-Modifiers, Up: M32C-Dependent 10421 10422 9.18.1 M32C Options 10423 ------------------- 10424 10425 The Renesas M32C version of `as' has these machine-dependent options: 10426 10427 `-m32c' 10428 Assemble M32C instructions. 10429 10430 `-m16c' 10431 Assemble M16C instructions (default). 10432 10433 `-relax' 10434 Enable support for link-time relaxations. 10435 10436 `-h-tick-hex' 10437 Support H'00 style hex constants in addition to 0x00 style. 10438 10439 10440 10441 File: as.info, Node: M32C-Modifiers, Prev: M32C-Opts, Up: M32C-Dependent 10442 10443 9.18.2 Symbolic Operand Modifiers 10444 --------------------------------- 10445 10446 The assembler supports several modifiers when using symbol addresses in 10447 M32C instruction operands. The general syntax is the following: 10448 10449 %modifier(symbol) 10450 10451 `%dsp8' 10452 `%dsp16' 10453 These modifiers override the assembler's assumptions about how big 10454 a symbol's address is. Normally, when it sees an operand like 10455 `sym[a0]' it assumes `sym' may require the widest displacement 10456 field (16 bits for `-m16c', 24 bits for `-m32c'). These modifiers 10457 tell it to assume the address will fit in an 8 or 16 bit 10458 (respectively) unsigned displacement. Note that, of course, if it 10459 doesn't actually fit you will get linker errors. Example: 10460 10461 mov.w %dsp8(sym)[a0],r1 10462 mov.b #0,%dsp8(sym)[a0] 10463 10464 `%hi8' 10465 This modifier allows you to load bits 16 through 23 of a 24 bit 10466 address into an 8 bit register. This is useful with, for example, 10467 the M16C `smovf' instruction, which expects a 20 bit address in 10468 `r1h' and `a0'. Example: 10469 10470 mov.b #%hi8(sym),r1h 10471 mov.w #%lo16(sym),a0 10472 smovf.b 10473 10474 `%lo16' 10475 Likewise, this modifier allows you to load bits 0 through 15 of a 10476 24 bit address into a 16 bit register. 10477 10478 `%hi16' 10479 This modifier allows you to load bits 16 through 31 of a 32 bit 10480 address into a 16 bit register. While the M32C family only has 24 10481 bits of address space, it does support addresses in pairs of 16 bit 10482 registers (like `a1a0' for the `lde' instruction). This modifier 10483 is for loading the upper half in such cases. Example: 10484 10485 mov.w #%hi16(sym),a1 10486 mov.w #%lo16(sym),a0 10487 ... 10488 lde.w [a1a0],r1 10489 10490 10491 10492 File: as.info, Node: M32R-Dependent, Next: M68K-Dependent, Prev: M32C-Dependent, Up: Machine Dependencies 10493 10494 9.19 M32R Dependent Features 10495 ============================ 10496 10497 * Menu: 10498 10499 * M32R-Opts:: M32R Options 10500 * M32R-Directives:: M32R Directives 10501 * M32R-Warnings:: M32R Warnings 10502 10503 10504 File: as.info, Node: M32R-Opts, Next: M32R-Directives, Up: M32R-Dependent 10505 10506 9.19.1 M32R Options 10507 ------------------- 10508 10509 The Renease M32R version of `as' has a few machine dependent options: 10510 10511 `-m32rx' 10512 `as' can assemble code for several different members of the 10513 Renesas M32R family. Normally the default is to assemble code for 10514 the M32R microprocessor. This option may be used to change the 10515 default to the M32RX microprocessor, which adds some more 10516 instructions to the basic M32R instruction set, and some 10517 additional parameters to some of the original instructions. 10518 10519 `-m32r2' 10520 This option changes the target processor to the the M32R2 10521 microprocessor. 10522 10523 `-m32r' 10524 This option can be used to restore the assembler's default 10525 behaviour of assembling for the M32R microprocessor. This can be 10526 useful if the default has been changed by a previous command line 10527 option. 10528 10529 `-little' 10530 This option tells the assembler to produce little-endian code and 10531 data. The default is dependent upon how the toolchain was 10532 configured. 10533 10534 `-EL' 10535 This is a synonym for _-little_. 10536 10537 `-big' 10538 This option tells the assembler to produce big-endian code and 10539 data. 10540 10541 `-EB' 10542 This is a synonum for _-big_. 10543 10544 `-KPIC' 10545 This option specifies that the output of the assembler should be 10546 marked as position-independent code (PIC). 10547 10548 `-parallel' 10549 This option tells the assembler to attempts to combine two 10550 sequential instructions into a single, parallel instruction, where 10551 it is legal to do so. 10552 10553 `-no-parallel' 10554 This option disables a previously enabled _-parallel_ option. 10555 10556 `-no-bitinst' 10557 This option disables the support for the extended bit-field 10558 instructions provided by the M32R2. If this support needs to be 10559 re-enabled the _-bitinst_ switch can be used to restore it. 10560 10561 `-O' 10562 This option tells the assembler to attempt to optimize the 10563 instructions that it produces. This includes filling delay slots 10564 and converting sequential instructions into parallel ones. This 10565 option implies _-parallel_. 10566 10567 `-warn-explicit-parallel-conflicts' 10568 Instructs `as' to produce warning messages when questionable 10569 parallel instructions are encountered. This option is enabled by 10570 default, but `gcc' disables it when it invokes `as' directly. 10571 Questionable instructions are those whose behaviour would be 10572 different if they were executed sequentially. For example the 10573 code fragment `mv r1, r2 || mv r3, r1' produces a different result 10574 from `mv r1, r2 \n mv r3, r1' since the former moves r1 into r3 10575 and then r2 into r1, whereas the later moves r2 into r1 and r3. 10576 10577 `-Wp' 10578 This is a shorter synonym for the 10579 _-warn-explicit-parallel-conflicts_ option. 10580 10581 `-no-warn-explicit-parallel-conflicts' 10582 Instructs `as' not to produce warning messages when questionable 10583 parallel instructions are encountered. 10584 10585 `-Wnp' 10586 This is a shorter synonym for the 10587 _-no-warn-explicit-parallel-conflicts_ option. 10588 10589 `-ignore-parallel-conflicts' 10590 This option tells the assembler's to stop checking parallel 10591 instructions for constraint violations. This ability is provided 10592 for hardware vendors testing chip designs and should not be used 10593 under normal circumstances. 10594 10595 `-no-ignore-parallel-conflicts' 10596 This option restores the assembler's default behaviour of checking 10597 parallel instructions to detect constraint violations. 10598 10599 `-Ip' 10600 This is a shorter synonym for the _-ignore-parallel-conflicts_ 10601 option. 10602 10603 `-nIp' 10604 This is a shorter synonym for the _-no-ignore-parallel-conflicts_ 10605 option. 10606 10607 `-warn-unmatched-high' 10608 This option tells the assembler to produce a warning message if a 10609 `.high' pseudo op is encountered without a matching `.low' pseudo 10610 op. The presence of such an unmatched pseudo op usually indicates 10611 a programming error. 10612 10613 `-no-warn-unmatched-high' 10614 Disables a previously enabled _-warn-unmatched-high_ option. 10615 10616 `-Wuh' 10617 This is a shorter synonym for the _-warn-unmatched-high_ option. 10618 10619 `-Wnuh' 10620 This is a shorter synonym for the _-no-warn-unmatched-high_ option. 10621 10622 10623 10624 File: as.info, Node: M32R-Directives, Next: M32R-Warnings, Prev: M32R-Opts, Up: M32R-Dependent 10625 10626 9.19.2 M32R Directives 10627 ---------------------- 10628 10629 The Renease M32R version of `as' has a few architecture specific 10630 directives: 10631 10632 `low EXPRESSION' 10633 The `low' directive computes the value of its expression and 10634 places the lower 16-bits of the result into the immediate-field of 10635 the instruction. For example: 10636 10637 or3 r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678 10638 add3, r0, r0, #low(fred) ; compute r0 = r0 + low 16-bits of address of fred 10639 10640 `high EXPRESSION' 10641 The `high' directive computes the value of its expression and 10642 places the upper 16-bits of the result into the immediate-field of 10643 the instruction. For example: 10644 10645 seth r0, #high(0x12345678) ; compute r0 = 0x12340000 10646 seth, r0, #high(fred) ; compute r0 = upper 16-bits of address of fred 10647 10648 `shigh EXPRESSION' 10649 The `shigh' directive is very similar to the `high' directive. It 10650 also computes the value of its expression and places the upper 10651 16-bits of the result into the immediate-field of the instruction. 10652 The difference is that `shigh' also checks to see if the lower 10653 16-bits could be interpreted as a signed number, and if so it 10654 assumes that a borrow will occur from the upper-16 bits. To 10655 compensate for this the `shigh' directive pre-biases the upper 16 10656 bit value by adding one to it. For example: 10657 10658 For example: 10659 10660 seth r0, #shigh(0x12345678) ; compute r0 = 0x12340000 10661 seth r0, #shigh(0x00008000) ; compute r0 = 0x00010000 10662 10663 In the second example the lower 16-bits are 0x8000. If these are 10664 treated as a signed value and sign extended to 32-bits then the 10665 value becomes 0xffff8000. If this value is then added to 10666 0x00010000 then the result is 0x00008000. 10667 10668 This behaviour is to allow for the different semantics of the 10669 `or3' and `add3' instructions. The `or3' instruction treats its 10670 16-bit immediate argument as unsigned whereas the `add3' treats 10671 its 16-bit immediate as a signed value. So for example: 10672 10673 seth r0, #shigh(0x00008000) 10674 add3 r0, r0, #low(0x00008000) 10675 10676 Produces the correct result in r0, whereas: 10677 10678 seth r0, #shigh(0x00008000) 10679 or3 r0, r0, #low(0x00008000) 10680 10681 Stores 0xffff8000 into r0. 10682 10683 Note - the `shigh' directive does not know where in the assembly 10684 source code the lower 16-bits of the value are going set, so it 10685 cannot check to make sure that an `or3' instruction is being used 10686 rather than an `add3' instruction. It is up to the programmer to 10687 make sure that correct directives are used. 10688 10689 `.m32r' 10690 The directive performs a similar thing as the _-m32r_ command line 10691 option. It tells the assembler to only accept M32R instructions 10692 from now on. An instructions from later M32R architectures are 10693 refused. 10694 10695 `.m32rx' 10696 The directive performs a similar thing as the _-m32rx_ command 10697 line option. It tells the assembler to start accepting the extra 10698 instructions in the M32RX ISA as well as the ordinary M32R ISA. 10699 10700 `.m32r2' 10701 The directive performs a similar thing as the _-m32r2_ command 10702 line option. It tells the assembler to start accepting the extra 10703 instructions in the M32R2 ISA as well as the ordinary M32R ISA. 10704 10705 `.little' 10706 The directive performs a similar thing as the _-little_ command 10707 line option. It tells the assembler to start producing 10708 little-endian code and data. This option should be used with care 10709 as producing mixed-endian binary files is fraught with danger. 10710 10711 `.big' 10712 The directive performs a similar thing as the _-big_ command line 10713 option. It tells the assembler to start producing big-endian code 10714 and data. This option should be used with care as producing 10715 mixed-endian binary files is fraught with danger. 10716 10717 10718 10719 File: as.info, Node: M32R-Warnings, Prev: M32R-Directives, Up: M32R-Dependent 10720 10721 9.19.3 M32R Warnings 10722 -------------------- 10723 10724 There are several warning and error messages that can be produced by 10725 `as' which are specific to the M32R: 10726 10727 `output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?' 10728 This message is only produced if warnings for explicit parallel 10729 conflicts have been enabled. It indicates that the assembler has 10730 encountered a parallel instruction in which the destination 10731 register of the left hand instruction is used as an input register 10732 in the right hand instruction. For example in this code fragment 10733 `mv r1, r2 || neg r3, r1' register r1 is the destination of the 10734 move instruction and the input to the neg instruction. 10735 10736 `output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?' 10737 This message is only produced if warnings for explicit parallel 10738 conflicts have been enabled. It indicates that the assembler has 10739 encountered a parallel instruction in which the destination 10740 register of the right hand instruction is used as an input 10741 register in the left hand instruction. For example in this code 10742 fragment `mv r1, r2 || neg r2, r3' register r2 is the destination 10743 of the neg instruction and the input to the move instruction. 10744 10745 `instruction `...' is for the M32RX only' 10746 This message is produced when the assembler encounters an 10747 instruction which is only supported by the M32Rx processor, and 10748 the `-m32rx' command line flag has not been specified to allow 10749 assembly of such instructions. 10750 10751 `unknown instruction `...'' 10752 This message is produced when the assembler encounters an 10753 instruction which it does not recognize. 10754 10755 `only the NOP instruction can be issued in parallel on the m32r' 10756 This message is produced when the assembler encounters a parallel 10757 instruction which does not involve a NOP instruction and the 10758 `-m32rx' command line flag has not been specified. Only the M32Rx 10759 processor is able to execute two instructions in parallel. 10760 10761 `instruction `...' cannot be executed in parallel.' 10762 This message is produced when the assembler encounters a parallel 10763 instruction which is made up of one or two instructions which 10764 cannot be executed in parallel. 10765 10766 `Instructions share the same execution pipeline' 10767 This message is produced when the assembler encounters a parallel 10768 instruction whoes components both use the same execution pipeline. 10769 10770 `Instructions write to the same destination register.' 10771 This message is produced when the assembler encounters a parallel 10772 instruction where both components attempt to modify the same 10773 register. For example these code fragments will produce this 10774 message: `mv r1, r2 || neg r1, r3' `jl r0 || mv r14, r1' `st r2, 10775 @-r1 || mv r1, r3' `mv r1, r2 || ld r0, @r1+' `cmp r1, r2 || addx 10776 r3, r4' (Both write to the condition bit) 10777 10778 10779 10780 File: as.info, Node: M68K-Dependent, Next: M68HC11-Dependent, Prev: M32R-Dependent, Up: Machine Dependencies 10781 10782 9.20 M680x0 Dependent Features 10783 ============================== 10784 10785 * Menu: 10786 10787 * M68K-Opts:: M680x0 Options 10788 * M68K-Syntax:: Syntax 10789 * M68K-Moto-Syntax:: Motorola Syntax 10790 * M68K-Float:: Floating Point 10791 * M68K-Directives:: 680x0 Machine Directives 10792 * M68K-opcodes:: Opcodes 10793 10794 10795 File: as.info, Node: M68K-Opts, Next: M68K-Syntax, Up: M68K-Dependent 10796 10797 9.20.1 M680x0 Options 10798 --------------------- 10799 10800 The Motorola 680x0 version of `as' has a few machine dependent options: 10801 10802 `-march=ARCHITECTURE' 10803 This option specifies a target architecture. The following 10804 architectures are recognized: `68000', `68010', `68020', `68030', 10805 `68040', `68060', `cpu32', `isaa', `isaaplus', `isab', `isac' and 10806 `cfv4e'. 10807 10808 `-mcpu=CPU' 10809 This option specifies a target cpu. When used in conjunction with 10810 the `-march' option, the cpu must be within the specified 10811 architecture. Also, the generic features of the architecture are 10812 used for instruction generation, rather than those of the specific 10813 chip. 10814 10815 `-m[no-]68851' 10816 10817 `-m[no-]68881' 10818 10819 `-m[no-]div' 10820 10821 `-m[no-]usp' 10822 10823 `-m[no-]float' 10824 10825 `-m[no-]mac' 10826 10827 `-m[no-]emac' 10828 Enable or disable various architecture specific features. If a 10829 chip or architecture by default supports an option (for instance 10830 `-march=isaaplus' includes the `-mdiv' option), explicitly 10831 disabling the option will override the default. 10832 10833 `-l' 10834 You can use the `-l' option to shorten the size of references to 10835 undefined symbols. If you do not use the `-l' option, references 10836 to undefined symbols are wide enough for a full `long' (32 bits). 10837 (Since `as' cannot know where these symbols end up, `as' can only 10838 allocate space for the linker to fill in later. Since `as' does 10839 not know how far away these symbols are, it allocates as much 10840 space as it can.) If you use this option, the references are only 10841 one word wide (16 bits). This may be useful if you want the 10842 object file to be as small as possible, and you know that the 10843 relevant symbols are always less than 17 bits away. 10844 10845 `--register-prefix-optional' 10846 For some configurations, especially those where the compiler 10847 normally does not prepend an underscore to the names of user 10848 variables, the assembler requires a `%' before any use of a 10849 register name. This is intended to let the assembler distinguish 10850 between C variables and functions named `a0' through `a7', and so 10851 on. The `%' is always accepted, but is not required for certain 10852 configurations, notably `sun3'. The `--register-prefix-optional' 10853 option may be used to permit omitting the `%' even for 10854 configurations for which it is normally required. If this is 10855 done, it will generally be impossible to refer to C variables and 10856 functions with the same names as register names. 10857 10858 `--bitwise-or' 10859 Normally the character `|' is treated as a comment character, which 10860 means that it can not be used in expressions. The `--bitwise-or' 10861 option turns `|' into a normal character. In this mode, you must 10862 either use C style comments, or start comments with a `#' character 10863 at the beginning of a line. 10864 10865 `--base-size-default-16 --base-size-default-32' 10866 If you use an addressing mode with a base register without 10867 specifying the size, `as' will normally use the full 32 bit value. 10868 For example, the addressing mode `%a0@(%d0)' is equivalent to 10869 `%a0@(%d0:l)'. You may use the `--base-size-default-16' option to 10870 tell `as' to default to using the 16 bit value. In this case, 10871 `%a0@(%d0)' is equivalent to `%a0@(%d0:w)'. You may use the 10872 `--base-size-default-32' option to restore the default behaviour. 10873 10874 `--disp-size-default-16 --disp-size-default-32' 10875 If you use an addressing mode with a displacement, and the value 10876 of the displacement is not known, `as' will normally assume that 10877 the value is 32 bits. For example, if the symbol `disp' has not 10878 been defined, `as' will assemble the addressing mode 10879 `%a0@(disp,%d0)' as though `disp' is a 32 bit value. You may use 10880 the `--disp-size-default-16' option to tell `as' to instead assume 10881 that the displacement is 16 bits. In this case, `as' will 10882 assemble `%a0@(disp,%d0)' as though `disp' is a 16 bit value. You 10883 may use the `--disp-size-default-32' option to restore the default 10884 behaviour. 10885 10886 `--pcrel' 10887 Always keep branches PC-relative. In the M680x0 architecture all 10888 branches are defined as PC-relative. However, on some processors 10889 they are limited to word displacements maximum. When `as' needs a 10890 long branch that is not available, it normally emits an absolute 10891 jump instead. This option disables this substitution. When this 10892 option is given and no long branches are available, only word 10893 branches will be emitted. An error message will be generated if a 10894 word branch cannot reach its target. This option has no effect on 10895 68020 and other processors that have long branches. *note Branch 10896 Improvement: M68K-Branch. 10897 10898 `-m68000' 10899 `as' can assemble code for several different members of the 10900 Motorola 680x0 family. The default depends upon how `as' was 10901 configured when it was built; normally, the default is to assemble 10902 code for the 68020 microprocessor. The following options may be 10903 used to change the default. These options control which 10904 instructions and addressing modes are permitted. The members of 10905 the 680x0 family are very similar. For detailed information about 10906 the differences, see the Motorola manuals. 10907 10908 `-m68000' 10909 `-m68ec000' 10910 `-m68hc000' 10911 `-m68hc001' 10912 `-m68008' 10913 `-m68302' 10914 `-m68306' 10915 `-m68307' 10916 `-m68322' 10917 `-m68356' 10918 Assemble for the 68000. `-m68008', `-m68302', and so on are 10919 synonyms for `-m68000', since the chips are the same from the 10920 point of view of the assembler. 10921 10922 `-m68010' 10923 Assemble for the 68010. 10924 10925 `-m68020' 10926 `-m68ec020' 10927 Assemble for the 68020. This is normally the default. 10928 10929 `-m68030' 10930 `-m68ec030' 10931 Assemble for the 68030. 10932 10933 `-m68040' 10934 `-m68ec040' 10935 Assemble for the 68040. 10936 10937 `-m68060' 10938 `-m68ec060' 10939 Assemble for the 68060. 10940 10941 `-mcpu32' 10942 `-m68330' 10943 `-m68331' 10944 `-m68332' 10945 `-m68333' 10946 `-m68334' 10947 `-m68336' 10948 `-m68340' 10949 `-m68341' 10950 `-m68349' 10951 `-m68360' 10952 Assemble for the CPU32 family of chips. 10953 10954 `-m5200' 10955 10956 `-m5202' 10957 10958 `-m5204' 10959 10960 `-m5206' 10961 10962 `-m5206e' 10963 10964 `-m521x' 10965 10966 `-m5249' 10967 10968 `-m528x' 10969 10970 `-m5307' 10971 10972 `-m5407' 10973 10974 `-m547x' 10975 10976 `-m548x' 10977 10978 `-mcfv4' 10979 10980 `-mcfv4e' 10981 Assemble for the ColdFire family of chips. 10982 10983 `-m68881' 10984 `-m68882' 10985 Assemble 68881 floating point instructions. This is the 10986 default for the 68020, 68030, and the CPU32. The 68040 and 10987 68060 always support floating point instructions. 10988 10989 `-mno-68881' 10990 Do not assemble 68881 floating point instructions. This is 10991 the default for 68000 and the 68010. The 68040 and 68060 10992 always support floating point instructions, even if this 10993 option is used. 10994 10995 `-m68851' 10996 Assemble 68851 MMU instructions. This is the default for the 10997 68020, 68030, and 68060. The 68040 accepts a somewhat 10998 different set of MMU instructions; `-m68851' and `-m68040' 10999 should not be used together. 11000 11001 `-mno-68851' 11002 Do not assemble 68851 MMU instructions. This is the default 11003 for the 68000, 68010, and the CPU32. The 68040 accepts a 11004 somewhat different set of MMU instructions. 11005 11006 11007 File: as.info, Node: M68K-Syntax, Next: M68K-Moto-Syntax, Prev: M68K-Opts, Up: M68K-Dependent 11008 11009 9.20.2 Syntax 11010 ------------- 11011 11012 This syntax for the Motorola 680x0 was developed at MIT. 11013 11014 The 680x0 version of `as' uses instructions names and syntax 11015 compatible with the Sun assembler. Intervening periods are ignored; 11016 for example, `movl' is equivalent to `mov.l'. 11017 11018 In the following table APC stands for any of the address registers 11019 (`%a0' through `%a7'), the program counter (`%pc'), the zero-address 11020 relative to the program counter (`%zpc'), a suppressed address register 11021 (`%za0' through `%za7'), or it may be omitted entirely. The use of 11022 SIZE means one of `w' or `l', and it may be omitted, along with the 11023 leading colon, unless a scale is also specified. The use of SCALE 11024 means one of `1', `2', `4', or `8', and it may always be omitted along 11025 with the leading colon. 11026 11027 The following addressing modes are understood: 11028 "Immediate" 11029 `#NUMBER' 11030 11031 "Data Register" 11032 `%d0' through `%d7' 11033 11034 "Address Register" 11035 `%a0' through `%a7' 11036 `%a7' is also known as `%sp', i.e., the Stack Pointer. `%a6' is 11037 also known as `%fp', the Frame Pointer. 11038 11039 "Address Register Indirect" 11040 `%a0@' through `%a7@' 11041 11042 "Address Register Postincrement" 11043 `%a0@+' through `%a7@+' 11044 11045 "Address Register Predecrement" 11046 `%a0@-' through `%a7@-' 11047 11048 "Indirect Plus Offset" 11049 `APC@(NUMBER)' 11050 11051 "Index" 11052 `APC@(NUMBER,REGISTER:SIZE:SCALE)' 11053 11054 The NUMBER may be omitted. 11055 11056 "Postindex" 11057 `APC@(NUMBER)@(ONUMBER,REGISTER:SIZE:SCALE)' 11058 11059 The ONUMBER or the REGISTER, but not both, may be omitted. 11060 11061 "Preindex" 11062 `APC@(NUMBER,REGISTER:SIZE:SCALE)@(ONUMBER)' 11063 11064 The NUMBER may be omitted. Omitting the REGISTER produces the 11065 Postindex addressing mode. 11066 11067 "Absolute" 11068 `SYMBOL', or `DIGITS', optionally followed by `:b', `:w', or `:l'. 11069 11070 11071 File: as.info, Node: M68K-Moto-Syntax, Next: M68K-Float, Prev: M68K-Syntax, Up: M68K-Dependent 11072 11073 9.20.3 Motorola Syntax 11074 ---------------------- 11075 11076 The standard Motorola syntax for this chip differs from the syntax 11077 already discussed (*note Syntax: M68K-Syntax.). `as' can accept 11078 Motorola syntax for operands, even if MIT syntax is used for other 11079 operands in the same instruction. The two kinds of syntax are fully 11080 compatible. 11081 11082 In the following table APC stands for any of the address registers 11083 (`%a0' through `%a7'), the program counter (`%pc'), the zero-address 11084 relative to the program counter (`%zpc'), or a suppressed address 11085 register (`%za0' through `%za7'). The use of SIZE means one of `w' or 11086 `l', and it may always be omitted along with the leading dot. The use 11087 of SCALE means one of `1', `2', `4', or `8', and it may always be 11088 omitted along with the leading asterisk. 11089 11090 The following additional addressing modes are understood: 11091 11092 "Address Register Indirect" 11093 `(%a0)' through `(%a7)' 11094 `%a7' is also known as `%sp', i.e., the Stack Pointer. `%a6' is 11095 also known as `%fp', the Frame Pointer. 11096 11097 "Address Register Postincrement" 11098 `(%a0)+' through `(%a7)+' 11099 11100 "Address Register Predecrement" 11101 `-(%a0)' through `-(%a7)' 11102 11103 "Indirect Plus Offset" 11104 `NUMBER(%A0)' through `NUMBER(%A7)', or `NUMBER(%PC)'. 11105 11106 The NUMBER may also appear within the parentheses, as in 11107 `(NUMBER,%A0)'. When used with the PC, the NUMBER may be omitted 11108 (with an address register, omitting the NUMBER produces Address 11109 Register Indirect mode). 11110 11111 "Index" 11112 `NUMBER(APC,REGISTER.SIZE*SCALE)' 11113 11114 The NUMBER may be omitted, or it may appear within the 11115 parentheses. The APC may be omitted. The REGISTER and the APC 11116 may appear in either order. If both APC and REGISTER are address 11117 registers, and the SIZE and SCALE are omitted, then the first 11118 register is taken as the base register, and the second as the 11119 index register. 11120 11121 "Postindex" 11122 `([NUMBER,APC],REGISTER.SIZE*SCALE,ONUMBER)' 11123 11124 The ONUMBER, or the REGISTER, or both, may be omitted. Either the 11125 NUMBER or the APC may be omitted, but not both. 11126 11127 "Preindex" 11128 `([NUMBER,APC,REGISTER.SIZE*SCALE],ONUMBER)' 11129 11130 The NUMBER, or the APC, or the REGISTER, or any two of them, may 11131 be omitted. The ONUMBER may be omitted. The REGISTER and the APC 11132 may appear in either order. If both APC and REGISTER are address 11133 registers, and the SIZE and SCALE are omitted, then the first 11134 register is taken as the base register, and the second as the 11135 index register. 11136 11137 11138 File: as.info, Node: M68K-Float, Next: M68K-Directives, Prev: M68K-Moto-Syntax, Up: M68K-Dependent 11139 11140 9.20.4 Floating Point 11141 --------------------- 11142 11143 Packed decimal (P) format floating literals are not supported. Feel 11144 free to add the code! 11145 11146 The floating point formats generated by directives are these. 11147 11148 `.float' 11149 `Single' precision floating point constants. 11150 11151 `.double' 11152 `Double' precision floating point constants. 11153 11154 `.extend' 11155 `.ldouble' 11156 `Extended' precision (`long double') floating point constants. 11157 11158 11159 File: as.info, Node: M68K-Directives, Next: M68K-opcodes, Prev: M68K-Float, Up: M68K-Dependent 11160 11161 9.20.5 680x0 Machine Directives 11162 ------------------------------- 11163 11164 In order to be compatible with the Sun assembler the 680x0 assembler 11165 understands the following directives. 11166 11167 `.data1' 11168 This directive is identical to a `.data 1' directive. 11169 11170 `.data2' 11171 This directive is identical to a `.data 2' directive. 11172 11173 `.even' 11174 This directive is a special case of the `.align' directive; it 11175 aligns the output to an even byte boundary. 11176 11177 `.skip' 11178 This directive is identical to a `.space' directive. 11179 11180 `.arch NAME' 11181 Select the target architecture and extension features. Valid 11182 values for NAME are the same as for the `-march' command line 11183 option. This directive cannot be specified after any instructions 11184 have been assembled. If it is given multiple times, or in 11185 conjunction with the `-march' option, all uses must be for the 11186 same architecture and extension set. 11187 11188 `.cpu NAME' 11189 Select the target cpu. Valid valuse for NAME are the same as for 11190 the `-mcpu' command line option. This directive cannot be 11191 specified after any instructions have been assembled. If it is 11192 given multiple times, or in conjunction with the `-mopt' option, 11193 all uses must be for the same cpu. 11194 11195 11196 11197 File: as.info, Node: M68K-opcodes, Prev: M68K-Directives, Up: M68K-Dependent 11198 11199 9.20.6 Opcodes 11200 -------------- 11201 11202 * Menu: 11203 11204 * M68K-Branch:: Branch Improvement 11205 * M68K-Chars:: Special Characters 11206 11207 11208 File: as.info, Node: M68K-Branch, Next: M68K-Chars, Up: M68K-opcodes 11209 11210 9.20.6.1 Branch Improvement 11211 ........................... 11212 11213 Certain pseudo opcodes are permitted for branch instructions. They 11214 expand to the shortest branch instruction that reach the target. 11215 Generally these mnemonics are made by substituting `j' for `b' at the 11216 start of a Motorola mnemonic. 11217 11218 The following table summarizes the pseudo-operations. A `*' flags 11219 cases that are more fully described after the table: 11220 11221 Displacement 11222 +------------------------------------------------------------ 11223 | 68020 68000/10, not PC-relative OK 11224 Pseudo-Op |BYTE WORD LONG ABSOLUTE LONG JUMP ** 11225 +------------------------------------------------------------ 11226 jbsr |bsrs bsrw bsrl jsr 11227 jra |bras braw bral jmp 11228 * jXX |bXXs bXXw bXXl bNXs;jmp 11229 * dbXX | N/A dbXXw dbXX;bras;bral dbXX;bras;jmp 11230 fjXX | N/A fbXXw fbXXl N/A 11231 11232 XX: condition 11233 NX: negative of condition XX 11234 `*'--see full description below 11235 `**'--this expansion mode is disallowed by `--pcrel' 11236 11237 `jbsr' 11238 `jra' 11239 These are the simplest jump pseudo-operations; they always map to 11240 one particular machine instruction, depending on the displacement 11241 to the branch target. This instruction will be a byte or word 11242 branch is that is sufficient. Otherwise, a long branch will be 11243 emitted if available. If no long branches are available and the 11244 `--pcrel' option is not given, an absolute long jump will be 11245 emitted instead. If no long branches are available, the `--pcrel' 11246 option is given, and a word branch cannot reach the target, an 11247 error message is generated. 11248 11249 In addition to standard branch operands, `as' allows these 11250 pseudo-operations to have all operands that are allowed for jsr 11251 and jmp, substituting these instructions if the operand given is 11252 not valid for a branch instruction. 11253 11254 `jXX' 11255 Here, `jXX' stands for an entire family of pseudo-operations, 11256 where XX is a conditional branch or condition-code test. The full 11257 list of pseudo-ops in this family is: 11258 jhi jls jcc jcs jne jeq jvc 11259 jvs jpl jmi jge jlt jgt jle 11260 11261 Usually, each of these pseudo-operations expands to a single branch 11262 instruction. However, if a word branch is not sufficient, no long 11263 branches are available, and the `--pcrel' option is not given, `as' 11264 issues a longer code fragment in terms of NX, the opposite 11265 condition to XX. For example, under these conditions: 11266 jXX foo 11267 gives 11268 bNXs oof 11269 jmp foo 11270 oof: 11271 11272 `dbXX' 11273 The full family of pseudo-operations covered here is 11274 dbhi dbls dbcc dbcs dbne dbeq dbvc 11275 dbvs dbpl dbmi dbge dblt dbgt dble 11276 dbf dbra dbt 11277 11278 Motorola `dbXX' instructions allow word displacements only. When 11279 a word displacement is sufficient, each of these pseudo-operations 11280 expands to the corresponding Motorola instruction. When a word 11281 displacement is not sufficient and long branches are available, 11282 when the source reads `dbXX foo', `as' emits 11283 dbXX oo1 11284 bras oo2 11285 oo1:bral foo 11286 oo2: 11287 11288 If, however, long branches are not available and the `--pcrel' 11289 option is not given, `as' emits 11290 dbXX oo1 11291 bras oo2 11292 oo1:jmp foo 11293 oo2: 11294 11295 `fjXX' 11296 This family includes 11297 fjne fjeq fjge fjlt fjgt fjle fjf 11298 fjt fjgl fjgle fjnge fjngl fjngle fjngt 11299 fjnle fjnlt fjoge fjogl fjogt fjole fjolt 11300 fjor fjseq fjsf fjsne fjst fjueq fjuge 11301 fjugt fjule fjult fjun 11302 11303 Each of these pseudo-operations always expands to a single Motorola 11304 coprocessor branch instruction, word or long. All Motorola 11305 coprocessor branch instructions allow both word and long 11306 displacements. 11307 11308 11309 11310 File: as.info, Node: M68K-Chars, Prev: M68K-Branch, Up: M68K-opcodes 11311 11312 9.20.6.2 Special Characters 11313 ........................... 11314 11315 The immediate character is `#' for Sun compatibility. The line-comment 11316 character is `|' (unless the `--bitwise-or' option is used). If a `#' 11317 appears at the beginning of a line, it is treated as a comment unless 11318 it looks like `# line file', in which case it is treated normally. 11319 11320 11321 File: as.info, Node: M68HC11-Dependent, Next: MIPS-Dependent, Prev: M68K-Dependent, Up: Machine Dependencies 11322 11323 9.21 M68HC11 and M68HC12 Dependent Features 11324 =========================================== 11325 11326 * Menu: 11327 11328 * M68HC11-Opts:: M68HC11 and M68HC12 Options 11329 * M68HC11-Syntax:: Syntax 11330 * M68HC11-Modifiers:: Symbolic Operand Modifiers 11331 * M68HC11-Directives:: Assembler Directives 11332 * M68HC11-Float:: Floating Point 11333 * M68HC11-opcodes:: Opcodes 11334 11335 11336 File: as.info, Node: M68HC11-Opts, Next: M68HC11-Syntax, Up: M68HC11-Dependent 11337 11338 9.21.1 M68HC11 and M68HC12 Options 11339 ---------------------------------- 11340 11341 The Motorola 68HC11 and 68HC12 version of `as' have a few machine 11342 dependent options. 11343 11344 `-m68hc11' 11345 This option switches the assembler in the M68HC11 mode. In this 11346 mode, the assembler only accepts 68HC11 operands and mnemonics. It 11347 produces code for the 68HC11. 11348 11349 `-m68hc12' 11350 This option switches the assembler in the M68HC12 mode. In this 11351 mode, the assembler also accepts 68HC12 operands and mnemonics. It 11352 produces code for the 68HC12. A few 68HC11 instructions are 11353 replaced by some 68HC12 instructions as recommended by Motorola 11354 specifications. 11355 11356 `-m68hcs12' 11357 This option switches the assembler in the M68HCS12 mode. This 11358 mode is similar to `-m68hc12' but specifies to assemble for the 11359 68HCS12 series. The only difference is on the assembling of the 11360 `movb' and `movw' instruction when a PC-relative operand is used. 11361 11362 `-mshort' 11363 This option controls the ABI and indicates to use a 16-bit integer 11364 ABI. It has no effect on the assembled instructions. This is the 11365 default. 11366 11367 `-mlong' 11368 This option controls the ABI and indicates to use a 32-bit integer 11369 ABI. 11370 11371 `-mshort-double' 11372 This option controls the ABI and indicates to use a 32-bit float 11373 ABI. This is the default. 11374 11375 `-mlong-double' 11376 This option controls the ABI and indicates to use a 64-bit float 11377 ABI. 11378 11379 `--strict-direct-mode' 11380 You can use the `--strict-direct-mode' option to disable the 11381 automatic translation of direct page mode addressing into extended 11382 mode when the instruction does not support direct mode. For 11383 example, the `clr' instruction does not support direct page mode 11384 addressing. When it is used with the direct page mode, `as' will 11385 ignore it and generate an absolute addressing. This option 11386 prevents `as' from doing this, and the wrong usage of the direct 11387 page mode will raise an error. 11388 11389 `--short-branches' 11390 The `--short-branches' option turns off the translation of 11391 relative branches into absolute branches when the branch offset is 11392 out of range. By default `as' transforms the relative branch 11393 (`bsr', `bgt', `bge', `beq', `bne', `ble', `blt', `bhi', `bcc', 11394 `bls', `bcs', `bmi', `bvs', `bvs', `bra') into an absolute branch 11395 when the offset is out of the -128 .. 127 range. In that case, 11396 the `bsr' instruction is translated into a `jsr', the `bra' 11397 instruction is translated into a `jmp' and the conditional 11398 branches instructions are inverted and followed by a `jmp'. This 11399 option disables these translations and `as' will generate an error 11400 if a relative branch is out of range. This option does not affect 11401 the optimization associated to the `jbra', `jbsr' and `jbXX' 11402 pseudo opcodes. 11403 11404 `--force-long-branches' 11405 The `--force-long-branches' option forces the translation of 11406 relative branches into absolute branches. This option does not 11407 affect the optimization associated to the `jbra', `jbsr' and 11408 `jbXX' pseudo opcodes. 11409 11410 `--print-insn-syntax' 11411 You can use the `--print-insn-syntax' option to obtain the syntax 11412 description of the instruction when an error is detected. 11413 11414 `--print-opcodes' 11415 The `--print-opcodes' option prints the list of all the 11416 instructions with their syntax. The first item of each line 11417 represents the instruction name and the rest of the line indicates 11418 the possible operands for that instruction. The list is printed in 11419 alphabetical order. Once the list is printed `as' exits. 11420 11421 `--generate-example' 11422 The `--generate-example' option is similar to `--print-opcodes' 11423 but it generates an example for each instruction instead. 11424 11425 11426 File: as.info, Node: M68HC11-Syntax, Next: M68HC11-Modifiers, Prev: M68HC11-Opts, Up: M68HC11-Dependent 11427 11428 9.21.2 Syntax 11429 ------------- 11430 11431 In the M68HC11 syntax, the instruction name comes first and it may be 11432 followed by one or several operands (up to three). Operands are 11433 separated by comma (`,'). In the normal mode, `as' will complain if too 11434 many operands are specified for a given instruction. In the MRI mode 11435 (turned on with `-M' option), it will treat them as comments. Example: 11436 11437 inx 11438 lda #23 11439 bset 2,x #4 11440 brclr *bot #8 foo 11441 11442 The following addressing modes are understood for 68HC11 and 68HC12: 11443 "Immediate" 11444 `#NUMBER' 11445 11446 "Address Register" 11447 `NUMBER,X', `NUMBER,Y' 11448 11449 The NUMBER may be omitted in which case 0 is assumed. 11450 11451 "Direct Addressing mode" 11452 `*SYMBOL', or `*DIGITS' 11453 11454 "Absolute" 11455 `SYMBOL', or `DIGITS' 11456 11457 The M68HC12 has other more complex addressing modes. All of them are 11458 supported and they are represented below: 11459 11460 "Constant Offset Indexed Addressing Mode" 11461 `NUMBER,REG' 11462 11463 The NUMBER may be omitted in which case 0 is assumed. The 11464 register can be either `X', `Y', `SP' or `PC'. The assembler will 11465 use the smaller post-byte definition according to the constant 11466 value (5-bit constant offset, 9-bit constant offset or 16-bit 11467 constant offset). If the constant is not known by the assembler 11468 it will use the 16-bit constant offset post-byte and the value 11469 will be resolved at link time. 11470 11471 "Offset Indexed Indirect" 11472 `[NUMBER,REG]' 11473 11474 The register can be either `X', `Y', `SP' or `PC'. 11475 11476 "Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement" 11477 `NUMBER,-REG' `NUMBER,+REG' `NUMBER,REG-' `NUMBER,REG+' 11478 11479 The number must be in the range `-8'..`+8' and must not be 0. The 11480 register can be either `X', `Y', `SP' or `PC'. 11481 11482 "Accumulator Offset" 11483 `ACC,REG' 11484 11485 The accumulator register can be either `A', `B' or `D'. The 11486 register can be either `X', `Y', `SP' or `PC'. 11487 11488 "Accumulator D offset indexed-indirect" 11489 `[D,REG]' 11490 11491 The register can be either `X', `Y', `SP' or `PC'. 11492 11493 11494 For example: 11495 11496 ldab 1024,sp 11497 ldd [10,x] 11498 orab 3,+x 11499 stab -2,y- 11500 ldx a,pc 11501 sty [d,sp] 11502 11503 11504 File: as.info, Node: M68HC11-Modifiers, Next: M68HC11-Directives, Prev: M68HC11-Syntax, Up: M68HC11-Dependent 11505 11506 9.21.3 Symbolic Operand Modifiers 11507 --------------------------------- 11508 11509 The assembler supports several modifiers when using symbol addresses in 11510 68HC11 and 68HC12 instruction operands. The general syntax is the 11511 following: 11512 11513 %modifier(symbol) 11514 11515 `%addr' 11516 This modifier indicates to the assembler and linker to use the 11517 16-bit physical address corresponding to the symbol. This is 11518 intended to be used on memory window systems to map a symbol in 11519 the memory bank window. If the symbol is in a memory expansion 11520 part, the physical address corresponds to the symbol address 11521 within the memory bank window. If the symbol is not in a memory 11522 expansion part, this is the symbol address (using or not using the 11523 %addr modifier has no effect in that case). 11524 11525 `%page' 11526 This modifier indicates to use the memory page number corresponding 11527 to the symbol. If the symbol is in a memory expansion part, its 11528 page number is computed by the linker as a number used to map the 11529 page containing the symbol in the memory bank window. If the 11530 symbol is not in a memory expansion part, the page number is 0. 11531 11532 `%hi' 11533 This modifier indicates to use the 8-bit high part of the physical 11534 address of the symbol. 11535 11536 `%lo' 11537 This modifier indicates to use the 8-bit low part of the physical 11538 address of the symbol. 11539 11540 11541 For example a 68HC12 call to a function `foo_example' stored in 11542 memory expansion part could be written as follows: 11543 11544 call %addr(foo_example),%page(foo_example) 11545 11546 and this is equivalent to 11547 11548 call foo_example 11549 11550 And for 68HC11 it could be written as follows: 11551 11552 ldab #%page(foo_example) 11553 stab _page_switch 11554 jsr %addr(foo_example) 11555 11556 11557 File: as.info, Node: M68HC11-Directives, Next: M68HC11-Float, Prev: M68HC11-Modifiers, Up: M68HC11-Dependent 11558 11559 9.21.4 Assembler Directives 11560 --------------------------- 11561 11562 The 68HC11 and 68HC12 version of `as' have the following specific 11563 assembler directives: 11564 11565 `.relax' 11566 The relax directive is used by the `GNU Compiler' to emit a 11567 specific relocation to mark a group of instructions for linker 11568 relaxation. The sequence of instructions within the group must be 11569 known to the linker so that relaxation can be performed. 11570 11571 `.mode [mshort|mlong|mshort-double|mlong-double]' 11572 This directive specifies the ABI. It overrides the `-mshort', 11573 `-mlong', `-mshort-double' and `-mlong-double' options. 11574 11575 `.far SYMBOL' 11576 This directive marks the symbol as a `far' symbol meaning that it 11577 uses a `call/rtc' calling convention as opposed to `jsr/rts'. 11578 During a final link, the linker will identify references to the 11579 `far' symbol and will verify the proper calling convention. 11580 11581 `.interrupt SYMBOL' 11582 This directive marks the symbol as an interrupt entry point. This 11583 information is then used by the debugger to correctly unwind the 11584 frame across interrupts. 11585 11586 `.xrefb SYMBOL' 11587 This directive is defined for compatibility with the 11588 `Specification for Motorola 8 and 16-Bit Assembly Language Input 11589 Standard' and is ignored. 11590 11591 11592 11593 File: as.info, Node: M68HC11-Float, Next: M68HC11-opcodes, Prev: M68HC11-Directives, Up: M68HC11-Dependent 11594 11595 9.21.5 Floating Point 11596 --------------------- 11597 11598 Packed decimal (P) format floating literals are not supported. Feel 11599 free to add the code! 11600 11601 The floating point formats generated by directives are these. 11602 11603 `.float' 11604 `Single' precision floating point constants. 11605 11606 `.double' 11607 `Double' precision floating point constants. 11608 11609 `.extend' 11610 `.ldouble' 11611 `Extended' precision (`long double') floating point constants. 11612 11613 11614 File: as.info, Node: M68HC11-opcodes, Prev: M68HC11-Float, Up: M68HC11-Dependent 11615 11616 9.21.6 Opcodes 11617 -------------- 11618 11619 * Menu: 11620 11621 * M68HC11-Branch:: Branch Improvement 11622 11623 11624 File: as.info, Node: M68HC11-Branch, Up: M68HC11-opcodes 11625 11626 9.21.6.1 Branch Improvement 11627 ........................... 11628 11629 Certain pseudo opcodes are permitted for branch instructions. They 11630 expand to the shortest branch instruction that reach the target. 11631 Generally these mnemonics are made by prepending `j' to the start of 11632 Motorola mnemonic. These pseudo opcodes are not affected by the 11633 `--short-branches' or `--force-long-branches' options. 11634 11635 The following table summarizes the pseudo-operations. 11636 11637 Displacement Width 11638 +-------------------------------------------------------------+ 11639 | Options | 11640 | --short-branches --force-long-branches | 11641 +--------------------------+----------------------------------+ 11642 Op |BYTE WORD | BYTE WORD | 11643 +--------------------------+----------------------------------+ 11644 bsr | bsr <pc-rel> <error> | jsr <abs> | 11645 bra | bra <pc-rel> <error> | jmp <abs> | 11646 jbsr | bsr <pc-rel> jsr <abs> | bsr <pc-rel> jsr <abs> | 11647 jbra | bra <pc-rel> jmp <abs> | bra <pc-rel> jmp <abs> | 11648 bXX | bXX <pc-rel> <error> | bNX +3; jmp <abs> | 11649 jbXX | bXX <pc-rel> bNX +3; | bXX <pc-rel> bNX +3; jmp <abs> | 11650 | jmp <abs> | | 11651 +--------------------------+----------------------------------+ 11652 XX: condition 11653 NX: negative of condition XX 11654 11655 `jbsr' 11656 `jbra' 11657 These are the simplest jump pseudo-operations; they always map to 11658 one particular machine instruction, depending on the displacement 11659 to the branch target. 11660 11661 `jbXX' 11662 Here, `jbXX' stands for an entire family of pseudo-operations, 11663 where XX is a conditional branch or condition-code test. The full 11664 list of pseudo-ops in this family is: 11665 jbcc jbeq jbge jbgt jbhi jbvs jbpl jblo 11666 jbcs jbne jblt jble jbls jbvc jbmi 11667 11668 For the cases of non-PC relative displacements and long 11669 displacements, `as' issues a longer code fragment in terms of NX, 11670 the opposite condition to XX. For example, for the non-PC 11671 relative case: 11672 jbXX foo 11673 gives 11674 bNXs oof 11675 jmp foo 11676 oof: 11677 11678 11679 11680 File: as.info, Node: MIPS-Dependent, Next: MMIX-Dependent, Prev: M68HC11-Dependent, Up: Machine Dependencies 11681 11682 9.22 MIPS Dependent Features 11683 ============================ 11684 11685 GNU `as' for MIPS architectures supports several different MIPS 11686 processors, and MIPS ISA levels I through V, MIPS32, and MIPS64. For 11687 information about the MIPS instruction set, see `MIPS RISC 11688 Architecture', by Kane and Heindrich (Prentice-Hall). For an overview 11689 of MIPS assembly conventions, see "Appendix D: Assembly Language 11690 Programming" in the same work. 11691 11692 * Menu: 11693 11694 * MIPS Opts:: Assembler options 11695 * MIPS Object:: ECOFF object code 11696 * MIPS Stabs:: Directives for debugging information 11697 * MIPS ISA:: Directives to override the ISA level 11698 * MIPS symbol sizes:: Directives to override the size of symbols 11699 * MIPS autoextend:: Directives for extending MIPS 16 bit instructions 11700 * MIPS insn:: Directive to mark data as an instruction 11701 * MIPS option stack:: Directives to save and restore options 11702 * MIPS ASE instruction generation overrides:: Directives to control 11703 generation of MIPS ASE instructions 11704 * MIPS floating-point:: Directives to override floating-point options 11705 11706 11707 File: as.info, Node: MIPS Opts, Next: MIPS Object, Up: MIPS-Dependent 11708 11709 9.22.1 Assembler options 11710 ------------------------ 11711 11712 The MIPS configurations of GNU `as' support these special options: 11713 11714 `-G NUM' 11715 This option sets the largest size of an object that can be 11716 referenced implicitly with the `gp' register. It is only accepted 11717 for targets that use ECOFF format. The default value is 8. 11718 11719 `-EB' 11720 `-EL' 11721 Any MIPS configuration of `as' can select big-endian or 11722 little-endian output at run time (unlike the other GNU development 11723 tools, which must be configured for one or the other). Use `-EB' 11724 to select big-endian output, and `-EL' for little-endian. 11725 11726 `-KPIC' 11727 Generate SVR4-style PIC. This option tells the assembler to 11728 generate SVR4-style position-independent macro expansions. It 11729 also tells the assembler to mark the output file as PIC. 11730 11731 `-mvxworks-pic' 11732 Generate VxWorks PIC. This option tells the assembler to generate 11733 VxWorks-style position-independent macro expansions. 11734 11735 `-mips1' 11736 `-mips2' 11737 `-mips3' 11738 `-mips4' 11739 `-mips5' 11740 `-mips32' 11741 `-mips32r2' 11742 `-mips64' 11743 `-mips64r2' 11744 Generate code for a particular MIPS Instruction Set Architecture 11745 level. `-mips1' corresponds to the R2000 and R3000 processors, 11746 `-mips2' to the R6000 processor, `-mips3' to the R4000 processor, 11747 and `-mips4' to the R8000 and R10000 processors. `-mips5', 11748 `-mips32', `-mips32r2', `-mips64', and `-mips64r2' correspond to 11749 generic MIPS V, MIPS32, MIPS32 RELEASE 2, MIPS64, and MIPS64 11750 RELEASE 2 ISA processors, respectively. You can also switch 11751 instruction sets during the assembly; see *Note Directives to 11752 override the ISA level: MIPS ISA. 11753 11754 `-mgp32' 11755 `-mfp32' 11756 Some macros have different expansions for 32-bit and 64-bit 11757 registers. The register sizes are normally inferred from the ISA 11758 and ABI, but these flags force a certain group of registers to be 11759 treated as 32 bits wide at all times. `-mgp32' controls the size 11760 of general-purpose registers and `-mfp32' controls the size of 11761 floating-point registers. 11762 11763 The `.set gp=32' and `.set fp=32' directives allow the size of 11764 registers to be changed for parts of an object. The default value 11765 is restored by `.set gp=default' and `.set fp=default'. 11766 11767 On some MIPS variants there is a 32-bit mode flag; when this flag 11768 is set, 64-bit instructions generate a trap. Also, some 32-bit 11769 OSes only save the 32-bit registers on a context switch, so it is 11770 essential never to use the 64-bit registers. 11771 11772 `-mgp64' 11773 `-mfp64' 11774 Assume that 64-bit registers are available. This is provided in 11775 the interests of symmetry with `-mgp32' and `-mfp32'. 11776 11777 The `.set gp=64' and `.set fp=64' directives allow the size of 11778 registers to be changed for parts of an object. The default value 11779 is restored by `.set gp=default' and `.set fp=default'. 11780 11781 `-mips16' 11782 `-no-mips16' 11783 Generate code for the MIPS 16 processor. This is equivalent to 11784 putting `.set mips16' at the start of the assembly file. 11785 `-no-mips16' turns off this option. 11786 11787 `-msmartmips' 11788 `-mno-smartmips' 11789 Enables the SmartMIPS extensions to the MIPS32 instruction set, 11790 which provides a number of new instructions which target smartcard 11791 and cryptographic applications. This is equivalent to putting 11792 `.set smartmips' at the start of the assembly file. 11793 `-mno-smartmips' turns off this option. 11794 11795 `-mips3d' 11796 `-no-mips3d' 11797 Generate code for the MIPS-3D Application Specific Extension. 11798 This tells the assembler to accept MIPS-3D instructions. 11799 `-no-mips3d' turns off this option. 11800 11801 `-mdmx' 11802 `-no-mdmx' 11803 Generate code for the MDMX Application Specific Extension. This 11804 tells the assembler to accept MDMX instructions. `-no-mdmx' turns 11805 off this option. 11806 11807 `-mdsp' 11808 `-mno-dsp' 11809 Generate code for the DSP Release 1 Application Specific Extension. 11810 This tells the assembler to accept DSP Release 1 instructions. 11811 `-mno-dsp' turns off this option. 11812 11813 `-mdspr2' 11814 `-mno-dspr2' 11815 Generate code for the DSP Release 2 Application Specific Extension. 11816 This option implies -mdsp. This tells the assembler to accept DSP 11817 Release 2 instructions. `-mno-dspr2' turns off this option. 11818 11819 `-mmt' 11820 `-mno-mt' 11821 Generate code for the MT Application Specific Extension. This 11822 tells the assembler to accept MT instructions. `-mno-mt' turns 11823 off this option. 11824 11825 `-mfix7000' 11826 `-mno-fix7000' 11827 Cause nops to be inserted if the read of the destination register 11828 of an mfhi or mflo instruction occurs in the following two 11829 instructions. 11830 11831 `-mfix-vr4120' 11832 `-no-mfix-vr4120' 11833 Insert nops to work around certain VR4120 errata. This option is 11834 intended to be used on GCC-generated code: it is not designed to 11835 catch all problems in hand-written assembler code. 11836 11837 `-mfix-vr4130' 11838 `-no-mfix-vr4130' 11839 Insert nops to work around the VR4130 `mflo'/`mfhi' errata. 11840 11841 `-m4010' 11842 `-no-m4010' 11843 Generate code for the LSI R4010 chip. This tells the assembler to 11844 accept the R4010 specific instructions (`addciu', `ffc', etc.), 11845 and to not schedule `nop' instructions around accesses to the `HI' 11846 and `LO' registers. `-no-m4010' turns off this option. 11847 11848 `-m4650' 11849 `-no-m4650' 11850 Generate code for the MIPS R4650 chip. This tells the assembler 11851 to accept the `mad' and `madu' instruction, and to not schedule 11852 `nop' instructions around accesses to the `HI' and `LO' registers. 11853 `-no-m4650' turns off this option. 11854 11855 `-m3900' 11856 `-no-m3900' 11857 `-m4100' 11858 `-no-m4100' 11859 For each option `-mNNNN', generate code for the MIPS RNNNN chip. 11860 This tells the assembler to accept instructions specific to that 11861 chip, and to schedule for that chip's hazards. 11862 11863 `-march=CPU' 11864 Generate code for a particular MIPS cpu. It is exactly equivalent 11865 to `-mCPU', except that there are more value of CPU understood. 11866 Valid CPU value are: 11867 11868 2000, 3000, 3900, 4000, 4010, 4100, 4111, vr4120, vr4130, 11869 vr4181, 4300, 4400, 4600, 4650, 5000, rm5200, rm5230, rm5231, 11870 rm5261, rm5721, vr5400, vr5500, 6000, rm7000, 8000, rm9000, 11871 10000, 12000, 4kc, 4km, 4kp, 4ksc, 4kec, 4kem, 4kep, 4ksd, 11872 m4k, m4kp, 24kc, 24kf2_1, 24kf, 24kf1_1, 24kec, 24kef2_1, 11873 24kef, 24kef1_1, 34kc, 34kf2_1, 34kf, 34kf1_1, 74kc, 74kf2_1, 11874 74kf, 74kf1_1, 74kf3_2, 5kc, 5kf, 20kc, 25kf, sb1, sb1a, 11875 loongson2e, loongson2f, octeon 11876 11877 For compatibility reasons, `Nx' and `Bfx' are accepted as synonyms 11878 for `Nf1_1'. These values are deprecated. 11879 11880 `-mtune=CPU' 11881 Schedule and tune for a particular MIPS cpu. Valid CPU values are 11882 identical to `-march=CPU'. 11883 11884 `-mabi=ABI' 11885 Record which ABI the source code uses. The recognized arguments 11886 are: `32', `n32', `o64', `64' and `eabi'. 11887 11888 `-msym32' 11889 `-mno-sym32' 11890 Equivalent to adding `.set sym32' or `.set nosym32' to the 11891 beginning of the assembler input. *Note MIPS symbol sizes::. 11892 11893 `-nocpp' 11894 This option is ignored. It is accepted for command-line 11895 compatibility with other assemblers, which use it to turn off C 11896 style preprocessing. With GNU `as', there is no need for 11897 `-nocpp', because the GNU assembler itself never runs the C 11898 preprocessor. 11899 11900 `-msoft-float' 11901 `-mhard-float' 11902 Disable or enable floating-point instructions. Note that by 11903 default floating-point instructions are always allowed even with 11904 CPU targets that don't have support for these instructions. 11905 11906 `-msingle-float' 11907 `-mdouble-float' 11908 Disable or enable double-precision floating-point operations. Note 11909 that by default double-precision floating-point operations are 11910 always allowed even with CPU targets that don't have support for 11911 these operations. 11912 11913 `--construct-floats' 11914 `--no-construct-floats' 11915 The `--no-construct-floats' option disables the construction of 11916 double width floating point constants by loading the two halves of 11917 the value into the two single width floating point registers that 11918 make up the double width register. This feature is useful if the 11919 processor support the FR bit in its status register, and this bit 11920 is known (by the programmer) to be set. This bit prevents the 11921 aliasing of the double width register by the single width 11922 registers. 11923 11924 By default `--construct-floats' is selected, allowing construction 11925 of these floating point constants. 11926 11927 `--trap' 11928 `--no-break' 11929 `as' automatically macro expands certain division and 11930 multiplication instructions to check for overflow and division by 11931 zero. This option causes `as' to generate code to take a trap 11932 exception rather than a break exception when an error is detected. 11933 The trap instructions are only supported at Instruction Set 11934 Architecture level 2 and higher. 11935 11936 `--break' 11937 `--no-trap' 11938 Generate code to take a break exception rather than a trap 11939 exception when an error is detected. This is the default. 11940 11941 `-mpdr' 11942 `-mno-pdr' 11943 Control generation of `.pdr' sections. Off by default on IRIX, on 11944 elsewhere. 11945 11946 `-mshared' 11947 `-mno-shared' 11948 When generating code using the Unix calling conventions (selected 11949 by `-KPIC' or `-mcall_shared'), gas will normally generate code 11950 which can go into a shared library. The `-mno-shared' option 11951 tells gas to generate code which uses the calling convention, but 11952 can not go into a shared library. The resulting code is slightly 11953 more efficient. This option only affects the handling of the 11954 `.cpload' and `.cpsetup' pseudo-ops. 11955 11956 11957 File: as.info, Node: MIPS Object, Next: MIPS Stabs, Prev: MIPS Opts, Up: MIPS-Dependent 11958 11959 9.22.2 MIPS ECOFF object code 11960 ----------------------------- 11961 11962 Assembling for a MIPS ECOFF target supports some additional sections 11963 besides the usual `.text', `.data' and `.bss'. The additional sections 11964 are `.rdata', used for read-only data, `.sdata', used for small data, 11965 and `.sbss', used for small common objects. 11966 11967 When assembling for ECOFF, the assembler uses the `$gp' (`$28') 11968 register to form the address of a "small object". Any object in the 11969 `.sdata' or `.sbss' sections is considered "small" in this sense. For 11970 external objects, or for objects in the `.bss' section, you can use the 11971 `gcc' `-G' option to control the size of objects addressed via `$gp'; 11972 the default value is 8, meaning that a reference to any object eight 11973 bytes or smaller uses `$gp'. Passing `-G 0' to `as' prevents it from 11974 using the `$gp' register on the basis of object size (but the assembler 11975 uses `$gp' for objects in `.sdata' or `sbss' in any case). The size of 11976 an object in the `.bss' section is set by the `.comm' or `.lcomm' 11977 directive that defines it. The size of an external object may be set 11978 with the `.extern' directive. For example, `.extern sym,4' declares 11979 that the object at `sym' is 4 bytes in length, whie leaving `sym' 11980 otherwise undefined. 11981 11982 Using small ECOFF objects requires linker support, and assumes that 11983 the `$gp' register is correctly initialized (normally done 11984 automatically by the startup code). MIPS ECOFF assembly code must not 11985 modify the `$gp' register. 11986 11987 11988 File: as.info, Node: MIPS Stabs, Next: MIPS ISA, Prev: MIPS Object, Up: MIPS-Dependent 11989 11990 9.22.3 Directives for debugging information 11991 ------------------------------------------- 11992 11993 MIPS ECOFF `as' supports several directives used for generating 11994 debugging information which are not support by traditional MIPS 11995 assemblers. These are `.def', `.endef', `.dim', `.file', `.scl', 11996 `.size', `.tag', `.type', `.val', `.stabd', `.stabn', and `.stabs'. 11997 The debugging information generated by the three `.stab' directives can 11998 only be read by GDB, not by traditional MIPS debuggers (this 11999 enhancement is required to fully support C++ debugging). These 12000 directives are primarily used by compilers, not assembly language 12001 programmers! 12002 12003 12004 File: as.info, Node: MIPS symbol sizes, Next: MIPS autoextend, Prev: MIPS ISA, Up: MIPS-Dependent 12005 12006 9.22.4 Directives to override the size of symbols 12007 ------------------------------------------------- 12008 12009 The n64 ABI allows symbols to have any 64-bit value. Although this 12010 provides a great deal of flexibility, it means that some macros have 12011 much longer expansions than their 32-bit counterparts. For example, 12012 the non-PIC expansion of `dla $4,sym' is usually: 12013 12014 lui $4,%highest(sym) 12015 lui $1,%hi(sym) 12016 daddiu $4,$4,%higher(sym) 12017 daddiu $1,$1,%lo(sym) 12018 dsll32 $4,$4,0 12019 daddu $4,$4,$1 12020 12021 whereas the 32-bit expansion is simply: 12022 12023 lui $4,%hi(sym) 12024 daddiu $4,$4,%lo(sym) 12025 12026 n64 code is sometimes constructed in such a way that all symbolic 12027 constants are known to have 32-bit values, and in such cases, it's 12028 preferable to use the 32-bit expansion instead of the 64-bit expansion. 12029 12030 You can use the `.set sym32' directive to tell the assembler that, 12031 from this point on, all expressions of the form `SYMBOL' or `SYMBOL + 12032 OFFSET' have 32-bit values. For example: 12033 12034 .set sym32 12035 dla $4,sym 12036 lw $4,sym+16 12037 sw $4,sym+0x8000($4) 12038 12039 will cause the assembler to treat `sym', `sym+16' and `sym+0x8000' 12040 as 32-bit values. The handling of non-symbolic addresses is not 12041 affected. 12042 12043 The directive `.set nosym32' ends a `.set sym32' block and reverts 12044 to the normal behavior. It is also possible to change the symbol size 12045 using the command-line options `-msym32' and `-mno-sym32'. 12046 12047 These options and directives are always accepted, but at present, 12048 they have no effect for anything other than n64. 12049 12050 12051 File: as.info, Node: MIPS ISA, Next: MIPS symbol sizes, Prev: MIPS Stabs, Up: MIPS-Dependent 12052 12053 9.22.5 Directives to override the ISA level 12054 ------------------------------------------- 12055 12056 GNU `as' supports an additional directive to change the MIPS 12057 Instruction Set Architecture level on the fly: `.set mipsN'. N should 12058 be a number from 0 to 5, or 32, 32r2, 64 or 64r2. The values other 12059 than 0 make the assembler accept instructions for the corresponding ISA 12060 level, from that point on in the assembly. `.set mipsN' affects not 12061 only which instructions are permitted, but also how certain macros are 12062 expanded. `.set mips0' restores the ISA level to its original level: 12063 either the level you selected with command line options, or the default 12064 for your configuration. You can use this feature to permit specific 12065 MIPS3 instructions while assembling in 32 bit mode. Use this directive 12066 with care! 12067 12068 The `.set arch=CPU' directive provides even finer control. It 12069 changes the effective CPU target and allows the assembler to use 12070 instructions specific to a particular CPU. All CPUs supported by the 12071 `-march' command line option are also selectable by this directive. 12072 The original value is restored by `.set arch=default'. 12073 12074 The directive `.set mips16' puts the assembler into MIPS 16 mode, in 12075 which it will assemble instructions for the MIPS 16 processor. Use 12076 `.set nomips16' to return to normal 32 bit mode. 12077 12078 Traditional MIPS assemblers do not support this directive. 12079 12080 12081 File: as.info, Node: MIPS autoextend, Next: MIPS insn, Prev: MIPS symbol sizes, Up: MIPS-Dependent 12082 12083 9.22.6 Directives for extending MIPS 16 bit instructions 12084 -------------------------------------------------------- 12085 12086 By default, MIPS 16 instructions are automatically extended to 32 bits 12087 when necessary. The directive `.set noautoextend' will turn this off. 12088 When `.set noautoextend' is in effect, any 32 bit instruction must be 12089 explicitly extended with the `.e' modifier (e.g., `li.e $4,1000'). The 12090 directive `.set autoextend' may be used to once again automatically 12091 extend instructions when necessary. 12092 12093 This directive is only meaningful when in MIPS 16 mode. Traditional 12094 MIPS assemblers do not support this directive. 12095 12096 12097 File: as.info, Node: MIPS insn, Next: MIPS option stack, Prev: MIPS autoextend, Up: MIPS-Dependent 12098 12099 9.22.7 Directive to mark data as an instruction 12100 ----------------------------------------------- 12101 12102 The `.insn' directive tells `as' that the following data is actually 12103 instructions. This makes a difference in MIPS 16 mode: when loading 12104 the address of a label which precedes instructions, `as' automatically 12105 adds 1 to the value, so that jumping to the loaded address will do the 12106 right thing. 12107 12108 12109 File: as.info, Node: MIPS option stack, Next: MIPS ASE instruction generation overrides, Prev: MIPS insn, Up: MIPS-Dependent 12110 12111 9.22.8 Directives to save and restore options 12112 --------------------------------------------- 12113 12114 The directives `.set push' and `.set pop' may be used to save and 12115 restore the current settings for all the options which are controlled 12116 by `.set'. The `.set push' directive saves the current settings on a 12117 stack. The `.set pop' directive pops the stack and restores the 12118 settings. 12119 12120 These directives can be useful inside an macro which must change an 12121 option such as the ISA level or instruction reordering but does not want 12122 to change the state of the code which invoked the macro. 12123 12124 Traditional MIPS assemblers do not support these directives. 12125 12126 12127 File: as.info, Node: MIPS ASE instruction generation overrides, Next: MIPS floating-point, Prev: MIPS option stack, Up: MIPS-Dependent 12128 12129 9.22.9 Directives to control generation of MIPS ASE instructions 12130 ---------------------------------------------------------------- 12131 12132 The directive `.set mips3d' makes the assembler accept instructions 12133 from the MIPS-3D Application Specific Extension from that point on in 12134 the assembly. The `.set nomips3d' directive prevents MIPS-3D 12135 instructions from being accepted. 12136 12137 The directive `.set smartmips' makes the assembler accept 12138 instructions from the SmartMIPS Application Specific Extension to the 12139 MIPS32 ISA from that point on in the assembly. The `.set nosmartmips' 12140 directive prevents SmartMIPS instructions from being accepted. 12141 12142 The directive `.set mdmx' makes the assembler accept instructions 12143 from the MDMX Application Specific Extension from that point on in the 12144 assembly. The `.set nomdmx' directive prevents MDMX instructions from 12145 being accepted. 12146 12147 The directive `.set dsp' makes the assembler accept instructions 12148 from the DSP Release 1 Application Specific Extension from that point 12149 on in the assembly. The `.set nodsp' directive prevents DSP Release 1 12150 instructions from being accepted. 12151 12152 The directive `.set dspr2' makes the assembler accept instructions 12153 from the DSP Release 2 Application Specific Extension from that point 12154 on in the assembly. This dirctive implies `.set dsp'. The `.set 12155 nodspr2' directive prevents DSP Release 2 instructions from being 12156 accepted. 12157 12158 The directive `.set mt' makes the assembler accept instructions from 12159 the MT Application Specific Extension from that point on in the 12160 assembly. The `.set nomt' directive prevents MT instructions from 12161 being accepted. 12162 12163 Traditional MIPS assemblers do not support these directives. 12164 12165 12166 File: as.info, Node: MIPS floating-point, Prev: MIPS ASE instruction generation overrides, Up: MIPS-Dependent 12167 12168 9.22.10 Directives to override floating-point options 12169 ----------------------------------------------------- 12170 12171 The directives `.set softfloat' and `.set hardfloat' provide finer 12172 control of disabling and enabling float-point instructions. These 12173 directives always override the default (that hard-float instructions 12174 are accepted) or the command-line options (`-msoft-float' and 12175 `-mhard-float'). 12176 12177 The directives `.set singlefloat' and `.set doublefloat' provide 12178 finer control of disabling and enabling double-precision float-point 12179 operations. These directives always override the default (that 12180 double-precision operations are accepted) or the command-line options 12181 (`-msingle-float' and `-mdouble-float'). 12182 12183 Traditional MIPS assemblers do not support these directives. 12184 12185 12186 File: as.info, Node: MMIX-Dependent, Next: MSP430-Dependent, Prev: MIPS-Dependent, Up: Machine Dependencies 12187 12188 9.23 MMIX Dependent Features 12189 ============================ 12190 12191 * Menu: 12192 12193 * MMIX-Opts:: Command-line Options 12194 * MMIX-Expand:: Instruction expansion 12195 * MMIX-Syntax:: Syntax 12196 * MMIX-mmixal:: Differences to `mmixal' syntax and semantics 12197 12198 12199 File: as.info, Node: MMIX-Opts, Next: MMIX-Expand, Up: MMIX-Dependent 12200 12201 9.23.1 Command-line Options 12202 --------------------------- 12203 12204 The MMIX version of `as' has some machine-dependent options. 12205 12206 When `--fixed-special-register-names' is specified, only the register 12207 names specified in *Note MMIX-Regs:: are recognized in the instructions 12208 `PUT' and `GET'. 12209 12210 You can use the `--globalize-symbols' to make all symbols global. 12211 This option is useful when splitting up a `mmixal' program into several 12212 files. 12213 12214 The `--gnu-syntax' turns off most syntax compatibility with 12215 `mmixal'. Its usability is currently doubtful. 12216 12217 The `--relax' option is not fully supported, but will eventually make 12218 the object file prepared for linker relaxation. 12219 12220 If you want to avoid inadvertently calling a predefined symbol and 12221 would rather get an error, for example when using `as' with a compiler 12222 or other machine-generated code, specify `--no-predefined-syms'. This 12223 turns off built-in predefined definitions of all such symbols, 12224 including rounding-mode symbols, segment symbols, `BIT' symbols, and 12225 `TRAP' symbols used in `mmix' "system calls". It also turns off 12226 predefined special-register names, except when used in `PUT' and `GET' 12227 instructions. 12228 12229 By default, some instructions are expanded to fit the size of the 12230 operand or an external symbol (*note MMIX-Expand::). By passing 12231 `--no-expand', no such expansion will be done, instead causing errors 12232 at link time if the operand does not fit. 12233 12234 The `mmixal' documentation (*note mmixsite::) specifies that global 12235 registers allocated with the `GREG' directive (*note MMIX-greg::) and 12236 initialized to the same non-zero value, will refer to the same global 12237 register. This isn't strictly enforceable in `as' since the final 12238 addresses aren't known until link-time, but it will do an effort unless 12239 the `--no-merge-gregs' option is specified. (Register merging isn't 12240 yet implemented in `ld'.) 12241 12242 `as' will warn every time it expands an instruction to fit an 12243 operand unless the option `-x' is specified. It is believed that this 12244 behaviour is more useful than just mimicking `mmixal''s behaviour, in 12245 which instructions are only expanded if the `-x' option is specified, 12246 and assembly fails otherwise, when an instruction needs to be expanded. 12247 It needs to be kept in mind that `mmixal' is both an assembler and 12248 linker, while `as' will expand instructions that at link stage can be 12249 contracted. (Though linker relaxation isn't yet implemented in `ld'.) 12250 The option `-x' also imples `--linker-allocated-gregs'. 12251 12252 If instruction expansion is enabled, `as' can expand a `PUSHJ' 12253 instruction into a series of instructions. The shortest expansion is 12254 to not expand it, but just mark the call as redirectable to a stub, 12255 which `ld' creates at link-time, but only if the original `PUSHJ' 12256 instruction is found not to reach the target. The stub consists of the 12257 necessary instructions to form a jump to the target. This happens if 12258 `as' can assert that the `PUSHJ' instruction can reach such a stub. 12259 The option `--no-pushj-stubs' disables this shorter expansion, and the 12260 longer series of instructions is then created at assembly-time. The 12261 option `--no-stubs' is a synonym, intended for compatibility with 12262 future releases, where generation of stubs for other instructions may 12263 be implemented. 12264 12265 Usually a two-operand-expression (*note GREG-base::) without a 12266 matching `GREG' directive is treated as an error by `as'. When the 12267 option `--linker-allocated-gregs' is in effect, they are instead passed 12268 through to the linker, which will allocate as many global registers as 12269 is needed. 12270 12271 12272 File: as.info, Node: MMIX-Expand, Next: MMIX-Syntax, Prev: MMIX-Opts, Up: MMIX-Dependent 12273 12274 9.23.2 Instruction expansion 12275 ---------------------------- 12276 12277 When `as' encounters an instruction with an operand that is either not 12278 known or does not fit the operand size of the instruction, `as' (and 12279 `ld') will expand the instruction into a sequence of instructions 12280 semantically equivalent to the operand fitting the instruction. 12281 Expansion will take place for the following instructions: 12282 12283 `GETA' 12284 Expands to a sequence of four instructions: `SETL', `INCML', 12285 `INCMH' and `INCH'. The operand must be a multiple of four. 12286 12287 Conditional branches 12288 A branch instruction is turned into a branch with the complemented 12289 condition and prediction bit over five instructions; four 12290 instructions setting `$255' to the operand value, which like with 12291 `GETA' must be a multiple of four, and a final `GO $255,$255,0'. 12292 12293 `PUSHJ' 12294 Similar to expansion for conditional branches; four instructions 12295 set `$255' to the operand value, followed by a `PUSHGO 12296 $255,$255,0'. 12297 12298 `JMP' 12299 Similar to conditional branches and `PUSHJ'. The final instruction 12300 is `GO $255,$255,0'. 12301 12302 The linker `ld' is expected to shrink these expansions for code 12303 assembled with `--relax' (though not currently implemented). 12304 12305 12306 File: as.info, Node: MMIX-Syntax, Next: MMIX-mmixal, Prev: MMIX-Expand, Up: MMIX-Dependent 12307 12308 9.23.3 Syntax 12309 ------------- 12310 12311 The assembly syntax is supposed to be upward compatible with that 12312 described in Sections 1.3 and 1.4 of `The Art of Computer Programming, 12313 Volume 1'. Draft versions of those chapters as well as other MMIX 12314 information is located at 12315 `http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html'. Most code 12316 examples from the mmixal package located there should work unmodified 12317 when assembled and linked as single files, with a few noteworthy 12318 exceptions (*note MMIX-mmixal::). 12319 12320 Before an instruction is emitted, the current location is aligned to 12321 the next four-byte boundary. If a label is defined at the beginning of 12322 the line, its value will be the aligned value. 12323 12324 In addition to the traditional hex-prefix `0x', a hexadecimal number 12325 can also be specified by the prefix character `#'. 12326 12327 After all operands to an MMIX instruction or directive have been 12328 specified, the rest of the line is ignored, treated as a comment. 12329 12330 * Menu: 12331 12332 * MMIX-Chars:: Special Characters 12333 * MMIX-Symbols:: Symbols 12334 * MMIX-Regs:: Register Names 12335 * MMIX-Pseudos:: Assembler Directives 12336 12337 12338 File: as.info, Node: MMIX-Chars, Next: MMIX-Symbols, Up: MMIX-Syntax 12339 12340 9.23.3.1 Special Characters 12341 ........................... 12342 12343 The characters `*' and `#' are line comment characters; each start a 12344 comment at the beginning of a line, but only at the beginning of a 12345 line. A `#' prefixes a hexadecimal number if found elsewhere on a line. 12346 12347 Two other characters, `%' and `!', each start a comment anywhere on 12348 the line. Thus you can't use the `modulus' and `not' operators in 12349 expressions normally associated with these two characters. 12350 12351 A `;' is a line separator, treated as a new-line, so separate 12352 instructions can be specified on a single line. 12353 12354 12355 File: as.info, Node: MMIX-Symbols, Next: MMIX-Regs, Prev: MMIX-Chars, Up: MMIX-Syntax 12356 12357 9.23.3.2 Symbols 12358 ................ 12359 12360 The character `:' is permitted in identifiers. There are two 12361 exceptions to it being treated as any other symbol character: if a 12362 symbol begins with `:', it means that the symbol is in the global 12363 namespace and that the current prefix should not be prepended to that 12364 symbol (*note MMIX-prefix::). The `:' is then not considered part of 12365 the symbol. For a symbol in the label position (first on a line), a `:' 12366 at the end of a symbol is silently stripped off. A label is permitted, 12367 but not required, to be followed by a `:', as with many other assembly 12368 formats. 12369 12370 The character `@' in an expression, is a synonym for `.', the 12371 current location. 12372 12373 In addition to the common forward and backward local symbol formats 12374 (*note Symbol Names::), they can be specified with upper-case `B' and 12375 `F', as in `8B' and `9F'. A local label defined for the current 12376 position is written with a `H' appended to the number: 12377 3H LDB $0,$1,2 12378 This and traditional local-label formats cannot be mixed: a label 12379 must be defined and referred to using the same format. 12380 12381 There's a minor caveat: just as for the ordinary local symbols, the 12382 local symbols are translated into ordinary symbols using control 12383 characters are to hide the ordinal number of the symbol. 12384 Unfortunately, these symbols are not translated back in error messages. 12385 Thus you may see confusing error messages when local symbols are used. 12386 Control characters `\003' (control-C) and `\004' (control-D) are used 12387 for the MMIX-specific local-symbol syntax. 12388 12389 The symbol `Main' is handled specially; it is always global. 12390 12391 By defining the symbols `__.MMIX.start..text' and 12392 `__.MMIX.start..data', the address of respectively the `.text' and 12393 `.data' segments of the final program can be defined, though when 12394 linking more than one object file, the code or data in the object file 12395 containing the symbol is not guaranteed to be start at that position; 12396 just the final executable. *Note MMIX-loc::. 12397 12398 12399 File: as.info, Node: MMIX-Regs, Next: MMIX-Pseudos, Prev: MMIX-Symbols, Up: MMIX-Syntax 12400 12401 9.23.3.3 Register names 12402 ....................... 12403 12404 Local and global registers are specified as `$0' to `$255'. The 12405 recognized special register names are `rJ', `rA', `rB', `rC', `rD', 12406 `rE', `rF', `rG', `rH', `rI', `rK', `rL', `rM', `rN', `rO', `rP', `rQ', 12407 `rR', `rS', `rT', `rU', `rV', `rW', `rX', `rY', `rZ', `rBB', `rTT', 12408 `rWW', `rXX', `rYY' and `rZZ'. A leading `:' is optional for special 12409 register names. 12410 12411 Local and global symbols can be equated to register names and used in 12412 place of ordinary registers. 12413 12414 Similarly for special registers, local and global symbols can be 12415 used. Also, symbols equated from numbers and constant expressions are 12416 allowed in place of a special register, except when either of the 12417 options `--no-predefined-syms' and `--fixed-special-register-names' are 12418 specified. Then only the special register names above are allowed for 12419 the instructions having a special register operand; `GET' and `PUT'. 12420 12421 12422 File: as.info, Node: MMIX-Pseudos, Prev: MMIX-Regs, Up: MMIX-Syntax 12423 12424 9.23.3.4 Assembler Directives 12425 ............................. 12426 12427 `LOC' 12428 The `LOC' directive sets the current location to the value of the 12429 operand field, which may include changing sections. If the 12430 operand is a constant, the section is set to either `.data' if the 12431 value is `0x2000000000000000' or larger, else it is set to `.text'. 12432 Within a section, the current location may only be changed to 12433 monotonically higher addresses. A LOC expression must be a 12434 previously defined symbol or a "pure" constant. 12435 12436 An example, which sets the label PREV to the current location, and 12437 updates the current location to eight bytes forward: 12438 prev LOC @+8 12439 12440 When a LOC has a constant as its operand, a symbol 12441 `__.MMIX.start..text' or `__.MMIX.start..data' is defined 12442 depending on the address as mentioned above. Each such symbol is 12443 interpreted as special by the linker, locating the section at that 12444 address. Note that if multiple files are linked, the first object 12445 file with that section will be mapped to that address (not 12446 necessarily the file with the LOC definition). 12447 12448 `LOCAL' 12449 Example: 12450 LOCAL external_symbol 12451 LOCAL 42 12452 .local asymbol 12453 12454 This directive-operation generates a link-time assertion that the 12455 operand does not correspond to a global register. The operand is 12456 an expression that at link-time resolves to a register symbol or a 12457 number. A number is treated as the register having that number. 12458 There is one restriction on the use of this directive: the 12459 pseudo-directive must be placed in a section with contents, code 12460 or data. 12461 12462 `IS' 12463 The `IS' directive: 12464 asymbol IS an_expression 12465 sets the symbol `asymbol' to `an_expression'. A symbol may not be 12466 set more than once using this directive. Local labels may be set 12467 using this directive, for example: 12468 5H IS @+4 12469 12470 `GREG' 12471 This directive reserves a global register, gives it an initial 12472 value and optionally gives it a symbolic name. Some examples: 12473 12474 areg GREG 12475 breg GREG data_value 12476 GREG data_buffer 12477 .greg creg, another_data_value 12478 12479 The symbolic register name can be used in place of a (non-special) 12480 register. If a value isn't provided, it defaults to zero. Unless 12481 the option `--no-merge-gregs' is specified, non-zero registers 12482 allocated with this directive may be eliminated by `as'; another 12483 register with the same value used in its place. Any of the 12484 instructions `CSWAP', `GO', `LDA', `LDBU', `LDB', `LDHT', `LDOU', 12485 `LDO', `LDSF', `LDTU', `LDT', `LDUNC', `LDVTS', `LDWU', `LDW', 12486 `PREGO', `PRELD', `PREST', `PUSHGO', `STBU', `STB', `STCO', `STHT', 12487 `STOU', `STSF', `STTU', `STT', `STUNC', `SYNCD', `SYNCID', can 12488 have a value nearby an initial value in place of its second and 12489 third operands. Here, "nearby" is defined as within the range 12490 0...255 from the initial value of such an allocated register. 12491 12492 buffer1 BYTE 0,0,0,0,0 12493 buffer2 BYTE 0,0,0,0,0 12494 ... 12495 GREG buffer1 12496 LDOU $42,buffer2 12497 In the example above, the `Y' field of the `LDOUI' instruction 12498 (LDOU with a constant Z) will be replaced with the global register 12499 allocated for `buffer1', and the `Z' field will have the value 5, 12500 the offset from `buffer1' to `buffer2'. The result is equivalent 12501 to this code: 12502 buffer1 BYTE 0,0,0,0,0 12503 buffer2 BYTE 0,0,0,0,0 12504 ... 12505 tmpreg GREG buffer1 12506 LDOU $42,tmpreg,(buffer2-buffer1) 12507 12508 Global registers allocated with this directive are allocated in 12509 order higher-to-lower within a file. Other than that, the exact 12510 order of register allocation and elimination is undefined. For 12511 example, the order is undefined when more than one file with such 12512 directives are linked together. With the options `-x' and 12513 `--linker-allocated-gregs', `GREG' directives for two-operand 12514 cases like the one mentioned above can be omitted. Sufficient 12515 global registers will then be allocated by the linker. 12516 12517 `BYTE' 12518 The `BYTE' directive takes a series of operands separated by a 12519 comma. If an operand is a string (*note Strings::), each 12520 character of that string is emitted as a byte. Other operands 12521 must be constant expressions without forward references, in the 12522 range 0...255. If you need operands having expressions with 12523 forward references, use `.byte' (*note Byte::). An operand can be 12524 omitted, defaulting to a zero value. 12525 12526 `WYDE' 12527 `TETRA' 12528 `OCTA' 12529 The directives `WYDE', `TETRA' and `OCTA' emit constants of two, 12530 four and eight bytes size respectively. Before anything else 12531 happens for the directive, the current location is aligned to the 12532 respective constant-size boundary. If a label is defined at the 12533 beginning of the line, its value will be that after the alignment. 12534 A single operand can be omitted, defaulting to a zero value 12535 emitted for the directive. Operands can be expressed as strings 12536 (*note Strings::), in which case each character in the string is 12537 emitted as a separate constant of the size indicated by the 12538 directive. 12539 12540 `PREFIX' 12541 The `PREFIX' directive sets a symbol name prefix to be prepended to 12542 all symbols (except local symbols, *note MMIX-Symbols::), that are 12543 not prefixed with `:', until the next `PREFIX' directive. Such 12544 prefixes accumulate. For example, 12545 PREFIX a 12546 PREFIX b 12547 c IS 0 12548 defines a symbol `abc' with the value 0. 12549 12550 `BSPEC' 12551 `ESPEC' 12552 A pair of `BSPEC' and `ESPEC' directives delimit a section of 12553 special contents (without specified semantics). Example: 12554 BSPEC 42 12555 TETRA 1,2,3 12556 ESPEC 12557 The single operand to `BSPEC' must be number in the range 0...255. 12558 The `BSPEC' number 80 is used by the GNU binutils implementation. 12559 12560 12561 File: as.info, Node: MMIX-mmixal, Prev: MMIX-Syntax, Up: MMIX-Dependent 12562 12563 9.23.4 Differences to `mmixal' 12564 ------------------------------ 12565 12566 The binutils `as' and `ld' combination has a few differences in 12567 function compared to `mmixal' (*note mmixsite::). 12568 12569 The replacement of a symbol with a GREG-allocated register (*note 12570 GREG-base::) is not handled the exactly same way in `as' as in 12571 `mmixal'. This is apparent in the `mmixal' example file `inout.mms', 12572 where different registers with different offsets, eventually yielding 12573 the same address, are used in the first instruction. This type of 12574 difference should however not affect the function of any program unless 12575 it has specific assumptions about the allocated register number. 12576 12577 Line numbers (in the `mmo' object format) are currently not 12578 supported. 12579 12580 Expression operator precedence is not that of mmixal: operator 12581 precedence is that of the C programming language. It's recommended to 12582 use parentheses to explicitly specify wanted operator precedence 12583 whenever more than one type of operators are used. 12584 12585 The serialize unary operator `&', the fractional division operator 12586 `//', the logical not operator `!' and the modulus operator `%' are not 12587 available. 12588 12589 Symbols are not global by default, unless the option 12590 `--globalize-symbols' is passed. Use the `.global' directive to 12591 globalize symbols (*note Global::). 12592 12593 Operand syntax is a bit stricter with `as' than `mmixal'. For 12594 example, you can't say `addu 1,2,3', instead you must write `addu 12595 $1,$2,3'. 12596 12597 You can't LOC to a lower address than those already visited (i.e., 12598 "backwards"). 12599 12600 A LOC directive must come before any emitted code. 12601 12602 Predefined symbols are visible as file-local symbols after use. (In 12603 the ELF file, that is--the linked mmo file has no notion of a file-local 12604 symbol.) 12605 12606 Some mapping of constant expressions to sections in LOC expressions 12607 is attempted, but that functionality is easily confused and should be 12608 avoided unless compatibility with `mmixal' is required. A LOC 12609 expression to `0x2000000000000000' or higher, maps to the `.data' 12610 section and lower addresses map to the `.text' section (*note 12611 MMIX-loc::). 12612 12613 The code and data areas are each contiguous. Sparse programs with 12614 far-away LOC directives will take up the same amount of space as a 12615 contiguous program with zeros filled in the gaps between the LOC 12616 directives. If you need sparse programs, you might try and get the 12617 wanted effect with a linker script and splitting up the code parts into 12618 sections (*note Section::). Assembly code for this, to be compatible 12619 with `mmixal', would look something like: 12620 .if 0 12621 LOC away_expression 12622 .else 12623 .section away,"ax" 12624 .fi 12625 `as' will not execute the LOC directive and `mmixal' ignores the 12626 lines with `.'. This construct can be used generally to help 12627 compatibility. 12628 12629 Symbols can't be defined twice-not even to the same value. 12630 12631 Instruction mnemonics are recognized case-insensitive, though the 12632 `IS' and `GREG' pseudo-operations must be specified in upper-case 12633 characters. 12634 12635 There's no unicode support. 12636 12637 The following is a list of programs in `mmix.tar.gz', available at 12638 `http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html', last 12639 checked with the version dated 2001-08-25 (md5sum 12640 c393470cfc86fac040487d22d2bf0172) that assemble with `mmixal' but do 12641 not assemble with `as': 12642 12643 `silly.mms' 12644 LOC to a previous address. 12645 12646 `sim.mms' 12647 Redefines symbol `Done'. 12648 12649 `test.mms' 12650 Uses the serial operator `&'. 12651 12652 12653 File: as.info, Node: MSP430-Dependent, Next: SH-Dependent, Prev: MMIX-Dependent, Up: Machine Dependencies 12654 12655 9.24 MSP 430 Dependent Features 12656 =============================== 12657 12658 * Menu: 12659 12660 * MSP430 Options:: Options 12661 * MSP430 Syntax:: Syntax 12662 * MSP430 Floating Point:: Floating Point 12663 * MSP430 Directives:: MSP 430 Machine Directives 12664 * MSP430 Opcodes:: Opcodes 12665 * MSP430 Profiling Capability:: Profiling Capability 12666 12667 12668 File: as.info, Node: MSP430 Options, Next: MSP430 Syntax, Up: MSP430-Dependent 12669 12670 9.24.1 Options 12671 -------------- 12672 12673 `-m' 12674 select the mpu arch. Currently has no effect. 12675 12676 `-mP' 12677 enables polymorph instructions handler. 12678 12679 `-mQ' 12680 enables relaxation at assembly time. DANGEROUS! 12681 12682 12683 12684 File: as.info, Node: MSP430 Syntax, Next: MSP430 Floating Point, Prev: MSP430 Options, Up: MSP430-Dependent 12685 12686 9.24.2 Syntax 12687 ------------- 12688 12689 * Menu: 12690 12691 * MSP430-Macros:: Macros 12692 * MSP430-Chars:: Special Characters 12693 * MSP430-Regs:: Register Names 12694 * MSP430-Ext:: Assembler Extensions 12695 12696 12697 File: as.info, Node: MSP430-Macros, Next: MSP430-Chars, Up: MSP430 Syntax 12698 12699 9.24.2.1 Macros 12700 ............... 12701 12702 The macro syntax used on the MSP 430 is like that described in the MSP 12703 430 Family Assembler Specification. Normal `as' macros should still 12704 work. 12705 12706 Additional built-in macros are: 12707 12708 `llo(exp)' 12709 Extracts least significant word from 32-bit expression 'exp'. 12710 12711 `lhi(exp)' 12712 Extracts most significant word from 32-bit expression 'exp'. 12713 12714 `hlo(exp)' 12715 Extracts 3rd word from 64-bit expression 'exp'. 12716 12717 `hhi(exp)' 12718 Extracts 4rd word from 64-bit expression 'exp'. 12719 12720 12721 They normally being used as an immediate source operand. 12722 mov #llo(1), r10 ; == mov #1, r10 12723 mov #lhi(1), r10 ; == mov #0, r10 12724 12725 12726 File: as.info, Node: MSP430-Chars, Next: MSP430-Regs, Prev: MSP430-Macros, Up: MSP430 Syntax 12727 12728 9.24.2.2 Special Characters 12729 ........................... 12730 12731 `;' is the line comment character. 12732 12733 The character `$' in jump instructions indicates current location and 12734 implemented only for TI syntax compatibility. 12735 12736 12737 File: as.info, Node: MSP430-Regs, Next: MSP430-Ext, Prev: MSP430-Chars, Up: MSP430 Syntax 12738 12739 9.24.2.3 Register Names 12740 ....................... 12741 12742 General-purpose registers are represented by predefined symbols of the 12743 form `rN' (for global registers), where N represents a number between 12744 `0' and `15'. The leading letters may be in either upper or lower 12745 case; for example, `r13' and `R7' are both valid register names. 12746 12747 Register names `PC', `SP' and `SR' cannot be used as register names 12748 and will be treated as variables. Use `r0', `r1', and `r2' instead. 12749 12750 12751 File: as.info, Node: MSP430-Ext, Prev: MSP430-Regs, Up: MSP430 Syntax 12752 12753 9.24.2.4 Assembler Extensions 12754 ............................. 12755 12756 `@rN' 12757 As destination operand being treated as `0(rn)' 12758 12759 `0(rN)' 12760 As source operand being treated as `@rn' 12761 12762 `jCOND +N' 12763 Skips next N bytes followed by jump instruction and equivalent to 12764 `jCOND $+N+2' 12765 12766 12767 Also, there are some instructions, which cannot be found in other 12768 assemblers. These are branch instructions, which has different opcodes 12769 upon jump distance. They all got PC relative addressing mode. 12770 12771 `beq label' 12772 A polymorph instruction which is `jeq label' in case if jump 12773 distance within allowed range for cpu's jump instruction. If not, 12774 this unrolls into a sequence of 12775 jne $+6 12776 br label 12777 12778 `bne label' 12779 A polymorph instruction which is `jne label' or `jeq +4; br label' 12780 12781 `blt label' 12782 A polymorph instruction which is `jl label' or `jge +4; br label' 12783 12784 `bltn label' 12785 A polymorph instruction which is `jn label' or `jn +2; jmp +4; br 12786 label' 12787 12788 `bltu label' 12789 A polymorph instruction which is `jlo label' or `jhs +2; br label' 12790 12791 `bge label' 12792 A polymorph instruction which is `jge label' or `jl +4; br label' 12793 12794 `bgeu label' 12795 A polymorph instruction which is `jhs label' or `jlo +4; br label' 12796 12797 `bgt label' 12798 A polymorph instruction which is `jeq +2; jge label' or `jeq +6; 12799 jl +4; br label' 12800 12801 `bgtu label' 12802 A polymorph instruction which is `jeq +2; jhs label' or `jeq +6; 12803 jlo +4; br label' 12804 12805 `bleu label' 12806 A polymorph instruction which is `jeq label; jlo label' or `jeq 12807 +2; jhs +4; br label' 12808 12809 `ble label' 12810 A polymorph instruction which is `jeq label; jl label' or `jeq 12811 +2; jge +4; br label' 12812 12813 `jump label' 12814 A polymorph instruction which is `jmp label' or `br label' 12815 12816 12817 File: as.info, Node: MSP430 Floating Point, Next: MSP430 Directives, Prev: MSP430 Syntax, Up: MSP430-Dependent 12818 12819 9.24.3 Floating Point 12820 --------------------- 12821 12822 The MSP 430 family uses IEEE 32-bit floating-point numbers. 12823 12824 12825 File: as.info, Node: MSP430 Directives, Next: MSP430 Opcodes, Prev: MSP430 Floating Point, Up: MSP430-Dependent 12826 12827 9.24.4 MSP 430 Machine Directives 12828 --------------------------------- 12829 12830 `.file' 12831 This directive is ignored; it is accepted for compatibility with 12832 other MSP 430 assemblers. 12833 12834 _Warning:_ in other versions of the GNU assembler, `.file' is 12835 used for the directive called `.app-file' in the MSP 430 12836 support. 12837 12838 `.line' 12839 This directive is ignored; it is accepted for compatibility with 12840 other MSP 430 assemblers. 12841 12842 `.arch' 12843 Currently this directive is ignored; it is accepted for 12844 compatibility with other MSP 430 assemblers. 12845 12846 `.profiler' 12847 This directive instructs assembler to add new profile entry to the 12848 object file. 12849 12850 12851 12852 File: as.info, Node: MSP430 Opcodes, Next: MSP430 Profiling Capability, Prev: MSP430 Directives, Up: MSP430-Dependent 12853 12854 9.24.5 Opcodes 12855 -------------- 12856 12857 `as' implements all the standard MSP 430 opcodes. No additional 12858 pseudo-instructions are needed on this family. 12859 12860 For information on the 430 machine instruction set, see `MSP430 12861 User's Manual, document slau049d', Texas Instrument, Inc. 12862 12863 12864 File: as.info, Node: MSP430 Profiling Capability, Prev: MSP430 Opcodes, Up: MSP430-Dependent 12865 12866 9.24.6 Profiling Capability 12867 --------------------------- 12868 12869 It is a performance hit to use gcc's profiling approach for this tiny 12870 target. Even more - jtag hardware facility does not perform any 12871 profiling functions. However we've got gdb's built-in simulator where 12872 we can do anything. 12873 12874 We define new section `.profiler' which holds all profiling 12875 information. We define new pseudo operation `.profiler' which will 12876 instruct assembler to add new profile entry to the object file. Profile 12877 should take place at the present address. 12878 12879 Pseudo operation format: 12880 12881 `.profiler flags,function_to_profile [, cycle_corrector, extra]' 12882 12883 where: 12884 12885 `flags' is a combination of the following characters: 12886 12887 `s' 12888 function entry 12889 12890 `x' 12891 function exit 12892 12893 `i' 12894 function is in init section 12895 12896 `f' 12897 function is in fini section 12898 12899 `l' 12900 library call 12901 12902 `c' 12903 libc standard call 12904 12905 `d' 12906 stack value demand 12907 12908 `I' 12909 interrupt service routine 12910 12911 `P' 12912 prologue start 12913 12914 `p' 12915 prologue end 12916 12917 `E' 12918 epilogue start 12919 12920 `e' 12921 epilogue end 12922 12923 `j' 12924 long jump / sjlj unwind 12925 12926 `a' 12927 an arbitrary code fragment 12928 12929 `t' 12930 extra parameter saved (a constant value like frame size) 12931 12932 `function_to_profile' 12933 a function address 12934 12935 `cycle_corrector' 12936 a value which should be added to the cycle counter, zero if 12937 omitted. 12938 12939 `extra' 12940 any extra parameter, zero if omitted. 12941 12942 12943 For example: 12944 .global fxx 12945 .type fxx,@function 12946 fxx: 12947 .LFrameOffset_fxx=0x08 12948 .profiler "scdP", fxx ; function entry. 12949 ; we also demand stack value to be saved 12950 push r11 12951 push r10 12952 push r9 12953 push r8 12954 .profiler "cdpt",fxx,0, .LFrameOffset_fxx ; check stack value at this point 12955 ; (this is a prologue end) 12956 ; note, that spare var filled with 12957 ; the farme size 12958 mov r15,r8 12959 ... 12960 .profiler cdE,fxx ; check stack 12961 pop r8 12962 pop r9 12963 pop r10 12964 pop r11 12965 .profiler xcde,fxx,3 ; exit adds 3 to the cycle counter 12966 ret ; cause 'ret' insn takes 3 cycles 12967 12968 12969 File: as.info, Node: PDP-11-Dependent, Next: PJ-Dependent, Prev: SH64-Dependent, Up: Machine Dependencies 12970 12971 9.25 PDP-11 Dependent Features 12972 ============================== 12973 12974 * Menu: 12975 12976 * PDP-11-Options:: Options 12977 * PDP-11-Pseudos:: Assembler Directives 12978 * PDP-11-Syntax:: DEC Syntax versus BSD Syntax 12979 * PDP-11-Mnemonics:: Instruction Naming 12980 * PDP-11-Synthetic:: Synthetic Instructions 12981 12982 12983 File: as.info, Node: PDP-11-Options, Next: PDP-11-Pseudos, Up: PDP-11-Dependent 12984 12985 9.25.1 Options 12986 -------------- 12987 12988 The PDP-11 version of `as' has a rich set of machine dependent options. 12989 12990 9.25.1.1 Code Generation Options 12991 ................................ 12992 12993 `-mpic | -mno-pic' 12994 Generate position-independent (or position-dependent) code. 12995 12996 The default is to generate position-independent code. 12997 12998 9.25.1.2 Instruction Set Extension Options 12999 .......................................... 13000 13001 These options enables or disables the use of extensions over the base 13002 line instruction set as introduced by the first PDP-11 CPU: the KA11. 13003 Most options come in two variants: a `-m'EXTENSION that enables 13004 EXTENSION, and a `-mno-'EXTENSION that disables EXTENSION. 13005 13006 The default is to enable all extensions. 13007 13008 `-mall | -mall-extensions' 13009 Enable all instruction set extensions. 13010 13011 `-mno-extensions' 13012 Disable all instruction set extensions. 13013 13014 `-mcis | -mno-cis' 13015 Enable (or disable) the use of the commercial instruction set, 13016 which consists of these instructions: `ADDNI', `ADDN', `ADDPI', 13017 `ADDP', `ASHNI', `ASHN', `ASHPI', `ASHP', `CMPCI', `CMPC', 13018 `CMPNI', `CMPN', `CMPPI', `CMPP', `CVTLNI', `CVTLN', `CVTLPI', 13019 `CVTLP', `CVTNLI', `CVTNL', `CVTNPI', `CVTNP', `CVTPLI', `CVTPL', 13020 `CVTPNI', `CVTPN', `DIVPI', `DIVP', `L2DR', `L3DR', `LOCCI', 13021 `LOCC', `MATCI', `MATC', `MOVCI', `MOVC', `MOVRCI', `MOVRC', 13022 `MOVTCI', `MOVTC', `MULPI', `MULP', `SCANCI', `SCANC', `SKPCI', 13023 `SKPC', `SPANCI', `SPANC', `SUBNI', `SUBN', `SUBPI', and `SUBP'. 13024 13025 `-mcsm | -mno-csm' 13026 Enable (or disable) the use of the `CSM' instruction. 13027 13028 `-meis | -mno-eis' 13029 Enable (or disable) the use of the extended instruction set, which 13030 consists of these instructions: `ASHC', `ASH', `DIV', `MARK', 13031 `MUL', `RTT', `SOB' `SXT', and `XOR'. 13032 13033 `-mfis | -mkev11' 13034 `-mno-fis | -mno-kev11' 13035 Enable (or disable) the use of the KEV11 floating-point 13036 instructions: `FADD', `FDIV', `FMUL', and `FSUB'. 13037 13038 `-mfpp | -mfpu | -mfp-11' 13039 `-mno-fpp | -mno-fpu | -mno-fp-11' 13040 Enable (or disable) the use of FP-11 floating-point instructions: 13041 `ABSF', `ADDF', `CFCC', `CLRF', `CMPF', `DIVF', `LDCFF', `LDCIF', 13042 `LDEXP', `LDF', `LDFPS', `MODF', `MULF', `NEGF', `SETD', `SETF', 13043 `SETI', `SETL', `STCFF', `STCFI', `STEXP', `STF', `STFPS', `STST', 13044 `SUBF', and `TSTF'. 13045 13046 `-mlimited-eis | -mno-limited-eis' 13047 Enable (or disable) the use of the limited extended instruction 13048 set: `MARK', `RTT', `SOB', `SXT', and `XOR'. 13049 13050 The -mno-limited-eis options also implies -mno-eis. 13051 13052 `-mmfpt | -mno-mfpt' 13053 Enable (or disable) the use of the `MFPT' instruction. 13054 13055 `-mmultiproc | -mno-multiproc' 13056 Enable (or disable) the use of multiprocessor instructions: 13057 `TSTSET' and `WRTLCK'. 13058 13059 `-mmxps | -mno-mxps' 13060 Enable (or disable) the use of the `MFPS' and `MTPS' instructions. 13061 13062 `-mspl | -mno-spl' 13063 Enable (or disable) the use of the `SPL' instruction. 13064 13065 Enable (or disable) the use of the microcode instructions: `LDUB', 13066 `MED', and `XFC'. 13067 13068 9.25.1.3 CPU Model Options 13069 .......................... 13070 13071 These options enable the instruction set extensions supported by a 13072 particular CPU, and disables all other extensions. 13073 13074 `-mka11' 13075 KA11 CPU. Base line instruction set only. 13076 13077 `-mkb11' 13078 KB11 CPU. Enable extended instruction set and `SPL'. 13079 13080 `-mkd11a' 13081 KD11-A CPU. Enable limited extended instruction set. 13082 13083 `-mkd11b' 13084 KD11-B CPU. Base line instruction set only. 13085 13086 `-mkd11d' 13087 KD11-D CPU. Base line instruction set only. 13088 13089 `-mkd11e' 13090 KD11-E CPU. Enable extended instruction set, `MFPS', and `MTPS'. 13091 13092 `-mkd11f | -mkd11h | -mkd11q' 13093 KD11-F, KD11-H, or KD11-Q CPU. Enable limited extended 13094 instruction set, `MFPS', and `MTPS'. 13095 13096 `-mkd11k' 13097 KD11-K CPU. Enable extended instruction set, `LDUB', `MED', 13098 `MFPS', `MFPT', `MTPS', and `XFC'. 13099 13100 `-mkd11z' 13101 KD11-Z CPU. Enable extended instruction set, `CSM', `MFPS', 13102 `MFPT', `MTPS', and `SPL'. 13103 13104 `-mf11' 13105 F11 CPU. Enable extended instruction set, `MFPS', `MFPT', and 13106 `MTPS'. 13107 13108 `-mj11' 13109 J11 CPU. Enable extended instruction set, `CSM', `MFPS', `MFPT', 13110 `MTPS', `SPL', `TSTSET', and `WRTLCK'. 13111 13112 `-mt11' 13113 T11 CPU. Enable limited extended instruction set, `MFPS', and 13114 `MTPS'. 13115 13116 9.25.1.4 Machine Model Options 13117 .............................. 13118 13119 These options enable the instruction set extensions supported by a 13120 particular machine model, and disables all other extensions. 13121 13122 `-m11/03' 13123 Same as `-mkd11f'. 13124 13125 `-m11/04' 13126 Same as `-mkd11d'. 13127 13128 `-m11/05 | -m11/10' 13129 Same as `-mkd11b'. 13130 13131 `-m11/15 | -m11/20' 13132 Same as `-mka11'. 13133 13134 `-m11/21' 13135 Same as `-mt11'. 13136 13137 `-m11/23 | -m11/24' 13138 Same as `-mf11'. 13139 13140 `-m11/34' 13141 Same as `-mkd11e'. 13142 13143 `-m11/34a' 13144 Ame as `-mkd11e' `-mfpp'. 13145 13146 `-m11/35 | -m11/40' 13147 Same as `-mkd11a'. 13148 13149 `-m11/44' 13150 Same as `-mkd11z'. 13151 13152 `-m11/45 | -m11/50 | -m11/55 | -m11/70' 13153 Same as `-mkb11'. 13154 13155 `-m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94' 13156 Same as `-mj11'. 13157 13158 `-m11/60' 13159 Same as `-mkd11k'. 13160 13161 13162 File: as.info, Node: PDP-11-Pseudos, Next: PDP-11-Syntax, Prev: PDP-11-Options, Up: PDP-11-Dependent 13163 13164 9.25.2 Assembler Directives 13165 --------------------------- 13166 13167 The PDP-11 version of `as' has a few machine dependent assembler 13168 directives. 13169 13170 `.bss' 13171 Switch to the `bss' section. 13172 13173 `.even' 13174 Align the location counter to an even number. 13175 13176 13177 File: as.info, Node: PDP-11-Syntax, Next: PDP-11-Mnemonics, Prev: PDP-11-Pseudos, Up: PDP-11-Dependent 13178 13179 9.25.3 PDP-11 Assembly Language Syntax 13180 -------------------------------------- 13181 13182 `as' supports both DEC syntax and BSD syntax. The only difference is 13183 that in DEC syntax, a `#' character is used to denote an immediate 13184 constants, while in BSD syntax the character for this purpose is `$'. 13185 13186 general-purpose registers are named `r0' through `r7'. Mnemonic 13187 alternatives for `r6' and `r7' are `sp' and `pc', respectively. 13188 13189 Floating-point registers are named `ac0' through `ac3', or 13190 alternatively `fr0' through `fr3'. 13191 13192 Comments are started with a `#' or a `/' character, and extend to 13193 the end of the line. (FIXME: clash with immediates?) 13194 13195 13196 File: as.info, Node: PDP-11-Mnemonics, Next: PDP-11-Synthetic, Prev: PDP-11-Syntax, Up: PDP-11-Dependent 13197 13198 9.25.4 Instruction Naming 13199 ------------------------- 13200 13201 Some instructions have alternative names. 13202 13203 `BCC' 13204 `BHIS' 13205 13206 `BCS' 13207 `BLO' 13208 13209 `L2DR' 13210 `L2D' 13211 13212 `L3DR' 13213 `L3D' 13214 13215 `SYS' 13216 `TRAP' 13217 13218 13219 File: as.info, Node: PDP-11-Synthetic, Prev: PDP-11-Mnemonics, Up: PDP-11-Dependent 13220 13221 9.25.5 Synthetic Instructions 13222 ----------------------------- 13223 13224 The `JBR' and `J'CC synthetic instructions are not supported yet. 13225 13226 13227 File: as.info, Node: PJ-Dependent, Next: PPC-Dependent, Prev: PDP-11-Dependent, Up: Machine Dependencies 13228 13229 9.26 picoJava Dependent Features 13230 ================================ 13231 13232 * Menu: 13233 13234 * PJ Options:: Options 13235 13236 13237 File: as.info, Node: PJ Options, Up: PJ-Dependent 13238 13239 9.26.1 Options 13240 -------------- 13241 13242 `as' has two additional command-line options for the picoJava 13243 architecture. 13244 `-ml' 13245 This option selects little endian data output. 13246 13247 `-mb' 13248 This option selects big endian data output. 13249 13250 13251 File: as.info, Node: PPC-Dependent, Next: Sparc-Dependent, Prev: PJ-Dependent, Up: Machine Dependencies 13252 13253 9.27 PowerPC Dependent Features 13254 =============================== 13255 13256 * Menu: 13257 13258 * PowerPC-Opts:: Options 13259 * PowerPC-Pseudo:: PowerPC Assembler Directives 13260 13261 13262 File: as.info, Node: PowerPC-Opts, Next: PowerPC-Pseudo, Up: PPC-Dependent 13263 13264 9.27.1 Options 13265 -------------- 13266 13267 The PowerPC chip family includes several successive levels, using the 13268 same core instruction set, but including a few additional instructions 13269 at each level. There are exceptions to this however. For details on 13270 what instructions each variant supports, please see the chip's 13271 architecture reference manual. 13272 13273 The following table lists all available PowerPC options. 13274 13275 `-mpwrx | -mpwr2' 13276 Generate code for POWER/2 (RIOS2). 13277 13278 `-mpwr' 13279 Generate code for POWER (RIOS1) 13280 13281 `-m601' 13282 Generate code for PowerPC 601. 13283 13284 `-mppc, -mppc32, -m603, -m604' 13285 Generate code for PowerPC 603/604. 13286 13287 `-m403, -m405' 13288 Generate code for PowerPC 403/405. 13289 13290 `-m440' 13291 Generate code for PowerPC 440. BookE and some 405 instructions. 13292 13293 `-m7400, -m7410, -m7450, -m7455' 13294 Generate code for PowerPC 7400/7410/7450/7455. 13295 13296 `-m750cl' 13297 Generate code for PowerPC 750CL. 13298 13299 `-mppc64, -m620' 13300 Generate code for PowerPC 620/625/630. 13301 13302 `-me500, -me500x2' 13303 Generate code for Motorola e500 core complex. 13304 13305 `-mspe' 13306 Generate code for Motorola SPE instructions. 13307 13308 `-mppc64bridge' 13309 Generate code for PowerPC 64, including bridge insns. 13310 13311 `-mbooke64' 13312 Generate code for 64-bit BookE. 13313 13314 `-mbooke, mbooke32' 13315 Generate code for 32-bit BookE. 13316 13317 `-me300' 13318 Generate code for PowerPC e300 family. 13319 13320 `-maltivec' 13321 Generate code for processors with AltiVec instructions. 13322 13323 `-mvsx' 13324 Generate code for processors with Vector-Scalar (VSX) instructions. 13325 13326 `-mpower4' 13327 Generate code for Power4 architecture. 13328 13329 `-mpower5' 13330 Generate code for Power5 architecture. 13331 13332 `-mpower6' 13333 Generate code for Power6 architecture. 13334 13335 `-mpower7' 13336 Generate code for Power7 architecture. 13337 13338 `-mcell' 13339 Generate code for Cell Broadband Engine architecture. 13340 13341 `-mcom' 13342 Generate code Power/PowerPC common instructions. 13343 13344 `-many' 13345 Generate code for any architecture (PWR/PWRX/PPC). 13346 13347 `-mregnames' 13348 Allow symbolic names for registers. 13349 13350 `-mno-regnames' 13351 Do not allow symbolic names for registers. 13352 13353 `-mrelocatable' 13354 Support for GCC's -mrelocatable option. 13355 13356 `-mrelocatable-lib' 13357 Support for GCC's -mrelocatable-lib option. 13358 13359 `-memb' 13360 Set PPC_EMB bit in ELF flags. 13361 13362 `-mlittle, -mlittle-endian' 13363 Generate code for a little endian machine. 13364 13365 `-mbig, -mbig-endian' 13366 Generate code for a big endian machine. 13367 13368 `-msolaris' 13369 Generate code for Solaris. 13370 13371 `-mno-solaris' 13372 Do not generate code for Solaris. 13373 13374 13375 File: as.info, Node: PowerPC-Pseudo, Prev: PowerPC-Opts, Up: PPC-Dependent 13376 13377 9.27.2 PowerPC Assembler Directives 13378 ----------------------------------- 13379 13380 A number of assembler directives are available for PowerPC. The 13381 following table is far from complete. 13382 13383 `.machine "string"' 13384 This directive allows you to change the machine for which code is 13385 generated. `"string"' may be any of the -m cpu selection options 13386 (without the -m) enclosed in double quotes, `"push"', or `"pop"'. 13387 `.machine "push"' saves the currently selected cpu, which may be 13388 restored with `.machine "pop"'. 13389 13390 13391 File: as.info, Node: SH-Dependent, Next: SH64-Dependent, Prev: MSP430-Dependent, Up: Machine Dependencies 13392 13393 9.28 Renesas / SuperH SH Dependent Features 13394 =========================================== 13395 13396 * Menu: 13397 13398 * SH Options:: Options 13399 * SH Syntax:: Syntax 13400 * SH Floating Point:: Floating Point 13401 * SH Directives:: SH Machine Directives 13402 * SH Opcodes:: Opcodes 13403 13404 13405 File: as.info, Node: SH Options, Next: SH Syntax, Up: SH-Dependent 13406 13407 9.28.1 Options 13408 -------------- 13409 13410 `as' has following command-line options for the Renesas (formerly 13411 Hitachi) / SuperH SH family. 13412 13413 `--little' 13414 Generate little endian code. 13415 13416 `--big' 13417 Generate big endian code. 13418 13419 `--relax' 13420 Alter jump instructions for long displacements. 13421 13422 `--small' 13423 Align sections to 4 byte boundaries, not 16. 13424 13425 `--dsp' 13426 Enable sh-dsp insns, and disable sh3e / sh4 insns. 13427 13428 `--renesas' 13429 Disable optimization with section symbol for compatibility with 13430 Renesas assembler. 13431 13432 `--allow-reg-prefix' 13433 Allow '$' as a register name prefix. 13434 13435 `--isa=sh4 | sh4a' 13436 Specify the sh4 or sh4a instruction set. 13437 13438 `--isa=dsp' 13439 Enable sh-dsp insns, and disable sh3e / sh4 insns. 13440 13441 `--isa=fp' 13442 Enable sh2e, sh3e, sh4, and sh4a insn sets. 13443 13444 `--isa=all' 13445 Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets. 13446 13447 `-h-tick-hex' 13448 Support H'00 style hex constants in addition to 0x00 style. 13449 13450 13451 13452 File: as.info, Node: SH Syntax, Next: SH Floating Point, Prev: SH Options, Up: SH-Dependent 13453 13454 9.28.2 Syntax 13455 ------------- 13456 13457 * Menu: 13458 13459 * SH-Chars:: Special Characters 13460 * SH-Regs:: Register Names 13461 * SH-Addressing:: Addressing Modes 13462 13463 13464 File: as.info, Node: SH-Chars, Next: SH-Regs, Up: SH Syntax 13465 13466 9.28.2.1 Special Characters 13467 ........................... 13468 13469 `!' is the line comment character. 13470 13471 You can use `;' instead of a newline to separate statements. 13472 13473 Since `$' has no special meaning, you may use it in symbol names. 13474 13475 13476 File: as.info, Node: SH-Regs, Next: SH-Addressing, Prev: SH-Chars, Up: SH Syntax 13477 13478 9.28.2.2 Register Names 13479 ....................... 13480 13481 You can use the predefined symbols `r0', `r1', `r2', `r3', `r4', `r5', 13482 `r6', `r7', `r8', `r9', `r10', `r11', `r12', `r13', `r14', and `r15' to 13483 refer to the SH registers. 13484 13485 The SH also has these control registers: 13486 13487 `pr' 13488 procedure register (holds return address) 13489 13490 `pc' 13491 program counter 13492 13493 `mach' 13494 `macl' 13495 high and low multiply accumulator registers 13496 13497 `sr' 13498 status register 13499 13500 `gbr' 13501 global base register 13502 13503 `vbr' 13504 vector base register (for interrupt vectors) 13505 13506 13507 File: as.info, Node: SH-Addressing, Prev: SH-Regs, Up: SH Syntax 13508 13509 9.28.2.3 Addressing Modes 13510 ......................... 13511 13512 `as' understands the following addressing modes for the SH. `RN' in 13513 the following refers to any of the numbered registers, but _not_ the 13514 control registers. 13515 13516 `RN' 13517 Register direct 13518 13519 `@RN' 13520 Register indirect 13521 13522 `@-RN' 13523 Register indirect with pre-decrement 13524 13525 `@RN+' 13526 Register indirect with post-increment 13527 13528 `@(DISP, RN)' 13529 Register indirect with displacement 13530 13531 `@(R0, RN)' 13532 Register indexed 13533 13534 `@(DISP, GBR)' 13535 `GBR' offset 13536 13537 `@(R0, GBR)' 13538 GBR indexed 13539 13540 `ADDR' 13541 `@(DISP, PC)' 13542 PC relative address (for branch or for addressing memory). The 13543 `as' implementation allows you to use the simpler form ADDR 13544 anywhere a PC relative address is called for; the alternate form 13545 is supported for compatibility with other assemblers. 13546 13547 `#IMM' 13548 Immediate data 13549 13550 13551 File: as.info, Node: SH Floating Point, Next: SH Directives, Prev: SH Syntax, Up: SH-Dependent 13552 13553 9.28.3 Floating Point 13554 --------------------- 13555 13556 SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other 13557 SH groups can use `.float' directive to generate IEEE floating-point 13558 numbers. 13559 13560 SH2E and SH3E support single-precision floating point calculations as 13561 well as entirely PCAPI compatible emulation of double-precision 13562 floating point calculations. SH2E and SH3E instructions are a subset of 13563 the floating point calculations conforming to the IEEE754 standard. 13564 13565 In addition to single-precision and double-precision floating-point 13566 operation capability, the on-chip FPU of SH4 has a 128-bit graphic 13567 engine that enables 32-bit floating-point data to be processed 128 bits 13568 at a time. It also supports 4 * 4 array operations and inner product 13569 operations. Also, a superscalar architecture is employed that enables 13570 simultaneous execution of two instructions (including FPU 13571 instructions), providing performance of up to twice that of 13572 conventional architectures at the same frequency. 13573 13574 13575 File: as.info, Node: SH Directives, Next: SH Opcodes, Prev: SH Floating Point, Up: SH-Dependent 13576 13577 9.28.4 SH Machine Directives 13578 ---------------------------- 13579 13580 `uaword' 13581 `ualong' 13582 `as' will issue a warning when a misaligned `.word' or `.long' 13583 directive is used. You may use `.uaword' or `.ualong' to indicate 13584 that the value is intentionally misaligned. 13585 13586 13587 File: as.info, Node: SH Opcodes, Prev: SH Directives, Up: SH-Dependent 13588 13589 9.28.5 Opcodes 13590 -------------- 13591 13592 For detailed information on the SH machine instruction set, see 13593 `SH-Microcomputer User's Manual' (Renesas) or `SH-4 32-bit CPU Core 13594 Architecture' (SuperH) and `SuperH (SH) 64-Bit RISC Series' (SuperH). 13595 13596 `as' implements all the standard SH opcodes. No additional 13597 pseudo-instructions are needed on this family. Note, however, that 13598 because `as' supports a simpler form of PC-relative addressing, you may 13599 simply write (for example) 13600 13601 mov.l bar,r0 13602 13603 where other assemblers might require an explicit displacement to `bar' 13604 from the program counter: 13605 13606 mov.l @(DISP, PC) 13607 13608 Here is a summary of SH opcodes: 13609 13610 Legend: 13611 Rn a numbered register 13612 Rm another numbered register 13613 #imm immediate data 13614 disp displacement 13615 disp8 8-bit displacement 13616 disp12 12-bit displacement 13617 13618 add #imm,Rn lds.l @Rn+,PR 13619 add Rm,Rn mac.w @Rm+,@Rn+ 13620 addc Rm,Rn mov #imm,Rn 13621 addv Rm,Rn mov Rm,Rn 13622 and #imm,R0 mov.b Rm,@(R0,Rn) 13623 and Rm,Rn mov.b Rm,@-Rn 13624 and.b #imm,@(R0,GBR) mov.b Rm,@Rn 13625 bf disp8 mov.b @(disp,Rm),R0 13626 bra disp12 mov.b @(disp,GBR),R0 13627 bsr disp12 mov.b @(R0,Rm),Rn 13628 bt disp8 mov.b @Rm+,Rn 13629 clrmac mov.b @Rm,Rn 13630 clrt mov.b R0,@(disp,Rm) 13631 cmp/eq #imm,R0 mov.b R0,@(disp,GBR) 13632 cmp/eq Rm,Rn mov.l Rm,@(disp,Rn) 13633 cmp/ge Rm,Rn mov.l Rm,@(R0,Rn) 13634 cmp/gt Rm,Rn mov.l Rm,@-Rn 13635 cmp/hi Rm,Rn mov.l Rm,@Rn 13636 cmp/hs Rm,Rn mov.l @(disp,Rn),Rm 13637 cmp/pl Rn mov.l @(disp,GBR),R0 13638 cmp/pz Rn mov.l @(disp,PC),Rn 13639 cmp/str Rm,Rn mov.l @(R0,Rm),Rn 13640 div0s Rm,Rn mov.l @Rm+,Rn 13641 div0u mov.l @Rm,Rn 13642 div1 Rm,Rn mov.l R0,@(disp,GBR) 13643 exts.b Rm,Rn mov.w Rm,@(R0,Rn) 13644 exts.w Rm,Rn mov.w Rm,@-Rn 13645 extu.b Rm,Rn mov.w Rm,@Rn 13646 extu.w Rm,Rn mov.w @(disp,Rm),R0 13647 jmp @Rn mov.w @(disp,GBR),R0 13648 jsr @Rn mov.w @(disp,PC),Rn 13649 ldc Rn,GBR mov.w @(R0,Rm),Rn 13650 ldc Rn,SR mov.w @Rm+,Rn 13651 ldc Rn,VBR mov.w @Rm,Rn 13652 ldc.l @Rn+,GBR mov.w R0,@(disp,Rm) 13653 ldc.l @Rn+,SR mov.w R0,@(disp,GBR) 13654 ldc.l @Rn+,VBR mova @(disp,PC),R0 13655 lds Rn,MACH movt Rn 13656 lds Rn,MACL muls Rm,Rn 13657 lds Rn,PR mulu Rm,Rn 13658 lds.l @Rn+,MACH neg Rm,Rn 13659 lds.l @Rn+,MACL negc Rm,Rn 13660 13661 nop stc VBR,Rn 13662 not Rm,Rn stc.l GBR,@-Rn 13663 or #imm,R0 stc.l SR,@-Rn 13664 or Rm,Rn stc.l VBR,@-Rn 13665 or.b #imm,@(R0,GBR) sts MACH,Rn 13666 rotcl Rn sts MACL,Rn 13667 rotcr Rn sts PR,Rn 13668 rotl Rn sts.l MACH,@-Rn 13669 rotr Rn sts.l MACL,@-Rn 13670 rte sts.l PR,@-Rn 13671 rts sub Rm,Rn 13672 sett subc Rm,Rn 13673 shal Rn subv Rm,Rn 13674 shar Rn swap.b Rm,Rn 13675 shll Rn swap.w Rm,Rn 13676 shll16 Rn tas.b @Rn 13677 shll2 Rn trapa #imm 13678 shll8 Rn tst #imm,R0 13679 shlr Rn tst Rm,Rn 13680 shlr16 Rn tst.b #imm,@(R0,GBR) 13681 shlr2 Rn xor #imm,R0 13682 shlr8 Rn xor Rm,Rn 13683 sleep xor.b #imm,@(R0,GBR) 13684 stc GBR,Rn xtrct Rm,Rn 13685 stc SR,Rn 13686 13687 13688 File: as.info, Node: SH64-Dependent, Next: PDP-11-Dependent, Prev: SH-Dependent, Up: Machine Dependencies 13689 13690 9.29 SuperH SH64 Dependent Features 13691 =================================== 13692 13693 * Menu: 13694 13695 * SH64 Options:: Options 13696 * SH64 Syntax:: Syntax 13697 * SH64 Directives:: SH64 Machine Directives 13698 * SH64 Opcodes:: Opcodes 13699 13700 13701 File: as.info, Node: SH64 Options, Next: SH64 Syntax, Up: SH64-Dependent 13702 13703 9.29.1 Options 13704 -------------- 13705 13706 `-isa=sh4 | sh4a' 13707 Specify the sh4 or sh4a instruction set. 13708 13709 `-isa=dsp' 13710 Enable sh-dsp insns, and disable sh3e / sh4 insns. 13711 13712 `-isa=fp' 13713 Enable sh2e, sh3e, sh4, and sh4a insn sets. 13714 13715 `-isa=all' 13716 Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets. 13717 13718 `-isa=shmedia | -isa=shcompact' 13719 Specify the default instruction set. `SHmedia' specifies the 13720 32-bit opcodes, and `SHcompact' specifies the 16-bit opcodes 13721 compatible with previous SH families. The default depends on the 13722 ABI selected; the default for the 64-bit ABI is SHmedia, and the 13723 default for the 32-bit ABI is SHcompact. If neither the ABI nor 13724 the ISA is specified, the default is 32-bit SHcompact. 13725 13726 Note that the `.mode' pseudo-op is not permitted if the ISA is not 13727 specified on the command line. 13728 13729 `-abi=32 | -abi=64' 13730 Specify the default ABI. If the ISA is specified and the ABI is 13731 not, the default ABI depends on the ISA, with SHmedia defaulting 13732 to 64-bit and SHcompact defaulting to 32-bit. 13733 13734 Note that the `.abi' pseudo-op is not permitted if the ABI is not 13735 specified on the command line. When the ABI is specified on the 13736 command line, any `.abi' pseudo-ops in the source must match it. 13737 13738 `-shcompact-const-crange' 13739 Emit code-range descriptors for constants in SHcompact code 13740 sections. 13741 13742 `-no-mix' 13743 Disallow SHmedia code in the same section as constants and 13744 SHcompact code. 13745 13746 `-no-expand' 13747 Do not expand MOVI, PT, PTA or PTB instructions. 13748 13749 `-expand-pt32' 13750 With -abi=64, expand PT, PTA and PTB instructions to 32 bits only. 13751 13752 `-h-tick-hex' 13753 Support H'00 style hex constants in addition to 0x00 style. 13754 13755 13756 13757 File: as.info, Node: SH64 Syntax, Next: SH64 Directives, Prev: SH64 Options, Up: SH64-Dependent 13758 13759 9.29.2 Syntax 13760 ------------- 13761 13762 * Menu: 13763 13764 * SH64-Chars:: Special Characters 13765 * SH64-Regs:: Register Names 13766 * SH64-Addressing:: Addressing Modes 13767 13768 13769 File: as.info, Node: SH64-Chars, Next: SH64-Regs, Up: SH64 Syntax 13770 13771 9.29.2.1 Special Characters 13772 ........................... 13773 13774 `!' is the line comment character. 13775 13776 You can use `;' instead of a newline to separate statements. 13777 13778 Since `$' has no special meaning, you may use it in symbol names. 13779 13780 13781 File: as.info, Node: SH64-Regs, Next: SH64-Addressing, Prev: SH64-Chars, Up: SH64 Syntax 13782 13783 9.29.2.2 Register Names 13784 ....................... 13785 13786 You can use the predefined symbols `r0' through `r63' to refer to the 13787 SH64 general registers, `cr0' through `cr63' for control registers, 13788 `tr0' through `tr7' for target address registers, `fr0' through `fr63' 13789 for single-precision floating point registers, `dr0' through `dr62' 13790 (even numbered registers only) for double-precision floating point 13791 registers, `fv0' through `fv60' (multiples of four only) for 13792 single-precision floating point vectors, `fp0' through `fp62' (even 13793 numbered registers only) for single-precision floating point pairs, 13794 `mtrx0' through `mtrx48' (multiples of 16 only) for 4x4 matrices of 13795 single-precision floating point registers, `pc' for the program 13796 counter, and `fpscr' for the floating point status and control register. 13797 13798 You can also refer to the control registers by the mnemonics `sr', 13799 `ssr', `pssr', `intevt', `expevt', `pexpevt', `tra', `spc', `pspc', 13800 `resvec', `vbr', `tea', `dcr', `kcr0', `kcr1', `ctc', and `usr'. 13801 13802 13803 File: as.info, Node: SH64-Addressing, Prev: SH64-Regs, Up: SH64 Syntax 13804 13805 9.29.2.3 Addressing Modes 13806 ......................... 13807 13808 SH64 operands consist of either a register or immediate value. The 13809 immediate value can be a constant or label reference (or portion of a 13810 label reference), as in this example: 13811 13812 movi 4,r2 13813 pt function, tr4 13814 movi (function >> 16) & 65535,r0 13815 shori function & 65535, r0 13816 ld.l r0,4,r0 13817 13818 Instruction label references can reference labels in either SHmedia 13819 or SHcompact. To differentiate between the two, labels in SHmedia 13820 sections will always have the least significant bit set (i.e. they will 13821 be odd), which SHcompact labels will have the least significant bit 13822 reset (i.e. they will be even). If you need to reference the actual 13823 address of a label, you can use the `datalabel' modifier, as in this 13824 example: 13825 13826 .long function 13827 .long datalabel function 13828 13829 In that example, the first longword may or may not have the least 13830 significant bit set depending on whether the label is an SHmedia label 13831 or an SHcompact label. The second longword will be the actual address 13832 of the label, regardless of what type of label it is. 13833 13834 13835 File: as.info, Node: SH64 Directives, Next: SH64 Opcodes, Prev: SH64 Syntax, Up: SH64-Dependent 13836 13837 9.29.3 SH64 Machine Directives 13838 ------------------------------ 13839 13840 In addition to the SH directives, the SH64 provides the following 13841 directives: 13842 13843 `.mode [shmedia|shcompact]' 13844 `.isa [shmedia|shcompact]' 13845 Specify the ISA for the following instructions (the two directives 13846 are equivalent). Note that programs such as `objdump' rely on 13847 symbolic labels to determine when such mode switches occur (by 13848 checking the least significant bit of the label's address), so 13849 such mode/isa changes should always be followed by a label (in 13850 practice, this is true anyway). Note that you cannot use these 13851 directives if you didn't specify an ISA on the command line. 13852 13853 `.abi [32|64]' 13854 Specify the ABI for the following instructions. Note that you 13855 cannot use this directive unless you specified an ABI on the 13856 command line, and the ABIs specified must match. 13857 13858 `.uaquad' 13859 Like .uaword and .ualong, this allows you to specify an 13860 intentionally unaligned quadword (64 bit word). 13861 13862 13863 13864 File: as.info, Node: SH64 Opcodes, Prev: SH64 Directives, Up: SH64-Dependent 13865 13866 9.29.4 Opcodes 13867 -------------- 13868 13869 For detailed information on the SH64 machine instruction set, see 13870 `SuperH 64 bit RISC Series Architecture Manual' (SuperH, Inc.). 13871 13872 `as' implements all the standard SH64 opcodes. In addition, the 13873 following pseudo-opcodes may be expanded into one or more alternate 13874 opcodes: 13875 13876 `movi' 13877 If the value doesn't fit into a standard `movi' opcode, `as' will 13878 replace the `movi' with a sequence of `movi' and `shori' opcodes. 13879 13880 `pt' 13881 This expands to a sequence of `movi' and `shori' opcode, followed 13882 by a `ptrel' opcode, or to a `pta' or `ptb' opcode, depending on 13883 the label referenced. 13884 13885 13886 13887 File: as.info, Node: Sparc-Dependent, Next: TIC54X-Dependent, Prev: PPC-Dependent, Up: Machine Dependencies 13888 13889 9.30 SPARC Dependent Features 13890 ============================= 13891 13892 * Menu: 13893 13894 * Sparc-Opts:: Options 13895 * Sparc-Aligned-Data:: Option to enforce aligned data 13896 * Sparc-Syntax:: Syntax 13897 * Sparc-Float:: Floating Point 13898 * Sparc-Directives:: Sparc Machine Directives 13899 13900 13901 File: as.info, Node: Sparc-Opts, Next: Sparc-Aligned-Data, Up: Sparc-Dependent 13902 13903 9.30.1 Options 13904 -------------- 13905 13906 The SPARC chip family includes several successive versions, using the 13907 same core instruction set, but including a few additional instructions 13908 at each version. There are exceptions to this however. For details on 13909 what instructions each variant supports, please see the chip's 13910 architecture reference manual. 13911 13912 By default, `as' assumes the core instruction set (SPARC v6), but 13913 "bumps" the architecture level as needed: it switches to successively 13914 higher architectures as it encounters instructions that only exist in 13915 the higher levels. 13916 13917 If not configured for SPARC v9 (`sparc64-*-*') GAS will not bump 13918 past sparclite by default, an option must be passed to enable the v9 13919 instructions. 13920 13921 GAS treats sparclite as being compatible with v8, unless an 13922 architecture is explicitly requested. SPARC v9 is always incompatible 13923 with sparclite. 13924 13925 `-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite' 13926 `-Av8plus | -Av8plusa | -Av9 | -Av9a' 13927 Use one of the `-A' options to select one of the SPARC 13928 architectures explicitly. If you select an architecture 13929 explicitly, `as' reports a fatal error if it encounters an 13930 instruction or feature requiring an incompatible or higher level. 13931 13932 `-Av8plus' and `-Av8plusa' select a 32 bit environment. 13933 13934 `-Av9' and `-Av9a' select a 64 bit environment and are not 13935 available unless GAS is explicitly configured with 64 bit 13936 environment support. 13937 13938 `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with 13939 UltraSPARC extensions. 13940 13941 `-xarch=v8plus | -xarch=v8plusa' 13942 For compatibility with the SunOS v9 assembler. These options are 13943 equivalent to -Av8plus and -Av8plusa, respectively. 13944 13945 `-bump' 13946 Warn whenever it is necessary to switch to another level. If an 13947 architecture level is explicitly requested, GAS will not issue 13948 warnings until that level is reached, and will then bump the level 13949 as required (except between incompatible levels). 13950 13951 `-32 | -64' 13952 Select the word size, either 32 bits or 64 bits. These options 13953 are only available with the ELF object file format, and require 13954 that the necessary BFD support has been included. 13955 13956 13957 File: as.info, Node: Sparc-Aligned-Data, Next: Sparc-Syntax, Prev: Sparc-Opts, Up: Sparc-Dependent 13958 13959 9.30.2 Enforcing aligned data 13960 ----------------------------- 13961 13962 SPARC GAS normally permits data to be misaligned. For example, it 13963 permits the `.long' pseudo-op to be used on a byte boundary. However, 13964 the native SunOS assemblers issue an error when they see misaligned 13965 data. 13966 13967 You can use the `--enforce-aligned-data' option to make SPARC GAS 13968 also issue an error about misaligned data, just as the SunOS assemblers 13969 do. 13970 13971 The `--enforce-aligned-data' option is not the default because gcc 13972 issues misaligned data pseudo-ops when it initializes certain packed 13973 data structures (structures defined using the `packed' attribute). You 13974 may have to assemble with GAS in order to initialize packed data 13975 structures in your own code. 13976 13977 13978 File: as.info, Node: Sparc-Syntax, Next: Sparc-Float, Prev: Sparc-Aligned-Data, Up: Sparc-Dependent 13979 13980 9.30.3 Sparc Syntax 13981 ------------------- 13982 13983 The assembler syntax closely follows The Sparc Architecture Manual, 13984 versions 8 and 9, as well as most extensions defined by Sun for their 13985 UltraSPARC and Niagara line of processors. 13986 13987 * Menu: 13988 13989 * Sparc-Chars:: Special Characters 13990 * Sparc-Regs:: Register Names 13991 * Sparc-Constants:: Constant Names 13992 * Sparc-Relocs:: Relocations 13993 * Sparc-Size-Translations:: Size Translations 13994 13995 13996 File: as.info, Node: Sparc-Chars, Next: Sparc-Regs, Up: Sparc-Syntax 13997 13998 9.30.3.1 Special Characters 13999 ........................... 14000 14001 `#' is the line comment character. 14002 14003 `;' can be used instead of a newline to separate statements. 14004 14005 14006 File: as.info, Node: Sparc-Regs, Next: Sparc-Constants, Prev: Sparc-Chars, Up: Sparc-Syntax 14007 14008 9.30.3.2 Register Names 14009 ....................... 14010 14011 The Sparc integer register file is broken down into global, outgoing, 14012 local, and incoming. 14013 14014 * The 8 global registers are referred to as `%gN'. 14015 14016 * The 8 outgoing registers are referred to as `%oN'. 14017 14018 * The 8 local registers are referred to as `%lN'. 14019 14020 * The 8 incoming registers are referred to as `%iN'. 14021 14022 * The frame pointer register `%i6' can be referenced using the alias 14023 `%fp'. 14024 14025 * The stack pointer register `%o6' can be referenced using the alias 14026 `%sp'. 14027 14028 Floating point registers are simply referred to as `%fN'. When 14029 assembling for pre-V9, only 32 floating point registers are available. 14030 For V9 and later there are 64, but there are restrictions when 14031 referencing the upper 32 registers. They can only be accessed as 14032 double or quad, and thus only even or quad numbered accesses are 14033 allowed. For example, `%f34' is a legal floating point register, but 14034 `%f35' is not. 14035 14036 Certain V9 instructions allow access to ancillary state registers. 14037 Most simply they can be referred to as `%asrN' where N can be from 16 14038 to 31. However, there are some aliases defined to reference ASR 14039 registers defined for various UltraSPARC processors: 14040 14041 * The tick compare register is referred to as `%tick_cmpr'. 14042 14043 * The system tick register is referred to as `%stick'. An alias, 14044 `%sys_tick', exists but is deprecated and should not be used by 14045 new software. 14046 14047 * The system tick compare register is referred to as `%stick_cmpr'. 14048 An alias, `%sys_tick_cmpr', exists but is deprecated and should 14049 not be used by new software. 14050 14051 * The software interrupt register is referred to as `%softint'. 14052 14053 * The set software interrupt register is referred to as 14054 `%set_softint'. The mnemonic `%softint_set' is provided as an 14055 alias. 14056 14057 * The clear software interrupt register is referred to as 14058 `%clear_softint'. The mnemonic `%softint_clear' is provided as an 14059 alias. 14060 14061 * The performance instrumentation counters register is referred to as 14062 `%pic'. 14063 14064 * The performance control register is referred to as `%pcr'. 14065 14066 * The graphics status register is referred to as `%gsr'. 14067 14068 * The V9 dispatch control register is referred to as `%dcr'. 14069 14070 Various V9 branch and conditional move instructions allow 14071 specification of which set of integer condition codes to test. These 14072 are referred to as `%xcc' and `%icc'. 14073 14074 In V9, there are 4 sets of floating point condition codes which are 14075 referred to as `%fccN'. 14076 14077 Several special privileged and non-privileged registers exist: 14078 14079 * The V9 address space identifier register is referred to as `%asi'. 14080 14081 * The V9 restorable windows register is referred to as `%canrestore'. 14082 14083 * The V9 savable windows register is referred to as `%cansave'. 14084 14085 * The V9 clean windows register is referred to as `%cleanwin'. 14086 14087 * The V9 current window pointer register is referred to as `%cwp'. 14088 14089 * The floating-point queue register is referred to as `%fq'. 14090 14091 * The V8 co-processor queue register is referred to as `%cq'. 14092 14093 * The floating point status register is referred to as `%fsr'. 14094 14095 * The other windows register is referred to as `%otherwin'. 14096 14097 * The V9 program counter register is referred to as `%pc'. 14098 14099 * The V9 next program counter register is referred to as `%npc'. 14100 14101 * The V9 processor interrupt level register is referred to as `%pil'. 14102 14103 * The V9 processor state register is referred to as `%pstate'. 14104 14105 * The trap base address register is referred to as `%tba'. 14106 14107 * The V9 tick register is referred to as `%tick'. 14108 14109 * The V9 trap level is referred to as `%tl'. 14110 14111 * The V9 trap program counter is referred to as `%tpc'. 14112 14113 * The V9 trap next program counter is referred to as `%tnpc'. 14114 14115 * The V9 trap state is referred to as `%tstate'. 14116 14117 * The V9 trap type is referred to as `%tt'. 14118 14119 * The V9 condition codes is referred to as `%ccr'. 14120 14121 * The V9 floating-point registers state is referred to as `%fprs'. 14122 14123 * The V9 version register is referred to as `%ver'. 14124 14125 * The V9 window state register is referred to as `%wstate'. 14126 14127 * The Y register is referred to as `%y'. 14128 14129 * The V8 window invalid mask register is referred to as `%wim'. 14130 14131 * The V8 processor state register is referred to as `%psr'. 14132 14133 * The V9 global register level register is referred to as `%gl'. 14134 14135 Several special register names exist for hypervisor mode code: 14136 14137 * The hyperprivileged processor state register is referred to as 14138 `%hpstate'. 14139 14140 * The hyperprivileged trap state register is referred to as 14141 `%htstate'. 14142 14143 * The hyperprivileged interrupt pending register is referred to as 14144 `%hintp'. 14145 14146 * The hyperprivileged trap base address register is referred to as 14147 `%htba'. 14148 14149 * The hyperprivileged implementation version register is referred to 14150 as `%hver'. 14151 14152 * The hyperprivileged system tick compare register is referred to as 14153 `%hstick_cmpr'. Note that there is no `%hstick' register, the 14154 normal `%stick' is used. 14155 14156 14157 File: as.info, Node: Sparc-Constants, Next: Sparc-Relocs, Prev: Sparc-Regs, Up: Sparc-Syntax 14158 14159 9.30.3.3 Constants 14160 .................. 14161 14162 Several Sparc instructions take an immediate operand field for which 14163 mnemonic names exist. Two such examples are `membar' and `prefetch'. 14164 Another example are the set of V9 memory access instruction that allow 14165 specification of an address space identifier. 14166 14167 The `membar' instruction specifies a memory barrier that is the 14168 defined by the operand which is a bitmask. The supported mask 14169 mnemonics are: 14170 14171 * `#Sync' requests that all operations (including nonmemory 14172 reference operations) appearing prior to the `membar' must have 14173 been performed and the effects of any exceptions become visible 14174 before any instructions after the `membar' may be initiated. This 14175 corresponds to `membar' cmask field bit 2. 14176 14177 * `#MemIssue' requests that all memory reference operations 14178 appearing prior to the `membar' must have been performed before 14179 any memory operation after the `membar' may be initiated. This 14180 corresponds to `membar' cmask field bit 1. 14181 14182 * `#Lookaside' requests that a store appearing prior to the `membar' 14183 must complete before any load following the `membar' referencing 14184 the same address can be initiated. This corresponds to `membar' 14185 cmask field bit 0. 14186 14187 * `#StoreStore' defines that the effects of all stores appearing 14188 prior to the `membar' instruction must be visible to all 14189 processors before the effect of any stores following the `membar'. 14190 Equivalent to the deprecated `stbar' instruction. This 14191 corresponds to `membar' mmask field bit 3. 14192 14193 * `#LoadStore' defines all loads appearing prior to the `membar' 14194 instruction must have been performed before the effect of any 14195 stores following the `membar' is visible to any other processor. 14196 This corresponds to `membar' mmask field bit 2. 14197 14198 * `#StoreLoad' defines that the effects of all stores appearing 14199 prior to the `membar' instruction must be visible to all 14200 processors before loads following the `membar' may be performed. 14201 This corresponds to `membar' mmask field bit 1. 14202 14203 * `#LoadLoad' defines that all loads appearing prior to the `membar' 14204 instruction must have been performed before any loads following 14205 the `membar' may be performed. This corresponds to `membar' mmask 14206 field bit 0. 14207 14208 14209 These values can be ored together, for example: 14210 14211 membar #Sync 14212 membar #StoreLoad | #LoadLoad 14213 membar #StoreLoad | #StoreStore 14214 14215 The `prefetch' and `prefetcha' instructions take a prefetch function 14216 code. The following prefetch function code constant mnemonics are 14217 available: 14218 14219 * `#n_reads' requests a prefetch for several reads, and corresponds 14220 to a prefetch function code of 0. 14221 14222 `#one_read' requests a prefetch for one read, and corresponds to a 14223 prefetch function code of 1. 14224 14225 `#n_writes' requests a prefetch for several writes (and possibly 14226 reads), and corresponds to a prefetch function code of 2. 14227 14228 `#one_write' requests a prefetch for one write, and corresponds to 14229 a prefetch function code of 3. 14230 14231 `#page' requests a prefetch page, and corresponds to a prefetch 14232 function code of 4. 14233 14234 `#invalidate' requests a prefetch invalidate, and corresponds to a 14235 prefetch function code of 16. 14236 14237 `#unified' requests a prefetch to the nearest unified cache, and 14238 corresponds to a prefetch function code of 17. 14239 14240 `#n_reads_strong' requests a strong prefetch for several reads, 14241 and corresponds to a prefetch function code of 20. 14242 14243 `#one_read_strong' requests a strong prefetch for one read, and 14244 corresponds to a prefetch function code of 21. 14245 14246 `#n_writes_strong' requests a strong prefetch for several writes, 14247 and corresponds to a prefetch function code of 22. 14248 14249 `#one_write_strong' requests a strong prefetch for one write, and 14250 corresponds to a prefetch function code of 23. 14251 14252 Onle one prefetch code may be specified. Here are some examples: 14253 14254 prefetch [%l0 + %l2], #one_read 14255 prefetch [%g2 + 8], #n_writes 14256 prefetcha [%g1] 0x8, #unified 14257 prefetcha [%o0 + 0x10] %asi, #n_reads 14258 14259 The actual behavior of a given prefetch function code is processor 14260 specific. If a processor does not implement a given prefetch 14261 function code, it will treat the prefetch instruction as a nop. 14262 14263 For instructions that accept an immediate address space identifier, 14264 `as' provides many mnemonics corresponding to V9 defined as well 14265 as UltraSPARC and Niagara extended values. For example, `#ASI_P' 14266 and `#ASI_BLK_INIT_QUAD_LDD_AIUS'. See the V9 and processor 14267 specific manuals for details. 14268 14269 14270 14271 File: as.info, Node: Sparc-Relocs, Next: Sparc-Size-Translations, Prev: Sparc-Constants, Up: Sparc-Syntax 14272 14273 9.30.3.4 Relocations 14274 .................... 14275 14276 ELF relocations are available as defined in the 32-bit and 64-bit Sparc 14277 ELF specifications. 14278 14279 `R_SPARC_HI22' is obtained using `%hi' and `R_SPARC_LO10' is 14280 obtained using `%lo'. Likewise `R_SPARC_HIX22' is obtained from `%hix' 14281 and `R_SPARC_LOX10' is obtained using `%lox'. For example: 14282 14283 sethi %hi(symbol), %g1 14284 or %g1, %lo(symbol), %g1 14285 14286 sethi %hix(symbol), %g1 14287 xor %g1, %lox(symbol), %g1 14288 14289 These "high" mnemonics extract bits 31:10 of their operand, and the 14290 "low" mnemonics extract bits 9:0 of their operand. 14291 14292 V9 code model relocations can be requested as follows: 14293 14294 * `R_SPARC_HH22' is requested using `%hh'. It can also be generated 14295 using `%uhi'. 14296 14297 * `R_SPARC_HM10' is requested using `%hm'. It can also be generated 14298 using `%ulo'. 14299 14300 * `R_SPARC_LM22' is requested using `%lm'. 14301 14302 * `R_SPARC_H44' is requested using `%h44'. 14303 14304 * `R_SPARC_M44' is requested using `%m44'. 14305 14306 * `R_SPARC_L44' is requested using `%l44'. 14307 14308 The PC relative relocation `R_SPARC_PC22' can be obtained by 14309 enclosing an operand inside of `%pc22'. Likewise, the `R_SPARC_PC10' 14310 relocation can be obtained using `%pc10'. These are mostly used when 14311 assembling PIC code. For example, the standard PIC sequence on Sparc 14312 to get the base of the global offset table, PC relative, into a 14313 register, can be performed as: 14314 14315 sethi %pc22(_GLOBAL_OFFSET_TABLE_-4), %l7 14316 add %l7, %pc10(_GLOBAL_OFFSET_TABLE_+4), %l7 14317 14318 Several relocations exist to allow the link editor to potentially 14319 optimize GOT data references. The `R_SPARC_GOTDATA_OP_HIX22' 14320 relocation can obtained by enclosing an operand inside of 14321 `%gdop_hix22'. The `R_SPARC_GOTDATA_OP_LOX10' relocation can obtained 14322 by enclosing an operand inside of `%gdop_lox10'. Likewise, 14323 `R_SPARC_GOTDATA_OP' can be obtained by enclosing an operand inside of 14324 `%gdop'. For example, assuming the GOT base is in register `%l7': 14325 14326 sethi %gdop_hix22(symbol), %l1 14327 xor %l1, %gdop_lox10(symbol), %l1 14328 ld [%l7 + %l1], %l2, %gdop(symbol) 14329 14330 There are many relocations that can be requested for access to 14331 thread local storage variables. All of the Sparc TLS mnemonics are 14332 supported: 14333 14334 * `R_SPARC_TLS_GD_HI22' is requested using `%tgd_hi22'. 14335 14336 * `R_SPARC_TLS_GD_LO10' is requested using `%tgd_lo10'. 14337 14338 * `R_SPARC_TLS_GD_ADD' is requested using `%tgd_add'. 14339 14340 * `R_SPARC_TLS_GD_CALL' is requested using `%tgd_call'. 14341 14342 * `R_SPARC_TLS_LDM_HI22' is requested using `%tldm_hi22'. 14343 14344 * `R_SPARC_TLS_LDM_LO10' is requested using `%tldm_lo10'. 14345 14346 * `R_SPARC_TLS_LDM_ADD' is requested using `%tldm_add'. 14347 14348 * `R_SPARC_TLS_LDM_CALL' is requested using `%tldm_call'. 14349 14350 * `R_SPARC_TLS_LDO_HIX22' is requested using `%tldo_hix22'. 14351 14352 * `R_SPARC_TLS_LDO_LOX10' is requested using `%tldo_lox10'. 14353 14354 * `R_SPARC_TLS_LDO_ADD' is requested using `%tldo_add'. 14355 14356 * `R_SPARC_TLS_IE_HI22' is requested using `%tie_hi22'. 14357 14358 * `R_SPARC_TLS_IE_LO10' is requested using `%tie_lo10'. 14359 14360 * `R_SPARC_TLS_IE_LD' is requested using `%tie_ld'. 14361 14362 * `R_SPARC_TLS_IE_LDX' is requested using `%tie_ldx'. 14363 14364 * `R_SPARC_TLS_IE_ADD' is requested using `%tie_add'. 14365 14366 * `R_SPARC_TLS_LE_HIX22' is requested using `%tle_hix22'. 14367 14368 * `R_SPARC_TLS_LE_LOX10' is requested using `%tle_lox10'. 14369 14370 Here are some example TLS model sequences. 14371 14372 First, General Dynamic: 14373 14374 sethi %tgd_hi22(symbol), %l1 14375 add %l1, %tgd_lo10(symbol), %l1 14376 add %l7, %l1, %o0, %tgd_add(symbol) 14377 call __tls_get_addr, %tgd_call(symbol) 14378 nop 14379 14380 Local Dynamic: 14381 14382 sethi %tldm_hi22(symbol), %l1 14383 add %l1, %tldm_lo10(symbol), %l1 14384 add %l7, %l1, %o0, %tldm_add(symbol) 14385 call __tls_get_addr, %tldm_call(symbol) 14386 nop 14387 14388 sethi %tldo_hix22(symbol), %l1 14389 xor %l1, %tldo_lox10(symbol), %l1 14390 add %o0, %l1, %l1, %tldo_add(symbol) 14391 14392 Initial Exec: 14393 14394 sethi %tie_hi22(symbol), %l1 14395 add %l1, %tie_lo10(symbol), %l1 14396 ld [%l7 + %l1], %o0, %tie_ld(symbol) 14397 add %g7, %o0, %o0, %tie_add(symbol) 14398 14399 sethi %tie_hi22(symbol), %l1 14400 add %l1, %tie_lo10(symbol), %l1 14401 ldx [%l7 + %l1], %o0, %tie_ldx(symbol) 14402 add %g7, %o0, %o0, %tie_add(symbol) 14403 14404 And finally, Local Exec: 14405 14406 sethi %tle_hix22(symbol), %l1 14407 add %l1, %tle_lox10(symbol), %l1 14408 add %g7, %l1, %l1 14409 14410 When assembling for 64-bit, and a secondary constant addend is 14411 specified in an address expression that would normally generate an 14412 `R_SPARC_LO10' relocation, the assembler will emit an `R_SPARC_OLO10' 14413 instead. 14414 14415 14416 File: as.info, Node: Sparc-Size-Translations, Prev: Sparc-Relocs, Up: Sparc-Syntax 14417 14418 9.30.3.5 Size Translations 14419 .......................... 14420 14421 Often it is desirable to write code in an operand size agnostic manner. 14422 `as' provides support for this via operand size opcode translations. 14423 Translations are supported for loads, stores, shifts, compare-and-swap 14424 atomics, and the `clr' synthetic instruction. 14425 14426 If generating 32-bit code, `as' will generate the 32-bit opcode. 14427 Whereas if 64-bit code is being generated, the 64-bit opcode will be 14428 emitted. For example `ldn' will be transformed into `ld' for 32-bit 14429 code and `ldx' for 64-bit code. 14430 14431 Here is an example meant to demonstrate all the supported opcode 14432 translations: 14433 14434 ldn [%o0], %o1 14435 ldna [%o0] %asi, %o2 14436 stn %o1, [%o0] 14437 stna %o2, [%o0] %asi 14438 slln %o3, 3, %o3 14439 srln %o4, 8, %o4 14440 sran %o5, 12, %o5 14441 casn [%o0], %o1, %o2 14442 casna [%o0] %asi, %o1, %o2 14443 clrn %g1 14444 14445 In 32-bit mode `as' will emit: 14446 14447 ld [%o0], %o1 14448 lda [%o0] %asi, %o2 14449 st %o1, [%o0] 14450 sta %o2, [%o0] %asi 14451 sll %o3, 3, %o3 14452 srl %o4, 8, %o4 14453 sra %o5, 12, %o5 14454 cas [%o0], %o1, %o2 14455 casa [%o0] %asi, %o1, %o2 14456 clr %g1 14457 14458 And in 64-bit mode `as' will emit: 14459 14460 ldx [%o0], %o1 14461 ldxa [%o0] %asi, %o2 14462 stx %o1, [%o0] 14463 stxa %o2, [%o0] %asi 14464 sllx %o3, 3, %o3 14465 srlx %o4, 8, %o4 14466 srax %o5, 12, %o5 14467 casx [%o0], %o1, %o2 14468 casxa [%o0] %asi, %o1, %o2 14469 clrx %g1 14470 14471 Finally, the `.nword' translating directive is supported as well. 14472 It is documented in the section on Sparc machine directives. 14473 14474 14475 File: as.info, Node: Sparc-Float, Next: Sparc-Directives, Prev: Sparc-Syntax, Up: Sparc-Dependent 14476 14477 9.30.4 Floating Point 14478 --------------------- 14479 14480 The Sparc uses IEEE floating-point numbers. 14481 14482 14483 File: as.info, Node: Sparc-Directives, Prev: Sparc-Float, Up: Sparc-Dependent 14484 14485 9.30.5 Sparc Machine Directives 14486 ------------------------------- 14487 14488 The Sparc version of `as' supports the following additional machine 14489 directives: 14490 14491 `.align' 14492 This must be followed by the desired alignment in bytes. 14493 14494 `.common' 14495 This must be followed by a symbol name, a positive number, and 14496 `"bss"'. This behaves somewhat like `.comm', but the syntax is 14497 different. 14498 14499 `.half' 14500 This is functionally identical to `.short'. 14501 14502 `.nword' 14503 On the Sparc, the `.nword' directive produces native word sized 14504 value, ie. if assembling with -32 it is equivalent to `.word', if 14505 assembling with -64 it is equivalent to `.xword'. 14506 14507 `.proc' 14508 This directive is ignored. Any text following it on the same line 14509 is also ignored. 14510 14511 `.register' 14512 This directive declares use of a global application or system 14513 register. It must be followed by a register name %g2, %g3, %g6 or 14514 %g7, comma and the symbol name for that register. If symbol name 14515 is `#scratch', it is a scratch register, if it is `#ignore', it 14516 just suppresses any errors about using undeclared global register, 14517 but does not emit any information about it into the object file. 14518 This can be useful e.g. if you save the register before use and 14519 restore it after. 14520 14521 `.reserve' 14522 This must be followed by a symbol name, a positive number, and 14523 `"bss"'. This behaves somewhat like `.lcomm', but the syntax is 14524 different. 14525 14526 `.seg' 14527 This must be followed by `"text"', `"data"', or `"data1"'. It 14528 behaves like `.text', `.data', or `.data 1'. 14529 14530 `.skip' 14531 This is functionally identical to the `.space' directive. 14532 14533 `.word' 14534 On the Sparc, the `.word' directive produces 32 bit values, 14535 instead of the 16 bit values it produces on many other machines. 14536 14537 `.xword' 14538 On the Sparc V9 processor, the `.xword' directive produces 64 bit 14539 values. 14540 14541 14542 File: as.info, Node: TIC54X-Dependent, Next: V850-Dependent, Prev: Sparc-Dependent, Up: Machine Dependencies 14543 14544 9.31 TIC54X Dependent Features 14545 ============================== 14546 14547 * Menu: 14548 14549 * TIC54X-Opts:: Command-line Options 14550 * TIC54X-Block:: Blocking 14551 * TIC54X-Env:: Environment Settings 14552 * TIC54X-Constants:: Constants Syntax 14553 * TIC54X-Subsyms:: String Substitution 14554 * TIC54X-Locals:: Local Label Syntax 14555 * TIC54X-Builtins:: Builtin Assembler Math Functions 14556 * TIC54X-Ext:: Extended Addressing Support 14557 * TIC54X-Directives:: Directives 14558 * TIC54X-Macros:: Macro Features 14559 * TIC54X-MMRegs:: Memory-mapped Registers 14560 14561 14562 File: as.info, Node: TIC54X-Opts, Next: TIC54X-Block, Up: TIC54X-Dependent 14563 14564 9.31.1 Options 14565 -------------- 14566 14567 The TMS320C54X version of `as' has a few machine-dependent options. 14568 14569 You can use the `-mfar-mode' option to enable extended addressing 14570 mode. All addresses will be assumed to be > 16 bits, and the 14571 appropriate relocation types will be used. This option is equivalent 14572 to using the `.far_mode' directive in the assembly code. If you do not 14573 use the `-mfar-mode' option, all references will be assumed to be 16 14574 bits. This option may be abbreviated to `-mf'. 14575 14576 You can use the `-mcpu' option to specify a particular CPU. This 14577 option is equivalent to using the `.version' directive in the assembly 14578 code. For recognized CPU codes, see *Note `.version': 14579 TIC54X-Directives. The default CPU version is `542'. 14580 14581 You can use the `-merrors-to-file' option to redirect error output 14582 to a file (this provided for those deficient environments which don't 14583 provide adequate output redirection). This option may be abbreviated to 14584 `-me'. 14585 14586 14587 File: as.info, Node: TIC54X-Block, Next: TIC54X-Env, Prev: TIC54X-Opts, Up: TIC54X-Dependent 14588 14589 9.31.2 Blocking 14590 --------------- 14591 14592 A blocked section or memory block is guaranteed not to cross the 14593 blocking boundary (usually a page, or 128 words) if it is smaller than 14594 the blocking size, or to start on a page boundary if it is larger than 14595 the blocking size. 14596 14597 14598 File: as.info, Node: TIC54X-Env, Next: TIC54X-Constants, Prev: TIC54X-Block, Up: TIC54X-Dependent 14599 14600 9.31.3 Environment Settings 14601 --------------------------- 14602 14603 `C54XDSP_DIR' and `A_DIR' are semicolon-separated paths which are added 14604 to the list of directories normally searched for source and include 14605 files. `C54XDSP_DIR' will override `A_DIR'. 14606 14607 14608 File: as.info, Node: TIC54X-Constants, Next: TIC54X-Subsyms, Prev: TIC54X-Env, Up: TIC54X-Dependent 14609 14610 9.31.4 Constants Syntax 14611 ----------------------- 14612 14613 The TIC54X version of `as' allows the following additional constant 14614 formats, using a suffix to indicate the radix: 14615 14616 Binary `000000B, 011000b' 14617 Octal `10Q, 224q' 14618 Hexadecimal `45h, 0FH' 14619 14620 14621 File: as.info, Node: TIC54X-Subsyms, Next: TIC54X-Locals, Prev: TIC54X-Constants, Up: TIC54X-Dependent 14622 14623 9.31.5 String Substitution 14624 -------------------------- 14625 14626 A subset of allowable symbols (which we'll call subsyms) may be assigned 14627 arbitrary string values. This is roughly equivalent to C preprocessor 14628 #define macros. When `as' encounters one of these symbols, the symbol 14629 is replaced in the input stream by its string value. Subsym names 14630 *must* begin with a letter. 14631 14632 Subsyms may be defined using the `.asg' and `.eval' directives 14633 (*Note `.asg': TIC54X-Directives, *Note `.eval': TIC54X-Directives. 14634 14635 Expansion is recursive until a previously encountered symbol is 14636 seen, at which point substitution stops. 14637 14638 In this example, x is replaced with SYM2; SYM2 is replaced with 14639 SYM1, and SYM1 is replaced with x. At this point, x has already been 14640 encountered and the substitution stops. 14641 14642 .asg "x",SYM1 14643 .asg "SYM1",SYM2 14644 .asg "SYM2",x 14645 add x,a ; final code assembled is "add x, a" 14646 14647 Macro parameters are converted to subsyms; a side effect of this is 14648 the normal `as' '\ARG' dereferencing syntax is unnecessary. Subsyms 14649 defined within a macro will have global scope, unless the `.var' 14650 directive is used to identify the subsym as a local macro variable 14651 *note `.var': TIC54X-Directives. 14652 14653 Substitution may be forced in situations where replacement might be 14654 ambiguous by placing colons on either side of the subsym. The following 14655 code: 14656 14657 .eval "10",x 14658 LAB:X: add #x, a 14659 14660 When assembled becomes: 14661 14662 LAB10 add #10, a 14663 14664 Smaller parts of the string assigned to a subsym may be accessed with 14665 the following syntax: 14666 14667 ``:SYMBOL(CHAR_INDEX):'' 14668 Evaluates to a single-character string, the character at 14669 CHAR_INDEX. 14670 14671 ``:SYMBOL(START,LENGTH):'' 14672 Evaluates to a substring of SYMBOL beginning at START with length 14673 LENGTH. 14674 14675 14676 File: as.info, Node: TIC54X-Locals, Next: TIC54X-Builtins, Prev: TIC54X-Subsyms, Up: TIC54X-Dependent 14677 14678 9.31.6 Local Labels 14679 ------------------- 14680 14681 Local labels may be defined in two ways: 14682 14683 * $N, where N is a decimal number between 0 and 9 14684 14685 * LABEL?, where LABEL is any legal symbol name. 14686 14687 Local labels thus defined may be redefined or automatically 14688 generated. The scope of a local label is based on when it may be 14689 undefined or reset. This happens when one of the following situations 14690 is encountered: 14691 14692 * .newblock directive *note `.newblock': TIC54X-Directives. 14693 14694 * The current section is changed (.sect, .text, or .data) 14695 14696 * Entering or leaving an included file 14697 14698 * The macro scope where the label was defined is exited 14699 14700 14701 File: as.info, Node: TIC54X-Builtins, Next: TIC54X-Ext, Prev: TIC54X-Locals, Up: TIC54X-Dependent 14702 14703 9.31.7 Math Builtins 14704 -------------------- 14705 14706 The following built-in functions may be used to generate a 14707 floating-point value. All return a floating-point value except `$cvi', 14708 `$int', and `$sgn', which return an integer value. 14709 14710 ``$acos(EXPR)'' 14711 Returns the floating point arccosine of EXPR. 14712 14713 ``$asin(EXPR)'' 14714 Returns the floating point arcsine of EXPR. 14715 14716 ``$atan(EXPR)'' 14717 Returns the floating point arctangent of EXPR. 14718 14719 ``$atan2(EXPR1,EXPR2)'' 14720 Returns the floating point arctangent of EXPR1 / EXPR2. 14721 14722 ``$ceil(EXPR)'' 14723 Returns the smallest integer not less than EXPR as floating point. 14724 14725 ``$cosh(EXPR)'' 14726 Returns the floating point hyperbolic cosine of EXPR. 14727 14728 ``$cos(EXPR)'' 14729 Returns the floating point cosine of EXPR. 14730 14731 ``$cvf(EXPR)'' 14732 Returns the integer value EXPR converted to floating-point. 14733 14734 ``$cvi(EXPR)'' 14735 Returns the floating point value EXPR converted to integer. 14736 14737 ``$exp(EXPR)'' 14738 Returns the floating point value e ^ EXPR. 14739 14740 ``$fabs(EXPR)'' 14741 Returns the floating point absolute value of EXPR. 14742 14743 ``$floor(EXPR)'' 14744 Returns the largest integer that is not greater than EXPR as 14745 floating point. 14746 14747 ``$fmod(EXPR1,EXPR2)'' 14748 Returns the floating point remainder of EXPR1 / EXPR2. 14749 14750 ``$int(EXPR)'' 14751 Returns 1 if EXPR evaluates to an integer, zero otherwise. 14752 14753 ``$ldexp(EXPR1,EXPR2)'' 14754 Returns the floating point value EXPR1 * 2 ^ EXPR2. 14755 14756 ``$log10(EXPR)'' 14757 Returns the base 10 logarithm of EXPR. 14758 14759 ``$log(EXPR)'' 14760 Returns the natural logarithm of EXPR. 14761 14762 ``$max(EXPR1,EXPR2)'' 14763 Returns the floating point maximum of EXPR1 and EXPR2. 14764 14765 ``$min(EXPR1,EXPR2)'' 14766 Returns the floating point minimum of EXPR1 and EXPR2. 14767 14768 ``$pow(EXPR1,EXPR2)'' 14769 Returns the floating point value EXPR1 ^ EXPR2. 14770 14771 ``$round(EXPR)'' 14772 Returns the nearest integer to EXPR as a floating point number. 14773 14774 ``$sgn(EXPR)'' 14775 Returns -1, 0, or 1 based on the sign of EXPR. 14776 14777 ``$sin(EXPR)'' 14778 Returns the floating point sine of EXPR. 14779 14780 ``$sinh(EXPR)'' 14781 Returns the floating point hyperbolic sine of EXPR. 14782 14783 ``$sqrt(EXPR)'' 14784 Returns the floating point square root of EXPR. 14785 14786 ``$tan(EXPR)'' 14787 Returns the floating point tangent of EXPR. 14788 14789 ``$tanh(EXPR)'' 14790 Returns the floating point hyperbolic tangent of EXPR. 14791 14792 ``$trunc(EXPR)'' 14793 Returns the integer value of EXPR truncated towards zero as 14794 floating point. 14795 14796 14797 14798 File: as.info, Node: TIC54X-Ext, Next: TIC54X-Directives, Prev: TIC54X-Builtins, Up: TIC54X-Dependent 14799 14800 9.31.8 Extended Addressing 14801 -------------------------- 14802 14803 The `LDX' pseudo-op is provided for loading the extended addressing bits 14804 of a label or address. For example, if an address `_label' resides in 14805 extended program memory, the value of `_label' may be loaded as follows: 14806 ldx #_label,16,a ; loads extended bits of _label 14807 or #_label,a ; loads lower 16 bits of _label 14808 bacc a ; full address is in accumulator A 14809 14810 14811 File: as.info, Node: TIC54X-Directives, Next: TIC54X-Macros, Prev: TIC54X-Ext, Up: TIC54X-Dependent 14812 14813 9.31.9 Directives 14814 ----------------- 14815 14816 `.align [SIZE]' 14817 `.even' 14818 Align the section program counter on the next boundary, based on 14819 SIZE. SIZE may be any power of 2. `.even' is equivalent to 14820 `.align' with a SIZE of 2. 14821 `1' 14822 Align SPC to word boundary 14823 14824 `2' 14825 Align SPC to longword boundary (same as .even) 14826 14827 `128' 14828 Align SPC to page boundary 14829 14830 `.asg STRING, NAME' 14831 Assign NAME the string STRING. String replacement is performed on 14832 STRING before assignment. 14833 14834 `.eval STRING, NAME' 14835 Evaluate the contents of string STRING and assign the result as a 14836 string to the subsym NAME. String replacement is performed on 14837 STRING before assignment. 14838 14839 `.bss SYMBOL, SIZE [, [BLOCKING_FLAG] [,ALIGNMENT_FLAG]]' 14840 Reserve space for SYMBOL in the .bss section. SIZE is in words. 14841 If present, BLOCKING_FLAG indicates the allocated space should be 14842 aligned on a page boundary if it would otherwise cross a page 14843 boundary. If present, ALIGNMENT_FLAG causes the assembler to 14844 allocate SIZE on a long word boundary. 14845 14846 `.byte VALUE [,...,VALUE_N]' 14847 `.ubyte VALUE [,...,VALUE_N]' 14848 `.char VALUE [,...,VALUE_N]' 14849 `.uchar VALUE [,...,VALUE_N]' 14850 Place one or more bytes into consecutive words of the current 14851 section. The upper 8 bits of each word is zero-filled. If a 14852 label is used, it points to the word allocated for the first byte 14853 encountered. 14854 14855 `.clink ["SECTION_NAME"]' 14856 Set STYP_CLINK flag for this section, which indicates to the 14857 linker that if no symbols from this section are referenced, the 14858 section should not be included in the link. If SECTION_NAME is 14859 omitted, the current section is used. 14860 14861 `.c_mode' 14862 TBD. 14863 14864 `.copy "FILENAME" | FILENAME' 14865 `.include "FILENAME" | FILENAME' 14866 Read source statements from FILENAME. The normal include search 14867 path is used. Normally .copy will cause statements from the 14868 included file to be printed in the assembly listing and .include 14869 will not, but this distinction is not currently implemented. 14870 14871 `.data' 14872 Begin assembling code into the .data section. 14873 14874 `.double VALUE [,...,VALUE_N]' 14875 `.ldouble VALUE [,...,VALUE_N]' 14876 `.float VALUE [,...,VALUE_N]' 14877 `.xfloat VALUE [,...,VALUE_N]' 14878 Place an IEEE single-precision floating-point representation of 14879 one or more floating-point values into the current section. All 14880 but `.xfloat' align the result on a longword boundary. Values are 14881 stored most-significant word first. 14882 14883 `.drlist' 14884 `.drnolist' 14885 Control printing of directives to the listing file. Ignored. 14886 14887 `.emsg STRING' 14888 `.mmsg STRING' 14889 `.wmsg STRING' 14890 Emit a user-defined error, message, or warning, respectively. 14891 14892 `.far_mode' 14893 Use extended addressing when assembling statements. This should 14894 appear only once per file, and is equivalent to the -mfar-mode 14895 option *note `-mfar-mode': TIC54X-Opts. 14896 14897 `.fclist' 14898 `.fcnolist' 14899 Control printing of false conditional blocks to the listing file. 14900 14901 `.field VALUE [,SIZE]' 14902 Initialize a bitfield of SIZE bits in the current section. If 14903 VALUE is relocatable, then SIZE must be 16. SIZE defaults to 16 14904 bits. If VALUE does not fit into SIZE bits, the value will be 14905 truncated. Successive `.field' directives will pack starting at 14906 the current word, filling the most significant bits first, and 14907 aligning to the start of the next word if the field size does not 14908 fit into the space remaining in the current word. A `.align' 14909 directive with an operand of 1 will force the next `.field' 14910 directive to begin packing into a new word. If a label is used, it 14911 points to the word that contains the specified field. 14912 14913 `.global SYMBOL [,...,SYMBOL_N]' 14914 `.def SYMBOL [,...,SYMBOL_N]' 14915 `.ref SYMBOL [,...,SYMBOL_N]' 14916 `.def' nominally identifies a symbol defined in the current file 14917 and available to other files. `.ref' identifies a symbol used in 14918 the current file but defined elsewhere. Both map to the standard 14919 `.global' directive. 14920 14921 `.half VALUE [,...,VALUE_N]' 14922 `.uhalf VALUE [,...,VALUE_N]' 14923 `.short VALUE [,...,VALUE_N]' 14924 `.ushort VALUE [,...,VALUE_N]' 14925 `.int VALUE [,...,VALUE_N]' 14926 `.uint VALUE [,...,VALUE_N]' 14927 `.word VALUE [,...,VALUE_N]' 14928 `.uword VALUE [,...,VALUE_N]' 14929 Place one or more values into consecutive words of the current 14930 section. If a label is used, it points to the word allocated for 14931 the first value encountered. 14932 14933 `.label SYMBOL' 14934 Define a special SYMBOL to refer to the load time address of the 14935 current section program counter. 14936 14937 `.length' 14938 `.width' 14939 Set the page length and width of the output listing file. Ignored. 14940 14941 `.list' 14942 `.nolist' 14943 Control whether the source listing is printed. Ignored. 14944 14945 `.long VALUE [,...,VALUE_N]' 14946 `.ulong VALUE [,...,VALUE_N]' 14947 `.xlong VALUE [,...,VALUE_N]' 14948 Place one or more 32-bit values into consecutive words in the 14949 current section. The most significant word is stored first. 14950 `.long' and `.ulong' align the result on a longword boundary; 14951 `xlong' does not. 14952 14953 `.loop [COUNT]' 14954 `.break [CONDITION]' 14955 `.endloop' 14956 Repeatedly assemble a block of code. `.loop' begins the block, and 14957 `.endloop' marks its termination. COUNT defaults to 1024, and 14958 indicates the number of times the block should be repeated. 14959 `.break' terminates the loop so that assembly begins after the 14960 `.endloop' directive. The optional CONDITION will cause the loop 14961 to terminate only if it evaluates to zero. 14962 14963 `MACRO_NAME .macro [PARAM1][,...PARAM_N]' 14964 `[.mexit]' 14965 `.endm' 14966 See the section on macros for more explanation (*Note 14967 TIC54X-Macros::. 14968 14969 `.mlib "FILENAME" | FILENAME' 14970 Load the macro library FILENAME. FILENAME must be an archived 14971 library (BFD ar-compatible) of text files, expected to contain 14972 only macro definitions. The standard include search path is used. 14973 14974 `.mlist' 14975 14976 `.mnolist' 14977 Control whether to include macro and loop block expansions in the 14978 listing output. Ignored. 14979 14980 `.mmregs' 14981 Define global symbolic names for the 'c54x registers. Supposedly 14982 equivalent to executing `.set' directives for each register with 14983 its memory-mapped value, but in reality is provided only for 14984 compatibility and does nothing. 14985 14986 `.newblock' 14987 This directive resets any TIC54X local labels currently defined. 14988 Normal `as' local labels are unaffected. 14989 14990 `.option OPTION_LIST' 14991 Set listing options. Ignored. 14992 14993 `.sblock "SECTION_NAME" | SECTION_NAME [,"NAME_N" | NAME_N]' 14994 Designate SECTION_NAME for blocking. Blocking guarantees that a 14995 section will start on a page boundary (128 words) if it would 14996 otherwise cross a page boundary. Only initialized sections may be 14997 designated with this directive. See also *Note TIC54X-Block::. 14998 14999 `.sect "SECTION_NAME"' 15000 Define a named initialized section and make it the current section. 15001 15002 `SYMBOL .set "VALUE"' 15003 `SYMBOL .equ "VALUE"' 15004 Equate a constant VALUE to a SYMBOL, which is placed in the symbol 15005 table. SYMBOL may not be previously defined. 15006 15007 `.space SIZE_IN_BITS' 15008 `.bes SIZE_IN_BITS' 15009 Reserve the given number of bits in the current section and 15010 zero-fill them. If a label is used with `.space', it points to the 15011 *first* word reserved. With `.bes', the label points to the 15012 *last* word reserved. 15013 15014 `.sslist' 15015 `.ssnolist' 15016 Controls the inclusion of subsym replacement in the listing 15017 output. Ignored. 15018 15019 `.string "STRING" [,...,"STRING_N"]' 15020 `.pstring "STRING" [,...,"STRING_N"]' 15021 Place 8-bit characters from STRING into the current section. 15022 `.string' zero-fills the upper 8 bits of each word, while 15023 `.pstring' puts two characters into each word, filling the 15024 most-significant bits first. Unused space is zero-filled. If a 15025 label is used, it points to the first word initialized. 15026 15027 `[STAG] .struct [OFFSET]' 15028 `[NAME_1] element [COUNT_1]' 15029 `[NAME_2] element [COUNT_2]' 15030 `[TNAME] .tag STAGX [TCOUNT]' 15031 `...' 15032 `[NAME_N] element [COUNT_N]' 15033 `[SSIZE] .endstruct' 15034 `LABEL .tag [STAG]' 15035 Assign symbolic offsets to the elements of a structure. STAG 15036 defines a symbol to use to reference the structure. OFFSET 15037 indicates a starting value to use for the first element 15038 encountered; otherwise it defaults to zero. Each element can have 15039 a named offset, NAME, which is a symbol assigned the value of the 15040 element's offset into the structure. If STAG is missing, these 15041 become global symbols. COUNT adjusts the offset that many times, 15042 as if `element' were an array. `element' may be one of `.byte', 15043 `.word', `.long', `.float', or any equivalent of those, and the 15044 structure offset is adjusted accordingly. `.field' and `.string' 15045 are also allowed; the size of `.field' is one bit, and `.string' 15046 is considered to be one word in size. Only element descriptors, 15047 structure/union tags, `.align' and conditional assembly directives 15048 are allowed within `.struct'/`.endstruct'. `.align' aligns member 15049 offsets to word boundaries only. SSIZE, if provided, will always 15050 be assigned the size of the structure. 15051 15052 The `.tag' directive, in addition to being used to define a 15053 structure/union element within a structure, may be used to apply a 15054 structure to a symbol. Once applied to LABEL, the individual 15055 structure elements may be applied to LABEL to produce the desired 15056 offsets using LABEL as the structure base. 15057 15058 `.tab' 15059 Set the tab size in the output listing. Ignored. 15060 15061 `[UTAG] .union' 15062 `[NAME_1] element [COUNT_1]' 15063 `[NAME_2] element [COUNT_2]' 15064 `[TNAME] .tag UTAGX[,TCOUNT]' 15065 `...' 15066 `[NAME_N] element [COUNT_N]' 15067 `[USIZE] .endstruct' 15068 `LABEL .tag [UTAG]' 15069 Similar to `.struct', but the offset after each element is reset to 15070 zero, and the USIZE is set to the maximum of all defined elements. 15071 Starting offset for the union is always zero. 15072 15073 `[SYMBOL] .usect "SECTION_NAME", SIZE, [,[BLOCKING_FLAG] [,ALIGNMENT_FLAG]]' 15074 Reserve space for variables in a named, uninitialized section 15075 (similar to .bss). `.usect' allows definitions sections 15076 independent of .bss. SYMBOL points to the first location reserved 15077 by this allocation. The symbol may be used as a variable name. 15078 SIZE is the allocated size in words. BLOCKING_FLAG indicates 15079 whether to block this section on a page boundary (128 words) 15080 (*note TIC54X-Block::). ALIGNMENT FLAG indicates whether the 15081 section should be longword-aligned. 15082 15083 `.var SYM[,..., SYM_N]' 15084 Define a subsym to be a local variable within a macro. See *Note 15085 TIC54X-Macros::. 15086 15087 `.version VERSION' 15088 Set which processor to build instructions for. Though the 15089 following values are accepted, the op is ignored. 15090 `541' 15091 `542' 15092 `543' 15093 `545' 15094 `545LP' 15095 `546LP' 15096 `548' 15097 `549' 15098 15099 15100 File: as.info, Node: TIC54X-Macros, Next: TIC54X-MMRegs, Prev: TIC54X-Directives, Up: TIC54X-Dependent 15101 15102 9.31.10 Macros 15103 -------------- 15104 15105 Macros do not require explicit dereferencing of arguments (i.e., \ARG). 15106 15107 During macro expansion, the macro parameters are converted to 15108 subsyms. If the number of arguments passed the macro invocation 15109 exceeds the number of parameters defined, the last parameter is 15110 assigned the string equivalent of all remaining arguments. If fewer 15111 arguments are given than parameters, the missing parameters are 15112 assigned empty strings. To include a comma in an argument, you must 15113 enclose the argument in quotes. 15114 15115 The following built-in subsym functions allow examination of the 15116 string value of subsyms (or ordinary strings). The arguments are 15117 strings unless otherwise indicated (subsyms passed as args will be 15118 replaced by the strings they represent). 15119 ``$symlen(STR)'' 15120 Returns the length of STR. 15121 15122 ``$symcmp(STR1,STR2)'' 15123 Returns 0 if STR1 == STR2, non-zero otherwise. 15124 15125 ``$firstch(STR,CH)'' 15126 Returns index of the first occurrence of character constant CH in 15127 STR. 15128 15129 ``$lastch(STR,CH)'' 15130 Returns index of the last occurrence of character constant CH in 15131 STR. 15132 15133 ``$isdefed(SYMBOL)'' 15134 Returns zero if the symbol SYMBOL is not in the symbol table, 15135 non-zero otherwise. 15136 15137 ``$ismember(SYMBOL,LIST)'' 15138 Assign the first member of comma-separated string LIST to SYMBOL; 15139 LIST is reassigned the remainder of the list. Returns zero if 15140 LIST is a null string. Both arguments must be subsyms. 15141 15142 ``$iscons(EXPR)'' 15143 Returns 1 if string EXPR is binary, 2 if octal, 3 if hexadecimal, 15144 4 if a character, 5 if decimal, and zero if not an integer. 15145 15146 ``$isname(NAME)'' 15147 Returns 1 if NAME is a valid symbol name, zero otherwise. 15148 15149 ``$isreg(REG)'' 15150 Returns 1 if REG is a valid predefined register name (AR0-AR7 15151 only). 15152 15153 ``$structsz(STAG)'' 15154 Returns the size of the structure or union represented by STAG. 15155 15156 ``$structacc(STAG)'' 15157 Returns the reference point of the structure or union represented 15158 by STAG. Always returns zero. 15159 15160 15161 15162 File: as.info, Node: TIC54X-MMRegs, Prev: TIC54X-Macros, Up: TIC54X-Dependent 15163 15164 9.31.11 Memory-mapped Registers 15165 ------------------------------- 15166 15167 The following symbols are recognized as memory-mapped registers: 15168 15169 15170 15171 File: as.info, Node: Z80-Dependent, Next: Z8000-Dependent, Prev: Xtensa-Dependent, Up: Machine Dependencies 15172 15173 9.32 Z80 Dependent Features 15174 =========================== 15175 15176 * Menu: 15177 15178 * Z80 Options:: Options 15179 * Z80 Syntax:: Syntax 15180 * Z80 Floating Point:: Floating Point 15181 * Z80 Directives:: Z80 Machine Directives 15182 * Z80 Opcodes:: Opcodes 15183 15184 15185 File: as.info, Node: Z80 Options, Next: Z80 Syntax, Up: Z80-Dependent 15186 15187 9.32.1 Options 15188 -------------- 15189 15190 The Zilog Z80 and Ascii R800 version of `as' have a few machine 15191 dependent options. 15192 `-z80' 15193 Produce code for the Z80 processor. There are additional options to 15194 request warnings and error messages for undocumented instructions. 15195 15196 `-ignore-undocumented-instructions' 15197 `-Wnud' 15198 Silently assemble undocumented Z80-instructions that have been 15199 adopted as documented R800-instructions. 15200 15201 `-ignore-unportable-instructions' 15202 `-Wnup' 15203 Silently assemble all undocumented Z80-instructions. 15204 15205 `-warn-undocumented-instructions' 15206 `-Wud' 15207 Issue warnings for undocumented Z80-instructions that work on 15208 R800, do not assemble other undocumented instructions without 15209 warning. 15210 15211 `-warn-unportable-instructions' 15212 `-Wup' 15213 Issue warnings for other undocumented Z80-instructions, do not 15214 treat any undocumented instructions as errors. 15215 15216 `-forbid-undocumented-instructions' 15217 `-Fud' 15218 Treat all undocumented z80-instructions as errors. 15219 15220 `-forbid-unportable-instructions' 15221 `-Fup' 15222 Treat undocumented z80-instructions that do not work on R800 as 15223 errors. 15224 15225 `-r800' 15226 Produce code for the R800 processor. The assembler does not support 15227 undocumented instructions for the R800. In line with common 15228 practice, `as' uses Z80 instruction names for the R800 processor, 15229 as far as they exist. 15230 15231 15232 File: as.info, Node: Z80 Syntax, Next: Z80 Floating Point, Prev: Z80 Options, Up: Z80-Dependent 15233 15234 9.32.2 Syntax 15235 ------------- 15236 15237 The assembler syntax closely follows the 'Z80 family CPU User Manual' by 15238 Zilog. In expressions a single `=' may be used as "is equal to" 15239 comparison operator. 15240 15241 Suffices can be used to indicate the radix of integer constants; `H' 15242 or `h' for hexadecimal, `D' or `d' for decimal, `Q', `O', `q' or `o' 15243 for octal, and `B' for binary. 15244 15245 The suffix `b' denotes a backreference to local label. 15246 15247 * Menu: 15248 15249 * Z80-Chars:: Special Characters 15250 * Z80-Regs:: Register Names 15251 * Z80-Case:: Case Sensitivity 15252 15253 15254 File: as.info, Node: Z80-Chars, Next: Z80-Regs, Up: Z80 Syntax 15255 15256 9.32.2.1 Special Characters 15257 ........................... 15258 15259 The semicolon `;' is the line comment character; 15260 15261 The dollar sign `$' can be used as a prefix for hexadecimal numbers 15262 and as a symbol denoting the current location counter. 15263 15264 A backslash `\' is an ordinary character for the Z80 assembler. 15265 15266 The single quote `'' must be followed by a closing quote. If there 15267 is one character in between, it is a character constant, otherwise it is 15268 a string constant. 15269 15270 15271 File: as.info, Node: Z80-Regs, Next: Z80-Case, Prev: Z80-Chars, Up: Z80 Syntax 15272 15273 9.32.2.2 Register Names 15274 ....................... 15275 15276 The registers are referred to with the letters assigned to them by 15277 Zilog. In addition `as' recognizes `ixl' and `ixh' as the least and 15278 most significant octet in `ix', and similarly `iyl' and `iyh' as parts 15279 of `iy'. 15280 15281 15282 File: as.info, Node: Z80-Case, Prev: Z80-Regs, Up: Z80 Syntax 15283 15284 9.32.2.3 Case Sensitivity 15285 ......................... 15286 15287 Upper and lower case are equivalent in register names, opcodes, 15288 condition codes and assembler directives. The case of letters is 15289 significant in labels and symbol names. The case is also important to 15290 distinguish the suffix `b' for a backward reference to a local label 15291 from the suffix `B' for a number in binary notation. 15292 15293 15294 File: as.info, Node: Z80 Floating Point, Next: Z80 Directives, Prev: Z80 Syntax, Up: Z80-Dependent 15295 15296 9.32.3 Floating Point 15297 --------------------- 15298 15299 Floating-point numbers are not supported. 15300 15301 15302 File: as.info, Node: Z80 Directives, Next: Z80 Opcodes, Prev: Z80 Floating Point, Up: Z80-Dependent 15303 15304 9.32.4 Z80 Assembler Directives 15305 ------------------------------- 15306 15307 `as' for the Z80 supports some additional directives for compatibility 15308 with other assemblers. 15309 15310 These are the additional directives in `as' for the Z80: 15311 15312 `db EXPRESSION|STRING[,EXPRESSION|STRING...]' 15313 `defb EXPRESSION|STRING[,EXPRESSION|STRING...]' 15314 For each STRING the characters are copied to the object file, for 15315 each other EXPRESSION the value is stored in one byte. A warning 15316 is issued in case of an overflow. 15317 15318 `dw EXPRESSION[,EXPRESSION...]' 15319 `defw EXPRESSION[,EXPRESSION...]' 15320 For each EXPRESSION the value is stored in two bytes, ignoring 15321 overflow. 15322 15323 `d24 EXPRESSION[,EXPRESSION...]' 15324 `def24 EXPRESSION[,EXPRESSION...]' 15325 For each EXPRESSION the value is stored in three bytes, ignoring 15326 overflow. 15327 15328 `d32 EXPRESSION[,EXPRESSION...]' 15329 `def32 EXPRESSION[,EXPRESSION...]' 15330 For each EXPRESSION the value is stored in four bytes, ignoring 15331 overflow. 15332 15333 `ds COUNT[, VALUE]' 15334 `defs COUNT[, VALUE]' 15335 Fill COUNT bytes in the object file with VALUE, if VALUE is 15336 omitted it defaults to zero. 15337 15338 `SYMBOL equ EXPRESSION' 15339 `SYMBOL defl EXPRESSION' 15340 These directives set the value of SYMBOL to EXPRESSION. If `equ' 15341 is used, it is an error if SYMBOL is already defined. Symbols 15342 defined with `equ' are not protected from redefinition. 15343 15344 `set' 15345 This is a normal instruction on Z80, and not an assembler 15346 directive. 15347 15348 `psect NAME' 15349 A synonym for *Note Section::, no second argument should be given. 15350 15351 15352 15353 File: as.info, Node: Z80 Opcodes, Prev: Z80 Directives, Up: Z80-Dependent 15354 15355 9.32.5 Opcodes 15356 -------------- 15357 15358 In line with common practice, Z80 mnemonics are used for both the Z80 15359 and the R800. 15360 15361 In many instructions it is possible to use one of the half index 15362 registers (`ixl',`ixh',`iyl',`iyh') in stead of an 8-bit general 15363 purpose register. This yields instructions that are documented on the 15364 R800 and undocumented on the Z80. Similarly `in f,(c)' is documented 15365 on the R800 and undocumented on the Z80. 15366 15367 The assembler also supports the following undocumented 15368 Z80-instructions, that have not been adopted in the R800 instruction 15369 set: 15370 `out (c),0' 15371 Sends zero to the port pointed to by register c. 15372 15373 `sli M' 15374 Equivalent to `M = (M<<1)+1', the operand M can be any operand 15375 that is valid for `sla'. One can use `sll' as a synonym for `sli'. 15376 15377 `OP (ix+D), R' 15378 This is equivalent to 15379 15380 ld R, (ix+D) 15381 OPC R 15382 ld (ix+D), R 15383 15384 The operation `OPC' may be any of `res B,', `set B,', `rl', `rlc', 15385 `rr', `rrc', `sla', `sli', `sra' and `srl', and the register `R' 15386 may be any of `a', `b', `c', `d', `e', `h' and `l'. 15387 15388 `OPC (iy+D), R' 15389 As above, but with `iy' instead of `ix'. 15390 15391 The web site at `http://www.z80.info' is a good starting place to 15392 find more information on programming the Z80. 15393 15394 15395 File: as.info, Node: Z8000-Dependent, Next: Vax-Dependent, Prev: Z80-Dependent, Up: Machine Dependencies 15396 15397 9.33 Z8000 Dependent Features 15398 ============================= 15399 15400 The Z8000 as supports both members of the Z8000 family: the 15401 unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with 15402 24 bit addresses. 15403 15404 When the assembler is in unsegmented mode (specified with the 15405 `unsegm' directive), an address takes up one word (16 bit) sized 15406 register. When the assembler is in segmented mode (specified with the 15407 `segm' directive), a 24-bit address takes up a long (32 bit) register. 15408 *Note Assembler Directives for the Z8000: Z8000 Directives, for a list 15409 of other Z8000 specific assembler directives. 15410 15411 * Menu: 15412 15413 * Z8000 Options:: Command-line options for the Z8000 15414 * Z8000 Syntax:: Assembler syntax for the Z8000 15415 * Z8000 Directives:: Special directives for the Z8000 15416 * Z8000 Opcodes:: Opcodes 15417 15418 15419 File: as.info, Node: Z8000 Options, Next: Z8000 Syntax, Up: Z8000-Dependent 15420 15421 9.33.1 Options 15422 -------------- 15423 15424 `-z8001' 15425 Generate segmented code by default. 15426 15427 `-z8002' 15428 Generate unsegmented code by default. 15429 15430 15431 File: as.info, Node: Z8000 Syntax, Next: Z8000 Directives, Prev: Z8000 Options, Up: Z8000-Dependent 15432 15433 9.33.2 Syntax 15434 ------------- 15435 15436 * Menu: 15437 15438 * Z8000-Chars:: Special Characters 15439 * Z8000-Regs:: Register Names 15440 * Z8000-Addressing:: Addressing Modes 15441 15442 15443 File: as.info, Node: Z8000-Chars, Next: Z8000-Regs, Up: Z8000 Syntax 15444 15445 9.33.2.1 Special Characters 15446 ........................... 15447 15448 `!' is the line comment character. 15449 15450 You can use `;' instead of a newline to separate statements. 15451 15452 15453 File: as.info, Node: Z8000-Regs, Next: Z8000-Addressing, Prev: Z8000-Chars, Up: Z8000 Syntax 15454 15455 9.33.2.2 Register Names 15456 ....................... 15457 15458 The Z8000 has sixteen 16 bit registers, numbered 0 to 15. You can refer 15459 to different sized groups of registers by register number, with the 15460 prefix `r' for 16 bit registers, `rr' for 32 bit registers and `rq' for 15461 64 bit registers. You can also refer to the contents of the first 15462 eight (of the sixteen 16 bit registers) by bytes. They are named `rlN' 15463 and `rhN'. 15464 15465 _byte registers_ 15466 rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3 15467 rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7 15468 15469 _word registers_ 15470 r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 15471 15472 _long word registers_ 15473 rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14 15474 15475 _quad word registers_ 15476 rq0 rq4 rq8 rq12 15477 15478 15479 File: as.info, Node: Z8000-Addressing, Prev: Z8000-Regs, Up: Z8000 Syntax 15480 15481 9.33.2.3 Addressing Modes 15482 ......................... 15483 15484 as understands the following addressing modes for the Z8000: 15485 15486 `rlN' 15487 `rhN' 15488 `rN' 15489 `rrN' 15490 `rqN' 15491 Register direct: 8bit, 16bit, 32bit, and 64bit registers. 15492 15493 `@rN' 15494 `@rrN' 15495 Indirect register: @rrN in segmented mode, @rN in unsegmented 15496 mode. 15497 15498 `ADDR' 15499 Direct: the 16 bit or 24 bit address (depending on whether the 15500 assembler is in segmented or unsegmented mode) of the operand is 15501 in the instruction. 15502 15503 `address(rN)' 15504 Indexed: the 16 or 24 bit address is added to the 16 bit register 15505 to produce the final address in memory of the operand. 15506 15507 `rN(#IMM)' 15508 `rrN(#IMM)' 15509 Base Address: the 16 or 24 bit register is added to the 16 bit sign 15510 extended immediate displacement to produce the final address in 15511 memory of the operand. 15512 15513 `rN(rM)' 15514 `rrN(rM)' 15515 Base Index: the 16 or 24 bit register rN or rrN is added to the 15516 sign extended 16 bit index register rM to produce the final 15517 address in memory of the operand. 15518 15519 `#XX' 15520 Immediate data XX. 15521 15522 15523 File: as.info, Node: Z8000 Directives, Next: Z8000 Opcodes, Prev: Z8000 Syntax, Up: Z8000-Dependent 15524 15525 9.33.3 Assembler Directives for the Z8000 15526 ----------------------------------------- 15527 15528 The Z8000 port of as includes additional assembler directives, for 15529 compatibility with other Z8000 assemblers. These do not begin with `.' 15530 (unlike the ordinary as directives). 15531 15532 `segm' 15533 `.z8001' 15534 Generate code for the segmented Z8001. 15535 15536 `unsegm' 15537 `.z8002' 15538 Generate code for the unsegmented Z8002. 15539 15540 `name' 15541 Synonym for `.file' 15542 15543 `global' 15544 Synonym for `.global' 15545 15546 `wval' 15547 Synonym for `.word' 15548 15549 `lval' 15550 Synonym for `.long' 15551 15552 `bval' 15553 Synonym for `.byte' 15554 15555 `sval' 15556 Assemble a string. `sval' expects one string literal, delimited by 15557 single quotes. It assembles each byte of the string into 15558 consecutive addresses. You can use the escape sequence `%XX' 15559 (where XX represents a two-digit hexadecimal number) to represent 15560 the character whose ASCII value is XX. Use this feature to 15561 describe single quote and other characters that may not appear in 15562 string literals as themselves. For example, the C statement 15563 `char *a = "he said \"it's 50% off\"";' is represented in Z8000 15564 assembly language (shown with the assembler output in hex at the 15565 left) as 15566 15567 68652073 sval 'he said %22it%27s 50%25 off%22%00' 15568 61696420 15569 22697427 15570 73203530 15571 25206F66 15572 662200 15573 15574 `rsect' 15575 synonym for `.section' 15576 15577 `block' 15578 synonym for `.space' 15579 15580 `even' 15581 special case of `.align'; aligns output to even byte boundary. 15582 15583 15584 File: as.info, Node: Z8000 Opcodes, Prev: Z8000 Directives, Up: Z8000-Dependent 15585 15586 9.33.4 Opcodes 15587 -------------- 15588 15589 For detailed information on the Z8000 machine instruction set, see 15590 `Z8000 Technical Manual'. 15591 15592 The following table summarizes the opcodes and their arguments: 15593 15594 rs 16 bit source register 15595 rd 16 bit destination register 15596 rbs 8 bit source register 15597 rbd 8 bit destination register 15598 rrs 32 bit source register 15599 rrd 32 bit destination register 15600 rqs 64 bit source register 15601 rqd 64 bit destination register 15602 addr 16/24 bit address 15603 imm immediate data 15604 15605 adc rd,rs clrb addr cpsir @rd,@rs,rr,cc 15606 adcb rbd,rbs clrb addr(rd) cpsirb @rd,@rs,rr,cc 15607 add rd,@rs clrb rbd dab rbd 15608 add rd,addr com @rd dbjnz rbd,disp7 15609 add rd,addr(rs) com addr dec @rd,imm4m1 15610 add rd,imm16 com addr(rd) dec addr(rd),imm4m1 15611 add rd,rs com rd dec addr,imm4m1 15612 addb rbd,@rs comb @rd dec rd,imm4m1 15613 addb rbd,addr comb addr decb @rd,imm4m1 15614 addb rbd,addr(rs) comb addr(rd) decb addr(rd),imm4m1 15615 addb rbd,imm8 comb rbd decb addr,imm4m1 15616 addb rbd,rbs comflg flags decb rbd,imm4m1 15617 addl rrd,@rs cp @rd,imm16 di i2 15618 addl rrd,addr cp addr(rd),imm16 div rrd,@rs 15619 addl rrd,addr(rs) cp addr,imm16 div rrd,addr 15620 addl rrd,imm32 cp rd,@rs div rrd,addr(rs) 15621 addl rrd,rrs cp rd,addr div rrd,imm16 15622 and rd,@rs cp rd,addr(rs) div rrd,rs 15623 and rd,addr cp rd,imm16 divl rqd,@rs 15624 and rd,addr(rs) cp rd,rs divl rqd,addr 15625 and rd,imm16 cpb @rd,imm8 divl rqd,addr(rs) 15626 and rd,rs cpb addr(rd),imm8 divl rqd,imm32 15627 andb rbd,@rs cpb addr,imm8 divl rqd,rrs 15628 andb rbd,addr cpb rbd,@rs djnz rd,disp7 15629 andb rbd,addr(rs) cpb rbd,addr ei i2 15630 andb rbd,imm8 cpb rbd,addr(rs) ex rd,@rs 15631 andb rbd,rbs cpb rbd,imm8 ex rd,addr 15632 bit @rd,imm4 cpb rbd,rbs ex rd,addr(rs) 15633 bit addr(rd),imm4 cpd rd,@rs,rr,cc ex rd,rs 15634 bit addr,imm4 cpdb rbd,@rs,rr,cc exb rbd,@rs 15635 bit rd,imm4 cpdr rd,@rs,rr,cc exb rbd,addr 15636 bit rd,rs cpdrb rbd,@rs,rr,cc exb rbd,addr(rs) 15637 bitb @rd,imm4 cpi rd,@rs,rr,cc exb rbd,rbs 15638 bitb addr(rd),imm4 cpib rbd,@rs,rr,cc ext0e imm8 15639 bitb addr,imm4 cpir rd,@rs,rr,cc ext0f imm8 15640 bitb rbd,imm4 cpirb rbd,@rs,rr,cc ext8e imm8 15641 bitb rbd,rs cpl rrd,@rs ext8f imm8 15642 bpt cpl rrd,addr exts rrd 15643 call @rd cpl rrd,addr(rs) extsb rd 15644 call addr cpl rrd,imm32 extsl rqd 15645 call addr(rd) cpl rrd,rrs halt 15646 calr disp12 cpsd @rd,@rs,rr,cc in rd,@rs 15647 clr @rd cpsdb @rd,@rs,rr,cc in rd,imm16 15648 clr addr cpsdr @rd,@rs,rr,cc inb rbd,@rs 15649 clr addr(rd) cpsdrb @rd,@rs,rr,cc inb rbd,imm16 15650 clr rd cpsi @rd,@rs,rr,cc inc @rd,imm4m1 15651 clrb @rd cpsib @rd,@rs,rr,cc inc addr(rd),imm4m1 15652 inc addr,imm4m1 ldb rbd,rs(rx) mult rrd,addr(rs) 15653 inc rd,imm4m1 ldb rd(imm16),rbs mult rrd,imm16 15654 incb @rd,imm4m1 ldb rd(rx),rbs mult rrd,rs 15655 incb addr(rd),imm4m1 ldctl ctrl,rs multl rqd,@rs 15656 incb addr,imm4m1 ldctl rd,ctrl multl rqd,addr 15657 incb rbd,imm4m1 ldd @rs,@rd,rr multl rqd,addr(rs) 15658 ind @rd,@rs,ra lddb @rs,@rd,rr multl rqd,imm32 15659 indb @rd,@rs,rba lddr @rs,@rd,rr multl rqd,rrs 15660 inib @rd,@rs,ra lddrb @rs,@rd,rr neg @rd 15661 inibr @rd,@rs,ra ldi @rd,@rs,rr neg addr 15662 iret ldib @rd,@rs,rr neg addr(rd) 15663 jp cc,@rd ldir @rd,@rs,rr neg rd 15664 jp cc,addr ldirb @rd,@rs,rr negb @rd 15665 jp cc,addr(rd) ldk rd,imm4 negb addr 15666 jr cc,disp8 ldl @rd,rrs negb addr(rd) 15667 ld @rd,imm16 ldl addr(rd),rrs negb rbd 15668 ld @rd,rs ldl addr,rrs nop 15669 ld addr(rd),imm16 ldl rd(imm16),rrs or rd,@rs 15670 ld addr(rd),rs ldl rd(rx),rrs or rd,addr 15671 ld addr,imm16 ldl rrd,@rs or rd,addr(rs) 15672 ld addr,rs ldl rrd,addr or rd,imm16 15673 ld rd(imm16),rs ldl rrd,addr(rs) or rd,rs 15674 ld rd(rx),rs ldl rrd,imm32 orb rbd,@rs 15675 ld rd,@rs ldl rrd,rrs orb rbd,addr 15676 ld rd,addr ldl rrd,rs(imm16) orb rbd,addr(rs) 15677 ld rd,addr(rs) ldl rrd,rs(rx) orb rbd,imm8 15678 ld rd,imm16 ldm @rd,rs,n orb rbd,rbs 15679 ld rd,rs ldm addr(rd),rs,n out @rd,rs 15680 ld rd,rs(imm16) ldm addr,rs,n out imm16,rs 15681 ld rd,rs(rx) ldm rd,@rs,n outb @rd,rbs 15682 lda rd,addr ldm rd,addr(rs),n outb imm16,rbs 15683 lda rd,addr(rs) ldm rd,addr,n outd @rd,@rs,ra 15684 lda rd,rs(imm16) ldps @rs outdb @rd,@rs,rba 15685 lda rd,rs(rx) ldps addr outib @rd,@rs,ra 15686 ldar rd,disp16 ldps addr(rs) outibr @rd,@rs,ra 15687 ldb @rd,imm8 ldr disp16,rs pop @rd,@rs 15688 ldb @rd,rbs ldr rd,disp16 pop addr(rd),@rs 15689 ldb addr(rd),imm8 ldrb disp16,rbs pop addr,@rs 15690 ldb addr(rd),rbs ldrb rbd,disp16 pop rd,@rs 15691 ldb addr,imm8 ldrl disp16,rrs popl @rd,@rs 15692 ldb addr,rbs ldrl rrd,disp16 popl addr(rd),@rs 15693 ldb rbd,@rs mbit popl addr,@rs 15694 ldb rbd,addr mreq rd popl rrd,@rs 15695 ldb rbd,addr(rs) mres push @rd,@rs 15696 ldb rbd,imm8 mset push @rd,addr 15697 ldb rbd,rbs mult rrd,@rs push @rd,addr(rs) 15698 ldb rbd,rs(imm16) mult rrd,addr push @rd,imm16 15699 push @rd,rs set addr,imm4 subl rrd,imm32 15700 pushl @rd,@rs set rd,imm4 subl rrd,rrs 15701 pushl @rd,addr set rd,rs tcc cc,rd 15702 pushl @rd,addr(rs) setb @rd,imm4 tccb cc,rbd 15703 pushl @rd,rrs setb addr(rd),imm4 test @rd 15704 res @rd,imm4 setb addr,imm4 test addr 15705 res addr(rd),imm4 setb rbd,imm4 test addr(rd) 15706 res addr,imm4 setb rbd,rs test rd 15707 res rd,imm4 setflg imm4 testb @rd 15708 res rd,rs sinb rbd,imm16 testb addr 15709 resb @rd,imm4 sinb rd,imm16 testb addr(rd) 15710 resb addr(rd),imm4 sind @rd,@rs,ra testb rbd 15711 resb addr,imm4 sindb @rd,@rs,rba testl @rd 15712 resb rbd,imm4 sinib @rd,@rs,ra testl addr 15713 resb rbd,rs sinibr @rd,@rs,ra testl addr(rd) 15714 resflg imm4 sla rd,imm8 testl rrd 15715 ret cc slab rbd,imm8 trdb @rd,@rs,rba 15716 rl rd,imm1or2 slal rrd,imm8 trdrb @rd,@rs,rba 15717 rlb rbd,imm1or2 sll rd,imm8 trib @rd,@rs,rbr 15718 rlc rd,imm1or2 sllb rbd,imm8 trirb @rd,@rs,rbr 15719 rlcb rbd,imm1or2 slll rrd,imm8 trtdrb @ra,@rb,rbr 15720 rldb rbb,rba sout imm16,rs trtib @ra,@rb,rr 15721 rr rd,imm1or2 soutb imm16,rbs trtirb @ra,@rb,rbr 15722 rrb rbd,imm1or2 soutd @rd,@rs,ra trtrb @ra,@rb,rbr 15723 rrc rd,imm1or2 soutdb @rd,@rs,rba tset @rd 15724 rrcb rbd,imm1or2 soutib @rd,@rs,ra tset addr 15725 rrdb rbb,rba soutibr @rd,@rs,ra tset addr(rd) 15726 rsvd36 sra rd,imm8 tset rd 15727 rsvd38 srab rbd,imm8 tsetb @rd 15728 rsvd78 sral rrd,imm8 tsetb addr 15729 rsvd7e srl rd,imm8 tsetb addr(rd) 15730 rsvd9d srlb rbd,imm8 tsetb rbd 15731 rsvd9f srll rrd,imm8 xor rd,@rs 15732 rsvdb9 sub rd,@rs xor rd,addr 15733 rsvdbf sub rd,addr xor rd,addr(rs) 15734 sbc rd,rs sub rd,addr(rs) xor rd,imm16 15735 sbcb rbd,rbs sub rd,imm16 xor rd,rs 15736 sc imm8 sub rd,rs xorb rbd,@rs 15737 sda rd,rs subb rbd,@rs xorb rbd,addr 15738 sdab rbd,rs subb rbd,addr xorb rbd,addr(rs) 15739 sdal rrd,rs subb rbd,addr(rs) xorb rbd,imm8 15740 sdl rd,rs subb rbd,imm8 xorb rbd,rbs 15741 sdlb rbd,rs subb rbd,rbs xorb rbd,rbs 15742 sdll rrd,rs subl rrd,@rs 15743 set @rd,imm4 subl rrd,addr 15744 set addr(rd),imm4 subl rrd,addr(rs) 15745 15746 15747 File: as.info, Node: Vax-Dependent, Prev: Z8000-Dependent, Up: Machine Dependencies 15748 15749 9.34 VAX Dependent Features 15750 =========================== 15751 15752 * Menu: 15753 15754 * VAX-Opts:: VAX Command-Line Options 15755 * VAX-float:: VAX Floating Point 15756 * VAX-directives:: Vax Machine Directives 15757 * VAX-opcodes:: VAX Opcodes 15758 * VAX-branch:: VAX Branch Improvement 15759 * VAX-operands:: VAX Operands 15760 * VAX-no:: Not Supported on VAX 15761 15762 15763 File: as.info, Node: VAX-Opts, Next: VAX-float, Up: Vax-Dependent 15764 15765 9.34.1 VAX Command-Line Options 15766 ------------------------------- 15767 15768 The Vax version of `as' accepts any of the following options, gives a 15769 warning message that the option was ignored and proceeds. These 15770 options are for compatibility with scripts designed for other people's 15771 assemblers. 15772 15773 ``-D' (Debug)' 15774 ``-S' (Symbol Table)' 15775 ``-T' (Token Trace)' 15776 These are obsolete options used to debug old assemblers. 15777 15778 ``-d' (Displacement size for JUMPs)' 15779 This option expects a number following the `-d'. Like options 15780 that expect filenames, the number may immediately follow the `-d' 15781 (old standard) or constitute the whole of the command line 15782 argument that follows `-d' (GNU standard). 15783 15784 ``-V' (Virtualize Interpass Temporary File)' 15785 Some other assemblers use a temporary file. This option commanded 15786 them to keep the information in active memory rather than in a 15787 disk file. `as' always does this, so this option is redundant. 15788 15789 ``-J' (JUMPify Longer Branches)' 15790 Many 32-bit computers permit a variety of branch instructions to 15791 do the same job. Some of these instructions are short (and fast) 15792 but have a limited range; others are long (and slow) but can 15793 branch anywhere in virtual memory. Often there are 3 flavors of 15794 branch: short, medium and long. Some other assemblers would emit 15795 short and medium branches, unless told by this option to emit 15796 short and long branches. 15797 15798 ``-t' (Temporary File Directory)' 15799 Some other assemblers may use a temporary file, and this option 15800 takes a filename being the directory to site the temporary file. 15801 Since `as' does not use a temporary disk file, this option makes 15802 no difference. `-t' needs exactly one filename. 15803 15804 The Vax version of the assembler accepts additional options when 15805 compiled for VMS: 15806 15807 `-h N' 15808 External symbol or section (used for global variables) names are 15809 not case sensitive on VAX/VMS and always mapped to upper case. 15810 This is contrary to the C language definition which explicitly 15811 distinguishes upper and lower case. To implement a standard 15812 conforming C compiler, names must be changed (mapped) to preserve 15813 the case information. The default mapping is to convert all lower 15814 case characters to uppercase and adding an underscore followed by 15815 a 6 digit hex value, representing a 24 digit binary value. The 15816 one digits in the binary value represent which characters are 15817 uppercase in the original symbol name. 15818 15819 The `-h N' option determines how we map names. This takes several 15820 values. No `-h' switch at all allows case hacking as described 15821 above. A value of zero (`-h0') implies names should be upper 15822 case, and inhibits the case hack. A value of 2 (`-h2') implies 15823 names should be all lower case, with no case hack. A value of 3 15824 (`-h3') implies that case should be preserved. The value 1 is 15825 unused. The `-H' option directs `as' to display every mapped 15826 symbol during assembly. 15827 15828 Symbols whose names include a dollar sign `$' are exceptions to the 15829 general name mapping. These symbols are normally only used to 15830 reference VMS library names. Such symbols are always mapped to 15831 upper case. 15832 15833 `-+' 15834 The `-+' option causes `as' to truncate any symbol name larger 15835 than 31 characters. The `-+' option also prevents some code 15836 following the `_main' symbol normally added to make the object 15837 file compatible with Vax-11 "C". 15838 15839 `-1' 15840 This option is ignored for backward compatibility with `as' 15841 version 1.x. 15842 15843 `-H' 15844 The `-H' option causes `as' to print every symbol which was 15845 changed by case mapping. 15846 15847 15848 File: as.info, Node: VAX-float, Next: VAX-directives, Prev: VAX-Opts, Up: Vax-Dependent 15849 15850 9.34.2 VAX Floating Point 15851 ------------------------- 15852 15853 Conversion of flonums to floating point is correct, and compatible with 15854 previous assemblers. Rounding is towards zero if the remainder is 15855 exactly half the least significant bit. 15856 15857 `D', `F', `G' and `H' floating point formats are understood. 15858 15859 Immediate floating literals (_e.g._ `S`$6.9') are rendered 15860 correctly. Again, rounding is towards zero in the boundary case. 15861 15862 The `.float' directive produces `f' format numbers. The `.double' 15863 directive produces `d' format numbers. 15864 15865 15866 File: as.info, Node: VAX-directives, Next: VAX-opcodes, Prev: VAX-float, Up: Vax-Dependent 15867 15868 9.34.3 Vax Machine Directives 15869 ----------------------------- 15870 15871 The Vax version of the assembler supports four directives for 15872 generating Vax floating point constants. They are described in the 15873 table below. 15874 15875 `.dfloat' 15876 This expects zero or more flonums, separated by commas, and 15877 assembles Vax `d' format 64-bit floating point constants. 15878 15879 `.ffloat' 15880 This expects zero or more flonums, separated by commas, and 15881 assembles Vax `f' format 32-bit floating point constants. 15882 15883 `.gfloat' 15884 This expects zero or more flonums, separated by commas, and 15885 assembles Vax `g' format 64-bit floating point constants. 15886 15887 `.hfloat' 15888 This expects zero or more flonums, separated by commas, and 15889 assembles Vax `h' format 128-bit floating point constants. 15890 15891 15892 15893 File: as.info, Node: VAX-opcodes, Next: VAX-branch, Prev: VAX-directives, Up: Vax-Dependent 15894 15895 9.34.4 VAX Opcodes 15896 ------------------ 15897 15898 All DEC mnemonics are supported. Beware that `case...' instructions 15899 have exactly 3 operands. The dispatch table that follows the `case...' 15900 instruction should be made with `.word' statements. This is compatible 15901 with all unix assemblers we know of. 15902 15903 15904 File: as.info, Node: VAX-branch, Next: VAX-operands, Prev: VAX-opcodes, Up: Vax-Dependent 15905 15906 9.34.5 VAX Branch Improvement 15907 ----------------------------- 15908 15909 Certain pseudo opcodes are permitted. They are for branch 15910 instructions. They expand to the shortest branch instruction that 15911 reaches the target. Generally these mnemonics are made by substituting 15912 `j' for `b' at the start of a DEC mnemonic. This feature is included 15913 both for compatibility and to help compilers. If you do not need this 15914 feature, avoid these opcodes. Here are the mnemonics, and the code 15915 they can expand into. 15916 15917 `jbsb' 15918 `Jsb' is already an instruction mnemonic, so we chose `jbsb'. 15919 (byte displacement) 15920 `bsbb ...' 15921 15922 (word displacement) 15923 `bsbw ...' 15924 15925 (long displacement) 15926 `jsb ...' 15927 15928 `jbr' 15929 `jr' 15930 Unconditional branch. 15931 (byte displacement) 15932 `brb ...' 15933 15934 (word displacement) 15935 `brw ...' 15936 15937 (long displacement) 15938 `jmp ...' 15939 15940 `jCOND' 15941 COND may be any one of the conditional branches `neq', `nequ', 15942 `eql', `eqlu', `gtr', `geq', `lss', `gtru', `lequ', `vc', `vs', 15943 `gequ', `cc', `lssu', `cs'. COND may also be one of the bit tests 15944 `bs', `bc', `bss', `bcs', `bsc', `bcc', `bssi', `bcci', `lbs', 15945 `lbc'. NOTCOND is the opposite condition to COND. 15946 (byte displacement) 15947 `bCOND ...' 15948 15949 (word displacement) 15950 `bNOTCOND foo ; brw ... ; foo:' 15951 15952 (long displacement) 15953 `bNOTCOND foo ; jmp ... ; foo:' 15954 15955 `jacbX' 15956 X may be one of `b d f g h l w'. 15957 (word displacement) 15958 `OPCODE ...' 15959 15960 (long displacement) 15961 OPCODE ..., foo ; 15962 brb bar ; 15963 foo: jmp ... ; 15964 bar: 15965 15966 `jaobYYY' 15967 YYY may be one of `lss leq'. 15968 15969 `jsobZZZ' 15970 ZZZ may be one of `geq gtr'. 15971 (byte displacement) 15972 `OPCODE ...' 15973 15974 (word displacement) 15975 OPCODE ..., foo ; 15976 brb bar ; 15977 foo: brw DESTINATION ; 15978 bar: 15979 15980 (long displacement) 15981 OPCODE ..., foo ; 15982 brb bar ; 15983 foo: jmp DESTINATION ; 15984 bar: 15985 15986 `aobleq' 15987 `aoblss' 15988 `sobgeq' 15989 `sobgtr' 15990 15991 (byte displacement) 15992 `OPCODE ...' 15993 15994 (word displacement) 15995 OPCODE ..., foo ; 15996 brb bar ; 15997 foo: brw DESTINATION ; 15998 bar: 15999 16000 (long displacement) 16001 OPCODE ..., foo ; 16002 brb bar ; 16003 foo: jmp DESTINATION ; 16004 bar: 16005 16006 16007 File: as.info, Node: VAX-operands, Next: VAX-no, Prev: VAX-branch, Up: Vax-Dependent 16008 16009 9.34.6 VAX Operands 16010 ------------------- 16011 16012 The immediate character is `$' for Unix compatibility, not `#' as DEC 16013 writes it. 16014 16015 The indirect character is `*' for Unix compatibility, not `@' as DEC 16016 writes it. 16017 16018 The displacement sizing character is ``' (an accent grave) for Unix 16019 compatibility, not `^' as DEC writes it. The letter preceding ``' may 16020 have either case. `G' is not understood, but all other letters (`b i l 16021 s w') are understood. 16022 16023 Register names understood are `r0 r1 r2 ... r15 ap fp sp pc'. Upper 16024 and lower case letters are equivalent. 16025 16026 For instance 16027 tstb *w`$4(r5) 16028 16029 Any expression is permitted in an operand. Operands are comma 16030 separated. 16031 16032 16033 File: as.info, Node: VAX-no, Prev: VAX-operands, Up: Vax-Dependent 16034 16035 9.34.7 Not Supported on VAX 16036 --------------------------- 16037 16038 Vax bit fields can not be assembled with `as'. Someone can add the 16039 required code if they really need it. 16040 16041 16042 File: as.info, Node: V850-Dependent, Next: Xtensa-Dependent, Prev: TIC54X-Dependent, Up: Machine Dependencies 16043 16044 9.35 v850 Dependent Features 16045 ============================ 16046 16047 * Menu: 16048 16049 * V850 Options:: Options 16050 * V850 Syntax:: Syntax 16051 * V850 Floating Point:: Floating Point 16052 * V850 Directives:: V850 Machine Directives 16053 * V850 Opcodes:: Opcodes 16054 16055 16056 File: as.info, Node: V850 Options, Next: V850 Syntax, Up: V850-Dependent 16057 16058 9.35.1 Options 16059 -------------- 16060 16061 `as' supports the following additional command-line options for the 16062 V850 processor family: 16063 16064 `-wsigned_overflow' 16065 Causes warnings to be produced when signed immediate values 16066 overflow the space available for then within their opcodes. By 16067 default this option is disabled as it is possible to receive 16068 spurious warnings due to using exact bit patterns as immediate 16069 constants. 16070 16071 `-wunsigned_overflow' 16072 Causes warnings to be produced when unsigned immediate values 16073 overflow the space available for then within their opcodes. By 16074 default this option is disabled as it is possible to receive 16075 spurious warnings due to using exact bit patterns as immediate 16076 constants. 16077 16078 `-mv850' 16079 Specifies that the assembled code should be marked as being 16080 targeted at the V850 processor. This allows the linker to detect 16081 attempts to link such code with code assembled for other 16082 processors. 16083 16084 `-mv850e' 16085 Specifies that the assembled code should be marked as being 16086 targeted at the V850E processor. This allows the linker to detect 16087 attempts to link such code with code assembled for other 16088 processors. 16089 16090 `-mv850e1' 16091 Specifies that the assembled code should be marked as being 16092 targeted at the V850E1 processor. This allows the linker to 16093 detect attempts to link such code with code assembled for other 16094 processors. 16095 16096 `-mv850any' 16097 Specifies that the assembled code should be marked as being 16098 targeted at the V850 processor but support instructions that are 16099 specific to the extended variants of the process. This allows the 16100 production of binaries that contain target specific code, but 16101 which are also intended to be used in a generic fashion. For 16102 example libgcc.a contains generic routines used by the code 16103 produced by GCC for all versions of the v850 architecture, 16104 together with support routines only used by the V850E architecture. 16105 16106 `-mrelax' 16107 Enables relaxation. This allows the .longcall and .longjump pseudo 16108 ops to be used in the assembler source code. These ops label 16109 sections of code which are either a long function call or a long 16110 branch. The assembler will then flag these sections of code and 16111 the linker will attempt to relax them. 16112 16113 16114 16115 File: as.info, Node: V850 Syntax, Next: V850 Floating Point, Prev: V850 Options, Up: V850-Dependent 16116 16117 9.35.2 Syntax 16118 ------------- 16119 16120 * Menu: 16121 16122 * V850-Chars:: Special Characters 16123 * V850-Regs:: Register Names 16124 16125 16126 File: as.info, Node: V850-Chars, Next: V850-Regs, Up: V850 Syntax 16127 16128 9.35.2.1 Special Characters 16129 ........................... 16130 16131 `#' is the line comment character. 16132 16133 16134 File: as.info, Node: V850-Regs, Prev: V850-Chars, Up: V850 Syntax 16135 16136 9.35.2.2 Register Names 16137 ....................... 16138 16139 `as' supports the following names for registers: 16140 `general register 0' 16141 r0, zero 16142 16143 `general register 1' 16144 r1 16145 16146 `general register 2' 16147 r2, hp 16148 16149 `general register 3' 16150 r3, sp 16151 16152 `general register 4' 16153 r4, gp 16154 16155 `general register 5' 16156 r5, tp 16157 16158 `general register 6' 16159 r6 16160 16161 `general register 7' 16162 r7 16163 16164 `general register 8' 16165 r8 16166 16167 `general register 9' 16168 r9 16169 16170 `general register 10' 16171 r10 16172 16173 `general register 11' 16174 r11 16175 16176 `general register 12' 16177 r12 16178 16179 `general register 13' 16180 r13 16181 16182 `general register 14' 16183 r14 16184 16185 `general register 15' 16186 r15 16187 16188 `general register 16' 16189 r16 16190 16191 `general register 17' 16192 r17 16193 16194 `general register 18' 16195 r18 16196 16197 `general register 19' 16198 r19 16199 16200 `general register 20' 16201 r20 16202 16203 `general register 21' 16204 r21 16205 16206 `general register 22' 16207 r22 16208 16209 `general register 23' 16210 r23 16211 16212 `general register 24' 16213 r24 16214 16215 `general register 25' 16216 r25 16217 16218 `general register 26' 16219 r26 16220 16221 `general register 27' 16222 r27 16223 16224 `general register 28' 16225 r28 16226 16227 `general register 29' 16228 r29 16229 16230 `general register 30' 16231 r30, ep 16232 16233 `general register 31' 16234 r31, lp 16235 16236 `system register 0' 16237 eipc 16238 16239 `system register 1' 16240 eipsw 16241 16242 `system register 2' 16243 fepc 16244 16245 `system register 3' 16246 fepsw 16247 16248 `system register 4' 16249 ecr 16250 16251 `system register 5' 16252 psw 16253 16254 `system register 16' 16255 ctpc 16256 16257 `system register 17' 16258 ctpsw 16259 16260 `system register 18' 16261 dbpc 16262 16263 `system register 19' 16264 dbpsw 16265 16266 `system register 20' 16267 ctbp 16268 16269 16270 File: as.info, Node: V850 Floating Point, Next: V850 Directives, Prev: V850 Syntax, Up: V850-Dependent 16271 16272 9.35.3 Floating Point 16273 --------------------- 16274 16275 The V850 family uses IEEE floating-point numbers. 16276 16277 16278 File: as.info, Node: V850 Directives, Next: V850 Opcodes, Prev: V850 Floating Point, Up: V850-Dependent 16279 16280 9.35.4 V850 Machine Directives 16281 ------------------------------ 16282 16283 `.offset <EXPRESSION>' 16284 Moves the offset into the current section to the specified amount. 16285 16286 `.section "name", <type>' 16287 This is an extension to the standard .section directive. It sets 16288 the current section to be <type> and creates an alias for this 16289 section called "name". 16290 16291 `.v850' 16292 Specifies that the assembled code should be marked as being 16293 targeted at the V850 processor. This allows the linker to detect 16294 attempts to link such code with code assembled for other 16295 processors. 16296 16297 `.v850e' 16298 Specifies that the assembled code should be marked as being 16299 targeted at the V850E processor. This allows the linker to detect 16300 attempts to link such code with code assembled for other 16301 processors. 16302 16303 `.v850e1' 16304 Specifies that the assembled code should be marked as being 16305 targeted at the V850E1 processor. This allows the linker to 16306 detect attempts to link such code with code assembled for other 16307 processors. 16308 16309 16310 16311 File: as.info, Node: V850 Opcodes, Prev: V850 Directives, Up: V850-Dependent 16312 16313 9.35.5 Opcodes 16314 -------------- 16315 16316 `as' implements all the standard V850 opcodes. 16317 16318 `as' also implements the following pseudo ops: 16319 16320 `hi0()' 16321 Computes the higher 16 bits of the given expression and stores it 16322 into the immediate operand field of the given instruction. For 16323 example: 16324 16325 `mulhi hi0(here - there), r5, r6' 16326 16327 computes the difference between the address of labels 'here' and 16328 'there', takes the upper 16 bits of this difference, shifts it 16329 down 16 bits and then multiplies it by the lower 16 bits in 16330 register 5, putting the result into register 6. 16331 16332 `lo()' 16333 Computes the lower 16 bits of the given expression and stores it 16334 into the immediate operand field of the given instruction. For 16335 example: 16336 16337 `addi lo(here - there), r5, r6' 16338 16339 computes the difference between the address of labels 'here' and 16340 'there', takes the lower 16 bits of this difference and adds it to 16341 register 5, putting the result into register 6. 16342 16343 `hi()' 16344 Computes the higher 16 bits of the given expression and then adds 16345 the value of the most significant bit of the lower 16 bits of the 16346 expression and stores the result into the immediate operand field 16347 of the given instruction. For example the following code can be 16348 used to compute the address of the label 'here' and store it into 16349 register 6: 16350 16351 `movhi hi(here), r0, r6' `movea lo(here), r6, r6' 16352 16353 The reason for this special behaviour is that movea performs a sign 16354 extension on its immediate operand. So for example if the address 16355 of 'here' was 0xFFFFFFFF then without the special behaviour of the 16356 hi() pseudo-op the movhi instruction would put 0xFFFF0000 into r6, 16357 then the movea instruction would takes its immediate operand, 16358 0xFFFF, sign extend it to 32 bits, 0xFFFFFFFF, and then add it 16359 into r6 giving 0xFFFEFFFF which is wrong (the fifth nibble is E). 16360 With the hi() pseudo op adding in the top bit of the lo() pseudo 16361 op, the movhi instruction actually stores 0 into r6 (0xFFFF + 1 = 16362 0x0000), so that the movea instruction stores 0xFFFFFFFF into r6 - 16363 the right value. 16364 16365 `hilo()' 16366 Computes the 32 bit value of the given expression and stores it 16367 into the immediate operand field of the given instruction (which 16368 must be a mov instruction). For example: 16369 16370 `mov hilo(here), r6' 16371 16372 computes the absolute address of label 'here' and puts the result 16373 into register 6. 16374 16375 `sdaoff()' 16376 Computes the offset of the named variable from the start of the 16377 Small Data Area (whoes address is held in register 4, the GP 16378 register) and stores the result as a 16 bit signed value in the 16379 immediate operand field of the given instruction. For example: 16380 16381 `ld.w sdaoff(_a_variable)[gp],r6' 16382 16383 loads the contents of the location pointed to by the label 16384 '_a_variable' into register 6, provided that the label is located 16385 somewhere within +/- 32K of the address held in the GP register. 16386 [Note the linker assumes that the GP register contains a fixed 16387 address set to the address of the label called '__gp'. This can 16388 either be set up automatically by the linker, or specifically set 16389 by using the `--defsym __gp=<value>' command line option]. 16390 16391 `tdaoff()' 16392 Computes the offset of the named variable from the start of the 16393 Tiny Data Area (whoes address is held in register 30, the EP 16394 register) and stores the result as a 4,5, 7 or 8 bit unsigned 16395 value in the immediate operand field of the given instruction. 16396 For example: 16397 16398 `sld.w tdaoff(_a_variable)[ep],r6' 16399 16400 loads the contents of the location pointed to by the label 16401 '_a_variable' into register 6, provided that the label is located 16402 somewhere within +256 bytes of the address held in the EP 16403 register. [Note the linker assumes that the EP register contains 16404 a fixed address set to the address of the label called '__ep'. 16405 This can either be set up automatically by the linker, or 16406 specifically set by using the `--defsym __ep=<value>' command line 16407 option]. 16408 16409 `zdaoff()' 16410 Computes the offset of the named variable from address 0 and 16411 stores the result as a 16 bit signed value in the immediate 16412 operand field of the given instruction. For example: 16413 16414 `movea zdaoff(_a_variable),zero,r6' 16415 16416 puts the address of the label '_a_variable' into register 6, 16417 assuming that the label is somewhere within the first 32K of 16418 memory. (Strictly speaking it also possible to access the last 16419 32K of memory as well, as the offsets are signed). 16420 16421 `ctoff()' 16422 Computes the offset of the named variable from the start of the 16423 Call Table Area (whoes address is helg in system register 20, the 16424 CTBP register) and stores the result a 6 or 16 bit unsigned value 16425 in the immediate field of then given instruction or piece of data. 16426 For example: 16427 16428 `callt ctoff(table_func1)' 16429 16430 will put the call the function whoes address is held in the call 16431 table at the location labeled 'table_func1'. 16432 16433 `.longcall `name'' 16434 Indicates that the following sequence of instructions is a long 16435 call to function `name'. The linker will attempt to shorten this 16436 call sequence if `name' is within a 22bit offset of the call. Only 16437 valid if the `-mrelax' command line switch has been enabled. 16438 16439 `.longjump `name'' 16440 Indicates that the following sequence of instructions is a long 16441 jump to label `name'. The linker will attempt to shorten this code 16442 sequence if `name' is within a 22bit offset of the jump. Only 16443 valid if the `-mrelax' command line switch has been enabled. 16444 16445 16446 For information on the V850 instruction set, see `V850 Family 16447 32-/16-Bit single-Chip Microcontroller Architecture Manual' from NEC. 16448 Ltd. 16449 16450 16451 File: as.info, Node: Xtensa-Dependent, Next: Z80-Dependent, Prev: V850-Dependent, Up: Machine Dependencies 16452 16453 9.36 Xtensa Dependent Features 16454 ============================== 16455 16456 This chapter covers features of the GNU assembler that are specific 16457 to the Xtensa architecture. For details about the Xtensa instruction 16458 set, please consult the `Xtensa Instruction Set Architecture (ISA) 16459 Reference Manual'. 16460 16461 * Menu: 16462 16463 * Xtensa Options:: Command-line Options. 16464 * Xtensa Syntax:: Assembler Syntax for Xtensa Processors. 16465 * Xtensa Optimizations:: Assembler Optimizations. 16466 * Xtensa Relaxation:: Other Automatic Transformations. 16467 * Xtensa Directives:: Directives for Xtensa Processors. 16468 16469 16470 File: as.info, Node: Xtensa Options, Next: Xtensa Syntax, Up: Xtensa-Dependent 16471 16472 9.36.1 Command Line Options 16473 --------------------------- 16474 16475 The Xtensa version of the GNU assembler supports these special options: 16476 16477 `--text-section-literals | --no-text-section-literals' 16478 Control the treatment of literal pools. The default is 16479 `--no-text-section-literals', which places literals in separate 16480 sections in the output file. This allows the literal pool to be 16481 placed in a data RAM/ROM. With `--text-section-literals', the 16482 literals are interspersed in the text section in order to keep 16483 them as close as possible to their references. This may be 16484 necessary for large assembly files, where the literals would 16485 otherwise be out of range of the `L32R' instructions in the text 16486 section. These options only affect literals referenced via 16487 PC-relative `L32R' instructions; literals for absolute mode `L32R' 16488 instructions are handled separately. *Note literal: Literal 16489 Directive. 16490 16491 `--absolute-literals | --no-absolute-literals' 16492 Indicate to the assembler whether `L32R' instructions use absolute 16493 or PC-relative addressing. If the processor includes the absolute 16494 addressing option, the default is to use absolute `L32R' 16495 relocations. Otherwise, only the PC-relative `L32R' relocations 16496 can be used. 16497 16498 `--target-align | --no-target-align' 16499 Enable or disable automatic alignment to reduce branch penalties 16500 at some expense in code size. *Note Automatic Instruction 16501 Alignment: Xtensa Automatic Alignment. This optimization is 16502 enabled by default. Note that the assembler will always align 16503 instructions like `LOOP' that have fixed alignment requirements. 16504 16505 `--longcalls | --no-longcalls' 16506 Enable or disable transformation of call instructions to allow 16507 calls across a greater range of addresses. *Note Function Call 16508 Relaxation: Xtensa Call Relaxation. This option should be used 16509 when call targets can potentially be out of range. It may degrade 16510 both code size and performance, but the linker can generally 16511 optimize away the unnecessary overhead when a call ends up within 16512 range. The default is `--no-longcalls'. 16513 16514 `--transform | --no-transform' 16515 Enable or disable all assembler transformations of Xtensa 16516 instructions, including both relaxation and optimization. The 16517 default is `--transform'; `--no-transform' should only be used in 16518 the rare cases when the instructions must be exactly as specified 16519 in the assembly source. Using `--no-transform' causes out of range 16520 instruction operands to be errors. 16521 16522 `--rename-section OLDNAME=NEWNAME' 16523 Rename the OLDNAME section to NEWNAME. This option can be used 16524 multiple times to rename multiple sections. 16525 16526 16527 File: as.info, Node: Xtensa Syntax, Next: Xtensa Optimizations, Prev: Xtensa Options, Up: Xtensa-Dependent 16528 16529 9.36.2 Assembler Syntax 16530 ----------------------- 16531 16532 Block comments are delimited by `/*' and `*/'. End of line comments 16533 may be introduced with either `#' or `//'. 16534 16535 Instructions consist of a leading opcode or macro name followed by 16536 whitespace and an optional comma-separated list of operands: 16537 16538 OPCODE [OPERAND, ...] 16539 16540 Instructions must be separated by a newline or semicolon. 16541 16542 FLIX instructions, which bundle multiple opcodes together in a single 16543 instruction, are specified by enclosing the bundled opcodes inside 16544 braces: 16545 16546 { 16547 [FORMAT] 16548 OPCODE0 [OPERANDS] 16549 OPCODE1 [OPERANDS] 16550 OPCODE2 [OPERANDS] 16551 ... 16552 } 16553 16554 The opcodes in a FLIX instruction are listed in the same order as the 16555 corresponding instruction slots in the TIE format declaration. 16556 Directives and labels are not allowed inside the braces of a FLIX 16557 instruction. A particular TIE format name can optionally be specified 16558 immediately after the opening brace, but this is usually unnecessary. 16559 The assembler will automatically search for a format that can encode the 16560 specified opcodes, so the format name need only be specified in rare 16561 cases where there is more than one applicable format and where it 16562 matters which of those formats is used. A FLIX instruction can also be 16563 specified on a single line by separating the opcodes with semicolons: 16564 16565 { [FORMAT;] OPCODE0 [OPERANDS]; OPCODE1 [OPERANDS]; OPCODE2 [OPERANDS]; ... } 16566 16567 If an opcode can only be encoded in a FLIX instruction but is not 16568 specified as part of a FLIX bundle, the assembler will choose the 16569 smallest format where the opcode can be encoded and will fill unused 16570 instruction slots with no-ops. 16571 16572 * Menu: 16573 16574 * Xtensa Opcodes:: Opcode Naming Conventions. 16575 * Xtensa Registers:: Register Naming. 16576 16577 16578 File: as.info, Node: Xtensa Opcodes, Next: Xtensa Registers, Up: Xtensa Syntax 16579 16580 9.36.2.1 Opcode Names 16581 ..................... 16582 16583 See the `Xtensa Instruction Set Architecture (ISA) Reference Manual' 16584 for a complete list of opcodes and descriptions of their semantics. 16585 16586 If an opcode name is prefixed with an underscore character (`_'), 16587 `as' will not transform that instruction in any way. The underscore 16588 prefix disables both optimization (*note Xtensa Optimizations: Xtensa 16589 Optimizations.) and relaxation (*note Xtensa Relaxation: Xtensa 16590 Relaxation.) for that particular instruction. Only use the underscore 16591 prefix when it is essential to select the exact opcode produced by the 16592 assembler. Using this feature unnecessarily makes the code less 16593 efficient by disabling assembler optimization and less flexible by 16594 disabling relaxation. 16595 16596 Note that this special handling of underscore prefixes only applies 16597 to Xtensa opcodes, not to either built-in macros or user-defined macros. 16598 When an underscore prefix is used with a macro (e.g., `_MOV'), it 16599 refers to a different macro. The assembler generally provides built-in 16600 macros both with and without the underscore prefix, where the underscore 16601 versions behave as if the underscore carries through to the instructions 16602 in the macros. For example, `_MOV' may expand to `_MOV.N'. 16603 16604 The underscore prefix only applies to individual instructions, not to 16605 series of instructions. For example, if a series of instructions have 16606 underscore prefixes, the assembler will not transform the individual 16607 instructions, but it may insert other instructions between them (e.g., 16608 to align a `LOOP' instruction). To prevent the assembler from 16609 modifying a series of instructions as a whole, use the `no-transform' 16610 directive. *Note transform: Transform Directive. 16611 16612 16613 File: as.info, Node: Xtensa Registers, Prev: Xtensa Opcodes, Up: Xtensa Syntax 16614 16615 9.36.2.2 Register Names 16616 ....................... 16617 16618 The assembly syntax for a register file entry is the "short" name for a 16619 TIE register file followed by the index into that register file. For 16620 example, the general-purpose `AR' register file has a short name of 16621 `a', so these registers are named `a0'...`a15'. As a special feature, 16622 `sp' is also supported as a synonym for `a1'. Additional registers may 16623 be added by processor configuration options and by designer-defined TIE 16624 extensions. An initial `$' character is optional in all register names. 16625 16626 16627 File: as.info, Node: Xtensa Optimizations, Next: Xtensa Relaxation, Prev: Xtensa Syntax, Up: Xtensa-Dependent 16628 16629 9.36.3 Xtensa Optimizations 16630 --------------------------- 16631 16632 The optimizations currently supported by `as' are generation of density 16633 instructions where appropriate and automatic branch target alignment. 16634 16635 * Menu: 16636 16637 * Density Instructions:: Using Density Instructions. 16638 * Xtensa Automatic Alignment:: Automatic Instruction Alignment. 16639 16640 16641 File: as.info, Node: Density Instructions, Next: Xtensa Automatic Alignment, Up: Xtensa Optimizations 16642 16643 9.36.3.1 Using Density Instructions 16644 ................................... 16645 16646 The Xtensa instruction set has a code density option that provides 16647 16-bit versions of some of the most commonly used opcodes. Use of these 16648 opcodes can significantly reduce code size. When possible, the 16649 assembler automatically translates instructions from the core Xtensa 16650 instruction set into equivalent instructions from the Xtensa code 16651 density option. This translation can be disabled by using underscore 16652 prefixes (*note Opcode Names: Xtensa Opcodes.), by using the 16653 `--no-transform' command-line option (*note Command Line Options: 16654 Xtensa Options.), or by using the `no-transform' directive (*note 16655 transform: Transform Directive.). 16656 16657 It is a good idea _not_ to use the density instructions directly. 16658 The assembler will automatically select dense instructions where 16659 possible. If you later need to use an Xtensa processor without the code 16660 density option, the same assembly code will then work without 16661 modification. 16662 16663 16664 File: as.info, Node: Xtensa Automatic Alignment, Prev: Density Instructions, Up: Xtensa Optimizations 16665 16666 9.36.3.2 Automatic Instruction Alignment 16667 ........................................ 16668 16669 The Xtensa assembler will automatically align certain instructions, both 16670 to optimize performance and to satisfy architectural requirements. 16671 16672 As an optimization to improve performance, the assembler attempts to 16673 align branch targets so they do not cross instruction fetch boundaries. 16674 (Xtensa processors can be configured with either 32-bit or 64-bit 16675 instruction fetch widths.) An instruction immediately following a call 16676 is treated as a branch target in this context, because it will be the 16677 target of a return from the call. This alignment has the potential to 16678 reduce branch penalties at some expense in code size. This 16679 optimization is enabled by default. You can disable it with the 16680 `--no-target-align' command-line option (*note Command Line Options: 16681 Xtensa Options.). 16682 16683 The target alignment optimization is done without adding instructions 16684 that could increase the execution time of the program. If there are 16685 density instructions in the code preceding a target, the assembler can 16686 change the target alignment by widening some of those instructions to 16687 the equivalent 24-bit instructions. Extra bytes of padding can be 16688 inserted immediately following unconditional jump and return 16689 instructions. This approach is usually successful in aligning many, 16690 but not all, branch targets. 16691 16692 The `LOOP' family of instructions must be aligned such that the 16693 first instruction in the loop body does not cross an instruction fetch 16694 boundary (e.g., with a 32-bit fetch width, a `LOOP' instruction must be 16695 on either a 1 or 2 mod 4 byte boundary). The assembler knows about 16696 this restriction and inserts the minimal number of 2 or 3 byte no-op 16697 instructions to satisfy it. When no-op instructions are added, any 16698 label immediately preceding the original loop will be moved in order to 16699 refer to the loop instruction, not the newly generated no-op 16700 instruction. To preserve binary compatibility across processors with 16701 different fetch widths, the assembler conservatively assumes a 32-bit 16702 fetch width when aligning `LOOP' instructions (except if the first 16703 instruction in the loop is a 64-bit instruction). 16704 16705 Previous versions of the assembler automatically aligned `ENTRY' 16706 instructions to 4-byte boundaries, but that alignment is now the 16707 programmer's responsibility. 16708 16709 16710 File: as.info, Node: Xtensa Relaxation, Next: Xtensa Directives, Prev: Xtensa Optimizations, Up: Xtensa-Dependent 16711 16712 9.36.4 Xtensa Relaxation 16713 ------------------------ 16714 16715 When an instruction operand is outside the range allowed for that 16716 particular instruction field, `as' can transform the code to use a 16717 functionally-equivalent instruction or sequence of instructions. This 16718 process is known as "relaxation". This is typically done for branch 16719 instructions because the distance of the branch targets is not known 16720 until assembly-time. The Xtensa assembler offers branch relaxation and 16721 also extends this concept to function calls, `MOVI' instructions and 16722 other instructions with immediate fields. 16723 16724 * Menu: 16725 16726 * Xtensa Branch Relaxation:: Relaxation of Branches. 16727 * Xtensa Call Relaxation:: Relaxation of Function Calls. 16728 * Xtensa Immediate Relaxation:: Relaxation of other Immediate Fields. 16729 16730 16731 File: as.info, Node: Xtensa Branch Relaxation, Next: Xtensa Call Relaxation, Up: Xtensa Relaxation 16732 16733 9.36.4.1 Conditional Branch Relaxation 16734 ...................................... 16735 16736 When the target of a branch is too far away from the branch itself, 16737 i.e., when the offset from the branch to the target is too large to fit 16738 in the immediate field of the branch instruction, it may be necessary to 16739 replace the branch with a branch around a jump. For example, 16740 16741 beqz a2, L 16742 16743 may result in: 16744 16745 bnez.n a2, M 16746 j L 16747 M: 16748 16749 (The `BNEZ.N' instruction would be used in this example only if the 16750 density option is available. Otherwise, `BNEZ' would be used.) 16751 16752 This relaxation works well because the unconditional jump instruction 16753 has a much larger offset range than the various conditional branches. 16754 However, an error will occur if a branch target is beyond the range of a 16755 jump instruction. `as' cannot relax unconditional jumps. Similarly, 16756 an error will occur if the original input contains an unconditional 16757 jump to a target that is out of range. 16758 16759 Branch relaxation is enabled by default. It can be disabled by using 16760 underscore prefixes (*note Opcode Names: Xtensa Opcodes.), the 16761 `--no-transform' command-line option (*note Command Line Options: 16762 Xtensa Options.), or the `no-transform' directive (*note transform: 16763 Transform Directive.). 16764 16765 16766 File: as.info, Node: Xtensa Call Relaxation, Next: Xtensa Immediate Relaxation, Prev: Xtensa Branch Relaxation, Up: Xtensa Relaxation 16767 16768 9.36.4.2 Function Call Relaxation 16769 ................................. 16770 16771 Function calls may require relaxation because the Xtensa immediate call 16772 instructions (`CALL0', `CALL4', `CALL8' and `CALL12') provide a 16773 PC-relative offset of only 512 Kbytes in either direction. For larger 16774 programs, it may be necessary to use indirect calls (`CALLX0', 16775 `CALLX4', `CALLX8' and `CALLX12') where the target address is specified 16776 in a register. The Xtensa assembler can automatically relax immediate 16777 call instructions into indirect call instructions. This relaxation is 16778 done by loading the address of the called function into the callee's 16779 return address register and then using a `CALLX' instruction. So, for 16780 example: 16781 16782 call8 func 16783 16784 might be relaxed to: 16785 16786 .literal .L1, func 16787 l32r a8, .L1 16788 callx8 a8 16789 16790 Because the addresses of targets of function calls are not generally 16791 known until link-time, the assembler must assume the worst and relax all 16792 the calls to functions in other source files, not just those that really 16793 will be out of range. The linker can recognize calls that were 16794 unnecessarily relaxed, and it will remove the overhead introduced by the 16795 assembler for those cases where direct calls are sufficient. 16796 16797 Call relaxation is disabled by default because it can have a negative 16798 effect on both code size and performance, although the linker can 16799 usually eliminate the unnecessary overhead. If a program is too large 16800 and some of the calls are out of range, function call relaxation can be 16801 enabled using the `--longcalls' command-line option or the `longcalls' 16802 directive (*note longcalls: Longcalls Directive.). 16803 16804 16805 File: as.info, Node: Xtensa Immediate Relaxation, Prev: Xtensa Call Relaxation, Up: Xtensa Relaxation 16806 16807 9.36.4.3 Other Immediate Field Relaxation 16808 ......................................... 16809 16810 The assembler normally performs the following other relaxations. They 16811 can be disabled by using underscore prefixes (*note Opcode Names: 16812 Xtensa Opcodes.), the `--no-transform' command-line option (*note 16813 Command Line Options: Xtensa Options.), or the `no-transform' directive 16814 (*note transform: Transform Directive.). 16815 16816 The `MOVI' machine instruction can only materialize values in the 16817 range from -2048 to 2047. Values outside this range are best 16818 materialized with `L32R' instructions. Thus: 16819 16820 movi a0, 100000 16821 16822 is assembled into the following machine code: 16823 16824 .literal .L1, 100000 16825 l32r a0, .L1 16826 16827 The `L8UI' machine instruction can only be used with immediate 16828 offsets in the range from 0 to 255. The `L16SI' and `L16UI' machine 16829 instructions can only be used with offsets from 0 to 510. The `L32I' 16830 machine instruction can only be used with offsets from 0 to 1020. A 16831 load offset outside these ranges can be materialized with an `L32R' 16832 instruction if the destination register of the load is different than 16833 the source address register. For example: 16834 16835 l32i a1, a0, 2040 16836 16837 is translated to: 16838 16839 .literal .L1, 2040 16840 l32r a1, .L1 16841 add a1, a0, a1 16842 l32i a1, a1, 0 16843 16844 If the load destination and source address register are the same, an 16845 out-of-range offset causes an error. 16846 16847 The Xtensa `ADDI' instruction only allows immediate operands in the 16848 range from -128 to 127. There are a number of alternate instruction 16849 sequences for the `ADDI' operation. First, if the immediate is 0, the 16850 `ADDI' will be turned into a `MOV.N' instruction (or the equivalent 16851 `OR' instruction if the code density option is not available). If the 16852 `ADDI' immediate is outside of the range -128 to 127, but inside the 16853 range -32896 to 32639, an `ADDMI' instruction or `ADDMI'/`ADDI' 16854 sequence will be used. Finally, if the immediate is outside of this 16855 range and a free register is available, an `L32R'/`ADD' sequence will 16856 be used with a literal allocated from the literal pool. 16857 16858 For example: 16859 16860 addi a5, a6, 0 16861 addi a5, a6, 512 16862 addi a5, a6, 513 16863 addi a5, a6, 50000 16864 16865 is assembled into the following: 16866 16867 .literal .L1, 50000 16868 mov.n a5, a6 16869 addmi a5, a6, 0x200 16870 addmi a5, a6, 0x200 16871 addi a5, a5, 1 16872 l32r a5, .L1 16873 add a5, a6, a5 16874 16875 16876 File: as.info, Node: Xtensa Directives, Prev: Xtensa Relaxation, Up: Xtensa-Dependent 16877 16878 9.36.5 Directives 16879 ----------------- 16880 16881 The Xtensa assembler supports a region-based directive syntax: 16882 16883 .begin DIRECTIVE [OPTIONS] 16884 ... 16885 .end DIRECTIVE 16886 16887 All the Xtensa-specific directives that apply to a region of code use 16888 this syntax. 16889 16890 The directive applies to code between the `.begin' and the `.end'. 16891 The state of the option after the `.end' reverts to what it was before 16892 the `.begin'. A nested `.begin'/`.end' region can further change the 16893 state of the directive without having to be aware of its outer state. 16894 For example, consider: 16895 16896 .begin no-transform 16897 L: add a0, a1, a2 16898 .begin transform 16899 M: add a0, a1, a2 16900 .end transform 16901 N: add a0, a1, a2 16902 .end no-transform 16903 16904 The `ADD' opcodes at `L' and `N' in the outer `no-transform' region 16905 both result in `ADD' machine instructions, but the assembler selects an 16906 `ADD.N' instruction for the `ADD' at `M' in the inner `transform' 16907 region. 16908 16909 The advantage of this style is that it works well inside macros 16910 which can preserve the context of their callers. 16911 16912 The following directives are available: 16913 16914 * Menu: 16915 16916 * Schedule Directive:: Enable instruction scheduling. 16917 * Longcalls Directive:: Use Indirect Calls for Greater Range. 16918 * Transform Directive:: Disable All Assembler Transformations. 16919 * Literal Directive:: Intermix Literals with Instructions. 16920 * Literal Position Directive:: Specify Inline Literal Pool Locations. 16921 * Literal Prefix Directive:: Specify Literal Section Name Prefix. 16922 * Absolute Literals Directive:: Control PC-Relative vs. Absolute Literals. 16923 16924 16925 File: as.info, Node: Schedule Directive, Next: Longcalls Directive, Up: Xtensa Directives 16926 16927 9.36.5.1 schedule 16928 ................. 16929 16930 The `schedule' directive is recognized only for compatibility with 16931 Tensilica's assembler. 16932 16933 .begin [no-]schedule 16934 .end [no-]schedule 16935 16936 This directive is ignored and has no effect on `as'. 16937 16938 16939 File: as.info, Node: Longcalls Directive, Next: Transform Directive, Prev: Schedule Directive, Up: Xtensa Directives 16940 16941 9.36.5.2 longcalls 16942 .................. 16943 16944 The `longcalls' directive enables or disables function call relaxation. 16945 *Note Function Call Relaxation: Xtensa Call Relaxation. 16946 16947 .begin [no-]longcalls 16948 .end [no-]longcalls 16949 16950 Call relaxation is disabled by default unless the `--longcalls' 16951 command-line option is specified. The `longcalls' directive overrides 16952 the default determined by the command-line options. 16953 16954 16955 File: as.info, Node: Transform Directive, Next: Literal Directive, Prev: Longcalls Directive, Up: Xtensa Directives 16956 16957 9.36.5.3 transform 16958 .................. 16959 16960 This directive enables or disables all assembler transformation, 16961 including relaxation (*note Xtensa Relaxation: Xtensa Relaxation.) and 16962 optimization (*note Xtensa Optimizations: Xtensa Optimizations.). 16963 16964 .begin [no-]transform 16965 .end [no-]transform 16966 16967 Transformations are enabled by default unless the `--no-transform' 16968 option is used. The `transform' directive overrides the default 16969 determined by the command-line options. An underscore opcode prefix, 16970 disabling transformation of that opcode, always takes precedence over 16971 both directives and command-line flags. 16972 16973 16974 File: as.info, Node: Literal Directive, Next: Literal Position Directive, Prev: Transform Directive, Up: Xtensa Directives 16975 16976 9.36.5.4 literal 16977 ................ 16978 16979 The `.literal' directive is used to define literal pool data, i.e., 16980 read-only 32-bit data accessed via `L32R' instructions. 16981 16982 .literal LABEL, VALUE[, VALUE...] 16983 16984 This directive is similar to the standard `.word' directive, except 16985 that the actual location of the literal data is determined by the 16986 assembler and linker, not by the position of the `.literal' directive. 16987 Using this directive gives the assembler freedom to locate the literal 16988 data in the most appropriate place and possibly to combine identical 16989 literals. For example, the code: 16990 16991 entry sp, 40 16992 .literal .L1, sym 16993 l32r a4, .L1 16994 16995 can be used to load a pointer to the symbol `sym' into register 16996 `a4'. The value of `sym' will not be placed between the `ENTRY' and 16997 `L32R' instructions; instead, the assembler puts the data in a literal 16998 pool. 16999 17000 Literal pools are placed by default in separate literal sections; 17001 however, when using the `--text-section-literals' option (*note Command 17002 Line Options: Xtensa Options.), the literal pools for PC-relative mode 17003 `L32R' instructions are placed in the current section.(1) These text 17004 section literal pools are created automatically before `ENTRY' 17005 instructions and manually after `.literal_position' directives (*note 17006 literal_position: Literal Position Directive.). If there are no 17007 preceding `ENTRY' instructions, explicit `.literal_position' directives 17008 must be used to place the text section literal pools; otherwise, `as' 17009 will report an error. 17010 17011 When literals are placed in separate sections, the literal section 17012 names are derived from the names of the sections where the literals are 17013 defined. The base literal section names are `.literal' for PC-relative 17014 mode `L32R' instructions and `.lit4' for absolute mode `L32R' 17015 instructions (*note absolute-literals: Absolute Literals Directive.). 17016 These base names are used for literals defined in the default `.text' 17017 section. For literals defined in other sections or within the scope of 17018 a `literal_prefix' directive (*note literal_prefix: Literal Prefix 17019 Directive.), the following rules determine the literal section name: 17020 17021 1. If the current section is a member of a section group, the literal 17022 section name includes the group name as a suffix to the base 17023 `.literal' or `.lit4' name, with a period to separate the base 17024 name and group name. The literal section is also made a member of 17025 the group. 17026 17027 2. If the current section name (or `literal_prefix' value) begins with 17028 "`.gnu.linkonce.KIND.'", the literal section name is formed by 17029 replacing "`.KIND'" with the base `.literal' or `.lit4' name. For 17030 example, for literals defined in a section named 17031 `.gnu.linkonce.t.func', the literal section will be 17032 `.gnu.linkonce.literal.func' or `.gnu.linkonce.lit4.func'. 17033 17034 3. If the current section name (or `literal_prefix' value) ends with 17035 `.text', the literal section name is formed by replacing that 17036 suffix with the base `.literal' or `.lit4' name. For example, for 17037 literals defined in a section named `.iram0.text', the literal 17038 section will be `.iram0.literal' or `.iram0.lit4'. 17039 17040 4. If none of the preceding conditions apply, the literal section 17041 name is formed by adding the base `.literal' or `.lit4' name as a 17042 suffix to the current section name (or `literal_prefix' value). 17043 17044 ---------- Footnotes ---------- 17045 17046 (1) Literals for the `.init' and `.fini' sections are always placed 17047 in separate sections, even when `--text-section-literals' is enabled. 17048 17049 17050 File: as.info, Node: Literal Position Directive, Next: Literal Prefix Directive, Prev: Literal Directive, Up: Xtensa Directives 17051 17052 9.36.5.5 literal_position 17053 ......................... 17054 17055 When using `--text-section-literals' to place literals inline in the 17056 section being assembled, the `.literal_position' directive can be used 17057 to mark a potential location for a literal pool. 17058 17059 .literal_position 17060 17061 The `.literal_position' directive is ignored when the 17062 `--text-section-literals' option is not used or when `L32R' 17063 instructions use the absolute addressing mode. 17064 17065 The assembler will automatically place text section literal pools 17066 before `ENTRY' instructions, so the `.literal_position' directive is 17067 only needed to specify some other location for a literal pool. You may 17068 need to add an explicit jump instruction to skip over an inline literal 17069 pool. 17070 17071 For example, an interrupt vector does not begin with an `ENTRY' 17072 instruction so the assembler will be unable to automatically find a good 17073 place to put a literal pool. Moreover, the code for the interrupt 17074 vector must be at a specific starting address, so the literal pool 17075 cannot come before the start of the code. The literal pool for the 17076 vector must be explicitly positioned in the middle of the vector (before 17077 any uses of the literals, due to the negative offsets used by 17078 PC-relative `L32R' instructions). The `.literal_position' directive 17079 can be used to do this. In the following code, the literal for `M' 17080 will automatically be aligned correctly and is placed after the 17081 unconditional jump. 17082 17083 .global M 17084 code_start: 17085 j continue 17086 .literal_position 17087 .align 4 17088 continue: 17089 movi a4, M 17090 17091 17092 File: as.info, Node: Literal Prefix Directive, Next: Absolute Literals Directive, Prev: Literal Position Directive, Up: Xtensa Directives 17093 17094 9.36.5.6 literal_prefix 17095 ....................... 17096 17097 The `literal_prefix' directive allows you to override the default 17098 literal section names, which are derived from the names of the sections 17099 where the literals are defined. 17100 17101 .begin literal_prefix [NAME] 17102 .end literal_prefix 17103 17104 For literals defined within the delimited region, the literal section 17105 names are derived from the NAME argument instead of the name of the 17106 current section. The rules used to derive the literal section names do 17107 not change. *Note literal: Literal Directive. If the NAME argument is 17108 omitted, the literal sections revert to the defaults. This directive 17109 has no effect when using the `--text-section-literals' option (*note 17110 Command Line Options: Xtensa Options.). 17111 17112 17113 File: as.info, Node: Absolute Literals Directive, Prev: Literal Prefix Directive, Up: Xtensa Directives 17114 17115 9.36.5.7 absolute-literals 17116 .......................... 17117 17118 The `absolute-literals' and `no-absolute-literals' directives control 17119 the absolute vs. PC-relative mode for `L32R' instructions. These are 17120 relevant only for Xtensa configurations that include the absolute 17121 addressing option for `L32R' instructions. 17122 17123 .begin [no-]absolute-literals 17124 .end [no-]absolute-literals 17125 17126 These directives do not change the `L32R' mode--they only cause the 17127 assembler to emit the appropriate kind of relocation for `L32R' 17128 instructions and to place the literal values in the appropriate section. 17129 To change the `L32R' mode, the program must write the `LITBASE' special 17130 register. It is the programmer's responsibility to keep track of the 17131 mode and indicate to the assembler which mode is used in each region of 17132 code. 17133 17134 If the Xtensa configuration includes the absolute `L32R' addressing 17135 option, the default is to assume absolute `L32R' addressing unless the 17136 `--no-absolute-literals' command-line option is specified. Otherwise, 17137 the default is to assume PC-relative `L32R' addressing. The 17138 `absolute-literals' directive can then be used to override the default 17139 determined by the command-line options. 17140 17141 17142 File: as.info, Node: Reporting Bugs, Next: Acknowledgements, Prev: Machine Dependencies, Up: Top 17143 17144 10 Reporting Bugs 17145 ***************** 17146 17147 Your bug reports play an essential role in making `as' reliable. 17148 17149 Reporting a bug may help you by bringing a solution to your problem, 17150 or it may not. But in any case the principal function of a bug report 17151 is to help the entire community by making the next version of `as' work 17152 better. Bug reports are your contribution to the maintenance of `as'. 17153 17154 In order for a bug report to serve its purpose, you must include the 17155 information that enables us to fix the bug. 17156 17157 * Menu: 17158 17159 * Bug Criteria:: Have you found a bug? 17160 * Bug Reporting:: How to report bugs 17161 17162 17163 File: as.info, Node: Bug Criteria, Next: Bug Reporting, Up: Reporting Bugs 17164 17165 10.1 Have You Found a Bug? 17166 ========================== 17167 17168 If you are not sure whether you have found a bug, here are some 17169 guidelines: 17170 17171 * If the assembler gets a fatal signal, for any input whatever, that 17172 is a `as' bug. Reliable assemblers never crash. 17173 17174 * If `as' produces an error message for valid input, that is a bug. 17175 17176 * If `as' does not produce an error message for invalid input, that 17177 is a bug. However, you should note that your idea of "invalid 17178 input" might be our idea of "an extension" or "support for 17179 traditional practice". 17180 17181 * If you are an experienced user of assemblers, your suggestions for 17182 improvement of `as' are welcome in any case. 17183 17184 17185 File: as.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Reporting Bugs 17186 17187 10.2 How to Report Bugs 17188 ======================= 17189 17190 A number of companies and individuals offer support for GNU products. 17191 If you obtained `as' from a support organization, we recommend you 17192 contact that organization first. 17193 17194 You can find contact information for many support companies and 17195 individuals in the file `etc/SERVICE' in the GNU Emacs distribution. 17196 17197 In any event, we also recommend that you send bug reports for `as' 17198 to `http://www.sourceware.org/bugzilla/'. 17199 17200 The fundamental principle of reporting bugs usefully is this: 17201 *report all the facts*. If you are not sure whether to state a fact or 17202 leave it out, state it! 17203 17204 Often people omit facts because they think they know what causes the 17205 problem and assume that some details do not matter. Thus, you might 17206 assume that the name of a symbol you use in an example does not matter. 17207 Well, probably it does not, but one cannot be sure. Perhaps the bug 17208 is a stray memory reference which happens to fetch from the location 17209 where that name is stored in memory; perhaps, if the name were 17210 different, the contents of that location would fool the assembler into 17211 doing the right thing despite the bug. Play it safe and give a 17212 specific, complete example. That is the easiest thing for you to do, 17213 and the most helpful. 17214 17215 Keep in mind that the purpose of a bug report is to enable us to fix 17216 the bug if it is new to us. Therefore, always write your bug reports 17217 on the assumption that the bug has not been reported previously. 17218 17219 Sometimes people give a few sketchy facts and ask, "Does this ring a 17220 bell?" This cannot help us fix a bug, so it is basically useless. We 17221 respond by asking for enough details to enable us to investigate. You 17222 might as well expedite matters by sending them to begin with. 17223 17224 To enable us to fix the bug, you should include all these things: 17225 17226 * The version of `as'. `as' announces it if you start it with the 17227 `--version' argument. 17228 17229 Without this, we will not know whether there is any point in 17230 looking for the bug in the current version of `as'. 17231 17232 * Any patches you may have applied to the `as' source. 17233 17234 * The type of machine you are using, and the operating system name 17235 and version number. 17236 17237 * What compiler (and its version) was used to compile `as'--e.g. 17238 "`gcc-2.7'". 17239 17240 * The command arguments you gave the assembler to assemble your 17241 example and observe the bug. To guarantee you will not omit 17242 something important, list them all. A copy of the Makefile (or 17243 the output from make) is sufficient. 17244 17245 If we were to try to guess the arguments, we would probably guess 17246 wrong and then we might not encounter the bug. 17247 17248 * A complete input file that will reproduce the bug. If the bug is 17249 observed when the assembler is invoked via a compiler, send the 17250 assembler source, not the high level language source. Most 17251 compilers will produce the assembler source when run with the `-S' 17252 option. If you are using `gcc', use the options `-v 17253 --save-temps'; this will save the assembler source in a file with 17254 an extension of `.s', and also show you exactly how `as' is being 17255 run. 17256 17257 * A description of what behavior you observe that you believe is 17258 incorrect. For example, "It gets a fatal signal." 17259 17260 Of course, if the bug is that `as' gets a fatal signal, then we 17261 will certainly notice it. But if the bug is incorrect output, we 17262 might not notice unless it is glaringly wrong. You might as well 17263 not give us a chance to make a mistake. 17264 17265 Even if the problem you experience is a fatal signal, you should 17266 still say so explicitly. Suppose something strange is going on, 17267 such as, your copy of `as' is out of sync, or you have encountered 17268 a bug in the C library on your system. (This has happened!) Your 17269 copy might crash and ours would not. If you told us to expect a 17270 crash, then when ours fails to crash, we would know that the bug 17271 was not happening for us. If you had not told us to expect a 17272 crash, then we would not be able to draw any conclusion from our 17273 observations. 17274 17275 * If you wish to suggest changes to the `as' source, send us context 17276 diffs, as generated by `diff' with the `-u', `-c', or `-p' option. 17277 Always send diffs from the old file to the new file. If you even 17278 discuss something in the `as' source, refer to it by context, not 17279 by line number. 17280 17281 The line numbers in our development sources will not match those 17282 in your sources. Your line numbers would convey no useful 17283 information to us. 17284 17285 Here are some things that are not necessary: 17286 17287 * A description of the envelope of the bug. 17288 17289 Often people who encounter a bug spend a lot of time investigating 17290 which changes to the input file will make the bug go away and which 17291 changes will not affect it. 17292 17293 This is often time consuming and not very useful, because the way 17294 we will find the bug is by running a single example under the 17295 debugger with breakpoints, not by pure deduction from a series of 17296 examples. We recommend that you save your time for something else. 17297 17298 Of course, if you can find a simpler example to report _instead_ 17299 of the original one, that is a convenience for us. Errors in the 17300 output will be easier to spot, running under the debugger will take 17301 less time, and so on. 17302 17303 However, simplification is not vital; if you do not want to do 17304 this, report the bug anyway and send us the entire test case you 17305 used. 17306 17307 * A patch for the bug. 17308 17309 A patch for the bug does help us if it is a good one. But do not 17310 omit the necessary information, such as the test case, on the 17311 assumption that a patch is all we need. We might see problems 17312 with your patch and decide to fix the problem another way, or we 17313 might not understand it at all. 17314 17315 Sometimes with a program as complicated as `as' it is very hard to 17316 construct an example that will make the program follow a certain 17317 path through the code. If you do not send us the example, we will 17318 not be able to construct one, so we will not be able to verify 17319 that the bug is fixed. 17320 17321 And if we cannot understand what bug you are trying to fix, or why 17322 your patch should be an improvement, we will not install it. A 17323 test case will help us to understand. 17324 17325 * A guess about what the bug is or what it depends on. 17326 17327 Such guesses are usually wrong. Even we cannot guess right about 17328 such things without first using the debugger to find the facts. 17329 17330 17331 File: as.info, Node: Acknowledgements, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top 17332 17333 11 Acknowledgements 17334 ******************* 17335 17336 If you have contributed to GAS and your name isn't listed here, it is 17337 not meant as a slight. We just don't know about it. Send mail to the 17338 maintainer, and we'll correct the situation. Currently the maintainer 17339 is Ken Raeburn (email address `raeburn (a] cygnus.com'). 17340 17341 Dean Elsner wrote the original GNU assembler for the VAX.(1) 17342 17343 Jay Fenlason maintained GAS for a while, adding support for 17344 GDB-specific debug information and the 68k series machines, most of the 17345 preprocessing pass, and extensive changes in `messages.c', 17346 `input-file.c', `write.c'. 17347 17348 K. Richard Pixley maintained GAS for a while, adding various 17349 enhancements and many bug fixes, including merging support for several 17350 processors, breaking GAS up to handle multiple object file format back 17351 ends (including heavy rewrite, testing, an integration of the coff and 17352 b.out back ends), adding configuration including heavy testing and 17353 verification of cross assemblers and file splits and renaming, 17354 converted GAS to strictly ANSI C including full prototypes, added 17355 support for m680[34]0 and cpu32, did considerable work on i960 17356 including a COFF port (including considerable amounts of reverse 17357 engineering), a SPARC opcode file rewrite, DECstation, rs6000, and 17358 hp300hpux host ports, updated "know" assertions and made them work, 17359 much other reorganization, cleanup, and lint. 17360 17361 Ken Raeburn wrote the high-level BFD interface code to replace most 17362 of the code in format-specific I/O modules. 17363 17364 The original VMS support was contributed by David L. Kashtan. Eric 17365 Youngdale has done much work with it since. 17366 17367 The Intel 80386 machine description was written by Eliot Dresselhaus. 17368 17369 Minh Tran-Le at IntelliCorp contributed some AIX 386 support. 17370 17371 The Motorola 88k machine description was contributed by Devon Bowen 17372 of Buffalo University and Torbjorn Granlund of the Swedish Institute of 17373 Computer Science. 17374 17375 Keith Knowles at the Open Software Foundation wrote the original 17376 MIPS back end (`tc-mips.c', `tc-mips.h'), and contributed Rose format 17377 support (which hasn't been merged in yet). Ralph Campbell worked with 17378 the MIPS code to support a.out format. 17379 17380 Support for the Zilog Z8k and Renesas H8/300 processors (tc-z8k, 17381 tc-h8300), and IEEE 695 object file format (obj-ieee), was written by 17382 Steve Chamberlain of Cygnus Support. Steve also modified the COFF back 17383 end to use BFD for some low-level operations, for use with the H8/300 17384 and AMD 29k targets. 17385 17386 John Gilmore built the AMD 29000 support, added `.include' support, 17387 and simplified the configuration of which versions accept which 17388 directives. He updated the 68k machine description so that Motorola's 17389 opcodes always produced fixed-size instructions (e.g., `jsr'), while 17390 synthetic instructions remained shrinkable (`jbsr'). John fixed many 17391 bugs, including true tested cross-compilation support, and one bug in 17392 relaxation that took a week and required the proverbial one-bit fix. 17393 17394 Ian Lance Taylor of Cygnus Support merged the Motorola and MIT 17395 syntax for the 68k, completed support for some COFF targets (68k, i386 17396 SVR3, and SCO Unix), added support for MIPS ECOFF and ELF targets, 17397 wrote the initial RS/6000 and PowerPC assembler, and made a few other 17398 minor patches. 17399 17400 Steve Chamberlain made GAS able to generate listings. 17401 17402 Hewlett-Packard contributed support for the HP9000/300. 17403 17404 Jeff Law wrote GAS and BFD support for the native HPPA object format 17405 (SOM) along with a fairly extensive HPPA testsuite (for both SOM and 17406 ELF object formats). This work was supported by both the Center for 17407 Software Science at the University of Utah and Cygnus Support. 17408 17409 Support for ELF format files has been worked on by Mark Eichin of 17410 Cygnus Support (original, incomplete implementation for SPARC), Pete 17411 Hoogenboom and Jeff Law at the University of Utah (HPPA mainly), 17412 Michael Meissner of the Open Software Foundation (i386 mainly), and Ken 17413 Raeburn of Cygnus Support (sparc, and some initial 64-bit support). 17414 17415 Linas Vepstas added GAS support for the ESA/390 "IBM 370" 17416 architecture. 17417 17418 Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote 17419 GAS and BFD support for openVMS/Alpha. 17420 17421 Timothy Wall, Michael Hayes, and Greg Smart contributed to the 17422 various tic* flavors. 17423 17424 David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from 17425 Tensilica, Inc. added support for Xtensa processors. 17426 17427 Several engineers at Cygnus Support have also provided many small 17428 bug fixes and configuration enhancements. 17429 17430 Many others have contributed large or small bugfixes and 17431 enhancements. If you have contributed significant work and are not 17432 mentioned on this list, and want to be, let us know. Some of the 17433 history has been lost; we are not intentionally leaving anyone out. 17434 17435 ---------- Footnotes ---------- 17436 17437 (1) Any more details? 17438 17439 17440 File: as.info, Node: GNU Free Documentation License, Next: AS Index, Prev: Acknowledgements, Up: Top 17441 17442 Appendix A GNU Free Documentation License 17443 ***************************************** 17444 17445 Version 1.1, March 2000 17446 17447 Copyright (C) 2000, 2003 Free Software Foundation, Inc. 17448 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17449 17450 Everyone is permitted to copy and distribute verbatim copies 17451 of this license document, but changing it is not allowed. 17452 17453 17454 0. PREAMBLE 17455 17456 The purpose of this License is to make a manual, textbook, or other 17457 written document "free" in the sense of freedom: to assure everyone 17458 the effective freedom to copy and redistribute it, with or without 17459 modifying it, either commercially or noncommercially. Secondarily, 17460 this License preserves for the author and publisher a way to get 17461 credit for their work, while not being considered responsible for 17462 modifications made by others. 17463 17464 This License is a kind of "copyleft", which means that derivative 17465 works of the document must themselves be free in the same sense. 17466 It complements the GNU General Public License, which is a copyleft 17467 license designed for free software. 17468 17469 We have designed this License in order to use it for manuals for 17470 free software, because free software needs free documentation: a 17471 free program should come with manuals providing the same freedoms 17472 that the software does. But this License is not limited to 17473 software manuals; it can be used for any textual work, regardless 17474 of subject matter or whether it is published as a printed book. 17475 We recommend this License principally for works whose purpose is 17476 instruction or reference. 17477 17478 17479 1. APPLICABILITY AND DEFINITIONS 17480 17481 This License applies to any manual or other work that contains a 17482 notice placed by the copyright holder saying it can be distributed 17483 under the terms of this License. The "Document", below, refers to 17484 any such manual or work. Any member of the public is a licensee, 17485 and is addressed as "you." 17486 17487 A "Modified Version" of the Document means any work containing the 17488 Document or a portion of it, either copied verbatim, or with 17489 modifications and/or translated into another language. 17490 17491 A "Secondary Section" is a named appendix or a front-matter 17492 section of the Document that deals exclusively with the 17493 relationship of the publishers or authors of the Document to the 17494 Document's overall subject (or to related matters) and contains 17495 nothing that could fall directly within that overall subject. 17496 (For example, if the Document is in part a textbook of 17497 mathematics, a Secondary Section may not explain any mathematics.) 17498 The relationship could be a matter of historical connection with 17499 the subject or with related matters, or of legal, commercial, 17500 philosophical, ethical or political position regarding them. 17501 17502 The "Invariant Sections" are certain Secondary Sections whose 17503 titles are designated, as being those of Invariant Sections, in 17504 the notice that says that the Document is released under this 17505 License. 17506 17507 The "Cover Texts" are certain short passages of text that are 17508 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 17509 that says that the Document is released under this License. 17510 17511 A "Transparent" copy of the Document means a machine-readable copy, 17512 represented in a format whose specification is available to the 17513 general public, whose contents can be viewed and edited directly 17514 and straightforwardly with generic text editors or (for images 17515 composed of pixels) generic paint programs or (for drawings) some 17516 widely available drawing editor, and that is suitable for input to 17517 text formatters or for automatic translation to a variety of 17518 formats suitable for input to text formatters. A copy made in an 17519 otherwise Transparent file format whose markup has been designed 17520 to thwart or discourage subsequent modification by readers is not 17521 Transparent. A copy that is not "Transparent" is called "Opaque." 17522 17523 Examples of suitable formats for Transparent copies include plain 17524 ASCII without markup, Texinfo input format, LaTeX input format, 17525 SGML or XML using a publicly available DTD, and 17526 standard-conforming simple HTML designed for human modification. 17527 Opaque formats include PostScript, PDF, proprietary formats that 17528 can be read and edited only by proprietary word processors, SGML 17529 or XML for which the DTD and/or processing tools are not generally 17530 available, and the machine-generated HTML produced by some word 17531 processors for output purposes only. 17532 17533 The "Title Page" means, for a printed book, the title page itself, 17534 plus such following pages as are needed to hold, legibly, the 17535 material this License requires to appear in the title page. For 17536 works in formats which do not have any title page as such, "Title 17537 Page" means the text near the most prominent appearance of the 17538 work's title, preceding the beginning of the body of the text. 17539 17540 2. VERBATIM COPYING 17541 17542 You may copy and distribute the Document in any medium, either 17543 commercially or noncommercially, provided that this License, the 17544 copyright notices, and the license notice saying this License 17545 applies to the Document are reproduced in all copies, and that you 17546 add no other conditions whatsoever to those of this License. You 17547 may not use technical measures to obstruct or control the reading 17548 or further copying of the copies you make or distribute. However, 17549 you may accept compensation in exchange for copies. If you 17550 distribute a large enough number of copies you must also follow 17551 the conditions in section 3. 17552 17553 You may also lend copies, under the same conditions stated above, 17554 and you may publicly display copies. 17555 17556 3. COPYING IN QUANTITY 17557 17558 If you publish printed copies of the Document numbering more than 17559 100, and the Document's license notice requires Cover Texts, you 17560 must enclose the copies in covers that carry, clearly and legibly, 17561 all these Cover Texts: Front-Cover Texts on the front cover, and 17562 Back-Cover Texts on the back cover. Both covers must also clearly 17563 and legibly identify you as the publisher of these copies. The 17564 front cover must present the full title with all words of the 17565 title equally prominent and visible. You may add other material 17566 on the covers in addition. Copying with changes limited to the 17567 covers, as long as they preserve the title of the Document and 17568 satisfy these conditions, can be treated as verbatim copying in 17569 other respects. 17570 17571 If the required texts for either cover are too voluminous to fit 17572 legibly, you should put the first ones listed (as many as fit 17573 reasonably) on the actual cover, and continue the rest onto 17574 adjacent pages. 17575 17576 If you publish or distribute Opaque copies of the Document 17577 numbering more than 100, you must either include a 17578 machine-readable Transparent copy along with each Opaque copy, or 17579 state in or with each Opaque copy a publicly-accessible 17580 computer-network location containing a complete Transparent copy 17581 of the Document, free of added material, which the general 17582 network-using public has access to download anonymously at no 17583 charge using public-standard network protocols. If you use the 17584 latter option, you must take reasonably prudent steps, when you 17585 begin distribution of Opaque copies in quantity, to ensure that 17586 this Transparent copy will remain thus accessible at the stated 17587 location until at least one year after the last time you 17588 distribute an Opaque copy (directly or through your agents or 17589 retailers) of that edition to the public. 17590 17591 It is requested, but not required, that you contact the authors of 17592 the Document well before redistributing any large number of 17593 copies, to give them a chance to provide you with an updated 17594 version of the Document. 17595 17596 4. MODIFICATIONS 17597 17598 You may copy and distribute a Modified Version of the Document 17599 under the conditions of sections 2 and 3 above, provided that you 17600 release the Modified Version under precisely this License, with 17601 the Modified Version filling the role of the Document, thus 17602 licensing distribution and modification of the Modified Version to 17603 whoever possesses a copy of it. In addition, you must do these 17604 things in the Modified Version: 17605 17606 A. Use in the Title Page (and on the covers, if any) a title 17607 distinct from that of the Document, and from those of previous 17608 versions (which should, if there were any, be listed in the 17609 History section of the Document). You may use the same title 17610 as a previous version if the original publisher of that version 17611 gives permission. 17612 B. List on the Title Page, as authors, one or more persons or 17613 entities responsible for authorship of the modifications in the 17614 Modified Version, together with at least five of the principal 17615 authors of the Document (all of its principal authors, if it 17616 has less than five). 17617 C. State on the Title page the name of the publisher of the 17618 Modified Version, as the publisher. 17619 D. Preserve all the copyright notices of the Document. 17620 E. Add an appropriate copyright notice for your modifications 17621 adjacent to the other copyright notices. 17622 F. Include, immediately after the copyright notices, a license 17623 notice giving the public permission to use the Modified Version 17624 under the terms of this License, in the form shown in the 17625 Addendum below. 17626 G. Preserve in that license notice the full lists of Invariant 17627 Sections and required Cover Texts given in the Document's 17628 license notice. 17629 H. Include an unaltered copy of this License. 17630 I. Preserve the section entitled "History", and its title, and add 17631 to it an item stating at least the title, year, new authors, and 17632 publisher of the Modified Version as given on the Title Page. 17633 If there is no section entitled "History" in the Document, 17634 create one stating the title, year, authors, and publisher of 17635 the Document as given on its Title Page, then add an item 17636 describing the Modified Version as stated in the previous 17637 sentence. 17638 J. Preserve the network location, if any, given in the Document for 17639 public access to a Transparent copy of the Document, and 17640 likewise the network locations given in the Document for 17641 previous versions it was based on. These may be placed in the 17642 "History" section. You may omit a network location for a work 17643 that was published at least four years before the Document 17644 itself, or if the original publisher of the version it refers 17645 to gives permission. 17646 K. In any section entitled "Acknowledgements" or "Dedications", 17647 preserve the section's title, and preserve in the section all the 17648 substance and tone of each of the contributor acknowledgements 17649 and/or dedications given therein. 17650 L. Preserve all the Invariant Sections of the Document, 17651 unaltered in their text and in their titles. Section numbers 17652 or the equivalent are not considered part of the section titles. 17653 M. Delete any section entitled "Endorsements." Such a section 17654 may not be included in the Modified Version. 17655 N. Do not retitle any existing section as "Endorsements" or to 17656 conflict in title with any Invariant Section. 17657 17658 If the Modified Version includes new front-matter sections or 17659 appendices that qualify as Secondary Sections and contain no 17660 material copied from the Document, you may at your option 17661 designate some or all of these sections as invariant. To do this, 17662 add their titles to the list of Invariant Sections in the Modified 17663 Version's license notice. These titles must be distinct from any 17664 other section titles. 17665 17666 You may add a section entitled "Endorsements", provided it contains 17667 nothing but endorsements of your Modified Version by various 17668 parties-for example, statements of peer review or that the text has 17669 been approved by an organization as the authoritative definition 17670 of a standard. 17671 17672 You may add a passage of up to five words as a Front-Cover Text, 17673 and a passage of up to 25 words as a Back-Cover Text, to the end 17674 of the list of Cover Texts in the Modified Version. Only one 17675 passage of Front-Cover Text and one of Back-Cover Text may be 17676 added by (or through arrangements made by) any one entity. If the 17677 Document already includes a cover text for the same cover, 17678 previously added by you or by arrangement made by the same entity 17679 you are acting on behalf of, you may not add another; but you may 17680 replace the old one, on explicit permission from the previous 17681 publisher that added the old one. 17682 17683 The author(s) and publisher(s) of the Document do not by this 17684 License give permission to use their names for publicity for or to 17685 assert or imply endorsement of any Modified Version. 17686 17687 5. COMBINING DOCUMENTS 17688 17689 You may combine the Document with other documents released under 17690 this License, under the terms defined in section 4 above for 17691 modified versions, provided that you include in the combination 17692 all of the Invariant Sections of all of the original documents, 17693 unmodified, and list them all as Invariant Sections of your 17694 combined work in its license notice. 17695 17696 The combined work need only contain one copy of this License, and 17697 multiple identical Invariant Sections may be replaced with a single 17698 copy. If there are multiple Invariant Sections with the same name 17699 but different contents, make the title of each such section unique 17700 by adding at the end of it, in parentheses, the name of the 17701 original author or publisher of that section if known, or else a 17702 unique number. Make the same adjustment to the section titles in 17703 the list of Invariant Sections in the license notice of the 17704 combined work. 17705 17706 In the combination, you must combine any sections entitled 17707 "History" in the various original documents, forming one section 17708 entitled "History"; likewise combine any sections entitled 17709 "Acknowledgements", and any sections entitled "Dedications." You 17710 must delete all sections entitled "Endorsements." 17711 17712 6. COLLECTIONS OF DOCUMENTS 17713 17714 You may make a collection consisting of the Document and other 17715 documents released under this License, and replace the individual 17716 copies of this License in the various documents with a single copy 17717 that is included in the collection, provided that you follow the 17718 rules of this License for verbatim copying of each of the 17719 documents in all other respects. 17720 17721 You may extract a single document from such a collection, and 17722 distribute it individually under this License, provided you insert 17723 a copy of this License into the extracted document, and follow 17724 this License in all other respects regarding verbatim copying of 17725 that document. 17726 17727 7. AGGREGATION WITH INDEPENDENT WORKS 17728 17729 A compilation of the Document or its derivatives with other 17730 separate and independent documents or works, in or on a volume of 17731 a storage or distribution medium, does not as a whole count as a 17732 Modified Version of the Document, provided no compilation 17733 copyright is claimed for the compilation. Such a compilation is 17734 called an "aggregate", and this License does not apply to the 17735 other self-contained works thus compiled with the Document, on 17736 account of their being thus compiled, if they are not themselves 17737 derivative works of the Document. 17738 17739 If the Cover Text requirement of section 3 is applicable to these 17740 copies of the Document, then if the Document is less than one 17741 quarter of the entire aggregate, the Document's Cover Texts may be 17742 placed on covers that surround only the Document within the 17743 aggregate. Otherwise they must appear on covers around the whole 17744 aggregate. 17745 17746 8. TRANSLATION 17747 17748 Translation is considered a kind of modification, so you may 17749 distribute translations of the Document under the terms of section 17750 4. Replacing Invariant Sections with translations requires special 17751 permission from their copyright holders, but you may include 17752 translations of some or all Invariant Sections in addition to the 17753 original versions of these Invariant Sections. You may include a 17754 translation of this License provided that you also include the 17755 original English version of this License. In case of a 17756 disagreement between the translation and the original English 17757 version of this License, the original English version will prevail. 17758 17759 9. TERMINATION 17760 17761 You may not copy, modify, sublicense, or distribute the Document 17762 except as expressly provided for under this License. Any other 17763 attempt to copy, modify, sublicense or distribute the Document is 17764 void, and will automatically terminate your rights under this 17765 License. However, parties who have received copies, or rights, 17766 from you under this License will not have their licenses 17767 terminated so long as such parties remain in full compliance. 17768 17769 10. FUTURE REVISIONS OF THIS LICENSE 17770 17771 The Free Software Foundation may publish new, revised versions of 17772 the GNU Free Documentation License from time to time. Such new 17773 versions will be similar in spirit to the present version, but may 17774 differ in detail to address new problems or concerns. See 17775 http://www.gnu.org/copyleft/. 17776 17777 Each version of the License is given a distinguishing version 17778 number. If the Document specifies that a particular numbered 17779 version of this License "or any later version" applies to it, you 17780 have the option of following the terms and conditions either of 17781 that specified version or of any later version that has been 17782 published (not as a draft) by the Free Software Foundation. If 17783 the Document does not specify a version number of this License, 17784 you may choose any version ever published (not as a draft) by the 17785 Free Software Foundation. 17786 17787 17788 ADDENDUM: How to use this License for your documents 17789 ==================================================== 17790 17791 To use this License in a document you have written, include a copy of 17792 the License in the document and put the following copyright and license 17793 notices just after the title page: 17794 17795 Copyright (C) YEAR YOUR NAME. 17796 Permission is granted to copy, distribute and/or modify this document 17797 under the terms of the GNU Free Documentation License, Version 1.1 17798 or any later version published by the Free Software Foundation; 17799 with the Invariant Sections being LIST THEIR TITLES, with the 17800 Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. 17801 A copy of the license is included in the section entitled "GNU 17802 Free Documentation License." 17803 17804 If you have no Invariant Sections, write "with no Invariant Sections" 17805 instead of saying which ones are invariant. If you have no Front-Cover 17806 Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being 17807 LIST"; likewise for Back-Cover Texts. 17808 17809 If your document contains nontrivial examples of program code, we 17810 recommend releasing these examples in parallel under your choice of 17811 free software license, such as the GNU General Public License, to 17812 permit their use in free software. 17813 17814 17815 File: as.info, Node: AS Index, Prev: GNU Free Documentation License, Up: Top 17816 17817 AS Index 17818 ******** 17819 17820 [index] 17821 * Menu: 17822 17823 * #: Comments. (line 38) 17824 * #APP: Preprocessing. (line 27) 17825 * #NO_APP: Preprocessing. (line 27) 17826 * $ in symbol names <1>: SH64-Chars. (line 10) 17827 * $ in symbol names <2>: SH-Chars. (line 10) 17828 * $ in symbol names <3>: D30V-Chars. (line 63) 17829 * $ in symbol names: D10V-Chars. (line 46) 17830 * $a: ARM Mapping Symbols. (line 9) 17831 * $acos math builtin, TIC54X: TIC54X-Builtins. (line 10) 17832 * $asin math builtin, TIC54X: TIC54X-Builtins. (line 13) 17833 * $atan math builtin, TIC54X: TIC54X-Builtins. (line 16) 17834 * $atan2 math builtin, TIC54X: TIC54X-Builtins. (line 19) 17835 * $ceil math builtin, TIC54X: TIC54X-Builtins. (line 22) 17836 * $cos math builtin, TIC54X: TIC54X-Builtins. (line 28) 17837 * $cosh math builtin, TIC54X: TIC54X-Builtins. (line 25) 17838 * $cvf math builtin, TIC54X: TIC54X-Builtins. (line 31) 17839 * $cvi math builtin, TIC54X: TIC54X-Builtins. (line 34) 17840 * $d: ARM Mapping Symbols. (line 15) 17841 * $exp math builtin, TIC54X: TIC54X-Builtins. (line 37) 17842 * $fabs math builtin, TIC54X: TIC54X-Builtins. (line 40) 17843 * $firstch subsym builtin, TIC54X: TIC54X-Macros. (line 26) 17844 * $floor math builtin, TIC54X: TIC54X-Builtins. (line 43) 17845 * $fmod math builtin, TIC54X: TIC54X-Builtins. (line 47) 17846 * $int math builtin, TIC54X: TIC54X-Builtins. (line 50) 17847 * $iscons subsym builtin, TIC54X: TIC54X-Macros. (line 43) 17848 * $isdefed subsym builtin, TIC54X: TIC54X-Macros. (line 34) 17849 * $ismember subsym builtin, TIC54X: TIC54X-Macros. (line 38) 17850 * $isname subsym builtin, TIC54X: TIC54X-Macros. (line 47) 17851 * $isreg subsym builtin, TIC54X: TIC54X-Macros. (line 50) 17852 * $lastch subsym builtin, TIC54X: TIC54X-Macros. (line 30) 17853 * $ldexp math builtin, TIC54X: TIC54X-Builtins. (line 53) 17854 * $log math builtin, TIC54X: TIC54X-Builtins. (line 59) 17855 * $log10 math builtin, TIC54X: TIC54X-Builtins. (line 56) 17856 * $max math builtin, TIC54X: TIC54X-Builtins. (line 62) 17857 * $min math builtin, TIC54X: TIC54X-Builtins. (line 65) 17858 * $pow math builtin, TIC54X: TIC54X-Builtins. (line 68) 17859 * $round math builtin, TIC54X: TIC54X-Builtins. (line 71) 17860 * $sgn math builtin, TIC54X: TIC54X-Builtins. (line 74) 17861 * $sin math builtin, TIC54X: TIC54X-Builtins. (line 77) 17862 * $sinh math builtin, TIC54X: TIC54X-Builtins. (line 80) 17863 * $sqrt math builtin, TIC54X: TIC54X-Builtins. (line 83) 17864 * $structacc subsym builtin, TIC54X: TIC54X-Macros. (line 57) 17865 * $structsz subsym builtin, TIC54X: TIC54X-Macros. (line 54) 17866 * $symcmp subsym builtin, TIC54X: TIC54X-Macros. (line 23) 17867 * $symlen subsym builtin, TIC54X: TIC54X-Macros. (line 20) 17868 * $t: ARM Mapping Symbols. (line 12) 17869 * $tan math builtin, TIC54X: TIC54X-Builtins. (line 86) 17870 * $tanh math builtin, TIC54X: TIC54X-Builtins. (line 89) 17871 * $trunc math builtin, TIC54X: TIC54X-Builtins. (line 92) 17872 * -+ option, VAX/VMS: VAX-Opts. (line 71) 17873 * --: Command Line. (line 10) 17874 * --32 option, i386: i386-Options. (line 8) 17875 * --32 option, x86-64: i386-Options. (line 8) 17876 * --64 option, i386: i386-Options. (line 8) 17877 * --64 option, x86-64: i386-Options. (line 8) 17878 * --absolute-literals: Xtensa Options. (line 23) 17879 * --allow-reg-prefix: SH Options. (line 9) 17880 * --alternate: alternate. (line 6) 17881 * --base-size-default-16: M68K-Opts. (line 71) 17882 * --base-size-default-32: M68K-Opts. (line 71) 17883 * --big: SH Options. (line 9) 17884 * --bitwise-or option, M680x0: M68K-Opts. (line 64) 17885 * --disp-size-default-16: M68K-Opts. (line 80) 17886 * --disp-size-default-32: M68K-Opts. (line 80) 17887 * --divide option, i386: i386-Options. (line 24) 17888 * --dsp: SH Options. (line 9) 17889 * --emulation=crisaout command line option, CRIS: CRIS-Opts. (line 9) 17890 * --emulation=criself command line option, CRIS: CRIS-Opts. (line 9) 17891 * --enforce-aligned-data: Sparc-Aligned-Data. (line 11) 17892 * --fatal-warnings: W. (line 16) 17893 * --fix-v4bx command line option, ARM: ARM Options. (line 126) 17894 * --fixed-special-register-names command line option, MMIX: MMIX-Opts. 17895 (line 8) 17896 * --force-long-branches: M68HC11-Opts. (line 69) 17897 * --generate-example: M68HC11-Opts. (line 86) 17898 * --globalize-symbols command line option, MMIX: MMIX-Opts. (line 12) 17899 * --gnu-syntax command line option, MMIX: MMIX-Opts. (line 16) 17900 * --hash-size=NUMBER: Overview. (line 314) 17901 * --linker-allocated-gregs command line option, MMIX: MMIX-Opts. 17902 (line 67) 17903 * --listing-cont-lines: listing. (line 34) 17904 * --listing-lhs-width: listing. (line 16) 17905 * --listing-lhs-width2: listing. (line 21) 17906 * --listing-rhs-width: listing. (line 28) 17907 * --little: SH Options. (line 9) 17908 * --longcalls: Xtensa Options. (line 37) 17909 * --march=ARCHITECTURE command line option, CRIS: CRIS-Opts. (line 33) 17910 * --MD: MD. (line 6) 17911 * --mul-bug-abort command line option, CRIS: CRIS-Opts. (line 61) 17912 * --no-absolute-literals: Xtensa Options. (line 23) 17913 * --no-expand command line option, MMIX: MMIX-Opts. (line 31) 17914 * --no-longcalls: Xtensa Options. (line 37) 17915 * --no-merge-gregs command line option, MMIX: MMIX-Opts. (line 36) 17916 * --no-mul-bug-abort command line option, CRIS: CRIS-Opts. (line 61) 17917 * --no-predefined-syms command line option, MMIX: MMIX-Opts. (line 22) 17918 * --no-pushj-stubs command line option, MMIX: MMIX-Opts. (line 54) 17919 * --no-stubs command line option, MMIX: MMIX-Opts. (line 54) 17920 * --no-target-align: Xtensa Options. (line 30) 17921 * --no-text-section-literals: Xtensa Options. (line 9) 17922 * --no-transform: Xtensa Options. (line 46) 17923 * --no-underscore command line option, CRIS: CRIS-Opts. (line 15) 17924 * --no-warn: W. (line 11) 17925 * --pcrel: M68K-Opts. (line 92) 17926 * --pic command line option, CRIS: CRIS-Opts. (line 27) 17927 * --print-insn-syntax: M68HC11-Opts. (line 75) 17928 * --print-opcodes: M68HC11-Opts. (line 79) 17929 * --register-prefix-optional option, M680x0: M68K-Opts. (line 51) 17930 * --relax: SH Options. (line 9) 17931 * --relax command line option, MMIX: MMIX-Opts. (line 19) 17932 * --rename-section: Xtensa Options. (line 54) 17933 * --renesas: SH Options. (line 9) 17934 * --short-branches: M68HC11-Opts. (line 54) 17935 * --small: SH Options. (line 9) 17936 * --statistics: statistics. (line 6) 17937 * --strict-direct-mode: M68HC11-Opts. (line 44) 17938 * --target-align: Xtensa Options. (line 30) 17939 * --text-section-literals: Xtensa Options. (line 9) 17940 * --traditional-format: traditional-format. (line 6) 17941 * --transform: Xtensa Options. (line 46) 17942 * --underscore command line option, CRIS: CRIS-Opts. (line 15) 17943 * --warn: W. (line 19) 17944 * -1 option, VAX/VMS: VAX-Opts. (line 77) 17945 * -32addr command line option, Alpha: Alpha Options. (line 50) 17946 * -a: a. (line 6) 17947 * -A options, i960: Options-i960. (line 6) 17948 * -ac: a. (line 6) 17949 * -ad: a. (line 6) 17950 * -ag: a. (line 6) 17951 * -ah: a. (line 6) 17952 * -al: a. (line 6) 17953 * -an: a. (line 6) 17954 * -as: a. (line 6) 17955 * -Asparclet: Sparc-Opts. (line 25) 17956 * -Asparclite: Sparc-Opts. (line 25) 17957 * -Av6: Sparc-Opts. (line 25) 17958 * -Av8: Sparc-Opts. (line 25) 17959 * -Av9: Sparc-Opts. (line 25) 17960 * -Av9a: Sparc-Opts. (line 25) 17961 * -b option, i960: Options-i960. (line 22) 17962 * -big option, M32R: M32R-Opts. (line 35) 17963 * -D: D. (line 6) 17964 * -D, ignored on VAX: VAX-Opts. (line 11) 17965 * -d, VAX option: VAX-Opts. (line 16) 17966 * -eabi= command line option, ARM: ARM Options. (line 109) 17967 * -EB command line option, ARC: ARC Options. (line 31) 17968 * -EB command line option, ARM: ARM Options. (line 114) 17969 * -EB option (MIPS): MIPS Opts. (line 13) 17970 * -EB option, M32R: M32R-Opts. (line 39) 17971 * -EL command line option, ARC: ARC Options. (line 35) 17972 * -EL command line option, ARM: ARM Options. (line 118) 17973 * -EL option (MIPS): MIPS Opts. (line 13) 17974 * -EL option, M32R: M32R-Opts. (line 32) 17975 * -f: f. (line 6) 17976 * -F command line option, Alpha: Alpha Options. (line 50) 17977 * -G command line option, Alpha: Alpha Options. (line 46) 17978 * -g command line option, Alpha: Alpha Options. (line 40) 17979 * -G option (MIPS): MIPS Opts. (line 8) 17980 * -H option, VAX/VMS: VAX-Opts. (line 81) 17981 * -h option, VAX/VMS: VAX-Opts. (line 45) 17982 * -I PATH: I. (line 6) 17983 * -ignore-parallel-conflicts option, M32RX: M32R-Opts. (line 87) 17984 * -Ip option, M32RX: M32R-Opts. (line 97) 17985 * -J, ignored on VAX: VAX-Opts. (line 27) 17986 * -K: K. (line 6) 17987 * -k command line option, ARM: ARM Options. (line 122) 17988 * -KPIC option, M32R: M32R-Opts. (line 42) 17989 * -KPIC option, MIPS: MIPS Opts. (line 21) 17990 * -L: L. (line 6) 17991 * -l option, M680x0: M68K-Opts. (line 39) 17992 * -little option, M32R: M32R-Opts. (line 27) 17993 * -M: M. (line 6) 17994 * -m11/03: PDP-11-Options. (line 140) 17995 * -m11/04: PDP-11-Options. (line 143) 17996 * -m11/05: PDP-11-Options. (line 146) 17997 * -m11/10: PDP-11-Options. (line 146) 17998 * -m11/15: PDP-11-Options. (line 149) 17999 * -m11/20: PDP-11-Options. (line 149) 18000 * -m11/21: PDP-11-Options. (line 152) 18001 * -m11/23: PDP-11-Options. (line 155) 18002 * -m11/24: PDP-11-Options. (line 155) 18003 * -m11/34: PDP-11-Options. (line 158) 18004 * -m11/34a: PDP-11-Options. (line 161) 18005 * -m11/35: PDP-11-Options. (line 164) 18006 * -m11/40: PDP-11-Options. (line 164) 18007 * -m11/44: PDP-11-Options. (line 167) 18008 * -m11/45: PDP-11-Options. (line 170) 18009 * -m11/50: PDP-11-Options. (line 170) 18010 * -m11/53: PDP-11-Options. (line 173) 18011 * -m11/55: PDP-11-Options. (line 170) 18012 * -m11/60: PDP-11-Options. (line 176) 18013 * -m11/70: PDP-11-Options. (line 170) 18014 * -m11/73: PDP-11-Options. (line 173) 18015 * -m11/83: PDP-11-Options. (line 173) 18016 * -m11/84: PDP-11-Options. (line 173) 18017 * -m11/93: PDP-11-Options. (line 173) 18018 * -m11/94: PDP-11-Options. (line 173) 18019 * -m16c option, M16C: M32C-Opts. (line 12) 18020 * -m32c option, M32C: M32C-Opts. (line 9) 18021 * -m32r option, M32R: M32R-Opts. (line 21) 18022 * -m32rx option, M32R2: M32R-Opts. (line 17) 18023 * -m32rx option, M32RX: M32R-Opts. (line 9) 18024 * -m68000 and related options: M68K-Opts. (line 104) 18025 * -m68hc11: M68HC11-Opts. (line 9) 18026 * -m68hc12: M68HC11-Opts. (line 14) 18027 * -m68hcs12: M68HC11-Opts. (line 21) 18028 * -m[no-]68851 command line option, M680x0: M68K-Opts. (line 21) 18029 * -m[no-]68881 command line option, M680x0: M68K-Opts. (line 21) 18030 * -m[no-]div command line option, M680x0: M68K-Opts. (line 21) 18031 * -m[no-]emac command line option, M680x0: M68K-Opts. (line 21) 18032 * -m[no-]float command line option, M680x0: M68K-Opts. (line 21) 18033 * -m[no-]mac command line option, M680x0: M68K-Opts. (line 21) 18034 * -m[no-]usp command line option, M680x0: M68K-Opts. (line 21) 18035 * -mall: PDP-11-Options. (line 26) 18036 * -mall-extensions: PDP-11-Options. (line 26) 18037 * -mall-opcodes command line option, AVR: AVR Options. (line 56) 18038 * -mapcs command line option, ARM: ARM Options. (line 82) 18039 * -mapcs-float command line option, ARM: ARM Options. (line 95) 18040 * -mapcs-reentrant command line option, ARM: ARM Options. (line 100) 18041 * -marc[5|6|7|8] command line option, ARC: ARC Options. (line 6) 18042 * -march= command line option, ARM: ARM Options. (line 39) 18043 * -march= command line option, M680x0: M68K-Opts. (line 8) 18044 * -march= option, i386: i386-Options. (line 31) 18045 * -march= option, x86-64: i386-Options. (line 31) 18046 * -matpcs command line option, ARM: ARM Options. (line 87) 18047 * -mcis: PDP-11-Options. (line 32) 18048 * -mconstant-gp command line option, IA-64: IA-64 Options. (line 6) 18049 * -mCPU command line option, Alpha: Alpha Options. (line 6) 18050 * -mcpu option, cpu: TIC54X-Opts. (line 15) 18051 * -mcpu= command line option, ARM: ARM Options. (line 6) 18052 * -mcpu= command line option, M680x0: M68K-Opts. (line 14) 18053 * -mcsm: PDP-11-Options. (line 43) 18054 * -mdebug command line option, Alpha: Alpha Options. (line 25) 18055 * -me option, stderr redirect: TIC54X-Opts. (line 20) 18056 * -meis: PDP-11-Options. (line 46) 18057 * -merrors-to-file option, stderr redirect: TIC54X-Opts. (line 20) 18058 * -mf option, far-mode: TIC54X-Opts. (line 8) 18059 * -mf11: PDP-11-Options. (line 122) 18060 * -mfar-mode option, far-mode: TIC54X-Opts. (line 8) 18061 * -mfis: PDP-11-Options. (line 51) 18062 * -mfloat-abi= command line option, ARM: ARM Options. (line 104) 18063 * -mfp-11: PDP-11-Options. (line 56) 18064 * -mfpp: PDP-11-Options. (line 56) 18065 * -mfpu: PDP-11-Options. (line 56) 18066 * -mfpu= command line option, ARM: ARM Options. (line 54) 18067 * -mip2022 option, IP2K: IP2K-Opts. (line 14) 18068 * -mip2022ext option, IP2022: IP2K-Opts. (line 9) 18069 * -mj11: PDP-11-Options. (line 126) 18070 * -mka11: PDP-11-Options. (line 92) 18071 * -mkb11: PDP-11-Options. (line 95) 18072 * -mkd11a: PDP-11-Options. (line 98) 18073 * -mkd11b: PDP-11-Options. (line 101) 18074 * -mkd11d: PDP-11-Options. (line 104) 18075 * -mkd11e: PDP-11-Options. (line 107) 18076 * -mkd11f: PDP-11-Options. (line 110) 18077 * -mkd11h: PDP-11-Options. (line 110) 18078 * -mkd11k: PDP-11-Options. (line 114) 18079 * -mkd11q: PDP-11-Options. (line 110) 18080 * -mkd11z: PDP-11-Options. (line 118) 18081 * -mkev11: PDP-11-Options. (line 51) 18082 * -mlimited-eis: PDP-11-Options. (line 64) 18083 * -mlong: M68HC11-Opts. (line 32) 18084 * -mlong-double: M68HC11-Opts. (line 40) 18085 * -mmcu= command line option, AVR: AVR Options. (line 6) 18086 * -mmfpt: PDP-11-Options. (line 70) 18087 * -mmicrocode: PDP-11-Options. (line 83) 18088 * -mmnemonic= option, i386: i386-Options. (line 76) 18089 * -mmnemonic= option, x86-64: i386-Options. (line 76) 18090 * -mmutiproc: PDP-11-Options. (line 73) 18091 * -mmxps: PDP-11-Options. (line 77) 18092 * -mnaked-reg option, i386: i386-Options. (line 90) 18093 * -mnaked-reg option, x86-64: i386-Options. (line 90) 18094 * -mno-cis: PDP-11-Options. (line 32) 18095 * -mno-csm: PDP-11-Options. (line 43) 18096 * -mno-eis: PDP-11-Options. (line 46) 18097 * -mno-extensions: PDP-11-Options. (line 29) 18098 * -mno-fis: PDP-11-Options. (line 51) 18099 * -mno-fp-11: PDP-11-Options. (line 56) 18100 * -mno-fpp: PDP-11-Options. (line 56) 18101 * -mno-fpu: PDP-11-Options. (line 56) 18102 * -mno-kev11: PDP-11-Options. (line 51) 18103 * -mno-limited-eis: PDP-11-Options. (line 64) 18104 * -mno-mfpt: PDP-11-Options. (line 70) 18105 * -mno-microcode: PDP-11-Options. (line 83) 18106 * -mno-mutiproc: PDP-11-Options. (line 73) 18107 * -mno-mxps: PDP-11-Options. (line 77) 18108 * -mno-pic: PDP-11-Options. (line 11) 18109 * -mno-skip-bug command line option, AVR: AVR Options. (line 59) 18110 * -mno-spl: PDP-11-Options. (line 80) 18111 * -mno-sym32: MIPS Opts. (line 184) 18112 * -mno-wrap command line option, AVR: AVR Options. (line 62) 18113 * -mpic: PDP-11-Options. (line 11) 18114 * -mrelax command line option, V850: V850 Options. (line 51) 18115 * -mshort: M68HC11-Opts. (line 27) 18116 * -mshort-double: M68HC11-Opts. (line 36) 18117 * -mspl: PDP-11-Options. (line 80) 18118 * -msse-check= option, i386: i386-Options. (line 64) 18119 * -msse-check= option, x86-64: i386-Options. (line 64) 18120 * -msse2avx option, i386: i386-Options. (line 60) 18121 * -msse2avx option, x86-64: i386-Options. (line 60) 18122 * -msym32: MIPS Opts. (line 184) 18123 * -msyntax= option, i386: i386-Options. (line 83) 18124 * -msyntax= option, x86-64: i386-Options. (line 83) 18125 * -mt11: PDP-11-Options. (line 130) 18126 * -mthumb command line option, ARM: ARM Options. (line 73) 18127 * -mthumb-interwork command line option, ARM: ARM Options. (line 78) 18128 * -mtune= option, i386: i386-Options. (line 52) 18129 * -mtune= option, x86-64: i386-Options. (line 52) 18130 * -mv850 command line option, V850: V850 Options. (line 23) 18131 * -mv850any command line option, V850: V850 Options. (line 41) 18132 * -mv850e command line option, V850: V850 Options. (line 29) 18133 * -mv850e1 command line option, V850: V850 Options. (line 35) 18134 * -mvxworks-pic option, MIPS: MIPS Opts. (line 26) 18135 * -N command line option, CRIS: CRIS-Opts. (line 57) 18136 * -nIp option, M32RX: M32R-Opts. (line 101) 18137 * -no-bitinst, M32R2: M32R-Opts. (line 54) 18138 * -no-ignore-parallel-conflicts option, M32RX: M32R-Opts. (line 93) 18139 * -no-mdebug command line option, Alpha: Alpha Options. (line 25) 18140 * -no-parallel option, M32RX: M32R-Opts. (line 51) 18141 * -no-relax option, i960: Options-i960. (line 66) 18142 * -no-warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. 18143 (line 79) 18144 * -no-warn-unmatched-high option, M32R: M32R-Opts. (line 111) 18145 * -nocpp ignored (MIPS): MIPS Opts. (line 187) 18146 * -o: o. (line 6) 18147 * -O option, M32RX: M32R-Opts. (line 59) 18148 * -parallel option, M32RX: M32R-Opts. (line 46) 18149 * -R: R. (line 6) 18150 * -r800 command line option, Z80: Z80 Options. (line 41) 18151 * -relax command line option, Alpha: Alpha Options. (line 32) 18152 * -S, ignored on VAX: VAX-Opts. (line 11) 18153 * -t, ignored on VAX: VAX-Opts. (line 36) 18154 * -T, ignored on VAX: VAX-Opts. (line 11) 18155 * -v: v. (line 6) 18156 * -V, redundant on VAX: VAX-Opts. (line 22) 18157 * -version: v. (line 6) 18158 * -W: W. (line 11) 18159 * -warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. (line 65) 18160 * -warn-unmatched-high option, M32R: M32R-Opts. (line 105) 18161 * -Wnp option, M32RX: M32R-Opts. (line 83) 18162 * -Wnuh option, M32RX: M32R-Opts. (line 117) 18163 * -Wp option, M32RX: M32R-Opts. (line 75) 18164 * -wsigned_overflow command line option, V850: V850 Options. (line 9) 18165 * -Wuh option, M32RX: M32R-Opts. (line 114) 18166 * -wunsigned_overflow command line option, V850: V850 Options. 18167 (line 16) 18168 * -x command line option, MMIX: MMIX-Opts. (line 44) 18169 * -z80 command line option, Z80: Z80 Options. (line 8) 18170 * -z8001 command line option, Z8000: Z8000 Options. (line 6) 18171 * -z8002 command line option, Z8000: Z8000 Options. (line 9) 18172 * . (symbol): Dot. (line 6) 18173 * .arch directive, ARM: ARM Directives. (line 210) 18174 * .big directive, M32RX: M32R-Directives. (line 88) 18175 * .cantunwind directive, ARM: ARM Directives. (line 114) 18176 * .cpu directive, ARM: ARM Directives. (line 206) 18177 * .eabi_attribute directive, ARM: ARM Directives. (line 224) 18178 * .fnend directive, ARM: ARM Directives. (line 105) 18179 * .fnstart directive, ARM: ARM Directives. (line 102) 18180 * .fpu directive, ARM: ARM Directives. (line 220) 18181 * .handlerdata directive, ARM: ARM Directives. (line 125) 18182 * .insn: MIPS insn. (line 6) 18183 * .little directive, M32RX: M32R-Directives. (line 82) 18184 * .ltorg directive, ARM: ARM Directives. (line 85) 18185 * .m32r directive, M32R: M32R-Directives. (line 66) 18186 * .m32r2 directive, M32R2: M32R-Directives. (line 77) 18187 * .m32rx directive, M32RX: M32R-Directives. (line 72) 18188 * .movsp directive, ARM: ARM Directives. (line 180) 18189 * .o: Object. (line 6) 18190 * .object_arch directive, ARM: ARM Directives. (line 214) 18191 * .pad directive, ARM: ARM Directives. (line 175) 18192 * .param on HPPA: HPPA Directives. (line 19) 18193 * .personality directive, ARM: ARM Directives. (line 118) 18194 * .personalityindex directive, ARM: ARM Directives. (line 121) 18195 * .pool directive, ARM: ARM Directives. (line 99) 18196 * .save directive, ARM: ARM Directives. (line 134) 18197 * .set arch=CPU: MIPS ISA. (line 18) 18198 * .set autoextend: MIPS autoextend. (line 6) 18199 * .set dsp: MIPS ASE instruction generation overrides. 18200 (line 21) 18201 * .set dspr2: MIPS ASE instruction generation overrides. 18202 (line 26) 18203 * .set hardfloat: MIPS floating-point. (line 6) 18204 * .set mdmx: MIPS ASE instruction generation overrides. 18205 (line 16) 18206 * .set mips3d: MIPS ASE instruction generation overrides. 18207 (line 6) 18208 * .set mipsN: MIPS ISA. (line 6) 18209 * .set mt: MIPS ASE instruction generation overrides. 18210 (line 32) 18211 * .set noautoextend: MIPS autoextend. (line 6) 18212 * .set nodsp: MIPS ASE instruction generation overrides. 18213 (line 21) 18214 * .set nodspr2: MIPS ASE instruction generation overrides. 18215 (line 26) 18216 * .set nomdmx: MIPS ASE instruction generation overrides. 18217 (line 16) 18218 * .set nomips3d: MIPS ASE instruction generation overrides. 18219 (line 6) 18220 * .set nomt: MIPS ASE instruction generation overrides. 18221 (line 32) 18222 * .set nosmartmips: MIPS ASE instruction generation overrides. 18223 (line 11) 18224 * .set nosym32: MIPS symbol sizes. (line 6) 18225 * .set pop: MIPS option stack. (line 6) 18226 * .set push: MIPS option stack. (line 6) 18227 * .set smartmips: MIPS ASE instruction generation overrides. 18228 (line 11) 18229 * .set softfloat: MIPS floating-point. (line 6) 18230 * .set sym32: MIPS symbol sizes. (line 6) 18231 * .setfp directive, ARM: ARM Directives. (line 185) 18232 * .unwind_raw directive, ARM: ARM Directives. (line 199) 18233 * .v850 directive, V850: V850 Directives. (line 14) 18234 * .v850e directive, V850: V850 Directives. (line 20) 18235 * .v850e1 directive, V850: V850 Directives. (line 26) 18236 * .vsave directive, ARM: ARM Directives. (line 158) 18237 * .z8001: Z8000 Directives. (line 11) 18238 * .z8002: Z8000 Directives. (line 15) 18239 * 16-bit code, i386: i386-16bit. (line 6) 18240 * 2byte directive, ARC: ARC Directives. (line 9) 18241 * 3byte directive, ARC: ARC Directives. (line 12) 18242 * 3DNow!, i386: i386-SIMD. (line 6) 18243 * 3DNow!, x86-64: i386-SIMD. (line 6) 18244 * 430 support: MSP430-Dependent. (line 6) 18245 * 4byte directive, ARC: ARC Directives. (line 15) 18246 * : (label): Statements. (line 30) 18247 * @word modifier, D10V: D10V-Word. (line 6) 18248 * \" (doublequote character): Strings. (line 43) 18249 * \\ (\ character): Strings. (line 40) 18250 * \b (backspace character): Strings. (line 15) 18251 * \DDD (octal character code): Strings. (line 30) 18252 * \f (formfeed character): Strings. (line 18) 18253 * \n (newline character): Strings. (line 21) 18254 * \r (carriage return character): Strings. (line 24) 18255 * \t (tab): Strings. (line 27) 18256 * \XD... (hex character code): Strings. (line 36) 18257 * _ opcode prefix: Xtensa Opcodes. (line 9) 18258 * a.out: Object. (line 6) 18259 * a.out symbol attributes: a.out Symbols. (line 6) 18260 * A_DIR environment variable, TIC54X: TIC54X-Env. (line 6) 18261 * ABI options, SH64: SH64 Options. (line 29) 18262 * ABORT directive: ABORT (COFF). (line 6) 18263 * abort directive: Abort. (line 6) 18264 * absolute section: Ld Sections. (line 29) 18265 * absolute-literals directive: Absolute Literals Directive. 18266 (line 6) 18267 * ADDI instructions, relaxation: Xtensa Immediate Relaxation. 18268 (line 43) 18269 * addition, permitted arguments: Infix Ops. (line 44) 18270 * addresses: Expressions. (line 6) 18271 * addresses, format of: Secs Background. (line 68) 18272 * addressing modes, D10V: D10V-Addressing. (line 6) 18273 * addressing modes, D30V: D30V-Addressing. (line 6) 18274 * addressing modes, H8/300: H8/300-Addressing. (line 6) 18275 * addressing modes, M680x0: M68K-Syntax. (line 21) 18276 * addressing modes, M68HC11: M68HC11-Syntax. (line 17) 18277 * addressing modes, SH: SH-Addressing. (line 6) 18278 * addressing modes, SH64: SH64-Addressing. (line 6) 18279 * addressing modes, Z8000: Z8000-Addressing. (line 6) 18280 * ADR reg,<label> pseudo op, ARM: ARM Opcodes. (line 25) 18281 * ADRL reg,<label> pseudo op, ARM: ARM Opcodes. (line 35) 18282 * advancing location counter: Org. (line 6) 18283 * align directive: Align. (line 6) 18284 * align directive, ARM: ARM Directives. (line 6) 18285 * align directive, SPARC: Sparc-Directives. (line 9) 18286 * align directive, TIC54X: TIC54X-Directives. (line 6) 18287 * alignment of branch targets: Xtensa Automatic Alignment. 18288 (line 6) 18289 * alignment of LOOP instructions: Xtensa Automatic Alignment. 18290 (line 6) 18291 * Alpha floating point (IEEE): Alpha Floating Point. 18292 (line 6) 18293 * Alpha line comment character: Alpha-Chars. (line 6) 18294 * Alpha line separator: Alpha-Chars. (line 8) 18295 * Alpha notes: Alpha Notes. (line 6) 18296 * Alpha options: Alpha Options. (line 6) 18297 * Alpha registers: Alpha-Regs. (line 6) 18298 * Alpha relocations: Alpha-Relocs. (line 6) 18299 * Alpha support: Alpha-Dependent. (line 6) 18300 * Alpha Syntax: Alpha Options. (line 54) 18301 * Alpha-only directives: Alpha Directives. (line 10) 18302 * altered difference tables: Word. (line 12) 18303 * alternate syntax for the 680x0: M68K-Moto-Syntax. (line 6) 18304 * ARC floating point (IEEE): ARC Floating Point. (line 6) 18305 * ARC machine directives: ARC Directives. (line 6) 18306 * ARC opcodes: ARC Opcodes. (line 6) 18307 * ARC options (none): ARC Options. (line 6) 18308 * ARC register names: ARC-Regs. (line 6) 18309 * ARC special characters: ARC-Chars. (line 6) 18310 * ARC support: ARC-Dependent. (line 6) 18311 * arc5 arc5, ARC: ARC Options. (line 10) 18312 * arc6 arc6, ARC: ARC Options. (line 13) 18313 * arc7 arc7, ARC: ARC Options. (line 21) 18314 * arc8 arc8, ARC: ARC Options. (line 24) 18315 * arch directive, i386: i386-Arch. (line 6) 18316 * arch directive, M680x0: M68K-Directives. (line 22) 18317 * arch directive, x86-64: i386-Arch. (line 6) 18318 * architecture options, i960: Options-i960. (line 6) 18319 * architecture options, IP2022: IP2K-Opts. (line 9) 18320 * architecture options, IP2K: IP2K-Opts. (line 14) 18321 * architecture options, M16C: M32C-Opts. (line 12) 18322 * architecture options, M32C: M32C-Opts. (line 9) 18323 * architecture options, M32R: M32R-Opts. (line 21) 18324 * architecture options, M32R2: M32R-Opts. (line 17) 18325 * architecture options, M32RX: M32R-Opts. (line 9) 18326 * architecture options, M680x0: M68K-Opts. (line 104) 18327 * Architecture variant option, CRIS: CRIS-Opts. (line 33) 18328 * architectures, PowerPC: PowerPC-Opts. (line 6) 18329 * architectures, SPARC: Sparc-Opts. (line 6) 18330 * arguments for addition: Infix Ops. (line 44) 18331 * arguments for subtraction: Infix Ops. (line 49) 18332 * arguments in expressions: Arguments. (line 6) 18333 * arithmetic functions: Operators. (line 6) 18334 * arithmetic operands: Arguments. (line 6) 18335 * ARM data relocations: ARM-Relocations. (line 6) 18336 * arm directive, ARM: ARM Directives. (line 60) 18337 * ARM floating point (IEEE): ARM Floating Point. (line 6) 18338 * ARM identifiers: ARM-Chars. (line 15) 18339 * ARM immediate character: ARM-Chars. (line 13) 18340 * ARM line comment character: ARM-Chars. (line 6) 18341 * ARM line separator: ARM-Chars. (line 10) 18342 * ARM machine directives: ARM Directives. (line 6) 18343 * ARM opcodes: ARM Opcodes. (line 6) 18344 * ARM options (none): ARM Options. (line 6) 18345 * ARM register names: ARM-Regs. (line 6) 18346 * ARM support: ARM-Dependent. (line 6) 18347 * ascii directive: Ascii. (line 6) 18348 * asciz directive: Asciz. (line 6) 18349 * asg directive, TIC54X: TIC54X-Directives. (line 20) 18350 * assembler bugs, reporting: Bug Reporting. (line 6) 18351 * assembler crash: Bug Criteria. (line 9) 18352 * assembler directive .arch, CRIS: CRIS-Pseudos. (line 45) 18353 * assembler directive .dword, CRIS: CRIS-Pseudos. (line 12) 18354 * assembler directive .far, M68HC11: M68HC11-Directives. (line 20) 18355 * assembler directive .interrupt, M68HC11: M68HC11-Directives. 18356 (line 26) 18357 * assembler directive .mode, M68HC11: M68HC11-Directives. (line 16) 18358 * assembler directive .relax, M68HC11: M68HC11-Directives. (line 10) 18359 * assembler directive .syntax, CRIS: CRIS-Pseudos. (line 17) 18360 * assembler directive .xrefb, M68HC11: M68HC11-Directives. (line 31) 18361 * assembler directive BSPEC, MMIX: MMIX-Pseudos. (line 131) 18362 * assembler directive BYTE, MMIX: MMIX-Pseudos. (line 97) 18363 * assembler directive ESPEC, MMIX: MMIX-Pseudos. (line 131) 18364 * assembler directive GREG, MMIX: MMIX-Pseudos. (line 50) 18365 * assembler directive IS, MMIX: MMIX-Pseudos. (line 42) 18366 * assembler directive LOC, MMIX: MMIX-Pseudos. (line 7) 18367 * assembler directive LOCAL, MMIX: MMIX-Pseudos. (line 28) 18368 * assembler directive OCTA, MMIX: MMIX-Pseudos. (line 108) 18369 * assembler directive PREFIX, MMIX: MMIX-Pseudos. (line 120) 18370 * assembler directive TETRA, MMIX: MMIX-Pseudos. (line 108) 18371 * assembler directive WYDE, MMIX: MMIX-Pseudos. (line 108) 18372 * assembler directives, CRIS: CRIS-Pseudos. (line 6) 18373 * assembler directives, M68HC11: M68HC11-Directives. (line 6) 18374 * assembler directives, M68HC12: M68HC11-Directives. (line 6) 18375 * assembler directives, MMIX: MMIX-Pseudos. (line 6) 18376 * assembler internal logic error: As Sections. (line 13) 18377 * assembler version: v. (line 6) 18378 * assembler, and linker: Secs Background. (line 10) 18379 * assembly listings, enabling: a. (line 6) 18380 * assigning values to symbols <1>: Equ. (line 6) 18381 * assigning values to symbols: Setting Symbols. (line 6) 18382 * atmp directive, i860: Directives-i860. (line 16) 18383 * att_syntax pseudo op, i386: i386-Syntax. (line 6) 18384 * att_syntax pseudo op, x86-64: i386-Syntax. (line 6) 18385 * attributes, symbol: Symbol Attributes. (line 6) 18386 * auxiliary attributes, COFF symbols: COFF Symbols. (line 19) 18387 * auxiliary symbol information, COFF: Dim. (line 6) 18388 * Av7: Sparc-Opts. (line 25) 18389 * AVR line comment character: AVR-Chars. (line 6) 18390 * AVR line separator: AVR-Chars. (line 10) 18391 * AVR modifiers: AVR-Modifiers. (line 6) 18392 * AVR opcode summary: AVR Opcodes. (line 6) 18393 * AVR options (none): AVR Options. (line 6) 18394 * AVR register names: AVR-Regs. (line 6) 18395 * AVR support: AVR-Dependent. (line 6) 18396 * backslash (\\): Strings. (line 40) 18397 * backspace (\b): Strings. (line 15) 18398 * balign directive: Balign. (line 6) 18399 * balignl directive: Balign. (line 27) 18400 * balignw directive: Balign. (line 27) 18401 * bes directive, TIC54X: TIC54X-Directives. (line 197) 18402 * BFIN directives: BFIN Directives. (line 6) 18403 * BFIN syntax: BFIN Syntax. (line 6) 18404 * big endian output, MIPS: Overview. (line 629) 18405 * big endian output, PJ: Overview. (line 536) 18406 * big-endian output, MIPS: MIPS Opts. (line 13) 18407 * bignums: Bignums. (line 6) 18408 * binary constants, TIC54X: TIC54X-Constants. (line 8) 18409 * binary files, including: Incbin. (line 6) 18410 * binary integers: Integers. (line 6) 18411 * bit names, IA-64: IA-64-Bits. (line 6) 18412 * bitfields, not supported on VAX: VAX-no. (line 6) 18413 * Blackfin support: BFIN-Dependent. (line 6) 18414 * block: Z8000 Directives. (line 55) 18415 * branch improvement, M680x0: M68K-Branch. (line 6) 18416 * branch improvement, M68HC11: M68HC11-Branch. (line 6) 18417 * branch improvement, VAX: VAX-branch. (line 6) 18418 * branch instructions, relaxation: Xtensa Branch Relaxation. 18419 (line 6) 18420 * branch recording, i960: Options-i960. (line 22) 18421 * branch statistics table, i960: Options-i960. (line 40) 18422 * branch target alignment: Xtensa Automatic Alignment. 18423 (line 6) 18424 * break directive, TIC54X: TIC54X-Directives. (line 143) 18425 * BSD syntax: PDP-11-Syntax. (line 6) 18426 * bss directive, i960: Directives-i960. (line 6) 18427 * bss directive, TIC54X: TIC54X-Directives. (line 29) 18428 * bss section <1>: bss. (line 6) 18429 * bss section: Ld Sections. (line 20) 18430 * bug criteria: Bug Criteria. (line 6) 18431 * bug reports: Bug Reporting. (line 6) 18432 * bugs in assembler: Reporting Bugs. (line 6) 18433 * Built-in symbols, CRIS: CRIS-Symbols. (line 6) 18434 * builtin math functions, TIC54X: TIC54X-Builtins. (line 6) 18435 * builtin subsym functions, TIC54X: TIC54X-Macros. (line 16) 18436 * bus lock prefixes, i386: i386-Prefixes. (line 36) 18437 * bval: Z8000 Directives. (line 30) 18438 * byte directive: Byte. (line 6) 18439 * byte directive, TIC54X: TIC54X-Directives. (line 36) 18440 * C54XDSP_DIR environment variable, TIC54X: TIC54X-Env. (line 6) 18441 * c_mode directive, TIC54X: TIC54X-Directives. (line 51) 18442 * call instructions, i386: i386-Mnemonics. (line 51) 18443 * call instructions, relaxation: Xtensa Call Relaxation. 18444 (line 6) 18445 * call instructions, x86-64: i386-Mnemonics. (line 51) 18446 * callj, i960 pseudo-opcode: callj-i960. (line 6) 18447 * carriage return (\r): Strings. (line 24) 18448 * case sensitivity, Z80: Z80-Case. (line 6) 18449 * cfi_endproc directive: CFI directives. (line 16) 18450 * cfi_startproc directive: CFI directives. (line 6) 18451 * char directive, TIC54X: TIC54X-Directives. (line 36) 18452 * character constant, Z80: Z80-Chars. (line 13) 18453 * character constants: Characters. (line 6) 18454 * character escape codes: Strings. (line 15) 18455 * character escapes, Z80: Z80-Chars. (line 11) 18456 * character, single: Chars. (line 6) 18457 * characters used in symbols: Symbol Intro. (line 6) 18458 * clink directive, TIC54X: TIC54X-Directives. (line 45) 18459 * code directive, ARM: ARM Directives. (line 53) 18460 * code16 directive, i386: i386-16bit. (line 6) 18461 * code16gcc directive, i386: i386-16bit. (line 6) 18462 * code32 directive, i386: i386-16bit. (line 6) 18463 * code64 directive, i386: i386-16bit. (line 6) 18464 * code64 directive, x86-64: i386-16bit. (line 6) 18465 * COFF auxiliary symbol information: Dim. (line 6) 18466 * COFF structure debugging: Tag. (line 6) 18467 * COFF symbol attributes: COFF Symbols. (line 6) 18468 * COFF symbol descriptor: Desc. (line 6) 18469 * COFF symbol storage class: Scl. (line 6) 18470 * COFF symbol type: Type. (line 11) 18471 * COFF symbols, debugging: Def. (line 6) 18472 * COFF value attribute: Val. (line 6) 18473 * COMDAT: Linkonce. (line 6) 18474 * comm directive: Comm. (line 6) 18475 * command line conventions: Command Line. (line 6) 18476 * command line options, V850: V850 Options. (line 9) 18477 * command-line options ignored, VAX: VAX-Opts. (line 6) 18478 * comments: Comments. (line 6) 18479 * comments, M680x0: M68K-Chars. (line 6) 18480 * comments, removed by preprocessor: Preprocessing. (line 11) 18481 * common directive, SPARC: Sparc-Directives. (line 12) 18482 * common sections: Linkonce. (line 6) 18483 * common variable storage: bss. (line 6) 18484 * compare and jump expansions, i960: Compare-and-branch-i960. 18485 (line 13) 18486 * compare/branch instructions, i960: Compare-and-branch-i960. 18487 (line 6) 18488 * comparison expressions: Infix Ops. (line 55) 18489 * conditional assembly: If. (line 6) 18490 * constant, single character: Chars. (line 6) 18491 * constants: Constants. (line 6) 18492 * constants, bignum: Bignums. (line 6) 18493 * constants, character: Characters. (line 6) 18494 * constants, converted by preprocessor: Preprocessing. (line 14) 18495 * constants, floating point: Flonums. (line 6) 18496 * constants, integer: Integers. (line 6) 18497 * constants, number: Numbers. (line 6) 18498 * constants, Sparc: Sparc-Constants. (line 6) 18499 * constants, string: Strings. (line 6) 18500 * constants, TIC54X: TIC54X-Constants. (line 6) 18501 * conversion instructions, i386: i386-Mnemonics. (line 32) 18502 * conversion instructions, x86-64: i386-Mnemonics. (line 32) 18503 * coprocessor wait, i386: i386-Prefixes. (line 40) 18504 * copy directive, TIC54X: TIC54X-Directives. (line 54) 18505 * cpu directive, M680x0: M68K-Directives. (line 30) 18506 * CR16 Operand Qualifiers: CR16 Operand Qualifiers. 18507 (line 6) 18508 * CR16 support: CR16-Dependent. (line 6) 18509 * crash of assembler: Bug Criteria. (line 9) 18510 * CRIS --emulation=crisaout command line option: CRIS-Opts. (line 9) 18511 * CRIS --emulation=criself command line option: CRIS-Opts. (line 9) 18512 * CRIS --march=ARCHITECTURE command line option: CRIS-Opts. (line 33) 18513 * CRIS --mul-bug-abort command line option: CRIS-Opts. (line 61) 18514 * CRIS --no-mul-bug-abort command line option: CRIS-Opts. (line 61) 18515 * CRIS --no-underscore command line option: CRIS-Opts. (line 15) 18516 * CRIS --pic command line option: CRIS-Opts. (line 27) 18517 * CRIS --underscore command line option: CRIS-Opts. (line 15) 18518 * CRIS -N command line option: CRIS-Opts. (line 57) 18519 * CRIS architecture variant option: CRIS-Opts. (line 33) 18520 * CRIS assembler directive .arch: CRIS-Pseudos. (line 45) 18521 * CRIS assembler directive .dword: CRIS-Pseudos. (line 12) 18522 * CRIS assembler directive .syntax: CRIS-Pseudos. (line 17) 18523 * CRIS assembler directives: CRIS-Pseudos. (line 6) 18524 * CRIS built-in symbols: CRIS-Symbols. (line 6) 18525 * CRIS instruction expansion: CRIS-Expand. (line 6) 18526 * CRIS line comment characters: CRIS-Chars. (line 6) 18527 * CRIS options: CRIS-Opts. (line 6) 18528 * CRIS position-independent code: CRIS-Opts. (line 27) 18529 * CRIS pseudo-op .arch: CRIS-Pseudos. (line 45) 18530 * CRIS pseudo-op .dword: CRIS-Pseudos. (line 12) 18531 * CRIS pseudo-op .syntax: CRIS-Pseudos. (line 17) 18532 * CRIS pseudo-ops: CRIS-Pseudos. (line 6) 18533 * CRIS register names: CRIS-Regs. (line 6) 18534 * CRIS support: CRIS-Dependent. (line 6) 18535 * CRIS symbols in position-independent code: CRIS-Pic. (line 6) 18536 * ctbp register, V850: V850-Regs. (line 131) 18537 * ctoff pseudo-op, V850: V850 Opcodes. (line 111) 18538 * ctpc register, V850: V850-Regs. (line 119) 18539 * ctpsw register, V850: V850-Regs. (line 122) 18540 * current address: Dot. (line 6) 18541 * current address, advancing: Org. (line 6) 18542 * D10V @word modifier: D10V-Word. (line 6) 18543 * D10V addressing modes: D10V-Addressing. (line 6) 18544 * D10V floating point: D10V-Float. (line 6) 18545 * D10V line comment character: D10V-Chars. (line 6) 18546 * D10V opcode summary: D10V-Opcodes. (line 6) 18547 * D10V optimization: Overview. (line 408) 18548 * D10V options: D10V-Opts. (line 6) 18549 * D10V registers: D10V-Regs. (line 6) 18550 * D10V size modifiers: D10V-Size. (line 6) 18551 * D10V sub-instruction ordering: D10V-Chars. (line 6) 18552 * D10V sub-instructions: D10V-Subs. (line 6) 18553 * D10V support: D10V-Dependent. (line 6) 18554 * D10V syntax: D10V-Syntax. (line 6) 18555 * D30V addressing modes: D30V-Addressing. (line 6) 18556 * D30V floating point: D30V-Float. (line 6) 18557 * D30V Guarded Execution: D30V-Guarded. (line 6) 18558 * D30V line comment character: D30V-Chars. (line 6) 18559 * D30V nops: Overview. (line 416) 18560 * D30V nops after 32-bit multiply: Overview. (line 419) 18561 * D30V opcode summary: D30V-Opcodes. (line 6) 18562 * D30V optimization: Overview. (line 413) 18563 * D30V options: D30V-Opts. (line 6) 18564 * D30V registers: D30V-Regs. (line 6) 18565 * D30V size modifiers: D30V-Size. (line 6) 18566 * D30V sub-instruction ordering: D30V-Chars. (line 6) 18567 * D30V sub-instructions: D30V-Subs. (line 6) 18568 * D30V support: D30V-Dependent. (line 6) 18569 * D30V syntax: D30V-Syntax. (line 6) 18570 * data alignment on SPARC: Sparc-Aligned-Data. (line 6) 18571 * data and text sections, joining: R. (line 6) 18572 * data directive: Data. (line 6) 18573 * data directive, TIC54X: TIC54X-Directives. (line 61) 18574 * data relocations, ARM: ARM-Relocations. (line 6) 18575 * data section: Ld Sections. (line 9) 18576 * data1 directive, M680x0: M68K-Directives. (line 9) 18577 * data2 directive, M680x0: M68K-Directives. (line 12) 18578 * datalabel, SH64: SH64-Addressing. (line 16) 18579 * dbpc register, V850: V850-Regs. (line 125) 18580 * dbpsw register, V850: V850-Regs. (line 128) 18581 * debuggers, and symbol order: Symbols. (line 10) 18582 * debugging COFF symbols: Def. (line 6) 18583 * DEC syntax: PDP-11-Syntax. (line 6) 18584 * decimal integers: Integers. (line 12) 18585 * def directive: Def. (line 6) 18586 * def directive, TIC54X: TIC54X-Directives. (line 103) 18587 * density instructions: Density Instructions. 18588 (line 6) 18589 * dependency tracking: MD. (line 6) 18590 * deprecated directives: Deprecated. (line 6) 18591 * desc directive: Desc. (line 6) 18592 * descriptor, of a.out symbol: Symbol Desc. (line 6) 18593 * dfloat directive, VAX: VAX-directives. (line 10) 18594 * difference tables altered: Word. (line 12) 18595 * difference tables, warning: K. (line 6) 18596 * differences, mmixal: MMIX-mmixal. (line 6) 18597 * dim directive: Dim. (line 6) 18598 * directives and instructions: Statements. (line 19) 18599 * directives for PowerPC: PowerPC-Pseudo. (line 6) 18600 * directives, BFIN: BFIN Directives. (line 6) 18601 * directives, M32R: M32R-Directives. (line 6) 18602 * directives, M680x0: M68K-Directives. (line 6) 18603 * directives, machine independent: Pseudo Ops. (line 6) 18604 * directives, Xtensa: Xtensa Directives. (line 6) 18605 * directives, Z8000: Z8000 Directives. (line 6) 18606 * Disable floating-point instructions: MIPS floating-point. (line 6) 18607 * Disable single-precision floating-point operations: MIPS floating-point. 18608 (line 12) 18609 * displacement sizing character, VAX: VAX-operands. (line 12) 18610 * dn and qn directives, ARM: ARM Directives. (line 29) 18611 * dollar local symbols: Symbol Names. (line 105) 18612 * dot (symbol): Dot. (line 6) 18613 * double directive: Double. (line 6) 18614 * double directive, i386: i386-Float. (line 14) 18615 * double directive, M680x0: M68K-Float. (line 14) 18616 * double directive, M68HC11: M68HC11-Float. (line 14) 18617 * double directive, TIC54X: TIC54X-Directives. (line 64) 18618 * double directive, VAX: VAX-float. (line 15) 18619 * double directive, x86-64: i386-Float. (line 14) 18620 * doublequote (\"): Strings. (line 43) 18621 * drlist directive, TIC54X: TIC54X-Directives. (line 73) 18622 * drnolist directive, TIC54X: TIC54X-Directives. (line 73) 18623 * dual directive, i860: Directives-i860. (line 6) 18624 * ECOFF sections: MIPS Object. (line 6) 18625 * ecr register, V850: V850-Regs. (line 113) 18626 * eight-byte integer: Quad. (line 9) 18627 * eipc register, V850: V850-Regs. (line 101) 18628 * eipsw register, V850: V850-Regs. (line 104) 18629 * eject directive: Eject. (line 6) 18630 * ELF symbol type: Type. (line 22) 18631 * else directive: Else. (line 6) 18632 * elseif directive: Elseif. (line 6) 18633 * empty expressions: Empty Exprs. (line 6) 18634 * emsg directive, TIC54X: TIC54X-Directives. (line 77) 18635 * emulation: Overview. (line 732) 18636 * end directive: End. (line 6) 18637 * enddual directive, i860: Directives-i860. (line 11) 18638 * endef directive: Endef. (line 6) 18639 * endfunc directive: Endfunc. (line 6) 18640 * endianness, MIPS: Overview. (line 629) 18641 * endianness, PJ: Overview. (line 536) 18642 * endif directive: Endif. (line 6) 18643 * endloop directive, TIC54X: TIC54X-Directives. (line 143) 18644 * endm directive: Macro. (line 138) 18645 * endm directive, TIC54X: TIC54X-Directives. (line 153) 18646 * endstruct directive, TIC54X: TIC54X-Directives. (line 217) 18647 * endunion directive, TIC54X: TIC54X-Directives. (line 251) 18648 * environment settings, TIC54X: TIC54X-Env. (line 6) 18649 * EOF, newline must precede: Statements. (line 13) 18650 * ep register, V850: V850-Regs. (line 95) 18651 * equ directive: Equ. (line 6) 18652 * equ directive, TIC54X: TIC54X-Directives. (line 192) 18653 * equiv directive: Equiv. (line 6) 18654 * eqv directive: Eqv. (line 6) 18655 * err directive: Err. (line 6) 18656 * error directive: Error. (line 6) 18657 * error messages: Errors. (line 6) 18658 * error on valid input: Bug Criteria. (line 12) 18659 * errors, caused by warnings: W. (line 16) 18660 * errors, continuing after: Z. (line 6) 18661 * ESA/390 floating point (IEEE): ESA/390 Floating Point. 18662 (line 6) 18663 * ESA/390 support: ESA/390-Dependent. (line 6) 18664 * ESA/390 Syntax: ESA/390 Options. (line 8) 18665 * ESA/390-only directives: ESA/390 Directives. (line 12) 18666 * escape codes, character: Strings. (line 15) 18667 * eval directive, TIC54X: TIC54X-Directives. (line 24) 18668 * even: Z8000 Directives. (line 58) 18669 * even directive, M680x0: M68K-Directives. (line 15) 18670 * even directive, TIC54X: TIC54X-Directives. (line 6) 18671 * exitm directive: Macro. (line 141) 18672 * expr (internal section): As Sections. (line 17) 18673 * expression arguments: Arguments. (line 6) 18674 * expressions: Expressions. (line 6) 18675 * expressions, comparison: Infix Ops. (line 55) 18676 * expressions, empty: Empty Exprs. (line 6) 18677 * expressions, integer: Integer Exprs. (line 6) 18678 * extAuxRegister directive, ARC: ARC Directives. (line 18) 18679 * extCondCode directive, ARC: ARC Directives. (line 41) 18680 * extCoreRegister directive, ARC: ARC Directives. (line 53) 18681 * extend directive M680x0: M68K-Float. (line 17) 18682 * extend directive M68HC11: M68HC11-Float. (line 17) 18683 * extended directive, i960: Directives-i960. (line 13) 18684 * extern directive: Extern. (line 6) 18685 * extInstruction directive, ARC: ARC Directives. (line 78) 18686 * fail directive: Fail. (line 6) 18687 * far_mode directive, TIC54X: TIC54X-Directives. (line 82) 18688 * faster processing (-f): f. (line 6) 18689 * fatal signal: Bug Criteria. (line 9) 18690 * fclist directive, TIC54X: TIC54X-Directives. (line 87) 18691 * fcnolist directive, TIC54X: TIC54X-Directives. (line 87) 18692 * fepc register, V850: V850-Regs. (line 107) 18693 * fepsw register, V850: V850-Regs. (line 110) 18694 * ffloat directive, VAX: VAX-directives. (line 14) 18695 * field directive, TIC54X: TIC54X-Directives. (line 91) 18696 * file directive <1>: File. (line 6) 18697 * file directive: LNS directives. (line 6) 18698 * file directive, MSP 430: MSP430 Directives. (line 6) 18699 * file name, logical: File. (line 6) 18700 * files, including: Include. (line 6) 18701 * files, input: Input Files. (line 6) 18702 * fill directive: Fill. (line 6) 18703 * filling memory <1>: Space. (line 6) 18704 * filling memory: Skip. (line 6) 18705 * FLIX syntax: Xtensa Syntax. (line 6) 18706 * float directive: Float. (line 6) 18707 * float directive, i386: i386-Float. (line 14) 18708 * float directive, M680x0: M68K-Float. (line 11) 18709 * float directive, M68HC11: M68HC11-Float. (line 11) 18710 * float directive, TIC54X: TIC54X-Directives. (line 64) 18711 * float directive, VAX: VAX-float. (line 15) 18712 * float directive, x86-64: i386-Float. (line 14) 18713 * floating point numbers: Flonums. (line 6) 18714 * floating point numbers (double): Double. (line 6) 18715 * floating point numbers (single) <1>: Single. (line 6) 18716 * floating point numbers (single): Float. (line 6) 18717 * floating point, Alpha (IEEE): Alpha Floating Point. 18718 (line 6) 18719 * floating point, ARC (IEEE): ARC Floating Point. (line 6) 18720 * floating point, ARM (IEEE): ARM Floating Point. (line 6) 18721 * floating point, D10V: D10V-Float. (line 6) 18722 * floating point, D30V: D30V-Float. (line 6) 18723 * floating point, ESA/390 (IEEE): ESA/390 Floating Point. 18724 (line 6) 18725 * floating point, H8/300 (IEEE): H8/300 Floating Point. 18726 (line 6) 18727 * floating point, HPPA (IEEE): HPPA Floating Point. (line 6) 18728 * floating point, i386: i386-Float. (line 6) 18729 * floating point, i960 (IEEE): Floating Point-i960. (line 6) 18730 * floating point, M680x0: M68K-Float. (line 6) 18731 * floating point, M68HC11: M68HC11-Float. (line 6) 18732 * floating point, MSP 430 (IEEE): MSP430 Floating Point. 18733 (line 6) 18734 * floating point, SH (IEEE): SH Floating Point. (line 6) 18735 * floating point, SPARC (IEEE): Sparc-Float. (line 6) 18736 * floating point, V850 (IEEE): V850 Floating Point. (line 6) 18737 * floating point, VAX: VAX-float. (line 6) 18738 * floating point, x86-64: i386-Float. (line 6) 18739 * floating point, Z80: Z80 Floating Point. (line 6) 18740 * flonums: Flonums. (line 6) 18741 * force_thumb directive, ARM: ARM Directives. (line 63) 18742 * format of error messages: Errors. (line 24) 18743 * format of warning messages: Errors. (line 12) 18744 * formfeed (\f): Strings. (line 18) 18745 * func directive: Func. (line 6) 18746 * functions, in expressions: Operators. (line 6) 18747 * gbr960, i960 postprocessor: Options-i960. (line 40) 18748 * gfloat directive, VAX: VAX-directives. (line 18) 18749 * global: Z8000 Directives. (line 21) 18750 * global directive: Global. (line 6) 18751 * global directive, TIC54X: TIC54X-Directives. (line 103) 18752 * gp register, MIPS: MIPS Object. (line 11) 18753 * gp register, V850: V850-Regs. (line 17) 18754 * grouping data: Sub-Sections. (line 6) 18755 * H8/300 addressing modes: H8/300-Addressing. (line 6) 18756 * H8/300 floating point (IEEE): H8/300 Floating Point. 18757 (line 6) 18758 * H8/300 line comment character: H8/300-Chars. (line 6) 18759 * H8/300 line separator: H8/300-Chars. (line 8) 18760 * H8/300 machine directives (none): H8/300 Directives. (line 6) 18761 * H8/300 opcode summary: H8/300 Opcodes. (line 6) 18762 * H8/300 options: H8/300 Options. (line 6) 18763 * H8/300 registers: H8/300-Regs. (line 6) 18764 * H8/300 size suffixes: H8/300 Opcodes. (line 163) 18765 * H8/300 support: H8/300-Dependent. (line 6) 18766 * H8/300H, assembling for: H8/300 Directives. (line 8) 18767 * half directive, ARC: ARC Directives. (line 156) 18768 * half directive, SPARC: Sparc-Directives. (line 17) 18769 * half directive, TIC54X: TIC54X-Directives. (line 111) 18770 * hex character code (\XD...): Strings. (line 36) 18771 * hexadecimal integers: Integers. (line 15) 18772 * hexadecimal prefix, Z80: Z80-Chars. (line 8) 18773 * hfloat directive, VAX: VAX-directives. (line 22) 18774 * hi pseudo-op, V850: V850 Opcodes. (line 33) 18775 * hi0 pseudo-op, V850: V850 Opcodes. (line 10) 18776 * hidden directive: Hidden. (line 6) 18777 * high directive, M32R: M32R-Directives. (line 18) 18778 * hilo pseudo-op, V850: V850 Opcodes. (line 55) 18779 * HPPA directives not supported: HPPA Directives. (line 11) 18780 * HPPA floating point (IEEE): HPPA Floating Point. (line 6) 18781 * HPPA Syntax: HPPA Options. (line 8) 18782 * HPPA-only directives: HPPA Directives. (line 24) 18783 * hword directive: hword. (line 6) 18784 * i370 support: ESA/390-Dependent. (line 6) 18785 * i386 16-bit code: i386-16bit. (line 6) 18786 * i386 arch directive: i386-Arch. (line 6) 18787 * i386 att_syntax pseudo op: i386-Syntax. (line 6) 18788 * i386 conversion instructions: i386-Mnemonics. (line 32) 18789 * i386 floating point: i386-Float. (line 6) 18790 * i386 immediate operands: i386-Syntax. (line 15) 18791 * i386 instruction naming: i386-Mnemonics. (line 6) 18792 * i386 instruction prefixes: i386-Prefixes. (line 6) 18793 * i386 intel_syntax pseudo op: i386-Syntax. (line 6) 18794 * i386 jump optimization: i386-Jumps. (line 6) 18795 * i386 jump, call, return: i386-Syntax. (line 38) 18796 * i386 jump/call operands: i386-Syntax. (line 15) 18797 * i386 memory references: i386-Memory. (line 6) 18798 * i386 mnemonic compatibility: i386-Mnemonics. (line 57) 18799 * i386 mul, imul instructions: i386-Notes. (line 6) 18800 * i386 options: i386-Options. (line 6) 18801 * i386 register operands: i386-Syntax. (line 15) 18802 * i386 registers: i386-Regs. (line 6) 18803 * i386 sections: i386-Syntax. (line 44) 18804 * i386 size suffixes: i386-Syntax. (line 29) 18805 * i386 source, destination operands: i386-Syntax. (line 22) 18806 * i386 support: i386-Dependent. (line 6) 18807 * i386 syntax compatibility: i386-Syntax. (line 6) 18808 * i80306 support: i386-Dependent. (line 6) 18809 * i860 machine directives: Directives-i860. (line 6) 18810 * i860 opcodes: Opcodes for i860. (line 6) 18811 * i860 support: i860-Dependent. (line 6) 18812 * i960 architecture options: Options-i960. (line 6) 18813 * i960 branch recording: Options-i960. (line 22) 18814 * i960 callj pseudo-opcode: callj-i960. (line 6) 18815 * i960 compare and jump expansions: Compare-and-branch-i960. 18816 (line 13) 18817 * i960 compare/branch instructions: Compare-and-branch-i960. 18818 (line 6) 18819 * i960 floating point (IEEE): Floating Point-i960. (line 6) 18820 * i960 machine directives: Directives-i960. (line 6) 18821 * i960 opcodes: Opcodes for i960. (line 6) 18822 * i960 options: Options-i960. (line 6) 18823 * i960 support: i960-Dependent. (line 6) 18824 * IA-64 line comment character: IA-64-Chars. (line 6) 18825 * IA-64 line separator: IA-64-Chars. (line 8) 18826 * IA-64 options: IA-64 Options. (line 6) 18827 * IA-64 Processor-status-Register bit names: IA-64-Bits. (line 6) 18828 * IA-64 registers: IA-64-Regs. (line 6) 18829 * IA-64 support: IA-64-Dependent. (line 6) 18830 * IA-64 Syntax: IA-64 Options. (line 96) 18831 * ident directive: Ident. (line 6) 18832 * identifiers, ARM: ARM-Chars. (line 15) 18833 * identifiers, MSP 430: MSP430-Chars. (line 8) 18834 * if directive: If. (line 6) 18835 * ifb directive: If. (line 21) 18836 * ifc directive: If. (line 25) 18837 * ifdef directive: If. (line 16) 18838 * ifeq directive: If. (line 33) 18839 * ifeqs directive: If. (line 36) 18840 * ifge directive: If. (line 40) 18841 * ifgt directive: If. (line 44) 18842 * ifle directive: If. (line 48) 18843 * iflt directive: If. (line 52) 18844 * ifnb directive: If. (line 56) 18845 * ifnc directive: If. (line 61) 18846 * ifndef directive: If. (line 65) 18847 * ifne directive: If. (line 72) 18848 * ifnes directive: If. (line 76) 18849 * ifnotdef directive: If. (line 65) 18850 * immediate character, ARM: ARM-Chars. (line 13) 18851 * immediate character, M680x0: M68K-Chars. (line 6) 18852 * immediate character, VAX: VAX-operands. (line 6) 18853 * immediate fields, relaxation: Xtensa Immediate Relaxation. 18854 (line 6) 18855 * immediate operands, i386: i386-Syntax. (line 15) 18856 * immediate operands, x86-64: i386-Syntax. (line 15) 18857 * imul instruction, i386: i386-Notes. (line 6) 18858 * imul instruction, x86-64: i386-Notes. (line 6) 18859 * incbin directive: Incbin. (line 6) 18860 * include directive: Include. (line 6) 18861 * include directive search path: I. (line 6) 18862 * indirect character, VAX: VAX-operands. (line 9) 18863 * infix operators: Infix Ops. (line 6) 18864 * inhibiting interrupts, i386: i386-Prefixes. (line 36) 18865 * input: Input Files. (line 6) 18866 * input file linenumbers: Input Files. (line 35) 18867 * instruction expansion, CRIS: CRIS-Expand. (line 6) 18868 * instruction expansion, MMIX: MMIX-Expand. (line 6) 18869 * instruction naming, i386: i386-Mnemonics. (line 6) 18870 * instruction naming, x86-64: i386-Mnemonics. (line 6) 18871 * instruction prefixes, i386: i386-Prefixes. (line 6) 18872 * instruction set, M680x0: M68K-opcodes. (line 6) 18873 * instruction set, M68HC11: M68HC11-opcodes. (line 6) 18874 * instruction summary, AVR: AVR Opcodes. (line 6) 18875 * instruction summary, D10V: D10V-Opcodes. (line 6) 18876 * instruction summary, D30V: D30V-Opcodes. (line 6) 18877 * instruction summary, H8/300: H8/300 Opcodes. (line 6) 18878 * instruction summary, SH: SH Opcodes. (line 6) 18879 * instruction summary, SH64: SH64 Opcodes. (line 6) 18880 * instruction summary, Z8000: Z8000 Opcodes. (line 6) 18881 * instructions and directives: Statements. (line 19) 18882 * int directive: Int. (line 6) 18883 * int directive, H8/300: H8/300 Directives. (line 6) 18884 * int directive, i386: i386-Float. (line 21) 18885 * int directive, TIC54X: TIC54X-Directives. (line 111) 18886 * int directive, x86-64: i386-Float. (line 21) 18887 * integer expressions: Integer Exprs. (line 6) 18888 * integer, 16-byte: Octa. (line 6) 18889 * integer, 8-byte: Quad. (line 9) 18890 * integers: Integers. (line 6) 18891 * integers, 16-bit: hword. (line 6) 18892 * integers, 32-bit: Int. (line 6) 18893 * integers, binary: Integers. (line 6) 18894 * integers, decimal: Integers. (line 12) 18895 * integers, hexadecimal: Integers. (line 15) 18896 * integers, octal: Integers. (line 9) 18897 * integers, one byte: Byte. (line 6) 18898 * intel_syntax pseudo op, i386: i386-Syntax. (line 6) 18899 * intel_syntax pseudo op, x86-64: i386-Syntax. (line 6) 18900 * internal assembler sections: As Sections. (line 6) 18901 * internal directive: Internal. (line 6) 18902 * invalid input: Bug Criteria. (line 14) 18903 * invocation summary: Overview. (line 6) 18904 * IP2K architecture options: IP2K-Opts. (line 9) 18905 * IP2K options: IP2K-Opts. (line 6) 18906 * IP2K support: IP2K-Dependent. (line 6) 18907 * irp directive: Irp. (line 6) 18908 * irpc directive: Irpc. (line 6) 18909 * ISA options, SH64: SH64 Options. (line 6) 18910 * joining text and data sections: R. (line 6) 18911 * jump instructions, i386: i386-Mnemonics. (line 51) 18912 * jump instructions, x86-64: i386-Mnemonics. (line 51) 18913 * jump optimization, i386: i386-Jumps. (line 6) 18914 * jump optimization, x86-64: i386-Jumps. (line 6) 18915 * jump/call operands, i386: i386-Syntax. (line 15) 18916 * jump/call operands, x86-64: i386-Syntax. (line 15) 18917 * L16SI instructions, relaxation: Xtensa Immediate Relaxation. 18918 (line 23) 18919 * L16UI instructions, relaxation: Xtensa Immediate Relaxation. 18920 (line 23) 18921 * L32I instructions, relaxation: Xtensa Immediate Relaxation. 18922 (line 23) 18923 * L8UI instructions, relaxation: Xtensa Immediate Relaxation. 18924 (line 23) 18925 * label (:): Statements. (line 30) 18926 * label directive, TIC54X: TIC54X-Directives. (line 123) 18927 * labels: Labels. (line 6) 18928 * lcomm directive: Lcomm. (line 6) 18929 * lcomm directive, COFF: i386-Directives. (line 6) 18930 * ld: Object. (line 15) 18931 * ldouble directive M680x0: M68K-Float. (line 17) 18932 * ldouble directive M68HC11: M68HC11-Float. (line 17) 18933 * ldouble directive, TIC54X: TIC54X-Directives. (line 64) 18934 * LDR reg,=<label> pseudo op, ARM: ARM Opcodes. (line 15) 18935 * leafproc directive, i960: Directives-i960. (line 18) 18936 * length directive, TIC54X: TIC54X-Directives. (line 127) 18937 * length of symbols: Symbol Intro. (line 14) 18938 * lflags directive (ignored): Lflags. (line 6) 18939 * line comment character: Comments. (line 19) 18940 * line comment character, Alpha: Alpha-Chars. (line 6) 18941 * line comment character, ARM: ARM-Chars. (line 6) 18942 * line comment character, AVR: AVR-Chars. (line 6) 18943 * line comment character, D10V: D10V-Chars. (line 6) 18944 * line comment character, D30V: D30V-Chars. (line 6) 18945 * line comment character, H8/300: H8/300-Chars. (line 6) 18946 * line comment character, IA-64: IA-64-Chars. (line 6) 18947 * line comment character, M680x0: M68K-Chars. (line 6) 18948 * line comment character, MSP 430: MSP430-Chars. (line 6) 18949 * line comment character, SH: SH-Chars. (line 6) 18950 * line comment character, SH64: SH64-Chars. (line 6) 18951 * line comment character, Sparc: Sparc-Chars. (line 6) 18952 * line comment character, V850: V850-Chars. (line 6) 18953 * line comment character, Z80: Z80-Chars. (line 6) 18954 * line comment character, Z8000: Z8000-Chars. (line 6) 18955 * line comment characters, CRIS: CRIS-Chars. (line 6) 18956 * line comment characters, MMIX: MMIX-Chars. (line 6) 18957 * line directive: Line. (line 6) 18958 * line directive, MSP 430: MSP430 Directives. (line 14) 18959 * line numbers, in input files: Input Files. (line 35) 18960 * line numbers, in warnings/errors: Errors. (line 16) 18961 * line separator character: Statements. (line 6) 18962 * line separator, Alpha: Alpha-Chars. (line 8) 18963 * line separator, ARM: ARM-Chars. (line 10) 18964 * line separator, AVR: AVR-Chars. (line 10) 18965 * line separator, H8/300: H8/300-Chars. (line 8) 18966 * line separator, IA-64: IA-64-Chars. (line 8) 18967 * line separator, SH: SH-Chars. (line 8) 18968 * line separator, SH64: SH64-Chars. (line 8) 18969 * line separator, Sparc: Sparc-Chars. (line 8) 18970 * line separator, Z8000: Z8000-Chars. (line 8) 18971 * lines starting with #: Comments. (line 38) 18972 * linker: Object. (line 15) 18973 * linker, and assembler: Secs Background. (line 10) 18974 * linkonce directive: Linkonce. (line 6) 18975 * list directive: List. (line 6) 18976 * list directive, TIC54X: TIC54X-Directives. (line 131) 18977 * listing control, turning off: Nolist. (line 6) 18978 * listing control, turning on: List. (line 6) 18979 * listing control: new page: Eject. (line 6) 18980 * listing control: paper size: Psize. (line 6) 18981 * listing control: subtitle: Sbttl. (line 6) 18982 * listing control: title line: Title. (line 6) 18983 * listings, enabling: a. (line 6) 18984 * literal directive: Literal Directive. (line 6) 18985 * literal_position directive: Literal Position Directive. 18986 (line 6) 18987 * literal_prefix directive: Literal Prefix Directive. 18988 (line 6) 18989 * little endian output, MIPS: Overview. (line 632) 18990 * little endian output, PJ: Overview. (line 539) 18991 * little-endian output, MIPS: MIPS Opts. (line 13) 18992 * ln directive: Ln. (line 6) 18993 * lo pseudo-op, V850: V850 Opcodes. (line 22) 18994 * loc directive: LNS directives. (line 19) 18995 * loc_mark_labels directive: LNS directives. (line 50) 18996 * local common symbols: Lcomm. (line 6) 18997 * local labels: Symbol Names. (line 35) 18998 * local symbol names: Symbol Names. (line 22) 18999 * local symbols, retaining in output: L. (line 6) 19000 * location counter: Dot. (line 6) 19001 * location counter, advancing: Org. (line 6) 19002 * location counter, Z80: Z80-Chars. (line 8) 19003 * logical file name: File. (line 6) 19004 * logical line number: Line. (line 6) 19005 * logical line numbers: Comments. (line 38) 19006 * long directive: Long. (line 6) 19007 * long directive, ARC: ARC Directives. (line 159) 19008 * long directive, i386: i386-Float. (line 21) 19009 * long directive, TIC54X: TIC54X-Directives. (line 135) 19010 * long directive, x86-64: i386-Float. (line 21) 19011 * longcall pseudo-op, V850: V850 Opcodes. (line 123) 19012 * longcalls directive: Longcalls Directive. (line 6) 19013 * longjump pseudo-op, V850: V850 Opcodes. (line 129) 19014 * loop directive, TIC54X: TIC54X-Directives. (line 143) 19015 * LOOP instructions, alignment: Xtensa Automatic Alignment. 19016 (line 6) 19017 * low directive, M32R: M32R-Directives. (line 9) 19018 * lp register, V850: V850-Regs. (line 98) 19019 * lval: Z8000 Directives. (line 27) 19020 * M16C architecture option: M32C-Opts. (line 12) 19021 * M32C architecture option: M32C-Opts. (line 9) 19022 * M32C modifiers: M32C-Modifiers. (line 6) 19023 * M32C options: M32C-Opts. (line 6) 19024 * M32C support: M32C-Dependent. (line 6) 19025 * M32R architecture options: M32R-Opts. (line 9) 19026 * M32R directives: M32R-Directives. (line 6) 19027 * M32R options: M32R-Opts. (line 6) 19028 * M32R support: M32R-Dependent. (line 6) 19029 * M32R warnings: M32R-Warnings. (line 6) 19030 * M680x0 addressing modes: M68K-Syntax. (line 21) 19031 * M680x0 architecture options: M68K-Opts. (line 104) 19032 * M680x0 branch improvement: M68K-Branch. (line 6) 19033 * M680x0 directives: M68K-Directives. (line 6) 19034 * M680x0 floating point: M68K-Float. (line 6) 19035 * M680x0 immediate character: M68K-Chars. (line 6) 19036 * M680x0 line comment character: M68K-Chars. (line 6) 19037 * M680x0 opcodes: M68K-opcodes. (line 6) 19038 * M680x0 options: M68K-Opts. (line 6) 19039 * M680x0 pseudo-opcodes: M68K-Branch. (line 6) 19040 * M680x0 size modifiers: M68K-Syntax. (line 8) 19041 * M680x0 support: M68K-Dependent. (line 6) 19042 * M680x0 syntax: M68K-Syntax. (line 8) 19043 * M68HC11 addressing modes: M68HC11-Syntax. (line 17) 19044 * M68HC11 and M68HC12 support: M68HC11-Dependent. (line 6) 19045 * M68HC11 assembler directive .far: M68HC11-Directives. (line 20) 19046 * M68HC11 assembler directive .interrupt: M68HC11-Directives. (line 26) 19047 * M68HC11 assembler directive .mode: M68HC11-Directives. (line 16) 19048 * M68HC11 assembler directive .relax: M68HC11-Directives. (line 10) 19049 * M68HC11 assembler directive .xrefb: M68HC11-Directives. (line 31) 19050 * M68HC11 assembler directives: M68HC11-Directives. (line 6) 19051 * M68HC11 branch improvement: M68HC11-Branch. (line 6) 19052 * M68HC11 floating point: M68HC11-Float. (line 6) 19053 * M68HC11 modifiers: M68HC11-Modifiers. (line 6) 19054 * M68HC11 opcodes: M68HC11-opcodes. (line 6) 19055 * M68HC11 options: M68HC11-Opts. (line 6) 19056 * M68HC11 pseudo-opcodes: M68HC11-Branch. (line 6) 19057 * M68HC11 syntax: M68HC11-Syntax. (line 6) 19058 * M68HC12 assembler directives: M68HC11-Directives. (line 6) 19059 * machine dependencies: Machine Dependencies. 19060 (line 6) 19061 * machine directives, ARC: ARC Directives. (line 6) 19062 * machine directives, ARM: ARM Directives. (line 6) 19063 * machine directives, H8/300 (none): H8/300 Directives. (line 6) 19064 * machine directives, i860: Directives-i860. (line 6) 19065 * machine directives, i960: Directives-i960. (line 6) 19066 * machine directives, MSP 430: MSP430 Directives. (line 6) 19067 * machine directives, SH: SH Directives. (line 6) 19068 * machine directives, SH64: SH64 Directives. (line 9) 19069 * machine directives, SPARC: Sparc-Directives. (line 6) 19070 * machine directives, TIC54X: TIC54X-Directives. (line 6) 19071 * machine directives, V850: V850 Directives. (line 6) 19072 * machine directives, VAX: VAX-directives. (line 6) 19073 * machine directives, x86: i386-Directives. (line 6) 19074 * machine independent directives: Pseudo Ops. (line 6) 19075 * machine instructions (not covered): Manual. (line 14) 19076 * machine-independent syntax: Syntax. (line 6) 19077 * macro directive: Macro. (line 28) 19078 * macro directive, TIC54X: TIC54X-Directives. (line 153) 19079 * macros: Macro. (line 6) 19080 * macros, count executed: Macro. (line 143) 19081 * Macros, MSP 430: MSP430-Macros. (line 6) 19082 * macros, TIC54X: TIC54X-Macros. (line 6) 19083 * make rules: MD. (line 6) 19084 * manual, structure and purpose: Manual. (line 6) 19085 * math builtins, TIC54X: TIC54X-Builtins. (line 6) 19086 * Maximum number of continuation lines: listing. (line 34) 19087 * memory references, i386: i386-Memory. (line 6) 19088 * memory references, x86-64: i386-Memory. (line 6) 19089 * memory-mapped registers, TIC54X: TIC54X-MMRegs. (line 6) 19090 * merging text and data sections: R. (line 6) 19091 * messages from assembler: Errors. (line 6) 19092 * minus, permitted arguments: Infix Ops. (line 49) 19093 * MIPS architecture options: MIPS Opts. (line 29) 19094 * MIPS big-endian output: MIPS Opts. (line 13) 19095 * MIPS CPU override: MIPS ISA. (line 18) 19096 * MIPS debugging directives: MIPS Stabs. (line 6) 19097 * MIPS DSP Release 1 instruction generation override: MIPS ASE instruction generation overrides. 19098 (line 21) 19099 * MIPS DSP Release 2 instruction generation override: MIPS ASE instruction generation overrides. 19100 (line 26) 19101 * MIPS ECOFF sections: MIPS Object. (line 6) 19102 * MIPS endianness: Overview. (line 629) 19103 * MIPS ISA: Overview. (line 635) 19104 * MIPS ISA override: MIPS ISA. (line 6) 19105 * MIPS little-endian output: MIPS Opts. (line 13) 19106 * MIPS MDMX instruction generation override: MIPS ASE instruction generation overrides. 19107 (line 16) 19108 * MIPS MIPS-3D instruction generation override: MIPS ASE instruction generation overrides. 19109 (line 6) 19110 * MIPS MT instruction generation override: MIPS ASE instruction generation overrides. 19111 (line 32) 19112 * MIPS option stack: MIPS option stack. (line 6) 19113 * MIPS processor: MIPS-Dependent. (line 6) 19114 * MIT: M68K-Syntax. (line 6) 19115 * mlib directive, TIC54X: TIC54X-Directives. (line 159) 19116 * mlist directive, TIC54X: TIC54X-Directives. (line 164) 19117 * MMIX assembler directive BSPEC: MMIX-Pseudos. (line 131) 19118 * MMIX assembler directive BYTE: MMIX-Pseudos. (line 97) 19119 * MMIX assembler directive ESPEC: MMIX-Pseudos. (line 131) 19120 * MMIX assembler directive GREG: MMIX-Pseudos. (line 50) 19121 * MMIX assembler directive IS: MMIX-Pseudos. (line 42) 19122 * MMIX assembler directive LOC: MMIX-Pseudos. (line 7) 19123 * MMIX assembler directive LOCAL: MMIX-Pseudos. (line 28) 19124 * MMIX assembler directive OCTA: MMIX-Pseudos. (line 108) 19125 * MMIX assembler directive PREFIX: MMIX-Pseudos. (line 120) 19126 * MMIX assembler directive TETRA: MMIX-Pseudos. (line 108) 19127 * MMIX assembler directive WYDE: MMIX-Pseudos. (line 108) 19128 * MMIX assembler directives: MMIX-Pseudos. (line 6) 19129 * MMIX line comment characters: MMIX-Chars. (line 6) 19130 * MMIX options: MMIX-Opts. (line 6) 19131 * MMIX pseudo-op BSPEC: MMIX-Pseudos. (line 131) 19132 * MMIX pseudo-op BYTE: MMIX-Pseudos. (line 97) 19133 * MMIX pseudo-op ESPEC: MMIX-Pseudos. (line 131) 19134 * MMIX pseudo-op GREG: MMIX-Pseudos. (line 50) 19135 * MMIX pseudo-op IS: MMIX-Pseudos. (line 42) 19136 * MMIX pseudo-op LOC: MMIX-Pseudos. (line 7) 19137 * MMIX pseudo-op LOCAL: MMIX-Pseudos. (line 28) 19138 * MMIX pseudo-op OCTA: MMIX-Pseudos. (line 108) 19139 * MMIX pseudo-op PREFIX: MMIX-Pseudos. (line 120) 19140 * MMIX pseudo-op TETRA: MMIX-Pseudos. (line 108) 19141 * MMIX pseudo-op WYDE: MMIX-Pseudos. (line 108) 19142 * MMIX pseudo-ops: MMIX-Pseudos. (line 6) 19143 * MMIX register names: MMIX-Regs. (line 6) 19144 * MMIX support: MMIX-Dependent. (line 6) 19145 * mmixal differences: MMIX-mmixal. (line 6) 19146 * mmregs directive, TIC54X: TIC54X-Directives. (line 170) 19147 * mmsg directive, TIC54X: TIC54X-Directives. (line 77) 19148 * MMX, i386: i386-SIMD. (line 6) 19149 * MMX, x86-64: i386-SIMD. (line 6) 19150 * mnemonic compatibility, i386: i386-Mnemonics. (line 57) 19151 * mnemonic suffixes, i386: i386-Syntax. (line 29) 19152 * mnemonic suffixes, x86-64: i386-Syntax. (line 29) 19153 * mnemonics for opcodes, VAX: VAX-opcodes. (line 6) 19154 * mnemonics, AVR: AVR Opcodes. (line 6) 19155 * mnemonics, D10V: D10V-Opcodes. (line 6) 19156 * mnemonics, D30V: D30V-Opcodes. (line 6) 19157 * mnemonics, H8/300: H8/300 Opcodes. (line 6) 19158 * mnemonics, SH: SH Opcodes. (line 6) 19159 * mnemonics, SH64: SH64 Opcodes. (line 6) 19160 * mnemonics, Z8000: Z8000 Opcodes. (line 6) 19161 * mnolist directive, TIC54X: TIC54X-Directives. (line 164) 19162 * Motorola syntax for the 680x0: M68K-Moto-Syntax. (line 6) 19163 * MOVI instructions, relaxation: Xtensa Immediate Relaxation. 19164 (line 12) 19165 * MOVW and MOVT relocations, ARM: ARM-Relocations. (line 20) 19166 * MRI compatibility mode: M. (line 6) 19167 * mri directive: MRI. (line 6) 19168 * MRI mode, temporarily: MRI. (line 6) 19169 * MSP 430 floating point (IEEE): MSP430 Floating Point. 19170 (line 6) 19171 * MSP 430 identifiers: MSP430-Chars. (line 8) 19172 * MSP 430 line comment character: MSP430-Chars. (line 6) 19173 * MSP 430 machine directives: MSP430 Directives. (line 6) 19174 * MSP 430 macros: MSP430-Macros. (line 6) 19175 * MSP 430 opcodes: MSP430 Opcodes. (line 6) 19176 * MSP 430 options (none): MSP430 Options. (line 6) 19177 * MSP 430 profiling capability: MSP430 Profiling Capability. 19178 (line 6) 19179 * MSP 430 register names: MSP430-Regs. (line 6) 19180 * MSP 430 support: MSP430-Dependent. (line 6) 19181 * MSP430 Assembler Extensions: MSP430-Ext. (line 6) 19182 * mul instruction, i386: i386-Notes. (line 6) 19183 * mul instruction, x86-64: i386-Notes. (line 6) 19184 * name: Z8000 Directives. (line 18) 19185 * named section: Section. (line 6) 19186 * named sections: Ld Sections. (line 8) 19187 * names, symbol: Symbol Names. (line 6) 19188 * naming object file: o. (line 6) 19189 * new page, in listings: Eject. (line 6) 19190 * newblock directive, TIC54X: TIC54X-Directives. (line 176) 19191 * newline (\n): Strings. (line 21) 19192 * newline, required at file end: Statements. (line 13) 19193 * no-absolute-literals directive: Absolute Literals Directive. 19194 (line 6) 19195 * no-longcalls directive: Longcalls Directive. (line 6) 19196 * no-schedule directive: Schedule Directive. (line 6) 19197 * no-transform directive: Transform Directive. (line 6) 19198 * nolist directive: Nolist. (line 6) 19199 * nolist directive, TIC54X: TIC54X-Directives. (line 131) 19200 * NOP pseudo op, ARM: ARM Opcodes. (line 9) 19201 * notes for Alpha: Alpha Notes. (line 6) 19202 * null-terminated strings: Asciz. (line 6) 19203 * number constants: Numbers. (line 6) 19204 * number of macros executed: Macro. (line 143) 19205 * numbered subsections: Sub-Sections. (line 6) 19206 * numbers, 16-bit: hword. (line 6) 19207 * numeric values: Expressions. (line 6) 19208 * nword directive, SPARC: Sparc-Directives. (line 20) 19209 * object attributes: Object Attributes. (line 6) 19210 * object file: Object. (line 6) 19211 * object file format: Object Formats. (line 6) 19212 * object file name: o. (line 6) 19213 * object file, after errors: Z. (line 6) 19214 * obsolescent directives: Deprecated. (line 6) 19215 * octa directive: Octa. (line 6) 19216 * octal character code (\DDD): Strings. (line 30) 19217 * octal integers: Integers. (line 9) 19218 * offset directive, V850: V850 Directives. (line 6) 19219 * opcode mnemonics, VAX: VAX-opcodes. (line 6) 19220 * opcode names, Xtensa: Xtensa Opcodes. (line 6) 19221 * opcode summary, AVR: AVR Opcodes. (line 6) 19222 * opcode summary, D10V: D10V-Opcodes. (line 6) 19223 * opcode summary, D30V: D30V-Opcodes. (line 6) 19224 * opcode summary, H8/300: H8/300 Opcodes. (line 6) 19225 * opcode summary, SH: SH Opcodes. (line 6) 19226 * opcode summary, SH64: SH64 Opcodes. (line 6) 19227 * opcode summary, Z8000: Z8000 Opcodes. (line 6) 19228 * opcodes for ARC: ARC Opcodes. (line 6) 19229 * opcodes for ARM: ARM Opcodes. (line 6) 19230 * opcodes for MSP 430: MSP430 Opcodes. (line 6) 19231 * opcodes for V850: V850 Opcodes. (line 6) 19232 * opcodes, i860: Opcodes for i860. (line 6) 19233 * opcodes, i960: Opcodes for i960. (line 6) 19234 * opcodes, M680x0: M68K-opcodes. (line 6) 19235 * opcodes, M68HC11: M68HC11-opcodes. (line 6) 19236 * operand delimiters, i386: i386-Syntax. (line 15) 19237 * operand delimiters, x86-64: i386-Syntax. (line 15) 19238 * operand notation, VAX: VAX-operands. (line 6) 19239 * operands in expressions: Arguments. (line 6) 19240 * operator precedence: Infix Ops. (line 11) 19241 * operators, in expressions: Operators. (line 6) 19242 * operators, permitted arguments: Infix Ops. (line 6) 19243 * optimization, D10V: Overview. (line 408) 19244 * optimization, D30V: Overview. (line 413) 19245 * optimizations: Xtensa Optimizations. 19246 (line 6) 19247 * option directive, ARC: ARC Directives. (line 162) 19248 * option directive, TIC54X: TIC54X-Directives. (line 180) 19249 * option summary: Overview. (line 6) 19250 * options for Alpha: Alpha Options. (line 6) 19251 * options for ARC (none): ARC Options. (line 6) 19252 * options for ARM (none): ARM Options. (line 6) 19253 * options for AVR (none): AVR Options. (line 6) 19254 * options for i386: i386-Options. (line 6) 19255 * options for IA-64: IA-64 Options. (line 6) 19256 * options for MSP430 (none): MSP430 Options. (line 6) 19257 * options for PDP-11: PDP-11-Options. (line 6) 19258 * options for PowerPC: PowerPC-Opts. (line 6) 19259 * options for SPARC: Sparc-Opts. (line 6) 19260 * options for V850 (none): V850 Options. (line 6) 19261 * options for VAX/VMS: VAX-Opts. (line 42) 19262 * options for x86-64: i386-Options. (line 6) 19263 * options for Z80: Z80 Options. (line 6) 19264 * options, all versions of assembler: Invoking. (line 6) 19265 * options, command line: Command Line. (line 13) 19266 * options, CRIS: CRIS-Opts. (line 6) 19267 * options, D10V: D10V-Opts. (line 6) 19268 * options, D30V: D30V-Opts. (line 6) 19269 * options, H8/300: H8/300 Options. (line 6) 19270 * options, i960: Options-i960. (line 6) 19271 * options, IP2K: IP2K-Opts. (line 6) 19272 * options, M32C: M32C-Opts. (line 6) 19273 * options, M32R: M32R-Opts. (line 6) 19274 * options, M680x0: M68K-Opts. (line 6) 19275 * options, M68HC11: M68HC11-Opts. (line 6) 19276 * options, MMIX: MMIX-Opts. (line 6) 19277 * options, PJ: PJ Options. (line 6) 19278 * options, SH: SH Options. (line 6) 19279 * options, SH64: SH64 Options. (line 6) 19280 * options, TIC54X: TIC54X-Opts. (line 6) 19281 * options, Z8000: Z8000 Options. (line 6) 19282 * org directive: Org. (line 6) 19283 * other attribute, of a.out symbol: Symbol Other. (line 6) 19284 * output file: Object. (line 6) 19285 * p2align directive: P2align. (line 6) 19286 * p2alignl directive: P2align. (line 28) 19287 * p2alignw directive: P2align. (line 28) 19288 * padding the location counter: Align. (line 6) 19289 * padding the location counter given a power of two: P2align. (line 6) 19290 * padding the location counter given number of bytes: Balign. (line 6) 19291 * page, in listings: Eject. (line 6) 19292 * paper size, for listings: Psize. (line 6) 19293 * paths for .include: I. (line 6) 19294 * patterns, writing in memory: Fill. (line 6) 19295 * PDP-11 comments: PDP-11-Syntax. (line 16) 19296 * PDP-11 floating-point register syntax: PDP-11-Syntax. (line 13) 19297 * PDP-11 general-purpose register syntax: PDP-11-Syntax. (line 10) 19298 * PDP-11 instruction naming: PDP-11-Mnemonics. (line 6) 19299 * PDP-11 support: PDP-11-Dependent. (line 6) 19300 * PDP-11 syntax: PDP-11-Syntax. (line 6) 19301 * PIC code generation for ARM: ARM Options. (line 122) 19302 * PIC code generation for M32R: M32R-Opts. (line 42) 19303 * PIC selection, MIPS: MIPS Opts. (line 21) 19304 * PJ endianness: Overview. (line 536) 19305 * PJ options: PJ Options. (line 6) 19306 * PJ support: PJ-Dependent. (line 6) 19307 * plus, permitted arguments: Infix Ops. (line 44) 19308 * popsection directive: PopSection. (line 6) 19309 * Position-independent code, CRIS: CRIS-Opts. (line 27) 19310 * Position-independent code, symbols in, CRIS: CRIS-Pic. (line 6) 19311 * PowerPC architectures: PowerPC-Opts. (line 6) 19312 * PowerPC directives: PowerPC-Pseudo. (line 6) 19313 * PowerPC options: PowerPC-Opts. (line 6) 19314 * PowerPC support: PPC-Dependent. (line 6) 19315 * precedence of operators: Infix Ops. (line 11) 19316 * precision, floating point: Flonums. (line 6) 19317 * prefix operators: Prefix Ops. (line 6) 19318 * prefixes, i386: i386-Prefixes. (line 6) 19319 * preprocessing: Preprocessing. (line 6) 19320 * preprocessing, turning on and off: Preprocessing. (line 27) 19321 * previous directive: Previous. (line 6) 19322 * primary attributes, COFF symbols: COFF Symbols. (line 13) 19323 * print directive: Print. (line 6) 19324 * proc directive, SPARC: Sparc-Directives. (line 25) 19325 * profiler directive, MSP 430: MSP430 Directives. (line 22) 19326 * profiling capability for MSP 430: MSP430 Profiling Capability. 19327 (line 6) 19328 * protected directive: Protected. (line 6) 19329 * pseudo-op .arch, CRIS: CRIS-Pseudos. (line 45) 19330 * pseudo-op .dword, CRIS: CRIS-Pseudos. (line 12) 19331 * pseudo-op .syntax, CRIS: CRIS-Pseudos. (line 17) 19332 * pseudo-op BSPEC, MMIX: MMIX-Pseudos. (line 131) 19333 * pseudo-op BYTE, MMIX: MMIX-Pseudos. (line 97) 19334 * pseudo-op ESPEC, MMIX: MMIX-Pseudos. (line 131) 19335 * pseudo-op GREG, MMIX: MMIX-Pseudos. (line 50) 19336 * pseudo-op IS, MMIX: MMIX-Pseudos. (line 42) 19337 * pseudo-op LOC, MMIX: MMIX-Pseudos. (line 7) 19338 * pseudo-op LOCAL, MMIX: MMIX-Pseudos. (line 28) 19339 * pseudo-op OCTA, MMIX: MMIX-Pseudos. (line 108) 19340 * pseudo-op PREFIX, MMIX: MMIX-Pseudos. (line 120) 19341 * pseudo-op TETRA, MMIX: MMIX-Pseudos. (line 108) 19342 * pseudo-op WYDE, MMIX: MMIX-Pseudos. (line 108) 19343 * pseudo-opcodes, M680x0: M68K-Branch. (line 6) 19344 * pseudo-opcodes, M68HC11: M68HC11-Branch. (line 6) 19345 * pseudo-ops for branch, VAX: VAX-branch. (line 6) 19346 * pseudo-ops, CRIS: CRIS-Pseudos. (line 6) 19347 * pseudo-ops, machine independent: Pseudo Ops. (line 6) 19348 * pseudo-ops, MMIX: MMIX-Pseudos. (line 6) 19349 * psize directive: Psize. (line 6) 19350 * PSR bits: IA-64-Bits. (line 6) 19351 * pstring directive, TIC54X: TIC54X-Directives. (line 209) 19352 * psw register, V850: V850-Regs. (line 116) 19353 * purgem directive: Purgem. (line 6) 19354 * purpose of GNU assembler: GNU Assembler. (line 12) 19355 * pushsection directive: PushSection. (line 6) 19356 * quad directive: Quad. (line 6) 19357 * quad directive, i386: i386-Float. (line 21) 19358 * quad directive, x86-64: i386-Float. (line 21) 19359 * real-mode code, i386: i386-16bit. (line 6) 19360 * ref directive, TIC54X: TIC54X-Directives. (line 103) 19361 * register directive, SPARC: Sparc-Directives. (line 29) 19362 * register names, Alpha: Alpha-Regs. (line 6) 19363 * register names, ARC: ARC-Regs. (line 6) 19364 * register names, ARM: ARM-Regs. (line 6) 19365 * register names, AVR: AVR-Regs. (line 6) 19366 * register names, CRIS: CRIS-Regs. (line 6) 19367 * register names, H8/300: H8/300-Regs. (line 6) 19368 * register names, IA-64: IA-64-Regs. (line 6) 19369 * register names, MMIX: MMIX-Regs. (line 6) 19370 * register names, MSP 430: MSP430-Regs. (line 6) 19371 * register names, Sparc: Sparc-Regs. (line 6) 19372 * register names, V850: V850-Regs. (line 6) 19373 * register names, VAX: VAX-operands. (line 17) 19374 * register names, Xtensa: Xtensa Registers. (line 6) 19375 * register names, Z80: Z80-Regs. (line 6) 19376 * register operands, i386: i386-Syntax. (line 15) 19377 * register operands, x86-64: i386-Syntax. (line 15) 19378 * registers, D10V: D10V-Regs. (line 6) 19379 * registers, D30V: D30V-Regs. (line 6) 19380 * registers, i386: i386-Regs. (line 6) 19381 * registers, SH: SH-Regs. (line 6) 19382 * registers, SH64: SH64-Regs. (line 6) 19383 * registers, TIC54X memory-mapped: TIC54X-MMRegs. (line 6) 19384 * registers, x86-64: i386-Regs. (line 6) 19385 * registers, Z8000: Z8000-Regs. (line 6) 19386 * relaxation: Xtensa Relaxation. (line 6) 19387 * relaxation of ADDI instructions: Xtensa Immediate Relaxation. 19388 (line 43) 19389 * relaxation of branch instructions: Xtensa Branch Relaxation. 19390 (line 6) 19391 * relaxation of call instructions: Xtensa Call Relaxation. 19392 (line 6) 19393 * relaxation of immediate fields: Xtensa Immediate Relaxation. 19394 (line 6) 19395 * relaxation of L16SI instructions: Xtensa Immediate Relaxation. 19396 (line 23) 19397 * relaxation of L16UI instructions: Xtensa Immediate Relaxation. 19398 (line 23) 19399 * relaxation of L32I instructions: Xtensa Immediate Relaxation. 19400 (line 23) 19401 * relaxation of L8UI instructions: Xtensa Immediate Relaxation. 19402 (line 23) 19403 * relaxation of MOVI instructions: Xtensa Immediate Relaxation. 19404 (line 12) 19405 * reloc directive: Reloc. (line 6) 19406 * relocation: Sections. (line 6) 19407 * relocation example: Ld Sections. (line 40) 19408 * relocations, Alpha: Alpha-Relocs. (line 6) 19409 * relocations, Sparc: Sparc-Relocs. (line 6) 19410 * repeat prefixes, i386: i386-Prefixes. (line 44) 19411 * reporting bugs in assembler: Reporting Bugs. (line 6) 19412 * rept directive: Rept. (line 6) 19413 * req directive, ARM: ARM Directives. (line 13) 19414 * reserve directive, SPARC: Sparc-Directives. (line 39) 19415 * return instructions, i386: i386-Syntax. (line 38) 19416 * return instructions, x86-64: i386-Syntax. (line 38) 19417 * REX prefixes, i386: i386-Prefixes. (line 46) 19418 * rsect: Z8000 Directives. (line 52) 19419 * sblock directive, TIC54X: TIC54X-Directives. (line 183) 19420 * sbttl directive: Sbttl. (line 6) 19421 * schedule directive: Schedule Directive. (line 6) 19422 * scl directive: Scl. (line 6) 19423 * sdaoff pseudo-op, V850: V850 Opcodes. (line 65) 19424 * search path for .include: I. (line 6) 19425 * sect directive, MSP 430: MSP430 Directives. (line 18) 19426 * sect directive, TIC54X: TIC54X-Directives. (line 189) 19427 * section directive (COFF version): Section. (line 16) 19428 * section directive (ELF version): Section. (line 67) 19429 * section directive, V850: V850 Directives. (line 9) 19430 * section override prefixes, i386: i386-Prefixes. (line 23) 19431 * Section Stack <1>: SubSection. (line 6) 19432 * Section Stack <2>: Section. (line 62) 19433 * Section Stack <3>: PushSection. (line 6) 19434 * Section Stack <4>: PopSection. (line 6) 19435 * Section Stack: Previous. (line 6) 19436 * section-relative addressing: Secs Background. (line 68) 19437 * sections: Sections. (line 6) 19438 * sections in messages, internal: As Sections. (line 6) 19439 * sections, i386: i386-Syntax. (line 44) 19440 * sections, named: Ld Sections. (line 8) 19441 * sections, x86-64: i386-Syntax. (line 44) 19442 * seg directive, SPARC: Sparc-Directives. (line 44) 19443 * segm: Z8000 Directives. (line 10) 19444 * set directive: Set. (line 6) 19445 * set directive, TIC54X: TIC54X-Directives. (line 192) 19446 * SH addressing modes: SH-Addressing. (line 6) 19447 * SH floating point (IEEE): SH Floating Point. (line 6) 19448 * SH line comment character: SH-Chars. (line 6) 19449 * SH line separator: SH-Chars. (line 8) 19450 * SH machine directives: SH Directives. (line 6) 19451 * SH opcode summary: SH Opcodes. (line 6) 19452 * SH options: SH Options. (line 6) 19453 * SH registers: SH-Regs. (line 6) 19454 * SH support: SH-Dependent. (line 6) 19455 * SH64 ABI options: SH64 Options. (line 29) 19456 * SH64 addressing modes: SH64-Addressing. (line 6) 19457 * SH64 ISA options: SH64 Options. (line 6) 19458 * SH64 line comment character: SH64-Chars. (line 6) 19459 * SH64 line separator: SH64-Chars. (line 8) 19460 * SH64 machine directives: SH64 Directives. (line 9) 19461 * SH64 opcode summary: SH64 Opcodes. (line 6) 19462 * SH64 options: SH64 Options. (line 6) 19463 * SH64 registers: SH64-Regs. (line 6) 19464 * SH64 support: SH64-Dependent. (line 6) 19465 * shigh directive, M32R: M32R-Directives. (line 26) 19466 * short directive: Short. (line 6) 19467 * short directive, ARC: ARC Directives. (line 171) 19468 * short directive, TIC54X: TIC54X-Directives. (line 111) 19469 * SIMD, i386: i386-SIMD. (line 6) 19470 * SIMD, x86-64: i386-SIMD. (line 6) 19471 * single character constant: Chars. (line 6) 19472 * single directive: Single. (line 6) 19473 * single directive, i386: i386-Float. (line 14) 19474 * single directive, x86-64: i386-Float. (line 14) 19475 * single quote, Z80: Z80-Chars. (line 13) 19476 * sixteen bit integers: hword. (line 6) 19477 * sixteen byte integer: Octa. (line 6) 19478 * size directive (COFF version): Size. (line 11) 19479 * size directive (ELF version): Size. (line 19) 19480 * size modifiers, D10V: D10V-Size. (line 6) 19481 * size modifiers, D30V: D30V-Size. (line 6) 19482 * size modifiers, M680x0: M68K-Syntax. (line 8) 19483 * size prefixes, i386: i386-Prefixes. (line 27) 19484 * size suffixes, H8/300: H8/300 Opcodes. (line 163) 19485 * size, translations, Sparc: Sparc-Size-Translations. 19486 (line 6) 19487 * sizes operands, i386: i386-Syntax. (line 29) 19488 * sizes operands, x86-64: i386-Syntax. (line 29) 19489 * skip directive: Skip. (line 6) 19490 * skip directive, M680x0: M68K-Directives. (line 19) 19491 * skip directive, SPARC: Sparc-Directives. (line 48) 19492 * sleb128 directive: Sleb128. (line 6) 19493 * small objects, MIPS ECOFF: MIPS Object. (line 11) 19494 * SmartMIPS instruction generation override: MIPS ASE instruction generation overrides. 19495 (line 11) 19496 * SOM symbol attributes: SOM Symbols. (line 6) 19497 * source program: Input Files. (line 6) 19498 * source, destination operands; i386: i386-Syntax. (line 22) 19499 * source, destination operands; x86-64: i386-Syntax. (line 22) 19500 * sp register: Xtensa Registers. (line 6) 19501 * sp register, V850: V850-Regs. (line 14) 19502 * space directive: Space. (line 6) 19503 * space directive, TIC54X: TIC54X-Directives. (line 197) 19504 * space used, maximum for assembly: statistics. (line 6) 19505 * SPARC architectures: Sparc-Opts. (line 6) 19506 * Sparc constants: Sparc-Constants. (line 6) 19507 * SPARC data alignment: Sparc-Aligned-Data. (line 6) 19508 * SPARC floating point (IEEE): Sparc-Float. (line 6) 19509 * Sparc line comment character: Sparc-Chars. (line 6) 19510 * Sparc line separator: Sparc-Chars. (line 8) 19511 * SPARC machine directives: Sparc-Directives. (line 6) 19512 * SPARC options: Sparc-Opts. (line 6) 19513 * Sparc registers: Sparc-Regs. (line 6) 19514 * Sparc relocations: Sparc-Relocs. (line 6) 19515 * Sparc size translations: Sparc-Size-Translations. 19516 (line 6) 19517 * SPARC support: Sparc-Dependent. (line 6) 19518 * SPARC syntax: Sparc-Aligned-Data. (line 21) 19519 * special characters, ARC: ARC-Chars. (line 6) 19520 * special characters, M680x0: M68K-Chars. (line 6) 19521 * special purpose registers, MSP 430: MSP430-Regs. (line 11) 19522 * sslist directive, TIC54X: TIC54X-Directives. (line 204) 19523 * ssnolist directive, TIC54X: TIC54X-Directives. (line 204) 19524 * stabd directive: Stab. (line 38) 19525 * stabn directive: Stab. (line 48) 19526 * stabs directive: Stab. (line 51) 19527 * stabX directives: Stab. (line 6) 19528 * standard assembler sections: Secs Background. (line 27) 19529 * standard input, as input file: Command Line. (line 10) 19530 * statement separator character: Statements. (line 6) 19531 * statement separator, Alpha: Alpha-Chars. (line 8) 19532 * statement separator, ARM: ARM-Chars. (line 10) 19533 * statement separator, AVR: AVR-Chars. (line 10) 19534 * statement separator, H8/300: H8/300-Chars. (line 8) 19535 * statement separator, IA-64: IA-64-Chars. (line 8) 19536 * statement separator, SH: SH-Chars. (line 8) 19537 * statement separator, SH64: SH64-Chars. (line 8) 19538 * statement separator, Sparc: Sparc-Chars. (line 8) 19539 * statement separator, Z8000: Z8000-Chars. (line 8) 19540 * statements, structure of: Statements. (line 6) 19541 * statistics, about assembly: statistics. (line 6) 19542 * stopping the assembly: Abort. (line 6) 19543 * string constants: Strings. (line 6) 19544 * string directive: String. (line 8) 19545 * string directive on HPPA: HPPA Directives. (line 137) 19546 * string directive, TIC54X: TIC54X-Directives. (line 209) 19547 * string literals: Ascii. (line 6) 19548 * string, copying to object file: String. (line 8) 19549 * string16 directive: String. (line 8) 19550 * string16, copying to object file: String. (line 8) 19551 * string32 directive: String. (line 8) 19552 * string32, copying to object file: String. (line 8) 19553 * string64 directive: String. (line 8) 19554 * string64, copying to object file: String. (line 8) 19555 * string8 directive: String. (line 8) 19556 * string8, copying to object file: String. (line 8) 19557 * struct directive: Struct. (line 6) 19558 * struct directive, TIC54X: TIC54X-Directives. (line 217) 19559 * structure debugging, COFF: Tag. (line 6) 19560 * sub-instruction ordering, D10V: D10V-Chars. (line 6) 19561 * sub-instruction ordering, D30V: D30V-Chars. (line 6) 19562 * sub-instructions, D10V: D10V-Subs. (line 6) 19563 * sub-instructions, D30V: D30V-Subs. (line 6) 19564 * subexpressions: Arguments. (line 24) 19565 * subsection directive: SubSection. (line 6) 19566 * subsym builtins, TIC54X: TIC54X-Macros. (line 16) 19567 * subtitles for listings: Sbttl. (line 6) 19568 * subtraction, permitted arguments: Infix Ops. (line 49) 19569 * summary of options: Overview. (line 6) 19570 * support: HPPA-Dependent. (line 6) 19571 * supporting files, including: Include. (line 6) 19572 * suppressing warnings: W. (line 11) 19573 * sval: Z8000 Directives. (line 33) 19574 * symbol attributes: Symbol Attributes. (line 6) 19575 * symbol attributes, a.out: a.out Symbols. (line 6) 19576 * symbol attributes, COFF: COFF Symbols. (line 6) 19577 * symbol attributes, SOM: SOM Symbols. (line 6) 19578 * symbol descriptor, COFF: Desc. (line 6) 19579 * symbol modifiers <1>: M68HC11-Modifiers. (line 12) 19580 * symbol modifiers <2>: M32C-Modifiers. (line 11) 19581 * symbol modifiers: AVR-Modifiers. (line 12) 19582 * symbol names: Symbol Names. (line 6) 19583 * symbol names, $ in <1>: SH64-Chars. (line 10) 19584 * symbol names, $ in <2>: SH-Chars. (line 10) 19585 * symbol names, $ in <3>: D30V-Chars. (line 63) 19586 * symbol names, $ in: D10V-Chars. (line 46) 19587 * symbol names, local: Symbol Names. (line 22) 19588 * symbol names, temporary: Symbol Names. (line 35) 19589 * symbol storage class (COFF): Scl. (line 6) 19590 * symbol type: Symbol Type. (line 6) 19591 * symbol type, COFF: Type. (line 11) 19592 * symbol type, ELF: Type. (line 22) 19593 * symbol value: Symbol Value. (line 6) 19594 * symbol value, setting: Set. (line 6) 19595 * symbol values, assigning: Setting Symbols. (line 6) 19596 * symbol versioning: Symver. (line 6) 19597 * symbol, common: Comm. (line 6) 19598 * symbol, making visible to linker: Global. (line 6) 19599 * symbolic debuggers, information for: Stab. (line 6) 19600 * symbols: Symbols. (line 6) 19601 * Symbols in position-independent code, CRIS: CRIS-Pic. (line 6) 19602 * symbols with uppercase, VAX/VMS: VAX-Opts. (line 42) 19603 * symbols, assigning values to: Equ. (line 6) 19604 * Symbols, built-in, CRIS: CRIS-Symbols. (line 6) 19605 * Symbols, CRIS, built-in: CRIS-Symbols. (line 6) 19606 * symbols, local common: Lcomm. (line 6) 19607 * symver directive: Symver. (line 6) 19608 * syntax compatibility, i386: i386-Syntax. (line 6) 19609 * syntax compatibility, x86-64: i386-Syntax. (line 6) 19610 * syntax, AVR: AVR-Modifiers. (line 6) 19611 * syntax, BFIN: BFIN Syntax. (line 6) 19612 * syntax, D10V: D10V-Syntax. (line 6) 19613 * syntax, D30V: D30V-Syntax. (line 6) 19614 * syntax, M32C: M32C-Modifiers. (line 6) 19615 * syntax, M680x0: M68K-Syntax. (line 8) 19616 * syntax, M68HC11 <1>: M68HC11-Modifiers. (line 6) 19617 * syntax, M68HC11: M68HC11-Syntax. (line 6) 19618 * syntax, machine-independent: Syntax. (line 6) 19619 * syntax, SPARC: Sparc-Aligned-Data. (line 21) 19620 * syntax, Xtensa assembler: Xtensa Syntax. (line 6) 19621 * sysproc directive, i960: Directives-i960. (line 37) 19622 * tab (\t): Strings. (line 27) 19623 * tab directive, TIC54X: TIC54X-Directives. (line 248) 19624 * tag directive: Tag. (line 6) 19625 * tag directive, TIC54X: TIC54X-Directives. (line 217) 19626 * tdaoff pseudo-op, V850: V850 Opcodes. (line 81) 19627 * temporary symbol names: Symbol Names. (line 35) 19628 * text and data sections, joining: R. (line 6) 19629 * text directive: Text. (line 6) 19630 * text section: Ld Sections. (line 9) 19631 * tfloat directive, i386: i386-Float. (line 14) 19632 * tfloat directive, x86-64: i386-Float. (line 14) 19633 * thumb directive, ARM: ARM Directives. (line 57) 19634 * Thumb support: ARM-Dependent. (line 6) 19635 * thumb_func directive, ARM: ARM Directives. (line 67) 19636 * thumb_set directive, ARM: ARM Directives. (line 78) 19637 * TIC54X builtin math functions: TIC54X-Builtins. (line 6) 19638 * TIC54X machine directives: TIC54X-Directives. (line 6) 19639 * TIC54X memory-mapped registers: TIC54X-MMRegs. (line 6) 19640 * TIC54X options: TIC54X-Opts. (line 6) 19641 * TIC54X subsym builtins: TIC54X-Macros. (line 16) 19642 * TIC54X support: TIC54X-Dependent. (line 6) 19643 * TIC54X-specific macros: TIC54X-Macros. (line 6) 19644 * time, total for assembly: statistics. (line 6) 19645 * title directive: Title. (line 6) 19646 * tp register, V850: V850-Regs. (line 20) 19647 * transform directive: Transform Directive. (line 6) 19648 * trusted compiler: f. (line 6) 19649 * turning preprocessing on and off: Preprocessing. (line 27) 19650 * type directive (COFF version): Type. (line 11) 19651 * type directive (ELF version): Type. (line 22) 19652 * type of a symbol: Symbol Type. (line 6) 19653 * ualong directive, SH: SH Directives. (line 6) 19654 * uaword directive, SH: SH Directives. (line 6) 19655 * ubyte directive, TIC54X: TIC54X-Directives. (line 36) 19656 * uchar directive, TIC54X: TIC54X-Directives. (line 36) 19657 * uhalf directive, TIC54X: TIC54X-Directives. (line 111) 19658 * uint directive, TIC54X: TIC54X-Directives. (line 111) 19659 * uleb128 directive: Uleb128. (line 6) 19660 * ulong directive, TIC54X: TIC54X-Directives. (line 135) 19661 * undefined section: Ld Sections. (line 36) 19662 * union directive, TIC54X: TIC54X-Directives. (line 251) 19663 * unreq directive, ARM: ARM Directives. (line 18) 19664 * unsegm: Z8000 Directives. (line 14) 19665 * usect directive, TIC54X: TIC54X-Directives. (line 263) 19666 * ushort directive, TIC54X: TIC54X-Directives. (line 111) 19667 * uword directive, TIC54X: TIC54X-Directives. (line 111) 19668 * V850 command line options: V850 Options. (line 9) 19669 * V850 floating point (IEEE): V850 Floating Point. (line 6) 19670 * V850 line comment character: V850-Chars. (line 6) 19671 * V850 machine directives: V850 Directives. (line 6) 19672 * V850 opcodes: V850 Opcodes. (line 6) 19673 * V850 options (none): V850 Options. (line 6) 19674 * V850 register names: V850-Regs. (line 6) 19675 * V850 support: V850-Dependent. (line 6) 19676 * val directive: Val. (line 6) 19677 * value attribute, COFF: Val. (line 6) 19678 * value of a symbol: Symbol Value. (line 6) 19679 * var directive, TIC54X: TIC54X-Directives. (line 273) 19680 * VAX bitfields not supported: VAX-no. (line 6) 19681 * VAX branch improvement: VAX-branch. (line 6) 19682 * VAX command-line options ignored: VAX-Opts. (line 6) 19683 * VAX displacement sizing character: VAX-operands. (line 12) 19684 * VAX floating point: VAX-float. (line 6) 19685 * VAX immediate character: VAX-operands. (line 6) 19686 * VAX indirect character: VAX-operands. (line 9) 19687 * VAX machine directives: VAX-directives. (line 6) 19688 * VAX opcode mnemonics: VAX-opcodes. (line 6) 19689 * VAX operand notation: VAX-operands. (line 6) 19690 * VAX register names: VAX-operands. (line 17) 19691 * VAX support: Vax-Dependent. (line 6) 19692 * Vax-11 C compatibility: VAX-Opts. (line 42) 19693 * VAX/VMS options: VAX-Opts. (line 42) 19694 * version directive: Version. (line 6) 19695 * version directive, TIC54X: TIC54X-Directives. (line 277) 19696 * version of assembler: v. (line 6) 19697 * versions of symbols: Symver. (line 6) 19698 * visibility <1>: Protected. (line 6) 19699 * visibility <2>: Internal. (line 6) 19700 * visibility: Hidden. (line 6) 19701 * VMS (VAX) options: VAX-Opts. (line 42) 19702 * vtable_entry directive: VTableEntry. (line 6) 19703 * vtable_inherit directive: VTableInherit. (line 6) 19704 * warning directive: Warning. (line 6) 19705 * warning for altered difference tables: K. (line 6) 19706 * warning messages: Errors. (line 6) 19707 * warnings, causing error: W. (line 16) 19708 * warnings, M32R: M32R-Warnings. (line 6) 19709 * warnings, suppressing: W. (line 11) 19710 * warnings, switching on: W. (line 19) 19711 * weak directive: Weak. (line 6) 19712 * weakref directive: Weakref. (line 6) 19713 * whitespace: Whitespace. (line 6) 19714 * whitespace, removed by preprocessor: Preprocessing. (line 7) 19715 * wide floating point directives, VAX: VAX-directives. (line 10) 19716 * width directive, TIC54X: TIC54X-Directives. (line 127) 19717 * Width of continuation lines of disassembly output: listing. (line 21) 19718 * Width of first line disassembly output: listing. (line 16) 19719 * Width of source line output: listing. (line 28) 19720 * wmsg directive, TIC54X: TIC54X-Directives. (line 77) 19721 * word directive: Word. (line 6) 19722 * word directive, ARC: ARC Directives. (line 174) 19723 * word directive, H8/300: H8/300 Directives. (line 6) 19724 * word directive, i386: i386-Float. (line 21) 19725 * word directive, SPARC: Sparc-Directives. (line 51) 19726 * word directive, TIC54X: TIC54X-Directives. (line 111) 19727 * word directive, x86-64: i386-Float. (line 21) 19728 * writing patterns in memory: Fill. (line 6) 19729 * wval: Z8000 Directives. (line 24) 19730 * x86 machine directives: i386-Directives. (line 6) 19731 * x86-64 arch directive: i386-Arch. (line 6) 19732 * x86-64 att_syntax pseudo op: i386-Syntax. (line 6) 19733 * x86-64 conversion instructions: i386-Mnemonics. (line 32) 19734 * x86-64 floating point: i386-Float. (line 6) 19735 * x86-64 immediate operands: i386-Syntax. (line 15) 19736 * x86-64 instruction naming: i386-Mnemonics. (line 6) 19737 * x86-64 intel_syntax pseudo op: i386-Syntax. (line 6) 19738 * x86-64 jump optimization: i386-Jumps. (line 6) 19739 * x86-64 jump, call, return: i386-Syntax. (line 38) 19740 * x86-64 jump/call operands: i386-Syntax. (line 15) 19741 * x86-64 memory references: i386-Memory. (line 6) 19742 * x86-64 options: i386-Options. (line 6) 19743 * x86-64 register operands: i386-Syntax. (line 15) 19744 * x86-64 registers: i386-Regs. (line 6) 19745 * x86-64 sections: i386-Syntax. (line 44) 19746 * x86-64 size suffixes: i386-Syntax. (line 29) 19747 * x86-64 source, destination operands: i386-Syntax. (line 22) 19748 * x86-64 support: i386-Dependent. (line 6) 19749 * x86-64 syntax compatibility: i386-Syntax. (line 6) 19750 * xfloat directive, TIC54X: TIC54X-Directives. (line 64) 19751 * xlong directive, TIC54X: TIC54X-Directives. (line 135) 19752 * Xtensa architecture: Xtensa-Dependent. (line 6) 19753 * Xtensa assembler syntax: Xtensa Syntax. (line 6) 19754 * Xtensa directives: Xtensa Directives. (line 6) 19755 * Xtensa opcode names: Xtensa Opcodes. (line 6) 19756 * Xtensa register names: Xtensa Registers. (line 6) 19757 * xword directive, SPARC: Sparc-Directives. (line 55) 19758 * Z80 $: Z80-Chars. (line 8) 19759 * Z80 ': Z80-Chars. (line 13) 19760 * Z80 floating point: Z80 Floating Point. (line 6) 19761 * Z80 line comment character: Z80-Chars. (line 6) 19762 * Z80 options: Z80 Options. (line 6) 19763 * Z80 registers: Z80-Regs. (line 6) 19764 * Z80 support: Z80-Dependent. (line 6) 19765 * Z80 Syntax: Z80 Options. (line 47) 19766 * Z80, \: Z80-Chars. (line 11) 19767 * Z80, case sensitivity: Z80-Case. (line 6) 19768 * Z80-only directives: Z80 Directives. (line 9) 19769 * Z800 addressing modes: Z8000-Addressing. (line 6) 19770 * Z8000 directives: Z8000 Directives. (line 6) 19771 * Z8000 line comment character: Z8000-Chars. (line 6) 19772 * Z8000 line separator: Z8000-Chars. (line 8) 19773 * Z8000 opcode summary: Z8000 Opcodes. (line 6) 19774 * Z8000 options: Z8000 Options. (line 6) 19775 * Z8000 registers: Z8000-Regs. (line 6) 19776 * Z8000 support: Z8000-Dependent. (line 6) 19777 * zdaoff pseudo-op, V850: V850 Opcodes. (line 99) 19778 * zero register, V850: V850-Regs. (line 7) 19779 * zero-terminated strings: Asciz. (line 6) 19780 19781 19782 19783 Tag Table: 19784 Node: Top845 19785 Node: Overview1831 19786 Node: Manual29722 19787 Node: GNU Assembler30666 19788 Node: Object Formats31837 19789 Node: Command Line32289 19790 Node: Input Files33376 19791 Node: Object35357 19792 Node: Errors36253 19793 Node: Invoking37448 19794 Node: a39403 19795 Node: alternate41314 19796 Node: D41486 19797 Node: f41719 19798 Node: I42227 19799 Node: K42771 19800 Node: L43075 19801 Node: listing43814 19802 Node: M45473 19803 Node: MD49874 19804 Node: o50300 19805 Node: R50755 19806 Node: statistics51785 19807 Node: traditional-format52192 19808 Node: v52665 19809 Node: W52940 19810 Node: Z53847 19811 Node: Syntax54369 19812 Node: Preprocessing54960 19813 Node: Whitespace56523 19814 Node: Comments56919 19815 Node: Symbol Intro59072 19816 Node: Statements59762 19817 Node: Constants61683 19818 Node: Characters62314 19819 Node: Strings62816 19820 Node: Chars64982 19821 Node: Numbers65736 19822 Node: Integers66276 19823 Node: Bignums66932 19824 Node: Flonums67288 19825 Node: Sections69035 19826 Node: Secs Background69413 19827 Node: Ld Sections74452 19828 Node: As Sections76836 19829 Node: Sub-Sections77746 19830 Node: bss80891 19831 Node: Symbols81841 19832 Node: Labels82489 19833 Node: Setting Symbols83220 19834 Node: Symbol Names83716 19835 Node: Dot88779 19836 Node: Symbol Attributes89226 19837 Node: Symbol Value89963 19838 Node: Symbol Type91008 19839 Node: a.out Symbols91396 19840 Node: Symbol Desc91658 19841 Node: Symbol Other91953 19842 Node: COFF Symbols92122 19843 Node: SOM Symbols92795 19844 Node: Expressions93237 19845 Node: Empty Exprs93986 19846 Node: Integer Exprs94333 19847 Node: Arguments94728 19848 Node: Operators95834 19849 Node: Prefix Ops96169 19850 Node: Infix Ops96497 19851 Node: Pseudo Ops98887 19852 Node: Abort104293 19853 Node: ABORT (COFF)104705 19854 Node: Align104913 19855 Node: Ascii107195 19856 Node: Asciz107504 19857 Node: Balign107749 19858 Node: Byte109612 19859 Node: Comm109850 19860 Node: CFI directives111224 19861 Node: LNS directives116419 19862 Node: Data118494 19863 Node: Def118821 19864 Node: Desc119053 19865 Node: Dim119553 19866 Node: Double119810 19867 Node: Eject120148 19868 Node: Else120323 19869 Node: Elseif120623 19870 Node: End120917 19871 Node: Endef121132 19872 Node: Endfunc121309 19873 Node: Endif121484 19874 Node: Equ121745 19875 Node: Equiv122259 19876 Node: Eqv122815 19877 Node: Err123179 19878 Node: Error123490 19879 Node: Exitm123935 19880 Node: Extern124104 19881 Node: Fail124365 19882 Node: File124810 19883 Node: Fill125287 19884 Node: Float126251 19885 Node: Func126593 19886 Node: Global127183 19887 Node: Gnu_attribute127940 19888 Node: Hidden128165 19889 Node: hword128751 19890 Node: Ident129079 19891 Node: If129653 19892 Node: Incbin132712 19893 Node: Include133407 19894 Node: Int133958 19895 Node: Internal134339 19896 Node: Irp134987 19897 Node: Irpc135866 19898 Node: Lcomm136783 19899 Node: Lflags137531 19900 Node: Line137725 19901 Node: Linkonce138644 19902 Node: Ln139873 19903 Node: MRI140034 19904 Node: List140372 19905 Node: Long140980 19906 Node: Macro141167 19907 Node: Altmacro147089 19908 Node: Noaltmacro148420 19909 Node: Nolist148589 19910 Node: Octa149019 19911 Node: Org149353 19912 Node: P2align150636 19913 Node: Previous152564 19914 Node: PopSection153977 19915 Node: Print154485 19916 Node: Protected154714 19917 Node: Psize155361 19918 Node: Purgem156045 19919 Node: PushSection156266 19920 Node: Quad157009 19921 Node: Reloc157465 19922 Node: Rept158226 19923 Node: Sbttl158640 19924 Node: Scl159005 19925 Node: Section159346 19926 Node: Set164483 19927 Node: Short165120 19928 Node: Single165441 19929 Node: Size165786 19930 Node: Sleb128166458 19931 Node: Skip166782 19932 Node: Space167106 19933 Node: Stab167747 19934 Node: String169751 19935 Node: Struct170745 19936 Node: SubSection171470 19937 Node: Symver172033 19938 Node: Tag174426 19939 Node: Text174808 19940 Node: Title175129 19941 Node: Type175510 19942 Node: Uleb128177233 19943 Node: Val177557 19944 Node: Version177807 19945 Node: VTableEntry178082 19946 Node: VTableInherit178372 19947 Node: Warning178822 19948 Node: Weak179056 19949 Node: Weakref179725 19950 Node: Word180690 19951 Node: Deprecated182536 19952 Node: Object Attributes182771 19953 Node: GNU Object Attributes184491 19954 Node: Defining New Object Attributes187044 19955 Node: Machine Dependencies187841 19956 Node: Alpha-Dependent190725 19957 Node: Alpha Notes191139 19958 Node: Alpha Options191420 19959 Node: Alpha Syntax193618 19960 Node: Alpha-Chars194087 19961 Node: Alpha-Regs194318 19962 Node: Alpha-Relocs194705 19963 Node: Alpha Floating Point200963 19964 Node: Alpha Directives201185 19965 Node: Alpha Opcodes206708 19966 Node: ARC-Dependent207003 19967 Node: ARC Options207386 19968 Node: ARC Syntax208455 19969 Node: ARC-Chars208687 19970 Node: ARC-Regs208819 19971 Node: ARC Floating Point208943 19972 Node: ARC Directives209254 19973 Node: ARC Opcodes215226 19974 Node: ARM-Dependent215452 19975 Node: ARM Options215917 19976 Node: ARM Syntax222050 19977 Node: ARM-Chars222319 19978 Node: ARM-Regs222843 19979 Node: ARM Floating Point223052 19980 Node: ARM-Relocations223251 19981 Node: ARM Directives224216 19982 Ref: arm_fnstart228231 19983 Ref: arm_fnend228306 19984 Ref: arm_save229323 19985 Ref: arm_pad230653 19986 Ref: arm_movsp230859 19987 Ref: arm_setfp231037 19988 Node: ARM Opcodes232588 19989 Node: ARM Mapping Symbols234676 19990 Node: ARM Unwinding Tutorial235486 19991 Node: AVR-Dependent241688 19992 Node: AVR Options241974 19993 Node: AVR Syntax244805 19994 Node: AVR-Chars245092 19995 Node: AVR-Regs245498 19996 Node: AVR-Modifiers246077 19997 Node: AVR Opcodes248137 19998 Node: BFIN-Dependent253383 19999 Node: BFIN Syntax253637 20000 Node: BFIN Directives259333 20001 Node: CR16-Dependent259740 20002 Node: CR16 Operand Qualifiers259984 20003 Node: CRIS-Dependent261750 20004 Node: CRIS-Opts262096 20005 Ref: march-option263714 20006 Node: CRIS-Expand265531 20007 Node: CRIS-Symbols266714 20008 Node: CRIS-Syntax267883 20009 Node: CRIS-Chars268219 20010 Node: CRIS-Pic268770 20011 Ref: crispic268966 20012 Node: CRIS-Regs272506 20013 Node: CRIS-Pseudos272923 20014 Ref: crisnous273699 20015 Node: D10V-Dependent274981 20016 Node: D10V-Opts275332 20017 Node: D10V-Syntax276295 20018 Node: D10V-Size276824 20019 Node: D10V-Subs277797 20020 Node: D10V-Chars278832 20021 Node: D10V-Regs280436 20022 Node: D10V-Addressing281481 20023 Node: D10V-Word282167 20024 Node: D10V-Float282682 20025 Node: D10V-Opcodes282993 20026 Node: D30V-Dependent283386 20027 Node: D30V-Opts283739 20028 Node: D30V-Syntax284414 20029 Node: D30V-Size284946 20030 Node: D30V-Subs285917 20031 Node: D30V-Chars286952 20032 Node: D30V-Guarded289250 20033 Node: D30V-Regs289930 20034 Node: D30V-Addressing291069 20035 Node: D30V-Float291737 20036 Node: D30V-Opcodes292048 20037 Node: H8/300-Dependent292441 20038 Node: H8/300 Options292853 20039 Node: H8/300 Syntax293120 20040 Node: H8/300-Chars293421 20041 Node: H8/300-Regs293720 20042 Node: H8/300-Addressing294639 20043 Node: H8/300 Floating Point295680 20044 Node: H8/300 Directives296007 20045 Node: H8/300 Opcodes297135 20046 Node: HPPA-Dependent305457 20047 Node: HPPA Notes305892 20048 Node: HPPA Options306650 20049 Node: HPPA Syntax306845 20050 Node: HPPA Floating Point308115 20051 Node: HPPA Directives308321 20052 Node: HPPA Opcodes317007 20053 Node: ESA/390-Dependent317266 20054 Node: ESA/390 Notes317726 20055 Node: ESA/390 Options318517 20056 Node: ESA/390 Syntax318727 20057 Node: ESA/390 Floating Point320900 20058 Node: ESA/390 Directives321179 20059 Node: ESA/390 Opcodes324468 20060 Node: i386-Dependent324730 20061 Node: i386-Options325854 20062 Node: i386-Directives329556 20063 Node: i386-Syntax330294 20064 Node: i386-Mnemonics332727 20065 Node: i386-Regs335795 20066 Node: i386-Prefixes337840 20067 Node: i386-Memory340600 20068 Node: i386-Jumps343537 20069 Node: i386-Float344658 20070 Node: i386-SIMD346489 20071 Node: i386-16bit347600 20072 Node: i386-Bugs349640 20073 Node: i386-Arch350394 20074 Node: i386-Notes352899 20075 Node: i860-Dependent353757 20076 Node: Notes-i860354153 20077 Node: Options-i860355058 20078 Node: Directives-i860356421 20079 Node: Opcodes for i860357490 20080 Node: i960-Dependent359657 20081 Node: Options-i960360060 20082 Node: Floating Point-i960363945 20083 Node: Directives-i960364213 20084 Node: Opcodes for i960366247 20085 Node: callj-i960366864 20086 Node: Compare-and-branch-i960367353 20087 Node: IA-64-Dependent369257 20088 Node: IA-64 Options369558 20089 Node: IA-64 Syntax372718 20090 Node: IA-64-Chars373081 20091 Node: IA-64-Regs373311 20092 Node: IA-64-Bits374237 20093 Node: IA-64 Opcodes374746 20094 Node: IP2K-Dependent375018 20095 Node: IP2K-Opts375246 20096 Node: M32C-Dependent375726 20097 Node: M32C-Opts376250 20098 Node: M32C-Modifiers376673 20099 Node: M32R-Dependent378460 20100 Node: M32R-Opts378781 20101 Node: M32R-Directives382948 20102 Node: M32R-Warnings386923 20103 Node: M68K-Dependent389929 20104 Node: M68K-Opts390396 20105 Node: M68K-Syntax397788 20106 Node: M68K-Moto-Syntax399628 20107 Node: M68K-Float402218 20108 Node: M68K-Directives402738 20109 Node: M68K-opcodes404066 20110 Node: M68K-Branch404292 20111 Node: M68K-Chars408490 20112 Node: M68HC11-Dependent408903 20113 Node: M68HC11-Opts409434 20114 Node: M68HC11-Syntax413255 20115 Node: M68HC11-Modifiers415469 20116 Node: M68HC11-Directives417297 20117 Node: M68HC11-Float418673 20118 Node: M68HC11-opcodes419201 20119 Node: M68HC11-Branch419383 20120 Node: MIPS-Dependent421832 20121 Node: MIPS Opts422992 20122 Node: MIPS Object432578 20123 Node: MIPS Stabs434144 20124 Node: MIPS symbol sizes434866 20125 Node: MIPS ISA436535 20126 Node: MIPS autoextend438009 20127 Node: MIPS insn438739 20128 Node: MIPS option stack439236 20129 Node: MIPS ASE instruction generation overrides440010 20130 Node: MIPS floating-point441824 20131 Node: MMIX-Dependent442710 20132 Node: MMIX-Opts443090 20133 Node: MMIX-Expand446694 20134 Node: MMIX-Syntax448009 20135 Ref: mmixsite448366 20136 Node: MMIX-Chars449207 20137 Node: MMIX-Symbols449861 20138 Node: MMIX-Regs451929 20139 Node: MMIX-Pseudos452954 20140 Ref: MMIX-loc453095 20141 Ref: MMIX-local454175 20142 Ref: MMIX-is454707 20143 Ref: MMIX-greg454978 20144 Ref: GREG-base455897 20145 Ref: MMIX-byte457214 20146 Ref: MMIX-constants457685 20147 Ref: MMIX-prefix458331 20148 Ref: MMIX-spec458705 20149 Node: MMIX-mmixal459039 20150 Node: MSP430-Dependent462537 20151 Node: MSP430 Options463003 20152 Node: MSP430 Syntax463289 20153 Node: MSP430-Macros463605 20154 Node: MSP430-Chars464336 20155 Node: MSP430-Regs464649 20156 Node: MSP430-Ext465209 20157 Node: MSP430 Floating Point467030 20158 Node: MSP430 Directives467254 20159 Node: MSP430 Opcodes468045 20160 Node: MSP430 Profiling Capability468440 20161 Node: PDP-11-Dependent470769 20162 Node: PDP-11-Options471158 20163 Node: PDP-11-Pseudos476229 20164 Node: PDP-11-Syntax476574 20165 Node: PDP-11-Mnemonics477326 20166 Node: PDP-11-Synthetic477628 20167 Node: PJ-Dependent477846 20168 Node: PJ Options478071 20169 Node: PPC-Dependent478348 20170 Node: PowerPC-Opts478635 20171 Node: PowerPC-Pseudo481154 20172 Node: SH-Dependent481753 20173 Node: SH Options482165 20174 Node: SH Syntax483173 20175 Node: SH-Chars483446 20176 Node: SH-Regs483740 20177 Node: SH-Addressing484354 20178 Node: SH Floating Point485263 20179 Node: SH Directives486357 20180 Node: SH Opcodes486727 20181 Node: SH64-Dependent491049 20182 Node: SH64 Options491412 20183 Node: SH64 Syntax493209 20184 Node: SH64-Chars493492 20185 Node: SH64-Regs493792 20186 Node: SH64-Addressing494888 20187 Node: SH64 Directives496071 20188 Node: SH64 Opcodes497181 20189 Node: Sparc-Dependent497897 20190 Node: Sparc-Opts498307 20191 Node: Sparc-Aligned-Data500564 20192 Node: Sparc-Syntax501396 20193 Node: Sparc-Chars501970 20194 Node: Sparc-Regs502203 20195 Node: Sparc-Constants507314 20196 Node: Sparc-Relocs512074 20197 Node: Sparc-Size-Translations516754 20198 Node: Sparc-Float518403 20199 Node: Sparc-Directives518598 20200 Node: TIC54X-Dependent520558 20201 Node: TIC54X-Opts521284 20202 Node: TIC54X-Block522327 20203 Node: TIC54X-Env522687 20204 Node: TIC54X-Constants523035 20205 Node: TIC54X-Subsyms523437 20206 Node: TIC54X-Locals525346 20207 Node: TIC54X-Builtins526090 20208 Node: TIC54X-Ext528561 20209 Node: TIC54X-Directives529132 20210 Node: TIC54X-Macros540034 20211 Node: TIC54X-MMRegs542145 20212 Node: Z80-Dependent542361 20213 Node: Z80 Options542749 20214 Node: Z80 Syntax544172 20215 Node: Z80-Chars544844 20216 Node: Z80-Regs545378 20217 Node: Z80-Case545730 20218 Node: Z80 Floating Point546175 20219 Node: Z80 Directives546369 20220 Node: Z80 Opcodes547994 20221 Node: Z8000-Dependent549338 20222 Node: Z8000 Options550299 20223 Node: Z8000 Syntax550516 20224 Node: Z8000-Chars550806 20225 Node: Z8000-Regs551039 20226 Node: Z8000-Addressing551829 20227 Node: Z8000 Directives552946 20228 Node: Z8000 Opcodes554555 20229 Node: Vax-Dependent564497 20230 Node: VAX-Opts565014 20231 Node: VAX-float568749 20232 Node: VAX-directives569381 20233 Node: VAX-opcodes570242 20234 Node: VAX-branch570631 20235 Node: VAX-operands573138 20236 Node: VAX-no573901 20237 Node: V850-Dependent574138 20238 Node: V850 Options574536 20239 Node: V850 Syntax576925 20240 Node: V850-Chars577165 20241 Node: V850-Regs577330 20242 Node: V850 Floating Point578898 20243 Node: V850 Directives579104 20244 Node: V850 Opcodes580247 20245 Node: Xtensa-Dependent586139 20246 Node: Xtensa Options586868 20247 Node: Xtensa Syntax589678 20248 Node: Xtensa Opcodes591567 20249 Node: Xtensa Registers593361 20250 Node: Xtensa Optimizations593994 20251 Node: Density Instructions594446 20252 Node: Xtensa Automatic Alignment595548 20253 Node: Xtensa Relaxation597995 20254 Node: Xtensa Branch Relaxation598903 20255 Node: Xtensa Call Relaxation600275 20256 Node: Xtensa Immediate Relaxation602061 20257 Node: Xtensa Directives604635 20258 Node: Schedule Directive606344 20259 Node: Longcalls Directive606684 20260 Node: Transform Directive607228 20261 Node: Literal Directive607970 20262 Ref: Literal Directive-Footnote-1611509 20263 Node: Literal Position Directive611651 20264 Node: Literal Prefix Directive613350 20265 Node: Absolute Literals Directive614248 20266 Node: Reporting Bugs615555 20267 Node: Bug Criteria616281 20268 Node: Bug Reporting617048 20269 Node: Acknowledgements623697 20270 Ref: Acknowledgements-Footnote-1628595 20271 Node: GNU Free Documentation License628621 20272 Node: AS Index648351 20273 20274 End Tag Table 20275