1 This is as.info, produced by makeinfo version 4.11 from /home/jingyu/projects/gcc/android-toolchainsrc/build/../binutils/binutils-2.19/gas/doc/as.texinfo. 2 3 START-INFO-DIR-ENTRY 4 * As: (as). The GNU assembler. 5 * Gas: (as). The GNU assembler. 6 END-INFO-DIR-ENTRY 7 8 This file documents the GNU Assembler "as". 9 10 Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002, 11 2006, 2007 Free Software Foundation, Inc. 12 13 Permission is granted to copy, distribute and/or modify this document 14 under the terms of the GNU Free Documentation License, Version 1.1 or 15 any later version published by the Free Software Foundation; with no 16 Invariant Sections, with no Front-Cover Texts, and with no Back-Cover 17 Texts. A copy of the license is included in the section entitled "GNU 18 Free Documentation License". 19 20 21 File: as.info, Node: Top, Next: Overview, Up: (dir) 22 23 Using as 24 ******** 25 26 This file is a user guide to the GNU assembler `as' (GNU Binutils) 27 version 2.19. 28 29 This document is distributed under the terms of the GNU Free 30 Documentation License. A copy of the license is included in the 31 section entitled "GNU Free Documentation License". 32 33 * Menu: 34 35 * Overview:: Overview 36 * Invoking:: Command-Line Options 37 * Syntax:: Syntax 38 * Sections:: Sections and Relocation 39 * Symbols:: Symbols 40 * Expressions:: Expressions 41 * Pseudo Ops:: Assembler Directives 42 43 * Object Attributes:: Object Attributes 44 * Machine Dependencies:: Machine Dependent Features 45 * Reporting Bugs:: Reporting Bugs 46 * Acknowledgements:: Who Did What 47 * GNU Free Documentation License:: GNU Free Documentation License 48 * AS Index:: AS Index 49 50 51 File: as.info, Node: Overview, Next: Invoking, Prev: Top, Up: Top 52 53 1 Overview 54 ********** 55 56 Here is a brief summary of how to invoke `as'. For details, see *note 57 Command-Line Options: Invoking. 58 59 as [-a[cdghlns][=FILE]] [-alternate] [-D] 60 [-debug-prefix-map OLD=NEW] 61 [-defsym SYM=VAL] [-f] [-g] [-gstabs] 62 [-gstabs+] [-gdwarf-2] [-help] [-I DIR] [-J] 63 [-K] [-L] [-listing-lhs-width=NUM] 64 [-listing-lhs-width2=NUM] [-listing-rhs-width=NUM] 65 [-listing-cont-lines=NUM] [-keep-locals] [-o 66 OBJFILE] [-R] [-reduce-memory-overheads] [-statistics] 67 [-v] [-version] [-version] [-W] [-warn] 68 [-fatal-warnings] [-w] [-x] [-Z] [@FILE] 69 [-target-help] [TARGET-OPTIONS] 70 [-|FILES ...] 71 72 _Target Alpha options:_ 73 [-mCPU] 74 [-mdebug | -no-mdebug] 75 [-relax] [-g] [-GSIZE] 76 [-F] [-32addr] 77 78 _Target ARC options:_ 79 [-marc[5|6|7|8]] 80 [-EB|-EL] 81 82 _Target ARM options:_ 83 [-mcpu=PROCESSOR[+EXTENSION...]] 84 [-march=ARCHITECTURE[+EXTENSION...]] 85 [-mfpu=FLOATING-POINT-FORMAT] 86 [-mfloat-abi=ABI] 87 [-meabi=VER] 88 [-mthumb] 89 [-EB|-EL] 90 [-mapcs-32|-mapcs-26|-mapcs-float| 91 -mapcs-reentrant] 92 [-mthumb-interwork] [-k] 93 94 _Target CRIS options:_ 95 [-underscore | -no-underscore] 96 [-pic] [-N] 97 [-emulation=criself | -emulation=crisaout] 98 [-march=v0_v10 | -march=v10 | -march=v32 | -march=common_v10_v32] 99 100 _Target D10V options:_ 101 [-O] 102 103 _Target D30V options:_ 104 [-O|-n|-N] 105 106 _Target H8/300 options:_ 107 [-h-tick-hex] 108 109 _Target i386 options:_ 110 [-32|-64] [-n] 111 [-march=CPU[+EXTENSION...]] [-mtune=CPU] 112 113 _Target i960 options:_ 114 [-ACA|-ACA_A|-ACB|-ACC|-AKA|-AKB| 115 -AKC|-AMC] 116 [-b] [-no-relax] 117 118 _Target IA-64 options:_ 119 [-mconstant-gp|-mauto-pic] 120 [-milp32|-milp64|-mlp64|-mp64] 121 [-mle|mbe] 122 [-mtune=itanium1|-mtune=itanium2] 123 [-munwind-check=warning|-munwind-check=error] 124 [-mhint.b=ok|-mhint.b=warning|-mhint.b=error] 125 [-x|-xexplicit] [-xauto] [-xdebug] 126 127 _Target IP2K options:_ 128 [-mip2022|-mip2022ext] 129 130 _Target M32C options:_ 131 [-m32c|-m16c] [-relax] [-h-tick-hex] 132 133 _Target M32R options:_ 134 [-m32rx|-[no-]warn-explicit-parallel-conflicts| 135 -W[n]p] 136 137 _Target M680X0 options:_ 138 [-l] [-m68000|-m68010|-m68020|...] 139 140 _Target M68HC11 options:_ 141 [-m68hc11|-m68hc12|-m68hcs12] 142 [-mshort|-mlong] 143 [-mshort-double|-mlong-double] 144 [-force-long-branches] [-short-branches] 145 [-strict-direct-mode] [-print-insn-syntax] 146 [-print-opcodes] [-generate-example] 147 148 _Target MCORE options:_ 149 [-jsri2bsr] [-sifilter] [-relax] 150 [-mcpu=[210|340]] 151 152 _Target MIPS options:_ 153 [-nocpp] [-EL] [-EB] [-O[OPTIMIZATION LEVEL]] 154 [-g[DEBUG LEVEL]] [-G NUM] [-KPIC] [-call_shared] 155 [-non_shared] [-xgot [-mvxworks-pic] 156 [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32] 157 [-march=CPU] [-mtune=CPU] [-mips1] [-mips2] 158 [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2] 159 [-mips64] [-mips64r2] 160 [-construct-floats] [-no-construct-floats] 161 [-trap] [-no-break] [-break] [-no-trap] 162 [-mfix7000] [-mno-fix7000] 163 [-mips16] [-no-mips16] 164 [-msmartmips] [-mno-smartmips] 165 [-mips3d] [-no-mips3d] 166 [-mdmx] [-no-mdmx] 167 [-mdsp] [-mno-dsp] 168 [-mdspr2] [-mno-dspr2] 169 [-mmt] [-mno-mt] 170 [-mdebug] [-no-mdebug] 171 [-mpdr] [-mno-pdr] 172 173 _Target MMIX options:_ 174 [-fixed-special-register-names] [-globalize-symbols] 175 [-gnu-syntax] [-relax] [-no-predefined-symbols] 176 [-no-expand] [-no-merge-gregs] [-x] 177 [-linker-allocated-gregs] 178 179 _Target PDP11 options:_ 180 [-mpic|-mno-pic] [-mall] [-mno-extensions] 181 [-mEXTENSION|-mno-EXTENSION] 182 [-mCPU] [-mMACHINE] 183 184 _Target picoJava options:_ 185 [-mb|-me] 186 187 _Target PowerPC options:_ 188 [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604| 189 -m403|-m405|-mppc64|-m620|-mppc64bridge|-mbooke| 190 -mbooke32|-mbooke64] 191 [-mcom|-many|-maltivec|-mvsx] [-memb] 192 [-mregnames|-mno-regnames] 193 [-mrelocatable|-mrelocatable-lib] 194 [-mlittle|-mlittle-endian|-mbig|-mbig-endian] 195 [-msolaris|-mno-solaris] 196 197 _Target SPARC options:_ 198 [-Av6|-Av7|-Av8|-Asparclet|-Asparclite 199 -Av8plus|-Av8plusa|-Av9|-Av9a] 200 [-xarch=v8plus|-xarch=v8plusa] [-bump] 201 [-32|-64] 202 203 _Target TIC54X options:_ 204 [-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf] 205 [-merrors-to-file <FILENAME>|-me <FILENAME>] 206 207 208 _Target Z80 options:_ 209 [-z80] [-r800] 210 [ -ignore-undocumented-instructions] [-Wnud] 211 [ -ignore-unportable-instructions] [-Wnup] 212 [ -warn-undocumented-instructions] [-Wud] 213 [ -warn-unportable-instructions] [-Wup] 214 [ -forbid-undocumented-instructions] [-Fud] 215 [ -forbid-unportable-instructions] [-Fup] 216 217 218 _Target Xtensa options:_ 219 [-[no-]text-section-literals] [-[no-]absolute-literals] 220 [-[no-]target-align] [-[no-]longcalls] 221 [-[no-]transform] 222 [-rename-section OLDNAME=NEWNAME] 223 224 `@FILE' 225 Read command-line options from FILE. The options read are 226 inserted in place of the original @FILE option. If FILE does not 227 exist, or cannot be read, then the option will be treated 228 literally, and not removed. 229 230 Options in FILE are separated by whitespace. A whitespace 231 character may be included in an option by surrounding the entire 232 option in either single or double quotes. Any character 233 (including a backslash) may be included by prefixing the character 234 to be included with a backslash. The FILE may itself contain 235 additional @FILE options; any such options will be processed 236 recursively. 237 238 `-a[cdghlmns]' 239 Turn on listings, in any of a variety of ways: 240 241 `-ac' 242 omit false conditionals 243 244 `-ad' 245 omit debugging directives 246 247 `-ag' 248 include general information, like as version and options 249 passed 250 251 `-ah' 252 include high-level source 253 254 `-al' 255 include assembly 256 257 `-am' 258 include macro expansions 259 260 `-an' 261 omit forms processing 262 263 `-as' 264 include symbols 265 266 `=file' 267 set the name of the listing file 268 269 You may combine these options; for example, use `-aln' for assembly 270 listing without forms processing. The `=file' option, if used, 271 must be the last one. By itself, `-a' defaults to `-ahls'. 272 273 `--alternate' 274 Begin in alternate macro mode. *Note `.altmacro': Altmacro. 275 276 `-D' 277 Ignored. This option is accepted for script compatibility with 278 calls to other assemblers. 279 280 `--debug-prefix-map OLD=NEW' 281 When assembling files in directory `OLD', record debugging 282 information describing them as in `NEW' instead. 283 284 `--defsym SYM=VALUE' 285 Define the symbol SYM to be VALUE before assembling the input file. 286 VALUE must be an integer constant. As in C, a leading `0x' 287 indicates a hexadecimal value, and a leading `0' indicates an octal 288 value. The value of the symbol can be overridden inside a source 289 file via the use of a `.set' pseudo-op. 290 291 `-f' 292 "fast"--skip whitespace and comment preprocessing (assume source is 293 compiler output). 294 295 `-g' 296 `--gen-debug' 297 Generate debugging information for each assembler source line 298 using whichever debug format is preferred by the target. This 299 currently means either STABS, ECOFF or DWARF2. 300 301 `--gstabs' 302 Generate stabs debugging information for each assembler line. This 303 may help debugging assembler code, if the debugger can handle it. 304 305 `--gstabs+' 306 Generate stabs debugging information for each assembler line, with 307 GNU extensions that probably only gdb can handle, and that could 308 make other debuggers crash or refuse to read your program. This 309 may help debugging assembler code. Currently the only GNU 310 extension is the location of the current working directory at 311 assembling time. 312 313 `--gdwarf-2' 314 Generate DWARF2 debugging information for each assembler line. 315 This may help debugging assembler code, if the debugger can handle 316 it. Note--this option is only supported by some targets, not all 317 of them. 318 319 `--help' 320 Print a summary of the command line options and exit. 321 322 `--target-help' 323 Print a summary of all target specific options and exit. 324 325 `-I DIR' 326 Add directory DIR to the search list for `.include' directives. 327 328 `-J' 329 Don't warn about signed overflow. 330 331 `-K' 332 Issue warnings when difference tables altered for long 333 displacements. 334 335 `-L' 336 `--keep-locals' 337 Keep (in the symbol table) local symbols. These symbols start with 338 system-specific local label prefixes, typically `.L' for ELF 339 systems or `L' for traditional a.out systems. *Note Symbol 340 Names::. 341 342 `--listing-lhs-width=NUMBER' 343 Set the maximum width, in words, of the output data column for an 344 assembler listing to NUMBER. 345 346 `--listing-lhs-width2=NUMBER' 347 Set the maximum width, in words, of the output data column for 348 continuation lines in an assembler listing to NUMBER. 349 350 `--listing-rhs-width=NUMBER' 351 Set the maximum width of an input source line, as displayed in a 352 listing, to NUMBER bytes. 353 354 `--listing-cont-lines=NUMBER' 355 Set the maximum number of lines printed in a listing for a single 356 line of input to NUMBER + 1. 357 358 `-o OBJFILE' 359 Name the object-file output from `as' OBJFILE. 360 361 `-R' 362 Fold the data section into the text section. 363 364 Set the default size of GAS's hash tables to a prime number close 365 to NUMBER. Increasing this value can reduce the length of time it 366 takes the assembler to perform its tasks, at the expense of 367 increasing the assembler's memory requirements. Similarly 368 reducing this value can reduce the memory requirements at the 369 expense of speed. 370 371 `--reduce-memory-overheads' 372 This option reduces GAS's memory requirements, at the expense of 373 making the assembly processes slower. Currently this switch is a 374 synonym for `--hash-size=4051', but in the future it may have 375 other effects as well. 376 377 `--statistics' 378 Print the maximum space (in bytes) and total time (in seconds) 379 used by assembly. 380 381 `--strip-local-absolute' 382 Remove local absolute symbols from the outgoing symbol table. 383 384 `-v' 385 `-version' 386 Print the `as' version. 387 388 `--version' 389 Print the `as' version and exit. 390 391 `-W' 392 `--no-warn' 393 Suppress warning messages. 394 395 `--fatal-warnings' 396 Treat warnings as errors. 397 398 `--warn' 399 Don't suppress warning messages or treat them as errors. 400 401 `-w' 402 Ignored. 403 404 `-x' 405 Ignored. 406 407 `-Z' 408 Generate an object file even after errors. 409 410 `-- | FILES ...' 411 Standard input, or source files to assemble. 412 413 414 The following options are available when as is configured for an ARC 415 processor. 416 417 `-marc[5|6|7|8]' 418 This option selects the core processor variant. 419 420 `-EB | -EL' 421 Select either big-endian (-EB) or little-endian (-EL) output. 422 423 The following options are available when as is configured for the ARM 424 processor family. 425 426 `-mcpu=PROCESSOR[+EXTENSION...]' 427 Specify which ARM processor variant is the target. 428 429 `-march=ARCHITECTURE[+EXTENSION...]' 430 Specify which ARM architecture variant is used by the target. 431 432 `-mfpu=FLOATING-POINT-FORMAT' 433 Select which Floating Point architecture is the target. 434 435 `-mfloat-abi=ABI' 436 Select which floating point ABI is in use. 437 438 `-mthumb' 439 Enable Thumb only instruction decoding. 440 441 `-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant' 442 Select which procedure calling convention is in use. 443 444 `-EB | -EL' 445 Select either big-endian (-EB) or little-endian (-EL) output. 446 447 `-mthumb-interwork' 448 Specify that the code has been generated with interworking between 449 Thumb and ARM code in mind. 450 451 `-k' 452 Specify that PIC code has been generated. 453 454 See the info pages for documentation of the CRIS-specific options. 455 456 The following options are available when as is configured for a D10V 457 processor. 458 `-O' 459 Optimize output by parallelizing instructions. 460 461 The following options are available when as is configured for a D30V 462 processor. 463 `-O' 464 Optimize output by parallelizing instructions. 465 466 `-n' 467 Warn when nops are generated. 468 469 `-N' 470 Warn when a nop after a 32-bit multiply instruction is generated. 471 472 The following options are available when as is configured for the 473 Intel 80960 processor. 474 475 `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC' 476 Specify which variant of the 960 architecture is the target. 477 478 `-b' 479 Add code to collect statistics about branches taken. 480 481 `-no-relax' 482 Do not alter compare-and-branch instructions for long 483 displacements; error if necessary. 484 485 486 The following options are available when as is configured for the 487 Ubicom IP2K series. 488 489 `-mip2022ext' 490 Specifies that the extended IP2022 instructions are allowed. 491 492 `-mip2022' 493 Restores the default behaviour, which restricts the permitted 494 instructions to just the basic IP2022 ones. 495 496 497 The following options are available when as is configured for the 498 Renesas M32C and M16C processors. 499 500 `-m32c' 501 Assemble M32C instructions. 502 503 `-m16c' 504 Assemble M16C instructions (the default). 505 506 `-relax' 507 Enable support for link-time relaxations. 508 509 `-h-tick-hex' 510 Support H'00 style hex constants in addition to 0x00 style. 511 512 513 The following options are available when as is configured for the 514 Renesas M32R (formerly Mitsubishi M32R) series. 515 516 `--m32rx' 517 Specify which processor in the M32R family is the target. The 518 default is normally the M32R, but this option changes it to the 519 M32RX. 520 521 `--warn-explicit-parallel-conflicts or --Wp' 522 Produce warning messages when questionable parallel constructs are 523 encountered. 524 525 `--no-warn-explicit-parallel-conflicts or --Wnp' 526 Do not produce warning messages when questionable parallel 527 constructs are encountered. 528 529 530 The following options are available when as is configured for the 531 Motorola 68000 series. 532 533 `-l' 534 Shorten references to undefined symbols, to one word instead of 535 two. 536 537 `-m68000 | -m68008 | -m68010 | -m68020 | -m68030' 538 `| -m68040 | -m68060 | -m68302 | -m68331 | -m68332' 539 `| -m68333 | -m68340 | -mcpu32 | -m5200' 540 Specify what processor in the 68000 family is the target. The 541 default is normally the 68020, but this can be changed at 542 configuration time. 543 544 `-m68881 | -m68882 | -mno-68881 | -mno-68882' 545 The target machine does (or does not) have a floating-point 546 coprocessor. The default is to assume a coprocessor for 68020, 547 68030, and cpu32. Although the basic 68000 is not compatible with 548 the 68881, a combination of the two can be specified, since it's 549 possible to do emulation of the coprocessor instructions with the 550 main processor. 551 552 `-m68851 | -mno-68851' 553 The target machine does (or does not) have a memory-management 554 unit coprocessor. The default is to assume an MMU for 68020 and 555 up. 556 557 558 For details about the PDP-11 machine dependent features options, see 559 *note PDP-11-Options::. 560 561 `-mpic | -mno-pic' 562 Generate position-independent (or position-dependent) code. The 563 default is `-mpic'. 564 565 `-mall' 566 `-mall-extensions' 567 Enable all instruction set extensions. This is the default. 568 569 `-mno-extensions' 570 Disable all instruction set extensions. 571 572 `-mEXTENSION | -mno-EXTENSION' 573 Enable (or disable) a particular instruction set extension. 574 575 `-mCPU' 576 Enable the instruction set extensions supported by a particular 577 CPU, and disable all other extensions. 578 579 `-mMACHINE' 580 Enable the instruction set extensions supported by a particular 581 machine model, and disable all other extensions. 582 583 The following options are available when as is configured for a 584 picoJava processor. 585 586 `-mb' 587 Generate "big endian" format output. 588 589 `-ml' 590 Generate "little endian" format output. 591 592 593 The following options are available when as is configured for the 594 Motorola 68HC11 or 68HC12 series. 595 596 `-m68hc11 | -m68hc12 | -m68hcs12' 597 Specify what processor is the target. The default is defined by 598 the configuration option when building the assembler. 599 600 `-mshort' 601 Specify to use the 16-bit integer ABI. 602 603 `-mlong' 604 Specify to use the 32-bit integer ABI. 605 606 `-mshort-double' 607 Specify to use the 32-bit double ABI. 608 609 `-mlong-double' 610 Specify to use the 64-bit double ABI. 611 612 `--force-long-branches' 613 Relative branches are turned into absolute ones. This concerns 614 conditional branches, unconditional branches and branches to a sub 615 routine. 616 617 `-S | --short-branches' 618 Do not turn relative branches into absolute ones when the offset 619 is out of range. 620 621 `--strict-direct-mode' 622 Do not turn the direct addressing mode into extended addressing 623 mode when the instruction does not support direct addressing mode. 624 625 `--print-insn-syntax' 626 Print the syntax of instruction in case of error. 627 628 `--print-opcodes' 629 print the list of instructions with syntax and then exit. 630 631 `--generate-example' 632 print an example of instruction for each possible instruction and 633 then exit. This option is only useful for testing `as'. 634 635 636 The following options are available when `as' is configured for the 637 SPARC architecture: 638 639 `-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite' 640 `-Av8plus | -Av8plusa | -Av9 | -Av9a' 641 Explicitly select a variant of the SPARC architecture. 642 643 `-Av8plus' and `-Av8plusa' select a 32 bit environment. `-Av9' 644 and `-Av9a' select a 64 bit environment. 645 646 `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with 647 UltraSPARC extensions. 648 649 `-xarch=v8plus | -xarch=v8plusa' 650 For compatibility with the Solaris v9 assembler. These options are 651 equivalent to -Av8plus and -Av8plusa, respectively. 652 653 `-bump' 654 Warn when the assembler switches to another architecture. 655 656 The following options are available when as is configured for the 657 'c54x architecture. 658 659 `-mfar-mode' 660 Enable extended addressing mode. All addresses and relocations 661 will assume extended addressing (usually 23 bits). 662 663 `-mcpu=CPU_VERSION' 664 Sets the CPU version being compiled for. 665 666 `-merrors-to-file FILENAME' 667 Redirect error output to a file, for broken systems which don't 668 support such behaviour in the shell. 669 670 The following options are available when as is configured for a MIPS 671 processor. 672 673 `-G NUM' 674 This option sets the largest size of an object that can be 675 referenced implicitly with the `gp' register. It is only accepted 676 for targets that use ECOFF format, such as a DECstation running 677 Ultrix. The default value is 8. 678 679 `-EB' 680 Generate "big endian" format output. 681 682 `-EL' 683 Generate "little endian" format output. 684 685 `-mips1' 686 `-mips2' 687 `-mips3' 688 `-mips4' 689 `-mips5' 690 `-mips32' 691 `-mips32r2' 692 `-mips64' 693 `-mips64r2' 694 Generate code for a particular MIPS Instruction Set Architecture 695 level. `-mips1' is an alias for `-march=r3000', `-mips2' is an 696 alias for `-march=r6000', `-mips3' is an alias for `-march=r4000' 697 and `-mips4' is an alias for `-march=r8000'. `-mips5', `-mips32', 698 `-mips32r2', `-mips64', and `-mips64r2' correspond to generic 699 `MIPS V', `MIPS32', `MIPS32 Release 2', `MIPS64', and `MIPS64 700 Release 2' ISA processors, respectively. 701 702 `-march=CPU' 703 Generate code for a particular MIPS cpu. 704 705 `-mtune=CPU' 706 Schedule and tune for a particular MIPS cpu. 707 708 `-mfix7000' 709 `-mno-fix7000' 710 Cause nops to be inserted if the read of the destination register 711 of an mfhi or mflo instruction occurs in the following two 712 instructions. 713 714 `-mdebug' 715 `-no-mdebug' 716 Cause stabs-style debugging output to go into an ECOFF-style 717 .mdebug section instead of the standard ELF .stabs sections. 718 719 `-mpdr' 720 `-mno-pdr' 721 Control generation of `.pdr' sections. 722 723 `-mgp32' 724 `-mfp32' 725 The register sizes are normally inferred from the ISA and ABI, but 726 these flags force a certain group of registers to be treated as 32 727 bits wide at all times. `-mgp32' controls the size of 728 general-purpose registers and `-mfp32' controls the size of 729 floating-point registers. 730 731 `-mips16' 732 `-no-mips16' 733 Generate code for the MIPS 16 processor. This is equivalent to 734 putting `.set mips16' at the start of the assembly file. 735 `-no-mips16' turns off this option. 736 737 `-msmartmips' 738 `-mno-smartmips' 739 Enables the SmartMIPS extension to the MIPS32 instruction set. 740 This is equivalent to putting `.set smartmips' at the start of the 741 assembly file. `-mno-smartmips' turns off this option. 742 743 `-mips3d' 744 `-no-mips3d' 745 Generate code for the MIPS-3D Application Specific Extension. 746 This tells the assembler to accept MIPS-3D instructions. 747 `-no-mips3d' turns off this option. 748 749 `-mdmx' 750 `-no-mdmx' 751 Generate code for the MDMX Application Specific Extension. This 752 tells the assembler to accept MDMX instructions. `-no-mdmx' turns 753 off this option. 754 755 `-mdsp' 756 `-mno-dsp' 757 Generate code for the DSP Release 1 Application Specific Extension. 758 This tells the assembler to accept DSP Release 1 instructions. 759 `-mno-dsp' turns off this option. 760 761 `-mdspr2' 762 `-mno-dspr2' 763 Generate code for the DSP Release 2 Application Specific Extension. 764 This option implies -mdsp. This tells the assembler to accept DSP 765 Release 2 instructions. `-mno-dspr2' turns off this option. 766 767 `-mmt' 768 `-mno-mt' 769 Generate code for the MT Application Specific Extension. This 770 tells the assembler to accept MT instructions. `-mno-mt' turns 771 off this option. 772 773 `--construct-floats' 774 `--no-construct-floats' 775 The `--no-construct-floats' option disables the construction of 776 double width floating point constants by loading the two halves of 777 the value into the two single width floating point registers that 778 make up the double width register. By default 779 `--construct-floats' is selected, allowing construction of these 780 floating point constants. 781 782 `--emulation=NAME' 783 This option causes `as' to emulate `as' configured for some other 784 target, in all respects, including output format (choosing between 785 ELF and ECOFF only), handling of pseudo-opcodes which may generate 786 debugging information or store symbol table information, and 787 default endianness. The available configuration names are: 788 `mipsecoff', `mipself', `mipslecoff', `mipsbecoff', `mipslelf', 789 `mipsbelf'. The first two do not alter the default endianness 790 from that of the primary target for which the assembler was 791 configured; the others change the default to little- or big-endian 792 as indicated by the `b' or `l' in the name. Using `-EB' or `-EL' 793 will override the endianness selection in any case. 794 795 This option is currently supported only when the primary target 796 `as' is configured for is a MIPS ELF or ECOFF target. 797 Furthermore, the primary target or others specified with 798 `--enable-targets=...' at configuration time must include support 799 for the other format, if both are to be available. For example, 800 the Irix 5 configuration includes support for both. 801 802 Eventually, this option will support more configurations, with more 803 fine-grained control over the assembler's behavior, and will be 804 supported for more processors. 805 806 `-nocpp' 807 `as' ignores this option. It is accepted for compatibility with 808 the native tools. 809 810 `--trap' 811 `--no-trap' 812 `--break' 813 `--no-break' 814 Control how to deal with multiplication overflow and division by 815 zero. `--trap' or `--no-break' (which are synonyms) take a trap 816 exception (and only work for Instruction Set Architecture level 2 817 and higher); `--break' or `--no-trap' (also synonyms, and the 818 default) take a break exception. 819 820 `-n' 821 When this option is used, `as' will issue a warning every time it 822 generates a nop instruction from a macro. 823 824 The following options are available when as is configured for an 825 MCore processor. 826 827 `-jsri2bsr' 828 `-nojsri2bsr' 829 Enable or disable the JSRI to BSR transformation. By default this 830 is enabled. The command line option `-nojsri2bsr' can be used to 831 disable it. 832 833 `-sifilter' 834 `-nosifilter' 835 Enable or disable the silicon filter behaviour. By default this 836 is disabled. The default can be overridden by the `-sifilter' 837 command line option. 838 839 `-relax' 840 Alter jump instructions for long displacements. 841 842 `-mcpu=[210|340]' 843 Select the cpu type on the target hardware. This controls which 844 instructions can be assembled. 845 846 `-EB' 847 Assemble for a big endian target. 848 849 `-EL' 850 Assemble for a little endian target. 851 852 853 See the info pages for documentation of the MMIX-specific options. 854 855 The following options are available when as is configured for an 856 Xtensa processor. 857 858 `--text-section-literals | --no-text-section-literals' 859 With `--text-section-literals', literal pools are interspersed in 860 the text section. The default is `--no-text-section-literals', 861 which places literals in a separate section in the output file. 862 These options only affect literals referenced via PC-relative 863 `L32R' instructions; literals for absolute mode `L32R' 864 instructions are handled separately. 865 866 `--absolute-literals | --no-absolute-literals' 867 Indicate to the assembler whether `L32R' instructions use absolute 868 or PC-relative addressing. The default is to assume absolute 869 addressing if the Xtensa processor includes the absolute `L32R' 870 addressing option. Otherwise, only the PC-relative `L32R' mode 871 can be used. 872 873 `--target-align | --no-target-align' 874 Enable or disable automatic alignment to reduce branch penalties 875 at the expense of some code density. The default is 876 `--target-align'. 877 878 `--longcalls | --no-longcalls' 879 Enable or disable transformation of call instructions to allow 880 calls across a greater range of addresses. The default is 881 `--no-longcalls'. 882 883 `--transform | --no-transform' 884 Enable or disable all assembler transformations of Xtensa 885 instructions. The default is `--transform'; `--no-transform' 886 should be used only in the rare cases when the instructions must 887 be exactly as specified in the assembly source. 888 889 `--rename-section OLDNAME=NEWNAME' 890 When generating output sections, rename the OLDNAME section to 891 NEWNAME. 892 893 The following options are available when as is configured for a Z80 894 family processor. 895 `-z80' 896 Assemble for Z80 processor. 897 898 `-r800' 899 Assemble for R800 processor. 900 901 `-ignore-undocumented-instructions' 902 `-Wnud' 903 Assemble undocumented Z80 instructions that also work on R800 904 without warning. 905 906 `-ignore-unportable-instructions' 907 `-Wnup' 908 Assemble all undocumented Z80 instructions without warning. 909 910 `-warn-undocumented-instructions' 911 `-Wud' 912 Issue a warning for undocumented Z80 instructions that also work 913 on R800. 914 915 `-warn-unportable-instructions' 916 `-Wup' 917 Issue a warning for undocumented Z80 instructions that do not work 918 on R800. 919 920 `-forbid-undocumented-instructions' 921 `-Fud' 922 Treat all undocumented instructions as errors. 923 924 `-forbid-unportable-instructions' 925 `-Fup' 926 Treat undocumented Z80 instructions that do not work on R800 as 927 errors. 928 929 * Menu: 930 931 * Manual:: Structure of this Manual 932 * GNU Assembler:: The GNU Assembler 933 * Object Formats:: Object File Formats 934 * Command Line:: Command Line 935 * Input Files:: Input Files 936 * Object:: Output (Object) File 937 * Errors:: Error and Warning Messages 938 939 940 File: as.info, Node: Manual, Next: GNU Assembler, Up: Overview 941 942 1.1 Structure of this Manual 943 ============================ 944 945 This manual is intended to describe what you need to know to use GNU 946 `as'. We cover the syntax expected in source files, including notation 947 for symbols, constants, and expressions; the directives that `as' 948 understands; and of course how to invoke `as'. 949 950 This manual also describes some of the machine-dependent features of 951 various flavors of the assembler. 952 953 On the other hand, this manual is _not_ intended as an introduction 954 to programming in assembly language--let alone programming in general! 955 In a similar vein, we make no attempt to introduce the machine 956 architecture; we do _not_ describe the instruction set, standard 957 mnemonics, registers or addressing modes that are standard to a 958 particular architecture. You may want to consult the manufacturer's 959 machine architecture manual for this information. 960 961 962 File: as.info, Node: GNU Assembler, Next: Object Formats, Prev: Manual, Up: Overview 963 964 1.2 The GNU Assembler 965 ===================== 966 967 GNU `as' is really a family of assemblers. If you use (or have used) 968 the GNU assembler on one architecture, you should find a fairly similar 969 environment when you use it on another architecture. Each version has 970 much in common with the others, including object file formats, most 971 assembler directives (often called "pseudo-ops") and assembler syntax. 972 973 `as' is primarily intended to assemble the output of the GNU C 974 compiler `gcc' for use by the linker `ld'. Nevertheless, we've tried 975 to make `as' assemble correctly everything that other assemblers for 976 the same machine would assemble. Any exceptions are documented 977 explicitly (*note Machine Dependencies::). This doesn't mean `as' 978 always uses the same syntax as another assembler for the same 979 architecture; for example, we know of several incompatible versions of 980 680x0 assembly language syntax. 981 982 Unlike older assemblers, `as' is designed to assemble a source 983 program in one pass of the source file. This has a subtle impact on the 984 `.org' directive (*note `.org': Org.). 985 986 987 File: as.info, Node: Object Formats, Next: Command Line, Prev: GNU Assembler, Up: Overview 988 989 1.3 Object File Formats 990 ======================= 991 992 The GNU assembler can be configured to produce several alternative 993 object file formats. For the most part, this does not affect how you 994 write assembly language programs; but directives for debugging symbols 995 are typically different in different file formats. *Note Symbol 996 Attributes: Symbol Attributes. 997 998 999 File: as.info, Node: Command Line, Next: Input Files, Prev: Object Formats, Up: Overview 1000 1001 1.4 Command Line 1002 ================ 1003 1004 After the program name `as', the command line may contain options and 1005 file names. Options may appear in any order, and may be before, after, 1006 or between file names. The order of file names is significant. 1007 1008 `--' (two hyphens) by itself names the standard input file 1009 explicitly, as one of the files for `as' to assemble. 1010 1011 Except for `--' any command line argument that begins with a hyphen 1012 (`-') is an option. Each option changes the behavior of `as'. No 1013 option changes the way another option works. An option is a `-' 1014 followed by one or more letters; the case of the letter is important. 1015 All options are optional. 1016 1017 Some options expect exactly one file name to follow them. The file 1018 name may either immediately follow the option's letter (compatible with 1019 older assemblers) or it may be the next command argument (GNU 1020 standard). These two command lines are equivalent: 1021 1022 as -o my-object-file.o mumble.s 1023 as -omy-object-file.o mumble.s 1024 1025 1026 File: as.info, Node: Input Files, Next: Object, Prev: Command Line, Up: Overview 1027 1028 1.5 Input Files 1029 =============== 1030 1031 We use the phrase "source program", abbreviated "source", to describe 1032 the program input to one run of `as'. The program may be in one or 1033 more files; how the source is partitioned into files doesn't change the 1034 meaning of the source. 1035 1036 The source program is a concatenation of the text in all the files, 1037 in the order specified. 1038 1039 Each time you run `as' it assembles exactly one source program. The 1040 source program is made up of one or more files. (The standard input is 1041 also a file.) 1042 1043 You give `as' a command line that has zero or more input file names. 1044 The input files are read (from left file name to right). A command 1045 line argument (in any position) that has no special meaning is taken to 1046 be an input file name. 1047 1048 If you give `as' no file names it attempts to read one input file 1049 from the `as' standard input, which is normally your terminal. You may 1050 have to type <ctl-D> to tell `as' there is no more program to assemble. 1051 1052 Use `--' if you need to explicitly name the standard input file in 1053 your command line. 1054 1055 If the source is empty, `as' produces a small, empty object file. 1056 1057 Filenames and Line-numbers 1058 -------------------------- 1059 1060 There are two ways of locating a line in the input file (or files) and 1061 either may be used in reporting error messages. One way refers to a 1062 line number in a physical file; the other refers to a line number in a 1063 "logical" file. *Note Error and Warning Messages: Errors. 1064 1065 "Physical files" are those files named in the command line given to 1066 `as'. 1067 1068 "Logical files" are simply names declared explicitly by assembler 1069 directives; they bear no relation to physical files. Logical file 1070 names help error messages reflect the original source file, when `as' 1071 source is itself synthesized from other files. `as' understands the 1072 `#' directives emitted by the `gcc' preprocessor. See also *note 1073 `.file': File. 1074 1075 1076 File: as.info, Node: Object, Next: Errors, Prev: Input Files, Up: Overview 1077 1078 1.6 Output (Object) File 1079 ======================== 1080 1081 Every time you run `as' it produces an output file, which is your 1082 assembly language program translated into numbers. This file is the 1083 object file. Its default name is `a.out'. You can give it another 1084 name by using the `-o' option. Conventionally, object file names end 1085 with `.o'. The default name is used for historical reasons: older 1086 assemblers were capable of assembling self-contained programs directly 1087 into a runnable program. (For some formats, this isn't currently 1088 possible, but it can be done for the `a.out' format.) 1089 1090 The object file is meant for input to the linker `ld'. It contains 1091 assembled program code, information to help `ld' integrate the 1092 assembled program into a runnable file, and (optionally) symbolic 1093 information for the debugger. 1094 1095 1096 File: as.info, Node: Errors, Prev: Object, Up: Overview 1097 1098 1.7 Error and Warning Messages 1099 ============================== 1100 1101 `as' may write warnings and error messages to the standard error file 1102 (usually your terminal). This should not happen when a compiler runs 1103 `as' automatically. Warnings report an assumption made so that `as' 1104 could keep assembling a flawed program; errors report a grave problem 1105 that stops the assembly. 1106 1107 Warning messages have the format 1108 1109 file_name:NNN:Warning Message Text 1110 1111 (where NNN is a line number). If a logical file name has been given 1112 (*note `.file': File.) it is used for the filename, otherwise the name 1113 of the current input file is used. If a logical line number was given 1114 (*note `.line': Line.) then it is used to calculate the number printed, 1115 otherwise the actual line in the current source file is printed. The 1116 message text is intended to be self explanatory (in the grand Unix 1117 tradition). 1118 1119 Error messages have the format 1120 file_name:NNN:FATAL:Error Message Text 1121 The file name and line number are derived as for warning messages. 1122 The actual message text may be rather less explanatory because many of 1123 them aren't supposed to happen. 1124 1125 1126 File: as.info, Node: Invoking, Next: Syntax, Prev: Overview, Up: Top 1127 1128 2 Command-Line Options 1129 ********************** 1130 1131 This chapter describes command-line options available in _all_ versions 1132 of the GNU assembler; see *note Machine Dependencies::, for options 1133 specific to particular machine architectures. 1134 1135 If you are invoking `as' via the GNU C compiler, you can use the 1136 `-Wa' option to pass arguments through to the assembler. The assembler 1137 arguments must be separated from each other (and the `-Wa') by commas. 1138 For example: 1139 1140 gcc -c -g -O -Wa,-alh,-L file.c 1141 1142 This passes two options to the assembler: `-alh' (emit a listing to 1143 standard output with high-level and assembly source) and `-L' (retain 1144 local symbols in the symbol table). 1145 1146 Usually you do not need to use this `-Wa' mechanism, since many 1147 compiler command-line options are automatically passed to the assembler 1148 by the compiler. (You can call the GNU compiler driver with the `-v' 1149 option to see precisely what options it passes to each compilation 1150 pass, including the assembler.) 1151 1152 * Menu: 1153 1154 * a:: -a[cdghlns] enable listings 1155 * alternate:: --alternate enable alternate macro syntax 1156 * D:: -D for compatibility 1157 * f:: -f to work faster 1158 * I:: -I for .include search path 1159 1160 * K:: -K for difference tables 1161 1162 * L:: -L to retain local symbols 1163 * listing:: --listing-XXX to configure listing output 1164 * M:: -M or --mri to assemble in MRI compatibility mode 1165 * MD:: --MD for dependency tracking 1166 * o:: -o to name the object file 1167 * R:: -R to join data and text sections 1168 * statistics:: --statistics to see statistics about assembly 1169 * traditional-format:: --traditional-format for compatible output 1170 * v:: -v to announce version 1171 * W:: -W, --no-warn, --warn, --fatal-warnings to control warnings 1172 * Z:: -Z to make object file even after errors 1173 1174 1175 File: as.info, Node: a, Next: alternate, Up: Invoking 1176 1177 2.1 Enable Listings: `-a[cdghlns]' 1178 ================================== 1179 1180 These options enable listing output from the assembler. By itself, 1181 `-a' requests high-level, assembly, and symbols listing. You can use 1182 other letters to select specific options for the list: `-ah' requests a 1183 high-level language listing, `-al' requests an output-program assembly 1184 listing, and `-as' requests a symbol table listing. High-level 1185 listings require that a compiler debugging option like `-g' be used, 1186 and that assembly listings (`-al') be requested also. 1187 1188 Use the `-ag' option to print a first section with general assembly 1189 information, like as version, switches passed, or time stamp. 1190 1191 Use the `-ac' option to omit false conditionals from a listing. Any 1192 lines which are not assembled because of a false `.if' (or `.ifdef', or 1193 any other conditional), or a true `.if' followed by an `.else', will be 1194 omitted from the listing. 1195 1196 Use the `-ad' option to omit debugging directives from the listing. 1197 1198 Once you have specified one of these options, you can further control 1199 listing output and its appearance using the directives `.list', 1200 `.nolist', `.psize', `.eject', `.title', and `.sbttl'. The `-an' 1201 option turns off all forms processing. If you do not request listing 1202 output with one of the `-a' options, the listing-control directives 1203 have no effect. 1204 1205 The letters after `-a' may be combined into one option, _e.g._, 1206 `-aln'. 1207 1208 Note if the assembler source is coming from the standard input (e.g., 1209 because it is being created by `gcc' and the `-pipe' command line switch 1210 is being used) then the listing will not contain any comments or 1211 preprocessor directives. This is because the listing code buffers 1212 input source lines from stdin only after they have been preprocessed by 1213 the assembler. This reduces memory usage and makes the code more 1214 efficient. 1215 1216 1217 File: as.info, Node: alternate, Next: D, Prev: a, Up: Invoking 1218 1219 2.2 `--alternate' 1220 ================= 1221 1222 Begin in alternate macro mode, see *note `.altmacro': Altmacro. 1223 1224 1225 File: as.info, Node: D, Next: f, Prev: alternate, Up: Invoking 1226 1227 2.3 `-D' 1228 ======== 1229 1230 This option has no effect whatsoever, but it is accepted to make it more 1231 likely that scripts written for other assemblers also work with `as'. 1232 1233 1234 File: as.info, Node: f, Next: I, Prev: D, Up: Invoking 1235 1236 2.4 Work Faster: `-f' 1237 ===================== 1238 1239 `-f' should only be used when assembling programs written by a 1240 (trusted) compiler. `-f' stops the assembler from doing whitespace and 1241 comment preprocessing on the input file(s) before assembling them. 1242 *Note Preprocessing: Preprocessing. 1243 1244 _Warning:_ if you use `-f' when the files actually need to be 1245 preprocessed (if they contain comments, for example), `as' does 1246 not work correctly. 1247 1248 1249 File: as.info, Node: I, Next: K, Prev: f, Up: Invoking 1250 1251 2.5 `.include' Search Path: `-I' PATH 1252 ===================================== 1253 1254 Use this option to add a PATH to the list of directories `as' searches 1255 for files specified in `.include' directives (*note `.include': 1256 Include.). You may use `-I' as many times as necessary to include a 1257 variety of paths. The current working directory is always searched 1258 first; after that, `as' searches any `-I' directories in the same order 1259 as they were specified (left to right) on the command line. 1260 1261 1262 File: as.info, Node: K, Next: L, Prev: I, Up: Invoking 1263 1264 2.6 Difference Tables: `-K' 1265 =========================== 1266 1267 `as' sometimes alters the code emitted for directives of the form 1268 `.word SYM1-SYM2'. *Note `.word': Word. You can use the `-K' option 1269 if you want a warning issued when this is done. 1270 1271 1272 File: as.info, Node: L, Next: listing, Prev: K, Up: Invoking 1273 1274 2.7 Include Local Symbols: `-L' 1275 =============================== 1276 1277 Symbols beginning with system-specific local label prefixes, typically 1278 `.L' for ELF systems or `L' for traditional a.out systems, are called 1279 "local symbols". *Note Symbol Names::. Normally you do not see such 1280 symbols when debugging, because they are intended for the use of 1281 programs (like compilers) that compose assembler programs, not for your 1282 notice. Normally both `as' and `ld' discard such symbols, so you do 1283 not normally debug with them. 1284 1285 This option tells `as' to retain those local symbols in the object 1286 file. Usually if you do this you also tell the linker `ld' to preserve 1287 those symbols. 1288 1289 1290 File: as.info, Node: listing, Next: M, Prev: L, Up: Invoking 1291 1292 2.8 Configuring listing output: `--listing' 1293 =========================================== 1294 1295 The listing feature of the assembler can be enabled via the command 1296 line switch `-a' (*note a::). This feature combines the input source 1297 file(s) with a hex dump of the corresponding locations in the output 1298 object file, and displays them as a listing file. The format of this 1299 listing can be controlled by directives inside the assembler source 1300 (i.e., `.list' (*note List::), `.title' (*note Title::), `.sbttl' 1301 (*note Sbttl::), `.psize' (*note Psize::), and `.eject' (*note Eject::) 1302 and also by the following switches: 1303 1304 `--listing-lhs-width=`number'' 1305 Sets the maximum width, in words, of the first line of the hex 1306 byte dump. This dump appears on the left hand side of the listing 1307 output. 1308 1309 `--listing-lhs-width2=`number'' 1310 Sets the maximum width, in words, of any further lines of the hex 1311 byte dump for a given input source line. If this value is not 1312 specified, it defaults to being the same as the value specified 1313 for `--listing-lhs-width'. If neither switch is used the default 1314 is to one. 1315 1316 `--listing-rhs-width=`number'' 1317 Sets the maximum width, in characters, of the source line that is 1318 displayed alongside the hex dump. The default value for this 1319 parameter is 100. The source line is displayed on the right hand 1320 side of the listing output. 1321 1322 `--listing-cont-lines=`number'' 1323 Sets the maximum number of continuation lines of hex dump that 1324 will be displayed for a given single line of source input. The 1325 default value is 4. 1326 1327 1328 File: as.info, Node: M, Next: MD, Prev: listing, Up: Invoking 1329 1330 2.9 Assemble in MRI Compatibility Mode: `-M' 1331 ============================================ 1332 1333 The `-M' or `--mri' option selects MRI compatibility mode. This 1334 changes the syntax and pseudo-op handling of `as' to make it compatible 1335 with the `ASM68K' or the `ASM960' (depending upon the configured 1336 target) assembler from Microtec Research. The exact nature of the MRI 1337 syntax will not be documented here; see the MRI manuals for more 1338 information. Note in particular that the handling of macros and macro 1339 arguments is somewhat different. The purpose of this option is to 1340 permit assembling existing MRI assembler code using `as'. 1341 1342 The MRI compatibility is not complete. Certain operations of the 1343 MRI assembler depend upon its object file format, and can not be 1344 supported using other object file formats. Supporting these would 1345 require enhancing each object file format individually. These are: 1346 1347 * global symbols in common section 1348 1349 The m68k MRI assembler supports common sections which are merged 1350 by the linker. Other object file formats do not support this. 1351 `as' handles common sections by treating them as a single common 1352 symbol. It permits local symbols to be defined within a common 1353 section, but it can not support global symbols, since it has no 1354 way to describe them. 1355 1356 * complex relocations 1357 1358 The MRI assemblers support relocations against a negated section 1359 address, and relocations which combine the start addresses of two 1360 or more sections. These are not support by other object file 1361 formats. 1362 1363 * `END' pseudo-op specifying start address 1364 1365 The MRI `END' pseudo-op permits the specification of a start 1366 address. This is not supported by other object file formats. The 1367 start address may instead be specified using the `-e' option to 1368 the linker, or in a linker script. 1369 1370 * `IDNT', `.ident' and `NAME' pseudo-ops 1371 1372 The MRI `IDNT', `.ident' and `NAME' pseudo-ops assign a module 1373 name to the output file. This is not supported by other object 1374 file formats. 1375 1376 * `ORG' pseudo-op 1377 1378 The m68k MRI `ORG' pseudo-op begins an absolute section at a given 1379 address. This differs from the usual `as' `.org' pseudo-op, which 1380 changes the location within the current section. Absolute 1381 sections are not supported by other object file formats. The 1382 address of a section may be assigned within a linker script. 1383 1384 There are some other features of the MRI assembler which are not 1385 supported by `as', typically either because they are difficult or 1386 because they seem of little consequence. Some of these may be 1387 supported in future releases. 1388 1389 * EBCDIC strings 1390 1391 EBCDIC strings are not supported. 1392 1393 * packed binary coded decimal 1394 1395 Packed binary coded decimal is not supported. This means that the 1396 `DC.P' and `DCB.P' pseudo-ops are not supported. 1397 1398 * `FEQU' pseudo-op 1399 1400 The m68k `FEQU' pseudo-op is not supported. 1401 1402 * `NOOBJ' pseudo-op 1403 1404 The m68k `NOOBJ' pseudo-op is not supported. 1405 1406 * `OPT' branch control options 1407 1408 The m68k `OPT' branch control options--`B', `BRS', `BRB', `BRL', 1409 and `BRW'--are ignored. `as' automatically relaxes all branches, 1410 whether forward or backward, to an appropriate size, so these 1411 options serve no purpose. 1412 1413 * `OPT' list control options 1414 1415 The following m68k `OPT' list control options are ignored: `C', 1416 `CEX', `CL', `CRE', `E', `G', `I', `M', `MEX', `MC', `MD', `X'. 1417 1418 * other `OPT' options 1419 1420 The following m68k `OPT' options are ignored: `NEST', `O', `OLD', 1421 `OP', `P', `PCO', `PCR', `PCS', `R'. 1422 1423 * `OPT' `D' option is default 1424 1425 The m68k `OPT' `D' option is the default, unlike the MRI assembler. 1426 `OPT NOD' may be used to turn it off. 1427 1428 * `XREF' pseudo-op. 1429 1430 The m68k `XREF' pseudo-op is ignored. 1431 1432 * `.debug' pseudo-op 1433 1434 The i960 `.debug' pseudo-op is not supported. 1435 1436 * `.extended' pseudo-op 1437 1438 The i960 `.extended' pseudo-op is not supported. 1439 1440 * `.list' pseudo-op. 1441 1442 The various options of the i960 `.list' pseudo-op are not 1443 supported. 1444 1445 * `.optimize' pseudo-op 1446 1447 The i960 `.optimize' pseudo-op is not supported. 1448 1449 * `.output' pseudo-op 1450 1451 The i960 `.output' pseudo-op is not supported. 1452 1453 * `.setreal' pseudo-op 1454 1455 The i960 `.setreal' pseudo-op is not supported. 1456 1457 1458 1459 File: as.info, Node: MD, Next: o, Prev: M, Up: Invoking 1460 1461 2.10 Dependency Tracking: `--MD' 1462 ================================ 1463 1464 `as' can generate a dependency file for the file it creates. This file 1465 consists of a single rule suitable for `make' describing the 1466 dependencies of the main source file. 1467 1468 The rule is written to the file named in its argument. 1469 1470 This feature is used in the automatic updating of makefiles. 1471 1472 1473 File: as.info, Node: o, Next: R, Prev: MD, Up: Invoking 1474 1475 2.11 Name the Object File: `-o' 1476 =============================== 1477 1478 There is always one object file output when you run `as'. By default 1479 it has the name `a.out' (or `b.out', for Intel 960 targets only). You 1480 use this option (which takes exactly one filename) to give the object 1481 file a different name. 1482 1483 Whatever the object file is called, `as' overwrites any existing 1484 file of the same name. 1485 1486 1487 File: as.info, Node: R, Next: statistics, Prev: o, Up: Invoking 1488 1489 2.12 Join Data and Text Sections: `-R' 1490 ====================================== 1491 1492 `-R' tells `as' to write the object file as if all data-section data 1493 lives in the text section. This is only done at the very last moment: 1494 your binary data are the same, but data section parts are relocated 1495 differently. The data section part of your object file is zero bytes 1496 long because all its bytes are appended to the text section. (*Note 1497 Sections and Relocation: Sections.) 1498 1499 When you specify `-R' it would be possible to generate shorter 1500 address displacements (because we do not have to cross between text and 1501 data section). We refrain from doing this simply for compatibility with 1502 older versions of `as'. In future, `-R' may work this way. 1503 1504 When `as' is configured for COFF or ELF output, this option is only 1505 useful if you use sections named `.text' and `.data'. 1506 1507 `-R' is not supported for any of the HPPA targets. Using `-R' 1508 generates a warning from `as'. 1509 1510 1511 File: as.info, Node: statistics, Next: traditional-format, Prev: R, Up: Invoking 1512 1513 2.13 Display Assembly Statistics: `--statistics' 1514 ================================================ 1515 1516 Use `--statistics' to display two statistics about the resources used by 1517 `as': the maximum amount of space allocated during the assembly (in 1518 bytes), and the total execution time taken for the assembly (in CPU 1519 seconds). 1520 1521 1522 File: as.info, Node: traditional-format, Next: v, Prev: statistics, Up: Invoking 1523 1524 2.14 Compatible Output: `--traditional-format' 1525 ============================================== 1526 1527 For some targets, the output of `as' is different in some ways from the 1528 output of some existing assembler. This switch requests `as' to use 1529 the traditional format instead. 1530 1531 For example, it disables the exception frame optimizations which 1532 `as' normally does by default on `gcc' output. 1533 1534 1535 File: as.info, Node: v, Next: W, Prev: traditional-format, Up: Invoking 1536 1537 2.15 Announce Version: `-v' 1538 =========================== 1539 1540 You can find out what version of as is running by including the option 1541 `-v' (which you can also spell as `-version') on the command line. 1542 1543 1544 File: as.info, Node: W, Next: Z, Prev: v, Up: Invoking 1545 1546 2.16 Control Warnings: `-W', `--warn', `--no-warn', `--fatal-warnings' 1547 ====================================================================== 1548 1549 `as' should never give a warning or error message when assembling 1550 compiler output. But programs written by people often cause `as' to 1551 give a warning that a particular assumption was made. All such 1552 warnings are directed to the standard error file. 1553 1554 If you use the `-W' and `--no-warn' options, no warnings are issued. 1555 This only affects the warning messages: it does not change any 1556 particular of how `as' assembles your file. Errors, which stop the 1557 assembly, are still reported. 1558 1559 If you use the `--fatal-warnings' option, `as' considers files that 1560 generate warnings to be in error. 1561 1562 You can switch these options off again by specifying `--warn', which 1563 causes warnings to be output as usual. 1564 1565 1566 File: as.info, Node: Z, Prev: W, Up: Invoking 1567 1568 2.17 Generate Object File in Spite of Errors: `-Z' 1569 ================================================== 1570 1571 After an error message, `as' normally produces no output. If for some 1572 reason you are interested in object file output even after `as' gives 1573 an error message on your program, use the `-Z' option. If there are 1574 any errors, `as' continues anyways, and writes an object file after a 1575 final warning message of the form `N errors, M warnings, generating bad 1576 object file.' 1577 1578 1579 File: as.info, Node: Syntax, Next: Sections, Prev: Invoking, Up: Top 1580 1581 3 Syntax 1582 ******** 1583 1584 This chapter describes the machine-independent syntax allowed in a 1585 source file. `as' syntax is similar to what many other assemblers use; 1586 it is inspired by the BSD 4.2 assembler, except that `as' does not 1587 assemble Vax bit-fields. 1588 1589 * Menu: 1590 1591 * Preprocessing:: Preprocessing 1592 * Whitespace:: Whitespace 1593 * Comments:: Comments 1594 * Symbol Intro:: Symbols 1595 * Statements:: Statements 1596 * Constants:: Constants 1597 1598 1599 File: as.info, Node: Preprocessing, Next: Whitespace, Up: Syntax 1600 1601 3.1 Preprocessing 1602 ================= 1603 1604 The `as' internal preprocessor: 1605 * adjusts and removes extra whitespace. It leaves one space or tab 1606 before the keywords on a line, and turns any other whitespace on 1607 the line into a single space. 1608 1609 * removes all comments, replacing them with a single space, or an 1610 appropriate number of newlines. 1611 1612 * converts character constants into the appropriate numeric values. 1613 1614 It does not do macro processing, include file handling, or anything 1615 else you may get from your C compiler's preprocessor. You can do 1616 include file processing with the `.include' directive (*note 1617 `.include': Include.). You can use the GNU C compiler driver to get 1618 other "CPP" style preprocessing by giving the input file a `.S' suffix. 1619 *Note Options Controlling the Kind of Output: (gcc.info)Overall Options. 1620 1621 Excess whitespace, comments, and character constants cannot be used 1622 in the portions of the input text that are not preprocessed. 1623 1624 If the first line of an input file is `#NO_APP' or if you use the 1625 `-f' option, whitespace and comments are not removed from the input 1626 file. Within an input file, you can ask for whitespace and comment 1627 removal in specific portions of the by putting a line that says `#APP' 1628 before the text that may contain whitespace or comments, and putting a 1629 line that says `#NO_APP' after this text. This feature is mainly 1630 intend to support `asm' statements in compilers whose output is 1631 otherwise free of comments and whitespace. 1632 1633 1634 File: as.info, Node: Whitespace, Next: Comments, Prev: Preprocessing, Up: Syntax 1635 1636 3.2 Whitespace 1637 ============== 1638 1639 "Whitespace" is one or more blanks or tabs, in any order. Whitespace 1640 is used to separate symbols, and to make programs neater for people to 1641 read. Unless within character constants (*note Character Constants: 1642 Characters.), any whitespace means the same as exactly one space. 1643 1644 1645 File: as.info, Node: Comments, Next: Symbol Intro, Prev: Whitespace, Up: Syntax 1646 1647 3.3 Comments 1648 ============ 1649 1650 There are two ways of rendering comments to `as'. In both cases the 1651 comment is equivalent to one space. 1652 1653 Anything from `/*' through the next `*/' is a comment. This means 1654 you may not nest these comments. 1655 1656 /* 1657 The only way to include a newline ('\n') in a comment 1658 is to use this sort of comment. 1659 */ 1660 1661 /* This sort of comment does not nest. */ 1662 1663 Anything from the "line comment" character to the next newline is 1664 considered a comment and is ignored. The line comment character is `;' 1665 on the ARC; `@' on the ARM; `;' for the H8/300 family; `;' for the HPPA; 1666 `#' on the i386 and x86-64; `#' on the i960; `;' for the PDP-11; `;' 1667 for picoJava; `#' for Motorola PowerPC; `!' for the Renesas / SuperH SH; 1668 `!' on the SPARC; `#' on the ip2k; `#' on the m32c; `#' on the m32r; 1669 `|' on the 680x0; `#' on the 68HC11 and 68HC12; `#' on the Vax; `;' for 1670 the Z80; `!' for the Z8000; `#' on the V850; `#' for Xtensa systems; 1671 see *note Machine Dependencies::. 1672 1673 On some machines there are two different line comment characters. 1674 One character only begins a comment if it is the first non-whitespace 1675 character on a line, while the other always begins a comment. 1676 1677 The V850 assembler also supports a double dash as starting a comment 1678 that extends to the end of the line. 1679 1680 `--'; 1681 1682 To be compatible with past assemblers, lines that begin with `#' 1683 have a special interpretation. Following the `#' should be an absolute 1684 expression (*note Expressions::): the logical line number of the _next_ 1685 line. Then a string (*note Strings: Strings.) is allowed: if present 1686 it is a new logical file name. The rest of the line, if any, should be 1687 whitespace. 1688 1689 If the first non-whitespace characters on the line are not numeric, 1690 the line is ignored. (Just like a comment.) 1691 1692 # This is an ordinary comment. 1693 # 42-6 "new_file_name" # New logical file name 1694 # This is logical line # 36. 1695 This feature is deprecated, and may disappear from future versions 1696 of `as'. 1697 1698 1699 File: as.info, Node: Symbol Intro, Next: Statements, Prev: Comments, Up: Syntax 1700 1701 3.4 Symbols 1702 =========== 1703 1704 A "symbol" is one or more characters chosen from the set of all letters 1705 (both upper and lower case), digits and the three characters `_.$'. On 1706 most machines, you can also use `$' in symbol names; exceptions are 1707 noted in *note Machine Dependencies::. No symbol may begin with a 1708 digit. Case is significant. There is no length limit: all characters 1709 are significant. Symbols are delimited by characters not in that set, 1710 or by the beginning of a file (since the source program must end with a 1711 newline, the end of a file is not a possible symbol delimiter). *Note 1712 Symbols::. 1713 1714 1715 File: as.info, Node: Statements, Next: Constants, Prev: Symbol Intro, Up: Syntax 1716 1717 3.5 Statements 1718 ============== 1719 1720 A "statement" ends at a newline character (`\n') or line separator 1721 character. (The line separator is usually `;', unless this conflicts 1722 with the comment character; see *note Machine Dependencies::.) The 1723 newline or separator character is considered part of the preceding 1724 statement. Newlines and separators within character constants are an 1725 exception: they do not end statements. 1726 1727 It is an error to end any statement with end-of-file: the last 1728 character of any input file should be a newline. 1729 1730 An empty statement is allowed, and may include whitespace. It is 1731 ignored. 1732 1733 A statement begins with zero or more labels, optionally followed by a 1734 key symbol which determines what kind of statement it is. The key 1735 symbol determines the syntax of the rest of the statement. If the 1736 symbol begins with a dot `.' then the statement is an assembler 1737 directive: typically valid for any computer. If the symbol begins with 1738 a letter the statement is an assembly language "instruction": it 1739 assembles into a machine language instruction. Different versions of 1740 `as' for different computers recognize different instructions. In 1741 fact, the same symbol may represent a different instruction in a 1742 different computer's assembly language. 1743 1744 A label is a symbol immediately followed by a colon (`:'). 1745 Whitespace before a label or after a colon is permitted, but you may not 1746 have whitespace between a label's symbol and its colon. *Note Labels::. 1747 1748 For HPPA targets, labels need not be immediately followed by a 1749 colon, but the definition of a label must begin in column zero. This 1750 also implies that only one label may be defined on each line. 1751 1752 label: .directive followed by something 1753 another_label: # This is an empty statement. 1754 instruction operand_1, operand_2, ... 1755 1756 1757 File: as.info, Node: Constants, Prev: Statements, Up: Syntax 1758 1759 3.6 Constants 1760 ============= 1761 1762 A constant is a number, written so that its value is known by 1763 inspection, without knowing any context. Like this: 1764 .byte 74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value. 1765 .ascii "Ring the bell\7" # A string constant. 1766 .octa 0x123456789abcdef0123456789ABCDEF0 # A bignum. 1767 .float 0f-314159265358979323846264338327\ 1768 95028841971.693993751E-40 # - pi, a flonum. 1769 1770 * Menu: 1771 1772 * Characters:: Character Constants 1773 * Numbers:: Number Constants 1774 1775 1776 File: as.info, Node: Characters, Next: Numbers, Up: Constants 1777 1778 3.6.1 Character Constants 1779 ------------------------- 1780 1781 There are two kinds of character constants. A "character" stands for 1782 one character in one byte and its value may be used in numeric 1783 expressions. String constants (properly called string _literals_) are 1784 potentially many bytes and their values may not be used in arithmetic 1785 expressions. 1786 1787 * Menu: 1788 1789 * Strings:: Strings 1790 * Chars:: Characters 1791 1792 1793 File: as.info, Node: Strings, Next: Chars, Up: Characters 1794 1795 3.6.1.1 Strings 1796 ............... 1797 1798 A "string" is written between double-quotes. It may contain 1799 double-quotes or null characters. The way to get special characters 1800 into a string is to "escape" these characters: precede them with a 1801 backslash `\' character. For example `\\' represents one backslash: 1802 the first `\' is an escape which tells `as' to interpret the second 1803 character literally as a backslash (which prevents `as' from 1804 recognizing the second `\' as an escape character). The complete list 1805 of escapes follows. 1806 1807 `\b' 1808 Mnemonic for backspace; for ASCII this is octal code 010. 1809 1810 `\f' 1811 Mnemonic for FormFeed; for ASCII this is octal code 014. 1812 1813 `\n' 1814 Mnemonic for newline; for ASCII this is octal code 012. 1815 1816 `\r' 1817 Mnemonic for carriage-Return; for ASCII this is octal code 015. 1818 1819 `\t' 1820 Mnemonic for horizontal Tab; for ASCII this is octal code 011. 1821 1822 `\ DIGIT DIGIT DIGIT' 1823 An octal character code. The numeric code is 3 octal digits. For 1824 compatibility with other Unix systems, 8 and 9 are accepted as 1825 digits: for example, `\008' has the value 010, and `\009' the 1826 value 011. 1827 1828 `\`x' HEX-DIGITS...' 1829 A hex character code. All trailing hex digits are combined. 1830 Either upper or lower case `x' works. 1831 1832 `\\' 1833 Represents one `\' character. 1834 1835 `\"' 1836 Represents one `"' character. Needed in strings to represent this 1837 character, because an unescaped `"' would end the string. 1838 1839 `\ ANYTHING-ELSE' 1840 Any other character when escaped by `\' gives a warning, but 1841 assembles as if the `\' was not present. The idea is that if you 1842 used an escape sequence you clearly didn't want the literal 1843 interpretation of the following character. However `as' has no 1844 other interpretation, so `as' knows it is giving you the wrong 1845 code and warns you of the fact. 1846 1847 Which characters are escapable, and what those escapes represent, 1848 varies widely among assemblers. The current set is what we think the 1849 BSD 4.2 assembler recognizes, and is a subset of what most C compilers 1850 recognize. If you are in doubt, do not use an escape sequence. 1851 1852 1853 File: as.info, Node: Chars, Prev: Strings, Up: Characters 1854 1855 3.6.1.2 Characters 1856 .................. 1857 1858 A single character may be written as a single quote immediately 1859 followed by that character. The same escapes apply to characters as to 1860 strings. So if you want to write the character backslash, you must 1861 write `'\\' where the first `\' escapes the second `\'. As you can 1862 see, the quote is an acute accent, not a grave accent. A newline 1863 immediately following an acute accent is taken as a literal character 1864 and does not count as the end of a statement. The value of a character 1865 constant in a numeric expression is the machine's byte-wide code for 1866 that character. `as' assumes your character code is ASCII: `'A' means 1867 65, `'B' means 66, and so on. 1868 1869 1870 File: as.info, Node: Numbers, Prev: Characters, Up: Constants 1871 1872 3.6.2 Number Constants 1873 ---------------------- 1874 1875 `as' distinguishes three kinds of numbers according to how they are 1876 stored in the target machine. _Integers_ are numbers that would fit 1877 into an `int' in the C language. _Bignums_ are integers, but they are 1878 stored in more than 32 bits. _Flonums_ are floating point numbers, 1879 described below. 1880 1881 * Menu: 1882 1883 * Integers:: Integers 1884 * Bignums:: Bignums 1885 * Flonums:: Flonums 1886 1887 1888 File: as.info, Node: Integers, Next: Bignums, Up: Numbers 1889 1890 3.6.2.1 Integers 1891 ................ 1892 1893 A binary integer is `0b' or `0B' followed by zero or more of the binary 1894 digits `01'. 1895 1896 An octal integer is `0' followed by zero or more of the octal digits 1897 (`01234567'). 1898 1899 A decimal integer starts with a non-zero digit followed by zero or 1900 more digits (`0123456789'). 1901 1902 A hexadecimal integer is `0x' or `0X' followed by one or more 1903 hexadecimal digits chosen from `0123456789abcdefABCDEF'. 1904 1905 Integers have the usual values. To denote a negative integer, use 1906 the prefix operator `-' discussed under expressions (*note Prefix 1907 Operators: Prefix Ops.). 1908 1909 1910 File: as.info, Node: Bignums, Next: Flonums, Prev: Integers, Up: Numbers 1911 1912 3.6.2.2 Bignums 1913 ............... 1914 1915 A "bignum" has the same syntax and semantics as an integer except that 1916 the number (or its negative) takes more than 32 bits to represent in 1917 binary. The distinction is made because in some places integers are 1918 permitted while bignums are not. 1919 1920 1921 File: as.info, Node: Flonums, Prev: Bignums, Up: Numbers 1922 1923 3.6.2.3 Flonums 1924 ............... 1925 1926 A "flonum" represents a floating point number. The translation is 1927 indirect: a decimal floating point number from the text is converted by 1928 `as' to a generic binary floating point number of more than sufficient 1929 precision. This generic floating point number is converted to a 1930 particular computer's floating point format (or formats) by a portion 1931 of `as' specialized to that computer. 1932 1933 A flonum is written by writing (in order) 1934 * The digit `0'. (`0' is optional on the HPPA.) 1935 1936 * A letter, to tell `as' the rest of the number is a flonum. `e' is 1937 recommended. Case is not important. 1938 1939 On the H8/300, Renesas / SuperH SH, and AMD 29K architectures, the 1940 letter must be one of the letters `DFPRSX' (in upper or lower 1941 case). 1942 1943 On the ARC, the letter must be one of the letters `DFRS' (in upper 1944 or lower case). 1945 1946 On the Intel 960 architecture, the letter must be one of the 1947 letters `DFT' (in upper or lower case). 1948 1949 On the HPPA architecture, the letter must be `E' (upper case only). 1950 1951 * An optional sign: either `+' or `-'. 1952 1953 * An optional "integer part": zero or more decimal digits. 1954 1955 * An optional "fractional part": `.' followed by zero or more 1956 decimal digits. 1957 1958 * An optional exponent, consisting of: 1959 1960 * An `E' or `e'. 1961 1962 * Optional sign: either `+' or `-'. 1963 1964 * One or more decimal digits. 1965 1966 1967 At least one of the integer part or the fractional part must be 1968 present. The floating point number has the usual base-10 value. 1969 1970 `as' does all processing using integers. Flonums are computed 1971 independently of any floating point hardware in the computer running 1972 `as'. 1973 1974 1975 File: as.info, Node: Sections, Next: Symbols, Prev: Syntax, Up: Top 1976 1977 4 Sections and Relocation 1978 ************************* 1979 1980 * Menu: 1981 1982 * Secs Background:: Background 1983 * Ld Sections:: Linker Sections 1984 * As Sections:: Assembler Internal Sections 1985 * Sub-Sections:: Sub-Sections 1986 * bss:: bss Section 1987 1988 1989 File: as.info, Node: Secs Background, Next: Ld Sections, Up: Sections 1990 1991 4.1 Background 1992 ============== 1993 1994 Roughly, a section is a range of addresses, with no gaps; all data "in" 1995 those addresses is treated the same for some particular purpose. For 1996 example there may be a "read only" section. 1997 1998 The linker `ld' reads many object files (partial programs) and 1999 combines their contents to form a runnable program. When `as' emits an 2000 object file, the partial program is assumed to start at address 0. 2001 `ld' assigns the final addresses for the partial program, so that 2002 different partial programs do not overlap. This is actually an 2003 oversimplification, but it suffices to explain how `as' uses sections. 2004 2005 `ld' moves blocks of bytes of your program to their run-time 2006 addresses. These blocks slide to their run-time addresses as rigid 2007 units; their length does not change and neither does the order of bytes 2008 within them. Such a rigid unit is called a _section_. Assigning 2009 run-time addresses to sections is called "relocation". It includes the 2010 task of adjusting mentions of object-file addresses so they refer to 2011 the proper run-time addresses. For the H8/300, and for the Renesas / 2012 SuperH SH, `as' pads sections if needed to ensure they end on a word 2013 (sixteen bit) boundary. 2014 2015 An object file written by `as' has at least three sections, any of 2016 which may be empty. These are named "text", "data" and "bss" sections. 2017 2018 When it generates COFF or ELF output, `as' can also generate 2019 whatever other named sections you specify using the `.section' 2020 directive (*note `.section': Section.). If you do not use any 2021 directives that place output in the `.text' or `.data' sections, these 2022 sections still exist, but are empty. 2023 2024 When `as' generates SOM or ELF output for the HPPA, `as' can also 2025 generate whatever other named sections you specify using the `.space' 2026 and `.subspace' directives. See `HP9000 Series 800 Assembly Language 2027 Reference Manual' (HP 92432-90001) for details on the `.space' and 2028 `.subspace' assembler directives. 2029 2030 Additionally, `as' uses different names for the standard text, data, 2031 and bss sections when generating SOM output. Program text is placed 2032 into the `$CODE$' section, data into `$DATA$', and BSS into `$BSS$'. 2033 2034 Within the object file, the text section starts at address `0', the 2035 data section follows, and the bss section follows the data section. 2036 2037 When generating either SOM or ELF output files on the HPPA, the text 2038 section starts at address `0', the data section at address `0x4000000', 2039 and the bss section follows the data section. 2040 2041 To let `ld' know which data changes when the sections are relocated, 2042 and how to change that data, `as' also writes to the object file 2043 details of the relocation needed. To perform relocation `ld' must 2044 know, each time an address in the object file is mentioned: 2045 * Where in the object file is the beginning of this reference to an 2046 address? 2047 2048 * How long (in bytes) is this reference? 2049 2050 * Which section does the address refer to? What is the numeric 2051 value of 2052 (ADDRESS) - (START-ADDRESS OF SECTION)? 2053 2054 * Is the reference to an address "Program-Counter relative"? 2055 2056 In fact, every address `as' ever uses is expressed as 2057 (SECTION) + (OFFSET INTO SECTION) 2058 Further, most expressions `as' computes have this section-relative 2059 nature. (For some object formats, such as SOM for the HPPA, some 2060 expressions are symbol-relative instead.) 2061 2062 In this manual we use the notation {SECNAME N} to mean "offset N 2063 into section SECNAME." 2064 2065 Apart from text, data and bss sections you need to know about the 2066 "absolute" section. When `ld' mixes partial programs, addresses in the 2067 absolute section remain unchanged. For example, address `{absolute 0}' 2068 is "relocated" to run-time address 0 by `ld'. Although the linker 2069 never arranges two partial programs' data sections with overlapping 2070 addresses after linking, _by definition_ their absolute sections must 2071 overlap. Address `{absolute 239}' in one part of a program is always 2072 the same address when the program is running as address `{absolute 2073 239}' in any other part of the program. 2074 2075 The idea of sections is extended to the "undefined" section. Any 2076 address whose section is unknown at assembly time is by definition 2077 rendered {undefined U}--where U is filled in later. Since numbers are 2078 always defined, the only way to generate an undefined address is to 2079 mention an undefined symbol. A reference to a named common block would 2080 be such a symbol: its value is unknown at assembly time so it has 2081 section _undefined_. 2082 2083 By analogy the word _section_ is used to describe groups of sections 2084 in the linked program. `ld' puts all partial programs' text sections 2085 in contiguous addresses in the linked program. It is customary to 2086 refer to the _text section_ of a program, meaning all the addresses of 2087 all partial programs' text sections. Likewise for data and bss 2088 sections. 2089 2090 Some sections are manipulated by `ld'; others are invented for use 2091 of `as' and have no meaning except during assembly. 2092 2093 2094 File: as.info, Node: Ld Sections, Next: As Sections, Prev: Secs Background, Up: Sections 2095 2096 4.2 Linker Sections 2097 =================== 2098 2099 `ld' deals with just four kinds of sections, summarized below. 2100 2101 *named sections* 2102 *text section* 2103 *data section* 2104 These sections hold your program. `as' and `ld' treat them as 2105 separate but equal sections. Anything you can say of one section 2106 is true of another. When the program is running, however, it is 2107 customary for the text section to be unalterable. The text 2108 section is often shared among processes: it contains instructions, 2109 constants and the like. The data section of a running program is 2110 usually alterable: for example, C variables would be stored in the 2111 data section. 2112 2113 *bss section* 2114 This section contains zeroed bytes when your program begins 2115 running. It is used to hold uninitialized variables or common 2116 storage. The length of each partial program's bss section is 2117 important, but because it starts out containing zeroed bytes there 2118 is no need to store explicit zero bytes in the object file. The 2119 bss section was invented to eliminate those explicit zeros from 2120 object files. 2121 2122 *absolute section* 2123 Address 0 of this section is always "relocated" to runtime address 2124 0. This is useful if you want to refer to an address that `ld' 2125 must not change when relocating. In this sense we speak of 2126 absolute addresses being "unrelocatable": they do not change 2127 during relocation. 2128 2129 *undefined section* 2130 This "section" is a catch-all for address references to objects 2131 not in the preceding sections. 2132 2133 An idealized example of three relocatable sections follows. The 2134 example uses the traditional section names `.text' and `.data'. Memory 2135 addresses are on the horizontal axis. 2136 2137 +-----+----+--+ 2138 partial program # 1: |ttttt|dddd|00| 2139 +-----+----+--+ 2140 2141 text data bss 2142 seg. seg. seg. 2143 2144 +---+---+---+ 2145 partial program # 2: |TTT|DDD|000| 2146 +---+---+---+ 2147 2148 +--+---+-----+--+----+---+-----+~~ 2149 linked program: | |TTT|ttttt| |dddd|DDD|00000| 2150 +--+---+-----+--+----+---+-----+~~ 2151 2152 addresses: 0 ... 2153 2154 2155 File: as.info, Node: As Sections, Next: Sub-Sections, Prev: Ld Sections, Up: Sections 2156 2157 4.3 Assembler Internal Sections 2158 =============================== 2159 2160 These sections are meant only for the internal use of `as'. They have 2161 no meaning at run-time. You do not really need to know about these 2162 sections for most purposes; but they can be mentioned in `as' warning 2163 messages, so it might be helpful to have an idea of their meanings to 2164 `as'. These sections are used to permit the value of every expression 2165 in your assembly language program to be a section-relative address. 2166 2167 ASSEMBLER-INTERNAL-LOGIC-ERROR! 2168 An internal assembler logic error has been found. This means 2169 there is a bug in the assembler. 2170 2171 expr section 2172 The assembler stores complex expression internally as combinations 2173 of symbols. When it needs to represent an expression as a symbol, 2174 it puts it in the expr section. 2175 2176 2177 File: as.info, Node: Sub-Sections, Next: bss, Prev: As Sections, Up: Sections 2178 2179 4.4 Sub-Sections 2180 ================ 2181 2182 Assembled bytes conventionally fall into two sections: text and data. 2183 You may have separate groups of data in named sections that you want to 2184 end up near to each other in the object file, even though they are not 2185 contiguous in the assembler source. `as' allows you to use 2186 "subsections" for this purpose. Within each section, there can be 2187 numbered subsections with values from 0 to 8192. Objects assembled 2188 into the same subsection go into the object file together with other 2189 objects in the same subsection. For example, a compiler might want to 2190 store constants in the text section, but might not want to have them 2191 interspersed with the program being assembled. In this case, the 2192 compiler could issue a `.text 0' before each section of code being 2193 output, and a `.text 1' before each group of constants being output. 2194 2195 Subsections are optional. If you do not use subsections, everything 2196 goes in subsection number zero. 2197 2198 Each subsection is zero-padded up to a multiple of four bytes. 2199 (Subsections may be padded a different amount on different flavors of 2200 `as'.) 2201 2202 Subsections appear in your object file in numeric order, lowest 2203 numbered to highest. (All this to be compatible with other people's 2204 assemblers.) The object file contains no representation of 2205 subsections; `ld' and other programs that manipulate object files see 2206 no trace of them. They just see all your text subsections as a text 2207 section, and all your data subsections as a data section. 2208 2209 To specify which subsection you want subsequent statements assembled 2210 into, use a numeric argument to specify it, in a `.text EXPRESSION' or 2211 a `.data EXPRESSION' statement. When generating COFF output, you can 2212 also use an extra subsection argument with arbitrary named sections: 2213 `.section NAME, EXPRESSION'. When generating ELF output, you can also 2214 use the `.subsection' directive (*note SubSection::) to specify a 2215 subsection: `.subsection EXPRESSION'. EXPRESSION should be an absolute 2216 expression (*note Expressions::). If you just say `.text' then `.text 2217 0' is assumed. Likewise `.data' means `.data 0'. Assembly begins in 2218 `text 0'. For instance: 2219 .text 0 # The default subsection is text 0 anyway. 2220 .ascii "This lives in the first text subsection. *" 2221 .text 1 2222 .ascii "But this lives in the second text subsection." 2223 .data 0 2224 .ascii "This lives in the data section," 2225 .ascii "in the first data subsection." 2226 .text 0 2227 .ascii "This lives in the first text section," 2228 .ascii "immediately following the asterisk (*)." 2229 2230 Each section has a "location counter" incremented by one for every 2231 byte assembled into that section. Because subsections are merely a 2232 convenience restricted to `as' there is no concept of a subsection 2233 location counter. There is no way to directly manipulate a location 2234 counter--but the `.align' directive changes it, and any label 2235 definition captures its current value. The location counter of the 2236 section where statements are being assembled is said to be the "active" 2237 location counter. 2238 2239 2240 File: as.info, Node: bss, Prev: Sub-Sections, Up: Sections 2241 2242 4.5 bss Section 2243 =============== 2244 2245 The bss section is used for local common variable storage. You may 2246 allocate address space in the bss section, but you may not dictate data 2247 to load into it before your program executes. When your program starts 2248 running, all the contents of the bss section are zeroed bytes. 2249 2250 The `.lcomm' pseudo-op defines a symbol in the bss section; see 2251 *note `.lcomm': Lcomm. 2252 2253 The `.comm' pseudo-op may be used to declare a common symbol, which 2254 is another form of uninitialized symbol; see *note `.comm': Comm. 2255 2256 When assembling for a target which supports multiple sections, such 2257 as ELF or COFF, you may switch into the `.bss' section and define 2258 symbols as usual; see *note `.section': Section. You may only assemble 2259 zero values into the section. Typically the section will only contain 2260 symbol definitions and `.skip' directives (*note `.skip': Skip.). 2261 2262 2263 File: as.info, Node: Symbols, Next: Expressions, Prev: Sections, Up: Top 2264 2265 5 Symbols 2266 ********* 2267 2268 Symbols are a central concept: the programmer uses symbols to name 2269 things, the linker uses symbols to link, and the debugger uses symbols 2270 to debug. 2271 2272 _Warning:_ `as' does not place symbols in the object file in the 2273 same order they were declared. This may break some debuggers. 2274 2275 * Menu: 2276 2277 * Labels:: Labels 2278 * Setting Symbols:: Giving Symbols Other Values 2279 * Symbol Names:: Symbol Names 2280 * Dot:: The Special Dot Symbol 2281 * Symbol Attributes:: Symbol Attributes 2282 2283 2284 File: as.info, Node: Labels, Next: Setting Symbols, Up: Symbols 2285 2286 5.1 Labels 2287 ========== 2288 2289 A "label" is written as a symbol immediately followed by a colon `:'. 2290 The symbol then represents the current value of the active location 2291 counter, and is, for example, a suitable instruction operand. You are 2292 warned if you use the same symbol to represent two different locations: 2293 the first definition overrides any other definitions. 2294 2295 On the HPPA, the usual form for a label need not be immediately 2296 followed by a colon, but instead must start in column zero. Only one 2297 label may be defined on a single line. To work around this, the HPPA 2298 version of `as' also provides a special directive `.label' for defining 2299 labels more flexibly. 2300 2301 2302 File: as.info, Node: Setting Symbols, Next: Symbol Names, Prev: Labels, Up: Symbols 2303 2304 5.2 Giving Symbols Other Values 2305 =============================== 2306 2307 A symbol can be given an arbitrary value by writing a symbol, followed 2308 by an equals sign `=', followed by an expression (*note Expressions::). 2309 This is equivalent to using the `.set' directive. *Note `.set': Set. 2310 In the same way, using a double equals sign `='`=' here represents an 2311 equivalent of the `.eqv' directive. *Note `.eqv': Eqv. 2312 2313 2314 File: as.info, Node: Symbol Names, Next: Dot, Prev: Setting Symbols, Up: Symbols 2315 2316 5.3 Symbol Names 2317 ================ 2318 2319 Symbol names begin with a letter or with one of `._'. On most 2320 machines, you can also use `$' in symbol names; exceptions are noted in 2321 *note Machine Dependencies::. That character may be followed by any 2322 string of digits, letters, dollar signs (unless otherwise noted for a 2323 particular target machine), and underscores. 2324 2325 Case of letters is significant: `foo' is a different symbol name than 2326 `Foo'. 2327 2328 Each symbol has exactly one name. Each name in an assembly language 2329 program refers to exactly one symbol. You may use that symbol name any 2330 number of times in a program. 2331 2332 Local Symbol Names 2333 ------------------ 2334 2335 A local symbol is any symbol beginning with certain local label 2336 prefixes. By default, the local label prefix is `.L' for ELF systems or 2337 `L' for traditional a.out systems, but each target may have its own set 2338 of local label prefixes. On the HPPA local symbols begin with `L$'. 2339 2340 Local symbols are defined and used within the assembler, but they are 2341 normally not saved in object files. Thus, they are not visible when 2342 debugging. You may use the `-L' option (*note Include Local Symbols: 2343 `-L': L.) to retain the local symbols in the object files. 2344 2345 Local Labels 2346 ------------ 2347 2348 Local labels help compilers and programmers use names temporarily. 2349 They create symbols which are guaranteed to be unique over the entire 2350 scope of the input source code and which can be referred to by a simple 2351 notation. To define a local label, write a label of the form `N:' 2352 (where N represents any positive integer). To refer to the most recent 2353 previous definition of that label write `Nb', using the same number as 2354 when you defined the label. To refer to the next definition of a local 2355 label, write `Nf'--the `b' stands for "backwards" and the `f' stands 2356 for "forwards". 2357 2358 There is no restriction on how you can use these labels, and you can 2359 reuse them too. So that it is possible to repeatedly define the same 2360 local label (using the same number `N'), although you can only refer to 2361 the most recently defined local label of that number (for a backwards 2362 reference) or the next definition of a specific local label for a 2363 forward reference. It is also worth noting that the first 10 local 2364 labels (`0:'...`9:') are implemented in a slightly more efficient 2365 manner than the others. 2366 2367 Here is an example: 2368 2369 1: branch 1f 2370 2: branch 1b 2371 1: branch 2f 2372 2: branch 1b 2373 2374 Which is the equivalent of: 2375 2376 label_1: branch label_3 2377 label_2: branch label_1 2378 label_3: branch label_4 2379 label_4: branch label_3 2380 2381 Local label names are only a notational device. They are immediately 2382 transformed into more conventional symbol names before the assembler 2383 uses them. The symbol names are stored in the symbol table, appear in 2384 error messages, and are optionally emitted to the object file. The 2385 names are constructed using these parts: 2386 2387 `_local label prefix_' 2388 All local symbols begin with the system-specific local label 2389 prefix. Normally both `as' and `ld' forget symbols that start 2390 with the local label prefix. These labels are used for symbols 2391 you are never intended to see. If you use the `-L' option then 2392 `as' retains these symbols in the object file. If you also 2393 instruct `ld' to retain these symbols, you may use them in 2394 debugging. 2395 2396 `NUMBER' 2397 This is the number that was used in the local label definition. 2398 So if the label is written `55:' then the number is `55'. 2399 2400 `C-B' 2401 This unusual character is included so you do not accidentally 2402 invent a symbol of the same name. The character has ASCII value 2403 of `\002' (control-B). 2404 2405 `_ordinal number_' 2406 This is a serial number to keep the labels distinct. The first 2407 definition of `0:' gets the number `1'. The 15th definition of 2408 `0:' gets the number `15', and so on. Likewise the first 2409 definition of `1:' gets the number `1' and its 15th definition 2410 gets `15' as well. 2411 2412 So for example, the first `1:' may be named `.L1C-B1', and the 44th 2413 `3:' may be named `.L3C-B44'. 2414 2415 Dollar Local Labels 2416 ------------------- 2417 2418 `as' also supports an even more local form of local labels called 2419 dollar labels. These labels go out of scope (i.e., they become 2420 undefined) as soon as a non-local label is defined. Thus they remain 2421 valid for only a small region of the input source code. Normal local 2422 labels, by contrast, remain in scope for the entire file, or until they 2423 are redefined by another occurrence of the same local label. 2424 2425 Dollar labels are defined in exactly the same way as ordinary local 2426 labels, except that instead of being terminated by a colon, they are 2427 terminated by a dollar sign, e.g., `55$'. 2428 2429 They can also be distinguished from ordinary local labels by their 2430 transformed names which use ASCII character `\001' (control-A) as the 2431 magic character to distinguish them from ordinary labels. For example, 2432 the fifth definition of `6$' may be named `.L6C-A5'. 2433 2434 2435 File: as.info, Node: Dot, Next: Symbol Attributes, Prev: Symbol Names, Up: Symbols 2436 2437 5.4 The Special Dot Symbol 2438 ========================== 2439 2440 The special symbol `.' refers to the current address that `as' is 2441 assembling into. Thus, the expression `melvin: .long .' defines 2442 `melvin' to contain its own address. Assigning a value to `.' is 2443 treated the same as a `.org' directive. Thus, the expression `.=.+4' 2444 is the same as saying `.space 4'. 2445 2446 2447 File: as.info, Node: Symbol Attributes, Prev: Dot, Up: Symbols 2448 2449 5.5 Symbol Attributes 2450 ===================== 2451 2452 Every symbol has, as well as its name, the attributes "Value" and 2453 "Type". Depending on output format, symbols can also have auxiliary 2454 attributes. 2455 2456 If you use a symbol without defining it, `as' assumes zero for all 2457 these attributes, and probably won't warn you. This makes the symbol 2458 an externally defined symbol, which is generally what you would want. 2459 2460 * Menu: 2461 2462 * Symbol Value:: Value 2463 * Symbol Type:: Type 2464 2465 2466 * a.out Symbols:: Symbol Attributes: `a.out' 2467 2468 * COFF Symbols:: Symbol Attributes for COFF 2469 2470 * SOM Symbols:: Symbol Attributes for SOM 2471 2472 2473 File: as.info, Node: Symbol Value, Next: Symbol Type, Up: Symbol Attributes 2474 2475 5.5.1 Value 2476 ----------- 2477 2478 The value of a symbol is (usually) 32 bits. For a symbol which labels a 2479 location in the text, data, bss or absolute sections the value is the 2480 number of addresses from the start of that section to the label. 2481 Naturally for text, data and bss sections the value of a symbol changes 2482 as `ld' changes section base addresses during linking. Absolute 2483 symbols' values do not change during linking: that is why they are 2484 called absolute. 2485 2486 The value of an undefined symbol is treated in a special way. If it 2487 is 0 then the symbol is not defined in this assembler source file, and 2488 `ld' tries to determine its value from other files linked into the same 2489 program. You make this kind of symbol simply by mentioning a symbol 2490 name without defining it. A non-zero value represents a `.comm' common 2491 declaration. The value is how much common storage to reserve, in bytes 2492 (addresses). The symbol refers to the first address of the allocated 2493 storage. 2494 2495 2496 File: as.info, Node: Symbol Type, Next: a.out Symbols, Prev: Symbol Value, Up: Symbol Attributes 2497 2498 5.5.2 Type 2499 ---------- 2500 2501 The type attribute of a symbol contains relocation (section) 2502 information, any flag settings indicating that a symbol is external, and 2503 (optionally), other information for linkers and debuggers. The exact 2504 format depends on the object-code output format in use. 2505 2506 2507 File: as.info, Node: a.out Symbols, Next: COFF Symbols, Prev: Symbol Type, Up: Symbol Attributes 2508 2509 5.5.3 Symbol Attributes: `a.out' 2510 -------------------------------- 2511 2512 * Menu: 2513 2514 * Symbol Desc:: Descriptor 2515 * Symbol Other:: Other 2516 2517 2518 File: as.info, Node: Symbol Desc, Next: Symbol Other, Up: a.out Symbols 2519 2520 5.5.3.1 Descriptor 2521 .................. 2522 2523 This is an arbitrary 16-bit value. You may establish a symbol's 2524 descriptor value by using a `.desc' statement (*note `.desc': Desc.). 2525 A descriptor value means nothing to `as'. 2526 2527 2528 File: as.info, Node: Symbol Other, Prev: Symbol Desc, Up: a.out Symbols 2529 2530 5.5.3.2 Other 2531 ............. 2532 2533 This is an arbitrary 8-bit value. It means nothing to `as'. 2534 2535 2536 File: as.info, Node: COFF Symbols, Next: SOM Symbols, Prev: a.out Symbols, Up: Symbol Attributes 2537 2538 5.5.4 Symbol Attributes for COFF 2539 -------------------------------- 2540 2541 The COFF format supports a multitude of auxiliary symbol attributes; 2542 like the primary symbol attributes, they are set between `.def' and 2543 `.endef' directives. 2544 2545 5.5.4.1 Primary Attributes 2546 .......................... 2547 2548 The symbol name is set with `.def'; the value and type, respectively, 2549 with `.val' and `.type'. 2550 2551 5.5.4.2 Auxiliary Attributes 2552 ............................ 2553 2554 The `as' directives `.dim', `.line', `.scl', `.size', `.tag', and 2555 `.weak' can generate auxiliary symbol table information for COFF. 2556 2557 2558 File: as.info, Node: SOM Symbols, Prev: COFF Symbols, Up: Symbol Attributes 2559 2560 5.5.5 Symbol Attributes for SOM 2561 ------------------------------- 2562 2563 The SOM format for the HPPA supports a multitude of symbol attributes 2564 set with the `.EXPORT' and `.IMPORT' directives. 2565 2566 The attributes are described in `HP9000 Series 800 Assembly Language 2567 Reference Manual' (HP 92432-90001) under the `IMPORT' and `EXPORT' 2568 assembler directive documentation. 2569 2570 2571 File: as.info, Node: Expressions, Next: Pseudo Ops, Prev: Symbols, Up: Top 2572 2573 6 Expressions 2574 ************* 2575 2576 An "expression" specifies an address or numeric value. Whitespace may 2577 precede and/or follow an expression. 2578 2579 The result of an expression must be an absolute number, or else an 2580 offset into a particular section. If an expression is not absolute, 2581 and there is not enough information when `as' sees the expression to 2582 know its section, a second pass over the source program might be 2583 necessary to interpret the expression--but the second pass is currently 2584 not implemented. `as' aborts with an error message in this situation. 2585 2586 * Menu: 2587 2588 * Empty Exprs:: Empty Expressions 2589 * Integer Exprs:: Integer Expressions 2590 2591 2592 File: as.info, Node: Empty Exprs, Next: Integer Exprs, Up: Expressions 2593 2594 6.1 Empty Expressions 2595 ===================== 2596 2597 An empty expression has no value: it is just whitespace or null. 2598 Wherever an absolute expression is required, you may omit the 2599 expression, and `as' assumes a value of (absolute) 0. This is 2600 compatible with other assemblers. 2601 2602 2603 File: as.info, Node: Integer Exprs, Prev: Empty Exprs, Up: Expressions 2604 2605 6.2 Integer Expressions 2606 ======================= 2607 2608 An "integer expression" is one or more _arguments_ delimited by 2609 _operators_. 2610 2611 * Menu: 2612 2613 * Arguments:: Arguments 2614 * Operators:: Operators 2615 * Prefix Ops:: Prefix Operators 2616 * Infix Ops:: Infix Operators 2617 2618 2619 File: as.info, Node: Arguments, Next: Operators, Up: Integer Exprs 2620 2621 6.2.1 Arguments 2622 --------------- 2623 2624 "Arguments" are symbols, numbers or subexpressions. In other contexts 2625 arguments are sometimes called "arithmetic operands". In this manual, 2626 to avoid confusing them with the "instruction operands" of the machine 2627 language, we use the term "argument" to refer to parts of expressions 2628 only, reserving the word "operand" to refer only to machine instruction 2629 operands. 2630 2631 Symbols are evaluated to yield {SECTION NNN} where SECTION is one of 2632 text, data, bss, absolute, or undefined. NNN is a signed, 2's 2633 complement 32 bit integer. 2634 2635 Numbers are usually integers. 2636 2637 A number can be a flonum or bignum. In this case, you are warned 2638 that only the low order 32 bits are used, and `as' pretends these 32 2639 bits are an integer. You may write integer-manipulating instructions 2640 that act on exotic constants, compatible with other assemblers. 2641 2642 Subexpressions are a left parenthesis `(' followed by an integer 2643 expression, followed by a right parenthesis `)'; or a prefix operator 2644 followed by an argument. 2645 2646 2647 File: as.info, Node: Operators, Next: Prefix Ops, Prev: Arguments, Up: Integer Exprs 2648 2649 6.2.2 Operators 2650 --------------- 2651 2652 "Operators" are arithmetic functions, like `+' or `%'. Prefix 2653 operators are followed by an argument. Infix operators appear between 2654 their arguments. Operators may be preceded and/or followed by 2655 whitespace. 2656 2657 2658 File: as.info, Node: Prefix Ops, Next: Infix Ops, Prev: Operators, Up: Integer Exprs 2659 2660 6.2.3 Prefix Operator 2661 --------------------- 2662 2663 `as' has the following "prefix operators". They each take one 2664 argument, which must be absolute. 2665 2666 `-' 2667 "Negation". Two's complement negation. 2668 2669 `~' 2670 "Complementation". Bitwise not. 2671 2672 2673 File: as.info, Node: Infix Ops, Prev: Prefix Ops, Up: Integer Exprs 2674 2675 6.2.4 Infix Operators 2676 --------------------- 2677 2678 "Infix operators" take two arguments, one on either side. Operators 2679 have precedence, but operations with equal precedence are performed left 2680 to right. Apart from `+' or `-', both arguments must be absolute, and 2681 the result is absolute. 2682 2683 1. Highest Precedence 2684 2685 `*' 2686 "Multiplication". 2687 2688 `/' 2689 "Division". Truncation is the same as the C operator `/' 2690 2691 `%' 2692 "Remainder". 2693 2694 `<<' 2695 "Shift Left". Same as the C operator `<<'. 2696 2697 `>>' 2698 "Shift Right". Same as the C operator `>>'. 2699 2700 2. Intermediate precedence 2701 2702 `|' 2703 "Bitwise Inclusive Or". 2704 2705 `&' 2706 "Bitwise And". 2707 2708 `^' 2709 "Bitwise Exclusive Or". 2710 2711 `!' 2712 "Bitwise Or Not". 2713 2714 3. Low Precedence 2715 2716 `+' 2717 "Addition". If either argument is absolute, the result has 2718 the section of the other argument. You may not add together 2719 arguments from different sections. 2720 2721 `-' 2722 "Subtraction". If the right argument is absolute, the result 2723 has the section of the left argument. If both arguments are 2724 in the same section, the result is absolute. You may not 2725 subtract arguments from different sections. 2726 2727 `==' 2728 "Is Equal To" 2729 2730 `<>' 2731 `!=' 2732 "Is Not Equal To" 2733 2734 `<' 2735 "Is Less Than" 2736 2737 `>' 2738 "Is Greater Than" 2739 2740 `>=' 2741 "Is Greater Than Or Equal To" 2742 2743 `<=' 2744 "Is Less Than Or Equal To" 2745 2746 The comparison operators can be used as infix operators. A 2747 true results has a value of -1 whereas a false result has a 2748 value of 0. Note, these operators perform signed 2749 comparisons. 2750 2751 4. Lowest Precedence 2752 2753 `&&' 2754 "Logical And". 2755 2756 `||' 2757 "Logical Or". 2758 2759 These two logical operations can be used to combine the 2760 results of sub expressions. Note, unlike the comparison 2761 operators a true result returns a value of 1 but a false 2762 results does still return 0. Also note that the logical or 2763 operator has a slightly lower precedence than logical and. 2764 2765 2766 In short, it's only meaningful to add or subtract the _offsets_ in an 2767 address; you can only have a defined section in one of the two 2768 arguments. 2769 2770 2771 File: as.info, Node: Pseudo Ops, Next: Object Attributes, Prev: Expressions, Up: Top 2772 2773 7 Assembler Directives 2774 ********************** 2775 2776 All assembler directives have names that begin with a period (`.'). 2777 The rest of the name is letters, usually in lower case. 2778 2779 This chapter discusses directives that are available regardless of 2780 the target machine configuration for the GNU assembler. Some machine 2781 configurations provide additional directives. *Note Machine 2782 Dependencies::. 2783 2784 * Menu: 2785 2786 * Abort:: `.abort' 2787 2788 * ABORT (COFF):: `.ABORT' 2789 2790 * Align:: `.align ABS-EXPR , ABS-EXPR' 2791 * Altmacro:: `.altmacro' 2792 * Ascii:: `.ascii "STRING"'... 2793 * Asciz:: `.asciz "STRING"'... 2794 * Balign:: `.balign ABS-EXPR , ABS-EXPR' 2795 * Byte:: `.byte EXPRESSIONS' 2796 * Comm:: `.comm SYMBOL , LENGTH ' 2797 2798 * CFI directives:: `.cfi_startproc [simple]', `.cfi_endproc', etc. 2799 2800 * Data:: `.data SUBSECTION' 2801 2802 * Def:: `.def NAME' 2803 2804 * Desc:: `.desc SYMBOL, ABS-EXPRESSION' 2805 2806 * Dim:: `.dim' 2807 2808 * Double:: `.double FLONUMS' 2809 * Eject:: `.eject' 2810 * Else:: `.else' 2811 * Elseif:: `.elseif' 2812 * End:: `.end' 2813 2814 * Endef:: `.endef' 2815 2816 * Endfunc:: `.endfunc' 2817 * Endif:: `.endif' 2818 * Equ:: `.equ SYMBOL, EXPRESSION' 2819 * Equiv:: `.equiv SYMBOL, EXPRESSION' 2820 * Eqv:: `.eqv SYMBOL, EXPRESSION' 2821 * Err:: `.err' 2822 * Error:: `.error STRING' 2823 * Exitm:: `.exitm' 2824 * Extern:: `.extern' 2825 * Fail:: `.fail' 2826 2827 * File:: `.file STRING' 2828 2829 * Fill:: `.fill REPEAT , SIZE , VALUE' 2830 * Float:: `.float FLONUMS' 2831 * Func:: `.func' 2832 * Global:: `.global SYMBOL', `.globl SYMBOL' 2833 2834 * Gnu_attribute:: `.gnu_attribute TAG,VALUE' 2835 * Hidden:: `.hidden NAMES' 2836 2837 * hword:: `.hword EXPRESSIONS' 2838 * Ident:: `.ident' 2839 * If:: `.if ABSOLUTE EXPRESSION' 2840 * Incbin:: `.incbin "FILE"[,SKIP[,COUNT]]' 2841 * Include:: `.include "FILE"' 2842 * Int:: `.int EXPRESSIONS' 2843 2844 * Internal:: `.internal NAMES' 2845 2846 * Irp:: `.irp SYMBOL,VALUES'... 2847 * Irpc:: `.irpc SYMBOL,VALUES'... 2848 * Lcomm:: `.lcomm SYMBOL , LENGTH' 2849 * Lflags:: `.lflags' 2850 2851 * Line:: `.line LINE-NUMBER' 2852 2853 * Linkonce:: `.linkonce [TYPE]' 2854 * List:: `.list' 2855 * Ln:: `.ln LINE-NUMBER' 2856 2857 * LNS directives:: `.file', `.loc', etc. 2858 2859 * Long:: `.long EXPRESSIONS' 2860 2861 * Macro:: `.macro NAME ARGS'... 2862 * MRI:: `.mri VAL' 2863 * Noaltmacro:: `.noaltmacro' 2864 * Nolist:: `.nolist' 2865 * Octa:: `.octa BIGNUMS' 2866 * Org:: `.org NEW-LC, FILL' 2867 * P2align:: `.p2align ABS-EXPR, ABS-EXPR, ABS-EXPR' 2868 2869 * PopSection:: `.popsection' 2870 * Previous:: `.previous' 2871 2872 * Print:: `.print STRING' 2873 2874 * Protected:: `.protected NAMES' 2875 2876 * Psize:: `.psize LINES, COLUMNS' 2877 * Purgem:: `.purgem NAME' 2878 2879 * PushSection:: `.pushsection NAME' 2880 2881 * Quad:: `.quad BIGNUMS' 2882 * Reloc:: `.reloc OFFSET, RELOC_NAME[, EXPRESSION]' 2883 * Rept:: `.rept COUNT' 2884 * Sbttl:: `.sbttl "SUBHEADING"' 2885 2886 * Scl:: `.scl CLASS' 2887 2888 * Section:: `.section NAME[, FLAGS]' 2889 2890 * Set:: `.set SYMBOL, EXPRESSION' 2891 * Short:: `.short EXPRESSIONS' 2892 * Single:: `.single FLONUMS' 2893 2894 * Size:: `.size [NAME , EXPRESSION]' 2895 2896 * Skip:: `.skip SIZE , FILL' 2897 * Sleb128:: `.sleb128 EXPRESSIONS' 2898 * Space:: `.space SIZE , FILL' 2899 2900 * Stab:: `.stabd, .stabn, .stabs' 2901 2902 * String:: `.string "STR"', `.string8 "STR"', `.string16 "STR"', `.string32 "STR"', `.string64 "STR"' 2903 * Struct:: `.struct EXPRESSION' 2904 2905 * SubSection:: `.subsection' 2906 * Symver:: `.symver NAME,NAME2@NODENAME' 2907 2908 2909 * Tag:: `.tag STRUCTNAME' 2910 2911 * Text:: `.text SUBSECTION' 2912 * Title:: `.title "HEADING"' 2913 2914 * Type:: `.type <INT | NAME , TYPE DESCRIPTION>' 2915 2916 * Uleb128:: `.uleb128 EXPRESSIONS' 2917 2918 * Val:: `.val ADDR' 2919 2920 2921 * Version:: `.version "STRING"' 2922 * VTableEntry:: `.vtable_entry TABLE, OFFSET' 2923 * VTableInherit:: `.vtable_inherit CHILD, PARENT' 2924 2925 * Warning:: `.warning STRING' 2926 * Weak:: `.weak NAMES' 2927 * Weakref:: `.weakref ALIAS, SYMBOL' 2928 * Word:: `.word EXPRESSIONS' 2929 * Deprecated:: Deprecated Directives 2930 2931 2932 File: as.info, Node: Abort, Next: ABORT (COFF), Up: Pseudo Ops 2933 2934 7.1 `.abort' 2935 ============ 2936 2937 This directive stops the assembly immediately. It is for compatibility 2938 with other assemblers. The original idea was that the assembly 2939 language source would be piped into the assembler. If the sender of 2940 the source quit, it could use this directive tells `as' to quit also. 2941 One day `.abort' will not be supported. 2942 2943 2944 File: as.info, Node: ABORT (COFF), Next: Align, Prev: Abort, Up: Pseudo Ops 2945 2946 7.2 `.ABORT' (COFF) 2947 =================== 2948 2949 When producing COFF output, `as' accepts this directive as a synonym 2950 for `.abort'. 2951 2952 2953 File: as.info, Node: Align, Next: Altmacro, Prev: ABORT (COFF), Up: Pseudo Ops 2954 2955 7.3 `.align ABS-EXPR, ABS-EXPR, ABS-EXPR' 2956 ========================================= 2957 2958 Pad the location counter (in the current subsection) to a particular 2959 storage boundary. The first expression (which must be absolute) is the 2960 alignment required, as described below. 2961 2962 The second expression (also absolute) gives the fill value to be 2963 stored in the padding bytes. It (and the comma) may be omitted. If it 2964 is omitted, the padding bytes are normally zero. However, on some 2965 systems, if the section is marked as containing code and the fill value 2966 is omitted, the space is filled with no-op instructions. 2967 2968 The third expression is also absolute, and is also optional. If it 2969 is present, it is the maximum number of bytes that should be skipped by 2970 this alignment directive. If doing the alignment would require 2971 skipping more bytes than the specified maximum, then the alignment is 2972 not done at all. You can omit the fill value (the second argument) 2973 entirely by simply using two commas after the required alignment; this 2974 can be useful if you want the alignment to be filled with no-op 2975 instructions when appropriate. 2976 2977 The way the required alignment is specified varies from system to 2978 system. For the arc, hppa, i386 using ELF, i860, iq2000, m68k, or32, 2979 s390, sparc, tic4x, tic80 and xtensa, the first expression is the 2980 alignment request in bytes. For example `.align 8' advances the 2981 location counter until it is a multiple of 8. If the location counter 2982 is already a multiple of 8, no change is needed. For the tic54x, the 2983 first expression is the alignment request in words. 2984 2985 For other systems, including ppc, i386 using a.out format, arm and 2986 strongarm, it is the number of low-order zero bits the location counter 2987 must have after advancement. For example `.align 3' advances the 2988 location counter until it a multiple of 8. If the location counter is 2989 already a multiple of 8, no change is needed. 2990 2991 This inconsistency is due to the different behaviors of the various 2992 native assemblers for these systems which GAS must emulate. GAS also 2993 provides `.balign' and `.p2align' directives, described later, which 2994 have a consistent behavior across all architectures (but are specific 2995 to GAS). 2996 2997 2998 File: as.info, Node: Ascii, Next: Asciz, Prev: Altmacro, Up: Pseudo Ops 2999 3000 7.4 `.ascii "STRING"'... 3001 ======================== 3002 3003 `.ascii' expects zero or more string literals (*note Strings::) 3004 separated by commas. It assembles each string (with no automatic 3005 trailing zero byte) into consecutive addresses. 3006 3007 3008 File: as.info, Node: Asciz, Next: Balign, Prev: Ascii, Up: Pseudo Ops 3009 3010 7.5 `.asciz "STRING"'... 3011 ======================== 3012 3013 `.asciz' is just like `.ascii', but each string is followed by a zero 3014 byte. The "z" in `.asciz' stands for "zero". 3015 3016 3017 File: as.info, Node: Balign, Next: Byte, Prev: Asciz, Up: Pseudo Ops 3018 3019 7.6 `.balign[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR' 3020 ============================================== 3021 3022 Pad the location counter (in the current subsection) to a particular 3023 storage boundary. The first expression (which must be absolute) is the 3024 alignment request in bytes. For example `.balign 8' advances the 3025 location counter until it is a multiple of 8. If the location counter 3026 is already a multiple of 8, no change is needed. 3027 3028 The second expression (also absolute) gives the fill value to be 3029 stored in the padding bytes. It (and the comma) may be omitted. If it 3030 is omitted, the padding bytes are normally zero. However, on some 3031 systems, if the section is marked as containing code and the fill value 3032 is omitted, the space is filled with no-op instructions. 3033 3034 The third expression is also absolute, and is also optional. If it 3035 is present, it is the maximum number of bytes that should be skipped by 3036 this alignment directive. If doing the alignment would require 3037 skipping more bytes than the specified maximum, then the alignment is 3038 not done at all. You can omit the fill value (the second argument) 3039 entirely by simply using two commas after the required alignment; this 3040 can be useful if you want the alignment to be filled with no-op 3041 instructions when appropriate. 3042 3043 The `.balignw' and `.balignl' directives are variants of the 3044 `.balign' directive. The `.balignw' directive treats the fill pattern 3045 as a two byte word value. The `.balignl' directives treats the fill 3046 pattern as a four byte longword value. For example, `.balignw 3047 4,0x368d' will align to a multiple of 4. If it skips two bytes, they 3048 will be filled in with the value 0x368d (the exact placement of the 3049 bytes depends upon the endianness of the processor). If it skips 1 or 3050 3 bytes, the fill value is undefined. 3051 3052 3053 File: as.info, Node: Byte, Next: Comm, Prev: Balign, Up: Pseudo Ops 3054 3055 7.7 `.byte EXPRESSIONS' 3056 ======================= 3057 3058 `.byte' expects zero or more expressions, separated by commas. Each 3059 expression is assembled into the next byte. 3060 3061 3062 File: as.info, Node: Comm, Next: CFI directives, Prev: Byte, Up: Pseudo Ops 3063 3064 7.8 `.comm SYMBOL , LENGTH ' 3065 ============================ 3066 3067 `.comm' declares a common symbol named SYMBOL. When linking, a common 3068 symbol in one object file may be merged with a defined or common symbol 3069 of the same name in another object file. If `ld' does not see a 3070 definition for the symbol-just one or more common symbols-then it will 3071 allocate LENGTH bytes of uninitialized memory. LENGTH must be an 3072 absolute expression. If `ld' sees multiple common symbols with the 3073 same name, and they do not all have the same size, it will allocate 3074 space using the largest size. 3075 3076 When using ELF, the `.comm' directive takes an optional third 3077 argument. This is the desired alignment of the symbol, specified as a 3078 byte boundary (for example, an alignment of 16 means that the least 3079 significant 4 bits of the address should be zero). The alignment must 3080 be an absolute expression, and it must be a power of two. If `ld' 3081 allocates uninitialized memory for the common symbol, it will use the 3082 alignment when placing the symbol. If no alignment is specified, `as' 3083 will set the alignment to the largest power of two less than or equal 3084 to the size of the symbol, up to a maximum of 16. 3085 3086 The syntax for `.comm' differs slightly on the HPPA. The syntax is 3087 `SYMBOL .comm, LENGTH'; SYMBOL is optional. 3088 3089 3090 File: as.info, Node: CFI directives, Next: Data, Prev: Comm, Up: Pseudo Ops 3091 3092 7.9 `.cfi_startproc [simple]' 3093 ============================= 3094 3095 `.cfi_startproc' is used at the beginning of each function that should 3096 have an entry in `.eh_frame'. It initializes some internal data 3097 structures. Don't forget to close the function by `.cfi_endproc'. 3098 3099 Unless `.cfi_startproc' is used along with parameter `simple' it 3100 also emits some architecture dependent initial CFI instructions. 3101 3102 7.10 `.cfi_endproc' 3103 =================== 3104 3105 `.cfi_endproc' is used at the end of a function where it closes its 3106 unwind entry previously opened by `.cfi_startproc', and emits it to 3107 `.eh_frame'. 3108 3109 7.11 `.cfi_personality ENCODING [, EXP]' 3110 ======================================== 3111 3112 `.cfi_personality' defines personality routine and its encoding. 3113 ENCODING must be a constant determining how the personality should be 3114 encoded. If it is 255 (`DW_EH_PE_omit'), second argument is not 3115 present, otherwise second argument should be a constant or a symbol 3116 name. When using indirect encodings, the symbol provided should be the 3117 location where personality can be loaded from, not the personality 3118 routine itself. The default after `.cfi_startproc' is 3119 `.cfi_personality 0xff', no personality routine. 3120 3121 7.12 `.cfi_lsda ENCODING [, EXP]' 3122 ================================= 3123 3124 `.cfi_lsda' defines LSDA and its encoding. ENCODING must be a constant 3125 determining how the LSDA should be encoded. If it is 255 3126 (`DW_EH_PE_omit'), second argument is not present, otherwise second 3127 argument should be a constant or a symbol name. The default after 3128 `.cfi_startproc' is `.cfi_lsda 0xff', no LSDA. 3129 3130 7.13 `.cfi_def_cfa REGISTER, OFFSET' 3131 ==================================== 3132 3133 `.cfi_def_cfa' defines a rule for computing CFA as: take address from 3134 REGISTER and add OFFSET to it. 3135 3136 7.14 `.cfi_def_cfa_register REGISTER' 3137 ===================================== 3138 3139 `.cfi_def_cfa_register' modifies a rule for computing CFA. From now on 3140 REGISTER will be used instead of the old one. Offset remains the same. 3141 3142 7.15 `.cfi_def_cfa_offset OFFSET' 3143 ================================= 3144 3145 `.cfi_def_cfa_offset' modifies a rule for computing CFA. Register 3146 remains the same, but OFFSET is new. Note that it is the absolute 3147 offset that will be added to a defined register to compute CFA address. 3148 3149 7.16 `.cfi_adjust_cfa_offset OFFSET' 3150 ==================================== 3151 3152 Same as `.cfi_def_cfa_offset' but OFFSET is a relative value that is 3153 added/substracted from the previous offset. 3154 3155 7.17 `.cfi_offset REGISTER, OFFSET' 3156 =================================== 3157 3158 Previous value of REGISTER is saved at offset OFFSET from CFA. 3159 3160 7.18 `.cfi_rel_offset REGISTER, OFFSET' 3161 ======================================= 3162 3163 Previous value of REGISTER is saved at offset OFFSET from the current 3164 CFA register. This is transformed to `.cfi_offset' using the known 3165 displacement of the CFA register from the CFA. This is often easier to 3166 use, because the number will match the code it's annotating. 3167 3168 7.19 `.cfi_register REGISTER1, REGISTER2' 3169 ========================================= 3170 3171 Previous value of REGISTER1 is saved in register REGISTER2. 3172 3173 7.20 `.cfi_restore REGISTER' 3174 ============================ 3175 3176 `.cfi_restore' says that the rule for REGISTER is now the same as it 3177 was at the beginning of the function, after all initial instruction 3178 added by `.cfi_startproc' were executed. 3179 3180 7.21 `.cfi_undefined REGISTER' 3181 ============================== 3182 3183 From now on the previous value of REGISTER can't be restored anymore. 3184 3185 7.22 `.cfi_same_value REGISTER' 3186 =============================== 3187 3188 Current value of REGISTER is the same like in the previous frame, i.e. 3189 no restoration needed. 3190 3191 7.23 `.cfi_remember_state', 3192 =========================== 3193 3194 First save all current rules for all registers by `.cfi_remember_state', 3195 then totally screw them up by subsequent `.cfi_*' directives and when 3196 everything is hopelessly bad, use `.cfi_restore_state' to restore the 3197 previous saved state. 3198 3199 7.24 `.cfi_return_column REGISTER' 3200 ================================== 3201 3202 Change return column REGISTER, i.e. the return address is either 3203 directly in REGISTER or can be accessed by rules for REGISTER. 3204 3205 7.25 `.cfi_signal_frame' 3206 ======================== 3207 3208 Mark current function as signal trampoline. 3209 3210 7.26 `.cfi_window_save' 3211 ======================= 3212 3213 SPARC register window has been saved. 3214 3215 7.27 `.cfi_escape' EXPRESSION[, ...] 3216 ==================================== 3217 3218 Allows the user to add arbitrary bytes to the unwind info. One might 3219 use this to add OS-specific CFI opcodes, or generic CFI opcodes that 3220 GAS does not yet support. 3221 3222 7.28 `.cfi_val_encoded_addr REGISTER, ENCODING, LABEL' 3223 ====================================================== 3224 3225 The current value of REGISTER is LABEL. The value of LABEL will be 3226 encoded in the output file according to ENCODING; see the description 3227 of `.cfi_personality' for details on this encoding. 3228 3229 The usefulness of equating a register to a fixed label is probably 3230 limited to the return address register. Here, it can be useful to mark 3231 a code segment that has only one return address which is reached by a 3232 direct branch and no copy of the return address exists in memory or 3233 another register. 3234 3235 3236 File: as.info, Node: LNS directives, Next: Long, Prev: Ln, Up: Pseudo Ops 3237 3238 7.29 `.file FILENO FILENAME' 3239 ============================ 3240 3241 When emitting dwarf2 line number information `.file' assigns filenames 3242 to the `.debug_line' file name table. The FILENO operand should be a 3243 unique positive integer to use as the index of the entry in the table. 3244 The FILENAME operand is a C string literal. 3245 3246 The detail of filename indices is exposed to the user because the 3247 filename table is shared with the `.debug_info' section of the dwarf2 3248 debugging information, and thus the user must know the exact indices 3249 that table entries will have. 3250 3251 7.30 `.loc FILENO LINENO [COLUMN] [OPTIONS]' 3252 ============================================ 3253 3254 The `.loc' directive will add row to the `.debug_line' line number 3255 matrix corresponding to the immediately following assembly instruction. 3256 The FILENO, LINENO, and optional COLUMN arguments will be applied to 3257 the `.debug_line' state machine before the row is added. 3258 3259 The OPTIONS are a sequence of the following tokens in any order: 3260 3261 `basic_block' 3262 This option will set the `basic_block' register in the 3263 `.debug_line' state machine to `true'. 3264 3265 `prologue_end' 3266 This option will set the `prologue_end' register in the 3267 `.debug_line' state machine to `true'. 3268 3269 `epilogue_begin' 3270 This option will set the `epilogue_begin' register in the 3271 `.debug_line' state machine to `true'. 3272 3273 `is_stmt VALUE' 3274 This option will set the `is_stmt' register in the `.debug_line' 3275 state machine to `value', which must be either 0 or 1. 3276 3277 `isa VALUE' 3278 This directive will set the `isa' register in the `.debug_line' 3279 state machine to VALUE, which must be an unsigned integer. 3280 3281 3282 7.31 `.loc_mark_labels ENABLE' 3283 ============================== 3284 3285 The `.loc_mark_labels' directive makes the assembler emit an entry to 3286 the `.debug_line' line number matrix with the `basic_block' register in 3287 the state machine set whenever a code label is seen. The ENABLE 3288 argument should be either 1 or 0, to enable or disable this function 3289 respectively. 3290 3291 3292 File: as.info, Node: Data, Next: Def, Prev: CFI directives, Up: Pseudo Ops 3293 3294 7.32 `.data SUBSECTION' 3295 ======================= 3296 3297 `.data' tells `as' to assemble the following statements onto the end of 3298 the data subsection numbered SUBSECTION (which is an absolute 3299 expression). If SUBSECTION is omitted, it defaults to zero. 3300 3301 3302 File: as.info, Node: Def, Next: Desc, Prev: Data, Up: Pseudo Ops 3303 3304 7.33 `.def NAME' 3305 ================ 3306 3307 Begin defining debugging information for a symbol NAME; the definition 3308 extends until the `.endef' directive is encountered. 3309 3310 3311 File: as.info, Node: Desc, Next: Dim, Prev: Def, Up: Pseudo Ops 3312 3313 7.34 `.desc SYMBOL, ABS-EXPRESSION' 3314 =================================== 3315 3316 This directive sets the descriptor of the symbol (*note Symbol 3317 Attributes::) to the low 16 bits of an absolute expression. 3318 3319 The `.desc' directive is not available when `as' is configured for 3320 COFF output; it is only for `a.out' or `b.out' object format. For the 3321 sake of compatibility, `as' accepts it, but produces no output, when 3322 configured for COFF. 3323 3324 3325 File: as.info, Node: Dim, Next: Double, Prev: Desc, Up: Pseudo Ops 3326 3327 7.35 `.dim' 3328 =========== 3329 3330 This directive is generated by compilers to include auxiliary debugging 3331 information in the symbol table. It is only permitted inside 3332 `.def'/`.endef' pairs. 3333 3334 3335 File: as.info, Node: Double, Next: Eject, Prev: Dim, Up: Pseudo Ops 3336 3337 7.36 `.double FLONUMS' 3338 ====================== 3339 3340 `.double' expects zero or more flonums, separated by commas. It 3341 assembles floating point numbers. The exact kind of floating point 3342 numbers emitted depends on how `as' is configured. *Note Machine 3343 Dependencies::. 3344 3345 3346 File: as.info, Node: Eject, Next: Else, Prev: Double, Up: Pseudo Ops 3347 3348 7.37 `.eject' 3349 ============= 3350 3351 Force a page break at this point, when generating assembly listings. 3352 3353 3354 File: as.info, Node: Else, Next: Elseif, Prev: Eject, Up: Pseudo Ops 3355 3356 7.38 `.else' 3357 ============ 3358 3359 `.else' is part of the `as' support for conditional assembly; see *note 3360 `.if': If. It marks the beginning of a section of code to be assembled 3361 if the condition for the preceding `.if' was false. 3362 3363 3364 File: as.info, Node: Elseif, Next: End, Prev: Else, Up: Pseudo Ops 3365 3366 7.39 `.elseif' 3367 ============== 3368 3369 `.elseif' is part of the `as' support for conditional assembly; see 3370 *note `.if': If. It is shorthand for beginning a new `.if' block that 3371 would otherwise fill the entire `.else' section. 3372 3373 3374 File: as.info, Node: End, Next: Endef, Prev: Elseif, Up: Pseudo Ops 3375 3376 7.40 `.end' 3377 =========== 3378 3379 `.end' marks the end of the assembly file. `as' does not process 3380 anything in the file past the `.end' directive. 3381 3382 3383 File: as.info, Node: Endef, Next: Endfunc, Prev: End, Up: Pseudo Ops 3384 3385 7.41 `.endef' 3386 ============= 3387 3388 This directive flags the end of a symbol definition begun with `.def'. 3389 3390 3391 File: as.info, Node: Endfunc, Next: Endif, Prev: Endef, Up: Pseudo Ops 3392 3393 7.42 `.endfunc' 3394 =============== 3395 3396 `.endfunc' marks the end of a function specified with `.func'. 3397 3398 3399 File: as.info, Node: Endif, Next: Equ, Prev: Endfunc, Up: Pseudo Ops 3400 3401 7.43 `.endif' 3402 ============= 3403 3404 `.endif' is part of the `as' support for conditional assembly; it marks 3405 the end of a block of code that is only assembled conditionally. *Note 3406 `.if': If. 3407 3408 3409 File: as.info, Node: Equ, Next: Equiv, Prev: Endif, Up: Pseudo Ops 3410 3411 7.44 `.equ SYMBOL, EXPRESSION' 3412 ============================== 3413 3414 This directive sets the value of SYMBOL to EXPRESSION. It is 3415 synonymous with `.set'; see *note `.set': Set. 3416 3417 The syntax for `equ' on the HPPA is `SYMBOL .equ EXPRESSION'. 3418 3419 The syntax for `equ' on the Z80 is `SYMBOL equ EXPRESSION'. On the 3420 Z80 it is an eror if SYMBOL is already defined, but the symbol is not 3421 protected from later redefinition. Compare *note Equiv::. 3422 3423 3424 File: as.info, Node: Equiv, Next: Eqv, Prev: Equ, Up: Pseudo Ops 3425 3426 7.45 `.equiv SYMBOL, EXPRESSION' 3427 ================================ 3428 3429 The `.equiv' directive is like `.equ' and `.set', except that the 3430 assembler will signal an error if SYMBOL is already defined. Note a 3431 symbol which has been referenced but not actually defined is considered 3432 to be undefined. 3433 3434 Except for the contents of the error message, this is roughly 3435 equivalent to 3436 .ifdef SYM 3437 .err 3438 .endif 3439 .equ SYM,VAL 3440 plus it protects the symbol from later redefinition. 3441 3442 3443 File: as.info, Node: Eqv, Next: Err, Prev: Equiv, Up: Pseudo Ops 3444 3445 7.46 `.eqv SYMBOL, EXPRESSION' 3446 ============================== 3447 3448 The `.eqv' directive is like `.equiv', but no attempt is made to 3449 evaluate the expression or any part of it immediately. Instead each 3450 time the resulting symbol is used in an expression, a snapshot of its 3451 current value is taken. 3452 3453 3454 File: as.info, Node: Err, Next: Error, Prev: Eqv, Up: Pseudo Ops 3455 3456 7.47 `.err' 3457 =========== 3458 3459 If `as' assembles a `.err' directive, it will print an error message 3460 and, unless the `-Z' option was used, it will not generate an object 3461 file. This can be used to signal an error in conditionally compiled 3462 code. 3463 3464 3465 File: as.info, Node: Error, Next: Exitm, Prev: Err, Up: Pseudo Ops 3466 3467 7.48 `.error "STRING"' 3468 ====================== 3469 3470 Similarly to `.err', this directive emits an error, but you can specify 3471 a string that will be emitted as the error message. If you don't 3472 specify the message, it defaults to `".error directive invoked in 3473 source file"'. *Note Error and Warning Messages: Errors. 3474 3475 .error "This code has not been assembled and tested." 3476 3477 3478 File: as.info, Node: Exitm, Next: Extern, Prev: Error, Up: Pseudo Ops 3479 3480 7.49 `.exitm' 3481 ============= 3482 3483 Exit early from the current macro definition. *Note Macro::. 3484 3485 3486 File: as.info, Node: Extern, Next: Fail, Prev: Exitm, Up: Pseudo Ops 3487 3488 7.50 `.extern' 3489 ============== 3490 3491 `.extern' is accepted in the source program--for compatibility with 3492 other assemblers--but it is ignored. `as' treats all undefined symbols 3493 as external. 3494 3495 3496 File: as.info, Node: Fail, Next: File, Prev: Extern, Up: Pseudo Ops 3497 3498 7.51 `.fail EXPRESSION' 3499 ======================= 3500 3501 Generates an error or a warning. If the value of the EXPRESSION is 500 3502 or more, `as' will print a warning message. If the value is less than 3503 500, `as' will print an error message. The message will include the 3504 value of EXPRESSION. This can occasionally be useful inside complex 3505 nested macros or conditional assembly. 3506 3507 3508 File: as.info, Node: File, Next: Fill, Prev: Fail, Up: Pseudo Ops 3509 3510 7.52 `.file STRING' 3511 =================== 3512 3513 `.file' tells `as' that we are about to start a new logical file. 3514 STRING is the new file name. In general, the filename is recognized 3515 whether or not it is surrounded by quotes `"'; but if you wish to 3516 specify an empty file name, you must give the quotes-`""'. This 3517 statement may go away in future: it is only recognized to be compatible 3518 with old `as' programs. 3519 3520 3521 File: as.info, Node: Fill, Next: Float, Prev: File, Up: Pseudo Ops 3522 3523 7.53 `.fill REPEAT , SIZE , VALUE' 3524 ================================== 3525 3526 REPEAT, SIZE and VALUE are absolute expressions. This emits REPEAT 3527 copies of SIZE bytes. REPEAT may be zero or more. SIZE may be zero or 3528 more, but if it is more than 8, then it is deemed to have the value 8, 3529 compatible with other people's assemblers. The contents of each REPEAT 3530 bytes is taken from an 8-byte number. The highest order 4 bytes are 3531 zero. The lowest order 4 bytes are VALUE rendered in the byte-order of 3532 an integer on the computer `as' is assembling for. Each SIZE bytes in 3533 a repetition is taken from the lowest order SIZE bytes of this number. 3534 Again, this bizarre behavior is compatible with other people's 3535 assemblers. 3536 3537 SIZE and VALUE are optional. If the second comma and VALUE are 3538 absent, VALUE is assumed zero. If the first comma and following tokens 3539 are absent, SIZE is assumed to be 1. 3540 3541 3542 File: as.info, Node: Float, Next: Func, Prev: Fill, Up: Pseudo Ops 3543 3544 7.54 `.float FLONUMS' 3545 ===================== 3546 3547 This directive assembles zero or more flonums, separated by commas. It 3548 has the same effect as `.single'. The exact kind of floating point 3549 numbers emitted depends on how `as' is configured. *Note Machine 3550 Dependencies::. 3551 3552 3553 File: as.info, Node: Func, Next: Global, Prev: Float, Up: Pseudo Ops 3554 3555 7.55 `.func NAME[,LABEL]' 3556 ========================= 3557 3558 `.func' emits debugging information to denote function NAME, and is 3559 ignored unless the file is assembled with debugging enabled. Only 3560 `--gstabs[+]' is currently supported. LABEL is the entry point of the 3561 function and if omitted NAME prepended with the `leading char' is used. 3562 `leading char' is usually `_' or nothing, depending on the target. All 3563 functions are currently defined to have `void' return type. The 3564 function must be terminated with `.endfunc'. 3565 3566 3567 File: as.info, Node: Global, Next: Gnu_attribute, Prev: Func, Up: Pseudo Ops 3568 3569 7.56 `.global SYMBOL', `.globl SYMBOL' 3570 ====================================== 3571 3572 `.global' makes the symbol visible to `ld'. If you define SYMBOL in 3573 your partial program, its value is made available to other partial 3574 programs that are linked with it. Otherwise, SYMBOL takes its 3575 attributes from a symbol of the same name from another file linked into 3576 the same program. 3577 3578 Both spellings (`.globl' and `.global') are accepted, for 3579 compatibility with other assemblers. 3580 3581 On the HPPA, `.global' is not always enough to make it accessible to 3582 other partial programs. You may need the HPPA-only `.EXPORT' directive 3583 as well. *Note HPPA Assembler Directives: HPPA Directives. 3584 3585 3586 File: as.info, Node: Gnu_attribute, Next: Hidden, Prev: Global, Up: Pseudo Ops 3587 3588 7.57 `.gnu_attribute TAG,VALUE' 3589 =============================== 3590 3591 Record a GNU object attribute for this file. *Note Object Attributes::. 3592 3593 3594 File: as.info, Node: Hidden, Next: hword, Prev: Gnu_attribute, Up: Pseudo Ops 3595 3596 7.58 `.hidden NAMES' 3597 ==================== 3598 3599 This is one of the ELF visibility directives. The other two are 3600 `.internal' (*note `.internal': Internal.) and `.protected' (*note 3601 `.protected': Protected.). 3602 3603 This directive overrides the named symbols default visibility (which 3604 is set by their binding: local, global or weak). The directive sets 3605 the visibility to `hidden' which means that the symbols are not visible 3606 to other components. Such symbols are always considered to be 3607 `protected' as well. 3608 3609 3610 File: as.info, Node: hword, Next: Ident, Prev: Hidden, Up: Pseudo Ops 3611 3612 7.59 `.hword EXPRESSIONS' 3613 ========================= 3614 3615 This expects zero or more EXPRESSIONS, and emits a 16 bit number for 3616 each. 3617 3618 This directive is a synonym for `.short'; depending on the target 3619 architecture, it may also be a synonym for `.word'. 3620 3621 3622 File: as.info, Node: Ident, Next: If, Prev: hword, Up: Pseudo Ops 3623 3624 7.60 `.ident' 3625 ============= 3626 3627 This directive is used by some assemblers to place tags in object 3628 files. The behavior of this directive varies depending on the target. 3629 When using the a.out object file format, `as' simply accepts the 3630 directive for source-file compatibility with existing assemblers, but 3631 does not emit anything for it. When using COFF, comments are emitted 3632 to the `.comment' or `.rdata' section, depending on the target. When 3633 using ELF, comments are emitted to the `.comment' section. 3634 3635 3636 File: as.info, Node: If, Next: Incbin, Prev: Ident, Up: Pseudo Ops 3637 3638 7.61 `.if ABSOLUTE EXPRESSION' 3639 ============================== 3640 3641 `.if' marks the beginning of a section of code which is only considered 3642 part of the source program being assembled if the argument (which must 3643 be an ABSOLUTE EXPRESSION) is non-zero. The end of the conditional 3644 section of code must be marked by `.endif' (*note `.endif': Endif.); 3645 optionally, you may include code for the alternative condition, flagged 3646 by `.else' (*note `.else': Else.). If you have several conditions to 3647 check, `.elseif' may be used to avoid nesting blocks if/else within 3648 each subsequent `.else' block. 3649 3650 The following variants of `.if' are also supported: 3651 `.ifdef SYMBOL' 3652 Assembles the following section of code if the specified SYMBOL 3653 has been defined. Note a symbol which has been referenced but not 3654 yet defined is considered to be undefined. 3655 3656 `.ifb TEXT' 3657 Assembles the following section of code if the operand is blank 3658 (empty). 3659 3660 `.ifc STRING1,STRING2' 3661 Assembles the following section of code if the two strings are the 3662 same. The strings may be optionally quoted with single quotes. 3663 If they are not quoted, the first string stops at the first comma, 3664 and the second string stops at the end of the line. Strings which 3665 contain whitespace should be quoted. The string comparison is 3666 case sensitive. 3667 3668 `.ifeq ABSOLUTE EXPRESSION' 3669 Assembles the following section of code if the argument is zero. 3670 3671 `.ifeqs STRING1,STRING2' 3672 Another form of `.ifc'. The strings must be quoted using double 3673 quotes. 3674 3675 `.ifge ABSOLUTE EXPRESSION' 3676 Assembles the following section of code if the argument is greater 3677 than or equal to zero. 3678 3679 `.ifgt ABSOLUTE EXPRESSION' 3680 Assembles the following section of code if the argument is greater 3681 than zero. 3682 3683 `.ifle ABSOLUTE EXPRESSION' 3684 Assembles the following section of code if the argument is less 3685 than or equal to zero. 3686 3687 `.iflt ABSOLUTE EXPRESSION' 3688 Assembles the following section of code if the argument is less 3689 than zero. 3690 3691 `.ifnb TEXT' 3692 Like `.ifb', but the sense of the test is reversed: this assembles 3693 the following section of code if the operand is non-blank 3694 (non-empty). 3695 3696 `.ifnc STRING1,STRING2.' 3697 Like `.ifc', but the sense of the test is reversed: this assembles 3698 the following section of code if the two strings are not the same. 3699 3700 `.ifndef SYMBOL' 3701 `.ifnotdef SYMBOL' 3702 Assembles the following section of code if the specified SYMBOL 3703 has not been defined. Both spelling variants are equivalent. 3704 Note a symbol which has been referenced but not yet defined is 3705 considered to be undefined. 3706 3707 `.ifne ABSOLUTE EXPRESSION' 3708 Assembles the following section of code if the argument is not 3709 equal to zero (in other words, this is equivalent to `.if'). 3710 3711 `.ifnes STRING1,STRING2' 3712 Like `.ifeqs', but the sense of the test is reversed: this 3713 assembles the following section of code if the two strings are not 3714 the same. 3715 3716 3717 File: as.info, Node: Incbin, Next: Include, Prev: If, Up: Pseudo Ops 3718 3719 7.62 `.incbin "FILE"[,SKIP[,COUNT]]' 3720 ==================================== 3721 3722 The `incbin' directive includes FILE verbatim at the current location. 3723 You can control the search paths used with the `-I' command-line option 3724 (*note Command-Line Options: Invoking.). Quotation marks are required 3725 around FILE. 3726 3727 The SKIP argument skips a number of bytes from the start of the 3728 FILE. The COUNT argument indicates the maximum number of bytes to 3729 read. Note that the data is not aligned in any way, so it is the user's 3730 responsibility to make sure that proper alignment is provided both 3731 before and after the `incbin' directive. 3732 3733 3734 File: as.info, Node: Include, Next: Int, Prev: Incbin, Up: Pseudo Ops 3735 3736 7.63 `.include "FILE"' 3737 ====================== 3738 3739 This directive provides a way to include supporting files at specified 3740 points in your source program. The code from FILE is assembled as if 3741 it followed the point of the `.include'; when the end of the included 3742 file is reached, assembly of the original file continues. You can 3743 control the search paths used with the `-I' command-line option (*note 3744 Command-Line Options: Invoking.). Quotation marks are required around 3745 FILE. 3746 3747 3748 File: as.info, Node: Int, Next: Internal, Prev: Include, Up: Pseudo Ops 3749 3750 7.64 `.int EXPRESSIONS' 3751 ======================= 3752 3753 Expect zero or more EXPRESSIONS, of any section, separated by commas. 3754 For each expression, emit a number that, at run time, is the value of 3755 that expression. The byte order and bit size of the number depends on 3756 what kind of target the assembly is for. 3757 3758 3759 File: as.info, Node: Internal, Next: Irp, Prev: Int, Up: Pseudo Ops 3760 3761 7.65 `.internal NAMES' 3762 ====================== 3763 3764 This is one of the ELF visibility directives. The other two are 3765 `.hidden' (*note `.hidden': Hidden.) and `.protected' (*note 3766 `.protected': Protected.). 3767 3768 This directive overrides the named symbols default visibility (which 3769 is set by their binding: local, global or weak). The directive sets 3770 the visibility to `internal' which means that the symbols are 3771 considered to be `hidden' (i.e., not visible to other components), and 3772 that some extra, processor specific processing must also be performed 3773 upon the symbols as well. 3774 3775 3776 File: as.info, Node: Irp, Next: Irpc, Prev: Internal, Up: Pseudo Ops 3777 3778 7.66 `.irp SYMBOL,VALUES'... 3779 ============================ 3780 3781 Evaluate a sequence of statements assigning different values to SYMBOL. 3782 The sequence of statements starts at the `.irp' directive, and is 3783 terminated by an `.endr' directive. For each VALUE, SYMBOL is set to 3784 VALUE, and the sequence of statements is assembled. If no VALUE is 3785 listed, the sequence of statements is assembled once, with SYMBOL set 3786 to the null string. To refer to SYMBOL within the sequence of 3787 statements, use \SYMBOL. 3788 3789 For example, assembling 3790 3791 .irp param,1,2,3 3792 move d\param,sp@- 3793 .endr 3794 3795 is equivalent to assembling 3796 3797 move d1,sp@- 3798 move d2,sp@- 3799 move d3,sp@- 3800 3801 For some caveats with the spelling of SYMBOL, see also *note Macro::. 3802 3803 3804 File: as.info, Node: Irpc, Next: Lcomm, Prev: Irp, Up: Pseudo Ops 3805 3806 7.67 `.irpc SYMBOL,VALUES'... 3807 ============================= 3808 3809 Evaluate a sequence of statements assigning different values to SYMBOL. 3810 The sequence of statements starts at the `.irpc' directive, and is 3811 terminated by an `.endr' directive. For each character in VALUE, 3812 SYMBOL is set to the character, and the sequence of statements is 3813 assembled. If no VALUE is listed, the sequence of statements is 3814 assembled once, with SYMBOL set to the null string. To refer to SYMBOL 3815 within the sequence of statements, use \SYMBOL. 3816 3817 For example, assembling 3818 3819 .irpc param,123 3820 move d\param,sp@- 3821 .endr 3822 3823 is equivalent to assembling 3824 3825 move d1,sp@- 3826 move d2,sp@- 3827 move d3,sp@- 3828 3829 For some caveats with the spelling of SYMBOL, see also the discussion 3830 at *Note Macro::. 3831 3832 3833 File: as.info, Node: Lcomm, Next: Lflags, Prev: Irpc, Up: Pseudo Ops 3834 3835 7.68 `.lcomm SYMBOL , LENGTH' 3836 ============================= 3837 3838 Reserve LENGTH (an absolute expression) bytes for a local common 3839 denoted by SYMBOL. The section and value of SYMBOL are those of the 3840 new local common. The addresses are allocated in the bss section, so 3841 that at run-time the bytes start off zeroed. SYMBOL is not declared 3842 global (*note `.global': Global.), so is normally not visible to `ld'. 3843 3844 Some targets permit a third argument to be used with `.lcomm'. This 3845 argument specifies the desired alignment of the symbol in the bss 3846 section. 3847 3848 The syntax for `.lcomm' differs slightly on the HPPA. The syntax is 3849 `SYMBOL .lcomm, LENGTH'; SYMBOL is optional. 3850 3851 3852 File: as.info, Node: Lflags, Next: Line, Prev: Lcomm, Up: Pseudo Ops 3853 3854 7.69 `.lflags' 3855 ============== 3856 3857 `as' accepts this directive, for compatibility with other assemblers, 3858 but ignores it. 3859 3860 3861 File: as.info, Node: Line, Next: Linkonce, Prev: Lflags, Up: Pseudo Ops 3862 3863 7.70 `.line LINE-NUMBER' 3864 ======================== 3865 3866 Change the logical line number. LINE-NUMBER must be an absolute 3867 expression. The next line has that logical line number. Therefore any 3868 other statements on the current line (after a statement separator 3869 character) are reported as on logical line number LINE-NUMBER - 1. One 3870 day `as' will no longer support this directive: it is recognized only 3871 for compatibility with existing assembler programs. 3872 3873 Even though this is a directive associated with the `a.out' or 3874 `b.out' object-code formats, `as' still recognizes it when producing 3875 COFF output, and treats `.line' as though it were the COFF `.ln' _if_ 3876 it is found outside a `.def'/`.endef' pair. 3877 3878 Inside a `.def', `.line' is, instead, one of the directives used by 3879 compilers to generate auxiliary symbol information for debugging. 3880 3881 3882 File: as.info, Node: Linkonce, Next: List, Prev: Line, Up: Pseudo Ops 3883 3884 7.71 `.linkonce [TYPE]' 3885 ======================= 3886 3887 Mark the current section so that the linker only includes a single copy 3888 of it. This may be used to include the same section in several 3889 different object files, but ensure that the linker will only include it 3890 once in the final output file. The `.linkonce' pseudo-op must be used 3891 for each instance of the section. Duplicate sections are detected 3892 based on the section name, so it should be unique. 3893 3894 This directive is only supported by a few object file formats; as of 3895 this writing, the only object file format which supports it is the 3896 Portable Executable format used on Windows NT. 3897 3898 The TYPE argument is optional. If specified, it must be one of the 3899 following strings. For example: 3900 .linkonce same_size 3901 Not all types may be supported on all object file formats. 3902 3903 `discard' 3904 Silently discard duplicate sections. This is the default. 3905 3906 `one_only' 3907 Warn if there are duplicate sections, but still keep only one copy. 3908 3909 `same_size' 3910 Warn if any of the duplicates have different sizes. 3911 3912 `same_contents' 3913 Warn if any of the duplicates do not have exactly the same 3914 contents. 3915 3916 3917 File: as.info, Node: Ln, Next: LNS directives, Prev: List, Up: Pseudo Ops 3918 3919 7.72 `.ln LINE-NUMBER' 3920 ====================== 3921 3922 `.ln' is a synonym for `.line'. 3923 3924 3925 File: as.info, Node: MRI, Next: Noaltmacro, Prev: Macro, Up: Pseudo Ops 3926 3927 7.73 `.mri VAL' 3928 =============== 3929 3930 If VAL is non-zero, this tells `as' to enter MRI mode. If VAL is zero, 3931 this tells `as' to exit MRI mode. This change affects code assembled 3932 until the next `.mri' directive, or until the end of the file. *Note 3933 MRI mode: M. 3934 3935 3936 File: as.info, Node: List, Next: Ln, Prev: Linkonce, Up: Pseudo Ops 3937 3938 7.74 `.list' 3939 ============ 3940 3941 Control (in conjunction with the `.nolist' directive) whether or not 3942 assembly listings are generated. These two directives maintain an 3943 internal counter (which is zero initially). `.list' increments the 3944 counter, and `.nolist' decrements it. Assembly listings are generated 3945 whenever the counter is greater than zero. 3946 3947 By default, listings are disabled. When you enable them (with the 3948 `-a' command line option; *note Command-Line Options: Invoking.), the 3949 initial value of the listing counter is one. 3950 3951 3952 File: as.info, Node: Long, Next: Macro, Prev: LNS directives, Up: Pseudo Ops 3953 3954 7.75 `.long EXPRESSIONS' 3955 ======================== 3956 3957 `.long' is the same as `.int'. *Note `.int': Int. 3958 3959 3960 File: as.info, Node: Macro, Next: MRI, Prev: Long, Up: Pseudo Ops 3961 3962 7.76 `.macro' 3963 ============= 3964 3965 The commands `.macro' and `.endm' allow you to define macros that 3966 generate assembly output. For example, this definition specifies a 3967 macro `sum' that puts a sequence of numbers into memory: 3968 3969 .macro sum from=0, to=5 3970 .long \from 3971 .if \to-\from 3972 sum "(\from+1)",\to 3973 .endif 3974 .endm 3975 3976 With that definition, `SUM 0,5' is equivalent to this assembly input: 3977 3978 .long 0 3979 .long 1 3980 .long 2 3981 .long 3 3982 .long 4 3983 .long 5 3984 3985 `.macro MACNAME' 3986 `.macro MACNAME MACARGS ...' 3987 Begin the definition of a macro called MACNAME. If your macro 3988 definition requires arguments, specify their names after the macro 3989 name, separated by commas or spaces. You can qualify the macro 3990 argument to indicate whether all invocations must specify a 3991 non-blank value (through `:`req''), or whether it takes all of the 3992 remaining arguments (through `:`vararg''). You can supply a 3993 default value for any macro argument by following the name with 3994 `=DEFLT'. You cannot define two macros with the same MACNAME 3995 unless it has been subject to the `.purgem' directive (*note 3996 Purgem::) between the two definitions. For example, these are all 3997 valid `.macro' statements: 3998 3999 `.macro comm' 4000 Begin the definition of a macro called `comm', which takes no 4001 arguments. 4002 4003 `.macro plus1 p, p1' 4004 `.macro plus1 p p1' 4005 Either statement begins the definition of a macro called 4006 `plus1', which takes two arguments; within the macro 4007 definition, write `\p' or `\p1' to evaluate the arguments. 4008 4009 `.macro reserve_str p1=0 p2' 4010 Begin the definition of a macro called `reserve_str', with two 4011 arguments. The first argument has a default value, but not 4012 the second. After the definition is complete, you can call 4013 the macro either as `reserve_str A,B' (with `\p1' evaluating 4014 to A and `\p2' evaluating to B), or as `reserve_str ,B' (with 4015 `\p1' evaluating as the default, in this case `0', and `\p2' 4016 evaluating to B). 4017 4018 `.macro m p1:req, p2=0, p3:vararg' 4019 Begin the definition of a macro called `m', with at least 4020 three arguments. The first argument must always have a value 4021 specified, but not the second, which instead has a default 4022 value. The third formal will get assigned all remaining 4023 arguments specified at invocation time. 4024 4025 When you call a macro, you can specify the argument values 4026 either by position, or by keyword. For example, `sum 9,17' 4027 is equivalent to `sum to=17, from=9'. 4028 4029 4030 Note that since each of the MACARGS can be an identifier exactly 4031 as any other one permitted by the target architecture, there may be 4032 occasional problems if the target hand-crafts special meanings to 4033 certain characters when they occur in a special position. For 4034 example, if the colon (`:') is generally permitted to be part of a 4035 symbol name, but the architecture specific code special-cases it 4036 when occurring as the final character of a symbol (to denote a 4037 label), then the macro parameter replacement code will have no way 4038 of knowing that and consider the whole construct (including the 4039 colon) an identifier, and check only this identifier for being the 4040 subject to parameter substitution. So for example this macro 4041 definition: 4042 4043 .macro label l 4044 \l: 4045 .endm 4046 4047 might not work as expected. Invoking `label foo' might not create 4048 a label called `foo' but instead just insert the text `\l:' into 4049 the assembler source, probably generating an error about an 4050 unrecognised identifier. 4051 4052 Similarly problems might occur with the period character (`.') 4053 which is often allowed inside opcode names (and hence identifier 4054 names). So for example constructing a macro to build an opcode 4055 from a base name and a length specifier like this: 4056 4057 .macro opcode base length 4058 \base.\length 4059 .endm 4060 4061 and invoking it as `opcode store l' will not create a `store.l' 4062 instruction but instead generate some kind of error as the 4063 assembler tries to interpret the text `\base.\length'. 4064 4065 There are several possible ways around this problem: 4066 4067 `Insert white space' 4068 If it is possible to use white space characters then this is 4069 the simplest solution. eg: 4070 4071 .macro label l 4072 \l : 4073 .endm 4074 4075 `Use `\()'' 4076 The string `\()' can be used to separate the end of a macro 4077 argument from the following text. eg: 4078 4079 .macro opcode base length 4080 \base\().\length 4081 .endm 4082 4083 `Use the alternate macro syntax mode' 4084 In the alternative macro syntax mode the ampersand character 4085 (`&') can be used as a separator. eg: 4086 4087 .altmacro 4088 .macro label l 4089 l&: 4090 .endm 4091 4092 Note: this problem of correctly identifying string parameters to 4093 pseudo ops also applies to the identifiers used in `.irp' (*note 4094 Irp::) and `.irpc' (*note Irpc::) as well. 4095 4096 `.endm' 4097 Mark the end of a macro definition. 4098 4099 `.exitm' 4100 Exit early from the current macro definition. 4101 4102 `\@' 4103 `as' maintains a counter of how many macros it has executed in 4104 this pseudo-variable; you can copy that number to your output with 4105 `\@', but _only within a macro definition_. 4106 4107 `LOCAL NAME [ , ... ]' 4108 _Warning: `LOCAL' is only available if you select "alternate macro 4109 syntax" with `--alternate' or `.altmacro'._ *Note `.altmacro': 4110 Altmacro. 4111 4112 4113 File: as.info, Node: Altmacro, Next: Ascii, Prev: Align, Up: Pseudo Ops 4114 4115 7.77 `.altmacro' 4116 ================ 4117 4118 Enable alternate macro mode, enabling: 4119 4120 `LOCAL NAME [ , ... ]' 4121 One additional directive, `LOCAL', is available. It is used to 4122 generate a string replacement for each of the NAME arguments, and 4123 replace any instances of NAME in each macro expansion. The 4124 replacement string is unique in the assembly, and different for 4125 each separate macro expansion. `LOCAL' allows you to write macros 4126 that define symbols, without fear of conflict between separate 4127 macro expansions. 4128 4129 `String delimiters' 4130 You can write strings delimited in these other ways besides 4131 `"STRING"': 4132 4133 `'STRING'' 4134 You can delimit strings with single-quote characters. 4135 4136 `<STRING>' 4137 You can delimit strings with matching angle brackets. 4138 4139 `single-character string escape' 4140 To include any single character literally in a string (even if the 4141 character would otherwise have some special meaning), you can 4142 prefix the character with `!' (an exclamation mark). For example, 4143 you can write `<4.3 !> 5.4!!>' to get the literal text `4.3 > 4144 5.4!'. 4145 4146 `Expression results as strings' 4147 You can write `%EXPR' to evaluate the expression EXPR and use the 4148 result as a string. 4149 4150 4151 File: as.info, Node: Noaltmacro, Next: Nolist, Prev: MRI, Up: Pseudo Ops 4152 4153 7.78 `.noaltmacro' 4154 ================== 4155 4156 Disable alternate macro mode. *Note Altmacro::. 4157 4158 4159 File: as.info, Node: Nolist, Next: Octa, Prev: Noaltmacro, Up: Pseudo Ops 4160 4161 7.79 `.nolist' 4162 ============== 4163 4164 Control (in conjunction with the `.list' directive) whether or not 4165 assembly listings are generated. These two directives maintain an 4166 internal counter (which is zero initially). `.list' increments the 4167 counter, and `.nolist' decrements it. Assembly listings are generated 4168 whenever the counter is greater than zero. 4169 4170 4171 File: as.info, Node: Octa, Next: Org, Prev: Nolist, Up: Pseudo Ops 4172 4173 7.80 `.octa BIGNUMS' 4174 ==================== 4175 4176 This directive expects zero or more bignums, separated by commas. For 4177 each bignum, it emits a 16-byte integer. 4178 4179 The term "octa" comes from contexts in which a "word" is two bytes; 4180 hence _octa_-word for 16 bytes. 4181 4182 4183 File: as.info, Node: Org, Next: P2align, Prev: Octa, Up: Pseudo Ops 4184 4185 7.81 `.org NEW-LC , FILL' 4186 ========================= 4187 4188 Advance the location counter of the current section to NEW-LC. NEW-LC 4189 is either an absolute expression or an expression with the same section 4190 as the current subsection. That is, you can't use `.org' to cross 4191 sections: if NEW-LC has the wrong section, the `.org' directive is 4192 ignored. To be compatible with former assemblers, if the section of 4193 NEW-LC is absolute, `as' issues a warning, then pretends the section of 4194 NEW-LC is the same as the current subsection. 4195 4196 `.org' may only increase the location counter, or leave it 4197 unchanged; you cannot use `.org' to move the location counter backwards. 4198 4199 Because `as' tries to assemble programs in one pass, NEW-LC may not 4200 be undefined. If you really detest this restriction we eagerly await a 4201 chance to share your improved assembler. 4202 4203 Beware that the origin is relative to the start of the section, not 4204 to the start of the subsection. This is compatible with other people's 4205 assemblers. 4206 4207 When the location counter (of the current subsection) is advanced, 4208 the intervening bytes are filled with FILL which should be an absolute 4209 expression. If the comma and FILL are omitted, FILL defaults to zero. 4210 4211 4212 File: as.info, Node: P2align, Next: PopSection, Prev: Org, Up: Pseudo Ops 4213 4214 7.82 `.p2align[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR' 4215 ================================================ 4216 4217 Pad the location counter (in the current subsection) to a particular 4218 storage boundary. The first expression (which must be absolute) is the 4219 number of low-order zero bits the location counter must have after 4220 advancement. For example `.p2align 3' advances the location counter 4221 until it a multiple of 8. If the location counter is already a 4222 multiple of 8, no change is needed. 4223 4224 The second expression (also absolute) gives the fill value to be 4225 stored in the padding bytes. It (and the comma) may be omitted. If it 4226 is omitted, the padding bytes are normally zero. However, on some 4227 systems, if the section is marked as containing code and the fill value 4228 is omitted, the space is filled with no-op instructions. 4229 4230 The third expression is also absolute, and is also optional. If it 4231 is present, it is the maximum number of bytes that should be skipped by 4232 this alignment directive. If doing the alignment would require 4233 skipping more bytes than the specified maximum, then the alignment is 4234 not done at all. You can omit the fill value (the second argument) 4235 entirely by simply using two commas after the required alignment; this 4236 can be useful if you want the alignment to be filled with no-op 4237 instructions when appropriate. 4238 4239 The `.p2alignw' and `.p2alignl' directives are variants of the 4240 `.p2align' directive. The `.p2alignw' directive treats the fill 4241 pattern as a two byte word value. The `.p2alignl' directives treats the 4242 fill pattern as a four byte longword value. For example, `.p2alignw 4243 2,0x368d' will align to a multiple of 4. If it skips two bytes, they 4244 will be filled in with the value 0x368d (the exact placement of the 4245 bytes depends upon the endianness of the processor). If it skips 1 or 4246 3 bytes, the fill value is undefined. 4247 4248 4249 File: as.info, Node: Previous, Next: Print, Prev: PopSection, Up: Pseudo Ops 4250 4251 7.83 `.previous' 4252 ================ 4253 4254 This is one of the ELF section stack manipulation directives. The 4255 others are `.section' (*note Section::), `.subsection' (*note 4256 SubSection::), `.pushsection' (*note PushSection::), and `.popsection' 4257 (*note PopSection::). 4258 4259 This directive swaps the current section (and subsection) with most 4260 recently referenced section/subsection pair prior to this one. Multiple 4261 `.previous' directives in a row will flip between two sections (and 4262 their subsections). For example: 4263 4264 .section A 4265 .subsection 1 4266 .word 0x1234 4267 .subsection 2 4268 .word 0x5678 4269 .previous 4270 .word 0x9abc 4271 4272 Will place 0x1234 and 0x9abc into subsection 1 and 0x5678 into 4273 subsection 2 of section A. Whilst: 4274 4275 .section A 4276 .subsection 1 4277 # Now in section A subsection 1 4278 .word 0x1234 4279 .section B 4280 .subsection 0 4281 # Now in section B subsection 0 4282 .word 0x5678 4283 .subsection 1 4284 # Now in section B subsection 1 4285 .word 0x9abc 4286 .previous 4287 # Now in section B subsection 0 4288 .word 0xdef0 4289 4290 Will place 0x1234 into section A, 0x5678 and 0xdef0 into subsection 4291 0 of section B and 0x9abc into subsection 1 of section B. 4292 4293 In terms of the section stack, this directive swaps the current 4294 section with the top section on the section stack. 4295 4296 4297 File: as.info, Node: PopSection, Next: Previous, Prev: P2align, Up: Pseudo Ops 4298 4299 7.84 `.popsection' 4300 ================== 4301 4302 This is one of the ELF section stack manipulation directives. The 4303 others are `.section' (*note Section::), `.subsection' (*note 4304 SubSection::), `.pushsection' (*note PushSection::), and `.previous' 4305 (*note Previous::). 4306 4307 This directive replaces the current section (and subsection) with 4308 the top section (and subsection) on the section stack. This section is 4309 popped off the stack. 4310 4311 4312 File: as.info, Node: Print, Next: Protected, Prev: Previous, Up: Pseudo Ops 4313 4314 7.85 `.print STRING' 4315 ==================== 4316 4317 `as' will print STRING on the standard output during assembly. You 4318 must put STRING in double quotes. 4319 4320 4321 File: as.info, Node: Protected, Next: Psize, Prev: Print, Up: Pseudo Ops 4322 4323 7.86 `.protected NAMES' 4324 ======================= 4325 4326 This is one of the ELF visibility directives. The other two are 4327 `.hidden' (*note Hidden::) and `.internal' (*note Internal::). 4328 4329 This directive overrides the named symbols default visibility (which 4330 is set by their binding: local, global or weak). The directive sets 4331 the visibility to `protected' which means that any references to the 4332 symbols from within the components that defines them must be resolved 4333 to the definition in that component, even if a definition in another 4334 component would normally preempt this. 4335 4336 4337 File: as.info, Node: Psize, Next: Purgem, Prev: Protected, Up: Pseudo Ops 4338 4339 7.87 `.psize LINES , COLUMNS' 4340 ============================= 4341 4342 Use this directive to declare the number of lines--and, optionally, the 4343 number of columns--to use for each page, when generating listings. 4344 4345 If you do not use `.psize', listings use a default line-count of 60. 4346 You may omit the comma and COLUMNS specification; the default width is 4347 200 columns. 4348 4349 `as' generates formfeeds whenever the specified number of lines is 4350 exceeded (or whenever you explicitly request one, using `.eject'). 4351 4352 If you specify LINES as `0', no formfeeds are generated save those 4353 explicitly specified with `.eject'. 4354 4355 4356 File: as.info, Node: Purgem, Next: PushSection, Prev: Psize, Up: Pseudo Ops 4357 4358 7.88 `.purgem NAME' 4359 =================== 4360 4361 Undefine the macro NAME, so that later uses of the string will not be 4362 expanded. *Note Macro::. 4363 4364 4365 File: as.info, Node: PushSection, Next: Quad, Prev: Purgem, Up: Pseudo Ops 4366 4367 7.89 `.pushsection NAME [, SUBSECTION] [, "FLAGS"[, @TYPE[,ARGUMENTS]]]' 4368 ======================================================================== 4369 4370 This is one of the ELF section stack manipulation directives. The 4371 others are `.section' (*note Section::), `.subsection' (*note 4372 SubSection::), `.popsection' (*note PopSection::), and `.previous' 4373 (*note Previous::). 4374 4375 This directive pushes the current section (and subsection) onto the 4376 top of the section stack, and then replaces the current section and 4377 subsection with `name' and `subsection'. The optional `flags', `type' 4378 and `arguments' are treated the same as in the `.section' (*note 4379 Section::) directive. 4380 4381 4382 File: as.info, Node: Quad, Next: Reloc, Prev: PushSection, Up: Pseudo Ops 4383 4384 7.90 `.quad BIGNUMS' 4385 ==================== 4386 4387 `.quad' expects zero or more bignums, separated by commas. For each 4388 bignum, it emits an 8-byte integer. If the bignum won't fit in 8 4389 bytes, it prints a warning message; and just takes the lowest order 8 4390 bytes of the bignum. 4391 4392 The term "quad" comes from contexts in which a "word" is two bytes; 4393 hence _quad_-word for 8 bytes. 4394 4395 4396 File: as.info, Node: Reloc, Next: Rept, Prev: Quad, Up: Pseudo Ops 4397 4398 7.91 `.reloc OFFSET, RELOC_NAME[, EXPRESSION]' 4399 ============================================== 4400 4401 Generate a relocation at OFFSET of type RELOC_NAME with value 4402 EXPRESSION. If OFFSET is a number, the relocation is generated in the 4403 current section. If OFFSET is an expression that resolves to a symbol 4404 plus offset, the relocation is generated in the given symbol's section. 4405 EXPRESSION, if present, must resolve to a symbol plus addend or to an 4406 absolute value, but note that not all targets support an addend. e.g. 4407 ELF REL targets such as i386 store an addend in the section contents 4408 rather than in the relocation. This low level interface does not 4409 support addends stored in the section. 4410 4411 4412 File: as.info, Node: Rept, Next: Sbttl, Prev: Reloc, Up: Pseudo Ops 4413 4414 7.92 `.rept COUNT' 4415 ================== 4416 4417 Repeat the sequence of lines between the `.rept' directive and the next 4418 `.endr' directive COUNT times. 4419 4420 For example, assembling 4421 4422 .rept 3 4423 .long 0 4424 .endr 4425 4426 is equivalent to assembling 4427 4428 .long 0 4429 .long 0 4430 .long 0 4431 4432 4433 File: as.info, Node: Sbttl, Next: Scl, Prev: Rept, Up: Pseudo Ops 4434 4435 7.93 `.sbttl "SUBHEADING"' 4436 ========================== 4437 4438 Use SUBHEADING as the title (third line, immediately after the title 4439 line) when generating assembly listings. 4440 4441 This directive affects subsequent pages, as well as the current page 4442 if it appears within ten lines of the top of a page. 4443 4444 4445 File: as.info, Node: Scl, Next: Section, Prev: Sbttl, Up: Pseudo Ops 4446 4447 7.94 `.scl CLASS' 4448 ================= 4449 4450 Set the storage-class value for a symbol. This directive may only be 4451 used inside a `.def'/`.endef' pair. Storage class may flag whether a 4452 symbol is static or external, or it may record further symbolic 4453 debugging information. 4454 4455 4456 File: as.info, Node: Section, Next: Set, Prev: Scl, Up: Pseudo Ops 4457 4458 7.95 `.section NAME' 4459 ==================== 4460 4461 Use the `.section' directive to assemble the following code into a 4462 section named NAME. 4463 4464 This directive is only supported for targets that actually support 4465 arbitrarily named sections; on `a.out' targets, for example, it is not 4466 accepted, even with a standard `a.out' section name. 4467 4468 COFF Version 4469 ------------ 4470 4471 For COFF targets, the `.section' directive is used in one of the 4472 following ways: 4473 4474 .section NAME[, "FLAGS"] 4475 .section NAME[, SUBSECTION] 4476 4477 If the optional argument is quoted, it is taken as flags to use for 4478 the section. Each flag is a single character. The following flags are 4479 recognized: 4480 `b' 4481 bss section (uninitialized data) 4482 4483 `n' 4484 section is not loaded 4485 4486 `w' 4487 writable section 4488 4489 `d' 4490 data section 4491 4492 `r' 4493 read-only section 4494 4495 `x' 4496 executable section 4497 4498 `s' 4499 shared section (meaningful for PE targets) 4500 4501 `a' 4502 ignored. (For compatibility with the ELF version) 4503 4504 If no flags are specified, the default flags depend upon the section 4505 name. If the section name is not recognized, the default will be for 4506 the section to be loaded and writable. Note the `n' and `w' flags 4507 remove attributes from the section, rather than adding them, so if they 4508 are used on their own it will be as if no flags had been specified at 4509 all. 4510 4511 If the optional argument to the `.section' directive is not quoted, 4512 it is taken as a subsection number (*note Sub-Sections::). 4513 4514 ELF Version 4515 ----------- 4516 4517 This is one of the ELF section stack manipulation directives. The 4518 others are `.subsection' (*note SubSection::), `.pushsection' (*note 4519 PushSection::), `.popsection' (*note PopSection::), and `.previous' 4520 (*note Previous::). 4521 4522 For ELF targets, the `.section' directive is used like this: 4523 4524 .section NAME [, "FLAGS"[, @TYPE[,FLAG_SPECIFIC_ARGUMENTS]]] 4525 4526 The optional FLAGS argument is a quoted string which may contain any 4527 combination of the following characters: 4528 `a' 4529 section is allocatable 4530 4531 `w' 4532 section is writable 4533 4534 `x' 4535 section is executable 4536 4537 `M' 4538 section is mergeable 4539 4540 `S' 4541 section contains zero terminated strings 4542 4543 `G' 4544 section is a member of a section group 4545 4546 `T' 4547 section is used for thread-local-storage 4548 4549 The optional TYPE argument may contain one of the following 4550 constants: 4551 `@progbits' 4552 section contains data 4553 4554 `@nobits' 4555 section does not contain data (i.e., section only occupies space) 4556 4557 `@note' 4558 section contains data which is used by things other than the 4559 program 4560 4561 `@init_array' 4562 section contains an array of pointers to init functions 4563 4564 `@fini_array' 4565 section contains an array of pointers to finish functions 4566 4567 `@preinit_array' 4568 section contains an array of pointers to pre-init functions 4569 4570 Many targets only support the first three section types. 4571 4572 Note on targets where the `@' character is the start of a comment (eg 4573 ARM) then another character is used instead. For example the ARM port 4574 uses the `%' character. 4575 4576 If FLAGS contains the `M' symbol then the TYPE argument must be 4577 specified as well as an extra argument--ENTSIZE--like this: 4578 4579 .section NAME , "FLAGS"M, @TYPE, ENTSIZE 4580 4581 Sections with the `M' flag but not `S' flag must contain fixed size 4582 constants, each ENTSIZE octets long. Sections with both `M' and `S' 4583 must contain zero terminated strings where each character is ENTSIZE 4584 bytes long. The linker may remove duplicates within sections with the 4585 same name, same entity size and same flags. ENTSIZE must be an 4586 absolute expression. 4587 4588 If FLAGS contains the `G' symbol then the TYPE argument must be 4589 present along with an additional field like this: 4590 4591 .section NAME , "FLAGS"G, @TYPE, GROUPNAME[, LINKAGE] 4592 4593 The GROUPNAME field specifies the name of the section group to which 4594 this particular section belongs. The optional linkage field can 4595 contain: 4596 `comdat' 4597 indicates that only one copy of this section should be retained 4598 4599 `.gnu.linkonce' 4600 an alias for comdat 4601 4602 Note: if both the M and G flags are present then the fields for the 4603 Merge flag should come first, like this: 4604 4605 .section NAME , "FLAGS"MG, @TYPE, ENTSIZE, GROUPNAME[, LINKAGE] 4606 4607 If no flags are specified, the default flags depend upon the section 4608 name. If the section name is not recognized, the default will be for 4609 the section to have none of the above flags: it will not be allocated 4610 in memory, nor writable, nor executable. The section will contain data. 4611 4612 For ELF targets, the assembler supports another type of `.section' 4613 directive for compatibility with the Solaris assembler: 4614 4615 .section "NAME"[, FLAGS...] 4616 4617 Note that the section name is quoted. There may be a sequence of 4618 comma separated flags: 4619 `#alloc' 4620 section is allocatable 4621 4622 `#write' 4623 section is writable 4624 4625 `#execinstr' 4626 section is executable 4627 4628 `#tls' 4629 section is used for thread local storage 4630 4631 This directive replaces the current section and subsection. See the 4632 contents of the gas testsuite directory `gas/testsuite/gas/elf' for 4633 some examples of how this directive and the other section stack 4634 directives work. 4635 4636 4637 File: as.info, Node: Set, Next: Short, Prev: Section, Up: Pseudo Ops 4638 4639 7.96 `.set SYMBOL, EXPRESSION' 4640 ============================== 4641 4642 Set the value of SYMBOL to EXPRESSION. This changes SYMBOL's value and 4643 type to conform to EXPRESSION. If SYMBOL was flagged as external, it 4644 remains flagged (*note Symbol Attributes::). 4645 4646 You may `.set' a symbol many times in the same assembly. 4647 4648 If you `.set' a global symbol, the value stored in the object file 4649 is the last value stored into it. 4650 4651 The syntax for `set' on the HPPA is `SYMBOL .set EXPRESSION'. 4652 4653 On Z80 `set' is a real instruction, use `SYMBOL defl EXPRESSION' 4654 instead. 4655 4656 4657 File: as.info, Node: Short, Next: Single, Prev: Set, Up: Pseudo Ops 4658 4659 7.97 `.short EXPRESSIONS' 4660 ========================= 4661 4662 `.short' is normally the same as `.word'. *Note `.word': Word. 4663 4664 In some configurations, however, `.short' and `.word' generate 4665 numbers of different lengths. *Note Machine Dependencies::. 4666 4667 4668 File: as.info, Node: Single, Next: Size, Prev: Short, Up: Pseudo Ops 4669 4670 7.98 `.single FLONUMS' 4671 ====================== 4672 4673 This directive assembles zero or more flonums, separated by commas. It 4674 has the same effect as `.float'. The exact kind of floating point 4675 numbers emitted depends on how `as' is configured. *Note Machine 4676 Dependencies::. 4677 4678 4679 File: as.info, Node: Size, Next: Skip, Prev: Single, Up: Pseudo Ops 4680 4681 7.99 `.size' 4682 ============ 4683 4684 This directive is used to set the size associated with a symbol. 4685 4686 COFF Version 4687 ------------ 4688 4689 For COFF targets, the `.size' directive is only permitted inside 4690 `.def'/`.endef' pairs. It is used like this: 4691 4692 .size EXPRESSION 4693 4694 ELF Version 4695 ----------- 4696 4697 For ELF targets, the `.size' directive is used like this: 4698 4699 .size NAME , EXPRESSION 4700 4701 This directive sets the size associated with a symbol NAME. The 4702 size in bytes is computed from EXPRESSION which can make use of label 4703 arithmetic. This directive is typically used to set the size of 4704 function symbols. 4705 4706 4707 File: as.info, Node: Sleb128, Next: Space, Prev: Skip, Up: Pseudo Ops 4708 4709 7.100 `.sleb128 EXPRESSIONS' 4710 ============================ 4711 4712 SLEB128 stands for "signed little endian base 128." This is a compact, 4713 variable length representation of numbers used by the DWARF symbolic 4714 debugging format. *Note `.uleb128': Uleb128. 4715 4716 4717 File: as.info, Node: Skip, Next: Sleb128, Prev: Size, Up: Pseudo Ops 4718 4719 7.101 `.skip SIZE , FILL' 4720 ========================= 4721 4722 This directive emits SIZE bytes, each of value FILL. Both SIZE and 4723 FILL are absolute expressions. If the comma and FILL are omitted, FILL 4724 is assumed to be zero. This is the same as `.space'. 4725 4726 4727 File: as.info, Node: Space, Next: Stab, Prev: Sleb128, Up: Pseudo Ops 4728 4729 7.102 `.space SIZE , FILL' 4730 ========================== 4731 4732 This directive emits SIZE bytes, each of value FILL. Both SIZE and 4733 FILL are absolute expressions. If the comma and FILL are omitted, FILL 4734 is assumed to be zero. This is the same as `.skip'. 4735 4736 _Warning:_ `.space' has a completely different meaning for HPPA 4737 targets; use `.block' as a substitute. See `HP9000 Series 800 4738 Assembly Language Reference Manual' (HP 92432-90001) for the 4739 meaning of the `.space' directive. *Note HPPA Assembler 4740 Directives: HPPA Directives, for a summary. 4741 4742 4743 File: as.info, Node: Stab, Next: String, Prev: Space, Up: Pseudo Ops 4744 4745 7.103 `.stabd, .stabn, .stabs' 4746 ============================== 4747 4748 There are three directives that begin `.stab'. All emit symbols (*note 4749 Symbols::), for use by symbolic debuggers. The symbols are not entered 4750 in the `as' hash table: they cannot be referenced elsewhere in the 4751 source file. Up to five fields are required: 4752 4753 STRING 4754 This is the symbol's name. It may contain any character except 4755 `\000', so is more general than ordinary symbol names. Some 4756 debuggers used to code arbitrarily complex structures into symbol 4757 names using this field. 4758 4759 TYPE 4760 An absolute expression. The symbol's type is set to the low 8 4761 bits of this expression. Any bit pattern is permitted, but `ld' 4762 and debuggers choke on silly bit patterns. 4763 4764 OTHER 4765 An absolute expression. The symbol's "other" attribute is set to 4766 the low 8 bits of this expression. 4767 4768 DESC 4769 An absolute expression. The symbol's descriptor is set to the low 4770 16 bits of this expression. 4771 4772 VALUE 4773 An absolute expression which becomes the symbol's value. 4774 4775 If a warning is detected while reading a `.stabd', `.stabn', or 4776 `.stabs' statement, the symbol has probably already been created; you 4777 get a half-formed symbol in your object file. This is compatible with 4778 earlier assemblers! 4779 4780 `.stabd TYPE , OTHER , DESC' 4781 The "name" of the symbol generated is not even an empty string. 4782 It is a null pointer, for compatibility. Older assemblers used a 4783 null pointer so they didn't waste space in object files with empty 4784 strings. 4785 4786 The symbol's value is set to the location counter, relocatably. 4787 When your program is linked, the value of this symbol is the 4788 address of the location counter when the `.stabd' was assembled. 4789 4790 `.stabn TYPE , OTHER , DESC , VALUE' 4791 The name of the symbol is set to the empty string `""'. 4792 4793 `.stabs STRING , TYPE , OTHER , DESC , VALUE' 4794 All five fields are specified. 4795 4796 4797 File: as.info, Node: String, Next: Struct, Prev: Stab, Up: Pseudo Ops 4798 4799 7.104 `.string' "STR", `.string8' "STR", `.string16' 4800 ==================================================== 4801 4802 "STR", `.string32' "STR", `.string64' "STR" 4803 4804 Copy the characters in STR to the object file. You may specify more 4805 than one string to copy, separated by commas. Unless otherwise 4806 specified for a particular machine, the assembler marks the end of each 4807 string with a 0 byte. You can use any of the escape sequences 4808 described in *note Strings: Strings. 4809 4810 The variants `string16', `string32' and `string64' differ from the 4811 `string' pseudo opcode in that each 8-bit character from STR is copied 4812 and expanded to 16, 32 or 64 bits respectively. The expanded characters 4813 are stored in target endianness byte order. 4814 4815 Example: 4816 .string32 "BYE" 4817 expands to: 4818 .string "B\0\0\0Y\0\0\0E\0\0\0" /* On little endian targets. */ 4819 .string "\0\0\0B\0\0\0Y\0\0\0E" /* On big endian targets. */ 4820 4821 4822 File: as.info, Node: Struct, Next: SubSection, Prev: String, Up: Pseudo Ops 4823 4824 7.105 `.struct EXPRESSION' 4825 ========================== 4826 4827 Switch to the absolute section, and set the section offset to 4828 EXPRESSION, which must be an absolute expression. You might use this 4829 as follows: 4830 .struct 0 4831 field1: 4832 .struct field1 + 4 4833 field2: 4834 .struct field2 + 4 4835 field3: 4836 This would define the symbol `field1' to have the value 0, the symbol 4837 `field2' to have the value 4, and the symbol `field3' to have the value 4838 8. Assembly would be left in the absolute section, and you would need 4839 to use a `.section' directive of some sort to change to some other 4840 section before further assembly. 4841 4842 4843 File: as.info, Node: SubSection, Next: Symver, Prev: Struct, Up: Pseudo Ops 4844 4845 7.106 `.subsection NAME' 4846 ======================== 4847 4848 This is one of the ELF section stack manipulation directives. The 4849 others are `.section' (*note Section::), `.pushsection' (*note 4850 PushSection::), `.popsection' (*note PopSection::), and `.previous' 4851 (*note Previous::). 4852 4853 This directive replaces the current subsection with `name'. The 4854 current section is not changed. The replaced subsection is put onto 4855 the section stack in place of the then current top of stack subsection. 4856 4857 4858 File: as.info, Node: Symver, Next: Tag, Prev: SubSection, Up: Pseudo Ops 4859 4860 7.107 `.symver' 4861 =============== 4862 4863 Use the `.symver' directive to bind symbols to specific version nodes 4864 within a source file. This is only supported on ELF platforms, and is 4865 typically used when assembling files to be linked into a shared library. 4866 There are cases where it may make sense to use this in objects to be 4867 bound into an application itself so as to override a versioned symbol 4868 from a shared library. 4869 4870 For ELF targets, the `.symver' directive can be used like this: 4871 .symver NAME, NAME2@NODENAME 4872 If the symbol NAME is defined within the file being assembled, the 4873 `.symver' directive effectively creates a symbol alias with the name 4874 NAME2@NODENAME, and in fact the main reason that we just don't try and 4875 create a regular alias is that the @ character isn't permitted in 4876 symbol names. The NAME2 part of the name is the actual name of the 4877 symbol by which it will be externally referenced. The name NAME itself 4878 is merely a name of convenience that is used so that it is possible to 4879 have definitions for multiple versions of a function within a single 4880 source file, and so that the compiler can unambiguously know which 4881 version of a function is being mentioned. The NODENAME portion of the 4882 alias should be the name of a node specified in the version script 4883 supplied to the linker when building a shared library. If you are 4884 attempting to override a versioned symbol from a shared library, then 4885 NODENAME should correspond to the nodename of the symbol you are trying 4886 to override. 4887 4888 If the symbol NAME is not defined within the file being assembled, 4889 all references to NAME will be changed to NAME2@NODENAME. If no 4890 reference to NAME is made, NAME2@NODENAME will be removed from the 4891 symbol table. 4892 4893 Another usage of the `.symver' directive is: 4894 .symver NAME, NAME2@@NODENAME 4895 In this case, the symbol NAME must exist and be defined within the 4896 file being assembled. It is similar to NAME2@NODENAME. The difference 4897 is NAME2@@NODENAME will also be used to resolve references to NAME2 by 4898 the linker. 4899 4900 The third usage of the `.symver' directive is: 4901 .symver NAME, NAME2@@@NODENAME 4902 When NAME is not defined within the file being assembled, it is 4903 treated as NAME2@NODENAME. When NAME is defined within the file being 4904 assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME. 4905 4906 4907 File: as.info, Node: Tag, Next: Text, Prev: Symver, Up: Pseudo Ops 4908 4909 7.108 `.tag STRUCTNAME' 4910 ======================= 4911 4912 This directive is generated by compilers to include auxiliary debugging 4913 information in the symbol table. It is only permitted inside 4914 `.def'/`.endef' pairs. Tags are used to link structure definitions in 4915 the symbol table with instances of those structures. 4916 4917 4918 File: as.info, Node: Text, Next: Title, Prev: Tag, Up: Pseudo Ops 4919 4920 7.109 `.text SUBSECTION' 4921 ======================== 4922 4923 Tells `as' to assemble the following statements onto the end of the 4924 text subsection numbered SUBSECTION, which is an absolute expression. 4925 If SUBSECTION is omitted, subsection number zero is used. 4926 4927 4928 File: as.info, Node: Title, Next: Type, Prev: Text, Up: Pseudo Ops 4929 4930 7.110 `.title "HEADING"' 4931 ======================== 4932 4933 Use HEADING as the title (second line, immediately after the source 4934 file name and pagenumber) when generating assembly listings. 4935 4936 This directive affects subsequent pages, as well as the current page 4937 if it appears within ten lines of the top of a page. 4938 4939 4940 File: as.info, Node: Type, Next: Uleb128, Prev: Title, Up: Pseudo Ops 4941 4942 7.111 `.type' 4943 ============= 4944 4945 This directive is used to set the type of a symbol. 4946 4947 COFF Version 4948 ------------ 4949 4950 For COFF targets, this directive is permitted only within 4951 `.def'/`.endef' pairs. It is used like this: 4952 4953 .type INT 4954 4955 This records the integer INT as the type attribute of a symbol table 4956 entry. 4957 4958 ELF Version 4959 ----------- 4960 4961 For ELF targets, the `.type' directive is used like this: 4962 4963 .type NAME , TYPE DESCRIPTION 4964 4965 This sets the type of symbol NAME to be either a function symbol or 4966 an object symbol. There are five different syntaxes supported for the 4967 TYPE DESCRIPTION field, in order to provide compatibility with various 4968 other assemblers. 4969 4970 Because some of the characters used in these syntaxes (such as `@' 4971 and `#') are comment characters for some architectures, some of the 4972 syntaxes below do not work on all architectures. The first variant 4973 will be accepted by the GNU assembler on all architectures so that 4974 variant should be used for maximum portability, if you do not need to 4975 assemble your code with other assemblers. 4976 4977 The syntaxes supported are: 4978 4979 .type <name> STT_<TYPE_IN_UPPER_CASE> 4980 .type <name>,#<type> 4981 .type <name>,@<type> 4982 .type <name>,%>type> 4983 .type <name>,"<type>" 4984 4985 The types supported are: 4986 4987 `STT_FUNC' 4988 `function' 4989 Mark the symbol as being a function name. 4990 4991 `STT_OBJECT' 4992 `object' 4993 Mark the symbol as being a data object. 4994 4995 `STT_TLS' 4996 `tls_object' 4997 Mark the symbol as being a thead-local data object. 4998 4999 `STT_COMMON' 5000 `common' 5001 Mark the symbol as being a common data object. 5002 5003 Note: Some targets support extra types in addition to those listed 5004 above. 5005 5006 5007 File: as.info, Node: Uleb128, Next: Val, Prev: Type, Up: Pseudo Ops 5008 5009 7.112 `.uleb128 EXPRESSIONS' 5010 ============================ 5011 5012 ULEB128 stands for "unsigned little endian base 128." This is a 5013 compact, variable length representation of numbers used by the DWARF 5014 symbolic debugging format. *Note `.sleb128': Sleb128. 5015 5016 5017 File: as.info, Node: Val, Next: Version, Prev: Uleb128, Up: Pseudo Ops 5018 5019 7.113 `.val ADDR' 5020 ================= 5021 5022 This directive, permitted only within `.def'/`.endef' pairs, records 5023 the address ADDR as the value attribute of a symbol table entry. 5024 5025 5026 File: as.info, Node: Version, Next: VTableEntry, Prev: Val, Up: Pseudo Ops 5027 5028 7.114 `.version "STRING"' 5029 ========================= 5030 5031 This directive creates a `.note' section and places into it an ELF 5032 formatted note of type NT_VERSION. The note's name is set to `string'. 5033 5034 5035 File: as.info, Node: VTableEntry, Next: VTableInherit, Prev: Version, Up: Pseudo Ops 5036 5037 7.115 `.vtable_entry TABLE, OFFSET' 5038 =================================== 5039 5040 This directive finds or creates a symbol `table' and creates a 5041 `VTABLE_ENTRY' relocation for it with an addend of `offset'. 5042 5043 5044 File: as.info, Node: VTableInherit, Next: Warning, Prev: VTableEntry, Up: Pseudo Ops 5045 5046 7.116 `.vtable_inherit CHILD, PARENT' 5047 ===================================== 5048 5049 This directive finds the symbol `child' and finds or creates the symbol 5050 `parent' and then creates a `VTABLE_INHERIT' relocation for the parent 5051 whose addend is the value of the child symbol. As a special case the 5052 parent name of `0' is treated as referring to the `*ABS*' section. 5053 5054 5055 File: as.info, Node: Warning, Next: Weak, Prev: VTableInherit, Up: Pseudo Ops 5056 5057 7.117 `.warning "STRING"' 5058 ========================= 5059 5060 Similar to the directive `.error' (*note `.error "STRING"': Error.), 5061 but just emits a warning. 5062 5063 5064 File: as.info, Node: Weak, Next: Weakref, Prev: Warning, Up: Pseudo Ops 5065 5066 7.118 `.weak NAMES' 5067 =================== 5068 5069 This directive sets the weak attribute on the comma separated list of 5070 symbol `names'. If the symbols do not already exist, they will be 5071 created. 5072 5073 On COFF targets other than PE, weak symbols are a GNU extension. 5074 This directive sets the weak attribute on the comma separated list of 5075 symbol `names'. If the symbols do not already exist, they will be 5076 created. 5077 5078 On the PE target, weak symbols are supported natively as weak 5079 aliases. When a weak symbol is created that is not an alias, GAS 5080 creates an alternate symbol to hold the default value. 5081 5082 5083 File: as.info, Node: Weakref, Next: Word, Prev: Weak, Up: Pseudo Ops 5084 5085 7.119 `.weakref ALIAS, TARGET' 5086 ============================== 5087 5088 This directive creates an alias to the target symbol that enables the 5089 symbol to be referenced with weak-symbol semantics, but without 5090 actually making it weak. If direct references or definitions of the 5091 symbol are present, then the symbol will not be weak, but if all 5092 references to it are through weak references, the symbol will be marked 5093 as weak in the symbol table. 5094 5095 The effect is equivalent to moving all references to the alias to a 5096 separate assembly source file, renaming the alias to the symbol in it, 5097 declaring the symbol as weak there, and running a reloadable link to 5098 merge the object files resulting from the assembly of the new source 5099 file and the old source file that had the references to the alias 5100 removed. 5101 5102 The alias itself never makes to the symbol table, and is entirely 5103 handled within the assembler. 5104 5105 5106 File: as.info, Node: Word, Next: Deprecated, Prev: Weakref, Up: Pseudo Ops 5107 5108 7.120 `.word EXPRESSIONS' 5109 ========================= 5110 5111 This directive expects zero or more EXPRESSIONS, of any section, 5112 separated by commas. 5113 5114 The size of the number emitted, and its byte order, depend on what 5115 target computer the assembly is for. 5116 5117 _Warning: Special Treatment to support Compilers_ 5118 5119 Machines with a 32-bit address space, but that do less than 32-bit 5120 addressing, require the following special treatment. If the machine of 5121 interest to you does 32-bit addressing (or doesn't require it; *note 5122 Machine Dependencies::), you can ignore this issue. 5123 5124 In order to assemble compiler output into something that works, `as' 5125 occasionally does strange things to `.word' directives. Directives of 5126 the form `.word sym1-sym2' are often emitted by compilers as part of 5127 jump tables. Therefore, when `as' assembles a directive of the form 5128 `.word sym1-sym2', and the difference between `sym1' and `sym2' does 5129 not fit in 16 bits, `as' creates a "secondary jump table", immediately 5130 before the next label. This secondary jump table is preceded by a 5131 short-jump to the first byte after the secondary table. This 5132 short-jump prevents the flow of control from accidentally falling into 5133 the new table. Inside the table is a long-jump to `sym2'. The 5134 original `.word' contains `sym1' minus the address of the long-jump to 5135 `sym2'. 5136 5137 If there were several occurrences of `.word sym1-sym2' before the 5138 secondary jump table, all of them are adjusted. If there was a `.word 5139 sym3-sym4', that also did not fit in sixteen bits, a long-jump to 5140 `sym4' is included in the secondary jump table, and the `.word' 5141 directives are adjusted to contain `sym3' minus the address of the 5142 long-jump to `sym4'; and so on, for as many entries in the original 5143 jump table as necessary. 5144 5145 5146 File: as.info, Node: Deprecated, Prev: Word, Up: Pseudo Ops 5147 5148 7.121 Deprecated Directives 5149 =========================== 5150 5151 One day these directives won't work. They are included for 5152 compatibility with older assemblers. 5153 .abort 5154 5155 .line 5156 5157 5158 File: as.info, Node: Object Attributes, Next: Machine Dependencies, Prev: Pseudo Ops, Up: Top 5159 5160 8 Object Attributes 5161 ******************* 5162 5163 `as' assembles source files written for a specific architecture into 5164 object files for that architecture. But not all object files are alike. 5165 Many architectures support incompatible variations. For instance, 5166 floating point arguments might be passed in floating point registers if 5167 the object file requires hardware floating point support--or floating 5168 point arguments might be passed in integer registers if the object file 5169 supports processors with no hardware floating point unit. Or, if two 5170 objects are built for different generations of the same architecture, 5171 the combination may require the newer generation at run-time. 5172 5173 This information is useful during and after linking. At link time, 5174 `ld' can warn about incompatible object files. After link time, tools 5175 like `gdb' can use it to process the linked file correctly. 5176 5177 Compatibility information is recorded as a series of object 5178 attributes. Each attribute has a "vendor", "tag", and "value". The 5179 vendor is a string, and indicates who sets the meaning of the tag. The 5180 tag is an integer, and indicates what property the attribute describes. 5181 The value may be a string or an integer, and indicates how the property 5182 affects this object. Missing attributes are the same as attributes 5183 with a zero value or empty string value. 5184 5185 Object attributes were developed as part of the ABI for the ARM 5186 Architecture. The file format is documented in `ELF for the ARM 5187 Architecture'. 5188 5189 * Menu: 5190 5191 * GNU Object Attributes:: GNU Object Attributes 5192 * Defining New Object Attributes:: Defining New Object Attributes 5193 5194 5195 File: as.info, Node: GNU Object Attributes, Next: Defining New Object Attributes, Up: Object Attributes 5196 5197 8.1 GNU Object Attributes 5198 ========================= 5199 5200 The `.gnu_attribute' directive records an object attribute with vendor 5201 `gnu'. 5202 5203 Except for `Tag_compatibility', which has both an integer and a 5204 string for its value, GNU attributes have a string value if the tag 5205 number is odd and an integer value if the tag number is even. The 5206 second bit (`TAG & 2' is set for architecture-independent attributes 5207 and clear for architecture-dependent ones. 5208 5209 8.1.1 Common GNU attributes 5210 --------------------------- 5211 5212 These attributes are valid on all architectures. 5213 5214 Tag_compatibility (32) 5215 The compatibility attribute takes an integer flag value and a 5216 vendor name. If the flag value is 0, the file is compatible with 5217 other toolchains. If it is 1, then the file is only compatible 5218 with the named toolchain. If it is greater than 1, the file can 5219 only be processed by other toolchains under some private 5220 arrangement indicated by the flag value and the vendor name. 5221 5222 8.1.2 MIPS Attributes 5223 --------------------- 5224 5225 Tag_GNU_MIPS_ABI_FP (4) 5226 The floating-point ABI used by this object file. The value will 5227 be: 5228 5229 * 0 for files not affected by the floating-point ABI. 5230 5231 * 1 for files using the hardware floating-point with a standard 5232 double-precision FPU. 5233 5234 * 2 for files using the hardware floating-point ABI with a 5235 single-precision FPU. 5236 5237 * 3 for files using the software floating-point ABI. 5238 5239 * 4 for files using the hardware floating-point ABI with 64-bit 5240 wide double-precision floating-point registers and 32-bit 5241 wide general purpose registers. 5242 5243 8.1.3 PowerPC Attributes 5244 ------------------------ 5245 5246 Tag_GNU_Power_ABI_FP (4) 5247 The floating-point ABI used by this object file. The value will 5248 be: 5249 5250 * 0 for files not affected by the floating-point ABI. 5251 5252 * 1 for files using double-precision hardware floating-point 5253 ABI. 5254 5255 * 2 for files using the software floating-point ABI. 5256 5257 * 3 for files using single-precision hardware floating-point 5258 ABI. 5259 5260 Tag_GNU_Power_ABI_Vector (8) 5261 The vector ABI used by this object file. The value will be: 5262 5263 * 0 for files not affected by the vector ABI. 5264 5265 * 1 for files using general purpose registers to pass vectors. 5266 5267 * 2 for files using AltiVec registers to pass vectors. 5268 5269 * 3 for files using SPE registers to pass vectors. 5270 5271 5272 File: as.info, Node: Defining New Object Attributes, Prev: GNU Object Attributes, Up: Object Attributes 5273 5274 8.2 Defining New Object Attributes 5275 ================================== 5276 5277 If you want to define a new GNU object attribute, here are the places 5278 you will need to modify. New attributes should be discussed on the 5279 `binutils' mailing list. 5280 5281 * This manual, which is the official register of attributes. 5282 5283 * The header for your architecture `include/elf', to define the tag. 5284 5285 * The `bfd' support file for your architecture, to merge the 5286 attribute and issue any appropriate link warnings. 5287 5288 * Test cases in `ld/testsuite' for merging and link warnings. 5289 5290 * `binutils/readelf.c' to display your attribute. 5291 5292 * GCC, if you want the compiler to mark the attribute automatically. 5293 5294 5295 File: as.info, Node: Machine Dependencies, Next: Reporting Bugs, Prev: Object Attributes, Up: Top 5296 5297 9 Machine Dependent Features 5298 **************************** 5299 5300 The machine instruction sets are (almost by definition) different on 5301 each machine where `as' runs. Floating point representations vary as 5302 well, and `as' often supports a few additional directives or 5303 command-line options for compatibility with other assemblers on a 5304 particular platform. Finally, some versions of `as' support special 5305 pseudo-instructions for branch optimization. 5306 5307 This chapter discusses most of these differences, though it does not 5308 include details on any machine's instruction set. For details on that 5309 subject, see the hardware manufacturer's manual. 5310 5311 * Menu: 5312 5313 5314 * Alpha-Dependent:: Alpha Dependent Features 5315 5316 * ARC-Dependent:: ARC Dependent Features 5317 5318 * ARM-Dependent:: ARM Dependent Features 5319 5320 * AVR-Dependent:: AVR Dependent Features 5321 5322 * BFIN-Dependent:: BFIN Dependent Features 5323 5324 * CR16-Dependent:: CR16 Dependent Features 5325 5326 * CRIS-Dependent:: CRIS Dependent Features 5327 5328 * D10V-Dependent:: D10V Dependent Features 5329 5330 * D30V-Dependent:: D30V Dependent Features 5331 5332 * H8/300-Dependent:: Renesas H8/300 Dependent Features 5333 5334 * HPPA-Dependent:: HPPA Dependent Features 5335 5336 * ESA/390-Dependent:: IBM ESA/390 Dependent Features 5337 5338 * i386-Dependent:: Intel 80386 and AMD x86-64 Dependent Features 5339 5340 * i860-Dependent:: Intel 80860 Dependent Features 5341 5342 * i960-Dependent:: Intel 80960 Dependent Features 5343 5344 * IA-64-Dependent:: Intel IA-64 Dependent Features 5345 5346 * IP2K-Dependent:: IP2K Dependent Features 5347 5348 * M32C-Dependent:: M32C Dependent Features 5349 5350 * M32R-Dependent:: M32R Dependent Features 5351 5352 * M68K-Dependent:: M680x0 Dependent Features 5353 5354 * M68HC11-Dependent:: M68HC11 and 68HC12 Dependent Features 5355 5356 * MIPS-Dependent:: MIPS Dependent Features 5357 5358 * MMIX-Dependent:: MMIX Dependent Features 5359 5360 * MSP430-Dependent:: MSP430 Dependent Features 5361 5362 * SH-Dependent:: Renesas / SuperH SH Dependent Features 5363 * SH64-Dependent:: SuperH SH64 Dependent Features 5364 5365 * PDP-11-Dependent:: PDP-11 Dependent Features 5366 5367 * PJ-Dependent:: picoJava Dependent Features 5368 5369 * PPC-Dependent:: PowerPC Dependent Features 5370 5371 * Sparc-Dependent:: SPARC Dependent Features 5372 5373 * TIC54X-Dependent:: TI TMS320C54x Dependent Features 5374 5375 * V850-Dependent:: V850 Dependent Features 5376 5377 * Xtensa-Dependent:: Xtensa Dependent Features 5378 5379 * Z80-Dependent:: Z80 Dependent Features 5380 5381 * Z8000-Dependent:: Z8000 Dependent Features 5382 5383 * Vax-Dependent:: VAX Dependent Features 5384 5385 5386 File: as.info, Node: Alpha-Dependent, Next: ARC-Dependent, Up: Machine Dependencies 5387 5388 9.1 Alpha Dependent Features 5389 ============================ 5390 5391 * Menu: 5392 5393 * Alpha Notes:: Notes 5394 * Alpha Options:: Options 5395 * Alpha Syntax:: Syntax 5396 * Alpha Floating Point:: Floating Point 5397 * Alpha Directives:: Alpha Machine Directives 5398 * Alpha Opcodes:: Opcodes 5399 5400 5401 File: as.info, Node: Alpha Notes, Next: Alpha Options, Up: Alpha-Dependent 5402 5403 9.1.1 Notes 5404 ----------- 5405 5406 The documentation here is primarily for the ELF object format. `as' 5407 also supports the ECOFF and EVAX formats, but features specific to 5408 these formats are not yet documented. 5409 5410 5411 File: as.info, Node: Alpha Options, Next: Alpha Syntax, Prev: Alpha Notes, Up: Alpha-Dependent 5412 5413 9.1.2 Options 5414 ------------- 5415 5416 `-mCPU' 5417 This option specifies the target processor. If an attempt is made 5418 to assemble an instruction which will not execute on the target 5419 processor, the assembler may either expand the instruction as a 5420 macro or issue an error message. This option is equivalent to the 5421 `.arch' directive. 5422 5423 The following processor names are recognized: `21064', `21064a', 5424 `21066', `21068', `21164', `21164a', `21164pc', `21264', `21264a', 5425 `21264b', `ev4', `ev5', `lca45', `ev5', `ev56', `pca56', `ev6', 5426 `ev67', `ev68'. The special name `all' may be used to allow the 5427 assembler to accept instructions valid for any Alpha processor. 5428 5429 In order to support existing practice in OSF/1 with respect to 5430 `.arch', and existing practice within `MILO' (the Linux ARC 5431 bootloader), the numbered processor names (e.g. 21064) enable the 5432 processor-specific PALcode instructions, while the 5433 "electro-vlasic" names (e.g. `ev4') do not. 5434 5435 `-mdebug' 5436 `-no-mdebug' 5437 Enables or disables the generation of `.mdebug' encapsulation for 5438 stabs directives and procedure descriptors. The default is to 5439 automatically enable `.mdebug' when the first stabs directive is 5440 seen. 5441 5442 `-relax' 5443 This option forces all relocations to be put into the object file, 5444 instead of saving space and resolving some relocations at assembly 5445 time. Note that this option does not propagate all symbol 5446 arithmetic into the object file, because not all symbol arithmetic 5447 can be represented. However, the option can still be useful in 5448 specific applications. 5449 5450 `-g' 5451 This option is used when the compiler generates debug information. 5452 When `gcc' is using `mips-tfile' to generate debug information for 5453 ECOFF, local labels must be passed through to the object file. 5454 Otherwise this option has no effect. 5455 5456 `-GSIZE' 5457 A local common symbol larger than SIZE is placed in `.bss', while 5458 smaller symbols are placed in `.sbss'. 5459 5460 `-F' 5461 `-32addr' 5462 These options are ignored for backward compatibility. 5463 5464 5465 File: as.info, Node: Alpha Syntax, Next: Alpha Floating Point, Prev: Alpha Options, Up: Alpha-Dependent 5466 5467 9.1.3 Syntax 5468 ------------ 5469 5470 The assembler syntax closely follow the Alpha Reference Manual; 5471 assembler directives and general syntax closely follow the OSF/1 and 5472 OpenVMS syntax, with a few differences for ELF. 5473 5474 * Menu: 5475 5476 * Alpha-Chars:: Special Characters 5477 * Alpha-Regs:: Register Names 5478 * Alpha-Relocs:: Relocations 5479 5480 5481 File: as.info, Node: Alpha-Chars, Next: Alpha-Regs, Up: Alpha Syntax 5482 5483 9.1.3.1 Special Characters 5484 .......................... 5485 5486 `#' is the line comment character. 5487 5488 `;' can be used instead of a newline to separate statements. 5489 5490 5491 File: as.info, Node: Alpha-Regs, Next: Alpha-Relocs, Prev: Alpha-Chars, Up: Alpha Syntax 5492 5493 9.1.3.2 Register Names 5494 ...................... 5495 5496 The 32 integer registers are referred to as `$N' or `$rN'. In 5497 addition, registers 15, 28, 29, and 30 may be referred to by the 5498 symbols `$fp', `$at', `$gp', and `$sp' respectively. 5499 5500 The 32 floating-point registers are referred to as `$fN'. 5501 5502 5503 File: as.info, Node: Alpha-Relocs, Prev: Alpha-Regs, Up: Alpha Syntax 5504 5505 9.1.3.3 Relocations 5506 ................... 5507 5508 Some of these relocations are available for ECOFF, but mostly only for 5509 ELF. They are modeled after the relocation format introduced in 5510 Digital Unix 4.0, but there are additions. 5511 5512 The format is `!TAG' or `!TAG!NUMBER' where TAG is the name of the 5513 relocation. In some cases NUMBER is used to relate specific 5514 instructions. 5515 5516 The relocation is placed at the end of the instruction like so: 5517 5518 ldah $0,a($29) !gprelhigh 5519 lda $0,a($0) !gprellow 5520 ldq $1,b($29) !literal!100 5521 ldl $2,0($1) !lituse_base!100 5522 5523 `!literal' 5524 `!literal!N' 5525 Used with an `ldq' instruction to load the address of a symbol 5526 from the GOT. 5527 5528 A sequence number N is optional, and if present is used to pair 5529 `lituse' relocations with this `literal' relocation. The `lituse' 5530 relocations are used by the linker to optimize the code based on 5531 the final location of the symbol. 5532 5533 Note that these optimizations are dependent on the data flow of the 5534 program. Therefore, if _any_ `lituse' is paired with a `literal' 5535 relocation, then _all_ uses of the register set by the `literal' 5536 instruction must also be marked with `lituse' relocations. This 5537 is because the original `literal' instruction may be deleted or 5538 transformed into another instruction. 5539 5540 Also note that there may be a one-to-many relationship between 5541 `literal' and `lituse', but not a many-to-one. That is, if there 5542 are two code paths that load up the same address and feed the 5543 value to a single use, then the use may not use a `lituse' 5544 relocation. 5545 5546 `!lituse_base!N' 5547 Used with any memory format instruction (e.g. `ldl') to indicate 5548 that the literal is used for an address load. The offset field of 5549 the instruction must be zero. During relaxation, the code may be 5550 altered to use a gp-relative load. 5551 5552 `!lituse_jsr!N' 5553 Used with a register branch format instruction (e.g. `jsr') to 5554 indicate that the literal is used for a call. During relaxation, 5555 the code may be altered to use a direct branch (e.g. `bsr'). 5556 5557 `!lituse_jsrdirect!N' 5558 Similar to `lituse_jsr', but also that this call cannot be vectored 5559 through a PLT entry. This is useful for functions with special 5560 calling conventions which do not allow the normal call-clobbered 5561 registers to be clobbered. 5562 5563 `!lituse_bytoff!N' 5564 Used with a byte mask instruction (e.g. `extbl') to indicate that 5565 only the low 3 bits of the address are relevant. During 5566 relaxation, the code may be altered to use an immediate instead of 5567 a register shift. 5568 5569 `!lituse_addr!N' 5570 Used with any other instruction to indicate that the original 5571 address is in fact used, and the original `ldq' instruction may 5572 not be altered or deleted. This is useful in conjunction with 5573 `lituse_jsr' to test whether a weak symbol is defined. 5574 5575 ldq $27,foo($29) !literal!1 5576 beq $27,is_undef !lituse_addr!1 5577 jsr $26,($27),foo !lituse_jsr!1 5578 5579 `!lituse_tlsgd!N' 5580 Used with a register branch format instruction to indicate that the 5581 literal is the call to `__tls_get_addr' used to compute the 5582 address of the thread-local storage variable whose descriptor was 5583 loaded with `!tlsgd!N'. 5584 5585 `!lituse_tlsldm!N' 5586 Used with a register branch format instruction to indicate that the 5587 literal is the call to `__tls_get_addr' used to compute the 5588 address of the base of the thread-local storage block for the 5589 current module. The descriptor for the module must have been 5590 loaded with `!tlsldm!N'. 5591 5592 `!gpdisp!N' 5593 Used with `ldah' and `lda' to load the GP from the current 5594 address, a-la the `ldgp' macro. The source register for the 5595 `ldah' instruction must contain the address of the `ldah' 5596 instruction. There must be exactly one `lda' instruction paired 5597 with the `ldah' instruction, though it may appear anywhere in the 5598 instruction stream. The immediate operands must be zero. 5599 5600 bsr $26,foo 5601 ldah $29,0($26) !gpdisp!1 5602 lda $29,0($29) !gpdisp!1 5603 5604 `!gprelhigh' 5605 Used with an `ldah' instruction to add the high 16 bits of a 5606 32-bit displacement from the GP. 5607 5608 `!gprellow' 5609 Used with any memory format instruction to add the low 16 bits of a 5610 32-bit displacement from the GP. 5611 5612 `!gprel' 5613 Used with any memory format instruction to add a 16-bit 5614 displacement from the GP. 5615 5616 `!samegp' 5617 Used with any branch format instruction to skip the GP load at the 5618 target address. The referenced symbol must have the same GP as the 5619 source object file, and it must be declared to either not use `$27' 5620 or perform a standard GP load in the first two instructions via the 5621 `.prologue' directive. 5622 5623 `!tlsgd' 5624 `!tlsgd!N' 5625 Used with an `lda' instruction to load the address of a TLS 5626 descriptor for a symbol in the GOT. 5627 5628 The sequence number N is optional, and if present it used to pair 5629 the descriptor load with both the `literal' loading the address of 5630 the `__tls_get_addr' function and the `lituse_tlsgd' marking the 5631 call to that function. 5632 5633 For proper relaxation, both the `tlsgd', `literal' and `lituse' 5634 relocations must be in the same extended basic block. That is, 5635 the relocation with the lowest address must be executed first at 5636 runtime. 5637 5638 `!tlsldm' 5639 `!tlsldm!N' 5640 Used with an `lda' instruction to load the address of a TLS 5641 descriptor for the current module in the GOT. 5642 5643 Similar in other respects to `tlsgd'. 5644 5645 `!gotdtprel' 5646 Used with an `ldq' instruction to load the offset of the TLS 5647 symbol within its module's thread-local storage block. Also known 5648 as the dynamic thread pointer offset or dtp-relative offset. 5649 5650 `!dtprelhi' 5651 `!dtprello' 5652 `!dtprel' 5653 Like `gprel' relocations except they compute dtp-relative offsets. 5654 5655 `!gottprel' 5656 Used with an `ldq' instruction to load the offset of the TLS 5657 symbol from the thread pointer. Also known as the tp-relative 5658 offset. 5659 5660 `!tprelhi' 5661 `!tprello' 5662 `!tprel' 5663 Like `gprel' relocations except they compute tp-relative offsets. 5664 5665 5666 File: as.info, Node: Alpha Floating Point, Next: Alpha Directives, Prev: Alpha Syntax, Up: Alpha-Dependent 5667 5668 9.1.4 Floating Point 5669 -------------------- 5670 5671 The Alpha family uses both IEEE and VAX floating-point numbers. 5672 5673 5674 File: as.info, Node: Alpha Directives, Next: Alpha Opcodes, Prev: Alpha Floating Point, Up: Alpha-Dependent 5675 5676 9.1.5 Alpha Assembler Directives 5677 -------------------------------- 5678 5679 `as' for the Alpha supports many additional directives for 5680 compatibility with the native assembler. This section describes them 5681 only briefly. 5682 5683 These are the additional directives in `as' for the Alpha: 5684 5685 `.arch CPU' 5686 Specifies the target processor. This is equivalent to the `-mCPU' 5687 command-line option. *Note Options: Alpha Options, for a list of 5688 values for CPU. 5689 5690 `.ent FUNCTION[, N]' 5691 Mark the beginning of FUNCTION. An optional number may follow for 5692 compatibility with the OSF/1 assembler, but is ignored. When 5693 generating `.mdebug' information, this will create a procedure 5694 descriptor for the function. In ELF, it will mark the symbol as a 5695 function a-la the generic `.type' directive. 5696 5697 `.end FUNCTION' 5698 Mark the end of FUNCTION. In ELF, it will set the size of the 5699 symbol a-la the generic `.size' directive. 5700 5701 `.mask MASK, OFFSET' 5702 Indicate which of the integer registers are saved in the current 5703 function's stack frame. MASK is interpreted a bit mask in which 5704 bit N set indicates that register N is saved. The registers are 5705 saved in a block located OFFSET bytes from the "canonical frame 5706 address" (CFA) which is the value of the stack pointer on entry to 5707 the function. The registers are saved sequentially, except that 5708 the return address register (normally `$26') is saved first. 5709 5710 This and the other directives that describe the stack frame are 5711 currently only used when generating `.mdebug' information. They 5712 may in the future be used to generate DWARF2 `.debug_frame' unwind 5713 information for hand written assembly. 5714 5715 `.fmask MASK, OFFSET' 5716 Indicate which of the floating-point registers are saved in the 5717 current stack frame. The MASK and OFFSET parameters are 5718 interpreted as with `.mask'. 5719 5720 `.frame FRAMEREG, FRAMEOFFSET, RETREG[, ARGOFFSET]' 5721 Describes the shape of the stack frame. The frame pointer in use 5722 is FRAMEREG; normally this is either `$fp' or `$sp'. The frame 5723 pointer is FRAMEOFFSET bytes below the CFA. The return address is 5724 initially located in RETREG until it is saved as indicated in 5725 `.mask'. For compatibility with OSF/1 an optional ARGOFFSET 5726 parameter is accepted and ignored. It is believed to indicate the 5727 offset from the CFA to the saved argument registers. 5728 5729 `.prologue N' 5730 Indicate that the stack frame is set up and all registers have been 5731 spilled. The argument N indicates whether and how the function 5732 uses the incoming "procedure vector" (the address of the called 5733 function) in `$27'. 0 indicates that `$27' is not used; 1 5734 indicates that the first two instructions of the function use `$27' 5735 to perform a load of the GP register; 2 indicates that `$27' is 5736 used in some non-standard way and so the linker cannot elide the 5737 load of the procedure vector during relaxation. 5738 5739 `.usepv FUNCTION, WHICH' 5740 Used to indicate the use of the `$27' register, similar to 5741 `.prologue', but without the other semantics of needing to be 5742 inside an open `.ent'/`.end' block. 5743 5744 The WHICH argument should be either `no', indicating that `$27' is 5745 not used, or `std', indicating that the first two instructions of 5746 the function perform a GP load. 5747 5748 One might use this directive instead of `.prologue' if you are 5749 also using dwarf2 CFI directives. 5750 5751 `.gprel32 EXPRESSION' 5752 Computes the difference between the address in EXPRESSION and the 5753 GP for the current object file, and stores it in 4 bytes. In 5754 addition to being smaller than a full 8 byte address, this also 5755 does not require a dynamic relocation when used in a shared 5756 library. 5757 5758 `.t_floating EXPRESSION' 5759 Stores EXPRESSION as an IEEE double precision value. 5760 5761 `.s_floating EXPRESSION' 5762 Stores EXPRESSION as an IEEE single precision value. 5763 5764 `.f_floating EXPRESSION' 5765 Stores EXPRESSION as a VAX F format value. 5766 5767 `.g_floating EXPRESSION' 5768 Stores EXPRESSION as a VAX G format value. 5769 5770 `.d_floating EXPRESSION' 5771 Stores EXPRESSION as a VAX D format value. 5772 5773 `.set FEATURE' 5774 Enables or disables various assembler features. Using the positive 5775 name of the feature enables while using `noFEATURE' disables. 5776 5777 `at' 5778 Indicates that macro expansions may clobber the "assembler 5779 temporary" (`$at' or `$28') register. Some macros may not be 5780 expanded without this and will generate an error message if 5781 `noat' is in effect. When `at' is in effect, a warning will 5782 be generated if `$at' is used by the programmer. 5783 5784 `macro' 5785 Enables the expansion of macro instructions. Note that 5786 variants of real instructions, such as `br label' vs `br 5787 $31,label' are considered alternate forms and not macros. 5788 5789 `move' 5790 `reorder' 5791 `volatile' 5792 These control whether and how the assembler may re-order 5793 instructions. Accepted for compatibility with the OSF/1 5794 assembler, but `as' does not do instruction scheduling, so 5795 these features are ignored. 5796 5797 The following directives are recognized for compatibility with the 5798 OSF/1 assembler but are ignored. 5799 5800 .proc .aproc 5801 .reguse .livereg 5802 .option .aent 5803 .ugen .eflag 5804 .alias .noalias 5805 5806 5807 File: as.info, Node: Alpha Opcodes, Prev: Alpha Directives, Up: Alpha-Dependent 5808 5809 9.1.6 Opcodes 5810 ------------- 5811 5812 For detailed information on the Alpha machine instruction set, see the 5813 Alpha Architecture Handbook 5814 (ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf). 5815 5816 5817 File: as.info, Node: ARC-Dependent, Next: ARM-Dependent, Prev: Alpha-Dependent, Up: Machine Dependencies 5818 5819 9.2 ARC Dependent Features 5820 ========================== 5821 5822 * Menu: 5823 5824 * ARC Options:: Options 5825 * ARC Syntax:: Syntax 5826 * ARC Floating Point:: Floating Point 5827 * ARC Directives:: ARC Machine Directives 5828 * ARC Opcodes:: Opcodes 5829 5830 5831 File: as.info, Node: ARC Options, Next: ARC Syntax, Up: ARC-Dependent 5832 5833 9.2.1 Options 5834 ------------- 5835 5836 `-marc[5|6|7|8]' 5837 This option selects the core processor variant. Using `-marc' is 5838 the same as `-marc6', which is also the default. 5839 5840 `arc5' 5841 Base instruction set. 5842 5843 `arc6' 5844 Jump-and-link (jl) instruction. No requirement of an 5845 instruction between setting flags and conditional jump. For 5846 example: 5847 5848 mov.f r0,r1 5849 beq foo 5850 5851 `arc7' 5852 Break (brk) and sleep (sleep) instructions. 5853 5854 `arc8' 5855 Software interrupt (swi) instruction. 5856 5857 5858 Note: the `.option' directive can to be used to select a core 5859 variant from within assembly code. 5860 5861 `-EB' 5862 This option specifies that the output generated by the assembler 5863 should be marked as being encoded for a big-endian processor. 5864 5865 `-EL' 5866 This option specifies that the output generated by the assembler 5867 should be marked as being encoded for a little-endian processor - 5868 this is the default. 5869 5870 5871 5872 File: as.info, Node: ARC Syntax, Next: ARC Floating Point, Prev: ARC Options, Up: ARC-Dependent 5873 5874 9.2.2 Syntax 5875 ------------ 5876 5877 * Menu: 5878 5879 * ARC-Chars:: Special Characters 5880 * ARC-Regs:: Register Names 5881 5882 5883 File: as.info, Node: ARC-Chars, Next: ARC-Regs, Up: ARC Syntax 5884 5885 9.2.2.1 Special Characters 5886 .......................... 5887 5888 *TODO* 5889 5890 5891 File: as.info, Node: ARC-Regs, Prev: ARC-Chars, Up: ARC Syntax 5892 5893 9.2.2.2 Register Names 5894 ...................... 5895 5896 *TODO* 5897 5898 5899 File: as.info, Node: ARC Floating Point, Next: ARC Directives, Prev: ARC Syntax, Up: ARC-Dependent 5900 5901 9.2.3 Floating Point 5902 -------------------- 5903 5904 The ARC core does not currently have hardware floating point support. 5905 Software floating point support is provided by `GCC' and uses IEEE 5906 floating-point numbers. 5907 5908 5909 File: as.info, Node: ARC Directives, Next: ARC Opcodes, Prev: ARC Floating Point, Up: ARC-Dependent 5910 5911 9.2.4 ARC Machine Directives 5912 ---------------------------- 5913 5914 The ARC version of `as' supports the following additional machine 5915 directives: 5916 5917 `.2byte EXPRESSIONS' 5918 *TODO* 5919 5920 `.3byte EXPRESSIONS' 5921 *TODO* 5922 5923 `.4byte EXPRESSIONS' 5924 *TODO* 5925 5926 `.extAuxRegister NAME,ADDRESS,MODE' 5927 The ARCtangent A4 has extensible auxiliary register space. The 5928 auxiliary registers can be defined in the assembler source code by 5929 using this directive. The first parameter is the NAME of the new 5930 auxiallry register. The second parameter is the ADDRESS of the 5931 register in the auxiliary register memory map for the variant of 5932 the ARC. The third parameter specifies the MODE in which the 5933 register can be operated is and it can be one of: 5934 5935 `r (readonly)' 5936 5937 `w (write only)' 5938 5939 `r|w (read or write)' 5940 5941 For example: 5942 5943 .extAuxRegister mulhi,0x12,w 5944 5945 This specifies an extension auxiliary register called _mulhi_ 5946 which is at address 0x12 in the memory space and which is only 5947 writable. 5948 5949 `.extCondCode SUFFIX,VALUE' 5950 The condition codes on the ARCtangent A4 are extensible and can be 5951 specified by means of this assembler directive. They are specified 5952 by the suffix and the value for the condition code. They can be 5953 used to specify extra condition codes with any values. For 5954 example: 5955 5956 .extCondCode is_busy,0x14 5957 5958 add.is_busy r1,r2,r3 5959 bis_busy _main 5960 5961 `.extCoreRegister NAME,REGNUM,MODE,SHORTCUT' 5962 Specifies an extension core register NAME for the application. 5963 This allows a register NAME with a valid REGNUM between 0 and 60, 5964 with the following as valid values for MODE 5965 5966 `_r_ (readonly)' 5967 5968 `_w_ (write only)' 5969 5970 `_r|w_ (read or write)' 5971 5972 The other parameter gives a description of the register having a 5973 SHORTCUT in the pipeline. The valid values are: 5974 5975 `can_shortcut' 5976 5977 `cannot_shortcut' 5978 5979 For example: 5980 5981 .extCoreRegister mlo,57,r,can_shortcut 5982 5983 This defines an extension core register mlo with the value 57 which 5984 can shortcut the pipeline. 5985 5986 `.extInstruction NAME,OPCODE,SUBOPCODE,SUFFIXCLASS,SYNTAXCLASS' 5987 The ARCtangent A4 allows the user to specify extension 5988 instructions. The extension instructions are not macros. The 5989 assembler creates encodings for use of these instructions 5990 according to the specification by the user. The parameters are: 5991 5992 *NAME 5993 Name of the extension instruction 5994 5995 *OPCODE 5996 Opcode to be used. (Bits 27:31 in the encoding). Valid values 5997 0x10-0x1f or 0x03 5998 5999 *SUBOPCODE 6000 Subopcode to be used. Valid values are from 0x09-0x3f. 6001 However the correct value also depends on SYNTAXCLASS 6002 6003 *SUFFIXCLASS 6004 Determines the kinds of suffixes to be allowed. Valid values 6005 are `SUFFIX_NONE', `SUFFIX_COND', `SUFFIX_FLAG' which 6006 indicates the absence or presence of conditional suffixes and 6007 flag setting by the extension instruction. It is also 6008 possible to specify that an instruction sets the flags and is 6009 conditional by using `SUFFIX_CODE' | `SUFFIX_FLAG'. 6010 6011 *SYNTAXCLASS 6012 Determines the syntax class for the instruction. It can have 6013 the following values: 6014 6015 ``SYNTAX_2OP':' 6016 2 Operand Instruction 6017 6018 ``SYNTAX_3OP':' 6019 3 Operand Instruction 6020 6021 In addition there could be modifiers for the syntax class as 6022 described below: 6023 6024 Syntax Class Modifiers are: 6025 6026 - `OP1_MUST_BE_IMM': Modifies syntax class SYNTAX_3OP, 6027 specifying that the first operand of a three-operand 6028 instruction must be an immediate (i.e., the result is 6029 discarded). OP1_MUST_BE_IMM is used by bitwise ORing it 6030 with SYNTAX_3OP as given in the example below. This 6031 could usually be used to set the flags using specific 6032 instructions and not retain results. 6033 6034 - `OP1_IMM_IMPLIED': Modifies syntax class SYNTAX_20P, it 6035 specifies that there is an implied immediate destination 6036 operand which does not appear in the syntax. For 6037 example, if the source code contains an instruction like: 6038 6039 inst r1,r2 6040 6041 it really means that the first argument is an implied 6042 immediate (that is, the result is discarded). This is 6043 the same as though the source code were: inst 0,r1,r2. 6044 You use OP1_IMM_IMPLIED by bitwise ORing it with 6045 SYNTAX_20P. 6046 6047 6048 For example, defining 64-bit multiplier with immediate operands: 6049 6050 .extInstruction mp64,0x14,0x0,SUFFIX_COND | SUFFIX_FLAG , 6051 SYNTAX_3OP|OP1_MUST_BE_IMM 6052 6053 The above specifies an extension instruction called mp64 which has 6054 3 operands, sets the flags, can be used with a condition code, for 6055 which the first operand is an immediate. (Equivalent to 6056 discarding the result of the operation). 6057 6058 .extInstruction mul64,0x14,0x00,SUFFIX_COND, SYNTAX_2OP|OP1_IMM_IMPLIED 6059 6060 This describes a 2 operand instruction with an implicit first 6061 immediate operand. The result of this operation would be 6062 discarded. 6063 6064 `.half EXPRESSIONS' 6065 *TODO* 6066 6067 `.long EXPRESSIONS' 6068 *TODO* 6069 6070 `.option ARC|ARC5|ARC6|ARC7|ARC8' 6071 The `.option' directive must be followed by the desired core 6072 version. Again `arc' is an alias for `arc6'. 6073 6074 Note: the `.option' directive overrides the command line option 6075 `-marc'; a warning is emitted when the version is not consistent 6076 between the two - even for the implicit default core version 6077 (arc6). 6078 6079 `.short EXPRESSIONS' 6080 *TODO* 6081 6082 `.word EXPRESSIONS' 6083 *TODO* 6084 6085 6086 6087 File: as.info, Node: ARC Opcodes, Prev: ARC Directives, Up: ARC-Dependent 6088 6089 9.2.5 Opcodes 6090 ------------- 6091 6092 For information on the ARC instruction set, see `ARC Programmers 6093 Reference Manual', ARC International (www.arc.com) 6094 6095 6096 File: as.info, Node: ARM-Dependent, Next: AVR-Dependent, Prev: ARC-Dependent, Up: Machine Dependencies 6097 6098 9.3 ARM Dependent Features 6099 ========================== 6100 6101 * Menu: 6102 6103 * ARM Options:: Options 6104 * ARM Syntax:: Syntax 6105 * ARM Floating Point:: Floating Point 6106 * ARM Directives:: ARM Machine Directives 6107 * ARM Opcodes:: Opcodes 6108 * ARM Mapping Symbols:: Mapping Symbols 6109 * ARM Unwinding Tutorial:: Unwinding 6110 6111 6112 File: as.info, Node: ARM Options, Next: ARM Syntax, Up: ARM-Dependent 6113 6114 9.3.1 Options 6115 ------------- 6116 6117 `-mcpu=PROCESSOR[+EXTENSION...]' 6118 This option specifies the target processor. The assembler will 6119 issue an error message if an attempt is made to assemble an 6120 instruction which will not execute on the target processor. The 6121 following processor names are recognized: `arm1', `arm2', `arm250', 6122 `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', 6123 `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', 6124 `arm700i', `arm710', `arm710t', `arm720', `arm720t', `arm740t', 6125 `arm710c', `arm7100', `arm7500', `arm7500fe', `arm7t', `arm7tdmi', 6126 `arm7tdmi-s', `arm8', `arm810', `strongarm', `strongarm1', 6127 `strongarm110', `strongarm1100', `strongarm1110', `arm9', `arm920', 6128 `arm920t', `arm922t', `arm940t', `arm9tdmi', `fa526' (Faraday 6129 FA526 processor), `fa626' (Faraday FA626 processor), `arm9e', 6130 `arm926e', `arm926ej-s', `arm946e-r0', `arm946e', `arm946e-s', 6131 `arm966e-r0', `arm966e', `arm966e-s', `arm968e-s', `arm10t', 6132 `arm10tdmi', `arm10e', `arm1020', `arm1020t', `arm1020e', 6133 `arm1022e', `arm1026ej-s', `fa626te' (Faraday FA626TE processor), 6134 `fa726te' (Faraday FA726TE processor), `arm1136j-s', `arm1136jf-s', 6135 `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s', 6136 `mpcore', `mpcorenovfp', `cortex-a8', `cortex-a9', `cortex-r4', 6137 `cortex-m3', `ep9312' (ARM920 with Cirrus Maverick coprocessor), 6138 `i80200' (Intel XScale processor) `iwmmxt' (Intel(r) XScale 6139 processor with Wireless MMX(tm) technology coprocessor) and 6140 `xscale'. The special name `all' may be used to allow the 6141 assembler to accept instructions valid for any ARM processor. 6142 6143 In addition to the basic instruction set, the assembler can be 6144 told to accept various extension mnemonics that extend the 6145 processor using the co-processor instruction space. For example, 6146 `-mcpu=arm920+maverick' is equivalent to specifying 6147 `-mcpu=ep9312'. The following extensions are currently supported: 6148 `+maverick' `+iwmmxt' and `+xscale'. 6149 6150 `-march=ARCHITECTURE[+EXTENSION...]' 6151 This option specifies the target architecture. The assembler will 6152 issue an error message if an attempt is made to assemble an 6153 instruction which will not execute on the target architecture. 6154 The following architecture names are recognized: `armv1', `armv2', 6155 `armv2a', `armv2s', `armv3', `armv3m', `armv4', `armv4xm', 6156 `armv4t', `armv4txm', `armv5', `armv5t', `armv5txm', `armv5te', 6157 `armv5texp', `armv6', `armv6j', `armv6k', `armv6z', `armv6zk', 6158 `armv7', `armv7-a', `armv7-r', `armv7-m', `iwmmxt' and `xscale'. 6159 If both `-mcpu' and `-march' are specified, the assembler will use 6160 the setting for `-mcpu'. 6161 6162 The architecture option can be extended with the same instruction 6163 set extension options as the `-mcpu' option. 6164 6165 `-mfpu=FLOATING-POINT-FORMAT' 6166 This option specifies the floating point format to assemble for. 6167 The assembler will issue an error message if an attempt is made to 6168 assemble an instruction which will not execute on the target 6169 floating point unit. The following format options are recognized: 6170 `softfpa', `fpe', `fpe2', `fpe3', `fpa', `fpa10', `fpa11', 6171 `arm7500fe', `softvfp', `softvfp+vfp', `vfp', `vfp10', `vfp10-r0', 6172 `vfp9', `vfpxd', `vfpv2' `vfpv3' `vfpv3-d16' `arm1020t', 6173 `arm1020e', `arm1136jf-s', `maverick' and `neon'. 6174 6175 In addition to determining which instructions are assembled, this 6176 option also affects the way in which the `.double' assembler 6177 directive behaves when assembling little-endian code. 6178 6179 The default is dependent on the processor selected. For 6180 Architecture 5 or later, the default is to assembler for VFP 6181 instructions; for earlier architectures the default is to assemble 6182 for FPA instructions. 6183 6184 `-mthumb' 6185 This option specifies that the assembler should start assembling 6186 Thumb instructions; that is, it should behave as though the file 6187 starts with a `.code 16' directive. 6188 6189 `-mthumb-interwork' 6190 This option specifies that the output generated by the assembler 6191 should be marked as supporting interworking. 6192 6193 `-mapcs `[26|32]'' 6194 This option specifies that the output generated by the assembler 6195 should be marked as supporting the indicated version of the Arm 6196 Procedure. Calling Standard. 6197 6198 `-matpcs' 6199 This option specifies that the output generated by the assembler 6200 should be marked as supporting the Arm/Thumb Procedure Calling 6201 Standard. If enabled this option will cause the assembler to 6202 create an empty debugging section in the object file called 6203 .arm.atpcs. Debuggers can use this to determine the ABI being 6204 used by. 6205 6206 `-mapcs-float' 6207 This indicates the floating point variant of the APCS should be 6208 used. In this variant floating point arguments are passed in FP 6209 registers rather than integer registers. 6210 6211 `-mapcs-reentrant' 6212 This indicates that the reentrant variant of the APCS should be 6213 used. This variant supports position independent code. 6214 6215 `-mfloat-abi=ABI' 6216 This option specifies that the output generated by the assembler 6217 should be marked as using specified floating point ABI. The 6218 following values are recognized: `soft', `softfp' and `hard'. 6219 6220 `-meabi=VER' 6221 This option specifies which EABI version the produced object files 6222 should conform to. The following values are recognized: `gnu', `4' 6223 and `5'. 6224 6225 `-EB' 6226 This option specifies that the output generated by the assembler 6227 should be marked as being encoded for a big-endian processor. 6228 6229 `-EL' 6230 This option specifies that the output generated by the assembler 6231 should be marked as being encoded for a little-endian processor. 6232 6233 `-k' 6234 This option specifies that the output of the assembler should be 6235 marked as position-independent code (PIC). 6236 6237 `--fix-v4bx' 6238 Allow `BX' instructions in ARMv4 code. This is intended for use 6239 with the linker option of the same name. 6240 6241 6242 6243 File: as.info, Node: ARM Syntax, Next: ARM Floating Point, Prev: ARM Options, Up: ARM-Dependent 6244 6245 9.3.2 Syntax 6246 ------------ 6247 6248 * Menu: 6249 6250 * ARM-Chars:: Special Characters 6251 * ARM-Regs:: Register Names 6252 * ARM-Relocations:: Relocations 6253 6254 6255 File: as.info, Node: ARM-Chars, Next: ARM-Regs, Up: ARM Syntax 6256 6257 9.3.2.1 Special Characters 6258 .......................... 6259 6260 The presence of a `@' on a line indicates the start of a comment that 6261 extends to the end of the current line. If a `#' appears as the first 6262 character of a line, the whole line is treated as a comment. 6263 6264 The `;' character can be used instead of a newline to separate 6265 statements. 6266 6267 Either `#' or `$' can be used to indicate immediate operands. 6268 6269 *TODO* Explain about /data modifier on symbols. 6270 6271 6272 File: as.info, Node: ARM-Regs, Next: ARM-Relocations, Prev: ARM-Chars, Up: ARM Syntax 6273 6274 9.3.2.2 Register Names 6275 ...................... 6276 6277 *TODO* Explain about ARM register naming, and the predefined names. 6278 6279 6280 File: as.info, Node: ARM Floating Point, Next: ARM Directives, Prev: ARM Syntax, Up: ARM-Dependent 6281 6282 9.3.3 Floating Point 6283 -------------------- 6284 6285 The ARM family uses IEEE floating-point numbers. 6286 6287 6288 File: as.info, Node: ARM-Relocations, Prev: ARM-Regs, Up: ARM Syntax 6289 6290 9.3.3.1 ARM relocation generation 6291 ................................. 6292 6293 Specific data relocations can be generated by putting the relocation 6294 name in parentheses after the symbol name. For example: 6295 6296 .word foo(TARGET1) 6297 6298 This will generate an `R_ARM_TARGET1' relocation against the symbol 6299 FOO. The following relocations are supported: `GOT', `GOTOFF', 6300 `TARGET1', `TARGET2', `SBREL', `TLSGD', `TLSLDM', `TLSLDO', `GOTTPOFF', 6301 `GOT_PREL' and `TPOFF'. 6302 6303 For compatibility with older toolchains the assembler also accepts 6304 `(PLT)' after branch targets. This will generate the deprecated 6305 `R_ARM_PLT32' relocation. 6306 6307 Relocations for `MOVW' and `MOVT' instructions can be generated by 6308 prefixing the value with `#:lower16:' and `#:upper16' respectively. 6309 For example to load the 32-bit address of foo into r0: 6310 6311 MOVW r0, #:lower16:foo 6312 MOVT r0, #:upper16:foo 6313 6314 6315 File: as.info, Node: ARM Directives, Next: ARM Opcodes, Prev: ARM Floating Point, Up: ARM-Dependent 6316 6317 9.3.4 ARM Machine Directives 6318 ---------------------------- 6319 6320 `.align EXPRESSION [, EXPRESSION]' 6321 This is the generic .ALIGN directive. For the ARM however if the 6322 first argument is zero (ie no alignment is needed) the assembler 6323 will behave as if the argument had been 2 (ie pad to the next four 6324 byte boundary). This is for compatibility with ARM's own 6325 assembler. 6326 6327 `NAME .req REGISTER NAME' 6328 This creates an alias for REGISTER NAME called NAME. For example: 6329 6330 foo .req r0 6331 6332 `.unreq ALIAS-NAME' 6333 This undefines a register alias which was previously defined using 6334 the `req', `dn' or `qn' directives. For example: 6335 6336 foo .req r0 6337 .unreq foo 6338 6339 An error occurs if the name is undefined. Note - this pseudo op 6340 can be used to delete builtin in register name aliases (eg 'r0'). 6341 This should only be done if it is really necessary. 6342 6343 `NAME .dn REGISTER NAME [.TYPE] [[INDEX]]' 6344 6345 `NAME .qn REGISTER NAME [.TYPE] [[INDEX]]' 6346 The `dn' and `qn' directives are used to create typed and/or 6347 indexed register aliases for use in Advanced SIMD Extension (Neon) 6348 instructions. The former should be used to create aliases of 6349 double-precision registers, and the latter to create aliases of 6350 quad-precision registers. 6351 6352 If these directives are used to create typed aliases, those 6353 aliases can be used in Neon instructions instead of writing types 6354 after the mnemonic or after each operand. For example: 6355 6356 x .dn d2.f32 6357 y .dn d3.f32 6358 z .dn d4.f32[1] 6359 vmul x,y,z 6360 6361 This is equivalent to writing the following: 6362 6363 vmul.f32 d2,d3,d4[1] 6364 6365 Aliases created using `dn' or `qn' can be destroyed using `unreq'. 6366 6367 `.code `[16|32]'' 6368 This directive selects the instruction set being generated. The 6369 value 16 selects Thumb, with the value 32 selecting ARM. 6370 6371 `.thumb' 6372 This performs the same action as .CODE 16. 6373 6374 `.arm' 6375 This performs the same action as .CODE 32. 6376 6377 `.force_thumb' 6378 This directive forces the selection of Thumb instructions, even if 6379 the target processor does not support those instructions 6380 6381 `.thumb_func' 6382 This directive specifies that the following symbol is the name of a 6383 Thumb encoded function. This information is necessary in order to 6384 allow the assembler and linker to generate correct code for 6385 interworking between Arm and Thumb instructions and should be used 6386 even if interworking is not going to be performed. The presence 6387 of this directive also implies `.thumb' 6388 6389 This directive is not neccessary when generating EABI objects. On 6390 these targets the encoding is implicit when generating Thumb code. 6391 6392 `.thumb_set' 6393 This performs the equivalent of a `.set' directive in that it 6394 creates a symbol which is an alias for another symbol (possibly 6395 not yet defined). This directive also has the added property in 6396 that it marks the aliased symbol as being a thumb function entry 6397 point, in the same way that the `.thumb_func' directive does. 6398 6399 `.ltorg' 6400 This directive causes the current contents of the literal pool to 6401 be dumped into the current section (which is assumed to be the 6402 .text section) at the current location (aligned to a word 6403 boundary). `GAS' maintains a separate literal pool for each 6404 section and each sub-section. The `.ltorg' directive will only 6405 affect the literal pool of the current section and sub-section. 6406 At the end of assembly all remaining, un-empty literal pools will 6407 automatically be dumped. 6408 6409 Note - older versions of `GAS' would dump the current literal pool 6410 any time a section change occurred. This is no longer done, since 6411 it prevents accurate control of the placement of literal pools. 6412 6413 `.pool' 6414 This is a synonym for .ltorg. 6415 6416 `.fnstart' 6417 Marks the start of a function with an unwind table entry. 6418 6419 `.fnend' 6420 Marks the end of a function with an unwind table entry. The 6421 unwind index table entry is created when this directive is 6422 processed. 6423 6424 If no personality routine has been specified then standard 6425 personality routine 0 or 1 will be used, depending on the number 6426 of unwind opcodes required. 6427 6428 `.cantunwind' 6429 Prevents unwinding through the current function. No personality 6430 routine or exception table data is required or permitted. 6431 6432 `.personality NAME' 6433 Sets the personality routine for the current function to NAME. 6434 6435 `.personalityindex INDEX' 6436 Sets the personality routine for the current function to the EABI 6437 standard routine number INDEX 6438 6439 `.handlerdata' 6440 Marks the end of the current function, and the start of the 6441 exception table entry for that function. Anything between this 6442 directive and the `.fnend' directive will be added to the 6443 exception table entry. 6444 6445 Must be preceded by a `.personality' or `.personalityindex' 6446 directive. 6447 6448 `.save REGLIST' 6449 Generate unwinder annotations to restore the registers in REGLIST. 6450 The format of REGLIST is the same as the corresponding 6451 store-multiple instruction. 6452 6453 _core registers_ 6454 .save {r4, r5, r6, lr} 6455 stmfd sp!, {r4, r5, r6, lr} 6456 _FPA registers_ 6457 .save f4, 2 6458 sfmfd f4, 2, [sp]! 6459 _VFP registers_ 6460 .save {d8, d9, d10} 6461 fstmdx sp!, {d8, d9, d10} 6462 _iWMMXt registers_ 6463 .save {wr10, wr11} 6464 wstrd wr11, [sp, #-8]! 6465 wstrd wr10, [sp, #-8]! 6466 or 6467 .save wr11 6468 wstrd wr11, [sp, #-8]! 6469 .save wr10 6470 wstrd wr10, [sp, #-8]! 6471 6472 `.vsave VFP-REGLIST' 6473 Generate unwinder annotations to restore the VFP registers in 6474 VFP-REGLIST using FLDMD. Also works for VFPv3 registers that are 6475 to be restored using VLDM. The format of VFP-REGLIST is the same 6476 as the corresponding store-multiple instruction. 6477 6478 _VFP registers_ 6479 .vsave {d8, d9, d10} 6480 fstmdd sp!, {d8, d9, d10} 6481 _VFPv3 registers_ 6482 .vsave {d15, d16, d17} 6483 vstm sp!, {d15, d16, d17} 6484 6485 Since FLDMX and FSTMX are now deprecated, this directive should be 6486 used in favour of `.save' for saving VFP registers for ARMv6 and 6487 above. 6488 6489 `.pad #COUNT' 6490 Generate unwinder annotations for a stack adjustment of COUNT 6491 bytes. A positive value indicates the function prologue allocated 6492 stack space by decrementing the stack pointer. 6493 6494 `.movsp REG [, #OFFSET]' 6495 Tell the unwinder that REG contains an offset from the current 6496 stack pointer. If OFFSET is not specified then it is assumed to be 6497 zero. 6498 6499 `.setfp FPREG, SPREG [, #OFFSET]' 6500 Make all unwinder annotations relaive to a frame pointer. Without 6501 this the unwinder will use offsets from the stack pointer. 6502 6503 The syntax of this directive is the same as the `sub' or `mov' 6504 instruction used to set the frame pointer. SPREG must be either 6505 `sp' or mentioned in a previous `.movsp' directive. 6506 6507 .movsp ip 6508 mov ip, sp 6509 ... 6510 .setfp fp, ip, #4 6511 sub fp, ip, #4 6512 6513 `.raw OFFSET, BYTE1, ...' 6514 Insert one of more arbitary unwind opcode bytes, which are known 6515 to adjust the stack pointer by OFFSET bytes. 6516 6517 For example `.unwind_raw 4, 0xb1, 0x01' is equivalent to `.save 6518 {r0}' 6519 6520 `.cpu NAME' 6521 Select the target processor. Valid values for NAME are the same as 6522 for the `-mcpu' commandline option. 6523 6524 `.arch NAME' 6525 Select the target architecture. Valid values for NAME are the 6526 same as for the `-march' commandline option. 6527 6528 `.object_arch NAME' 6529 Override the architecture recorded in the EABI object attribute 6530 section. Valid values for NAME are the same as for the `.arch' 6531 directive. Typically this is useful when code uses runtime 6532 detection of CPU features. 6533 6534 `.fpu NAME' 6535 Select the floating point unit to assemble for. Valid values for 6536 NAME are the same as for the `-mfpu' commandline option. 6537 6538 `.eabi_attribute TAG, VALUE' 6539 Set the EABI object attribute number TAG to VALUE. The value is 6540 either a `number', `"string"', or `number, "string"' depending on 6541 the tag. 6542 6543 6544 6545 File: as.info, Node: ARM Opcodes, Next: ARM Mapping Symbols, Prev: ARM Directives, Up: ARM-Dependent 6546 6547 9.3.5 Opcodes 6548 ------------- 6549 6550 `as' implements all the standard ARM opcodes. It also implements 6551 several pseudo opcodes, including several synthetic load instructions. 6552 6553 `NOP' 6554 nop 6555 6556 This pseudo op will always evaluate to a legal ARM instruction 6557 that does nothing. Currently it will evaluate to MOV r0, r0. 6558 6559 `LDR' 6560 ldr <register> , = <expression> 6561 6562 If expression evaluates to a numeric constant then a MOV or MVN 6563 instruction will be used in place of the LDR instruction, if the 6564 constant can be generated by either of these instructions. 6565 Otherwise the constant will be placed into the nearest literal 6566 pool (if it not already there) and a PC relative LDR instruction 6567 will be generated. 6568 6569 `ADR' 6570 adr <register> <label> 6571 6572 This instruction will load the address of LABEL into the indicated 6573 register. The instruction will evaluate to a PC relative ADD or 6574 SUB instruction depending upon where the label is located. If the 6575 label is out of range, or if it is not defined in the same file 6576 (and section) as the ADR instruction, then an error will be 6577 generated. This instruction will not make use of the literal pool. 6578 6579 `ADRL' 6580 adrl <register> <label> 6581 6582 This instruction will load the address of LABEL into the indicated 6583 register. The instruction will evaluate to one or two PC relative 6584 ADD or SUB instructions depending upon where the label is located. 6585 If a second instruction is not needed a NOP instruction will be 6586 generated in its place, so that this instruction is always 8 bytes 6587 long. 6588 6589 If the label is out of range, or if it is not defined in the same 6590 file (and section) as the ADRL instruction, then an error will be 6591 generated. This instruction will not make use of the literal pool. 6592 6593 6594 For information on the ARM or Thumb instruction sets, see `ARM 6595 Software Development Toolkit Reference Manual', Advanced RISC Machines 6596 Ltd. 6597 6598 6599 File: as.info, Node: ARM Mapping Symbols, Next: ARM Unwinding Tutorial, Prev: ARM Opcodes, Up: ARM-Dependent 6600 6601 9.3.6 Mapping Symbols 6602 --------------------- 6603 6604 The ARM ELF specification requires that special symbols be inserted 6605 into object files to mark certain features: 6606 6607 `$a' 6608 At the start of a region of code containing ARM instructions. 6609 6610 `$t' 6611 At the start of a region of code containing THUMB instructions. 6612 6613 `$d' 6614 At the start of a region of data. 6615 6616 6617 The assembler will automatically insert these symbols for you - there 6618 is no need to code them yourself. Support for tagging symbols ($b, $f, 6619 $p and $m) which is also mentioned in the current ARM ELF specification 6620 is not implemented. This is because they have been dropped from the 6621 new EABI and so tools cannot rely upon their presence. 6622 6623 6624 File: as.info, Node: ARM Unwinding Tutorial, Prev: ARM Mapping Symbols, Up: ARM-Dependent 6625 6626 9.3.7 Unwinding 6627 --------------- 6628 6629 The ABI for the ARM Architecture specifies a standard format for 6630 exception unwind information. This information is used when an 6631 exception is thrown to determine where control should be transferred. 6632 In particular, the unwind information is used to determine which 6633 function called the function that threw the exception, and which 6634 function called that one, and so forth. This information is also used 6635 to restore the values of callee-saved registers in the function 6636 catching the exception. 6637 6638 If you are writing functions in assembly code, and those functions 6639 call other functions that throw exceptions, you must use assembly 6640 pseudo ops to ensure that appropriate exception unwind information is 6641 generated. Otherwise, if one of the functions called by your assembly 6642 code throws an exception, the run-time library will be unable to unwind 6643 the stack through your assembly code and your program will not behave 6644 correctly. 6645 6646 To illustrate the use of these pseudo ops, we will examine the code 6647 that G++ generates for the following C++ input: 6648 6649 6650 void callee (int *); 6651 6652 int 6653 caller () 6654 { 6655 int i; 6656 callee (&i); 6657 return i; 6658 } 6659 6660 This example does not show how to throw or catch an exception from 6661 assembly code. That is a much more complex operation and should always 6662 be done in a high-level language, such as C++, that directly supports 6663 exceptions. 6664 6665 The code generated by one particular version of G++ when compiling 6666 the example above is: 6667 6668 6669 _Z6callerv: 6670 .fnstart 6671 .LFB2: 6672 @ Function supports interworking. 6673 @ args = 0, pretend = 0, frame = 8 6674 @ frame_needed = 1, uses_anonymous_args = 0 6675 stmfd sp!, {fp, lr} 6676 .save {fp, lr} 6677 .LCFI0: 6678 .setfp fp, sp, #4 6679 add fp, sp, #4 6680 .LCFI1: 6681 .pad #8 6682 sub sp, sp, #8 6683 .LCFI2: 6684 sub r3, fp, #8 6685 mov r0, r3 6686 bl _Z6calleePi 6687 ldr r3, [fp, #-8] 6688 mov r0, r3 6689 sub sp, fp, #4 6690 ldmfd sp!, {fp, lr} 6691 bx lr 6692 .LFE2: 6693 .fnend 6694 6695 Of course, the sequence of instructions varies based on the options 6696 you pass to GCC and on the version of GCC in use. The exact 6697 instructions are not important since we are focusing on the pseudo ops 6698 that are used to generate unwind information. 6699 6700 An important assumption made by the unwinder is that the stack frame 6701 does not change during the body of the function. In particular, since 6702 we assume that the assembly code does not itself throw an exception, 6703 the only point where an exception can be thrown is from a call, such as 6704 the `bl' instruction above. At each call site, the same saved 6705 registers (including `lr', which indicates the return address) must be 6706 located in the same locations relative to the frame pointer. 6707 6708 The `.fnstart' (*note .fnstart pseudo op: arm_fnstart.) pseudo op 6709 appears immediately before the first instruction of the function while 6710 the `.fnend' (*note .fnend pseudo op: arm_fnend.) pseudo op appears 6711 immediately after the last instruction of the function. These pseudo 6712 ops specify the range of the function. 6713 6714 Only the order of the other pseudos ops (e.g., `.setfp' or `.pad') 6715 matters; their exact locations are irrelevant. In the example above, 6716 the compiler emits the pseudo ops with particular instructions. That 6717 makes it easier to understand the code, but it is not required for 6718 correctness. It would work just as well to emit all of the pseudo ops 6719 other than `.fnend' in the same order, but immediately after `.fnstart'. 6720 6721 The `.save' (*note .save pseudo op: arm_save.) pseudo op indicates 6722 registers that have been saved to the stack so that they can be 6723 restored before the function returns. The argument to the `.save' 6724 pseudo op is a list of registers to save. If a register is 6725 "callee-saved" (as specified by the ABI) and is modified by the 6726 function you are writing, then your code must save the value before it 6727 is modified and restore the original value before the function returns. 6728 If an exception is thrown, the run-time library restores the values of 6729 these registers from their locations on the stack before returning 6730 control to the exception handler. (Of course, if an exception is not 6731 thrown, the function that contains the `.save' pseudo op restores these 6732 registers in the function epilogue, as is done with the `ldmfd' 6733 instruction above.) 6734 6735 You do not have to save callee-saved registers at the very beginning 6736 of the function and you do not need to use the `.save' pseudo op 6737 immediately following the point at which the registers are saved. 6738 However, if you modify a callee-saved register, you must save it on the 6739 stack before modifying it and before calling any functions which might 6740 throw an exception. And, you must use the `.save' pseudo op to 6741 indicate that you have done so. 6742 6743 The `.pad' (*note .pad: arm_pad.) pseudo op indicates a modification 6744 of the stack pointer that does not save any registers. The argument is 6745 the number of bytes (in decimal) that are subtracted from the stack 6746 pointer. (On ARM CPUs, the stack grows downwards, so subtracting from 6747 the stack pointer increases the size of the stack.) 6748 6749 The `.setfp' (*note .setfp pseudo op: arm_setfp.) pseudo op 6750 indicates the register that contains the frame pointer. The first 6751 argument is the register that is set, which is typically `fp'. The 6752 second argument indicates the register from which the frame pointer 6753 takes its value. The third argument, if present, is the value (in 6754 decimal) added to the register specified by the second argument to 6755 compute the value of the frame pointer. You should not modify the 6756 frame pointer in the body of the function. 6757 6758 If you do not use a frame pointer, then you should not use the 6759 `.setfp' pseudo op. If you do not use a frame pointer, then you should 6760 avoid modifying the stack pointer outside of the function prologue. 6761 Otherwise, the run-time library will be unable to find saved registers 6762 when it is unwinding the stack. 6763 6764 The pseudo ops described above are sufficient for writing assembly 6765 code that calls functions which may throw exceptions. If you need to 6766 know more about the object-file format used to represent unwind 6767 information, you may consult the `Exception Handling ABI for the ARM 6768 Architecture' available from `http://infocenter.arm.com'. 6769 6770 6771 File: as.info, Node: AVR-Dependent, Next: BFIN-Dependent, Prev: ARM-Dependent, Up: Machine Dependencies 6772 6773 9.4 AVR Dependent Features 6774 ========================== 6775 6776 * Menu: 6777 6778 * AVR Options:: Options 6779 * AVR Syntax:: Syntax 6780 * AVR Opcodes:: Opcodes 6781 6782 6783 File: as.info, Node: AVR Options, Next: AVR Syntax, Up: AVR-Dependent 6784 6785 9.4.1 Options 6786 ------------- 6787 6788 `-mmcu=MCU' 6789 Specify ATMEL AVR instruction set or MCU type. 6790 6791 Instruction set avr1 is for the minimal AVR core, not supported by 6792 the C compiler, only for assembler programs (MCU types: at90s1200, 6793 attiny11, attiny12, attiny15, attiny28). 6794 6795 Instruction set avr2 (default) is for the classic AVR core with up 6796 to 8K program memory space (MCU types: at90s2313, at90s2323, 6797 at90s2333, at90s2343, attiny22, attiny26, at90s4414, at90s4433, 6798 at90s4434, at90s8515, at90c8534, at90s8535). 6799 6800 Instruction set avr25 is for the classic AVR core with up to 8K 6801 program memory space plus the MOVW instruction (MCU types: 6802 attiny13, attiny13a, attiny2313, attiny24, attiny44, attiny84, 6803 attiny25, attiny45, attiny85, attiny261, attiny461, attiny861, 6804 attiny43u, attiny48, attiny88, at86rf401). 6805 6806 Instruction set avr3 is for the classic AVR core with up to 128K 6807 program memory space (MCU types: at43usb355, at76c711). 6808 6809 Instruction set avr31 is for the classic AVR core with exactly 6810 128K program memory space (MCU types: atmega103, at43usb320). 6811 6812 Instruction set avr35 is for classic AVR core plus MOVW, CALL, and 6813 JMP instructions (MCU types: attiny167, at90usb82, at90usb162). 6814 6815 Instruction set avr4 is for the enhanced AVR core with up to 8K 6816 program memory space (MCU types: atmega48, atmega48p,atmega8, 6817 atmega88, atmega88p, atmega8515, atmega8535, atmega8hva, at90pwm1, 6818 at90pwm2, at90pwm2b, at90pwm3, at90pwm3b). 6819 6820 Instruction set avr5 is for the enhanced AVR core with up to 128K 6821 program memory space (MCU types: atmega16, atmega161, atmega162, 6822 atmega163, atmega164p, atmega165, atmega165p, atmega168, 6823 atmega168p, atmega169, atmega169p, atmega32, atmega323, 6824 atmega324p, atmega325, atmega325p, atmega3250, atmega3250p, 6825 atmega328p, atmega329, atmega329p, atmega3290, atmega3290p, 6826 atmega406, atmega64, atmega640, atmega644, atmega644p, atmega645, 6827 atmega6450, atmega649, atmega6490, atmega16hva, at90can32, 6828 at90can64, at90pwm216, at90pwm316, atmega16u4, atmega32c1, 6829 atmega32m1, atmega32u4, at90usb646, at90usb647, at94k). 6830 6831 Instruction set avr51 is for the enhanced AVR core with exactly 6832 128K program memory space (MCU types: atmega128, atmega1280, 6833 atmega1281, atmega1284p, at90can128, at90usb1286, at90usb1287). 6834 6835 Instruction set avr6 is for the enhanced AVR core with a 3-byte PC 6836 (MCU types: atmega2560, atmega2561). 6837 6838 `-mall-opcodes' 6839 Accept all AVR opcodes, even if not supported by `-mmcu'. 6840 6841 `-mno-skip-bug' 6842 This option disable warnings for skipping two-word instructions. 6843 6844 `-mno-wrap' 6845 This option reject `rjmp/rcall' instructions with 8K wrap-around. 6846 6847 6848 6849 File: as.info, Node: AVR Syntax, Next: AVR Opcodes, Prev: AVR Options, Up: AVR-Dependent 6850 6851 9.4.2 Syntax 6852 ------------ 6853 6854 * Menu: 6855 6856 * AVR-Chars:: Special Characters 6857 * AVR-Regs:: Register Names 6858 * AVR-Modifiers:: Relocatable Expression Modifiers 6859 6860 6861 File: as.info, Node: AVR-Chars, Next: AVR-Regs, Up: AVR Syntax 6862 6863 9.4.2.1 Special Characters 6864 .......................... 6865 6866 The presence of a `;' on a line indicates the start of a comment that 6867 extends to the end of the current line. If a `#' appears as the first 6868 character of a line, the whole line is treated as a comment. 6869 6870 The `$' character can be used instead of a newline to separate 6871 statements. 6872 6873 6874 File: as.info, Node: AVR-Regs, Next: AVR-Modifiers, Prev: AVR-Chars, Up: AVR Syntax 6875 6876 9.4.2.2 Register Names 6877 ...................... 6878 6879 The AVR has 32 x 8-bit general purpose working registers `r0', `r1', 6880 ... `r31'. Six of the 32 registers can be used as three 16-bit 6881 indirect address register pointers for Data Space addressing. One of 6882 the these address pointers can also be used as an address pointer for 6883 look up tables in Flash program memory. These added function registers 6884 are the 16-bit `X', `Y' and `Z' - registers. 6885 6886 X = r26:r27 6887 Y = r28:r29 6888 Z = r30:r31 6889 6890 6891 File: as.info, Node: AVR-Modifiers, Prev: AVR-Regs, Up: AVR Syntax 6892 6893 9.4.2.3 Relocatable Expression Modifiers 6894 ........................................ 6895 6896 The assembler supports several modifiers when using relocatable 6897 addresses in AVR instruction operands. The general syntax is the 6898 following: 6899 6900 modifier(relocatable-expression) 6901 6902 `lo8' 6903 This modifier allows you to use bits 0 through 7 of an address 6904 expression as 8 bit relocatable expression. 6905 6906 `hi8' 6907 This modifier allows you to use bits 7 through 15 of an address 6908 expression as 8 bit relocatable expression. This is useful with, 6909 for example, the AVR `ldi' instruction and `lo8' modifier. 6910 6911 For example 6912 6913 ldi r26, lo8(sym+10) 6914 ldi r27, hi8(sym+10) 6915 6916 `hh8' 6917 This modifier allows you to use bits 16 through 23 of an address 6918 expression as 8 bit relocatable expression. Also, can be useful 6919 for loading 32 bit constants. 6920 6921 `hlo8' 6922 Synonym of `hh8'. 6923 6924 `hhi8' 6925 This modifier allows you to use bits 24 through 31 of an 6926 expression as 8 bit expression. This is useful with, for example, 6927 the AVR `ldi' instruction and `lo8', `hi8', `hlo8', `hhi8', 6928 modifier. 6929 6930 For example 6931 6932 ldi r26, lo8(285774925) 6933 ldi r27, hi8(285774925) 6934 ldi r28, hlo8(285774925) 6935 ldi r29, hhi8(285774925) 6936 ; r29,r28,r27,r26 = 285774925 6937 6938 `pm_lo8' 6939 This modifier allows you to use bits 0 through 7 of an address 6940 expression as 8 bit relocatable expression. This modifier useful 6941 for addressing data or code from Flash/Program memory. The using 6942 of `pm_lo8' similar to `lo8'. 6943 6944 `pm_hi8' 6945 This modifier allows you to use bits 8 through 15 of an address 6946 expression as 8 bit relocatable expression. This modifier useful 6947 for addressing data or code from Flash/Program memory. 6948 6949 `pm_hh8' 6950 This modifier allows you to use bits 15 through 23 of an address 6951 expression as 8 bit relocatable expression. This modifier useful 6952 for addressing data or code from Flash/Program memory. 6953 6954 6955 6956 File: as.info, Node: AVR Opcodes, Prev: AVR Syntax, Up: AVR-Dependent 6957 6958 9.4.3 Opcodes 6959 ------------- 6960 6961 For detailed information on the AVR machine instruction set, see 6962 `www.atmel.com/products/AVR'. 6963 6964 `as' implements all the standard AVR opcodes. The following table 6965 summarizes the AVR opcodes, and their arguments. 6966 6967 Legend: 6968 r any register 6969 d `ldi' register (r16-r31) 6970 v `movw' even register (r0, r2, ..., r28, r30) 6971 a `fmul' register (r16-r23) 6972 w `adiw' register (r24,r26,r28,r30) 6973 e pointer registers (X,Y,Z) 6974 b base pointer register and displacement ([YZ]+disp) 6975 z Z pointer register (for [e]lpm Rd,Z[+]) 6976 M immediate value from 0 to 255 6977 n immediate value from 0 to 255 ( n = ~M ). Relocation impossible 6978 s immediate value from 0 to 7 6979 P Port address value from 0 to 63. (in, out) 6980 p Port address value from 0 to 31. (cbi, sbi, sbic, sbis) 6981 K immediate value from 0 to 63 (used in `adiw', `sbiw') 6982 i immediate value 6983 l signed pc relative offset from -64 to 63 6984 L signed pc relative offset from -2048 to 2047 6985 h absolute code address (call, jmp) 6986 S immediate value from 0 to 7 (S = s << 4) 6987 ? use this opcode entry if no parameters, else use next opcode entry 6988 6989 1001010010001000 clc 6990 1001010011011000 clh 6991 1001010011111000 cli 6992 1001010010101000 cln 6993 1001010011001000 cls 6994 1001010011101000 clt 6995 1001010010111000 clv 6996 1001010010011000 clz 6997 1001010000001000 sec 6998 1001010001011000 seh 6999 1001010001111000 sei 7000 1001010000101000 sen 7001 1001010001001000 ses 7002 1001010001101000 set 7003 1001010000111000 sev 7004 1001010000011000 sez 7005 100101001SSS1000 bclr S 7006 100101000SSS1000 bset S 7007 1001010100001001 icall 7008 1001010000001001 ijmp 7009 1001010111001000 lpm ? 7010 1001000ddddd010+ lpm r,z 7011 1001010111011000 elpm ? 7012 1001000ddddd011+ elpm r,z 7013 0000000000000000 nop 7014 1001010100001000 ret 7015 1001010100011000 reti 7016 1001010110001000 sleep 7017 1001010110011000 break 7018 1001010110101000 wdr 7019 1001010111101000 spm 7020 000111rdddddrrrr adc r,r 7021 000011rdddddrrrr add r,r 7022 001000rdddddrrrr and r,r 7023 000101rdddddrrrr cp r,r 7024 000001rdddddrrrr cpc r,r 7025 000100rdddddrrrr cpse r,r 7026 001001rdddddrrrr eor r,r 7027 001011rdddddrrrr mov r,r 7028 100111rdddddrrrr mul r,r 7029 001010rdddddrrrr or r,r 7030 000010rdddddrrrr sbc r,r 7031 000110rdddddrrrr sub r,r 7032 001001rdddddrrrr clr r 7033 000011rdddddrrrr lsl r 7034 000111rdddddrrrr rol r 7035 001000rdddddrrrr tst r 7036 0111KKKKddddKKKK andi d,M 7037 0111KKKKddddKKKK cbr d,n 7038 1110KKKKddddKKKK ldi d,M 7039 11101111dddd1111 ser d 7040 0110KKKKddddKKKK ori d,M 7041 0110KKKKddddKKKK sbr d,M 7042 0011KKKKddddKKKK cpi d,M 7043 0100KKKKddddKKKK sbci d,M 7044 0101KKKKddddKKKK subi d,M 7045 1111110rrrrr0sss sbrc r,s 7046 1111111rrrrr0sss sbrs r,s 7047 1111100ddddd0sss bld r,s 7048 1111101ddddd0sss bst r,s 7049 10110PPdddddPPPP in r,P 7050 10111PPrrrrrPPPP out P,r 7051 10010110KKddKKKK adiw w,K 7052 10010111KKddKKKK sbiw w,K 7053 10011000pppppsss cbi p,s 7054 10011010pppppsss sbi p,s 7055 10011001pppppsss sbic p,s 7056 10011011pppppsss sbis p,s 7057 111101lllllll000 brcc l 7058 111100lllllll000 brcs l 7059 111100lllllll001 breq l 7060 111101lllllll100 brge l 7061 111101lllllll101 brhc l 7062 111100lllllll101 brhs l 7063 111101lllllll111 brid l 7064 111100lllllll111 brie l 7065 111100lllllll000 brlo l 7066 111100lllllll100 brlt l 7067 111100lllllll010 brmi l 7068 111101lllllll001 brne l 7069 111101lllllll010 brpl l 7070 111101lllllll000 brsh l 7071 111101lllllll110 brtc l 7072 111100lllllll110 brts l 7073 111101lllllll011 brvc l 7074 111100lllllll011 brvs l 7075 111101lllllllsss brbc s,l 7076 111100lllllllsss brbs s,l 7077 1101LLLLLLLLLLLL rcall L 7078 1100LLLLLLLLLLLL rjmp L 7079 1001010hhhhh111h call h 7080 1001010hhhhh110h jmp h 7081 1001010rrrrr0101 asr r 7082 1001010rrrrr0000 com r 7083 1001010rrrrr1010 dec r 7084 1001010rrrrr0011 inc r 7085 1001010rrrrr0110 lsr r 7086 1001010rrrrr0001 neg r 7087 1001000rrrrr1111 pop r 7088 1001001rrrrr1111 push r 7089 1001010rrrrr0111 ror r 7090 1001010rrrrr0010 swap r 7091 00000001ddddrrrr movw v,v 7092 00000010ddddrrrr muls d,d 7093 000000110ddd0rrr mulsu a,a 7094 000000110ddd1rrr fmul a,a 7095 000000111ddd0rrr fmuls a,a 7096 000000111ddd1rrr fmulsu a,a 7097 1001001ddddd0000 sts i,r 7098 1001000ddddd0000 lds r,i 7099 10o0oo0dddddbooo ldd r,b 7100 100!000dddddee-+ ld r,e 7101 10o0oo1rrrrrbooo std b,r 7102 100!001rrrrree-+ st e,r 7103 1001010100011001 eicall 7104 1001010000011001 eijmp 7105 7106 7107 File: as.info, Node: BFIN-Dependent, Next: CR16-Dependent, Prev: AVR-Dependent, Up: Machine Dependencies 7108 7109 9.5 Blackfin Dependent Features 7110 =============================== 7111 7112 * Menu: 7113 7114 * BFIN Syntax:: BFIN Syntax 7115 * BFIN Directives:: BFIN Directives 7116 7117 7118 File: as.info, Node: BFIN Syntax, Next: BFIN Directives, Up: BFIN-Dependent 7119 7120 9.5.1 Syntax 7121 ------------ 7122 7123 `Special Characters' 7124 Assembler input is free format and may appear anywhere on the line. 7125 One instruction may extend across multiple lines or more than one 7126 instruction may appear on the same line. White space (space, tab, 7127 comments or newline) may appear anywhere between tokens. A token 7128 must not have embedded spaces. Tokens include numbers, register 7129 names, keywords, user identifiers, and also some multicharacter 7130 special symbols like "+=", "/*" or "||". 7131 7132 `Instruction Delimiting' 7133 A semicolon must terminate every instruction. Sometimes a complete 7134 instruction will consist of more than one operation. There are two 7135 cases where this occurs. The first is when two general operations 7136 are combined. Normally a comma separates the different parts, as 7137 in 7138 7139 a0= r3.h * r2.l, a1 = r3.l * r2.h ; 7140 7141 The second case occurs when a general instruction is combined with 7142 one or two memory references for joint issue. The latter portions 7143 are set off by a "||" token. 7144 7145 a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++]; 7146 7147 `Register Names' 7148 The assembler treats register names and instruction keywords in a 7149 case insensitive manner. User identifiers are case sensitive. 7150 Thus, R3.l, R3.L, r3.l and r3.L are all equivalent input to the 7151 assembler. 7152 7153 Register names are reserved and may not be used as program 7154 identifiers. 7155 7156 Some operations (such as "Move Register") require a register pair. 7157 Register pairs are always data registers and are denoted using a 7158 colon, eg., R3:2. The larger number must be written firsts. Note 7159 that the hardware only supports odd-even pairs, eg., R7:6, R5:4, 7160 R3:2, and R1:0. 7161 7162 Some instructions (such as -SP (Push Multiple)) require a group of 7163 adjacent registers. Adjacent registers are denoted in the syntax 7164 by the range enclosed in parentheses and separated by a colon, 7165 eg., (R7:3). Again, the larger number appears first. 7166 7167 Portions of a particular register may be individually specified. 7168 This is written with a dot (".") following the register name and 7169 then a letter denoting the desired portion. For 32-bit registers, 7170 ".H" denotes the most significant ("High") portion. ".L" denotes 7171 the least-significant portion. The subdivisions of the 40-bit 7172 registers are described later. 7173 7174 `Accumulators' 7175 The set of 40-bit registers A1 and A0 that normally contain data 7176 that is being manipulated. Each accumulator can be accessed in 7177 four ways. 7178 7179 `one 40-bit register' 7180 The register will be referred to as A1 or A0. 7181 7182 `one 32-bit register' 7183 The registers are designated as A1.W or A0.W. 7184 7185 `two 16-bit registers' 7186 The registers are designated as A1.H, A1.L, A0.H or A0.L. 7187 7188 `one 8-bit register' 7189 The registers are designated as A1.X or A0.X for the bits that 7190 extend beyond bit 31. 7191 7192 `Data Registers' 7193 The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7) 7194 that normally contain data for manipulation. These are 7195 abbreviated as D-register or Dreg. Data registers can be accessed 7196 as 32-bit registers or as two independent 16-bit registers. The 7197 least significant 16 bits of each register is called the "low" 7198 half and is designated with ".L" following the register name. The 7199 most significant 16 bits are called the "high" half and is 7200 designated with ".H" following the name. 7201 7202 R7.L, r2.h, r4.L, R0.H 7203 7204 `Pointer Registers' 7205 The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP) 7206 that normally contain byte addresses of data structures. These are 7207 abbreviated as P-register or Preg. 7208 7209 p2, p5, fp, sp 7210 7211 `Stack Pointer SP' 7212 The stack pointer contains the 32-bit address of the last occupied 7213 byte location in the stack. The stack grows by decrementing the 7214 stack pointer. 7215 7216 `Frame Pointer FP' 7217 The frame pointer contains the 32-bit address of the previous frame 7218 pointer in the stack. It is located at the top of a frame. 7219 7220 `Loop Top' 7221 LT0 and LT1. These registers contain the 32-bit address of the 7222 top of a zero overhead loop. 7223 7224 `Loop Count' 7225 LC0 and LC1. These registers contain the 32-bit counter of the 7226 zero overhead loop executions. 7227 7228 `Loop Bottom' 7229 LB0 and LB1. These registers contain the 32-bit address of the 7230 bottom of a zero overhead loop. 7231 7232 `Index Registers' 7233 The set of 32-bit registers (I0, I1, I2, I3) that normally contain 7234 byte addresses of data structures. Abbreviated I-register or Ireg. 7235 7236 `Modify Registers' 7237 The set of 32-bit registers (M0, M1, M2, M3) that normally contain 7238 offset values that are added and subracted to one of the index 7239 registers. Abbreviated as Mreg. 7240 7241 `Length Registers' 7242 The set of 32-bit registers (L0, L1, L2, L3) that normally contain 7243 the length in bytes of the circular buffer. Abbreviated as Lreg. 7244 Clear the Lreg to disable circular addressing for the 7245 corresponding Ireg. 7246 7247 `Base Registers' 7248 The set of 32-bit registers (B0, B1, B2, B3) that normally contain 7249 the base address in bytes of the circular buffer. Abbreviated as 7250 Breg. 7251 7252 `Floating Point' 7253 The Blackfin family has no hardware floating point but the .float 7254 directive generates ieee floating point numbers for use with 7255 software floating point libraries. 7256 7257 `Blackfin Opcodes' 7258 For detailed information on the Blackfin machine instruction set, 7259 see the Blackfin(r) Processor Instruction Set Reference. 7260 7261 7262 7263 File: as.info, Node: BFIN Directives, Prev: BFIN Syntax, Up: BFIN-Dependent 7264 7265 9.5.2 Directives 7266 ---------------- 7267 7268 The following directives are provided for compatibility with the VDSP 7269 assembler. 7270 7271 `.byte2' 7272 Initializes a four byte data object. 7273 7274 `.byte4' 7275 Initializes a two byte data object. 7276 7277 `.db' 7278 TBD 7279 7280 `.dd' 7281 TBD 7282 7283 `.dw' 7284 TBD 7285 7286 `.var' 7287 Define and initialize a 32 bit data object. 7288 7289 7290 File: as.info, Node: CR16-Dependent, Next: CRIS-Dependent, Prev: BFIN-Dependent, Up: Machine Dependencies 7291 7292 9.6 CR16 Dependent Features 7293 =========================== 7294 7295 * Menu: 7296 7297 * CR16 Operand Qualifiers:: CR16 Machine Operand Qualifiers 7298 7299 7300 File: as.info, Node: CR16 Operand Qualifiers, Up: CR16-Dependent 7301 7302 9.6.1 CR16 Operand Qualifiers 7303 ----------------------------- 7304 7305 The National Semiconductor CR16 target of `as' has a few machine 7306 dependent operand qualifiers. 7307 7308 Operand expression type qualifier is an optional field in the 7309 instruction operand, to determines the type of the expression field of 7310 an operand. The `@' is required. CR16 architecture uses one of the 7311 following expression qualifiers: 7312 7313 `s' 7314 - `Specifies expression operand type as small' 7315 7316 `m' 7317 - `Specifies expression operand type as medium' 7318 7319 `l' 7320 - `Specifies expression operand type as large' 7321 7322 `c' 7323 - `Specifies the CR16 Assembler generates a relocation entry for 7324 the operand, where pc has implied bit, the expression is adjusted 7325 accordingly. The linker uses the relocation entry to update the 7326 operand address at link time.' 7327 7328 CR16 target operand qualifiers and its size (in bits): 7329 7330 `Immediate Operand' 7331 - s --- 4 bits 7332 7333 `' 7334 - m --- 16 bits, for movb and movw instructions. 7335 7336 `' 7337 - m --- 20 bits, movd instructions. 7338 7339 `' 7340 - l --- 32 bits 7341 7342 `Absolute Operand' 7343 - s --- Illegal specifier for this operand. 7344 7345 `' 7346 - m --- 20 bits, movd instructions. 7347 7348 `Displacement Operand' 7349 - s --- 8 bits 7350 7351 `' 7352 - m --- 16 bits 7353 7354 `' 7355 - l --- 24 bits 7356 7357 For example: 7358 1 `movw $_myfun@c,r1' 7359 7360 This loads the address of _myfun, shifted right by 1, into r1. 7361 7362 2 `movd $_myfun@c,(r2,r1)' 7363 7364 This loads the address of _myfun, shifted right by 1, into register-pair r2-r1. 7365 7366 3 `_myfun_ptr:' 7367 `.long _myfun@c' 7368 `loadd _myfun_ptr, (r1,r0)' 7369 `jal (r1,r0)' 7370 7371 This .long directive, the address of _myfunc, shifted right by 1 at link time. 7372 7373 7374 File: as.info, Node: CRIS-Dependent, Next: D10V-Dependent, Prev: CR16-Dependent, Up: Machine Dependencies 7375 7376 9.7 CRIS Dependent Features 7377 =========================== 7378 7379 * Menu: 7380 7381 * CRIS-Opts:: Command-line Options 7382 * CRIS-Expand:: Instruction expansion 7383 * CRIS-Symbols:: Symbols 7384 * CRIS-Syntax:: Syntax 7385 7386 7387 File: as.info, Node: CRIS-Opts, Next: CRIS-Expand, Up: CRIS-Dependent 7388 7389 9.7.1 Command-line Options 7390 -------------------------- 7391 7392 The CRIS version of `as' has these machine-dependent command-line 7393 options. 7394 7395 The format of the generated object files can be either ELF or a.out, 7396 specified by the command-line options `--emulation=crisaout' and 7397 `--emulation=criself'. The default is ELF (criself), unless `as' has 7398 been configured specifically for a.out by using the configuration name 7399 `cris-axis-aout'. 7400 7401 There are two different link-incompatible ELF object file variants 7402 for CRIS, for use in environments where symbols are expected to be 7403 prefixed by a leading `_' character and for environments without such a 7404 symbol prefix. The variant used for GNU/Linux port has no symbol 7405 prefix. Which variant to produce is specified by either of the options 7406 `--underscore' and `--no-underscore'. The default is `--underscore'. 7407 Since symbols in CRIS a.out objects are expected to have a `_' prefix, 7408 specifying `--no-underscore' when generating a.out objects is an error. 7409 Besides the object format difference, the effect of this option is to 7410 parse register names differently (*note crisnous::). The 7411 `--no-underscore' option makes a `$' register prefix mandatory. 7412 7413 The option `--pic' must be passed to `as' in order to recognize the 7414 symbol syntax used for ELF (SVR4 PIC) position-independent-code (*note 7415 crispic::). This will also affect expansion of instructions. The 7416 expansion with `--pic' will use PC-relative rather than (slightly 7417 faster) absolute addresses in those expansions. 7418 7419 The option `--march=ARCHITECTURE' specifies the recognized 7420 instruction set and recognized register names. It also controls the 7421 architecture type of the object file. Valid values for ARCHITECTURE 7422 are: 7423 `v0_v10' 7424 All instructions and register names for any architecture variant 7425 in the set v0...v10 are recognized. This is the default if the 7426 target is configured as cris-*. 7427 7428 `v10' 7429 Only instructions and register names for CRIS v10 (as found in 7430 ETRAX 100 LX) are recognized. This is the default if the target 7431 is configured as crisv10-*. 7432 7433 `v32' 7434 Only instructions and register names for CRIS v32 (code name 7435 Guinness) are recognized. This is the default if the target is 7436 configured as crisv32-*. This value implies `--no-mul-bug-abort'. 7437 (A subsequent `--mul-bug-abort' will turn it back on.) 7438 7439 `common_v10_v32' 7440 Only instructions with register names and addressing modes with 7441 opcodes common to the v10 and v32 are recognized. 7442 7443 When `-N' is specified, `as' will emit a warning when a 16-bit 7444 branch instruction is expanded into a 32-bit multiple-instruction 7445 construct (*note CRIS-Expand::). 7446 7447 Some versions of the CRIS v10, for example in the Etrax 100 LX, 7448 contain a bug that causes destabilizing memory accesses when a multiply 7449 instruction is executed with certain values in the first operand just 7450 before a cache-miss. When the `--mul-bug-abort' command line option is 7451 active (the default value), `as' will refuse to assemble a file 7452 containing a multiply instruction at a dangerous offset, one that could 7453 be the last on a cache-line, or is in a section with insufficient 7454 alignment. This placement checking does not catch any case where the 7455 multiply instruction is dangerously placed because it is located in a 7456 delay-slot. The `--mul-bug-abort' command line option turns off the 7457 checking. 7458 7459 7460 File: as.info, Node: CRIS-Expand, Next: CRIS-Symbols, Prev: CRIS-Opts, Up: CRIS-Dependent 7461 7462 9.7.2 Instruction expansion 7463 --------------------------- 7464 7465 `as' will silently choose an instruction that fits the operand size for 7466 `[register+constant]' operands. For example, the offset `127' in 7467 `move.d [r3+127],r4' fits in an instruction using a signed-byte offset. 7468 Similarly, `move.d [r2+32767],r1' will generate an instruction using a 7469 16-bit offset. For symbolic expressions and constants that do not fit 7470 in 16 bits including the sign bit, a 32-bit offset is generated. 7471 7472 For branches, `as' will expand from a 16-bit branch instruction into 7473 a sequence of instructions that can reach a full 32-bit address. Since 7474 this does not correspond to a single instruction, such expansions can 7475 optionally be warned about. *Note CRIS-Opts::. 7476 7477 If the operand is found to fit the range, a `lapc' mnemonic will 7478 translate to a `lapcq' instruction. Use `lapc.d' to force the 32-bit 7479 `lapc' instruction. 7480 7481 Similarly, the `addo' mnemonic will translate to the shortest 7482 fitting instruction of `addoq', `addo.w' and `addo.d', when used with a 7483 operand that is a constant known at assembly time. 7484 7485 7486 File: as.info, Node: CRIS-Symbols, Next: CRIS-Syntax, Prev: CRIS-Expand, Up: CRIS-Dependent 7487 7488 9.7.3 Symbols 7489 ------------- 7490 7491 Some symbols are defined by the assembler. They're intended to be used 7492 in conditional assembly, for example: 7493 .if ..asm.arch.cris.v32 7494 CODE FOR CRIS V32 7495 .elseif ..asm.arch.cris.common_v10_v32 7496 CODE COMMON TO CRIS V32 AND CRIS V10 7497 .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10 7498 CODE FOR V10 7499 .else 7500 .error "Code needs to be added here." 7501 .endif 7502 7503 These symbols are defined in the assembler, reflecting command-line 7504 options, either when specified or the default. They are always 7505 defined, to 0 or 1. 7506 `..asm.arch.cris.any_v0_v10' 7507 This symbol is non-zero when `--march=v0_v10' is specified or the 7508 default. 7509 7510 `..asm.arch.cris.common_v10_v32' 7511 Set according to the option `--march=common_v10_v32'. 7512 7513 `..asm.arch.cris.v10' 7514 Reflects the option `--march=v10'. 7515 7516 `..asm.arch.cris.v32' 7517 Corresponds to `--march=v10'. 7518 7519 Speaking of symbols, when a symbol is used in code, it can have a 7520 suffix modifying its value for use in position-independent code. *Note 7521 CRIS-Pic::. 7522 7523 7524 File: as.info, Node: CRIS-Syntax, Prev: CRIS-Symbols, Up: CRIS-Dependent 7525 7526 9.7.4 Syntax 7527 ------------ 7528 7529 There are different aspects of the CRIS assembly syntax. 7530 7531 * Menu: 7532 7533 * CRIS-Chars:: Special Characters 7534 * CRIS-Pic:: Position-Independent Code Symbols 7535 * CRIS-Regs:: Register Names 7536 * CRIS-Pseudos:: Assembler Directives 7537 7538 7539 File: as.info, Node: CRIS-Chars, Next: CRIS-Pic, Up: CRIS-Syntax 7540 7541 9.7.4.1 Special Characters 7542 .......................... 7543 7544 The character `#' is a line comment character. It starts a comment if 7545 and only if it is placed at the beginning of a line. 7546 7547 A `;' character starts a comment anywhere on the line, causing all 7548 characters up to the end of the line to be ignored. 7549 7550 A `@' character is handled as a line separator equivalent to a 7551 logical new-line character (except in a comment), so separate 7552 instructions can be specified on a single line. 7553 7554 7555 File: as.info, Node: CRIS-Pic, Next: CRIS-Regs, Prev: CRIS-Chars, Up: CRIS-Syntax 7556 7557 9.7.4.2 Symbols in position-independent code 7558 ............................................ 7559 7560 When generating position-independent code (SVR4 PIC) for use in 7561 cris-axis-linux-gnu or crisv32-axis-linux-gnu shared libraries, symbol 7562 suffixes are used to specify what kind of run-time symbol lookup will 7563 be used, expressed in the object as different _relocation types_. 7564 Usually, all absolute symbol values must be located in a table, the 7565 _global offset table_, leaving the code position-independent; 7566 independent of values of global symbols and independent of the address 7567 of the code. The suffix modifies the value of the symbol, into for 7568 example an index into the global offset table where the real symbol 7569 value is entered, or a PC-relative value, or a value relative to the 7570 start of the global offset table. All symbol suffixes start with the 7571 character `:' (omitted in the list below). Every symbol use in code or 7572 a read-only section must therefore have a PIC suffix to enable a useful 7573 shared library to be created. Usually, these constructs must not be 7574 used with an additive constant offset as is usually allowed, i.e. no 4 7575 as in `symbol + 4' is allowed. This restriction is checked at 7576 link-time, not at assembly-time. 7577 7578 `GOT' 7579 Attaching this suffix to a symbol in an instruction causes the 7580 symbol to be entered into the global offset table. The value is a 7581 32-bit index for that symbol into the global offset table. The 7582 name of the corresponding relocation is `R_CRIS_32_GOT'. Example: 7583 `move.d [$r0+extsym:GOT],$r9' 7584 7585 `GOT16' 7586 Same as for `GOT', but the value is a 16-bit index into the global 7587 offset table. The corresponding relocation is `R_CRIS_16_GOT'. 7588 Example: `move.d [$r0+asymbol:GOT16],$r10' 7589 7590 `PLT' 7591 This suffix is used for function symbols. It causes a _procedure 7592 linkage table_, an array of code stubs, to be created at the time 7593 the shared object is created or linked against, together with a 7594 global offset table entry. The value is a pc-relative offset to 7595 the corresponding stub code in the procedure linkage table. This 7596 arrangement causes the run-time symbol resolver to be called to 7597 look up and set the value of the symbol the first time the 7598 function is called (at latest; depending environment variables). 7599 It is only safe to leave the symbol unresolved this way if all 7600 references are function calls. The name of the relocation is 7601 `R_CRIS_32_PLT_PCREL'. Example: `add.d fnname:PLT,$pc' 7602 7603 `PLTG' 7604 Like PLT, but the value is relative to the beginning of the global 7605 offset table. The relocation is `R_CRIS_32_PLT_GOTREL'. Example: 7606 `move.d fnname:PLTG,$r3' 7607 7608 `GOTPLT' 7609 Similar to `PLT', but the value of the symbol is a 32-bit index 7610 into the global offset table. This is somewhat of a mix between 7611 the effect of the `GOT' and the `PLT' suffix; the difference to 7612 `GOT' is that there will be a procedure linkage table entry 7613 created, and that the symbol is assumed to be a function entry and 7614 will be resolved by the run-time resolver as with `PLT'. The 7615 relocation is `R_CRIS_32_GOTPLT'. Example: `jsr 7616 [$r0+fnname:GOTPLT]' 7617 7618 `GOTPLT16' 7619 A variant of `GOTPLT' giving a 16-bit value. Its relocation name 7620 is `R_CRIS_16_GOTPLT'. Example: `jsr [$r0+fnname:GOTPLT16]' 7621 7622 `GOTOFF' 7623 This suffix must only be attached to a local symbol, but may be 7624 used in an expression adding an offset. The value is the address 7625 of the symbol relative to the start of the global offset table. 7626 The relocation name is `R_CRIS_32_GOTREL'. Example: `move.d 7627 [$r0+localsym:GOTOFF],r3' 7628 7629 7630 File: as.info, Node: CRIS-Regs, Next: CRIS-Pseudos, Prev: CRIS-Pic, Up: CRIS-Syntax 7631 7632 9.7.4.3 Register names 7633 ...................... 7634 7635 A `$' character may always prefix a general or special register name in 7636 an instruction operand but is mandatory when the option 7637 `--no-underscore' is specified or when the `.syntax register_prefix' 7638 directive is in effect (*note crisnous::). Register names are 7639 case-insensitive. 7640 7641 7642 File: as.info, Node: CRIS-Pseudos, Prev: CRIS-Regs, Up: CRIS-Syntax 7643 7644 9.7.4.4 Assembler Directives 7645 ............................ 7646 7647 There are a few CRIS-specific pseudo-directives in addition to the 7648 generic ones. *Note Pseudo Ops::. Constants emitted by 7649 pseudo-directives are in little-endian order for CRIS. There is no 7650 support for floating-point-specific directives for CRIS. 7651 7652 `.dword EXPRESSIONS' 7653 The `.dword' directive is a synonym for `.int', expecting zero or 7654 more EXPRESSIONS, separated by commas. For each expression, a 7655 32-bit little-endian constant is emitted. 7656 7657 `.syntax ARGUMENT' 7658 The `.syntax' directive takes as ARGUMENT one of the following 7659 case-sensitive choices. 7660 7661 `no_register_prefix' 7662 The `.syntax no_register_prefix' directive makes a `$' 7663 character prefix on all registers optional. It overrides a 7664 previous setting, including the corresponding effect of the 7665 option `--no-underscore'. If this directive is used when 7666 ordinary symbols do not have a `_' character prefix, care 7667 must be taken to avoid ambiguities whether an operand is a 7668 register or a symbol; using symbols with names the same as 7669 general or special registers then invoke undefined behavior. 7670 7671 `register_prefix' 7672 This directive makes a `$' character prefix on all registers 7673 mandatory. It overrides a previous setting, including the 7674 corresponding effect of the option `--underscore'. 7675 7676 `leading_underscore' 7677 This is an assertion directive, emitting an error if the 7678 `--no-underscore' option is in effect. 7679 7680 `no_leading_underscore' 7681 This is the opposite of the `.syntax leading_underscore' 7682 directive and emits an error if the option `--underscore' is 7683 in effect. 7684 7685 `.arch ARGUMENT' 7686 This is an assertion directive, giving an error if the specified 7687 ARGUMENT is not the same as the specified or default value for the 7688 `--march=ARCHITECTURE' option (*note march-option::). 7689 7690 7691 7692 File: as.info, Node: D10V-Dependent, Next: D30V-Dependent, Prev: CRIS-Dependent, Up: Machine Dependencies 7693 7694 9.8 D10V Dependent Features 7695 =========================== 7696 7697 * Menu: 7698 7699 * D10V-Opts:: D10V Options 7700 * D10V-Syntax:: Syntax 7701 * D10V-Float:: Floating Point 7702 * D10V-Opcodes:: Opcodes 7703 7704 7705 File: as.info, Node: D10V-Opts, Next: D10V-Syntax, Up: D10V-Dependent 7706 7707 9.8.1 D10V Options 7708 ------------------ 7709 7710 The Mitsubishi D10V version of `as' has a few machine dependent options. 7711 7712 `-O' 7713 The D10V can often execute two sub-instructions in parallel. When 7714 this option is used, `as' will attempt to optimize its output by 7715 detecting when instructions can be executed in parallel. 7716 7717 `--nowarnswap' 7718 To optimize execution performance, `as' will sometimes swap the 7719 order of instructions. Normally this generates a warning. When 7720 this option is used, no warning will be generated when 7721 instructions are swapped. 7722 7723 `--gstabs-packing' 7724 7725 `--no-gstabs-packing' 7726 `as' packs adjacent short instructions into a single packed 7727 instruction. `--no-gstabs-packing' turns instruction packing off if 7728 `--gstabs' is specified as well; `--gstabs-packing' (the default) 7729 turns instruction packing on even when `--gstabs' is specified. 7730 7731 7732 File: as.info, Node: D10V-Syntax, Next: D10V-Float, Prev: D10V-Opts, Up: D10V-Dependent 7733 7734 9.8.2 Syntax 7735 ------------ 7736 7737 The D10V syntax is based on the syntax in Mitsubishi's D10V 7738 architecture manual. The differences are detailed below. 7739 7740 * Menu: 7741 7742 * D10V-Size:: Size Modifiers 7743 * D10V-Subs:: Sub-Instructions 7744 * D10V-Chars:: Special Characters 7745 * D10V-Regs:: Register Names 7746 * D10V-Addressing:: Addressing Modes 7747 * D10V-Word:: @WORD Modifier 7748 7749 7750 File: as.info, Node: D10V-Size, Next: D10V-Subs, Up: D10V-Syntax 7751 7752 9.8.2.1 Size Modifiers 7753 ...................... 7754 7755 The D10V version of `as' uses the instruction names in the D10V 7756 Architecture Manual. However, the names in the manual are sometimes 7757 ambiguous. There are instruction names that can assemble to a short or 7758 long form opcode. How does the assembler pick the correct form? `as' 7759 will always pick the smallest form if it can. When dealing with a 7760 symbol that is not defined yet when a line is being assembled, it will 7761 always use the long form. If you need to force the assembler to use 7762 either the short or long form of the instruction, you can append either 7763 `.s' (short) or `.l' (long) to it. For example, if you are writing an 7764 assembly program and you want to do a branch to a symbol that is 7765 defined later in your program, you can write `bra.s foo'. Objdump 7766 and GDB will always append `.s' or `.l' to instructions which have both 7767 short and long forms. 7768 7769 7770 File: as.info, Node: D10V-Subs, Next: D10V-Chars, Prev: D10V-Size, Up: D10V-Syntax 7771 7772 9.8.2.2 Sub-Instructions 7773 ........................ 7774 7775 The D10V assembler takes as input a series of instructions, either 7776 one-per-line, or in the special two-per-line format described in the 7777 next section. Some of these instructions will be short-form or 7778 sub-instructions. These sub-instructions can be packed into a single 7779 instruction. The assembler will do this automatically. It will also 7780 detect when it should not pack instructions. For example, when a label 7781 is defined, the next instruction will never be packaged with the 7782 previous one. Whenever a branch and link instruction is called, it 7783 will not be packaged with the next instruction so the return address 7784 will be valid. Nops are automatically inserted when necessary. 7785 7786 If you do not want the assembler automatically making these 7787 decisions, you can control the packaging and execution type (parallel 7788 or sequential) with the special execution symbols described in the next 7789 section. 7790 7791 7792 File: as.info, Node: D10V-Chars, Next: D10V-Regs, Prev: D10V-Subs, Up: D10V-Syntax 7793 7794 9.8.2.3 Special Characters 7795 .......................... 7796 7797 `;' and `#' are the line comment characters. Sub-instructions may be 7798 executed in order, in reverse-order, or in parallel. Instructions 7799 listed in the standard one-per-line format will be executed 7800 sequentially. To specify the executing order, use the following 7801 symbols: 7802 `->' 7803 Sequential with instruction on the left first. 7804 7805 `<-' 7806 Sequential with instruction on the right first. 7807 7808 `||' 7809 Parallel 7810 The D10V syntax allows either one instruction per line, one 7811 instruction per line with the execution symbol, or two instructions per 7812 line. For example 7813 `abs a1 -> abs r0' 7814 Execute these sequentially. The instruction on the right is in 7815 the right container and is executed second. 7816 7817 `abs r0 <- abs a1' 7818 Execute these reverse-sequentially. The instruction on the right 7819 is in the right container, and is executed first. 7820 7821 `ld2w r2,@r8+ || mac a0,r0,r7' 7822 Execute these in parallel. 7823 7824 `ld2w r2,@r8+ ||' 7825 `mac a0,r0,r7' 7826 Two-line format. Execute these in parallel. 7827 7828 `ld2w r2,@r8+' 7829 `mac a0,r0,r7' 7830 Two-line format. Execute these sequentially. Assembler will put 7831 them in the proper containers. 7832 7833 `ld2w r2,@r8+ ->' 7834 `mac a0,r0,r7' 7835 Two-line format. Execute these sequentially. Same as above but 7836 second instruction will always go into right container. 7837 Since `$' has no special meaning, you may use it in symbol names. 7838 7839 7840 File: as.info, Node: D10V-Regs, Next: D10V-Addressing, Prev: D10V-Chars, Up: D10V-Syntax 7841 7842 9.8.2.4 Register Names 7843 ...................... 7844 7845 You can use the predefined symbols `r0' through `r15' to refer to the 7846 D10V registers. You can also use `sp' as an alias for `r15'. The 7847 accumulators are `a0' and `a1'. There are special register-pair names 7848 that may optionally be used in opcodes that require even-numbered 7849 registers. Register names are not case sensitive. 7850 7851 Register Pairs 7852 `r0-r1' 7853 7854 `r2-r3' 7855 7856 `r4-r5' 7857 7858 `r6-r7' 7859 7860 `r8-r9' 7861 7862 `r10-r11' 7863 7864 `r12-r13' 7865 7866 `r14-r15' 7867 7868 The D10V also has predefined symbols for these control registers and 7869 status bits: 7870 `psw' 7871 Processor Status Word 7872 7873 `bpsw' 7874 Backup Processor Status Word 7875 7876 `pc' 7877 Program Counter 7878 7879 `bpc' 7880 Backup Program Counter 7881 7882 `rpt_c' 7883 Repeat Count 7884 7885 `rpt_s' 7886 Repeat Start address 7887 7888 `rpt_e' 7889 Repeat End address 7890 7891 `mod_s' 7892 Modulo Start address 7893 7894 `mod_e' 7895 Modulo End address 7896 7897 `iba' 7898 Instruction Break Address 7899 7900 `f0' 7901 Flag 0 7902 7903 `f1' 7904 Flag 1 7905 7906 `c' 7907 Carry flag 7908 7909 7910 File: as.info, Node: D10V-Addressing, Next: D10V-Word, Prev: D10V-Regs, Up: D10V-Syntax 7911 7912 9.8.2.5 Addressing Modes 7913 ........................ 7914 7915 `as' understands the following addressing modes for the D10V. `RN' in 7916 the following refers to any of the numbered registers, but _not_ the 7917 control registers. 7918 `RN' 7919 Register direct 7920 7921 `@RN' 7922 Register indirect 7923 7924 `@RN+' 7925 Register indirect with post-increment 7926 7927 `@RN-' 7928 Register indirect with post-decrement 7929 7930 `@-SP' 7931 Register indirect with pre-decrement 7932 7933 `@(DISP, RN)' 7934 Register indirect with displacement 7935 7936 `ADDR' 7937 PC relative address (for branch or rep). 7938 7939 `#IMM' 7940 Immediate data (the `#' is optional and ignored) 7941 7942 7943 File: as.info, Node: D10V-Word, Prev: D10V-Addressing, Up: D10V-Syntax 7944 7945 9.8.2.6 @WORD Modifier 7946 ...................... 7947 7948 Any symbol followed by `@word' will be replaced by the symbol's value 7949 shifted right by 2. This is used in situations such as loading a 7950 register with the address of a function (or any other code fragment). 7951 For example, if you want to load a register with the location of the 7952 function `main' then jump to that function, you could do it as follows: 7953 ldi r2, main@word 7954 jmp r2 7955 7956 7957 File: as.info, Node: D10V-Float, Next: D10V-Opcodes, Prev: D10V-Syntax, Up: D10V-Dependent 7958 7959 9.8.3 Floating Point 7960 -------------------- 7961 7962 The D10V has no hardware floating point, but the `.float' and `.double' 7963 directives generates IEEE floating-point numbers for compatibility with 7964 other development tools. 7965 7966 7967 File: as.info, Node: D10V-Opcodes, Prev: D10V-Float, Up: D10V-Dependent 7968 7969 9.8.4 Opcodes 7970 ------------- 7971 7972 For detailed information on the D10V machine instruction set, see `D10V 7973 Architecture: A VLIW Microprocessor for Multimedia Applications' 7974 (Mitsubishi Electric Corp.). `as' implements all the standard D10V 7975 opcodes. The only changes are those described in the section on size 7976 modifiers 7977 7978 7979 File: as.info, Node: D30V-Dependent, Next: H8/300-Dependent, Prev: D10V-Dependent, Up: Machine Dependencies 7980 7981 9.9 D30V Dependent Features 7982 =========================== 7983 7984 * Menu: 7985 7986 * D30V-Opts:: D30V Options 7987 * D30V-Syntax:: Syntax 7988 * D30V-Float:: Floating Point 7989 * D30V-Opcodes:: Opcodes 7990 7991 7992 File: as.info, Node: D30V-Opts, Next: D30V-Syntax, Up: D30V-Dependent 7993 7994 9.9.1 D30V Options 7995 ------------------ 7996 7997 The Mitsubishi D30V version of `as' has a few machine dependent options. 7998 7999 `-O' 8000 The D30V can often execute two sub-instructions in parallel. When 8001 this option is used, `as' will attempt to optimize its output by 8002 detecting when instructions can be executed in parallel. 8003 8004 `-n' 8005 When this option is used, `as' will issue a warning every time it 8006 adds a nop instruction. 8007 8008 `-N' 8009 When this option is used, `as' will issue a warning if it needs to 8010 insert a nop after a 32-bit multiply before a load or 16-bit 8011 multiply instruction. 8012 8013 8014 File: as.info, Node: D30V-Syntax, Next: D30V-Float, Prev: D30V-Opts, Up: D30V-Dependent 8015 8016 9.9.2 Syntax 8017 ------------ 8018 8019 The D30V syntax is based on the syntax in Mitsubishi's D30V 8020 architecture manual. The differences are detailed below. 8021 8022 * Menu: 8023 8024 * D30V-Size:: Size Modifiers 8025 * D30V-Subs:: Sub-Instructions 8026 * D30V-Chars:: Special Characters 8027 * D30V-Guarded:: Guarded Execution 8028 * D30V-Regs:: Register Names 8029 * D30V-Addressing:: Addressing Modes 8030 8031 8032 File: as.info, Node: D30V-Size, Next: D30V-Subs, Up: D30V-Syntax 8033 8034 9.9.2.1 Size Modifiers 8035 ...................... 8036 8037 The D30V version of `as' uses the instruction names in the D30V 8038 Architecture Manual. However, the names in the manual are sometimes 8039 ambiguous. There are instruction names that can assemble to a short or 8040 long form opcode. How does the assembler pick the correct form? `as' 8041 will always pick the smallest form if it can. When dealing with a 8042 symbol that is not defined yet when a line is being assembled, it will 8043 always use the long form. If you need to force the assembler to use 8044 either the short or long form of the instruction, you can append either 8045 `.s' (short) or `.l' (long) to it. For example, if you are writing an 8046 assembly program and you want to do a branch to a symbol that is 8047 defined later in your program, you can write `bra.s foo'. Objdump and 8048 GDB will always append `.s' or `.l' to instructions which have both 8049 short and long forms. 8050 8051 8052 File: as.info, Node: D30V-Subs, Next: D30V-Chars, Prev: D30V-Size, Up: D30V-Syntax 8053 8054 9.9.2.2 Sub-Instructions 8055 ........................ 8056 8057 The D30V assembler takes as input a series of instructions, either 8058 one-per-line, or in the special two-per-line format described in the 8059 next section. Some of these instructions will be short-form or 8060 sub-instructions. These sub-instructions can be packed into a single 8061 instruction. The assembler will do this automatically. It will also 8062 detect when it should not pack instructions. For example, when a label 8063 is defined, the next instruction will never be packaged with the 8064 previous one. Whenever a branch and link instruction is called, it 8065 will not be packaged with the next instruction so the return address 8066 will be valid. Nops are automatically inserted when necessary. 8067 8068 If you do not want the assembler automatically making these 8069 decisions, you can control the packaging and execution type (parallel 8070 or sequential) with the special execution symbols described in the next 8071 section. 8072 8073 8074 File: as.info, Node: D30V-Chars, Next: D30V-Guarded, Prev: D30V-Subs, Up: D30V-Syntax 8075 8076 9.9.2.3 Special Characters 8077 .......................... 8078 8079 `;' and `#' are the line comment characters. Sub-instructions may be 8080 executed in order, in reverse-order, or in parallel. Instructions 8081 listed in the standard one-per-line format will be executed 8082 sequentially unless you use the `-O' option. 8083 8084 To specify the executing order, use the following symbols: 8085 `->' 8086 Sequential with instruction on the left first. 8087 8088 `<-' 8089 Sequential with instruction on the right first. 8090 8091 `||' 8092 Parallel 8093 8094 The D30V syntax allows either one instruction per line, one 8095 instruction per line with the execution symbol, or two instructions per 8096 line. For example 8097 `abs r2,r3 -> abs r4,r5' 8098 Execute these sequentially. The instruction on the right is in 8099 the right container and is executed second. 8100 8101 `abs r2,r3 <- abs r4,r5' 8102 Execute these reverse-sequentially. The instruction on the right 8103 is in the right container, and is executed first. 8104 8105 `abs r2,r3 || abs r4,r5' 8106 Execute these in parallel. 8107 8108 `ldw r2,@(r3,r4) ||' 8109 `mulx r6,r8,r9' 8110 Two-line format. Execute these in parallel. 8111 8112 `mulx a0,r8,r9' 8113 `stw r2,@(r3,r4)' 8114 Two-line format. Execute these sequentially unless `-O' option is 8115 used. If the `-O' option is used, the assembler will determine if 8116 the instructions could be done in parallel (the above two 8117 instructions can be done in parallel), and if so, emit them as 8118 parallel instructions. The assembler will put them in the proper 8119 containers. In the above example, the assembler will put the 8120 `stw' instruction in left container and the `mulx' instruction in 8121 the right container. 8122 8123 `stw r2,@(r3,r4) ->' 8124 `mulx a0,r8,r9' 8125 Two-line format. Execute the `stw' instruction followed by the 8126 `mulx' instruction sequentially. The first instruction goes in the 8127 left container and the second instruction goes into right 8128 container. The assembler will give an error if the machine 8129 ordering constraints are violated. 8130 8131 `stw r2,@(r3,r4) <-' 8132 `mulx a0,r8,r9' 8133 Same as previous example, except that the `mulx' instruction is 8134 executed before the `stw' instruction. 8135 8136 Since `$' has no special meaning, you may use it in symbol names. 8137 8138 8139 File: as.info, Node: D30V-Guarded, Next: D30V-Regs, Prev: D30V-Chars, Up: D30V-Syntax 8140 8141 9.9.2.4 Guarded Execution 8142 ......................... 8143 8144 `as' supports the full range of guarded execution directives for each 8145 instruction. Just append the directive after the instruction proper. 8146 The directives are: 8147 8148 `/tx' 8149 Execute the instruction if flag f0 is true. 8150 8151 `/fx' 8152 Execute the instruction if flag f0 is false. 8153 8154 `/xt' 8155 Execute the instruction if flag f1 is true. 8156 8157 `/xf' 8158 Execute the instruction if flag f1 is false. 8159 8160 `/tt' 8161 Execute the instruction if both flags f0 and f1 are true. 8162 8163 `/tf' 8164 Execute the instruction if flag f0 is true and flag f1 is false. 8165 8166 8167 File: as.info, Node: D30V-Regs, Next: D30V-Addressing, Prev: D30V-Guarded, Up: D30V-Syntax 8168 8169 9.9.2.5 Register Names 8170 ...................... 8171 8172 You can use the predefined symbols `r0' through `r63' to refer to the 8173 D30V registers. You can also use `sp' as an alias for `r63' and `link' 8174 as an alias for `r62'. The accumulators are `a0' and `a1'. 8175 8176 The D30V also has predefined symbols for these control registers and 8177 status bits: 8178 `psw' 8179 Processor Status Word 8180 8181 `bpsw' 8182 Backup Processor Status Word 8183 8184 `pc' 8185 Program Counter 8186 8187 `bpc' 8188 Backup Program Counter 8189 8190 `rpt_c' 8191 Repeat Count 8192 8193 `rpt_s' 8194 Repeat Start address 8195 8196 `rpt_e' 8197 Repeat End address 8198 8199 `mod_s' 8200 Modulo Start address 8201 8202 `mod_e' 8203 Modulo End address 8204 8205 `iba' 8206 Instruction Break Address 8207 8208 `f0' 8209 Flag 0 8210 8211 `f1' 8212 Flag 1 8213 8214 `f2' 8215 Flag 2 8216 8217 `f3' 8218 Flag 3 8219 8220 `f4' 8221 Flag 4 8222 8223 `f5' 8224 Flag 5 8225 8226 `f6' 8227 Flag 6 8228 8229 `f7' 8230 Flag 7 8231 8232 `s' 8233 Same as flag 4 (saturation flag) 8234 8235 `v' 8236 Same as flag 5 (overflow flag) 8237 8238 `va' 8239 Same as flag 6 (sticky overflow flag) 8240 8241 `c' 8242 Same as flag 7 (carry/borrow flag) 8243 8244 `b' 8245 Same as flag 7 (carry/borrow flag) 8246 8247 8248 File: as.info, Node: D30V-Addressing, Prev: D30V-Regs, Up: D30V-Syntax 8249 8250 9.9.2.6 Addressing Modes 8251 ........................ 8252 8253 `as' understands the following addressing modes for the D30V. `RN' in 8254 the following refers to any of the numbered registers, but _not_ the 8255 control registers. 8256 `RN' 8257 Register direct 8258 8259 `@RN' 8260 Register indirect 8261 8262 `@RN+' 8263 Register indirect with post-increment 8264 8265 `@RN-' 8266 Register indirect with post-decrement 8267 8268 `@-SP' 8269 Register indirect with pre-decrement 8270 8271 `@(DISP, RN)' 8272 Register indirect with displacement 8273 8274 `ADDR' 8275 PC relative address (for branch or rep). 8276 8277 `#IMM' 8278 Immediate data (the `#' is optional and ignored) 8279 8280 8281 File: as.info, Node: D30V-Float, Next: D30V-Opcodes, Prev: D30V-Syntax, Up: D30V-Dependent 8282 8283 9.9.3 Floating Point 8284 -------------------- 8285 8286 The D30V has no hardware floating point, but the `.float' and `.double' 8287 directives generates IEEE floating-point numbers for compatibility with 8288 other development tools. 8289 8290 8291 File: as.info, Node: D30V-Opcodes, Prev: D30V-Float, Up: D30V-Dependent 8292 8293 9.9.4 Opcodes 8294 ------------- 8295 8296 For detailed information on the D30V machine instruction set, see `D30V 8297 Architecture: A VLIW Microprocessor for Multimedia Applications' 8298 (Mitsubishi Electric Corp.). `as' implements all the standard D30V 8299 opcodes. The only changes are those described in the section on size 8300 modifiers 8301 8302 8303 File: as.info, Node: H8/300-Dependent, Next: HPPA-Dependent, Prev: D30V-Dependent, Up: Machine Dependencies 8304 8305 9.10 H8/300 Dependent Features 8306 ============================== 8307 8308 * Menu: 8309 8310 * H8/300 Options:: Options 8311 * H8/300 Syntax:: Syntax 8312 * H8/300 Floating Point:: Floating Point 8313 * H8/300 Directives:: H8/300 Machine Directives 8314 * H8/300 Opcodes:: Opcodes 8315 8316 8317 File: as.info, Node: H8/300 Options, Next: H8/300 Syntax, Up: H8/300-Dependent 8318 8319 9.10.1 Options 8320 -------------- 8321 8322 The Renesas H8/300 version of `as' has one machine-dependent option: 8323 8324 `-h-tick-hex' 8325 Support H'00 style hex constants in addition to 0x00 style. 8326 8327 8328 8329 File: as.info, Node: H8/300 Syntax, Next: H8/300 Floating Point, Prev: H8/300 Options, Up: H8/300-Dependent 8330 8331 9.10.2 Syntax 8332 ------------- 8333 8334 * Menu: 8335 8336 * H8/300-Chars:: Special Characters 8337 * H8/300-Regs:: Register Names 8338 * H8/300-Addressing:: Addressing Modes 8339 8340 8341 File: as.info, Node: H8/300-Chars, Next: H8/300-Regs, Up: H8/300 Syntax 8342 8343 9.10.2.1 Special Characters 8344 ........................... 8345 8346 `;' is the line comment character. 8347 8348 `$' can be used instead of a newline to separate statements. 8349 Therefore _you may not use `$' in symbol names_ on the H8/300. 8350 8351 8352 File: as.info, Node: H8/300-Regs, Next: H8/300-Addressing, Prev: H8/300-Chars, Up: H8/300 Syntax 8353 8354 9.10.2.2 Register Names 8355 ....................... 8356 8357 You can use predefined symbols of the form `rNh' and `rNl' to refer to 8358 the H8/300 registers as sixteen 8-bit general-purpose registers. N is 8359 a digit from `0' to `7'); for instance, both `r0h' and `r7l' are valid 8360 register names. 8361 8362 You can also use the eight predefined symbols `rN' to refer to the 8363 H8/300 registers as 16-bit registers (you must use this form for 8364 addressing). 8365 8366 On the H8/300H, you can also use the eight predefined symbols `erN' 8367 (`er0' ... `er7') to refer to the 32-bit general purpose registers. 8368 8369 The two control registers are called `pc' (program counter; a 16-bit 8370 register, except on the H8/300H where it is 24 bits) and `ccr' 8371 (condition code register; an 8-bit register). `r7' is used as the 8372 stack pointer, and can also be called `sp'. 8373 8374 8375 File: as.info, Node: H8/300-Addressing, Prev: H8/300-Regs, Up: H8/300 Syntax 8376 8377 9.10.2.3 Addressing Modes 8378 ......................... 8379 8380 as understands the following addressing modes for the H8/300: 8381 `rN' 8382 Register direct 8383 8384 `@rN' 8385 Register indirect 8386 8387 `@(D, rN)' 8388 `@(D:16, rN)' 8389 `@(D:24, rN)' 8390 Register indirect: 16-bit or 24-bit displacement D from register 8391 N. (24-bit displacements are only meaningful on the H8/300H.) 8392 8393 `@rN+' 8394 Register indirect with post-increment 8395 8396 `@-rN' 8397 Register indirect with pre-decrement 8398 8399 ``@'AA' 8400 ``@'AA:8' 8401 ``@'AA:16' 8402 ``@'AA:24' 8403 Absolute address `aa'. (The address size `:24' only makes sense 8404 on the H8/300H.) 8405 8406 `#XX' 8407 `#XX:8' 8408 `#XX:16' 8409 `#XX:32' 8410 Immediate data XX. You may specify the `:8', `:16', or `:32' for 8411 clarity, if you wish; but `as' neither requires this nor uses 8412 it--the data size required is taken from context. 8413 8414 ``@'`@'AA' 8415 ``@'`@'AA:8' 8416 Memory indirect. You may specify the `:8' for clarity, if you 8417 wish; but `as' neither requires this nor uses it. 8418 8419 8420 File: as.info, Node: H8/300 Floating Point, Next: H8/300 Directives, Prev: H8/300 Syntax, Up: H8/300-Dependent 8421 8422 9.10.3 Floating Point 8423 --------------------- 8424 8425 The H8/300 family has no hardware floating point, but the `.float' 8426 directive generates IEEE floating-point numbers for compatibility with 8427 other development tools. 8428 8429 8430 File: as.info, Node: H8/300 Directives, Next: H8/300 Opcodes, Prev: H8/300 Floating Point, Up: H8/300-Dependent 8431 8432 9.10.4 H8/300 Machine Directives 8433 -------------------------------- 8434 8435 `as' has the following machine-dependent directives for the H8/300: 8436 8437 `.h8300h' 8438 Recognize and emit additional instructions for the H8/300H 8439 variant, and also make `.int' emit 32-bit numbers rather than the 8440 usual (16-bit) for the H8/300 family. 8441 8442 `.h8300s' 8443 Recognize and emit additional instructions for the H8S variant, and 8444 also make `.int' emit 32-bit numbers rather than the usual (16-bit) 8445 for the H8/300 family. 8446 8447 `.h8300hn' 8448 Recognize and emit additional instructions for the H8/300H variant 8449 in normal mode, and also make `.int' emit 32-bit numbers rather 8450 than the usual (16-bit) for the H8/300 family. 8451 8452 `.h8300sn' 8453 Recognize and emit additional instructions for the H8S variant in 8454 normal mode, and also make `.int' emit 32-bit numbers rather than 8455 the usual (16-bit) for the H8/300 family. 8456 8457 On the H8/300 family (including the H8/300H) `.word' directives 8458 generate 16-bit numbers. 8459 8460 8461 File: as.info, Node: H8/300 Opcodes, Prev: H8/300 Directives, Up: H8/300-Dependent 8462 8463 9.10.5 Opcodes 8464 -------------- 8465 8466 For detailed information on the H8/300 machine instruction set, see 8467 `H8/300 Series Programming Manual'. For information specific to the 8468 H8/300H, see `H8/300H Series Programming Manual' (Renesas). 8469 8470 `as' implements all the standard H8/300 opcodes. No additional 8471 pseudo-instructions are needed on this family. 8472 8473 The following table summarizes the H8/300 opcodes, and their 8474 arguments. Entries marked `*' are opcodes used only on the H8/300H. 8475 8476 Legend: 8477 Rs source register 8478 Rd destination register 8479 abs absolute address 8480 imm immediate data 8481 disp:N N-bit displacement from a register 8482 pcrel:N N-bit displacement relative to program counter 8483 8484 add.b #imm,rd * andc #imm,ccr 8485 add.b rs,rd band #imm,rd 8486 add.w rs,rd band #imm,@rd 8487 * add.w #imm,rd band #imm,@abs:8 8488 * add.l rs,rd bra pcrel:8 8489 * add.l #imm,rd * bra pcrel:16 8490 adds #imm,rd bt pcrel:8 8491 addx #imm,rd * bt pcrel:16 8492 addx rs,rd brn pcrel:8 8493 and.b #imm,rd * brn pcrel:16 8494 and.b rs,rd bf pcrel:8 8495 * and.w rs,rd * bf pcrel:16 8496 * and.w #imm,rd bhi pcrel:8 8497 * and.l #imm,rd * bhi pcrel:16 8498 * and.l rs,rd bls pcrel:8 8499 8500 * bls pcrel:16 bld #imm,rd 8501 bcc pcrel:8 bld #imm,@rd 8502 * bcc pcrel:16 bld #imm,@abs:8 8503 bhs pcrel:8 bnot #imm,rd 8504 * bhs pcrel:16 bnot #imm,@rd 8505 bcs pcrel:8 bnot #imm,@abs:8 8506 * bcs pcrel:16 bnot rs,rd 8507 blo pcrel:8 bnot rs,@rd 8508 * blo pcrel:16 bnot rs,@abs:8 8509 bne pcrel:8 bor #imm,rd 8510 * bne pcrel:16 bor #imm,@rd 8511 beq pcrel:8 bor #imm,@abs:8 8512 * beq pcrel:16 bset #imm,rd 8513 bvc pcrel:8 bset #imm,@rd 8514 * bvc pcrel:16 bset #imm,@abs:8 8515 bvs pcrel:8 bset rs,rd 8516 * bvs pcrel:16 bset rs,@rd 8517 bpl pcrel:8 bset rs,@abs:8 8518 * bpl pcrel:16 bsr pcrel:8 8519 bmi pcrel:8 bsr pcrel:16 8520 * bmi pcrel:16 bst #imm,rd 8521 bge pcrel:8 bst #imm,@rd 8522 * bge pcrel:16 bst #imm,@abs:8 8523 blt pcrel:8 btst #imm,rd 8524 * blt pcrel:16 btst #imm,@rd 8525 bgt pcrel:8 btst #imm,@abs:8 8526 * bgt pcrel:16 btst rs,rd 8527 ble pcrel:8 btst rs,@rd 8528 * ble pcrel:16 btst rs,@abs:8 8529 bclr #imm,rd bxor #imm,rd 8530 bclr #imm,@rd bxor #imm,@rd 8531 bclr #imm,@abs:8 bxor #imm,@abs:8 8532 bclr rs,rd cmp.b #imm,rd 8533 bclr rs,@rd cmp.b rs,rd 8534 bclr rs,@abs:8 cmp.w rs,rd 8535 biand #imm,rd cmp.w rs,rd 8536 biand #imm,@rd * cmp.w #imm,rd 8537 biand #imm,@abs:8 * cmp.l #imm,rd 8538 bild #imm,rd * cmp.l rs,rd 8539 bild #imm,@rd daa rs 8540 bild #imm,@abs:8 das rs 8541 bior #imm,rd dec.b rs 8542 bior #imm,@rd * dec.w #imm,rd 8543 bior #imm,@abs:8 * dec.l #imm,rd 8544 bist #imm,rd divxu.b rs,rd 8545 bist #imm,@rd * divxu.w rs,rd 8546 bist #imm,@abs:8 * divxs.b rs,rd 8547 bixor #imm,rd * divxs.w rs,rd 8548 bixor #imm,@rd eepmov 8549 bixor #imm,@abs:8 * eepmovw 8550 8551 * exts.w rd mov.w rs,@abs:16 8552 * exts.l rd * mov.l #imm,rd 8553 * extu.w rd * mov.l rs,rd 8554 * extu.l rd * mov.l @rs,rd 8555 inc rs * mov.l @(disp:16,rs),rd 8556 * inc.w #imm,rd * mov.l @(disp:24,rs),rd 8557 * inc.l #imm,rd * mov.l @rs+,rd 8558 jmp @rs * mov.l @abs:16,rd 8559 jmp abs * mov.l @abs:24,rd 8560 jmp @@abs:8 * mov.l rs,@rd 8561 jsr @rs * mov.l rs,@(disp:16,rd) 8562 jsr abs * mov.l rs,@(disp:24,rd) 8563 jsr @@abs:8 * mov.l rs,@-rd 8564 ldc #imm,ccr * mov.l rs,@abs:16 8565 ldc rs,ccr * mov.l rs,@abs:24 8566 * ldc @abs:16,ccr movfpe @abs:16,rd 8567 * ldc @abs:24,ccr movtpe rs,@abs:16 8568 * ldc @(disp:16,rs),ccr mulxu.b rs,rd 8569 * ldc @(disp:24,rs),ccr * mulxu.w rs,rd 8570 * ldc @rs+,ccr * mulxs.b rs,rd 8571 * ldc @rs,ccr * mulxs.w rs,rd 8572 * mov.b @(disp:24,rs),rd neg.b rs 8573 * mov.b rs,@(disp:24,rd) * neg.w rs 8574 mov.b @abs:16,rd * neg.l rs 8575 mov.b rs,rd nop 8576 mov.b @abs:8,rd not.b rs 8577 mov.b rs,@abs:8 * not.w rs 8578 mov.b rs,rd * not.l rs 8579 mov.b #imm,rd or.b #imm,rd 8580 mov.b @rs,rd or.b rs,rd 8581 mov.b @(disp:16,rs),rd * or.w #imm,rd 8582 mov.b @rs+,rd * or.w rs,rd 8583 mov.b @abs:8,rd * or.l #imm,rd 8584 mov.b rs,@rd * or.l rs,rd 8585 mov.b rs,@(disp:16,rd) orc #imm,ccr 8586 mov.b rs,@-rd pop.w rs 8587 mov.b rs,@abs:8 * pop.l rs 8588 mov.w rs,@rd push.w rs 8589 * mov.w @(disp:24,rs),rd * push.l rs 8590 * mov.w rs,@(disp:24,rd) rotl.b rs 8591 * mov.w @abs:24,rd * rotl.w rs 8592 * mov.w rs,@abs:24 * rotl.l rs 8593 mov.w rs,rd rotr.b rs 8594 mov.w #imm,rd * rotr.w rs 8595 mov.w @rs,rd * rotr.l rs 8596 mov.w @(disp:16,rs),rd rotxl.b rs 8597 mov.w @rs+,rd * rotxl.w rs 8598 mov.w @abs:16,rd * rotxl.l rs 8599 mov.w rs,@(disp:16,rd) rotxr.b rs 8600 mov.w rs,@-rd * rotxr.w rs 8601 8602 * rotxr.l rs * stc ccr,@(disp:24,rd) 8603 bpt * stc ccr,@-rd 8604 rte * stc ccr,@abs:16 8605 rts * stc ccr,@abs:24 8606 shal.b rs sub.b rs,rd 8607 * shal.w rs sub.w rs,rd 8608 * shal.l rs * sub.w #imm,rd 8609 shar.b rs * sub.l rs,rd 8610 * shar.w rs * sub.l #imm,rd 8611 * shar.l rs subs #imm,rd 8612 shll.b rs subx #imm,rd 8613 * shll.w rs subx rs,rd 8614 * shll.l rs * trapa #imm 8615 shlr.b rs xor #imm,rd 8616 * shlr.w rs xor rs,rd 8617 * shlr.l rs * xor.w #imm,rd 8618 sleep * xor.w rs,rd 8619 stc ccr,rd * xor.l #imm,rd 8620 * stc ccr,@rs * xor.l rs,rd 8621 * stc ccr,@(disp:16,rd) xorc #imm,ccr 8622 8623 Four H8/300 instructions (`add', `cmp', `mov', `sub') are defined 8624 with variants using the suffixes `.b', `.w', and `.l' to specify the 8625 size of a memory operand. `as' supports these suffixes, but does not 8626 require them; since one of the operands is always a register, `as' can 8627 deduce the correct size. 8628 8629 For example, since `r0' refers to a 16-bit register, 8630 mov r0,@foo 8631 is equivalent to 8632 mov.w r0,@foo 8633 8634 If you use the size suffixes, `as' issues a warning when the suffix 8635 and the register size do not match. 8636 8637 8638 File: as.info, Node: HPPA-Dependent, Next: ESA/390-Dependent, Prev: H8/300-Dependent, Up: Machine Dependencies 8639 8640 9.11 HPPA Dependent Features 8641 ============================ 8642 8643 * Menu: 8644 8645 * HPPA Notes:: Notes 8646 * HPPA Options:: Options 8647 * HPPA Syntax:: Syntax 8648 * HPPA Floating Point:: Floating Point 8649 * HPPA Directives:: HPPA Machine Directives 8650 * HPPA Opcodes:: Opcodes 8651 8652 8653 File: as.info, Node: HPPA Notes, Next: HPPA Options, Up: HPPA-Dependent 8654 8655 9.11.1 Notes 8656 ------------ 8657 8658 As a back end for GNU CC `as' has been throughly tested and should work 8659 extremely well. We have tested it only minimally on hand written 8660 assembly code and no one has tested it much on the assembly output from 8661 the HP compilers. 8662 8663 The format of the debugging sections has changed since the original 8664 `as' port (version 1.3X) was released; therefore, you must rebuild all 8665 HPPA objects and libraries with the new assembler so that you can debug 8666 the final executable. 8667 8668 The HPPA `as' port generates a small subset of the relocations 8669 available in the SOM and ELF object file formats. Additional relocation 8670 support will be added as it becomes necessary. 8671 8672 8673 File: as.info, Node: HPPA Options, Next: HPPA Syntax, Prev: HPPA Notes, Up: HPPA-Dependent 8674 8675 9.11.2 Options 8676 -------------- 8677 8678 `as' has no machine-dependent command-line options for the HPPA. 8679 8680 8681 File: as.info, Node: HPPA Syntax, Next: HPPA Floating Point, Prev: HPPA Options, Up: HPPA-Dependent 8682 8683 9.11.3 Syntax 8684 ------------- 8685 8686 The assembler syntax closely follows the HPPA instruction set reference 8687 manual; assembler directives and general syntax closely follow the HPPA 8688 assembly language reference manual, with a few noteworthy differences. 8689 8690 First, a colon may immediately follow a label definition. This is 8691 simply for compatibility with how most assembly language programmers 8692 write code. 8693 8694 Some obscure expression parsing problems may affect hand written 8695 code which uses the `spop' instructions, or code which makes significant 8696 use of the `!' line separator. 8697 8698 `as' is much less forgiving about missing arguments and other 8699 similar oversights than the HP assembler. `as' notifies you of missing 8700 arguments as syntax errors; this is regarded as a feature, not a bug. 8701 8702 Finally, `as' allows you to use an external symbol without 8703 explicitly importing the symbol. _Warning:_ in the future this will be 8704 an error for HPPA targets. 8705 8706 Special characters for HPPA targets include: 8707 8708 `;' is the line comment character. 8709 8710 `!' can be used instead of a newline to separate statements. 8711 8712 Since `$' has no special meaning, you may use it in symbol names. 8713 8714 8715 File: as.info, Node: HPPA Floating Point, Next: HPPA Directives, Prev: HPPA Syntax, Up: HPPA-Dependent 8716 8717 9.11.4 Floating Point 8718 --------------------- 8719 8720 The HPPA family uses IEEE floating-point numbers. 8721 8722 8723 File: as.info, Node: HPPA Directives, Next: HPPA Opcodes, Prev: HPPA Floating Point, Up: HPPA-Dependent 8724 8725 9.11.5 HPPA Assembler Directives 8726 -------------------------------- 8727 8728 `as' for the HPPA supports many additional directives for compatibility 8729 with the native assembler. This section describes them only briefly. 8730 For detailed information on HPPA-specific assembler directives, see 8731 `HP9000 Series 800 Assembly Language Reference Manual' (HP 92432-90001). 8732 8733 `as' does _not_ support the following assembler directives described 8734 in the HP manual: 8735 8736 .endm .liston 8737 .enter .locct 8738 .leave .macro 8739 .listoff 8740 8741 Beyond those implemented for compatibility, `as' supports one 8742 additional assembler directive for the HPPA: `.param'. It conveys 8743 register argument locations for static functions. Its syntax closely 8744 follows the `.export' directive. 8745 8746 These are the additional directives in `as' for the HPPA: 8747 8748 `.block N' 8749 `.blockz N' 8750 Reserve N bytes of storage, and initialize them to zero. 8751 8752 `.call' 8753 Mark the beginning of a procedure call. Only the special case 8754 with _no arguments_ is allowed. 8755 8756 `.callinfo [ PARAM=VALUE, ... ] [ FLAG, ... ]' 8757 Specify a number of parameters and flags that define the 8758 environment for a procedure. 8759 8760 PARAM may be any of `frame' (frame size), `entry_gr' (end of 8761 general register range), `entry_fr' (end of float register range), 8762 `entry_sr' (end of space register range). 8763 8764 The values for FLAG are `calls' or `caller' (proc has 8765 subroutines), `no_calls' (proc does not call subroutines), 8766 `save_rp' (preserve return pointer), `save_sp' (proc preserves 8767 stack pointer), `no_unwind' (do not unwind this proc), `hpux_int' 8768 (proc is interrupt routine). 8769 8770 `.code' 8771 Assemble into the standard section called `$TEXT$', subsection 8772 `$CODE$'. 8773 8774 `.copyright "STRING"' 8775 In the SOM object format, insert STRING into the object code, 8776 marked as a copyright string. 8777 8778 `.copyright "STRING"' 8779 In the ELF object format, insert STRING into the object code, 8780 marked as a version string. 8781 8782 `.enter' 8783 Not yet supported; the assembler rejects programs containing this 8784 directive. 8785 8786 `.entry' 8787 Mark the beginning of a procedure. 8788 8789 `.exit' 8790 Mark the end of a procedure. 8791 8792 `.export NAME [ ,TYP ] [ ,PARAM=R ]' 8793 Make a procedure NAME available to callers. TYP, if present, must 8794 be one of `absolute', `code' (ELF only, not SOM), `data', `entry', 8795 `data', `entry', `millicode', `plabel', `pri_prog', or `sec_prog'. 8796 8797 PARAM, if present, provides either relocation information for the 8798 procedure arguments and result, or a privilege level. PARAM may be 8799 `argwN' (where N ranges from `0' to `3', and indicates one of four 8800 one-word arguments); `rtnval' (the procedure's result); or 8801 `priv_lev' (privilege level). For arguments or the result, R 8802 specifies how to relocate, and must be one of `no' (not 8803 relocatable), `gr' (argument is in general register), `fr' (in 8804 floating point register), or `fu' (upper half of float register). 8805 For `priv_lev', R is an integer. 8806 8807 `.half N' 8808 Define a two-byte integer constant N; synonym for the portable 8809 `as' directive `.short'. 8810 8811 `.import NAME [ ,TYP ]' 8812 Converse of `.export'; make a procedure available to call. The 8813 arguments use the same conventions as the first two arguments for 8814 `.export'. 8815 8816 `.label NAME' 8817 Define NAME as a label for the current assembly location. 8818 8819 `.leave' 8820 Not yet supported; the assembler rejects programs containing this 8821 directive. 8822 8823 `.origin LC' 8824 Advance location counter to LC. Synonym for the `as' portable 8825 directive `.org'. 8826 8827 `.param NAME [ ,TYP ] [ ,PARAM=R ]' 8828 Similar to `.export', but used for static procedures. 8829 8830 `.proc' 8831 Use preceding the first statement of a procedure. 8832 8833 `.procend' 8834 Use following the last statement of a procedure. 8835 8836 `LABEL .reg EXPR' 8837 Synonym for `.equ'; define LABEL with the absolute expression EXPR 8838 as its value. 8839 8840 `.space SECNAME [ ,PARAMS ]' 8841 Switch to section SECNAME, creating a new section by that name if 8842 necessary. You may only use PARAMS when creating a new section, 8843 not when switching to an existing one. SECNAME may identify a 8844 section by number rather than by name. 8845 8846 If specified, the list PARAMS declares attributes of the section, 8847 identified by keywords. The keywords recognized are `spnum=EXP' 8848 (identify this section by the number EXP, an absolute expression), 8849 `sort=EXP' (order sections according to this sort key when linking; 8850 EXP is an absolute expression), `unloadable' (section contains no 8851 loadable data), `notdefined' (this section defined elsewhere), and 8852 `private' (data in this section not available to other programs). 8853 8854 `.spnum SECNAM' 8855 Allocate four bytes of storage, and initialize them with the 8856 section number of the section named SECNAM. (You can define the 8857 section number with the HPPA `.space' directive.) 8858 8859 `.string "STR"' 8860 Copy the characters in the string STR to the object file. *Note 8861 Strings: Strings, for information on escape sequences you can use 8862 in `as' strings. 8863 8864 _Warning!_ The HPPA version of `.string' differs from the usual 8865 `as' definition: it does _not_ write a zero byte after copying STR. 8866 8867 `.stringz "STR"' 8868 Like `.string', but appends a zero byte after copying STR to object 8869 file. 8870 8871 `.subspa NAME [ ,PARAMS ]' 8872 `.nsubspa NAME [ ,PARAMS ]' 8873 Similar to `.space', but selects a subsection NAME within the 8874 current section. You may only specify PARAMS when you create a 8875 subsection (in the first instance of `.subspa' for this NAME). 8876 8877 If specified, the list PARAMS declares attributes of the 8878 subsection, identified by keywords. The keywords recognized are 8879 `quad=EXPR' ("quadrant" for this subsection), `align=EXPR' 8880 (alignment for beginning of this subsection; a power of two), 8881 `access=EXPR' (value for "access rights" field), `sort=EXPR' 8882 (sorting order for this subspace in link), `code_only' (subsection 8883 contains only code), `unloadable' (subsection cannot be loaded 8884 into memory), `comdat' (subsection is comdat), `common' 8885 (subsection is common block), `dup_comm' (subsection may have 8886 duplicate names), or `zero' (subsection is all zeros, do not write 8887 in object file). 8888 8889 `.nsubspa' always creates a new subspace with the given name, even 8890 if one with the same name already exists. 8891 8892 `comdat', `common' and `dup_comm' can be used to implement various 8893 flavors of one-only support when using the SOM linker. The SOM 8894 linker only supports specific combinations of these flags. The 8895 details are not documented. A brief description is provided here. 8896 8897 `comdat' provides a form of linkonce support. It is useful for 8898 both code and data subspaces. A `comdat' subspace has a key symbol 8899 marked by the `is_comdat' flag or `ST_COMDAT'. Only the first 8900 subspace for any given key is selected. The key symbol becomes 8901 universal in shared links. This is similar to the behavior of 8902 `secondary_def' symbols. 8903 8904 `common' provides Fortran named common support. It is only useful 8905 for data subspaces. Symbols with the flag `is_common' retain this 8906 flag in shared links. Referencing a `is_common' symbol in a shared 8907 library from outside the library doesn't work. Thus, `is_common' 8908 symbols must be output whenever they are needed. 8909 8910 `common' and `dup_comm' together provide Cobol common support. 8911 The subspaces in this case must all be the same length. 8912 Otherwise, this support is similar to the Fortran common support. 8913 8914 `dup_comm' by itself provides a type of one-only support for code. 8915 Only the first `dup_comm' subspace is selected. There is a rather 8916 complex algorithm to compare subspaces. Code symbols marked with 8917 the `dup_common' flag are hidden. This support was intended for 8918 "C++ duplicate inlines". 8919 8920 A simplified technique is used to mark the flags of symbols based 8921 on the flags of their subspace. A symbol with the scope 8922 SS_UNIVERSAL and type ST_ENTRY, ST_CODE or ST_DATA is marked with 8923 the corresponding settings of `comdat', `common' and `dup_comm' 8924 from the subspace, respectively. This avoids having to introduce 8925 additional directives to mark these symbols. The HP assembler 8926 sets `is_common' from `common'. However, it doesn't set the 8927 `dup_common' from `dup_comm'. It doesn't have `comdat' support. 8928 8929 `.version "STR"' 8930 Write STR as version identifier in object code. 8931 8932 8933 File: as.info, Node: HPPA Opcodes, Prev: HPPA Directives, Up: HPPA-Dependent 8934 8935 9.11.6 Opcodes 8936 -------------- 8937 8938 For detailed information on the HPPA machine instruction set, see 8939 `PA-RISC Architecture and Instruction Set Reference Manual' (HP 8940 09740-90039). 8941 8942 8943 File: as.info, Node: ESA/390-Dependent, Next: i386-Dependent, Prev: HPPA-Dependent, Up: Machine Dependencies 8944 8945 9.12 ESA/390 Dependent Features 8946 =============================== 8947 8948 * Menu: 8949 8950 * ESA/390 Notes:: Notes 8951 * ESA/390 Options:: Options 8952 * ESA/390 Syntax:: Syntax 8953 * ESA/390 Floating Point:: Floating Point 8954 * ESA/390 Directives:: ESA/390 Machine Directives 8955 * ESA/390 Opcodes:: Opcodes 8956 8957 8958 File: as.info, Node: ESA/390 Notes, Next: ESA/390 Options, Up: ESA/390-Dependent 8959 8960 9.12.1 Notes 8961 ------------ 8962 8963 The ESA/390 `as' port is currently intended to be a back-end for the 8964 GNU CC compiler. It is not HLASM compatible, although it does support 8965 a subset of some of the HLASM directives. The only supported binary 8966 file format is ELF; none of the usual MVS/VM/OE/USS object file 8967 formats, such as ESD or XSD, are supported. 8968 8969 When used with the GNU CC compiler, the ESA/390 `as' will produce 8970 correct, fully relocated, functional binaries, and has been used to 8971 compile and execute large projects. However, many aspects should still 8972 be considered experimental; these include shared library support, 8973 dynamically loadable objects, and any relocation other than the 31-bit 8974 relocation. 8975 8976 8977 File: as.info, Node: ESA/390 Options, Next: ESA/390 Syntax, Prev: ESA/390 Notes, Up: ESA/390-Dependent 8978 8979 9.12.2 Options 8980 -------------- 8981 8982 `as' has no machine-dependent command-line options for the ESA/390. 8983 8984 8985 File: as.info, Node: ESA/390 Syntax, Next: ESA/390 Floating Point, Prev: ESA/390 Options, Up: ESA/390-Dependent 8986 8987 9.12.3 Syntax 8988 ------------- 8989 8990 The opcode/operand syntax follows the ESA/390 Principles of Operation 8991 manual; assembler directives and general syntax are loosely based on the 8992 prevailing AT&T/SVR4/ELF/Solaris style notation. HLASM-style directives 8993 are _not_ supported for the most part, with the exception of those 8994 described herein. 8995 8996 A leading dot in front of directives is optional, and the case of 8997 directives is ignored; thus for example, .using and USING have the same 8998 effect. 8999 9000 A colon may immediately follow a label definition. This is simply 9001 for compatibility with how most assembly language programmers write 9002 code. 9003 9004 `#' is the line comment character. 9005 9006 `;' can be used instead of a newline to separate statements. 9007 9008 Since `$' has no special meaning, you may use it in symbol names. 9009 9010 Registers can be given the symbolic names r0..r15, fp0, fp2, fp4, 9011 fp6. By using thesse symbolic names, `as' can detect simple syntax 9012 errors. The name rarg or r.arg is a synonym for r11, rtca or r.tca for 9013 r12, sp, r.sp, dsa r.dsa for r13, lr or r.lr for r14, rbase or r.base 9014 for r3 and rpgt or r.pgt for r4. 9015 9016 `*' is the current location counter. Unlike `.' it is always 9017 relative to the last USING directive. Note that this means that 9018 expressions cannot use multiplication, as any occurrence of `*' will be 9019 interpreted as a location counter. 9020 9021 All labels are relative to the last USING. Thus, branches to a label 9022 always imply the use of base+displacement. 9023 9024 Many of the usual forms of address constants / address literals are 9025 supported. Thus, 9026 .using *,r3 9027 L r15,=A(some_routine) 9028 LM r6,r7,=V(some_longlong_extern) 9029 A r1,=F'12' 9030 AH r0,=H'42' 9031 ME r6,=E'3.1416' 9032 MD r6,=D'3.14159265358979' 9033 O r6,=XL4'cacad0d0' 9034 .ltorg 9035 should all behave as expected: that is, an entry in the literal pool 9036 will be created (or reused if it already exists), and the instruction 9037 operands will be the displacement into the literal pool using the 9038 current base register (as last declared with the `.using' directive). 9039 9040 9041 File: as.info, Node: ESA/390 Floating Point, Next: ESA/390 Directives, Prev: ESA/390 Syntax, Up: ESA/390-Dependent 9042 9043 9.12.4 Floating Point 9044 --------------------- 9045 9046 The assembler generates only IEEE floating-point numbers. The older 9047 floating point formats are not supported. 9048 9049 9050 File: as.info, Node: ESA/390 Directives, Next: ESA/390 Opcodes, Prev: ESA/390 Floating Point, Up: ESA/390-Dependent 9051 9052 9.12.5 ESA/390 Assembler Directives 9053 ----------------------------------- 9054 9055 `as' for the ESA/390 supports all of the standard ELF/SVR4 assembler 9056 directives that are documented in the main part of this documentation. 9057 Several additional directives are supported in order to implement the 9058 ESA/390 addressing model. The most important of these are `.using' and 9059 `.ltorg' 9060 9061 These are the additional directives in `as' for the ESA/390: 9062 9063 `.dc' 9064 A small subset of the usual DC directive is supported. 9065 9066 `.drop REGNO' 9067 Stop using REGNO as the base register. The REGNO must have been 9068 previously declared with a `.using' directive in the same section 9069 as the current section. 9070 9071 `.ebcdic STRING' 9072 Emit the EBCDIC equivalent of the indicated string. The emitted 9073 string will be null terminated. Note that the directives 9074 `.string' etc. emit ascii strings by default. 9075 9076 `EQU' 9077 The standard HLASM-style EQU directive is not supported; however, 9078 the standard `as' directive .equ can be used to the same effect. 9079 9080 `.ltorg' 9081 Dump the literal pool accumulated so far; begin a new literal pool. 9082 The literal pool will be written in the current section; in order 9083 to generate correct assembly, a `.using' must have been previously 9084 specified in the same section. 9085 9086 `.using EXPR,REGNO' 9087 Use REGNO as the base register for all subsequent RX, RS, and SS 9088 form instructions. The EXPR will be evaluated to obtain the base 9089 address; usually, EXPR will merely be `*'. 9090 9091 This assembler allows two `.using' directives to be simultaneously 9092 outstanding, one in the `.text' section, and one in another section 9093 (typically, the `.data' section). This feature allows dynamically 9094 loaded objects to be implemented in a relatively straightforward 9095 way. A `.using' directive must always be specified in the `.text' 9096 section; this will specify the base register that will be used for 9097 branches in the `.text' section. A second `.using' may be 9098 specified in another section; this will specify the base register 9099 that is used for non-label address literals. When a second 9100 `.using' is specified, then the subsequent `.ltorg' must be put in 9101 the same section; otherwise an error will result. 9102 9103 Thus, for example, the following code uses `r3' to address branch 9104 targets and `r4' to address the literal pool, which has been 9105 written to the `.data' section. The is, the constants 9106 `=A(some_routine)', `=H'42'' and `=E'3.1416'' will all appear in 9107 the `.data' section. 9108 9109 .data 9110 .using LITPOOL,r4 9111 .text 9112 BASR r3,0 9113 .using *,r3 9114 B START 9115 .long LITPOOL 9116 START: 9117 L r4,4(,r3) 9118 L r15,=A(some_routine) 9119 LTR r15,r15 9120 BNE LABEL 9121 AH r0,=H'42' 9122 LABEL: 9123 ME r6,=E'3.1416' 9124 .data 9125 LITPOOL: 9126 .ltorg 9127 9128 Note that this dual-`.using' directive semantics extends and is 9129 not compatible with HLASM semantics. Note that this assembler 9130 directive does not support the full range of HLASM semantics. 9131 9132 9133 9134 File: as.info, Node: ESA/390 Opcodes, Prev: ESA/390 Directives, Up: ESA/390-Dependent 9135 9136 9.12.6 Opcodes 9137 -------------- 9138 9139 For detailed information on the ESA/390 machine instruction set, see 9140 `ESA/390 Principles of Operation' (IBM Publication Number DZ9AR004). 9141 9142 9143 File: as.info, Node: i386-Dependent, Next: i860-Dependent, Prev: ESA/390-Dependent, Up: Machine Dependencies 9144 9145 9.13 80386 Dependent Features 9146 ============================= 9147 9148 The i386 version `as' supports both the original Intel 386 9149 architecture in both 16 and 32-bit mode as well as AMD x86-64 9150 architecture extending the Intel architecture to 64-bits. 9151 9152 * Menu: 9153 9154 * i386-Options:: Options 9155 * i386-Directives:: X86 specific directives 9156 * i386-Syntax:: AT&T Syntax versus Intel Syntax 9157 * i386-Mnemonics:: Instruction Naming 9158 * i386-Regs:: Register Naming 9159 * i386-Prefixes:: Instruction Prefixes 9160 * i386-Memory:: Memory References 9161 * i386-Jumps:: Handling of Jump Instructions 9162 * i386-Float:: Floating Point 9163 * i386-SIMD:: Intel's MMX and AMD's 3DNow! SIMD Operations 9164 * i386-16bit:: Writing 16-bit Code 9165 * i386-Arch:: Specifying an x86 CPU architecture 9166 * i386-Bugs:: AT&T Syntax bugs 9167 * i386-Notes:: Notes 9168 9169 9170 File: as.info, Node: i386-Options, Next: i386-Directives, Up: i386-Dependent 9171 9172 9.13.1 Options 9173 -------------- 9174 9175 The i386 version of `as' has a few machine dependent options: 9176 9177 `--32 | --64' 9178 Select the word size, either 32 bits or 64 bits. Selecting 32-bit 9179 implies Intel i386 architecture, while 64-bit implies AMD x86-64 9180 architecture. 9181 9182 These options are only available with the ELF object file format, 9183 and require that the necessary BFD support has been included (on a 9184 32-bit platform you have to add -enable-64-bit-bfd to configure 9185 enable 64-bit usage and use x86-64 as target platform). 9186 9187 `-n' 9188 By default, x86 GAS replaces multiple nop instructions used for 9189 alignment within code sections with multi-byte nop instructions 9190 such as leal 0(%esi,1),%esi. This switch disables the 9191 optimization. 9192 9193 `--divide' 9194 On SVR4-derived platforms, the character `/' is treated as a 9195 comment character, which means that it cannot be used in 9196 expressions. The `--divide' option turns `/' into a normal 9197 character. This does not disable `/' at the beginning of a line 9198 starting a comment, or affect using `#' for starting a comment. 9199 9200 `-march=CPU[+EXTENSION...]' 9201 This option specifies the target processor. The assembler will 9202 issue an error message if an attempt is made to assemble an 9203 instruction which will not execute on the target processor. The 9204 following processor names are recognized: `i8086', `i186', `i286', 9205 `i386', `i486', `i586', `i686', `pentium', `pentiumpro', 9206 `pentiumii', `pentiumiii', `pentium4', `prescott', `nocona', 9207 `core', `core2', `k6', `k6_2', `athlon', `opteron', `k8', 9208 `amdfam10', `generic32' and `generic64'. 9209 9210 In addition to the basic instruction set, the assembler can be 9211 told to accept various extension mnemonics. For example, 9212 `-march=i686+sse4+vmx' extends I686 with SSE4 and VMX. The 9213 following extensions are currently supported: `mmx', `sse', `sse2', 9214 `sse3', `ssse3', `sse4.1', `sse4.2', `sse4', `avx', `vmx', `smx', 9215 `xsave', `aes', `pclmul', `fma', `movbe', `ept', `3dnow', `3dnowa', 9216 `sse4a', `sse5', `svme', `abm' and `padlock'. 9217 9218 When the `.arch' directive is used with `-march', the `.arch' 9219 directive will take precedent. 9220 9221 `-mtune=CPU' 9222 This option specifies a processor to optimize for. When used in 9223 conjunction with the `-march' option, only instructions of the 9224 processor specified by the `-march' option will be generated. 9225 9226 Valid CPU values are identical to the processor list of 9227 `-march=CPU'. 9228 9229 `-msse2avx' 9230 This option specifies that the assembler should encode SSE 9231 instructions with VEX prefix. 9232 9233 `-msse-check=NONE' 9234 9235 `-msse-check=WARNING' 9236 9237 `-msse-check=ERROR' 9238 These options control if the assembler should check SSE 9239 intructions. `-msse-check=NONE' will make the assembler not to 9240 check SSE instructions, which is the default. 9241 `-msse-check=WARNING' will make the assembler issue a warning for 9242 any SSE intruction. `-msse-check=ERROR' will make the assembler 9243 issue an error for any SSE intruction. 9244 9245 `-mmnemonic=ATT' 9246 9247 `-mmnemonic=INTEL' 9248 This option specifies instruction mnemonic for matching 9249 instructions. The `.att_mnemonic' and `.intel_mnemonic' 9250 directives will take precedent. 9251 9252 `-msyntax=ATT' 9253 9254 `-msyntax=INTEL' 9255 This option specifies instruction syntax when processing 9256 instructions. The `.att_syntax' and `.intel_syntax' directives 9257 will take precedent. 9258 9259 `-mnaked-reg' 9260 This opetion specifies that registers don't require a `%' prefix. 9261 The `.att_syntax' and `.intel_syntax' directives will take 9262 precedent. 9263 9264 9265 9266 File: as.info, Node: i386-Directives, Next: i386-Syntax, Prev: i386-Options, Up: i386-Dependent 9267 9268 9.13.2 x86 specific Directives 9269 ------------------------------ 9270 9271 `.lcomm SYMBOL , LENGTH[, ALIGNMENT]' 9272 Reserve LENGTH (an absolute expression) bytes for a local common 9273 denoted by SYMBOL. The section and value of SYMBOL are those of 9274 the new local common. The addresses are allocated in the bss 9275 section, so that at run-time the bytes start off zeroed. Since 9276 SYMBOL is not declared global, it is normally not visible to `ld'. 9277 The optional third parameter, ALIGNMENT, specifies the desired 9278 alignment of the symbol in the bss section. 9279 9280 This directive is only available for COFF based x86 targets. 9281 9282 9283 9284 File: as.info, Node: i386-Syntax, Next: i386-Mnemonics, Prev: i386-Directives, Up: i386-Dependent 9285 9286 9.13.3 AT&T Syntax versus Intel Syntax 9287 -------------------------------------- 9288 9289 `as' now supports assembly using Intel assembler syntax. 9290 `.intel_syntax' selects Intel mode, and `.att_syntax' switches back to 9291 the usual AT&T mode for compatibility with the output of `gcc'. Either 9292 of these directives may have an optional argument, `prefix', or 9293 `noprefix' specifying whether registers require a `%' prefix. AT&T 9294 System V/386 assembler syntax is quite different from Intel syntax. We 9295 mention these differences because almost all 80386 documents use Intel 9296 syntax. Notable differences between the two syntaxes are: 9297 9298 * AT&T immediate operands are preceded by `$'; Intel immediate 9299 operands are undelimited (Intel `push 4' is AT&T `pushl $4'). 9300 AT&T register operands are preceded by `%'; Intel register operands 9301 are undelimited. AT&T absolute (as opposed to PC relative) 9302 jump/call operands are prefixed by `*'; they are undelimited in 9303 Intel syntax. 9304 9305 * AT&T and Intel syntax use the opposite order for source and 9306 destination operands. Intel `add eax, 4' is `addl $4, %eax'. The 9307 `source, dest' convention is maintained for compatibility with 9308 previous Unix assemblers. Note that `bound', `invlpga', and 9309 instructions with 2 immediate operands, such as the `enter' 9310 instruction, do _not_ have reversed order. *note i386-Bugs::. 9311 9312 * In AT&T syntax the size of memory operands is determined from the 9313 last character of the instruction mnemonic. Mnemonic suffixes of 9314 `b', `w', `l' and `q' specify byte (8-bit), word (16-bit), long 9315 (32-bit) and quadruple word (64-bit) memory references. Intel 9316 syntax accomplishes this by prefixing memory operands (_not_ the 9317 instruction mnemonics) with `byte ptr', `word ptr', `dword ptr' 9318 and `qword ptr'. Thus, Intel `mov al, byte ptr FOO' is `movb FOO, 9319 %al' in AT&T syntax. 9320 9321 * Immediate form long jumps and calls are `lcall/ljmp $SECTION, 9322 $OFFSET' in AT&T syntax; the Intel syntax is `call/jmp far 9323 SECTION:OFFSET'. Also, the far return instruction is `lret 9324 $STACK-ADJUST' in AT&T syntax; Intel syntax is `ret far 9325 STACK-ADJUST'. 9326 9327 * The AT&T assembler does not provide support for multiple section 9328 programs. Unix style systems expect all programs to be single 9329 sections. 9330 9331 9332 File: as.info, Node: i386-Mnemonics, Next: i386-Regs, Prev: i386-Syntax, Up: i386-Dependent 9333 9334 9.13.4 Instruction Naming 9335 ------------------------- 9336 9337 Instruction mnemonics are suffixed with one character modifiers which 9338 specify the size of operands. The letters `b', `w', `l' and `q' 9339 specify byte, word, long and quadruple word operands. If no suffix is 9340 specified by an instruction then `as' tries to fill in the missing 9341 suffix based on the destination register operand (the last one by 9342 convention). Thus, `mov %ax, %bx' is equivalent to `movw %ax, %bx'; 9343 also, `mov $1, %bx' is equivalent to `movw $1, bx'. Note that this is 9344 incompatible with the AT&T Unix assembler which assumes that a missing 9345 mnemonic suffix implies long operand size. (This incompatibility does 9346 not affect compiler output since compilers always explicitly specify 9347 the mnemonic suffix.) 9348 9349 Almost all instructions have the same names in AT&T and Intel format. 9350 There are a few exceptions. The sign extend and zero extend 9351 instructions need two sizes to specify them. They need a size to 9352 sign/zero extend _from_ and a size to zero extend _to_. This is 9353 accomplished by using two instruction mnemonic suffixes in AT&T syntax. 9354 Base names for sign extend and zero extend are `movs...' and `movz...' 9355 in AT&T syntax (`movsx' and `movzx' in Intel syntax). The instruction 9356 mnemonic suffixes are tacked on to this base name, the _from_ suffix 9357 before the _to_ suffix. Thus, `movsbl %al, %edx' is AT&T syntax for 9358 "move sign extend _from_ %al _to_ %edx." Possible suffixes, thus, are 9359 `bl' (from byte to long), `bw' (from byte to word), `wl' (from word to 9360 long), `bq' (from byte to quadruple word), `wq' (from word to quadruple 9361 word), and `lq' (from long to quadruple word). 9362 9363 The Intel-syntax conversion instructions 9364 9365 * `cbw' -- sign-extend byte in `%al' to word in `%ax', 9366 9367 * `cwde' -- sign-extend word in `%ax' to long in `%eax', 9368 9369 * `cwd' -- sign-extend word in `%ax' to long in `%dx:%ax', 9370 9371 * `cdq' -- sign-extend dword in `%eax' to quad in `%edx:%eax', 9372 9373 * `cdqe' -- sign-extend dword in `%eax' to quad in `%rax' (x86-64 9374 only), 9375 9376 * `cqo' -- sign-extend quad in `%rax' to octuple in `%rdx:%rax' 9377 (x86-64 only), 9378 9379 are called `cbtw', `cwtl', `cwtd', `cltd', `cltq', and `cqto' in AT&T 9380 naming. `as' accepts either naming for these instructions. 9381 9382 Far call/jump instructions are `lcall' and `ljmp' in AT&T syntax, 9383 but are `call far' and `jump far' in Intel convention. 9384 9385 9.13.5 AT&T Mnemonic versus Intel Mnemonic 9386 ------------------------------------------ 9387 9388 `as' supports assembly using Intel mnemonic. `.intel_mnemonic' selects 9389 Intel mnemonic with Intel syntax, and `.att_mnemonic' switches back to 9390 the usual AT&T mnemonic with AT&T syntax for compatibility with the 9391 output of `gcc'. Several x87 instructions, `fadd', `fdiv', `fdivp', 9392 `fdivr', `fdivrp', `fmul', `fsub', `fsubp', `fsubr' and `fsubrp', are 9393 implemented in AT&T System V/386 assembler with different mnemonics 9394 from those in Intel IA32 specification. `gcc' generates those 9395 instructions with AT&T mnemonic. 9396 9397 9398 File: as.info, Node: i386-Regs, Next: i386-Prefixes, Prev: i386-Mnemonics, Up: i386-Dependent 9399 9400 9.13.6 Register Naming 9401 ---------------------- 9402 9403 Register operands are always prefixed with `%'. The 80386 registers 9404 consist of 9405 9406 * the 8 32-bit registers `%eax' (the accumulator), `%ebx', `%ecx', 9407 `%edx', `%edi', `%esi', `%ebp' (the frame pointer), and `%esp' 9408 (the stack pointer). 9409 9410 * the 8 16-bit low-ends of these: `%ax', `%bx', `%cx', `%dx', `%di', 9411 `%si', `%bp', and `%sp'. 9412 9413 * the 8 8-bit registers: `%ah', `%al', `%bh', `%bl', `%ch', `%cl', 9414 `%dh', and `%dl' (These are the high-bytes and low-bytes of `%ax', 9415 `%bx', `%cx', and `%dx') 9416 9417 * the 6 section registers `%cs' (code section), `%ds' (data 9418 section), `%ss' (stack section), `%es', `%fs', and `%gs'. 9419 9420 * the 3 processor control registers `%cr0', `%cr2', and `%cr3'. 9421 9422 * the 6 debug registers `%db0', `%db1', `%db2', `%db3', `%db6', and 9423 `%db7'. 9424 9425 * the 2 test registers `%tr6' and `%tr7'. 9426 9427 * the 8 floating point register stack `%st' or equivalently 9428 `%st(0)', `%st(1)', `%st(2)', `%st(3)', `%st(4)', `%st(5)', 9429 `%st(6)', and `%st(7)'. These registers are overloaded by 8 MMX 9430 registers `%mm0', `%mm1', `%mm2', `%mm3', `%mm4', `%mm5', `%mm6' 9431 and `%mm7'. 9432 9433 * the 8 SSE registers registers `%xmm0', `%xmm1', `%xmm2', `%xmm3', 9434 `%xmm4', `%xmm5', `%xmm6' and `%xmm7'. 9435 9436 The AMD x86-64 architecture extends the register set by: 9437 9438 * enhancing the 8 32-bit registers to 64-bit: `%rax' (the 9439 accumulator), `%rbx', `%rcx', `%rdx', `%rdi', `%rsi', `%rbp' (the 9440 frame pointer), `%rsp' (the stack pointer) 9441 9442 * the 8 extended registers `%r8'-`%r15'. 9443 9444 * the 8 32-bit low ends of the extended registers: `%r8d'-`%r15d' 9445 9446 * the 8 16-bit low ends of the extended registers: `%r8w'-`%r15w' 9447 9448 * the 8 8-bit low ends of the extended registers: `%r8b'-`%r15b' 9449 9450 * the 4 8-bit registers: `%sil', `%dil', `%bpl', `%spl'. 9451 9452 * the 8 debug registers: `%db8'-`%db15'. 9453 9454 * the 8 SSE registers: `%xmm8'-`%xmm15'. 9455 9456 9457 File: as.info, Node: i386-Prefixes, Next: i386-Memory, Prev: i386-Regs, Up: i386-Dependent 9458 9459 9.13.7 Instruction Prefixes 9460 --------------------------- 9461 9462 Instruction prefixes are used to modify the following instruction. They 9463 are used to repeat string instructions, to provide section overrides, to 9464 perform bus lock operations, and to change operand and address sizes. 9465 (Most instructions that normally operate on 32-bit operands will use 9466 16-bit operands if the instruction has an "operand size" prefix.) 9467 Instruction prefixes are best written on the same line as the 9468 instruction they act upon. For example, the `scas' (scan string) 9469 instruction is repeated with: 9470 9471 repne scas %es:(%edi),%al 9472 9473 You may also place prefixes on the lines immediately preceding the 9474 instruction, but this circumvents checks that `as' does with prefixes, 9475 and will not work with all prefixes. 9476 9477 Here is a list of instruction prefixes: 9478 9479 * Section override prefixes `cs', `ds', `ss', `es', `fs', `gs'. 9480 These are automatically added by specifying using the 9481 SECTION:MEMORY-OPERAND form for memory references. 9482 9483 * Operand/Address size prefixes `data16' and `addr16' change 32-bit 9484 operands/addresses into 16-bit operands/addresses, while `data32' 9485 and `addr32' change 16-bit ones (in a `.code16' section) into 9486 32-bit operands/addresses. These prefixes _must_ appear on the 9487 same line of code as the instruction they modify. For example, in 9488 a 16-bit `.code16' section, you might write: 9489 9490 addr32 jmpl *(%ebx) 9491 9492 * The bus lock prefix `lock' inhibits interrupts during execution of 9493 the instruction it precedes. (This is only valid with certain 9494 instructions; see a 80386 manual for details). 9495 9496 * The wait for coprocessor prefix `wait' waits for the coprocessor to 9497 complete the current instruction. This should never be needed for 9498 the 80386/80387 combination. 9499 9500 * The `rep', `repe', and `repne' prefixes are added to string 9501 instructions to make them repeat `%ecx' times (`%cx' times if the 9502 current address size is 16-bits). 9503 9504 * The `rex' family of prefixes is used by x86-64 to encode 9505 extensions to i386 instruction set. The `rex' prefix has four 9506 bits -- an operand size overwrite (`64') used to change operand 9507 size from 32-bit to 64-bit and X, Y and Z extensions bits used to 9508 extend the register set. 9509 9510 You may write the `rex' prefixes directly. The `rex64xyz' 9511 instruction emits `rex' prefix with all the bits set. By omitting 9512 the `64', `x', `y' or `z' you may write other prefixes as well. 9513 Normally, there is no need to write the prefixes explicitly, since 9514 gas will automatically generate them based on the instruction 9515 operands. 9516 9517 9518 File: as.info, Node: i386-Memory, Next: i386-Jumps, Prev: i386-Prefixes, Up: i386-Dependent 9519 9520 9.13.8 Memory References 9521 ------------------------ 9522 9523 An Intel syntax indirect memory reference of the form 9524 9525 SECTION:[BASE + INDEX*SCALE + DISP] 9526 9527 is translated into the AT&T syntax 9528 9529 SECTION:DISP(BASE, INDEX, SCALE) 9530 9531 where BASE and INDEX are the optional 32-bit base and index registers, 9532 DISP is the optional displacement, and SCALE, taking the values 1, 2, 9533 4, and 8, multiplies INDEX to calculate the address of the operand. If 9534 no SCALE is specified, SCALE is taken to be 1. SECTION specifies the 9535 optional section register for the memory operand, and may override the 9536 default section register (see a 80386 manual for section register 9537 defaults). Note that section overrides in AT&T syntax _must_ be 9538 preceded by a `%'. If you specify a section override which coincides 9539 with the default section register, `as' does _not_ output any section 9540 register override prefixes to assemble the given instruction. Thus, 9541 section overrides can be specified to emphasize which section register 9542 is used for a given memory operand. 9543 9544 Here are some examples of Intel and AT&T style memory references: 9545 9546 AT&T: `-4(%ebp)', Intel: `[ebp - 4]' 9547 BASE is `%ebp'; DISP is `-4'. SECTION is missing, and the default 9548 section is used (`%ss' for addressing with `%ebp' as the base 9549 register). INDEX, SCALE are both missing. 9550 9551 AT&T: `foo(,%eax,4)', Intel: `[foo + eax*4]' 9552 INDEX is `%eax' (scaled by a SCALE 4); DISP is `foo'. All other 9553 fields are missing. The section register here defaults to `%ds'. 9554 9555 AT&T: `foo(,1)'; Intel `[foo]' 9556 This uses the value pointed to by `foo' as a memory operand. Note 9557 that BASE and INDEX are both missing, but there is only _one_ `,'. 9558 This is a syntactic exception. 9559 9560 AT&T: `%gs:foo'; Intel `gs:foo' 9561 This selects the contents of the variable `foo' with section 9562 register SECTION being `%gs'. 9563 9564 Absolute (as opposed to PC relative) call and jump operands must be 9565 prefixed with `*'. If no `*' is specified, `as' always chooses PC 9566 relative addressing for jump/call labels. 9567 9568 Any instruction that has a memory operand, but no register operand, 9569 _must_ specify its size (byte, word, long, or quadruple) with an 9570 instruction mnemonic suffix (`b', `w', `l' or `q', respectively). 9571 9572 The x86-64 architecture adds an RIP (instruction pointer relative) 9573 addressing. This addressing mode is specified by using `rip' as a base 9574 register. Only constant offsets are valid. For example: 9575 9576 AT&T: `1234(%rip)', Intel: `[rip + 1234]' 9577 Points to the address 1234 bytes past the end of the current 9578 instruction. 9579 9580 AT&T: `symbol(%rip)', Intel: `[rip + symbol]' 9581 Points to the `symbol' in RIP relative way, this is shorter than 9582 the default absolute addressing. 9583 9584 Other addressing modes remain unchanged in x86-64 architecture, 9585 except registers used are 64-bit instead of 32-bit. 9586 9587 9588 File: as.info, Node: i386-Jumps, Next: i386-Float, Prev: i386-Memory, Up: i386-Dependent 9589 9590 9.13.9 Handling of Jump Instructions 9591 ------------------------------------ 9592 9593 Jump instructions are always optimized to use the smallest possible 9594 displacements. This is accomplished by using byte (8-bit) displacement 9595 jumps whenever the target is sufficiently close. If a byte displacement 9596 is insufficient a long displacement is used. We do not support word 9597 (16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump 9598 instruction with the `data16' instruction prefix), since the 80386 9599 insists upon masking `%eip' to 16 bits after the word displacement is 9600 added. (See also *note i386-Arch::) 9601 9602 Note that the `jcxz', `jecxz', `loop', `loopz', `loope', `loopnz' 9603 and `loopne' instructions only come in byte displacements, so that if 9604 you use these instructions (`gcc' does not use them) you may get an 9605 error message (and incorrect code). The AT&T 80386 assembler tries to 9606 get around this problem by expanding `jcxz foo' to 9607 9608 jcxz cx_zero 9609 jmp cx_nonzero 9610 cx_zero: jmp foo 9611 cx_nonzero: 9612 9613 9614 File: as.info, Node: i386-Float, Next: i386-SIMD, Prev: i386-Jumps, Up: i386-Dependent 9615 9616 9.13.10 Floating Point 9617 ---------------------- 9618 9619 All 80387 floating point types except packed BCD are supported. (BCD 9620 support may be added without much difficulty). These data types are 9621 16-, 32-, and 64- bit integers, and single (32-bit), double (64-bit), 9622 and extended (80-bit) precision floating point. Each supported type 9623 has an instruction mnemonic suffix and a constructor associated with 9624 it. Instruction mnemonic suffixes specify the operand's data type. 9625 Constructors build these data types into memory. 9626 9627 * Floating point constructors are `.float' or `.single', `.double', 9628 and `.tfloat' for 32-, 64-, and 80-bit formats. These correspond 9629 to instruction mnemonic suffixes `s', `l', and `t'. `t' stands for 9630 80-bit (ten byte) real. The 80387 only supports this format via 9631 the `fldt' (load 80-bit real to stack top) and `fstpt' (store 9632 80-bit real and pop stack) instructions. 9633 9634 * Integer constructors are `.word', `.long' or `.int', and `.quad' 9635 for the 16-, 32-, and 64-bit integer formats. The corresponding 9636 instruction mnemonic suffixes are `s' (single), `l' (long), and 9637 `q' (quad). As with the 80-bit real format, the 64-bit `q' format 9638 is only present in the `fildq' (load quad integer to stack top) 9639 and `fistpq' (store quad integer and pop stack) instructions. 9640 9641 Register to register operations should not use instruction mnemonic 9642 suffixes. `fstl %st, %st(1)' will give a warning, and be assembled as 9643 if you wrote `fst %st, %st(1)', since all register to register 9644 operations use 80-bit floating point operands. (Contrast this with 9645 `fstl %st, mem', which converts `%st' from 80-bit to 64-bit floating 9646 point format, then stores the result in the 4 byte location `mem') 9647 9648 9649 File: as.info, Node: i386-SIMD, Next: i386-16bit, Prev: i386-Float, Up: i386-Dependent 9650 9651 9.13.11 Intel's MMX and AMD's 3DNow! SIMD Operations 9652 ---------------------------------------------------- 9653 9654 `as' supports Intel's MMX instruction set (SIMD instructions for 9655 integer data), available on Intel's Pentium MMX processors and Pentium 9656 II processors, AMD's K6 and K6-2 processors, Cyrix' M2 processor, and 9657 probably others. It also supports AMD's 3DNow! instruction set (SIMD 9658 instructions for 32-bit floating point data) available on AMD's K6-2 9659 processor and possibly others in the future. 9660 9661 Currently, `as' does not support Intel's floating point SIMD, Katmai 9662 (KNI). 9663 9664 The eight 64-bit MMX operands, also used by 3DNow!, are called 9665 `%mm0', `%mm1', ... `%mm7'. They contain eight 8-bit integers, four 9666 16-bit integers, two 32-bit integers, one 64-bit integer, or two 32-bit 9667 floating point values. The MMX registers cannot be used at the same 9668 time as the floating point stack. 9669 9670 See Intel and AMD documentation, keeping in mind that the operand 9671 order in instructions is reversed from the Intel syntax. 9672 9673 9674 File: as.info, Node: i386-16bit, Next: i386-Arch, Prev: i386-SIMD, Up: i386-Dependent 9675 9676 9.13.12 Writing 16-bit Code 9677 --------------------------- 9678 9679 While `as' normally writes only "pure" 32-bit i386 code or 64-bit 9680 x86-64 code depending on the default configuration, it also supports 9681 writing code to run in real mode or in 16-bit protected mode code 9682 segments. To do this, put a `.code16' or `.code16gcc' directive before 9683 the assembly language instructions to be run in 16-bit mode. You can 9684 switch `as' back to writing normal 32-bit code with the `.code32' 9685 directive. 9686 9687 `.code16gcc' provides experimental support for generating 16-bit 9688 code from gcc, and differs from `.code16' in that `call', `ret', 9689 `enter', `leave', `push', `pop', `pusha', `popa', `pushf', and `popf' 9690 instructions default to 32-bit size. This is so that the stack pointer 9691 is manipulated in the same way over function calls, allowing access to 9692 function parameters at the same stack offsets as in 32-bit mode. 9693 `.code16gcc' also automatically adds address size prefixes where 9694 necessary to use the 32-bit addressing modes that gcc generates. 9695 9696 The code which `as' generates in 16-bit mode will not necessarily 9697 run on a 16-bit pre-80386 processor. To write code that runs on such a 9698 processor, you must refrain from using _any_ 32-bit constructs which 9699 require `as' to output address or operand size prefixes. 9700 9701 Note that writing 16-bit code instructions by explicitly specifying a 9702 prefix or an instruction mnemonic suffix within a 32-bit code section 9703 generates different machine instructions than those generated for a 9704 16-bit code segment. In a 32-bit code section, the following code 9705 generates the machine opcode bytes `66 6a 04', which pushes the value 9706 `4' onto the stack, decrementing `%esp' by 2. 9707 9708 pushw $4 9709 9710 The same code in a 16-bit code section would generate the machine 9711 opcode bytes `6a 04' (i.e., without the operand size prefix), which is 9712 correct since the processor default operand size is assumed to be 16 9713 bits in a 16-bit code section. 9714 9715 9716 File: as.info, Node: i386-Bugs, Next: i386-Notes, Prev: i386-Arch, Up: i386-Dependent 9717 9718 9.13.13 AT&T Syntax bugs 9719 ------------------------ 9720 9721 The UnixWare assembler, and probably other AT&T derived ix86 Unix 9722 assemblers, generate floating point instructions with reversed source 9723 and destination registers in certain cases. Unfortunately, gcc and 9724 possibly many other programs use this reversed syntax, so we're stuck 9725 with it. 9726 9727 For example 9728 9729 fsub %st,%st(3) 9730 results in `%st(3)' being updated to `%st - %st(3)' rather than the 9731 expected `%st(3) - %st'. This happens with all the non-commutative 9732 arithmetic floating point operations with two register operands where 9733 the source register is `%st' and the destination register is `%st(i)'. 9734 9735 9736 File: as.info, Node: i386-Arch, Next: i386-Bugs, Prev: i386-16bit, Up: i386-Dependent 9737 9738 9.13.14 Specifying CPU Architecture 9739 ----------------------------------- 9740 9741 `as' may be told to assemble for a particular CPU (sub-)architecture 9742 with the `.arch CPU_TYPE' directive. This directive enables a warning 9743 when gas detects an instruction that is not supported on the CPU 9744 specified. The choices for CPU_TYPE are: 9745 9746 `i8086' `i186' `i286' `i386' 9747 `i486' `i586' `i686' `pentium' 9748 `pentiumpro' `pentiumii' `pentiumiii' `pentium4' 9749 `prescott' `nocona' `core' `core2' 9750 `k6' `k6_2' `athlon' `k8' 9751 `amdfam10' 9752 `generic32' `generic64' 9753 `.mmx' `.sse' `.sse2' `.sse3' 9754 `.ssse3' `.sse4.1' `.sse4.2' `.sse4' 9755 `.avx' `.vmx' `.smx' `.xsave' 9756 `.aes' `.pclmul' `.fma' `.movbe' 9757 `.ept' 9758 `.3dnow' `.3dnowa' `.sse4a' `.sse5' 9759 `.svme' `.abm' 9760 `.padlock' 9761 9762 Apart from the warning, there are only two other effects on `as' 9763 operation; Firstly, if you specify a CPU other than `i486', then shift 9764 by one instructions such as `sarl $1, %eax' will automatically use a 9765 two byte opcode sequence. The larger three byte opcode sequence is 9766 used on the 486 (and when no architecture is specified) because it 9767 executes faster on the 486. Note that you can explicitly request the 9768 two byte opcode by writing `sarl %eax'. Secondly, if you specify 9769 `i8086', `i186', or `i286', _and_ `.code16' or `.code16gcc' then byte 9770 offset conditional jumps will be promoted when necessary to a two 9771 instruction sequence consisting of a conditional jump of the opposite 9772 sense around an unconditional jump to the target. 9773 9774 Following the CPU architecture (but not a sub-architecture, which 9775 are those starting with a dot), you may specify `jumps' or `nojumps' to 9776 control automatic promotion of conditional jumps. `jumps' is the 9777 default, and enables jump promotion; All external jumps will be of the 9778 long variety, and file-local jumps will be promoted as necessary. 9779 (*note i386-Jumps::) `nojumps' leaves external conditional jumps as 9780 byte offset jumps, and warns about file-local conditional jumps that 9781 `as' promotes. Unconditional jumps are treated as for `jumps'. 9782 9783 For example 9784 9785 .arch i8086,nojumps 9786 9787 9788 File: as.info, Node: i386-Notes, Prev: i386-Bugs, Up: i386-Dependent 9789 9790 9.13.15 Notes 9791 ------------- 9792 9793 There is some trickery concerning the `mul' and `imul' instructions 9794 that deserves mention. The 16-, 32-, 64- and 128-bit expanding 9795 multiplies (base opcode `0xf6'; extension 4 for `mul' and 5 for `imul') 9796 can be output only in the one operand form. Thus, `imul %ebx, %eax' 9797 does _not_ select the expanding multiply; the expanding multiply would 9798 clobber the `%edx' register, and this would confuse `gcc' output. Use 9799 `imul %ebx' to get the 64-bit product in `%edx:%eax'. 9800 9801 We have added a two operand form of `imul' when the first operand is 9802 an immediate mode expression and the second operand is a register. 9803 This is just a shorthand, so that, multiplying `%eax' by 69, for 9804 example, can be done with `imul $69, %eax' rather than `imul $69, %eax, 9805 %eax'. 9806 9807 9808 File: as.info, Node: i860-Dependent, Next: i960-Dependent, Prev: i386-Dependent, Up: Machine Dependencies 9809 9810 9.14 Intel i860 Dependent Features 9811 ================================== 9812 9813 * Menu: 9814 9815 * Notes-i860:: i860 Notes 9816 * Options-i860:: i860 Command-line Options 9817 * Directives-i860:: i860 Machine Directives 9818 * Opcodes for i860:: i860 Opcodes 9819 9820 9821 File: as.info, Node: Notes-i860, Next: Options-i860, Up: i860-Dependent 9822 9823 9.14.1 i860 Notes 9824 ----------------- 9825 9826 This is a fairly complete i860 assembler which is compatible with the 9827 UNIX System V/860 Release 4 assembler. However, it does not currently 9828 support SVR4 PIC (i.e., `@GOT, @GOTOFF, @PLT'). 9829 9830 Like the SVR4/860 assembler, the output object format is ELF32. 9831 Currently, this is the only supported object format. If there is 9832 sufficient interest, other formats such as COFF may be implemented. 9833 9834 Both the Intel and AT&T/SVR4 syntaxes are supported, with the latter 9835 being the default. One difference is that AT&T syntax requires the '%' 9836 prefix on register names while Intel syntax does not. Another 9837 difference is in the specification of relocatable expressions. The 9838 Intel syntax is `ha%expression' whereas the SVR4 syntax is 9839 `[expression]@ha' (and similarly for the "l" and "h" selectors). 9840 9841 9842 File: as.info, Node: Options-i860, Next: Directives-i860, Prev: Notes-i860, Up: i860-Dependent 9843 9844 9.14.2 i860 Command-line Options 9845 -------------------------------- 9846 9847 9.14.2.1 SVR4 compatibility options 9848 ................................... 9849 9850 `-V' 9851 Print assembler version. 9852 9853 `-Qy' 9854 Ignored. 9855 9856 `-Qn' 9857 Ignored. 9858 9859 9.14.2.2 Other options 9860 ...................... 9861 9862 `-EL' 9863 Select little endian output (this is the default). 9864 9865 `-EB' 9866 Select big endian output. Note that the i860 always reads 9867 instructions as little endian data, so this option only effects 9868 data and not instructions. 9869 9870 `-mwarn-expand' 9871 Emit a warning message if any pseudo-instruction expansions 9872 occurred. For example, a `or' instruction with an immediate 9873 larger than 16-bits will be expanded into two instructions. This 9874 is a very undesirable feature to rely on, so this flag can help 9875 detect any code where it happens. One use of it, for instance, has 9876 been to find and eliminate any place where `gcc' may emit these 9877 pseudo-instructions. 9878 9879 `-mxp' 9880 Enable support for the i860XP instructions and control registers. 9881 By default, this option is disabled so that only the base 9882 instruction set (i.e., i860XR) is supported. 9883 9884 `-mintel-syntax' 9885 The i860 assembler defaults to AT&T/SVR4 syntax. This option 9886 enables the Intel syntax. 9887 9888 9889 File: as.info, Node: Directives-i860, Next: Opcodes for i860, Prev: Options-i860, Up: i860-Dependent 9890 9891 9.14.3 i860 Machine Directives 9892 ------------------------------ 9893 9894 `.dual' 9895 Enter dual instruction mode. While this directive is supported, the 9896 preferred way to use dual instruction mode is to explicitly code 9897 the dual bit with the `d.' prefix. 9898 9899 `.enddual' 9900 Exit dual instruction mode. While this directive is supported, the 9901 preferred way to use dual instruction mode is to explicitly code 9902 the dual bit with the `d.' prefix. 9903 9904 `.atmp' 9905 Change the temporary register used when expanding pseudo 9906 operations. The default register is `r31'. 9907 9908 The `.dual', `.enddual', and `.atmp' directives are available only 9909 in the Intel syntax mode. 9910 9911 Both syntaxes allow for the standard `.align' directive. However, 9912 the Intel syntax additionally allows keywords for the alignment 9913 parameter: "`.align type'", where `type' is one of `.short', `.long', 9914 `.quad', `.single', `.double' representing alignments of 2, 4, 16, 4, 9915 and 8, respectively. 9916 9917 9918 File: as.info, Node: Opcodes for i860, Prev: Directives-i860, Up: i860-Dependent 9919 9920 9.14.4 i860 Opcodes 9921 ------------------- 9922 9923 All of the Intel i860XR and i860XP machine instructions are supported. 9924 Please see either _i860 Microprocessor Programmer's Reference Manual_ 9925 or _i860 Microprocessor Architecture_ for more information. 9926 9927 9.14.4.1 Other instruction support (pseudo-instructions) 9928 ........................................................ 9929 9930 For compatibility with some other i860 assemblers, a number of 9931 pseudo-instructions are supported. While these are supported, they are 9932 a very undesirable feature that should be avoided - in particular, when 9933 they result in an expansion to multiple actual i860 instructions. Below 9934 are the pseudo-instructions that result in expansions. 9935 * Load large immediate into general register: 9936 9937 The pseudo-instruction `mov imm,%rn' (where the immediate does not 9938 fit within a signed 16-bit field) will be expanded into: 9939 orh large_imm@h,%r0,%rn 9940 or large_imm@l,%rn,%rn 9941 9942 * Load/store with relocatable address expression: 9943 9944 For example, the pseudo-instruction `ld.b addr_exp(%rx),%rn' will 9945 be expanded into: 9946 orh addr_exp@ha,%rx,%r31 9947 ld.l addr_exp@l(%r31),%rn 9948 9949 The analogous expansions apply to `ld.x, st.x, fld.x, pfld.x, 9950 fst.x', and `pst.x' as well. 9951 9952 * Signed large immediate with add/subtract: 9953 9954 If any of the arithmetic operations `adds, addu, subs, subu' are 9955 used with an immediate larger than 16-bits (signed), then they 9956 will be expanded. For instance, the pseudo-instruction `adds 9957 large_imm,%rx,%rn' expands to: 9958 orh large_imm@h,%r0,%r31 9959 or large_imm@l,%r31,%r31 9960 adds %r31,%rx,%rn 9961 9962 * Unsigned large immediate with logical operations: 9963 9964 Logical operations (`or, andnot, or, xor') also result in 9965 expansions. The pseudo-instruction `or large_imm,%rx,%rn' results 9966 in: 9967 orh large_imm@h,%rx,%r31 9968 or large_imm@l,%r31,%rn 9969 9970 Similarly for the others, except for `and' which expands to: 9971 andnot (-1 - large_imm)@h,%rx,%r31 9972 andnot (-1 - large_imm)@l,%r31,%rn 9973 9974 9975 File: as.info, Node: i960-Dependent, Next: IA-64-Dependent, Prev: i860-Dependent, Up: Machine Dependencies 9976 9977 9.15 Intel 80960 Dependent Features 9978 =================================== 9979 9980 * Menu: 9981 9982 * Options-i960:: i960 Command-line Options 9983 * Floating Point-i960:: Floating Point 9984 * Directives-i960:: i960 Machine Directives 9985 * Opcodes for i960:: i960 Opcodes 9986 9987 9988 File: as.info, Node: Options-i960, Next: Floating Point-i960, Up: i960-Dependent 9989 9990 9.15.1 i960 Command-line Options 9991 -------------------------------- 9992 9993 `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC' 9994 Select the 80960 architecture. Instructions or features not 9995 supported by the selected architecture cause fatal errors. 9996 9997 `-ACA' is equivalent to `-ACA_A'; `-AKC' is equivalent to `-AMC'. 9998 Synonyms are provided for compatibility with other tools. 9999 10000 If you do not specify any of these options, `as' generates code 10001 for any instruction or feature that is supported by _some_ version 10002 of the 960 (even if this means mixing architectures!). In 10003 principle, `as' attempts to deduce the minimal sufficient 10004 processor type if none is specified; depending on the object code 10005 format, the processor type may be recorded in the object file. If 10006 it is critical that the `as' output match a specific architecture, 10007 specify that architecture explicitly. 10008 10009 `-b' 10010 Add code to collect information about conditional branches taken, 10011 for later optimization using branch prediction bits. (The 10012 conditional branch instructions have branch prediction bits in the 10013 CA, CB, and CC architectures.) If BR represents a conditional 10014 branch instruction, the following represents the code generated by 10015 the assembler when `-b' is specified: 10016 10017 call INCREMENT ROUTINE 10018 .word 0 # pre-counter 10019 Label: BR 10020 call INCREMENT ROUTINE 10021 .word 0 # post-counter 10022 10023 The counter following a branch records the number of times that 10024 branch was _not_ taken; the difference between the two counters is 10025 the number of times the branch _was_ taken. 10026 10027 A table of every such `Label' is also generated, so that the 10028 external postprocessor `gbr960' (supplied by Intel) can locate all 10029 the counters. This table is always labeled `__BRANCH_TABLE__'; 10030 this is a local symbol to permit collecting statistics for many 10031 separate object files. The table is word aligned, and begins with 10032 a two-word header. The first word, initialized to 0, is used in 10033 maintaining linked lists of branch tables. The second word is a 10034 count of the number of entries in the table, which follow 10035 immediately: each is a word, pointing to one of the labels 10036 illustrated above. 10037 10038 +------------+------------+------------+ ... +------------+ 10039 | | | | | | 10040 | *NEXT | COUNT: N | *BRLAB 1 | | *BRLAB N | 10041 | | | | | | 10042 +------------+------------+------------+ ... +------------+ 10043 10044 __BRANCH_TABLE__ layout 10045 10046 The first word of the header is used to locate multiple branch 10047 tables, since each object file may contain one. Normally the links 10048 are maintained with a call to an initialization routine, placed at 10049 the beginning of each function in the file. The GNU C compiler 10050 generates these calls automatically when you give it a `-b' option. 10051 For further details, see the documentation of `gbr960'. 10052 10053 `-no-relax' 10054 Normally, Compare-and-Branch instructions with targets that require 10055 displacements greater than 13 bits (or that have external targets) 10056 are replaced with the corresponding compare (or `chkbit') and 10057 branch instructions. You can use the `-no-relax' option to 10058 specify that `as' should generate errors instead, if the target 10059 displacement is larger than 13 bits. 10060 10061 This option does not affect the Compare-and-Jump instructions; the 10062 code emitted for them is _always_ adjusted when necessary 10063 (depending on displacement size), regardless of whether you use 10064 `-no-relax'. 10065 10066 10067 File: as.info, Node: Floating Point-i960, Next: Directives-i960, Prev: Options-i960, Up: i960-Dependent 10068 10069 9.15.2 Floating Point 10070 --------------------- 10071 10072 `as' generates IEEE floating-point numbers for the directives `.float', 10073 `.double', `.extended', and `.single'. 10074 10075 10076 File: as.info, Node: Directives-i960, Next: Opcodes for i960, Prev: Floating Point-i960, Up: i960-Dependent 10077 10078 9.15.3 i960 Machine Directives 10079 ------------------------------ 10080 10081 `.bss SYMBOL, LENGTH, ALIGN' 10082 Reserve LENGTH bytes in the bss section for a local SYMBOL, 10083 aligned to the power of two specified by ALIGN. LENGTH and ALIGN 10084 must be positive absolute expressions. This directive differs 10085 from `.lcomm' only in that it permits you to specify an alignment. 10086 *Note `.lcomm': Lcomm. 10087 10088 `.extended FLONUMS' 10089 `.extended' expects zero or more flonums, separated by commas; for 10090 each flonum, `.extended' emits an IEEE extended-format (80-bit) 10091 floating-point number. 10092 10093 `.leafproc CALL-LAB, BAL-LAB' 10094 You can use the `.leafproc' directive in conjunction with the 10095 optimized `callj' instruction to enable faster calls of leaf 10096 procedures. If a procedure is known to call no other procedures, 10097 you may define an entry point that skips procedure prolog code 10098 (and that does not depend on system-supplied saved context), and 10099 declare it as the BAL-LAB using `.leafproc'. If the procedure 10100 also has an entry point that goes through the normal prolog, you 10101 can specify that entry point as CALL-LAB. 10102 10103 A `.leafproc' declaration is meant for use in conjunction with the 10104 optimized call instruction `callj'; the directive records the data 10105 needed later to choose between converting the `callj' into a `bal' 10106 or a `call'. 10107 10108 CALL-LAB is optional; if only one argument is present, or if the 10109 two arguments are identical, the single argument is assumed to be 10110 the `bal' entry point. 10111 10112 `.sysproc NAME, INDEX' 10113 The `.sysproc' directive defines a name for a system procedure. 10114 After you define it using `.sysproc', you can use NAME to refer to 10115 the system procedure identified by INDEX when calling procedures 10116 with the optimized call instruction `callj'. 10117 10118 Both arguments are required; INDEX must be between 0 and 31 10119 (inclusive). 10120 10121 10122 File: as.info, Node: Opcodes for i960, Prev: Directives-i960, Up: i960-Dependent 10123 10124 9.15.4 i960 Opcodes 10125 ------------------- 10126 10127 All Intel 960 machine instructions are supported; *note i960 10128 Command-line Options: Options-i960. for a discussion of selecting the 10129 instruction subset for a particular 960 architecture. 10130 10131 Some opcodes are processed beyond simply emitting a single 10132 corresponding instruction: `callj', and Compare-and-Branch or 10133 Compare-and-Jump instructions with target displacements larger than 13 10134 bits. 10135 10136 * Menu: 10137 10138 * callj-i960:: `callj' 10139 * Compare-and-branch-i960:: Compare-and-Branch 10140 10141 10142 File: as.info, Node: callj-i960, Next: Compare-and-branch-i960, Up: Opcodes for i960 10143 10144 9.15.4.1 `callj' 10145 ................ 10146 10147 You can write `callj' to have the assembler or the linker determine the 10148 most appropriate form of subroutine call: `call', `bal', or `calls'. 10149 If the assembly source contains enough information--a `.leafproc' or 10150 `.sysproc' directive defining the operand--then `as' translates the 10151 `callj'; if not, it simply emits the `callj', leaving it for the linker 10152 to resolve. 10153 10154 10155 File: as.info, Node: Compare-and-branch-i960, Prev: callj-i960, Up: Opcodes for i960 10156 10157 9.15.4.2 Compare-and-Branch 10158 ........................... 10159 10160 The 960 architectures provide combined Compare-and-Branch instructions 10161 that permit you to store the branch target in the lower 13 bits of the 10162 instruction word itself. However, if you specify a branch target far 10163 enough away that its address won't fit in 13 bits, the assembler can 10164 either issue an error, or convert your Compare-and-Branch instruction 10165 into separate instructions to do the compare and the branch. 10166 10167 Whether `as' gives an error or expands the instruction depends on 10168 two choices you can make: whether you use the `-no-relax' option, and 10169 whether you use a "Compare and Branch" instruction or a "Compare and 10170 Jump" instruction. The "Jump" instructions are _always_ expanded if 10171 necessary; the "Branch" instructions are expanded when necessary 10172 _unless_ you specify `-no-relax'--in which case `as' gives an error 10173 instead. 10174 10175 These are the Compare-and-Branch instructions, their "Jump" variants, 10176 and the instruction pairs they may expand into: 10177 10178 Compare and 10179 Branch Jump Expanded to 10180 ------ ------ ------------ 10181 bbc chkbit; bno 10182 bbs chkbit; bo 10183 cmpibe cmpije cmpi; be 10184 cmpibg cmpijg cmpi; bg 10185 cmpibge cmpijge cmpi; bge 10186 cmpibl cmpijl cmpi; bl 10187 cmpible cmpijle cmpi; ble 10188 cmpibno cmpijno cmpi; bno 10189 cmpibne cmpijne cmpi; bne 10190 cmpibo cmpijo cmpi; bo 10191 cmpobe cmpoje cmpo; be 10192 cmpobg cmpojg cmpo; bg 10193 cmpobge cmpojge cmpo; bge 10194 cmpobl cmpojl cmpo; bl 10195 cmpoble cmpojle cmpo; ble 10196 cmpobne cmpojne cmpo; bne 10197 10198 10199 File: as.info, Node: IA-64-Dependent, Next: IP2K-Dependent, Prev: i960-Dependent, Up: Machine Dependencies 10200 10201 9.16 IA-64 Dependent Features 10202 ============================= 10203 10204 * Menu: 10205 10206 * IA-64 Options:: Options 10207 * IA-64 Syntax:: Syntax 10208 * IA-64 Opcodes:: Opcodes 10209 10210 10211 File: as.info, Node: IA-64 Options, Next: IA-64 Syntax, Up: IA-64-Dependent 10212 10213 9.16.1 Options 10214 -------------- 10215 10216 `-mconstant-gp' 10217 This option instructs the assembler to mark the resulting object 10218 file as using the "constant GP" model. With this model, it is 10219 assumed that the entire program uses a single global pointer (GP) 10220 value. Note that this option does not in any fashion affect the 10221 machine code emitted by the assembler. All it does is turn on the 10222 EF_IA_64_CONS_GP flag in the ELF file header. 10223 10224 `-mauto-pic' 10225 This option instructs the assembler to mark the resulting object 10226 file as using the "constant GP without function descriptor" data 10227 model. This model is like the "constant GP" model, except that it 10228 additionally does away with function descriptors. What this means 10229 is that the address of a function refers directly to the 10230 function's code entry-point. Normally, such an address would 10231 refer to a function descriptor, which contains both the code 10232 entry-point and the GP-value needed by the function. Note that 10233 this option does not in any fashion affect the machine code 10234 emitted by the assembler. All it does is turn on the 10235 EF_IA_64_NOFUNCDESC_CONS_GP flag in the ELF file header. 10236 10237 `-milp32' 10238 10239 `-milp64' 10240 10241 `-mlp64' 10242 10243 `-mp64' 10244 These options select the data model. The assembler defaults to 10245 `-mlp64' (LP64 data model). 10246 10247 `-mle' 10248 10249 `-mbe' 10250 These options select the byte order. The `-mle' option selects 10251 little-endian byte order (default) and `-mbe' selects big-endian 10252 byte order. Note that IA-64 machine code always uses 10253 little-endian byte order. 10254 10255 `-mtune=itanium1' 10256 10257 `-mtune=itanium2' 10258 Tune for a particular IA-64 CPU, ITANIUM1 or ITANIUM2. The default 10259 is ITANIUM2. 10260 10261 `-munwind-check=warning' 10262 10263 `-munwind-check=error' 10264 These options control what the assembler will do when performing 10265 consistency checks on unwind directives. `-munwind-check=warning' 10266 will make the assembler issue a warning when an unwind directive 10267 check fails. This is the default. `-munwind-check=error' will 10268 make the assembler issue an error when an unwind directive check 10269 fails. 10270 10271 `-mhint.b=ok' 10272 10273 `-mhint.b=warning' 10274 10275 `-mhint.b=error' 10276 These options control what the assembler will do when the `hint.b' 10277 instruction is used. `-mhint.b=ok' will make the assembler accept 10278 `hint.b'. `-mint.b=warning' will make the assembler issue a 10279 warning when `hint.b' is used. `-mhint.b=error' will make the 10280 assembler treat `hint.b' as an error, which is the default. 10281 10282 `-x' 10283 10284 `-xexplicit' 10285 These options turn on dependency violation checking. 10286 10287 `-xauto' 10288 This option instructs the assembler to automatically insert stop 10289 bits where necessary to remove dependency violations. This is the 10290 default mode. 10291 10292 `-xnone' 10293 This option turns off dependency violation checking. 10294 10295 `-xdebug' 10296 This turns on debug output intended to help tracking down bugs in 10297 the dependency violation checker. 10298 10299 `-xdebugn' 10300 This is a shortcut for -xnone -xdebug. 10301 10302 `-xdebugx' 10303 This is a shortcut for -xexplicit -xdebug. 10304 10305 10306 10307 File: as.info, Node: IA-64 Syntax, Next: IA-64 Opcodes, Prev: IA-64 Options, Up: IA-64-Dependent 10308 10309 9.16.2 Syntax 10310 ------------- 10311 10312 The assembler syntax closely follows the IA-64 Assembly Language 10313 Reference Guide. 10314 10315 * Menu: 10316 10317 * IA-64-Chars:: Special Characters 10318 * IA-64-Regs:: Register Names 10319 * IA-64-Bits:: Bit Names 10320 10321 10322 File: as.info, Node: IA-64-Chars, Next: IA-64-Regs, Up: IA-64 Syntax 10323 10324 9.16.2.1 Special Characters 10325 ........................... 10326 10327 `//' is the line comment token. 10328 10329 `;' can be used instead of a newline to separate statements. 10330 10331 10332 File: as.info, Node: IA-64-Regs, Next: IA-64-Bits, Prev: IA-64-Chars, Up: IA-64 Syntax 10333 10334 9.16.2.2 Register Names 10335 ....................... 10336 10337 The 128 integer registers are referred to as `rN'. The 128 10338 floating-point registers are referred to as `fN'. The 128 application 10339 registers are referred to as `arN'. The 128 control registers are 10340 referred to as `crN'. The 64 one-bit predicate registers are referred 10341 to as `pN'. The 8 branch registers are referred to as `bN'. In 10342 addition, the assembler defines a number of aliases: `gp' (`r1'), `sp' 10343 (`r12'), `rp' (`b0'), `ret0' (`r8'), `ret1' (`r9'), `ret2' (`r10'), 10344 `ret3' (`r9'), `fargN' (`f8+N'), and `fretN' (`f8+N'). 10345 10346 For convenience, the assembler also defines aliases for all named 10347 application and control registers. For example, `ar.bsp' refers to the 10348 register backing store pointer (`ar17'). Similarly, `cr.eoi' refers to 10349 the end-of-interrupt register (`cr67'). 10350 10351 10352 File: as.info, Node: IA-64-Bits, Prev: IA-64-Regs, Up: IA-64 Syntax 10353 10354 9.16.2.3 IA-64 Processor-Status-Register (PSR) Bit Names 10355 ........................................................ 10356 10357 The assembler defines bit masks for each of the bits in the IA-64 10358 processor status register. For example, `psr.ic' corresponds to a 10359 value of 0x2000. These masks are primarily intended for use with the 10360 `ssm'/`sum' and `rsm'/`rum' instructions, but they can be used anywhere 10361 else where an integer constant is expected. 10362 10363 10364 File: as.info, Node: IA-64 Opcodes, Prev: IA-64 Syntax, Up: IA-64-Dependent 10365 10366 9.16.3 Opcodes 10367 -------------- 10368 10369 For detailed information on the IA-64 machine instruction set, see the 10370 IA-64 Architecture Handbook 10371 (http://developer.intel.com/design/itanium/arch_spec.htm). 10372 10373 10374 File: as.info, Node: IP2K-Dependent, Next: M32C-Dependent, Prev: IA-64-Dependent, Up: Machine Dependencies 10375 10376 9.17 IP2K Dependent Features 10377 ============================ 10378 10379 * Menu: 10380 10381 * IP2K-Opts:: IP2K Options 10382 10383 10384 File: as.info, Node: IP2K-Opts, Up: IP2K-Dependent 10385 10386 9.17.1 IP2K Options 10387 ------------------- 10388 10389 The Ubicom IP2K version of `as' has a few machine dependent options: 10390 10391 `-mip2022ext' 10392 `as' can assemble the extended IP2022 instructions, but it will 10393 only do so if this is specifically allowed via this command line 10394 option. 10395 10396 `-mip2022' 10397 This option restores the assembler's default behaviour of not 10398 permitting the extended IP2022 instructions to be assembled. 10399 10400 10401 10402 File: as.info, Node: M32C-Dependent, Next: M32R-Dependent, Prev: IP2K-Dependent, Up: Machine Dependencies 10403 10404 9.18 M32C Dependent Features 10405 ============================ 10406 10407 `as' can assemble code for several different members of the Renesas 10408 M32C family. Normally the default is to assemble code for the M16C 10409 microprocessor. The `-m32c' option may be used to change the default 10410 to the M32C microprocessor. 10411 10412 * Menu: 10413 10414 * M32C-Opts:: M32C Options 10415 * M32C-Modifiers:: Symbolic Operand Modifiers 10416 10417 10418 File: as.info, Node: M32C-Opts, Next: M32C-Modifiers, Up: M32C-Dependent 10419 10420 9.18.1 M32C Options 10421 ------------------- 10422 10423 The Renesas M32C version of `as' has these machine-dependent options: 10424 10425 `-m32c' 10426 Assemble M32C instructions. 10427 10428 `-m16c' 10429 Assemble M16C instructions (default). 10430 10431 `-relax' 10432 Enable support for link-time relaxations. 10433 10434 `-h-tick-hex' 10435 Support H'00 style hex constants in addition to 0x00 style. 10436 10437 10438 10439 File: as.info, Node: M32C-Modifiers, Prev: M32C-Opts, Up: M32C-Dependent 10440 10441 9.18.2 Symbolic Operand Modifiers 10442 --------------------------------- 10443 10444 The assembler supports several modifiers when using symbol addresses in 10445 M32C instruction operands. The general syntax is the following: 10446 10447 %modifier(symbol) 10448 10449 `%dsp8' 10450 `%dsp16' 10451 These modifiers override the assembler's assumptions about how big 10452 a symbol's address is. Normally, when it sees an operand like 10453 `sym[a0]' it assumes `sym' may require the widest displacement 10454 field (16 bits for `-m16c', 24 bits for `-m32c'). These modifiers 10455 tell it to assume the address will fit in an 8 or 16 bit 10456 (respectively) unsigned displacement. Note that, of course, if it 10457 doesn't actually fit you will get linker errors. Example: 10458 10459 mov.w %dsp8(sym)[a0],r1 10460 mov.b #0,%dsp8(sym)[a0] 10461 10462 `%hi8' 10463 This modifier allows you to load bits 16 through 23 of a 24 bit 10464 address into an 8 bit register. This is useful with, for example, 10465 the M16C `smovf' instruction, which expects a 20 bit address in 10466 `r1h' and `a0'. Example: 10467 10468 mov.b #%hi8(sym),r1h 10469 mov.w #%lo16(sym),a0 10470 smovf.b 10471 10472 `%lo16' 10473 Likewise, this modifier allows you to load bits 0 through 15 of a 10474 24 bit address into a 16 bit register. 10475 10476 `%hi16' 10477 This modifier allows you to load bits 16 through 31 of a 32 bit 10478 address into a 16 bit register. While the M32C family only has 24 10479 bits of address space, it does support addresses in pairs of 16 bit 10480 registers (like `a1a0' for the `lde' instruction). This modifier 10481 is for loading the upper half in such cases. Example: 10482 10483 mov.w #%hi16(sym),a1 10484 mov.w #%lo16(sym),a0 10485 ... 10486 lde.w [a1a0],r1 10487 10488 10489 10490 File: as.info, Node: M32R-Dependent, Next: M68K-Dependent, Prev: M32C-Dependent, Up: Machine Dependencies 10491 10492 9.19 M32R Dependent Features 10493 ============================ 10494 10495 * Menu: 10496 10497 * M32R-Opts:: M32R Options 10498 * M32R-Directives:: M32R Directives 10499 * M32R-Warnings:: M32R Warnings 10500 10501 10502 File: as.info, Node: M32R-Opts, Next: M32R-Directives, Up: M32R-Dependent 10503 10504 9.19.1 M32R Options 10505 ------------------- 10506 10507 The Renease M32R version of `as' has a few machine dependent options: 10508 10509 `-m32rx' 10510 `as' can assemble code for several different members of the 10511 Renesas M32R family. Normally the default is to assemble code for 10512 the M32R microprocessor. This option may be used to change the 10513 default to the M32RX microprocessor, which adds some more 10514 instructions to the basic M32R instruction set, and some 10515 additional parameters to some of the original instructions. 10516 10517 `-m32r2' 10518 This option changes the target processor to the the M32R2 10519 microprocessor. 10520 10521 `-m32r' 10522 This option can be used to restore the assembler's default 10523 behaviour of assembling for the M32R microprocessor. This can be 10524 useful if the default has been changed by a previous command line 10525 option. 10526 10527 `-little' 10528 This option tells the assembler to produce little-endian code and 10529 data. The default is dependent upon how the toolchain was 10530 configured. 10531 10532 `-EL' 10533 This is a synonym for _-little_. 10534 10535 `-big' 10536 This option tells the assembler to produce big-endian code and 10537 data. 10538 10539 `-EB' 10540 This is a synonum for _-big_. 10541 10542 `-KPIC' 10543 This option specifies that the output of the assembler should be 10544 marked as position-independent code (PIC). 10545 10546 `-parallel' 10547 This option tells the assembler to attempts to combine two 10548 sequential instructions into a single, parallel instruction, where 10549 it is legal to do so. 10550 10551 `-no-parallel' 10552 This option disables a previously enabled _-parallel_ option. 10553 10554 `-no-bitinst' 10555 This option disables the support for the extended bit-field 10556 instructions provided by the M32R2. If this support needs to be 10557 re-enabled the _-bitinst_ switch can be used to restore it. 10558 10559 `-O' 10560 This option tells the assembler to attempt to optimize the 10561 instructions that it produces. This includes filling delay slots 10562 and converting sequential instructions into parallel ones. This 10563 option implies _-parallel_. 10564 10565 `-warn-explicit-parallel-conflicts' 10566 Instructs `as' to produce warning messages when questionable 10567 parallel instructions are encountered. This option is enabled by 10568 default, but `gcc' disables it when it invokes `as' directly. 10569 Questionable instructions are those whose behaviour would be 10570 different if they were executed sequentially. For example the 10571 code fragment `mv r1, r2 || mv r3, r1' produces a different result 10572 from `mv r1, r2 \n mv r3, r1' since the former moves r1 into r3 10573 and then r2 into r1, whereas the later moves r2 into r1 and r3. 10574 10575 `-Wp' 10576 This is a shorter synonym for the 10577 _-warn-explicit-parallel-conflicts_ option. 10578 10579 `-no-warn-explicit-parallel-conflicts' 10580 Instructs `as' not to produce warning messages when questionable 10581 parallel instructions are encountered. 10582 10583 `-Wnp' 10584 This is a shorter synonym for the 10585 _-no-warn-explicit-parallel-conflicts_ option. 10586 10587 `-ignore-parallel-conflicts' 10588 This option tells the assembler's to stop checking parallel 10589 instructions for constraint violations. This ability is provided 10590 for hardware vendors testing chip designs and should not be used 10591 under normal circumstances. 10592 10593 `-no-ignore-parallel-conflicts' 10594 This option restores the assembler's default behaviour of checking 10595 parallel instructions to detect constraint violations. 10596 10597 `-Ip' 10598 This is a shorter synonym for the _-ignore-parallel-conflicts_ 10599 option. 10600 10601 `-nIp' 10602 This is a shorter synonym for the _-no-ignore-parallel-conflicts_ 10603 option. 10604 10605 `-warn-unmatched-high' 10606 This option tells the assembler to produce a warning message if a 10607 `.high' pseudo op is encountered without a matching `.low' pseudo 10608 op. The presence of such an unmatched pseudo op usually indicates 10609 a programming error. 10610 10611 `-no-warn-unmatched-high' 10612 Disables a previously enabled _-warn-unmatched-high_ option. 10613 10614 `-Wuh' 10615 This is a shorter synonym for the _-warn-unmatched-high_ option. 10616 10617 `-Wnuh' 10618 This is a shorter synonym for the _-no-warn-unmatched-high_ option. 10619 10620 10621 10622 File: as.info, Node: M32R-Directives, Next: M32R-Warnings, Prev: M32R-Opts, Up: M32R-Dependent 10623 10624 9.19.2 M32R Directives 10625 ---------------------- 10626 10627 The Renease M32R version of `as' has a few architecture specific 10628 directives: 10629 10630 `low EXPRESSION' 10631 The `low' directive computes the value of its expression and 10632 places the lower 16-bits of the result into the immediate-field of 10633 the instruction. For example: 10634 10635 or3 r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678 10636 add3, r0, r0, #low(fred) ; compute r0 = r0 + low 16-bits of address of fred 10637 10638 `high EXPRESSION' 10639 The `high' directive computes the value of its expression and 10640 places the upper 16-bits of the result into the immediate-field of 10641 the instruction. For example: 10642 10643 seth r0, #high(0x12345678) ; compute r0 = 0x12340000 10644 seth, r0, #high(fred) ; compute r0 = upper 16-bits of address of fred 10645 10646 `shigh EXPRESSION' 10647 The `shigh' directive is very similar to the `high' directive. It 10648 also computes the value of its expression and places the upper 10649 16-bits of the result into the immediate-field of the instruction. 10650 The difference is that `shigh' also checks to see if the lower 10651 16-bits could be interpreted as a signed number, and if so it 10652 assumes that a borrow will occur from the upper-16 bits. To 10653 compensate for this the `shigh' directive pre-biases the upper 16 10654 bit value by adding one to it. For example: 10655 10656 For example: 10657 10658 seth r0, #shigh(0x12345678) ; compute r0 = 0x12340000 10659 seth r0, #shigh(0x00008000) ; compute r0 = 0x00010000 10660 10661 In the second example the lower 16-bits are 0x8000. If these are 10662 treated as a signed value and sign extended to 32-bits then the 10663 value becomes 0xffff8000. If this value is then added to 10664 0x00010000 then the result is 0x00008000. 10665 10666 This behaviour is to allow for the different semantics of the 10667 `or3' and `add3' instructions. The `or3' instruction treats its 10668 16-bit immediate argument as unsigned whereas the `add3' treats 10669 its 16-bit immediate as a signed value. So for example: 10670 10671 seth r0, #shigh(0x00008000) 10672 add3 r0, r0, #low(0x00008000) 10673 10674 Produces the correct result in r0, whereas: 10675 10676 seth r0, #shigh(0x00008000) 10677 or3 r0, r0, #low(0x00008000) 10678 10679 Stores 0xffff8000 into r0. 10680 10681 Note - the `shigh' directive does not know where in the assembly 10682 source code the lower 16-bits of the value are going set, so it 10683 cannot check to make sure that an `or3' instruction is being used 10684 rather than an `add3' instruction. It is up to the programmer to 10685 make sure that correct directives are used. 10686 10687 `.m32r' 10688 The directive performs a similar thing as the _-m32r_ command line 10689 option. It tells the assembler to only accept M32R instructions 10690 from now on. An instructions from later M32R architectures are 10691 refused. 10692 10693 `.m32rx' 10694 The directive performs a similar thing as the _-m32rx_ command 10695 line option. It tells the assembler to start accepting the extra 10696 instructions in the M32RX ISA as well as the ordinary M32R ISA. 10697 10698 `.m32r2' 10699 The directive performs a similar thing as the _-m32r2_ command 10700 line option. It tells the assembler to start accepting the extra 10701 instructions in the M32R2 ISA as well as the ordinary M32R ISA. 10702 10703 `.little' 10704 The directive performs a similar thing as the _-little_ command 10705 line option. It tells the assembler to start producing 10706 little-endian code and data. This option should be used with care 10707 as producing mixed-endian binary files is fraught with danger. 10708 10709 `.big' 10710 The directive performs a similar thing as the _-big_ command line 10711 option. It tells the assembler to start producing big-endian code 10712 and data. This option should be used with care as producing 10713 mixed-endian binary files is fraught with danger. 10714 10715 10716 10717 File: as.info, Node: M32R-Warnings, Prev: M32R-Directives, Up: M32R-Dependent 10718 10719 9.19.3 M32R Warnings 10720 -------------------- 10721 10722 There are several warning and error messages that can be produced by 10723 `as' which are specific to the M32R: 10724 10725 `output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?' 10726 This message is only produced if warnings for explicit parallel 10727 conflicts have been enabled. It indicates that the assembler has 10728 encountered a parallel instruction in which the destination 10729 register of the left hand instruction is used as an input register 10730 in the right hand instruction. For example in this code fragment 10731 `mv r1, r2 || neg r3, r1' register r1 is the destination of the 10732 move instruction and the input to the neg instruction. 10733 10734 `output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?' 10735 This message is only produced if warnings for explicit parallel 10736 conflicts have been enabled. It indicates that the assembler has 10737 encountered a parallel instruction in which the destination 10738 register of the right hand instruction is used as an input 10739 register in the left hand instruction. For example in this code 10740 fragment `mv r1, r2 || neg r2, r3' register r2 is the destination 10741 of the neg instruction and the input to the move instruction. 10742 10743 `instruction `...' is for the M32RX only' 10744 This message is produced when the assembler encounters an 10745 instruction which is only supported by the M32Rx processor, and 10746 the `-m32rx' command line flag has not been specified to allow 10747 assembly of such instructions. 10748 10749 `unknown instruction `...'' 10750 This message is produced when the assembler encounters an 10751 instruction which it does not recognize. 10752 10753 `only the NOP instruction can be issued in parallel on the m32r' 10754 This message is produced when the assembler encounters a parallel 10755 instruction which does not involve a NOP instruction and the 10756 `-m32rx' command line flag has not been specified. Only the M32Rx 10757 processor is able to execute two instructions in parallel. 10758 10759 `instruction `...' cannot be executed in parallel.' 10760 This message is produced when the assembler encounters a parallel 10761 instruction which is made up of one or two instructions which 10762 cannot be executed in parallel. 10763 10764 `Instructions share the same execution pipeline' 10765 This message is produced when the assembler encounters a parallel 10766 instruction whoes components both use the same execution pipeline. 10767 10768 `Instructions write to the same destination register.' 10769 This message is produced when the assembler encounters a parallel 10770 instruction where both components attempt to modify the same 10771 register. For example these code fragments will produce this 10772 message: `mv r1, r2 || neg r1, r3' `jl r0 || mv r14, r1' `st r2, 10773 @-r1 || mv r1, r3' `mv r1, r2 || ld r0, @r1+' `cmp r1, r2 || addx 10774 r3, r4' (Both write to the condition bit) 10775 10776 10777 10778 File: as.info, Node: M68K-Dependent, Next: M68HC11-Dependent, Prev: M32R-Dependent, Up: Machine Dependencies 10779 10780 9.20 M680x0 Dependent Features 10781 ============================== 10782 10783 * Menu: 10784 10785 * M68K-Opts:: M680x0 Options 10786 * M68K-Syntax:: Syntax 10787 * M68K-Moto-Syntax:: Motorola Syntax 10788 * M68K-Float:: Floating Point 10789 * M68K-Directives:: 680x0 Machine Directives 10790 * M68K-opcodes:: Opcodes 10791 10792 10793 File: as.info, Node: M68K-Opts, Next: M68K-Syntax, Up: M68K-Dependent 10794 10795 9.20.1 M680x0 Options 10796 --------------------- 10797 10798 The Motorola 680x0 version of `as' has a few machine dependent options: 10799 10800 `-march=ARCHITECTURE' 10801 This option specifies a target architecture. The following 10802 architectures are recognized: `68000', `68010', `68020', `68030', 10803 `68040', `68060', `cpu32', `isaa', `isaaplus', `isab', `isac' and 10804 `cfv4e'. 10805 10806 `-mcpu=CPU' 10807 This option specifies a target cpu. When used in conjunction with 10808 the `-march' option, the cpu must be within the specified 10809 architecture. Also, the generic features of the architecture are 10810 used for instruction generation, rather than those of the specific 10811 chip. 10812 10813 `-m[no-]68851' 10814 10815 `-m[no-]68881' 10816 10817 `-m[no-]div' 10818 10819 `-m[no-]usp' 10820 10821 `-m[no-]float' 10822 10823 `-m[no-]mac' 10824 10825 `-m[no-]emac' 10826 Enable or disable various architecture specific features. If a 10827 chip or architecture by default supports an option (for instance 10828 `-march=isaaplus' includes the `-mdiv' option), explicitly 10829 disabling the option will override the default. 10830 10831 `-l' 10832 You can use the `-l' option to shorten the size of references to 10833 undefined symbols. If you do not use the `-l' option, references 10834 to undefined symbols are wide enough for a full `long' (32 bits). 10835 (Since `as' cannot know where these symbols end up, `as' can only 10836 allocate space for the linker to fill in later. Since `as' does 10837 not know how far away these symbols are, it allocates as much 10838 space as it can.) If you use this option, the references are only 10839 one word wide (16 bits). This may be useful if you want the 10840 object file to be as small as possible, and you know that the 10841 relevant symbols are always less than 17 bits away. 10842 10843 `--register-prefix-optional' 10844 For some configurations, especially those where the compiler 10845 normally does not prepend an underscore to the names of user 10846 variables, the assembler requires a `%' before any use of a 10847 register name. This is intended to let the assembler distinguish 10848 between C variables and functions named `a0' through `a7', and so 10849 on. The `%' is always accepted, but is not required for certain 10850 configurations, notably `sun3'. The `--register-prefix-optional' 10851 option may be used to permit omitting the `%' even for 10852 configurations for which it is normally required. If this is 10853 done, it will generally be impossible to refer to C variables and 10854 functions with the same names as register names. 10855 10856 `--bitwise-or' 10857 Normally the character `|' is treated as a comment character, which 10858 means that it can not be used in expressions. The `--bitwise-or' 10859 option turns `|' into a normal character. In this mode, you must 10860 either use C style comments, or start comments with a `#' character 10861 at the beginning of a line. 10862 10863 `--base-size-default-16 --base-size-default-32' 10864 If you use an addressing mode with a base register without 10865 specifying the size, `as' will normally use the full 32 bit value. 10866 For example, the addressing mode `%a0@(%d0)' is equivalent to 10867 `%a0@(%d0:l)'. You may use the `--base-size-default-16' option to 10868 tell `as' to default to using the 16 bit value. In this case, 10869 `%a0@(%d0)' is equivalent to `%a0@(%d0:w)'. You may use the 10870 `--base-size-default-32' option to restore the default behaviour. 10871 10872 `--disp-size-default-16 --disp-size-default-32' 10873 If you use an addressing mode with a displacement, and the value 10874 of the displacement is not known, `as' will normally assume that 10875 the value is 32 bits. For example, if the symbol `disp' has not 10876 been defined, `as' will assemble the addressing mode 10877 `%a0@(disp,%d0)' as though `disp' is a 32 bit value. You may use 10878 the `--disp-size-default-16' option to tell `as' to instead assume 10879 that the displacement is 16 bits. In this case, `as' will 10880 assemble `%a0@(disp,%d0)' as though `disp' is a 16 bit value. You 10881 may use the `--disp-size-default-32' option to restore the default 10882 behaviour. 10883 10884 `--pcrel' 10885 Always keep branches PC-relative. In the M680x0 architecture all 10886 branches are defined as PC-relative. However, on some processors 10887 they are limited to word displacements maximum. When `as' needs a 10888 long branch that is not available, it normally emits an absolute 10889 jump instead. This option disables this substitution. When this 10890 option is given and no long branches are available, only word 10891 branches will be emitted. An error message will be generated if a 10892 word branch cannot reach its target. This option has no effect on 10893 68020 and other processors that have long branches. *note Branch 10894 Improvement: M68K-Branch. 10895 10896 `-m68000' 10897 `as' can assemble code for several different members of the 10898 Motorola 680x0 family. The default depends upon how `as' was 10899 configured when it was built; normally, the default is to assemble 10900 code for the 68020 microprocessor. The following options may be 10901 used to change the default. These options control which 10902 instructions and addressing modes are permitted. The members of 10903 the 680x0 family are very similar. For detailed information about 10904 the differences, see the Motorola manuals. 10905 10906 `-m68000' 10907 `-m68ec000' 10908 `-m68hc000' 10909 `-m68hc001' 10910 `-m68008' 10911 `-m68302' 10912 `-m68306' 10913 `-m68307' 10914 `-m68322' 10915 `-m68356' 10916 Assemble for the 68000. `-m68008', `-m68302', and so on are 10917 synonyms for `-m68000', since the chips are the same from the 10918 point of view of the assembler. 10919 10920 `-m68010' 10921 Assemble for the 68010. 10922 10923 `-m68020' 10924 `-m68ec020' 10925 Assemble for the 68020. This is normally the default. 10926 10927 `-m68030' 10928 `-m68ec030' 10929 Assemble for the 68030. 10930 10931 `-m68040' 10932 `-m68ec040' 10933 Assemble for the 68040. 10934 10935 `-m68060' 10936 `-m68ec060' 10937 Assemble for the 68060. 10938 10939 `-mcpu32' 10940 `-m68330' 10941 `-m68331' 10942 `-m68332' 10943 `-m68333' 10944 `-m68334' 10945 `-m68336' 10946 `-m68340' 10947 `-m68341' 10948 `-m68349' 10949 `-m68360' 10950 Assemble for the CPU32 family of chips. 10951 10952 `-m5200' 10953 10954 `-m5202' 10955 10956 `-m5204' 10957 10958 `-m5206' 10959 10960 `-m5206e' 10961 10962 `-m521x' 10963 10964 `-m5249' 10965 10966 `-m528x' 10967 10968 `-m5307' 10969 10970 `-m5407' 10971 10972 `-m547x' 10973 10974 `-m548x' 10975 10976 `-mcfv4' 10977 10978 `-mcfv4e' 10979 Assemble for the ColdFire family of chips. 10980 10981 `-m68881' 10982 `-m68882' 10983 Assemble 68881 floating point instructions. This is the 10984 default for the 68020, 68030, and the CPU32. The 68040 and 10985 68060 always support floating point instructions. 10986 10987 `-mno-68881' 10988 Do not assemble 68881 floating point instructions. This is 10989 the default for 68000 and the 68010. The 68040 and 68060 10990 always support floating point instructions, even if this 10991 option is used. 10992 10993 `-m68851' 10994 Assemble 68851 MMU instructions. This is the default for the 10995 68020, 68030, and 68060. The 68040 accepts a somewhat 10996 different set of MMU instructions; `-m68851' and `-m68040' 10997 should not be used together. 10998 10999 `-mno-68851' 11000 Do not assemble 68851 MMU instructions. This is the default 11001 for the 68000, 68010, and the CPU32. The 68040 accepts a 11002 somewhat different set of MMU instructions. 11003 11004 11005 File: as.info, Node: M68K-Syntax, Next: M68K-Moto-Syntax, Prev: M68K-Opts, Up: M68K-Dependent 11006 11007 9.20.2 Syntax 11008 ------------- 11009 11010 This syntax for the Motorola 680x0 was developed at MIT. 11011 11012 The 680x0 version of `as' uses instructions names and syntax 11013 compatible with the Sun assembler. Intervening periods are ignored; 11014 for example, `movl' is equivalent to `mov.l'. 11015 11016 In the following table APC stands for any of the address registers 11017 (`%a0' through `%a7'), the program counter (`%pc'), the zero-address 11018 relative to the program counter (`%zpc'), a suppressed address register 11019 (`%za0' through `%za7'), or it may be omitted entirely. The use of 11020 SIZE means one of `w' or `l', and it may be omitted, along with the 11021 leading colon, unless a scale is also specified. The use of SCALE 11022 means one of `1', `2', `4', or `8', and it may always be omitted along 11023 with the leading colon. 11024 11025 The following addressing modes are understood: 11026 "Immediate" 11027 `#NUMBER' 11028 11029 "Data Register" 11030 `%d0' through `%d7' 11031 11032 "Address Register" 11033 `%a0' through `%a7' 11034 `%a7' is also known as `%sp', i.e., the Stack Pointer. `%a6' is 11035 also known as `%fp', the Frame Pointer. 11036 11037 "Address Register Indirect" 11038 `%a0@' through `%a7@' 11039 11040 "Address Register Postincrement" 11041 `%a0@+' through `%a7@+' 11042 11043 "Address Register Predecrement" 11044 `%a0@-' through `%a7@-' 11045 11046 "Indirect Plus Offset" 11047 `APC@(NUMBER)' 11048 11049 "Index" 11050 `APC@(NUMBER,REGISTER:SIZE:SCALE)' 11051 11052 The NUMBER may be omitted. 11053 11054 "Postindex" 11055 `APC@(NUMBER)@(ONUMBER,REGISTER:SIZE:SCALE)' 11056 11057 The ONUMBER or the REGISTER, but not both, may be omitted. 11058 11059 "Preindex" 11060 `APC@(NUMBER,REGISTER:SIZE:SCALE)@(ONUMBER)' 11061 11062 The NUMBER may be omitted. Omitting the REGISTER produces the 11063 Postindex addressing mode. 11064 11065 "Absolute" 11066 `SYMBOL', or `DIGITS', optionally followed by `:b', `:w', or `:l'. 11067 11068 11069 File: as.info, Node: M68K-Moto-Syntax, Next: M68K-Float, Prev: M68K-Syntax, Up: M68K-Dependent 11070 11071 9.20.3 Motorola Syntax 11072 ---------------------- 11073 11074 The standard Motorola syntax for this chip differs from the syntax 11075 already discussed (*note Syntax: M68K-Syntax.). `as' can accept 11076 Motorola syntax for operands, even if MIT syntax is used for other 11077 operands in the same instruction. The two kinds of syntax are fully 11078 compatible. 11079 11080 In the following table APC stands for any of the address registers 11081 (`%a0' through `%a7'), the program counter (`%pc'), the zero-address 11082 relative to the program counter (`%zpc'), or a suppressed address 11083 register (`%za0' through `%za7'). The use of SIZE means one of `w' or 11084 `l', and it may always be omitted along with the leading dot. The use 11085 of SCALE means one of `1', `2', `4', or `8', and it may always be 11086 omitted along with the leading asterisk. 11087 11088 The following additional addressing modes are understood: 11089 11090 "Address Register Indirect" 11091 `(%a0)' through `(%a7)' 11092 `%a7' is also known as `%sp', i.e., the Stack Pointer. `%a6' is 11093 also known as `%fp', the Frame Pointer. 11094 11095 "Address Register Postincrement" 11096 `(%a0)+' through `(%a7)+' 11097 11098 "Address Register Predecrement" 11099 `-(%a0)' through `-(%a7)' 11100 11101 "Indirect Plus Offset" 11102 `NUMBER(%A0)' through `NUMBER(%A7)', or `NUMBER(%PC)'. 11103 11104 The NUMBER may also appear within the parentheses, as in 11105 `(NUMBER,%A0)'. When used with the PC, the NUMBER may be omitted 11106 (with an address register, omitting the NUMBER produces Address 11107 Register Indirect mode). 11108 11109 "Index" 11110 `NUMBER(APC,REGISTER.SIZE*SCALE)' 11111 11112 The NUMBER may be omitted, or it may appear within the 11113 parentheses. The APC may be omitted. The REGISTER and the APC 11114 may appear in either order. If both APC and REGISTER are address 11115 registers, and the SIZE and SCALE are omitted, then the first 11116 register is taken as the base register, and the second as the 11117 index register. 11118 11119 "Postindex" 11120 `([NUMBER,APC],REGISTER.SIZE*SCALE,ONUMBER)' 11121 11122 The ONUMBER, or the REGISTER, or both, may be omitted. Either the 11123 NUMBER or the APC may be omitted, but not both. 11124 11125 "Preindex" 11126 `([NUMBER,APC,REGISTER.SIZE*SCALE],ONUMBER)' 11127 11128 The NUMBER, or the APC, or the REGISTER, or any two of them, may 11129 be omitted. The ONUMBER may be omitted. The REGISTER and the APC 11130 may appear in either order. If both APC and REGISTER are address 11131 registers, and the SIZE and SCALE are omitted, then the first 11132 register is taken as the base register, and the second as the 11133 index register. 11134 11135 11136 File: as.info, Node: M68K-Float, Next: M68K-Directives, Prev: M68K-Moto-Syntax, Up: M68K-Dependent 11137 11138 9.20.4 Floating Point 11139 --------------------- 11140 11141 Packed decimal (P) format floating literals are not supported. Feel 11142 free to add the code! 11143 11144 The floating point formats generated by directives are these. 11145 11146 `.float' 11147 `Single' precision floating point constants. 11148 11149 `.double' 11150 `Double' precision floating point constants. 11151 11152 `.extend' 11153 `.ldouble' 11154 `Extended' precision (`long double') floating point constants. 11155 11156 11157 File: as.info, Node: M68K-Directives, Next: M68K-opcodes, Prev: M68K-Float, Up: M68K-Dependent 11158 11159 9.20.5 680x0 Machine Directives 11160 ------------------------------- 11161 11162 In order to be compatible with the Sun assembler the 680x0 assembler 11163 understands the following directives. 11164 11165 `.data1' 11166 This directive is identical to a `.data 1' directive. 11167 11168 `.data2' 11169 This directive is identical to a `.data 2' directive. 11170 11171 `.even' 11172 This directive is a special case of the `.align' directive; it 11173 aligns the output to an even byte boundary. 11174 11175 `.skip' 11176 This directive is identical to a `.space' directive. 11177 11178 `.arch NAME' 11179 Select the target architecture and extension features. Valid 11180 values for NAME are the same as for the `-march' command line 11181 option. This directive cannot be specified after any instructions 11182 have been assembled. If it is given multiple times, or in 11183 conjunction with the `-march' option, all uses must be for the 11184 same architecture and extension set. 11185 11186 `.cpu NAME' 11187 Select the target cpu. Valid valuse for NAME are the same as for 11188 the `-mcpu' command line option. This directive cannot be 11189 specified after any instructions have been assembled. If it is 11190 given multiple times, or in conjunction with the `-mopt' option, 11191 all uses must be for the same cpu. 11192 11193 11194 11195 File: as.info, Node: M68K-opcodes, Prev: M68K-Directives, Up: M68K-Dependent 11196 11197 9.20.6 Opcodes 11198 -------------- 11199 11200 * Menu: 11201 11202 * M68K-Branch:: Branch Improvement 11203 * M68K-Chars:: Special Characters 11204 11205 11206 File: as.info, Node: M68K-Branch, Next: M68K-Chars, Up: M68K-opcodes 11207 11208 9.20.6.1 Branch Improvement 11209 ........................... 11210 11211 Certain pseudo opcodes are permitted for branch instructions. They 11212 expand to the shortest branch instruction that reach the target. 11213 Generally these mnemonics are made by substituting `j' for `b' at the 11214 start of a Motorola mnemonic. 11215 11216 The following table summarizes the pseudo-operations. A `*' flags 11217 cases that are more fully described after the table: 11218 11219 Displacement 11220 +------------------------------------------------------------ 11221 | 68020 68000/10, not PC-relative OK 11222 Pseudo-Op |BYTE WORD LONG ABSOLUTE LONG JUMP ** 11223 +------------------------------------------------------------ 11224 jbsr |bsrs bsrw bsrl jsr 11225 jra |bras braw bral jmp 11226 * jXX |bXXs bXXw bXXl bNXs;jmp 11227 * dbXX | N/A dbXXw dbXX;bras;bral dbXX;bras;jmp 11228 fjXX | N/A fbXXw fbXXl N/A 11229 11230 XX: condition 11231 NX: negative of condition XX 11232 `*'--see full description below 11233 `**'--this expansion mode is disallowed by `--pcrel' 11234 11235 `jbsr' 11236 `jra' 11237 These are the simplest jump pseudo-operations; they always map to 11238 one particular machine instruction, depending on the displacement 11239 to the branch target. This instruction will be a byte or word 11240 branch is that is sufficient. Otherwise, a long branch will be 11241 emitted if available. If no long branches are available and the 11242 `--pcrel' option is not given, an absolute long jump will be 11243 emitted instead. If no long branches are available, the `--pcrel' 11244 option is given, and a word branch cannot reach the target, an 11245 error message is generated. 11246 11247 In addition to standard branch operands, `as' allows these 11248 pseudo-operations to have all operands that are allowed for jsr 11249 and jmp, substituting these instructions if the operand given is 11250 not valid for a branch instruction. 11251 11252 `jXX' 11253 Here, `jXX' stands for an entire family of pseudo-operations, 11254 where XX is a conditional branch or condition-code test. The full 11255 list of pseudo-ops in this family is: 11256 jhi jls jcc jcs jne jeq jvc 11257 jvs jpl jmi jge jlt jgt jle 11258 11259 Usually, each of these pseudo-operations expands to a single branch 11260 instruction. However, if a word branch is not sufficient, no long 11261 branches are available, and the `--pcrel' option is not given, `as' 11262 issues a longer code fragment in terms of NX, the opposite 11263 condition to XX. For example, under these conditions: 11264 jXX foo 11265 gives 11266 bNXs oof 11267 jmp foo 11268 oof: 11269 11270 `dbXX' 11271 The full family of pseudo-operations covered here is 11272 dbhi dbls dbcc dbcs dbne dbeq dbvc 11273 dbvs dbpl dbmi dbge dblt dbgt dble 11274 dbf dbra dbt 11275 11276 Motorola `dbXX' instructions allow word displacements only. When 11277 a word displacement is sufficient, each of these pseudo-operations 11278 expands to the corresponding Motorola instruction. When a word 11279 displacement is not sufficient and long branches are available, 11280 when the source reads `dbXX foo', `as' emits 11281 dbXX oo1 11282 bras oo2 11283 oo1:bral foo 11284 oo2: 11285 11286 If, however, long branches are not available and the `--pcrel' 11287 option is not given, `as' emits 11288 dbXX oo1 11289 bras oo2 11290 oo1:jmp foo 11291 oo2: 11292 11293 `fjXX' 11294 This family includes 11295 fjne fjeq fjge fjlt fjgt fjle fjf 11296 fjt fjgl fjgle fjnge fjngl fjngle fjngt 11297 fjnle fjnlt fjoge fjogl fjogt fjole fjolt 11298 fjor fjseq fjsf fjsne fjst fjueq fjuge 11299 fjugt fjule fjult fjun 11300 11301 Each of these pseudo-operations always expands to a single Motorola 11302 coprocessor branch instruction, word or long. All Motorola 11303 coprocessor branch instructions allow both word and long 11304 displacements. 11305 11306 11307 11308 File: as.info, Node: M68K-Chars, Prev: M68K-Branch, Up: M68K-opcodes 11309 11310 9.20.6.2 Special Characters 11311 ........................... 11312 11313 The immediate character is `#' for Sun compatibility. The line-comment 11314 character is `|' (unless the `--bitwise-or' option is used). If a `#' 11315 appears at the beginning of a line, it is treated as a comment unless 11316 it looks like `# line file', in which case it is treated normally. 11317 11318 11319 File: as.info, Node: M68HC11-Dependent, Next: MIPS-Dependent, Prev: M68K-Dependent, Up: Machine Dependencies 11320 11321 9.21 M68HC11 and M68HC12 Dependent Features 11322 =========================================== 11323 11324 * Menu: 11325 11326 * M68HC11-Opts:: M68HC11 and M68HC12 Options 11327 * M68HC11-Syntax:: Syntax 11328 * M68HC11-Modifiers:: Symbolic Operand Modifiers 11329 * M68HC11-Directives:: Assembler Directives 11330 * M68HC11-Float:: Floating Point 11331 * M68HC11-opcodes:: Opcodes 11332 11333 11334 File: as.info, Node: M68HC11-Opts, Next: M68HC11-Syntax, Up: M68HC11-Dependent 11335 11336 9.21.1 M68HC11 and M68HC12 Options 11337 ---------------------------------- 11338 11339 The Motorola 68HC11 and 68HC12 version of `as' have a few machine 11340 dependent options. 11341 11342 `-m68hc11' 11343 This option switches the assembler in the M68HC11 mode. In this 11344 mode, the assembler only accepts 68HC11 operands and mnemonics. It 11345 produces code for the 68HC11. 11346 11347 `-m68hc12' 11348 This option switches the assembler in the M68HC12 mode. In this 11349 mode, the assembler also accepts 68HC12 operands and mnemonics. It 11350 produces code for the 68HC12. A few 68HC11 instructions are 11351 replaced by some 68HC12 instructions as recommended by Motorola 11352 specifications. 11353 11354 `-m68hcs12' 11355 This option switches the assembler in the M68HCS12 mode. This 11356 mode is similar to `-m68hc12' but specifies to assemble for the 11357 68HCS12 series. The only difference is on the assembling of the 11358 `movb' and `movw' instruction when a PC-relative operand is used. 11359 11360 `-mshort' 11361 This option controls the ABI and indicates to use a 16-bit integer 11362 ABI. It has no effect on the assembled instructions. This is the 11363 default. 11364 11365 `-mlong' 11366 This option controls the ABI and indicates to use a 32-bit integer 11367 ABI. 11368 11369 `-mshort-double' 11370 This option controls the ABI and indicates to use a 32-bit float 11371 ABI. This is the default. 11372 11373 `-mlong-double' 11374 This option controls the ABI and indicates to use a 64-bit float 11375 ABI. 11376 11377 `--strict-direct-mode' 11378 You can use the `--strict-direct-mode' option to disable the 11379 automatic translation of direct page mode addressing into extended 11380 mode when the instruction does not support direct mode. For 11381 example, the `clr' instruction does not support direct page mode 11382 addressing. When it is used with the direct page mode, `as' will 11383 ignore it and generate an absolute addressing. This option 11384 prevents `as' from doing this, and the wrong usage of the direct 11385 page mode will raise an error. 11386 11387 `--short-branches' 11388 The `--short-branches' option turns off the translation of 11389 relative branches into absolute branches when the branch offset is 11390 out of range. By default `as' transforms the relative branch 11391 (`bsr', `bgt', `bge', `beq', `bne', `ble', `blt', `bhi', `bcc', 11392 `bls', `bcs', `bmi', `bvs', `bvs', `bra') into an absolute branch 11393 when the offset is out of the -128 .. 127 range. In that case, 11394 the `bsr' instruction is translated into a `jsr', the `bra' 11395 instruction is translated into a `jmp' and the conditional 11396 branches instructions are inverted and followed by a `jmp'. This 11397 option disables these translations and `as' will generate an error 11398 if a relative branch is out of range. This option does not affect 11399 the optimization associated to the `jbra', `jbsr' and `jbXX' 11400 pseudo opcodes. 11401 11402 `--force-long-branches' 11403 The `--force-long-branches' option forces the translation of 11404 relative branches into absolute branches. This option does not 11405 affect the optimization associated to the `jbra', `jbsr' and 11406 `jbXX' pseudo opcodes. 11407 11408 `--print-insn-syntax' 11409 You can use the `--print-insn-syntax' option to obtain the syntax 11410 description of the instruction when an error is detected. 11411 11412 `--print-opcodes' 11413 The `--print-opcodes' option prints the list of all the 11414 instructions with their syntax. The first item of each line 11415 represents the instruction name and the rest of the line indicates 11416 the possible operands for that instruction. The list is printed in 11417 alphabetical order. Once the list is printed `as' exits. 11418 11419 `--generate-example' 11420 The `--generate-example' option is similar to `--print-opcodes' 11421 but it generates an example for each instruction instead. 11422 11423 11424 File: as.info, Node: M68HC11-Syntax, Next: M68HC11-Modifiers, Prev: M68HC11-Opts, Up: M68HC11-Dependent 11425 11426 9.21.2 Syntax 11427 ------------- 11428 11429 In the M68HC11 syntax, the instruction name comes first and it may be 11430 followed by one or several operands (up to three). Operands are 11431 separated by comma (`,'). In the normal mode, `as' will complain if too 11432 many operands are specified for a given instruction. In the MRI mode 11433 (turned on with `-M' option), it will treat them as comments. Example: 11434 11435 inx 11436 lda #23 11437 bset 2,x #4 11438 brclr *bot #8 foo 11439 11440 The following addressing modes are understood for 68HC11 and 68HC12: 11441 "Immediate" 11442 `#NUMBER' 11443 11444 "Address Register" 11445 `NUMBER,X', `NUMBER,Y' 11446 11447 The NUMBER may be omitted in which case 0 is assumed. 11448 11449 "Direct Addressing mode" 11450 `*SYMBOL', or `*DIGITS' 11451 11452 "Absolute" 11453 `SYMBOL', or `DIGITS' 11454 11455 The M68HC12 has other more complex addressing modes. All of them are 11456 supported and they are represented below: 11457 11458 "Constant Offset Indexed Addressing Mode" 11459 `NUMBER,REG' 11460 11461 The NUMBER may be omitted in which case 0 is assumed. The 11462 register can be either `X', `Y', `SP' or `PC'. The assembler will 11463 use the smaller post-byte definition according to the constant 11464 value (5-bit constant offset, 9-bit constant offset or 16-bit 11465 constant offset). If the constant is not known by the assembler 11466 it will use the 16-bit constant offset post-byte and the value 11467 will be resolved at link time. 11468 11469 "Offset Indexed Indirect" 11470 `[NUMBER,REG]' 11471 11472 The register can be either `X', `Y', `SP' or `PC'. 11473 11474 "Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement" 11475 `NUMBER,-REG' `NUMBER,+REG' `NUMBER,REG-' `NUMBER,REG+' 11476 11477 The number must be in the range `-8'..`+8' and must not be 0. The 11478 register can be either `X', `Y', `SP' or `PC'. 11479 11480 "Accumulator Offset" 11481 `ACC,REG' 11482 11483 The accumulator register can be either `A', `B' or `D'. The 11484 register can be either `X', `Y', `SP' or `PC'. 11485 11486 "Accumulator D offset indexed-indirect" 11487 `[D,REG]' 11488 11489 The register can be either `X', `Y', `SP' or `PC'. 11490 11491 11492 For example: 11493 11494 ldab 1024,sp 11495 ldd [10,x] 11496 orab 3,+x 11497 stab -2,y- 11498 ldx a,pc 11499 sty [d,sp] 11500 11501 11502 File: as.info, Node: M68HC11-Modifiers, Next: M68HC11-Directives, Prev: M68HC11-Syntax, Up: M68HC11-Dependent 11503 11504 9.21.3 Symbolic Operand Modifiers 11505 --------------------------------- 11506 11507 The assembler supports several modifiers when using symbol addresses in 11508 68HC11 and 68HC12 instruction operands. The general syntax is the 11509 following: 11510 11511 %modifier(symbol) 11512 11513 `%addr' 11514 This modifier indicates to the assembler and linker to use the 11515 16-bit physical address corresponding to the symbol. This is 11516 intended to be used on memory window systems to map a symbol in 11517 the memory bank window. If the symbol is in a memory expansion 11518 part, the physical address corresponds to the symbol address 11519 within the memory bank window. If the symbol is not in a memory 11520 expansion part, this is the symbol address (using or not using the 11521 %addr modifier has no effect in that case). 11522 11523 `%page' 11524 This modifier indicates to use the memory page number corresponding 11525 to the symbol. If the symbol is in a memory expansion part, its 11526 page number is computed by the linker as a number used to map the 11527 page containing the symbol in the memory bank window. If the 11528 symbol is not in a memory expansion part, the page number is 0. 11529 11530 `%hi' 11531 This modifier indicates to use the 8-bit high part of the physical 11532 address of the symbol. 11533 11534 `%lo' 11535 This modifier indicates to use the 8-bit low part of the physical 11536 address of the symbol. 11537 11538 11539 For example a 68HC12 call to a function `foo_example' stored in 11540 memory expansion part could be written as follows: 11541 11542 call %addr(foo_example),%page(foo_example) 11543 11544 and this is equivalent to 11545 11546 call foo_example 11547 11548 And for 68HC11 it could be written as follows: 11549 11550 ldab #%page(foo_example) 11551 stab _page_switch 11552 jsr %addr(foo_example) 11553 11554 11555 File: as.info, Node: M68HC11-Directives, Next: M68HC11-Float, Prev: M68HC11-Modifiers, Up: M68HC11-Dependent 11556 11557 9.21.4 Assembler Directives 11558 --------------------------- 11559 11560 The 68HC11 and 68HC12 version of `as' have the following specific 11561 assembler directives: 11562 11563 `.relax' 11564 The relax directive is used by the `GNU Compiler' to emit a 11565 specific relocation to mark a group of instructions for linker 11566 relaxation. The sequence of instructions within the group must be 11567 known to the linker so that relaxation can be performed. 11568 11569 `.mode [mshort|mlong|mshort-double|mlong-double]' 11570 This directive specifies the ABI. It overrides the `-mshort', 11571 `-mlong', `-mshort-double' and `-mlong-double' options. 11572 11573 `.far SYMBOL' 11574 This directive marks the symbol as a `far' symbol meaning that it 11575 uses a `call/rtc' calling convention as opposed to `jsr/rts'. 11576 During a final link, the linker will identify references to the 11577 `far' symbol and will verify the proper calling convention. 11578 11579 `.interrupt SYMBOL' 11580 This directive marks the symbol as an interrupt entry point. This 11581 information is then used by the debugger to correctly unwind the 11582 frame across interrupts. 11583 11584 `.xrefb SYMBOL' 11585 This directive is defined for compatibility with the 11586 `Specification for Motorola 8 and 16-Bit Assembly Language Input 11587 Standard' and is ignored. 11588 11589 11590 11591 File: as.info, Node: M68HC11-Float, Next: M68HC11-opcodes, Prev: M68HC11-Directives, Up: M68HC11-Dependent 11592 11593 9.21.5 Floating Point 11594 --------------------- 11595 11596 Packed decimal (P) format floating literals are not supported. Feel 11597 free to add the code! 11598 11599 The floating point formats generated by directives are these. 11600 11601 `.float' 11602 `Single' precision floating point constants. 11603 11604 `.double' 11605 `Double' precision floating point constants. 11606 11607 `.extend' 11608 `.ldouble' 11609 `Extended' precision (`long double') floating point constants. 11610 11611 11612 File: as.info, Node: M68HC11-opcodes, Prev: M68HC11-Float, Up: M68HC11-Dependent 11613 11614 9.21.6 Opcodes 11615 -------------- 11616 11617 * Menu: 11618 11619 * M68HC11-Branch:: Branch Improvement 11620 11621 11622 File: as.info, Node: M68HC11-Branch, Up: M68HC11-opcodes 11623 11624 9.21.6.1 Branch Improvement 11625 ........................... 11626 11627 Certain pseudo opcodes are permitted for branch instructions. They 11628 expand to the shortest branch instruction that reach the target. 11629 Generally these mnemonics are made by prepending `j' to the start of 11630 Motorola mnemonic. These pseudo opcodes are not affected by the 11631 `--short-branches' or `--force-long-branches' options. 11632 11633 The following table summarizes the pseudo-operations. 11634 11635 Displacement Width 11636 +-------------------------------------------------------------+ 11637 | Options | 11638 | --short-branches --force-long-branches | 11639 +--------------------------+----------------------------------+ 11640 Op |BYTE WORD | BYTE WORD | 11641 +--------------------------+----------------------------------+ 11642 bsr | bsr <pc-rel> <error> | jsr <abs> | 11643 bra | bra <pc-rel> <error> | jmp <abs> | 11644 jbsr | bsr <pc-rel> jsr <abs> | bsr <pc-rel> jsr <abs> | 11645 jbra | bra <pc-rel> jmp <abs> | bra <pc-rel> jmp <abs> | 11646 bXX | bXX <pc-rel> <error> | bNX +3; jmp <abs> | 11647 jbXX | bXX <pc-rel> bNX +3; | bXX <pc-rel> bNX +3; jmp <abs> | 11648 | jmp <abs> | | 11649 +--------------------------+----------------------------------+ 11650 XX: condition 11651 NX: negative of condition XX 11652 11653 `jbsr' 11654 `jbra' 11655 These are the simplest jump pseudo-operations; they always map to 11656 one particular machine instruction, depending on the displacement 11657 to the branch target. 11658 11659 `jbXX' 11660 Here, `jbXX' stands for an entire family of pseudo-operations, 11661 where XX is a conditional branch or condition-code test. The full 11662 list of pseudo-ops in this family is: 11663 jbcc jbeq jbge jbgt jbhi jbvs jbpl jblo 11664 jbcs jbne jblt jble jbls jbvc jbmi 11665 11666 For the cases of non-PC relative displacements and long 11667 displacements, `as' issues a longer code fragment in terms of NX, 11668 the opposite condition to XX. For example, for the non-PC 11669 relative case: 11670 jbXX foo 11671 gives 11672 bNXs oof 11673 jmp foo 11674 oof: 11675 11676 11677 11678 File: as.info, Node: MIPS-Dependent, Next: MMIX-Dependent, Prev: M68HC11-Dependent, Up: Machine Dependencies 11679 11680 9.22 MIPS Dependent Features 11681 ============================ 11682 11683 GNU `as' for MIPS architectures supports several different MIPS 11684 processors, and MIPS ISA levels I through V, MIPS32, and MIPS64. For 11685 information about the MIPS instruction set, see `MIPS RISC 11686 Architecture', by Kane and Heindrich (Prentice-Hall). For an overview 11687 of MIPS assembly conventions, see "Appendix D: Assembly Language 11688 Programming" in the same work. 11689 11690 * Menu: 11691 11692 * MIPS Opts:: Assembler options 11693 * MIPS Object:: ECOFF object code 11694 * MIPS Stabs:: Directives for debugging information 11695 * MIPS ISA:: Directives to override the ISA level 11696 * MIPS symbol sizes:: Directives to override the size of symbols 11697 * MIPS autoextend:: Directives for extending MIPS 16 bit instructions 11698 * MIPS insn:: Directive to mark data as an instruction 11699 * MIPS option stack:: Directives to save and restore options 11700 * MIPS ASE instruction generation overrides:: Directives to control 11701 generation of MIPS ASE instructions 11702 * MIPS floating-point:: Directives to override floating-point options 11703 11704 11705 File: as.info, Node: MIPS Opts, Next: MIPS Object, Up: MIPS-Dependent 11706 11707 9.22.1 Assembler options 11708 ------------------------ 11709 11710 The MIPS configurations of GNU `as' support these special options: 11711 11712 `-G NUM' 11713 This option sets the largest size of an object that can be 11714 referenced implicitly with the `gp' register. It is only accepted 11715 for targets that use ECOFF format. The default value is 8. 11716 11717 `-EB' 11718 `-EL' 11719 Any MIPS configuration of `as' can select big-endian or 11720 little-endian output at run time (unlike the other GNU development 11721 tools, which must be configured for one or the other). Use `-EB' 11722 to select big-endian output, and `-EL' for little-endian. 11723 11724 `-KPIC' 11725 Generate SVR4-style PIC. This option tells the assembler to 11726 generate SVR4-style position-independent macro expansions. It 11727 also tells the assembler to mark the output file as PIC. 11728 11729 `-mvxworks-pic' 11730 Generate VxWorks PIC. This option tells the assembler to generate 11731 VxWorks-style position-independent macro expansions. 11732 11733 `-mips1' 11734 `-mips2' 11735 `-mips3' 11736 `-mips4' 11737 `-mips5' 11738 `-mips32' 11739 `-mips32r2' 11740 `-mips64' 11741 `-mips64r2' 11742 Generate code for a particular MIPS Instruction Set Architecture 11743 level. `-mips1' corresponds to the R2000 and R3000 processors, 11744 `-mips2' to the R6000 processor, `-mips3' to the R4000 processor, 11745 and `-mips4' to the R8000 and R10000 processors. `-mips5', 11746 `-mips32', `-mips32r2', `-mips64', and `-mips64r2' correspond to 11747 generic MIPS V, MIPS32, MIPS32 RELEASE 2, MIPS64, and MIPS64 11748 RELEASE 2 ISA processors, respectively. You can also switch 11749 instruction sets during the assembly; see *note Directives to 11750 override the ISA level: MIPS ISA. 11751 11752 `-mgp32' 11753 `-mfp32' 11754 Some macros have different expansions for 32-bit and 64-bit 11755 registers. The register sizes are normally inferred from the ISA 11756 and ABI, but these flags force a certain group of registers to be 11757 treated as 32 bits wide at all times. `-mgp32' controls the size 11758 of general-purpose registers and `-mfp32' controls the size of 11759 floating-point registers. 11760 11761 The `.set gp=32' and `.set fp=32' directives allow the size of 11762 registers to be changed for parts of an object. The default value 11763 is restored by `.set gp=default' and `.set fp=default'. 11764 11765 On some MIPS variants there is a 32-bit mode flag; when this flag 11766 is set, 64-bit instructions generate a trap. Also, some 32-bit 11767 OSes only save the 32-bit registers on a context switch, so it is 11768 essential never to use the 64-bit registers. 11769 11770 `-mgp64' 11771 `-mfp64' 11772 Assume that 64-bit registers are available. This is provided in 11773 the interests of symmetry with `-mgp32' and `-mfp32'. 11774 11775 The `.set gp=64' and `.set fp=64' directives allow the size of 11776 registers to be changed for parts of an object. The default value 11777 is restored by `.set gp=default' and `.set fp=default'. 11778 11779 `-mips16' 11780 `-no-mips16' 11781 Generate code for the MIPS 16 processor. This is equivalent to 11782 putting `.set mips16' at the start of the assembly file. 11783 `-no-mips16' turns off this option. 11784 11785 `-msmartmips' 11786 `-mno-smartmips' 11787 Enables the SmartMIPS extensions to the MIPS32 instruction set, 11788 which provides a number of new instructions which target smartcard 11789 and cryptographic applications. This is equivalent to putting 11790 `.set smartmips' at the start of the assembly file. 11791 `-mno-smartmips' turns off this option. 11792 11793 `-mips3d' 11794 `-no-mips3d' 11795 Generate code for the MIPS-3D Application Specific Extension. 11796 This tells the assembler to accept MIPS-3D instructions. 11797 `-no-mips3d' turns off this option. 11798 11799 `-mdmx' 11800 `-no-mdmx' 11801 Generate code for the MDMX Application Specific Extension. This 11802 tells the assembler to accept MDMX instructions. `-no-mdmx' turns 11803 off this option. 11804 11805 `-mdsp' 11806 `-mno-dsp' 11807 Generate code for the DSP Release 1 Application Specific Extension. 11808 This tells the assembler to accept DSP Release 1 instructions. 11809 `-mno-dsp' turns off this option. 11810 11811 `-mdspr2' 11812 `-mno-dspr2' 11813 Generate code for the DSP Release 2 Application Specific Extension. 11814 This option implies -mdsp. This tells the assembler to accept DSP 11815 Release 2 instructions. `-mno-dspr2' turns off this option. 11816 11817 `-mmt' 11818 `-mno-mt' 11819 Generate code for the MT Application Specific Extension. This 11820 tells the assembler to accept MT instructions. `-mno-mt' turns 11821 off this option. 11822 11823 `-mfix7000' 11824 `-mno-fix7000' 11825 Cause nops to be inserted if the read of the destination register 11826 of an mfhi or mflo instruction occurs in the following two 11827 instructions. 11828 11829 `-mfix-vr4120' 11830 `-no-mfix-vr4120' 11831 Insert nops to work around certain VR4120 errata. This option is 11832 intended to be used on GCC-generated code: it is not designed to 11833 catch all problems in hand-written assembler code. 11834 11835 `-mfix-vr4130' 11836 `-no-mfix-vr4130' 11837 Insert nops to work around the VR4130 `mflo'/`mfhi' errata. 11838 11839 `-m4010' 11840 `-no-m4010' 11841 Generate code for the LSI R4010 chip. This tells the assembler to 11842 accept the R4010 specific instructions (`addciu', `ffc', etc.), 11843 and to not schedule `nop' instructions around accesses to the `HI' 11844 and `LO' registers. `-no-m4010' turns off this option. 11845 11846 `-m4650' 11847 `-no-m4650' 11848 Generate code for the MIPS R4650 chip. This tells the assembler 11849 to accept the `mad' and `madu' instruction, and to not schedule 11850 `nop' instructions around accesses to the `HI' and `LO' registers. 11851 `-no-m4650' turns off this option. 11852 11853 `-m3900' 11854 `-no-m3900' 11855 `-m4100' 11856 `-no-m4100' 11857 For each option `-mNNNN', generate code for the MIPS RNNNN chip. 11858 This tells the assembler to accept instructions specific to that 11859 chip, and to schedule for that chip's hazards. 11860 11861 `-march=CPU' 11862 Generate code for a particular MIPS cpu. It is exactly equivalent 11863 to `-mCPU', except that there are more value of CPU understood. 11864 Valid CPU value are: 11865 11866 2000, 3000, 3900, 4000, 4010, 4100, 4111, vr4120, vr4130, 11867 vr4181, 4300, 4400, 4600, 4650, 5000, rm5200, rm5230, rm5231, 11868 rm5261, rm5721, vr5400, vr5500, 6000, rm7000, 8000, rm9000, 11869 10000, 12000, 4kc, 4km, 4kp, 4ksc, 4kec, 4kem, 4kep, 4ksd, 11870 m4k, m4kp, 24kc, 24kf2_1, 24kf, 24kf1_1, 24kec, 24kef2_1, 11871 24kef, 24kef1_1, 34kc, 34kf2_1, 34kf, 34kf1_1, 74kc, 74kf2_1, 11872 74kf, 74kf1_1, 74kf3_2, 5kc, 5kf, 20kc, 25kf, sb1, sb1a, 11873 loongson2e, loongson2f, octeon 11874 11875 For compatibility reasons, `Nx' and `Bfx' are accepted as synonyms 11876 for `Nf1_1'. These values are deprecated. 11877 11878 `-mtune=CPU' 11879 Schedule and tune for a particular MIPS cpu. Valid CPU values are 11880 identical to `-march=CPU'. 11881 11882 `-mabi=ABI' 11883 Record which ABI the source code uses. The recognized arguments 11884 are: `32', `n32', `o64', `64' and `eabi'. 11885 11886 `-msym32' 11887 `-mno-sym32' 11888 Equivalent to adding `.set sym32' or `.set nosym32' to the 11889 beginning of the assembler input. *Note MIPS symbol sizes::. 11890 11891 `-nocpp' 11892 This option is ignored. It is accepted for command-line 11893 compatibility with other assemblers, which use it to turn off C 11894 style preprocessing. With GNU `as', there is no need for 11895 `-nocpp', because the GNU assembler itself never runs the C 11896 preprocessor. 11897 11898 `-msoft-float' 11899 `-mhard-float' 11900 Disable or enable floating-point instructions. Note that by 11901 default floating-point instructions are always allowed even with 11902 CPU targets that don't have support for these instructions. 11903 11904 `-msingle-float' 11905 `-mdouble-float' 11906 Disable or enable double-precision floating-point operations. Note 11907 that by default double-precision floating-point operations are 11908 always allowed even with CPU targets that don't have support for 11909 these operations. 11910 11911 `--construct-floats' 11912 `--no-construct-floats' 11913 The `--no-construct-floats' option disables the construction of 11914 double width floating point constants by loading the two halves of 11915 the value into the two single width floating point registers that 11916 make up the double width register. This feature is useful if the 11917 processor support the FR bit in its status register, and this bit 11918 is known (by the programmer) to be set. This bit prevents the 11919 aliasing of the double width register by the single width 11920 registers. 11921 11922 By default `--construct-floats' is selected, allowing construction 11923 of these floating point constants. 11924 11925 `--trap' 11926 `--no-break' 11927 `as' automatically macro expands certain division and 11928 multiplication instructions to check for overflow and division by 11929 zero. This option causes `as' to generate code to take a trap 11930 exception rather than a break exception when an error is detected. 11931 The trap instructions are only supported at Instruction Set 11932 Architecture level 2 and higher. 11933 11934 `--break' 11935 `--no-trap' 11936 Generate code to take a break exception rather than a trap 11937 exception when an error is detected. This is the default. 11938 11939 `-mpdr' 11940 `-mno-pdr' 11941 Control generation of `.pdr' sections. Off by default on IRIX, on 11942 elsewhere. 11943 11944 `-mshared' 11945 `-mno-shared' 11946 When generating code using the Unix calling conventions (selected 11947 by `-KPIC' or `-mcall_shared'), gas will normally generate code 11948 which can go into a shared library. The `-mno-shared' option 11949 tells gas to generate code which uses the calling convention, but 11950 can not go into a shared library. The resulting code is slightly 11951 more efficient. This option only affects the handling of the 11952 `.cpload' and `.cpsetup' pseudo-ops. 11953 11954 11955 File: as.info, Node: MIPS Object, Next: MIPS Stabs, Prev: MIPS Opts, Up: MIPS-Dependent 11956 11957 9.22.2 MIPS ECOFF object code 11958 ----------------------------- 11959 11960 Assembling for a MIPS ECOFF target supports some additional sections 11961 besides the usual `.text', `.data' and `.bss'. The additional sections 11962 are `.rdata', used for read-only data, `.sdata', used for small data, 11963 and `.sbss', used for small common objects. 11964 11965 When assembling for ECOFF, the assembler uses the `$gp' (`$28') 11966 register to form the address of a "small object". Any object in the 11967 `.sdata' or `.sbss' sections is considered "small" in this sense. For 11968 external objects, or for objects in the `.bss' section, you can use the 11969 `gcc' `-G' option to control the size of objects addressed via `$gp'; 11970 the default value is 8, meaning that a reference to any object eight 11971 bytes or smaller uses `$gp'. Passing `-G 0' to `as' prevents it from 11972 using the `$gp' register on the basis of object size (but the assembler 11973 uses `$gp' for objects in `.sdata' or `sbss' in any case). The size of 11974 an object in the `.bss' section is set by the `.comm' or `.lcomm' 11975 directive that defines it. The size of an external object may be set 11976 with the `.extern' directive. For example, `.extern sym,4' declares 11977 that the object at `sym' is 4 bytes in length, whie leaving `sym' 11978 otherwise undefined. 11979 11980 Using small ECOFF objects requires linker support, and assumes that 11981 the `$gp' register is correctly initialized (normally done 11982 automatically by the startup code). MIPS ECOFF assembly code must not 11983 modify the `$gp' register. 11984 11985 11986 File: as.info, Node: MIPS Stabs, Next: MIPS ISA, Prev: MIPS Object, Up: MIPS-Dependent 11987 11988 9.22.3 Directives for debugging information 11989 ------------------------------------------- 11990 11991 MIPS ECOFF `as' supports several directives used for generating 11992 debugging information which are not support by traditional MIPS 11993 assemblers. These are `.def', `.endef', `.dim', `.file', `.scl', 11994 `.size', `.tag', `.type', `.val', `.stabd', `.stabn', and `.stabs'. 11995 The debugging information generated by the three `.stab' directives can 11996 only be read by GDB, not by traditional MIPS debuggers (this 11997 enhancement is required to fully support C++ debugging). These 11998 directives are primarily used by compilers, not assembly language 11999 programmers! 12000 12001 12002 File: as.info, Node: MIPS symbol sizes, Next: MIPS autoextend, Prev: MIPS ISA, Up: MIPS-Dependent 12003 12004 9.22.4 Directives to override the size of symbols 12005 ------------------------------------------------- 12006 12007 The n64 ABI allows symbols to have any 64-bit value. Although this 12008 provides a great deal of flexibility, it means that some macros have 12009 much longer expansions than their 32-bit counterparts. For example, 12010 the non-PIC expansion of `dla $4,sym' is usually: 12011 12012 lui $4,%highest(sym) 12013 lui $1,%hi(sym) 12014 daddiu $4,$4,%higher(sym) 12015 daddiu $1,$1,%lo(sym) 12016 dsll32 $4,$4,0 12017 daddu $4,$4,$1 12018 12019 whereas the 32-bit expansion is simply: 12020 12021 lui $4,%hi(sym) 12022 daddiu $4,$4,%lo(sym) 12023 12024 n64 code is sometimes constructed in such a way that all symbolic 12025 constants are known to have 32-bit values, and in such cases, it's 12026 preferable to use the 32-bit expansion instead of the 64-bit expansion. 12027 12028 You can use the `.set sym32' directive to tell the assembler that, 12029 from this point on, all expressions of the form `SYMBOL' or `SYMBOL + 12030 OFFSET' have 32-bit values. For example: 12031 12032 .set sym32 12033 dla $4,sym 12034 lw $4,sym+16 12035 sw $4,sym+0x8000($4) 12036 12037 will cause the assembler to treat `sym', `sym+16' and `sym+0x8000' 12038 as 32-bit values. The handling of non-symbolic addresses is not 12039 affected. 12040 12041 The directive `.set nosym32' ends a `.set sym32' block and reverts 12042 to the normal behavior. It is also possible to change the symbol size 12043 using the command-line options `-msym32' and `-mno-sym32'. 12044 12045 These options and directives are always accepted, but at present, 12046 they have no effect for anything other than n64. 12047 12048 12049 File: as.info, Node: MIPS ISA, Next: MIPS symbol sizes, Prev: MIPS Stabs, Up: MIPS-Dependent 12050 12051 9.22.5 Directives to override the ISA level 12052 ------------------------------------------- 12053 12054 GNU `as' supports an additional directive to change the MIPS 12055 Instruction Set Architecture level on the fly: `.set mipsN'. N should 12056 be a number from 0 to 5, or 32, 32r2, 64 or 64r2. The values other 12057 than 0 make the assembler accept instructions for the corresponding ISA 12058 level, from that point on in the assembly. `.set mipsN' affects not 12059 only which instructions are permitted, but also how certain macros are 12060 expanded. `.set mips0' restores the ISA level to its original level: 12061 either the level you selected with command line options, or the default 12062 for your configuration. You can use this feature to permit specific 12063 MIPS3 instructions while assembling in 32 bit mode. Use this directive 12064 with care! 12065 12066 The `.set arch=CPU' directive provides even finer control. It 12067 changes the effective CPU target and allows the assembler to use 12068 instructions specific to a particular CPU. All CPUs supported by the 12069 `-march' command line option are also selectable by this directive. 12070 The original value is restored by `.set arch=default'. 12071 12072 The directive `.set mips16' puts the assembler into MIPS 16 mode, in 12073 which it will assemble instructions for the MIPS 16 processor. Use 12074 `.set nomips16' to return to normal 32 bit mode. 12075 12076 Traditional MIPS assemblers do not support this directive. 12077 12078 12079 File: as.info, Node: MIPS autoextend, Next: MIPS insn, Prev: MIPS symbol sizes, Up: MIPS-Dependent 12080 12081 9.22.6 Directives for extending MIPS 16 bit instructions 12082 -------------------------------------------------------- 12083 12084 By default, MIPS 16 instructions are automatically extended to 32 bits 12085 when necessary. The directive `.set noautoextend' will turn this off. 12086 When `.set noautoextend' is in effect, any 32 bit instruction must be 12087 explicitly extended with the `.e' modifier (e.g., `li.e $4,1000'). The 12088 directive `.set autoextend' may be used to once again automatically 12089 extend instructions when necessary. 12090 12091 This directive is only meaningful when in MIPS 16 mode. Traditional 12092 MIPS assemblers do not support this directive. 12093 12094 12095 File: as.info, Node: MIPS insn, Next: MIPS option stack, Prev: MIPS autoextend, Up: MIPS-Dependent 12096 12097 9.22.7 Directive to mark data as an instruction 12098 ----------------------------------------------- 12099 12100 The `.insn' directive tells `as' that the following data is actually 12101 instructions. This makes a difference in MIPS 16 mode: when loading 12102 the address of a label which precedes instructions, `as' automatically 12103 adds 1 to the value, so that jumping to the loaded address will do the 12104 right thing. 12105 12106 12107 File: as.info, Node: MIPS option stack, Next: MIPS ASE instruction generation overrides, Prev: MIPS insn, Up: MIPS-Dependent 12108 12109 9.22.8 Directives to save and restore options 12110 --------------------------------------------- 12111 12112 The directives `.set push' and `.set pop' may be used to save and 12113 restore the current settings for all the options which are controlled 12114 by `.set'. The `.set push' directive saves the current settings on a 12115 stack. The `.set pop' directive pops the stack and restores the 12116 settings. 12117 12118 These directives can be useful inside an macro which must change an 12119 option such as the ISA level or instruction reordering but does not want 12120 to change the state of the code which invoked the macro. 12121 12122 Traditional MIPS assemblers do not support these directives. 12123 12124 12125 File: as.info, Node: MIPS ASE instruction generation overrides, Next: MIPS floating-point, Prev: MIPS option stack, Up: MIPS-Dependent 12126 12127 9.22.9 Directives to control generation of MIPS ASE instructions 12128 ---------------------------------------------------------------- 12129 12130 The directive `.set mips3d' makes the assembler accept instructions 12131 from the MIPS-3D Application Specific Extension from that point on in 12132 the assembly. The `.set nomips3d' directive prevents MIPS-3D 12133 instructions from being accepted. 12134 12135 The directive `.set smartmips' makes the assembler accept 12136 instructions from the SmartMIPS Application Specific Extension to the 12137 MIPS32 ISA from that point on in the assembly. The `.set nosmartmips' 12138 directive prevents SmartMIPS instructions from being accepted. 12139 12140 The directive `.set mdmx' makes the assembler accept instructions 12141 from the MDMX Application Specific Extension from that point on in the 12142 assembly. The `.set nomdmx' directive prevents MDMX instructions from 12143 being accepted. 12144 12145 The directive `.set dsp' makes the assembler accept instructions 12146 from the DSP Release 1 Application Specific Extension from that point 12147 on in the assembly. The `.set nodsp' directive prevents DSP Release 1 12148 instructions from being accepted. 12149 12150 The directive `.set dspr2' makes the assembler accept instructions 12151 from the DSP Release 2 Application Specific Extension from that point 12152 on in the assembly. This dirctive implies `.set dsp'. The `.set 12153 nodspr2' directive prevents DSP Release 2 instructions from being 12154 accepted. 12155 12156 The directive `.set mt' makes the assembler accept instructions from 12157 the MT Application Specific Extension from that point on in the 12158 assembly. The `.set nomt' directive prevents MT instructions from 12159 being accepted. 12160 12161 Traditional MIPS assemblers do not support these directives. 12162 12163 12164 File: as.info, Node: MIPS floating-point, Prev: MIPS ASE instruction generation overrides, Up: MIPS-Dependent 12165 12166 9.22.10 Directives to override floating-point options 12167 ----------------------------------------------------- 12168 12169 The directives `.set softfloat' and `.set hardfloat' provide finer 12170 control of disabling and enabling float-point instructions. These 12171 directives always override the default (that hard-float instructions 12172 are accepted) or the command-line options (`-msoft-float' and 12173 `-mhard-float'). 12174 12175 The directives `.set singlefloat' and `.set doublefloat' provide 12176 finer control of disabling and enabling double-precision float-point 12177 operations. These directives always override the default (that 12178 double-precision operations are accepted) or the command-line options 12179 (`-msingle-float' and `-mdouble-float'). 12180 12181 Traditional MIPS assemblers do not support these directives. 12182 12183 12184 File: as.info, Node: MMIX-Dependent, Next: MSP430-Dependent, Prev: MIPS-Dependent, Up: Machine Dependencies 12185 12186 9.23 MMIX Dependent Features 12187 ============================ 12188 12189 * Menu: 12190 12191 * MMIX-Opts:: Command-line Options 12192 * MMIX-Expand:: Instruction expansion 12193 * MMIX-Syntax:: Syntax 12194 * MMIX-mmixal:: Differences to `mmixal' syntax and semantics 12195 12196 12197 File: as.info, Node: MMIX-Opts, Next: MMIX-Expand, Up: MMIX-Dependent 12198 12199 9.23.1 Command-line Options 12200 --------------------------- 12201 12202 The MMIX version of `as' has some machine-dependent options. 12203 12204 When `--fixed-special-register-names' is specified, only the register 12205 names specified in *note MMIX-Regs:: are recognized in the instructions 12206 `PUT' and `GET'. 12207 12208 You can use the `--globalize-symbols' to make all symbols global. 12209 This option is useful when splitting up a `mmixal' program into several 12210 files. 12211 12212 The `--gnu-syntax' turns off most syntax compatibility with 12213 `mmixal'. Its usability is currently doubtful. 12214 12215 The `--relax' option is not fully supported, but will eventually make 12216 the object file prepared for linker relaxation. 12217 12218 If you want to avoid inadvertently calling a predefined symbol and 12219 would rather get an error, for example when using `as' with a compiler 12220 or other machine-generated code, specify `--no-predefined-syms'. This 12221 turns off built-in predefined definitions of all such symbols, 12222 including rounding-mode symbols, segment symbols, `BIT' symbols, and 12223 `TRAP' symbols used in `mmix' "system calls". It also turns off 12224 predefined special-register names, except when used in `PUT' and `GET' 12225 instructions. 12226 12227 By default, some instructions are expanded to fit the size of the 12228 operand or an external symbol (*note MMIX-Expand::). By passing 12229 `--no-expand', no such expansion will be done, instead causing errors 12230 at link time if the operand does not fit. 12231 12232 The `mmixal' documentation (*note mmixsite::) specifies that global 12233 registers allocated with the `GREG' directive (*note MMIX-greg::) and 12234 initialized to the same non-zero value, will refer to the same global 12235 register. This isn't strictly enforceable in `as' since the final 12236 addresses aren't known until link-time, but it will do an effort unless 12237 the `--no-merge-gregs' option is specified. (Register merging isn't 12238 yet implemented in `ld'.) 12239 12240 `as' will warn every time it expands an instruction to fit an 12241 operand unless the option `-x' is specified. It is believed that this 12242 behaviour is more useful than just mimicking `mmixal''s behaviour, in 12243 which instructions are only expanded if the `-x' option is specified, 12244 and assembly fails otherwise, when an instruction needs to be expanded. 12245 It needs to be kept in mind that `mmixal' is both an assembler and 12246 linker, while `as' will expand instructions that at link stage can be 12247 contracted. (Though linker relaxation isn't yet implemented in `ld'.) 12248 The option `-x' also imples `--linker-allocated-gregs'. 12249 12250 If instruction expansion is enabled, `as' can expand a `PUSHJ' 12251 instruction into a series of instructions. The shortest expansion is 12252 to not expand it, but just mark the call as redirectable to a stub, 12253 which `ld' creates at link-time, but only if the original `PUSHJ' 12254 instruction is found not to reach the target. The stub consists of the 12255 necessary instructions to form a jump to the target. This happens if 12256 `as' can assert that the `PUSHJ' instruction can reach such a stub. 12257 The option `--no-pushj-stubs' disables this shorter expansion, and the 12258 longer series of instructions is then created at assembly-time. The 12259 option `--no-stubs' is a synonym, intended for compatibility with 12260 future releases, where generation of stubs for other instructions may 12261 be implemented. 12262 12263 Usually a two-operand-expression (*note GREG-base::) without a 12264 matching `GREG' directive is treated as an error by `as'. When the 12265 option `--linker-allocated-gregs' is in effect, they are instead passed 12266 through to the linker, which will allocate as many global registers as 12267 is needed. 12268 12269 12270 File: as.info, Node: MMIX-Expand, Next: MMIX-Syntax, Prev: MMIX-Opts, Up: MMIX-Dependent 12271 12272 9.23.2 Instruction expansion 12273 ---------------------------- 12274 12275 When `as' encounters an instruction with an operand that is either not 12276 known or does not fit the operand size of the instruction, `as' (and 12277 `ld') will expand the instruction into a sequence of instructions 12278 semantically equivalent to the operand fitting the instruction. 12279 Expansion will take place for the following instructions: 12280 12281 `GETA' 12282 Expands to a sequence of four instructions: `SETL', `INCML', 12283 `INCMH' and `INCH'. The operand must be a multiple of four. 12284 12285 Conditional branches 12286 A branch instruction is turned into a branch with the complemented 12287 condition and prediction bit over five instructions; four 12288 instructions setting `$255' to the operand value, which like with 12289 `GETA' must be a multiple of four, and a final `GO $255,$255,0'. 12290 12291 `PUSHJ' 12292 Similar to expansion for conditional branches; four instructions 12293 set `$255' to the operand value, followed by a `PUSHGO 12294 $255,$255,0'. 12295 12296 `JMP' 12297 Similar to conditional branches and `PUSHJ'. The final instruction 12298 is `GO $255,$255,0'. 12299 12300 The linker `ld' is expected to shrink these expansions for code 12301 assembled with `--relax' (though not currently implemented). 12302 12303 12304 File: as.info, Node: MMIX-Syntax, Next: MMIX-mmixal, Prev: MMIX-Expand, Up: MMIX-Dependent 12305 12306 9.23.3 Syntax 12307 ------------- 12308 12309 The assembly syntax is supposed to be upward compatible with that 12310 described in Sections 1.3 and 1.4 of `The Art of Computer Programming, 12311 Volume 1'. Draft versions of those chapters as well as other MMIX 12312 information is located at 12313 `http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html'. Most code 12314 examples from the mmixal package located there should work unmodified 12315 when assembled and linked as single files, with a few noteworthy 12316 exceptions (*note MMIX-mmixal::). 12317 12318 Before an instruction is emitted, the current location is aligned to 12319 the next four-byte boundary. If a label is defined at the beginning of 12320 the line, its value will be the aligned value. 12321 12322 In addition to the traditional hex-prefix `0x', a hexadecimal number 12323 can also be specified by the prefix character `#'. 12324 12325 After all operands to an MMIX instruction or directive have been 12326 specified, the rest of the line is ignored, treated as a comment. 12327 12328 * Menu: 12329 12330 * MMIX-Chars:: Special Characters 12331 * MMIX-Symbols:: Symbols 12332 * MMIX-Regs:: Register Names 12333 * MMIX-Pseudos:: Assembler Directives 12334 12335 12336 File: as.info, Node: MMIX-Chars, Next: MMIX-Symbols, Up: MMIX-Syntax 12337 12338 9.23.3.1 Special Characters 12339 ........................... 12340 12341 The characters `*' and `#' are line comment characters; each start a 12342 comment at the beginning of a line, but only at the beginning of a 12343 line. A `#' prefixes a hexadecimal number if found elsewhere on a line. 12344 12345 Two other characters, `%' and `!', each start a comment anywhere on 12346 the line. Thus you can't use the `modulus' and `not' operators in 12347 expressions normally associated with these two characters. 12348 12349 A `;' is a line separator, treated as a new-line, so separate 12350 instructions can be specified on a single line. 12351 12352 12353 File: as.info, Node: MMIX-Symbols, Next: MMIX-Regs, Prev: MMIX-Chars, Up: MMIX-Syntax 12354 12355 9.23.3.2 Symbols 12356 ................ 12357 12358 The character `:' is permitted in identifiers. There are two 12359 exceptions to it being treated as any other symbol character: if a 12360 symbol begins with `:', it means that the symbol is in the global 12361 namespace and that the current prefix should not be prepended to that 12362 symbol (*note MMIX-prefix::). The `:' is then not considered part of 12363 the symbol. For a symbol in the label position (first on a line), a `:' 12364 at the end of a symbol is silently stripped off. A label is permitted, 12365 but not required, to be followed by a `:', as with many other assembly 12366 formats. 12367 12368 The character `@' in an expression, is a synonym for `.', the 12369 current location. 12370 12371 In addition to the common forward and backward local symbol formats 12372 (*note Symbol Names::), they can be specified with upper-case `B' and 12373 `F', as in `8B' and `9F'. A local label defined for the current 12374 position is written with a `H' appended to the number: 12375 3H LDB $0,$1,2 12376 This and traditional local-label formats cannot be mixed: a label 12377 must be defined and referred to using the same format. 12378 12379 There's a minor caveat: just as for the ordinary local symbols, the 12380 local symbols are translated into ordinary symbols using control 12381 characters are to hide the ordinal number of the symbol. 12382 Unfortunately, these symbols are not translated back in error messages. 12383 Thus you may see confusing error messages when local symbols are used. 12384 Control characters `\003' (control-C) and `\004' (control-D) are used 12385 for the MMIX-specific local-symbol syntax. 12386 12387 The symbol `Main' is handled specially; it is always global. 12388 12389 By defining the symbols `__.MMIX.start..text' and 12390 `__.MMIX.start..data', the address of respectively the `.text' and 12391 `.data' segments of the final program can be defined, though when 12392 linking more than one object file, the code or data in the object file 12393 containing the symbol is not guaranteed to be start at that position; 12394 just the final executable. *Note MMIX-loc::. 12395 12396 12397 File: as.info, Node: MMIX-Regs, Next: MMIX-Pseudos, Prev: MMIX-Symbols, Up: MMIX-Syntax 12398 12399 9.23.3.3 Register names 12400 ....................... 12401 12402 Local and global registers are specified as `$0' to `$255'. The 12403 recognized special register names are `rJ', `rA', `rB', `rC', `rD', 12404 `rE', `rF', `rG', `rH', `rI', `rK', `rL', `rM', `rN', `rO', `rP', `rQ', 12405 `rR', `rS', `rT', `rU', `rV', `rW', `rX', `rY', `rZ', `rBB', `rTT', 12406 `rWW', `rXX', `rYY' and `rZZ'. A leading `:' is optional for special 12407 register names. 12408 12409 Local and global symbols can be equated to register names and used in 12410 place of ordinary registers. 12411 12412 Similarly for special registers, local and global symbols can be 12413 used. Also, symbols equated from numbers and constant expressions are 12414 allowed in place of a special register, except when either of the 12415 options `--no-predefined-syms' and `--fixed-special-register-names' are 12416 specified. Then only the special register names above are allowed for 12417 the instructions having a special register operand; `GET' and `PUT'. 12418 12419 12420 File: as.info, Node: MMIX-Pseudos, Prev: MMIX-Regs, Up: MMIX-Syntax 12421 12422 9.23.3.4 Assembler Directives 12423 ............................. 12424 12425 `LOC' 12426 The `LOC' directive sets the current location to the value of the 12427 operand field, which may include changing sections. If the 12428 operand is a constant, the section is set to either `.data' if the 12429 value is `0x2000000000000000' or larger, else it is set to `.text'. 12430 Within a section, the current location may only be changed to 12431 monotonically higher addresses. A LOC expression must be a 12432 previously defined symbol or a "pure" constant. 12433 12434 An example, which sets the label PREV to the current location, and 12435 updates the current location to eight bytes forward: 12436 prev LOC @+8 12437 12438 When a LOC has a constant as its operand, a symbol 12439 `__.MMIX.start..text' or `__.MMIX.start..data' is defined 12440 depending on the address as mentioned above. Each such symbol is 12441 interpreted as special by the linker, locating the section at that 12442 address. Note that if multiple files are linked, the first object 12443 file with that section will be mapped to that address (not 12444 necessarily the file with the LOC definition). 12445 12446 `LOCAL' 12447 Example: 12448 LOCAL external_symbol 12449 LOCAL 42 12450 .local asymbol 12451 12452 This directive-operation generates a link-time assertion that the 12453 operand does not correspond to a global register. The operand is 12454 an expression that at link-time resolves to a register symbol or a 12455 number. A number is treated as the register having that number. 12456 There is one restriction on the use of this directive: the 12457 pseudo-directive must be placed in a section with contents, code 12458 or data. 12459 12460 `IS' 12461 The `IS' directive: 12462 asymbol IS an_expression 12463 sets the symbol `asymbol' to `an_expression'. A symbol may not be 12464 set more than once using this directive. Local labels may be set 12465 using this directive, for example: 12466 5H IS @+4 12467 12468 `GREG' 12469 This directive reserves a global register, gives it an initial 12470 value and optionally gives it a symbolic name. Some examples: 12471 12472 areg GREG 12473 breg GREG data_value 12474 GREG data_buffer 12475 .greg creg, another_data_value 12476 12477 The symbolic register name can be used in place of a (non-special) 12478 register. If a value isn't provided, it defaults to zero. Unless 12479 the option `--no-merge-gregs' is specified, non-zero registers 12480 allocated with this directive may be eliminated by `as'; another 12481 register with the same value used in its place. Any of the 12482 instructions `CSWAP', `GO', `LDA', `LDBU', `LDB', `LDHT', `LDOU', 12483 `LDO', `LDSF', `LDTU', `LDT', `LDUNC', `LDVTS', `LDWU', `LDW', 12484 `PREGO', `PRELD', `PREST', `PUSHGO', `STBU', `STB', `STCO', `STHT', 12485 `STOU', `STSF', `STTU', `STT', `STUNC', `SYNCD', `SYNCID', can 12486 have a value nearby an initial value in place of its second and 12487 third operands. Here, "nearby" is defined as within the range 12488 0...255 from the initial value of such an allocated register. 12489 12490 buffer1 BYTE 0,0,0,0,0 12491 buffer2 BYTE 0,0,0,0,0 12492 ... 12493 GREG buffer1 12494 LDOU $42,buffer2 12495 In the example above, the `Y' field of the `LDOUI' instruction 12496 (LDOU with a constant Z) will be replaced with the global register 12497 allocated for `buffer1', and the `Z' field will have the value 5, 12498 the offset from `buffer1' to `buffer2'. The result is equivalent 12499 to this code: 12500 buffer1 BYTE 0,0,0,0,0 12501 buffer2 BYTE 0,0,0,0,0 12502 ... 12503 tmpreg GREG buffer1 12504 LDOU $42,tmpreg,(buffer2-buffer1) 12505 12506 Global registers allocated with this directive are allocated in 12507 order higher-to-lower within a file. Other than that, the exact 12508 order of register allocation and elimination is undefined. For 12509 example, the order is undefined when more than one file with such 12510 directives are linked together. With the options `-x' and 12511 `--linker-allocated-gregs', `GREG' directives for two-operand 12512 cases like the one mentioned above can be omitted. Sufficient 12513 global registers will then be allocated by the linker. 12514 12515 `BYTE' 12516 The `BYTE' directive takes a series of operands separated by a 12517 comma. If an operand is a string (*note Strings::), each 12518 character of that string is emitted as a byte. Other operands 12519 must be constant expressions without forward references, in the 12520 range 0...255. If you need operands having expressions with 12521 forward references, use `.byte' (*note Byte::). An operand can be 12522 omitted, defaulting to a zero value. 12523 12524 `WYDE' 12525 `TETRA' 12526 `OCTA' 12527 The directives `WYDE', `TETRA' and `OCTA' emit constants of two, 12528 four and eight bytes size respectively. Before anything else 12529 happens for the directive, the current location is aligned to the 12530 respective constant-size boundary. If a label is defined at the 12531 beginning of the line, its value will be that after the alignment. 12532 A single operand can be omitted, defaulting to a zero value 12533 emitted for the directive. Operands can be expressed as strings 12534 (*note Strings::), in which case each character in the string is 12535 emitted as a separate constant of the size indicated by the 12536 directive. 12537 12538 `PREFIX' 12539 The `PREFIX' directive sets a symbol name prefix to be prepended to 12540 all symbols (except local symbols, *note MMIX-Symbols::), that are 12541 not prefixed with `:', until the next `PREFIX' directive. Such 12542 prefixes accumulate. For example, 12543 PREFIX a 12544 PREFIX b 12545 c IS 0 12546 defines a symbol `abc' with the value 0. 12547 12548 `BSPEC' 12549 `ESPEC' 12550 A pair of `BSPEC' and `ESPEC' directives delimit a section of 12551 special contents (without specified semantics). Example: 12552 BSPEC 42 12553 TETRA 1,2,3 12554 ESPEC 12555 The single operand to `BSPEC' must be number in the range 0...255. 12556 The `BSPEC' number 80 is used by the GNU binutils implementation. 12557 12558 12559 File: as.info, Node: MMIX-mmixal, Prev: MMIX-Syntax, Up: MMIX-Dependent 12560 12561 9.23.4 Differences to `mmixal' 12562 ------------------------------ 12563 12564 The binutils `as' and `ld' combination has a few differences in 12565 function compared to `mmixal' (*note mmixsite::). 12566 12567 The replacement of a symbol with a GREG-allocated register (*note 12568 GREG-base::) is not handled the exactly same way in `as' as in 12569 `mmixal'. This is apparent in the `mmixal' example file `inout.mms', 12570 where different registers with different offsets, eventually yielding 12571 the same address, are used in the first instruction. This type of 12572 difference should however not affect the function of any program unless 12573 it has specific assumptions about the allocated register number. 12574 12575 Line numbers (in the `mmo' object format) are currently not 12576 supported. 12577 12578 Expression operator precedence is not that of mmixal: operator 12579 precedence is that of the C programming language. It's recommended to 12580 use parentheses to explicitly specify wanted operator precedence 12581 whenever more than one type of operators are used. 12582 12583 The serialize unary operator `&', the fractional division operator 12584 `//', the logical not operator `!' and the modulus operator `%' are not 12585 available. 12586 12587 Symbols are not global by default, unless the option 12588 `--globalize-symbols' is passed. Use the `.global' directive to 12589 globalize symbols (*note Global::). 12590 12591 Operand syntax is a bit stricter with `as' than `mmixal'. For 12592 example, you can't say `addu 1,2,3', instead you must write `addu 12593 $1,$2,3'. 12594 12595 You can't LOC to a lower address than those already visited (i.e., 12596 "backwards"). 12597 12598 A LOC directive must come before any emitted code. 12599 12600 Predefined symbols are visible as file-local symbols after use. (In 12601 the ELF file, that is--the linked mmo file has no notion of a file-local 12602 symbol.) 12603 12604 Some mapping of constant expressions to sections in LOC expressions 12605 is attempted, but that functionality is easily confused and should be 12606 avoided unless compatibility with `mmixal' is required. A LOC 12607 expression to `0x2000000000000000' or higher, maps to the `.data' 12608 section and lower addresses map to the `.text' section (*note 12609 MMIX-loc::). 12610 12611 The code and data areas are each contiguous. Sparse programs with 12612 far-away LOC directives will take up the same amount of space as a 12613 contiguous program with zeros filled in the gaps between the LOC 12614 directives. If you need sparse programs, you might try and get the 12615 wanted effect with a linker script and splitting up the code parts into 12616 sections (*note Section::). Assembly code for this, to be compatible 12617 with `mmixal', would look something like: 12618 .if 0 12619 LOC away_expression 12620 .else 12621 .section away,"ax" 12622 .fi 12623 `as' will not execute the LOC directive and `mmixal' ignores the 12624 lines with `.'. This construct can be used generally to help 12625 compatibility. 12626 12627 Symbols can't be defined twice-not even to the same value. 12628 12629 Instruction mnemonics are recognized case-insensitive, though the 12630 `IS' and `GREG' pseudo-operations must be specified in upper-case 12631 characters. 12632 12633 There's no unicode support. 12634 12635 The following is a list of programs in `mmix.tar.gz', available at 12636 `http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html', last 12637 checked with the version dated 2001-08-25 (md5sum 12638 c393470cfc86fac040487d22d2bf0172) that assemble with `mmixal' but do 12639 not assemble with `as': 12640 12641 `silly.mms' 12642 LOC to a previous address. 12643 12644 `sim.mms' 12645 Redefines symbol `Done'. 12646 12647 `test.mms' 12648 Uses the serial operator `&'. 12649 12650 12651 File: as.info, Node: MSP430-Dependent, Next: SH-Dependent, Prev: MMIX-Dependent, Up: Machine Dependencies 12652 12653 9.24 MSP 430 Dependent Features 12654 =============================== 12655 12656 * Menu: 12657 12658 * MSP430 Options:: Options 12659 * MSP430 Syntax:: Syntax 12660 * MSP430 Floating Point:: Floating Point 12661 * MSP430 Directives:: MSP 430 Machine Directives 12662 * MSP430 Opcodes:: Opcodes 12663 * MSP430 Profiling Capability:: Profiling Capability 12664 12665 12666 File: as.info, Node: MSP430 Options, Next: MSP430 Syntax, Up: MSP430-Dependent 12667 12668 9.24.1 Options 12669 -------------- 12670 12671 `-m' 12672 select the mpu arch. Currently has no effect. 12673 12674 `-mP' 12675 enables polymorph instructions handler. 12676 12677 `-mQ' 12678 enables relaxation at assembly time. DANGEROUS! 12679 12680 12681 12682 File: as.info, Node: MSP430 Syntax, Next: MSP430 Floating Point, Prev: MSP430 Options, Up: MSP430-Dependent 12683 12684 9.24.2 Syntax 12685 ------------- 12686 12687 * Menu: 12688 12689 * MSP430-Macros:: Macros 12690 * MSP430-Chars:: Special Characters 12691 * MSP430-Regs:: Register Names 12692 * MSP430-Ext:: Assembler Extensions 12693 12694 12695 File: as.info, Node: MSP430-Macros, Next: MSP430-Chars, Up: MSP430 Syntax 12696 12697 9.24.2.1 Macros 12698 ............... 12699 12700 The macro syntax used on the MSP 430 is like that described in the MSP 12701 430 Family Assembler Specification. Normal `as' macros should still 12702 work. 12703 12704 Additional built-in macros are: 12705 12706 `llo(exp)' 12707 Extracts least significant word from 32-bit expression 'exp'. 12708 12709 `lhi(exp)' 12710 Extracts most significant word from 32-bit expression 'exp'. 12711 12712 `hlo(exp)' 12713 Extracts 3rd word from 64-bit expression 'exp'. 12714 12715 `hhi(exp)' 12716 Extracts 4rd word from 64-bit expression 'exp'. 12717 12718 12719 They normally being used as an immediate source operand. 12720 mov #llo(1), r10 ; == mov #1, r10 12721 mov #lhi(1), r10 ; == mov #0, r10 12722 12723 12724 File: as.info, Node: MSP430-Chars, Next: MSP430-Regs, Prev: MSP430-Macros, Up: MSP430 Syntax 12725 12726 9.24.2.2 Special Characters 12727 ........................... 12728 12729 `;' is the line comment character. 12730 12731 The character `$' in jump instructions indicates current location and 12732 implemented only for TI syntax compatibility. 12733 12734 12735 File: as.info, Node: MSP430-Regs, Next: MSP430-Ext, Prev: MSP430-Chars, Up: MSP430 Syntax 12736 12737 9.24.2.3 Register Names 12738 ....................... 12739 12740 General-purpose registers are represented by predefined symbols of the 12741 form `rN' (for global registers), where N represents a number between 12742 `0' and `15'. The leading letters may be in either upper or lower 12743 case; for example, `r13' and `R7' are both valid register names. 12744 12745 Register names `PC', `SP' and `SR' cannot be used as register names 12746 and will be treated as variables. Use `r0', `r1', and `r2' instead. 12747 12748 12749 File: as.info, Node: MSP430-Ext, Prev: MSP430-Regs, Up: MSP430 Syntax 12750 12751 9.24.2.4 Assembler Extensions 12752 ............................. 12753 12754 `@rN' 12755 As destination operand being treated as `0(rn)' 12756 12757 `0(rN)' 12758 As source operand being treated as `@rn' 12759 12760 `jCOND +N' 12761 Skips next N bytes followed by jump instruction and equivalent to 12762 `jCOND $+N+2' 12763 12764 12765 Also, there are some instructions, which cannot be found in other 12766 assemblers. These are branch instructions, which has different opcodes 12767 upon jump distance. They all got PC relative addressing mode. 12768 12769 `beq label' 12770 A polymorph instruction which is `jeq label' in case if jump 12771 distance within allowed range for cpu's jump instruction. If not, 12772 this unrolls into a sequence of 12773 jne $+6 12774 br label 12775 12776 `bne label' 12777 A polymorph instruction which is `jne label' or `jeq +4; br label' 12778 12779 `blt label' 12780 A polymorph instruction which is `jl label' or `jge +4; br label' 12781 12782 `bltn label' 12783 A polymorph instruction which is `jn label' or `jn +2; jmp +4; br 12784 label' 12785 12786 `bltu label' 12787 A polymorph instruction which is `jlo label' or `jhs +2; br label' 12788 12789 `bge label' 12790 A polymorph instruction which is `jge label' or `jl +4; br label' 12791 12792 `bgeu label' 12793 A polymorph instruction which is `jhs label' or `jlo +4; br label' 12794 12795 `bgt label' 12796 A polymorph instruction which is `jeq +2; jge label' or `jeq +6; 12797 jl +4; br label' 12798 12799 `bgtu label' 12800 A polymorph instruction which is `jeq +2; jhs label' or `jeq +6; 12801 jlo +4; br label' 12802 12803 `bleu label' 12804 A polymorph instruction which is `jeq label; jlo label' or `jeq 12805 +2; jhs +4; br label' 12806 12807 `ble label' 12808 A polymorph instruction which is `jeq label; jl label' or `jeq 12809 +2; jge +4; br label' 12810 12811 `jump label' 12812 A polymorph instruction which is `jmp label' or `br label' 12813 12814 12815 File: as.info, Node: MSP430 Floating Point, Next: MSP430 Directives, Prev: MSP430 Syntax, Up: MSP430-Dependent 12816 12817 9.24.3 Floating Point 12818 --------------------- 12819 12820 The MSP 430 family uses IEEE 32-bit floating-point numbers. 12821 12822 12823 File: as.info, Node: MSP430 Directives, Next: MSP430 Opcodes, Prev: MSP430 Floating Point, Up: MSP430-Dependent 12824 12825 9.24.4 MSP 430 Machine Directives 12826 --------------------------------- 12827 12828 `.file' 12829 This directive is ignored; it is accepted for compatibility with 12830 other MSP 430 assemblers. 12831 12832 _Warning:_ in other versions of the GNU assembler, `.file' is 12833 used for the directive called `.app-file' in the MSP 430 12834 support. 12835 12836 `.line' 12837 This directive is ignored; it is accepted for compatibility with 12838 other MSP 430 assemblers. 12839 12840 `.arch' 12841 Currently this directive is ignored; it is accepted for 12842 compatibility with other MSP 430 assemblers. 12843 12844 `.profiler' 12845 This directive instructs assembler to add new profile entry to the 12846 object file. 12847 12848 12849 12850 File: as.info, Node: MSP430 Opcodes, Next: MSP430 Profiling Capability, Prev: MSP430 Directives, Up: MSP430-Dependent 12851 12852 9.24.5 Opcodes 12853 -------------- 12854 12855 `as' implements all the standard MSP 430 opcodes. No additional 12856 pseudo-instructions are needed on this family. 12857 12858 For information on the 430 machine instruction set, see `MSP430 12859 User's Manual, document slau049d', Texas Instrument, Inc. 12860 12861 12862 File: as.info, Node: MSP430 Profiling Capability, Prev: MSP430 Opcodes, Up: MSP430-Dependent 12863 12864 9.24.6 Profiling Capability 12865 --------------------------- 12866 12867 It is a performance hit to use gcc's profiling approach for this tiny 12868 target. Even more - jtag hardware facility does not perform any 12869 profiling functions. However we've got gdb's built-in simulator where 12870 we can do anything. 12871 12872 We define new section `.profiler' which holds all profiling 12873 information. We define new pseudo operation `.profiler' which will 12874 instruct assembler to add new profile entry to the object file. Profile 12875 should take place at the present address. 12876 12877 Pseudo operation format: 12878 12879 `.profiler flags,function_to_profile [, cycle_corrector, extra]' 12880 12881 where: 12882 12883 `flags' is a combination of the following characters: 12884 12885 `s' 12886 function entry 12887 12888 `x' 12889 function exit 12890 12891 `i' 12892 function is in init section 12893 12894 `f' 12895 function is in fini section 12896 12897 `l' 12898 library call 12899 12900 `c' 12901 libc standard call 12902 12903 `d' 12904 stack value demand 12905 12906 `I' 12907 interrupt service routine 12908 12909 `P' 12910 prologue start 12911 12912 `p' 12913 prologue end 12914 12915 `E' 12916 epilogue start 12917 12918 `e' 12919 epilogue end 12920 12921 `j' 12922 long jump / sjlj unwind 12923 12924 `a' 12925 an arbitrary code fragment 12926 12927 `t' 12928 extra parameter saved (a constant value like frame size) 12929 12930 `function_to_profile' 12931 a function address 12932 12933 `cycle_corrector' 12934 a value which should be added to the cycle counter, zero if 12935 omitted. 12936 12937 `extra' 12938 any extra parameter, zero if omitted. 12939 12940 12941 For example: 12942 .global fxx 12943 .type fxx,@function 12944 fxx: 12945 .LFrameOffset_fxx=0x08 12946 .profiler "scdP", fxx ; function entry. 12947 ; we also demand stack value to be saved 12948 push r11 12949 push r10 12950 push r9 12951 push r8 12952 .profiler "cdpt",fxx,0, .LFrameOffset_fxx ; check stack value at this point 12953 ; (this is a prologue end) 12954 ; note, that spare var filled with 12955 ; the farme size 12956 mov r15,r8 12957 ... 12958 .profiler cdE,fxx ; check stack 12959 pop r8 12960 pop r9 12961 pop r10 12962 pop r11 12963 .profiler xcde,fxx,3 ; exit adds 3 to the cycle counter 12964 ret ; cause 'ret' insn takes 3 cycles 12965 12966 12967 File: as.info, Node: PDP-11-Dependent, Next: PJ-Dependent, Prev: SH64-Dependent, Up: Machine Dependencies 12968 12969 9.25 PDP-11 Dependent Features 12970 ============================== 12971 12972 * Menu: 12973 12974 * PDP-11-Options:: Options 12975 * PDP-11-Pseudos:: Assembler Directives 12976 * PDP-11-Syntax:: DEC Syntax versus BSD Syntax 12977 * PDP-11-Mnemonics:: Instruction Naming 12978 * PDP-11-Synthetic:: Synthetic Instructions 12979 12980 12981 File: as.info, Node: PDP-11-Options, Next: PDP-11-Pseudos, Up: PDP-11-Dependent 12982 12983 9.25.1 Options 12984 -------------- 12985 12986 The PDP-11 version of `as' has a rich set of machine dependent options. 12987 12988 9.25.1.1 Code Generation Options 12989 ................................ 12990 12991 `-mpic | -mno-pic' 12992 Generate position-independent (or position-dependent) code. 12993 12994 The default is to generate position-independent code. 12995 12996 9.25.1.2 Instruction Set Extension Options 12997 .......................................... 12998 12999 These options enables or disables the use of extensions over the base 13000 line instruction set as introduced by the first PDP-11 CPU: the KA11. 13001 Most options come in two variants: a `-m'EXTENSION that enables 13002 EXTENSION, and a `-mno-'EXTENSION that disables EXTENSION. 13003 13004 The default is to enable all extensions. 13005 13006 `-mall | -mall-extensions' 13007 Enable all instruction set extensions. 13008 13009 `-mno-extensions' 13010 Disable all instruction set extensions. 13011 13012 `-mcis | -mno-cis' 13013 Enable (or disable) the use of the commercial instruction set, 13014 which consists of these instructions: `ADDNI', `ADDN', `ADDPI', 13015 `ADDP', `ASHNI', `ASHN', `ASHPI', `ASHP', `CMPCI', `CMPC', 13016 `CMPNI', `CMPN', `CMPPI', `CMPP', `CVTLNI', `CVTLN', `CVTLPI', 13017 `CVTLP', `CVTNLI', `CVTNL', `CVTNPI', `CVTNP', `CVTPLI', `CVTPL', 13018 `CVTPNI', `CVTPN', `DIVPI', `DIVP', `L2DR', `L3DR', `LOCCI', 13019 `LOCC', `MATCI', `MATC', `MOVCI', `MOVC', `MOVRCI', `MOVRC', 13020 `MOVTCI', `MOVTC', `MULPI', `MULP', `SCANCI', `SCANC', `SKPCI', 13021 `SKPC', `SPANCI', `SPANC', `SUBNI', `SUBN', `SUBPI', and `SUBP'. 13022 13023 `-mcsm | -mno-csm' 13024 Enable (or disable) the use of the `CSM' instruction. 13025 13026 `-meis | -mno-eis' 13027 Enable (or disable) the use of the extended instruction set, which 13028 consists of these instructions: `ASHC', `ASH', `DIV', `MARK', 13029 `MUL', `RTT', `SOB' `SXT', and `XOR'. 13030 13031 `-mfis | -mkev11' 13032 `-mno-fis | -mno-kev11' 13033 Enable (or disable) the use of the KEV11 floating-point 13034 instructions: `FADD', `FDIV', `FMUL', and `FSUB'. 13035 13036 `-mfpp | -mfpu | -mfp-11' 13037 `-mno-fpp | -mno-fpu | -mno-fp-11' 13038 Enable (or disable) the use of FP-11 floating-point instructions: 13039 `ABSF', `ADDF', `CFCC', `CLRF', `CMPF', `DIVF', `LDCFF', `LDCIF', 13040 `LDEXP', `LDF', `LDFPS', `MODF', `MULF', `NEGF', `SETD', `SETF', 13041 `SETI', `SETL', `STCFF', `STCFI', `STEXP', `STF', `STFPS', `STST', 13042 `SUBF', and `TSTF'. 13043 13044 `-mlimited-eis | -mno-limited-eis' 13045 Enable (or disable) the use of the limited extended instruction 13046 set: `MARK', `RTT', `SOB', `SXT', and `XOR'. 13047 13048 The -mno-limited-eis options also implies -mno-eis. 13049 13050 `-mmfpt | -mno-mfpt' 13051 Enable (or disable) the use of the `MFPT' instruction. 13052 13053 `-mmultiproc | -mno-multiproc' 13054 Enable (or disable) the use of multiprocessor instructions: 13055 `TSTSET' and `WRTLCK'. 13056 13057 `-mmxps | -mno-mxps' 13058 Enable (or disable) the use of the `MFPS' and `MTPS' instructions. 13059 13060 `-mspl | -mno-spl' 13061 Enable (or disable) the use of the `SPL' instruction. 13062 13063 Enable (or disable) the use of the microcode instructions: `LDUB', 13064 `MED', and `XFC'. 13065 13066 9.25.1.3 CPU Model Options 13067 .......................... 13068 13069 These options enable the instruction set extensions supported by a 13070 particular CPU, and disables all other extensions. 13071 13072 `-mka11' 13073 KA11 CPU. Base line instruction set only. 13074 13075 `-mkb11' 13076 KB11 CPU. Enable extended instruction set and `SPL'. 13077 13078 `-mkd11a' 13079 KD11-A CPU. Enable limited extended instruction set. 13080 13081 `-mkd11b' 13082 KD11-B CPU. Base line instruction set only. 13083 13084 `-mkd11d' 13085 KD11-D CPU. Base line instruction set only. 13086 13087 `-mkd11e' 13088 KD11-E CPU. Enable extended instruction set, `MFPS', and `MTPS'. 13089 13090 `-mkd11f | -mkd11h | -mkd11q' 13091 KD11-F, KD11-H, or KD11-Q CPU. Enable limited extended 13092 instruction set, `MFPS', and `MTPS'. 13093 13094 `-mkd11k' 13095 KD11-K CPU. Enable extended instruction set, `LDUB', `MED', 13096 `MFPS', `MFPT', `MTPS', and `XFC'. 13097 13098 `-mkd11z' 13099 KD11-Z CPU. Enable extended instruction set, `CSM', `MFPS', 13100 `MFPT', `MTPS', and `SPL'. 13101 13102 `-mf11' 13103 F11 CPU. Enable extended instruction set, `MFPS', `MFPT', and 13104 `MTPS'. 13105 13106 `-mj11' 13107 J11 CPU. Enable extended instruction set, `CSM', `MFPS', `MFPT', 13108 `MTPS', `SPL', `TSTSET', and `WRTLCK'. 13109 13110 `-mt11' 13111 T11 CPU. Enable limited extended instruction set, `MFPS', and 13112 `MTPS'. 13113 13114 9.25.1.4 Machine Model Options 13115 .............................. 13116 13117 These options enable the instruction set extensions supported by a 13118 particular machine model, and disables all other extensions. 13119 13120 `-m11/03' 13121 Same as `-mkd11f'. 13122 13123 `-m11/04' 13124 Same as `-mkd11d'. 13125 13126 `-m11/05 | -m11/10' 13127 Same as `-mkd11b'. 13128 13129 `-m11/15 | -m11/20' 13130 Same as `-mka11'. 13131 13132 `-m11/21' 13133 Same as `-mt11'. 13134 13135 `-m11/23 | -m11/24' 13136 Same as `-mf11'. 13137 13138 `-m11/34' 13139 Same as `-mkd11e'. 13140 13141 `-m11/34a' 13142 Ame as `-mkd11e' `-mfpp'. 13143 13144 `-m11/35 | -m11/40' 13145 Same as `-mkd11a'. 13146 13147 `-m11/44' 13148 Same as `-mkd11z'. 13149 13150 `-m11/45 | -m11/50 | -m11/55 | -m11/70' 13151 Same as `-mkb11'. 13152 13153 `-m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94' 13154 Same as `-mj11'. 13155 13156 `-m11/60' 13157 Same as `-mkd11k'. 13158 13159 13160 File: as.info, Node: PDP-11-Pseudos, Next: PDP-11-Syntax, Prev: PDP-11-Options, Up: PDP-11-Dependent 13161 13162 9.25.2 Assembler Directives 13163 --------------------------- 13164 13165 The PDP-11 version of `as' has a few machine dependent assembler 13166 directives. 13167 13168 `.bss' 13169 Switch to the `bss' section. 13170 13171 `.even' 13172 Align the location counter to an even number. 13173 13174 13175 File: as.info, Node: PDP-11-Syntax, Next: PDP-11-Mnemonics, Prev: PDP-11-Pseudos, Up: PDP-11-Dependent 13176 13177 9.25.3 PDP-11 Assembly Language Syntax 13178 -------------------------------------- 13179 13180 `as' supports both DEC syntax and BSD syntax. The only difference is 13181 that in DEC syntax, a `#' character is used to denote an immediate 13182 constants, while in BSD syntax the character for this purpose is `$'. 13183 13184 general-purpose registers are named `r0' through `r7'. Mnemonic 13185 alternatives for `r6' and `r7' are `sp' and `pc', respectively. 13186 13187 Floating-point registers are named `ac0' through `ac3', or 13188 alternatively `fr0' through `fr3'. 13189 13190 Comments are started with a `#' or a `/' character, and extend to 13191 the end of the line. (FIXME: clash with immediates?) 13192 13193 13194 File: as.info, Node: PDP-11-Mnemonics, Next: PDP-11-Synthetic, Prev: PDP-11-Syntax, Up: PDP-11-Dependent 13195 13196 9.25.4 Instruction Naming 13197 ------------------------- 13198 13199 Some instructions have alternative names. 13200 13201 `BCC' 13202 `BHIS' 13203 13204 `BCS' 13205 `BLO' 13206 13207 `L2DR' 13208 `L2D' 13209 13210 `L3DR' 13211 `L3D' 13212 13213 `SYS' 13214 `TRAP' 13215 13216 13217 File: as.info, Node: PDP-11-Synthetic, Prev: PDP-11-Mnemonics, Up: PDP-11-Dependent 13218 13219 9.25.5 Synthetic Instructions 13220 ----------------------------- 13221 13222 The `JBR' and `J'CC synthetic instructions are not supported yet. 13223 13224 13225 File: as.info, Node: PJ-Dependent, Next: PPC-Dependent, Prev: PDP-11-Dependent, Up: Machine Dependencies 13226 13227 9.26 picoJava Dependent Features 13228 ================================ 13229 13230 * Menu: 13231 13232 * PJ Options:: Options 13233 13234 13235 File: as.info, Node: PJ Options, Up: PJ-Dependent 13236 13237 9.26.1 Options 13238 -------------- 13239 13240 `as' has two additional command-line options for the picoJava 13241 architecture. 13242 `-ml' 13243 This option selects little endian data output. 13244 13245 `-mb' 13246 This option selects big endian data output. 13247 13248 13249 File: as.info, Node: PPC-Dependent, Next: Sparc-Dependent, Prev: PJ-Dependent, Up: Machine Dependencies 13250 13251 9.27 PowerPC Dependent Features 13252 =============================== 13253 13254 * Menu: 13255 13256 * PowerPC-Opts:: Options 13257 * PowerPC-Pseudo:: PowerPC Assembler Directives 13258 13259 13260 File: as.info, Node: PowerPC-Opts, Next: PowerPC-Pseudo, Up: PPC-Dependent 13261 13262 9.27.1 Options 13263 -------------- 13264 13265 The PowerPC chip family includes several successive levels, using the 13266 same core instruction set, but including a few additional instructions 13267 at each level. There are exceptions to this however. For details on 13268 what instructions each variant supports, please see the chip's 13269 architecture reference manual. 13270 13271 The following table lists all available PowerPC options. 13272 13273 `-mpwrx | -mpwr2' 13274 Generate code for POWER/2 (RIOS2). 13275 13276 `-mpwr' 13277 Generate code for POWER (RIOS1) 13278 13279 `-m601' 13280 Generate code for PowerPC 601. 13281 13282 `-mppc, -mppc32, -m603, -m604' 13283 Generate code for PowerPC 603/604. 13284 13285 `-m403, -m405' 13286 Generate code for PowerPC 403/405. 13287 13288 `-m440' 13289 Generate code for PowerPC 440. BookE and some 405 instructions. 13290 13291 `-m7400, -m7410, -m7450, -m7455' 13292 Generate code for PowerPC 7400/7410/7450/7455. 13293 13294 `-m750cl' 13295 Generate code for PowerPC 750CL. 13296 13297 `-mppc64, -m620' 13298 Generate code for PowerPC 620/625/630. 13299 13300 `-me500, -me500x2' 13301 Generate code for Motorola e500 core complex. 13302 13303 `-mspe' 13304 Generate code for Motorola SPE instructions. 13305 13306 `-mppc64bridge' 13307 Generate code for PowerPC 64, including bridge insns. 13308 13309 `-mbooke64' 13310 Generate code for 64-bit BookE. 13311 13312 `-mbooke, mbooke32' 13313 Generate code for 32-bit BookE. 13314 13315 `-me300' 13316 Generate code for PowerPC e300 family. 13317 13318 `-maltivec' 13319 Generate code for processors with AltiVec instructions. 13320 13321 `-mvsx' 13322 Generate code for processors with Vector-Scalar (VSX) instructions. 13323 13324 `-mpower4' 13325 Generate code for Power4 architecture. 13326 13327 `-mpower5' 13328 Generate code for Power5 architecture. 13329 13330 `-mpower6' 13331 Generate code for Power6 architecture. 13332 13333 `-mpower7' 13334 Generate code for Power7 architecture. 13335 13336 `-mcell' 13337 Generate code for Cell Broadband Engine architecture. 13338 13339 `-mcom' 13340 Generate code Power/PowerPC common instructions. 13341 13342 `-many' 13343 Generate code for any architecture (PWR/PWRX/PPC). 13344 13345 `-mregnames' 13346 Allow symbolic names for registers. 13347 13348 `-mno-regnames' 13349 Do not allow symbolic names for registers. 13350 13351 `-mrelocatable' 13352 Support for GCC's -mrelocatable option. 13353 13354 `-mrelocatable-lib' 13355 Support for GCC's -mrelocatable-lib option. 13356 13357 `-memb' 13358 Set PPC_EMB bit in ELF flags. 13359 13360 `-mlittle, -mlittle-endian' 13361 Generate code for a little endian machine. 13362 13363 `-mbig, -mbig-endian' 13364 Generate code for a big endian machine. 13365 13366 `-msolaris' 13367 Generate code for Solaris. 13368 13369 `-mno-solaris' 13370 Do not generate code for Solaris. 13371 13372 13373 File: as.info, Node: PowerPC-Pseudo, Prev: PowerPC-Opts, Up: PPC-Dependent 13374 13375 9.27.2 PowerPC Assembler Directives 13376 ----------------------------------- 13377 13378 A number of assembler directives are available for PowerPC. The 13379 following table is far from complete. 13380 13381 `.machine "string"' 13382 This directive allows you to change the machine for which code is 13383 generated. `"string"' may be any of the -m cpu selection options 13384 (without the -m) enclosed in double quotes, `"push"', or `"pop"'. 13385 `.machine "push"' saves the currently selected cpu, which may be 13386 restored with `.machine "pop"'. 13387 13388 13389 File: as.info, Node: SH-Dependent, Next: SH64-Dependent, Prev: MSP430-Dependent, Up: Machine Dependencies 13390 13391 9.28 Renesas / SuperH SH Dependent Features 13392 =========================================== 13393 13394 * Menu: 13395 13396 * SH Options:: Options 13397 * SH Syntax:: Syntax 13398 * SH Floating Point:: Floating Point 13399 * SH Directives:: SH Machine Directives 13400 * SH Opcodes:: Opcodes 13401 13402 13403 File: as.info, Node: SH Options, Next: SH Syntax, Up: SH-Dependent 13404 13405 9.28.1 Options 13406 -------------- 13407 13408 `as' has following command-line options for the Renesas (formerly 13409 Hitachi) / SuperH SH family. 13410 13411 `--little' 13412 Generate little endian code. 13413 13414 `--big' 13415 Generate big endian code. 13416 13417 `--relax' 13418 Alter jump instructions for long displacements. 13419 13420 `--small' 13421 Align sections to 4 byte boundaries, not 16. 13422 13423 `--dsp' 13424 Enable sh-dsp insns, and disable sh3e / sh4 insns. 13425 13426 `--renesas' 13427 Disable optimization with section symbol for compatibility with 13428 Renesas assembler. 13429 13430 `--allow-reg-prefix' 13431 Allow '$' as a register name prefix. 13432 13433 `--isa=sh4 | sh4a' 13434 Specify the sh4 or sh4a instruction set. 13435 13436 `--isa=dsp' 13437 Enable sh-dsp insns, and disable sh3e / sh4 insns. 13438 13439 `--isa=fp' 13440 Enable sh2e, sh3e, sh4, and sh4a insn sets. 13441 13442 `--isa=all' 13443 Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets. 13444 13445 `-h-tick-hex' 13446 Support H'00 style hex constants in addition to 0x00 style. 13447 13448 13449 13450 File: as.info, Node: SH Syntax, Next: SH Floating Point, Prev: SH Options, Up: SH-Dependent 13451 13452 9.28.2 Syntax 13453 ------------- 13454 13455 * Menu: 13456 13457 * SH-Chars:: Special Characters 13458 * SH-Regs:: Register Names 13459 * SH-Addressing:: Addressing Modes 13460 13461 13462 File: as.info, Node: SH-Chars, Next: SH-Regs, Up: SH Syntax 13463 13464 9.28.2.1 Special Characters 13465 ........................... 13466 13467 `!' is the line comment character. 13468 13469 You can use `;' instead of a newline to separate statements. 13470 13471 Since `$' has no special meaning, you may use it in symbol names. 13472 13473 13474 File: as.info, Node: SH-Regs, Next: SH-Addressing, Prev: SH-Chars, Up: SH Syntax 13475 13476 9.28.2.2 Register Names 13477 ....................... 13478 13479 You can use the predefined symbols `r0', `r1', `r2', `r3', `r4', `r5', 13480 `r6', `r7', `r8', `r9', `r10', `r11', `r12', `r13', `r14', and `r15' to 13481 refer to the SH registers. 13482 13483 The SH also has these control registers: 13484 13485 `pr' 13486 procedure register (holds return address) 13487 13488 `pc' 13489 program counter 13490 13491 `mach' 13492 `macl' 13493 high and low multiply accumulator registers 13494 13495 `sr' 13496 status register 13497 13498 `gbr' 13499 global base register 13500 13501 `vbr' 13502 vector base register (for interrupt vectors) 13503 13504 13505 File: as.info, Node: SH-Addressing, Prev: SH-Regs, Up: SH Syntax 13506 13507 9.28.2.3 Addressing Modes 13508 ......................... 13509 13510 `as' understands the following addressing modes for the SH. `RN' in 13511 the following refers to any of the numbered registers, but _not_ the 13512 control registers. 13513 13514 `RN' 13515 Register direct 13516 13517 `@RN' 13518 Register indirect 13519 13520 `@-RN' 13521 Register indirect with pre-decrement 13522 13523 `@RN+' 13524 Register indirect with post-increment 13525 13526 `@(DISP, RN)' 13527 Register indirect with displacement 13528 13529 `@(R0, RN)' 13530 Register indexed 13531 13532 `@(DISP, GBR)' 13533 `GBR' offset 13534 13535 `@(R0, GBR)' 13536 GBR indexed 13537 13538 `ADDR' 13539 `@(DISP, PC)' 13540 PC relative address (for branch or for addressing memory). The 13541 `as' implementation allows you to use the simpler form ADDR 13542 anywhere a PC relative address is called for; the alternate form 13543 is supported for compatibility with other assemblers. 13544 13545 `#IMM' 13546 Immediate data 13547 13548 13549 File: as.info, Node: SH Floating Point, Next: SH Directives, Prev: SH Syntax, Up: SH-Dependent 13550 13551 9.28.3 Floating Point 13552 --------------------- 13553 13554 SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other 13555 SH groups can use `.float' directive to generate IEEE floating-point 13556 numbers. 13557 13558 SH2E and SH3E support single-precision floating point calculations as 13559 well as entirely PCAPI compatible emulation of double-precision 13560 floating point calculations. SH2E and SH3E instructions are a subset of 13561 the floating point calculations conforming to the IEEE754 standard. 13562 13563 In addition to single-precision and double-precision floating-point 13564 operation capability, the on-chip FPU of SH4 has a 128-bit graphic 13565 engine that enables 32-bit floating-point data to be processed 128 bits 13566 at a time. It also supports 4 * 4 array operations and inner product 13567 operations. Also, a superscalar architecture is employed that enables 13568 simultaneous execution of two instructions (including FPU 13569 instructions), providing performance of up to twice that of 13570 conventional architectures at the same frequency. 13571 13572 13573 File: as.info, Node: SH Directives, Next: SH Opcodes, Prev: SH Floating Point, Up: SH-Dependent 13574 13575 9.28.4 SH Machine Directives 13576 ---------------------------- 13577 13578 `uaword' 13579 `ualong' 13580 `as' will issue a warning when a misaligned `.word' or `.long' 13581 directive is used. You may use `.uaword' or `.ualong' to indicate 13582 that the value is intentionally misaligned. 13583 13584 13585 File: as.info, Node: SH Opcodes, Prev: SH Directives, Up: SH-Dependent 13586 13587 9.28.5 Opcodes 13588 -------------- 13589 13590 For detailed information on the SH machine instruction set, see 13591 `SH-Microcomputer User's Manual' (Renesas) or `SH-4 32-bit CPU Core 13592 Architecture' (SuperH) and `SuperH (SH) 64-Bit RISC Series' (SuperH). 13593 13594 `as' implements all the standard SH opcodes. No additional 13595 pseudo-instructions are needed on this family. Note, however, that 13596 because `as' supports a simpler form of PC-relative addressing, you may 13597 simply write (for example) 13598 13599 mov.l bar,r0 13600 13601 where other assemblers might require an explicit displacement to `bar' 13602 from the program counter: 13603 13604 mov.l @(DISP, PC) 13605 13606 Here is a summary of SH opcodes: 13607 13608 Legend: 13609 Rn a numbered register 13610 Rm another numbered register 13611 #imm immediate data 13612 disp displacement 13613 disp8 8-bit displacement 13614 disp12 12-bit displacement 13615 13616 add #imm,Rn lds.l @Rn+,PR 13617 add Rm,Rn mac.w @Rm+,@Rn+ 13618 addc Rm,Rn mov #imm,Rn 13619 addv Rm,Rn mov Rm,Rn 13620 and #imm,R0 mov.b Rm,@(R0,Rn) 13621 and Rm,Rn mov.b Rm,@-Rn 13622 and.b #imm,@(R0,GBR) mov.b Rm,@Rn 13623 bf disp8 mov.b @(disp,Rm),R0 13624 bra disp12 mov.b @(disp,GBR),R0 13625 bsr disp12 mov.b @(R0,Rm),Rn 13626 bt disp8 mov.b @Rm+,Rn 13627 clrmac mov.b @Rm,Rn 13628 clrt mov.b R0,@(disp,Rm) 13629 cmp/eq #imm,R0 mov.b R0,@(disp,GBR) 13630 cmp/eq Rm,Rn mov.l Rm,@(disp,Rn) 13631 cmp/ge Rm,Rn mov.l Rm,@(R0,Rn) 13632 cmp/gt Rm,Rn mov.l Rm,@-Rn 13633 cmp/hi Rm,Rn mov.l Rm,@Rn 13634 cmp/hs Rm,Rn mov.l @(disp,Rn),Rm 13635 cmp/pl Rn mov.l @(disp,GBR),R0 13636 cmp/pz Rn mov.l @(disp,PC),Rn 13637 cmp/str Rm,Rn mov.l @(R0,Rm),Rn 13638 div0s Rm,Rn mov.l @Rm+,Rn 13639 div0u mov.l @Rm,Rn 13640 div1 Rm,Rn mov.l R0,@(disp,GBR) 13641 exts.b Rm,Rn mov.w Rm,@(R0,Rn) 13642 exts.w Rm,Rn mov.w Rm,@-Rn 13643 extu.b Rm,Rn mov.w Rm,@Rn 13644 extu.w Rm,Rn mov.w @(disp,Rm),R0 13645 jmp @Rn mov.w @(disp,GBR),R0 13646 jsr @Rn mov.w @(disp,PC),Rn 13647 ldc Rn,GBR mov.w @(R0,Rm),Rn 13648 ldc Rn,SR mov.w @Rm+,Rn 13649 ldc Rn,VBR mov.w @Rm,Rn 13650 ldc.l @Rn+,GBR mov.w R0,@(disp,Rm) 13651 ldc.l @Rn+,SR mov.w R0,@(disp,GBR) 13652 ldc.l @Rn+,VBR mova @(disp,PC),R0 13653 lds Rn,MACH movt Rn 13654 lds Rn,MACL muls Rm,Rn 13655 lds Rn,PR mulu Rm,Rn 13656 lds.l @Rn+,MACH neg Rm,Rn 13657 lds.l @Rn+,MACL negc Rm,Rn 13658 13659 nop stc VBR,Rn 13660 not Rm,Rn stc.l GBR,@-Rn 13661 or #imm,R0 stc.l SR,@-Rn 13662 or Rm,Rn stc.l VBR,@-Rn 13663 or.b #imm,@(R0,GBR) sts MACH,Rn 13664 rotcl Rn sts MACL,Rn 13665 rotcr Rn sts PR,Rn 13666 rotl Rn sts.l MACH,@-Rn 13667 rotr Rn sts.l MACL,@-Rn 13668 rte sts.l PR,@-Rn 13669 rts sub Rm,Rn 13670 sett subc Rm,Rn 13671 shal Rn subv Rm,Rn 13672 shar Rn swap.b Rm,Rn 13673 shll Rn swap.w Rm,Rn 13674 shll16 Rn tas.b @Rn 13675 shll2 Rn trapa #imm 13676 shll8 Rn tst #imm,R0 13677 shlr Rn tst Rm,Rn 13678 shlr16 Rn tst.b #imm,@(R0,GBR) 13679 shlr2 Rn xor #imm,R0 13680 shlr8 Rn xor Rm,Rn 13681 sleep xor.b #imm,@(R0,GBR) 13682 stc GBR,Rn xtrct Rm,Rn 13683 stc SR,Rn 13684 13685 13686 File: as.info, Node: SH64-Dependent, Next: PDP-11-Dependent, Prev: SH-Dependent, Up: Machine Dependencies 13687 13688 9.29 SuperH SH64 Dependent Features 13689 =================================== 13690 13691 * Menu: 13692 13693 * SH64 Options:: Options 13694 * SH64 Syntax:: Syntax 13695 * SH64 Directives:: SH64 Machine Directives 13696 * SH64 Opcodes:: Opcodes 13697 13698 13699 File: as.info, Node: SH64 Options, Next: SH64 Syntax, Up: SH64-Dependent 13700 13701 9.29.1 Options 13702 -------------- 13703 13704 `-isa=sh4 | sh4a' 13705 Specify the sh4 or sh4a instruction set. 13706 13707 `-isa=dsp' 13708 Enable sh-dsp insns, and disable sh3e / sh4 insns. 13709 13710 `-isa=fp' 13711 Enable sh2e, sh3e, sh4, and sh4a insn sets. 13712 13713 `-isa=all' 13714 Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets. 13715 13716 `-isa=shmedia | -isa=shcompact' 13717 Specify the default instruction set. `SHmedia' specifies the 13718 32-bit opcodes, and `SHcompact' specifies the 16-bit opcodes 13719 compatible with previous SH families. The default depends on the 13720 ABI selected; the default for the 64-bit ABI is SHmedia, and the 13721 default for the 32-bit ABI is SHcompact. If neither the ABI nor 13722 the ISA is specified, the default is 32-bit SHcompact. 13723 13724 Note that the `.mode' pseudo-op is not permitted if the ISA is not 13725 specified on the command line. 13726 13727 `-abi=32 | -abi=64' 13728 Specify the default ABI. If the ISA is specified and the ABI is 13729 not, the default ABI depends on the ISA, with SHmedia defaulting 13730 to 64-bit and SHcompact defaulting to 32-bit. 13731 13732 Note that the `.abi' pseudo-op is not permitted if the ABI is not 13733 specified on the command line. When the ABI is specified on the 13734 command line, any `.abi' pseudo-ops in the source must match it. 13735 13736 `-shcompact-const-crange' 13737 Emit code-range descriptors for constants in SHcompact code 13738 sections. 13739 13740 `-no-mix' 13741 Disallow SHmedia code in the same section as constants and 13742 SHcompact code. 13743 13744 `-no-expand' 13745 Do not expand MOVI, PT, PTA or PTB instructions. 13746 13747 `-expand-pt32' 13748 With -abi=64, expand PT, PTA and PTB instructions to 32 bits only. 13749 13750 `-h-tick-hex' 13751 Support H'00 style hex constants in addition to 0x00 style. 13752 13753 13754 13755 File: as.info, Node: SH64 Syntax, Next: SH64 Directives, Prev: SH64 Options, Up: SH64-Dependent 13756 13757 9.29.2 Syntax 13758 ------------- 13759 13760 * Menu: 13761 13762 * SH64-Chars:: Special Characters 13763 * SH64-Regs:: Register Names 13764 * SH64-Addressing:: Addressing Modes 13765 13766 13767 File: as.info, Node: SH64-Chars, Next: SH64-Regs, Up: SH64 Syntax 13768 13769 9.29.2.1 Special Characters 13770 ........................... 13771 13772 `!' is the line comment character. 13773 13774 You can use `;' instead of a newline to separate statements. 13775 13776 Since `$' has no special meaning, you may use it in symbol names. 13777 13778 13779 File: as.info, Node: SH64-Regs, Next: SH64-Addressing, Prev: SH64-Chars, Up: SH64 Syntax 13780 13781 9.29.2.2 Register Names 13782 ....................... 13783 13784 You can use the predefined symbols `r0' through `r63' to refer to the 13785 SH64 general registers, `cr0' through `cr63' for control registers, 13786 `tr0' through `tr7' for target address registers, `fr0' through `fr63' 13787 for single-precision floating point registers, `dr0' through `dr62' 13788 (even numbered registers only) for double-precision floating point 13789 registers, `fv0' through `fv60' (multiples of four only) for 13790 single-precision floating point vectors, `fp0' through `fp62' (even 13791 numbered registers only) for single-precision floating point pairs, 13792 `mtrx0' through `mtrx48' (multiples of 16 only) for 4x4 matrices of 13793 single-precision floating point registers, `pc' for the program 13794 counter, and `fpscr' for the floating point status and control register. 13795 13796 You can also refer to the control registers by the mnemonics `sr', 13797 `ssr', `pssr', `intevt', `expevt', `pexpevt', `tra', `spc', `pspc', 13798 `resvec', `vbr', `tea', `dcr', `kcr0', `kcr1', `ctc', and `usr'. 13799 13800 13801 File: as.info, Node: SH64-Addressing, Prev: SH64-Regs, Up: SH64 Syntax 13802 13803 9.29.2.3 Addressing Modes 13804 ......................... 13805 13806 SH64 operands consist of either a register or immediate value. The 13807 immediate value can be a constant or label reference (or portion of a 13808 label reference), as in this example: 13809 13810 movi 4,r2 13811 pt function, tr4 13812 movi (function >> 16) & 65535,r0 13813 shori function & 65535, r0 13814 ld.l r0,4,r0 13815 13816 Instruction label references can reference labels in either SHmedia 13817 or SHcompact. To differentiate between the two, labels in SHmedia 13818 sections will always have the least significant bit set (i.e. they will 13819 be odd), which SHcompact labels will have the least significant bit 13820 reset (i.e. they will be even). If you need to reference the actual 13821 address of a label, you can use the `datalabel' modifier, as in this 13822 example: 13823 13824 .long function 13825 .long datalabel function 13826 13827 In that example, the first longword may or may not have the least 13828 significant bit set depending on whether the label is an SHmedia label 13829 or an SHcompact label. The second longword will be the actual address 13830 of the label, regardless of what type of label it is. 13831 13832 13833 File: as.info, Node: SH64 Directives, Next: SH64 Opcodes, Prev: SH64 Syntax, Up: SH64-Dependent 13834 13835 9.29.3 SH64 Machine Directives 13836 ------------------------------ 13837 13838 In addition to the SH directives, the SH64 provides the following 13839 directives: 13840 13841 `.mode [shmedia|shcompact]' 13842 `.isa [shmedia|shcompact]' 13843 Specify the ISA for the following instructions (the two directives 13844 are equivalent). Note that programs such as `objdump' rely on 13845 symbolic labels to determine when such mode switches occur (by 13846 checking the least significant bit of the label's address), so 13847 such mode/isa changes should always be followed by a label (in 13848 practice, this is true anyway). Note that you cannot use these 13849 directives if you didn't specify an ISA on the command line. 13850 13851 `.abi [32|64]' 13852 Specify the ABI for the following instructions. Note that you 13853 cannot use this directive unless you specified an ABI on the 13854 command line, and the ABIs specified must match. 13855 13856 `.uaquad' 13857 Like .uaword and .ualong, this allows you to specify an 13858 intentionally unaligned quadword (64 bit word). 13859 13860 13861 13862 File: as.info, Node: SH64 Opcodes, Prev: SH64 Directives, Up: SH64-Dependent 13863 13864 9.29.4 Opcodes 13865 -------------- 13866 13867 For detailed information on the SH64 machine instruction set, see 13868 `SuperH 64 bit RISC Series Architecture Manual' (SuperH, Inc.). 13869 13870 `as' implements all the standard SH64 opcodes. In addition, the 13871 following pseudo-opcodes may be expanded into one or more alternate 13872 opcodes: 13873 13874 `movi' 13875 If the value doesn't fit into a standard `movi' opcode, `as' will 13876 replace the `movi' with a sequence of `movi' and `shori' opcodes. 13877 13878 `pt' 13879 This expands to a sequence of `movi' and `shori' opcode, followed 13880 by a `ptrel' opcode, or to a `pta' or `ptb' opcode, depending on 13881 the label referenced. 13882 13883 13884 13885 File: as.info, Node: Sparc-Dependent, Next: TIC54X-Dependent, Prev: PPC-Dependent, Up: Machine Dependencies 13886 13887 9.30 SPARC Dependent Features 13888 ============================= 13889 13890 * Menu: 13891 13892 * Sparc-Opts:: Options 13893 * Sparc-Aligned-Data:: Option to enforce aligned data 13894 * Sparc-Syntax:: Syntax 13895 * Sparc-Float:: Floating Point 13896 * Sparc-Directives:: Sparc Machine Directives 13897 13898 13899 File: as.info, Node: Sparc-Opts, Next: Sparc-Aligned-Data, Up: Sparc-Dependent 13900 13901 9.30.1 Options 13902 -------------- 13903 13904 The SPARC chip family includes several successive versions, using the 13905 same core instruction set, but including a few additional instructions 13906 at each version. There are exceptions to this however. For details on 13907 what instructions each variant supports, please see the chip's 13908 architecture reference manual. 13909 13910 By default, `as' assumes the core instruction set (SPARC v6), but 13911 "bumps" the architecture level as needed: it switches to successively 13912 higher architectures as it encounters instructions that only exist in 13913 the higher levels. 13914 13915 If not configured for SPARC v9 (`sparc64-*-*') GAS will not bump 13916 past sparclite by default, an option must be passed to enable the v9 13917 instructions. 13918 13919 GAS treats sparclite as being compatible with v8, unless an 13920 architecture is explicitly requested. SPARC v9 is always incompatible 13921 with sparclite. 13922 13923 `-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite' 13924 `-Av8plus | -Av8plusa | -Av9 | -Av9a' 13925 Use one of the `-A' options to select one of the SPARC 13926 architectures explicitly. If you select an architecture 13927 explicitly, `as' reports a fatal error if it encounters an 13928 instruction or feature requiring an incompatible or higher level. 13929 13930 `-Av8plus' and `-Av8plusa' select a 32 bit environment. 13931 13932 `-Av9' and `-Av9a' select a 64 bit environment and are not 13933 available unless GAS is explicitly configured with 64 bit 13934 environment support. 13935 13936 `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with 13937 UltraSPARC extensions. 13938 13939 `-xarch=v8plus | -xarch=v8plusa' 13940 For compatibility with the SunOS v9 assembler. These options are 13941 equivalent to -Av8plus and -Av8plusa, respectively. 13942 13943 `-bump' 13944 Warn whenever it is necessary to switch to another level. If an 13945 architecture level is explicitly requested, GAS will not issue 13946 warnings until that level is reached, and will then bump the level 13947 as required (except between incompatible levels). 13948 13949 `-32 | -64' 13950 Select the word size, either 32 bits or 64 bits. These options 13951 are only available with the ELF object file format, and require 13952 that the necessary BFD support has been included. 13953 13954 13955 File: as.info, Node: Sparc-Aligned-Data, Next: Sparc-Syntax, Prev: Sparc-Opts, Up: Sparc-Dependent 13956 13957 9.30.2 Enforcing aligned data 13958 ----------------------------- 13959 13960 SPARC GAS normally permits data to be misaligned. For example, it 13961 permits the `.long' pseudo-op to be used on a byte boundary. However, 13962 the native SunOS assemblers issue an error when they see misaligned 13963 data. 13964 13965 You can use the `--enforce-aligned-data' option to make SPARC GAS 13966 also issue an error about misaligned data, just as the SunOS assemblers 13967 do. 13968 13969 The `--enforce-aligned-data' option is not the default because gcc 13970 issues misaligned data pseudo-ops when it initializes certain packed 13971 data structures (structures defined using the `packed' attribute). You 13972 may have to assemble with GAS in order to initialize packed data 13973 structures in your own code. 13974 13975 13976 File: as.info, Node: Sparc-Syntax, Next: Sparc-Float, Prev: Sparc-Aligned-Data, Up: Sparc-Dependent 13977 13978 9.30.3 Sparc Syntax 13979 ------------------- 13980 13981 The assembler syntax closely follows The Sparc Architecture Manual, 13982 versions 8 and 9, as well as most extensions defined by Sun for their 13983 UltraSPARC and Niagara line of processors. 13984 13985 * Menu: 13986 13987 * Sparc-Chars:: Special Characters 13988 * Sparc-Regs:: Register Names 13989 * Sparc-Constants:: Constant Names 13990 * Sparc-Relocs:: Relocations 13991 * Sparc-Size-Translations:: Size Translations 13992 13993 13994 File: as.info, Node: Sparc-Chars, Next: Sparc-Regs, Up: Sparc-Syntax 13995 13996 9.30.3.1 Special Characters 13997 ........................... 13998 13999 `#' is the line comment character. 14000 14001 `;' can be used instead of a newline to separate statements. 14002 14003 14004 File: as.info, Node: Sparc-Regs, Next: Sparc-Constants, Prev: Sparc-Chars, Up: Sparc-Syntax 14005 14006 9.30.3.2 Register Names 14007 ....................... 14008 14009 The Sparc integer register file is broken down into global, outgoing, 14010 local, and incoming. 14011 14012 * The 8 global registers are referred to as `%gN'. 14013 14014 * The 8 outgoing registers are referred to as `%oN'. 14015 14016 * The 8 local registers are referred to as `%lN'. 14017 14018 * The 8 incoming registers are referred to as `%iN'. 14019 14020 * The frame pointer register `%i6' can be referenced using the alias 14021 `%fp'. 14022 14023 * The stack pointer register `%o6' can be referenced using the alias 14024 `%sp'. 14025 14026 Floating point registers are simply referred to as `%fN'. When 14027 assembling for pre-V9, only 32 floating point registers are available. 14028 For V9 and later there are 64, but there are restrictions when 14029 referencing the upper 32 registers. They can only be accessed as 14030 double or quad, and thus only even or quad numbered accesses are 14031 allowed. For example, `%f34' is a legal floating point register, but 14032 `%f35' is not. 14033 14034 Certain V9 instructions allow access to ancillary state registers. 14035 Most simply they can be referred to as `%asrN' where N can be from 16 14036 to 31. However, there are some aliases defined to reference ASR 14037 registers defined for various UltraSPARC processors: 14038 14039 * The tick compare register is referred to as `%tick_cmpr'. 14040 14041 * The system tick register is referred to as `%stick'. An alias, 14042 `%sys_tick', exists but is deprecated and should not be used by 14043 new software. 14044 14045 * The system tick compare register is referred to as `%stick_cmpr'. 14046 An alias, `%sys_tick_cmpr', exists but is deprecated and should 14047 not be used by new software. 14048 14049 * The software interrupt register is referred to as `%softint'. 14050 14051 * The set software interrupt register is referred to as 14052 `%set_softint'. The mnemonic `%softint_set' is provided as an 14053 alias. 14054 14055 * The clear software interrupt register is referred to as 14056 `%clear_softint'. The mnemonic `%softint_clear' is provided as an 14057 alias. 14058 14059 * The performance instrumentation counters register is referred to as 14060 `%pic'. 14061 14062 * The performance control register is referred to as `%pcr'. 14063 14064 * The graphics status register is referred to as `%gsr'. 14065 14066 * The V9 dispatch control register is referred to as `%dcr'. 14067 14068 Various V9 branch and conditional move instructions allow 14069 specification of which set of integer condition codes to test. These 14070 are referred to as `%xcc' and `%icc'. 14071 14072 In V9, there are 4 sets of floating point condition codes which are 14073 referred to as `%fccN'. 14074 14075 Several special privileged and non-privileged registers exist: 14076 14077 * The V9 address space identifier register is referred to as `%asi'. 14078 14079 * The V9 restorable windows register is referred to as `%canrestore'. 14080 14081 * The V9 savable windows register is referred to as `%cansave'. 14082 14083 * The V9 clean windows register is referred to as `%cleanwin'. 14084 14085 * The V9 current window pointer register is referred to as `%cwp'. 14086 14087 * The floating-point queue register is referred to as `%fq'. 14088 14089 * The V8 co-processor queue register is referred to as `%cq'. 14090 14091 * The floating point status register is referred to as `%fsr'. 14092 14093 * The other windows register is referred to as `%otherwin'. 14094 14095 * The V9 program counter register is referred to as `%pc'. 14096 14097 * The V9 next program counter register is referred to as `%npc'. 14098 14099 * The V9 processor interrupt level register is referred to as `%pil'. 14100 14101 * The V9 processor state register is referred to as `%pstate'. 14102 14103 * The trap base address register is referred to as `%tba'. 14104 14105 * The V9 tick register is referred to as `%tick'. 14106 14107 * The V9 trap level is referred to as `%tl'. 14108 14109 * The V9 trap program counter is referred to as `%tpc'. 14110 14111 * The V9 trap next program counter is referred to as `%tnpc'. 14112 14113 * The V9 trap state is referred to as `%tstate'. 14114 14115 * The V9 trap type is referred to as `%tt'. 14116 14117 * The V9 condition codes is referred to as `%ccr'. 14118 14119 * The V9 floating-point registers state is referred to as `%fprs'. 14120 14121 * The V9 version register is referred to as `%ver'. 14122 14123 * The V9 window state register is referred to as `%wstate'. 14124 14125 * The Y register is referred to as `%y'. 14126 14127 * The V8 window invalid mask register is referred to as `%wim'. 14128 14129 * The V8 processor state register is referred to as `%psr'. 14130 14131 * The V9 global register level register is referred to as `%gl'. 14132 14133 Several special register names exist for hypervisor mode code: 14134 14135 * The hyperprivileged processor state register is referred to as 14136 `%hpstate'. 14137 14138 * The hyperprivileged trap state register is referred to as 14139 `%htstate'. 14140 14141 * The hyperprivileged interrupt pending register is referred to as 14142 `%hintp'. 14143 14144 * The hyperprivileged trap base address register is referred to as 14145 `%htba'. 14146 14147 * The hyperprivileged implementation version register is referred to 14148 as `%hver'. 14149 14150 * The hyperprivileged system tick compare register is referred to as 14151 `%hstick_cmpr'. Note that there is no `%hstick' register, the 14152 normal `%stick' is used. 14153 14154 14155 File: as.info, Node: Sparc-Constants, Next: Sparc-Relocs, Prev: Sparc-Regs, Up: Sparc-Syntax 14156 14157 9.30.3.3 Constants 14158 .................. 14159 14160 Several Sparc instructions take an immediate operand field for which 14161 mnemonic names exist. Two such examples are `membar' and `prefetch'. 14162 Another example are the set of V9 memory access instruction that allow 14163 specification of an address space identifier. 14164 14165 The `membar' instruction specifies a memory barrier that is the 14166 defined by the operand which is a bitmask. The supported mask 14167 mnemonics are: 14168 14169 * `#Sync' requests that all operations (including nonmemory 14170 reference operations) appearing prior to the `membar' must have 14171 been performed and the effects of any exceptions become visible 14172 before any instructions after the `membar' may be initiated. This 14173 corresponds to `membar' cmask field bit 2. 14174 14175 * `#MemIssue' requests that all memory reference operations 14176 appearing prior to the `membar' must have been performed before 14177 any memory operation after the `membar' may be initiated. This 14178 corresponds to `membar' cmask field bit 1. 14179 14180 * `#Lookaside' requests that a store appearing prior to the `membar' 14181 must complete before any load following the `membar' referencing 14182 the same address can be initiated. This corresponds to `membar' 14183 cmask field bit 0. 14184 14185 * `#StoreStore' defines that the effects of all stores appearing 14186 prior to the `membar' instruction must be visible to all 14187 processors before the effect of any stores following the `membar'. 14188 Equivalent to the deprecated `stbar' instruction. This 14189 corresponds to `membar' mmask field bit 3. 14190 14191 * `#LoadStore' defines all loads appearing prior to the `membar' 14192 instruction must have been performed before the effect of any 14193 stores following the `membar' is visible to any other processor. 14194 This corresponds to `membar' mmask field bit 2. 14195 14196 * `#StoreLoad' defines that the effects of all stores appearing 14197 prior to the `membar' instruction must be visible to all 14198 processors before loads following the `membar' may be performed. 14199 This corresponds to `membar' mmask field bit 1. 14200 14201 * `#LoadLoad' defines that all loads appearing prior to the `membar' 14202 instruction must have been performed before any loads following 14203 the `membar' may be performed. This corresponds to `membar' mmask 14204 field bit 0. 14205 14206 14207 These values can be ored together, for example: 14208 14209 membar #Sync 14210 membar #StoreLoad | #LoadLoad 14211 membar #StoreLoad | #StoreStore 14212 14213 The `prefetch' and `prefetcha' instructions take a prefetch function 14214 code. The following prefetch function code constant mnemonics are 14215 available: 14216 14217 * `#n_reads' requests a prefetch for several reads, and corresponds 14218 to a prefetch function code of 0. 14219 14220 `#one_read' requests a prefetch for one read, and corresponds to a 14221 prefetch function code of 1. 14222 14223 `#n_writes' requests a prefetch for several writes (and possibly 14224 reads), and corresponds to a prefetch function code of 2. 14225 14226 `#one_write' requests a prefetch for one write, and corresponds to 14227 a prefetch function code of 3. 14228 14229 `#page' requests a prefetch page, and corresponds to a prefetch 14230 function code of 4. 14231 14232 `#invalidate' requests a prefetch invalidate, and corresponds to a 14233 prefetch function code of 16. 14234 14235 `#unified' requests a prefetch to the nearest unified cache, and 14236 corresponds to a prefetch function code of 17. 14237 14238 `#n_reads_strong' requests a strong prefetch for several reads, 14239 and corresponds to a prefetch function code of 20. 14240 14241 `#one_read_strong' requests a strong prefetch for one read, and 14242 corresponds to a prefetch function code of 21. 14243 14244 `#n_writes_strong' requests a strong prefetch for several writes, 14245 and corresponds to a prefetch function code of 22. 14246 14247 `#one_write_strong' requests a strong prefetch for one write, and 14248 corresponds to a prefetch function code of 23. 14249 14250 Onle one prefetch code may be specified. Here are some examples: 14251 14252 prefetch [%l0 + %l2], #one_read 14253 prefetch [%g2 + 8], #n_writes 14254 prefetcha [%g1] 0x8, #unified 14255 prefetcha [%o0 + 0x10] %asi, #n_reads 14256 14257 The actual behavior of a given prefetch function code is processor 14258 specific. If a processor does not implement a given prefetch 14259 function code, it will treat the prefetch instruction as a nop. 14260 14261 For instructions that accept an immediate address space identifier, 14262 `as' provides many mnemonics corresponding to V9 defined as well 14263 as UltraSPARC and Niagara extended values. For example, `#ASI_P' 14264 and `#ASI_BLK_INIT_QUAD_LDD_AIUS'. See the V9 and processor 14265 specific manuals for details. 14266 14267 14268 14269 File: as.info, Node: Sparc-Relocs, Next: Sparc-Size-Translations, Prev: Sparc-Constants, Up: Sparc-Syntax 14270 14271 9.30.3.4 Relocations 14272 .................... 14273 14274 ELF relocations are available as defined in the 32-bit and 64-bit Sparc 14275 ELF specifications. 14276 14277 `R_SPARC_HI22' is obtained using `%hi' and `R_SPARC_LO10' is 14278 obtained using `%lo'. Likewise `R_SPARC_HIX22' is obtained from `%hix' 14279 and `R_SPARC_LOX10' is obtained using `%lox'. For example: 14280 14281 sethi %hi(symbol), %g1 14282 or %g1, %lo(symbol), %g1 14283 14284 sethi %hix(symbol), %g1 14285 xor %g1, %lox(symbol), %g1 14286 14287 These "high" mnemonics extract bits 31:10 of their operand, and the 14288 "low" mnemonics extract bits 9:0 of their operand. 14289 14290 V9 code model relocations can be requested as follows: 14291 14292 * `R_SPARC_HH22' is requested using `%hh'. It can also be generated 14293 using `%uhi'. 14294 14295 * `R_SPARC_HM10' is requested using `%hm'. It can also be generated 14296 using `%ulo'. 14297 14298 * `R_SPARC_LM22' is requested using `%lm'. 14299 14300 * `R_SPARC_H44' is requested using `%h44'. 14301 14302 * `R_SPARC_M44' is requested using `%m44'. 14303 14304 * `R_SPARC_L44' is requested using `%l44'. 14305 14306 The PC relative relocation `R_SPARC_PC22' can be obtained by 14307 enclosing an operand inside of `%pc22'. Likewise, the `R_SPARC_PC10' 14308 relocation can be obtained using `%pc10'. These are mostly used when 14309 assembling PIC code. For example, the standard PIC sequence on Sparc 14310 to get the base of the global offset table, PC relative, into a 14311 register, can be performed as: 14312 14313 sethi %pc22(_GLOBAL_OFFSET_TABLE_-4), %l7 14314 add %l7, %pc10(_GLOBAL_OFFSET_TABLE_+4), %l7 14315 14316 Several relocations exist to allow the link editor to potentially 14317 optimize GOT data references. The `R_SPARC_GOTDATA_OP_HIX22' 14318 relocation can obtained by enclosing an operand inside of 14319 `%gdop_hix22'. The `R_SPARC_GOTDATA_OP_LOX10' relocation can obtained 14320 by enclosing an operand inside of `%gdop_lox10'. Likewise, 14321 `R_SPARC_GOTDATA_OP' can be obtained by enclosing an operand inside of 14322 `%gdop'. For example, assuming the GOT base is in register `%l7': 14323 14324 sethi %gdop_hix22(symbol), %l1 14325 xor %l1, %gdop_lox10(symbol), %l1 14326 ld [%l7 + %l1], %l2, %gdop(symbol) 14327 14328 There are many relocations that can be requested for access to 14329 thread local storage variables. All of the Sparc TLS mnemonics are 14330 supported: 14331 14332 * `R_SPARC_TLS_GD_HI22' is requested using `%tgd_hi22'. 14333 14334 * `R_SPARC_TLS_GD_LO10' is requested using `%tgd_lo10'. 14335 14336 * `R_SPARC_TLS_GD_ADD' is requested using `%tgd_add'. 14337 14338 * `R_SPARC_TLS_GD_CALL' is requested using `%tgd_call'. 14339 14340 * `R_SPARC_TLS_LDM_HI22' is requested using `%tldm_hi22'. 14341 14342 * `R_SPARC_TLS_LDM_LO10' is requested using `%tldm_lo10'. 14343 14344 * `R_SPARC_TLS_LDM_ADD' is requested using `%tldm_add'. 14345 14346 * `R_SPARC_TLS_LDM_CALL' is requested using `%tldm_call'. 14347 14348 * `R_SPARC_TLS_LDO_HIX22' is requested using `%tldo_hix22'. 14349 14350 * `R_SPARC_TLS_LDO_LOX10' is requested using `%tldo_lox10'. 14351 14352 * `R_SPARC_TLS_LDO_ADD' is requested using `%tldo_add'. 14353 14354 * `R_SPARC_TLS_IE_HI22' is requested using `%tie_hi22'. 14355 14356 * `R_SPARC_TLS_IE_LO10' is requested using `%tie_lo10'. 14357 14358 * `R_SPARC_TLS_IE_LD' is requested using `%tie_ld'. 14359 14360 * `R_SPARC_TLS_IE_LDX' is requested using `%tie_ldx'. 14361 14362 * `R_SPARC_TLS_IE_ADD' is requested using `%tie_add'. 14363 14364 * `R_SPARC_TLS_LE_HIX22' is requested using `%tle_hix22'. 14365 14366 * `R_SPARC_TLS_LE_LOX10' is requested using `%tle_lox10'. 14367 14368 Here are some example TLS model sequences. 14369 14370 First, General Dynamic: 14371 14372 sethi %tgd_hi22(symbol), %l1 14373 add %l1, %tgd_lo10(symbol), %l1 14374 add %l7, %l1, %o0, %tgd_add(symbol) 14375 call __tls_get_addr, %tgd_call(symbol) 14376 nop 14377 14378 Local Dynamic: 14379 14380 sethi %tldm_hi22(symbol), %l1 14381 add %l1, %tldm_lo10(symbol), %l1 14382 add %l7, %l1, %o0, %tldm_add(symbol) 14383 call __tls_get_addr, %tldm_call(symbol) 14384 nop 14385 14386 sethi %tldo_hix22(symbol), %l1 14387 xor %l1, %tldo_lox10(symbol), %l1 14388 add %o0, %l1, %l1, %tldo_add(symbol) 14389 14390 Initial Exec: 14391 14392 sethi %tie_hi22(symbol), %l1 14393 add %l1, %tie_lo10(symbol), %l1 14394 ld [%l7 + %l1], %o0, %tie_ld(symbol) 14395 add %g7, %o0, %o0, %tie_add(symbol) 14396 14397 sethi %tie_hi22(symbol), %l1 14398 add %l1, %tie_lo10(symbol), %l1 14399 ldx [%l7 + %l1], %o0, %tie_ldx(symbol) 14400 add %g7, %o0, %o0, %tie_add(symbol) 14401 14402 And finally, Local Exec: 14403 14404 sethi %tle_hix22(symbol), %l1 14405 add %l1, %tle_lox10(symbol), %l1 14406 add %g7, %l1, %l1 14407 14408 When assembling for 64-bit, and a secondary constant addend is 14409 specified in an address expression that would normally generate an 14410 `R_SPARC_LO10' relocation, the assembler will emit an `R_SPARC_OLO10' 14411 instead. 14412 14413 14414 File: as.info, Node: Sparc-Size-Translations, Prev: Sparc-Relocs, Up: Sparc-Syntax 14415 14416 9.30.3.5 Size Translations 14417 .......................... 14418 14419 Often it is desirable to write code in an operand size agnostic manner. 14420 `as' provides support for this via operand size opcode translations. 14421 Translations are supported for loads, stores, shifts, compare-and-swap 14422 atomics, and the `clr' synthetic instruction. 14423 14424 If generating 32-bit code, `as' will generate the 32-bit opcode. 14425 Whereas if 64-bit code is being generated, the 64-bit opcode will be 14426 emitted. For example `ldn' will be transformed into `ld' for 32-bit 14427 code and `ldx' for 64-bit code. 14428 14429 Here is an example meant to demonstrate all the supported opcode 14430 translations: 14431 14432 ldn [%o0], %o1 14433 ldna [%o0] %asi, %o2 14434 stn %o1, [%o0] 14435 stna %o2, [%o0] %asi 14436 slln %o3, 3, %o3 14437 srln %o4, 8, %o4 14438 sran %o5, 12, %o5 14439 casn [%o0], %o1, %o2 14440 casna [%o0] %asi, %o1, %o2 14441 clrn %g1 14442 14443 In 32-bit mode `as' will emit: 14444 14445 ld [%o0], %o1 14446 lda [%o0] %asi, %o2 14447 st %o1, [%o0] 14448 sta %o2, [%o0] %asi 14449 sll %o3, 3, %o3 14450 srl %o4, 8, %o4 14451 sra %o5, 12, %o5 14452 cas [%o0], %o1, %o2 14453 casa [%o0] %asi, %o1, %o2 14454 clr %g1 14455 14456 And in 64-bit mode `as' will emit: 14457 14458 ldx [%o0], %o1 14459 ldxa [%o0] %asi, %o2 14460 stx %o1, [%o0] 14461 stxa %o2, [%o0] %asi 14462 sllx %o3, 3, %o3 14463 srlx %o4, 8, %o4 14464 srax %o5, 12, %o5 14465 casx [%o0], %o1, %o2 14466 casxa [%o0] %asi, %o1, %o2 14467 clrx %g1 14468 14469 Finally, the `.nword' translating directive is supported as well. 14470 It is documented in the section on Sparc machine directives. 14471 14472 14473 File: as.info, Node: Sparc-Float, Next: Sparc-Directives, Prev: Sparc-Syntax, Up: Sparc-Dependent 14474 14475 9.30.4 Floating Point 14476 --------------------- 14477 14478 The Sparc uses IEEE floating-point numbers. 14479 14480 14481 File: as.info, Node: Sparc-Directives, Prev: Sparc-Float, Up: Sparc-Dependent 14482 14483 9.30.5 Sparc Machine Directives 14484 ------------------------------- 14485 14486 The Sparc version of `as' supports the following additional machine 14487 directives: 14488 14489 `.align' 14490 This must be followed by the desired alignment in bytes. 14491 14492 `.common' 14493 This must be followed by a symbol name, a positive number, and 14494 `"bss"'. This behaves somewhat like `.comm', but the syntax is 14495 different. 14496 14497 `.half' 14498 This is functionally identical to `.short'. 14499 14500 `.nword' 14501 On the Sparc, the `.nword' directive produces native word sized 14502 value, ie. if assembling with -32 it is equivalent to `.word', if 14503 assembling with -64 it is equivalent to `.xword'. 14504 14505 `.proc' 14506 This directive is ignored. Any text following it on the same line 14507 is also ignored. 14508 14509 `.register' 14510 This directive declares use of a global application or system 14511 register. It must be followed by a register name %g2, %g3, %g6 or 14512 %g7, comma and the symbol name for that register. If symbol name 14513 is `#scratch', it is a scratch register, if it is `#ignore', it 14514 just suppresses any errors about using undeclared global register, 14515 but does not emit any information about it into the object file. 14516 This can be useful e.g. if you save the register before use and 14517 restore it after. 14518 14519 `.reserve' 14520 This must be followed by a symbol name, a positive number, and 14521 `"bss"'. This behaves somewhat like `.lcomm', but the syntax is 14522 different. 14523 14524 `.seg' 14525 This must be followed by `"text"', `"data"', or `"data1"'. It 14526 behaves like `.text', `.data', or `.data 1'. 14527 14528 `.skip' 14529 This is functionally identical to the `.space' directive. 14530 14531 `.word' 14532 On the Sparc, the `.word' directive produces 32 bit values, 14533 instead of the 16 bit values it produces on many other machines. 14534 14535 `.xword' 14536 On the Sparc V9 processor, the `.xword' directive produces 64 bit 14537 values. 14538 14539 14540 File: as.info, Node: TIC54X-Dependent, Next: V850-Dependent, Prev: Sparc-Dependent, Up: Machine Dependencies 14541 14542 9.31 TIC54X Dependent Features 14543 ============================== 14544 14545 * Menu: 14546 14547 * TIC54X-Opts:: Command-line Options 14548 * TIC54X-Block:: Blocking 14549 * TIC54X-Env:: Environment Settings 14550 * TIC54X-Constants:: Constants Syntax 14551 * TIC54X-Subsyms:: String Substitution 14552 * TIC54X-Locals:: Local Label Syntax 14553 * TIC54X-Builtins:: Builtin Assembler Math Functions 14554 * TIC54X-Ext:: Extended Addressing Support 14555 * TIC54X-Directives:: Directives 14556 * TIC54X-Macros:: Macro Features 14557 * TIC54X-MMRegs:: Memory-mapped Registers 14558 14559 14560 File: as.info, Node: TIC54X-Opts, Next: TIC54X-Block, Up: TIC54X-Dependent 14561 14562 9.31.1 Options 14563 -------------- 14564 14565 The TMS320C54X version of `as' has a few machine-dependent options. 14566 14567 You can use the `-mfar-mode' option to enable extended addressing 14568 mode. All addresses will be assumed to be > 16 bits, and the 14569 appropriate relocation types will be used. This option is equivalent 14570 to using the `.far_mode' directive in the assembly code. If you do not 14571 use the `-mfar-mode' option, all references will be assumed to be 16 14572 bits. This option may be abbreviated to `-mf'. 14573 14574 You can use the `-mcpu' option to specify a particular CPU. This 14575 option is equivalent to using the `.version' directive in the assembly 14576 code. For recognized CPU codes, see *Note `.version': 14577 TIC54X-Directives. The default CPU version is `542'. 14578 14579 You can use the `-merrors-to-file' option to redirect error output 14580 to a file (this provided for those deficient environments which don't 14581 provide adequate output redirection). This option may be abbreviated to 14582 `-me'. 14583 14584 14585 File: as.info, Node: TIC54X-Block, Next: TIC54X-Env, Prev: TIC54X-Opts, Up: TIC54X-Dependent 14586 14587 9.31.2 Blocking 14588 --------------- 14589 14590 A blocked section or memory block is guaranteed not to cross the 14591 blocking boundary (usually a page, or 128 words) if it is smaller than 14592 the blocking size, or to start on a page boundary if it is larger than 14593 the blocking size. 14594 14595 14596 File: as.info, Node: TIC54X-Env, Next: TIC54X-Constants, Prev: TIC54X-Block, Up: TIC54X-Dependent 14597 14598 9.31.3 Environment Settings 14599 --------------------------- 14600 14601 `C54XDSP_DIR' and `A_DIR' are semicolon-separated paths which are added 14602 to the list of directories normally searched for source and include 14603 files. `C54XDSP_DIR' will override `A_DIR'. 14604 14605 14606 File: as.info, Node: TIC54X-Constants, Next: TIC54X-Subsyms, Prev: TIC54X-Env, Up: TIC54X-Dependent 14607 14608 9.31.4 Constants Syntax 14609 ----------------------- 14610 14611 The TIC54X version of `as' allows the following additional constant 14612 formats, using a suffix to indicate the radix: 14613 14614 Binary `000000B, 011000b' 14615 Octal `10Q, 224q' 14616 Hexadecimal `45h, 0FH' 14617 14618 14619 File: as.info, Node: TIC54X-Subsyms, Next: TIC54X-Locals, Prev: TIC54X-Constants, Up: TIC54X-Dependent 14620 14621 9.31.5 String Substitution 14622 -------------------------- 14623 14624 A subset of allowable symbols (which we'll call subsyms) may be assigned 14625 arbitrary string values. This is roughly equivalent to C preprocessor 14626 #define macros. When `as' encounters one of these symbols, the symbol 14627 is replaced in the input stream by its string value. Subsym names 14628 *must* begin with a letter. 14629 14630 Subsyms may be defined using the `.asg' and `.eval' directives 14631 (*Note `.asg': TIC54X-Directives, *Note `.eval': TIC54X-Directives. 14632 14633 Expansion is recursive until a previously encountered symbol is 14634 seen, at which point substitution stops. 14635 14636 In this example, x is replaced with SYM2; SYM2 is replaced with 14637 SYM1, and SYM1 is replaced with x. At this point, x has already been 14638 encountered and the substitution stops. 14639 14640 .asg "x",SYM1 14641 .asg "SYM1",SYM2 14642 .asg "SYM2",x 14643 add x,a ; final code assembled is "add x, a" 14644 14645 Macro parameters are converted to subsyms; a side effect of this is 14646 the normal `as' '\ARG' dereferencing syntax is unnecessary. Subsyms 14647 defined within a macro will have global scope, unless the `.var' 14648 directive is used to identify the subsym as a local macro variable 14649 *note `.var': TIC54X-Directives. 14650 14651 Substitution may be forced in situations where replacement might be 14652 ambiguous by placing colons on either side of the subsym. The following 14653 code: 14654 14655 .eval "10",x 14656 LAB:X: add #x, a 14657 14658 When assembled becomes: 14659 14660 LAB10 add #10, a 14661 14662 Smaller parts of the string assigned to a subsym may be accessed with 14663 the following syntax: 14664 14665 ``:SYMBOL(CHAR_INDEX):'' 14666 Evaluates to a single-character string, the character at 14667 CHAR_INDEX. 14668 14669 ``:SYMBOL(START,LENGTH):'' 14670 Evaluates to a substring of SYMBOL beginning at START with length 14671 LENGTH. 14672 14673 14674 File: as.info, Node: TIC54X-Locals, Next: TIC54X-Builtins, Prev: TIC54X-Subsyms, Up: TIC54X-Dependent 14675 14676 9.31.6 Local Labels 14677 ------------------- 14678 14679 Local labels may be defined in two ways: 14680 14681 * $N, where N is a decimal number between 0 and 9 14682 14683 * LABEL?, where LABEL is any legal symbol name. 14684 14685 Local labels thus defined may be redefined or automatically 14686 generated. The scope of a local label is based on when it may be 14687 undefined or reset. This happens when one of the following situations 14688 is encountered: 14689 14690 * .newblock directive *note `.newblock': TIC54X-Directives. 14691 14692 * The current section is changed (.sect, .text, or .data) 14693 14694 * Entering or leaving an included file 14695 14696 * The macro scope where the label was defined is exited 14697 14698 14699 File: as.info, Node: TIC54X-Builtins, Next: TIC54X-Ext, Prev: TIC54X-Locals, Up: TIC54X-Dependent 14700 14701 9.31.7 Math Builtins 14702 -------------------- 14703 14704 The following built-in functions may be used to generate a 14705 floating-point value. All return a floating-point value except `$cvi', 14706 `$int', and `$sgn', which return an integer value. 14707 14708 ``$acos(EXPR)'' 14709 Returns the floating point arccosine of EXPR. 14710 14711 ``$asin(EXPR)'' 14712 Returns the floating point arcsine of EXPR. 14713 14714 ``$atan(EXPR)'' 14715 Returns the floating point arctangent of EXPR. 14716 14717 ``$atan2(EXPR1,EXPR2)'' 14718 Returns the floating point arctangent of EXPR1 / EXPR2. 14719 14720 ``$ceil(EXPR)'' 14721 Returns the smallest integer not less than EXPR as floating point. 14722 14723 ``$cosh(EXPR)'' 14724 Returns the floating point hyperbolic cosine of EXPR. 14725 14726 ``$cos(EXPR)'' 14727 Returns the floating point cosine of EXPR. 14728 14729 ``$cvf(EXPR)'' 14730 Returns the integer value EXPR converted to floating-point. 14731 14732 ``$cvi(EXPR)'' 14733 Returns the floating point value EXPR converted to integer. 14734 14735 ``$exp(EXPR)'' 14736 Returns the floating point value e ^ EXPR. 14737 14738 ``$fabs(EXPR)'' 14739 Returns the floating point absolute value of EXPR. 14740 14741 ``$floor(EXPR)'' 14742 Returns the largest integer that is not greater than EXPR as 14743 floating point. 14744 14745 ``$fmod(EXPR1,EXPR2)'' 14746 Returns the floating point remainder of EXPR1 / EXPR2. 14747 14748 ``$int(EXPR)'' 14749 Returns 1 if EXPR evaluates to an integer, zero otherwise. 14750 14751 ``$ldexp(EXPR1,EXPR2)'' 14752 Returns the floating point value EXPR1 * 2 ^ EXPR2. 14753 14754 ``$log10(EXPR)'' 14755 Returns the base 10 logarithm of EXPR. 14756 14757 ``$log(EXPR)'' 14758 Returns the natural logarithm of EXPR. 14759 14760 ``$max(EXPR1,EXPR2)'' 14761 Returns the floating point maximum of EXPR1 and EXPR2. 14762 14763 ``$min(EXPR1,EXPR2)'' 14764 Returns the floating point minimum of EXPR1 and EXPR2. 14765 14766 ``$pow(EXPR1,EXPR2)'' 14767 Returns the floating point value EXPR1 ^ EXPR2. 14768 14769 ``$round(EXPR)'' 14770 Returns the nearest integer to EXPR as a floating point number. 14771 14772 ``$sgn(EXPR)'' 14773 Returns -1, 0, or 1 based on the sign of EXPR. 14774 14775 ``$sin(EXPR)'' 14776 Returns the floating point sine of EXPR. 14777 14778 ``$sinh(EXPR)'' 14779 Returns the floating point hyperbolic sine of EXPR. 14780 14781 ``$sqrt(EXPR)'' 14782 Returns the floating point square root of EXPR. 14783 14784 ``$tan(EXPR)'' 14785 Returns the floating point tangent of EXPR. 14786 14787 ``$tanh(EXPR)'' 14788 Returns the floating point hyperbolic tangent of EXPR. 14789 14790 ``$trunc(EXPR)'' 14791 Returns the integer value of EXPR truncated towards zero as 14792 floating point. 14793 14794 14795 14796 File: as.info, Node: TIC54X-Ext, Next: TIC54X-Directives, Prev: TIC54X-Builtins, Up: TIC54X-Dependent 14797 14798 9.31.8 Extended Addressing 14799 -------------------------- 14800 14801 The `LDX' pseudo-op is provided for loading the extended addressing bits 14802 of a label or address. For example, if an address `_label' resides in 14803 extended program memory, the value of `_label' may be loaded as follows: 14804 ldx #_label,16,a ; loads extended bits of _label 14805 or #_label,a ; loads lower 16 bits of _label 14806 bacc a ; full address is in accumulator A 14807 14808 14809 File: as.info, Node: TIC54X-Directives, Next: TIC54X-Macros, Prev: TIC54X-Ext, Up: TIC54X-Dependent 14810 14811 9.31.9 Directives 14812 ----------------- 14813 14814 `.align [SIZE]' 14815 `.even' 14816 Align the section program counter on the next boundary, based on 14817 SIZE. SIZE may be any power of 2. `.even' is equivalent to 14818 `.align' with a SIZE of 2. 14819 `1' 14820 Align SPC to word boundary 14821 14822 `2' 14823 Align SPC to longword boundary (same as .even) 14824 14825 `128' 14826 Align SPC to page boundary 14827 14828 `.asg STRING, NAME' 14829 Assign NAME the string STRING. String replacement is performed on 14830 STRING before assignment. 14831 14832 `.eval STRING, NAME' 14833 Evaluate the contents of string STRING and assign the result as a 14834 string to the subsym NAME. String replacement is performed on 14835 STRING before assignment. 14836 14837 `.bss SYMBOL, SIZE [, [BLOCKING_FLAG] [,ALIGNMENT_FLAG]]' 14838 Reserve space for SYMBOL in the .bss section. SIZE is in words. 14839 If present, BLOCKING_FLAG indicates the allocated space should be 14840 aligned on a page boundary if it would otherwise cross a page 14841 boundary. If present, ALIGNMENT_FLAG causes the assembler to 14842 allocate SIZE on a long word boundary. 14843 14844 `.byte VALUE [,...,VALUE_N]' 14845 `.ubyte VALUE [,...,VALUE_N]' 14846 `.char VALUE [,...,VALUE_N]' 14847 `.uchar VALUE [,...,VALUE_N]' 14848 Place one or more bytes into consecutive words of the current 14849 section. The upper 8 bits of each word is zero-filled. If a 14850 label is used, it points to the word allocated for the first byte 14851 encountered. 14852 14853 `.clink ["SECTION_NAME"]' 14854 Set STYP_CLINK flag for this section, which indicates to the 14855 linker that if no symbols from this section are referenced, the 14856 section should not be included in the link. If SECTION_NAME is 14857 omitted, the current section is used. 14858 14859 `.c_mode' 14860 TBD. 14861 14862 `.copy "FILENAME" | FILENAME' 14863 `.include "FILENAME" | FILENAME' 14864 Read source statements from FILENAME. The normal include search 14865 path is used. Normally .copy will cause statements from the 14866 included file to be printed in the assembly listing and .include 14867 will not, but this distinction is not currently implemented. 14868 14869 `.data' 14870 Begin assembling code into the .data section. 14871 14872 `.double VALUE [,...,VALUE_N]' 14873 `.ldouble VALUE [,...,VALUE_N]' 14874 `.float VALUE [,...,VALUE_N]' 14875 `.xfloat VALUE [,...,VALUE_N]' 14876 Place an IEEE single-precision floating-point representation of 14877 one or more floating-point values into the current section. All 14878 but `.xfloat' align the result on a longword boundary. Values are 14879 stored most-significant word first. 14880 14881 `.drlist' 14882 `.drnolist' 14883 Control printing of directives to the listing file. Ignored. 14884 14885 `.emsg STRING' 14886 `.mmsg STRING' 14887 `.wmsg STRING' 14888 Emit a user-defined error, message, or warning, respectively. 14889 14890 `.far_mode' 14891 Use extended addressing when assembling statements. This should 14892 appear only once per file, and is equivalent to the -mfar-mode 14893 option *note `-mfar-mode': TIC54X-Opts. 14894 14895 `.fclist' 14896 `.fcnolist' 14897 Control printing of false conditional blocks to the listing file. 14898 14899 `.field VALUE [,SIZE]' 14900 Initialize a bitfield of SIZE bits in the current section. If 14901 VALUE is relocatable, then SIZE must be 16. SIZE defaults to 16 14902 bits. If VALUE does not fit into SIZE bits, the value will be 14903 truncated. Successive `.field' directives will pack starting at 14904 the current word, filling the most significant bits first, and 14905 aligning to the start of the next word if the field size does not 14906 fit into the space remaining in the current word. A `.align' 14907 directive with an operand of 1 will force the next `.field' 14908 directive to begin packing into a new word. If a label is used, it 14909 points to the word that contains the specified field. 14910 14911 `.global SYMBOL [,...,SYMBOL_N]' 14912 `.def SYMBOL [,...,SYMBOL_N]' 14913 `.ref SYMBOL [,...,SYMBOL_N]' 14914 `.def' nominally identifies a symbol defined in the current file 14915 and available to other files. `.ref' identifies a symbol used in 14916 the current file but defined elsewhere. Both map to the standard 14917 `.global' directive. 14918 14919 `.half VALUE [,...,VALUE_N]' 14920 `.uhalf VALUE [,...,VALUE_N]' 14921 `.short VALUE [,...,VALUE_N]' 14922 `.ushort VALUE [,...,VALUE_N]' 14923 `.int VALUE [,...,VALUE_N]' 14924 `.uint VALUE [,...,VALUE_N]' 14925 `.word VALUE [,...,VALUE_N]' 14926 `.uword VALUE [,...,VALUE_N]' 14927 Place one or more values into consecutive words of the current 14928 section. If a label is used, it points to the word allocated for 14929 the first value encountered. 14930 14931 `.label SYMBOL' 14932 Define a special SYMBOL to refer to the load time address of the 14933 current section program counter. 14934 14935 `.length' 14936 `.width' 14937 Set the page length and width of the output listing file. Ignored. 14938 14939 `.list' 14940 `.nolist' 14941 Control whether the source listing is printed. Ignored. 14942 14943 `.long VALUE [,...,VALUE_N]' 14944 `.ulong VALUE [,...,VALUE_N]' 14945 `.xlong VALUE [,...,VALUE_N]' 14946 Place one or more 32-bit values into consecutive words in the 14947 current section. The most significant word is stored first. 14948 `.long' and `.ulong' align the result on a longword boundary; 14949 `xlong' does not. 14950 14951 `.loop [COUNT]' 14952 `.break [CONDITION]' 14953 `.endloop' 14954 Repeatedly assemble a block of code. `.loop' begins the block, and 14955 `.endloop' marks its termination. COUNT defaults to 1024, and 14956 indicates the number of times the block should be repeated. 14957 `.break' terminates the loop so that assembly begins after the 14958 `.endloop' directive. The optional CONDITION will cause the loop 14959 to terminate only if it evaluates to zero. 14960 14961 `MACRO_NAME .macro [PARAM1][,...PARAM_N]' 14962 `[.mexit]' 14963 `.endm' 14964 See the section on macros for more explanation (*Note 14965 TIC54X-Macros::. 14966 14967 `.mlib "FILENAME" | FILENAME' 14968 Load the macro library FILENAME. FILENAME must be an archived 14969 library (BFD ar-compatible) of text files, expected to contain 14970 only macro definitions. The standard include search path is used. 14971 14972 `.mlist' 14973 14974 `.mnolist' 14975 Control whether to include macro and loop block expansions in the 14976 listing output. Ignored. 14977 14978 `.mmregs' 14979 Define global symbolic names for the 'c54x registers. Supposedly 14980 equivalent to executing `.set' directives for each register with 14981 its memory-mapped value, but in reality is provided only for 14982 compatibility and does nothing. 14983 14984 `.newblock' 14985 This directive resets any TIC54X local labels currently defined. 14986 Normal `as' local labels are unaffected. 14987 14988 `.option OPTION_LIST' 14989 Set listing options. Ignored. 14990 14991 `.sblock "SECTION_NAME" | SECTION_NAME [,"NAME_N" | NAME_N]' 14992 Designate SECTION_NAME for blocking. Blocking guarantees that a 14993 section will start on a page boundary (128 words) if it would 14994 otherwise cross a page boundary. Only initialized sections may be 14995 designated with this directive. See also *Note TIC54X-Block::. 14996 14997 `.sect "SECTION_NAME"' 14998 Define a named initialized section and make it the current section. 14999 15000 `SYMBOL .set "VALUE"' 15001 `SYMBOL .equ "VALUE"' 15002 Equate a constant VALUE to a SYMBOL, which is placed in the symbol 15003 table. SYMBOL may not be previously defined. 15004 15005 `.space SIZE_IN_BITS' 15006 `.bes SIZE_IN_BITS' 15007 Reserve the given number of bits in the current section and 15008 zero-fill them. If a label is used with `.space', it points to the 15009 *first* word reserved. With `.bes', the label points to the 15010 *last* word reserved. 15011 15012 `.sslist' 15013 `.ssnolist' 15014 Controls the inclusion of subsym replacement in the listing 15015 output. Ignored. 15016 15017 `.string "STRING" [,...,"STRING_N"]' 15018 `.pstring "STRING" [,...,"STRING_N"]' 15019 Place 8-bit characters from STRING into the current section. 15020 `.string' zero-fills the upper 8 bits of each word, while 15021 `.pstring' puts two characters into each word, filling the 15022 most-significant bits first. Unused space is zero-filled. If a 15023 label is used, it points to the first word initialized. 15024 15025 `[STAG] .struct [OFFSET]' 15026 `[NAME_1] element [COUNT_1]' 15027 `[NAME_2] element [COUNT_2]' 15028 `[TNAME] .tag STAGX [TCOUNT]' 15029 `...' 15030 `[NAME_N] element [COUNT_N]' 15031 `[SSIZE] .endstruct' 15032 `LABEL .tag [STAG]' 15033 Assign symbolic offsets to the elements of a structure. STAG 15034 defines a symbol to use to reference the structure. OFFSET 15035 indicates a starting value to use for the first element 15036 encountered; otherwise it defaults to zero. Each element can have 15037 a named offset, NAME, which is a symbol assigned the value of the 15038 element's offset into the structure. If STAG is missing, these 15039 become global symbols. COUNT adjusts the offset that many times, 15040 as if `element' were an array. `element' may be one of `.byte', 15041 `.word', `.long', `.float', or any equivalent of those, and the 15042 structure offset is adjusted accordingly. `.field' and `.string' 15043 are also allowed; the size of `.field' is one bit, and `.string' 15044 is considered to be one word in size. Only element descriptors, 15045 structure/union tags, `.align' and conditional assembly directives 15046 are allowed within `.struct'/`.endstruct'. `.align' aligns member 15047 offsets to word boundaries only. SSIZE, if provided, will always 15048 be assigned the size of the structure. 15049 15050 The `.tag' directive, in addition to being used to define a 15051 structure/union element within a structure, may be used to apply a 15052 structure to a symbol. Once applied to LABEL, the individual 15053 structure elements may be applied to LABEL to produce the desired 15054 offsets using LABEL as the structure base. 15055 15056 `.tab' 15057 Set the tab size in the output listing. Ignored. 15058 15059 `[UTAG] .union' 15060 `[NAME_1] element [COUNT_1]' 15061 `[NAME_2] element [COUNT_2]' 15062 `[TNAME] .tag UTAGX[,TCOUNT]' 15063 `...' 15064 `[NAME_N] element [COUNT_N]' 15065 `[USIZE] .endstruct' 15066 `LABEL .tag [UTAG]' 15067 Similar to `.struct', but the offset after each element is reset to 15068 zero, and the USIZE is set to the maximum of all defined elements. 15069 Starting offset for the union is always zero. 15070 15071 `[SYMBOL] .usect "SECTION_NAME", SIZE, [,[BLOCKING_FLAG] [,ALIGNMENT_FLAG]]' 15072 Reserve space for variables in a named, uninitialized section 15073 (similar to .bss). `.usect' allows definitions sections 15074 independent of .bss. SYMBOL points to the first location reserved 15075 by this allocation. The symbol may be used as a variable name. 15076 SIZE is the allocated size in words. BLOCKING_FLAG indicates 15077 whether to block this section on a page boundary (128 words) 15078 (*note TIC54X-Block::). ALIGNMENT FLAG indicates whether the 15079 section should be longword-aligned. 15080 15081 `.var SYM[,..., SYM_N]' 15082 Define a subsym to be a local variable within a macro. See *Note 15083 TIC54X-Macros::. 15084 15085 `.version VERSION' 15086 Set which processor to build instructions for. Though the 15087 following values are accepted, the op is ignored. 15088 `541' 15089 `542' 15090 `543' 15091 `545' 15092 `545LP' 15093 `546LP' 15094 `548' 15095 `549' 15096 15097 15098 File: as.info, Node: TIC54X-Macros, Next: TIC54X-MMRegs, Prev: TIC54X-Directives, Up: TIC54X-Dependent 15099 15100 9.31.10 Macros 15101 -------------- 15102 15103 Macros do not require explicit dereferencing of arguments (i.e., \ARG). 15104 15105 During macro expansion, the macro parameters are converted to 15106 subsyms. If the number of arguments passed the macro invocation 15107 exceeds the number of parameters defined, the last parameter is 15108 assigned the string equivalent of all remaining arguments. If fewer 15109 arguments are given than parameters, the missing parameters are 15110 assigned empty strings. To include a comma in an argument, you must 15111 enclose the argument in quotes. 15112 15113 The following built-in subsym functions allow examination of the 15114 string value of subsyms (or ordinary strings). The arguments are 15115 strings unless otherwise indicated (subsyms passed as args will be 15116 replaced by the strings they represent). 15117 ``$symlen(STR)'' 15118 Returns the length of STR. 15119 15120 ``$symcmp(STR1,STR2)'' 15121 Returns 0 if STR1 == STR2, non-zero otherwise. 15122 15123 ``$firstch(STR,CH)'' 15124 Returns index of the first occurrence of character constant CH in 15125 STR. 15126 15127 ``$lastch(STR,CH)'' 15128 Returns index of the last occurrence of character constant CH in 15129 STR. 15130 15131 ``$isdefed(SYMBOL)'' 15132 Returns zero if the symbol SYMBOL is not in the symbol table, 15133 non-zero otherwise. 15134 15135 ``$ismember(SYMBOL,LIST)'' 15136 Assign the first member of comma-separated string LIST to SYMBOL; 15137 LIST is reassigned the remainder of the list. Returns zero if 15138 LIST is a null string. Both arguments must be subsyms. 15139 15140 ``$iscons(EXPR)'' 15141 Returns 1 if string EXPR is binary, 2 if octal, 3 if hexadecimal, 15142 4 if a character, 5 if decimal, and zero if not an integer. 15143 15144 ``$isname(NAME)'' 15145 Returns 1 if NAME is a valid symbol name, zero otherwise. 15146 15147 ``$isreg(REG)'' 15148 Returns 1 if REG is a valid predefined register name (AR0-AR7 15149 only). 15150 15151 ``$structsz(STAG)'' 15152 Returns the size of the structure or union represented by STAG. 15153 15154 ``$structacc(STAG)'' 15155 Returns the reference point of the structure or union represented 15156 by STAG. Always returns zero. 15157 15158 15159 15160 File: as.info, Node: TIC54X-MMRegs, Prev: TIC54X-Macros, Up: TIC54X-Dependent 15161 15162 9.31.11 Memory-mapped Registers 15163 ------------------------------- 15164 15165 The following symbols are recognized as memory-mapped registers: 15166 15167 15168 15169 File: as.info, Node: Z80-Dependent, Next: Z8000-Dependent, Prev: Xtensa-Dependent, Up: Machine Dependencies 15170 15171 9.32 Z80 Dependent Features 15172 =========================== 15173 15174 * Menu: 15175 15176 * Z80 Options:: Options 15177 * Z80 Syntax:: Syntax 15178 * Z80 Floating Point:: Floating Point 15179 * Z80 Directives:: Z80 Machine Directives 15180 * Z80 Opcodes:: Opcodes 15181 15182 15183 File: as.info, Node: Z80 Options, Next: Z80 Syntax, Up: Z80-Dependent 15184 15185 9.32.1 Options 15186 -------------- 15187 15188 The Zilog Z80 and Ascii R800 version of `as' have a few machine 15189 dependent options. 15190 `-z80' 15191 Produce code for the Z80 processor. There are additional options to 15192 request warnings and error messages for undocumented instructions. 15193 15194 `-ignore-undocumented-instructions' 15195 `-Wnud' 15196 Silently assemble undocumented Z80-instructions that have been 15197 adopted as documented R800-instructions. 15198 15199 `-ignore-unportable-instructions' 15200 `-Wnup' 15201 Silently assemble all undocumented Z80-instructions. 15202 15203 `-warn-undocumented-instructions' 15204 `-Wud' 15205 Issue warnings for undocumented Z80-instructions that work on 15206 R800, do not assemble other undocumented instructions without 15207 warning. 15208 15209 `-warn-unportable-instructions' 15210 `-Wup' 15211 Issue warnings for other undocumented Z80-instructions, do not 15212 treat any undocumented instructions as errors. 15213 15214 `-forbid-undocumented-instructions' 15215 `-Fud' 15216 Treat all undocumented z80-instructions as errors. 15217 15218 `-forbid-unportable-instructions' 15219 `-Fup' 15220 Treat undocumented z80-instructions that do not work on R800 as 15221 errors. 15222 15223 `-r800' 15224 Produce code for the R800 processor. The assembler does not support 15225 undocumented instructions for the R800. In line with common 15226 practice, `as' uses Z80 instruction names for the R800 processor, 15227 as far as they exist. 15228 15229 15230 File: as.info, Node: Z80 Syntax, Next: Z80 Floating Point, Prev: Z80 Options, Up: Z80-Dependent 15231 15232 9.32.2 Syntax 15233 ------------- 15234 15235 The assembler syntax closely follows the 'Z80 family CPU User Manual' by 15236 Zilog. In expressions a single `=' may be used as "is equal to" 15237 comparison operator. 15238 15239 Suffices can be used to indicate the radix of integer constants; `H' 15240 or `h' for hexadecimal, `D' or `d' for decimal, `Q', `O', `q' or `o' 15241 for octal, and `B' for binary. 15242 15243 The suffix `b' denotes a backreference to local label. 15244 15245 * Menu: 15246 15247 * Z80-Chars:: Special Characters 15248 * Z80-Regs:: Register Names 15249 * Z80-Case:: Case Sensitivity 15250 15251 15252 File: as.info, Node: Z80-Chars, Next: Z80-Regs, Up: Z80 Syntax 15253 15254 9.32.2.1 Special Characters 15255 ........................... 15256 15257 The semicolon `;' is the line comment character; 15258 15259 The dollar sign `$' can be used as a prefix for hexadecimal numbers 15260 and as a symbol denoting the current location counter. 15261 15262 A backslash `\' is an ordinary character for the Z80 assembler. 15263 15264 The single quote `'' must be followed by a closing quote. If there 15265 is one character in between, it is a character constant, otherwise it is 15266 a string constant. 15267 15268 15269 File: as.info, Node: Z80-Regs, Next: Z80-Case, Prev: Z80-Chars, Up: Z80 Syntax 15270 15271 9.32.2.2 Register Names 15272 ....................... 15273 15274 The registers are referred to with the letters assigned to them by 15275 Zilog. In addition `as' recognizes `ixl' and `ixh' as the least and 15276 most significant octet in `ix', and similarly `iyl' and `iyh' as parts 15277 of `iy'. 15278 15279 15280 File: as.info, Node: Z80-Case, Prev: Z80-Regs, Up: Z80 Syntax 15281 15282 9.32.2.3 Case Sensitivity 15283 ......................... 15284 15285 Upper and lower case are equivalent in register names, opcodes, 15286 condition codes and assembler directives. The case of letters is 15287 significant in labels and symbol names. The case is also important to 15288 distinguish the suffix `b' for a backward reference to a local label 15289 from the suffix `B' for a number in binary notation. 15290 15291 15292 File: as.info, Node: Z80 Floating Point, Next: Z80 Directives, Prev: Z80 Syntax, Up: Z80-Dependent 15293 15294 9.32.3 Floating Point 15295 --------------------- 15296 15297 Floating-point numbers are not supported. 15298 15299 15300 File: as.info, Node: Z80 Directives, Next: Z80 Opcodes, Prev: Z80 Floating Point, Up: Z80-Dependent 15301 15302 9.32.4 Z80 Assembler Directives 15303 ------------------------------- 15304 15305 `as' for the Z80 supports some additional directives for compatibility 15306 with other assemblers. 15307 15308 These are the additional directives in `as' for the Z80: 15309 15310 `db EXPRESSION|STRING[,EXPRESSION|STRING...]' 15311 `defb EXPRESSION|STRING[,EXPRESSION|STRING...]' 15312 For each STRING the characters are copied to the object file, for 15313 each other EXPRESSION the value is stored in one byte. A warning 15314 is issued in case of an overflow. 15315 15316 `dw EXPRESSION[,EXPRESSION...]' 15317 `defw EXPRESSION[,EXPRESSION...]' 15318 For each EXPRESSION the value is stored in two bytes, ignoring 15319 overflow. 15320 15321 `d24 EXPRESSION[,EXPRESSION...]' 15322 `def24 EXPRESSION[,EXPRESSION...]' 15323 For each EXPRESSION the value is stored in three bytes, ignoring 15324 overflow. 15325 15326 `d32 EXPRESSION[,EXPRESSION...]' 15327 `def32 EXPRESSION[,EXPRESSION...]' 15328 For each EXPRESSION the value is stored in four bytes, ignoring 15329 overflow. 15330 15331 `ds COUNT[, VALUE]' 15332 `defs COUNT[, VALUE]' 15333 Fill COUNT bytes in the object file with VALUE, if VALUE is 15334 omitted it defaults to zero. 15335 15336 `SYMBOL equ EXPRESSION' 15337 `SYMBOL defl EXPRESSION' 15338 These directives set the value of SYMBOL to EXPRESSION. If `equ' 15339 is used, it is an error if SYMBOL is already defined. Symbols 15340 defined with `equ' are not protected from redefinition. 15341 15342 `set' 15343 This is a normal instruction on Z80, and not an assembler 15344 directive. 15345 15346 `psect NAME' 15347 A synonym for *Note Section::, no second argument should be given. 15348 15349 15350 15351 File: as.info, Node: Z80 Opcodes, Prev: Z80 Directives, Up: Z80-Dependent 15352 15353 9.32.5 Opcodes 15354 -------------- 15355 15356 In line with common practice, Z80 mnemonics are used for both the Z80 15357 and the R800. 15358 15359 In many instructions it is possible to use one of the half index 15360 registers (`ixl',`ixh',`iyl',`iyh') in stead of an 8-bit general 15361 purpose register. This yields instructions that are documented on the 15362 R800 and undocumented on the Z80. Similarly `in f,(c)' is documented 15363 on the R800 and undocumented on the Z80. 15364 15365 The assembler also supports the following undocumented 15366 Z80-instructions, that have not been adopted in the R800 instruction 15367 set: 15368 `out (c),0' 15369 Sends zero to the port pointed to by register c. 15370 15371 `sli M' 15372 Equivalent to `M = (M<<1)+1', the operand M can be any operand 15373 that is valid for `sla'. One can use `sll' as a synonym for `sli'. 15374 15375 `OP (ix+D), R' 15376 This is equivalent to 15377 15378 ld R, (ix+D) 15379 OPC R 15380 ld (ix+D), R 15381 15382 The operation `OPC' may be any of `res B,', `set B,', `rl', `rlc', 15383 `rr', `rrc', `sla', `sli', `sra' and `srl', and the register `R' 15384 may be any of `a', `b', `c', `d', `e', `h' and `l'. 15385 15386 `OPC (iy+D), R' 15387 As above, but with `iy' instead of `ix'. 15388 15389 The web site at `http://www.z80.info' is a good starting place to 15390 find more information on programming the Z80. 15391 15392 15393 File: as.info, Node: Z8000-Dependent, Next: Vax-Dependent, Prev: Z80-Dependent, Up: Machine Dependencies 15394 15395 9.33 Z8000 Dependent Features 15396 ============================= 15397 15398 The Z8000 as supports both members of the Z8000 family: the 15399 unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with 15400 24 bit addresses. 15401 15402 When the assembler is in unsegmented mode (specified with the 15403 `unsegm' directive), an address takes up one word (16 bit) sized 15404 register. When the assembler is in segmented mode (specified with the 15405 `segm' directive), a 24-bit address takes up a long (32 bit) register. 15406 *Note Assembler Directives for the Z8000: Z8000 Directives, for a list 15407 of other Z8000 specific assembler directives. 15408 15409 * Menu: 15410 15411 * Z8000 Options:: Command-line options for the Z8000 15412 * Z8000 Syntax:: Assembler syntax for the Z8000 15413 * Z8000 Directives:: Special directives for the Z8000 15414 * Z8000 Opcodes:: Opcodes 15415 15416 15417 File: as.info, Node: Z8000 Options, Next: Z8000 Syntax, Up: Z8000-Dependent 15418 15419 9.33.1 Options 15420 -------------- 15421 15422 `-z8001' 15423 Generate segmented code by default. 15424 15425 `-z8002' 15426 Generate unsegmented code by default. 15427 15428 15429 File: as.info, Node: Z8000 Syntax, Next: Z8000 Directives, Prev: Z8000 Options, Up: Z8000-Dependent 15430 15431 9.33.2 Syntax 15432 ------------- 15433 15434 * Menu: 15435 15436 * Z8000-Chars:: Special Characters 15437 * Z8000-Regs:: Register Names 15438 * Z8000-Addressing:: Addressing Modes 15439 15440 15441 File: as.info, Node: Z8000-Chars, Next: Z8000-Regs, Up: Z8000 Syntax 15442 15443 9.33.2.1 Special Characters 15444 ........................... 15445 15446 `!' is the line comment character. 15447 15448 You can use `;' instead of a newline to separate statements. 15449 15450 15451 File: as.info, Node: Z8000-Regs, Next: Z8000-Addressing, Prev: Z8000-Chars, Up: Z8000 Syntax 15452 15453 9.33.2.2 Register Names 15454 ....................... 15455 15456 The Z8000 has sixteen 16 bit registers, numbered 0 to 15. You can refer 15457 to different sized groups of registers by register number, with the 15458 prefix `r' for 16 bit registers, `rr' for 32 bit registers and `rq' for 15459 64 bit registers. You can also refer to the contents of the first 15460 eight (of the sixteen 16 bit registers) by bytes. They are named `rlN' 15461 and `rhN'. 15462 15463 _byte registers_ 15464 rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3 15465 rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7 15466 15467 _word registers_ 15468 r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 15469 15470 _long word registers_ 15471 rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14 15472 15473 _quad word registers_ 15474 rq0 rq4 rq8 rq12 15475 15476 15477 File: as.info, Node: Z8000-Addressing, Prev: Z8000-Regs, Up: Z8000 Syntax 15478 15479 9.33.2.3 Addressing Modes 15480 ......................... 15481 15482 as understands the following addressing modes for the Z8000: 15483 15484 `rlN' 15485 `rhN' 15486 `rN' 15487 `rrN' 15488 `rqN' 15489 Register direct: 8bit, 16bit, 32bit, and 64bit registers. 15490 15491 `@rN' 15492 `@rrN' 15493 Indirect register: @rrN in segmented mode, @rN in unsegmented 15494 mode. 15495 15496 `ADDR' 15497 Direct: the 16 bit or 24 bit address (depending on whether the 15498 assembler is in segmented or unsegmented mode) of the operand is 15499 in the instruction. 15500 15501 `address(rN)' 15502 Indexed: the 16 or 24 bit address is added to the 16 bit register 15503 to produce the final address in memory of the operand. 15504 15505 `rN(#IMM)' 15506 `rrN(#IMM)' 15507 Base Address: the 16 or 24 bit register is added to the 16 bit sign 15508 extended immediate displacement to produce the final address in 15509 memory of the operand. 15510 15511 `rN(rM)' 15512 `rrN(rM)' 15513 Base Index: the 16 or 24 bit register rN or rrN is added to the 15514 sign extended 16 bit index register rM to produce the final 15515 address in memory of the operand. 15516 15517 `#XX' 15518 Immediate data XX. 15519 15520 15521 File: as.info, Node: Z8000 Directives, Next: Z8000 Opcodes, Prev: Z8000 Syntax, Up: Z8000-Dependent 15522 15523 9.33.3 Assembler Directives for the Z8000 15524 ----------------------------------------- 15525 15526 The Z8000 port of as includes additional assembler directives, for 15527 compatibility with other Z8000 assemblers. These do not begin with `.' 15528 (unlike the ordinary as directives). 15529 15530 `segm' 15531 `.z8001' 15532 Generate code for the segmented Z8001. 15533 15534 `unsegm' 15535 `.z8002' 15536 Generate code for the unsegmented Z8002. 15537 15538 `name' 15539 Synonym for `.file' 15540 15541 `global' 15542 Synonym for `.global' 15543 15544 `wval' 15545 Synonym for `.word' 15546 15547 `lval' 15548 Synonym for `.long' 15549 15550 `bval' 15551 Synonym for `.byte' 15552 15553 `sval' 15554 Assemble a string. `sval' expects one string literal, delimited by 15555 single quotes. It assembles each byte of the string into 15556 consecutive addresses. You can use the escape sequence `%XX' 15557 (where XX represents a two-digit hexadecimal number) to represent 15558 the character whose ASCII value is XX. Use this feature to 15559 describe single quote and other characters that may not appear in 15560 string literals as themselves. For example, the C statement 15561 `char *a = "he said \"it's 50% off\"";' is represented in Z8000 15562 assembly language (shown with the assembler output in hex at the 15563 left) as 15564 15565 68652073 sval 'he said %22it%27s 50%25 off%22%00' 15566 61696420 15567 22697427 15568 73203530 15569 25206F66 15570 662200 15571 15572 `rsect' 15573 synonym for `.section' 15574 15575 `block' 15576 synonym for `.space' 15577 15578 `even' 15579 special case of `.align'; aligns output to even byte boundary. 15580 15581 15582 File: as.info, Node: Z8000 Opcodes, Prev: Z8000 Directives, Up: Z8000-Dependent 15583 15584 9.33.4 Opcodes 15585 -------------- 15586 15587 For detailed information on the Z8000 machine instruction set, see 15588 `Z8000 Technical Manual'. 15589 15590 The following table summarizes the opcodes and their arguments: 15591 15592 rs 16 bit source register 15593 rd 16 bit destination register 15594 rbs 8 bit source register 15595 rbd 8 bit destination register 15596 rrs 32 bit source register 15597 rrd 32 bit destination register 15598 rqs 64 bit source register 15599 rqd 64 bit destination register 15600 addr 16/24 bit address 15601 imm immediate data 15602 15603 adc rd,rs clrb addr cpsir @rd,@rs,rr,cc 15604 adcb rbd,rbs clrb addr(rd) cpsirb @rd,@rs,rr,cc 15605 add rd,@rs clrb rbd dab rbd 15606 add rd,addr com @rd dbjnz rbd,disp7 15607 add rd,addr(rs) com addr dec @rd,imm4m1 15608 add rd,imm16 com addr(rd) dec addr(rd),imm4m1 15609 add rd,rs com rd dec addr,imm4m1 15610 addb rbd,@rs comb @rd dec rd,imm4m1 15611 addb rbd,addr comb addr decb @rd,imm4m1 15612 addb rbd,addr(rs) comb addr(rd) decb addr(rd),imm4m1 15613 addb rbd,imm8 comb rbd decb addr,imm4m1 15614 addb rbd,rbs comflg flags decb rbd,imm4m1 15615 addl rrd,@rs cp @rd,imm16 di i2 15616 addl rrd,addr cp addr(rd),imm16 div rrd,@rs 15617 addl rrd,addr(rs) cp addr,imm16 div rrd,addr 15618 addl rrd,imm32 cp rd,@rs div rrd,addr(rs) 15619 addl rrd,rrs cp rd,addr div rrd,imm16 15620 and rd,@rs cp rd,addr(rs) div rrd,rs 15621 and rd,addr cp rd,imm16 divl rqd,@rs 15622 and rd,addr(rs) cp rd,rs divl rqd,addr 15623 and rd,imm16 cpb @rd,imm8 divl rqd,addr(rs) 15624 and rd,rs cpb addr(rd),imm8 divl rqd,imm32 15625 andb rbd,@rs cpb addr,imm8 divl rqd,rrs 15626 andb rbd,addr cpb rbd,@rs djnz rd,disp7 15627 andb rbd,addr(rs) cpb rbd,addr ei i2 15628 andb rbd,imm8 cpb rbd,addr(rs) ex rd,@rs 15629 andb rbd,rbs cpb rbd,imm8 ex rd,addr 15630 bit @rd,imm4 cpb rbd,rbs ex rd,addr(rs) 15631 bit addr(rd),imm4 cpd rd,@rs,rr,cc ex rd,rs 15632 bit addr,imm4 cpdb rbd,@rs,rr,cc exb rbd,@rs 15633 bit rd,imm4 cpdr rd,@rs,rr,cc exb rbd,addr 15634 bit rd,rs cpdrb rbd,@rs,rr,cc exb rbd,addr(rs) 15635 bitb @rd,imm4 cpi rd,@rs,rr,cc exb rbd,rbs 15636 bitb addr(rd),imm4 cpib rbd,@rs,rr,cc ext0e imm8 15637 bitb addr,imm4 cpir rd,@rs,rr,cc ext0f imm8 15638 bitb rbd,imm4 cpirb rbd,@rs,rr,cc ext8e imm8 15639 bitb rbd,rs cpl rrd,@rs ext8f imm8 15640 bpt cpl rrd,addr exts rrd 15641 call @rd cpl rrd,addr(rs) extsb rd 15642 call addr cpl rrd,imm32 extsl rqd 15643 call addr(rd) cpl rrd,rrs halt 15644 calr disp12 cpsd @rd,@rs,rr,cc in rd,@rs 15645 clr @rd cpsdb @rd,@rs,rr,cc in rd,imm16 15646 clr addr cpsdr @rd,@rs,rr,cc inb rbd,@rs 15647 clr addr(rd) cpsdrb @rd,@rs,rr,cc inb rbd,imm16 15648 clr rd cpsi @rd,@rs,rr,cc inc @rd,imm4m1 15649 clrb @rd cpsib @rd,@rs,rr,cc inc addr(rd),imm4m1 15650 inc addr,imm4m1 ldb rbd,rs(rx) mult rrd,addr(rs) 15651 inc rd,imm4m1 ldb rd(imm16),rbs mult rrd,imm16 15652 incb @rd,imm4m1 ldb rd(rx),rbs mult rrd,rs 15653 incb addr(rd),imm4m1 ldctl ctrl,rs multl rqd,@rs 15654 incb addr,imm4m1 ldctl rd,ctrl multl rqd,addr 15655 incb rbd,imm4m1 ldd @rs,@rd,rr multl rqd,addr(rs) 15656 ind @rd,@rs,ra lddb @rs,@rd,rr multl rqd,imm32 15657 indb @rd,@rs,rba lddr @rs,@rd,rr multl rqd,rrs 15658 inib @rd,@rs,ra lddrb @rs,@rd,rr neg @rd 15659 inibr @rd,@rs,ra ldi @rd,@rs,rr neg addr 15660 iret ldib @rd,@rs,rr neg addr(rd) 15661 jp cc,@rd ldir @rd,@rs,rr neg rd 15662 jp cc,addr ldirb @rd,@rs,rr negb @rd 15663 jp cc,addr(rd) ldk rd,imm4 negb addr 15664 jr cc,disp8 ldl @rd,rrs negb addr(rd) 15665 ld @rd,imm16 ldl addr(rd),rrs negb rbd 15666 ld @rd,rs ldl addr,rrs nop 15667 ld addr(rd),imm16 ldl rd(imm16),rrs or rd,@rs 15668 ld addr(rd),rs ldl rd(rx),rrs or rd,addr 15669 ld addr,imm16 ldl rrd,@rs or rd,addr(rs) 15670 ld addr,rs ldl rrd,addr or rd,imm16 15671 ld rd(imm16),rs ldl rrd,addr(rs) or rd,rs 15672 ld rd(rx),rs ldl rrd,imm32 orb rbd,@rs 15673 ld rd,@rs ldl rrd,rrs orb rbd,addr 15674 ld rd,addr ldl rrd,rs(imm16) orb rbd,addr(rs) 15675 ld rd,addr(rs) ldl rrd,rs(rx) orb rbd,imm8 15676 ld rd,imm16 ldm @rd,rs,n orb rbd,rbs 15677 ld rd,rs ldm addr(rd),rs,n out @rd,rs 15678 ld rd,rs(imm16) ldm addr,rs,n out imm16,rs 15679 ld rd,rs(rx) ldm rd,@rs,n outb @rd,rbs 15680 lda rd,addr ldm rd,addr(rs),n outb imm16,rbs 15681 lda rd,addr(rs) ldm rd,addr,n outd @rd,@rs,ra 15682 lda rd,rs(imm16) ldps @rs outdb @rd,@rs,rba 15683 lda rd,rs(rx) ldps addr outib @rd,@rs,ra 15684 ldar rd,disp16 ldps addr(rs) outibr @rd,@rs,ra 15685 ldb @rd,imm8 ldr disp16,rs pop @rd,@rs 15686 ldb @rd,rbs ldr rd,disp16 pop addr(rd),@rs 15687 ldb addr(rd),imm8 ldrb disp16,rbs pop addr,@rs 15688 ldb addr(rd),rbs ldrb rbd,disp16 pop rd,@rs 15689 ldb addr,imm8 ldrl disp16,rrs popl @rd,@rs 15690 ldb addr,rbs ldrl rrd,disp16 popl addr(rd),@rs 15691 ldb rbd,@rs mbit popl addr,@rs 15692 ldb rbd,addr mreq rd popl rrd,@rs 15693 ldb rbd,addr(rs) mres push @rd,@rs 15694 ldb rbd,imm8 mset push @rd,addr 15695 ldb rbd,rbs mult rrd,@rs push @rd,addr(rs) 15696 ldb rbd,rs(imm16) mult rrd,addr push @rd,imm16 15697 push @rd,rs set addr,imm4 subl rrd,imm32 15698 pushl @rd,@rs set rd,imm4 subl rrd,rrs 15699 pushl @rd,addr set rd,rs tcc cc,rd 15700 pushl @rd,addr(rs) setb @rd,imm4 tccb cc,rbd 15701 pushl @rd,rrs setb addr(rd),imm4 test @rd 15702 res @rd,imm4 setb addr,imm4 test addr 15703 res addr(rd),imm4 setb rbd,imm4 test addr(rd) 15704 res addr,imm4 setb rbd,rs test rd 15705 res rd,imm4 setflg imm4 testb @rd 15706 res rd,rs sinb rbd,imm16 testb addr 15707 resb @rd,imm4 sinb rd,imm16 testb addr(rd) 15708 resb addr(rd),imm4 sind @rd,@rs,ra testb rbd 15709 resb addr,imm4 sindb @rd,@rs,rba testl @rd 15710 resb rbd,imm4 sinib @rd,@rs,ra testl addr 15711 resb rbd,rs sinibr @rd,@rs,ra testl addr(rd) 15712 resflg imm4 sla rd,imm8 testl rrd 15713 ret cc slab rbd,imm8 trdb @rd,@rs,rba 15714 rl rd,imm1or2 slal rrd,imm8 trdrb @rd,@rs,rba 15715 rlb rbd,imm1or2 sll rd,imm8 trib @rd,@rs,rbr 15716 rlc rd,imm1or2 sllb rbd,imm8 trirb @rd,@rs,rbr 15717 rlcb rbd,imm1or2 slll rrd,imm8 trtdrb @ra,@rb,rbr 15718 rldb rbb,rba sout imm16,rs trtib @ra,@rb,rr 15719 rr rd,imm1or2 soutb imm16,rbs trtirb @ra,@rb,rbr 15720 rrb rbd,imm1or2 soutd @rd,@rs,ra trtrb @ra,@rb,rbr 15721 rrc rd,imm1or2 soutdb @rd,@rs,rba tset @rd 15722 rrcb rbd,imm1or2 soutib @rd,@rs,ra tset addr 15723 rrdb rbb,rba soutibr @rd,@rs,ra tset addr(rd) 15724 rsvd36 sra rd,imm8 tset rd 15725 rsvd38 srab rbd,imm8 tsetb @rd 15726 rsvd78 sral rrd,imm8 tsetb addr 15727 rsvd7e srl rd,imm8 tsetb addr(rd) 15728 rsvd9d srlb rbd,imm8 tsetb rbd 15729 rsvd9f srll rrd,imm8 xor rd,@rs 15730 rsvdb9 sub rd,@rs xor rd,addr 15731 rsvdbf sub rd,addr xor rd,addr(rs) 15732 sbc rd,rs sub rd,addr(rs) xor rd,imm16 15733 sbcb rbd,rbs sub rd,imm16 xor rd,rs 15734 sc imm8 sub rd,rs xorb rbd,@rs 15735 sda rd,rs subb rbd,@rs xorb rbd,addr 15736 sdab rbd,rs subb rbd,addr xorb rbd,addr(rs) 15737 sdal rrd,rs subb rbd,addr(rs) xorb rbd,imm8 15738 sdl rd,rs subb rbd,imm8 xorb rbd,rbs 15739 sdlb rbd,rs subb rbd,rbs xorb rbd,rbs 15740 sdll rrd,rs subl rrd,@rs 15741 set @rd,imm4 subl rrd,addr 15742 set addr(rd),imm4 subl rrd,addr(rs) 15743 15744 15745 File: as.info, Node: Vax-Dependent, Prev: Z8000-Dependent, Up: Machine Dependencies 15746 15747 9.34 VAX Dependent Features 15748 =========================== 15749 15750 * Menu: 15751 15752 * VAX-Opts:: VAX Command-Line Options 15753 * VAX-float:: VAX Floating Point 15754 * VAX-directives:: Vax Machine Directives 15755 * VAX-opcodes:: VAX Opcodes 15756 * VAX-branch:: VAX Branch Improvement 15757 * VAX-operands:: VAX Operands 15758 * VAX-no:: Not Supported on VAX 15759 15760 15761 File: as.info, Node: VAX-Opts, Next: VAX-float, Up: Vax-Dependent 15762 15763 9.34.1 VAX Command-Line Options 15764 ------------------------------- 15765 15766 The Vax version of `as' accepts any of the following options, gives a 15767 warning message that the option was ignored and proceeds. These 15768 options are for compatibility with scripts designed for other people's 15769 assemblers. 15770 15771 ``-D' (Debug)' 15772 ``-S' (Symbol Table)' 15773 ``-T' (Token Trace)' 15774 These are obsolete options used to debug old assemblers. 15775 15776 ``-d' (Displacement size for JUMPs)' 15777 This option expects a number following the `-d'. Like options 15778 that expect filenames, the number may immediately follow the `-d' 15779 (old standard) or constitute the whole of the command line 15780 argument that follows `-d' (GNU standard). 15781 15782 ``-V' (Virtualize Interpass Temporary File)' 15783 Some other assemblers use a temporary file. This option commanded 15784 them to keep the information in active memory rather than in a 15785 disk file. `as' always does this, so this option is redundant. 15786 15787 ``-J' (JUMPify Longer Branches)' 15788 Many 32-bit computers permit a variety of branch instructions to 15789 do the same job. Some of these instructions are short (and fast) 15790 but have a limited range; others are long (and slow) but can 15791 branch anywhere in virtual memory. Often there are 3 flavors of 15792 branch: short, medium and long. Some other assemblers would emit 15793 short and medium branches, unless told by this option to emit 15794 short and long branches. 15795 15796 ``-t' (Temporary File Directory)' 15797 Some other assemblers may use a temporary file, and this option 15798 takes a filename being the directory to site the temporary file. 15799 Since `as' does not use a temporary disk file, this option makes 15800 no difference. `-t' needs exactly one filename. 15801 15802 The Vax version of the assembler accepts additional options when 15803 compiled for VMS: 15804 15805 `-h N' 15806 External symbol or section (used for global variables) names are 15807 not case sensitive on VAX/VMS and always mapped to upper case. 15808 This is contrary to the C language definition which explicitly 15809 distinguishes upper and lower case. To implement a standard 15810 conforming C compiler, names must be changed (mapped) to preserve 15811 the case information. The default mapping is to convert all lower 15812 case characters to uppercase and adding an underscore followed by 15813 a 6 digit hex value, representing a 24 digit binary value. The 15814 one digits in the binary value represent which characters are 15815 uppercase in the original symbol name. 15816 15817 The `-h N' option determines how we map names. This takes several 15818 values. No `-h' switch at all allows case hacking as described 15819 above. A value of zero (`-h0') implies names should be upper 15820 case, and inhibits the case hack. A value of 2 (`-h2') implies 15821 names should be all lower case, with no case hack. A value of 3 15822 (`-h3') implies that case should be preserved. The value 1 is 15823 unused. The `-H' option directs `as' to display every mapped 15824 symbol during assembly. 15825 15826 Symbols whose names include a dollar sign `$' are exceptions to the 15827 general name mapping. These symbols are normally only used to 15828 reference VMS library names. Such symbols are always mapped to 15829 upper case. 15830 15831 `-+' 15832 The `-+' option causes `as' to truncate any symbol name larger 15833 than 31 characters. The `-+' option also prevents some code 15834 following the `_main' symbol normally added to make the object 15835 file compatible with Vax-11 "C". 15836 15837 `-1' 15838 This option is ignored for backward compatibility with `as' 15839 version 1.x. 15840 15841 `-H' 15842 The `-H' option causes `as' to print every symbol which was 15843 changed by case mapping. 15844 15845 15846 File: as.info, Node: VAX-float, Next: VAX-directives, Prev: VAX-Opts, Up: Vax-Dependent 15847 15848 9.34.2 VAX Floating Point 15849 ------------------------- 15850 15851 Conversion of flonums to floating point is correct, and compatible with 15852 previous assemblers. Rounding is towards zero if the remainder is 15853 exactly half the least significant bit. 15854 15855 `D', `F', `G' and `H' floating point formats are understood. 15856 15857 Immediate floating literals (_e.g._ `S`$6.9') are rendered 15858 correctly. Again, rounding is towards zero in the boundary case. 15859 15860 The `.float' directive produces `f' format numbers. The `.double' 15861 directive produces `d' format numbers. 15862 15863 15864 File: as.info, Node: VAX-directives, Next: VAX-opcodes, Prev: VAX-float, Up: Vax-Dependent 15865 15866 9.34.3 Vax Machine Directives 15867 ----------------------------- 15868 15869 The Vax version of the assembler supports four directives for 15870 generating Vax floating point constants. They are described in the 15871 table below. 15872 15873 `.dfloat' 15874 This expects zero or more flonums, separated by commas, and 15875 assembles Vax `d' format 64-bit floating point constants. 15876 15877 `.ffloat' 15878 This expects zero or more flonums, separated by commas, and 15879 assembles Vax `f' format 32-bit floating point constants. 15880 15881 `.gfloat' 15882 This expects zero or more flonums, separated by commas, and 15883 assembles Vax `g' format 64-bit floating point constants. 15884 15885 `.hfloat' 15886 This expects zero or more flonums, separated by commas, and 15887 assembles Vax `h' format 128-bit floating point constants. 15888 15889 15890 15891 File: as.info, Node: VAX-opcodes, Next: VAX-branch, Prev: VAX-directives, Up: Vax-Dependent 15892 15893 9.34.4 VAX Opcodes 15894 ------------------ 15895 15896 All DEC mnemonics are supported. Beware that `case...' instructions 15897 have exactly 3 operands. The dispatch table that follows the `case...' 15898 instruction should be made with `.word' statements. This is compatible 15899 with all unix assemblers we know of. 15900 15901 15902 File: as.info, Node: VAX-branch, Next: VAX-operands, Prev: VAX-opcodes, Up: Vax-Dependent 15903 15904 9.34.5 VAX Branch Improvement 15905 ----------------------------- 15906 15907 Certain pseudo opcodes are permitted. They are for branch 15908 instructions. They expand to the shortest branch instruction that 15909 reaches the target. Generally these mnemonics are made by substituting 15910 `j' for `b' at the start of a DEC mnemonic. This feature is included 15911 both for compatibility and to help compilers. If you do not need this 15912 feature, avoid these opcodes. Here are the mnemonics, and the code 15913 they can expand into. 15914 15915 `jbsb' 15916 `Jsb' is already an instruction mnemonic, so we chose `jbsb'. 15917 (byte displacement) 15918 `bsbb ...' 15919 15920 (word displacement) 15921 `bsbw ...' 15922 15923 (long displacement) 15924 `jsb ...' 15925 15926 `jbr' 15927 `jr' 15928 Unconditional branch. 15929 (byte displacement) 15930 `brb ...' 15931 15932 (word displacement) 15933 `brw ...' 15934 15935 (long displacement) 15936 `jmp ...' 15937 15938 `jCOND' 15939 COND may be any one of the conditional branches `neq', `nequ', 15940 `eql', `eqlu', `gtr', `geq', `lss', `gtru', `lequ', `vc', `vs', 15941 `gequ', `cc', `lssu', `cs'. COND may also be one of the bit tests 15942 `bs', `bc', `bss', `bcs', `bsc', `bcc', `bssi', `bcci', `lbs', 15943 `lbc'. NOTCOND is the opposite condition to COND. 15944 (byte displacement) 15945 `bCOND ...' 15946 15947 (word displacement) 15948 `bNOTCOND foo ; brw ... ; foo:' 15949 15950 (long displacement) 15951 `bNOTCOND foo ; jmp ... ; foo:' 15952 15953 `jacbX' 15954 X may be one of `b d f g h l w'. 15955 (word displacement) 15956 `OPCODE ...' 15957 15958 (long displacement) 15959 OPCODE ..., foo ; 15960 brb bar ; 15961 foo: jmp ... ; 15962 bar: 15963 15964 `jaobYYY' 15965 YYY may be one of `lss leq'. 15966 15967 `jsobZZZ' 15968 ZZZ may be one of `geq gtr'. 15969 (byte displacement) 15970 `OPCODE ...' 15971 15972 (word displacement) 15973 OPCODE ..., foo ; 15974 brb bar ; 15975 foo: brw DESTINATION ; 15976 bar: 15977 15978 (long displacement) 15979 OPCODE ..., foo ; 15980 brb bar ; 15981 foo: jmp DESTINATION ; 15982 bar: 15983 15984 `aobleq' 15985 `aoblss' 15986 `sobgeq' 15987 `sobgtr' 15988 15989 (byte displacement) 15990 `OPCODE ...' 15991 15992 (word displacement) 15993 OPCODE ..., foo ; 15994 brb bar ; 15995 foo: brw DESTINATION ; 15996 bar: 15997 15998 (long displacement) 15999 OPCODE ..., foo ; 16000 brb bar ; 16001 foo: jmp DESTINATION ; 16002 bar: 16003 16004 16005 File: as.info, Node: VAX-operands, Next: VAX-no, Prev: VAX-branch, Up: Vax-Dependent 16006 16007 9.34.6 VAX Operands 16008 ------------------- 16009 16010 The immediate character is `$' for Unix compatibility, not `#' as DEC 16011 writes it. 16012 16013 The indirect character is `*' for Unix compatibility, not `@' as DEC 16014 writes it. 16015 16016 The displacement sizing character is ``' (an accent grave) for Unix 16017 compatibility, not `^' as DEC writes it. The letter preceding ``' may 16018 have either case. `G' is not understood, but all other letters (`b i l 16019 s w') are understood. 16020 16021 Register names understood are `r0 r1 r2 ... r15 ap fp sp pc'. Upper 16022 and lower case letters are equivalent. 16023 16024 For instance 16025 tstb *w`$4(r5) 16026 16027 Any expression is permitted in an operand. Operands are comma 16028 separated. 16029 16030 16031 File: as.info, Node: VAX-no, Prev: VAX-operands, Up: Vax-Dependent 16032 16033 9.34.7 Not Supported on VAX 16034 --------------------------- 16035 16036 Vax bit fields can not be assembled with `as'. Someone can add the 16037 required code if they really need it. 16038 16039 16040 File: as.info, Node: V850-Dependent, Next: Xtensa-Dependent, Prev: TIC54X-Dependent, Up: Machine Dependencies 16041 16042 9.35 v850 Dependent Features 16043 ============================ 16044 16045 * Menu: 16046 16047 * V850 Options:: Options 16048 * V850 Syntax:: Syntax 16049 * V850 Floating Point:: Floating Point 16050 * V850 Directives:: V850 Machine Directives 16051 * V850 Opcodes:: Opcodes 16052 16053 16054 File: as.info, Node: V850 Options, Next: V850 Syntax, Up: V850-Dependent 16055 16056 9.35.1 Options 16057 -------------- 16058 16059 `as' supports the following additional command-line options for the 16060 V850 processor family: 16061 16062 `-wsigned_overflow' 16063 Causes warnings to be produced when signed immediate values 16064 overflow the space available for then within their opcodes. By 16065 default this option is disabled as it is possible to receive 16066 spurious warnings due to using exact bit patterns as immediate 16067 constants. 16068 16069 `-wunsigned_overflow' 16070 Causes warnings to be produced when unsigned immediate values 16071 overflow the space available for then within their opcodes. By 16072 default this option is disabled as it is possible to receive 16073 spurious warnings due to using exact bit patterns as immediate 16074 constants. 16075 16076 `-mv850' 16077 Specifies that the assembled code should be marked as being 16078 targeted at the V850 processor. This allows the linker to detect 16079 attempts to link such code with code assembled for other 16080 processors. 16081 16082 `-mv850e' 16083 Specifies that the assembled code should be marked as being 16084 targeted at the V850E processor. This allows the linker to detect 16085 attempts to link such code with code assembled for other 16086 processors. 16087 16088 `-mv850e1' 16089 Specifies that the assembled code should be marked as being 16090 targeted at the V850E1 processor. This allows the linker to 16091 detect attempts to link such code with code assembled for other 16092 processors. 16093 16094 `-mv850any' 16095 Specifies that the assembled code should be marked as being 16096 targeted at the V850 processor but support instructions that are 16097 specific to the extended variants of the process. This allows the 16098 production of binaries that contain target specific code, but 16099 which are also intended to be used in a generic fashion. For 16100 example libgcc.a contains generic routines used by the code 16101 produced by GCC for all versions of the v850 architecture, 16102 together with support routines only used by the V850E architecture. 16103 16104 `-mrelax' 16105 Enables relaxation. This allows the .longcall and .longjump pseudo 16106 ops to be used in the assembler source code. These ops label 16107 sections of code which are either a long function call or a long 16108 branch. The assembler will then flag these sections of code and 16109 the linker will attempt to relax them. 16110 16111 16112 16113 File: as.info, Node: V850 Syntax, Next: V850 Floating Point, Prev: V850 Options, Up: V850-Dependent 16114 16115 9.35.2 Syntax 16116 ------------- 16117 16118 * Menu: 16119 16120 * V850-Chars:: Special Characters 16121 * V850-Regs:: Register Names 16122 16123 16124 File: as.info, Node: V850-Chars, Next: V850-Regs, Up: V850 Syntax 16125 16126 9.35.2.1 Special Characters 16127 ........................... 16128 16129 `#' is the line comment character. 16130 16131 16132 File: as.info, Node: V850-Regs, Prev: V850-Chars, Up: V850 Syntax 16133 16134 9.35.2.2 Register Names 16135 ....................... 16136 16137 `as' supports the following names for registers: 16138 `general register 0' 16139 r0, zero 16140 16141 `general register 1' 16142 r1 16143 16144 `general register 2' 16145 r2, hp 16146 16147 `general register 3' 16148 r3, sp 16149 16150 `general register 4' 16151 r4, gp 16152 16153 `general register 5' 16154 r5, tp 16155 16156 `general register 6' 16157 r6 16158 16159 `general register 7' 16160 r7 16161 16162 `general register 8' 16163 r8 16164 16165 `general register 9' 16166 r9 16167 16168 `general register 10' 16169 r10 16170 16171 `general register 11' 16172 r11 16173 16174 `general register 12' 16175 r12 16176 16177 `general register 13' 16178 r13 16179 16180 `general register 14' 16181 r14 16182 16183 `general register 15' 16184 r15 16185 16186 `general register 16' 16187 r16 16188 16189 `general register 17' 16190 r17 16191 16192 `general register 18' 16193 r18 16194 16195 `general register 19' 16196 r19 16197 16198 `general register 20' 16199 r20 16200 16201 `general register 21' 16202 r21 16203 16204 `general register 22' 16205 r22 16206 16207 `general register 23' 16208 r23 16209 16210 `general register 24' 16211 r24 16212 16213 `general register 25' 16214 r25 16215 16216 `general register 26' 16217 r26 16218 16219 `general register 27' 16220 r27 16221 16222 `general register 28' 16223 r28 16224 16225 `general register 29' 16226 r29 16227 16228 `general register 30' 16229 r30, ep 16230 16231 `general register 31' 16232 r31, lp 16233 16234 `system register 0' 16235 eipc 16236 16237 `system register 1' 16238 eipsw 16239 16240 `system register 2' 16241 fepc 16242 16243 `system register 3' 16244 fepsw 16245 16246 `system register 4' 16247 ecr 16248 16249 `system register 5' 16250 psw 16251 16252 `system register 16' 16253 ctpc 16254 16255 `system register 17' 16256 ctpsw 16257 16258 `system register 18' 16259 dbpc 16260 16261 `system register 19' 16262 dbpsw 16263 16264 `system register 20' 16265 ctbp 16266 16267 16268 File: as.info, Node: V850 Floating Point, Next: V850 Directives, Prev: V850 Syntax, Up: V850-Dependent 16269 16270 9.35.3 Floating Point 16271 --------------------- 16272 16273 The V850 family uses IEEE floating-point numbers. 16274 16275 16276 File: as.info, Node: V850 Directives, Next: V850 Opcodes, Prev: V850 Floating Point, Up: V850-Dependent 16277 16278 9.35.4 V850 Machine Directives 16279 ------------------------------ 16280 16281 `.offset <EXPRESSION>' 16282 Moves the offset into the current section to the specified amount. 16283 16284 `.section "name", <type>' 16285 This is an extension to the standard .section directive. It sets 16286 the current section to be <type> and creates an alias for this 16287 section called "name". 16288 16289 `.v850' 16290 Specifies that the assembled code should be marked as being 16291 targeted at the V850 processor. This allows the linker to detect 16292 attempts to link such code with code assembled for other 16293 processors. 16294 16295 `.v850e' 16296 Specifies that the assembled code should be marked as being 16297 targeted at the V850E processor. This allows the linker to detect 16298 attempts to link such code with code assembled for other 16299 processors. 16300 16301 `.v850e1' 16302 Specifies that the assembled code should be marked as being 16303 targeted at the V850E1 processor. This allows the linker to 16304 detect attempts to link such code with code assembled for other 16305 processors. 16306 16307 16308 16309 File: as.info, Node: V850 Opcodes, Prev: V850 Directives, Up: V850-Dependent 16310 16311 9.35.5 Opcodes 16312 -------------- 16313 16314 `as' implements all the standard V850 opcodes. 16315 16316 `as' also implements the following pseudo ops: 16317 16318 `hi0()' 16319 Computes the higher 16 bits of the given expression and stores it 16320 into the immediate operand field of the given instruction. For 16321 example: 16322 16323 `mulhi hi0(here - there), r5, r6' 16324 16325 computes the difference between the address of labels 'here' and 16326 'there', takes the upper 16 bits of this difference, shifts it 16327 down 16 bits and then multiplies it by the lower 16 bits in 16328 register 5, putting the result into register 6. 16329 16330 `lo()' 16331 Computes the lower 16 bits of the given expression and stores it 16332 into the immediate operand field of the given instruction. For 16333 example: 16334 16335 `addi lo(here - there), r5, r6' 16336 16337 computes the difference between the address of labels 'here' and 16338 'there', takes the lower 16 bits of this difference and adds it to 16339 register 5, putting the result into register 6. 16340 16341 `hi()' 16342 Computes the higher 16 bits of the given expression and then adds 16343 the value of the most significant bit of the lower 16 bits of the 16344 expression and stores the result into the immediate operand field 16345 of the given instruction. For example the following code can be 16346 used to compute the address of the label 'here' and store it into 16347 register 6: 16348 16349 `movhi hi(here), r0, r6' `movea lo(here), r6, r6' 16350 16351 The reason for this special behaviour is that movea performs a sign 16352 extension on its immediate operand. So for example if the address 16353 of 'here' was 0xFFFFFFFF then without the special behaviour of the 16354 hi() pseudo-op the movhi instruction would put 0xFFFF0000 into r6, 16355 then the movea instruction would takes its immediate operand, 16356 0xFFFF, sign extend it to 32 bits, 0xFFFFFFFF, and then add it 16357 into r6 giving 0xFFFEFFFF which is wrong (the fifth nibble is E). 16358 With the hi() pseudo op adding in the top bit of the lo() pseudo 16359 op, the movhi instruction actually stores 0 into r6 (0xFFFF + 1 = 16360 0x0000), so that the movea instruction stores 0xFFFFFFFF into r6 - 16361 the right value. 16362 16363 `hilo()' 16364 Computes the 32 bit value of the given expression and stores it 16365 into the immediate operand field of the given instruction (which 16366 must be a mov instruction). For example: 16367 16368 `mov hilo(here), r6' 16369 16370 computes the absolute address of label 'here' and puts the result 16371 into register 6. 16372 16373 `sdaoff()' 16374 Computes the offset of the named variable from the start of the 16375 Small Data Area (whoes address is held in register 4, the GP 16376 register) and stores the result as a 16 bit signed value in the 16377 immediate operand field of the given instruction. For example: 16378 16379 `ld.w sdaoff(_a_variable)[gp],r6' 16380 16381 loads the contents of the location pointed to by the label 16382 '_a_variable' into register 6, provided that the label is located 16383 somewhere within +/- 32K of the address held in the GP register. 16384 [Note the linker assumes that the GP register contains a fixed 16385 address set to the address of the label called '__gp'. This can 16386 either be set up automatically by the linker, or specifically set 16387 by using the `--defsym __gp=<value>' command line option]. 16388 16389 `tdaoff()' 16390 Computes the offset of the named variable from the start of the 16391 Tiny Data Area (whoes address is held in register 30, the EP 16392 register) and stores the result as a 4,5, 7 or 8 bit unsigned 16393 value in the immediate operand field of the given instruction. 16394 For example: 16395 16396 `sld.w tdaoff(_a_variable)[ep],r6' 16397 16398 loads the contents of the location pointed to by the label 16399 '_a_variable' into register 6, provided that the label is located 16400 somewhere within +256 bytes of the address held in the EP 16401 register. [Note the linker assumes that the EP register contains 16402 a fixed address set to the address of the label called '__ep'. 16403 This can either be set up automatically by the linker, or 16404 specifically set by using the `--defsym __ep=<value>' command line 16405 option]. 16406 16407 `zdaoff()' 16408 Computes the offset of the named variable from address 0 and 16409 stores the result as a 16 bit signed value in the immediate 16410 operand field of the given instruction. For example: 16411 16412 `movea zdaoff(_a_variable),zero,r6' 16413 16414 puts the address of the label '_a_variable' into register 6, 16415 assuming that the label is somewhere within the first 32K of 16416 memory. (Strictly speaking it also possible to access the last 16417 32K of memory as well, as the offsets are signed). 16418 16419 `ctoff()' 16420 Computes the offset of the named variable from the start of the 16421 Call Table Area (whoes address is helg in system register 20, the 16422 CTBP register) and stores the result a 6 or 16 bit unsigned value 16423 in the immediate field of then given instruction or piece of data. 16424 For example: 16425 16426 `callt ctoff(table_func1)' 16427 16428 will put the call the function whoes address is held in the call 16429 table at the location labeled 'table_func1'. 16430 16431 `.longcall `name'' 16432 Indicates that the following sequence of instructions is a long 16433 call to function `name'. The linker will attempt to shorten this 16434 call sequence if `name' is within a 22bit offset of the call. Only 16435 valid if the `-mrelax' command line switch has been enabled. 16436 16437 `.longjump `name'' 16438 Indicates that the following sequence of instructions is a long 16439 jump to label `name'. The linker will attempt to shorten this code 16440 sequence if `name' is within a 22bit offset of the jump. Only 16441 valid if the `-mrelax' command line switch has been enabled. 16442 16443 16444 For information on the V850 instruction set, see `V850 Family 16445 32-/16-Bit single-Chip Microcontroller Architecture Manual' from NEC. 16446 Ltd. 16447 16448 16449 File: as.info, Node: Xtensa-Dependent, Next: Z80-Dependent, Prev: V850-Dependent, Up: Machine Dependencies 16450 16451 9.36 Xtensa Dependent Features 16452 ============================== 16453 16454 This chapter covers features of the GNU assembler that are specific 16455 to the Xtensa architecture. For details about the Xtensa instruction 16456 set, please consult the `Xtensa Instruction Set Architecture (ISA) 16457 Reference Manual'. 16458 16459 * Menu: 16460 16461 * Xtensa Options:: Command-line Options. 16462 * Xtensa Syntax:: Assembler Syntax for Xtensa Processors. 16463 * Xtensa Optimizations:: Assembler Optimizations. 16464 * Xtensa Relaxation:: Other Automatic Transformations. 16465 * Xtensa Directives:: Directives for Xtensa Processors. 16466 16467 16468 File: as.info, Node: Xtensa Options, Next: Xtensa Syntax, Up: Xtensa-Dependent 16469 16470 9.36.1 Command Line Options 16471 --------------------------- 16472 16473 The Xtensa version of the GNU assembler supports these special options: 16474 16475 `--text-section-literals | --no-text-section-literals' 16476 Control the treatment of literal pools. The default is 16477 `--no-text-section-literals', which places literals in separate 16478 sections in the output file. This allows the literal pool to be 16479 placed in a data RAM/ROM. With `--text-section-literals', the 16480 literals are interspersed in the text section in order to keep 16481 them as close as possible to their references. This may be 16482 necessary for large assembly files, where the literals would 16483 otherwise be out of range of the `L32R' instructions in the text 16484 section. These options only affect literals referenced via 16485 PC-relative `L32R' instructions; literals for absolute mode `L32R' 16486 instructions are handled separately. *Note literal: Literal 16487 Directive. 16488 16489 `--absolute-literals | --no-absolute-literals' 16490 Indicate to the assembler whether `L32R' instructions use absolute 16491 or PC-relative addressing. If the processor includes the absolute 16492 addressing option, the default is to use absolute `L32R' 16493 relocations. Otherwise, only the PC-relative `L32R' relocations 16494 can be used. 16495 16496 `--target-align | --no-target-align' 16497 Enable or disable automatic alignment to reduce branch penalties 16498 at some expense in code size. *Note Automatic Instruction 16499 Alignment: Xtensa Automatic Alignment. This optimization is 16500 enabled by default. Note that the assembler will always align 16501 instructions like `LOOP' that have fixed alignment requirements. 16502 16503 `--longcalls | --no-longcalls' 16504 Enable or disable transformation of call instructions to allow 16505 calls across a greater range of addresses. *Note Function Call 16506 Relaxation: Xtensa Call Relaxation. This option should be used 16507 when call targets can potentially be out of range. It may degrade 16508 both code size and performance, but the linker can generally 16509 optimize away the unnecessary overhead when a call ends up within 16510 range. The default is `--no-longcalls'. 16511 16512 `--transform | --no-transform' 16513 Enable or disable all assembler transformations of Xtensa 16514 instructions, including both relaxation and optimization. The 16515 default is `--transform'; `--no-transform' should only be used in 16516 the rare cases when the instructions must be exactly as specified 16517 in the assembly source. Using `--no-transform' causes out of range 16518 instruction operands to be errors. 16519 16520 `--rename-section OLDNAME=NEWNAME' 16521 Rename the OLDNAME section to NEWNAME. This option can be used 16522 multiple times to rename multiple sections. 16523 16524 16525 File: as.info, Node: Xtensa Syntax, Next: Xtensa Optimizations, Prev: Xtensa Options, Up: Xtensa-Dependent 16526 16527 9.36.2 Assembler Syntax 16528 ----------------------- 16529 16530 Block comments are delimited by `/*' and `*/'. End of line comments 16531 may be introduced with either `#' or `//'. 16532 16533 Instructions consist of a leading opcode or macro name followed by 16534 whitespace and an optional comma-separated list of operands: 16535 16536 OPCODE [OPERAND, ...] 16537 16538 Instructions must be separated by a newline or semicolon. 16539 16540 FLIX instructions, which bundle multiple opcodes together in a single 16541 instruction, are specified by enclosing the bundled opcodes inside 16542 braces: 16543 16544 { 16545 [FORMAT] 16546 OPCODE0 [OPERANDS] 16547 OPCODE1 [OPERANDS] 16548 OPCODE2 [OPERANDS] 16549 ... 16550 } 16551 16552 The opcodes in a FLIX instruction are listed in the same order as the 16553 corresponding instruction slots in the TIE format declaration. 16554 Directives and labels are not allowed inside the braces of a FLIX 16555 instruction. A particular TIE format name can optionally be specified 16556 immediately after the opening brace, but this is usually unnecessary. 16557 The assembler will automatically search for a format that can encode the 16558 specified opcodes, so the format name need only be specified in rare 16559 cases where there is more than one applicable format and where it 16560 matters which of those formats is used. A FLIX instruction can also be 16561 specified on a single line by separating the opcodes with semicolons: 16562 16563 { [FORMAT;] OPCODE0 [OPERANDS]; OPCODE1 [OPERANDS]; OPCODE2 [OPERANDS]; ... } 16564 16565 If an opcode can only be encoded in a FLIX instruction but is not 16566 specified as part of a FLIX bundle, the assembler will choose the 16567 smallest format where the opcode can be encoded and will fill unused 16568 instruction slots with no-ops. 16569 16570 * Menu: 16571 16572 * Xtensa Opcodes:: Opcode Naming Conventions. 16573 * Xtensa Registers:: Register Naming. 16574 16575 16576 File: as.info, Node: Xtensa Opcodes, Next: Xtensa Registers, Up: Xtensa Syntax 16577 16578 9.36.2.1 Opcode Names 16579 ..................... 16580 16581 See the `Xtensa Instruction Set Architecture (ISA) Reference Manual' 16582 for a complete list of opcodes and descriptions of their semantics. 16583 16584 If an opcode name is prefixed with an underscore character (`_'), 16585 `as' will not transform that instruction in any way. The underscore 16586 prefix disables both optimization (*note Xtensa Optimizations: Xtensa 16587 Optimizations.) and relaxation (*note Xtensa Relaxation: Xtensa 16588 Relaxation.) for that particular instruction. Only use the underscore 16589 prefix when it is essential to select the exact opcode produced by the 16590 assembler. Using this feature unnecessarily makes the code less 16591 efficient by disabling assembler optimization and less flexible by 16592 disabling relaxation. 16593 16594 Note that this special handling of underscore prefixes only applies 16595 to Xtensa opcodes, not to either built-in macros or user-defined macros. 16596 When an underscore prefix is used with a macro (e.g., `_MOV'), it 16597 refers to a different macro. The assembler generally provides built-in 16598 macros both with and without the underscore prefix, where the underscore 16599 versions behave as if the underscore carries through to the instructions 16600 in the macros. For example, `_MOV' may expand to `_MOV.N'. 16601 16602 The underscore prefix only applies to individual instructions, not to 16603 series of instructions. For example, if a series of instructions have 16604 underscore prefixes, the assembler will not transform the individual 16605 instructions, but it may insert other instructions between them (e.g., 16606 to align a `LOOP' instruction). To prevent the assembler from 16607 modifying a series of instructions as a whole, use the `no-transform' 16608 directive. *Note transform: Transform Directive. 16609 16610 16611 File: as.info, Node: Xtensa Registers, Prev: Xtensa Opcodes, Up: Xtensa Syntax 16612 16613 9.36.2.2 Register Names 16614 ....................... 16615 16616 The assembly syntax for a register file entry is the "short" name for a 16617 TIE register file followed by the index into that register file. For 16618 example, the general-purpose `AR' register file has a short name of 16619 `a', so these registers are named `a0'...`a15'. As a special feature, 16620 `sp' is also supported as a synonym for `a1'. Additional registers may 16621 be added by processor configuration options and by designer-defined TIE 16622 extensions. An initial `$' character is optional in all register names. 16623 16624 16625 File: as.info, Node: Xtensa Optimizations, Next: Xtensa Relaxation, Prev: Xtensa Syntax, Up: Xtensa-Dependent 16626 16627 9.36.3 Xtensa Optimizations 16628 --------------------------- 16629 16630 The optimizations currently supported by `as' are generation of density 16631 instructions where appropriate and automatic branch target alignment. 16632 16633 * Menu: 16634 16635 * Density Instructions:: Using Density Instructions. 16636 * Xtensa Automatic Alignment:: Automatic Instruction Alignment. 16637 16638 16639 File: as.info, Node: Density Instructions, Next: Xtensa Automatic Alignment, Up: Xtensa Optimizations 16640 16641 9.36.3.1 Using Density Instructions 16642 ................................... 16643 16644 The Xtensa instruction set has a code density option that provides 16645 16-bit versions of some of the most commonly used opcodes. Use of these 16646 opcodes can significantly reduce code size. When possible, the 16647 assembler automatically translates instructions from the core Xtensa 16648 instruction set into equivalent instructions from the Xtensa code 16649 density option. This translation can be disabled by using underscore 16650 prefixes (*note Opcode Names: Xtensa Opcodes.), by using the 16651 `--no-transform' command-line option (*note Command Line Options: 16652 Xtensa Options.), or by using the `no-transform' directive (*note 16653 transform: Transform Directive.). 16654 16655 It is a good idea _not_ to use the density instructions directly. 16656 The assembler will automatically select dense instructions where 16657 possible. If you later need to use an Xtensa processor without the code 16658 density option, the same assembly code will then work without 16659 modification. 16660 16661 16662 File: as.info, Node: Xtensa Automatic Alignment, Prev: Density Instructions, Up: Xtensa Optimizations 16663 16664 9.36.3.2 Automatic Instruction Alignment 16665 ........................................ 16666 16667 The Xtensa assembler will automatically align certain instructions, both 16668 to optimize performance and to satisfy architectural requirements. 16669 16670 As an optimization to improve performance, the assembler attempts to 16671 align branch targets so they do not cross instruction fetch boundaries. 16672 (Xtensa processors can be configured with either 32-bit or 64-bit 16673 instruction fetch widths.) An instruction immediately following a call 16674 is treated as a branch target in this context, because it will be the 16675 target of a return from the call. This alignment has the potential to 16676 reduce branch penalties at some expense in code size. This 16677 optimization is enabled by default. You can disable it with the 16678 `--no-target-align' command-line option (*note Command Line Options: 16679 Xtensa Options.). 16680 16681 The target alignment optimization is done without adding instructions 16682 that could increase the execution time of the program. If there are 16683 density instructions in the code preceding a target, the assembler can 16684 change the target alignment by widening some of those instructions to 16685 the equivalent 24-bit instructions. Extra bytes of padding can be 16686 inserted immediately following unconditional jump and return 16687 instructions. This approach is usually successful in aligning many, 16688 but not all, branch targets. 16689 16690 The `LOOP' family of instructions must be aligned such that the 16691 first instruction in the loop body does not cross an instruction fetch 16692 boundary (e.g., with a 32-bit fetch width, a `LOOP' instruction must be 16693 on either a 1 or 2 mod 4 byte boundary). The assembler knows about 16694 this restriction and inserts the minimal number of 2 or 3 byte no-op 16695 instructions to satisfy it. When no-op instructions are added, any 16696 label immediately preceding the original loop will be moved in order to 16697 refer to the loop instruction, not the newly generated no-op 16698 instruction. To preserve binary compatibility across processors with 16699 different fetch widths, the assembler conservatively assumes a 32-bit 16700 fetch width when aligning `LOOP' instructions (except if the first 16701 instruction in the loop is a 64-bit instruction). 16702 16703 Previous versions of the assembler automatically aligned `ENTRY' 16704 instructions to 4-byte boundaries, but that alignment is now the 16705 programmer's responsibility. 16706 16707 16708 File: as.info, Node: Xtensa Relaxation, Next: Xtensa Directives, Prev: Xtensa Optimizations, Up: Xtensa-Dependent 16709 16710 9.36.4 Xtensa Relaxation 16711 ------------------------ 16712 16713 When an instruction operand is outside the range allowed for that 16714 particular instruction field, `as' can transform the code to use a 16715 functionally-equivalent instruction or sequence of instructions. This 16716 process is known as "relaxation". This is typically done for branch 16717 instructions because the distance of the branch targets is not known 16718 until assembly-time. The Xtensa assembler offers branch relaxation and 16719 also extends this concept to function calls, `MOVI' instructions and 16720 other instructions with immediate fields. 16721 16722 * Menu: 16723 16724 * Xtensa Branch Relaxation:: Relaxation of Branches. 16725 * Xtensa Call Relaxation:: Relaxation of Function Calls. 16726 * Xtensa Immediate Relaxation:: Relaxation of other Immediate Fields. 16727 16728 16729 File: as.info, Node: Xtensa Branch Relaxation, Next: Xtensa Call Relaxation, Up: Xtensa Relaxation 16730 16731 9.36.4.1 Conditional Branch Relaxation 16732 ...................................... 16733 16734 When the target of a branch is too far away from the branch itself, 16735 i.e., when the offset from the branch to the target is too large to fit 16736 in the immediate field of the branch instruction, it may be necessary to 16737 replace the branch with a branch around a jump. For example, 16738 16739 beqz a2, L 16740 16741 may result in: 16742 16743 bnez.n a2, M 16744 j L 16745 M: 16746 16747 (The `BNEZ.N' instruction would be used in this example only if the 16748 density option is available. Otherwise, `BNEZ' would be used.) 16749 16750 This relaxation works well because the unconditional jump instruction 16751 has a much larger offset range than the various conditional branches. 16752 However, an error will occur if a branch target is beyond the range of a 16753 jump instruction. `as' cannot relax unconditional jumps. Similarly, 16754 an error will occur if the original input contains an unconditional 16755 jump to a target that is out of range. 16756 16757 Branch relaxation is enabled by default. It can be disabled by using 16758 underscore prefixes (*note Opcode Names: Xtensa Opcodes.), the 16759 `--no-transform' command-line option (*note Command Line Options: 16760 Xtensa Options.), or the `no-transform' directive (*note transform: 16761 Transform Directive.). 16762 16763 16764 File: as.info, Node: Xtensa Call Relaxation, Next: Xtensa Immediate Relaxation, Prev: Xtensa Branch Relaxation, Up: Xtensa Relaxation 16765 16766 9.36.4.2 Function Call Relaxation 16767 ................................. 16768 16769 Function calls may require relaxation because the Xtensa immediate call 16770 instructions (`CALL0', `CALL4', `CALL8' and `CALL12') provide a 16771 PC-relative offset of only 512 Kbytes in either direction. For larger 16772 programs, it may be necessary to use indirect calls (`CALLX0', 16773 `CALLX4', `CALLX8' and `CALLX12') where the target address is specified 16774 in a register. The Xtensa assembler can automatically relax immediate 16775 call instructions into indirect call instructions. This relaxation is 16776 done by loading the address of the called function into the callee's 16777 return address register and then using a `CALLX' instruction. So, for 16778 example: 16779 16780 call8 func 16781 16782 might be relaxed to: 16783 16784 .literal .L1, func 16785 l32r a8, .L1 16786 callx8 a8 16787 16788 Because the addresses of targets of function calls are not generally 16789 known until link-time, the assembler must assume the worst and relax all 16790 the calls to functions in other source files, not just those that really 16791 will be out of range. The linker can recognize calls that were 16792 unnecessarily relaxed, and it will remove the overhead introduced by the 16793 assembler for those cases where direct calls are sufficient. 16794 16795 Call relaxation is disabled by default because it can have a negative 16796 effect on both code size and performance, although the linker can 16797 usually eliminate the unnecessary overhead. If a program is too large 16798 and some of the calls are out of range, function call relaxation can be 16799 enabled using the `--longcalls' command-line option or the `longcalls' 16800 directive (*note longcalls: Longcalls Directive.). 16801 16802 16803 File: as.info, Node: Xtensa Immediate Relaxation, Prev: Xtensa Call Relaxation, Up: Xtensa Relaxation 16804 16805 9.36.4.3 Other Immediate Field Relaxation 16806 ......................................... 16807 16808 The assembler normally performs the following other relaxations. They 16809 can be disabled by using underscore prefixes (*note Opcode Names: 16810 Xtensa Opcodes.), the `--no-transform' command-line option (*note 16811 Command Line Options: Xtensa Options.), or the `no-transform' directive 16812 (*note transform: Transform Directive.). 16813 16814 The `MOVI' machine instruction can only materialize values in the 16815 range from -2048 to 2047. Values outside this range are best 16816 materialized with `L32R' instructions. Thus: 16817 16818 movi a0, 100000 16819 16820 is assembled into the following machine code: 16821 16822 .literal .L1, 100000 16823 l32r a0, .L1 16824 16825 The `L8UI' machine instruction can only be used with immediate 16826 offsets in the range from 0 to 255. The `L16SI' and `L16UI' machine 16827 instructions can only be used with offsets from 0 to 510. The `L32I' 16828 machine instruction can only be used with offsets from 0 to 1020. A 16829 load offset outside these ranges can be materialized with an `L32R' 16830 instruction if the destination register of the load is different than 16831 the source address register. For example: 16832 16833 l32i a1, a0, 2040 16834 16835 is translated to: 16836 16837 .literal .L1, 2040 16838 l32r a1, .L1 16839 add a1, a0, a1 16840 l32i a1, a1, 0 16841 16842 If the load destination and source address register are the same, an 16843 out-of-range offset causes an error. 16844 16845 The Xtensa `ADDI' instruction only allows immediate operands in the 16846 range from -128 to 127. There are a number of alternate instruction 16847 sequences for the `ADDI' operation. First, if the immediate is 0, the 16848 `ADDI' will be turned into a `MOV.N' instruction (or the equivalent 16849 `OR' instruction if the code density option is not available). If the 16850 `ADDI' immediate is outside of the range -128 to 127, but inside the 16851 range -32896 to 32639, an `ADDMI' instruction or `ADDMI'/`ADDI' 16852 sequence will be used. Finally, if the immediate is outside of this 16853 range and a free register is available, an `L32R'/`ADD' sequence will 16854 be used with a literal allocated from the literal pool. 16855 16856 For example: 16857 16858 addi a5, a6, 0 16859 addi a5, a6, 512 16860 addi a5, a6, 513 16861 addi a5, a6, 50000 16862 16863 is assembled into the following: 16864 16865 .literal .L1, 50000 16866 mov.n a5, a6 16867 addmi a5, a6, 0x200 16868 addmi a5, a6, 0x200 16869 addi a5, a5, 1 16870 l32r a5, .L1 16871 add a5, a6, a5 16872 16873 16874 File: as.info, Node: Xtensa Directives, Prev: Xtensa Relaxation, Up: Xtensa-Dependent 16875 16876 9.36.5 Directives 16877 ----------------- 16878 16879 The Xtensa assembler supports a region-based directive syntax: 16880 16881 .begin DIRECTIVE [OPTIONS] 16882 ... 16883 .end DIRECTIVE 16884 16885 All the Xtensa-specific directives that apply to a region of code use 16886 this syntax. 16887 16888 The directive applies to code between the `.begin' and the `.end'. 16889 The state of the option after the `.end' reverts to what it was before 16890 the `.begin'. A nested `.begin'/`.end' region can further change the 16891 state of the directive without having to be aware of its outer state. 16892 For example, consider: 16893 16894 .begin no-transform 16895 L: add a0, a1, a2 16896 .begin transform 16897 M: add a0, a1, a2 16898 .end transform 16899 N: add a0, a1, a2 16900 .end no-transform 16901 16902 The `ADD' opcodes at `L' and `N' in the outer `no-transform' region 16903 both result in `ADD' machine instructions, but the assembler selects an 16904 `ADD.N' instruction for the `ADD' at `M' in the inner `transform' 16905 region. 16906 16907 The advantage of this style is that it works well inside macros 16908 which can preserve the context of their callers. 16909 16910 The following directives are available: 16911 16912 * Menu: 16913 16914 * Schedule Directive:: Enable instruction scheduling. 16915 * Longcalls Directive:: Use Indirect Calls for Greater Range. 16916 * Transform Directive:: Disable All Assembler Transformations. 16917 * Literal Directive:: Intermix Literals with Instructions. 16918 * Literal Position Directive:: Specify Inline Literal Pool Locations. 16919 * Literal Prefix Directive:: Specify Literal Section Name Prefix. 16920 * Absolute Literals Directive:: Control PC-Relative vs. Absolute Literals. 16921 16922 16923 File: as.info, Node: Schedule Directive, Next: Longcalls Directive, Up: Xtensa Directives 16924 16925 9.36.5.1 schedule 16926 ................. 16927 16928 The `schedule' directive is recognized only for compatibility with 16929 Tensilica's assembler. 16930 16931 .begin [no-]schedule 16932 .end [no-]schedule 16933 16934 This directive is ignored and has no effect on `as'. 16935 16936 16937 File: as.info, Node: Longcalls Directive, Next: Transform Directive, Prev: Schedule Directive, Up: Xtensa Directives 16938 16939 9.36.5.2 longcalls 16940 .................. 16941 16942 The `longcalls' directive enables or disables function call relaxation. 16943 *Note Function Call Relaxation: Xtensa Call Relaxation. 16944 16945 .begin [no-]longcalls 16946 .end [no-]longcalls 16947 16948 Call relaxation is disabled by default unless the `--longcalls' 16949 command-line option is specified. The `longcalls' directive overrides 16950 the default determined by the command-line options. 16951 16952 16953 File: as.info, Node: Transform Directive, Next: Literal Directive, Prev: Longcalls Directive, Up: Xtensa Directives 16954 16955 9.36.5.3 transform 16956 .................. 16957 16958 This directive enables or disables all assembler transformation, 16959 including relaxation (*note Xtensa Relaxation: Xtensa Relaxation.) and 16960 optimization (*note Xtensa Optimizations: Xtensa Optimizations.). 16961 16962 .begin [no-]transform 16963 .end [no-]transform 16964 16965 Transformations are enabled by default unless the `--no-transform' 16966 option is used. The `transform' directive overrides the default 16967 determined by the command-line options. An underscore opcode prefix, 16968 disabling transformation of that opcode, always takes precedence over 16969 both directives and command-line flags. 16970 16971 16972 File: as.info, Node: Literal Directive, Next: Literal Position Directive, Prev: Transform Directive, Up: Xtensa Directives 16973 16974 9.36.5.4 literal 16975 ................ 16976 16977 The `.literal' directive is used to define literal pool data, i.e., 16978 read-only 32-bit data accessed via `L32R' instructions. 16979 16980 .literal LABEL, VALUE[, VALUE...] 16981 16982 This directive is similar to the standard `.word' directive, except 16983 that the actual location of the literal data is determined by the 16984 assembler and linker, not by the position of the `.literal' directive. 16985 Using this directive gives the assembler freedom to locate the literal 16986 data in the most appropriate place and possibly to combine identical 16987 literals. For example, the code: 16988 16989 entry sp, 40 16990 .literal .L1, sym 16991 l32r a4, .L1 16992 16993 can be used to load a pointer to the symbol `sym' into register 16994 `a4'. The value of `sym' will not be placed between the `ENTRY' and 16995 `L32R' instructions; instead, the assembler puts the data in a literal 16996 pool. 16997 16998 Literal pools are placed by default in separate literal sections; 16999 however, when using the `--text-section-literals' option (*note Command 17000 Line Options: Xtensa Options.), the literal pools for PC-relative mode 17001 `L32R' instructions are placed in the current section.(1) These text 17002 section literal pools are created automatically before `ENTRY' 17003 instructions and manually after `.literal_position' directives (*note 17004 literal_position: Literal Position Directive.). If there are no 17005 preceding `ENTRY' instructions, explicit `.literal_position' directives 17006 must be used to place the text section literal pools; otherwise, `as' 17007 will report an error. 17008 17009 When literals are placed in separate sections, the literal section 17010 names are derived from the names of the sections where the literals are 17011 defined. The base literal section names are `.literal' for PC-relative 17012 mode `L32R' instructions and `.lit4' for absolute mode `L32R' 17013 instructions (*note absolute-literals: Absolute Literals Directive.). 17014 These base names are used for literals defined in the default `.text' 17015 section. For literals defined in other sections or within the scope of 17016 a `literal_prefix' directive (*note literal_prefix: Literal Prefix 17017 Directive.), the following rules determine the literal section name: 17018 17019 1. If the current section is a member of a section group, the literal 17020 section name includes the group name as a suffix to the base 17021 `.literal' or `.lit4' name, with a period to separate the base 17022 name and group name. The literal section is also made a member of 17023 the group. 17024 17025 2. If the current section name (or `literal_prefix' value) begins with 17026 "`.gnu.linkonce.KIND.'", the literal section name is formed by 17027 replacing "`.KIND'" with the base `.literal' or `.lit4' name. For 17028 example, for literals defined in a section named 17029 `.gnu.linkonce.t.func', the literal section will be 17030 `.gnu.linkonce.literal.func' or `.gnu.linkonce.lit4.func'. 17031 17032 3. If the current section name (or `literal_prefix' value) ends with 17033 `.text', the literal section name is formed by replacing that 17034 suffix with the base `.literal' or `.lit4' name. For example, for 17035 literals defined in a section named `.iram0.text', the literal 17036 section will be `.iram0.literal' or `.iram0.lit4'. 17037 17038 4. If none of the preceding conditions apply, the literal section 17039 name is formed by adding the base `.literal' or `.lit4' name as a 17040 suffix to the current section name (or `literal_prefix' value). 17041 17042 ---------- Footnotes ---------- 17043 17044 (1) Literals for the `.init' and `.fini' sections are always placed 17045 in separate sections, even when `--text-section-literals' is enabled. 17046 17047 17048 File: as.info, Node: Literal Position Directive, Next: Literal Prefix Directive, Prev: Literal Directive, Up: Xtensa Directives 17049 17050 9.36.5.5 literal_position 17051 ......................... 17052 17053 When using `--text-section-literals' to place literals inline in the 17054 section being assembled, the `.literal_position' directive can be used 17055 to mark a potential location for a literal pool. 17056 17057 .literal_position 17058 17059 The `.literal_position' directive is ignored when the 17060 `--text-section-literals' option is not used or when `L32R' 17061 instructions use the absolute addressing mode. 17062 17063 The assembler will automatically place text section literal pools 17064 before `ENTRY' instructions, so the `.literal_position' directive is 17065 only needed to specify some other location for a literal pool. You may 17066 need to add an explicit jump instruction to skip over an inline literal 17067 pool. 17068 17069 For example, an interrupt vector does not begin with an `ENTRY' 17070 instruction so the assembler will be unable to automatically find a good 17071 place to put a literal pool. Moreover, the code for the interrupt 17072 vector must be at a specific starting address, so the literal pool 17073 cannot come before the start of the code. The literal pool for the 17074 vector must be explicitly positioned in the middle of the vector (before 17075 any uses of the literals, due to the negative offsets used by 17076 PC-relative `L32R' instructions). The `.literal_position' directive 17077 can be used to do this. In the following code, the literal for `M' 17078 will automatically be aligned correctly and is placed after the 17079 unconditional jump. 17080 17081 .global M 17082 code_start: 17083 j continue 17084 .literal_position 17085 .align 4 17086 continue: 17087 movi a4, M 17088 17089 17090 File: as.info, Node: Literal Prefix Directive, Next: Absolute Literals Directive, Prev: Literal Position Directive, Up: Xtensa Directives 17091 17092 9.36.5.6 literal_prefix 17093 ....................... 17094 17095 The `literal_prefix' directive allows you to override the default 17096 literal section names, which are derived from the names of the sections 17097 where the literals are defined. 17098 17099 .begin literal_prefix [NAME] 17100 .end literal_prefix 17101 17102 For literals defined within the delimited region, the literal section 17103 names are derived from the NAME argument instead of the name of the 17104 current section. The rules used to derive the literal section names do 17105 not change. *Note literal: Literal Directive. If the NAME argument is 17106 omitted, the literal sections revert to the defaults. This directive 17107 has no effect when using the `--text-section-literals' option (*note 17108 Command Line Options: Xtensa Options.). 17109 17110 17111 File: as.info, Node: Absolute Literals Directive, Prev: Literal Prefix Directive, Up: Xtensa Directives 17112 17113 9.36.5.7 absolute-literals 17114 .......................... 17115 17116 The `absolute-literals' and `no-absolute-literals' directives control 17117 the absolute vs. PC-relative mode for `L32R' instructions. These are 17118 relevant only for Xtensa configurations that include the absolute 17119 addressing option for `L32R' instructions. 17120 17121 .begin [no-]absolute-literals 17122 .end [no-]absolute-literals 17123 17124 These directives do not change the `L32R' mode--they only cause the 17125 assembler to emit the appropriate kind of relocation for `L32R' 17126 instructions and to place the literal values in the appropriate section. 17127 To change the `L32R' mode, the program must write the `LITBASE' special 17128 register. It is the programmer's responsibility to keep track of the 17129 mode and indicate to the assembler which mode is used in each region of 17130 code. 17131 17132 If the Xtensa configuration includes the absolute `L32R' addressing 17133 option, the default is to assume absolute `L32R' addressing unless the 17134 `--no-absolute-literals' command-line option is specified. Otherwise, 17135 the default is to assume PC-relative `L32R' addressing. The 17136 `absolute-literals' directive can then be used to override the default 17137 determined by the command-line options. 17138 17139 17140 File: as.info, Node: Reporting Bugs, Next: Acknowledgements, Prev: Machine Dependencies, Up: Top 17141 17142 10 Reporting Bugs 17143 ***************** 17144 17145 Your bug reports play an essential role in making `as' reliable. 17146 17147 Reporting a bug may help you by bringing a solution to your problem, 17148 or it may not. But in any case the principal function of a bug report 17149 is to help the entire community by making the next version of `as' work 17150 better. Bug reports are your contribution to the maintenance of `as'. 17151 17152 In order for a bug report to serve its purpose, you must include the 17153 information that enables us to fix the bug. 17154 17155 * Menu: 17156 17157 * Bug Criteria:: Have you found a bug? 17158 * Bug Reporting:: How to report bugs 17159 17160 17161 File: as.info, Node: Bug Criteria, Next: Bug Reporting, Up: Reporting Bugs 17162 17163 10.1 Have You Found a Bug? 17164 ========================== 17165 17166 If you are not sure whether you have found a bug, here are some 17167 guidelines: 17168 17169 * If the assembler gets a fatal signal, for any input whatever, that 17170 is a `as' bug. Reliable assemblers never crash. 17171 17172 * If `as' produces an error message for valid input, that is a bug. 17173 17174 * If `as' does not produce an error message for invalid input, that 17175 is a bug. However, you should note that your idea of "invalid 17176 input" might be our idea of "an extension" or "support for 17177 traditional practice". 17178 17179 * If you are an experienced user of assemblers, your suggestions for 17180 improvement of `as' are welcome in any case. 17181 17182 17183 File: as.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Reporting Bugs 17184 17185 10.2 How to Report Bugs 17186 ======================= 17187 17188 A number of companies and individuals offer support for GNU products. 17189 If you obtained `as' from a support organization, we recommend you 17190 contact that organization first. 17191 17192 You can find contact information for many support companies and 17193 individuals in the file `etc/SERVICE' in the GNU Emacs distribution. 17194 17195 In any event, we also recommend that you send bug reports for `as' 17196 to `http://www.sourceware.org/bugzilla/'. 17197 17198 The fundamental principle of reporting bugs usefully is this: 17199 *report all the facts*. If you are not sure whether to state a fact or 17200 leave it out, state it! 17201 17202 Often people omit facts because they think they know what causes the 17203 problem and assume that some details do not matter. Thus, you might 17204 assume that the name of a symbol you use in an example does not matter. 17205 Well, probably it does not, but one cannot be sure. Perhaps the bug is 17206 a stray memory reference which happens to fetch from the location where 17207 that name is stored in memory; perhaps, if the name were different, the 17208 contents of that location would fool the assembler into doing the right 17209 thing despite the bug. Play it safe and give a specific, complete 17210 example. That is the easiest thing for you to do, and the most helpful. 17211 17212 Keep in mind that the purpose of a bug report is to enable us to fix 17213 the bug if it is new to us. Therefore, always write your bug reports 17214 on the assumption that the bug has not been reported previously. 17215 17216 Sometimes people give a few sketchy facts and ask, "Does this ring a 17217 bell?" This cannot help us fix a bug, so it is basically useless. We 17218 respond by asking for enough details to enable us to investigate. You 17219 might as well expedite matters by sending them to begin with. 17220 17221 To enable us to fix the bug, you should include all these things: 17222 17223 * The version of `as'. `as' announces it if you start it with the 17224 `--version' argument. 17225 17226 Without this, we will not know whether there is any point in 17227 looking for the bug in the current version of `as'. 17228 17229 * Any patches you may have applied to the `as' source. 17230 17231 * The type of machine you are using, and the operating system name 17232 and version number. 17233 17234 * What compiler (and its version) was used to compile `as'--e.g. 17235 "`gcc-2.7'". 17236 17237 * The command arguments you gave the assembler to assemble your 17238 example and observe the bug. To guarantee you will not omit 17239 something important, list them all. A copy of the Makefile (or 17240 the output from make) is sufficient. 17241 17242 If we were to try to guess the arguments, we would probably guess 17243 wrong and then we might not encounter the bug. 17244 17245 * A complete input file that will reproduce the bug. If the bug is 17246 observed when the assembler is invoked via a compiler, send the 17247 assembler source, not the high level language source. Most 17248 compilers will produce the assembler source when run with the `-S' 17249 option. If you are using `gcc', use the options `-v 17250 --save-temps'; this will save the assembler source in a file with 17251 an extension of `.s', and also show you exactly how `as' is being 17252 run. 17253 17254 * A description of what behavior you observe that you believe is 17255 incorrect. For example, "It gets a fatal signal." 17256 17257 Of course, if the bug is that `as' gets a fatal signal, then we 17258 will certainly notice it. But if the bug is incorrect output, we 17259 might not notice unless it is glaringly wrong. You might as well 17260 not give us a chance to make a mistake. 17261 17262 Even if the problem you experience is a fatal signal, you should 17263 still say so explicitly. Suppose something strange is going on, 17264 such as, your copy of `as' is out of sync, or you have encountered 17265 a bug in the C library on your system. (This has happened!) Your 17266 copy might crash and ours would not. If you told us to expect a 17267 crash, then when ours fails to crash, we would know that the bug 17268 was not happening for us. If you had not told us to expect a 17269 crash, then we would not be able to draw any conclusion from our 17270 observations. 17271 17272 * If you wish to suggest changes to the `as' source, send us context 17273 diffs, as generated by `diff' with the `-u', `-c', or `-p' option. 17274 Always send diffs from the old file to the new file. If you even 17275 discuss something in the `as' source, refer to it by context, not 17276 by line number. 17277 17278 The line numbers in our development sources will not match those 17279 in your sources. Your line numbers would convey no useful 17280 information to us. 17281 17282 Here are some things that are not necessary: 17283 17284 * A description of the envelope of the bug. 17285 17286 Often people who encounter a bug spend a lot of time investigating 17287 which changes to the input file will make the bug go away and which 17288 changes will not affect it. 17289 17290 This is often time consuming and not very useful, because the way 17291 we will find the bug is by running a single example under the 17292 debugger with breakpoints, not by pure deduction from a series of 17293 examples. We recommend that you save your time for something else. 17294 17295 Of course, if you can find a simpler example to report _instead_ 17296 of the original one, that is a convenience for us. Errors in the 17297 output will be easier to spot, running under the debugger will take 17298 less time, and so on. 17299 17300 However, simplification is not vital; if you do not want to do 17301 this, report the bug anyway and send us the entire test case you 17302 used. 17303 17304 * A patch for the bug. 17305 17306 A patch for the bug does help us if it is a good one. But do not 17307 omit the necessary information, such as the test case, on the 17308 assumption that a patch is all we need. We might see problems 17309 with your patch and decide to fix the problem another way, or we 17310 might not understand it at all. 17311 17312 Sometimes with a program as complicated as `as' it is very hard to 17313 construct an example that will make the program follow a certain 17314 path through the code. If you do not send us the example, we will 17315 not be able to construct one, so we will not be able to verify 17316 that the bug is fixed. 17317 17318 And if we cannot understand what bug you are trying to fix, or why 17319 your patch should be an improvement, we will not install it. A 17320 test case will help us to understand. 17321 17322 * A guess about what the bug is or what it depends on. 17323 17324 Such guesses are usually wrong. Even we cannot guess right about 17325 such things without first using the debugger to find the facts. 17326 17327 17328 File: as.info, Node: Acknowledgements, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top 17329 17330 11 Acknowledgements 17331 ******************* 17332 17333 If you have contributed to GAS and your name isn't listed here, it is 17334 not meant as a slight. We just don't know about it. Send mail to the 17335 maintainer, and we'll correct the situation. Currently the maintainer 17336 is Ken Raeburn (email address `raeburn (a] cygnus.com'). 17337 17338 Dean Elsner wrote the original GNU assembler for the VAX.(1) 17339 17340 Jay Fenlason maintained GAS for a while, adding support for 17341 GDB-specific debug information and the 68k series machines, most of the 17342 preprocessing pass, and extensive changes in `messages.c', 17343 `input-file.c', `write.c'. 17344 17345 K. Richard Pixley maintained GAS for a while, adding various 17346 enhancements and many bug fixes, including merging support for several 17347 processors, breaking GAS up to handle multiple object file format back 17348 ends (including heavy rewrite, testing, an integration of the coff and 17349 b.out back ends), adding configuration including heavy testing and 17350 verification of cross assemblers and file splits and renaming, 17351 converted GAS to strictly ANSI C including full prototypes, added 17352 support for m680[34]0 and cpu32, did considerable work on i960 17353 including a COFF port (including considerable amounts of reverse 17354 engineering), a SPARC opcode file rewrite, DECstation, rs6000, and 17355 hp300hpux host ports, updated "know" assertions and made them work, 17356 much other reorganization, cleanup, and lint. 17357 17358 Ken Raeburn wrote the high-level BFD interface code to replace most 17359 of the code in format-specific I/O modules. 17360 17361 The original VMS support was contributed by David L. Kashtan. Eric 17362 Youngdale has done much work with it since. 17363 17364 The Intel 80386 machine description was written by Eliot Dresselhaus. 17365 17366 Minh Tran-Le at IntelliCorp contributed some AIX 386 support. 17367 17368 The Motorola 88k machine description was contributed by Devon Bowen 17369 of Buffalo University and Torbjorn Granlund of the Swedish Institute of 17370 Computer Science. 17371 17372 Keith Knowles at the Open Software Foundation wrote the original 17373 MIPS back end (`tc-mips.c', `tc-mips.h'), and contributed Rose format 17374 support (which hasn't been merged in yet). Ralph Campbell worked with 17375 the MIPS code to support a.out format. 17376 17377 Support for the Zilog Z8k and Renesas H8/300 processors (tc-z8k, 17378 tc-h8300), and IEEE 695 object file format (obj-ieee), was written by 17379 Steve Chamberlain of Cygnus Support. Steve also modified the COFF back 17380 end to use BFD for some low-level operations, for use with the H8/300 17381 and AMD 29k targets. 17382 17383 John Gilmore built the AMD 29000 support, added `.include' support, 17384 and simplified the configuration of which versions accept which 17385 directives. He updated the 68k machine description so that Motorola's 17386 opcodes always produced fixed-size instructions (e.g., `jsr'), while 17387 synthetic instructions remained shrinkable (`jbsr'). John fixed many 17388 bugs, including true tested cross-compilation support, and one bug in 17389 relaxation that took a week and required the proverbial one-bit fix. 17390 17391 Ian Lance Taylor of Cygnus Support merged the Motorola and MIT 17392 syntax for the 68k, completed support for some COFF targets (68k, i386 17393 SVR3, and SCO Unix), added support for MIPS ECOFF and ELF targets, 17394 wrote the initial RS/6000 and PowerPC assembler, and made a few other 17395 minor patches. 17396 17397 Steve Chamberlain made GAS able to generate listings. 17398 17399 Hewlett-Packard contributed support for the HP9000/300. 17400 17401 Jeff Law wrote GAS and BFD support for the native HPPA object format 17402 (SOM) along with a fairly extensive HPPA testsuite (for both SOM and 17403 ELF object formats). This work was supported by both the Center for 17404 Software Science at the University of Utah and Cygnus Support. 17405 17406 Support for ELF format files has been worked on by Mark Eichin of 17407 Cygnus Support (original, incomplete implementation for SPARC), Pete 17408 Hoogenboom and Jeff Law at the University of Utah (HPPA mainly), 17409 Michael Meissner of the Open Software Foundation (i386 mainly), and Ken 17410 Raeburn of Cygnus Support (sparc, and some initial 64-bit support). 17411 17412 Linas Vepstas added GAS support for the ESA/390 "IBM 370" 17413 architecture. 17414 17415 Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote 17416 GAS and BFD support for openVMS/Alpha. 17417 17418 Timothy Wall, Michael Hayes, and Greg Smart contributed to the 17419 various tic* flavors. 17420 17421 David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from 17422 Tensilica, Inc. added support for Xtensa processors. 17423 17424 Several engineers at Cygnus Support have also provided many small 17425 bug fixes and configuration enhancements. 17426 17427 Many others have contributed large or small bugfixes and 17428 enhancements. If you have contributed significant work and are not 17429 mentioned on this list, and want to be, let us know. Some of the 17430 history has been lost; we are not intentionally leaving anyone out. 17431 17432 ---------- Footnotes ---------- 17433 17434 (1) Any more details? 17435 17436 17437 File: as.info, Node: GNU Free Documentation License, Next: AS Index, Prev: Acknowledgements, Up: Top 17438 17439 Appendix A GNU Free Documentation License 17440 ***************************************** 17441 17442 Version 1.1, March 2000 17443 17444 Copyright (C) 2000, 2003 Free Software Foundation, Inc. 17445 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17446 17447 Everyone is permitted to copy and distribute verbatim copies 17448 of this license document, but changing it is not allowed. 17449 17450 17451 0. PREAMBLE 17452 17453 The purpose of this License is to make a manual, textbook, or other 17454 written document "free" in the sense of freedom: to assure everyone 17455 the effective freedom to copy and redistribute it, with or without 17456 modifying it, either commercially or noncommercially. Secondarily, 17457 this License preserves for the author and publisher a way to get 17458 credit for their work, while not being considered responsible for 17459 modifications made by others. 17460 17461 This License is a kind of "copyleft", which means that derivative 17462 works of the document must themselves be free in the same sense. 17463 It complements the GNU General Public License, which is a copyleft 17464 license designed for free software. 17465 17466 We have designed this License in order to use it for manuals for 17467 free software, because free software needs free documentation: a 17468 free program should come with manuals providing the same freedoms 17469 that the software does. But this License is not limited to 17470 software manuals; it can be used for any textual work, regardless 17471 of subject matter or whether it is published as a printed book. 17472 We recommend this License principally for works whose purpose is 17473 instruction or reference. 17474 17475 17476 1. APPLICABILITY AND DEFINITIONS 17477 17478 This License applies to any manual or other work that contains a 17479 notice placed by the copyright holder saying it can be distributed 17480 under the terms of this License. The "Document", below, refers to 17481 any such manual or work. Any member of the public is a licensee, 17482 and is addressed as "you." 17483 17484 A "Modified Version" of the Document means any work containing the 17485 Document or a portion of it, either copied verbatim, or with 17486 modifications and/or translated into another language. 17487 17488 A "Secondary Section" is a named appendix or a front-matter 17489 section of the Document that deals exclusively with the 17490 relationship of the publishers or authors of the Document to the 17491 Document's overall subject (or to related matters) and contains 17492 nothing that could fall directly within that overall subject. 17493 (For example, if the Document is in part a textbook of 17494 mathematics, a Secondary Section may not explain any mathematics.) 17495 The relationship could be a matter of historical connection with 17496 the subject or with related matters, or of legal, commercial, 17497 philosophical, ethical or political position regarding them. 17498 17499 The "Invariant Sections" are certain Secondary Sections whose 17500 titles are designated, as being those of Invariant Sections, in 17501 the notice that says that the Document is released under this 17502 License. 17503 17504 The "Cover Texts" are certain short passages of text that are 17505 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 17506 that says that the Document is released under this License. 17507 17508 A "Transparent" copy of the Document means a machine-readable copy, 17509 represented in a format whose specification is available to the 17510 general public, whose contents can be viewed and edited directly 17511 and straightforwardly with generic text editors or (for images 17512 composed of pixels) generic paint programs or (for drawings) some 17513 widely available drawing editor, and that is suitable for input to 17514 text formatters or for automatic translation to a variety of 17515 formats suitable for input to text formatters. A copy made in an 17516 otherwise Transparent file format whose markup has been designed 17517 to thwart or discourage subsequent modification by readers is not 17518 Transparent. A copy that is not "Transparent" is called "Opaque." 17519 17520 Examples of suitable formats for Transparent copies include plain 17521 ASCII without markup, Texinfo input format, LaTeX input format, 17522 SGML or XML using a publicly available DTD, and 17523 standard-conforming simple HTML designed for human modification. 17524 Opaque formats include PostScript, PDF, proprietary formats that 17525 can be read and edited only by proprietary word processors, SGML 17526 or XML for which the DTD and/or processing tools are not generally 17527 available, and the machine-generated HTML produced by some word 17528 processors for output purposes only. 17529 17530 The "Title Page" means, for a printed book, the title page itself, 17531 plus such following pages as are needed to hold, legibly, the 17532 material this License requires to appear in the title page. For 17533 works in formats which do not have any title page as such, "Title 17534 Page" means the text near the most prominent appearance of the 17535 work's title, preceding the beginning of the body of the text. 17536 17537 2. VERBATIM COPYING 17538 17539 You may copy and distribute the Document in any medium, either 17540 commercially or noncommercially, provided that this License, the 17541 copyright notices, and the license notice saying this License 17542 applies to the Document are reproduced in all copies, and that you 17543 add no other conditions whatsoever to those of this License. You 17544 may not use technical measures to obstruct or control the reading 17545 or further copying of the copies you make or distribute. However, 17546 you may accept compensation in exchange for copies. If you 17547 distribute a large enough number of copies you must also follow 17548 the conditions in section 3. 17549 17550 You may also lend copies, under the same conditions stated above, 17551 and you may publicly display copies. 17552 17553 3. COPYING IN QUANTITY 17554 17555 If you publish printed copies of the Document numbering more than 17556 100, and the Document's license notice requires Cover Texts, you 17557 must enclose the copies in covers that carry, clearly and legibly, 17558 all these Cover Texts: Front-Cover Texts on the front cover, and 17559 Back-Cover Texts on the back cover. Both covers must also clearly 17560 and legibly identify you as the publisher of these copies. The 17561 front cover must present the full title with all words of the 17562 title equally prominent and visible. You may add other material 17563 on the covers in addition. Copying with changes limited to the 17564 covers, as long as they preserve the title of the Document and 17565 satisfy these conditions, can be treated as verbatim copying in 17566 other respects. 17567 17568 If the required texts for either cover are too voluminous to fit 17569 legibly, you should put the first ones listed (as many as fit 17570 reasonably) on the actual cover, and continue the rest onto 17571 adjacent pages. 17572 17573 If you publish or distribute Opaque copies of the Document 17574 numbering more than 100, you must either include a 17575 machine-readable Transparent copy along with each Opaque copy, or 17576 state in or with each Opaque copy a publicly-accessible 17577 computer-network location containing a complete Transparent copy 17578 of the Document, free of added material, which the general 17579 network-using public has access to download anonymously at no 17580 charge using public-standard network protocols. If you use the 17581 latter option, you must take reasonably prudent steps, when you 17582 begin distribution of Opaque copies in quantity, to ensure that 17583 this Transparent copy will remain thus accessible at the stated 17584 location until at least one year after the last time you 17585 distribute an Opaque copy (directly or through your agents or 17586 retailers) of that edition to the public. 17587 17588 It is requested, but not required, that you contact the authors of 17589 the Document well before redistributing any large number of 17590 copies, to give them a chance to provide you with an updated 17591 version of the Document. 17592 17593 4. MODIFICATIONS 17594 17595 You may copy and distribute a Modified Version of the Document 17596 under the conditions of sections 2 and 3 above, provided that you 17597 release the Modified Version under precisely this License, with 17598 the Modified Version filling the role of the Document, thus 17599 licensing distribution and modification of the Modified Version to 17600 whoever possesses a copy of it. In addition, you must do these 17601 things in the Modified Version: 17602 17603 A. Use in the Title Page (and on the covers, if any) a title 17604 distinct from that of the Document, and from those of previous 17605 versions (which should, if there were any, be listed in the 17606 History section of the Document). You may use the same title 17607 as a previous version if the original publisher of that version 17608 gives permission. 17609 B. List on the Title Page, as authors, one or more persons or 17610 entities responsible for authorship of the modifications in the 17611 Modified Version, together with at least five of the principal 17612 authors of the Document (all of its principal authors, if it 17613 has less than five). 17614 C. State on the Title page the name of the publisher of the 17615 Modified Version, as the publisher. 17616 D. Preserve all the copyright notices of the Document. 17617 E. Add an appropriate copyright notice for your modifications 17618 adjacent to the other copyright notices. 17619 F. Include, immediately after the copyright notices, a license 17620 notice giving the public permission to use the Modified Version 17621 under the terms of this License, in the form shown in the 17622 Addendum below. 17623 G. Preserve in that license notice the full lists of Invariant 17624 Sections and required Cover Texts given in the Document's 17625 license notice. 17626 H. Include an unaltered copy of this License. 17627 I. Preserve the section entitled "History", and its title, and add 17628 to it an item stating at least the title, year, new authors, and 17629 publisher of the Modified Version as given on the Title Page. If 17630 there is no section entitled "History" in the Document, create 17631 one stating the title, year, authors, and publisher of the 17632 Document as given on its Title Page, then add an item 17633 describing the Modified Version as stated in the previous 17634 sentence. 17635 J. Preserve the network location, if any, given in the Document for 17636 public access to a Transparent copy of the Document, and likewise 17637 the network locations given in the Document for previous versions 17638 it was based on. These may be placed in the "History" section. 17639 You may omit a network location for a work that was published at 17640 least four years before the Document itself, or if the original 17641 publisher of the version it refers to gives permission. 17642 K. In any section entitled "Acknowledgements" or "Dedications", 17643 preserve the section's title, and preserve in the section all the 17644 substance and tone of each of the contributor acknowledgements 17645 and/or dedications given therein. 17646 L. Preserve all the Invariant Sections of the Document, 17647 unaltered in their text and in their titles. Section numbers 17648 or the equivalent are not considered part of the section titles. 17649 M. Delete any section entitled "Endorsements." Such a section 17650 may not be included in the Modified Version. 17651 N. Do not retitle any existing section as "Endorsements" or to 17652 conflict in title with any Invariant Section. 17653 17654 If the Modified Version includes new front-matter sections or 17655 appendices that qualify as Secondary Sections and contain no 17656 material copied from the Document, you may at your option 17657 designate some or all of these sections as invariant. To do this, 17658 add their titles to the list of Invariant Sections in the Modified 17659 Version's license notice. These titles must be distinct from any 17660 other section titles. 17661 17662 You may add a section entitled "Endorsements", provided it contains 17663 nothing but endorsements of your Modified Version by various 17664 parties-for example, statements of peer review or that the text has 17665 been approved by an organization as the authoritative definition 17666 of a standard. 17667 17668 You may add a passage of up to five words as a Front-Cover Text, 17669 and a passage of up to 25 words as a Back-Cover Text, to the end 17670 of the list of Cover Texts in the Modified Version. Only one 17671 passage of Front-Cover Text and one of Back-Cover Text may be 17672 added by (or through arrangements made by) any one entity. If the 17673 Document already includes a cover text for the same cover, 17674 previously added by you or by arrangement made by the same entity 17675 you are acting on behalf of, you may not add another; but you may 17676 replace the old one, on explicit permission from the previous 17677 publisher that added the old one. 17678 17679 The author(s) and publisher(s) of the Document do not by this 17680 License give permission to use their names for publicity for or to 17681 assert or imply endorsement of any Modified Version. 17682 17683 5. COMBINING DOCUMENTS 17684 17685 You may combine the Document with other documents released under 17686 this License, under the terms defined in section 4 above for 17687 modified versions, provided that you include in the combination 17688 all of the Invariant Sections of all of the original documents, 17689 unmodified, and list them all as Invariant Sections of your 17690 combined work in its license notice. 17691 17692 The combined work need only contain one copy of this License, and 17693 multiple identical Invariant Sections may be replaced with a single 17694 copy. If there are multiple Invariant Sections with the same name 17695 but different contents, make the title of each such section unique 17696 by adding at the end of it, in parentheses, the name of the 17697 original author or publisher of that section if known, or else a 17698 unique number. Make the same adjustment to the section titles in 17699 the list of Invariant Sections in the license notice of the 17700 combined work. 17701 17702 In the combination, you must combine any sections entitled 17703 "History" in the various original documents, forming one section 17704 entitled "History"; likewise combine any sections entitled 17705 "Acknowledgements", and any sections entitled "Dedications." You 17706 must delete all sections entitled "Endorsements." 17707 17708 6. COLLECTIONS OF DOCUMENTS 17709 17710 You may make a collection consisting of the Document and other 17711 documents released under this License, and replace the individual 17712 copies of this License in the various documents with a single copy 17713 that is included in the collection, provided that you follow the 17714 rules of this License for verbatim copying of each of the 17715 documents in all other respects. 17716 17717 You may extract a single document from such a collection, and 17718 distribute it individually under this License, provided you insert 17719 a copy of this License into the extracted document, and follow 17720 this License in all other respects regarding verbatim copying of 17721 that document. 17722 17723 7. AGGREGATION WITH INDEPENDENT WORKS 17724 17725 A compilation of the Document or its derivatives with other 17726 separate and independent documents or works, in or on a volume of 17727 a storage or distribution medium, does not as a whole count as a 17728 Modified Version of the Document, provided no compilation 17729 copyright is claimed for the compilation. Such a compilation is 17730 called an "aggregate", and this License does not apply to the 17731 other self-contained works thus compiled with the Document, on 17732 account of their being thus compiled, if they are not themselves 17733 derivative works of the Document. 17734 17735 If the Cover Text requirement of section 3 is applicable to these 17736 copies of the Document, then if the Document is less than one 17737 quarter of the entire aggregate, the Document's Cover Texts may be 17738 placed on covers that surround only the Document within the 17739 aggregate. Otherwise they must appear on covers around the whole 17740 aggregate. 17741 17742 8. TRANSLATION 17743 17744 Translation is considered a kind of modification, so you may 17745 distribute translations of the Document under the terms of section 17746 4. Replacing Invariant Sections with translations requires special 17747 permission from their copyright holders, but you may include 17748 translations of some or all Invariant Sections in addition to the 17749 original versions of these Invariant Sections. You may include a 17750 translation of this License provided that you also include the 17751 original English version of this License. In case of a 17752 disagreement between the translation and the original English 17753 version of this License, the original English version will prevail. 17754 17755 9. TERMINATION 17756 17757 You may not copy, modify, sublicense, or distribute the Document 17758 except as expressly provided for under this License. Any other 17759 attempt to copy, modify, sublicense or distribute the Document is 17760 void, and will automatically terminate your rights under this 17761 License. However, parties who have received copies, or rights, 17762 from you under this License will not have their licenses 17763 terminated so long as such parties remain in full compliance. 17764 17765 10. FUTURE REVISIONS OF THIS LICENSE 17766 17767 The Free Software Foundation may publish new, revised versions of 17768 the GNU Free Documentation License from time to time. Such new 17769 versions will be similar in spirit to the present version, but may 17770 differ in detail to address new problems or concerns. See 17771 http://www.gnu.org/copyleft/. 17772 17773 Each version of the License is given a distinguishing version 17774 number. If the Document specifies that a particular numbered 17775 version of this License "or any later version" applies to it, you 17776 have the option of following the terms and conditions either of 17777 that specified version or of any later version that has been 17778 published (not as a draft) by the Free Software Foundation. If 17779 the Document does not specify a version number of this License, 17780 you may choose any version ever published (not as a draft) by the 17781 Free Software Foundation. 17782 17783 17784 ADDENDUM: How to use this License for your documents 17785 ==================================================== 17786 17787 To use this License in a document you have written, include a copy of 17788 the License in the document and put the following copyright and license 17789 notices just after the title page: 17790 17791 Copyright (C) YEAR YOUR NAME. 17792 Permission is granted to copy, distribute and/or modify this document 17793 under the terms of the GNU Free Documentation License, Version 1.1 17794 or any later version published by the Free Software Foundation; 17795 with the Invariant Sections being LIST THEIR TITLES, with the 17796 Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. 17797 A copy of the license is included in the section entitled "GNU 17798 Free Documentation License." 17799 17800 If you have no Invariant Sections, write "with no Invariant Sections" 17801 instead of saying which ones are invariant. If you have no Front-Cover 17802 Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being 17803 LIST"; likewise for Back-Cover Texts. 17804 17805 If your document contains nontrivial examples of program code, we 17806 recommend releasing these examples in parallel under your choice of 17807 free software license, such as the GNU General Public License, to 17808 permit their use in free software. 17809 17810 17811 File: as.info, Node: AS Index, Prev: GNU Free Documentation License, Up: Top 17812 17813 AS Index 17814 ******** 17815 17816 [index] 17817 * Menu: 17818 17819 * #: Comments. (line 38) 17820 * #APP: Preprocessing. (line 26) 17821 * #NO_APP: Preprocessing. (line 26) 17822 * $ in symbol names <1>: SH64-Chars. (line 10) 17823 * $ in symbol names <2>: SH-Chars. (line 10) 17824 * $ in symbol names <3>: D30V-Chars. (line 63) 17825 * $ in symbol names: D10V-Chars. (line 46) 17826 * $a: ARM Mapping Symbols. (line 9) 17827 * $acos math builtin, TIC54X: TIC54X-Builtins. (line 10) 17828 * $asin math builtin, TIC54X: TIC54X-Builtins. (line 13) 17829 * $atan math builtin, TIC54X: TIC54X-Builtins. (line 16) 17830 * $atan2 math builtin, TIC54X: TIC54X-Builtins. (line 19) 17831 * $ceil math builtin, TIC54X: TIC54X-Builtins. (line 22) 17832 * $cos math builtin, TIC54X: TIC54X-Builtins. (line 28) 17833 * $cosh math builtin, TIC54X: TIC54X-Builtins. (line 25) 17834 * $cvf math builtin, TIC54X: TIC54X-Builtins. (line 31) 17835 * $cvi math builtin, TIC54X: TIC54X-Builtins. (line 34) 17836 * $d: ARM Mapping Symbols. (line 15) 17837 * $exp math builtin, TIC54X: TIC54X-Builtins. (line 37) 17838 * $fabs math builtin, TIC54X: TIC54X-Builtins. (line 40) 17839 * $firstch subsym builtin, TIC54X: TIC54X-Macros. (line 26) 17840 * $floor math builtin, TIC54X: TIC54X-Builtins. (line 43) 17841 * $fmod math builtin, TIC54X: TIC54X-Builtins. (line 47) 17842 * $int math builtin, TIC54X: TIC54X-Builtins. (line 50) 17843 * $iscons subsym builtin, TIC54X: TIC54X-Macros. (line 43) 17844 * $isdefed subsym builtin, TIC54X: TIC54X-Macros. (line 34) 17845 * $ismember subsym builtin, TIC54X: TIC54X-Macros. (line 38) 17846 * $isname subsym builtin, TIC54X: TIC54X-Macros. (line 47) 17847 * $isreg subsym builtin, TIC54X: TIC54X-Macros. (line 50) 17848 * $lastch subsym builtin, TIC54X: TIC54X-Macros. (line 30) 17849 * $ldexp math builtin, TIC54X: TIC54X-Builtins. (line 53) 17850 * $log math builtin, TIC54X: TIC54X-Builtins. (line 59) 17851 * $log10 math builtin, TIC54X: TIC54X-Builtins. (line 56) 17852 * $max math builtin, TIC54X: TIC54X-Builtins. (line 62) 17853 * $min math builtin, TIC54X: TIC54X-Builtins. (line 65) 17854 * $pow math builtin, TIC54X: TIC54X-Builtins. (line 68) 17855 * $round math builtin, TIC54X: TIC54X-Builtins. (line 71) 17856 * $sgn math builtin, TIC54X: TIC54X-Builtins. (line 74) 17857 * $sin math builtin, TIC54X: TIC54X-Builtins. (line 77) 17858 * $sinh math builtin, TIC54X: TIC54X-Builtins. (line 80) 17859 * $sqrt math builtin, TIC54X: TIC54X-Builtins. (line 83) 17860 * $structacc subsym builtin, TIC54X: TIC54X-Macros. (line 57) 17861 * $structsz subsym builtin, TIC54X: TIC54X-Macros. (line 54) 17862 * $symcmp subsym builtin, TIC54X: TIC54X-Macros. (line 23) 17863 * $symlen subsym builtin, TIC54X: TIC54X-Macros. (line 20) 17864 * $t: ARM Mapping Symbols. (line 12) 17865 * $tan math builtin, TIC54X: TIC54X-Builtins. (line 86) 17866 * $tanh math builtin, TIC54X: TIC54X-Builtins. (line 89) 17867 * $trunc math builtin, TIC54X: TIC54X-Builtins. (line 92) 17868 * -+ option, VAX/VMS: VAX-Opts. (line 71) 17869 * --: Command Line. (line 10) 17870 * --32 option, i386: i386-Options. (line 8) 17871 * --32 option, x86-64: i386-Options. (line 8) 17872 * --64 option, i386: i386-Options. (line 8) 17873 * --64 option, x86-64: i386-Options. (line 8) 17874 * --absolute-literals: Xtensa Options. (line 23) 17875 * --allow-reg-prefix: SH Options. (line 9) 17876 * --alternate: alternate. (line 6) 17877 * --base-size-default-16: M68K-Opts. (line 71) 17878 * --base-size-default-32: M68K-Opts. (line 71) 17879 * --big: SH Options. (line 9) 17880 * --bitwise-or option, M680x0: M68K-Opts. (line 64) 17881 * --disp-size-default-16: M68K-Opts. (line 80) 17882 * --disp-size-default-32: M68K-Opts. (line 80) 17883 * --divide option, i386: i386-Options. (line 24) 17884 * --dsp: SH Options. (line 9) 17885 * --emulation=crisaout command line option, CRIS: CRIS-Opts. (line 9) 17886 * --emulation=criself command line option, CRIS: CRIS-Opts. (line 9) 17887 * --enforce-aligned-data: Sparc-Aligned-Data. (line 11) 17888 * --fatal-warnings: W. (line 16) 17889 * --fix-v4bx command line option, ARM: ARM Options. (line 126) 17890 * --fixed-special-register-names command line option, MMIX: MMIX-Opts. 17891 (line 8) 17892 * --force-long-branches: M68HC11-Opts. (line 69) 17893 * --generate-example: M68HC11-Opts. (line 86) 17894 * --globalize-symbols command line option, MMIX: MMIX-Opts. (line 12) 17895 * --gnu-syntax command line option, MMIX: MMIX-Opts. (line 16) 17896 * --hash-size=NUMBER: Overview. (line 314) 17897 * --linker-allocated-gregs command line option, MMIX: MMIX-Opts. 17898 (line 67) 17899 * --listing-cont-lines: listing. (line 34) 17900 * --listing-lhs-width: listing. (line 16) 17901 * --listing-lhs-width2: listing. (line 21) 17902 * --listing-rhs-width: listing. (line 28) 17903 * --little: SH Options. (line 9) 17904 * --longcalls: Xtensa Options. (line 37) 17905 * --march=ARCHITECTURE command line option, CRIS: CRIS-Opts. (line 33) 17906 * --MD: MD. (line 6) 17907 * --mul-bug-abort command line option, CRIS: CRIS-Opts. (line 61) 17908 * --no-absolute-literals: Xtensa Options. (line 23) 17909 * --no-expand command line option, MMIX: MMIX-Opts. (line 31) 17910 * --no-longcalls: Xtensa Options. (line 37) 17911 * --no-merge-gregs command line option, MMIX: MMIX-Opts. (line 36) 17912 * --no-mul-bug-abort command line option, CRIS: CRIS-Opts. (line 61) 17913 * --no-predefined-syms command line option, MMIX: MMIX-Opts. (line 22) 17914 * --no-pushj-stubs command line option, MMIX: MMIX-Opts. (line 54) 17915 * --no-stubs command line option, MMIX: MMIX-Opts. (line 54) 17916 * --no-target-align: Xtensa Options. (line 30) 17917 * --no-text-section-literals: Xtensa Options. (line 9) 17918 * --no-transform: Xtensa Options. (line 46) 17919 * --no-underscore command line option, CRIS: CRIS-Opts. (line 15) 17920 * --no-warn: W. (line 11) 17921 * --pcrel: M68K-Opts. (line 92) 17922 * --pic command line option, CRIS: CRIS-Opts. (line 27) 17923 * --print-insn-syntax: M68HC11-Opts. (line 75) 17924 * --print-opcodes: M68HC11-Opts. (line 79) 17925 * --register-prefix-optional option, M680x0: M68K-Opts. (line 51) 17926 * --relax: SH Options. (line 9) 17927 * --relax command line option, MMIX: MMIX-Opts. (line 19) 17928 * --rename-section: Xtensa Options. (line 54) 17929 * --renesas: SH Options. (line 9) 17930 * --short-branches: M68HC11-Opts. (line 54) 17931 * --small: SH Options. (line 9) 17932 * --statistics: statistics. (line 6) 17933 * --strict-direct-mode: M68HC11-Opts. (line 44) 17934 * --target-align: Xtensa Options. (line 30) 17935 * --text-section-literals: Xtensa Options. (line 9) 17936 * --traditional-format: traditional-format. (line 6) 17937 * --transform: Xtensa Options. (line 46) 17938 * --underscore command line option, CRIS: CRIS-Opts. (line 15) 17939 * --warn: W. (line 19) 17940 * -1 option, VAX/VMS: VAX-Opts. (line 77) 17941 * -32addr command line option, Alpha: Alpha Options. (line 50) 17942 * -a: a. (line 6) 17943 * -A options, i960: Options-i960. (line 6) 17944 * -ac: a. (line 6) 17945 * -ad: a. (line 6) 17946 * -ag: a. (line 6) 17947 * -ah: a. (line 6) 17948 * -al: a. (line 6) 17949 * -an: a. (line 6) 17950 * -as: a. (line 6) 17951 * -Asparclet: Sparc-Opts. (line 25) 17952 * -Asparclite: Sparc-Opts. (line 25) 17953 * -Av6: Sparc-Opts. (line 25) 17954 * -Av8: Sparc-Opts. (line 25) 17955 * -Av9: Sparc-Opts. (line 25) 17956 * -Av9a: Sparc-Opts. (line 25) 17957 * -b option, i960: Options-i960. (line 22) 17958 * -big option, M32R: M32R-Opts. (line 35) 17959 * -D: D. (line 6) 17960 * -D, ignored on VAX: VAX-Opts. (line 11) 17961 * -d, VAX option: VAX-Opts. (line 16) 17962 * -eabi= command line option, ARM: ARM Options. (line 109) 17963 * -EB command line option, ARC: ARC Options. (line 31) 17964 * -EB command line option, ARM: ARM Options. (line 114) 17965 * -EB option (MIPS): MIPS Opts. (line 13) 17966 * -EB option, M32R: M32R-Opts. (line 39) 17967 * -EL command line option, ARC: ARC Options. (line 35) 17968 * -EL command line option, ARM: ARM Options. (line 118) 17969 * -EL option (MIPS): MIPS Opts. (line 13) 17970 * -EL option, M32R: M32R-Opts. (line 32) 17971 * -f: f. (line 6) 17972 * -F command line option, Alpha: Alpha Options. (line 50) 17973 * -G command line option, Alpha: Alpha Options. (line 46) 17974 * -g command line option, Alpha: Alpha Options. (line 40) 17975 * -G option (MIPS): MIPS Opts. (line 8) 17976 * -H option, VAX/VMS: VAX-Opts. (line 81) 17977 * -h option, VAX/VMS: VAX-Opts. (line 45) 17978 * -I PATH: I. (line 6) 17979 * -ignore-parallel-conflicts option, M32RX: M32R-Opts. (line 87) 17980 * -Ip option, M32RX: M32R-Opts. (line 97) 17981 * -J, ignored on VAX: VAX-Opts. (line 27) 17982 * -K: K. (line 6) 17983 * -k command line option, ARM: ARM Options. (line 122) 17984 * -KPIC option, M32R: M32R-Opts. (line 42) 17985 * -KPIC option, MIPS: MIPS Opts. (line 21) 17986 * -L: L. (line 6) 17987 * -l option, M680x0: M68K-Opts. (line 39) 17988 * -little option, M32R: M32R-Opts. (line 27) 17989 * -M: M. (line 6) 17990 * -m11/03: PDP-11-Options. (line 140) 17991 * -m11/04: PDP-11-Options. (line 143) 17992 * -m11/05: PDP-11-Options. (line 146) 17993 * -m11/10: PDP-11-Options. (line 146) 17994 * -m11/15: PDP-11-Options. (line 149) 17995 * -m11/20: PDP-11-Options. (line 149) 17996 * -m11/21: PDP-11-Options. (line 152) 17997 * -m11/23: PDP-11-Options. (line 155) 17998 * -m11/24: PDP-11-Options. (line 155) 17999 * -m11/34: PDP-11-Options. (line 158) 18000 * -m11/34a: PDP-11-Options. (line 161) 18001 * -m11/35: PDP-11-Options. (line 164) 18002 * -m11/40: PDP-11-Options. (line 164) 18003 * -m11/44: PDP-11-Options. (line 167) 18004 * -m11/45: PDP-11-Options. (line 170) 18005 * -m11/50: PDP-11-Options. (line 170) 18006 * -m11/53: PDP-11-Options. (line 173) 18007 * -m11/55: PDP-11-Options. (line 170) 18008 * -m11/60: PDP-11-Options. (line 176) 18009 * -m11/70: PDP-11-Options. (line 170) 18010 * -m11/73: PDP-11-Options. (line 173) 18011 * -m11/83: PDP-11-Options. (line 173) 18012 * -m11/84: PDP-11-Options. (line 173) 18013 * -m11/93: PDP-11-Options. (line 173) 18014 * -m11/94: PDP-11-Options. (line 173) 18015 * -m16c option, M16C: M32C-Opts. (line 12) 18016 * -m32c option, M32C: M32C-Opts. (line 9) 18017 * -m32r option, M32R: M32R-Opts. (line 21) 18018 * -m32rx option, M32R2: M32R-Opts. (line 17) 18019 * -m32rx option, M32RX: M32R-Opts. (line 9) 18020 * -m68000 and related options: M68K-Opts. (line 104) 18021 * -m68hc11: M68HC11-Opts. (line 9) 18022 * -m68hc12: M68HC11-Opts. (line 14) 18023 * -m68hcs12: M68HC11-Opts. (line 21) 18024 * -m[no-]68851 command line option, M680x0: M68K-Opts. (line 21) 18025 * -m[no-]68881 command line option, M680x0: M68K-Opts. (line 21) 18026 * -m[no-]div command line option, M680x0: M68K-Opts. (line 21) 18027 * -m[no-]emac command line option, M680x0: M68K-Opts. (line 21) 18028 * -m[no-]float command line option, M680x0: M68K-Opts. (line 21) 18029 * -m[no-]mac command line option, M680x0: M68K-Opts. (line 21) 18030 * -m[no-]usp command line option, M680x0: M68K-Opts. (line 21) 18031 * -mall: PDP-11-Options. (line 26) 18032 * -mall-extensions: PDP-11-Options. (line 26) 18033 * -mall-opcodes command line option, AVR: AVR Options. (line 56) 18034 * -mapcs command line option, ARM: ARM Options. (line 82) 18035 * -mapcs-float command line option, ARM: ARM Options. (line 95) 18036 * -mapcs-reentrant command line option, ARM: ARM Options. (line 100) 18037 * -marc[5|6|7|8] command line option, ARC: ARC Options. (line 6) 18038 * -march= command line option, ARM: ARM Options. (line 39) 18039 * -march= command line option, M680x0: M68K-Opts. (line 8) 18040 * -march= option, i386: i386-Options. (line 31) 18041 * -march= option, x86-64: i386-Options. (line 31) 18042 * -matpcs command line option, ARM: ARM Options. (line 87) 18043 * -mcis: PDP-11-Options. (line 32) 18044 * -mconstant-gp command line option, IA-64: IA-64 Options. (line 6) 18045 * -mCPU command line option, Alpha: Alpha Options. (line 6) 18046 * -mcpu option, cpu: TIC54X-Opts. (line 15) 18047 * -mcpu= command line option, ARM: ARM Options. (line 6) 18048 * -mcpu= command line option, M680x0: M68K-Opts. (line 14) 18049 * -mcsm: PDP-11-Options. (line 43) 18050 * -mdebug command line option, Alpha: Alpha Options. (line 25) 18051 * -me option, stderr redirect: TIC54X-Opts. (line 20) 18052 * -meis: PDP-11-Options. (line 46) 18053 * -merrors-to-file option, stderr redirect: TIC54X-Opts. (line 20) 18054 * -mf option, far-mode: TIC54X-Opts. (line 8) 18055 * -mf11: PDP-11-Options. (line 122) 18056 * -mfar-mode option, far-mode: TIC54X-Opts. (line 8) 18057 * -mfis: PDP-11-Options. (line 51) 18058 * -mfloat-abi= command line option, ARM: ARM Options. (line 104) 18059 * -mfp-11: PDP-11-Options. (line 56) 18060 * -mfpp: PDP-11-Options. (line 56) 18061 * -mfpu: PDP-11-Options. (line 56) 18062 * -mfpu= command line option, ARM: ARM Options. (line 54) 18063 * -mip2022 option, IP2K: IP2K-Opts. (line 14) 18064 * -mip2022ext option, IP2022: IP2K-Opts. (line 9) 18065 * -mj11: PDP-11-Options. (line 126) 18066 * -mka11: PDP-11-Options. (line 92) 18067 * -mkb11: PDP-11-Options. (line 95) 18068 * -mkd11a: PDP-11-Options. (line 98) 18069 * -mkd11b: PDP-11-Options. (line 101) 18070 * -mkd11d: PDP-11-Options. (line 104) 18071 * -mkd11e: PDP-11-Options. (line 107) 18072 * -mkd11f: PDP-11-Options. (line 110) 18073 * -mkd11h: PDP-11-Options. (line 110) 18074 * -mkd11k: PDP-11-Options. (line 114) 18075 * -mkd11q: PDP-11-Options. (line 110) 18076 * -mkd11z: PDP-11-Options. (line 118) 18077 * -mkev11: PDP-11-Options. (line 51) 18078 * -mlimited-eis: PDP-11-Options. (line 64) 18079 * -mlong: M68HC11-Opts. (line 32) 18080 * -mlong-double: M68HC11-Opts. (line 40) 18081 * -mmcu= command line option, AVR: AVR Options. (line 6) 18082 * -mmfpt: PDP-11-Options. (line 70) 18083 * -mmicrocode: PDP-11-Options. (line 83) 18084 * -mmnemonic= option, i386: i386-Options. (line 76) 18085 * -mmnemonic= option, x86-64: i386-Options. (line 76) 18086 * -mmutiproc: PDP-11-Options. (line 73) 18087 * -mmxps: PDP-11-Options. (line 77) 18088 * -mnaked-reg option, i386: i386-Options. (line 90) 18089 * -mnaked-reg option, x86-64: i386-Options. (line 90) 18090 * -mno-cis: PDP-11-Options. (line 32) 18091 * -mno-csm: PDP-11-Options. (line 43) 18092 * -mno-eis: PDP-11-Options. (line 46) 18093 * -mno-extensions: PDP-11-Options. (line 29) 18094 * -mno-fis: PDP-11-Options. (line 51) 18095 * -mno-fp-11: PDP-11-Options. (line 56) 18096 * -mno-fpp: PDP-11-Options. (line 56) 18097 * -mno-fpu: PDP-11-Options. (line 56) 18098 * -mno-kev11: PDP-11-Options. (line 51) 18099 * -mno-limited-eis: PDP-11-Options. (line 64) 18100 * -mno-mfpt: PDP-11-Options. (line 70) 18101 * -mno-microcode: PDP-11-Options. (line 83) 18102 * -mno-mutiproc: PDP-11-Options. (line 73) 18103 * -mno-mxps: PDP-11-Options. (line 77) 18104 * -mno-pic: PDP-11-Options. (line 11) 18105 * -mno-skip-bug command line option, AVR: AVR Options. (line 59) 18106 * -mno-spl: PDP-11-Options. (line 80) 18107 * -mno-sym32: MIPS Opts. (line 184) 18108 * -mno-wrap command line option, AVR: AVR Options. (line 62) 18109 * -mpic: PDP-11-Options. (line 11) 18110 * -mrelax command line option, V850: V850 Options. (line 51) 18111 * -mshort: M68HC11-Opts. (line 27) 18112 * -mshort-double: M68HC11-Opts. (line 36) 18113 * -mspl: PDP-11-Options. (line 80) 18114 * -msse-check= option, i386: i386-Options. (line 64) 18115 * -msse-check= option, x86-64: i386-Options. (line 64) 18116 * -msse2avx option, i386: i386-Options. (line 60) 18117 * -msse2avx option, x86-64: i386-Options. (line 60) 18118 * -msym32: MIPS Opts. (line 184) 18119 * -msyntax= option, i386: i386-Options. (line 83) 18120 * -msyntax= option, x86-64: i386-Options. (line 83) 18121 * -mt11: PDP-11-Options. (line 130) 18122 * -mthumb command line option, ARM: ARM Options. (line 73) 18123 * -mthumb-interwork command line option, ARM: ARM Options. (line 78) 18124 * -mtune= option, i386: i386-Options. (line 52) 18125 * -mtune= option, x86-64: i386-Options. (line 52) 18126 * -mv850 command line option, V850: V850 Options. (line 23) 18127 * -mv850any command line option, V850: V850 Options. (line 41) 18128 * -mv850e command line option, V850: V850 Options. (line 29) 18129 * -mv850e1 command line option, V850: V850 Options. (line 35) 18130 * -mvxworks-pic option, MIPS: MIPS Opts. (line 26) 18131 * -N command line option, CRIS: CRIS-Opts. (line 57) 18132 * -nIp option, M32RX: M32R-Opts. (line 101) 18133 * -no-bitinst, M32R2: M32R-Opts. (line 54) 18134 * -no-ignore-parallel-conflicts option, M32RX: M32R-Opts. (line 93) 18135 * -no-mdebug command line option, Alpha: Alpha Options. (line 25) 18136 * -no-parallel option, M32RX: M32R-Opts. (line 51) 18137 * -no-relax option, i960: Options-i960. (line 66) 18138 * -no-warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. 18139 (line 79) 18140 * -no-warn-unmatched-high option, M32R: M32R-Opts. (line 111) 18141 * -nocpp ignored (MIPS): MIPS Opts. (line 187) 18142 * -o: o. (line 6) 18143 * -O option, M32RX: M32R-Opts. (line 59) 18144 * -parallel option, M32RX: M32R-Opts. (line 46) 18145 * -R: R. (line 6) 18146 * -r800 command line option, Z80: Z80 Options. (line 41) 18147 * -relax command line option, Alpha: Alpha Options. (line 32) 18148 * -S, ignored on VAX: VAX-Opts. (line 11) 18149 * -t, ignored on VAX: VAX-Opts. (line 36) 18150 * -T, ignored on VAX: VAX-Opts. (line 11) 18151 * -v: v. (line 6) 18152 * -V, redundant on VAX: VAX-Opts. (line 22) 18153 * -version: v. (line 6) 18154 * -W: W. (line 11) 18155 * -warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. (line 65) 18156 * -warn-unmatched-high option, M32R: M32R-Opts. (line 105) 18157 * -Wnp option, M32RX: M32R-Opts. (line 83) 18158 * -Wnuh option, M32RX: M32R-Opts. (line 117) 18159 * -Wp option, M32RX: M32R-Opts. (line 75) 18160 * -wsigned_overflow command line option, V850: V850 Options. (line 9) 18161 * -Wuh option, M32RX: M32R-Opts. (line 114) 18162 * -wunsigned_overflow command line option, V850: V850 Options. 18163 (line 16) 18164 * -x command line option, MMIX: MMIX-Opts. (line 44) 18165 * -z80 command line option, Z80: Z80 Options. (line 8) 18166 * -z8001 command line option, Z8000: Z8000 Options. (line 6) 18167 * -z8002 command line option, Z8000: Z8000 Options. (line 9) 18168 * . (symbol): Dot. (line 6) 18169 * .arch directive, ARM: ARM Directives. (line 210) 18170 * .big directive, M32RX: M32R-Directives. (line 88) 18171 * .cantunwind directive, ARM: ARM Directives. (line 114) 18172 * .cpu directive, ARM: ARM Directives. (line 206) 18173 * .eabi_attribute directive, ARM: ARM Directives. (line 224) 18174 * .fnend directive, ARM: ARM Directives. (line 105) 18175 * .fnstart directive, ARM: ARM Directives. (line 102) 18176 * .fpu directive, ARM: ARM Directives. (line 220) 18177 * .handlerdata directive, ARM: ARM Directives. (line 125) 18178 * .insn: MIPS insn. (line 6) 18179 * .little directive, M32RX: M32R-Directives. (line 82) 18180 * .ltorg directive, ARM: ARM Directives. (line 85) 18181 * .m32r directive, M32R: M32R-Directives. (line 66) 18182 * .m32r2 directive, M32R2: M32R-Directives. (line 77) 18183 * .m32rx directive, M32RX: M32R-Directives. (line 72) 18184 * .movsp directive, ARM: ARM Directives. (line 180) 18185 * .o: Object. (line 6) 18186 * .object_arch directive, ARM: ARM Directives. (line 214) 18187 * .pad directive, ARM: ARM Directives. (line 175) 18188 * .param on HPPA: HPPA Directives. (line 19) 18189 * .personality directive, ARM: ARM Directives. (line 118) 18190 * .personalityindex directive, ARM: ARM Directives. (line 121) 18191 * .pool directive, ARM: ARM Directives. (line 99) 18192 * .save directive, ARM: ARM Directives. (line 134) 18193 * .set arch=CPU: MIPS ISA. (line 18) 18194 * .set autoextend: MIPS autoextend. (line 6) 18195 * .set dsp: MIPS ASE instruction generation overrides. 18196 (line 21) 18197 * .set dspr2: MIPS ASE instruction generation overrides. 18198 (line 26) 18199 * .set hardfloat: MIPS floating-point. (line 6) 18200 * .set mdmx: MIPS ASE instruction generation overrides. 18201 (line 16) 18202 * .set mips3d: MIPS ASE instruction generation overrides. 18203 (line 6) 18204 * .set mipsN: MIPS ISA. (line 6) 18205 * .set mt: MIPS ASE instruction generation overrides. 18206 (line 32) 18207 * .set noautoextend: MIPS autoextend. (line 6) 18208 * .set nodsp: MIPS ASE instruction generation overrides. 18209 (line 21) 18210 * .set nodspr2: MIPS ASE instruction generation overrides. 18211 (line 26) 18212 * .set nomdmx: MIPS ASE instruction generation overrides. 18213 (line 16) 18214 * .set nomips3d: MIPS ASE instruction generation overrides. 18215 (line 6) 18216 * .set nomt: MIPS ASE instruction generation overrides. 18217 (line 32) 18218 * .set nosmartmips: MIPS ASE instruction generation overrides. 18219 (line 11) 18220 * .set nosym32: MIPS symbol sizes. (line 6) 18221 * .set pop: MIPS option stack. (line 6) 18222 * .set push: MIPS option stack. (line 6) 18223 * .set smartmips: MIPS ASE instruction generation overrides. 18224 (line 11) 18225 * .set softfloat: MIPS floating-point. (line 6) 18226 * .set sym32: MIPS symbol sizes. (line 6) 18227 * .setfp directive, ARM: ARM Directives. (line 185) 18228 * .unwind_raw directive, ARM: ARM Directives. (line 199) 18229 * .v850 directive, V850: V850 Directives. (line 14) 18230 * .v850e directive, V850: V850 Directives. (line 20) 18231 * .v850e1 directive, V850: V850 Directives. (line 26) 18232 * .vsave directive, ARM: ARM Directives. (line 158) 18233 * .z8001: Z8000 Directives. (line 11) 18234 * .z8002: Z8000 Directives. (line 15) 18235 * 16-bit code, i386: i386-16bit. (line 6) 18236 * 2byte directive, ARC: ARC Directives. (line 9) 18237 * 3byte directive, ARC: ARC Directives. (line 12) 18238 * 3DNow!, i386: i386-SIMD. (line 6) 18239 * 3DNow!, x86-64: i386-SIMD. (line 6) 18240 * 430 support: MSP430-Dependent. (line 6) 18241 * 4byte directive, ARC: ARC Directives. (line 15) 18242 * : (label): Statements. (line 30) 18243 * @word modifier, D10V: D10V-Word. (line 6) 18244 * \" (doublequote character): Strings. (line 43) 18245 * \\ (\ character): Strings. (line 40) 18246 * \b (backspace character): Strings. (line 15) 18247 * \DDD (octal character code): Strings. (line 30) 18248 * \f (formfeed character): Strings. (line 18) 18249 * \n (newline character): Strings. (line 21) 18250 * \r (carriage return character): Strings. (line 24) 18251 * \t (tab): Strings. (line 27) 18252 * \XD... (hex character code): Strings. (line 36) 18253 * _ opcode prefix: Xtensa Opcodes. (line 9) 18254 * a.out: Object. (line 6) 18255 * a.out symbol attributes: a.out Symbols. (line 6) 18256 * A_DIR environment variable, TIC54X: TIC54X-Env. (line 6) 18257 * ABI options, SH64: SH64 Options. (line 29) 18258 * ABORT directive: ABORT (COFF). (line 6) 18259 * abort directive: Abort. (line 6) 18260 * absolute section: Ld Sections. (line 29) 18261 * absolute-literals directive: Absolute Literals Directive. 18262 (line 6) 18263 * ADDI instructions, relaxation: Xtensa Immediate Relaxation. 18264 (line 43) 18265 * addition, permitted arguments: Infix Ops. (line 44) 18266 * addresses: Expressions. (line 6) 18267 * addresses, format of: Secs Background. (line 68) 18268 * addressing modes, D10V: D10V-Addressing. (line 6) 18269 * addressing modes, D30V: D30V-Addressing. (line 6) 18270 * addressing modes, H8/300: H8/300-Addressing. (line 6) 18271 * addressing modes, M680x0: M68K-Syntax. (line 21) 18272 * addressing modes, M68HC11: M68HC11-Syntax. (line 17) 18273 * addressing modes, SH: SH-Addressing. (line 6) 18274 * addressing modes, SH64: SH64-Addressing. (line 6) 18275 * addressing modes, Z8000: Z8000-Addressing. (line 6) 18276 * ADR reg,<label> pseudo op, ARM: ARM Opcodes. (line 25) 18277 * ADRL reg,<label> pseudo op, ARM: ARM Opcodes. (line 35) 18278 * advancing location counter: Org. (line 6) 18279 * align directive: Align. (line 6) 18280 * align directive, ARM: ARM Directives. (line 6) 18281 * align directive, SPARC: Sparc-Directives. (line 9) 18282 * align directive, TIC54X: TIC54X-Directives. (line 6) 18283 * alignment of branch targets: Xtensa Automatic Alignment. 18284 (line 6) 18285 * alignment of LOOP instructions: Xtensa Automatic Alignment. 18286 (line 6) 18287 * Alpha floating point (IEEE): Alpha Floating Point. 18288 (line 6) 18289 * Alpha line comment character: Alpha-Chars. (line 6) 18290 * Alpha line separator: Alpha-Chars. (line 8) 18291 * Alpha notes: Alpha Notes. (line 6) 18292 * Alpha options: Alpha Options. (line 6) 18293 * Alpha registers: Alpha-Regs. (line 6) 18294 * Alpha relocations: Alpha-Relocs. (line 6) 18295 * Alpha support: Alpha-Dependent. (line 6) 18296 * Alpha Syntax: Alpha Options. (line 54) 18297 * Alpha-only directives: Alpha Directives. (line 10) 18298 * altered difference tables: Word. (line 12) 18299 * alternate syntax for the 680x0: M68K-Moto-Syntax. (line 6) 18300 * ARC floating point (IEEE): ARC Floating Point. (line 6) 18301 * ARC machine directives: ARC Directives. (line 6) 18302 * ARC opcodes: ARC Opcodes. (line 6) 18303 * ARC options (none): ARC Options. (line 6) 18304 * ARC register names: ARC-Regs. (line 6) 18305 * ARC special characters: ARC-Chars. (line 6) 18306 * ARC support: ARC-Dependent. (line 6) 18307 * arc5 arc5, ARC: ARC Options. (line 10) 18308 * arc6 arc6, ARC: ARC Options. (line 13) 18309 * arc7 arc7, ARC: ARC Options. (line 21) 18310 * arc8 arc8, ARC: ARC Options. (line 24) 18311 * arch directive, i386: i386-Arch. (line 6) 18312 * arch directive, M680x0: M68K-Directives. (line 22) 18313 * arch directive, x86-64: i386-Arch. (line 6) 18314 * architecture options, i960: Options-i960. (line 6) 18315 * architecture options, IP2022: IP2K-Opts. (line 9) 18316 * architecture options, IP2K: IP2K-Opts. (line 14) 18317 * architecture options, M16C: M32C-Opts. (line 12) 18318 * architecture options, M32C: M32C-Opts. (line 9) 18319 * architecture options, M32R: M32R-Opts. (line 21) 18320 * architecture options, M32R2: M32R-Opts. (line 17) 18321 * architecture options, M32RX: M32R-Opts. (line 9) 18322 * architecture options, M680x0: M68K-Opts. (line 104) 18323 * Architecture variant option, CRIS: CRIS-Opts. (line 33) 18324 * architectures, PowerPC: PowerPC-Opts. (line 6) 18325 * architectures, SPARC: Sparc-Opts. (line 6) 18326 * arguments for addition: Infix Ops. (line 44) 18327 * arguments for subtraction: Infix Ops. (line 49) 18328 * arguments in expressions: Arguments. (line 6) 18329 * arithmetic functions: Operators. (line 6) 18330 * arithmetic operands: Arguments. (line 6) 18331 * ARM data relocations: ARM-Relocations. (line 6) 18332 * arm directive, ARM: ARM Directives. (line 60) 18333 * ARM floating point (IEEE): ARM Floating Point. (line 6) 18334 * ARM identifiers: ARM-Chars. (line 15) 18335 * ARM immediate character: ARM-Chars. (line 13) 18336 * ARM line comment character: ARM-Chars. (line 6) 18337 * ARM line separator: ARM-Chars. (line 10) 18338 * ARM machine directives: ARM Directives. (line 6) 18339 * ARM opcodes: ARM Opcodes. (line 6) 18340 * ARM options (none): ARM Options. (line 6) 18341 * ARM register names: ARM-Regs. (line 6) 18342 * ARM support: ARM-Dependent. (line 6) 18343 * ascii directive: Ascii. (line 6) 18344 * asciz directive: Asciz. (line 6) 18345 * asg directive, TIC54X: TIC54X-Directives. (line 20) 18346 * assembler bugs, reporting: Bug Reporting. (line 6) 18347 * assembler crash: Bug Criteria. (line 9) 18348 * assembler directive .arch, CRIS: CRIS-Pseudos. (line 45) 18349 * assembler directive .dword, CRIS: CRIS-Pseudos. (line 12) 18350 * assembler directive .far, M68HC11: M68HC11-Directives. (line 20) 18351 * assembler directive .interrupt, M68HC11: M68HC11-Directives. 18352 (line 26) 18353 * assembler directive .mode, M68HC11: M68HC11-Directives. (line 16) 18354 * assembler directive .relax, M68HC11: M68HC11-Directives. (line 10) 18355 * assembler directive .syntax, CRIS: CRIS-Pseudos. (line 17) 18356 * assembler directive .xrefb, M68HC11: M68HC11-Directives. (line 31) 18357 * assembler directive BSPEC, MMIX: MMIX-Pseudos. (line 131) 18358 * assembler directive BYTE, MMIX: MMIX-Pseudos. (line 97) 18359 * assembler directive ESPEC, MMIX: MMIX-Pseudos. (line 131) 18360 * assembler directive GREG, MMIX: MMIX-Pseudos. (line 50) 18361 * assembler directive IS, MMIX: MMIX-Pseudos. (line 42) 18362 * assembler directive LOC, MMIX: MMIX-Pseudos. (line 7) 18363 * assembler directive LOCAL, MMIX: MMIX-Pseudos. (line 28) 18364 * assembler directive OCTA, MMIX: MMIX-Pseudos. (line 108) 18365 * assembler directive PREFIX, MMIX: MMIX-Pseudos. (line 120) 18366 * assembler directive TETRA, MMIX: MMIX-Pseudos. (line 108) 18367 * assembler directive WYDE, MMIX: MMIX-Pseudos. (line 108) 18368 * assembler directives, CRIS: CRIS-Pseudos. (line 6) 18369 * assembler directives, M68HC11: M68HC11-Directives. (line 6) 18370 * assembler directives, M68HC12: M68HC11-Directives. (line 6) 18371 * assembler directives, MMIX: MMIX-Pseudos. (line 6) 18372 * assembler internal logic error: As Sections. (line 13) 18373 * assembler version: v. (line 6) 18374 * assembler, and linker: Secs Background. (line 10) 18375 * assembly listings, enabling: a. (line 6) 18376 * assigning values to symbols <1>: Equ. (line 6) 18377 * assigning values to symbols: Setting Symbols. (line 6) 18378 * atmp directive, i860: Directives-i860. (line 16) 18379 * att_syntax pseudo op, i386: i386-Syntax. (line 6) 18380 * att_syntax pseudo op, x86-64: i386-Syntax. (line 6) 18381 * attributes, symbol: Symbol Attributes. (line 6) 18382 * auxiliary attributes, COFF symbols: COFF Symbols. (line 19) 18383 * auxiliary symbol information, COFF: Dim. (line 6) 18384 * Av7: Sparc-Opts. (line 25) 18385 * AVR line comment character: AVR-Chars. (line 6) 18386 * AVR line separator: AVR-Chars. (line 10) 18387 * AVR modifiers: AVR-Modifiers. (line 6) 18388 * AVR opcode summary: AVR Opcodes. (line 6) 18389 * AVR options (none): AVR Options. (line 6) 18390 * AVR register names: AVR-Regs. (line 6) 18391 * AVR support: AVR-Dependent. (line 6) 18392 * backslash (\\): Strings. (line 40) 18393 * backspace (\b): Strings. (line 15) 18394 * balign directive: Balign. (line 6) 18395 * balignl directive: Balign. (line 27) 18396 * balignw directive: Balign. (line 27) 18397 * bes directive, TIC54X: TIC54X-Directives. (line 197) 18398 * BFIN directives: BFIN Directives. (line 6) 18399 * BFIN syntax: BFIN Syntax. (line 6) 18400 * big endian output, MIPS: Overview. (line 629) 18401 * big endian output, PJ: Overview. (line 536) 18402 * big-endian output, MIPS: MIPS Opts. (line 13) 18403 * bignums: Bignums. (line 6) 18404 * binary constants, TIC54X: TIC54X-Constants. (line 8) 18405 * binary files, including: Incbin. (line 6) 18406 * binary integers: Integers. (line 6) 18407 * bit names, IA-64: IA-64-Bits. (line 6) 18408 * bitfields, not supported on VAX: VAX-no. (line 6) 18409 * Blackfin support: BFIN-Dependent. (line 6) 18410 * block: Z8000 Directives. (line 55) 18411 * branch improvement, M680x0: M68K-Branch. (line 6) 18412 * branch improvement, M68HC11: M68HC11-Branch. (line 6) 18413 * branch improvement, VAX: VAX-branch. (line 6) 18414 * branch instructions, relaxation: Xtensa Branch Relaxation. 18415 (line 6) 18416 * branch recording, i960: Options-i960. (line 22) 18417 * branch statistics table, i960: Options-i960. (line 40) 18418 * branch target alignment: Xtensa Automatic Alignment. 18419 (line 6) 18420 * break directive, TIC54X: TIC54X-Directives. (line 143) 18421 * BSD syntax: PDP-11-Syntax. (line 6) 18422 * bss directive, i960: Directives-i960. (line 6) 18423 * bss directive, TIC54X: TIC54X-Directives. (line 29) 18424 * bss section <1>: bss. (line 6) 18425 * bss section: Ld Sections. (line 20) 18426 * bug criteria: Bug Criteria. (line 6) 18427 * bug reports: Bug Reporting. (line 6) 18428 * bugs in assembler: Reporting Bugs. (line 6) 18429 * Built-in symbols, CRIS: CRIS-Symbols. (line 6) 18430 * builtin math functions, TIC54X: TIC54X-Builtins. (line 6) 18431 * builtin subsym functions, TIC54X: TIC54X-Macros. (line 16) 18432 * bus lock prefixes, i386: i386-Prefixes. (line 36) 18433 * bval: Z8000 Directives. (line 30) 18434 * byte directive: Byte. (line 6) 18435 * byte directive, TIC54X: TIC54X-Directives. (line 36) 18436 * C54XDSP_DIR environment variable, TIC54X: TIC54X-Env. (line 6) 18437 * c_mode directive, TIC54X: TIC54X-Directives. (line 51) 18438 * call instructions, i386: i386-Mnemonics. (line 51) 18439 * call instructions, relaxation: Xtensa Call Relaxation. 18440 (line 6) 18441 * call instructions, x86-64: i386-Mnemonics. (line 51) 18442 * callj, i960 pseudo-opcode: callj-i960. (line 6) 18443 * carriage return (\r): Strings. (line 24) 18444 * case sensitivity, Z80: Z80-Case. (line 6) 18445 * cfi_endproc directive: CFI directives. (line 16) 18446 * cfi_startproc directive: CFI directives. (line 6) 18447 * char directive, TIC54X: TIC54X-Directives. (line 36) 18448 * character constant, Z80: Z80-Chars. (line 13) 18449 * character constants: Characters. (line 6) 18450 * character escape codes: Strings. (line 15) 18451 * character escapes, Z80: Z80-Chars. (line 11) 18452 * character, single: Chars. (line 6) 18453 * characters used in symbols: Symbol Intro. (line 6) 18454 * clink directive, TIC54X: TIC54X-Directives. (line 45) 18455 * code directive, ARM: ARM Directives. (line 53) 18456 * code16 directive, i386: i386-16bit. (line 6) 18457 * code16gcc directive, i386: i386-16bit. (line 6) 18458 * code32 directive, i386: i386-16bit. (line 6) 18459 * code64 directive, i386: i386-16bit. (line 6) 18460 * code64 directive, x86-64: i386-16bit. (line 6) 18461 * COFF auxiliary symbol information: Dim. (line 6) 18462 * COFF structure debugging: Tag. (line 6) 18463 * COFF symbol attributes: COFF Symbols. (line 6) 18464 * COFF symbol descriptor: Desc. (line 6) 18465 * COFF symbol storage class: Scl. (line 6) 18466 * COFF symbol type: Type. (line 11) 18467 * COFF symbols, debugging: Def. (line 6) 18468 * COFF value attribute: Val. (line 6) 18469 * COMDAT: Linkonce. (line 6) 18470 * comm directive: Comm. (line 6) 18471 * command line conventions: Command Line. (line 6) 18472 * command line options, V850: V850 Options. (line 9) 18473 * command-line options ignored, VAX: VAX-Opts. (line 6) 18474 * comments: Comments. (line 6) 18475 * comments, M680x0: M68K-Chars. (line 6) 18476 * comments, removed by preprocessor: Preprocessing. (line 11) 18477 * common directive, SPARC: Sparc-Directives. (line 12) 18478 * common sections: Linkonce. (line 6) 18479 * common variable storage: bss. (line 6) 18480 * compare and jump expansions, i960: Compare-and-branch-i960. 18481 (line 13) 18482 * compare/branch instructions, i960: Compare-and-branch-i960. 18483 (line 6) 18484 * comparison expressions: Infix Ops. (line 55) 18485 * conditional assembly: If. (line 6) 18486 * constant, single character: Chars. (line 6) 18487 * constants: Constants. (line 6) 18488 * constants, bignum: Bignums. (line 6) 18489 * constants, character: Characters. (line 6) 18490 * constants, converted by preprocessor: Preprocessing. (line 14) 18491 * constants, floating point: Flonums. (line 6) 18492 * constants, integer: Integers. (line 6) 18493 * constants, number: Numbers. (line 6) 18494 * constants, Sparc: Sparc-Constants. (line 6) 18495 * constants, string: Strings. (line 6) 18496 * constants, TIC54X: TIC54X-Constants. (line 6) 18497 * conversion instructions, i386: i386-Mnemonics. (line 32) 18498 * conversion instructions, x86-64: i386-Mnemonics. (line 32) 18499 * coprocessor wait, i386: i386-Prefixes. (line 40) 18500 * copy directive, TIC54X: TIC54X-Directives. (line 54) 18501 * cpu directive, M680x0: M68K-Directives. (line 30) 18502 * CR16 Operand Qualifiers: CR16 Operand Qualifiers. 18503 (line 6) 18504 * CR16 support: CR16-Dependent. (line 6) 18505 * crash of assembler: Bug Criteria. (line 9) 18506 * CRIS --emulation=crisaout command line option: CRIS-Opts. (line 9) 18507 * CRIS --emulation=criself command line option: CRIS-Opts. (line 9) 18508 * CRIS --march=ARCHITECTURE command line option: CRIS-Opts. (line 33) 18509 * CRIS --mul-bug-abort command line option: CRIS-Opts. (line 61) 18510 * CRIS --no-mul-bug-abort command line option: CRIS-Opts. (line 61) 18511 * CRIS --no-underscore command line option: CRIS-Opts. (line 15) 18512 * CRIS --pic command line option: CRIS-Opts. (line 27) 18513 * CRIS --underscore command line option: CRIS-Opts. (line 15) 18514 * CRIS -N command line option: CRIS-Opts. (line 57) 18515 * CRIS architecture variant option: CRIS-Opts. (line 33) 18516 * CRIS assembler directive .arch: CRIS-Pseudos. (line 45) 18517 * CRIS assembler directive .dword: CRIS-Pseudos. (line 12) 18518 * CRIS assembler directive .syntax: CRIS-Pseudos. (line 17) 18519 * CRIS assembler directives: CRIS-Pseudos. (line 6) 18520 * CRIS built-in symbols: CRIS-Symbols. (line 6) 18521 * CRIS instruction expansion: CRIS-Expand. (line 6) 18522 * CRIS line comment characters: CRIS-Chars. (line 6) 18523 * CRIS options: CRIS-Opts. (line 6) 18524 * CRIS position-independent code: CRIS-Opts. (line 27) 18525 * CRIS pseudo-op .arch: CRIS-Pseudos. (line 45) 18526 * CRIS pseudo-op .dword: CRIS-Pseudos. (line 12) 18527 * CRIS pseudo-op .syntax: CRIS-Pseudos. (line 17) 18528 * CRIS pseudo-ops: CRIS-Pseudos. (line 6) 18529 * CRIS register names: CRIS-Regs. (line 6) 18530 * CRIS support: CRIS-Dependent. (line 6) 18531 * CRIS symbols in position-independent code: CRIS-Pic. (line 6) 18532 * ctbp register, V850: V850-Regs. (line 131) 18533 * ctoff pseudo-op, V850: V850 Opcodes. (line 111) 18534 * ctpc register, V850: V850-Regs. (line 119) 18535 * ctpsw register, V850: V850-Regs. (line 122) 18536 * current address: Dot. (line 6) 18537 * current address, advancing: Org. (line 6) 18538 * D10V @word modifier: D10V-Word. (line 6) 18539 * D10V addressing modes: D10V-Addressing. (line 6) 18540 * D10V floating point: D10V-Float. (line 6) 18541 * D10V line comment character: D10V-Chars. (line 6) 18542 * D10V opcode summary: D10V-Opcodes. (line 6) 18543 * D10V optimization: Overview. (line 408) 18544 * D10V options: D10V-Opts. (line 6) 18545 * D10V registers: D10V-Regs. (line 6) 18546 * D10V size modifiers: D10V-Size. (line 6) 18547 * D10V sub-instruction ordering: D10V-Chars. (line 6) 18548 * D10V sub-instructions: D10V-Subs. (line 6) 18549 * D10V support: D10V-Dependent. (line 6) 18550 * D10V syntax: D10V-Syntax. (line 6) 18551 * D30V addressing modes: D30V-Addressing. (line 6) 18552 * D30V floating point: D30V-Float. (line 6) 18553 * D30V Guarded Execution: D30V-Guarded. (line 6) 18554 * D30V line comment character: D30V-Chars. (line 6) 18555 * D30V nops: Overview. (line 416) 18556 * D30V nops after 32-bit multiply: Overview. (line 419) 18557 * D30V opcode summary: D30V-Opcodes. (line 6) 18558 * D30V optimization: Overview. (line 413) 18559 * D30V options: D30V-Opts. (line 6) 18560 * D30V registers: D30V-Regs. (line 6) 18561 * D30V size modifiers: D30V-Size. (line 6) 18562 * D30V sub-instruction ordering: D30V-Chars. (line 6) 18563 * D30V sub-instructions: D30V-Subs. (line 6) 18564 * D30V support: D30V-Dependent. (line 6) 18565 * D30V syntax: D30V-Syntax. (line 6) 18566 * data alignment on SPARC: Sparc-Aligned-Data. (line 6) 18567 * data and text sections, joining: R. (line 6) 18568 * data directive: Data. (line 6) 18569 * data directive, TIC54X: TIC54X-Directives. (line 61) 18570 * data relocations, ARM: ARM-Relocations. (line 6) 18571 * data section: Ld Sections. (line 9) 18572 * data1 directive, M680x0: M68K-Directives. (line 9) 18573 * data2 directive, M680x0: M68K-Directives. (line 12) 18574 * datalabel, SH64: SH64-Addressing. (line 16) 18575 * dbpc register, V850: V850-Regs. (line 125) 18576 * dbpsw register, V850: V850-Regs. (line 128) 18577 * debuggers, and symbol order: Symbols. (line 10) 18578 * debugging COFF symbols: Def. (line 6) 18579 * DEC syntax: PDP-11-Syntax. (line 6) 18580 * decimal integers: Integers. (line 12) 18581 * def directive: Def. (line 6) 18582 * def directive, TIC54X: TIC54X-Directives. (line 103) 18583 * density instructions: Density Instructions. 18584 (line 6) 18585 * dependency tracking: MD. (line 6) 18586 * deprecated directives: Deprecated. (line 6) 18587 * desc directive: Desc. (line 6) 18588 * descriptor, of a.out symbol: Symbol Desc. (line 6) 18589 * dfloat directive, VAX: VAX-directives. (line 10) 18590 * difference tables altered: Word. (line 12) 18591 * difference tables, warning: K. (line 6) 18592 * differences, mmixal: MMIX-mmixal. (line 6) 18593 * dim directive: Dim. (line 6) 18594 * directives and instructions: Statements. (line 19) 18595 * directives for PowerPC: PowerPC-Pseudo. (line 6) 18596 * directives, BFIN: BFIN Directives. (line 6) 18597 * directives, M32R: M32R-Directives. (line 6) 18598 * directives, M680x0: M68K-Directives. (line 6) 18599 * directives, machine independent: Pseudo Ops. (line 6) 18600 * directives, Xtensa: Xtensa Directives. (line 6) 18601 * directives, Z8000: Z8000 Directives. (line 6) 18602 * Disable floating-point instructions: MIPS floating-point. (line 6) 18603 * Disable single-precision floating-point operations: MIPS floating-point. 18604 (line 12) 18605 * displacement sizing character, VAX: VAX-operands. (line 12) 18606 * dn and qn directives, ARM: ARM Directives. (line 29) 18607 * dollar local symbols: Symbol Names. (line 105) 18608 * dot (symbol): Dot. (line 6) 18609 * double directive: Double. (line 6) 18610 * double directive, i386: i386-Float. (line 14) 18611 * double directive, M680x0: M68K-Float. (line 14) 18612 * double directive, M68HC11: M68HC11-Float. (line 14) 18613 * double directive, TIC54X: TIC54X-Directives. (line 64) 18614 * double directive, VAX: VAX-float. (line 15) 18615 * double directive, x86-64: i386-Float. (line 14) 18616 * doublequote (\"): Strings. (line 43) 18617 * drlist directive, TIC54X: TIC54X-Directives. (line 73) 18618 * drnolist directive, TIC54X: TIC54X-Directives. (line 73) 18619 * dual directive, i860: Directives-i860. (line 6) 18620 * ECOFF sections: MIPS Object. (line 6) 18621 * ecr register, V850: V850-Regs. (line 113) 18622 * eight-byte integer: Quad. (line 9) 18623 * eipc register, V850: V850-Regs. (line 101) 18624 * eipsw register, V850: V850-Regs. (line 104) 18625 * eject directive: Eject. (line 6) 18626 * ELF symbol type: Type. (line 22) 18627 * else directive: Else. (line 6) 18628 * elseif directive: Elseif. (line 6) 18629 * empty expressions: Empty Exprs. (line 6) 18630 * emsg directive, TIC54X: TIC54X-Directives. (line 77) 18631 * emulation: Overview. (line 732) 18632 * end directive: End. (line 6) 18633 * enddual directive, i860: Directives-i860. (line 11) 18634 * endef directive: Endef. (line 6) 18635 * endfunc directive: Endfunc. (line 6) 18636 * endianness, MIPS: Overview. (line 629) 18637 * endianness, PJ: Overview. (line 536) 18638 * endif directive: Endif. (line 6) 18639 * endloop directive, TIC54X: TIC54X-Directives. (line 143) 18640 * endm directive: Macro. (line 138) 18641 * endm directive, TIC54X: TIC54X-Directives. (line 153) 18642 * endstruct directive, TIC54X: TIC54X-Directives. (line 217) 18643 * endunion directive, TIC54X: TIC54X-Directives. (line 251) 18644 * environment settings, TIC54X: TIC54X-Env. (line 6) 18645 * EOF, newline must precede: Statements. (line 13) 18646 * ep register, V850: V850-Regs. (line 95) 18647 * equ directive: Equ. (line 6) 18648 * equ directive, TIC54X: TIC54X-Directives. (line 192) 18649 * equiv directive: Equiv. (line 6) 18650 * eqv directive: Eqv. (line 6) 18651 * err directive: Err. (line 6) 18652 * error directive: Error. (line 6) 18653 * error messages: Errors. (line 6) 18654 * error on valid input: Bug Criteria. (line 12) 18655 * errors, caused by warnings: W. (line 16) 18656 * errors, continuing after: Z. (line 6) 18657 * ESA/390 floating point (IEEE): ESA/390 Floating Point. 18658 (line 6) 18659 * ESA/390 support: ESA/390-Dependent. (line 6) 18660 * ESA/390 Syntax: ESA/390 Options. (line 8) 18661 * ESA/390-only directives: ESA/390 Directives. (line 12) 18662 * escape codes, character: Strings. (line 15) 18663 * eval directive, TIC54X: TIC54X-Directives. (line 24) 18664 * even: Z8000 Directives. (line 58) 18665 * even directive, M680x0: M68K-Directives. (line 15) 18666 * even directive, TIC54X: TIC54X-Directives. (line 6) 18667 * exitm directive: Macro. (line 141) 18668 * expr (internal section): As Sections. (line 17) 18669 * expression arguments: Arguments. (line 6) 18670 * expressions: Expressions. (line 6) 18671 * expressions, comparison: Infix Ops. (line 55) 18672 * expressions, empty: Empty Exprs. (line 6) 18673 * expressions, integer: Integer Exprs. (line 6) 18674 * extAuxRegister directive, ARC: ARC Directives. (line 18) 18675 * extCondCode directive, ARC: ARC Directives. (line 41) 18676 * extCoreRegister directive, ARC: ARC Directives. (line 53) 18677 * extend directive M680x0: M68K-Float. (line 17) 18678 * extend directive M68HC11: M68HC11-Float. (line 17) 18679 * extended directive, i960: Directives-i960. (line 13) 18680 * extern directive: Extern. (line 6) 18681 * extInstruction directive, ARC: ARC Directives. (line 78) 18682 * fail directive: Fail. (line 6) 18683 * far_mode directive, TIC54X: TIC54X-Directives. (line 82) 18684 * faster processing (-f): f. (line 6) 18685 * fatal signal: Bug Criteria. (line 9) 18686 * fclist directive, TIC54X: TIC54X-Directives. (line 87) 18687 * fcnolist directive, TIC54X: TIC54X-Directives. (line 87) 18688 * fepc register, V850: V850-Regs. (line 107) 18689 * fepsw register, V850: V850-Regs. (line 110) 18690 * ffloat directive, VAX: VAX-directives. (line 14) 18691 * field directive, TIC54X: TIC54X-Directives. (line 91) 18692 * file directive <1>: File. (line 6) 18693 * file directive: LNS directives. (line 6) 18694 * file directive, MSP 430: MSP430 Directives. (line 6) 18695 * file name, logical: File. (line 6) 18696 * files, including: Include. (line 6) 18697 * files, input: Input Files. (line 6) 18698 * fill directive: Fill. (line 6) 18699 * filling memory <1>: Space. (line 6) 18700 * filling memory: Skip. (line 6) 18701 * FLIX syntax: Xtensa Syntax. (line 6) 18702 * float directive: Float. (line 6) 18703 * float directive, i386: i386-Float. (line 14) 18704 * float directive, M680x0: M68K-Float. (line 11) 18705 * float directive, M68HC11: M68HC11-Float. (line 11) 18706 * float directive, TIC54X: TIC54X-Directives. (line 64) 18707 * float directive, VAX: VAX-float. (line 15) 18708 * float directive, x86-64: i386-Float. (line 14) 18709 * floating point numbers: Flonums. (line 6) 18710 * floating point numbers (double): Double. (line 6) 18711 * floating point numbers (single) <1>: Single. (line 6) 18712 * floating point numbers (single): Float. (line 6) 18713 * floating point, Alpha (IEEE): Alpha Floating Point. 18714 (line 6) 18715 * floating point, ARC (IEEE): ARC Floating Point. (line 6) 18716 * floating point, ARM (IEEE): ARM Floating Point. (line 6) 18717 * floating point, D10V: D10V-Float. (line 6) 18718 * floating point, D30V: D30V-Float. (line 6) 18719 * floating point, ESA/390 (IEEE): ESA/390 Floating Point. 18720 (line 6) 18721 * floating point, H8/300 (IEEE): H8/300 Floating Point. 18722 (line 6) 18723 * floating point, HPPA (IEEE): HPPA Floating Point. (line 6) 18724 * floating point, i386: i386-Float. (line 6) 18725 * floating point, i960 (IEEE): Floating Point-i960. (line 6) 18726 * floating point, M680x0: M68K-Float. (line 6) 18727 * floating point, M68HC11: M68HC11-Float. (line 6) 18728 * floating point, MSP 430 (IEEE): MSP430 Floating Point. 18729 (line 6) 18730 * floating point, SH (IEEE): SH Floating Point. (line 6) 18731 * floating point, SPARC (IEEE): Sparc-Float. (line 6) 18732 * floating point, V850 (IEEE): V850 Floating Point. (line 6) 18733 * floating point, VAX: VAX-float. (line 6) 18734 * floating point, x86-64: i386-Float. (line 6) 18735 * floating point, Z80: Z80 Floating Point. (line 6) 18736 * flonums: Flonums. (line 6) 18737 * force_thumb directive, ARM: ARM Directives. (line 63) 18738 * format of error messages: Errors. (line 24) 18739 * format of warning messages: Errors. (line 12) 18740 * formfeed (\f): Strings. (line 18) 18741 * func directive: Func. (line 6) 18742 * functions, in expressions: Operators. (line 6) 18743 * gbr960, i960 postprocessor: Options-i960. (line 40) 18744 * gfloat directive, VAX: VAX-directives. (line 18) 18745 * global: Z8000 Directives. (line 21) 18746 * global directive: Global. (line 6) 18747 * global directive, TIC54X: TIC54X-Directives. (line 103) 18748 * gp register, MIPS: MIPS Object. (line 11) 18749 * gp register, V850: V850-Regs. (line 17) 18750 * grouping data: Sub-Sections. (line 6) 18751 * H8/300 addressing modes: H8/300-Addressing. (line 6) 18752 * H8/300 floating point (IEEE): H8/300 Floating Point. 18753 (line 6) 18754 * H8/300 line comment character: H8/300-Chars. (line 6) 18755 * H8/300 line separator: H8/300-Chars. (line 8) 18756 * H8/300 machine directives (none): H8/300 Directives. (line 6) 18757 * H8/300 opcode summary: H8/300 Opcodes. (line 6) 18758 * H8/300 options: H8/300 Options. (line 6) 18759 * H8/300 registers: H8/300-Regs. (line 6) 18760 * H8/300 size suffixes: H8/300 Opcodes. (line 163) 18761 * H8/300 support: H8/300-Dependent. (line 6) 18762 * H8/300H, assembling for: H8/300 Directives. (line 8) 18763 * half directive, ARC: ARC Directives. (line 156) 18764 * half directive, SPARC: Sparc-Directives. (line 17) 18765 * half directive, TIC54X: TIC54X-Directives. (line 111) 18766 * hex character code (\XD...): Strings. (line 36) 18767 * hexadecimal integers: Integers. (line 15) 18768 * hexadecimal prefix, Z80: Z80-Chars. (line 8) 18769 * hfloat directive, VAX: VAX-directives. (line 22) 18770 * hi pseudo-op, V850: V850 Opcodes. (line 33) 18771 * hi0 pseudo-op, V850: V850 Opcodes. (line 10) 18772 * hidden directive: Hidden. (line 6) 18773 * high directive, M32R: M32R-Directives. (line 18) 18774 * hilo pseudo-op, V850: V850 Opcodes. (line 55) 18775 * HPPA directives not supported: HPPA Directives. (line 11) 18776 * HPPA floating point (IEEE): HPPA Floating Point. (line 6) 18777 * HPPA Syntax: HPPA Options. (line 8) 18778 * HPPA-only directives: HPPA Directives. (line 24) 18779 * hword directive: hword. (line 6) 18780 * i370 support: ESA/390-Dependent. (line 6) 18781 * i386 16-bit code: i386-16bit. (line 6) 18782 * i386 arch directive: i386-Arch. (line 6) 18783 * i386 att_syntax pseudo op: i386-Syntax. (line 6) 18784 * i386 conversion instructions: i386-Mnemonics. (line 32) 18785 * i386 floating point: i386-Float. (line 6) 18786 * i386 immediate operands: i386-Syntax. (line 15) 18787 * i386 instruction naming: i386-Mnemonics. (line 6) 18788 * i386 instruction prefixes: i386-Prefixes. (line 6) 18789 * i386 intel_syntax pseudo op: i386-Syntax. (line 6) 18790 * i386 jump optimization: i386-Jumps. (line 6) 18791 * i386 jump, call, return: i386-Syntax. (line 38) 18792 * i386 jump/call operands: i386-Syntax. (line 15) 18793 * i386 memory references: i386-Memory. (line 6) 18794 * i386 mnemonic compatibility: i386-Mnemonics. (line 57) 18795 * i386 mul, imul instructions: i386-Notes. (line 6) 18796 * i386 options: i386-Options. (line 6) 18797 * i386 register operands: i386-Syntax. (line 15) 18798 * i386 registers: i386-Regs. (line 6) 18799 * i386 sections: i386-Syntax. (line 44) 18800 * i386 size suffixes: i386-Syntax. (line 29) 18801 * i386 source, destination operands: i386-Syntax. (line 22) 18802 * i386 support: i386-Dependent. (line 6) 18803 * i386 syntax compatibility: i386-Syntax. (line 6) 18804 * i80306 support: i386-Dependent. (line 6) 18805 * i860 machine directives: Directives-i860. (line 6) 18806 * i860 opcodes: Opcodes for i860. (line 6) 18807 * i860 support: i860-Dependent. (line 6) 18808 * i960 architecture options: Options-i960. (line 6) 18809 * i960 branch recording: Options-i960. (line 22) 18810 * i960 callj pseudo-opcode: callj-i960. (line 6) 18811 * i960 compare and jump expansions: Compare-and-branch-i960. 18812 (line 13) 18813 * i960 compare/branch instructions: Compare-and-branch-i960. 18814 (line 6) 18815 * i960 floating point (IEEE): Floating Point-i960. (line 6) 18816 * i960 machine directives: Directives-i960. (line 6) 18817 * i960 opcodes: Opcodes for i960. (line 6) 18818 * i960 options: Options-i960. (line 6) 18819 * i960 support: i960-Dependent. (line 6) 18820 * IA-64 line comment character: IA-64-Chars. (line 6) 18821 * IA-64 line separator: IA-64-Chars. (line 8) 18822 * IA-64 options: IA-64 Options. (line 6) 18823 * IA-64 Processor-status-Register bit names: IA-64-Bits. (line 6) 18824 * IA-64 registers: IA-64-Regs. (line 6) 18825 * IA-64 support: IA-64-Dependent. (line 6) 18826 * IA-64 Syntax: IA-64 Options. (line 96) 18827 * ident directive: Ident. (line 6) 18828 * identifiers, ARM: ARM-Chars. (line 15) 18829 * identifiers, MSP 430: MSP430-Chars. (line 8) 18830 * if directive: If. (line 6) 18831 * ifb directive: If. (line 21) 18832 * ifc directive: If. (line 25) 18833 * ifdef directive: If. (line 16) 18834 * ifeq directive: If. (line 33) 18835 * ifeqs directive: If. (line 36) 18836 * ifge directive: If. (line 40) 18837 * ifgt directive: If. (line 44) 18838 * ifle directive: If. (line 48) 18839 * iflt directive: If. (line 52) 18840 * ifnb directive: If. (line 56) 18841 * ifnc directive: If. (line 61) 18842 * ifndef directive: If. (line 65) 18843 * ifne directive: If. (line 72) 18844 * ifnes directive: If. (line 76) 18845 * ifnotdef directive: If. (line 65) 18846 * immediate character, ARM: ARM-Chars. (line 13) 18847 * immediate character, M680x0: M68K-Chars. (line 6) 18848 * immediate character, VAX: VAX-operands. (line 6) 18849 * immediate fields, relaxation: Xtensa Immediate Relaxation. 18850 (line 6) 18851 * immediate operands, i386: i386-Syntax. (line 15) 18852 * immediate operands, x86-64: i386-Syntax. (line 15) 18853 * imul instruction, i386: i386-Notes. (line 6) 18854 * imul instruction, x86-64: i386-Notes. (line 6) 18855 * incbin directive: Incbin. (line 6) 18856 * include directive: Include. (line 6) 18857 * include directive search path: I. (line 6) 18858 * indirect character, VAX: VAX-operands. (line 9) 18859 * infix operators: Infix Ops. (line 6) 18860 * inhibiting interrupts, i386: i386-Prefixes. (line 36) 18861 * input: Input Files. (line 6) 18862 * input file linenumbers: Input Files. (line 35) 18863 * instruction expansion, CRIS: CRIS-Expand. (line 6) 18864 * instruction expansion, MMIX: MMIX-Expand. (line 6) 18865 * instruction naming, i386: i386-Mnemonics. (line 6) 18866 * instruction naming, x86-64: i386-Mnemonics. (line 6) 18867 * instruction prefixes, i386: i386-Prefixes. (line 6) 18868 * instruction set, M680x0: M68K-opcodes. (line 6) 18869 * instruction set, M68HC11: M68HC11-opcodes. (line 6) 18870 * instruction summary, AVR: AVR Opcodes. (line 6) 18871 * instruction summary, D10V: D10V-Opcodes. (line 6) 18872 * instruction summary, D30V: D30V-Opcodes. (line 6) 18873 * instruction summary, H8/300: H8/300 Opcodes. (line 6) 18874 * instruction summary, SH: SH Opcodes. (line 6) 18875 * instruction summary, SH64: SH64 Opcodes. (line 6) 18876 * instruction summary, Z8000: Z8000 Opcodes. (line 6) 18877 * instructions and directives: Statements. (line 19) 18878 * int directive: Int. (line 6) 18879 * int directive, H8/300: H8/300 Directives. (line 6) 18880 * int directive, i386: i386-Float. (line 21) 18881 * int directive, TIC54X: TIC54X-Directives. (line 111) 18882 * int directive, x86-64: i386-Float. (line 21) 18883 * integer expressions: Integer Exprs. (line 6) 18884 * integer, 16-byte: Octa. (line 6) 18885 * integer, 8-byte: Quad. (line 9) 18886 * integers: Integers. (line 6) 18887 * integers, 16-bit: hword. (line 6) 18888 * integers, 32-bit: Int. (line 6) 18889 * integers, binary: Integers. (line 6) 18890 * integers, decimal: Integers. (line 12) 18891 * integers, hexadecimal: Integers. (line 15) 18892 * integers, octal: Integers. (line 9) 18893 * integers, one byte: Byte. (line 6) 18894 * intel_syntax pseudo op, i386: i386-Syntax. (line 6) 18895 * intel_syntax pseudo op, x86-64: i386-Syntax. (line 6) 18896 * internal assembler sections: As Sections. (line 6) 18897 * internal directive: Internal. (line 6) 18898 * invalid input: Bug Criteria. (line 14) 18899 * invocation summary: Overview. (line 6) 18900 * IP2K architecture options: IP2K-Opts. (line 9) 18901 * IP2K options: IP2K-Opts. (line 6) 18902 * IP2K support: IP2K-Dependent. (line 6) 18903 * irp directive: Irp. (line 6) 18904 * irpc directive: Irpc. (line 6) 18905 * ISA options, SH64: SH64 Options. (line 6) 18906 * joining text and data sections: R. (line 6) 18907 * jump instructions, i386: i386-Mnemonics. (line 51) 18908 * jump instructions, x86-64: i386-Mnemonics. (line 51) 18909 * jump optimization, i386: i386-Jumps. (line 6) 18910 * jump optimization, x86-64: i386-Jumps. (line 6) 18911 * jump/call operands, i386: i386-Syntax. (line 15) 18912 * jump/call operands, x86-64: i386-Syntax. (line 15) 18913 * L16SI instructions, relaxation: Xtensa Immediate Relaxation. 18914 (line 23) 18915 * L16UI instructions, relaxation: Xtensa Immediate Relaxation. 18916 (line 23) 18917 * L32I instructions, relaxation: Xtensa Immediate Relaxation. 18918 (line 23) 18919 * L8UI instructions, relaxation: Xtensa Immediate Relaxation. 18920 (line 23) 18921 * label (:): Statements. (line 30) 18922 * label directive, TIC54X: TIC54X-Directives. (line 123) 18923 * labels: Labels. (line 6) 18924 * lcomm directive: Lcomm. (line 6) 18925 * lcomm directive, COFF: i386-Directives. (line 6) 18926 * ld: Object. (line 15) 18927 * ldouble directive M680x0: M68K-Float. (line 17) 18928 * ldouble directive M68HC11: M68HC11-Float. (line 17) 18929 * ldouble directive, TIC54X: TIC54X-Directives. (line 64) 18930 * LDR reg,=<label> pseudo op, ARM: ARM Opcodes. (line 15) 18931 * leafproc directive, i960: Directives-i960. (line 18) 18932 * length directive, TIC54X: TIC54X-Directives. (line 127) 18933 * length of symbols: Symbol Intro. (line 14) 18934 * lflags directive (ignored): Lflags. (line 6) 18935 * line comment character: Comments. (line 19) 18936 * line comment character, Alpha: Alpha-Chars. (line 6) 18937 * line comment character, ARM: ARM-Chars. (line 6) 18938 * line comment character, AVR: AVR-Chars. (line 6) 18939 * line comment character, D10V: D10V-Chars. (line 6) 18940 * line comment character, D30V: D30V-Chars. (line 6) 18941 * line comment character, H8/300: H8/300-Chars. (line 6) 18942 * line comment character, IA-64: IA-64-Chars. (line 6) 18943 * line comment character, M680x0: M68K-Chars. (line 6) 18944 * line comment character, MSP 430: MSP430-Chars. (line 6) 18945 * line comment character, SH: SH-Chars. (line 6) 18946 * line comment character, SH64: SH64-Chars. (line 6) 18947 * line comment character, Sparc: Sparc-Chars. (line 6) 18948 * line comment character, V850: V850-Chars. (line 6) 18949 * line comment character, Z80: Z80-Chars. (line 6) 18950 * line comment character, Z8000: Z8000-Chars. (line 6) 18951 * line comment characters, CRIS: CRIS-Chars. (line 6) 18952 * line comment characters, MMIX: MMIX-Chars. (line 6) 18953 * line directive: Line. (line 6) 18954 * line directive, MSP 430: MSP430 Directives. (line 14) 18955 * line numbers, in input files: Input Files. (line 35) 18956 * line numbers, in warnings/errors: Errors. (line 16) 18957 * line separator character: Statements. (line 6) 18958 * line separator, Alpha: Alpha-Chars. (line 8) 18959 * line separator, ARM: ARM-Chars. (line 10) 18960 * line separator, AVR: AVR-Chars. (line 10) 18961 * line separator, H8/300: H8/300-Chars. (line 8) 18962 * line separator, IA-64: IA-64-Chars. (line 8) 18963 * line separator, SH: SH-Chars. (line 8) 18964 * line separator, SH64: SH64-Chars. (line 8) 18965 * line separator, Sparc: Sparc-Chars. (line 8) 18966 * line separator, Z8000: Z8000-Chars. (line 8) 18967 * lines starting with #: Comments. (line 38) 18968 * linker: Object. (line 15) 18969 * linker, and assembler: Secs Background. (line 10) 18970 * linkonce directive: Linkonce. (line 6) 18971 * list directive: List. (line 6) 18972 * list directive, TIC54X: TIC54X-Directives. (line 131) 18973 * listing control, turning off: Nolist. (line 6) 18974 * listing control, turning on: List. (line 6) 18975 * listing control: new page: Eject. (line 6) 18976 * listing control: paper size: Psize. (line 6) 18977 * listing control: subtitle: Sbttl. (line 6) 18978 * listing control: title line: Title. (line 6) 18979 * listings, enabling: a. (line 6) 18980 * literal directive: Literal Directive. (line 6) 18981 * literal_position directive: Literal Position Directive. 18982 (line 6) 18983 * literal_prefix directive: Literal Prefix Directive. 18984 (line 6) 18985 * little endian output, MIPS: Overview. (line 632) 18986 * little endian output, PJ: Overview. (line 539) 18987 * little-endian output, MIPS: MIPS Opts. (line 13) 18988 * ln directive: Ln. (line 6) 18989 * lo pseudo-op, V850: V850 Opcodes. (line 22) 18990 * loc directive: LNS directives. (line 19) 18991 * loc_mark_labels directive: LNS directives. (line 50) 18992 * local common symbols: Lcomm. (line 6) 18993 * local labels: Symbol Names. (line 35) 18994 * local symbol names: Symbol Names. (line 22) 18995 * local symbols, retaining in output: L. (line 6) 18996 * location counter: Dot. (line 6) 18997 * location counter, advancing: Org. (line 6) 18998 * location counter, Z80: Z80-Chars. (line 8) 18999 * logical file name: File. (line 6) 19000 * logical line number: Line. (line 6) 19001 * logical line numbers: Comments. (line 38) 19002 * long directive: Long. (line 6) 19003 * long directive, ARC: ARC Directives. (line 159) 19004 * long directive, i386: i386-Float. (line 21) 19005 * long directive, TIC54X: TIC54X-Directives. (line 135) 19006 * long directive, x86-64: i386-Float. (line 21) 19007 * longcall pseudo-op, V850: V850 Opcodes. (line 123) 19008 * longcalls directive: Longcalls Directive. (line 6) 19009 * longjump pseudo-op, V850: V850 Opcodes. (line 129) 19010 * loop directive, TIC54X: TIC54X-Directives. (line 143) 19011 * LOOP instructions, alignment: Xtensa Automatic Alignment. 19012 (line 6) 19013 * low directive, M32R: M32R-Directives. (line 9) 19014 * lp register, V850: V850-Regs. (line 98) 19015 * lval: Z8000 Directives. (line 27) 19016 * M16C architecture option: M32C-Opts. (line 12) 19017 * M32C architecture option: M32C-Opts. (line 9) 19018 * M32C modifiers: M32C-Modifiers. (line 6) 19019 * M32C options: M32C-Opts. (line 6) 19020 * M32C support: M32C-Dependent. (line 6) 19021 * M32R architecture options: M32R-Opts. (line 9) 19022 * M32R directives: M32R-Directives. (line 6) 19023 * M32R options: M32R-Opts. (line 6) 19024 * M32R support: M32R-Dependent. (line 6) 19025 * M32R warnings: M32R-Warnings. (line 6) 19026 * M680x0 addressing modes: M68K-Syntax. (line 21) 19027 * M680x0 architecture options: M68K-Opts. (line 104) 19028 * M680x0 branch improvement: M68K-Branch. (line 6) 19029 * M680x0 directives: M68K-Directives. (line 6) 19030 * M680x0 floating point: M68K-Float. (line 6) 19031 * M680x0 immediate character: M68K-Chars. (line 6) 19032 * M680x0 line comment character: M68K-Chars. (line 6) 19033 * M680x0 opcodes: M68K-opcodes. (line 6) 19034 * M680x0 options: M68K-Opts. (line 6) 19035 * M680x0 pseudo-opcodes: M68K-Branch. (line 6) 19036 * M680x0 size modifiers: M68K-Syntax. (line 8) 19037 * M680x0 support: M68K-Dependent. (line 6) 19038 * M680x0 syntax: M68K-Syntax. (line 8) 19039 * M68HC11 addressing modes: M68HC11-Syntax. (line 17) 19040 * M68HC11 and M68HC12 support: M68HC11-Dependent. (line 6) 19041 * M68HC11 assembler directive .far: M68HC11-Directives. (line 20) 19042 * M68HC11 assembler directive .interrupt: M68HC11-Directives. (line 26) 19043 * M68HC11 assembler directive .mode: M68HC11-Directives. (line 16) 19044 * M68HC11 assembler directive .relax: M68HC11-Directives. (line 10) 19045 * M68HC11 assembler directive .xrefb: M68HC11-Directives. (line 31) 19046 * M68HC11 assembler directives: M68HC11-Directives. (line 6) 19047 * M68HC11 branch improvement: M68HC11-Branch. (line 6) 19048 * M68HC11 floating point: M68HC11-Float. (line 6) 19049 * M68HC11 modifiers: M68HC11-Modifiers. (line 6) 19050 * M68HC11 opcodes: M68HC11-opcodes. (line 6) 19051 * M68HC11 options: M68HC11-Opts. (line 6) 19052 * M68HC11 pseudo-opcodes: M68HC11-Branch. (line 6) 19053 * M68HC11 syntax: M68HC11-Syntax. (line 6) 19054 * M68HC12 assembler directives: M68HC11-Directives. (line 6) 19055 * machine dependencies: Machine Dependencies. 19056 (line 6) 19057 * machine directives, ARC: ARC Directives. (line 6) 19058 * machine directives, ARM: ARM Directives. (line 6) 19059 * machine directives, H8/300 (none): H8/300 Directives. (line 6) 19060 * machine directives, i860: Directives-i860. (line 6) 19061 * machine directives, i960: Directives-i960. (line 6) 19062 * machine directives, MSP 430: MSP430 Directives. (line 6) 19063 * machine directives, SH: SH Directives. (line 6) 19064 * machine directives, SH64: SH64 Directives. (line 9) 19065 * machine directives, SPARC: Sparc-Directives. (line 6) 19066 * machine directives, TIC54X: TIC54X-Directives. (line 6) 19067 * machine directives, V850: V850 Directives. (line 6) 19068 * machine directives, VAX: VAX-directives. (line 6) 19069 * machine directives, x86: i386-Directives. (line 6) 19070 * machine independent directives: Pseudo Ops. (line 6) 19071 * machine instructions (not covered): Manual. (line 14) 19072 * machine-independent syntax: Syntax. (line 6) 19073 * macro directive: Macro. (line 28) 19074 * macro directive, TIC54X: TIC54X-Directives. (line 153) 19075 * macros: Macro. (line 6) 19076 * macros, count executed: Macro. (line 143) 19077 * Macros, MSP 430: MSP430-Macros. (line 6) 19078 * macros, TIC54X: TIC54X-Macros. (line 6) 19079 * make rules: MD. (line 6) 19080 * manual, structure and purpose: Manual. (line 6) 19081 * math builtins, TIC54X: TIC54X-Builtins. (line 6) 19082 * Maximum number of continuation lines: listing. (line 34) 19083 * memory references, i386: i386-Memory. (line 6) 19084 * memory references, x86-64: i386-Memory. (line 6) 19085 * memory-mapped registers, TIC54X: TIC54X-MMRegs. (line 6) 19086 * merging text and data sections: R. (line 6) 19087 * messages from assembler: Errors. (line 6) 19088 * minus, permitted arguments: Infix Ops. (line 49) 19089 * MIPS architecture options: MIPS Opts. (line 29) 19090 * MIPS big-endian output: MIPS Opts. (line 13) 19091 * MIPS CPU override: MIPS ISA. (line 18) 19092 * MIPS debugging directives: MIPS Stabs. (line 6) 19093 * MIPS DSP Release 1 instruction generation override: MIPS ASE instruction generation overrides. 19094 (line 21) 19095 * MIPS DSP Release 2 instruction generation override: MIPS ASE instruction generation overrides. 19096 (line 26) 19097 * MIPS ECOFF sections: MIPS Object. (line 6) 19098 * MIPS endianness: Overview. (line 629) 19099 * MIPS ISA: Overview. (line 635) 19100 * MIPS ISA override: MIPS ISA. (line 6) 19101 * MIPS little-endian output: MIPS Opts. (line 13) 19102 * MIPS MDMX instruction generation override: MIPS ASE instruction generation overrides. 19103 (line 16) 19104 * MIPS MIPS-3D instruction generation override: MIPS ASE instruction generation overrides. 19105 (line 6) 19106 * MIPS MT instruction generation override: MIPS ASE instruction generation overrides. 19107 (line 32) 19108 * MIPS option stack: MIPS option stack. (line 6) 19109 * MIPS processor: MIPS-Dependent. (line 6) 19110 * MIT: M68K-Syntax. (line 6) 19111 * mlib directive, TIC54X: TIC54X-Directives. (line 159) 19112 * mlist directive, TIC54X: TIC54X-Directives. (line 164) 19113 * MMIX assembler directive BSPEC: MMIX-Pseudos. (line 131) 19114 * MMIX assembler directive BYTE: MMIX-Pseudos. (line 97) 19115 * MMIX assembler directive ESPEC: MMIX-Pseudos. (line 131) 19116 * MMIX assembler directive GREG: MMIX-Pseudos. (line 50) 19117 * MMIX assembler directive IS: MMIX-Pseudos. (line 42) 19118 * MMIX assembler directive LOC: MMIX-Pseudos. (line 7) 19119 * MMIX assembler directive LOCAL: MMIX-Pseudos. (line 28) 19120 * MMIX assembler directive OCTA: MMIX-Pseudos. (line 108) 19121 * MMIX assembler directive PREFIX: MMIX-Pseudos. (line 120) 19122 * MMIX assembler directive TETRA: MMIX-Pseudos. (line 108) 19123 * MMIX assembler directive WYDE: MMIX-Pseudos. (line 108) 19124 * MMIX assembler directives: MMIX-Pseudos. (line 6) 19125 * MMIX line comment characters: MMIX-Chars. (line 6) 19126 * MMIX options: MMIX-Opts. (line 6) 19127 * MMIX pseudo-op BSPEC: MMIX-Pseudos. (line 131) 19128 * MMIX pseudo-op BYTE: MMIX-Pseudos. (line 97) 19129 * MMIX pseudo-op ESPEC: MMIX-Pseudos. (line 131) 19130 * MMIX pseudo-op GREG: MMIX-Pseudos. (line 50) 19131 * MMIX pseudo-op IS: MMIX-Pseudos. (line 42) 19132 * MMIX pseudo-op LOC: MMIX-Pseudos. (line 7) 19133 * MMIX pseudo-op LOCAL: MMIX-Pseudos. (line 28) 19134 * MMIX pseudo-op OCTA: MMIX-Pseudos. (line 108) 19135 * MMIX pseudo-op PREFIX: MMIX-Pseudos. (line 120) 19136 * MMIX pseudo-op TETRA: MMIX-Pseudos. (line 108) 19137 * MMIX pseudo-op WYDE: MMIX-Pseudos. (line 108) 19138 * MMIX pseudo-ops: MMIX-Pseudos. (line 6) 19139 * MMIX register names: MMIX-Regs. (line 6) 19140 * MMIX support: MMIX-Dependent. (line 6) 19141 * mmixal differences: MMIX-mmixal. (line 6) 19142 * mmregs directive, TIC54X: TIC54X-Directives. (line 170) 19143 * mmsg directive, TIC54X: TIC54X-Directives. (line 77) 19144 * MMX, i386: i386-SIMD. (line 6) 19145 * MMX, x86-64: i386-SIMD. (line 6) 19146 * mnemonic compatibility, i386: i386-Mnemonics. (line 57) 19147 * mnemonic suffixes, i386: i386-Syntax. (line 29) 19148 * mnemonic suffixes, x86-64: i386-Syntax. (line 29) 19149 * mnemonics for opcodes, VAX: VAX-opcodes. (line 6) 19150 * mnemonics, AVR: AVR Opcodes. (line 6) 19151 * mnemonics, D10V: D10V-Opcodes. (line 6) 19152 * mnemonics, D30V: D30V-Opcodes. (line 6) 19153 * mnemonics, H8/300: H8/300 Opcodes. (line 6) 19154 * mnemonics, SH: SH Opcodes. (line 6) 19155 * mnemonics, SH64: SH64 Opcodes. (line 6) 19156 * mnemonics, Z8000: Z8000 Opcodes. (line 6) 19157 * mnolist directive, TIC54X: TIC54X-Directives. (line 164) 19158 * Motorola syntax for the 680x0: M68K-Moto-Syntax. (line 6) 19159 * MOVI instructions, relaxation: Xtensa Immediate Relaxation. 19160 (line 12) 19161 * MOVW and MOVT relocations, ARM: ARM-Relocations. (line 20) 19162 * MRI compatibility mode: M. (line 6) 19163 * mri directive: MRI. (line 6) 19164 * MRI mode, temporarily: MRI. (line 6) 19165 * MSP 430 floating point (IEEE): MSP430 Floating Point. 19166 (line 6) 19167 * MSP 430 identifiers: MSP430-Chars. (line 8) 19168 * MSP 430 line comment character: MSP430-Chars. (line 6) 19169 * MSP 430 machine directives: MSP430 Directives. (line 6) 19170 * MSP 430 macros: MSP430-Macros. (line 6) 19171 * MSP 430 opcodes: MSP430 Opcodes. (line 6) 19172 * MSP 430 options (none): MSP430 Options. (line 6) 19173 * MSP 430 profiling capability: MSP430 Profiling Capability. 19174 (line 6) 19175 * MSP 430 register names: MSP430-Regs. (line 6) 19176 * MSP 430 support: MSP430-Dependent. (line 6) 19177 * MSP430 Assembler Extensions: MSP430-Ext. (line 6) 19178 * mul instruction, i386: i386-Notes. (line 6) 19179 * mul instruction, x86-64: i386-Notes. (line 6) 19180 * name: Z8000 Directives. (line 18) 19181 * named section: Section. (line 6) 19182 * named sections: Ld Sections. (line 8) 19183 * names, symbol: Symbol Names. (line 6) 19184 * naming object file: o. (line 6) 19185 * new page, in listings: Eject. (line 6) 19186 * newblock directive, TIC54X: TIC54X-Directives. (line 176) 19187 * newline (\n): Strings. (line 21) 19188 * newline, required at file end: Statements. (line 13) 19189 * no-absolute-literals directive: Absolute Literals Directive. 19190 (line 6) 19191 * no-longcalls directive: Longcalls Directive. (line 6) 19192 * no-schedule directive: Schedule Directive. (line 6) 19193 * no-transform directive: Transform Directive. (line 6) 19194 * nolist directive: Nolist. (line 6) 19195 * nolist directive, TIC54X: TIC54X-Directives. (line 131) 19196 * NOP pseudo op, ARM: ARM Opcodes. (line 9) 19197 * notes for Alpha: Alpha Notes. (line 6) 19198 * null-terminated strings: Asciz. (line 6) 19199 * number constants: Numbers. (line 6) 19200 * number of macros executed: Macro. (line 143) 19201 * numbered subsections: Sub-Sections. (line 6) 19202 * numbers, 16-bit: hword. (line 6) 19203 * numeric values: Expressions. (line 6) 19204 * nword directive, SPARC: Sparc-Directives. (line 20) 19205 * object attributes: Object Attributes. (line 6) 19206 * object file: Object. (line 6) 19207 * object file format: Object Formats. (line 6) 19208 * object file name: o. (line 6) 19209 * object file, after errors: Z. (line 6) 19210 * obsolescent directives: Deprecated. (line 6) 19211 * octa directive: Octa. (line 6) 19212 * octal character code (\DDD): Strings. (line 30) 19213 * octal integers: Integers. (line 9) 19214 * offset directive, V850: V850 Directives. (line 6) 19215 * opcode mnemonics, VAX: VAX-opcodes. (line 6) 19216 * opcode names, Xtensa: Xtensa Opcodes. (line 6) 19217 * opcode summary, AVR: AVR Opcodes. (line 6) 19218 * opcode summary, D10V: D10V-Opcodes. (line 6) 19219 * opcode summary, D30V: D30V-Opcodes. (line 6) 19220 * opcode summary, H8/300: H8/300 Opcodes. (line 6) 19221 * opcode summary, SH: SH Opcodes. (line 6) 19222 * opcode summary, SH64: SH64 Opcodes. (line 6) 19223 * opcode summary, Z8000: Z8000 Opcodes. (line 6) 19224 * opcodes for ARC: ARC Opcodes. (line 6) 19225 * opcodes for ARM: ARM Opcodes. (line 6) 19226 * opcodes for MSP 430: MSP430 Opcodes. (line 6) 19227 * opcodes for V850: V850 Opcodes. (line 6) 19228 * opcodes, i860: Opcodes for i860. (line 6) 19229 * opcodes, i960: Opcodes for i960. (line 6) 19230 * opcodes, M680x0: M68K-opcodes. (line 6) 19231 * opcodes, M68HC11: M68HC11-opcodes. (line 6) 19232 * operand delimiters, i386: i386-Syntax. (line 15) 19233 * operand delimiters, x86-64: i386-Syntax. (line 15) 19234 * operand notation, VAX: VAX-operands. (line 6) 19235 * operands in expressions: Arguments. (line 6) 19236 * operator precedence: Infix Ops. (line 11) 19237 * operators, in expressions: Operators. (line 6) 19238 * operators, permitted arguments: Infix Ops. (line 6) 19239 * optimization, D10V: Overview. (line 408) 19240 * optimization, D30V: Overview. (line 413) 19241 * optimizations: Xtensa Optimizations. 19242 (line 6) 19243 * option directive, ARC: ARC Directives. (line 162) 19244 * option directive, TIC54X: TIC54X-Directives. (line 180) 19245 * option summary: Overview. (line 6) 19246 * options for Alpha: Alpha Options. (line 6) 19247 * options for ARC (none): ARC Options. (line 6) 19248 * options for ARM (none): ARM Options. (line 6) 19249 * options for AVR (none): AVR Options. (line 6) 19250 * options for i386: i386-Options. (line 6) 19251 * options for IA-64: IA-64 Options. (line 6) 19252 * options for MSP430 (none): MSP430 Options. (line 6) 19253 * options for PDP-11: PDP-11-Options. (line 6) 19254 * options for PowerPC: PowerPC-Opts. (line 6) 19255 * options for SPARC: Sparc-Opts. (line 6) 19256 * options for V850 (none): V850 Options. (line 6) 19257 * options for VAX/VMS: VAX-Opts. (line 42) 19258 * options for x86-64: i386-Options. (line 6) 19259 * options for Z80: Z80 Options. (line 6) 19260 * options, all versions of assembler: Invoking. (line 6) 19261 * options, command line: Command Line. (line 13) 19262 * options, CRIS: CRIS-Opts. (line 6) 19263 * options, D10V: D10V-Opts. (line 6) 19264 * options, D30V: D30V-Opts. (line 6) 19265 * options, H8/300: H8/300 Options. (line 6) 19266 * options, i960: Options-i960. (line 6) 19267 * options, IP2K: IP2K-Opts. (line 6) 19268 * options, M32C: M32C-Opts. (line 6) 19269 * options, M32R: M32R-Opts. (line 6) 19270 * options, M680x0: M68K-Opts. (line 6) 19271 * options, M68HC11: M68HC11-Opts. (line 6) 19272 * options, MMIX: MMIX-Opts. (line 6) 19273 * options, PJ: PJ Options. (line 6) 19274 * options, SH: SH Options. (line 6) 19275 * options, SH64: SH64 Options. (line 6) 19276 * options, TIC54X: TIC54X-Opts. (line 6) 19277 * options, Z8000: Z8000 Options. (line 6) 19278 * org directive: Org. (line 6) 19279 * other attribute, of a.out symbol: Symbol Other. (line 6) 19280 * output file: Object. (line 6) 19281 * p2align directive: P2align. (line 6) 19282 * p2alignl directive: P2align. (line 28) 19283 * p2alignw directive: P2align. (line 28) 19284 * padding the location counter: Align. (line 6) 19285 * padding the location counter given a power of two: P2align. (line 6) 19286 * padding the location counter given number of bytes: Balign. (line 6) 19287 * page, in listings: Eject. (line 6) 19288 * paper size, for listings: Psize. (line 6) 19289 * paths for .include: I. (line 6) 19290 * patterns, writing in memory: Fill. (line 6) 19291 * PDP-11 comments: PDP-11-Syntax. (line 16) 19292 * PDP-11 floating-point register syntax: PDP-11-Syntax. (line 13) 19293 * PDP-11 general-purpose register syntax: PDP-11-Syntax. (line 10) 19294 * PDP-11 instruction naming: PDP-11-Mnemonics. (line 6) 19295 * PDP-11 support: PDP-11-Dependent. (line 6) 19296 * PDP-11 syntax: PDP-11-Syntax. (line 6) 19297 * PIC code generation for ARM: ARM Options. (line 122) 19298 * PIC code generation for M32R: M32R-Opts. (line 42) 19299 * PIC selection, MIPS: MIPS Opts. (line 21) 19300 * PJ endianness: Overview. (line 536) 19301 * PJ options: PJ Options. (line 6) 19302 * PJ support: PJ-Dependent. (line 6) 19303 * plus, permitted arguments: Infix Ops. (line 44) 19304 * popsection directive: PopSection. (line 6) 19305 * Position-independent code, CRIS: CRIS-Opts. (line 27) 19306 * Position-independent code, symbols in, CRIS: CRIS-Pic. (line 6) 19307 * PowerPC architectures: PowerPC-Opts. (line 6) 19308 * PowerPC directives: PowerPC-Pseudo. (line 6) 19309 * PowerPC options: PowerPC-Opts. (line 6) 19310 * PowerPC support: PPC-Dependent. (line 6) 19311 * precedence of operators: Infix Ops. (line 11) 19312 * precision, floating point: Flonums. (line 6) 19313 * prefix operators: Prefix Ops. (line 6) 19314 * prefixes, i386: i386-Prefixes. (line 6) 19315 * preprocessing: Preprocessing. (line 6) 19316 * preprocessing, turning on and off: Preprocessing. (line 26) 19317 * previous directive: Previous. (line 6) 19318 * primary attributes, COFF symbols: COFF Symbols. (line 13) 19319 * print directive: Print. (line 6) 19320 * proc directive, SPARC: Sparc-Directives. (line 25) 19321 * profiler directive, MSP 430: MSP430 Directives. (line 22) 19322 * profiling capability for MSP 430: MSP430 Profiling Capability. 19323 (line 6) 19324 * protected directive: Protected. (line 6) 19325 * pseudo-op .arch, CRIS: CRIS-Pseudos. (line 45) 19326 * pseudo-op .dword, CRIS: CRIS-Pseudos. (line 12) 19327 * pseudo-op .syntax, CRIS: CRIS-Pseudos. (line 17) 19328 * pseudo-op BSPEC, MMIX: MMIX-Pseudos. (line 131) 19329 * pseudo-op BYTE, MMIX: MMIX-Pseudos. (line 97) 19330 * pseudo-op ESPEC, MMIX: MMIX-Pseudos. (line 131) 19331 * pseudo-op GREG, MMIX: MMIX-Pseudos. (line 50) 19332 * pseudo-op IS, MMIX: MMIX-Pseudos. (line 42) 19333 * pseudo-op LOC, MMIX: MMIX-Pseudos. (line 7) 19334 * pseudo-op LOCAL, MMIX: MMIX-Pseudos. (line 28) 19335 * pseudo-op OCTA, MMIX: MMIX-Pseudos. (line 108) 19336 * pseudo-op PREFIX, MMIX: MMIX-Pseudos. (line 120) 19337 * pseudo-op TETRA, MMIX: MMIX-Pseudos. (line 108) 19338 * pseudo-op WYDE, MMIX: MMIX-Pseudos. (line 108) 19339 * pseudo-opcodes, M680x0: M68K-Branch. (line 6) 19340 * pseudo-opcodes, M68HC11: M68HC11-Branch. (line 6) 19341 * pseudo-ops for branch, VAX: VAX-branch. (line 6) 19342 * pseudo-ops, CRIS: CRIS-Pseudos. (line 6) 19343 * pseudo-ops, machine independent: Pseudo Ops. (line 6) 19344 * pseudo-ops, MMIX: MMIX-Pseudos. (line 6) 19345 * psize directive: Psize. (line 6) 19346 * PSR bits: IA-64-Bits. (line 6) 19347 * pstring directive, TIC54X: TIC54X-Directives. (line 209) 19348 * psw register, V850: V850-Regs. (line 116) 19349 * purgem directive: Purgem. (line 6) 19350 * purpose of GNU assembler: GNU Assembler. (line 12) 19351 * pushsection directive: PushSection. (line 6) 19352 * quad directive: Quad. (line 6) 19353 * quad directive, i386: i386-Float. (line 21) 19354 * quad directive, x86-64: i386-Float. (line 21) 19355 * real-mode code, i386: i386-16bit. (line 6) 19356 * ref directive, TIC54X: TIC54X-Directives. (line 103) 19357 * register directive, SPARC: Sparc-Directives. (line 29) 19358 * register names, Alpha: Alpha-Regs. (line 6) 19359 * register names, ARC: ARC-Regs. (line 6) 19360 * register names, ARM: ARM-Regs. (line 6) 19361 * register names, AVR: AVR-Regs. (line 6) 19362 * register names, CRIS: CRIS-Regs. (line 6) 19363 * register names, H8/300: H8/300-Regs. (line 6) 19364 * register names, IA-64: IA-64-Regs. (line 6) 19365 * register names, MMIX: MMIX-Regs. (line 6) 19366 * register names, MSP 430: MSP430-Regs. (line 6) 19367 * register names, Sparc: Sparc-Regs. (line 6) 19368 * register names, V850: V850-Regs. (line 6) 19369 * register names, VAX: VAX-operands. (line 17) 19370 * register names, Xtensa: Xtensa Registers. (line 6) 19371 * register names, Z80: Z80-Regs. (line 6) 19372 * register operands, i386: i386-Syntax. (line 15) 19373 * register operands, x86-64: i386-Syntax. (line 15) 19374 * registers, D10V: D10V-Regs. (line 6) 19375 * registers, D30V: D30V-Regs. (line 6) 19376 * registers, i386: i386-Regs. (line 6) 19377 * registers, SH: SH-Regs. (line 6) 19378 * registers, SH64: SH64-Regs. (line 6) 19379 * registers, TIC54X memory-mapped: TIC54X-MMRegs. (line 6) 19380 * registers, x86-64: i386-Regs. (line 6) 19381 * registers, Z8000: Z8000-Regs. (line 6) 19382 * relaxation: Xtensa Relaxation. (line 6) 19383 * relaxation of ADDI instructions: Xtensa Immediate Relaxation. 19384 (line 43) 19385 * relaxation of branch instructions: Xtensa Branch Relaxation. 19386 (line 6) 19387 * relaxation of call instructions: Xtensa Call Relaxation. 19388 (line 6) 19389 * relaxation of immediate fields: Xtensa Immediate Relaxation. 19390 (line 6) 19391 * relaxation of L16SI instructions: Xtensa Immediate Relaxation. 19392 (line 23) 19393 * relaxation of L16UI instructions: Xtensa Immediate Relaxation. 19394 (line 23) 19395 * relaxation of L32I instructions: Xtensa Immediate Relaxation. 19396 (line 23) 19397 * relaxation of L8UI instructions: Xtensa Immediate Relaxation. 19398 (line 23) 19399 * relaxation of MOVI instructions: Xtensa Immediate Relaxation. 19400 (line 12) 19401 * reloc directive: Reloc. (line 6) 19402 * relocation: Sections. (line 6) 19403 * relocation example: Ld Sections. (line 40) 19404 * relocations, Alpha: Alpha-Relocs. (line 6) 19405 * relocations, Sparc: Sparc-Relocs. (line 6) 19406 * repeat prefixes, i386: i386-Prefixes. (line 44) 19407 * reporting bugs in assembler: Reporting Bugs. (line 6) 19408 * rept directive: Rept. (line 6) 19409 * req directive, ARM: ARM Directives. (line 13) 19410 * reserve directive, SPARC: Sparc-Directives. (line 39) 19411 * return instructions, i386: i386-Syntax. (line 38) 19412 * return instructions, x86-64: i386-Syntax. (line 38) 19413 * REX prefixes, i386: i386-Prefixes. (line 46) 19414 * rsect: Z8000 Directives. (line 52) 19415 * sblock directive, TIC54X: TIC54X-Directives. (line 183) 19416 * sbttl directive: Sbttl. (line 6) 19417 * schedule directive: Schedule Directive. (line 6) 19418 * scl directive: Scl. (line 6) 19419 * sdaoff pseudo-op, V850: V850 Opcodes. (line 65) 19420 * search path for .include: I. (line 6) 19421 * sect directive, MSP 430: MSP430 Directives. (line 18) 19422 * sect directive, TIC54X: TIC54X-Directives. (line 189) 19423 * section directive (COFF version): Section. (line 16) 19424 * section directive (ELF version): Section. (line 67) 19425 * section directive, V850: V850 Directives. (line 9) 19426 * section override prefixes, i386: i386-Prefixes. (line 23) 19427 * Section Stack <1>: SubSection. (line 6) 19428 * Section Stack <2>: Section. (line 62) 19429 * Section Stack <3>: PushSection. (line 6) 19430 * Section Stack <4>: PopSection. (line 6) 19431 * Section Stack: Previous. (line 6) 19432 * section-relative addressing: Secs Background. (line 68) 19433 * sections: Sections. (line 6) 19434 * sections in messages, internal: As Sections. (line 6) 19435 * sections, i386: i386-Syntax. (line 44) 19436 * sections, named: Ld Sections. (line 8) 19437 * sections, x86-64: i386-Syntax. (line 44) 19438 * seg directive, SPARC: Sparc-Directives. (line 44) 19439 * segm: Z8000 Directives. (line 10) 19440 * set directive: Set. (line 6) 19441 * set directive, TIC54X: TIC54X-Directives. (line 192) 19442 * SH addressing modes: SH-Addressing. (line 6) 19443 * SH floating point (IEEE): SH Floating Point. (line 6) 19444 * SH line comment character: SH-Chars. (line 6) 19445 * SH line separator: SH-Chars. (line 8) 19446 * SH machine directives: SH Directives. (line 6) 19447 * SH opcode summary: SH Opcodes. (line 6) 19448 * SH options: SH Options. (line 6) 19449 * SH registers: SH-Regs. (line 6) 19450 * SH support: SH-Dependent. (line 6) 19451 * SH64 ABI options: SH64 Options. (line 29) 19452 * SH64 addressing modes: SH64-Addressing. (line 6) 19453 * SH64 ISA options: SH64 Options. (line 6) 19454 * SH64 line comment character: SH64-Chars. (line 6) 19455 * SH64 line separator: SH64-Chars. (line 8) 19456 * SH64 machine directives: SH64 Directives. (line 9) 19457 * SH64 opcode summary: SH64 Opcodes. (line 6) 19458 * SH64 options: SH64 Options. (line 6) 19459 * SH64 registers: SH64-Regs. (line 6) 19460 * SH64 support: SH64-Dependent. (line 6) 19461 * shigh directive, M32R: M32R-Directives. (line 26) 19462 * short directive: Short. (line 6) 19463 * short directive, ARC: ARC Directives. (line 171) 19464 * short directive, TIC54X: TIC54X-Directives. (line 111) 19465 * SIMD, i386: i386-SIMD. (line 6) 19466 * SIMD, x86-64: i386-SIMD. (line 6) 19467 * single character constant: Chars. (line 6) 19468 * single directive: Single. (line 6) 19469 * single directive, i386: i386-Float. (line 14) 19470 * single directive, x86-64: i386-Float. (line 14) 19471 * single quote, Z80: Z80-Chars. (line 13) 19472 * sixteen bit integers: hword. (line 6) 19473 * sixteen byte integer: Octa. (line 6) 19474 * size directive (COFF version): Size. (line 11) 19475 * size directive (ELF version): Size. (line 19) 19476 * size modifiers, D10V: D10V-Size. (line 6) 19477 * size modifiers, D30V: D30V-Size. (line 6) 19478 * size modifiers, M680x0: M68K-Syntax. (line 8) 19479 * size prefixes, i386: i386-Prefixes. (line 27) 19480 * size suffixes, H8/300: H8/300 Opcodes. (line 163) 19481 * size, translations, Sparc: Sparc-Size-Translations. 19482 (line 6) 19483 * sizes operands, i386: i386-Syntax. (line 29) 19484 * sizes operands, x86-64: i386-Syntax. (line 29) 19485 * skip directive: Skip. (line 6) 19486 * skip directive, M680x0: M68K-Directives. (line 19) 19487 * skip directive, SPARC: Sparc-Directives. (line 48) 19488 * sleb128 directive: Sleb128. (line 6) 19489 * small objects, MIPS ECOFF: MIPS Object. (line 11) 19490 * SmartMIPS instruction generation override: MIPS ASE instruction generation overrides. 19491 (line 11) 19492 * SOM symbol attributes: SOM Symbols. (line 6) 19493 * source program: Input Files. (line 6) 19494 * source, destination operands; i386: i386-Syntax. (line 22) 19495 * source, destination operands; x86-64: i386-Syntax. (line 22) 19496 * sp register: Xtensa Registers. (line 6) 19497 * sp register, V850: V850-Regs. (line 14) 19498 * space directive: Space. (line 6) 19499 * space directive, TIC54X: TIC54X-Directives. (line 197) 19500 * space used, maximum for assembly: statistics. (line 6) 19501 * SPARC architectures: Sparc-Opts. (line 6) 19502 * Sparc constants: Sparc-Constants. (line 6) 19503 * SPARC data alignment: Sparc-Aligned-Data. (line 6) 19504 * SPARC floating point (IEEE): Sparc-Float. (line 6) 19505 * Sparc line comment character: Sparc-Chars. (line 6) 19506 * Sparc line separator: Sparc-Chars. (line 8) 19507 * SPARC machine directives: Sparc-Directives. (line 6) 19508 * SPARC options: Sparc-Opts. (line 6) 19509 * Sparc registers: Sparc-Regs. (line 6) 19510 * Sparc relocations: Sparc-Relocs. (line 6) 19511 * Sparc size translations: Sparc-Size-Translations. 19512 (line 6) 19513 * SPARC support: Sparc-Dependent. (line 6) 19514 * SPARC syntax: Sparc-Aligned-Data. (line 21) 19515 * special characters, ARC: ARC-Chars. (line 6) 19516 * special characters, M680x0: M68K-Chars. (line 6) 19517 * special purpose registers, MSP 430: MSP430-Regs. (line 11) 19518 * sslist directive, TIC54X: TIC54X-Directives. (line 204) 19519 * ssnolist directive, TIC54X: TIC54X-Directives. (line 204) 19520 * stabd directive: Stab. (line 38) 19521 * stabn directive: Stab. (line 48) 19522 * stabs directive: Stab. (line 51) 19523 * stabX directives: Stab. (line 6) 19524 * standard assembler sections: Secs Background. (line 27) 19525 * standard input, as input file: Command Line. (line 10) 19526 * statement separator character: Statements. (line 6) 19527 * statement separator, Alpha: Alpha-Chars. (line 8) 19528 * statement separator, ARM: ARM-Chars. (line 10) 19529 * statement separator, AVR: AVR-Chars. (line 10) 19530 * statement separator, H8/300: H8/300-Chars. (line 8) 19531 * statement separator, IA-64: IA-64-Chars. (line 8) 19532 * statement separator, SH: SH-Chars. (line 8) 19533 * statement separator, SH64: SH64-Chars. (line 8) 19534 * statement separator, Sparc: Sparc-Chars. (line 8) 19535 * statement separator, Z8000: Z8000-Chars. (line 8) 19536 * statements, structure of: Statements. (line 6) 19537 * statistics, about assembly: statistics. (line 6) 19538 * stopping the assembly: Abort. (line 6) 19539 * string constants: Strings. (line 6) 19540 * string directive: String. (line 8) 19541 * string directive on HPPA: HPPA Directives. (line 137) 19542 * string directive, TIC54X: TIC54X-Directives. (line 209) 19543 * string literals: Ascii. (line 6) 19544 * string, copying to object file: String. (line 8) 19545 * string16 directive: String. (line 8) 19546 * string16, copying to object file: String. (line 8) 19547 * string32 directive: String. (line 8) 19548 * string32, copying to object file: String. (line 8) 19549 * string64 directive: String. (line 8) 19550 * string64, copying to object file: String. (line 8) 19551 * string8 directive: String. (line 8) 19552 * string8, copying to object file: String. (line 8) 19553 * struct directive: Struct. (line 6) 19554 * struct directive, TIC54X: TIC54X-Directives. (line 217) 19555 * structure debugging, COFF: Tag. (line 6) 19556 * sub-instruction ordering, D10V: D10V-Chars. (line 6) 19557 * sub-instruction ordering, D30V: D30V-Chars. (line 6) 19558 * sub-instructions, D10V: D10V-Subs. (line 6) 19559 * sub-instructions, D30V: D30V-Subs. (line 6) 19560 * subexpressions: Arguments. (line 24) 19561 * subsection directive: SubSection. (line 6) 19562 * subsym builtins, TIC54X: TIC54X-Macros. (line 16) 19563 * subtitles for listings: Sbttl. (line 6) 19564 * subtraction, permitted arguments: Infix Ops. (line 49) 19565 * summary of options: Overview. (line 6) 19566 * support: HPPA-Dependent. (line 6) 19567 * supporting files, including: Include. (line 6) 19568 * suppressing warnings: W. (line 11) 19569 * sval: Z8000 Directives. (line 33) 19570 * symbol attributes: Symbol Attributes. (line 6) 19571 * symbol attributes, a.out: a.out Symbols. (line 6) 19572 * symbol attributes, COFF: COFF Symbols. (line 6) 19573 * symbol attributes, SOM: SOM Symbols. (line 6) 19574 * symbol descriptor, COFF: Desc. (line 6) 19575 * symbol modifiers <1>: M68HC11-Modifiers. (line 12) 19576 * symbol modifiers <2>: M32C-Modifiers. (line 11) 19577 * symbol modifiers: AVR-Modifiers. (line 12) 19578 * symbol names: Symbol Names. (line 6) 19579 * symbol names, $ in <1>: SH64-Chars. (line 10) 19580 * symbol names, $ in <2>: SH-Chars. (line 10) 19581 * symbol names, $ in <3>: D30V-Chars. (line 63) 19582 * symbol names, $ in: D10V-Chars. (line 46) 19583 * symbol names, local: Symbol Names. (line 22) 19584 * symbol names, temporary: Symbol Names. (line 35) 19585 * symbol storage class (COFF): Scl. (line 6) 19586 * symbol type: Symbol Type. (line 6) 19587 * symbol type, COFF: Type. (line 11) 19588 * symbol type, ELF: Type. (line 22) 19589 * symbol value: Symbol Value. (line 6) 19590 * symbol value, setting: Set. (line 6) 19591 * symbol values, assigning: Setting Symbols. (line 6) 19592 * symbol versioning: Symver. (line 6) 19593 * symbol, common: Comm. (line 6) 19594 * symbol, making visible to linker: Global. (line 6) 19595 * symbolic debuggers, information for: Stab. (line 6) 19596 * symbols: Symbols. (line 6) 19597 * Symbols in position-independent code, CRIS: CRIS-Pic. (line 6) 19598 * symbols with uppercase, VAX/VMS: VAX-Opts. (line 42) 19599 * symbols, assigning values to: Equ. (line 6) 19600 * Symbols, built-in, CRIS: CRIS-Symbols. (line 6) 19601 * Symbols, CRIS, built-in: CRIS-Symbols. (line 6) 19602 * symbols, local common: Lcomm. (line 6) 19603 * symver directive: Symver. (line 6) 19604 * syntax compatibility, i386: i386-Syntax. (line 6) 19605 * syntax compatibility, x86-64: i386-Syntax. (line 6) 19606 * syntax, AVR: AVR-Modifiers. (line 6) 19607 * syntax, BFIN: BFIN Syntax. (line 6) 19608 * syntax, D10V: D10V-Syntax. (line 6) 19609 * syntax, D30V: D30V-Syntax. (line 6) 19610 * syntax, M32C: M32C-Modifiers. (line 6) 19611 * syntax, M680x0: M68K-Syntax. (line 8) 19612 * syntax, M68HC11 <1>: M68HC11-Modifiers. (line 6) 19613 * syntax, M68HC11: M68HC11-Syntax. (line 6) 19614 * syntax, machine-independent: Syntax. (line 6) 19615 * syntax, SPARC: Sparc-Aligned-Data. (line 21) 19616 * syntax, Xtensa assembler: Xtensa Syntax. (line 6) 19617 * sysproc directive, i960: Directives-i960. (line 37) 19618 * tab (\t): Strings. (line 27) 19619 * tab directive, TIC54X: TIC54X-Directives. (line 248) 19620 * tag directive: Tag. (line 6) 19621 * tag directive, TIC54X: TIC54X-Directives. (line 217) 19622 * tdaoff pseudo-op, V850: V850 Opcodes. (line 81) 19623 * temporary symbol names: Symbol Names. (line 35) 19624 * text and data sections, joining: R. (line 6) 19625 * text directive: Text. (line 6) 19626 * text section: Ld Sections. (line 9) 19627 * tfloat directive, i386: i386-Float. (line 14) 19628 * tfloat directive, x86-64: i386-Float. (line 14) 19629 * thumb directive, ARM: ARM Directives. (line 57) 19630 * Thumb support: ARM-Dependent. (line 6) 19631 * thumb_func directive, ARM: ARM Directives. (line 67) 19632 * thumb_set directive, ARM: ARM Directives. (line 78) 19633 * TIC54X builtin math functions: TIC54X-Builtins. (line 6) 19634 * TIC54X machine directives: TIC54X-Directives. (line 6) 19635 * TIC54X memory-mapped registers: TIC54X-MMRegs. (line 6) 19636 * TIC54X options: TIC54X-Opts. (line 6) 19637 * TIC54X subsym builtins: TIC54X-Macros. (line 16) 19638 * TIC54X support: TIC54X-Dependent. (line 6) 19639 * TIC54X-specific macros: TIC54X-Macros. (line 6) 19640 * time, total for assembly: statistics. (line 6) 19641 * title directive: Title. (line 6) 19642 * tp register, V850: V850-Regs. (line 20) 19643 * transform directive: Transform Directive. (line 6) 19644 * trusted compiler: f. (line 6) 19645 * turning preprocessing on and off: Preprocessing. (line 26) 19646 * type directive (COFF version): Type. (line 11) 19647 * type directive (ELF version): Type. (line 22) 19648 * type of a symbol: Symbol Type. (line 6) 19649 * ualong directive, SH: SH Directives. (line 6) 19650 * uaword directive, SH: SH Directives. (line 6) 19651 * ubyte directive, TIC54X: TIC54X-Directives. (line 36) 19652 * uchar directive, TIC54X: TIC54X-Directives. (line 36) 19653 * uhalf directive, TIC54X: TIC54X-Directives. (line 111) 19654 * uint directive, TIC54X: TIC54X-Directives. (line 111) 19655 * uleb128 directive: Uleb128. (line 6) 19656 * ulong directive, TIC54X: TIC54X-Directives. (line 135) 19657 * undefined section: Ld Sections. (line 36) 19658 * union directive, TIC54X: TIC54X-Directives. (line 251) 19659 * unreq directive, ARM: ARM Directives. (line 18) 19660 * unsegm: Z8000 Directives. (line 14) 19661 * usect directive, TIC54X: TIC54X-Directives. (line 263) 19662 * ushort directive, TIC54X: TIC54X-Directives. (line 111) 19663 * uword directive, TIC54X: TIC54X-Directives. (line 111) 19664 * V850 command line options: V850 Options. (line 9) 19665 * V850 floating point (IEEE): V850 Floating Point. (line 6) 19666 * V850 line comment character: V850-Chars. (line 6) 19667 * V850 machine directives: V850 Directives. (line 6) 19668 * V850 opcodes: V850 Opcodes. (line 6) 19669 * V850 options (none): V850 Options. (line 6) 19670 * V850 register names: V850-Regs. (line 6) 19671 * V850 support: V850-Dependent. (line 6) 19672 * val directive: Val. (line 6) 19673 * value attribute, COFF: Val. (line 6) 19674 * value of a symbol: Symbol Value. (line 6) 19675 * var directive, TIC54X: TIC54X-Directives. (line 273) 19676 * VAX bitfields not supported: VAX-no. (line 6) 19677 * VAX branch improvement: VAX-branch. (line 6) 19678 * VAX command-line options ignored: VAX-Opts. (line 6) 19679 * VAX displacement sizing character: VAX-operands. (line 12) 19680 * VAX floating point: VAX-float. (line 6) 19681 * VAX immediate character: VAX-operands. (line 6) 19682 * VAX indirect character: VAX-operands. (line 9) 19683 * VAX machine directives: VAX-directives. (line 6) 19684 * VAX opcode mnemonics: VAX-opcodes. (line 6) 19685 * VAX operand notation: VAX-operands. (line 6) 19686 * VAX register names: VAX-operands. (line 17) 19687 * VAX support: Vax-Dependent. (line 6) 19688 * Vax-11 C compatibility: VAX-Opts. (line 42) 19689 * VAX/VMS options: VAX-Opts. (line 42) 19690 * version directive: Version. (line 6) 19691 * version directive, TIC54X: TIC54X-Directives. (line 277) 19692 * version of assembler: v. (line 6) 19693 * versions of symbols: Symver. (line 6) 19694 * visibility <1>: Protected. (line 6) 19695 * visibility <2>: Internal. (line 6) 19696 * visibility: Hidden. (line 6) 19697 * VMS (VAX) options: VAX-Opts. (line 42) 19698 * vtable_entry directive: VTableEntry. (line 6) 19699 * vtable_inherit directive: VTableInherit. (line 6) 19700 * warning directive: Warning. (line 6) 19701 * warning for altered difference tables: K. (line 6) 19702 * warning messages: Errors. (line 6) 19703 * warnings, causing error: W. (line 16) 19704 * warnings, M32R: M32R-Warnings. (line 6) 19705 * warnings, suppressing: W. (line 11) 19706 * warnings, switching on: W. (line 19) 19707 * weak directive: Weak. (line 6) 19708 * weakref directive: Weakref. (line 6) 19709 * whitespace: Whitespace. (line 6) 19710 * whitespace, removed by preprocessor: Preprocessing. (line 7) 19711 * wide floating point directives, VAX: VAX-directives. (line 10) 19712 * width directive, TIC54X: TIC54X-Directives. (line 127) 19713 * Width of continuation lines of disassembly output: listing. (line 21) 19714 * Width of first line disassembly output: listing. (line 16) 19715 * Width of source line output: listing. (line 28) 19716 * wmsg directive, TIC54X: TIC54X-Directives. (line 77) 19717 * word directive: Word. (line 6) 19718 * word directive, ARC: ARC Directives. (line 174) 19719 * word directive, H8/300: H8/300 Directives. (line 6) 19720 * word directive, i386: i386-Float. (line 21) 19721 * word directive, SPARC: Sparc-Directives. (line 51) 19722 * word directive, TIC54X: TIC54X-Directives. (line 111) 19723 * word directive, x86-64: i386-Float. (line 21) 19724 * writing patterns in memory: Fill. (line 6) 19725 * wval: Z8000 Directives. (line 24) 19726 * x86 machine directives: i386-Directives. (line 6) 19727 * x86-64 arch directive: i386-Arch. (line 6) 19728 * x86-64 att_syntax pseudo op: i386-Syntax. (line 6) 19729 * x86-64 conversion instructions: i386-Mnemonics. (line 32) 19730 * x86-64 floating point: i386-Float. (line 6) 19731 * x86-64 immediate operands: i386-Syntax. (line 15) 19732 * x86-64 instruction naming: i386-Mnemonics. (line 6) 19733 * x86-64 intel_syntax pseudo op: i386-Syntax. (line 6) 19734 * x86-64 jump optimization: i386-Jumps. (line 6) 19735 * x86-64 jump, call, return: i386-Syntax. (line 38) 19736 * x86-64 jump/call operands: i386-Syntax. (line 15) 19737 * x86-64 memory references: i386-Memory. (line 6) 19738 * x86-64 options: i386-Options. (line 6) 19739 * x86-64 register operands: i386-Syntax. (line 15) 19740 * x86-64 registers: i386-Regs. (line 6) 19741 * x86-64 sections: i386-Syntax. (line 44) 19742 * x86-64 size suffixes: i386-Syntax. (line 29) 19743 * x86-64 source, destination operands: i386-Syntax. (line 22) 19744 * x86-64 support: i386-Dependent. (line 6) 19745 * x86-64 syntax compatibility: i386-Syntax. (line 6) 19746 * xfloat directive, TIC54X: TIC54X-Directives. (line 64) 19747 * xlong directive, TIC54X: TIC54X-Directives. (line 135) 19748 * Xtensa architecture: Xtensa-Dependent. (line 6) 19749 * Xtensa assembler syntax: Xtensa Syntax. (line 6) 19750 * Xtensa directives: Xtensa Directives. (line 6) 19751 * Xtensa opcode names: Xtensa Opcodes. (line 6) 19752 * Xtensa register names: Xtensa Registers. (line 6) 19753 * xword directive, SPARC: Sparc-Directives. (line 55) 19754 * Z80 $: Z80-Chars. (line 8) 19755 * Z80 ': Z80-Chars. (line 13) 19756 * Z80 floating point: Z80 Floating Point. (line 6) 19757 * Z80 line comment character: Z80-Chars. (line 6) 19758 * Z80 options: Z80 Options. (line 6) 19759 * Z80 registers: Z80-Regs. (line 6) 19760 * Z80 support: Z80-Dependent. (line 6) 19761 * Z80 Syntax: Z80 Options. (line 47) 19762 * Z80, \: Z80-Chars. (line 11) 19763 * Z80, case sensitivity: Z80-Case. (line 6) 19764 * Z80-only directives: Z80 Directives. (line 9) 19765 * Z800 addressing modes: Z8000-Addressing. (line 6) 19766 * Z8000 directives: Z8000 Directives. (line 6) 19767 * Z8000 line comment character: Z8000-Chars. (line 6) 19768 * Z8000 line separator: Z8000-Chars. (line 8) 19769 * Z8000 opcode summary: Z8000 Opcodes. (line 6) 19770 * Z8000 options: Z8000 Options. (line 6) 19771 * Z8000 registers: Z8000-Regs. (line 6) 19772 * Z8000 support: Z8000-Dependent. (line 6) 19773 * zdaoff pseudo-op, V850: V850 Opcodes. (line 99) 19774 * zero register, V850: V850-Regs. (line 7) 19775 * zero-terminated strings: Asciz. (line 6) 19776 19777 19778 19779 Tag Table: 19780 Node: Top846 19781 Node: Overview1832 19782 Node: Manual29723 19783 Node: GNU Assembler30667 19784 Node: Object Formats31838 19785 Node: Command Line32290 19786 Node: Input Files33377 19787 Node: Object35358 19788 Node: Errors36254 19789 Node: Invoking37449 19790 Node: a39404 19791 Node: alternate41315 19792 Node: D41487 19793 Node: f41720 19794 Node: I42228 19795 Node: K42772 19796 Node: L43076 19797 Node: listing43815 19798 Node: M45474 19799 Node: MD49875 19800 Node: o50301 19801 Node: R50756 19802 Node: statistics51786 19803 Node: traditional-format52193 19804 Node: v52666 19805 Node: W52941 19806 Node: Z53848 19807 Node: Syntax54370 19808 Node: Preprocessing54961 19809 Node: Whitespace56524 19810 Node: Comments56920 19811 Node: Symbol Intro59073 19812 Node: Statements59763 19813 Node: Constants61684 19814 Node: Characters62315 19815 Node: Strings62817 19816 Node: Chars64983 19817 Node: Numbers65737 19818 Node: Integers66277 19819 Node: Bignums66933 19820 Node: Flonums67289 19821 Node: Sections69036 19822 Node: Secs Background69414 19823 Node: Ld Sections74453 19824 Node: As Sections76837 19825 Node: Sub-Sections77747 19826 Node: bss80892 19827 Node: Symbols81842 19828 Node: Labels82490 19829 Node: Setting Symbols83221 19830 Node: Symbol Names83717 19831 Node: Dot88780 19832 Node: Symbol Attributes89227 19833 Node: Symbol Value89964 19834 Node: Symbol Type91009 19835 Node: a.out Symbols91397 19836 Node: Symbol Desc91659 19837 Node: Symbol Other91954 19838 Node: COFF Symbols92123 19839 Node: SOM Symbols92796 19840 Node: Expressions93238 19841 Node: Empty Exprs93987 19842 Node: Integer Exprs94334 19843 Node: Arguments94729 19844 Node: Operators95835 19845 Node: Prefix Ops96170 19846 Node: Infix Ops96498 19847 Node: Pseudo Ops98888 19848 Node: Abort104294 19849 Node: ABORT (COFF)104706 19850 Node: Align104914 19851 Node: Ascii107196 19852 Node: Asciz107505 19853 Node: Balign107750 19854 Node: Byte109613 19855 Node: Comm109851 19856 Node: CFI directives111225 19857 Node: LNS directives116420 19858 Node: Data118495 19859 Node: Def118822 19860 Node: Desc119054 19861 Node: Dim119554 19862 Node: Double119811 19863 Node: Eject120149 19864 Node: Else120324 19865 Node: Elseif120624 19866 Node: End120918 19867 Node: Endef121133 19868 Node: Endfunc121310 19869 Node: Endif121485 19870 Node: Equ121746 19871 Node: Equiv122260 19872 Node: Eqv122816 19873 Node: Err123180 19874 Node: Error123491 19875 Node: Exitm123936 19876 Node: Extern124105 19877 Node: Fail124366 19878 Node: File124811 19879 Node: Fill125288 19880 Node: Float126252 19881 Node: Func126594 19882 Node: Global127184 19883 Node: Gnu_attribute127941 19884 Node: Hidden128166 19885 Node: hword128752 19886 Node: Ident129080 19887 Node: If129654 19888 Node: Incbin132713 19889 Node: Include133408 19890 Node: Int133959 19891 Node: Internal134340 19892 Node: Irp134988 19893 Node: Irpc135867 19894 Node: Lcomm136784 19895 Node: Lflags137532 19896 Node: Line137726 19897 Node: Linkonce138645 19898 Node: Ln139874 19899 Node: MRI140035 19900 Node: List140373 19901 Node: Long140981 19902 Node: Macro141168 19903 Node: Altmacro147090 19904 Node: Noaltmacro148421 19905 Node: Nolist148590 19906 Node: Octa149020 19907 Node: Org149354 19908 Node: P2align150637 19909 Node: Previous152565 19910 Node: PopSection153978 19911 Node: Print154486 19912 Node: Protected154715 19913 Node: Psize155362 19914 Node: Purgem156046 19915 Node: PushSection156267 19916 Node: Quad157010 19917 Node: Reloc157466 19918 Node: Rept158227 19919 Node: Sbttl158641 19920 Node: Scl159006 19921 Node: Section159347 19922 Node: Set164484 19923 Node: Short165121 19924 Node: Single165442 19925 Node: Size165787 19926 Node: Sleb128166459 19927 Node: Skip166783 19928 Node: Space167107 19929 Node: Stab167748 19930 Node: String169752 19931 Node: Struct170746 19932 Node: SubSection171471 19933 Node: Symver172034 19934 Node: Tag174427 19935 Node: Text174809 19936 Node: Title175130 19937 Node: Type175511 19938 Node: Uleb128177234 19939 Node: Val177558 19940 Node: Version177808 19941 Node: VTableEntry178083 19942 Node: VTableInherit178373 19943 Node: Warning178823 19944 Node: Weak179057 19945 Node: Weakref179726 19946 Node: Word180691 19947 Node: Deprecated182537 19948 Node: Object Attributes182772 19949 Node: GNU Object Attributes184492 19950 Node: Defining New Object Attributes187045 19951 Node: Machine Dependencies187842 19952 Node: Alpha-Dependent190726 19953 Node: Alpha Notes191140 19954 Node: Alpha Options191421 19955 Node: Alpha Syntax193619 19956 Node: Alpha-Chars194088 19957 Node: Alpha-Regs194319 19958 Node: Alpha-Relocs194706 19959 Node: Alpha Floating Point200964 19960 Node: Alpha Directives201186 19961 Node: Alpha Opcodes206709 19962 Node: ARC-Dependent207004 19963 Node: ARC Options207387 19964 Node: ARC Syntax208456 19965 Node: ARC-Chars208688 19966 Node: ARC-Regs208820 19967 Node: ARC Floating Point208944 19968 Node: ARC Directives209255 19969 Node: ARC Opcodes215227 19970 Node: ARM-Dependent215453 19971 Node: ARM Options215918 19972 Node: ARM Syntax222051 19973 Node: ARM-Chars222320 19974 Node: ARM-Regs222844 19975 Node: ARM Floating Point223053 19976 Node: ARM-Relocations223252 19977 Node: ARM Directives224217 19978 Ref: arm_fnstart228232 19979 Ref: arm_fnend228307 19980 Ref: arm_save229324 19981 Ref: arm_pad230654 19982 Ref: arm_movsp230860 19983 Ref: arm_setfp231038 19984 Node: ARM Opcodes232589 19985 Node: ARM Mapping Symbols234677 19986 Node: ARM Unwinding Tutorial235487 19987 Node: AVR-Dependent241689 19988 Node: AVR Options241975 19989 Node: AVR Syntax244806 19990 Node: AVR-Chars245093 19991 Node: AVR-Regs245499 19992 Node: AVR-Modifiers246078 19993 Node: AVR Opcodes248138 19994 Node: BFIN-Dependent253384 19995 Node: BFIN Syntax253638 19996 Node: BFIN Directives259334 19997 Node: CR16-Dependent259741 19998 Node: CR16 Operand Qualifiers259985 19999 Node: CRIS-Dependent261751 20000 Node: CRIS-Opts262097 20001 Ref: march-option263715 20002 Node: CRIS-Expand265532 20003 Node: CRIS-Symbols266715 20004 Node: CRIS-Syntax267884 20005 Node: CRIS-Chars268220 20006 Node: CRIS-Pic268771 20007 Ref: crispic268967 20008 Node: CRIS-Regs272507 20009 Node: CRIS-Pseudos272924 20010 Ref: crisnous273700 20011 Node: D10V-Dependent274982 20012 Node: D10V-Opts275333 20013 Node: D10V-Syntax276296 20014 Node: D10V-Size276825 20015 Node: D10V-Subs277798 20016 Node: D10V-Chars278833 20017 Node: D10V-Regs280437 20018 Node: D10V-Addressing281482 20019 Node: D10V-Word282168 20020 Node: D10V-Float282683 20021 Node: D10V-Opcodes282994 20022 Node: D30V-Dependent283387 20023 Node: D30V-Opts283740 20024 Node: D30V-Syntax284415 20025 Node: D30V-Size284947 20026 Node: D30V-Subs285918 20027 Node: D30V-Chars286953 20028 Node: D30V-Guarded289251 20029 Node: D30V-Regs289931 20030 Node: D30V-Addressing291070 20031 Node: D30V-Float291738 20032 Node: D30V-Opcodes292049 20033 Node: H8/300-Dependent292442 20034 Node: H8/300 Options292854 20035 Node: H8/300 Syntax293121 20036 Node: H8/300-Chars293422 20037 Node: H8/300-Regs293721 20038 Node: H8/300-Addressing294640 20039 Node: H8/300 Floating Point295681 20040 Node: H8/300 Directives296008 20041 Node: H8/300 Opcodes297136 20042 Node: HPPA-Dependent305458 20043 Node: HPPA Notes305893 20044 Node: HPPA Options306651 20045 Node: HPPA Syntax306846 20046 Node: HPPA Floating Point308116 20047 Node: HPPA Directives308322 20048 Node: HPPA Opcodes317008 20049 Node: ESA/390-Dependent317267 20050 Node: ESA/390 Notes317727 20051 Node: ESA/390 Options318518 20052 Node: ESA/390 Syntax318728 20053 Node: ESA/390 Floating Point320901 20054 Node: ESA/390 Directives321180 20055 Node: ESA/390 Opcodes324469 20056 Node: i386-Dependent324731 20057 Node: i386-Options325855 20058 Node: i386-Directives329557 20059 Node: i386-Syntax330295 20060 Node: i386-Mnemonics332728 20061 Node: i386-Regs335796 20062 Node: i386-Prefixes337841 20063 Node: i386-Memory340601 20064 Node: i386-Jumps343538 20065 Node: i386-Float344659 20066 Node: i386-SIMD346490 20067 Node: i386-16bit347601 20068 Node: i386-Bugs349641 20069 Node: i386-Arch350395 20070 Node: i386-Notes352900 20071 Node: i860-Dependent353758 20072 Node: Notes-i860354154 20073 Node: Options-i860355059 20074 Node: Directives-i860356422 20075 Node: Opcodes for i860357491 20076 Node: i960-Dependent359658 20077 Node: Options-i960360061 20078 Node: Floating Point-i960363946 20079 Node: Directives-i960364214 20080 Node: Opcodes for i960366248 20081 Node: callj-i960366865 20082 Node: Compare-and-branch-i960367354 20083 Node: IA-64-Dependent369258 20084 Node: IA-64 Options369559 20085 Node: IA-64 Syntax372719 20086 Node: IA-64-Chars373082 20087 Node: IA-64-Regs373312 20088 Node: IA-64-Bits374238 20089 Node: IA-64 Opcodes374747 20090 Node: IP2K-Dependent375019 20091 Node: IP2K-Opts375247 20092 Node: M32C-Dependent375727 20093 Node: M32C-Opts376251 20094 Node: M32C-Modifiers376674 20095 Node: M32R-Dependent378461 20096 Node: M32R-Opts378782 20097 Node: M32R-Directives382949 20098 Node: M32R-Warnings386924 20099 Node: M68K-Dependent389930 20100 Node: M68K-Opts390397 20101 Node: M68K-Syntax397789 20102 Node: M68K-Moto-Syntax399629 20103 Node: M68K-Float402219 20104 Node: M68K-Directives402739 20105 Node: M68K-opcodes404067 20106 Node: M68K-Branch404293 20107 Node: M68K-Chars408491 20108 Node: M68HC11-Dependent408904 20109 Node: M68HC11-Opts409435 20110 Node: M68HC11-Syntax413256 20111 Node: M68HC11-Modifiers415470 20112 Node: M68HC11-Directives417298 20113 Node: M68HC11-Float418674 20114 Node: M68HC11-opcodes419202 20115 Node: M68HC11-Branch419384 20116 Node: MIPS-Dependent421833 20117 Node: MIPS Opts422993 20118 Node: MIPS Object432579 20119 Node: MIPS Stabs434145 20120 Node: MIPS symbol sizes434867 20121 Node: MIPS ISA436536 20122 Node: MIPS autoextend438010 20123 Node: MIPS insn438740 20124 Node: MIPS option stack439237 20125 Node: MIPS ASE instruction generation overrides440011 20126 Node: MIPS floating-point441825 20127 Node: MMIX-Dependent442711 20128 Node: MMIX-Opts443091 20129 Node: MMIX-Expand446695 20130 Node: MMIX-Syntax448010 20131 Ref: mmixsite448367 20132 Node: MMIX-Chars449208 20133 Node: MMIX-Symbols449862 20134 Node: MMIX-Regs451930 20135 Node: MMIX-Pseudos452955 20136 Ref: MMIX-loc453096 20137 Ref: MMIX-local454176 20138 Ref: MMIX-is454708 20139 Ref: MMIX-greg454979 20140 Ref: GREG-base455898 20141 Ref: MMIX-byte457215 20142 Ref: MMIX-constants457686 20143 Ref: MMIX-prefix458332 20144 Ref: MMIX-spec458706 20145 Node: MMIX-mmixal459040 20146 Node: MSP430-Dependent462538 20147 Node: MSP430 Options463004 20148 Node: MSP430 Syntax463290 20149 Node: MSP430-Macros463606 20150 Node: MSP430-Chars464337 20151 Node: MSP430-Regs464650 20152 Node: MSP430-Ext465210 20153 Node: MSP430 Floating Point467031 20154 Node: MSP430 Directives467255 20155 Node: MSP430 Opcodes468046 20156 Node: MSP430 Profiling Capability468441 20157 Node: PDP-11-Dependent470770 20158 Node: PDP-11-Options471159 20159 Node: PDP-11-Pseudos476230 20160 Node: PDP-11-Syntax476575 20161 Node: PDP-11-Mnemonics477327 20162 Node: PDP-11-Synthetic477629 20163 Node: PJ-Dependent477847 20164 Node: PJ Options478072 20165 Node: PPC-Dependent478349 20166 Node: PowerPC-Opts478636 20167 Node: PowerPC-Pseudo481155 20168 Node: SH-Dependent481754 20169 Node: SH Options482166 20170 Node: SH Syntax483174 20171 Node: SH-Chars483447 20172 Node: SH-Regs483741 20173 Node: SH-Addressing484355 20174 Node: SH Floating Point485264 20175 Node: SH Directives486358 20176 Node: SH Opcodes486728 20177 Node: SH64-Dependent491050 20178 Node: SH64 Options491413 20179 Node: SH64 Syntax493210 20180 Node: SH64-Chars493493 20181 Node: SH64-Regs493793 20182 Node: SH64-Addressing494889 20183 Node: SH64 Directives496072 20184 Node: SH64 Opcodes497182 20185 Node: Sparc-Dependent497898 20186 Node: Sparc-Opts498308 20187 Node: Sparc-Aligned-Data500565 20188 Node: Sparc-Syntax501397 20189 Node: Sparc-Chars501971 20190 Node: Sparc-Regs502204 20191 Node: Sparc-Constants507315 20192 Node: Sparc-Relocs512075 20193 Node: Sparc-Size-Translations516755 20194 Node: Sparc-Float518404 20195 Node: Sparc-Directives518599 20196 Node: TIC54X-Dependent520559 20197 Node: TIC54X-Opts521285 20198 Node: TIC54X-Block522328 20199 Node: TIC54X-Env522688 20200 Node: TIC54X-Constants523036 20201 Node: TIC54X-Subsyms523438 20202 Node: TIC54X-Locals525347 20203 Node: TIC54X-Builtins526091 20204 Node: TIC54X-Ext528562 20205 Node: TIC54X-Directives529133 20206 Node: TIC54X-Macros540035 20207 Node: TIC54X-MMRegs542146 20208 Node: Z80-Dependent542362 20209 Node: Z80 Options542750 20210 Node: Z80 Syntax544173 20211 Node: Z80-Chars544845 20212 Node: Z80-Regs545379 20213 Node: Z80-Case545731 20214 Node: Z80 Floating Point546176 20215 Node: Z80 Directives546370 20216 Node: Z80 Opcodes547995 20217 Node: Z8000-Dependent549339 20218 Node: Z8000 Options550300 20219 Node: Z8000 Syntax550517 20220 Node: Z8000-Chars550807 20221 Node: Z8000-Regs551040 20222 Node: Z8000-Addressing551830 20223 Node: Z8000 Directives552947 20224 Node: Z8000 Opcodes554556 20225 Node: Vax-Dependent564498 20226 Node: VAX-Opts565015 20227 Node: VAX-float568750 20228 Node: VAX-directives569382 20229 Node: VAX-opcodes570243 20230 Node: VAX-branch570632 20231 Node: VAX-operands573139 20232 Node: VAX-no573902 20233 Node: V850-Dependent574139 20234 Node: V850 Options574537 20235 Node: V850 Syntax576926 20236 Node: V850-Chars577166 20237 Node: V850-Regs577331 20238 Node: V850 Floating Point578899 20239 Node: V850 Directives579105 20240 Node: V850 Opcodes580248 20241 Node: Xtensa-Dependent586140 20242 Node: Xtensa Options586869 20243 Node: Xtensa Syntax589679 20244 Node: Xtensa Opcodes591568 20245 Node: Xtensa Registers593362 20246 Node: Xtensa Optimizations593995 20247 Node: Density Instructions594447 20248 Node: Xtensa Automatic Alignment595549 20249 Node: Xtensa Relaxation597996 20250 Node: Xtensa Branch Relaxation598904 20251 Node: Xtensa Call Relaxation600276 20252 Node: Xtensa Immediate Relaxation602062 20253 Node: Xtensa Directives604636 20254 Node: Schedule Directive606345 20255 Node: Longcalls Directive606685 20256 Node: Transform Directive607229 20257 Node: Literal Directive607971 20258 Ref: Literal Directive-Footnote-1611510 20259 Node: Literal Position Directive611652 20260 Node: Literal Prefix Directive613351 20261 Node: Absolute Literals Directive614249 20262 Node: Reporting Bugs615556 20263 Node: Bug Criteria616282 20264 Node: Bug Reporting617049 20265 Node: Acknowledgements623698 20266 Ref: Acknowledgements-Footnote-1628596 20267 Node: GNU Free Documentation License628622 20268 Node: AS Index648340 20269 20270 End Tag Table 20271