1 This is ../.././gas/doc/as.info, produced by makeinfo version 4.8 from 2 ../.././gas/doc/as.texinfo. 3 4 START-INFO-DIR-ENTRY 5 * As: (as). The GNU assembler. 6 * Gas: (as). The GNU assembler. 7 END-INFO-DIR-ENTRY 8 9 This file documents the GNU Assembler "as". 10 11 Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002 12 Free Software Foundation, Inc. 13 14 Permission is granted to copy, distribute and/or modify this document 15 under the terms of the GNU Free Documentation License, Version 1.1 or 16 any later version published by the Free Software Foundation; with no 17 Invariant Sections, with no Front-Cover Texts, and with no Back-Cover 18 Texts. A copy of the license is included in the section entitled "GNU 19 Free Documentation License". 20 21 22 File: as.info, Node: Top, Next: Overview, Up: (dir) 23 24 Using as 25 ******** 26 27 This file is a user guide to the GNU assembler `as' version 2.17. 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 * Machine Dependencies:: Machine Dependent Features 43 * Reporting Bugs:: Reporting Bugs 44 * Acknowledgements:: Who Did What 45 * GNU Free Documentation License:: GNU Free Documentation License 46 * Index:: Index 47 48 49 File: as.info, Node: Overview, Next: Invoking, Prev: Top, Up: Top 50 51 1 Overview 52 ********** 53 54 Here is a brief summary of how to invoke `as'. For details, *note 55 Command-Line Options: Invoking. 56 57 as [-a[cdhlns][=FILE]] [-alternate] [-D] 58 [-defsym SYM=VAL] [-f] [-g] [-gstabs] 59 [-gstabs+] [-gdwarf-2] [-help] [-I DIR] [-J] 60 [-K] [-L] [-listing-lhs-width=NUM] 61 [-listing-lhs-width2=NUM] [-listing-rhs-width=NUM] 62 [-listing-cont-lines=NUM] [-keep-locals] [-o 63 OBJFILE] [-R] [-reduce-memory-overheads] [-statistics] 64 [-v] [-version] [-version] [-W] [-warn] 65 [-fatal-warnings] [-w] [-x] [-Z] [@FILE] 66 [-target-help] [TARGET-OPTIONS] 67 [-|FILES ...] 68 69 _Target Alpha options:_ 70 [-mCPU] 71 [-mdebug | -no-mdebug] 72 [-relax] [-g] [-GSIZE] 73 [-F] [-32addr] 74 75 _Target ARC options:_ 76 [-marc[5|6|7|8]] 77 [-EB|-EL] 78 79 _Target ARM options:_ 80 [-mcpu=PROCESSOR[+EXTENSION...]] 81 [-march=ARCHITECTURE[+EXTENSION...]] 82 [-mfpu=FLOATING-POINT-FORMAT] 83 [-mfloat-abi=ABI] 84 [-meabi=VER] 85 [-mthumb] 86 [-EB|-EL] 87 [-mapcs-32|-mapcs-26|-mapcs-float| 88 -mapcs-reentrant] 89 [-mthumb-interwork] [-k] 90 91 _Target CRIS options:_ 92 [-underscore | -no-underscore] 93 [-pic] [-N] 94 [-emulation=criself | -emulation=crisaout] 95 [-march=v0_v10 | -march=v10 | -march=v32 | -march=common_v10_v32] 96 97 _Target D10V options:_ 98 [-O] 99 100 _Target D30V options:_ 101 [-O|-n|-N] 102 103 _Target i386 options:_ 104 [-32|-64] [-n] 105 106 _Target i960 options:_ 107 [-ACA|-ACA_A|-ACB|-ACC|-AKA|-AKB| 108 -AKC|-AMC] 109 [-b] [-no-relax] 110 111 _Target IA-64 options:_ 112 [-mconstant-gp|-mauto-pic] 113 [-milp32|-milp64|-mlp64|-mp64] 114 [-mle|mbe] 115 [-mtune=itanium1|-mtune=itanium2] 116 [-munwind-check=warning|-munwind-check=error] 117 [-mhint.b=ok|-mhint.b=warning|-mhint.b=error] 118 [-x|-xexplicit] [-xauto] [-xdebug] 119 120 _Target IP2K options:_ 121 [-mip2022|-mip2022ext] 122 123 _Target M32C options:_ 124 [-m32c|-m16c] 125 126 _Target M32R options:_ 127 [-m32rx|-[no-]warn-explicit-parallel-conflicts| 128 -W[n]p] 129 130 _Target M680X0 options:_ 131 [-l] [-m68000|-m68010|-m68020|...] 132 133 _Target M68HC11 options:_ 134 [-m68hc11|-m68hc12|-m68hcs12] 135 [-mshort|-mlong] 136 [-mshort-double|-mlong-double] 137 [-force-long-branchs] [-short-branchs] 138 [-strict-direct-mode] [-print-insn-syntax] 139 [-print-opcodes] [-generate-example] 140 141 _Target MCORE options:_ 142 [-jsri2bsr] [-sifilter] [-relax] 143 [-mcpu=[210|340]] 144 145 _Target MIPS options:_ 146 [-nocpp] [-EL] [-EB] [-O[OPTIMIZATION LEVEL]] 147 [-g[DEBUG LEVEL]] [-G NUM] [-KPIC] [-call_shared] 148 [-non_shared] [-xgot] 149 [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32] 150 [-march=CPU] [-mtune=CPU] [-mips1] [-mips2] 151 [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2] 152 [-mips64] [-mips64r2] 153 [-construct-floats] [-no-construct-floats] 154 [-trap] [-no-break] [-break] [-no-trap] 155 [-mfix7000] [-mno-fix7000] 156 [-mips16] [-no-mips16] 157 [-mips3d] [-no-mips3d] 158 [-mdmx] [-no-mdmx] 159 [-mdsp] [-mno-dsp] 160 [-mmt] [-mno-mt] 161 [-mdebug] [-no-mdebug] 162 [-mpdr] [-mno-pdr] 163 164 _Target MMIX options:_ 165 [-fixed-special-register-names] [-globalize-symbols] 166 [-gnu-syntax] [-relax] [-no-predefined-symbols] 167 [-no-expand] [-no-merge-gregs] [-x] 168 [-linker-allocated-gregs] 169 170 _Target PDP11 options:_ 171 [-mpic|-mno-pic] [-mall] [-mno-extensions] 172 [-mEXTENSION|-mno-EXTENSION] 173 [-mCPU] [-mMACHINE] 174 175 _Target picoJava options:_ 176 [-mb|-me] 177 178 _Target PowerPC options:_ 179 [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604| 180 -m403|-m405|-mppc64|-m620|-mppc64bridge|-mbooke| 181 -mbooke32|-mbooke64] 182 [-mcom|-many|-maltivec] [-memb] 183 [-mregnames|-mno-regnames] 184 [-mrelocatable|-mrelocatable-lib] 185 [-mlittle|-mlittle-endian|-mbig|-mbig-endian] 186 [-msolaris|-mno-solaris] 187 188 _Target SPARC options:_ 189 [-Av6|-Av7|-Av8|-Asparclet|-Asparclite 190 -Av8plus|-Av8plusa|-Av9|-Av9a] 191 [-xarch=v8plus|-xarch=v8plusa] [-bump] 192 [-32|-64] 193 194 _Target TIC54X options:_ 195 [-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf] 196 [-merrors-to-file <FILENAME>|-me <FILENAME>] 197 198 199 _Target Z80 options:_ 200 [-z80] [-r800] 201 [ -ignore-undocumented-instructions] [-Wnud] 202 [ -ignore-unportable-instructions] [-Wnup] 203 [ -warn-undocumented-instructions] [-Wud] 204 [ -warn-unportable-instructions] [-Wup] 205 [ -forbid-undocumented-instructions] [-Fud] 206 [ -forbid-unportable-instructions] [-Fup] 207 208 209 _Target Xtensa options:_ 210 [-[no-]text-section-literals] [-[no-]absolute-literals] 211 [-[no-]target-align] [-[no-]longcalls] 212 [-[no-]transform] 213 [-rename-section OLDNAME=NEWNAME] 214 215 `@FILE' 216 Read command-line options from FILE. The options read are 217 inserted in place of the original @FILE option. If FILE does not 218 exist, or cannot be read, then the option will be treated 219 literally, and not removed. 220 221 Options in FILE are separated by whitespace. A whitespace 222 character may be included in an option by surrounding the entire 223 option in either single or double quotes. Any character 224 (including a backslash) may be included by prefixing the character 225 to be included with a backslash. The FILE may itself contain 226 additional @FILE options; any such options will be processed 227 recursively. 228 229 `-a[cdhlmns]' 230 Turn on listings, in any of a variety of ways: 231 232 `-ac' 233 omit false conditionals 234 235 `-ad' 236 omit debugging directives 237 238 `-ah' 239 include high-level source 240 241 `-al' 242 include assembly 243 244 `-am' 245 include macro expansions 246 247 `-an' 248 omit forms processing 249 250 `-as' 251 include symbols 252 253 `=file' 254 set the name of the listing file 255 256 You may combine these options; for example, use `-aln' for assembly 257 listing without forms processing. The `=file' option, if used, 258 must be the last one. By itself, `-a' defaults to `-ahls'. 259 260 `--alternate' 261 Begin in alternate macro mode, see *Note `.altmacro': Altmacro. 262 263 `-D' 264 Ignored. This option is accepted for script compatibility with 265 calls to other assemblers. 266 267 `--defsym SYM=VALUE' 268 Define the symbol SYM to be VALUE before assembling the input file. 269 VALUE must be an integer constant. As in C, a leading `0x' 270 indicates a hexadecimal value, and a leading `0' indicates an 271 octal value. 272 273 `-f' 274 "fast"--skip whitespace and comment preprocessing (assume source is 275 compiler output). 276 277 `-g' 278 `--gen-debug' 279 Generate debugging information for each assembler source line 280 using whichever debug format is preferred by the target. This 281 currently means either STABS, ECOFF or DWARF2. 282 283 `--gstabs' 284 Generate stabs debugging information for each assembler line. This 285 may help debugging assembler code, if the debugger can handle it. 286 287 `--gstabs+' 288 Generate stabs debugging information for each assembler line, with 289 GNU extensions that probably only gdb can handle, and that could 290 make other debuggers crash or refuse to read your program. This 291 may help debugging assembler code. Currently the only GNU 292 extension is the location of the current working directory at 293 assembling time. 294 295 `--gdwarf-2' 296 Generate DWARF2 debugging information for each assembler line. 297 This may help debugging assembler code, if the debugger can handle 298 it. Note--this option is only supported by some targets, not all 299 of them. 300 301 `--help' 302 Print a summary of the command line options and exit. 303 304 `--target-help' 305 Print a summary of all target specific options and exit. 306 307 `-I DIR' 308 Add directory DIR to the search list for `.include' directives. 309 310 `-J' 311 Don't warn about signed overflow. 312 313 `-K' 314 Issue warnings when difference tables altered for long 315 displacements. 316 317 `-L' 318 `--keep-locals' 319 Keep (in the symbol table) local symbols. On traditional a.out 320 systems these start with `L', but different systems have different 321 local label prefixes. 322 323 `--listing-lhs-width=NUMBER' 324 Set the maximum width, in words, of the output data column for an 325 assembler listing to NUMBER. 326 327 `--listing-lhs-width2=NUMBER' 328 Set the maximum width, in words, of the output data column for 329 continuation lines in an assembler listing to NUMBER. 330 331 `--listing-rhs-width=NUMBER' 332 Set the maximum width of an input source line, as displayed in a 333 listing, to NUMBER bytes. 334 335 `--listing-cont-lines=NUMBER' 336 Set the maximum number of lines printed in a listing for a single 337 line of input to NUMBER + 1. 338 339 `-o OBJFILE' 340 Name the object-file output from `as' OBJFILE. 341 342 `-R' 343 Fold the data section into the text section. 344 345 Set the default size of GAS's hash tables to a prime number close 346 to NUMBER. Increasing this value can reduce the length of time it 347 takes the assembler to perform its tasks, at the expense of 348 increasing the assembler's memory requirements. Similarly 349 reducing this value can reduce the memory requirements at the 350 expense of speed. 351 352 `--reduce-memory-overheads' 353 This option reduces GAS's memory requirements, at the expense of 354 making the assembly processes slower. Currently this switch is a 355 synonym for `--hash-size=4051', but in the future it may have 356 other effects as well. 357 358 `--statistics' 359 Print the maximum space (in bytes) and total time (in seconds) 360 used by assembly. 361 362 `--strip-local-absolute' 363 Remove local absolute symbols from the outgoing symbol table. 364 365 `-v' 366 `-version' 367 Print the `as' version. 368 369 `--version' 370 Print the `as' version and exit. 371 372 `-W' 373 `--no-warn' 374 Suppress warning messages. 375 376 `--fatal-warnings' 377 Treat warnings as errors. 378 379 `--warn' 380 Don't suppress warning messages or treat them as errors. 381 382 `-w' 383 Ignored. 384 385 `-x' 386 Ignored. 387 388 `-Z' 389 Generate an object file even after errors. 390 391 `-- | FILES ...' 392 Standard input, or source files to assemble. 393 394 395 The following options are available when as is configured for an ARC 396 processor. 397 398 `-marc[5|6|7|8]' 399 This option selects the core processor variant. 400 401 `-EB | -EL' 402 Select either big-endian (-EB) or little-endian (-EL) output. 403 404 The following options are available when as is configured for the ARM 405 processor family. 406 407 `-mcpu=PROCESSOR[+EXTENSION...]' 408 Specify which ARM processor variant is the target. 409 410 `-march=ARCHITECTURE[+EXTENSION...]' 411 Specify which ARM architecture variant is used by the target. 412 413 `-mfpu=FLOATING-POINT-FORMAT' 414 Select which Floating Point architecture is the target. 415 416 `-mfloat-abi=ABI' 417 Select which floating point ABI is in use. 418 419 `-mthumb' 420 Enable Thumb only instruction decoding. 421 422 `-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant' 423 Select which procedure calling convention is in use. 424 425 `-EB | -EL' 426 Select either big-endian (-EB) or little-endian (-EL) output. 427 428 `-mthumb-interwork' 429 Specify that the code has been generated with interworking between 430 Thumb and ARM code in mind. 431 432 `-k' 433 Specify that PIC code has been generated. 434 435 See the info pages for documentation of the CRIS-specific options. 436 437 The following options are available when as is configured for a D10V 438 processor. 439 `-O' 440 Optimize output by parallelizing instructions. 441 442 The following options are available when as is configured for a D30V 443 processor. 444 `-O' 445 Optimize output by parallelizing instructions. 446 447 `-n' 448 Warn when nops are generated. 449 450 `-N' 451 Warn when a nop after a 32-bit multiply instruction is generated. 452 453 The following options are available when as is configured for the 454 Intel 80960 processor. 455 456 `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC' 457 Specify which variant of the 960 architecture is the target. 458 459 `-b' 460 Add code to collect statistics about branches taken. 461 462 `-no-relax' 463 Do not alter compare-and-branch instructions for long 464 displacements; error if necessary. 465 466 467 The following options are available when as is configured for the 468 Ubicom IP2K series. 469 470 `-mip2022ext' 471 Specifies that the extended IP2022 instructions are allowed. 472 473 `-mip2022' 474 Restores the default behaviour, which restricts the permitted 475 instructions to just the basic IP2022 ones. 476 477 478 The following options are available when as is configured for the 479 Renesas M32C and M16C processors. 480 481 `-m32c' 482 Assemble M32C instructions. 483 484 `-m16c' 485 Assemble M16C instructions (the default). 486 487 488 The following options are available when as is configured for the 489 Renesas M32R (formerly Mitsubishi M32R) series. 490 491 `--m32rx' 492 Specify which processor in the M32R family is the target. The 493 default is normally the M32R, but this option changes it to the 494 M32RX. 495 496 `--warn-explicit-parallel-conflicts or --Wp' 497 Produce warning messages when questionable parallel constructs are 498 encountered. 499 500 `--no-warn-explicit-parallel-conflicts or --Wnp' 501 Do not produce warning messages when questionable parallel 502 constructs are encountered. 503 504 505 The following options are available when as is configured for the 506 Motorola 68000 series. 507 508 `-l' 509 Shorten references to undefined symbols, to one word instead of 510 two. 511 512 `-m68000 | -m68008 | -m68010 | -m68020 | -m68030' 513 `| -m68040 | -m68060 | -m68302 | -m68331 | -m68332' 514 `| -m68333 | -m68340 | -mcpu32 | -m5200' 515 Specify what processor in the 68000 family is the target. The 516 default is normally the 68020, but this can be changed at 517 configuration time. 518 519 `-m68881 | -m68882 | -mno-68881 | -mno-68882' 520 The target machine does (or does not) have a floating-point 521 coprocessor. The default is to assume a coprocessor for 68020, 522 68030, and cpu32. Although the basic 68000 is not compatible with 523 the 68881, a combination of the two can be specified, since it's 524 possible to do emulation of the coprocessor instructions with the 525 main processor. 526 527 `-m68851 | -mno-68851' 528 The target machine does (or does not) have a memory-management 529 unit coprocessor. The default is to assume an MMU for 68020 and 530 up. 531 532 533 For details about the PDP-11 machine dependent features options, see 534 *Note PDP-11-Options::. 535 536 `-mpic | -mno-pic' 537 Generate position-independent (or position-dependent) code. The 538 default is `-mpic'. 539 540 `-mall' 541 `-mall-extensions' 542 Enable all instruction set extensions. This is the default. 543 544 `-mno-extensions' 545 Disable all instruction set extensions. 546 547 `-mEXTENSION | -mno-EXTENSION' 548 Enable (or disable) a particular instruction set extension. 549 550 `-mCPU' 551 Enable the instruction set extensions supported by a particular 552 CPU, and disable all other extensions. 553 554 `-mMACHINE' 555 Enable the instruction set extensions supported by a particular 556 machine model, and disable all other extensions. 557 558 The following options are available when as is configured for a 559 picoJava processor. 560 561 `-mb' 562 Generate "big endian" format output. 563 564 `-ml' 565 Generate "little endian" format output. 566 567 568 The following options are available when as is configured for the 569 Motorola 68HC11 or 68HC12 series. 570 571 `-m68hc11 | -m68hc12 | -m68hcs12' 572 Specify what processor is the target. The default is defined by 573 the configuration option when building the assembler. 574 575 `-mshort' 576 Specify to use the 16-bit integer ABI. 577 578 `-mlong' 579 Specify to use the 32-bit integer ABI. 580 581 `-mshort-double' 582 Specify to use the 32-bit double ABI. 583 584 `-mlong-double' 585 Specify to use the 64-bit double ABI. 586 587 `--force-long-branchs' 588 Relative branches are turned into absolute ones. This concerns 589 conditional branches, unconditional branches and branches to a sub 590 routine. 591 592 `-S | --short-branchs' 593 Do not turn relative branchs into absolute ones when the offset is 594 out of range. 595 596 `--strict-direct-mode' 597 Do not turn the direct addressing mode into extended addressing 598 mode when the instruction does not support direct addressing mode. 599 600 `--print-insn-syntax' 601 Print the syntax of instruction in case of error. 602 603 `--print-opcodes' 604 print the list of instructions with syntax and then exit. 605 606 `--generate-example' 607 print an example of instruction for each possible instruction and 608 then exit. This option is only useful for testing `as'. 609 610 611 The following options are available when `as' is configured for the 612 SPARC architecture: 613 614 `-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite' 615 `-Av8plus | -Av8plusa | -Av9 | -Av9a' 616 Explicitly select a variant of the SPARC architecture. 617 618 `-Av8plus' and `-Av8plusa' select a 32 bit environment. `-Av9' 619 and `-Av9a' select a 64 bit environment. 620 621 `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with 622 UltraSPARC extensions. 623 624 `-xarch=v8plus | -xarch=v8plusa' 625 For compatibility with the Solaris v9 assembler. These options are 626 equivalent to -Av8plus and -Av8plusa, respectively. 627 628 `-bump' 629 Warn when the assembler switches to another architecture. 630 631 The following options are available when as is configured for the 632 'c54x architecture. 633 634 `-mfar-mode' 635 Enable extended addressing mode. All addresses and relocations 636 will assume extended addressing (usually 23 bits). 637 638 `-mcpu=CPU_VERSION' 639 Sets the CPU version being compiled for. 640 641 `-merrors-to-file FILENAME' 642 Redirect error output to a file, for broken systems which don't 643 support such behaviour in the shell. 644 645 The following options are available when as is configured for a MIPS 646 processor. 647 648 `-G NUM' 649 This option sets the largest size of an object that can be 650 referenced implicitly with the `gp' register. It is only accepted 651 for targets that use ECOFF format, such as a DECstation running 652 Ultrix. The default value is 8. 653 654 `-EB' 655 Generate "big endian" format output. 656 657 `-EL' 658 Generate "little endian" format output. 659 660 `-mips1' 661 `-mips2' 662 `-mips3' 663 `-mips4' 664 `-mips5' 665 `-mips32' 666 `-mips32r2' 667 `-mips64' 668 `-mips64r2' 669 Generate code for a particular MIPS Instruction Set Architecture 670 level. `-mips1' is an alias for `-march=r3000', `-mips2' is an 671 alias for `-march=r6000', `-mips3' is an alias for `-march=r4000' 672 and `-mips4' is an alias for `-march=r8000'. `-mips5', `-mips32', 673 `-mips32r2', `-mips64', and `-mips64r2' correspond to generic 674 `MIPS V', `MIPS32', `MIPS32 Release 2', `MIPS64', and `MIPS64 675 Release 2' ISA processors, respectively. 676 677 `-march=CPU' 678 Generate code for a particular MIPS cpu. 679 680 `-mtune=CPU' 681 Schedule and tune for a particular MIPS cpu. 682 683 `-mfix7000' 684 `-mno-fix7000' 685 Cause nops to be inserted if the read of the destination register 686 of an mfhi or mflo instruction occurs in the following two 687 instructions. 688 689 `-mdebug' 690 `-no-mdebug' 691 Cause stabs-style debugging output to go into an ECOFF-style 692 .mdebug section instead of the standard ELF .stabs sections. 693 694 `-mpdr' 695 `-mno-pdr' 696 Control generation of `.pdr' sections. 697 698 `-mgp32' 699 `-mfp32' 700 The register sizes are normally inferred from the ISA and ABI, but 701 these flags force a certain group of registers to be treated as 32 702 bits wide at all times. `-mgp32' controls the size of 703 general-purpose registers and `-mfp32' controls the size of 704 floating-point registers. 705 706 `-mips16' 707 `-no-mips16' 708 Generate code for the MIPS 16 processor. This is equivalent to 709 putting `.set mips16' at the start of the assembly file. 710 `-no-mips16' turns off this option. 711 712 `-mips3d' 713 `-no-mips3d' 714 Generate code for the MIPS-3D Application Specific Extension. 715 This tells the assembler to accept MIPS-3D instructions. 716 `-no-mips3d' turns off this option. 717 718 `-mdmx' 719 `-no-mdmx' 720 Generate code for the MDMX Application Specific Extension. This 721 tells the assembler to accept MDMX instructions. `-no-mdmx' turns 722 off this option. 723 724 `-mdsp' 725 `-mno-dsp' 726 Generate code for the DSP Application Specific Extension. This 727 tells the assembler to accept DSP instructions. `-mno-dsp' turns 728 off this option. 729 730 `-mmt' 731 `-mno-mt' 732 Generate code for the MT Application Specific Extension. This 733 tells the assembler to accept MT instructions. `-mno-mt' turns 734 off this option. 735 736 `--construct-floats' 737 `--no-construct-floats' 738 The `--no-construct-floats' option disables the construction of 739 double width floating point constants by loading the two halves of 740 the value into the two single width floating point registers that 741 make up the double width register. By default 742 `--construct-floats' is selected, allowing construction of these 743 floating point constants. 744 745 `--emulation=NAME' 746 This option causes `as' to emulate `as' configured for some other 747 target, in all respects, including output format (choosing between 748 ELF and ECOFF only), handling of pseudo-opcodes which may generate 749 debugging information or store symbol table information, and 750 default endianness. The available configuration names are: 751 `mipsecoff', `mipself', `mipslecoff', `mipsbecoff', `mipslelf', 752 `mipsbelf'. The first two do not alter the default endianness 753 from that of the primary target for which the assembler was 754 configured; the others change the default to little- or big-endian 755 as indicated by the `b' or `l' in the name. Using `-EB' or `-EL' 756 will override the endianness selection in any case. 757 758 This option is currently supported only when the primary target 759 `as' is configured for is a MIPS ELF or ECOFF target. 760 Furthermore, the primary target or others specified with 761 `--enable-targets=...' at configuration time must include support 762 for the other format, if both are to be available. For example, 763 the Irix 5 configuration includes support for both. 764 765 Eventually, this option will support more configurations, with more 766 fine-grained control over the assembler's behavior, and will be 767 supported for more processors. 768 769 `-nocpp' 770 `as' ignores this option. It is accepted for compatibility with 771 the native tools. 772 773 `--trap' 774 `--no-trap' 775 `--break' 776 `--no-break' 777 Control how to deal with multiplication overflow and division by 778 zero. `--trap' or `--no-break' (which are synonyms) take a trap 779 exception (and only work for Instruction Set Architecture level 2 780 and higher); `--break' or `--no-trap' (also synonyms, and the 781 default) take a break exception. 782 783 `-n' 784 When this option is used, `as' will issue a warning every time it 785 generates a nop instruction from a macro. 786 787 The following options are available when as is configured for an 788 MCore processor. 789 790 `-jsri2bsr' 791 `-nojsri2bsr' 792 Enable or disable the JSRI to BSR transformation. By default this 793 is enabled. The command line option `-nojsri2bsr' can be used to 794 disable it. 795 796 `-sifilter' 797 `-nosifilter' 798 Enable or disable the silicon filter behaviour. By default this 799 is disabled. The default can be overridden by the `-sifilter' 800 command line option. 801 802 `-relax' 803 Alter jump instructions for long displacements. 804 805 `-mcpu=[210|340]' 806 Select the cpu type on the target hardware. This controls which 807 instructions can be assembled. 808 809 `-EB' 810 Assemble for a big endian target. 811 812 `-EL' 813 Assemble for a little endian target. 814 815 816 See the info pages for documentation of the MMIX-specific options. 817 818 The following options are available when as is configured for an 819 Xtensa processor. 820 821 `--text-section-literals | --no-text-section-literals' 822 With `--text-section-literals', literal pools are interspersed in 823 the text section. The default is `--no-text-section-literals', 824 which places literals in a separate section in the output file. 825 These options only affect literals referenced via PC-relative 826 `L32R' instructions; literals for absolute mode `L32R' 827 instructions are handled separately. 828 829 `--absolute-literals | --no-absolute-literals' 830 Indicate to the assembler whether `L32R' instructions use absolute 831 or PC-relative addressing. The default is to assume absolute 832 addressing if the Xtensa processor includes the absolute `L32R' 833 addressing option. Otherwise, only the PC-relative `L32R' mode 834 can be used. 835 836 `--target-align | --no-target-align' 837 Enable or disable automatic alignment to reduce branch penalties 838 at the expense of some code density. The default is 839 `--target-align'. 840 841 `--longcalls | --no-longcalls' 842 Enable or disable transformation of call instructions to allow 843 calls across a greater range of addresses. The default is 844 `--no-longcalls'. 845 846 `--transform | --no-transform' 847 Enable or disable all assembler transformations of Xtensa 848 instructions. The default is `--transform'; `--no-transform' 849 should be used only in the rare cases when the instructions must 850 be exactly as specified in the assembly source. 851 852 The following options are available when as is configured for a Z80 853 family processor. 854 `-z80' 855 Assemble for Z80 processor. 856 857 `-r800' 858 Assemble for R800 processor. 859 860 `-ignore-undocumented-instructions' 861 `-Wnud' 862 Assemble undocumented Z80 instructions that also work on R800 863 without warning. 864 865 `-ignore-unportable-instructions' 866 `-Wnup' 867 Assemble all undocumented Z80 instructions without warning. 868 869 `-warn-undocumented-instructions' 870 `-Wud' 871 Issue a warning for undocumented Z80 instructions that also work 872 on R800. 873 874 `-warn-unportable-instructions' 875 `-Wup' 876 Issue a warning for undocumented Z80 instructions that do notwork 877 on R800. 878 879 `-forbid-undocumented-instructions' 880 `-Fud' 881 Treat all undocumented instructions as errors. 882 883 `-forbid-unportable-instructions' 884 `-Fup' 885 Treat undocumented Z80 intructions that do notwork on R800 as 886 errors. 887 888 * Menu: 889 890 * Manual:: Structure of this Manual 891 * GNU Assembler:: The GNU Assembler 892 * Object Formats:: Object File Formats 893 * Command Line:: Command Line 894 * Input Files:: Input Files 895 * Object:: Output (Object) File 896 * Errors:: Error and Warning Messages 897 898 899 File: as.info, Node: Manual, Next: GNU Assembler, Up: Overview 900 901 1.1 Structure of this Manual 902 ============================ 903 904 This manual is intended to describe what you need to know to use GNU 905 `as'. We cover the syntax expected in source files, including notation 906 for symbols, constants, and expressions; the directives that `as' 907 understands; and of course how to invoke `as'. 908 909 This manual also describes some of the machine-dependent features of 910 various flavors of the assembler. 911 912 On the other hand, this manual is _not_ intended as an introduction 913 to programming in assembly language--let alone programming in general! 914 In a similar vein, we make no attempt to introduce the machine 915 architecture; we do _not_ describe the instruction set, standard 916 mnemonics, registers or addressing modes that are standard to a 917 particular architecture. You may want to consult the manufacturer's 918 machine architecture manual for this information. 919 920 921 File: as.info, Node: GNU Assembler, Next: Object Formats, Prev: Manual, Up: Overview 922 923 1.2 The GNU Assembler 924 ===================== 925 926 GNU `as' is really a family of assemblers. If you use (or have used) 927 the GNU assembler on one architecture, you should find a fairly similar 928 environment when you use it on another architecture. Each version has 929 much in common with the others, including object file formats, most 930 assembler directives (often called "pseudo-ops") and assembler syntax. 931 932 `as' is primarily intended to assemble the output of the GNU C 933 compiler `gcc' for use by the linker `ld'. Nevertheless, we've tried 934 to make `as' assemble correctly everything that other assemblers for 935 the same machine would assemble. Any exceptions are documented 936 explicitly (*note Machine Dependencies::). This doesn't mean `as' 937 always uses the same syntax as another assembler for the same 938 architecture; for example, we know of several incompatible versions of 939 680x0 assembly language syntax. 940 941 Unlike older assemblers, `as' is designed to assemble a source 942 program in one pass of the source file. This has a subtle impact on the 943 `.org' directive (*note `.org': Org.). 944 945 946 File: as.info, Node: Object Formats, Next: Command Line, Prev: GNU Assembler, Up: Overview 947 948 1.3 Object File Formats 949 ======================= 950 951 The GNU assembler can be configured to produce several alternative 952 object file formats. For the most part, this does not affect how you 953 write assembly language programs; but directives for debugging symbols 954 are typically different in different file formats. *Note Symbol 955 Attributes: Symbol Attributes. 956 957 958 File: as.info, Node: Command Line, Next: Input Files, Prev: Object Formats, Up: Overview 959 960 1.4 Command Line 961 ================ 962 963 After the program name `as', the command line may contain options and 964 file names. Options may appear in any order, and may be before, after, 965 or between file names. The order of file names is significant. 966 967 `--' (two hyphens) by itself names the standard input file 968 explicitly, as one of the files for `as' to assemble. 969 970 Except for `--' any command line argument that begins with a hyphen 971 (`-') is an option. Each option changes the behavior of `as'. No 972 option changes the way another option works. An option is a `-' 973 followed by one or more letters; the case of the letter is important. 974 All options are optional. 975 976 Some options expect exactly one file name to follow them. The file 977 name may either immediately follow the option's letter (compatible with 978 older assemblers) or it may be the next command argument (GNU 979 standard). These two command lines are equivalent: 980 981 as -o my-object-file.o mumble.s 982 as -omy-object-file.o mumble.s 983 984 985 File: as.info, Node: Input Files, Next: Object, Prev: Command Line, Up: Overview 986 987 1.5 Input Files 988 =============== 989 990 We use the phrase "source program", abbreviated "source", to describe 991 the program input to one run of `as'. The program may be in one or 992 more files; how the source is partitioned into files doesn't change the 993 meaning of the source. 994 995 The source program is a concatenation of the text in all the files, 996 in the order specified. 997 998 Each time you run `as' it assembles exactly one source program. The 999 source program is made up of one or more files. (The standard input is 1000 also a file.) 1001 1002 You give `as' a command line that has zero or more input file names. 1003 The input files are read (from left file name to right). A command 1004 line argument (in any position) that has no special meaning is taken to 1005 be an input file name. 1006 1007 If you give `as' no file names it attempts to read one input file 1008 from the `as' standard input, which is normally your terminal. You may 1009 have to type <ctl-D> to tell `as' there is no more program to assemble. 1010 1011 Use `--' if you need to explicitly name the standard input file in 1012 your command line. 1013 1014 If the source is empty, `as' produces a small, empty object file. 1015 1016 Filenames and Line-numbers 1017 -------------------------- 1018 1019 There are two ways of locating a line in the input file (or files) and 1020 either may be used in reporting error messages. One way refers to a 1021 line number in a physical file; the other refers to a line number in a 1022 "logical" file. *Note Error and Warning Messages: Errors. 1023 1024 "Physical files" are those files named in the command line given to 1025 `as'. 1026 1027 "Logical files" are simply names declared explicitly by assembler 1028 directives; they bear no relation to physical files. Logical file 1029 names help error messages reflect the original source file, when `as' 1030 source is itself synthesized from other files. `as' understands the 1031 `#' directives emitted by the `gcc' preprocessor. See also *Note 1032 `.file': File. 1033 1034 1035 File: as.info, Node: Object, Next: Errors, Prev: Input Files, Up: Overview 1036 1037 1.6 Output (Object) File 1038 ======================== 1039 1040 Every time you run `as' it produces an output file, which is your 1041 assembly language program translated into numbers. This file is the 1042 object file. Its default name is `a.out'. You can give it another 1043 name by using the `-o' option. Conventionally, object file names end 1044 with `.o'. The default name is used for historical reasons: older 1045 assemblers were capable of assembling self-contained programs directly 1046 into a runnable program. (For some formats, this isn't currently 1047 possible, but it can be done for the `a.out' format.) 1048 1049 The object file is meant for input to the linker `ld'. It contains 1050 assembled program code, information to help `ld' integrate the 1051 assembled program into a runnable file, and (optionally) symbolic 1052 information for the debugger. 1053 1054 1055 File: as.info, Node: Errors, Prev: Object, Up: Overview 1056 1057 1.7 Error and Warning Messages 1058 ============================== 1059 1060 `as' may write warnings and error messages to the standard error file 1061 (usually your terminal). This should not happen when a compiler runs 1062 `as' automatically. Warnings report an assumption made so that `as' 1063 could keep assembling a flawed program; errors report a grave problem 1064 that stops the assembly. 1065 1066 Warning messages have the format 1067 1068 file_name:NNN:Warning Message Text 1069 1070 (where NNN is a line number). If a logical file name has been given 1071 (*note `.file': File.) it is used for the filename, otherwise the name 1072 of the current input file is used. If a logical line number was given 1073 (*note `.line': Line.) then it is used to calculate the number printed, 1074 otherwise the actual line in the current source file is printed. The 1075 message text is intended to be self explanatory (in the grand Unix 1076 tradition). 1077 1078 Error messages have the format 1079 file_name:NNN:FATAL:Error Message Text 1080 The file name and line number are derived as for warning messages. 1081 The actual message text may be rather less explanatory because many of 1082 them aren't supposed to happen. 1083 1084 1085 File: as.info, Node: Invoking, Next: Syntax, Prev: Overview, Up: Top 1086 1087 2 Command-Line Options 1088 ********************** 1089 1090 This chapter describes command-line options available in _all_ versions 1091 of the GNU assembler; *note Machine Dependencies::, for options specific 1092 to particular machine architectures. 1093 1094 If you are invoking `as' via the GNU C compiler, you can use the 1095 `-Wa' option to pass arguments through to the assembler. The assembler 1096 arguments must be separated from each other (and the `-Wa') by commas. 1097 For example: 1098 1099 gcc -c -g -O -Wa,-alh,-L file.c 1100 1101 This passes two options to the assembler: `-alh' (emit a listing to 1102 standard output with high-level and assembly source) and `-L' (retain 1103 local symbols in the symbol table). 1104 1105 Usually you do not need to use this `-Wa' mechanism, since many 1106 compiler command-line options are automatically passed to the assembler 1107 by the compiler. (You can call the GNU compiler driver with the `-v' 1108 option to see precisely what options it passes to each compilation 1109 pass, including the assembler.) 1110 1111 * Menu: 1112 1113 * a:: -a[cdhlns] enable listings 1114 * alternate:: --alternate enable alternate macro syntax 1115 * D:: -D for compatibility 1116 * f:: -f to work faster 1117 * I:: -I for .include search path 1118 1119 * K:: -K for difference tables 1120 1121 * L:: -L to retain local labels 1122 * listing:: --listing-XXX to configure listing output 1123 * M:: -M or --mri to assemble in MRI compatibility mode 1124 * MD:: --MD for dependency tracking 1125 * o:: -o to name the object file 1126 * R:: -R to join data and text sections 1127 * statistics:: --statistics to see statistics about assembly 1128 * traditional-format:: --traditional-format for compatible output 1129 * v:: -v to announce version 1130 * W:: -W, --no-warn, --warn, --fatal-warnings to control warnings 1131 * Z:: -Z to make object file even after errors 1132 1133 1134 File: as.info, Node: a, Next: alternate, Up: Invoking 1135 1136 2.1 Enable Listings: `-a[cdhlns]' 1137 ================================= 1138 1139 These options enable listing output from the assembler. By itself, 1140 `-a' requests high-level, assembly, and symbols listing. You can use 1141 other letters to select specific options for the list: `-ah' requests a 1142 high-level language listing, `-al' requests an output-program assembly 1143 listing, and `-as' requests a symbol table listing. High-level 1144 listings require that a compiler debugging option like `-g' be used, 1145 and that assembly listings (`-al') be requested also. 1146 1147 Use the `-ac' option to omit false conditionals from a listing. Any 1148 lines which are not assembled because of a false `.if' (or `.ifdef', or 1149 any other conditional), or a true `.if' followed by an `.else', will be 1150 omitted from the listing. 1151 1152 Use the `-ad' option to omit debugging directives from the listing. 1153 1154 Once you have specified one of these options, you can further control 1155 listing output and its appearance using the directives `.list', 1156 `.nolist', `.psize', `.eject', `.title', and `.sbttl'. The `-an' 1157 option turns off all forms processing. If you do not request listing 1158 output with one of the `-a' options, the listing-control directives 1159 have no effect. 1160 1161 The letters after `-a' may be combined into one option, _e.g._, 1162 `-aln'. 1163 1164 Note if the assembler source is coming from the standard input (eg 1165 because it is being created by `gcc' and the `-pipe' command line switch 1166 is being used) then the listing will not contain any comments or 1167 preprocessor directives. This is because the listing code buffers 1168 input source lines from stdin only after they have been preprocessed by 1169 the assembler. This reduces memory usage and makes the code more 1170 efficient. 1171 1172 1173 File: as.info, Node: alternate, Next: D, Prev: a, Up: Invoking 1174 1175 2.2 `--alternate' 1176 ================= 1177 1178 Begin in alternate macro mode, see *Note `.altmacro': Altmacro. 1179 1180 1181 File: as.info, Node: D, Next: f, Prev: alternate, Up: Invoking 1182 1183 2.3 `-D' 1184 ======== 1185 1186 This option has no effect whatsoever, but it is accepted to make it more 1187 likely that scripts written for other assemblers also work with `as'. 1188 1189 1190 File: as.info, Node: f, Next: I, Prev: D, Up: Invoking 1191 1192 2.4 Work Faster: `-f' 1193 ===================== 1194 1195 `-f' should only be used when assembling programs written by a 1196 (trusted) compiler. `-f' stops the assembler from doing whitespace and 1197 comment preprocessing on the input file(s) before assembling them. 1198 *Note Preprocessing: Preprocessing. 1199 1200 _Warning:_ if you use `-f' when the files actually need to be 1201 preprocessed (if they contain comments, for example), `as' does 1202 not work correctly. 1203 1204 1205 File: as.info, Node: I, Next: K, Prev: f, Up: Invoking 1206 1207 2.5 `.include' Search Path: `-I' PATH 1208 ===================================== 1209 1210 Use this option to add a PATH to the list of directories `as' searches 1211 for files specified in `.include' directives (*note `.include': 1212 Include.). You may use `-I' as many times as necessary to include a 1213 variety of paths. The current working directory is always searched 1214 first; after that, `as' searches any `-I' directories in the same order 1215 as they were specified (left to right) on the command line. 1216 1217 1218 File: as.info, Node: K, Next: L, Prev: I, Up: Invoking 1219 1220 2.6 Difference Tables: `-K' 1221 =========================== 1222 1223 `as' sometimes alters the code emitted for directives of the form 1224 `.word SYM1-SYM2'; *note `.word': Word. You can use the `-K' option if 1225 you want a warning issued when this is done. 1226 1227 1228 File: as.info, Node: L, Next: listing, Prev: K, Up: Invoking 1229 1230 2.7 Include Local Labels: `-L' 1231 ============================== 1232 1233 Labels beginning with `L' (upper case only) are called "local labels". 1234 *Note Symbol Names::. Normally you do not see such labels when 1235 debugging, because they are intended for the use of programs (like 1236 compilers) that compose assembler programs, not for your notice. 1237 Normally both `as' and `ld' discard such labels, so you do not normally 1238 debug with them. 1239 1240 This option tells `as' to retain those `L...' symbols in the object 1241 file. Usually if you do this you also tell the linker `ld' to preserve 1242 symbols whose names begin with `L'. 1243 1244 By default, a local label is any label beginning with `L', but each 1245 target is allowed to redefine the local label prefix. On the HPPA 1246 local labels begin with `L$'. 1247 1248 1249 File: as.info, Node: listing, Next: M, Prev: L, Up: Invoking 1250 1251 2.8 Configuring listing output: `--listing' 1252 =========================================== 1253 1254 The listing feature of the assembler can be enabled via the command 1255 line switch `-a' (*note a::). This feature combines the input source 1256 file(s) with a hex dump of the corresponding locations in the output 1257 object file, and displays them as a listing file. The format of this 1258 listing can be controlled by pseudo ops inside the assembler source 1259 (*note List:: *note Title:: *note Sbttl:: *note Psize:: *note Eject::) 1260 and also by the following switches: 1261 1262 `--listing-lhs-width=`number'' 1263 Sets the maximum width, in words, of the first line of the hex 1264 byte dump. This dump appears on the left hand side of the listing 1265 output. 1266 1267 `--listing-lhs-width2=`number'' 1268 Sets the maximum width, in words, of any further lines of the hex 1269 byte dump for a given input source line. If this value is not 1270 specified, it defaults to being the same as the value specified 1271 for `--listing-lhs-width'. If neither switch is used the default 1272 is to one. 1273 1274 `--listing-rhs-width=`number'' 1275 Sets the maximum width, in characters, of the source line that is 1276 displayed alongside the hex dump. The default value for this 1277 parameter is 100. The source line is displayed on the right hand 1278 side of the listing output. 1279 1280 `--listing-cont-lines=`number'' 1281 Sets the maximum number of continuation lines of hex dump that 1282 will be displayed for a given single line of source input. The 1283 default value is 4. 1284 1285 1286 File: as.info, Node: M, Next: MD, Prev: listing, Up: Invoking 1287 1288 2.9 Assemble in MRI Compatibility Mode: `-M' 1289 ============================================ 1290 1291 The `-M' or `--mri' option selects MRI compatibility mode. This 1292 changes the syntax and pseudo-op handling of `as' to make it compatible 1293 with the `ASM68K' or the `ASM960' (depending upon the configured 1294 target) assembler from Microtec Research. The exact nature of the MRI 1295 syntax will not be documented here; see the MRI manuals for more 1296 information. Note in particular that the handling of macros and macro 1297 arguments is somewhat different. The purpose of this option is to 1298 permit assembling existing MRI assembler code using `as'. 1299 1300 The MRI compatibility is not complete. Certain operations of the 1301 MRI assembler depend upon its object file format, and can not be 1302 supported using other object file formats. Supporting these would 1303 require enhancing each object file format individually. These are: 1304 1305 * global symbols in common section 1306 1307 The m68k MRI assembler supports common sections which are merged 1308 by the linker. Other object file formats do not support this. 1309 `as' handles common sections by treating them as a single common 1310 symbol. It permits local symbols to be defined within a common 1311 section, but it can not support global symbols, since it has no 1312 way to describe them. 1313 1314 * complex relocations 1315 1316 The MRI assemblers support relocations against a negated section 1317 address, and relocations which combine the start addresses of two 1318 or more sections. These are not support by other object file 1319 formats. 1320 1321 * `END' pseudo-op specifying start address 1322 1323 The MRI `END' pseudo-op permits the specification of a start 1324 address. This is not supported by other object file formats. The 1325 start address may instead be specified using the `-e' option to 1326 the linker, or in a linker script. 1327 1328 * `IDNT', `.ident' and `NAME' pseudo-ops 1329 1330 The MRI `IDNT', `.ident' and `NAME' pseudo-ops assign a module 1331 name to the output file. This is not supported by other object 1332 file formats. 1333 1334 * `ORG' pseudo-op 1335 1336 The m68k MRI `ORG' pseudo-op begins an absolute section at a given 1337 address. This differs from the usual `as' `.org' pseudo-op, which 1338 changes the location within the current section. Absolute 1339 sections are not supported by other object file formats. The 1340 address of a section may be assigned within a linker script. 1341 1342 There are some other features of the MRI assembler which are not 1343 supported by `as', typically either because they are difficult or 1344 because they seem of little consequence. Some of these may be 1345 supported in future releases. 1346 1347 * EBCDIC strings 1348 1349 EBCDIC strings are not supported. 1350 1351 * packed binary coded decimal 1352 1353 Packed binary coded decimal is not supported. This means that the 1354 `DC.P' and `DCB.P' pseudo-ops are not supported. 1355 1356 * `FEQU' pseudo-op 1357 1358 The m68k `FEQU' pseudo-op is not supported. 1359 1360 * `NOOBJ' pseudo-op 1361 1362 The m68k `NOOBJ' pseudo-op is not supported. 1363 1364 * `OPT' branch control options 1365 1366 The m68k `OPT' branch control options--`B', `BRS', `BRB', `BRL', 1367 and `BRW'--are ignored. `as' automatically relaxes all branches, 1368 whether forward or backward, to an appropriate size, so these 1369 options serve no purpose. 1370 1371 * `OPT' list control options 1372 1373 The following m68k `OPT' list control options are ignored: `C', 1374 `CEX', `CL', `CRE', `E', `G', `I', `M', `MEX', `MC', `MD', `X'. 1375 1376 * other `OPT' options 1377 1378 The following m68k `OPT' options are ignored: `NEST', `O', `OLD', 1379 `OP', `P', `PCO', `PCR', `PCS', `R'. 1380 1381 * `OPT' `D' option is default 1382 1383 The m68k `OPT' `D' option is the default, unlike the MRI assembler. 1384 `OPT NOD' may be used to turn it off. 1385 1386 * `XREF' pseudo-op. 1387 1388 The m68k `XREF' pseudo-op is ignored. 1389 1390 * `.debug' pseudo-op 1391 1392 The i960 `.debug' pseudo-op is not supported. 1393 1394 * `.extended' pseudo-op 1395 1396 The i960 `.extended' pseudo-op is not supported. 1397 1398 * `.list' pseudo-op. 1399 1400 The various options of the i960 `.list' pseudo-op are not 1401 supported. 1402 1403 * `.optimize' pseudo-op 1404 1405 The i960 `.optimize' pseudo-op is not supported. 1406 1407 * `.output' pseudo-op 1408 1409 The i960 `.output' pseudo-op is not supported. 1410 1411 * `.setreal' pseudo-op 1412 1413 The i960 `.setreal' pseudo-op is not supported. 1414 1415 1416 1417 File: as.info, Node: MD, Next: o, Prev: M, Up: Invoking 1418 1419 2.10 Dependency Tracking: `--MD' 1420 ================================ 1421 1422 `as' can generate a dependency file for the file it creates. This file 1423 consists of a single rule suitable for `make' describing the 1424 dependencies of the main source file. 1425 1426 The rule is written to the file named in its argument. 1427 1428 This feature is used in the automatic updating of makefiles. 1429 1430 1431 File: as.info, Node: o, Next: R, Prev: MD, Up: Invoking 1432 1433 2.11 Name the Object File: `-o' 1434 =============================== 1435 1436 There is always one object file output when you run `as'. By default 1437 it has the name `a.out' (or `b.out', for Intel 960 targets only). You 1438 use this option (which takes exactly one filename) to give the object 1439 file a different name. 1440 1441 Whatever the object file is called, `as' overwrites any existing 1442 file of the same name. 1443 1444 1445 File: as.info, Node: R, Next: statistics, Prev: o, Up: Invoking 1446 1447 2.12 Join Data and Text Sections: `-R' 1448 ====================================== 1449 1450 `-R' tells `as' to write the object file as if all data-section data 1451 lives in the text section. This is only done at the very last moment: 1452 your binary data are the same, but data section parts are relocated 1453 differently. The data section part of your object file is zero bytes 1454 long because all its bytes are appended to the text section. (*Note 1455 Sections and Relocation: Sections.) 1456 1457 When you specify `-R' it would be possible to generate shorter 1458 address displacements (because we do not have to cross between text and 1459 data section). We refrain from doing this simply for compatibility with 1460 older versions of `as'. In future, `-R' may work this way. 1461 1462 When `as' is configured for COFF or ELF output, this option is only 1463 useful if you use sections named `.text' and `.data'. 1464 1465 `-R' is not supported for any of the HPPA targets. Using `-R' 1466 generates a warning from `as'. 1467 1468 1469 File: as.info, Node: statistics, Next: traditional-format, Prev: R, Up: Invoking 1470 1471 2.13 Display Assembly Statistics: `--statistics' 1472 ================================================ 1473 1474 Use `--statistics' to display two statistics about the resources used by 1475 `as': the maximum amount of space allocated during the assembly (in 1476 bytes), and the total execution time taken for the assembly (in CPU 1477 seconds). 1478 1479 1480 File: as.info, Node: traditional-format, Next: v, Prev: statistics, Up: Invoking 1481 1482 2.14 Compatible Output: `--traditional-format' 1483 ============================================== 1484 1485 For some targets, the output of `as' is different in some ways from the 1486 output of some existing assembler. This switch requests `as' to use 1487 the traditional format instead. 1488 1489 For example, it disables the exception frame optimizations which 1490 `as' normally does by default on `gcc' output. 1491 1492 1493 File: as.info, Node: v, Next: W, Prev: traditional-format, Up: Invoking 1494 1495 2.15 Announce Version: `-v' 1496 =========================== 1497 1498 You can find out what version of as is running by including the option 1499 `-v' (which you can also spell as `-version') on the command line. 1500 1501 1502 File: as.info, Node: W, Next: Z, Prev: v, Up: Invoking 1503 1504 2.16 Control Warnings: `-W', `--warn', `--no-warn', `--fatal-warnings' 1505 ====================================================================== 1506 1507 `as' should never give a warning or error message when assembling 1508 compiler output. But programs written by people often cause `as' to 1509 give a warning that a particular assumption was made. All such 1510 warnings are directed to the standard error file. 1511 1512 If you use the `-W' and `--no-warn' options, no warnings are issued. 1513 This only affects the warning messages: it does not change any 1514 particular of how `as' assembles your file. Errors, which stop the 1515 assembly, are still reported. 1516 1517 If you use the `--fatal-warnings' option, `as' considers files that 1518 generate warnings to be in error. 1519 1520 You can switch these options off again by specifying `--warn', which 1521 causes warnings to be output as usual. 1522 1523 1524 File: as.info, Node: Z, Prev: W, Up: Invoking 1525 1526 2.17 Generate Object File in Spite of Errors: `-Z' 1527 ================================================== 1528 1529 After an error message, `as' normally produces no output. If for some 1530 reason you are interested in object file output even after `as' gives 1531 an error message on your program, use the `-Z' option. If there are 1532 any errors, `as' continues anyways, and writes an object file after a 1533 final warning message of the form `N errors, M warnings, generating bad 1534 object file.' 1535 1536 1537 File: as.info, Node: Syntax, Next: Sections, Prev: Invoking, Up: Top 1538 1539 3 Syntax 1540 ******** 1541 1542 This chapter describes the machine-independent syntax allowed in a 1543 source file. `as' syntax is similar to what many other assemblers use; 1544 it is inspired by the BSD 4.2 assembler, except that `as' does not 1545 assemble Vax bit-fields. 1546 1547 * Menu: 1548 1549 * Preprocessing:: Preprocessing 1550 * Whitespace:: Whitespace 1551 * Comments:: Comments 1552 * Symbol Intro:: Symbols 1553 * Statements:: Statements 1554 * Constants:: Constants 1555 1556 1557 File: as.info, Node: Preprocessing, Next: Whitespace, Up: Syntax 1558 1559 3.1 Preprocessing 1560 ================= 1561 1562 The `as' internal preprocessor: 1563 * adjusts and removes extra whitespace. It leaves one space or tab 1564 before the keywords on a line, and turns any other whitespace on 1565 the line into a single space. 1566 1567 * removes all comments, replacing them with a single space, or an 1568 appropriate number of newlines. 1569 1570 * converts character constants into the appropriate numeric values. 1571 1572 It does not do macro processing, include file handling, or anything 1573 else you may get from your C compiler's preprocessor. You can do 1574 include file processing with the `.include' directive (*note 1575 `.include': Include.). You can use the GNU C compiler driver to get 1576 other "CPP" style preprocessing by giving the input file a `.S' suffix. 1577 *Note Options Controlling the Kind of Output: (gcc.info)Overall 1578 Options. 1579 1580 Excess whitespace, comments, and character constants cannot be used 1581 in the portions of the input text that are not preprocessed. 1582 1583 If the first line of an input file is `#NO_APP' or if you use the 1584 `-f' option, whitespace and comments are not removed from the input 1585 file. Within an input file, you can ask for whitespace and comment 1586 removal in specific portions of the by putting a line that says `#APP' 1587 before the text that may contain whitespace or comments, and putting a 1588 line that says `#NO_APP' after this text. This feature is mainly 1589 intend to support `asm' statements in compilers whose output is 1590 otherwise free of comments and whitespace. 1591 1592 1593 File: as.info, Node: Whitespace, Next: Comments, Prev: Preprocessing, Up: Syntax 1594 1595 3.2 Whitespace 1596 ============== 1597 1598 "Whitespace" is one or more blanks or tabs, in any order. Whitespace 1599 is used to separate symbols, and to make programs neater for people to 1600 read. Unless within character constants (*note Character Constants: 1601 Characters.), any whitespace means the same as exactly one space. 1602 1603 1604 File: as.info, Node: Comments, Next: Symbol Intro, Prev: Whitespace, Up: Syntax 1605 1606 3.3 Comments 1607 ============ 1608 1609 There are two ways of rendering comments to `as'. In both cases the 1610 comment is equivalent to one space. 1611 1612 Anything from `/*' through the next `*/' is a comment. This means 1613 you may not nest these comments. 1614 1615 /* 1616 The only way to include a newline ('\n') in a comment 1617 is to use this sort of comment. 1618 */ 1619 1620 /* This sort of comment does not nest. */ 1621 1622 Anything from the "line comment" character to the next newline is 1623 considered a comment and is ignored. The line comment character is `;' 1624 on the ARC; `@' on the ARM; `;' for the H8/300 family; `;' for the HPPA; 1625 `#' on the i386 and x86-64; `#' on the i960; `;' for the PDP-11; `;' 1626 for picoJava; `#' for Motorola PowerPC; `!' for the Renesas / SuperH SH; 1627 `!' on the SPARC; `#' on the ip2k; `#' on the m32c; `#' on the m32r; 1628 `|' on the 680x0; `#' on the 68HC11 and 68HC12; `#' on the Vax; `;' for 1629 the Z80; `!' for the Z8000; `#' on the V850; `#' for Xtensa systems; 1630 see *Note Machine Dependencies::. 1631 1632 On some machines there are two different line comment characters. 1633 One character only begins a comment if it is the first non-whitespace 1634 character on a line, while the other always begins a comment. 1635 1636 The V850 assembler also supports a double dash as starting a comment 1637 that extends to the end of the line. 1638 1639 `--'; 1640 1641 To be compatible with past assemblers, lines that begin with `#' 1642 have a special interpretation. Following the `#' should be an absolute 1643 expression (*note Expressions::): the logical line number of the _next_ 1644 line. Then a string (*note Strings: Strings.) is allowed: if present 1645 it is a new logical file name. The rest of the line, if any, should be 1646 whitespace. 1647 1648 If the first non-whitespace characters on the line are not numeric, 1649 the line is ignored. (Just like a comment.) 1650 1651 # This is an ordinary comment. 1652 # 42-6 "new_file_name" # New logical file name 1653 # This is logical line # 36. 1654 This feature is deprecated, and may disappear from future versions 1655 of `as'. 1656 1657 1658 File: as.info, Node: Symbol Intro, Next: Statements, Prev: Comments, Up: Syntax 1659 1660 3.4 Symbols 1661 =========== 1662 1663 A "symbol" is one or more characters chosen from the set of all letters 1664 (both upper and lower case), digits and the three characters `_.$'. On 1665 most machines, you can also use `$' in symbol names; exceptions are 1666 noted in *Note Machine Dependencies::. No symbol may begin with a 1667 digit. Case is significant. There is no length limit: all characters 1668 are significant. Symbols are delimited by characters not in that set, 1669 or by the beginning of a file (since the source program must end with a 1670 newline, the end of a file is not a possible symbol delimiter). *Note 1671 Symbols::. 1672 1673 1674 File: as.info, Node: Statements, Next: Constants, Prev: Symbol Intro, Up: Syntax 1675 1676 3.5 Statements 1677 ============== 1678 1679 A "statement" ends at a newline character (`\n') or line separator 1680 character. (The line separator is usually `;', unless this conflicts 1681 with the comment character; *note Machine Dependencies::.) The newline 1682 or separator character is considered part of the preceding statement. 1683 Newlines and separators within character constants are an exception: 1684 they do not end statements. 1685 1686 It is an error to end any statement with end-of-file: the last 1687 character of any input file should be a newline. 1688 1689 An empty statement is allowed, and may include whitespace. It is 1690 ignored. 1691 1692 A statement begins with zero or more labels, optionally followed by a 1693 key symbol which determines what kind of statement it is. The key 1694 symbol determines the syntax of the rest of the statement. If the 1695 symbol begins with a dot `.' then the statement is an assembler 1696 directive: typically valid for any computer. If the symbol begins with 1697 a letter the statement is an assembly language "instruction": it 1698 assembles into a machine language instruction. Different versions of 1699 `as' for different computers recognize different instructions. In 1700 fact, the same symbol may represent a different instruction in a 1701 different computer's assembly language. 1702 1703 A label is a symbol immediately followed by a colon (`:'). 1704 Whitespace before a label or after a colon is permitted, but you may not 1705 have whitespace between a label's symbol and its colon. *Note Labels::. 1706 1707 For HPPA targets, labels need not be immediately followed by a 1708 colon, but the definition of a label must begin in column zero. This 1709 also implies that only one label may be defined on each line. 1710 1711 label: .directive followed by something 1712 another_label: # This is an empty statement. 1713 instruction operand_1, operand_2, ... 1714 1715 1716 File: as.info, Node: Constants, Prev: Statements, Up: Syntax 1717 1718 3.6 Constants 1719 ============= 1720 1721 A constant is a number, written so that its value is known by 1722 inspection, without knowing any context. Like this: 1723 .byte 74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value. 1724 .ascii "Ring the bell\7" # A string constant. 1725 .octa 0x123456789abcdef0123456789ABCDEF0 # A bignum. 1726 .float 0f-314159265358979323846264338327\ 1727 95028841971.693993751E-40 # - pi, a flonum. 1728 1729 * Menu: 1730 1731 * Characters:: Character Constants 1732 * Numbers:: Number Constants 1733 1734 1735 File: as.info, Node: Characters, Next: Numbers, Up: Constants 1736 1737 3.6.1 Character Constants 1738 ------------------------- 1739 1740 There are two kinds of character constants. A "character" stands for 1741 one character in one byte and its value may be used in numeric 1742 expressions. String constants (properly called string _literals_) are 1743 potentially many bytes and their values may not be used in arithmetic 1744 expressions. 1745 1746 * Menu: 1747 1748 * Strings:: Strings 1749 * Chars:: Characters 1750 1751 1752 File: as.info, Node: Strings, Next: Chars, Up: Characters 1753 1754 3.6.1.1 Strings 1755 ............... 1756 1757 A "string" is written between double-quotes. It may contain 1758 double-quotes or null characters. The way to get special characters 1759 into a string is to "escape" these characters: precede them with a 1760 backslash `\' character. For example `\\' represents one backslash: 1761 the first `\' is an escape which tells `as' to interpret the second 1762 character literally as a backslash (which prevents `as' from 1763 recognizing the second `\' as an escape character). The complete list 1764 of escapes follows. 1765 1766 `\b' 1767 Mnemonic for backspace; for ASCII this is octal code 010. 1768 1769 `\f' 1770 Mnemonic for FormFeed; for ASCII this is octal code 014. 1771 1772 `\n' 1773 Mnemonic for newline; for ASCII this is octal code 012. 1774 1775 `\r' 1776 Mnemonic for carriage-Return; for ASCII this is octal code 015. 1777 1778 `\t' 1779 Mnemonic for horizontal Tab; for ASCII this is octal code 011. 1780 1781 `\ DIGIT DIGIT DIGIT' 1782 An octal character code. The numeric code is 3 octal digits. For 1783 compatibility with other Unix systems, 8 and 9 are accepted as 1784 digits: for example, `\008' has the value 010, and `\009' the 1785 value 011. 1786 1787 `\`x' HEX-DIGITS...' 1788 A hex character code. All trailing hex digits are combined. 1789 Either upper or lower case `x' works. 1790 1791 `\\' 1792 Represents one `\' character. 1793 1794 `\"' 1795 Represents one `"' character. Needed in strings to represent this 1796 character, because an unescaped `"' would end the string. 1797 1798 `\ ANYTHING-ELSE' 1799 Any other character when escaped by `\' gives a warning, but 1800 assembles as if the `\' was not present. The idea is that if you 1801 used an escape sequence you clearly didn't want the literal 1802 interpretation of the following character. However `as' has no 1803 other interpretation, so `as' knows it is giving you the wrong 1804 code and warns you of the fact. 1805 1806 Which characters are escapable, and what those escapes represent, 1807 varies widely among assemblers. The current set is what we think the 1808 BSD 4.2 assembler recognizes, and is a subset of what most C compilers 1809 recognize. If you are in doubt, do not use an escape sequence. 1810 1811 1812 File: as.info, Node: Chars, Prev: Strings, Up: Characters 1813 1814 3.6.1.2 Characters 1815 .................. 1816 1817 A single character may be written as a single quote immediately 1818 followed by that character. The same escapes apply to characters as to 1819 strings. So if you want to write the character backslash, you must 1820 write `'\\' where the first `\' escapes the second `\'. As you can 1821 see, the quote is an acute accent, not a grave accent. A newline 1822 immediately following an acute accent is taken as a literal character 1823 and does not count as the end of a statement. The value of a character 1824 constant in a numeric expression is the machine's byte-wide code for 1825 that character. `as' assumes your character code is ASCII: `'A' means 1826 65, `'B' means 66, and so on. 1827 1828 1829 File: as.info, Node: Numbers, Prev: Characters, Up: Constants 1830 1831 3.6.2 Number Constants 1832 ---------------------- 1833 1834 `as' distinguishes three kinds of numbers according to how they are 1835 stored in the target machine. _Integers_ are numbers that would fit 1836 into an `int' in the C language. _Bignums_ are integers, but they are 1837 stored in more than 32 bits. _Flonums_ are floating point numbers, 1838 described below. 1839 1840 * Menu: 1841 1842 * Integers:: Integers 1843 * Bignums:: Bignums 1844 * Flonums:: Flonums 1845 1846 1847 File: as.info, Node: Integers, Next: Bignums, Up: Numbers 1848 1849 3.6.2.1 Integers 1850 ................ 1851 1852 A binary integer is `0b' or `0B' followed by zero or more of the binary 1853 digits `01'. 1854 1855 An octal integer is `0' followed by zero or more of the octal digits 1856 (`01234567'). 1857 1858 A decimal integer starts with a non-zero digit followed by zero or 1859 more digits (`0123456789'). 1860 1861 A hexadecimal integer is `0x' or `0X' followed by one or more 1862 hexadecimal digits chosen from `0123456789abcdefABCDEF'. 1863 1864 Integers have the usual values. To denote a negative integer, use 1865 the prefix operator `-' discussed under expressions (*note Prefix 1866 Operators: Prefix Ops.). 1867 1868 1869 File: as.info, Node: Bignums, Next: Flonums, Prev: Integers, Up: Numbers 1870 1871 3.6.2.2 Bignums 1872 ............... 1873 1874 A "bignum" has the same syntax and semantics as an integer except that 1875 the number (or its negative) takes more than 32 bits to represent in 1876 binary. The distinction is made because in some places integers are 1877 permitted while bignums are not. 1878 1879 1880 File: as.info, Node: Flonums, Prev: Bignums, Up: Numbers 1881 1882 3.6.2.3 Flonums 1883 ............... 1884 1885 A "flonum" represents a floating point number. The translation is 1886 indirect: a decimal floating point number from the text is converted by 1887 `as' to a generic binary floating point number of more than sufficient 1888 precision. This generic floating point number is converted to a 1889 particular computer's floating point format (or formats) by a portion 1890 of `as' specialized to that computer. 1891 1892 A flonum is written by writing (in order) 1893 * The digit `0'. (`0' is optional on the HPPA.) 1894 1895 * A letter, to tell `as' the rest of the number is a flonum. `e' is 1896 recommended. Case is not important. 1897 1898 On the H8/300, Renesas / SuperH SH, and AMD 29K architectures, the 1899 letter must be one of the letters `DFPRSX' (in upper or lower 1900 case). 1901 1902 On the ARC, the letter must be one of the letters `DFRS' (in upper 1903 or lower case). 1904 1905 On the Intel 960 architecture, the letter must be one of the 1906 letters `DFT' (in upper or lower case). 1907 1908 On the HPPA architecture, the letter must be `E' (upper case only). 1909 1910 * An optional sign: either `+' or `-'. 1911 1912 * An optional "integer part": zero or more decimal digits. 1913 1914 * An optional "fractional part": `.' followed by zero or more 1915 decimal digits. 1916 1917 * An optional exponent, consisting of: 1918 1919 * An `E' or `e'. 1920 1921 * Optional sign: either `+' or `-'. 1922 1923 * One or more decimal digits. 1924 1925 1926 At least one of the integer part or the fractional part must be 1927 present. The floating point number has the usual base-10 value. 1928 1929 `as' does all processing using integers. Flonums are computed 1930 independently of any floating point hardware in the computer running 1931 `as'. 1932 1933 1934 File: as.info, Node: Sections, Next: Symbols, Prev: Syntax, Up: Top 1935 1936 4 Sections and Relocation 1937 ************************* 1938 1939 * Menu: 1940 1941 * Secs Background:: Background 1942 * Ld Sections:: Linker Sections 1943 * As Sections:: Assembler Internal Sections 1944 * Sub-Sections:: Sub-Sections 1945 * bss:: bss Section 1946 1947 1948 File: as.info, Node: Secs Background, Next: Ld Sections, Up: Sections 1949 1950 4.1 Background 1951 ============== 1952 1953 Roughly, a section is a range of addresses, with no gaps; all data "in" 1954 those addresses is treated the same for some particular purpose. For 1955 example there may be a "read only" section. 1956 1957 The linker `ld' reads many object files (partial programs) and 1958 combines their contents to form a runnable program. When `as' emits an 1959 object file, the partial program is assumed to start at address 0. 1960 `ld' assigns the final addresses for the partial program, so that 1961 different partial programs do not overlap. This is actually an 1962 oversimplification, but it suffices to explain how `as' uses sections. 1963 1964 `ld' moves blocks of bytes of your program to their run-time 1965 addresses. These blocks slide to their run-time addresses as rigid 1966 units; their length does not change and neither does the order of bytes 1967 within them. Such a rigid unit is called a _section_. Assigning 1968 run-time addresses to sections is called "relocation". It includes the 1969 task of adjusting mentions of object-file addresses so they refer to 1970 the proper run-time addresses. For the H8/300, and for the Renesas / 1971 SuperH SH, `as' pads sections if needed to ensure they end on a word 1972 (sixteen bit) boundary. 1973 1974 An object file written by `as' has at least three sections, any of 1975 which may be empty. These are named "text", "data" and "bss" sections. 1976 1977 When it generates COFF or ELF output, `as' can also generate 1978 whatever other named sections you specify using the `.section' 1979 directive (*note `.section': Section.). If you do not use any 1980 directives that place output in the `.text' or `.data' sections, these 1981 sections still exist, but are empty. 1982 1983 When `as' generates SOM or ELF output for the HPPA, `as' can also 1984 generate whatever other named sections you specify using the `.space' 1985 and `.subspace' directives. See `HP9000 Series 800 Assembly Language 1986 Reference Manual' (HP 92432-90001) for details on the `.space' and 1987 `.subspace' assembler directives. 1988 1989 Additionally, `as' uses different names for the standard text, data, 1990 and bss sections when generating SOM output. Program text is placed 1991 into the `$CODE$' section, data into `$DATA$', and BSS into `$BSS$'. 1992 1993 Within the object file, the text section starts at address `0', the 1994 data section follows, and the bss section follows the data section. 1995 1996 When generating either SOM or ELF output files on the HPPA, the text 1997 section starts at address `0', the data section at address `0x4000000', 1998 and the bss section follows the data section. 1999 2000 To let `ld' know which data changes when the sections are relocated, 2001 and how to change that data, `as' also writes to the object file 2002 details of the relocation needed. To perform relocation `ld' must 2003 know, each time an address in the object file is mentioned: 2004 * Where in the object file is the beginning of this reference to an 2005 address? 2006 2007 * How long (in bytes) is this reference? 2008 2009 * Which section does the address refer to? What is the numeric 2010 value of 2011 (ADDRESS) - (START-ADDRESS OF SECTION)? 2012 2013 * Is the reference to an address "Program-Counter relative"? 2014 2015 In fact, every address `as' ever uses is expressed as 2016 (SECTION) + (OFFSET INTO SECTION) 2017 Further, most expressions `as' computes have this section-relative 2018 nature. (For some object formats, such as SOM for the HPPA, some 2019 expressions are symbol-relative instead.) 2020 2021 In this manual we use the notation {SECNAME N} to mean "offset N 2022 into section SECNAME." 2023 2024 Apart from text, data and bss sections you need to know about the 2025 "absolute" section. When `ld' mixes partial programs, addresses in the 2026 absolute section remain unchanged. For example, address `{absolute 0}' 2027 is "relocated" to run-time address 0 by `ld'. Although the linker 2028 never arranges two partial programs' data sections with overlapping 2029 addresses after linking, _by definition_ their absolute sections must 2030 overlap. Address `{absolute 239}' in one part of a program is always 2031 the same address when the program is running as address `{absolute 2032 239}' in any other part of the program. 2033 2034 The idea of sections is extended to the "undefined" section. Any 2035 address whose section is unknown at assembly time is by definition 2036 rendered {undefined U}--where U is filled in later. Since numbers are 2037 always defined, the only way to generate an undefined address is to 2038 mention an undefined symbol. A reference to a named common block would 2039 be such a symbol: its value is unknown at assembly time so it has 2040 section _undefined_. 2041 2042 By analogy the word _section_ is used to describe groups of sections 2043 in the linked program. `ld' puts all partial programs' text sections 2044 in contiguous addresses in the linked program. It is customary to 2045 refer to the _text section_ of a program, meaning all the addresses of 2046 all partial programs' text sections. Likewise for data and bss 2047 sections. 2048 2049 Some sections are manipulated by `ld'; others are invented for use 2050 of `as' and have no meaning except during assembly. 2051 2052 2053 File: as.info, Node: Ld Sections, Next: As Sections, Prev: Secs Background, Up: Sections 2054 2055 4.2 Linker Sections 2056 =================== 2057 2058 `ld' deals with just four kinds of sections, summarized below. 2059 2060 *named sections* 2061 *text section* 2062 *data section* 2063 These sections hold your program. `as' and `ld' treat them as 2064 separate but equal sections. Anything you can say of one section 2065 is true of another. When the program is running, however, it is 2066 customary for the text section to be unalterable. The text 2067 section is often shared among processes: it contains instructions, 2068 constants and the like. The data section of a running program is 2069 usually alterable: for example, C variables would be stored in the 2070 data section. 2071 2072 *bss section* 2073 This section contains zeroed bytes when your program begins 2074 running. It is used to hold uninitialized variables or common 2075 storage. The length of each partial program's bss section is 2076 important, but because it starts out containing zeroed bytes there 2077 is no need to store explicit zero bytes in the object file. The 2078 bss section was invented to eliminate those explicit zeros from 2079 object files. 2080 2081 *absolute section* 2082 Address 0 of this section is always "relocated" to runtime address 2083 0. This is useful if you want to refer to an address that `ld' 2084 must not change when relocating. In this sense we speak of 2085 absolute addresses being "unrelocatable": they do not change 2086 during relocation. 2087 2088 *undefined section* 2089 This "section" is a catch-all for address references to objects 2090 not in the preceding sections. 2091 2092 An idealized example of three relocatable sections follows. The 2093 example uses the traditional section names `.text' and `.data'. Memory 2094 addresses are on the horizontal axis. 2095 2096 +-----+----+--+ 2097 partial program # 1: |ttttt|dddd|00| 2098 +-----+----+--+ 2099 2100 text data bss 2101 seg. seg. seg. 2102 2103 +---+---+---+ 2104 partial program # 2: |TTT|DDD|000| 2105 +---+---+---+ 2106 2107 +--+---+-----+--+----+---+-----+~~ 2108 linked program: | |TTT|ttttt| |dddd|DDD|00000| 2109 +--+---+-----+--+----+---+-----+~~ 2110 2111 addresses: 0 ... 2112 2113 2114 File: as.info, Node: As Sections, Next: Sub-Sections, Prev: Ld Sections, Up: Sections 2115 2116 4.3 Assembler Internal Sections 2117 =============================== 2118 2119 These sections are meant only for the internal use of `as'. They have 2120 no meaning at run-time. You do not really need to know about these 2121 sections for most purposes; but they can be mentioned in `as' warning 2122 messages, so it might be helpful to have an idea of their meanings to 2123 `as'. These sections are used to permit the value of every expression 2124 in your assembly language program to be a section-relative address. 2125 2126 ASSEMBLER-INTERNAL-LOGIC-ERROR! 2127 An internal assembler logic error has been found. This means 2128 there is a bug in the assembler. 2129 2130 expr section 2131 The assembler stores complex expression internally as combinations 2132 of symbols. When it needs to represent an expression as a symbol, 2133 it puts it in the expr section. 2134 2135 2136 File: as.info, Node: Sub-Sections, Next: bss, Prev: As Sections, Up: Sections 2137 2138 4.4 Sub-Sections 2139 ================ 2140 2141 Assembled bytes conventionally fall into two sections: text and data. 2142 You may have separate groups of data in named sections that you want to 2143 end up near to each other in the object file, even though they are not 2144 contiguous in the assembler source. `as' allows you to use 2145 "subsections" for this purpose. Within each section, there can be 2146 numbered subsections with values from 0 to 8192. Objects assembled 2147 into the same subsection go into the object file together with other 2148 objects in the same subsection. For example, a compiler might want to 2149 store constants in the text section, but might not want to have them 2150 interspersed with the program being assembled. In this case, the 2151 compiler could issue a `.text 0' before each section of code being 2152 output, and a `.text 1' before each group of constants being output. 2153 2154 Subsections are optional. If you do not use subsections, everything 2155 goes in subsection number zero. 2156 2157 Each subsection is zero-padded up to a multiple of four bytes. 2158 (Subsections may be padded a different amount on different flavors of 2159 `as'.) 2160 2161 Subsections appear in your object file in numeric order, lowest 2162 numbered to highest. (All this to be compatible with other people's 2163 assemblers.) The object file contains no representation of 2164 subsections; `ld' and other programs that manipulate object files see 2165 no trace of them. They just see all your text subsections as a text 2166 section, and all your data subsections as a data section. 2167 2168 To specify which subsection you want subsequent statements assembled 2169 into, use a numeric argument to specify it, in a `.text EXPRESSION' or 2170 a `.data EXPRESSION' statement. When generating COFF output, you can 2171 also use an extra subsection argument with arbitrary named sections: 2172 `.section NAME, EXPRESSION'. When generating ELF output, you can also 2173 use the `.subsection' directive (*note SubSection::) to specify a 2174 subsection: `.subsection EXPRESSION'. EXPRESSION should be an absolute 2175 expression. (*Note Expressions::.) If you just say `.text' then 2176 `.text 0' is assumed. Likewise `.data' means `.data 0'. Assembly 2177 begins in `text 0'. For instance: 2178 .text 0 # The default subsection is text 0 anyway. 2179 .ascii "This lives in the first text subsection. *" 2180 .text 1 2181 .ascii "But this lives in the second text subsection." 2182 .data 0 2183 .ascii "This lives in the data section," 2184 .ascii "in the first data subsection." 2185 .text 0 2186 .ascii "This lives in the first text section," 2187 .ascii "immediately following the asterisk (*)." 2188 2189 Each section has a "location counter" incremented by one for every 2190 byte assembled into that section. Because subsections are merely a 2191 convenience restricted to `as' there is no concept of a subsection 2192 location counter. There is no way to directly manipulate a location 2193 counter--but the `.align' directive changes it, and any label 2194 definition captures its current value. The location counter of the 2195 section where statements are being assembled is said to be the "active" 2196 location counter. 2197 2198 2199 File: as.info, Node: bss, Prev: Sub-Sections, Up: Sections 2200 2201 4.5 bss Section 2202 =============== 2203 2204 The bss section is used for local common variable storage. You may 2205 allocate address space in the bss section, but you may not dictate data 2206 to load into it before your program executes. When your program starts 2207 running, all the contents of the bss section are zeroed bytes. 2208 2209 The `.lcomm' pseudo-op defines a symbol in the bss section; see 2210 *Note `.lcomm': Lcomm. 2211 2212 The `.comm' pseudo-op may be used to declare a common symbol, which 2213 is another form of uninitialized symbol; see *Note `.comm': Comm. 2214 2215 When assembling for a target which supports multiple sections, such 2216 as ELF or COFF, you may switch into the `.bss' section and define 2217 symbols as usual; see *Note `.section': Section. You may only assemble 2218 zero values into the section. Typically the section will only contain 2219 symbol definitions and `.skip' directives (*note `.skip': Skip.). 2220 2221 2222 File: as.info, Node: Symbols, Next: Expressions, Prev: Sections, Up: Top 2223 2224 5 Symbols 2225 ********* 2226 2227 Symbols are a central concept: the programmer uses symbols to name 2228 things, the linker uses symbols to link, and the debugger uses symbols 2229 to debug. 2230 2231 _Warning:_ `as' does not place symbols in the object file in the 2232 same order they were declared. This may break some debuggers. 2233 2234 * Menu: 2235 2236 * Labels:: Labels 2237 * Setting Symbols:: Giving Symbols Other Values 2238 * Symbol Names:: Symbol Names 2239 * Dot:: The Special Dot Symbol 2240 * Symbol Attributes:: Symbol Attributes 2241 2242 2243 File: as.info, Node: Labels, Next: Setting Symbols, Up: Symbols 2244 2245 5.1 Labels 2246 ========== 2247 2248 A "label" is written as a symbol immediately followed by a colon `:'. 2249 The symbol then represents the current value of the active location 2250 counter, and is, for example, a suitable instruction operand. You are 2251 warned if you use the same symbol to represent two different locations: 2252 the first definition overrides any other definitions. 2253 2254 On the HPPA, the usual form for a label need not be immediately 2255 followed by a colon, but instead must start in column zero. Only one 2256 label may be defined on a single line. To work around this, the HPPA 2257 version of `as' also provides a special directive `.label' for defining 2258 labels more flexibly. 2259 2260 2261 File: as.info, Node: Setting Symbols, Next: Symbol Names, Prev: Labels, Up: Symbols 2262 2263 5.2 Giving Symbols Other Values 2264 =============================== 2265 2266 A symbol can be given an arbitrary value by writing a symbol, followed 2267 by an equals sign `=', followed by an expression (*note Expressions::). 2268 This is equivalent to using the `.set' directive. *Note `.set': Set. 2269 In the same way, using a double equals sign `='`=' here represents an 2270 equivalent of the `.eqv' directive. *Note `.eqv': Eqv. 2271 2272 2273 File: as.info, Node: Symbol Names, Next: Dot, Prev: Setting Symbols, Up: Symbols 2274 2275 5.3 Symbol Names 2276 ================ 2277 2278 Symbol names begin with a letter or with one of `._'. On most 2279 machines, you can also use `$' in symbol names; exceptions are noted in 2280 *Note Machine Dependencies::. That character may be followed by any 2281 string of digits, letters, dollar signs (unless otherwise noted in 2282 *Note Machine Dependencies::), and underscores. 2283 2284 Case of letters is significant: `foo' is a different symbol name than 2285 `Foo'. 2286 2287 Each symbol has exactly one name. Each name in an assembly language 2288 program refers to exactly one symbol. You may use that symbol name any 2289 number of times in a program. 2290 2291 Local Symbol Names 2292 ------------------ 2293 2294 Local symbols help compilers and programmers use names temporarily. 2295 They create symbols which are guaranteed to be unique over the entire 2296 scope of the input source code and which can be referred to by a simple 2297 notation. To define a local symbol, write a label of the form `N:' 2298 (where N represents any positive integer). To refer to the most recent 2299 previous definition of that symbol write `Nb', using the same number as 2300 when you defined the label. To refer to the next definition of a local 2301 label, write `Nf'-- The `b' stands for"backwards" and the `f' stands 2302 for "forwards". 2303 2304 There is no restriction on how you can use these labels, and you can 2305 reuse them too. So that it is possible to repeatedly define the same 2306 local label (using the same number `N'), although you can only refer to 2307 the most recently defined local label of that number (for a backwards 2308 reference) or the next definition of a specific local label for a 2309 forward reference. It is also worth noting that the first 10 local 2310 labels (`0:'...`9:') are implemented in a slightly more efficient 2311 manner than the others. 2312 2313 Here is an example: 2314 2315 1: branch 1f 2316 2: branch 1b 2317 1: branch 2f 2318 2: branch 1b 2319 2320 Which is the equivalent of: 2321 2322 label_1: branch label_3 2323 label_2: branch label_1 2324 label_3: branch label_4 2325 label_4: branch label_3 2326 2327 Local symbol names are only a notational device. They are 2328 immediately transformed into more conventional symbol names before the 2329 assembler uses them. The symbol names stored in the symbol table, 2330 appearing in error messages and optionally emitted to the object file. 2331 The names are constructed using these parts: 2332 2333 `L' 2334 All local labels begin with `L'. Normally both `as' and `ld' 2335 forget symbols that start with `L'. These labels are used for 2336 symbols you are never intended to see. If you use the `-L' option 2337 then `as' retains these symbols in the object file. If you also 2338 instruct `ld' to retain these symbols, you may use them in 2339 debugging. 2340 2341 `NUMBER' 2342 This is the number that was used in the local label definition. 2343 So if the label is written `55:' then the number is `55'. 2344 2345 `C-B' 2346 This unusual character is included so you do not accidentally 2347 invent a symbol of the same name. The character has ASCII value 2348 of `\002' (control-B). 2349 2350 `_ordinal number_' 2351 This is a serial number to keep the labels distinct. The first 2352 definition of `0:' gets the number `1'. The 15th definition of 2353 `0:' gets the number `15', and so on. Likewise the first 2354 definition of `1:' gets the number `1' and its 15th defintion gets 2355 `15' as well. 2356 2357 So for example, the first `1:' is named `L1C-B1', the 44th `3:' is 2358 named `L3C-B44'. 2359 2360 Dollar Local Labels 2361 ------------------- 2362 2363 `as' also supports an even more local form of local labels called 2364 dollar labels. These labels go out of scope (ie they become undefined) 2365 as soon as a non-local label is defined. Thus they remain valid for 2366 only a small region of the input source code. Normal local labels, by 2367 contrast, remain in scope for the entire file, or until they are 2368 redefined by another occurrence of the same local label. 2369 2370 Dollar labels are defined in exactly the same way as ordinary local 2371 labels, except that instead of being terminated by a colon, they are 2372 terminated by a dollar sign. eg `55$'. 2373 2374 They can also be distinguished from ordinary local labels by their 2375 transformed name which uses ASCII character `\001' (control-A) as the 2376 magic character to distinguish them from ordinary labels. Thus the 5th 2377 defintion of `6$' is named `L6C-A5'. 2378 2379 2380 File: as.info, Node: Dot, Next: Symbol Attributes, Prev: Symbol Names, Up: Symbols 2381 2382 5.4 The Special Dot Symbol 2383 ========================== 2384 2385 The special symbol `.' refers to the current address that `as' is 2386 assembling into. Thus, the expression `melvin: .long .' defines 2387 `melvin' to contain its own address. Assigning a value to `.' is 2388 treated the same as a `.org' directive. Thus, the expression `.=.+4' 2389 is the same as saying `.space 4'. 2390 2391 2392 File: as.info, Node: Symbol Attributes, Prev: Dot, Up: Symbols 2393 2394 5.5 Symbol Attributes 2395 ===================== 2396 2397 Every symbol has, as well as its name, the attributes "Value" and 2398 "Type". Depending on output format, symbols can also have auxiliary 2399 attributes. 2400 2401 If you use a symbol without defining it, `as' assumes zero for all 2402 these attributes, and probably won't warn you. This makes the symbol 2403 an externally defined symbol, which is generally what you would want. 2404 2405 * Menu: 2406 2407 * Symbol Value:: Value 2408 * Symbol Type:: Type 2409 2410 2411 * a.out Symbols:: Symbol Attributes: `a.out' 2412 2413 * COFF Symbols:: Symbol Attributes for COFF 2414 2415 * SOM Symbols:: Symbol Attributes for SOM 2416 2417 2418 File: as.info, Node: Symbol Value, Next: Symbol Type, Up: Symbol Attributes 2419 2420 5.5.1 Value 2421 ----------- 2422 2423 The value of a symbol is (usually) 32 bits. For a symbol which labels a 2424 location in the text, data, bss or absolute sections the value is the 2425 number of addresses from the start of that section to the label. 2426 Naturally for text, data and bss sections the value of a symbol changes 2427 as `ld' changes section base addresses during linking. Absolute 2428 symbols' values do not change during linking: that is why they are 2429 called absolute. 2430 2431 The value of an undefined symbol is treated in a special way. If it 2432 is 0 then the symbol is not defined in this assembler source file, and 2433 `ld' tries to determine its value from other files linked into the same 2434 program. You make this kind of symbol simply by mentioning a symbol 2435 name without defining it. A non-zero value represents a `.comm' common 2436 declaration. The value is how much common storage to reserve, in bytes 2437 (addresses). The symbol refers to the first address of the allocated 2438 storage. 2439 2440 2441 File: as.info, Node: Symbol Type, Next: a.out Symbols, Prev: Symbol Value, Up: Symbol Attributes 2442 2443 5.5.2 Type 2444 ---------- 2445 2446 The type attribute of a symbol contains relocation (section) 2447 information, any flag settings indicating that a symbol is external, and 2448 (optionally), other information for linkers and debuggers. The exact 2449 format depends on the object-code output format in use. 2450 2451 2452 File: as.info, Node: a.out Symbols, Next: COFF Symbols, Prev: Symbol Type, Up: Symbol Attributes 2453 2454 5.5.3 Symbol Attributes: `a.out' 2455 -------------------------------- 2456 2457 * Menu: 2458 2459 * Symbol Desc:: Descriptor 2460 * Symbol Other:: Other 2461 2462 2463 File: as.info, Node: Symbol Desc, Next: Symbol Other, Up: a.out Symbols 2464 2465 5.5.3.1 Descriptor 2466 .................. 2467 2468 This is an arbitrary 16-bit value. You may establish a symbol's 2469 descriptor value by using a `.desc' statement (*note `.desc': Desc.). 2470 A descriptor value means nothing to `as'. 2471 2472 2473 File: as.info, Node: Symbol Other, Prev: Symbol Desc, Up: a.out Symbols 2474 2475 5.5.3.2 Other 2476 ............. 2477 2478 This is an arbitrary 8-bit value. It means nothing to `as'. 2479 2480 2481 File: as.info, Node: COFF Symbols, Next: SOM Symbols, Prev: a.out Symbols, Up: Symbol Attributes 2482 2483 5.5.4 Symbol Attributes for COFF 2484 -------------------------------- 2485 2486 The COFF format supports a multitude of auxiliary symbol attributes; 2487 like the primary symbol attributes, they are set between `.def' and 2488 `.endef' directives. 2489 2490 5.5.4.1 Primary Attributes 2491 .......................... 2492 2493 The symbol name is set with `.def'; the value and type, respectively, 2494 with `.val' and `.type'. 2495 2496 5.5.4.2 Auxiliary Attributes 2497 ............................ 2498 2499 The `as' directives `.dim', `.line', `.scl', `.size', `.tag', and 2500 `.weak' can generate auxiliary symbol table information for COFF. 2501 2502 2503 File: as.info, Node: SOM Symbols, Prev: COFF Symbols, Up: Symbol Attributes 2504 2505 5.5.5 Symbol Attributes for SOM 2506 ------------------------------- 2507 2508 The SOM format for the HPPA supports a multitude of symbol attributes 2509 set with the `.EXPORT' and `.IMPORT' directives. 2510 2511 The attributes are described in `HP9000 Series 800 Assembly Language 2512 Reference Manual' (HP 92432-90001) under the `IMPORT' and `EXPORT' 2513 assembler directive documentation. 2514 2515 2516 File: as.info, Node: Expressions, Next: Pseudo Ops, Prev: Symbols, Up: Top 2517 2518 6 Expressions 2519 ************* 2520 2521 An "expression" specifies an address or numeric value. Whitespace may 2522 precede and/or follow an expression. 2523 2524 The result of an expression must be an absolute number, or else an 2525 offset into a particular section. If an expression is not absolute, 2526 and there is not enough information when `as' sees the expression to 2527 know its section, a second pass over the source program might be 2528 necessary to interpret the expression--but the second pass is currently 2529 not implemented. `as' aborts with an error message in this situation. 2530 2531 * Menu: 2532 2533 * Empty Exprs:: Empty Expressions 2534 * Integer Exprs:: Integer Expressions 2535 2536 2537 File: as.info, Node: Empty Exprs, Next: Integer Exprs, Up: Expressions 2538 2539 6.1 Empty Expressions 2540 ===================== 2541 2542 An empty expression has no value: it is just whitespace or null. 2543 Wherever an absolute expression is required, you may omit the 2544 expression, and `as' assumes a value of (absolute) 0. This is 2545 compatible with other assemblers. 2546 2547 2548 File: as.info, Node: Integer Exprs, Prev: Empty Exprs, Up: Expressions 2549 2550 6.2 Integer Expressions 2551 ======================= 2552 2553 An "integer expression" is one or more _arguments_ delimited by 2554 _operators_. 2555 2556 * Menu: 2557 2558 * Arguments:: Arguments 2559 * Operators:: Operators 2560 * Prefix Ops:: Prefix Operators 2561 * Infix Ops:: Infix Operators 2562 2563 2564 File: as.info, Node: Arguments, Next: Operators, Up: Integer Exprs 2565 2566 6.2.1 Arguments 2567 --------------- 2568 2569 "Arguments" are symbols, numbers or subexpressions. In other contexts 2570 arguments are sometimes called "arithmetic operands". In this manual, 2571 to avoid confusing them with the "instruction operands" of the machine 2572 language, we use the term "argument" to refer to parts of expressions 2573 only, reserving the word "operand" to refer only to machine instruction 2574 operands. 2575 2576 Symbols are evaluated to yield {SECTION NNN} where SECTION is one of 2577 text, data, bss, absolute, or undefined. NNN is a signed, 2's 2578 complement 32 bit integer. 2579 2580 Numbers are usually integers. 2581 2582 A number can be a flonum or bignum. In this case, you are warned 2583 that only the low order 32 bits are used, and `as' pretends these 32 2584 bits are an integer. You may write integer-manipulating instructions 2585 that act on exotic constants, compatible with other assemblers. 2586 2587 Subexpressions are a left parenthesis `(' followed by an integer 2588 expression, followed by a right parenthesis `)'; or a prefix operator 2589 followed by an argument. 2590 2591 2592 File: as.info, Node: Operators, Next: Prefix Ops, Prev: Arguments, Up: Integer Exprs 2593 2594 6.2.2 Operators 2595 --------------- 2596 2597 "Operators" are arithmetic functions, like `+' or `%'. Prefix 2598 operators are followed by an argument. Infix operators appear between 2599 their arguments. Operators may be preceded and/or followed by 2600 whitespace. 2601 2602 2603 File: as.info, Node: Prefix Ops, Next: Infix Ops, Prev: Operators, Up: Integer Exprs 2604 2605 6.2.3 Prefix Operator 2606 --------------------- 2607 2608 `as' has the following "prefix operators". They each take one 2609 argument, which must be absolute. 2610 2611 `-' 2612 "Negation". Two's complement negation. 2613 2614 `~' 2615 "Complementation". Bitwise not. 2616 2617 2618 File: as.info, Node: Infix Ops, Prev: Prefix Ops, Up: Integer Exprs 2619 2620 6.2.4 Infix Operators 2621 --------------------- 2622 2623 "Infix operators" take two arguments, one on either side. Operators 2624 have precedence, but operations with equal precedence are performed left 2625 to right. Apart from `+' or `-', both arguments must be absolute, and 2626 the result is absolute. 2627 2628 1. Highest Precedence 2629 2630 `*' 2631 "Multiplication". 2632 2633 `/' 2634 "Division". Truncation is the same as the C operator `/' 2635 2636 `%' 2637 "Remainder". 2638 2639 `<<' 2640 "Shift Left". Same as the C operator `<<'. 2641 2642 `>>' 2643 "Shift Right". Same as the C operator `>>'. 2644 2645 2. Intermediate precedence 2646 2647 `|' 2648 "Bitwise Inclusive Or". 2649 2650 `&' 2651 "Bitwise And". 2652 2653 `^' 2654 "Bitwise Exclusive Or". 2655 2656 `!' 2657 "Bitwise Or Not". 2658 2659 3. Low Precedence 2660 2661 `+' 2662 "Addition". If either argument is absolute, the result has 2663 the section of the other argument. You may not add together 2664 arguments from different sections. 2665 2666 `-' 2667 "Subtraction". If the right argument is absolute, the result 2668 has the section of the left argument. If both arguments are 2669 in the same section, the result is absolute. You may not 2670 subtract arguments from different sections. 2671 2672 `==' 2673 "Is Equal To" 2674 2675 `<>' 2676 `!=' 2677 "Is Not Equal To" 2678 2679 `<' 2680 "Is Less Than" 2681 2682 `>' 2683 "Is Greater Than" 2684 2685 `>=' 2686 "Is Greater Than Or Equal To" 2687 2688 `<=' 2689 "Is Less Than Or Equal To" 2690 2691 The comparison operators can be used as infix operators. A 2692 true results has a value of -1 whereas a false result has a 2693 value of 0. Note, these operators perform signed 2694 comparisons. 2695 2696 4. Lowest Precedence 2697 2698 `&&' 2699 "Logical And". 2700 2701 `||' 2702 "Logical Or". 2703 2704 These two logical operations can be used to combine the 2705 results of sub expressions. Note, unlike the comparison 2706 operators a true result returns a value of 1 but a false 2707 results does still return 0. Also note that the logical or 2708 operator has a slightly lower precedence than logical and. 2709 2710 2711 In short, it's only meaningful to add or subtract the _offsets_ in an 2712 address; you can only have a defined section in one of the two 2713 arguments. 2714 2715 2716 File: as.info, Node: Pseudo Ops, Next: Machine Dependencies, Prev: Expressions, Up: Top 2717 2718 7 Assembler Directives 2719 ********************** 2720 2721 All assembler directives have names that begin with a period (`.'). 2722 The rest of the name is letters, usually in lower case. 2723 2724 This chapter discusses directives that are available regardless of 2725 the target machine configuration for the GNU assembler. Some machine 2726 configurations provide additional directives. *Note Machine 2727 Dependencies::. 2728 2729 * Menu: 2730 2731 * Abort:: `.abort' 2732 2733 * ABORT:: `.ABORT' 2734 2735 * Align:: `.align ABS-EXPR , ABS-EXPR' 2736 * Altmacro:: `.altmacro' 2737 * Ascii:: `.ascii "STRING"'... 2738 * Asciz:: `.asciz "STRING"'... 2739 * Balign:: `.balign ABS-EXPR , ABS-EXPR' 2740 * Byte:: `.byte EXPRESSIONS' 2741 * Comm:: `.comm SYMBOL , LENGTH ' 2742 2743 * CFI directives:: `.cfi_startproc', `.cfi_endproc', etc. 2744 2745 * Data:: `.data SUBSECTION' 2746 2747 * Def:: `.def NAME' 2748 2749 * Desc:: `.desc SYMBOL, ABS-EXPRESSION' 2750 2751 * Dim:: `.dim' 2752 2753 * Double:: `.double FLONUMS' 2754 * Eject:: `.eject' 2755 * Else:: `.else' 2756 * Elseif:: `.elseif' 2757 * End:: `.end' 2758 2759 * Endef:: `.endef' 2760 2761 * Endfunc:: `.endfunc' 2762 * Endif:: `.endif' 2763 * Equ:: `.equ SYMBOL, EXPRESSION' 2764 * Equiv:: `.equiv SYMBOL, EXPRESSION' 2765 * Eqv:: `.eqv SYMBOL, EXPRESSION' 2766 * Err:: `.err' 2767 * Error:: `.error STRING' 2768 * Exitm:: `.exitm' 2769 * Extern:: `.extern' 2770 * Fail:: `.fail' 2771 2772 * File:: `.file STRING' 2773 2774 * Fill:: `.fill REPEAT , SIZE , VALUE' 2775 * Float:: `.float FLONUMS' 2776 * Func:: `.func' 2777 * Global:: `.global SYMBOL', `.globl SYMBOL' 2778 2779 * Hidden:: `.hidden NAMES' 2780 2781 * hword:: `.hword EXPRESSIONS' 2782 * Ident:: `.ident' 2783 * If:: `.if ABSOLUTE EXPRESSION' 2784 * Incbin:: `.incbin "FILE"[,SKIP[,COUNT]]' 2785 * Include:: `.include "FILE"' 2786 * Int:: `.int EXPRESSIONS' 2787 2788 * Internal:: `.internal NAMES' 2789 2790 * Irp:: `.irp SYMBOL,VALUES'... 2791 * Irpc:: `.irpc SYMBOL,VALUES'... 2792 * Lcomm:: `.lcomm SYMBOL , LENGTH' 2793 * Lflags:: `.lflags' 2794 2795 * Line:: `.line LINE-NUMBER' 2796 2797 * Linkonce:: `.linkonce [TYPE]' 2798 * List:: `.list' 2799 * Ln:: `.ln LINE-NUMBER' 2800 2801 * LNS directives:: `.file', `.loc', etc. 2802 2803 * Long:: `.long EXPRESSIONS' 2804 2805 * Macro:: `.macro NAME ARGS'... 2806 * MRI:: `.mri VAL' 2807 * Noaltmacro:: `.noaltmacro' 2808 * Nolist:: `.nolist' 2809 * Octa:: `.octa BIGNUMS' 2810 * Org:: `.org NEW-LC , FILL' 2811 * P2align:: `.p2align ABS-EXPR , ABS-EXPR' 2812 2813 * PopSection:: `.popsection' 2814 * Previous:: `.previous' 2815 2816 * Print:: `.print STRING' 2817 2818 * Protected:: `.protected NAMES' 2819 2820 * Psize:: `.psize LINES, COLUMNS' 2821 * Purgem:: `.purgem NAME' 2822 2823 * PushSection:: `.pushsection NAME' 2824 2825 * Quad:: `.quad BIGNUMS' 2826 * Rept:: `.rept COUNT' 2827 * Sbttl:: `.sbttl "SUBHEADING"' 2828 2829 * Scl:: `.scl CLASS' 2830 2831 * Section:: `.section NAME' 2832 2833 * Set:: `.set SYMBOL, EXPRESSION' 2834 * Short:: `.short EXPRESSIONS' 2835 * Single:: `.single FLONUMS' 2836 2837 * Size:: `.size [NAME , EXPRESSION]' 2838 2839 * Skip:: `.skip SIZE , FILL' 2840 * Sleb128:: `.sleb128 EXPRESSIONS' 2841 * Space:: `.space SIZE , FILL' 2842 2843 * Stab:: `.stabd, .stabn, .stabs' 2844 2845 * String:: `.string "STR"' 2846 * Struct:: `.struct EXPRESSION' 2847 2848 * SubSection:: `.subsection' 2849 * Symver:: `.symver NAME,NAME2@NODENAME' 2850 2851 2852 * Tag:: `.tag STRUCTNAME' 2853 2854 * Text:: `.text SUBSECTION' 2855 * Title:: `.title "HEADING"' 2856 2857 * Type:: `.type <INT | NAME , TYPE DESCRIPTION>' 2858 2859 * Uleb128:: `.uleb128 EXPRESSIONS' 2860 2861 * Val:: `.val ADDR' 2862 2863 2864 * Version:: `.version "STRING"' 2865 * VTableEntry:: `.vtable_entry TABLE, OFFSET' 2866 * VTableInherit:: `.vtable_inherit CHILD, PARENT' 2867 2868 * Warning:: `.warning STRING' 2869 * Weak:: `.weak NAMES' 2870 * Weakref:: `.weakref ALIAS, SYMBOL' 2871 * Word:: `.word EXPRESSIONS' 2872 * Deprecated:: Deprecated Directives 2873 2874 2875 File: as.info, Node: Abort, Next: ABORT, Up: Pseudo Ops 2876 2877 7.1 `.abort' 2878 ============ 2879 2880 This directive stops the assembly immediately. It is for compatibility 2881 with other assemblers. The original idea was that the assembly 2882 language source would be piped into the assembler. If the sender of 2883 the source quit, it could use this directive tells `as' to quit also. 2884 One day `.abort' will not be supported. 2885 2886 2887 File: as.info, Node: ABORT, Next: Align, Prev: Abort, Up: Pseudo Ops 2888 2889 7.2 `.ABORT' 2890 ============ 2891 2892 When producing COFF output, `as' accepts this directive as a synonym 2893 for `.abort'. 2894 2895 2896 File: as.info, Node: Align, Next: Altmacro, Prev: ABORT, Up: Pseudo Ops 2897 2898 7.3 `.align ABS-EXPR, ABS-EXPR, ABS-EXPR' 2899 ========================================= 2900 2901 Pad the location counter (in the current subsection) to a particular 2902 storage boundary. The first expression (which must be absolute) is the 2903 alignment required, as described below. 2904 2905 The second expression (also absolute) gives the fill value to be 2906 stored in the padding bytes. It (and the comma) may be omitted. If it 2907 is omitted, the padding bytes are normally zero. However, on some 2908 systems, if the section is marked as containing code and the fill value 2909 is omitted, the space is filled with no-op instructions. 2910 2911 The third expression is also absolute, and is also optional. If it 2912 is present, it is the maximum number of bytes that should be skipped by 2913 this alignment directive. If doing the alignment would require 2914 skipping more bytes than the specified maximum, then the alignment is 2915 not done at all. You can omit the fill value (the second argument) 2916 entirely by simply using two commas after the required alignment; this 2917 can be useful if you want the alignment to be filled with no-op 2918 instructions when appropriate. 2919 2920 The way the required alignment is specified varies from system to 2921 system. For the arc, hppa, i386 using ELF, i860, iq2000, m68k, or32, 2922 s390, sparc, tic4x, tic80 and xtensa, the first expression is the 2923 alignment request in bytes. For example `.align 8' advances the 2924 location counter until it is a multiple of 8. If the location counter 2925 is already a multiple of 8, no change is needed. For the tic54x, the 2926 first expression is the alignment request in words. 2927 2928 For other systems, including the i386 using a.out format, and the 2929 arm and strongarm, it is the number of low-order zero bits the location 2930 counter must have after advancement. For example `.align 3' advances 2931 the location counter until it a multiple of 8. If the location counter 2932 is already a multiple of 8, no change is needed. 2933 2934 This inconsistency is due to the different behaviors of the various 2935 native assemblers for these systems which GAS must emulate. GAS also 2936 provides `.balign' and `.p2align' directives, described later, which 2937 have a consistent behavior across all architectures (but are specific 2938 to GAS). 2939 2940 2941 File: as.info, Node: Ascii, Next: Asciz, Prev: Altmacro, Up: Pseudo Ops 2942 2943 7.4 `.ascii "STRING"'... 2944 ======================== 2945 2946 `.ascii' expects zero or more string literals (*note Strings::) 2947 separated by commas. It assembles each string (with no automatic 2948 trailing zero byte) into consecutive addresses. 2949 2950 2951 File: as.info, Node: Asciz, Next: Balign, Prev: Ascii, Up: Pseudo Ops 2952 2953 7.5 `.asciz "STRING"'... 2954 ======================== 2955 2956 `.asciz' is just like `.ascii', but each string is followed by a zero 2957 byte. The "z" in `.asciz' stands for "zero". 2958 2959 2960 File: as.info, Node: Balign, Next: Byte, Prev: Asciz, Up: Pseudo Ops 2961 2962 7.6 `.balign[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR' 2963 ============================================== 2964 2965 Pad the location counter (in the current subsection) to a particular 2966 storage boundary. The first expression (which must be absolute) is the 2967 alignment request in bytes. For example `.balign 8' advances the 2968 location counter until it is a multiple of 8. If the location counter 2969 is already a multiple of 8, no change is needed. 2970 2971 The second expression (also absolute) gives the fill value to be 2972 stored in the padding bytes. It (and the comma) may be omitted. If it 2973 is omitted, the padding bytes are normally zero. However, on some 2974 systems, if the section is marked as containing code and the fill value 2975 is omitted, the space is filled with no-op instructions. 2976 2977 The third expression is also absolute, and is also optional. If it 2978 is present, it is the maximum number of bytes that should be skipped by 2979 this alignment directive. If doing the alignment would require 2980 skipping more bytes than the specified maximum, then the alignment is 2981 not done at all. You can omit the fill value (the second argument) 2982 entirely by simply using two commas after the required alignment; this 2983 can be useful if you want the alignment to be filled with no-op 2984 instructions when appropriate. 2985 2986 The `.balignw' and `.balignl' directives are variants of the 2987 `.balign' directive. The `.balignw' directive treats the fill pattern 2988 as a two byte word value. The `.balignl' directives treats the fill 2989 pattern as a four byte longword value. For example, `.balignw 2990 4,0x368d' will align to a multiple of 4. If it skips two bytes, they 2991 will be filled in with the value 0x368d (the exact placement of the 2992 bytes depends upon the endianness of the processor). If it skips 1 or 2993 3 bytes, the fill value is undefined. 2994 2995 2996 File: as.info, Node: Byte, Next: Comm, Prev: Balign, Up: Pseudo Ops 2997 2998 7.7 `.byte EXPRESSIONS' 2999 ======================= 3000 3001 `.byte' expects zero or more expressions, separated by commas. Each 3002 expression is assembled into the next byte. 3003 3004 3005 File: as.info, Node: Comm, Next: CFI directives, Prev: Byte, Up: Pseudo Ops 3006 3007 7.8 `.comm SYMBOL , LENGTH ' 3008 ============================ 3009 3010 `.comm' declares a common symbol named SYMBOL. When linking, a common 3011 symbol in one object file may be merged with a defined or common symbol 3012 of the same name in another object file. If `ld' does not see a 3013 definition for the symbol-just one or more common symbols-then it will 3014 allocate LENGTH bytes of uninitialized memory. LENGTH must be an 3015 absolute expression. If `ld' sees multiple common symbols with the 3016 same name, and they do not all have the same size, it will allocate 3017 space using the largest size. 3018 3019 When using ELF, the `.comm' directive takes an optional third 3020 argument. This is the desired alignment of the symbol, specified as a 3021 byte boundary (for example, an alignment of 16 means that the least 3022 significant 4 bits of the address should be zero). The alignment must 3023 be an absolute expression, and it must be a power of two. If `ld' 3024 allocates uninitialized memory for the common symbol, it will use the 3025 alignment when placing the symbol. If no alignment is specified, `as' 3026 will set the alignment to the largest power of two less than or equal 3027 to the size of the symbol, up to a maximum of 16. 3028 3029 The syntax for `.comm' differs slightly on the HPPA. The syntax is 3030 `SYMBOL .comm, LENGTH'; SYMBOL is optional. 3031 3032 3033 File: as.info, Node: CFI directives, Next: Data, Prev: Comm, Up: Pseudo Ops 3034 3035 7.9 `.cfi_startproc' 3036 ==================== 3037 3038 `.cfi_startproc' is used at the beginning of each function that should 3039 have an entry in `.eh_frame'. It initializes some internal data 3040 structures and emits architecture dependent initial CFI instructions. 3041 Don't forget to close the function by `.cfi_endproc'. 3042 3043 7.10 `.cfi_endproc' 3044 =================== 3045 3046 `.cfi_endproc' is used at the end of a function where it closes its 3047 unwind entry previously opened by `.cfi_startproc'. and emits it to 3048 `.eh_frame'. 3049 3050 7.11 `.cfi_def_cfa REGISTER, OFFSET' 3051 ==================================== 3052 3053 `.cfi_def_cfa' defines a rule for computing CFA as: take address from 3054 REGISTER and add OFFSET to it. 3055 3056 7.12 `.cfi_def_cfa_register REGISTER' 3057 ===================================== 3058 3059 `.cfi_def_cfa_register' modifies a rule for computing CFA. From now on 3060 REGISTER will be used instead of the old one. Offset remains the same. 3061 3062 7.13 `.cfi_def_cfa_offset OFFSET' 3063 ================================= 3064 3065 `.cfi_def_cfa_offset' modifies a rule for computing CFA. Register 3066 remains the same, but OFFSET is new. Note that it is the absolute 3067 offset that will be added to a defined register to compute CFA address. 3068 3069 7.14 `.cfi_adjust_cfa_offset OFFSET' 3070 ==================================== 3071 3072 Same as `.cfi_def_cfa_offset' but OFFSET is a relative value that is 3073 added/substracted from the previous offset. 3074 3075 7.15 `.cfi_offset REGISTER, OFFSET' 3076 =================================== 3077 3078 Previous value of REGISTER is saved at offset OFFSET from CFA. 3079 3080 7.16 `.cfi_rel_offset REGISTER, OFFSET' 3081 ======================================= 3082 3083 Previous value of REGISTER is saved at offset OFFSET from the current 3084 CFA register. This is transformed to `.cfi_offset' using the known 3085 displacement of the CFA register from the CFA. This is often easier to 3086 use, because the number will match the code it's annotating. 3087 3088 7.17 `.cfi_signal_frame' 3089 ======================== 3090 3091 Mark current function as signal trampoline. 3092 3093 7.18 `.cfi_window_save' 3094 ======================= 3095 3096 SPARC register window has been saved. 3097 3098 7.19 `.cfi_escape' EXPRESSION[, ...] 3099 ==================================== 3100 3101 Allows the user to add arbitrary bytes to the unwind info. One might 3102 use this to add OS-specific CFI opcodes, or generic CFI opcodes that 3103 GAS does not yet support. 3104 3105 3106 File: as.info, Node: LNS directives, Next: Long, Prev: Ln, Up: Pseudo Ops 3107 3108 7.20 `.file FILENO FILENAME' 3109 ============================ 3110 3111 When emitting dwarf2 line number information `.file' assigns filenames 3112 to the `.debug_line' file name table. The FILENO operand should be a 3113 unique positive integer to use as the index of the entry in the table. 3114 The FILENAME operand is a C string literal. 3115 3116 The detail of filename indicies is exposed to the user because the 3117 filename table is shared with the `.debug_info' section of the dwarf2 3118 debugging information, and thus the user must know the exact indicies 3119 that table entries will have. 3120 3121 7.21 `.loc FILENO LINENO [COLUMN] [OPTIONS]' 3122 ============================================ 3123 3124 The `.loc' directive will add row to the `.debug_line' line number 3125 matrix corresponding to the immediately following assembly instruction. 3126 The FILENO, LINENO, and optional COLUMN arguments will be applied to 3127 the `.debug_line' state machine before the row is added. 3128 3129 The OPTIONS are a sequence of the following tokens in any order: 3130 3131 `basic_block' 3132 This option will set the `basic_block' register in the 3133 `.debug_line' state machine to `true'. 3134 3135 `prologue_end' 3136 This option will set the `prologue_end' register in the 3137 `.debug_line' state machine to `true'. 3138 3139 `epilogue_begin' 3140 This option will set the `epilogue_begin' register in the 3141 `.debug_line' state machine to `true'. 3142 3143 `is_stmt VALUE' 3144 This option will set the `is_stmt' register in the `.debug_line' 3145 state machine to `value', which must be either 0 or 1. 3146 3147 `isa VALUE' 3148 This directive will set the `isa' register in the `.debug_line' 3149 state machine to VALUE, which must be an unsigned integer. 3150 3151 3152 7.22 `.loc_mark_blocks ENABLE' 3153 ============================== 3154 3155 The `.loc_mark_blocks' directive makes the assembler emit an entry to 3156 the `.debug_line' line number matrix with the `basic_block' register in 3157 the state machine set whenever a code label is seen. The ENABLE 3158 argument should be either 1 or 0, to enable or disable this function 3159 respectively. 3160 3161 3162 File: as.info, Node: Data, Next: Def, Prev: CFI directives, Up: Pseudo Ops 3163 3164 7.23 `.data SUBSECTION' 3165 ======================= 3166 3167 `.data' tells `as' to assemble the following statements onto the end of 3168 the data subsection numbered SUBSECTION (which is an absolute 3169 expression). If SUBSECTION is omitted, it defaults to zero. 3170 3171 3172 File: as.info, Node: Def, Next: Desc, Prev: Data, Up: Pseudo Ops 3173 3174 7.24 `.def NAME' 3175 ================ 3176 3177 Begin defining debugging information for a symbol NAME; the definition 3178 extends until the `.endef' directive is encountered. 3179 3180 3181 File: as.info, Node: Desc, Next: Dim, Prev: Def, Up: Pseudo Ops 3182 3183 7.25 `.desc SYMBOL, ABS-EXPRESSION' 3184 =================================== 3185 3186 This directive sets the descriptor of the symbol (*note Symbol 3187 Attributes::) to the low 16 bits of an absolute expression. 3188 3189 The `.desc' directive is not available when `as' is configured for 3190 COFF output; it is only for `a.out' or `b.out' object format. For the 3191 sake of compatibility, `as' accepts it, but produces no output, when 3192 configured for COFF. 3193 3194 3195 File: as.info, Node: Dim, Next: Double, Prev: Desc, Up: Pseudo Ops 3196 3197 7.26 `.dim' 3198 =========== 3199 3200 This directive is generated by compilers to include auxiliary debugging 3201 information in the symbol table. It is only permitted inside 3202 `.def'/`.endef' pairs. 3203 3204 3205 File: as.info, Node: Double, Next: Eject, Prev: Dim, Up: Pseudo Ops 3206 3207 7.27 `.double FLONUMS' 3208 ====================== 3209 3210 `.double' expects zero or more flonums, separated by commas. It 3211 assembles floating point numbers. The exact kind of floating point 3212 numbers emitted depends on how `as' is configured. *Note Machine 3213 Dependencies::. 3214 3215 3216 File: as.info, Node: Eject, Next: Else, Prev: Double, Up: Pseudo Ops 3217 3218 7.28 `.eject' 3219 ============= 3220 3221 Force a page break at this point, when generating assembly listings. 3222 3223 3224 File: as.info, Node: Else, Next: Elseif, Prev: Eject, Up: Pseudo Ops 3225 3226 7.29 `.else' 3227 ============ 3228 3229 `.else' is part of the `as' support for conditional assembly; *note 3230 `.if': If. It marks the beginning of a section of code to be assembled 3231 if the condition for the preceding `.if' was false. 3232 3233 3234 File: as.info, Node: Elseif, Next: End, Prev: Else, Up: Pseudo Ops 3235 3236 7.30 `.elseif' 3237 ============== 3238 3239 `.elseif' is part of the `as' support for conditional assembly; *note 3240 `.if': If. It is shorthand for beginning a new `.if' block that would 3241 otherwise fill the entire `.else' section. 3242 3243 3244 File: as.info, Node: End, Next: Endef, Prev: Elseif, Up: Pseudo Ops 3245 3246 7.31 `.end' 3247 =========== 3248 3249 `.end' marks the end of the assembly file. `as' does not process 3250 anything in the file past the `.end' directive. 3251 3252 3253 File: as.info, Node: Endef, Next: Endfunc, Prev: End, Up: Pseudo Ops 3254 3255 7.32 `.endef' 3256 ============= 3257 3258 This directive flags the end of a symbol definition begun with `.def'. 3259 3260 3261 File: as.info, Node: Endfunc, Next: Endif, Prev: Endef, Up: Pseudo Ops 3262 3263 7.33 `.endfunc' 3264 =============== 3265 3266 `.endfunc' marks the end of a function specified with `.func'. 3267 3268 3269 File: as.info, Node: Endif, Next: Equ, Prev: Endfunc, Up: Pseudo Ops 3270 3271 7.34 `.endif' 3272 ============= 3273 3274 `.endif' is part of the `as' support for conditional assembly; it marks 3275 the end of a block of code that is only assembled conditionally. *Note 3276 `.if': If. 3277 3278 3279 File: as.info, Node: Equ, Next: Equiv, Prev: Endif, Up: Pseudo Ops 3280 3281 7.35 `.equ SYMBOL, EXPRESSION' 3282 ============================== 3283 3284 This directive sets the value of SYMBOL to EXPRESSION. It is 3285 synonymous with `.set'; *note `.set': Set. 3286 3287 The syntax for `equ' on the HPPA is `SYMBOL .equ EXPRESSION'. 3288 3289 The syntax for `equ' on the Z80 is `SYMBOL equ EXPRESSION'. On the 3290 Z80 it is an eror if SYMBOL is already defined, but the symbol is not 3291 protected from later redefinition, compare *Note Equiv::. 3292 3293 3294 File: as.info, Node: Equiv, Next: Eqv, Prev: Equ, Up: Pseudo Ops 3295 3296 7.36 `.equiv SYMBOL, EXPRESSION' 3297 ================================ 3298 3299 The `.equiv' directive is like `.equ' and `.set', except that the 3300 assembler will signal an error if SYMBOL is already defined. Note a 3301 symbol which has been referenced but not actually defined is considered 3302 to be undefined. 3303 3304 Except for the contents of the error message, this is roughly 3305 equivalent to 3306 .ifdef SYM 3307 .err 3308 .endif 3309 .equ SYM,VAL 3310 plus it protects the symbol from later redefinition. 3311 3312 3313 File: as.info, Node: Eqv, Next: Err, Prev: Equiv, Up: Pseudo Ops 3314 3315 7.37 `.eqv SYMBOL, EXPRESSION' 3316 ============================== 3317 3318 The `.eqv' directive is like `.equiv', but no attempt is made to 3319 evaluate the expression or any part of it immediately. Instead each 3320 time the resulting symbol is used in an expression, a snapshot of its 3321 current value is taken. 3322 3323 3324 File: as.info, Node: Err, Next: Error, Prev: Eqv, Up: Pseudo Ops 3325 3326 7.38 `.err' 3327 =========== 3328 3329 If `as' assembles a `.err' directive, it will print an error message 3330 and, unless the `-Z' option was used, it will not generate an object 3331 file. This can be used to signal an error in conditionally compiled 3332 code. 3333 3334 3335 File: as.info, Node: Error, Next: Exitm, Prev: Err, Up: Pseudo Ops 3336 3337 7.39 `.error "STRING"' 3338 ====================== 3339 3340 Similarly to `.err', this directive emits an error, but you can specify 3341 a string that will be emitted as the error message. If you don't 3342 specify the message, it defaults to `".error directive invoked in 3343 source file"'. *Note Error and Warning Messages: Errors. 3344 3345 .error "This code has not been assembled and tested." 3346 3347 3348 File: as.info, Node: Exitm, Next: Extern, Prev: Error, Up: Pseudo Ops 3349 3350 7.40 `.exitm' 3351 ============= 3352 3353 Exit early from the current macro definition. *Note Macro::. 3354 3355 3356 File: as.info, Node: Extern, Next: Fail, Prev: Exitm, Up: Pseudo Ops 3357 3358 7.41 `.extern' 3359 ============== 3360 3361 `.extern' is accepted in the source program--for compatibility with 3362 other assemblers--but it is ignored. `as' treats all undefined symbols 3363 as external. 3364 3365 3366 File: as.info, Node: Fail, Next: File, Prev: Extern, Up: Pseudo Ops 3367 3368 7.42 `.fail EXPRESSION' 3369 ======================= 3370 3371 Generates an error or a warning. If the value of the EXPRESSION is 500 3372 or more, `as' will print a warning message. If the value is less than 3373 500, `as' will print an error message. The message will include the 3374 value of EXPRESSION. This can occasionally be useful inside complex 3375 nested macros or conditional assembly. 3376 3377 3378 File: as.info, Node: File, Next: Fill, Prev: Fail, Up: Pseudo Ops 3379 3380 7.43 `.file STRING' 3381 =================== 3382 3383 `.file' tells `as' that we are about to start a new logical file. 3384 STRING is the new file name. In general, the filename is recognized 3385 whether or not it is surrounded by quotes `"'; but if you wish to 3386 specify an empty file name, you must give the quotes-`""'. This 3387 statement may go away in future: it is only recognized to be compatible 3388 with old `as' programs. 3389 3390 3391 File: as.info, Node: Fill, Next: Float, Prev: File, Up: Pseudo Ops 3392 3393 7.44 `.fill REPEAT , SIZE , VALUE' 3394 ================================== 3395 3396 REPEAT, SIZE and VALUE are absolute expressions. This emits REPEAT 3397 copies of SIZE bytes. REPEAT may be zero or more. SIZE may be zero or 3398 more, but if it is more than 8, then it is deemed to have the value 8, 3399 compatible with other people's assemblers. The contents of each REPEAT 3400 bytes is taken from an 8-byte number. The highest order 4 bytes are 3401 zero. The lowest order 4 bytes are VALUE rendered in the byte-order of 3402 an integer on the computer `as' is assembling for. Each SIZE bytes in 3403 a repetition is taken from the lowest order SIZE bytes of this number. 3404 Again, this bizarre behavior is compatible with other people's 3405 assemblers. 3406 3407 SIZE and VALUE are optional. If the second comma and VALUE are 3408 absent, VALUE is assumed zero. If the first comma and following tokens 3409 are absent, SIZE is assumed to be 1. 3410 3411 3412 File: as.info, Node: Float, Next: Func, Prev: Fill, Up: Pseudo Ops 3413 3414 7.45 `.float FLONUMS' 3415 ===================== 3416 3417 This directive assembles zero or more flonums, separated by commas. It 3418 has the same effect as `.single'. The exact kind of floating point 3419 numbers emitted depends on how `as' is configured. *Note Machine 3420 Dependencies::. 3421 3422 3423 File: as.info, Node: Func, Next: Global, Prev: Float, Up: Pseudo Ops 3424 3425 7.46 `.func NAME[,LABEL]' 3426 ========================= 3427 3428 `.func' emits debugging information to denote function NAME, and is 3429 ignored unless the file is assembled with debugging enabled. Only 3430 `--gstabs[+]' is currently supported. LABEL is the entry point of the 3431 function and if omitted NAME prepended with the `leading char' is used. 3432 `leading char' is usually `_' or nothing, depending on the target. All 3433 functions are currently defined to have `void' return type. The 3434 function must be terminated with `.endfunc'. 3435 3436 3437 File: as.info, Node: Global, Next: Hidden, Prev: Func, Up: Pseudo Ops 3438 3439 7.47 `.global SYMBOL', `.globl SYMBOL' 3440 ====================================== 3441 3442 `.global' makes the symbol visible to `ld'. If you define SYMBOL in 3443 your partial program, its value is made available to other partial 3444 programs that are linked with it. Otherwise, SYMBOL takes its 3445 attributes from a symbol of the same name from another file linked into 3446 the same program. 3447 3448 Both spellings (`.globl' and `.global') are accepted, for 3449 compatibility with other assemblers. 3450 3451 On the HPPA, `.global' is not always enough to make it accessible to 3452 other partial programs. You may need the HPPA-only `.EXPORT' directive 3453 as well. *Note HPPA Assembler Directives: HPPA Directives. 3454 3455 3456 File: as.info, Node: Hidden, Next: hword, Prev: Global, Up: Pseudo Ops 3457 3458 7.48 `.hidden NAMES' 3459 ==================== 3460 3461 This is one of the ELF visibility directives. The other two are 3462 `.internal' (*note `.internal': Internal.) and `.protected' (*note 3463 `.protected': Protected.). 3464 3465 This directive overrides the named symbols default visibility (which 3466 is set by their binding: local, global or weak). The directive sets 3467 the visibility to `hidden' which means that the symbols are not visible 3468 to other components. Such symbols are always considered to be 3469 `protected' as well. 3470 3471 3472 File: as.info, Node: hword, Next: Ident, Prev: Hidden, Up: Pseudo Ops 3473 3474 7.49 `.hword EXPRESSIONS' 3475 ========================= 3476 3477 This expects zero or more EXPRESSIONS, and emits a 16 bit number for 3478 each. 3479 3480 This directive is a synonym for `.short'; depending on the target 3481 architecture, it may also be a synonym for `.word'. 3482 3483 3484 File: as.info, Node: Ident, Next: If, Prev: hword, Up: Pseudo Ops 3485 3486 7.50 `.ident' 3487 ============= 3488 3489 This directive is used by some assemblers to place tags in object 3490 files. The behavior of this directive varies depending on the target. 3491 When using the a.out object file format, `as' simply accepts the 3492 directive for source-file compatibility with existing assemblers, but 3493 does not emit anything for it. When using COFF, comments are emitted 3494 to the `.comment' or `.rdata' section, depending on the target. When 3495 using ELF, comments are emitted to the `.comment' section. 3496 3497 3498 File: as.info, Node: If, Next: Incbin, Prev: Ident, Up: Pseudo Ops 3499 3500 7.51 `.if ABSOLUTE EXPRESSION' 3501 ============================== 3502 3503 `.if' marks the beginning of a section of code which is only considered 3504 part of the source program being assembled if the argument (which must 3505 be an ABSOLUTE EXPRESSION) is non-zero. The end of the conditional 3506 section of code must be marked by `.endif' (*note `.endif': Endif.); 3507 optionally, you may include code for the alternative condition, flagged 3508 by `.else' (*note `.else': Else.). If you have several conditions to 3509 check, `.elseif' may be used to avoid nesting blocks if/else within 3510 each subsequent `.else' block. 3511 3512 The following variants of `.if' are also supported: 3513 `.ifdef SYMBOL' 3514 Assembles the following section of code if the specified SYMBOL 3515 has been defined. Note a symbol which has been referenced but not 3516 yet defined is considered to be undefined. 3517 3518 `.ifb TEXT' 3519 Assembles the following section of code if the operand is blank 3520 (empty). 3521 3522 `.ifc STRING1,STRING2' 3523 Assembles the following section of code if the two strings are the 3524 same. The strings may be optionally quoted with single quotes. 3525 If they are not quoted, the first string stops at the first comma, 3526 and the second string stops at the end of the line. Strings which 3527 contain whitespace should be quoted. The string comparison is 3528 case sensitive. 3529 3530 `.ifeq ABSOLUTE EXPRESSION' 3531 Assembles the following section of code if the argument is zero. 3532 3533 `.ifeqs STRING1,STRING2' 3534 Another form of `.ifc'. The strings must be quoted using double 3535 quotes. 3536 3537 `.ifge ABSOLUTE EXPRESSION' 3538 Assembles the following section of code if the argument is greater 3539 than or equal to zero. 3540 3541 `.ifgt ABSOLUTE EXPRESSION' 3542 Assembles the following section of code if the argument is greater 3543 than zero. 3544 3545 `.ifle ABSOLUTE EXPRESSION' 3546 Assembles the following section of code if the argument is less 3547 than or equal to zero. 3548 3549 `.iflt ABSOLUTE EXPRESSION' 3550 Assembles the following section of code if the argument is less 3551 than zero. 3552 3553 `.ifnb TEXT' 3554 Like `.ifb', but the sense of the test is reversed: this assembles 3555 the following section of code if the operand is non-blank 3556 (non-empty). 3557 3558 `.ifnc STRING1,STRING2.' 3559 Like `.ifc', but the sense of the test is reversed: this assembles 3560 the following section of code if the two strings are not the same. 3561 3562 `.ifndef SYMBOL' 3563 `.ifnotdef SYMBOL' 3564 Assembles the following section of code if the specified SYMBOL 3565 has not been defined. Both spelling variants are equivalent. 3566 Note a symbol which has been referenced but not yet defined is 3567 considered to be undefined. 3568 3569 `.ifne ABSOLUTE EXPRESSION' 3570 Assembles the following section of code if the argument is not 3571 equal to zero (in other words, this is equivalent to `.if'). 3572 3573 `.ifnes STRING1,STRING2' 3574 Like `.ifeqs', but the sense of the test is reversed: this 3575 assembles the following section of code if the two strings are not 3576 the same. 3577 3578 3579 File: as.info, Node: Incbin, Next: Include, Prev: If, Up: Pseudo Ops 3580 3581 7.52 `.incbin "FILE"[,SKIP[,COUNT]]' 3582 ==================================== 3583 3584 The `incbin' directive includes FILE verbatim at the current location. 3585 You can control the search paths used with the `-I' command-line option 3586 (*note Command-Line Options: Invoking.). Quotation marks are required 3587 around FILE. 3588 3589 The SKIP argument skips a number of bytes from the start of the 3590 FILE. The COUNT argument indicates the maximum number of bytes to 3591 read. Note that the data is not aligned in any way, so it is the user's 3592 responsibility to make sure that proper alignment is provided both 3593 before and after the `incbin' directive. 3594 3595 3596 File: as.info, Node: Include, Next: Int, Prev: Incbin, Up: Pseudo Ops 3597 3598 7.53 `.include "FILE"' 3599 ====================== 3600 3601 This directive provides a way to include supporting files at specified 3602 points in your source program. The code from FILE is assembled as if 3603 it followed the point of the `.include'; when the end of the included 3604 file is reached, assembly of the original file continues. You can 3605 control the search paths used with the `-I' command-line option (*note 3606 Command-Line Options: Invoking.). Quotation marks are required around 3607 FILE. 3608 3609 3610 File: as.info, Node: Int, Next: Internal, Prev: Include, Up: Pseudo Ops 3611 3612 7.54 `.int EXPRESSIONS' 3613 ======================= 3614 3615 Expect zero or more EXPRESSIONS, of any section, separated by commas. 3616 For each expression, emit a number that, at run time, is the value of 3617 that expression. The byte order and bit size of the number depends on 3618 what kind of target the assembly is for. 3619 3620 3621 File: as.info, Node: Internal, Next: Irp, Prev: Int, Up: Pseudo Ops 3622 3623 7.55 `.internal NAMES' 3624 ====================== 3625 3626 This is one of the ELF visibility directives. The other two are 3627 `.hidden' (*note `.hidden': Hidden.) and `.protected' (*note 3628 `.protected': Protected.). 3629 3630 This directive overrides the named symbols default visibility (which 3631 is set by their binding: local, global or weak). The directive sets 3632 the visibility to `internal' which means that the symbols are 3633 considered to be `hidden' (i.e., not visible to other components), and 3634 that some extra, processor specific processing must also be performed 3635 upon the symbols as well. 3636 3637 3638 File: as.info, Node: Irp, Next: Irpc, Prev: Internal, Up: Pseudo Ops 3639 3640 7.56 `.irp SYMBOL,VALUES'... 3641 ============================ 3642 3643 Evaluate a sequence of statements assigning different values to SYMBOL. 3644 The sequence of statements starts at the `.irp' directive, and is 3645 terminated by an `.endr' directive. For each VALUE, SYMBOL is set to 3646 VALUE, and the sequence of statements is assembled. If no VALUE is 3647 listed, the sequence of statements is assembled once, with SYMBOL set 3648 to the null string. To refer to SYMBOL within the sequence of 3649 statements, use \SYMBOL. 3650 3651 For example, assembling 3652 3653 .irp param,1,2,3 3654 move d\param,sp@- 3655 .endr 3656 3657 is equivalent to assembling 3658 3659 move d1,sp@- 3660 move d2,sp@- 3661 move d3,sp@- 3662 3663 For some caveats with the spelling of SYMBOL, see also the discussion 3664 at *Note Macro::. 3665 3666 3667 File: as.info, Node: Irpc, Next: Lcomm, Prev: Irp, Up: Pseudo Ops 3668 3669 7.57 `.irpc SYMBOL,VALUES'... 3670 ============================= 3671 3672 Evaluate a sequence of statements assigning different values to SYMBOL. 3673 The sequence of statements starts at the `.irpc' directive, and is 3674 terminated by an `.endr' directive. For each character in VALUE, 3675 SYMBOL is set to the character, and the sequence of statements is 3676 assembled. If no VALUE is listed, the sequence of statements is 3677 assembled once, with SYMBOL set to the null string. To refer to SYMBOL 3678 within the sequence of statements, use \SYMBOL. 3679 3680 For example, assembling 3681 3682 .irpc param,123 3683 move d\param,sp@- 3684 .endr 3685 3686 is equivalent to assembling 3687 3688 move d1,sp@- 3689 move d2,sp@- 3690 move d3,sp@- 3691 3692 For some caveats with the spelling of SYMBOL, see also the discussion 3693 at *Note Macro::. 3694 3695 3696 File: as.info, Node: Lcomm, Next: Lflags, Prev: Irpc, Up: Pseudo Ops 3697 3698 7.58 `.lcomm SYMBOL , LENGTH' 3699 ============================= 3700 3701 Reserve LENGTH (an absolute expression) bytes for a local common 3702 denoted by SYMBOL. The section and value of SYMBOL are those of the 3703 new local common. The addresses are allocated in the bss section, so 3704 that at run-time the bytes start off zeroed. SYMBOL is not declared 3705 global (*note `.global': Global.), so is normally not visible to `ld'. 3706 3707 Some targets permit a third argument to be used with `.lcomm'. This 3708 argument specifies the desired alignment of the symbol in the bss 3709 section. 3710 3711 The syntax for `.lcomm' differs slightly on the HPPA. The syntax is 3712 `SYMBOL .lcomm, LENGTH'; SYMBOL is optional. 3713 3714 3715 File: as.info, Node: Lflags, Next: Line, Prev: Lcomm, Up: Pseudo Ops 3716 3717 7.59 `.lflags' 3718 ============== 3719 3720 `as' accepts this directive, for compatibility with other assemblers, 3721 but ignores it. 3722 3723 3724 File: as.info, Node: Line, Next: Linkonce, Prev: Lflags, Up: Pseudo Ops 3725 3726 7.60 `.line LINE-NUMBER' 3727 ======================== 3728 3729 Change the logical line number. LINE-NUMBER must be an absolute 3730 expression. The next line has that logical line number. Therefore any 3731 other statements on the current line (after a statement separator 3732 character) are reported as on logical line number LINE-NUMBER - 1. One 3733 day `as' will no longer support this directive: it is recognized only 3734 for compatibility with existing assembler programs. 3735 3736 Even though this is a directive associated with the `a.out' or 3737 `b.out' object-code formats, `as' still recognizes it when producing 3738 COFF output, and treats `.line' as though it were the COFF `.ln' _if_ 3739 it is found outside a `.def'/`.endef' pair. 3740 3741 Inside a `.def', `.line' is, instead, one of the directives used by 3742 compilers to generate auxiliary symbol information for debugging. 3743 3744 3745 File: as.info, Node: Linkonce, Next: List, Prev: Line, Up: Pseudo Ops 3746 3747 7.61 `.linkonce [TYPE]' 3748 ======================= 3749 3750 Mark the current section so that the linker only includes a single copy 3751 of it. This may be used to include the same section in several 3752 different object files, but ensure that the linker will only include it 3753 once in the final output file. The `.linkonce' pseudo-op must be used 3754 for each instance of the section. Duplicate sections are detected 3755 based on the section name, so it should be unique. 3756 3757 This directive is only supported by a few object file formats; as of 3758 this writing, the only object file format which supports it is the 3759 Portable Executable format used on Windows NT. 3760 3761 The TYPE argument is optional. If specified, it must be one of the 3762 following strings. For example: 3763 .linkonce same_size 3764 Not all types may be supported on all object file formats. 3765 3766 `discard' 3767 Silently discard duplicate sections. This is the default. 3768 3769 `one_only' 3770 Warn if there are duplicate sections, but still keep only one copy. 3771 3772 `same_size' 3773 Warn if any of the duplicates have different sizes. 3774 3775 `same_contents' 3776 Warn if any of the duplicates do not have exactly the same 3777 contents. 3778 3779 3780 File: as.info, Node: Ln, Next: LNS directives, Prev: List, Up: Pseudo Ops 3781 3782 7.62 `.ln LINE-NUMBER' 3783 ====================== 3784 3785 `.ln' is a synonym for `.line'. 3786 3787 3788 File: as.info, Node: MRI, Next: Noaltmacro, Prev: Macro, Up: Pseudo Ops 3789 3790 7.63 `.mri VAL' 3791 =============== 3792 3793 If VAL is non-zero, this tells `as' to enter MRI mode. If VAL is zero, 3794 this tells `as' to exit MRI mode. This change affects code assembled 3795 until the next `.mri' directive, or until the end of the file. *Note 3796 MRI mode: M. 3797 3798 3799 File: as.info, Node: List, Next: Ln, Prev: Linkonce, Up: Pseudo Ops 3800 3801 7.64 `.list' 3802 ============ 3803 3804 Control (in conjunction with the `.nolist' directive) whether or not 3805 assembly listings are generated. These two directives maintain an 3806 internal counter (which is zero initially). `.list' increments the 3807 counter, and `.nolist' decrements it. Assembly listings are generated 3808 whenever the counter is greater than zero. 3809 3810 By default, listings are disabled. When you enable them (with the 3811 `-a' command line option; *note Command-Line Options: Invoking.), the 3812 initial value of the listing counter is one. 3813 3814 3815 File: as.info, Node: Long, Next: Macro, Prev: LNS directives, Up: Pseudo Ops 3816 3817 7.65 `.long EXPRESSIONS' 3818 ======================== 3819 3820 `.long' is the same as `.int', *note `.int': Int. 3821 3822 3823 File: as.info, Node: Macro, Next: MRI, Prev: Long, Up: Pseudo Ops 3824 3825 7.66 `.macro' 3826 ============= 3827 3828 The commands `.macro' and `.endm' allow you to define macros that 3829 generate assembly output. For example, this definition specifies a 3830 macro `sum' that puts a sequence of numbers into memory: 3831 3832 .macro sum from=0, to=5 3833 .long \from 3834 .if \to-\from 3835 sum "(\from+1)",\to 3836 .endif 3837 .endm 3838 3839 With that definition, `SUM 0,5' is equivalent to this assembly input: 3840 3841 .long 0 3842 .long 1 3843 .long 2 3844 .long 3 3845 .long 4 3846 .long 5 3847 3848 `.macro MACNAME' 3849 `.macro MACNAME MACARGS ...' 3850 Begin the definition of a macro called MACNAME. If your macro 3851 definition requires arguments, specify their names after the macro 3852 name, separated by commas or spaces. You can qualify the macro 3853 argument to indicate whether all invocations must specify a 3854 non-blank value (through `:`req''), or whether it takes all of the 3855 remaining arguments (through `:`vararg''). You can supply a 3856 default value for any macro argument by following the name with 3857 `=DEFLT'. You cannot define two macros with the same MACNAME 3858 unless it has been subject to the `.purgem' directive (*Note 3859 Purgem::.) between the two definitions. For example, these are 3860 all valid `.macro' statements: 3861 3862 `.macro comm' 3863 Begin the definition of a macro called `comm', which takes no 3864 arguments. 3865 3866 `.macro plus1 p, p1' 3867 `.macro plus1 p p1' 3868 Either statement begins the definition of a macro called 3869 `plus1', which takes two arguments; within the macro 3870 definition, write `\p' or `\p1' to evaluate the arguments. 3871 3872 `.macro reserve_str p1=0 p2' 3873 Begin the definition of a macro called `reserve_str', with two 3874 arguments. The first argument has a default value, but not 3875 the second. After the definition is complete, you can call 3876 the macro either as `reserve_str A,B' (with `\p1' evaluating 3877 to A and `\p2' evaluating to B), or as `reserve_str ,B' (with 3878 `\p1' evaluating as the default, in this case `0', and `\p2' 3879 evaluating to B). 3880 3881 `.macro m p1:req, p2=0, p3:vararg' 3882 Begin the definition of a macro called `m', with at least three 3883 arguments. The first argument must always have a value specified, 3884 but not the second, which instead has a default value. The third 3885 formal will get assigned all remaining arguments specified at 3886 invocation time. 3887 3888 When you call a macro, you can specify the argument values either 3889 by position, or by keyword. For example, `sum 9,17' is equivalent 3890 to `sum to=17, from=9'. 3891 3892 Note that since each of the MACARGS can be an identifier exactly 3893 as any other one permitted by the target architecture, there may be 3894 occasional problems if the target hand-crafts special meanings to 3895 certain characters when they occur in a special position. For 3896 example, if colon (`:') is generally permitted to be part of a 3897 symbol name, but the architecture specific code special-cases it 3898 when occuring as the final character of a symbol (to denote a 3899 label), then the macro parameter replacement code will have no way 3900 of knowing that and consider the whole construct (including the 3901 colon) an identifier, and check only this identifier for being the 3902 subject to parameter substitution. In this example, besides the 3903 potential of just separating identifier and colon by white space, 3904 using alternate macro syntax (*Note Altmacro::.) and ampersand 3905 (`&') as the character to separate literal text from macro 3906 parameters (or macro parameters from one another) would provide a 3907 way to achieve the same effect: 3908 3909 .altmacro 3910 .macro label l 3911 l&: 3912 .endm 3913 3914 This applies identically to the identifiers used in `.irp' (*Note 3915 Irp::.) and `.irpc' (*Note Irpc::.). 3916 3917 `.endm' 3918 Mark the end of a macro definition. 3919 3920 `.exitm' 3921 Exit early from the current macro definition. 3922 3923 `\@' 3924 `as' maintains a counter of how many macros it has executed in 3925 this pseudo-variable; you can copy that number to your output with 3926 `\@', but _only within a macro definition_. 3927 3928 `LOCAL NAME [ , ... ]' 3929 _Warning: `LOCAL' is only available if you select "alternate macro 3930 syntax" with `--alternate' or `.altmacro'._ *Note `.altmacro': 3931 Altmacro. 3932 3933 3934 File: as.info, Node: Altmacro, Next: Ascii, Prev: Align, Up: Pseudo Ops 3935 3936 7.67 `.altmacro' 3937 ================ 3938 3939 Enable alternate macro mode, enabling: 3940 3941 `LOCAL NAME [ , ... ]' 3942 One additional directive, `LOCAL', is available. It is used to 3943 generate a string replacement for each of the NAME arguments, and 3944 replace any instances of NAME in each macro expansion. The 3945 replacement string is unique in the assembly, and different for 3946 each separate macro expansion. `LOCAL' allows you to write macros 3947 that define symbols, without fear of conflict between separate 3948 macro expansions. 3949 3950 `String delimiters' 3951 You can write strings delimited in these other ways besides 3952 `"STRING"': 3953 3954 `'STRING'' 3955 You can delimit strings with single-quote charaters. 3956 3957 `<STRING>' 3958 You can delimit strings with matching angle brackets. 3959 3960 `single-character string escape' 3961 To include any single character literally in a string (even if the 3962 character would otherwise have some special meaning), you can 3963 prefix the character with `!' (an exclamation mark). For example, 3964 you can write `<4.3 !> 5.4!!>' to get the literal text `4.3 > 3965 5.4!'. 3966 3967 `Expression results as strings' 3968 You can write `%EXPR' to evaluate the expression EXPR and use the 3969 result as a string. 3970 3971 3972 File: as.info, Node: Noaltmacro, Next: Nolist, Prev: MRI, Up: Pseudo Ops 3973 3974 7.68 `.noaltmacro' 3975 ================== 3976 3977 Disable alternate macro mode. *Note Altmacro:: 3978 3979 3980 File: as.info, Node: Nolist, Next: Octa, Prev: Noaltmacro, Up: Pseudo Ops 3981 3982 7.69 `.nolist' 3983 ============== 3984 3985 Control (in conjunction with the `.list' directive) whether or not 3986 assembly listings are generated. These two directives maintain an 3987 internal counter (which is zero initially). `.list' increments the 3988 counter, and `.nolist' decrements it. Assembly listings are generated 3989 whenever the counter is greater than zero. 3990 3991 3992 File: as.info, Node: Octa, Next: Org, Prev: Nolist, Up: Pseudo Ops 3993 3994 7.70 `.octa BIGNUMS' 3995 ==================== 3996 3997 This directive expects zero or more bignums, separated by commas. For 3998 each bignum, it emits a 16-byte integer. 3999 4000 The term "octa" comes from contexts in which a "word" is two bytes; 4001 hence _octa_-word for 16 bytes. 4002 4003 4004 File: as.info, Node: Org, Next: P2align, Prev: Octa, Up: Pseudo Ops 4005 4006 7.71 `.org NEW-LC , FILL' 4007 ========================= 4008 4009 Advance the location counter of the current section to NEW-LC. NEW-LC 4010 is either an absolute expression or an expression with the same section 4011 as the current subsection. That is, you can't use `.org' to cross 4012 sections: if NEW-LC has the wrong section, the `.org' directive is 4013 ignored. To be compatible with former assemblers, if the section of 4014 NEW-LC is absolute, `as' issues a warning, then pretends the section of 4015 NEW-LC is the same as the current subsection. 4016 4017 `.org' may only increase the location counter, or leave it 4018 unchanged; you cannot use `.org' to move the location counter backwards. 4019 4020 Because `as' tries to assemble programs in one pass, NEW-LC may not 4021 be undefined. If you really detest this restriction we eagerly await a 4022 chance to share your improved assembler. 4023 4024 Beware that the origin is relative to the start of the section, not 4025 to the start of the subsection. This is compatible with other people's 4026 assemblers. 4027 4028 When the location counter (of the current subsection) is advanced, 4029 the intervening bytes are filled with FILL which should be an absolute 4030 expression. If the comma and FILL are omitted, FILL defaults to zero. 4031 4032 4033 File: as.info, Node: P2align, Next: PopSection, Prev: Org, Up: Pseudo Ops 4034 4035 7.72 `.p2align[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR' 4036 ================================================ 4037 4038 Pad the location counter (in the current subsection) to a particular 4039 storage boundary. The first expression (which must be absolute) is the 4040 number of low-order zero bits the location counter must have after 4041 advancement. For example `.p2align 3' advances the location counter 4042 until it a multiple of 8. If the location counter is already a 4043 multiple of 8, no change is needed. 4044 4045 The second expression (also absolute) gives the fill value to be 4046 stored in the padding bytes. It (and the comma) may be omitted. If it 4047 is omitted, the padding bytes are normally zero. However, on some 4048 systems, if the section is marked as containing code and the fill value 4049 is omitted, the space is filled with no-op instructions. 4050 4051 The third expression is also absolute, and is also optional. If it 4052 is present, it is the maximum number of bytes that should be skipped by 4053 this alignment directive. If doing the alignment would require 4054 skipping more bytes than the specified maximum, then the alignment is 4055 not done at all. You can omit the fill value (the second argument) 4056 entirely by simply using two commas after the required alignment; this 4057 can be useful if you want the alignment to be filled with no-op 4058 instructions when appropriate. 4059 4060 The `.p2alignw' and `.p2alignl' directives are variants of the 4061 `.p2align' directive. The `.p2alignw' directive treats the fill 4062 pattern as a two byte word value. The `.p2alignl' directives treats the 4063 fill pattern as a four byte longword value. For example, `.p2alignw 4064 2,0x368d' will align to a multiple of 4. If it skips two bytes, they 4065 will be filled in with the value 0x368d (the exact placement of the 4066 bytes depends upon the endianness of the processor). If it skips 1 or 4067 3 bytes, the fill value is undefined. 4068 4069 4070 File: as.info, Node: Previous, Next: Print, Prev: PopSection, Up: Pseudo Ops 4071 4072 7.73 `.previous' 4073 ================ 4074 4075 This is one of the ELF section stack manipulation directives. The 4076 others are `.section' (*note Section::), `.subsection' (*note 4077 SubSection::), `.pushsection' (*note PushSection::), and `.popsection' 4078 (*note PopSection::). 4079 4080 This directive swaps the current section (and subsection) with most 4081 recently referenced section (and subsection) prior to this one. 4082 Multiple `.previous' directives in a row will flip between two sections 4083 (and their subsections). 4084 4085 In terms of the section stack, this directive swaps the current 4086 section with the top section on the section stack. 4087 4088 4089 File: as.info, Node: PopSection, Next: Previous, Prev: P2align, Up: Pseudo Ops 4090 4091 7.74 `.popsection' 4092 ================== 4093 4094 This is one of the ELF section stack manipulation directives. The 4095 others are `.section' (*note Section::), `.subsection' (*note 4096 SubSection::), `.pushsection' (*note PushSection::), and `.previous' 4097 (*note Previous::). 4098 4099 This directive replaces the current section (and subsection) with 4100 the top section (and subsection) on the section stack. This section is 4101 popped off the stack. 4102 4103 4104 File: as.info, Node: Print, Next: Protected, Prev: Previous, Up: Pseudo Ops 4105 4106 7.75 `.print STRING' 4107 ==================== 4108 4109 `as' will print STRING on the standard output during assembly. You 4110 must put STRING in double quotes. 4111 4112 4113 File: as.info, Node: Protected, Next: Psize, Prev: Print, Up: Pseudo Ops 4114 4115 7.76 `.protected NAMES' 4116 ======================= 4117 4118 This is one of the ELF visibility directives. The other two are 4119 `.hidden' (*note Hidden::) and `.internal' (*note Internal::). 4120 4121 This directive overrides the named symbols default visibility (which 4122 is set by their binding: local, global or weak). The directive sets 4123 the visibility to `protected' which means that any references to the 4124 symbols from within the components that defines them must be resolved 4125 to the definition in that component, even if a definition in another 4126 component would normally preempt this. 4127 4128 4129 File: as.info, Node: Psize, Next: Purgem, Prev: Protected, Up: Pseudo Ops 4130 4131 7.77 `.psize LINES , COLUMNS' 4132 ============================= 4133 4134 Use this directive to declare the number of lines--and, optionally, the 4135 number of columns--to use for each page, when generating listings. 4136 4137 If you do not use `.psize', listings use a default line-count of 60. 4138 You may omit the comma and COLUMNS specification; the default width is 4139 200 columns. 4140 4141 `as' generates formfeeds whenever the specified number of lines is 4142 exceeded (or whenever you explicitly request one, using `.eject'). 4143 4144 If you specify LINES as `0', no formfeeds are generated save those 4145 explicitly specified with `.eject'. 4146 4147 4148 File: as.info, Node: Purgem, Next: PushSection, Prev: Psize, Up: Pseudo Ops 4149 4150 7.78 `.purgem NAME' 4151 =================== 4152 4153 Undefine the macro NAME, so that later uses of the string will not be 4154 expanded. *Note Macro::. 4155 4156 4157 File: as.info, Node: PushSection, Next: Quad, Prev: Purgem, Up: Pseudo Ops 4158 4159 7.79 `.pushsection NAME , SUBSECTION' 4160 ===================================== 4161 4162 This is one of the ELF section stack manipulation directives. The 4163 others are `.section' (*note Section::), `.subsection' (*note 4164 SubSection::), `.popsection' (*note PopSection::), and `.previous' 4165 (*note Previous::). 4166 4167 This directive pushes the current section (and subsection) onto the 4168 top of the section stack, and then replaces the current section and 4169 subsection with `name' and `subsection'. 4170 4171 4172 File: as.info, Node: Quad, Next: Rept, Prev: PushSection, Up: Pseudo Ops 4173 4174 7.80 `.quad BIGNUMS' 4175 ==================== 4176 4177 `.quad' expects zero or more bignums, separated by commas. For each 4178 bignum, it emits an 8-byte integer. If the bignum won't fit in 8 4179 bytes, it prints a warning message; and just takes the lowest order 8 4180 bytes of the bignum. 4181 4182 The term "quad" comes from contexts in which a "word" is two bytes; 4183 hence _quad_-word for 8 bytes. 4184 4185 4186 File: as.info, Node: Rept, Next: Sbttl, Prev: Quad, Up: Pseudo Ops 4187 4188 7.81 `.rept COUNT' 4189 ================== 4190 4191 Repeat the sequence of lines between the `.rept' directive and the next 4192 `.endr' directive COUNT times. 4193 4194 For example, assembling 4195 4196 .rept 3 4197 .long 0 4198 .endr 4199 4200 is equivalent to assembling 4201 4202 .long 0 4203 .long 0 4204 .long 0 4205 4206 4207 File: as.info, Node: Sbttl, Next: Scl, Prev: Rept, Up: Pseudo Ops 4208 4209 7.82 `.sbttl "SUBHEADING"' 4210 ========================== 4211 4212 Use SUBHEADING as the title (third line, immediately after the title 4213 line) when generating assembly listings. 4214 4215 This directive affects subsequent pages, as well as the current page 4216 if it appears within ten lines of the top of a page. 4217 4218 4219 File: as.info, Node: Scl, Next: Section, Prev: Sbttl, Up: Pseudo Ops 4220 4221 7.83 `.scl CLASS' 4222 ================= 4223 4224 Set the storage-class value for a symbol. This directive may only be 4225 used inside a `.def'/`.endef' pair. Storage class may flag whether a 4226 symbol is static or external, or it may record further symbolic 4227 debugging information. 4228 4229 4230 File: as.info, Node: Section, Next: Set, Prev: Scl, Up: Pseudo Ops 4231 4232 7.84 `.section NAME' 4233 ==================== 4234 4235 Use the `.section' directive to assemble the following code into a 4236 section named NAME. 4237 4238 This directive is only supported for targets that actually support 4239 arbitrarily named sections; on `a.out' targets, for example, it is not 4240 accepted, even with a standard `a.out' section name. 4241 4242 COFF Version 4243 ------------ 4244 4245 For COFF targets, the `.section' directive is used in one of the 4246 following ways: 4247 4248 .section NAME[, "FLAGS"] 4249 .section NAME[, SUBSEGMENT] 4250 4251 If the optional argument is quoted, it is taken as flags to use for 4252 the section. Each flag is a single character. The following flags are 4253 recognized: 4254 `b' 4255 bss section (uninitialized data) 4256 4257 `n' 4258 section is not loaded 4259 4260 `w' 4261 writable section 4262 4263 `d' 4264 data section 4265 4266 `r' 4267 read-only section 4268 4269 `x' 4270 executable section 4271 4272 `s' 4273 shared section (meaningful for PE targets) 4274 4275 `a' 4276 ignored. (For compatibility with the ELF version) 4277 4278 If no flags are specified, the default flags depend upon the section 4279 name. If the section name is not recognized, the default will be for 4280 the section to be loaded and writable. Note the `n' and `w' flags 4281 remove attributes from the section, rather than adding them, so if they 4282 are used on their own it will be as if no flags had been specified at 4283 all. 4284 4285 If the optional argument to the `.section' directive is not quoted, 4286 it is taken as a subsegment number (*note Sub-Sections::). 4287 4288 ELF Version 4289 ----------- 4290 4291 This is one of the ELF section stack manipulation directives. The 4292 others are `.subsection' (*note SubSection::), `.pushsection' (*note 4293 PushSection::), `.popsection' (*note PopSection::), and `.previous' 4294 (*note Previous::). 4295 4296 For ELF targets, the `.section' directive is used like this: 4297 4298 .section NAME [, "FLAGS"[, @TYPE[,FLAG_SPECIFIC_ARGUMENTS]]] 4299 4300 The optional FLAGS argument is a quoted string which may contain any 4301 combination of the following characters: 4302 `a' 4303 section is allocatable 4304 4305 `w' 4306 section is writable 4307 4308 `x' 4309 section is executable 4310 4311 `M' 4312 section is mergeable 4313 4314 `S' 4315 section contains zero terminated strings 4316 4317 `G' 4318 section is a member of a section group 4319 4320 `T' 4321 section is used for thread-local-storage 4322 4323 The optional TYPE argument may contain one of the following 4324 constants: 4325 `@progbits' 4326 section contains data 4327 4328 `@nobits' 4329 section does not contain data (i.e., section only occupies space) 4330 4331 `@note' 4332 section contains data which is used by things other than the 4333 program 4334 4335 `@init_array' 4336 section contains an array of pointers to init functions 4337 4338 `@fini_array' 4339 section contains an array of pointers to finish functions 4340 4341 `@preinit_array' 4342 section contains an array of pointers to pre-init functions 4343 4344 Many targets only support the first three section types. 4345 4346 Note on targets where the `@' character is the start of a comment (eg 4347 ARM) then another character is used instead. For example the ARM port 4348 uses the `%' character. 4349 4350 If FLAGS contains the `M' symbol then the TYPE argument must be 4351 specified as well as an extra argument - ENTSIZE - like this: 4352 4353 .section NAME , "FLAGS"M, @TYPE, ENTSIZE 4354 4355 Sections with the `M' flag but not `S' flag must contain fixed size 4356 constants, each ENTSIZE octets long. Sections with both `M' and `S' 4357 must contain zero terminated strings where each character is ENTSIZE 4358 bytes long. The linker may remove duplicates within sections with the 4359 same name, same entity size and same flags. ENTSIZE must be an 4360 absolute expression. 4361 4362 If FLAGS contains the `G' symbol then the TYPE argument must be 4363 present along with an additional field like this: 4364 4365 .section NAME , "FLAGS"G, @TYPE, GROUPNAME[, LINKAGE] 4366 4367 The GROUPNAME field specifies the name of the section group to which 4368 this particular section belongs. The optional linkage field can 4369 contain: 4370 `comdat' 4371 indicates that only one copy of this section should be retained 4372 4373 `.gnu.linkonce' 4374 an alias for comdat 4375 4376 Note - if both the M and G flags are present then the fields for the 4377 Merge flag should come first, like this: 4378 4379 .section NAME , "FLAGS"MG, @TYPE, ENTSIZE, GROUPNAME[, LINKAGE] 4380 4381 If no flags are specified, the default flags depend upon the section 4382 name. If the section name is not recognized, the default will be for 4383 the section to have none of the above flags: it will not be allocated 4384 in memory, nor writable, nor executable. The section will contain data. 4385 4386 For ELF targets, the assembler supports another type of `.section' 4387 directive for compatibility with the Solaris assembler: 4388 4389 .section "NAME"[, FLAGS...] 4390 4391 Note that the section name is quoted. There may be a sequence of 4392 comma separated flags: 4393 `#alloc' 4394 section is allocatable 4395 4396 `#write' 4397 section is writable 4398 4399 `#execinstr' 4400 section is executable 4401 4402 `#tls' 4403 section is used for thread local storage 4404 4405 This directive replaces the current section and subsection. See the 4406 contents of the gas testsuite directory `gas/testsuite/gas/elf' for 4407 some examples of how this directive and the other section stack 4408 directives work. 4409 4410 4411 File: as.info, Node: Set, Next: Short, Prev: Section, Up: Pseudo Ops 4412 4413 7.85 `.set SYMBOL, EXPRESSION' 4414 ============================== 4415 4416 Set the value of SYMBOL to EXPRESSION. This changes SYMBOL's value and 4417 type to conform to EXPRESSION. If SYMBOL was flagged as external, it 4418 remains flagged (*note Symbol Attributes::). 4419 4420 You may `.set' a symbol many times in the same assembly. 4421 4422 If you `.set' a global symbol, the value stored in the object file 4423 is the last value stored into it. 4424 4425 The syntax for `set' on the HPPA is `SYMBOL .set EXPRESSION'. 4426 4427 On Z80 `set' is a real instruction, use `SYMBOL defl EXPRESSION' 4428 instead. 4429 4430 4431 File: as.info, Node: Short, Next: Single, Prev: Set, Up: Pseudo Ops 4432 4433 7.86 `.short EXPRESSIONS' 4434 ========================= 4435 4436 `.short' is normally the same as `.word'. *Note `.word': Word. 4437 4438 In some configurations, however, `.short' and `.word' generate 4439 numbers of different lengths; *note Machine Dependencies::. 4440 4441 4442 File: as.info, Node: Single, Next: Size, Prev: Short, Up: Pseudo Ops 4443 4444 7.87 `.single FLONUMS' 4445 ====================== 4446 4447 This directive assembles zero or more flonums, separated by commas. It 4448 has the same effect as `.float'. The exact kind of floating point 4449 numbers emitted depends on how `as' is configured. *Note Machine 4450 Dependencies::. 4451 4452 4453 File: as.info, Node: Size, Next: Skip, Prev: Single, Up: Pseudo Ops 4454 4455 7.88 `.size' 4456 ============ 4457 4458 This directive is used to set the size associated with a symbol. 4459 4460 COFF Version 4461 ------------ 4462 4463 For COFF targets, the `.size' directive is only permitted inside 4464 `.def'/`.endef' pairs. It is used like this: 4465 4466 .size EXPRESSION 4467 4468 ELF Version 4469 ----------- 4470 4471 For ELF targets, the `.size' directive is used like this: 4472 4473 .size NAME , EXPRESSION 4474 4475 This directive sets the size associated with a symbol NAME. The 4476 size in bytes is computed from EXPRESSION which can make use of label 4477 arithmetic. This directive is typically used to set the size of 4478 function symbols. 4479 4480 4481 File: as.info, Node: Sleb128, Next: Space, Prev: Skip, Up: Pseudo Ops 4482 4483 7.89 `.sleb128 EXPRESSIONS' 4484 =========================== 4485 4486 SLEB128 stands for "signed little endian base 128." This is a compact, 4487 variable length representation of numbers used by the DWARF symbolic 4488 debugging format. *Note `.uleb128': Uleb128. 4489 4490 4491 File: as.info, Node: Skip, Next: Sleb128, Prev: Size, Up: Pseudo Ops 4492 4493 7.90 `.skip SIZE , FILL' 4494 ======================== 4495 4496 This directive emits SIZE bytes, each of value FILL. Both SIZE and 4497 FILL are absolute expressions. If the comma and FILL are omitted, FILL 4498 is assumed to be zero. This is the same as `.space'. 4499 4500 4501 File: as.info, Node: Space, Next: Stab, Prev: Sleb128, Up: Pseudo Ops 4502 4503 7.91 `.space SIZE , FILL' 4504 ========================= 4505 4506 This directive emits SIZE bytes, each of value FILL. Both SIZE and 4507 FILL are absolute expressions. If the comma and FILL are omitted, FILL 4508 is assumed to be zero. This is the same as `.skip'. 4509 4510 _Warning:_ `.space' has a completely different meaning for HPPA 4511 targets; use `.block' as a substitute. See `HP9000 Series 800 4512 Assembly Language Reference Manual' (HP 92432-90001) for the 4513 meaning of the `.space' directive. *Note HPPA Assembler 4514 Directives: HPPA Directives, for a summary. 4515 4516 4517 File: as.info, Node: Stab, Next: String, Prev: Space, Up: Pseudo Ops 4518 4519 7.92 `.stabd, .stabn, .stabs' 4520 ============================= 4521 4522 There are three directives that begin `.stab'. All emit symbols (*note 4523 Symbols::), for use by symbolic debuggers. The symbols are not entered 4524 in the `as' hash table: they cannot be referenced elsewhere in the 4525 source file. Up to five fields are required: 4526 4527 STRING 4528 This is the symbol's name. It may contain any character except 4529 `\000', so is more general than ordinary symbol names. Some 4530 debuggers used to code arbitrarily complex structures into symbol 4531 names using this field. 4532 4533 TYPE 4534 An absolute expression. The symbol's type is set to the low 8 4535 bits of this expression. Any bit pattern is permitted, but `ld' 4536 and debuggers choke on silly bit patterns. 4537 4538 OTHER 4539 An absolute expression. The symbol's "other" attribute is set to 4540 the low 8 bits of this expression. 4541 4542 DESC 4543 An absolute expression. The symbol's descriptor is set to the low 4544 16 bits of this expression. 4545 4546 VALUE 4547 An absolute expression which becomes the symbol's value. 4548 4549 If a warning is detected while reading a `.stabd', `.stabn', or 4550 `.stabs' statement, the symbol has probably already been created; you 4551 get a half-formed symbol in your object file. This is compatible with 4552 earlier assemblers! 4553 4554 `.stabd TYPE , OTHER , DESC' 4555 The "name" of the symbol generated is not even an empty string. 4556 It is a null pointer, for compatibility. Older assemblers used a 4557 null pointer so they didn't waste space in object files with empty 4558 strings. 4559 4560 The symbol's value is set to the location counter, relocatably. 4561 When your program is linked, the value of this symbol is the 4562 address of the location counter when the `.stabd' was assembled. 4563 4564 `.stabn TYPE , OTHER , DESC , VALUE' 4565 The name of the symbol is set to the empty string `""'. 4566 4567 `.stabs STRING , TYPE , OTHER , DESC , VALUE' 4568 All five fields are specified. 4569 4570 4571 File: as.info, Node: String, Next: Struct, Prev: Stab, Up: Pseudo Ops 4572 4573 7.93 `.string' "STR" 4574 ==================== 4575 4576 Copy the characters in STR to the object file. You may specify more 4577 than one string to copy, separated by commas. Unless otherwise 4578 specified for a particular machine, the assembler marks the end of each 4579 string with a 0 byte. You can use any of the escape sequences 4580 described in *Note Strings: Strings. 4581 4582 4583 File: as.info, Node: Struct, Next: SubSection, Prev: String, Up: Pseudo Ops 4584 4585 7.94 `.struct EXPRESSION' 4586 ========================= 4587 4588 Switch to the absolute section, and set the section offset to 4589 EXPRESSION, which must be an absolute expression. You might use this 4590 as follows: 4591 .struct 0 4592 field1: 4593 .struct field1 + 4 4594 field2: 4595 .struct field2 + 4 4596 field3: 4597 This would define the symbol `field1' to have the value 0, the symbol 4598 `field2' to have the value 4, and the symbol `field3' to have the value 4599 8. Assembly would be left in the absolute section, and you would need 4600 to use a `.section' directive of some sort to change to some other 4601 section before further assembly. 4602 4603 4604 File: as.info, Node: SubSection, Next: Symver, Prev: Struct, Up: Pseudo Ops 4605 4606 7.95 `.subsection NAME' 4607 ======================= 4608 4609 This is one of the ELF section stack manipulation directives. The 4610 others are `.section' (*note Section::), `.pushsection' (*note 4611 PushSection::), `.popsection' (*note PopSection::), and `.previous' 4612 (*note Previous::). 4613 4614 This directive replaces the current subsection with `name'. The 4615 current section is not changed. The replaced subsection is put onto 4616 the section stack in place of the then current top of stack subsection. 4617 4618 4619 File: as.info, Node: Symver, Next: Tag, Prev: SubSection, Up: Pseudo Ops 4620 4621 7.96 `.symver' 4622 ============== 4623 4624 Use the `.symver' directive to bind symbols to specific version nodes 4625 within a source file. This is only supported on ELF platforms, and is 4626 typically used when assembling files to be linked into a shared library. 4627 There are cases where it may make sense to use this in objects to be 4628 bound into an application itself so as to override a versioned symbol 4629 from a shared library. 4630 4631 For ELF targets, the `.symver' directive can be used like this: 4632 .symver NAME, NAME2@NODENAME 4633 If the symbol NAME is defined within the file being assembled, the 4634 `.symver' directive effectively creates a symbol alias with the name 4635 NAME2@NODENAME, and in fact the main reason that we just don't try and 4636 create a regular alias is that the @ character isn't permitted in 4637 symbol names. The NAME2 part of the name is the actual name of the 4638 symbol by which it will be externally referenced. The name NAME itself 4639 is merely a name of convenience that is used so that it is possible to 4640 have definitions for multiple versions of a function within a single 4641 source file, and so that the compiler can unambiguously know which 4642 version of a function is being mentioned. The NODENAME portion of the 4643 alias should be the name of a node specified in the version script 4644 supplied to the linker when building a shared library. If you are 4645 attempting to override a versioned symbol from a shared library, then 4646 NODENAME should correspond to the nodename of the symbol you are trying 4647 to override. 4648 4649 If the symbol NAME is not defined within the file being assembled, 4650 all references to NAME will be changed to NAME2@NODENAME. If no 4651 reference to NAME is made, NAME2@NODENAME will be removed from the 4652 symbol table. 4653 4654 Another usage of the `.symver' directive is: 4655 .symver NAME, NAME2@@NODENAME 4656 In this case, the symbol NAME must exist and be defined within the 4657 file being assembled. It is similar to NAME2@NODENAME. The difference 4658 is NAME2@@NODENAME will also be used to resolve references to NAME2 by 4659 the linker. 4660 4661 The third usage of the `.symver' directive is: 4662 .symver NAME, NAME2@@@NODENAME 4663 When NAME is not defined within the file being assembled, it is 4664 treated as NAME2@NODENAME. When NAME is defined within the file being 4665 assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME. 4666 4667 4668 File: as.info, Node: Tag, Next: Text, Prev: Symver, Up: Pseudo Ops 4669 4670 7.97 `.tag STRUCTNAME' 4671 ====================== 4672 4673 This directive is generated by compilers to include auxiliary debugging 4674 information in the symbol table. It is only permitted inside 4675 `.def'/`.endef' pairs. Tags are used to link structure definitions in 4676 the symbol table with instances of those structures. 4677 4678 4679 File: as.info, Node: Text, Next: Title, Prev: Tag, Up: Pseudo Ops 4680 4681 7.98 `.text SUBSECTION' 4682 ======================= 4683 4684 Tells `as' to assemble the following statements onto the end of the 4685 text subsection numbered SUBSECTION, which is an absolute expression. 4686 If SUBSECTION is omitted, subsection number zero is used. 4687 4688 4689 File: as.info, Node: Title, Next: Type, Prev: Text, Up: Pseudo Ops 4690 4691 7.99 `.title "HEADING"' 4692 ======================= 4693 4694 Use HEADING as the title (second line, immediately after the source 4695 file name and pagenumber) when generating assembly listings. 4696 4697 This directive affects subsequent pages, as well as the current page 4698 if it appears within ten lines of the top of a page. 4699 4700 4701 File: as.info, Node: Type, Next: Uleb128, Prev: Title, Up: Pseudo Ops 4702 4703 7.100 `.type' 4704 ============= 4705 4706 This directive is used to set the type of a symbol. 4707 4708 COFF Version 4709 ------------ 4710 4711 For COFF targets, this directive is permitted only within 4712 `.def'/`.endef' pairs. It is used like this: 4713 4714 .type INT 4715 4716 This records the integer INT as the type attribute of a symbol table 4717 entry. 4718 4719 ELF Version 4720 ----------- 4721 4722 For ELF targets, the `.type' directive is used like this: 4723 4724 .type NAME , TYPE DESCRIPTION 4725 4726 This sets the type of symbol NAME to be either a function symbol or 4727 an object symbol. There are five different syntaxes supported for the 4728 TYPE DESCRIPTION field, in order to provide compatibility with various 4729 other assemblers. The syntaxes supported are: 4730 4731 .type <name>,#function 4732 .type <name>,#object 4733 4734 .type <name>,@function 4735 .type <name>,@object 4736 4737 .type <name>,%function 4738 .type <name>,%object 4739 4740 .type <name>,"function" 4741 .type <name>,"object" 4742 4743 .type <name> STT_FUNCTION 4744 .type <name> STT_OBJECT 4745 4746 4747 File: as.info, Node: Uleb128, Next: Val, Prev: Type, Up: Pseudo Ops 4748 4749 7.101 `.uleb128 EXPRESSIONS' 4750 ============================ 4751 4752 ULEB128 stands for "unsigned little endian base 128." This is a 4753 compact, variable length representation of numbers used by the DWARF 4754 symbolic debugging format. *Note `.sleb128': Sleb128. 4755 4756 4757 File: as.info, Node: Val, Next: Version, Prev: Uleb128, Up: Pseudo Ops 4758 4759 7.102 `.val ADDR' 4760 ================= 4761 4762 This directive, permitted only within `.def'/`.endef' pairs, records 4763 the address ADDR as the value attribute of a symbol table entry. 4764 4765 4766 File: as.info, Node: Version, Next: VTableEntry, Prev: Val, Up: Pseudo Ops 4767 4768 7.103 `.version "STRING"' 4769 ========================= 4770 4771 This directive creates a `.note' section and places into it an ELF 4772 formatted note of type NT_VERSION. The note's name is set to `string'. 4773 4774 4775 File: as.info, Node: VTableEntry, Next: VTableInherit, Prev: Version, Up: Pseudo Ops 4776 4777 7.104 `.vtable_entry TABLE, OFFSET' 4778 =================================== 4779 4780 This directive finds or creates a symbol `table' and creates a 4781 `VTABLE_ENTRY' relocation for it with an addend of `offset'. 4782 4783 4784 File: as.info, Node: VTableInherit, Next: Warning, Prev: VTableEntry, Up: Pseudo Ops 4785 4786 7.105 `.vtable_inherit CHILD, PARENT' 4787 ===================================== 4788 4789 This directive finds the symbol `child' and finds or creates the symbol 4790 `parent' and then creates a `VTABLE_INHERIT' relocation for the parent 4791 whose addend is the value of the child symbol. As a special case the 4792 parent name of `0' is treated as refering the `*ABS*' section. 4793 4794 4795 File: as.info, Node: Warning, Next: Weak, Prev: VTableInherit, Up: Pseudo Ops 4796 4797 7.106 `.warning "STRING"' 4798 ========================= 4799 4800 Similar to the directive `.error' (*note `.error "STRING"': Error.), 4801 but just emits a warning. 4802 4803 4804 File: as.info, Node: Weak, Next: Weakref, Prev: Warning, Up: Pseudo Ops 4805 4806 7.107 `.weak NAMES' 4807 =================== 4808 4809 This directive sets the weak attribute on the comma separated list of 4810 symbol `names'. If the symbols do not already exist, they will be 4811 created. 4812 4813 On COFF targets other than PE, weak symbols are a GNU extension. 4814 This directive sets the weak attribute on the comma separated list of 4815 symbol `names'. If the symbols do not already exist, they will be 4816 created. 4817 4818 On the PE target, weak symbols are supported natively as weak 4819 aliases. When a weak symbol is created that is not an alias, GAS 4820 creates an alternate symbol to hold the default value. 4821 4822 4823 File: as.info, Node: Weakref, Next: Word, Prev: Weak, Up: Pseudo Ops 4824 4825 7.108 `.weakref ALIAS, TARGET' 4826 ============================== 4827 4828 This directive creates an alias to the target symbol that enables the 4829 symbol to be referenced with weak-symbol semantics, but without 4830 actually making it weak. If direct references or definitions of the 4831 symbol are present, then the symbol will not be weak, but if all 4832 references to it are through weak references, the symbol will be marked 4833 as weak in the symbol table. 4834 4835 The effect is equivalent to moving all references to the alias to a 4836 separate assembly source file, renaming the alias to the symbol in it, 4837 declaring the symbol as weak there, and running a reloadable link to 4838 merge the object files resulting from the assembly of the new source 4839 file and the old source file that had the references to the alias 4840 removed. 4841 4842 The alias itself never makes to the symbol table, and is entirely 4843 handled within the assembler. 4844 4845 4846 File: as.info, Node: Word, Next: Deprecated, Prev: Weakref, Up: Pseudo Ops 4847 4848 7.109 `.word EXPRESSIONS' 4849 ========================= 4850 4851 This directive expects zero or more EXPRESSIONS, of any section, 4852 separated by commas. 4853 4854 The size of the number emitted, and its byte order, depend on what 4855 target computer the assembly is for. 4856 4857 _Warning: Special Treatment to support Compilers_ 4858 4859 Machines with a 32-bit address space, but that do less than 32-bit 4860 addressing, require the following special treatment. If the machine of 4861 interest to you does 32-bit addressing (or doesn't require it; *note 4862 Machine Dependencies::), you can ignore this issue. 4863 4864 In order to assemble compiler output into something that works, `as' 4865 occasionally does strange things to `.word' directives. Directives of 4866 the form `.word sym1-sym2' are often emitted by compilers as part of 4867 jump tables. Therefore, when `as' assembles a directive of the form 4868 `.word sym1-sym2', and the difference between `sym1' and `sym2' does 4869 not fit in 16 bits, `as' creates a "secondary jump table", immediately 4870 before the next label. This secondary jump table is preceded by a 4871 short-jump to the first byte after the secondary table. This 4872 short-jump prevents the flow of control from accidentally falling into 4873 the new table. Inside the table is a long-jump to `sym2'. The 4874 original `.word' contains `sym1' minus the address of the long-jump to 4875 `sym2'. 4876 4877 If there were several occurrences of `.word sym1-sym2' before the 4878 secondary jump table, all of them are adjusted. If there was a `.word 4879 sym3-sym4', that also did not fit in sixteen bits, a long-jump to 4880 `sym4' is included in the secondary jump table, and the `.word' 4881 directives are adjusted to contain `sym3' minus the address of the 4882 long-jump to `sym4'; and so on, for as many entries in the original 4883 jump table as necessary. 4884 4885 4886 File: as.info, Node: Deprecated, Prev: Word, Up: Pseudo Ops 4887 4888 7.110 Deprecated Directives 4889 =========================== 4890 4891 One day these directives won't work. They are included for 4892 compatibility with older assemblers. 4893 .abort 4894 4895 .line 4896 4897 4898 File: as.info, Node: Machine Dependencies, Next: Reporting Bugs, Prev: Pseudo Ops, Up: Top 4899 4900 8 Machine Dependent Features 4901 **************************** 4902 4903 The machine instruction sets are (almost by definition) different on 4904 each machine where `as' runs. Floating point representations vary as 4905 well, and `as' often supports a few additional directives or 4906 command-line options for compatibility with other assemblers on a 4907 particular platform. Finally, some versions of `as' support special 4908 pseudo-instructions for branch optimization. 4909 4910 This chapter discusses most of these differences, though it does not 4911 include details on any machine's instruction set. For details on that 4912 subject, see the hardware manufacturer's manual. 4913 4914 * Menu: 4915 4916 4917 * Alpha-Dependent:: Alpha Dependent Features 4918 4919 * ARC-Dependent:: ARC Dependent Features 4920 4921 * ARM-Dependent:: ARM Dependent Features 4922 4923 * BFIN-Dependent:: BFIN Dependent Features 4924 4925 * CRIS-Dependent:: CRIS Dependent Features 4926 4927 * D10V-Dependent:: D10V Dependent Features 4928 4929 * D30V-Dependent:: D30V Dependent Features 4930 4931 * H8/300-Dependent:: Renesas H8/300 Dependent Features 4932 4933 * HPPA-Dependent:: HPPA Dependent Features 4934 4935 * ESA/390-Dependent:: IBM ESA/390 Dependent Features 4936 4937 * i386-Dependent:: Intel 80386 and AMD x86-64 Dependent Features 4938 4939 * i860-Dependent:: Intel 80860 Dependent Features 4940 4941 * i960-Dependent:: Intel 80960 Dependent Features 4942 4943 * IA-64-Dependent:: Intel IA-64 Dependent Features 4944 4945 * IP2K-Dependent:: IP2K Dependent Features 4946 4947 * M32C-Dependent:: M32C Dependent Features 4948 4949 * M32R-Dependent:: M32R Dependent Features 4950 4951 * M68K-Dependent:: M680x0 Dependent Features 4952 4953 * M68HC11-Dependent:: M68HC11 and 68HC12 Dependent Features 4954 4955 * MIPS-Dependent:: MIPS Dependent Features 4956 4957 * MMIX-Dependent:: MMIX Dependent Features 4958 4959 * MSP430-Dependent:: MSP430 Dependent Features 4960 4961 * SH-Dependent:: Renesas / SuperH SH Dependent Features 4962 * SH64-Dependent:: SuperH SH64 Dependent Features 4963 4964 * PDP-11-Dependent:: PDP-11 Dependent Features 4965 4966 * PJ-Dependent:: picoJava Dependent Features 4967 4968 * PPC-Dependent:: PowerPC Dependent Features 4969 4970 * Sparc-Dependent:: SPARC Dependent Features 4971 4972 * TIC54X-Dependent:: TI TMS320C54x Dependent Features 4973 4974 * V850-Dependent:: V850 Dependent Features 4975 4976 * Xtensa-Dependent:: Xtensa Dependent Features 4977 4978 * Z80-Dependent:: Z80 Dependent Features 4979 4980 * Z8000-Dependent:: Z8000 Dependent Features 4981 4982 * Vax-Dependent:: VAX Dependent Features 4983 4984 4985 File: as.info, Node: Alpha-Dependent, Next: ARC-Dependent, Up: Machine Dependencies 4986 4987 8.1 Alpha Dependent Features 4988 ============================ 4989 4990 * Menu: 4991 4992 * Alpha Notes:: Notes 4993 * Alpha Options:: Options 4994 * Alpha Syntax:: Syntax 4995 * Alpha Floating Point:: Floating Point 4996 * Alpha Directives:: Alpha Machine Directives 4997 * Alpha Opcodes:: Opcodes 4998 4999 5000 File: as.info, Node: Alpha Notes, Next: Alpha Options, Up: Alpha-Dependent 5001 5002 8.1.1 Notes 5003 ----------- 5004 5005 The documentation here is primarily for the ELF object format. `as' 5006 also supports the ECOFF and EVAX formats, but features specific to 5007 these formats are not yet documented. 5008 5009 5010 File: as.info, Node: Alpha Options, Next: Alpha Syntax, Prev: Alpha Notes, Up: Alpha-Dependent 5011 5012 8.1.2 Options 5013 ------------- 5014 5015 `-mCPU' 5016 This option specifies the target processor. If an attempt is made 5017 to assemble an instruction which will not execute on the target 5018 processor, the assembler may either expand the instruction as a 5019 macro or issue an error message. This option is equivalent to the 5020 `.arch' directive. 5021 5022 The following processor names are recognized: `21064', `21064a', 5023 `21066', `21068', `21164', `21164a', `21164pc', `21264', `21264a', 5024 `21264b', `ev4', `ev5', `lca45', `ev5', `ev56', `pca56', `ev6', 5025 `ev67', `ev68'. The special name `all' may be used to allow the 5026 assembler to accept instructions valid for any Alpha processor. 5027 5028 In order to support existing practice in OSF/1 with respect to 5029 `.arch', and existing practice within `MILO' (the Linux ARC 5030 bootloader), the numbered processor names (e.g. 21064) enable the 5031 processor-specific PALcode instructions, while the 5032 "electro-vlasic" names (e.g. `ev4') do not. 5033 5034 `-mdebug' 5035 `-no-mdebug' 5036 Enables or disables the generation of `.mdebug' encapsulation for 5037 stabs directives and procedure descriptors. The default is to 5038 automatically enable `.mdebug' when the first stabs directive is 5039 seen. 5040 5041 `-relax' 5042 This option forces all relocations to be put into the object file, 5043 instead of saving space and resolving some relocations at assembly 5044 time. Note that this option does not propagate all symbol 5045 arithmetic into the object file, because not all symbol arithmetic 5046 can be represented. However, the option can still be useful in 5047 specific applications. 5048 5049 `-g' 5050 This option is used when the compiler generates debug information. 5051 When `gcc' is using `mips-tfile' to generate debug information 5052 for ECOFF, local labels must be passed through to the object file. 5053 Otherwise this option has no effect. 5054 5055 `-GSIZE' 5056 A local common symbol larger than SIZE is placed in `.bss', while 5057 smaller symbols are placed in `.sbss'. 5058 5059 `-F' 5060 `-32addr' 5061 These options are ignored for backward compatibility. 5062 5063 5064 File: as.info, Node: Alpha Syntax, Next: Alpha Floating Point, Prev: Alpha Options, Up: Alpha-Dependent 5065 5066 8.1.3 Syntax 5067 ------------ 5068 5069 The assembler syntax closely follow the Alpha Reference Manual; 5070 assembler directives and general syntax closely follow the OSF/1 and 5071 OpenVMS syntax, with a few differences for ELF. 5072 5073 * Menu: 5074 5075 * Alpha-Chars:: Special Characters 5076 * Alpha-Regs:: Register Names 5077 * Alpha-Relocs:: Relocations 5078 5079 5080 File: as.info, Node: Alpha-Chars, Next: Alpha-Regs, Up: Alpha Syntax 5081 5082 8.1.3.1 Special Characters 5083 .......................... 5084 5085 `#' is the line comment character. 5086 5087 `;' can be used instead of a newline to separate statements. 5088 5089 5090 File: as.info, Node: Alpha-Regs, Next: Alpha-Relocs, Prev: Alpha-Chars, Up: Alpha Syntax 5091 5092 8.1.3.2 Register Names 5093 ...................... 5094 5095 The 32 integer registers are referred to as `$N' or `$rN'. In 5096 addition, registers 15, 28, 29, and 30 may be referred to by the 5097 symbols `$fp', `$at', `$gp', and `$sp' respectively. 5098 5099 The 32 floating-point registers are referred to as `$fN'. 5100 5101 5102 File: as.info, Node: Alpha-Relocs, Prev: Alpha-Regs, Up: Alpha Syntax 5103 5104 8.1.3.3 Relocations 5105 ................... 5106 5107 Some of these relocations are available for ECOFF, but mostly only for 5108 ELF. They are modeled after the relocation format introduced in 5109 Digital Unix 4.0, but there are additions. 5110 5111 The format is `!TAG' or `!TAG!NUMBER' where TAG is the name of the 5112 relocation. In some cases NUMBER is used to relate specific 5113 instructions. 5114 5115 The relocation is placed at the end of the instruction like so: 5116 5117 ldah $0,a($29) !gprelhigh 5118 lda $0,a($0) !gprellow 5119 ldq $1,b($29) !literal!100 5120 ldl $2,0($1) !lituse_base!100 5121 5122 `!literal' 5123 `!literal!N' 5124 Used with an `ldq' instruction to load the address of a symbol 5125 from the GOT. 5126 5127 A sequence number N is optional, and if present is used to pair 5128 `lituse' relocations with this `literal' relocation. The `lituse' 5129 relocations are used by the linker to optimize the code based on 5130 the final location of the symbol. 5131 5132 Note that these optimizations are dependent on the data flow of the 5133 program. Therefore, if _any_ `lituse' is paired with a `literal' 5134 relocation, then _all_ uses of the register set by the `literal' 5135 instruction must also be marked with `lituse' relocations. This 5136 is because the original `literal' instruction may be deleted or 5137 transformed into another instruction. 5138 5139 Also note that there may be a one-to-many relationship between 5140 `literal' and `lituse', but not a many-to-one. That is, if there 5141 are two code paths that load up the same address and feed the 5142 value to a single use, then the use may not use a `lituse' 5143 relocation. 5144 5145 `!lituse_base!N' 5146 Used with any memory format instruction (e.g. `ldl') to indicate 5147 that the literal is used for an address load. The offset field of 5148 the instruction must be zero. During relaxation, the code may be 5149 altered to use a gp-relative load. 5150 5151 `!lituse_jsr!N' 5152 Used with a register branch format instruction (e.g. `jsr') to 5153 indicate that the literal is used for a call. During relaxation, 5154 the code may be altered to use a direct branch (e.g. `bsr'). 5155 5156 `!lituse_jsrdirect!N' 5157 Similar to `lituse_jsr', but also that this call cannot be vectored 5158 through a PLT entry. This is useful for functions with special 5159 calling conventions which do not allow the normal call-clobbered 5160 registers to be clobbered. 5161 5162 `!lituse_bytoff!N' 5163 Used with a byte mask instruction (e.g. `extbl') to indicate that 5164 only the low 3 bits of the address are relevant. During 5165 relaxation, the code may be altered to use an immediate instead of 5166 a register shift. 5167 5168 `!lituse_addr!N' 5169 Used with any other instruction to indicate that the original 5170 address is in fact used, and the original `ldq' instruction may 5171 not be altered or deleted. This is useful in conjunction with 5172 `lituse_jsr' to test whether a weak symbol is defined. 5173 5174 ldq $27,foo($29) !literal!1 5175 beq $27,is_undef !lituse_addr!1 5176 jsr $26,($27),foo !lituse_jsr!1 5177 5178 `!lituse_tlsgd!N' 5179 Used with a register branch format instruction to indicate that the 5180 literal is the call to `__tls_get_addr' used to compute the 5181 address of the thread-local storage variable whose descriptor was 5182 loaded with `!tlsgd!N'. 5183 5184 `!lituse_tlsldm!N' 5185 Used with a register branch format instruction to indicate that the 5186 literal is the call to `__tls_get_addr' used to compute the 5187 address of the base of the thread-local storage block for the 5188 current module. The descriptor for the module must have been 5189 loaded with `!tlsldm!N'. 5190 5191 `!gpdisp!N' 5192 Used with `ldah' and `lda' to load the GP from the current 5193 address, a-la the `ldgp' macro. The source register for the 5194 `ldah' instruction must contain the address of the `ldah' 5195 instruction. There must be exactly one `lda' instruction paired 5196 with the `ldah' instruction, though it may appear anywhere in the 5197 instruction stream. The immediate operands must be zero. 5198 5199 bsr $26,foo 5200 ldah $29,0($26) !gpdisp!1 5201 lda $29,0($29) !gpdisp!1 5202 5203 `!gprelhigh' 5204 Used with an `ldah' instruction to add the high 16 bits of a 5205 32-bit displacement from the GP. 5206 5207 `!gprellow' 5208 Used with any memory format instruction to add the low 16 bits of a 5209 32-bit displacement from the GP. 5210 5211 `!gprel' 5212 Used with any memory format instruction to add a 16-bit 5213 displacement from the GP. 5214 5215 `!samegp' 5216 Used with any branch format instruction to skip the GP load at the 5217 target address. The referenced symbol must have the same GP as the 5218 source object file, and it must be declared to either not use `$27' 5219 or perform a standard GP load in the first two instructions via the 5220 `.prologue' directive. 5221 5222 `!tlsgd' 5223 `!tlsgd!N' 5224 Used with an `lda' instruction to load the address of a TLS 5225 descriptor for a symbol in the GOT. 5226 5227 The sequence number N is optional, and if present it used to pair 5228 the descriptor load with both the `literal' loading the address of 5229 the `__tls_get_addr' function and the `lituse_tlsgd' marking the 5230 call to that function. 5231 5232 For proper relaxation, both the `tlsgd', `literal' and `lituse' 5233 relocations must be in the same extended basic block. That is, 5234 the relocation with the lowest address must be executed first at 5235 runtime. 5236 5237 `!tlsldm' 5238 `!tlsldm!N' 5239 Used with an `lda' instruction to load the address of a TLS 5240 descriptor for the current module in the GOT. 5241 5242 Similar in other respects to `tlsgd'. 5243 5244 `!gotdtprel' 5245 Used with an `ldq' instruction to load the offset of the TLS 5246 symbol within its module's thread-local storage block. Also known 5247 as the dynamic thread pointer offset or dtp-relative offset. 5248 5249 `!dtprelhi' 5250 `!dtprello' 5251 `!dtprel' 5252 Like `gprel' relocations except they compute dtp-relative offsets. 5253 5254 `!gottprel' 5255 Used with an `ldq' instruction to load the offset of the TLS 5256 symbol from the thread pointer. Also known as the tp-relative 5257 offset. 5258 5259 `!tprelhi' 5260 `!tprello' 5261 `!tprel' 5262 Like `gprel' relocations except they compute tp-relative offsets. 5263 5264 5265 File: as.info, Node: Alpha Floating Point, Next: Alpha Directives, Prev: Alpha Syntax, Up: Alpha-Dependent 5266 5267 8.1.4 Floating Point 5268 -------------------- 5269 5270 The Alpha family uses both IEEE and VAX floating-point numbers. 5271 5272 5273 File: as.info, Node: Alpha Directives, Next: Alpha Opcodes, Prev: Alpha Floating Point, Up: Alpha-Dependent 5274 5275 8.1.5 Alpha Assembler Directives 5276 -------------------------------- 5277 5278 `as' for the Alpha supports many additional directives for 5279 compatibility with the native assembler. This section describes them 5280 only briefly. 5281 5282 These are the additional directives in `as' for the Alpha: 5283 5284 `.arch CPU' 5285 Specifies the target processor. This is equivalent to the `-mCPU' 5286 command-line option. *Note Options: Alpha Options, for a list of 5287 values for CPU. 5288 5289 `.ent FUNCTION[, N]' 5290 Mark the beginning of FUNCTION. An optional number may follow for 5291 compatibility with the OSF/1 assembler, but is ignored. When 5292 generating `.mdebug' information, this will create a procedure 5293 descriptor for the function. In ELF, it will mark the symbol as a 5294 function a-la the generic `.type' directive. 5295 5296 `.end FUNCTION' 5297 Mark the end of FUNCTION. In ELF, it will set the size of the 5298 symbol a-la the generic `.size' directive. 5299 5300 `.mask MASK, OFFSET' 5301 Indicate which of the integer registers are saved in the current 5302 function's stack frame. MASK is interpreted a bit mask in which 5303 bit N set indicates that register N is saved. The registers are 5304 saved in a block located OFFSET bytes from the "canonical frame 5305 address" (CFA) which is the value of the stack pointer on entry to 5306 the function. The registers are saved sequentially, except that 5307 the return address register (normally `$26') is saved first. 5308 5309 This and the other directives that describe the stack frame are 5310 currently only used when generating `.mdebug' information. They 5311 may in the future be used to generate DWARF2 `.debug_frame' unwind 5312 information for hand written assembly. 5313 5314 `.fmask MASK, OFFSET' 5315 Indicate which of the floating-point registers are saved in the 5316 current stack frame. The MASK and OFFSET parameters are 5317 interpreted as with `.mask'. 5318 5319 `.frame FRAMEREG, FRAMEOFFSET, RETREG[, ARGOFFSET]' 5320 Describes the shape of the stack frame. The frame pointer in use 5321 is FRAMEREG; normally this is either `$fp' or `$sp'. The frame 5322 pointer is FRAMEOFFSET bytes below the CFA. The return address is 5323 initially located in RETREG until it is saved as indicated in 5324 `.mask'. For compatibility with OSF/1 an optional ARGOFFSET 5325 parameter is accepted and ignored. It is believed to indicate the 5326 offset from the CFA to the saved argument registers. 5327 5328 `.prologue N' 5329 Indicate that the stack frame is set up and all registers have been 5330 spilled. The argument N indicates whether and how the function 5331 uses the incoming "procedure vector" (the address of the called 5332 function) in `$27'. 0 indicates that `$27' is not used; 1 5333 indicates that the first two instructions of the function use `$27' 5334 to perform a load of the GP register; 2 indicates that `$27' is 5335 used in some non-standard way and so the linker cannot elide the 5336 load of the procedure vector during relaxation. 5337 5338 `.usepv FUNCTION, WHICH' 5339 Used to indicate the use of the `$27' register, similar to 5340 `.prologue', but without the other semantics of needing to be 5341 inside an open `.ent'/`.end' block. 5342 5343 The WHICH argument should be either `no', indicating that `$27' is 5344 not used, or `std', indicating that the first two instructions of 5345 the function perform a GP load. 5346 5347 One might use this directive instead of `.prologue' if you are 5348 also using dwarf2 CFI directives. 5349 5350 `.gprel32 EXPRESSION' 5351 Computes the difference between the address in EXPRESSION and the 5352 GP for the current object file, and stores it in 4 bytes. In 5353 addition to being smaller than a full 8 byte address, this also 5354 does not require a dynamic relocation when used in a shared 5355 library. 5356 5357 `.t_floating EXPRESSION' 5358 Stores EXPRESSION as an IEEE double precision value. 5359 5360 `.s_floating EXPRESSION' 5361 Stores EXPRESSION as an IEEE single precision value. 5362 5363 `.f_floating EXPRESSION' 5364 Stores EXPRESSION as a VAX F format value. 5365 5366 `.g_floating EXPRESSION' 5367 Stores EXPRESSION as a VAX G format value. 5368 5369 `.d_floating EXPRESSION' 5370 Stores EXPRESSION as a VAX D format value. 5371 5372 `.set FEATURE' 5373 Enables or disables various assembler features. Using the positive 5374 name of the feature enables while using `noFEATURE' disables. 5375 5376 `at' 5377 Indicates that macro expansions may clobber the "assembler 5378 temporary" (`$at' or `$28') register. Some macros may not be 5379 expanded without this and will generate an error message if 5380 `noat' is in effect. When `at' is in effect, a warning will 5381 be generated if `$at' is used by the programmer. 5382 5383 `macro' 5384 Enables the expansion of macro instructions. Note that 5385 variants of real instructions, such as `br label' vs `br 5386 $31,label' are considered alternate forms and not macros. 5387 5388 `move' 5389 `reorder' 5390 `volatile' 5391 These control whether and how the assembler may re-order 5392 instructions. Accepted for compatibility with the OSF/1 5393 assembler, but `as' does not do instruction scheduling, so 5394 these features are ignored. 5395 5396 The following directives are recognized for compatibility with the 5397 OSF/1 assembler but are ignored. 5398 5399 .proc .aproc 5400 .reguse .livereg 5401 .option .aent 5402 .ugen .eflag 5403 .alias .noalias 5404 5405 5406 File: as.info, Node: Alpha Opcodes, Prev: Alpha Directives, Up: Alpha-Dependent 5407 5408 8.1.6 Opcodes 5409 ------------- 5410 5411 For detailed information on the Alpha machine instruction set, see the 5412 Alpha Architecture Handbook 5413 (ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf). 5414 5415 5416 File: as.info, Node: ARC-Dependent, Next: ARM-Dependent, Prev: Alpha-Dependent, Up: Machine Dependencies 5417 5418 8.2 ARC Dependent Features 5419 ========================== 5420 5421 * Menu: 5422 5423 * ARC Options:: Options 5424 * ARC Syntax:: Syntax 5425 * ARC Floating Point:: Floating Point 5426 * ARC Directives:: ARC Machine Directives 5427 * ARC Opcodes:: Opcodes 5428 5429 5430 File: as.info, Node: ARC Options, Next: ARC Syntax, Up: ARC-Dependent 5431 5432 8.2.1 Options 5433 ------------- 5434 5435 `-marc[5|6|7|8]' 5436 This option selects the core processor variant. Using `-marc' is 5437 the same as `-marc6', which is also the default. 5438 5439 `arc5' 5440 Base instruction set. 5441 5442 `arc6' 5443 Jump-and-link (jl) instruction. No requirement of an 5444 instruction between setting flags and conditional jump. For 5445 example: 5446 5447 mov.f r0,r1 5448 beq foo 5449 5450 `arc7' 5451 Break (brk) and sleep (sleep) instructions. 5452 5453 `arc8' 5454 Software interrupt (swi) instruction. 5455 5456 5457 Note: the `.option' directive can to be used to select a core 5458 variant from within assembly code. 5459 5460 `-EB' 5461 This option specifies that the output generated by the assembler 5462 should be marked as being encoded for a big-endian processor. 5463 5464 `-EL' 5465 This option specifies that the output generated by the assembler 5466 should be marked as being encoded for a little-endian processor - 5467 this is the default. 5468 5469 5470 5471 File: as.info, Node: ARC Syntax, Next: ARC Floating Point, Prev: ARC Options, Up: ARC-Dependent 5472 5473 8.2.2 Syntax 5474 ------------ 5475 5476 * Menu: 5477 5478 * ARC-Chars:: Special Characters 5479 * ARC-Regs:: Register Names 5480 5481 5482 File: as.info, Node: ARC-Chars, Next: ARC-Regs, Up: ARC Syntax 5483 5484 8.2.2.1 Special Characters 5485 .......................... 5486 5487 *TODO* 5488 5489 5490 File: as.info, Node: ARC-Regs, Prev: ARC-Chars, Up: ARC Syntax 5491 5492 8.2.2.2 Register Names 5493 ...................... 5494 5495 *TODO* 5496 5497 5498 File: as.info, Node: ARC Floating Point, Next: ARC Directives, Prev: ARC Syntax, Up: ARC-Dependent 5499 5500 8.2.3 Floating Point 5501 -------------------- 5502 5503 The ARC core does not currently have hardware floating point support. 5504 Software floating point support is provided by `GCC' and uses IEEE 5505 floating-point numbers. 5506 5507 5508 File: as.info, Node: ARC Directives, Next: ARC Opcodes, Prev: ARC Floating Point, Up: ARC-Dependent 5509 5510 8.2.4 ARC Machine Directives 5511 ---------------------------- 5512 5513 The ARC version of `as' supports the following additional machine 5514 directives: 5515 5516 `.2byte EXPRESSIONS' 5517 *TODO* 5518 5519 `.3byte EXPRESSIONS' 5520 *TODO* 5521 5522 `.4byte EXPRESSIONS' 5523 *TODO* 5524 5525 `.extAuxRegister NAME,ADDRESS,MODE' 5526 The ARCtangent A4 has extensible auxiliary register space. The 5527 auxiliary registers can be defined in the assembler source code by 5528 using this directive. The first parameter is the NAME of the new 5529 auxiallry register. The second parameter is the ADDRESS of the 5530 register in the auxiliary register memory map for the variant of 5531 the ARC. The third parameter specifies the MODE in which the 5532 register can be operated is and it can be one of: 5533 5534 `r (readonly)' 5535 5536 `w (write only)' 5537 5538 `r|w (read or write)' 5539 5540 For example: 5541 5542 .extAuxRegister mulhi,0x12,w 5543 5544 This specifies an extension auxiliary register called _mulhi_ 5545 which is at address 0x12 in the memory space and which is only 5546 writable. 5547 5548 `.extCondCode SUFFIX,VALUE' 5549 The condition codes on the ARCtangent A4 are extensible and can be 5550 specified by means of this assembler directive. They are specified 5551 by the suffix and the value for the condition code. They can be 5552 used to specify extra condition codes with any values. For 5553 example: 5554 5555 .extCondCode is_busy,0x14 5556 5557 add.is_busy r1,r2,r3 5558 bis_busy _main 5559 5560 `.extCoreRegister NAME,REGNUM,MODE,SHORTCUT' 5561 Specifies an extension core register NAME for the application. 5562 This allows a register NAME with a valid REGNUM between 0 and 60, 5563 with the following as valid values for MODE 5564 5565 `_r_ (readonly)' 5566 5567 `_w_ (write only)' 5568 5569 `_r|w_ (read or write)' 5570 5571 The other parameter gives a description of the register having a 5572 SHORTCUT in the pipeline. The valid values are: 5573 5574 `can_shortcut' 5575 5576 `cannot_shortcut' 5577 5578 For example: 5579 5580 .extCoreRegister mlo,57,r,can_shortcut 5581 5582 This defines an extension core register mlo with the value 57 which 5583 can shortcut the pipeline. 5584 5585 `.extInstruction NAME,OPCODE,SUBOPCODE,SUFFIXCLASS,SYNTAXCLASS' 5586 The ARCtangent A4 allows the user to specify extension 5587 instructions. The extension instructions are not macros. The 5588 assembler creates encodings for use of these instructions 5589 according to the specification by the user. The parameters are: 5590 5591 *NAME 5592 Name of the extension instruction 5593 5594 *OPCODE 5595 Opcode to be used. (Bits 27:31 in the encoding). Valid values 5596 0x10-0x1f or 0x03 5597 5598 *SUBOPCODE 5599 Subopcode to be used. Valid values are from 0x09-0x3f. 5600 However the correct value also depends on SYNTAXCLASS 5601 5602 *SUFFIXCLASS 5603 Determines the kinds of suffixes to be allowed. Valid values 5604 are `SUFFIX_NONE', `SUFFIX_COND', `SUFFIX_FLAG' which 5605 indicates the absence or presence of conditional suffixes and 5606 flag setting by the extension instruction. It is also 5607 possible to specify that an instruction sets the flags and is 5608 conditional by using `SUFFIX_CODE' | `SUFFIX_FLAG'. 5609 5610 *SYNTAXCLASS 5611 Determines the syntax class for the instruction. It can have 5612 the following values: 5613 5614 ``SYNTAX_2OP':' 5615 2 Operand Instruction 5616 5617 ``SYNTAX_3OP':' 5618 3 Operand Instruction 5619 5620 In addition there could be modifiers for the syntax class as 5621 described below: 5622 5623 Syntax Class Modifiers are: 5624 5625 - `OP1_MUST_BE_IMM': Modifies syntax class SYNTAX_3OP, 5626 specifying that the first operand of a three-operand 5627 instruction must be an immediate (i.e. the result is 5628 discarded). OP1_MUST_BE_IMM is used by bitwise ORing it 5629 with SYNTAX_3OP as given in the example below. This 5630 could usually be used to set the flags using specific 5631 instructions and not retain results. 5632 5633 - `OP1_IMM_IMPLIED': Modifies syntax class SYNTAX_20P, it 5634 specifies that there is an implied immediate destination 5635 operand which does not appear in the syntax. For 5636 example, if the source code contains an instruction like: 5637 5638 inst r1,r2 5639 5640 it really means that the first argument is an implied 5641 immediate (that is, the result is discarded). This is 5642 the same as though the source code were: inst 0,r1,r2. 5643 You use OP1_IMM_IMPLIED by bitwise ORing it with 5644 SYNTAX_20P. 5645 5646 5647 For example, defining 64-bit multiplier with immediate operands: 5648 5649 .extInstruction mp64,0x14,0x0,SUFFIX_COND | SUFFIX_FLAG , 5650 SYNTAX_3OP|OP1_MUST_BE_IMM 5651 5652 The above specifies an extension instruction called mp64 which has 5653 3 operands, sets the flags, can be used with a condition code, for 5654 which the first operand is an immediate. (Equivalent to 5655 discarding the result of the operation). 5656 5657 .extInstruction mul64,0x14,0x00,SUFFIX_COND, SYNTAX_2OP|OP1_IMM_IMPLIED 5658 5659 This describes a 2 operand instruction with an implicit first 5660 immediate operand. The result of this operation would be 5661 discarded. 5662 5663 `.half EXPRESSIONS' 5664 *TODO* 5665 5666 `.long EXPRESSIONS' 5667 *TODO* 5668 5669 `.option ARC|ARC5|ARC6|ARC7|ARC8' 5670 The `.option' directive must be followed by the desired core 5671 version. Again `arc' is an alias for `arc6'. 5672 5673 Note: the `.option' directive overrides the command line option 5674 `-marc'; a warning is emitted when the version is not consistent 5675 between the two - even for the implicit default core version 5676 (arc6). 5677 5678 `.short EXPRESSIONS' 5679 *TODO* 5680 5681 `.word EXPRESSIONS' 5682 *TODO* 5683 5684 5685 5686 File: as.info, Node: ARC Opcodes, Prev: ARC Directives, Up: ARC-Dependent 5687 5688 8.2.5 Opcodes 5689 ------------- 5690 5691 For information on the ARC instruction set, see `ARC Programmers 5692 Reference Manual', ARC International (www.arc.com) 5693 5694 5695 File: as.info, Node: ARM-Dependent, Next: BFIN-Dependent, Prev: ARC-Dependent, Up: Machine Dependencies 5696 5697 8.3 ARM Dependent Features 5698 ========================== 5699 5700 * Menu: 5701 5702 * ARM Options:: Options 5703 * ARM Syntax:: Syntax 5704 * ARM Floating Point:: Floating Point 5705 * ARM Directives:: ARM Machine Directives 5706 * ARM Opcodes:: Opcodes 5707 * ARM Mapping Symbols:: Mapping Symbols 5708 5709 5710 File: as.info, Node: ARM Options, Next: ARM Syntax, Up: ARM-Dependent 5711 5712 8.3.1 Options 5713 ------------- 5714 5715 `-mcpu=PROCESSOR[+EXTENSION...]' 5716 This option specifies the target processor. The assembler will 5717 issue an error message if an attempt is made to assemble an 5718 instruction which will not execute on the target processor. The 5719 following processor names are recognized: `arm1', `arm2', `arm250', 5720 `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', 5721 `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', 5722 `arm700i', `arm710', `arm710t', `arm720', `arm720t', `arm740t', 5723 `arm710c', `arm7100', `arm7500', `arm7500fe', `arm7t', `arm7tdmi', 5724 `arm7tdmi-s', `arm8', `arm810', `strongarm', `strongarm1', 5725 `strongarm110', `strongarm1100', `strongarm1110', `arm9', `arm920', 5726 `arm920t', `arm922t', `arm940t', `arm9tdmi', `arm9e', `arm926e', 5727 `arm926ej-s', `arm946e-r0', `arm946e', `arm946e-s', `arm966e-r0', 5728 `arm966e', `arm966e-s', `arm968e-s', `arm10t', `arm10tdmi', 5729 `arm10e', `arm1020', `arm1020t', `arm1020e', `arm1022e', 5730 `arm1026ej-s', `arm1136j-s', `arm1136jf-s', `arm1156t2-s', 5731 `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s', `mpcore', 5732 `mpcorenovfp', `cortex-a8', `cortex-r4', `cortex-m3', `ep9312' 5733 (ARM920 with Cirrus Maverick coprocessor), `i80200' (Intel XScale 5734 processor) `iwmmxt' (Intel(r) XScale processor with Wireless 5735 MMX(tm) technology coprocessor) and `xscale'. The special name 5736 `all' may be used to allow the assembler to accept instructions 5737 valid for any ARM processor. 5738 5739 In addition to the basic instruction set, the assembler can be 5740 told to accept various extension mnemonics that extend the 5741 processor using the co-processor instruction space. For example, 5742 `-mcpu=arm920+maverick' is equivalent to specifying 5743 `-mcpu=ep9312'. The following extensions are currently supported: 5744 `+maverick' `+iwmmxt' and `+xscale'. 5745 5746 `-march=ARCHITECTURE[+EXTENSION...]' 5747 This option specifies the target architecture. The assembler will 5748 issue an error message if an attempt is made to assemble an 5749 instruction which will not execute on the target architecture. 5750 The following architecture names are recognized: `armv1', `armv2', 5751 `armv2a', `armv2s', `armv3', `armv3m', `armv4', `armv4xm', 5752 `armv4t', `armv4txm', `armv5', `armv5t', `armv5txm', `armv5te', 5753 `armv5texp', `armv6', `armv6j', `armv6k', `armv6z', `armv6zk', 5754 `armv7', `armv7a', `armv7r', `armv7m', `iwmmxt' and `xscale'. If 5755 both `-mcpu' and `-march' are specified, the assembler will use 5756 the setting for `-mcpu'. 5757 5758 The architecture option can be extended with the same instruction 5759 set extension options as the `-mcpu' option. 5760 5761 `-mfpu=FLOATING-POINT-FORMAT' 5762 This option specifies the floating point format to assemble for. 5763 The assembler will issue an error message if an attempt is made to 5764 assemble an instruction which will not execute on the target 5765 floating point unit. The following format options are recognized: 5766 `softfpa', `fpe', `fpe2', `fpe3', `fpa', `fpa10', `fpa11', 5767 `arm7500fe', `softvfp', `softvfp+vfp', `vfp', `vfp10', `vfp10-r0', 5768 `vfp9', `vfpxd', `arm1020t', `arm1020e', `arm1136jf-s' and 5769 `maverick'. 5770 5771 In addition to determining which instructions are assembled, this 5772 option also affects the way in which the `.double' assembler 5773 directive behaves when assembling little-endian code. 5774 5775 The default is dependent on the processor selected. For 5776 Architecture 5 or later, the default is to assembler for VFP 5777 instructions; for earlier architectures the default is to assemble 5778 for FPA instructions. 5779 5780 `-mthumb' 5781 This option specifies that the assembler should start assembling 5782 Thumb instructions; that is, it should behave as though the file 5783 starts with a `.code 16' directive. 5784 5785 `-mthumb-interwork' 5786 This option specifies that the output generated by the assembler 5787 should be marked as supporting interworking. 5788 5789 `-mapcs `[26|32]'' 5790 This option specifies that the output generated by the assembler 5791 should be marked as supporting the indicated version of the Arm 5792 Procedure. Calling Standard. 5793 5794 `-matpcs' 5795 This option specifies that the output generated by the assembler 5796 should be marked as supporting the Arm/Thumb Procedure Calling 5797 Standard. If enabled this option will cause the assembler to 5798 create an empty debugging section in the object file called 5799 .arm.atpcs. Debuggers can use this to determine the ABI being 5800 used by. 5801 5802 `-mapcs-float' 5803 This indicates the floating point variant of the APCS should be 5804 used. In this variant floating point arguments are passed in FP 5805 registers rather than integer registers. 5806 5807 `-mapcs-reentrant' 5808 This indicates that the reentrant variant of the APCS should be 5809 used. This variant supports position independent code. 5810 5811 `-mfloat-abi=ABI' 5812 This option specifies that the output generated by the assembler 5813 should be marked as using specified floating point ABI. The 5814 following values are recognized: `soft', `softfp' and `hard'. 5815 5816 `-meabi=VER' 5817 This option specifies which EABI version the produced object files 5818 should conform to. The following values are recognised: `gnu', `4' 5819 and `5'. 5820 5821 `-EB' 5822 This option specifies that the output generated by the assembler 5823 should be marked as being encoded for a big-endian processor. 5824 5825 `-EL' 5826 This option specifies that the output generated by the assembler 5827 should be marked as being encoded for a little-endian processor. 5828 5829 `-k' 5830 This option specifies that the output of the assembler should be 5831 marked as position-independent code (PIC). 5832 5833 5834 5835 File: as.info, Node: ARM Syntax, Next: ARM Floating Point, Prev: ARM Options, Up: ARM-Dependent 5836 5837 8.3.2 Syntax 5838 ------------ 5839 5840 * Menu: 5841 5842 * ARM-Chars:: Special Characters 5843 * ARM-Regs:: Register Names 5844 5845 5846 File: as.info, Node: ARM-Chars, Next: ARM-Regs, Up: ARM Syntax 5847 5848 8.3.2.1 Special Characters 5849 .......................... 5850 5851 The presence of a `@' on a line indicates the start of a comment that 5852 extends to the end of the current line. If a `#' appears as the first 5853 character of a line, the whole line is treated as a comment. 5854 5855 The `;' character can be used instead of a newline to separate 5856 statements. 5857 5858 Either `#' or `$' can be used to indicate immediate operands. 5859 5860 *TODO* Explain about /data modifier on symbols. 5861 5862 5863 File: as.info, Node: ARM-Regs, Prev: ARM-Chars, Up: ARM Syntax 5864 5865 8.3.2.2 Register Names 5866 ...................... 5867 5868 *TODO* Explain about ARM register naming, and the predefined names. 5869 5870 5871 File: as.info, Node: ARM Floating Point, Next: ARM Directives, Prev: ARM Syntax, Up: ARM-Dependent 5872 5873 8.3.3 Floating Point 5874 -------------------- 5875 5876 The ARM family uses IEEE floating-point numbers. 5877 5878 5879 File: as.info, Node: ARM Directives, Next: ARM Opcodes, Prev: ARM Floating Point, Up: ARM-Dependent 5880 5881 8.3.4 ARM Machine Directives 5882 ---------------------------- 5883 5884 `.align EXPRESSION [, EXPRESSION]' 5885 This is the generic .ALIGN directive. For the ARM however if the 5886 first argument is zero (ie no alignment is needed) the assembler 5887 will behave as if the argument had been 2 (ie pad to the next four 5888 byte boundary). This is for compatibility with ARM's own 5889 assembler. 5890 5891 `NAME .req REGISTER NAME' 5892 This creates an alias for REGISTER NAME called NAME. For example: 5893 5894 foo .req r0 5895 5896 `.unreq ALIAS-NAME' 5897 This undefines a register alias which was previously defined using 5898 the `req' directive. For example: 5899 5900 foo .req r0 5901 .unreq foo 5902 5903 An error occurs if the name is undefined. Note - this pseudo op 5904 can be used to delete builtin in register name aliases (eg 'r0'). 5905 This should only be done if it is really necessary. 5906 5907 `.code `[16|32]'' 5908 This directive selects the instruction set being generated. The 5909 value 16 selects Thumb, with the value 32 selecting ARM. 5910 5911 `.thumb' 5912 This performs the same action as .CODE 16. 5913 5914 `.arm' 5915 This performs the same action as .CODE 32. 5916 5917 `.force_thumb' 5918 This directive forces the selection of Thumb instructions, even if 5919 the target processor does not support those instructions 5920 5921 `.thumb_func' 5922 This directive specifies that the following symbol is the name of a 5923 Thumb encoded function. This information is necessary in order to 5924 allow the assembler and linker to generate correct code for 5925 interworking between Arm and Thumb instructions and should be used 5926 even if interworking is not going to be performed. The presence 5927 of this directive also implies `.thumb' 5928 5929 `.thumb_set' 5930 This performs the equivalent of a `.set' directive in that it 5931 creates a symbol which is an alias for another symbol (possibly 5932 not yet defined). This directive also has the added property in 5933 that it marks the aliased symbol as being a thumb function entry 5934 point, in the same way that the `.thumb_func' directive does. 5935 5936 `.ltorg' 5937 This directive causes the current contents of the literal pool to 5938 be dumped into the current section (which is assumed to be the 5939 .text section) at the current location (aligned to a word 5940 boundary). `GAS' maintains a separate literal pool for each 5941 section and each sub-section. The `.ltorg' directive will only 5942 affect the literal pool of the current section and sub-section. 5943 At the end of assembly all remaining, un-empty literal pools will 5944 automatically be dumped. 5945 5946 Note - older versions of `GAS' would dump the current literal pool 5947 any time a section change occurred. This is no longer done, since 5948 it prevents accurate control of the placement of literal pools. 5949 5950 `.pool' 5951 This is a synonym for .ltorg. 5952 5953 `.unwind_fnstart' 5954 Marks the start of a function with an unwind table entry. 5955 5956 `.unwind_fnend' 5957 Marks the end of a function with an unwind table entry. The 5958 unwind index table entry is created when this directive is 5959 processed. 5960 5961 If no personality routine has been specified then standard 5962 personality routine 0 or 1 will be used, depending on the number 5963 of unwind opcodes required. 5964 5965 `.cantunwind' 5966 Prevents unwinding through the current function. No personality 5967 routine or exception table data is required or permitted. 5968 5969 `.personality NAME' 5970 Sets the personality routine for the current function to NAME. 5971 5972 `.personalityindex INDEX' 5973 Sets the personality routine for the current function to the EABI 5974 standard routine number INDEX 5975 5976 `.handlerdata' 5977 Marks the end of the current function, and the start of the 5978 exception table entry for that function. Anything between this 5979 directive and the `.fnend' directive will be added to the 5980 exception table entry. 5981 5982 Must be preceded by a `.personality' or `.personalityindex' 5983 directive. 5984 5985 `.save REGLIST' 5986 Generate unwinder annotations to restore the registers in REGLIST. 5987 The format of REGLIST is the same as the corresponding 5988 store-multiple instruction. 5989 5990 _core registers_ 5991 .save {r4, r5, r6, lr} 5992 stmfd sp!, {r4, r5, r6, lr} 5993 _FPA registers_ 5994 .save f4, 2 5995 sfmfd f4, 2, [sp]! 5996 _VFP registers_ 5997 .save {d8, d9, d10} 5998 fstmdf sp!, {d8, d9, d10} 5999 _iWMMXt registers_ 6000 .save {wr10, wr11} 6001 wstrd wr11, [sp, #-8]! 6002 wstrd wr10, [sp, #-8]! 6003 or 6004 .save wr11 6005 wstrd wr11, [sp, #-8]! 6006 .save wr10 6007 wstrd wr10, [sp, #-8]! 6008 6009 `.pad #COUNT' 6010 Generate unwinder annotations for a stack adjustment of COUNT 6011 bytes. A positive value indicates the function prologue allocated 6012 stack space by decrementing the stack pointer. 6013 6014 `.movsp REG' 6015 Tell the unwinder that REG contains the current stack pointer. 6016 6017 `.setfp FPREG, SPREG [, #OFFSET]' 6018 Make all unwinder annotations relaive to a frame pointer. Without 6019 this the unwinder will use offsets from the stack pointer. 6020 6021 The syntax of this directive is the same as the `sub' or `mov' 6022 instruction used to set the frame pointer. SPREG must be either 6023 `sp' or mentioned in a previous `.movsp' directive. 6024 6025 .movsp ip 6026 mov ip, sp 6027 ... 6028 .setfp fp, ip, #4 6029 sub fp, ip, #4 6030 6031 `.raw OFFSET, BYTE1, ...' 6032 Insert one of more arbitary unwind opcode bytes, which are known 6033 to adjust the stack pointer by OFFSET bytes. 6034 6035 For example `.unwind_raw 4, 0xb1, 0x01' is equivalent to `.save 6036 {r0}' 6037 6038 `.cpu NAME' 6039 Select the target processor. Valid values for NAME are the same as 6040 for the `-mcpu' commandline option. 6041 6042 `.arch NAME' 6043 Select the target architecture. Valid values for NAME are the 6044 same as for the `-march' commandline option. 6045 6046 `.fpu NAME' 6047 Select the floating point unit to assemble for. Valid values for 6048 NAME are the same as for the `-mfpu' commandline option. 6049 6050 `.eabi_attribute TAG, VALUE' 6051 Set the EABI object attribute number TAG to VALUE. The value is 6052 either a `number', `"string"', or `number, "string"' depending on 6053 the tag. 6054 6055 6056 6057 File: as.info, Node: ARM Opcodes, Next: ARM Mapping Symbols, Prev: ARM Directives, Up: ARM-Dependent 6058 6059 8.3.5 Opcodes 6060 ------------- 6061 6062 `as' implements all the standard ARM opcodes. It also implements 6063 several pseudo opcodes, including several synthetic load instructions. 6064 6065 `NOP' 6066 nop 6067 6068 This pseudo op will always evaluate to a legal ARM instruction 6069 that does nothing. Currently it will evaluate to MOV r0, r0. 6070 6071 `LDR' 6072 ldr <register> , = <expression> 6073 6074 If expression evaluates to a numeric constant then a MOV or MVN 6075 instruction will be used in place of the LDR instruction, if the 6076 constant can be generated by either of these instructions. 6077 Otherwise the constant will be placed into the nearest literal 6078 pool (if it not already there) and a PC relative LDR instruction 6079 will be generated. 6080 6081 `ADR' 6082 adr <register> <label> 6083 6084 This instruction will load the address of LABEL into the indicated 6085 register. The instruction will evaluate to a PC relative ADD or 6086 SUB instruction depending upon where the label is located. If the 6087 label is out of range, or if it is not defined in the same file 6088 (and section) as the ADR instruction, then an error will be 6089 generated. This instruction will not make use of the literal pool. 6090 6091 `ADRL' 6092 adrl <register> <label> 6093 6094 This instruction will load the address of LABEL into the indicated 6095 register. The instruction will evaluate to one or two PC relative 6096 ADD or SUB instructions depending upon where the label is located. 6097 If a second instruction is not needed a NOP instruction will be 6098 generated in its place, so that this instruction is always 8 bytes 6099 long. 6100 6101 If the label is out of range, or if it is not defined in the same 6102 file (and section) as the ADRL instruction, then an error will be 6103 generated. This instruction will not make use of the literal pool. 6104 6105 6106 For information on the ARM or Thumb instruction sets, see `ARM 6107 Software Development Toolkit Reference Manual', Advanced RISC Machines 6108 Ltd. 6109 6110 6111 File: as.info, Node: ARM Mapping Symbols, Prev: ARM Opcodes, Up: ARM-Dependent 6112 6113 8.3.6 Mapping Symbols 6114 --------------------- 6115 6116 The ARM ELF specification requires that special symbols be inserted 6117 into object files to mark certain features: 6118 6119 `$a' 6120 At the start of a region of code containing ARM instructions. 6121 6122 `$t' 6123 At the start of a region of code containing THUMB instructions. 6124 6125 `$d' 6126 At the start of a region of data. 6127 6128 6129 The assembler will automatically insert these symbols for you - there 6130 is no need to code them yourself. Support for tagging symbols ($b, $f, 6131 $p and $m) which is also mentioned in the current ARM ELF specification 6132 is not implemented. This is because they have been dropped from the 6133 new EABI and so tools cannot rely upon their presence. 6134 6135 6136 File: as.info, Node: BFIN-Dependent, Next: CRIS-Dependent, Prev: ARM-Dependent, Up: Machine Dependencies 6137 6138 8.4 Blackfin Dependent Features 6139 =============================== 6140 6141 * Menu: 6142 6143 * BFIN Syntax:: BFIN Syntax 6144 * BFIN Directives:: BFIN Directives 6145 6146 6147 File: as.info, Node: BFIN Syntax, Next: BFIN Directives, Up: BFIN-Dependent 6148 6149 8.4.1 Syntax 6150 ------------ 6151 6152 `Special Characters' 6153 Assembler input is free format and may appear anywhere on the line. 6154 One instruction may extend across multiple lines or more than one 6155 instruction may appear on the same line. White space (space, tab, 6156 comments or newline) may appear anywhere between tokens. A token 6157 must not have embedded spaces. Tokens include numbers, register 6158 names, keywords, user identifiers, and also some multicharacter 6159 special symbols like "+=", "/*" or "||". 6160 6161 `Instruction Delimiting' 6162 A semicolon must terminate every instruction. Sometimes a complete 6163 instruction will consist of more than one operation. There are two 6164 cases where this occurs. The first is when two general operations 6165 are combined. Normally a comma separates the different parts, as 6166 in 6167 6168 a0= r3.h * r2.l, a1 = r3.l * r2.h ; 6169 6170 The second case occurs when a general instruction is combined with 6171 one or two memory references for joint issue. The latter portions 6172 are set off by a "||" token. 6173 6174 a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++]; 6175 6176 `Register Names' 6177 The assembler treats register names and instruction keywords in a 6178 case insensitive manner. User identifiers are case sensitive. 6179 Thus, R3.l, R3.L, r3.l and r3.L are all equivalent input to the 6180 assembler. 6181 6182 Register names are reserved and may not be used as program 6183 identifiers. 6184 6185 Some operations (such as "Move Register") require a register pair. 6186 Register pairs are always data registers and are denoted using a 6187 colon, eg., R3:2. The larger number must be written firsts. Note 6188 that the hardware only supports odd-even pairs, eg., R7:6, R5:4, 6189 R3:2, and R1:0. 6190 6191 Some instructions (such as -SP (Push Multiple)) require a group of 6192 adjacent registers. Adjacent registers are denoted in the syntax 6193 by the range enclosed in parentheses and separated by a colon, 6194 eg., (R7:3). Again, the larger number appears first. 6195 6196 Portions of a particular register may be individually specified. 6197 This is written with a dot (".") following the register name and 6198 then a letter denoting the desired portion. For 32-bit registers, 6199 ".H" denotes the most significant ("High") portion. ".L" denotes 6200 the least-significant portion. The subdivisions of the 40-bit 6201 registers are described later. 6202 6203 `Accumulators' 6204 The set of 40-bit registers A1 and A0 that normally contain data 6205 that is being manipulated. Each accumulator can be accessed in 6206 four ways. 6207 6208 `one 40-bit register' 6209 The register will be referred to as A1 or A0. 6210 6211 `one 32-bit register' 6212 The registers are designated as A1.W or A0.W. 6213 6214 `two 16-bit registers' 6215 The registers are designated as A1.H, A1.L, A0.H or A0.L. 6216 6217 `one 8-bit register' 6218 The registers are designated as A1.X or A0.X for the bits that 6219 extend beyond bit 31. 6220 6221 `Data Registers' 6222 The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7) 6223 that normally contain data for manipulation. These are 6224 abbreviated as D-register or Dreg. Data registers can be accessed 6225 as 32-bit registers or as two independent 16-bit registers. The 6226 least significant 16 bits of each register is called the "low" 6227 half and is desginated with ".L" following the register name. The 6228 most significant 16 bits are called the "high" half and is 6229 designated with ".H". following the name. 6230 6231 R7.L, r2.h, r4.L, R0.H 6232 6233 `Pointer Registers' 6234 The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP) 6235 that normally contain byte addresses of data structures. These are 6236 abbreviated as P-register or Preg. 6237 6238 p2, p5, fp, sp 6239 6240 `Stack Pointer SP' 6241 The stack pointer contains the 32-bit address of the last occupied 6242 byte location in the stack. The stack grows by decrementing the 6243 stack pointer. 6244 6245 `Frame Pointer FP' 6246 The frame pointer contains the 32-bit address of the previous frame 6247 pointer in the stack. It is located at the top of a frame. 6248 6249 `Loop Top' 6250 LT0 and LT1. These registers contain the 32-bit address of the 6251 top of a zero overhead loop. 6252 6253 `Loop Count' 6254 LC0 and LC1. These registers contain the 32-bit counter of the 6255 zero overhead loop executions. 6256 6257 `Loop Bottom' 6258 LB0 and LB1. These registers contain the 32-bit address of the 6259 bottom of a zero overhead loop. 6260 6261 `Index Registers' 6262 The set of 32-bit registers (I0, I1, I2, I3) that normally contain 6263 byte addresses of data structures. Abbreviated I-register or Ireg. 6264 6265 `Modify Registers' 6266 The set of 32-bit registers (M0, M1, M2, M3) that normally contain 6267 offset values that are added and subracted to one of the index 6268 registers. Abbreviated as Mreg. 6269 6270 `Length Registers' 6271 The set of 32-bit registers (L0, L1, L2, L3) that normally contain 6272 the length in bytes of the circular buffer. Abbreviated as Lreg. 6273 Clear the Lreg to disable circular addressing for the 6274 corresponding Ireg. 6275 6276 `Base Registers' 6277 The set of 32-bit registers (B0, B1, B2, B3) that normally contain 6278 the base address in bytes of the circular buffer. Abbreviated as 6279 Breg. 6280 6281 `Floating Point' 6282 The Blackfin family has no hardware floating point but the .float 6283 directive generates ieee floating point numbers for use with 6284 software floating point libraries. 6285 6286 `Blackfin Opcodes' 6287 For detailed information on the Blackfin machine instruction set, 6288 see the Blackfin(r) Processor Instruction Set Reference. 6289 6290 6291 6292 File: as.info, Node: BFIN Directives, Prev: BFIN Syntax, Up: BFIN-Dependent 6293 6294 8.4.2 Directives 6295 ---------------- 6296 6297 The following directives are provided for compatibility with the VDSP 6298 assembler. 6299 6300 `.byte2' 6301 Initializes a four byte data object. 6302 6303 `.byte4' 6304 Initializes a two byte data object. 6305 6306 `.db' 6307 TBD 6308 6309 `.dd' 6310 TBD 6311 6312 `.dw' 6313 TBD 6314 6315 `.var' 6316 Define and initialize a 32 bit data object. 6317 6318 6319 File: as.info, Node: CRIS-Dependent, Next: D10V-Dependent, Prev: BFIN-Dependent, Up: Machine Dependencies 6320 6321 8.5 CRIS Dependent Features 6322 =========================== 6323 6324 * Menu: 6325 6326 * CRIS-Opts:: Command-line Options 6327 * CRIS-Expand:: Instruction expansion 6328 * CRIS-Symbols:: Symbols 6329 * CRIS-Syntax:: Syntax 6330 6331 6332 File: as.info, Node: CRIS-Opts, Next: CRIS-Expand, Up: CRIS-Dependent 6333 6334 8.5.1 Command-line Options 6335 -------------------------- 6336 6337 The CRIS version of `as' has these machine-dependent command-line 6338 options. 6339 6340 The format of the generated object files can be either ELF or a.out, 6341 specified by the command-line options `--emulation=crisaout' and 6342 `--emulation=criself'. The default is ELF (criself), unless `as' has 6343 been configured specifically for a.out by using the configuration name 6344 `cris-axis-aout'. 6345 6346 There are two different link-incompatible ELF object file variants 6347 for CRIS, for use in environments where symbols are expected to be 6348 prefixed by a leading `_' character and for environments without such a 6349 symbol prefix. The variant used for GNU/Linux port has no symbol 6350 prefix. Which variant to produce is specified by either of the options 6351 `--underscore' and `--no-underscore'. The default is `--underscore'. 6352 Since symbols in CRIS a.out objects are expected to have a `_' prefix, 6353 specifying `--no-underscore' when generating a.out objects is an error. 6354 Besides the object format difference, the effect of this option is to 6355 parse register names differently (*note crisnous::). The 6356 `--no-underscore' option makes a `$' register prefix mandatory. 6357 6358 The option `--pic' must be passed to `as' in order to recognize the 6359 symbol syntax used for ELF (SVR4 PIC) position-independent-code (*note 6360 crispic::). This will also affect expansion of instructions. The 6361 expansion with `--pic' will use PC-relative rather than (slightly 6362 faster) absolute addresses in those expansions. 6363 6364 The option `--march=ARCHITECTURE' specifies the recognized 6365 instruction set and recognized register names. It also controls the 6366 architecture type of the object file. Valid values for ARCHITECTURE 6367 are: 6368 `v0_v10' 6369 All instructions and register names for any architecture variant 6370 in the set v0...v10 are recognized. This is the default if the 6371 target is configured as cris-*. 6372 6373 `v10' 6374 Only instructions and register names for CRIS v10 (as found in 6375 ETRAX 100 LX) are recognized. This is the default if the target 6376 is configured as crisv10-*. 6377 6378 `v32' 6379 Only instructions and register names for CRIS v32 (code name 6380 Guinness) are recognized. This is the default if the target is 6381 configured as crisv32-*. This value implies `--no-mul-bug-abort'. 6382 (A subsequent `--mul-bug-abort' will turn it back on.) 6383 6384 `common_v10_v32' 6385 Only instructions with register names and addressing modes with 6386 opcodes common to the v10 and v32 are recognized. 6387 6388 When `-N' is specified, `as' will emit a warning when a 16-bit 6389 branch instruction is expanded into a 32-bit multiple-instruction 6390 construct (*note CRIS-Expand::). 6391 6392 Some versions of the CRIS v10, for example in the Etrax 100 LX, 6393 contain a bug that causes destabilizing memory accesses when a multiply 6394 instruction is executed with certain values in the first operand just 6395 before a cache-miss. When the `--mul-bug-abort' command line option is 6396 active (the default value), `as' will refuse to assemble a file 6397 containing a multiply instruction at a dangerous offset, one that could 6398 be the last on a cache-line, or is in a section with insufficient 6399 alignment. This placement checking does not catch any case where the 6400 multiply instruction is dangerously placed because it is located in a 6401 delay-slot. The `--mul-bug-abort' command line option turns off the 6402 checking. 6403 6404 6405 File: as.info, Node: CRIS-Expand, Next: CRIS-Symbols, Prev: CRIS-Opts, Up: CRIS-Dependent 6406 6407 8.5.2 Instruction expansion 6408 --------------------------- 6409 6410 `as' will silently choose an instruction that fits the operand size for 6411 `[register+constant]' operands. For example, the offset `127' in 6412 `move.d [r3+127],r4' fits in an instruction using a signed-byte offset. 6413 Similarly, `move.d [r2+32767],r1' will generate an instruction using a 6414 16-bit offset. For symbolic expressions and constants that do not fit 6415 in 16 bits including the sign bit, a 32-bit offset is generated. 6416 6417 For branches, `as' will expand from a 16-bit branch instruction into 6418 a sequence of instructions that can reach a full 32-bit address. Since 6419 this does not correspond to a single instruction, such expansions can 6420 optionally be warned about. *Note CRIS-Opts::. 6421 6422 If the operand is found to fit the range, a `lapc' mnemonic will 6423 translate to a `lapcq' instruction. Use `lapc.d' to force the 32-bit 6424 `lapc' instruction. 6425 6426 Similarly, the `addo' mnemonic will translate to the shortest 6427 fitting instruction of `addoq', `addo.w' and `addo.d', when used with a 6428 operand that is a constant known at assembly time. 6429 6430 6431 File: as.info, Node: CRIS-Symbols, Next: CRIS-Syntax, Prev: CRIS-Expand, Up: CRIS-Dependent 6432 6433 8.5.3 Symbols 6434 ------------- 6435 6436 Some symbols are defined by the assembler. They're intended to be used 6437 in conditional assembly, for example: 6438 .if ..asm.arch.cris.v32 6439 CODE FOR CRIS V32 6440 .elseif ..asm.arch.cris.common_v10_v32 6441 CODE COMMON TO CRIS V32 AND CRIS V10 6442 .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10 6443 CODE FOR V10 6444 .else 6445 .error "Code needs to be added here." 6446 .endif 6447 6448 These symbols are defined in the assembler, reflecting command-line 6449 options, either when specified or the default. They are always 6450 defined, to 0 or 1. 6451 `..asm.arch.cris.any_v0_v10' 6452 This symbol is non-zero when `--march=v0_v10' is specified or the 6453 default. 6454 6455 `..asm.arch.cris.common_v10_v32' 6456 Set according to the option `--march=common_v10_v32'. 6457 6458 `..asm.arch.cris.v10' 6459 Reflects the option `--march=v10'. 6460 6461 `..asm.arch.cris.v32' 6462 Corresponds to `--march=v10'. 6463 6464 Speaking of symbols, when a symbol is used in code, it can have a 6465 suffix modifying its value for use in position-independent code. *Note 6466 CRIS-Pic::. 6467 6468 6469 File: as.info, Node: CRIS-Syntax, Prev: CRIS-Symbols, Up: CRIS-Dependent 6470 6471 8.5.4 Syntax 6472 ------------ 6473 6474 There are different aspects of the CRIS assembly syntax. 6475 6476 * Menu: 6477 6478 * CRIS-Chars:: Special Characters 6479 * CRIS-Pic:: Position-Independent Code Symbols 6480 * CRIS-Regs:: Register Names 6481 * CRIS-Pseudos:: Assembler Directives 6482 6483 6484 File: as.info, Node: CRIS-Chars, Next: CRIS-Pic, Up: CRIS-Syntax 6485 6486 8.5.4.1 Special Characters 6487 .......................... 6488 6489 The character `#' is a line comment character. It starts a comment if 6490 and only if it is placed at the beginning of a line. 6491 6492 A `;' character starts a comment anywhere on the line, causing all 6493 characters up to the end of the line to be ignored. 6494 6495 A `@' character is handled as a line separator equivalent to a 6496 logical new-line character (except in a comment), so separate 6497 instructions can be specified on a single line. 6498 6499 6500 File: as.info, Node: CRIS-Pic, Next: CRIS-Regs, Prev: CRIS-Chars, Up: CRIS-Syntax 6501 6502 8.5.4.2 Symbols in position-independent code 6503 ............................................ 6504 6505 When generating position-independent code (SVR4 PIC) for use in 6506 cris-axis-linux-gnu or crisv32-axis-linux-gnu shared libraries, symbol 6507 suffixes are used to specify what kind of run-time symbol lookup will 6508 be used, expressed in the object as different _relocation types_. 6509 Usually, all absolute symbol values must be located in a table, the 6510 _global offset table_, leaving the code position-independent; 6511 independent of values of global symbols and independent of the address 6512 of the code. The suffix modifies the value of the symbol, into for 6513 example an index into the global offset table where the real symbol 6514 value is entered, or a PC-relative value, or a value relative to the 6515 start of the global offset table. All symbol suffixes start with the 6516 character `:' (omitted in the list below). Every symbol use in code or 6517 a read-only section must therefore have a PIC suffix to enable a useful 6518 shared library to be created. Usually, these constructs must not be 6519 used with an additive constant offset as is usually allowed, i.e. no 4 6520 as in `symbol + 4' is allowed. This restriction is checked at 6521 link-time, not at assembly-time. 6522 6523 `GOT' 6524 Attaching this suffix to a symbol in an instruction causes the 6525 symbol to be entered into the global offset table. The value is a 6526 32-bit index for that symbol into the global offset table. The 6527 name of the corresponding relocation is `R_CRIS_32_GOT'. Example: 6528 `move.d [$r0+extsym:GOT],$r9' 6529 6530 `GOT16' 6531 Same as for `GOT', but the value is a 16-bit index into the global 6532 offset table. The corresponding relocation is `R_CRIS_16_GOT'. 6533 Example: `move.d [$r0+asymbol:GOT16],$r10' 6534 6535 `PLT' 6536 This suffix is used for function symbols. It causes a _procedure 6537 linkage table_, an array of code stubs, to be created at the time 6538 the shared object is created or linked against, together with a 6539 global offset table entry. The value is a pc-relative offset to 6540 the corresponding stub code in the procedure linkage table. This 6541 arrangement causes the run-time symbol resolver to be called to 6542 look up and set the value of the symbol the first time the 6543 function is called (at latest; depending environment variables). 6544 It is only safe to leave the symbol unresolved this way if all 6545 references are function calls. The name of the relocation is 6546 `R_CRIS_32_PLT_PCREL'. Example: `add.d fnname:PLT,$pc' 6547 6548 `PLTG' 6549 Like PLT, but the value is relative to the beginning of the global 6550 offset table. The relocation is `R_CRIS_32_PLT_GOTREL'. Example: 6551 `move.d fnname:PLTG,$r3' 6552 6553 `GOTPLT' 6554 Similar to `PLT', but the value of the symbol is a 32-bit index 6555 into the global offset table. This is somewhat of a mix between 6556 the effect of the `GOT' and the `PLT' suffix; the difference to 6557 `GOT' is that there will be a procedure linkage table entry 6558 created, and that the symbol is assumed to be a function entry and 6559 will be resolved by the run-time resolver as with `PLT'. The 6560 relocation is `R_CRIS_32_GOTPLT'. Example: `jsr 6561 [$r0+fnname:GOTPLT]' 6562 6563 `GOTPLT16' 6564 A variant of `GOTPLT' giving a 16-bit value. Its relocation name 6565 is `R_CRIS_16_GOTPLT'. Example: `jsr [$r0+fnname:GOTPLT16]' 6566 6567 `GOTOFF' 6568 This suffix must only be attached to a local symbol, but may be 6569 used in an expression adding an offset. The value is the address 6570 of the symbol relative to the start of the global offset table. 6571 The relocation name is `R_CRIS_32_GOTREL'. Example: `move.d 6572 [$r0+localsym:GOTOFF],r3' 6573 6574 6575 File: as.info, Node: CRIS-Regs, Next: CRIS-Pseudos, Prev: CRIS-Pic, Up: CRIS-Syntax 6576 6577 8.5.4.3 Register names 6578 ...................... 6579 6580 A `$' character may always prefix a general or special register name in 6581 an instruction operand but is mandatory when the option 6582 `--no-underscore' is specified or when the `.syntax register_prefix' 6583 directive is in effect (*note crisnous::). Register names are 6584 case-insensitive. 6585 6586 6587 File: as.info, Node: CRIS-Pseudos, Prev: CRIS-Regs, Up: CRIS-Syntax 6588 6589 8.5.4.4 Assembler Directives 6590 ............................ 6591 6592 There are a few CRIS-specific pseudo-directives in addition to the 6593 generic ones. *Note Pseudo Ops::. Constants emitted by 6594 pseudo-directives are in little-endian order for CRIS. There is no 6595 support for floating-point-specific directives for CRIS. 6596 6597 `.dword EXPRESSIONS' 6598 The `.dword' directive is a synonym for `.int', expecting zero or 6599 more EXPRESSIONS, separated by commas. For each expression, a 6600 32-bit little-endian constant is emitted. 6601 6602 `.syntax ARGUMENT' 6603 The `.syntax' directive takes as ARGUMENT one of the following 6604 case-sensitive choices. 6605 6606 `no_register_prefix' 6607 The `.syntax no_register_prefix' directive makes a `$' 6608 character prefix on all registers optional. It overrides a 6609 previous setting, including the corresponding effect of the 6610 option `--no-underscore'. If this directive is used when 6611 ordinary symbols do not have a `_' character prefix, care 6612 must be taken to avoid ambiguities whether an operand is a 6613 register or a symbol; using symbols with names the same as 6614 general or special registers then invoke undefined behavior. 6615 6616 `register_prefix' 6617 This directive makes a `$' character prefix on all registers 6618 mandatory. It overrides a previous setting, including the 6619 corresponding effect of the option `--underscore'. 6620 6621 `leading_underscore' 6622 This is an assertion directive, emitting an error if the 6623 `--no-underscore' option is in effect. 6624 6625 `no_leading_underscore' 6626 This is the opposite of the `.syntax leading_underscore' 6627 directive and emits an error if the option `--underscore' is 6628 in effect. 6629 6630 `.arch ARGUMENT' 6631 This is an assertion directive, giving an error if the specified 6632 ARGUMENT is not the same as the specified or default value for the 6633 `--march=ARCHITECTURE' option (*note march-option::). 6634 6635 6636 6637 File: as.info, Node: D10V-Dependent, Next: D30V-Dependent, Prev: CRIS-Dependent, Up: Machine Dependencies 6638 6639 8.6 D10V Dependent Features 6640 =========================== 6641 6642 * Menu: 6643 6644 * D10V-Opts:: D10V Options 6645 * D10V-Syntax:: Syntax 6646 * D10V-Float:: Floating Point 6647 * D10V-Opcodes:: Opcodes 6648 6649 6650 File: as.info, Node: D10V-Opts, Next: D10V-Syntax, Up: D10V-Dependent 6651 6652 8.6.1 D10V Options 6653 ------------------ 6654 6655 The Mitsubishi D10V version of `as' has a few machine dependent options. 6656 6657 `-O' 6658 The D10V can often execute two sub-instructions in parallel. When 6659 this option is used, `as' will attempt to optimize its output by 6660 detecting when instructions can be executed in parallel. 6661 6662 `--nowarnswap' 6663 To optimize execution performance, `as' will sometimes swap the 6664 order of instructions. Normally this generates a warning. When 6665 this option is used, no warning will be generated when 6666 instructions are swapped. 6667 6668 `--gstabs-packing' 6669 6670 `--no-gstabs-packing' 6671 `as' packs adjacent short instructions into a single packed 6672 instruction. `--no-gstabs-packing' turns instruction packing off if 6673 `--gstabs' is specified as well; `--gstabs-packing' (the default) 6674 turns instruction packing on even when `--gstabs' is specified. 6675 6676 6677 File: as.info, Node: D10V-Syntax, Next: D10V-Float, Prev: D10V-Opts, Up: D10V-Dependent 6678 6679 8.6.2 Syntax 6680 ------------ 6681 6682 The D10V syntax is based on the syntax in Mitsubishi's D10V 6683 architecture manual. The differences are detailed below. 6684 6685 * Menu: 6686 6687 * D10V-Size:: Size Modifiers 6688 * D10V-Subs:: Sub-Instructions 6689 * D10V-Chars:: Special Characters 6690 * D10V-Regs:: Register Names 6691 * D10V-Addressing:: Addressing Modes 6692 * D10V-Word:: @WORD Modifier 6693 6694 6695 File: as.info, Node: D10V-Size, Next: D10V-Subs, Up: D10V-Syntax 6696 6697 8.6.2.1 Size Modifiers 6698 ...................... 6699 6700 The D10V version of `as' uses the instruction names in the D10V 6701 Architecture Manual. However, the names in the manual are sometimes 6702 ambiguous. There are instruction names that can assemble to a short or 6703 long form opcode. How does the assembler pick the correct form? `as' 6704 will always pick the smallest form if it can. When dealing with a 6705 symbol that is not defined yet when a line is being assembled, it will 6706 always use the long form. If you need to force the assembler to use 6707 either the short or long form of the instruction, you can append either 6708 `.s' (short) or `.l' (long) to it. For example, if you are writing an 6709 assembly program and you want to do a branch to a symbol that is 6710 defined later in your program, you can write `bra.s foo'. Objdump 6711 and GDB will always append `.s' or `.l' to instructions which have both 6712 short and long forms. 6713 6714 6715 File: as.info, Node: D10V-Subs, Next: D10V-Chars, Prev: D10V-Size, Up: D10V-Syntax 6716 6717 8.6.2.2 Sub-Instructions 6718 ........................ 6719 6720 The D10V assembler takes as input a series of instructions, either 6721 one-per-line, or in the special two-per-line format described in the 6722 next section. Some of these instructions will be short-form or 6723 sub-instructions. These sub-instructions can be packed into a single 6724 instruction. The assembler will do this automatically. It will also 6725 detect when it should not pack instructions. For example, when a label 6726 is defined, the next instruction will never be packaged with the 6727 previous one. Whenever a branch and link instruction is called, it 6728 will not be packaged with the next instruction so the return address 6729 will be valid. Nops are automatically inserted when necessary. 6730 6731 If you do not want the assembler automatically making these 6732 decisions, you can control the packaging and execution type (parallel 6733 or sequential) with the special execution symbols described in the next 6734 section. 6735 6736 6737 File: as.info, Node: D10V-Chars, Next: D10V-Regs, Prev: D10V-Subs, Up: D10V-Syntax 6738 6739 8.6.2.3 Special Characters 6740 .......................... 6741 6742 `;' and `#' are the line comment characters. Sub-instructions may be 6743 executed in order, in reverse-order, or in parallel. Instructions 6744 listed in the standard one-per-line format will be executed 6745 sequentially. To specify the executing order, use the following 6746 symbols: 6747 `->' 6748 Sequential with instruction on the left first. 6749 6750 `<-' 6751 Sequential with instruction on the right first. 6752 6753 `||' 6754 Parallel 6755 The D10V syntax allows either one instruction per line, one 6756 instruction per line with the execution symbol, or two instructions per 6757 line. For example 6758 `abs a1 -> abs r0' 6759 Execute these sequentially. The instruction on the right is in 6760 the right container and is executed second. 6761 6762 `abs r0 <- abs a1' 6763 Execute these reverse-sequentially. The instruction on the right 6764 is in the right container, and is executed first. 6765 6766 `ld2w r2,@r8+ || mac a0,r0,r7' 6767 Execute these in parallel. 6768 6769 `ld2w r2,@r8+ ||' 6770 `mac a0,r0,r7' 6771 Two-line format. Execute these in parallel. 6772 6773 `ld2w r2,@r8+' 6774 `mac a0,r0,r7' 6775 Two-line format. Execute these sequentially. Assembler will put 6776 them in the proper containers. 6777 6778 `ld2w r2,@r8+ ->' 6779 `mac a0,r0,r7' 6780 Two-line format. Execute these sequentially. Same as above but 6781 second instruction will always go into right container. 6782 Since `$' has no special meaning, you may use it in symbol names. 6783 6784 6785 File: as.info, Node: D10V-Regs, Next: D10V-Addressing, Prev: D10V-Chars, Up: D10V-Syntax 6786 6787 8.6.2.4 Register Names 6788 ...................... 6789 6790 You can use the predefined symbols `r0' through `r15' to refer to the 6791 D10V registers. You can also use `sp' as an alias for `r15'. The 6792 accumulators are `a0' and `a1'. There are special register-pair names 6793 that may optionally be used in opcodes that require even-numbered 6794 registers. Register names are not case sensitive. 6795 6796 Register Pairs 6797 `r0-r1' 6798 6799 `r2-r3' 6800 6801 `r4-r5' 6802 6803 `r6-r7' 6804 6805 `r8-r9' 6806 6807 `r10-r11' 6808 6809 `r12-r13' 6810 6811 `r14-r15' 6812 6813 The D10V also has predefined symbols for these control registers and 6814 status bits: 6815 `psw' 6816 Processor Status Word 6817 6818 `bpsw' 6819 Backup Processor Status Word 6820 6821 `pc' 6822 Program Counter 6823 6824 `bpc' 6825 Backup Program Counter 6826 6827 `rpt_c' 6828 Repeat Count 6829 6830 `rpt_s' 6831 Repeat Start address 6832 6833 `rpt_e' 6834 Repeat End address 6835 6836 `mod_s' 6837 Modulo Start address 6838 6839 `mod_e' 6840 Modulo End address 6841 6842 `iba' 6843 Instruction Break Address 6844 6845 `f0' 6846 Flag 0 6847 6848 `f1' 6849 Flag 1 6850 6851 `c' 6852 Carry flag 6853 6854 6855 File: as.info, Node: D10V-Addressing, Next: D10V-Word, Prev: D10V-Regs, Up: D10V-Syntax 6856 6857 8.6.2.5 Addressing Modes 6858 ........................ 6859 6860 `as' understands the following addressing modes for the D10V. `RN' in 6861 the following refers to any of the numbered registers, but _not_ the 6862 control registers. 6863 `RN' 6864 Register direct 6865 6866 `@RN' 6867 Register indirect 6868 6869 `@RN+' 6870 Register indirect with post-increment 6871 6872 `@RN-' 6873 Register indirect with post-decrement 6874 6875 `@-SP' 6876 Register indirect with pre-decrement 6877 6878 `@(DISP, RN)' 6879 Register indirect with displacement 6880 6881 `ADDR' 6882 PC relative address (for branch or rep). 6883 6884 `#IMM' 6885 Immediate data (the `#' is optional and ignored) 6886 6887 6888 File: as.info, Node: D10V-Word, Prev: D10V-Addressing, Up: D10V-Syntax 6889 6890 8.6.2.6 @WORD Modifier 6891 ...................... 6892 6893 Any symbol followed by `@word' will be replaced by the symbol's value 6894 shifted right by 2. This is used in situations such as loading a 6895 register with the address of a function (or any other code fragment). 6896 For example, if you want to load a register with the location of the 6897 function `main' then jump to that function, you could do it as follows: 6898 ldi r2, main@word 6899 jmp r2 6900 6901 6902 File: as.info, Node: D10V-Float, Next: D10V-Opcodes, Prev: D10V-Syntax, Up: D10V-Dependent 6903 6904 8.6.3 Floating Point 6905 -------------------- 6906 6907 The D10V has no hardware floating point, but the `.float' and `.double' 6908 directives generates IEEE floating-point numbers for compatibility with 6909 other development tools. 6910 6911 6912 File: as.info, Node: D10V-Opcodes, Prev: D10V-Float, Up: D10V-Dependent 6913 6914 8.6.4 Opcodes 6915 ------------- 6916 6917 For detailed information on the D10V machine instruction set, see `D10V 6918 Architecture: A VLIW Microprocessor for Multimedia Applications' 6919 (Mitsubishi Electric Corp.). `as' implements all the standard D10V 6920 opcodes. The only changes are those described in the section on size 6921 modifiers 6922 6923 6924 File: as.info, Node: D30V-Dependent, Next: H8/300-Dependent, Prev: D10V-Dependent, Up: Machine Dependencies 6925 6926 8.7 D30V Dependent Features 6927 =========================== 6928 6929 * Menu: 6930 6931 * D30V-Opts:: D30V Options 6932 * D30V-Syntax:: Syntax 6933 * D30V-Float:: Floating Point 6934 * D30V-Opcodes:: Opcodes 6935 6936 6937 File: as.info, Node: D30V-Opts, Next: D30V-Syntax, Up: D30V-Dependent 6938 6939 8.7.1 D30V Options 6940 ------------------ 6941 6942 The Mitsubishi D30V version of `as' has a few machine dependent options. 6943 6944 `-O' 6945 The D30V can often execute two sub-instructions in parallel. When 6946 this option is used, `as' will attempt to optimize its output by 6947 detecting when instructions can be executed in parallel. 6948 6949 `-n' 6950 When this option is used, `as' will issue a warning every time it 6951 adds a nop instruction. 6952 6953 `-N' 6954 When this option is used, `as' will issue a warning if it needs to 6955 insert a nop after a 32-bit multiply before a load or 16-bit 6956 multiply instruction. 6957 6958 6959 File: as.info, Node: D30V-Syntax, Next: D30V-Float, Prev: D30V-Opts, Up: D30V-Dependent 6960 6961 8.7.2 Syntax 6962 ------------ 6963 6964 The D30V syntax is based on the syntax in Mitsubishi's D30V 6965 architecture manual. The differences are detailed below. 6966 6967 * Menu: 6968 6969 * D30V-Size:: Size Modifiers 6970 * D30V-Subs:: Sub-Instructions 6971 * D30V-Chars:: Special Characters 6972 * D30V-Guarded:: Guarded Execution 6973 * D30V-Regs:: Register Names 6974 * D30V-Addressing:: Addressing Modes 6975 6976 6977 File: as.info, Node: D30V-Size, Next: D30V-Subs, Up: D30V-Syntax 6978 6979 8.7.2.1 Size Modifiers 6980 ...................... 6981 6982 The D30V version of `as' uses the instruction names in the D30V 6983 Architecture Manual. However, the names in the manual are sometimes 6984 ambiguous. There are instruction names that can assemble to a short or 6985 long form opcode. How does the assembler pick the correct form? `as' 6986 will always pick the smallest form if it can. When dealing with a 6987 symbol that is not defined yet when a line is being assembled, it will 6988 always use the long form. If you need to force the assembler to use 6989 either the short or long form of the instruction, you can append either 6990 `.s' (short) or `.l' (long) to it. For example, if you are writing an 6991 assembly program and you want to do a branch to a symbol that is 6992 defined later in your program, you can write `bra.s foo'. Objdump and 6993 GDB will always append `.s' or `.l' to instructions which have both 6994 short and long forms. 6995 6996 6997 File: as.info, Node: D30V-Subs, Next: D30V-Chars, Prev: D30V-Size, Up: D30V-Syntax 6998 6999 8.7.2.2 Sub-Instructions 7000 ........................ 7001 7002 The D30V assembler takes as input a series of instructions, either 7003 one-per-line, or in the special two-per-line format described in the 7004 next section. Some of these instructions will be short-form or 7005 sub-instructions. These sub-instructions can be packed into a single 7006 instruction. The assembler will do this automatically. It will also 7007 detect when it should not pack instructions. For example, when a label 7008 is defined, the next instruction will never be packaged with the 7009 previous one. Whenever a branch and link instruction is called, it 7010 will not be packaged with the next instruction so the return address 7011 will be valid. Nops are automatically inserted when necessary. 7012 7013 If you do not want the assembler automatically making these 7014 decisions, you can control the packaging and execution type (parallel 7015 or sequential) with the special execution symbols described in the next 7016 section. 7017 7018 7019 File: as.info, Node: D30V-Chars, Next: D30V-Guarded, Prev: D30V-Subs, Up: D30V-Syntax 7020 7021 8.7.2.3 Special Characters 7022 .......................... 7023 7024 `;' and `#' are the line comment characters. Sub-instructions may be 7025 executed in order, in reverse-order, or in parallel. Instructions 7026 listed in the standard one-per-line format will be executed 7027 sequentially unless you use the `-O' option. 7028 7029 To specify the executing order, use the following symbols: 7030 `->' 7031 Sequential with instruction on the left first. 7032 7033 `<-' 7034 Sequential with instruction on the right first. 7035 7036 `||' 7037 Parallel 7038 7039 The D30V syntax allows either one instruction per line, one 7040 instruction per line with the execution symbol, or two instructions per 7041 line. For example 7042 `abs r2,r3 -> abs r4,r5' 7043 Execute these sequentially. The instruction on the right is in 7044 the right container and is executed second. 7045 7046 `abs r2,r3 <- abs r4,r5' 7047 Execute these reverse-sequentially. The instruction on the right 7048 is in the right container, and is executed first. 7049 7050 `abs r2,r3 || abs r4,r5' 7051 Execute these in parallel. 7052 7053 `ldw r2,@(r3,r4) ||' 7054 `mulx r6,r8,r9' 7055 Two-line format. Execute these in parallel. 7056 7057 `mulx a0,r8,r9' 7058 `stw r2,@(r3,r4)' 7059 Two-line format. Execute these sequentially unless `-O' option is 7060 used. If the `-O' option is used, the assembler will determine if 7061 the instructions could be done in parallel (the above two 7062 instructions can be done in parallel), and if so, emit them as 7063 parallel instructions. The assembler will put them in the proper 7064 containers. In the above example, the assembler will put the 7065 `stw' instruction in left container and the `mulx' instruction in 7066 the right container. 7067 7068 `stw r2,@(r3,r4) ->' 7069 `mulx a0,r8,r9' 7070 Two-line format. Execute the `stw' instruction followed by the 7071 `mulx' instruction sequentially. The first instruction goes in the 7072 left container and the second instruction goes into right 7073 container. The assembler will give an error if the machine 7074 ordering constraints are violated. 7075 7076 `stw r2,@(r3,r4) <-' 7077 `mulx a0,r8,r9' 7078 Same as previous example, except that the `mulx' instruction is 7079 executed before the `stw' instruction. 7080 7081 Since `$' has no special meaning, you may use it in symbol names. 7082 7083 7084 File: as.info, Node: D30V-Guarded, Next: D30V-Regs, Prev: D30V-Chars, Up: D30V-Syntax 7085 7086 8.7.2.4 Guarded Execution 7087 ......................... 7088 7089 `as' supports the full range of guarded execution directives for each 7090 instruction. Just append the directive after the instruction proper. 7091 The directives are: 7092 7093 `/tx' 7094 Execute the instruction if flag f0 is true. 7095 7096 `/fx' 7097 Execute the instruction if flag f0 is false. 7098 7099 `/xt' 7100 Execute the instruction if flag f1 is true. 7101 7102 `/xf' 7103 Execute the instruction if flag f1 is false. 7104 7105 `/tt' 7106 Execute the instruction if both flags f0 and f1 are true. 7107 7108 `/tf' 7109 Execute the instruction if flag f0 is true and flag f1 is false. 7110 7111 7112 File: as.info, Node: D30V-Regs, Next: D30V-Addressing, Prev: D30V-Guarded, Up: D30V-Syntax 7113 7114 8.7.2.5 Register Names 7115 ...................... 7116 7117 You can use the predefined symbols `r0' through `r63' to refer to the 7118 D30V registers. You can also use `sp' as an alias for `r63' and `link' 7119 as an alias for `r62'. The accumulators are `a0' and `a1'. 7120 7121 The D30V also has predefined symbols for these control registers and 7122 status bits: 7123 `psw' 7124 Processor Status Word 7125 7126 `bpsw' 7127 Backup Processor Status Word 7128 7129 `pc' 7130 Program Counter 7131 7132 `bpc' 7133 Backup Program Counter 7134 7135 `rpt_c' 7136 Repeat Count 7137 7138 `rpt_s' 7139 Repeat Start address 7140 7141 `rpt_e' 7142 Repeat End address 7143 7144 `mod_s' 7145 Modulo Start address 7146 7147 `mod_e' 7148 Modulo End address 7149 7150 `iba' 7151 Instruction Break Address 7152 7153 `f0' 7154 Flag 0 7155 7156 `f1' 7157 Flag 1 7158 7159 `f2' 7160 Flag 2 7161 7162 `f3' 7163 Flag 3 7164 7165 `f4' 7166 Flag 4 7167 7168 `f5' 7169 Flag 5 7170 7171 `f6' 7172 Flag 6 7173 7174 `f7' 7175 Flag 7 7176 7177 `s' 7178 Same as flag 4 (saturation flag) 7179 7180 `v' 7181 Same as flag 5 (overflow flag) 7182 7183 `va' 7184 Same as flag 6 (sticky overflow flag) 7185 7186 `c' 7187 Same as flag 7 (carry/borrow flag) 7188 7189 `b' 7190 Same as flag 7 (carry/borrow flag) 7191 7192 7193 File: as.info, Node: D30V-Addressing, Prev: D30V-Regs, Up: D30V-Syntax 7194 7195 8.7.2.6 Addressing Modes 7196 ........................ 7197 7198 `as' understands the following addressing modes for the D30V. `RN' in 7199 the following refers to any of the numbered registers, but _not_ the 7200 control registers. 7201 `RN' 7202 Register direct 7203 7204 `@RN' 7205 Register indirect 7206 7207 `@RN+' 7208 Register indirect with post-increment 7209 7210 `@RN-' 7211 Register indirect with post-decrement 7212 7213 `@-SP' 7214 Register indirect with pre-decrement 7215 7216 `@(DISP, RN)' 7217 Register indirect with displacement 7218 7219 `ADDR' 7220 PC relative address (for branch or rep). 7221 7222 `#IMM' 7223 Immediate data (the `#' is optional and ignored) 7224 7225 7226 File: as.info, Node: D30V-Float, Next: D30V-Opcodes, Prev: D30V-Syntax, Up: D30V-Dependent 7227 7228 8.7.3 Floating Point 7229 -------------------- 7230 7231 The D30V has no hardware floating point, but the `.float' and `.double' 7232 directives generates IEEE floating-point numbers for compatibility with 7233 other development tools. 7234 7235 7236 File: as.info, Node: D30V-Opcodes, Prev: D30V-Float, Up: D30V-Dependent 7237 7238 8.7.4 Opcodes 7239 ------------- 7240 7241 For detailed information on the D30V machine instruction set, see `D30V 7242 Architecture: A VLIW Microprocessor for Multimedia Applications' 7243 (Mitsubishi Electric Corp.). `as' implements all the standard D30V 7244 opcodes. The only changes are those described in the section on size 7245 modifiers 7246 7247 7248 File: as.info, Node: H8/300-Dependent, Next: HPPA-Dependent, Prev: D30V-Dependent, Up: Machine Dependencies 7249 7250 8.8 H8/300 Dependent Features 7251 ============================= 7252 7253 * Menu: 7254 7255 * H8/300 Options:: Options 7256 * H8/300 Syntax:: Syntax 7257 * H8/300 Floating Point:: Floating Point 7258 * H8/300 Directives:: H8/300 Machine Directives 7259 * H8/300 Opcodes:: Opcodes 7260 7261 7262 File: as.info, Node: H8/300 Options, Next: H8/300 Syntax, Up: H8/300-Dependent 7263 7264 8.8.1 Options 7265 ------------- 7266 7267 `as' has no additional command-line options for the Renesas (formerly 7268 Hitachi) H8/300 family. 7269 7270 7271 File: as.info, Node: H8/300 Syntax, Next: H8/300 Floating Point, Prev: H8/300 Options, Up: H8/300-Dependent 7272 7273 8.8.2 Syntax 7274 ------------ 7275 7276 * Menu: 7277 7278 * H8/300-Chars:: Special Characters 7279 * H8/300-Regs:: Register Names 7280 * H8/300-Addressing:: Addressing Modes 7281 7282 7283 File: as.info, Node: H8/300-Chars, Next: H8/300-Regs, Up: H8/300 Syntax 7284 7285 8.8.2.1 Special Characters 7286 .......................... 7287 7288 `;' is the line comment character. 7289 7290 `$' can be used instead of a newline to separate statements. 7291 Therefore _you may not use `$' in symbol names_ on the H8/300. 7292 7293 7294 File: as.info, Node: H8/300-Regs, Next: H8/300-Addressing, Prev: H8/300-Chars, Up: H8/300 Syntax 7295 7296 8.8.2.2 Register Names 7297 ...................... 7298 7299 You can use predefined symbols of the form `rNh' and `rNl' to refer to 7300 the H8/300 registers as sixteen 8-bit general-purpose registers. N is 7301 a digit from `0' to `7'); for instance, both `r0h' and `r7l' are valid 7302 register names. 7303 7304 You can also use the eight predefined symbols `rN' to refer to the 7305 H8/300 registers as 16-bit registers (you must use this form for 7306 addressing). 7307 7308 On the H8/300H, you can also use the eight predefined symbols `erN' 7309 (`er0' ... `er7') to refer to the 32-bit general purpose registers. 7310 7311 The two control registers are called `pc' (program counter; a 16-bit 7312 register, except on the H8/300H where it is 24 bits) and `ccr' 7313 (condition code register; an 8-bit register). `r7' is used as the 7314 stack pointer, and can also be called `sp'. 7315 7316 7317 File: as.info, Node: H8/300-Addressing, Prev: H8/300-Regs, Up: H8/300 Syntax 7318 7319 8.8.2.3 Addressing Modes 7320 ........................ 7321 7322 as understands the following addressing modes for the H8/300: 7323 `rN' 7324 Register direct 7325 7326 `@rN' 7327 Register indirect 7328 7329 `@(D, rN)' 7330 `@(D:16, rN)' 7331 `@(D:24, rN)' 7332 Register indirect: 16-bit or 24-bit displacement D from register 7333 N. (24-bit displacements are only meaningful on the H8/300H.) 7334 7335 `@rN+' 7336 Register indirect with post-increment 7337 7338 `@-rN' 7339 Register indirect with pre-decrement 7340 7341 ``@'AA' 7342 ``@'AA:8' 7343 ``@'AA:16' 7344 ``@'AA:24' 7345 Absolute address `aa'. (The address size `:24' only makes sense 7346 on the H8/300H.) 7347 7348 `#XX' 7349 `#XX:8' 7350 `#XX:16' 7351 `#XX:32' 7352 Immediate data XX. You may specify the `:8', `:16', or `:32' for 7353 clarity, if you wish; but `as' neither requires this nor uses 7354 it--the data size required is taken from context. 7355 7356 ``@'`@'AA' 7357 ``@'`@'AA:8' 7358 Memory indirect. You may specify the `:8' for clarity, if you 7359 wish; but `as' neither requires this nor uses it. 7360 7361 7362 File: as.info, Node: H8/300 Floating Point, Next: H8/300 Directives, Prev: H8/300 Syntax, Up: H8/300-Dependent 7363 7364 8.8.3 Floating Point 7365 -------------------- 7366 7367 The H8/300 family has no hardware floating point, but the `.float' 7368 directive generates IEEE floating-point numbers for compatibility with 7369 other development tools. 7370 7371 7372 File: as.info, Node: H8/300 Directives, Next: H8/300 Opcodes, Prev: H8/300 Floating Point, Up: H8/300-Dependent 7373 7374 8.8.4 H8/300 Machine Directives 7375 ------------------------------- 7376 7377 `as' has the following machine-dependent directives for the H8/300: 7378 7379 `.h8300h' 7380 Recognize and emit additional instructions for the H8/300H 7381 variant, and also make `.int' emit 32-bit numbers rather than the 7382 usual (16-bit) for the H8/300 family. 7383 7384 `.h8300s' 7385 Recognize and emit additional instructions for the H8S variant, and 7386 also make `.int' emit 32-bit numbers rather than the usual (16-bit) 7387 for the H8/300 family. 7388 7389 `.h8300hn' 7390 Recognize and emit additional instructions for the H8/300H variant 7391 in normal mode, and also make `.int' emit 32-bit numbers rather 7392 than the usual (16-bit) for the H8/300 family. 7393 7394 `.h8300sn' 7395 Recognize and emit additional instructions for the H8S variant in 7396 normal mode, and also make `.int' emit 32-bit numbers rather than 7397 the usual (16-bit) for the H8/300 family. 7398 7399 On the H8/300 family (including the H8/300H) `.word' directives 7400 generate 16-bit numbers. 7401 7402 7403 File: as.info, Node: H8/300 Opcodes, Prev: H8/300 Directives, Up: H8/300-Dependent 7404 7405 8.8.5 Opcodes 7406 ------------- 7407 7408 For detailed information on the H8/300 machine instruction set, see 7409 `H8/300 Series Programming Manual'. For information specific to the 7410 H8/300H, see `H8/300H Series Programming Manual' (Renesas). 7411 7412 `as' implements all the standard H8/300 opcodes. No additional 7413 pseudo-instructions are needed on this family. 7414 7415 The following table summarizes the H8/300 opcodes, and their 7416 arguments. Entries marked `*' are opcodes used only on the H8/300H. 7417 7418 Legend: 7419 Rs source register 7420 Rd destination register 7421 abs absolute address 7422 imm immediate data 7423 disp:N N-bit displacement from a register 7424 pcrel:N N-bit displacement relative to program counter 7425 7426 add.b #imm,rd * andc #imm,ccr 7427 add.b rs,rd band #imm,rd 7428 add.w rs,rd band #imm,@rd 7429 * add.w #imm,rd band #imm,@abs:8 7430 * add.l rs,rd bra pcrel:8 7431 * add.l #imm,rd * bra pcrel:16 7432 adds #imm,rd bt pcrel:8 7433 addx #imm,rd * bt pcrel:16 7434 addx rs,rd brn pcrel:8 7435 and.b #imm,rd * brn pcrel:16 7436 and.b rs,rd bf pcrel:8 7437 * and.w rs,rd * bf pcrel:16 7438 * and.w #imm,rd bhi pcrel:8 7439 * and.l #imm,rd * bhi pcrel:16 7440 * and.l rs,rd bls pcrel:8 7441 7442 * bls pcrel:16 bld #imm,rd 7443 bcc pcrel:8 bld #imm,@rd 7444 * bcc pcrel:16 bld #imm,@abs:8 7445 bhs pcrel:8 bnot #imm,rd 7446 * bhs pcrel:16 bnot #imm,@rd 7447 bcs pcrel:8 bnot #imm,@abs:8 7448 * bcs pcrel:16 bnot rs,rd 7449 blo pcrel:8 bnot rs,@rd 7450 * blo pcrel:16 bnot rs,@abs:8 7451 bne pcrel:8 bor #imm,rd 7452 * bne pcrel:16 bor #imm,@rd 7453 beq pcrel:8 bor #imm,@abs:8 7454 * beq pcrel:16 bset #imm,rd 7455 bvc pcrel:8 bset #imm,@rd 7456 * bvc pcrel:16 bset #imm,@abs:8 7457 bvs pcrel:8 bset rs,rd 7458 * bvs pcrel:16 bset rs,@rd 7459 bpl pcrel:8 bset rs,@abs:8 7460 * bpl pcrel:16 bsr pcrel:8 7461 bmi pcrel:8 bsr pcrel:16 7462 * bmi pcrel:16 bst #imm,rd 7463 bge pcrel:8 bst #imm,@rd 7464 * bge pcrel:16 bst #imm,@abs:8 7465 blt pcrel:8 btst #imm,rd 7466 * blt pcrel:16 btst #imm,@rd 7467 bgt pcrel:8 btst #imm,@abs:8 7468 * bgt pcrel:16 btst rs,rd 7469 ble pcrel:8 btst rs,@rd 7470 * ble pcrel:16 btst rs,@abs:8 7471 bclr #imm,rd bxor #imm,rd 7472 bclr #imm,@rd bxor #imm,@rd 7473 bclr #imm,@abs:8 bxor #imm,@abs:8 7474 bclr rs,rd cmp.b #imm,rd 7475 bclr rs,@rd cmp.b rs,rd 7476 bclr rs,@abs:8 cmp.w rs,rd 7477 biand #imm,rd cmp.w rs,rd 7478 biand #imm,@rd * cmp.w #imm,rd 7479 biand #imm,@abs:8 * cmp.l #imm,rd 7480 bild #imm,rd * cmp.l rs,rd 7481 bild #imm,@rd daa rs 7482 bild #imm,@abs:8 das rs 7483 bior #imm,rd dec.b rs 7484 bior #imm,@rd * dec.w #imm,rd 7485 bior #imm,@abs:8 * dec.l #imm,rd 7486 bist #imm,rd divxu.b rs,rd 7487 bist #imm,@rd * divxu.w rs,rd 7488 bist #imm,@abs:8 * divxs.b rs,rd 7489 bixor #imm,rd * divxs.w rs,rd 7490 bixor #imm,@rd eepmov 7491 bixor #imm,@abs:8 * eepmovw 7492 7493 * exts.w rd mov.w rs,@abs:16 7494 * exts.l rd * mov.l #imm,rd 7495 * extu.w rd * mov.l rs,rd 7496 * extu.l rd * mov.l @rs,rd 7497 inc rs * mov.l @(disp:16,rs),rd 7498 * inc.w #imm,rd * mov.l @(disp:24,rs),rd 7499 * inc.l #imm,rd * mov.l @rs+,rd 7500 jmp @rs * mov.l @abs:16,rd 7501 jmp abs * mov.l @abs:24,rd 7502 jmp @@abs:8 * mov.l rs,@rd 7503 jsr @rs * mov.l rs,@(disp:16,rd) 7504 jsr abs * mov.l rs,@(disp:24,rd) 7505 jsr @@abs:8 * mov.l rs,@-rd 7506 ldc #imm,ccr * mov.l rs,@abs:16 7507 ldc rs,ccr * mov.l rs,@abs:24 7508 * ldc @abs:16,ccr movfpe @abs:16,rd 7509 * ldc @abs:24,ccr movtpe rs,@abs:16 7510 * ldc @(disp:16,rs),ccr mulxu.b rs,rd 7511 * ldc @(disp:24,rs),ccr * mulxu.w rs,rd 7512 * ldc @rs+,ccr * mulxs.b rs,rd 7513 * ldc @rs,ccr * mulxs.w rs,rd 7514 * mov.b @(disp:24,rs),rd neg.b rs 7515 * mov.b rs,@(disp:24,rd) * neg.w rs 7516 mov.b @abs:16,rd * neg.l rs 7517 mov.b rs,rd nop 7518 mov.b @abs:8,rd not.b rs 7519 mov.b rs,@abs:8 * not.w rs 7520 mov.b rs,rd * not.l rs 7521 mov.b #imm,rd or.b #imm,rd 7522 mov.b @rs,rd or.b rs,rd 7523 mov.b @(disp:16,rs),rd * or.w #imm,rd 7524 mov.b @rs+,rd * or.w rs,rd 7525 mov.b @abs:8,rd * or.l #imm,rd 7526 mov.b rs,@rd * or.l rs,rd 7527 mov.b rs,@(disp:16,rd) orc #imm,ccr 7528 mov.b rs,@-rd pop.w rs 7529 mov.b rs,@abs:8 * pop.l rs 7530 mov.w rs,@rd push.w rs 7531 * mov.w @(disp:24,rs),rd * push.l rs 7532 * mov.w rs,@(disp:24,rd) rotl.b rs 7533 * mov.w @abs:24,rd * rotl.w rs 7534 * mov.w rs,@abs:24 * rotl.l rs 7535 mov.w rs,rd rotr.b rs 7536 mov.w #imm,rd * rotr.w rs 7537 mov.w @rs,rd * rotr.l rs 7538 mov.w @(disp:16,rs),rd rotxl.b rs 7539 mov.w @rs+,rd * rotxl.w rs 7540 mov.w @abs:16,rd * rotxl.l rs 7541 mov.w rs,@(disp:16,rd) rotxr.b rs 7542 mov.w rs,@-rd * rotxr.w rs 7543 7544 * rotxr.l rs * stc ccr,@(disp:24,rd) 7545 bpt * stc ccr,@-rd 7546 rte * stc ccr,@abs:16 7547 rts * stc ccr,@abs:24 7548 shal.b rs sub.b rs,rd 7549 * shal.w rs sub.w rs,rd 7550 * shal.l rs * sub.w #imm,rd 7551 shar.b rs * sub.l rs,rd 7552 * shar.w rs * sub.l #imm,rd 7553 * shar.l rs subs #imm,rd 7554 shll.b rs subx #imm,rd 7555 * shll.w rs subx rs,rd 7556 * shll.l rs * trapa #imm 7557 shlr.b rs xor #imm,rd 7558 * shlr.w rs xor rs,rd 7559 * shlr.l rs * xor.w #imm,rd 7560 sleep * xor.w rs,rd 7561 stc ccr,rd * xor.l #imm,rd 7562 * stc ccr,@rs * xor.l rs,rd 7563 * stc ccr,@(disp:16,rd) xorc #imm,ccr 7564 7565 Four H8/300 instructions (`add', `cmp', `mov', `sub') are defined 7566 with variants using the suffixes `.b', `.w', and `.l' to specify the 7567 size of a memory operand. `as' supports these suffixes, but does not 7568 require them; since one of the operands is always a register, `as' can 7569 deduce the correct size. 7570 7571 For example, since `r0' refers to a 16-bit register, 7572 mov r0,@foo 7573 is equivalent to 7574 mov.w r0,@foo 7575 7576 If you use the size suffixes, `as' issues a warning when the suffix 7577 and the register size do not match. 7578 7579 7580 File: as.info, Node: HPPA-Dependent, Next: ESA/390-Dependent, Prev: H8/300-Dependent, Up: Machine Dependencies 7581 7582 8.9 HPPA Dependent Features 7583 =========================== 7584 7585 * Menu: 7586 7587 * HPPA Notes:: Notes 7588 * HPPA Options:: Options 7589 * HPPA Syntax:: Syntax 7590 * HPPA Floating Point:: Floating Point 7591 * HPPA Directives:: HPPA Machine Directives 7592 * HPPA Opcodes:: Opcodes 7593 7594 7595 File: as.info, Node: HPPA Notes, Next: HPPA Options, Up: HPPA-Dependent 7596 7597 8.9.1 Notes 7598 ----------- 7599 7600 As a back end for GNU CC `as' has been throughly tested and should work 7601 extremely well. We have tested it only minimally on hand written 7602 assembly code and no one has tested it much on the assembly output from 7603 the HP compilers. 7604 7605 The format of the debugging sections has changed since the original 7606 `as' port (version 1.3X) was released; therefore, you must rebuild all 7607 HPPA objects and libraries with the new assembler so that you can debug 7608 the final executable. 7609 7610 The HPPA `as' port generates a small subset of the relocations 7611 available in the SOM and ELF object file formats. Additional relocation 7612 support will be added as it becomes necessary. 7613 7614 7615 File: as.info, Node: HPPA Options, Next: HPPA Syntax, Prev: HPPA Notes, Up: HPPA-Dependent 7616 7617 8.9.2 Options 7618 ------------- 7619 7620 `as' has no machine-dependent command-line options for the HPPA. 7621 7622 7623 File: as.info, Node: HPPA Syntax, Next: HPPA Floating Point, Prev: HPPA Options, Up: HPPA-Dependent 7624 7625 8.9.3 Syntax 7626 ------------ 7627 7628 The assembler syntax closely follows the HPPA instruction set reference 7629 manual; assembler directives and general syntax closely follow the HPPA 7630 assembly language reference manual, with a few noteworthy differences. 7631 7632 First, a colon may immediately follow a label definition. This is 7633 simply for compatibility with how most assembly language programmers 7634 write code. 7635 7636 Some obscure expression parsing problems may affect hand written 7637 code which uses the `spop' instructions, or code which makes significant 7638 use of the `!' line separator. 7639 7640 `as' is much less forgiving about missing arguments and other 7641 similar oversights than the HP assembler. `as' notifies you of missing 7642 arguments as syntax errors; this is regarded as a feature, not a bug. 7643 7644 Finally, `as' allows you to use an external symbol without 7645 explicitly importing the symbol. _Warning:_ in the future this will be 7646 an error for HPPA targets. 7647 7648 Special characters for HPPA targets include: 7649 7650 `;' is the line comment character. 7651 7652 `!' can be used instead of a newline to separate statements. 7653 7654 Since `$' has no special meaning, you may use it in symbol names. 7655 7656 7657 File: as.info, Node: HPPA Floating Point, Next: HPPA Directives, Prev: HPPA Syntax, Up: HPPA-Dependent 7658 7659 8.9.4 Floating Point 7660 -------------------- 7661 7662 The HPPA family uses IEEE floating-point numbers. 7663 7664 7665 File: as.info, Node: HPPA Directives, Next: HPPA Opcodes, Prev: HPPA Floating Point, Up: HPPA-Dependent 7666 7667 8.9.5 HPPA Assembler Directives 7668 ------------------------------- 7669 7670 `as' for the HPPA supports many additional directives for compatibility 7671 with the native assembler. This section describes them only briefly. 7672 For detailed information on HPPA-specific assembler directives, see 7673 `HP9000 Series 800 Assembly Language Reference Manual' (HP 92432-90001). 7674 7675 `as' does _not_ support the following assembler directives described 7676 in the HP manual: 7677 7678 .endm .liston 7679 .enter .locct 7680 .leave .macro 7681 .listoff 7682 7683 Beyond those implemented for compatibility, `as' supports one 7684 additional assembler directive for the HPPA: `.param'. It conveys 7685 register argument locations for static functions. Its syntax closely 7686 follows the `.export' directive. 7687 7688 These are the additional directives in `as' for the HPPA: 7689 7690 `.block N' 7691 `.blockz N' 7692 Reserve N bytes of storage, and initialize them to zero. 7693 7694 `.call' 7695 Mark the beginning of a procedure call. Only the special case 7696 with _no arguments_ is allowed. 7697 7698 `.callinfo [ PARAM=VALUE, ... ] [ FLAG, ... ]' 7699 Specify a number of parameters and flags that define the 7700 environment for a procedure. 7701 7702 PARAM may be any of `frame' (frame size), `entry_gr' (end of 7703 general register range), `entry_fr' (end of float register range), 7704 `entry_sr' (end of space register range). 7705 7706 The values for FLAG are `calls' or `caller' (proc has 7707 subroutines), `no_calls' (proc does not call subroutines), 7708 `save_rp' (preserve return pointer), `save_sp' (proc preserves 7709 stack pointer), `no_unwind' (do not unwind this proc), `hpux_int' 7710 (proc is interrupt routine). 7711 7712 `.code' 7713 Assemble into the standard section called `$TEXT$', subsection 7714 `$CODE$'. 7715 7716 `.copyright "STRING"' 7717 In the SOM object format, insert STRING into the object code, 7718 marked as a copyright string. 7719 7720 `.copyright "STRING"' 7721 In the ELF object format, insert STRING into the object code, 7722 marked as a version string. 7723 7724 `.enter' 7725 Not yet supported; the assembler rejects programs containing this 7726 directive. 7727 7728 `.entry' 7729 Mark the beginning of a procedure. 7730 7731 `.exit' 7732 Mark the end of a procedure. 7733 7734 `.export NAME [ ,TYP ] [ ,PARAM=R ]' 7735 Make a procedure NAME available to callers. TYP, if present, must 7736 be one of `absolute', `code' (ELF only, not SOM), `data', `entry', 7737 `data', `entry', `millicode', `plabel', `pri_prog', or `sec_prog'. 7738 7739 PARAM, if present, provides either relocation information for the 7740 procedure arguments and result, or a privilege level. PARAM may be 7741 `argwN' (where N ranges from `0' to `3', and indicates one of four 7742 one-word arguments); `rtnval' (the procedure's result); or 7743 `priv_lev' (privilege level). For arguments or the result, R 7744 specifies how to relocate, and must be one of `no' (not 7745 relocatable), `gr' (argument is in general register), `fr' (in 7746 floating point register), or `fu' (upper half of float register). 7747 For `priv_lev', R is an integer. 7748 7749 `.half N' 7750 Define a two-byte integer constant N; synonym for the portable 7751 `as' directive `.short'. 7752 7753 `.import NAME [ ,TYP ]' 7754 Converse of `.export'; make a procedure available to call. The 7755 arguments use the same conventions as the first two arguments for 7756 `.export'. 7757 7758 `.label NAME' 7759 Define NAME as a label for the current assembly location. 7760 7761 `.leave' 7762 Not yet supported; the assembler rejects programs containing this 7763 directive. 7764 7765 `.origin LC' 7766 Advance location counter to LC. Synonym for the `as' portable 7767 directive `.org'. 7768 7769 `.param NAME [ ,TYP ] [ ,PARAM=R ]' 7770 Similar to `.export', but used for static procedures. 7771 7772 `.proc' 7773 Use preceding the first statement of a procedure. 7774 7775 `.procend' 7776 Use following the last statement of a procedure. 7777 7778 `LABEL .reg EXPR' 7779 Synonym for `.equ'; define LABEL with the absolute expression EXPR 7780 as its value. 7781 7782 `.space SECNAME [ ,PARAMS ]' 7783 Switch to section SECNAME, creating a new section by that name if 7784 necessary. You may only use PARAMS when creating a new section, 7785 not when switching to an existing one. SECNAME may identify a 7786 section by number rather than by name. 7787 7788 If specified, the list PARAMS declares attributes of the section, 7789 identified by keywords. The keywords recognized are `spnum=EXP' 7790 (identify this section by the number EXP, an absolute expression), 7791 `sort=EXP' (order sections according to this sort key when linking; 7792 EXP is an absolute expression), `unloadable' (section contains no 7793 loadable data), `notdefined' (this section defined elsewhere), and 7794 `private' (data in this section not available to other programs). 7795 7796 `.spnum SECNAM' 7797 Allocate four bytes of storage, and initialize them with the 7798 section number of the section named SECNAM. (You can define the 7799 section number with the HPPA `.space' directive.) 7800 7801 `.string "STR"' 7802 Copy the characters in the string STR to the object file. *Note 7803 Strings: Strings, for information on escape sequences you can use 7804 in `as' strings. 7805 7806 _Warning!_ The HPPA version of `.string' differs from the usual 7807 `as' definition: it does _not_ write a zero byte after copying STR. 7808 7809 `.stringz "STR"' 7810 Like `.string', but appends a zero byte after copying STR to object 7811 file. 7812 7813 `.subspa NAME [ ,PARAMS ]' 7814 `.nsubspa NAME [ ,PARAMS ]' 7815 Similar to `.space', but selects a subsection NAME within the 7816 current section. You may only specify PARAMS when you create a 7817 subsection (in the first instance of `.subspa' for this NAME). 7818 7819 If specified, the list PARAMS declares attributes of the 7820 subsection, identified by keywords. The keywords recognized are 7821 `quad=EXPR' ("quadrant" for this subsection), `align=EXPR' 7822 (alignment for beginning of this subsection; a power of two), 7823 `access=EXPR' (value for "access rights" field), `sort=EXPR' 7824 (sorting order for this subspace in link), `code_only' (subsection 7825 contains only code), `unloadable' (subsection cannot be loaded 7826 into memory), `comdat' (subsection is comdat), `common' 7827 (subsection is common block), `dup_comm' (subsection may have 7828 duplicate names), or `zero' (subsection is all zeros, do not write 7829 in object file). 7830 7831 `.nsubspa' always creates a new subspace with the given name, even 7832 if one with the same name already exists. 7833 7834 `comdat', `common' and `dup_comm' can be used to implement various 7835 flavors of one-only support when using the SOM linker. The SOM 7836 linker only supports specific combinations of these flags. The 7837 details are not documented. A brief description is provided here. 7838 7839 `comdat' provides a form of linkonce support. It is useful for 7840 both code and data subspaces. A `comdat' subspace has a key symbol 7841 marked by the `is_comdat' flag or `ST_COMDAT'. Only the first 7842 subspace for any given key is selected. The key symbol becomes 7843 universal in shared links. This is similar to the behavior of 7844 `secondary_def' symbols. 7845 7846 `common' provides Fortran named common support. It is only useful 7847 for data subspaces. Symbols with the flag `is_common' retain this 7848 flag in shared links. Referencing a `is_common' symbol in a shared 7849 library from outside the library doesn't work. Thus, `is_common' 7850 symbols must be output whenever they are needed. 7851 7852 `common' and `dup_comm' together provide Cobol common support. 7853 The subspaces in this case must all be the same length. 7854 Otherwise, this support is similar to the Fortran common support. 7855 7856 `dup_comm' by itself provides a type of one-only support for code. 7857 Only the first `dup_comm' subspace is selected. There is a rather 7858 complex algorithm to compare subspaces. Code symbols marked with 7859 the `dup_common' flag are hidden. This support was intended for 7860 "C++ duplicate inlines". 7861 7862 A simplified technique is used to mark the flags of symbols based 7863 on the flags of their subspace. A symbol with the scope 7864 SS_UNIVERSAL and type ST_ENTRY, ST_CODE or ST_DATA is marked with 7865 the corresponding settings of `comdat', `common' and `dup_comm' 7866 from the subspace, respectively. This avoids having to introduce 7867 additional directives to mark these symbols. The HP assembler 7868 sets `is_common' from `common'. However, it doesn't set the 7869 `dup_common' from `dup_comm'. It doesn't have `comdat' support. 7870 7871 `.version "STR"' 7872 Write STR as version identifier in object code. 7873 7874 7875 File: as.info, Node: HPPA Opcodes, Prev: HPPA Directives, Up: HPPA-Dependent 7876 7877 8.9.6 Opcodes 7878 ------------- 7879 7880 For detailed information on the HPPA machine instruction set, see 7881 `PA-RISC Architecture and Instruction Set Reference Manual' (HP 7882 09740-90039). 7883 7884 7885 File: as.info, Node: ESA/390-Dependent, Next: i386-Dependent, Prev: HPPA-Dependent, Up: Machine Dependencies 7886 7887 8.10 ESA/390 Dependent Features 7888 =============================== 7889 7890 * Menu: 7891 7892 * ESA/390 Notes:: Notes 7893 * ESA/390 Options:: Options 7894 * ESA/390 Syntax:: Syntax 7895 * ESA/390 Floating Point:: Floating Point 7896 * ESA/390 Directives:: ESA/390 Machine Directives 7897 * ESA/390 Opcodes:: Opcodes 7898 7899 7900 File: as.info, Node: ESA/390 Notes, Next: ESA/390 Options, Up: ESA/390-Dependent 7901 7902 8.10.1 Notes 7903 ------------ 7904 7905 The ESA/390 `as' port is currently intended to be a back-end for the 7906 GNU CC compiler. It is not HLASM compatible, although it does support 7907 a subset of some of the HLASM directives. The only supported binary 7908 file format is ELF; none of the usual MVS/VM/OE/USS object file 7909 formats, such as ESD or XSD, are supported. 7910 7911 When used with the GNU CC compiler, the ESA/390 `as' will produce 7912 correct, fully relocated, functional binaries, and has been used to 7913 compile and execute large projects. However, many aspects should still 7914 be considered experimental; these include shared library support, 7915 dynamically loadable objects, and any relocation other than the 31-bit 7916 relocation. 7917 7918 7919 File: as.info, Node: ESA/390 Options, Next: ESA/390 Syntax, Prev: ESA/390 Notes, Up: ESA/390-Dependent 7920 7921 8.10.2 Options 7922 -------------- 7923 7924 `as' has no machine-dependent command-line options for the ESA/390. 7925 7926 7927 File: as.info, Node: ESA/390 Syntax, Next: ESA/390 Floating Point, Prev: ESA/390 Options, Up: ESA/390-Dependent 7928 7929 8.10.3 Syntax 7930 ------------- 7931 7932 The opcode/operand syntax follows the ESA/390 Principles of Operation 7933 manual; assembler directives and general syntax are loosely based on the 7934 prevailing AT&T/SVR4/ELF/Solaris style notation. HLASM-style directives 7935 are _not_ supported for the most part, with the exception of those 7936 described herein. 7937 7938 A leading dot in front of directives is optional, and the case of 7939 directives is ignored; thus for example, .using and USING have the same 7940 effect. 7941 7942 A colon may immediately follow a label definition. This is simply 7943 for compatibility with how most assembly language programmers write 7944 code. 7945 7946 `#' is the line comment character. 7947 7948 `;' can be used instead of a newline to separate statements. 7949 7950 Since `$' has no special meaning, you may use it in symbol names. 7951 7952 Registers can be given the symbolic names r0..r15, fp0, fp2, fp4, 7953 fp6. By using thesse symbolic names, `as' can detect simple syntax 7954 errors. The name rarg or r.arg is a synonym for r11, rtca or r.tca for 7955 r12, sp, r.sp, dsa r.dsa for r13, lr or r.lr for r14, rbase or r.base 7956 for r3 and rpgt or r.pgt for r4. 7957 7958 `*' is the current location counter. Unlike `.' it is always 7959 relative to the last USING directive. Note that this means that 7960 expressions cannot use multiplication, as any occurrence of `*' will be 7961 interpreted as a location counter. 7962 7963 All labels are relative to the last USING. Thus, branches to a label 7964 always imply the use of base+displacement. 7965 7966 Many of the usual forms of address constants / address literals are 7967 supported. Thus, 7968 .using *,r3 7969 L r15,=A(some_routine) 7970 LM r6,r7,=V(some_longlong_extern) 7971 A r1,=F'12' 7972 AH r0,=H'42' 7973 ME r6,=E'3.1416' 7974 MD r6,=D'3.14159265358979' 7975 O r6,=XL4'cacad0d0' 7976 .ltorg 7977 should all behave as expected: that is, an entry in the literal pool 7978 will be created (or reused if it already exists), and the instruction 7979 operands will be the displacement into the literal pool using the 7980 current base register (as last declared with the `.using' directive). 7981 7982 7983 File: as.info, Node: ESA/390 Floating Point, Next: ESA/390 Directives, Prev: ESA/390 Syntax, Up: ESA/390-Dependent 7984 7985 8.10.4 Floating Point 7986 --------------------- 7987 7988 The assembler generates only IEEE floating-point numbers. The older 7989 floating point formats are not supported. 7990 7991 7992 File: as.info, Node: ESA/390 Directives, Next: ESA/390 Opcodes, Prev: ESA/390 Floating Point, Up: ESA/390-Dependent 7993 7994 8.10.5 ESA/390 Assembler Directives 7995 ----------------------------------- 7996 7997 `as' for the ESA/390 supports all of the standard ELF/SVR4 assembler 7998 directives that are documented in the main part of this documentation. 7999 Several additional directives are supported in order to implement the 8000 ESA/390 addressing model. The most important of these are `.using' and 8001 `.ltorg' 8002 8003 These are the additional directives in `as' for the ESA/390: 8004 8005 `.dc' 8006 A small subset of the usual DC directive is supported. 8007 8008 `.drop REGNO' 8009 Stop using REGNO as the base register. The REGNO must have been 8010 previously declared with a `.using' directive in the same section 8011 as the current section. 8012 8013 `.ebcdic STRING' 8014 Emit the EBCDIC equivalent of the indicated string. The emitted 8015 string will be null terminated. Note that the directives 8016 `.string' etc. emit ascii strings by default. 8017 8018 `EQU' 8019 The standard HLASM-style EQU directive is not supported; however, 8020 the standard `as' directive .equ can be used to the same effect. 8021 8022 `.ltorg' 8023 Dump the literal pool accumulated so far; begin a new literal pool. 8024 The literal pool will be written in the current section; in order 8025 to generate correct assembly, a `.using' must have been previously 8026 specified in the same section. 8027 8028 `.using EXPR,REGNO' 8029 Use REGNO as the base register for all subsequent RX, RS, and SS 8030 form instructions. The EXPR will be evaluated to obtain the base 8031 address; usually, EXPR will merely be `*'. 8032 8033 This assembler allows two `.using' directives to be simultaneously 8034 outstanding, one in the `.text' section, and one in another section 8035 (typically, the `.data' section). This feature allows dynamically 8036 loaded objects to be implemented in a relatively straightforward 8037 way. A `.using' directive must always be specified in the `.text' 8038 section; this will specify the base register that will be used for 8039 branches in the `.text' section. A second `.using' may be 8040 specified in another section; this will specify the base register 8041 that is used for non-label address literals. When a second 8042 `.using' is specified, then the subsequent `.ltorg' must be put in 8043 the same section; otherwise an error will result. 8044 8045 Thus, for example, the following code uses `r3' to address branch 8046 targets and `r4' to address the literal pool, which has been 8047 written to the `.data' section. The is, the constants 8048 `=A(some_routine)', `=H'42'' and `=E'3.1416'' will all appear in 8049 the `.data' section. 8050 8051 .data 8052 .using LITPOOL,r4 8053 .text 8054 BASR r3,0 8055 .using *,r3 8056 B START 8057 .long LITPOOL 8058 START: 8059 L r4,4(,r3) 8060 L r15,=A(some_routine) 8061 LTR r15,r15 8062 BNE LABEL 8063 AH r0,=H'42' 8064 LABEL: 8065 ME r6,=E'3.1416' 8066 .data 8067 LITPOOL: 8068 .ltorg 8069 8070 Note that this dual-`.using' directive semantics extends and is 8071 not compatible with HLASM semantics. Note that this assembler 8072 directive does not support the full range of HLASM semantics. 8073 8074 8075 8076 File: as.info, Node: ESA/390 Opcodes, Prev: ESA/390 Directives, Up: ESA/390-Dependent 8077 8078 8.10.6 Opcodes 8079 -------------- 8080 8081 For detailed information on the ESA/390 machine instruction set, see 8082 `ESA/390 Principles of Operation' (IBM Publication Number DZ9AR004). 8083 8084 8085 File: as.info, Node: i386-Dependent, Next: i860-Dependent, Prev: ESA/390-Dependent, Up: Machine Dependencies 8086 8087 8.11 80386 Dependent Features 8088 ============================= 8089 8090 The i386 version `as' supports both the original Intel 386 8091 architecture in both 16 and 32-bit mode as well as AMD x86-64 8092 architecture extending the Intel architecture to 64-bits. 8093 8094 * Menu: 8095 8096 * i386-Options:: Options 8097 * i386-Syntax:: AT&T Syntax versus Intel Syntax 8098 * i386-Mnemonics:: Instruction Naming 8099 * i386-Regs:: Register Naming 8100 * i386-Prefixes:: Instruction Prefixes 8101 * i386-Memory:: Memory References 8102 * i386-Jumps:: Handling of Jump Instructions 8103 * i386-Float:: Floating Point 8104 * i386-SIMD:: Intel's MMX and AMD's 3DNow! SIMD Operations 8105 * i386-16bit:: Writing 16-bit Code 8106 * i386-Arch:: Specifying an x86 CPU architecture 8107 * i386-Bugs:: AT&T Syntax bugs 8108 * i386-Notes:: Notes 8109 8110 8111 File: as.info, Node: i386-Options, Next: i386-Syntax, Up: i386-Dependent 8112 8113 8.11.1 Options 8114 -------------- 8115 8116 The i386 version of `as' has a few machine dependent options: 8117 8118 `--32 | --64' 8119 Select the word size, either 32 bits or 64 bits. Selecting 32-bit 8120 implies Intel i386 architecture, while 64-bit implies AMD x86-64 8121 architecture. 8122 8123 These options are only available with the ELF object file format, 8124 and require that the necessary BFD support has been included (on a 8125 32-bit platform you have to add -enable-64-bit-bfd to configure 8126 enable 64-bit usage and use x86-64 as target platform). 8127 8128 `-n' 8129 By default, x86 GAS replaces multiple nop instructions used for 8130 alignment within code sections with multi-byte nop instructions 8131 such as leal 0(%esi,1),%esi. This switch disables the 8132 optimization. 8133 8134 `--divide' 8135 On SVR4-derived platforms, the character `/' is treated as a 8136 comment character, which means that it cannot be used in 8137 expressions. The `--divide' option turns `/' into a normal 8138 character. This does not disable `/' at the beginning of a line 8139 starting a comment, or affect using `#' for starting a comment. 8140 8141 8142 8143 File: as.info, Node: i386-Syntax, Next: i386-Mnemonics, Prev: i386-Options, Up: i386-Dependent 8144 8145 8.11.2 AT&T Syntax versus Intel Syntax 8146 -------------------------------------- 8147 8148 `as' now supports assembly using Intel assembler syntax. 8149 `.intel_syntax' selects Intel mode, and `.att_syntax' switches back to 8150 the usual AT&T mode for compatibility with the output of `gcc'. Either 8151 of these directives may have an optional argument, `prefix', or 8152 `noprefix' specifying whether registers require a `%' prefix. AT&T 8153 System V/386 assembler syntax is quite different from Intel syntax. We 8154 mention these differences because almost all 80386 documents use Intel 8155 syntax. Notable differences between the two syntaxes are: 8156 8157 * AT&T immediate operands are preceded by `$'; Intel immediate 8158 operands are undelimited (Intel `push 4' is AT&T `pushl $4'). 8159 AT&T register operands are preceded by `%'; Intel register operands 8160 are undelimited. AT&T absolute (as opposed to PC relative) 8161 jump/call operands are prefixed by `*'; they are undelimited in 8162 Intel syntax. 8163 8164 * AT&T and Intel syntax use the opposite order for source and 8165 destination operands. Intel `add eax, 4' is `addl $4, %eax'. The 8166 `source, dest' convention is maintained for compatibility with 8167 previous Unix assemblers. Note that instructions with more than 8168 one source operand, such as the `enter' instruction, do _not_ have 8169 reversed order. *Note i386-Bugs::. 8170 8171 * In AT&T syntax the size of memory operands is determined from the 8172 last character of the instruction mnemonic. Mnemonic suffixes of 8173 `b', `w', `l' and `q' specify byte (8-bit), word (16-bit), long 8174 (32-bit) and quadruple word (64-bit) memory references. Intel 8175 syntax accomplishes this by prefixing memory operands (_not_ the 8176 instruction mnemonics) with `byte ptr', `word ptr', `dword ptr' 8177 and `qword ptr'. Thus, Intel `mov al, byte ptr FOO' is `movb FOO, 8178 %al' in AT&T syntax. 8179 8180 * Immediate form long jumps and calls are `lcall/ljmp $SECTION, 8181 $OFFSET' in AT&T syntax; the Intel syntax is `call/jmp far 8182 SECTION:OFFSET'. Also, the far return instruction is `lret 8183 $STACK-ADJUST' in AT&T syntax; Intel syntax is `ret far 8184 STACK-ADJUST'. 8185 8186 * The AT&T assembler does not provide support for multiple section 8187 programs. Unix style systems expect all programs to be single 8188 sections. 8189 8190 8191 File: as.info, Node: i386-Mnemonics, Next: i386-Regs, Prev: i386-Syntax, Up: i386-Dependent 8192 8193 8.11.3 Instruction Naming 8194 ------------------------- 8195 8196 Instruction mnemonics are suffixed with one character modifiers which 8197 specify the size of operands. The letters `b', `w', `l' and `q' 8198 specify byte, word, long and quadruple word operands. If no suffix is 8199 specified by an instruction then `as' tries to fill in the missing 8200 suffix based on the destination register operand (the last one by 8201 convention). Thus, `mov %ax, %bx' is equivalent to `movw %ax, %bx'; 8202 also, `mov $1, %bx' is equivalent to `movw $1, bx'. Note that this is 8203 incompatible with the AT&T Unix assembler which assumes that a missing 8204 mnemonic suffix implies long operand size. (This incompatibility does 8205 not affect compiler output since compilers always explicitly specify 8206 the mnemonic suffix.) 8207 8208 Almost all instructions have the same names in AT&T and Intel format. 8209 There are a few exceptions. The sign extend and zero extend 8210 instructions need two sizes to specify them. They need a size to 8211 sign/zero extend _from_ and a size to zero extend _to_. This is 8212 accomplished by using two instruction mnemonic suffixes in AT&T syntax. 8213 Base names for sign extend and zero extend are `movs...' and `movz...' 8214 in AT&T syntax (`movsx' and `movzx' in Intel syntax). The instruction 8215 mnemonic suffixes are tacked on to this base name, the _from_ suffix 8216 before the _to_ suffix. Thus, `movsbl %al, %edx' is AT&T syntax for 8217 "move sign extend _from_ %al _to_ %edx." Possible suffixes, thus, are 8218 `bl' (from byte to long), `bw' (from byte to word), `wl' (from word to 8219 long), `bq' (from byte to quadruple word), `wq' (from word to quadruple 8220 word), and `lq' (from long to quadruple word). 8221 8222 The Intel-syntax conversion instructions 8223 8224 * `cbw' -- sign-extend byte in `%al' to word in `%ax', 8225 8226 * `cwde' -- sign-extend word in `%ax' to long in `%eax', 8227 8228 * `cwd' -- sign-extend word in `%ax' to long in `%dx:%ax', 8229 8230 * `cdq' -- sign-extend dword in `%eax' to quad in `%edx:%eax', 8231 8232 * `cdqe' -- sign-extend dword in `%eax' to quad in `%rax' (x86-64 8233 only), 8234 8235 * `cqo' -- sign-extend quad in `%rax' to octuple in `%rdx:%rax' 8236 (x86-64 only), 8237 8238 are called `cbtw', `cwtl', `cwtd', `cltd', `cltq', and `cqto' in AT&T 8239 naming. `as' accepts either naming for these instructions. 8240 8241 Far call/jump instructions are `lcall' and `ljmp' in AT&T syntax, 8242 but are `call far' and `jump far' in Intel convention. 8243 8244 8245 File: as.info, Node: i386-Regs, Next: i386-Prefixes, Prev: i386-Mnemonics, Up: i386-Dependent 8246 8247 8.11.4 Register Naming 8248 ---------------------- 8249 8250 Register operands are always prefixed with `%'. The 80386 registers 8251 consist of 8252 8253 * the 8 32-bit registers `%eax' (the accumulator), `%ebx', `%ecx', 8254 `%edx', `%edi', `%esi', `%ebp' (the frame pointer), and `%esp' 8255 (the stack pointer). 8256 8257 * the 8 16-bit low-ends of these: `%ax', `%bx', `%cx', `%dx', `%di', 8258 `%si', `%bp', and `%sp'. 8259 8260 * the 8 8-bit registers: `%ah', `%al', `%bh', `%bl', `%ch', `%cl', 8261 `%dh', and `%dl' (These are the high-bytes and low-bytes of `%ax', 8262 `%bx', `%cx', and `%dx') 8263 8264 * the 6 section registers `%cs' (code section), `%ds' (data 8265 section), `%ss' (stack section), `%es', `%fs', and `%gs'. 8266 8267 * the 3 processor control registers `%cr0', `%cr2', and `%cr3'. 8268 8269 * the 6 debug registers `%db0', `%db1', `%db2', `%db3', `%db6', and 8270 `%db7'. 8271 8272 * the 2 test registers `%tr6' and `%tr7'. 8273 8274 * the 8 floating point register stack `%st' or equivalently 8275 `%st(0)', `%st(1)', `%st(2)', `%st(3)', `%st(4)', `%st(5)', 8276 `%st(6)', and `%st(7)'. These registers are overloaded by 8 MMX 8277 registers `%mm0', `%mm1', `%mm2', `%mm3', `%mm4', `%mm5', `%mm6' 8278 and `%mm7'. 8279 8280 * the 8 SSE registers registers `%xmm0', `%xmm1', `%xmm2', `%xmm3', 8281 `%xmm4', `%xmm5', `%xmm6' and `%xmm7'. 8282 8283 The AMD x86-64 architecture extends the register set by: 8284 8285 * enhancing the 8 32-bit registers to 64-bit: `%rax' (the 8286 accumulator), `%rbx', `%rcx', `%rdx', `%rdi', `%rsi', `%rbp' (the 8287 frame pointer), `%rsp' (the stack pointer) 8288 8289 * the 8 extended registers `%r8'-`%r15'. 8290 8291 * the 8 32-bit low ends of the extended registers: `%r8d'-`%r15d' 8292 8293 * the 8 16-bit low ends of the extended registers: `%r8w'-`%r15w' 8294 8295 * the 8 8-bit low ends of the extended registers: `%r8b'-`%r15b' 8296 8297 * the 4 8-bit registers: `%sil', `%dil', `%bpl', `%spl'. 8298 8299 * the 8 debug registers: `%db8'-`%db15'. 8300 8301 * the 8 SSE registers: `%xmm8'-`%xmm15'. 8302 8303 8304 File: as.info, Node: i386-Prefixes, Next: i386-Memory, Prev: i386-Regs, Up: i386-Dependent 8305 8306 8.11.5 Instruction Prefixes 8307 --------------------------- 8308 8309 Instruction prefixes are used to modify the following instruction. They 8310 are used to repeat string instructions, to provide section overrides, to 8311 perform bus lock operations, and to change operand and address sizes. 8312 (Most instructions that normally operate on 32-bit operands will use 8313 16-bit operands if the instruction has an "operand size" prefix.) 8314 Instruction prefixes are best written on the same line as the 8315 instruction they act upon. For example, the `scas' (scan string) 8316 instruction is repeated with: 8317 8318 repne scas %es:(%edi),%al 8319 8320 You may also place prefixes on the lines immediately preceding the 8321 instruction, but this circumvents checks that `as' does with prefixes, 8322 and will not work with all prefixes. 8323 8324 Here is a list of instruction prefixes: 8325 8326 * Section override prefixes `cs', `ds', `ss', `es', `fs', `gs'. 8327 These are automatically added by specifying using the 8328 SECTION:MEMORY-OPERAND form for memory references. 8329 8330 * Operand/Address size prefixes `data16' and `addr16' change 32-bit 8331 operands/addresses into 16-bit operands/addresses, while `data32' 8332 and `addr32' change 16-bit ones (in a `.code16' section) into 8333 32-bit operands/addresses. These prefixes _must_ appear on the 8334 same line of code as the instruction they modify. For example, in 8335 a 16-bit `.code16' section, you might write: 8336 8337 addr32 jmpl *(%ebx) 8338 8339 * The bus lock prefix `lock' inhibits interrupts during execution of 8340 the instruction it precedes. (This is only valid with certain 8341 instructions; see a 80386 manual for details). 8342 8343 * The wait for coprocessor prefix `wait' waits for the coprocessor to 8344 complete the current instruction. This should never be needed for 8345 the 80386/80387 combination. 8346 8347 * The `rep', `repe', and `repne' prefixes are added to string 8348 instructions to make them repeat `%ecx' times (`%cx' times if the 8349 current address size is 16-bits). 8350 8351 * The `rex' family of prefixes is used by x86-64 to encode 8352 extensions to i386 instruction set. The `rex' prefix has four 8353 bits -- an operand size overwrite (`64') used to change operand 8354 size from 32-bit to 64-bit and X, Y and Z extensions bits used to 8355 extend the register set. 8356 8357 You may write the `rex' prefixes directly. The `rex64xyz' 8358 instruction emits `rex' prefix with all the bits set. By omitting 8359 the `64', `x', `y' or `z' you may write other prefixes as well. 8360 Normally, there is no need to write the prefixes explicitly, since 8361 gas will automatically generate them based on the instruction 8362 operands. 8363 8364 8365 File: as.info, Node: i386-Memory, Next: i386-Jumps, Prev: i386-Prefixes, Up: i386-Dependent 8366 8367 8.11.6 Memory References 8368 ------------------------ 8369 8370 An Intel syntax indirect memory reference of the form 8371 8372 SECTION:[BASE + INDEX*SCALE + DISP] 8373 8374 is translated into the AT&T syntax 8375 8376 SECTION:DISP(BASE, INDEX, SCALE) 8377 8378 where BASE and INDEX are the optional 32-bit base and index registers, 8379 DISP is the optional displacement, and SCALE, taking the values 1, 2, 8380 4, and 8, multiplies INDEX to calculate the address of the operand. If 8381 no SCALE is specified, SCALE is taken to be 1. SECTION specifies the 8382 optional section register for the memory operand, and may override the 8383 default section register (see a 80386 manual for section register 8384 defaults). Note that section overrides in AT&T syntax _must_ be 8385 preceded by a `%'. If you specify a section override which coincides 8386 with the default section register, `as' does _not_ output any section 8387 register override prefixes to assemble the given instruction. Thus, 8388 section overrides can be specified to emphasize which section register 8389 is used for a given memory operand. 8390 8391 Here are some examples of Intel and AT&T style memory references: 8392 8393 AT&T: `-4(%ebp)', Intel: `[ebp - 4]' 8394 BASE is `%ebp'; DISP is `-4'. SECTION is missing, and the default 8395 section is used (`%ss' for addressing with `%ebp' as the base 8396 register). INDEX, SCALE are both missing. 8397 8398 AT&T: `foo(,%eax,4)', Intel: `[foo + eax*4]' 8399 INDEX is `%eax' (scaled by a SCALE 4); DISP is `foo'. All other 8400 fields are missing. The section register here defaults to `%ds'. 8401 8402 AT&T: `foo(,1)'; Intel `[foo]' 8403 This uses the value pointed to by `foo' as a memory operand. Note 8404 that BASE and INDEX are both missing, but there is only _one_ `,'. 8405 This is a syntactic exception. 8406 8407 AT&T: `%gs:foo'; Intel `gs:foo' 8408 This selects the contents of the variable `foo' with section 8409 register SECTION being `%gs'. 8410 8411 Absolute (as opposed to PC relative) call and jump operands must be 8412 prefixed with `*'. If no `*' is specified, `as' always chooses PC 8413 relative addressing for jump/call labels. 8414 8415 Any instruction that has a memory operand, but no register operand, 8416 _must_ specify its size (byte, word, long, or quadruple) with an 8417 instruction mnemonic suffix (`b', `w', `l' or `q', respectively). 8418 8419 The x86-64 architecture adds an RIP (instruction pointer relative) 8420 addressing. This addressing mode is specified by using `rip' as a base 8421 register. Only constant offsets are valid. For example: 8422 8423 AT&T: `1234(%rip)', Intel: `[rip + 1234]' 8424 Points to the address 1234 bytes past the end of the current 8425 instruction. 8426 8427 AT&T: `symbol(%rip)', Intel: `[rip + symbol]' 8428 Points to the `symbol' in RIP relative way, this is shorter than 8429 the default absolute addressing. 8430 8431 Other addressing modes remain unchanged in x86-64 architecture, 8432 except registers used are 64-bit instead of 32-bit. 8433 8434 8435 File: as.info, Node: i386-Jumps, Next: i386-Float, Prev: i386-Memory, Up: i386-Dependent 8436 8437 8.11.7 Handling of Jump Instructions 8438 ------------------------------------ 8439 8440 Jump instructions are always optimized to use the smallest possible 8441 displacements. This is accomplished by using byte (8-bit) displacement 8442 jumps whenever the target is sufficiently close. If a byte displacement 8443 is insufficient a long displacement is used. We do not support word 8444 (16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump 8445 instruction with the `data16' instruction prefix), since the 80386 8446 insists upon masking `%eip' to 16 bits after the word displacement is 8447 added. (See also *note i386-Arch::) 8448 8449 Note that the `jcxz', `jecxz', `loop', `loopz', `loope', `loopnz' 8450 and `loopne' instructions only come in byte displacements, so that if 8451 you use these instructions (`gcc' does not use them) you may get an 8452 error message (and incorrect code). The AT&T 80386 assembler tries to 8453 get around this problem by expanding `jcxz foo' to 8454 8455 jcxz cx_zero 8456 jmp cx_nonzero 8457 cx_zero: jmp foo 8458 cx_nonzero: 8459 8460 8461 File: as.info, Node: i386-Float, Next: i386-SIMD, Prev: i386-Jumps, Up: i386-Dependent 8462 8463 8.11.8 Floating Point 8464 --------------------- 8465 8466 All 80387 floating point types except packed BCD are supported. (BCD 8467 support may be added without much difficulty). These data types are 8468 16-, 32-, and 64- bit integers, and single (32-bit), double (64-bit), 8469 and extended (80-bit) precision floating point. Each supported type 8470 has an instruction mnemonic suffix and a constructor associated with 8471 it. Instruction mnemonic suffixes specify the operand's data type. 8472 Constructors build these data types into memory. 8473 8474 * Floating point constructors are `.float' or `.single', `.double', 8475 and `.tfloat' for 32-, 64-, and 80-bit formats. These correspond 8476 to instruction mnemonic suffixes `s', `l', and `t'. `t' stands for 8477 80-bit (ten byte) real. The 80387 only supports this format via 8478 the `fldt' (load 80-bit real to stack top) and `fstpt' (store 8479 80-bit real and pop stack) instructions. 8480 8481 * Integer constructors are `.word', `.long' or `.int', and `.quad' 8482 for the 16-, 32-, and 64-bit integer formats. The corresponding 8483 instruction mnemonic suffixes are `s' (single), `l' (long), and 8484 `q' (quad). As with the 80-bit real format, the 64-bit `q' format 8485 is only present in the `fildq' (load quad integer to stack top) 8486 and `fistpq' (store quad integer and pop stack) instructions. 8487 8488 Register to register operations should not use instruction mnemonic 8489 suffixes. `fstl %st, %st(1)' will give a warning, and be assembled as 8490 if you wrote `fst %st, %st(1)', since all register to register 8491 operations use 80-bit floating point operands. (Contrast this with 8492 `fstl %st, mem', which converts `%st' from 80-bit to 64-bit floating 8493 point format, then stores the result in the 4 byte location `mem') 8494 8495 8496 File: as.info, Node: i386-SIMD, Next: i386-16bit, Prev: i386-Float, Up: i386-Dependent 8497 8498 8.11.9 Intel's MMX and AMD's 3DNow! SIMD Operations 8499 --------------------------------------------------- 8500 8501 `as' supports Intel's MMX instruction set (SIMD instructions for 8502 integer data), available on Intel's Pentium MMX processors and Pentium 8503 II processors, AMD's K6 and K6-2 processors, Cyrix' M2 processor, and 8504 probably others. It also supports AMD's 3DNow! instruction set (SIMD 8505 instructions for 32-bit floating point data) available on AMD's K6-2 8506 processor and possibly others in the future. 8507 8508 Currently, `as' does not support Intel's floating point SIMD, Katmai 8509 (KNI). 8510 8511 The eight 64-bit MMX operands, also used by 3DNow!, are called 8512 `%mm0', `%mm1', ... `%mm7'. They contain eight 8-bit integers, four 8513 16-bit integers, two 32-bit integers, one 64-bit integer, or two 32-bit 8514 floating point values. The MMX registers cannot be used at the same 8515 time as the floating point stack. 8516 8517 See Intel and AMD documentation, keeping in mind that the operand 8518 order in instructions is reversed from the Intel syntax. 8519 8520 8521 File: as.info, Node: i386-16bit, Next: i386-Arch, Prev: i386-SIMD, Up: i386-Dependent 8522 8523 8.11.10 Writing 16-bit Code 8524 --------------------------- 8525 8526 While `as' normally writes only "pure" 32-bit i386 code or 64-bit 8527 x86-64 code depending on the default configuration, it also supports 8528 writing code to run in real mode or in 16-bit protected mode code 8529 segments. To do this, put a `.code16' or `.code16gcc' directive before 8530 the assembly language instructions to be run in 16-bit mode. You can 8531 switch `as' back to writing normal 32-bit code with the `.code32' 8532 directive. 8533 8534 `.code16gcc' provides experimental support for generating 16-bit 8535 code from gcc, and differs from `.code16' in that `call', `ret', 8536 `enter', `leave', `push', `pop', `pusha', `popa', `pushf', and `popf' 8537 instructions default to 32-bit size. This is so that the stack pointer 8538 is manipulated in the same way over function calls, allowing access to 8539 function parameters at the same stack offsets as in 32-bit mode. 8540 `.code16gcc' also automatically adds address size prefixes where 8541 necessary to use the 32-bit addressing modes that gcc generates. 8542 8543 The code which `as' generates in 16-bit mode will not necessarily 8544 run on a 16-bit pre-80386 processor. To write code that runs on such a 8545 processor, you must refrain from using _any_ 32-bit constructs which 8546 require `as' to output address or operand size prefixes. 8547 8548 Note that writing 16-bit code instructions by explicitly specifying a 8549 prefix or an instruction mnemonic suffix within a 32-bit code section 8550 generates different machine instructions than those generated for a 8551 16-bit code segment. In a 32-bit code section, the following code 8552 generates the machine opcode bytes `66 6a 04', which pushes the value 8553 `4' onto the stack, decrementing `%esp' by 2. 8554 8555 pushw $4 8556 8557 The same code in a 16-bit code section would generate the machine 8558 opcode bytes `6a 04' (ie. without the operand size prefix), which is 8559 correct since the processor default operand size is assumed to be 16 8560 bits in a 16-bit code section. 8561 8562 8563 File: as.info, Node: i386-Bugs, Next: i386-Notes, Prev: i386-Arch, Up: i386-Dependent 8564 8565 8.11.11 AT&T Syntax bugs 8566 ------------------------ 8567 8568 The UnixWare assembler, and probably other AT&T derived ix86 Unix 8569 assemblers, generate floating point instructions with reversed source 8570 and destination registers in certain cases. Unfortunately, gcc and 8571 possibly many other programs use this reversed syntax, so we're stuck 8572 with it. 8573 8574 For example 8575 8576 fsub %st,%st(3) 8577 results in `%st(3)' being updated to `%st - %st(3)' rather than the 8578 expected `%st(3) - %st'. This happens with all the non-commutative 8579 arithmetic floating point operations with two register operands where 8580 the source register is `%st' and the destination register is `%st(i)'. 8581 8582 8583 File: as.info, Node: i386-Arch, Next: i386-Bugs, Prev: i386-16bit, Up: i386-Dependent 8584 8585 8.11.12 Specifying CPU Architecture 8586 ----------------------------------- 8587 8588 `as' may be told to assemble for a particular CPU (sub-)architecture 8589 with the `.arch CPU_TYPE' directive. This directive enables a warning 8590 when gas detects an instruction that is not supported on the CPU 8591 specified. The choices for CPU_TYPE are: 8592 8593 `i8086' `i186' `i286' `i386' 8594 `i486' `i586' `i686' `pentium' 8595 `pentiumpro' `pentiumii' `pentiumiii' `pentium4' 8596 `k6' `athlon' 8597 `sledgehammer' 8598 `.mmx' `.sse' 8599 `.sse2' 8600 `.sse3' 8601 `.3dnow' 8602 8603 Apart from the warning, there are only two other effects on `as' 8604 operation; Firstly, if you specify a CPU other than `i486', then shift 8605 by one instructions such as `sarl $1, %eax' will automatically use a 8606 two byte opcode sequence. The larger three byte opcode sequence is 8607 used on the 486 (and when no architecture is specified) because it 8608 executes faster on the 486. Note that you can explicitly request the 8609 two byte opcode by writing `sarl %eax'. Secondly, if you specify 8610 `i8086', `i186', or `i286', _and_ `.code16' or `.code16gcc' then byte 8611 offset conditional jumps will be promoted when necessary to a two 8612 instruction sequence consisting of a conditional jump of the opposite 8613 sense around an unconditional jump to the target. 8614 8615 Following the CPU architecture (but not a sub-architecture, which 8616 are those starting with a dot), you may specify `jumps' or `nojumps' to 8617 control automatic promotion of conditional jumps. `jumps' is the 8618 default, and enables jump promotion; All external jumps will be of the 8619 long variety, and file-local jumps will be promoted as necessary. 8620 (*note i386-Jumps::) `nojumps' leaves external conditional jumps as 8621 byte offset jumps, and warns about file-local conditional jumps that 8622 `as' promotes. Unconditional jumps are treated as for `jumps'. 8623 8624 For example 8625 8626 .arch i8086,nojumps 8627 8628 8629 File: as.info, Node: i386-Notes, Prev: i386-Bugs, Up: i386-Dependent 8630 8631 8.11.13 Notes 8632 ------------- 8633 8634 There is some trickery concerning the `mul' and `imul' instructions 8635 that deserves mention. The 16-, 32-, 64- and 128-bit expanding 8636 multiplies (base opcode `0xf6'; extension 4 for `mul' and 5 for `imul') 8637 can be output only in the one operand form. Thus, `imul %ebx, %eax' 8638 does _not_ select the expanding multiply; the expanding multiply would 8639 clobber the `%edx' register, and this would confuse `gcc' output. Use 8640 `imul %ebx' to get the 64-bit product in `%edx:%eax'. 8641 8642 We have added a two operand form of `imul' when the first operand is 8643 an immediate mode expression and the second operand is a register. 8644 This is just a shorthand, so that, multiplying `%eax' by 69, for 8645 example, can be done with `imul $69, %eax' rather than `imul $69, %eax, 8646 %eax'. 8647 8648 8649 File: as.info, Node: i860-Dependent, Next: i960-Dependent, Prev: i386-Dependent, Up: Machine Dependencies 8650 8651 8.12 Intel i860 Dependent Features 8652 ================================== 8653 8654 * Menu: 8655 8656 * Notes-i860:: i860 Notes 8657 * Options-i860:: i860 Command-line Options 8658 * Directives-i860:: i860 Machine Directives 8659 * Opcodes for i860:: i860 Opcodes 8660 8661 8662 File: as.info, Node: Notes-i860, Next: Options-i860, Up: i860-Dependent 8663 8664 8.12.1 i860 Notes 8665 ----------------- 8666 8667 This is a fairly complete i860 assembler which is compatible with the 8668 UNIX System V/860 Release 4 assembler. However, it does not currently 8669 support SVR4 PIC (i.e., `@GOT, @GOTOFF, @PLT'). 8670 8671 Like the SVR4/860 assembler, the output object format is ELF32. 8672 Currently, this is the only supported object format. If there is 8673 sufficient interest, other formats such as COFF may be implemented. 8674 8675 Both the Intel and AT&T/SVR4 syntaxes are supported, with the latter 8676 being the default. One difference is that AT&T syntax requires the '%' 8677 prefix on register names while Intel syntax does not. Another 8678 difference is in the specification of relocatable expressions. The 8679 Intel syntax is `ha%expression' whereas the SVR4 syntax is 8680 `[expression]@ha' (and similarly for the "l" and "h" selectors). 8681 8682 8683 File: as.info, Node: Options-i860, Next: Directives-i860, Prev: Notes-i860, Up: i860-Dependent 8684 8685 8.12.2 i860 Command-line Options 8686 -------------------------------- 8687 8688 8.12.2.1 SVR4 compatibility options 8689 ................................... 8690 8691 `-V' 8692 Print assembler version. 8693 8694 `-Qy' 8695 Ignored. 8696 8697 `-Qn' 8698 Ignored. 8699 8700 8.12.2.2 Other options 8701 ...................... 8702 8703 `-EL' 8704 Select little endian output (this is the default). 8705 8706 `-EB' 8707 Select big endian output. Note that the i860 always reads 8708 instructions as little endian data, so this option only effects 8709 data and not instructions. 8710 8711 `-mwarn-expand' 8712 Emit a warning message if any pseudo-instruction expansions 8713 occurred. For example, a `or' instruction with an immediate 8714 larger than 16-bits will be expanded into two instructions. This 8715 is a very undesirable feature to rely on, so this flag can help 8716 detect any code where it happens. One use of it, for instance, has 8717 been to find and eliminate any place where `gcc' may emit these 8718 pseudo-instructions. 8719 8720 `-mxp' 8721 Enable support for the i860XP instructions and control registers. 8722 By default, this option is disabled so that only the base 8723 instruction set (i.e., i860XR) is supported. 8724 8725 `-mintel-syntax' 8726 The i860 assembler defaults to AT&T/SVR4 syntax. This option 8727 enables the Intel syntax. 8728 8729 8730 File: as.info, Node: Directives-i860, Next: Opcodes for i860, Prev: Options-i860, Up: i860-Dependent 8731 8732 8.12.3 i860 Machine Directives 8733 ------------------------------ 8734 8735 `.dual' 8736 Enter dual instruction mode. While this directive is supported, the 8737 preferred way to use dual instruction mode is to explicitly code 8738 the dual bit with the `d.' prefix. 8739 8740 `.enddual' 8741 Exit dual instruction mode. While this directive is supported, the 8742 preferred way to use dual instruction mode is to explicitly code 8743 the dual bit with the `d.' prefix. 8744 8745 `.atmp' 8746 Change the temporary register used when expanding pseudo 8747 operations. The default register is `r31'. 8748 8749 The `.dual', `.enddual', and `.atmp' directives are available only 8750 in the Intel syntax mode. 8751 8752 Both syntaxes allow for the standard `.align' directive. However, 8753 the Intel syntax additionally allows keywords for the alignment 8754 parameter: "`.align type'", where `type' is one of `.short', `.long', 8755 `.quad', `.single', `.double' representing alignments of 2, 4, 16, 4, 8756 and 8, respectively. 8757 8758 8759 File: as.info, Node: Opcodes for i860, Prev: Directives-i860, Up: i860-Dependent 8760 8761 8.12.4 i860 Opcodes 8762 ------------------- 8763 8764 All of the Intel i860XR and i860XP machine instructions are supported. 8765 Please see either _i860 Microprocessor Programmer's Reference Manual_ 8766 or _i860 Microprocessor Architecture_ for more information. 8767 8768 8.12.4.1 Other instruction support (pseudo-instructions) 8769 ........................................................ 8770 8771 For compatibility with some other i860 assemblers, a number of 8772 pseudo-instructions are supported. While these are supported, they are 8773 a very undesirable feature that should be avoided - in particular, when 8774 they result in an expansion to multiple actual i860 instructions. Below 8775 are the pseudo-instructions that result in expansions. 8776 * Load large immediate into general register: 8777 8778 The pseudo-instruction `mov imm,%rn' (where the immediate does not 8779 fit within a signed 16-bit field) will be expanded into: 8780 orh large_imm@h,%r0,%rn 8781 or large_imm@l,%rn,%rn 8782 8783 * Load/store with relocatable address expression: 8784 8785 For example, the pseudo-instruction `ld.b addr_exp(%rx),%rn' will 8786 be expanded into: 8787 orh addr_exp@ha,%rx,%r31 8788 ld.l addr_exp@l(%r31),%rn 8789 8790 The analogous expansions apply to `ld.x, st.x, fld.x, pfld.x, 8791 fst.x', and `pst.x' as well. 8792 8793 * Signed large immediate with add/subtract: 8794 8795 If any of the arithmetic operations `adds, addu, subs, subu' are 8796 used with an immediate larger than 16-bits (signed), then they 8797 will be expanded. For instance, the pseudo-instruction `adds 8798 large_imm,%rx,%rn' expands to: 8799 orh large_imm@h,%r0,%r31 8800 or large_imm@l,%r31,%r31 8801 adds %r31,%rx,%rn 8802 8803 * Unsigned large immediate with logical operations: 8804 8805 Logical operations (`or, andnot, or, xor') also result in 8806 expansions. The pseudo-instruction `or large_imm,%rx,%rn' results 8807 in: 8808 orh large_imm@h,%rx,%r31 8809 or large_imm@l,%r31,%rn 8810 8811 Similarly for the others, except for `and' which expands to: 8812 andnot (-1 - large_imm)@h,%rx,%r31 8813 andnot (-1 - large_imm)@l,%r31,%rn 8814 8815 8816 File: as.info, Node: i960-Dependent, Next: IA-64-Dependent, Prev: i860-Dependent, Up: Machine Dependencies 8817 8818 8.13 Intel 80960 Dependent Features 8819 =================================== 8820 8821 * Menu: 8822 8823 * Options-i960:: i960 Command-line Options 8824 * Floating Point-i960:: Floating Point 8825 * Directives-i960:: i960 Machine Directives 8826 * Opcodes for i960:: i960 Opcodes 8827 8828 8829 File: as.info, Node: Options-i960, Next: Floating Point-i960, Up: i960-Dependent 8830 8831 8.13.1 i960 Command-line Options 8832 -------------------------------- 8833 8834 `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC' 8835 Select the 80960 architecture. Instructions or features not 8836 supported by the selected architecture cause fatal errors. 8837 8838 `-ACA' is equivalent to `-ACA_A'; `-AKC' is equivalent to `-AMC'. 8839 Synonyms are provided for compatibility with other tools. 8840 8841 If you do not specify any of these options, `as' generates code 8842 for any instruction or feature that is supported by _some_ version 8843 of the 960 (even if this means mixing architectures!). In 8844 principle, `as' attempts to deduce the minimal sufficient 8845 processor type if none is specified; depending on the object code 8846 format, the processor type may be recorded in the object file. If 8847 it is critical that the `as' output match a specific architecture, 8848 specify that architecture explicitly. 8849 8850 `-b' 8851 Add code to collect information about conditional branches taken, 8852 for later optimization using branch prediction bits. (The 8853 conditional branch instructions have branch prediction bits in the 8854 CA, CB, and CC architectures.) If BR represents a conditional 8855 branch instruction, the following represents the code generated by 8856 the assembler when `-b' is specified: 8857 8858 call INCREMENT ROUTINE 8859 .word 0 # pre-counter 8860 Label: BR 8861 call INCREMENT ROUTINE 8862 .word 0 # post-counter 8863 8864 The counter following a branch records the number of times that 8865 branch was _not_ taken; the differenc between the two counters is 8866 the number of times the branch _was_ taken. 8867 8868 A table of every such `Label' is also generated, so that the 8869 external postprocessor `gbr960' (supplied by Intel) can locate all 8870 the counters. This table is always labeled `__BRANCH_TABLE__'; 8871 this is a local symbol to permit collecting statistics for many 8872 separate object files. The table is word aligned, and begins with 8873 a two-word header. The first word, initialized to 0, is used in 8874 maintaining linked lists of branch tables. The second word is a 8875 count of the number of entries in the table, which follow 8876 immediately: each is a word, pointing to one of the labels 8877 illustrated above. 8878 8879 +------------+------------+------------+ ... +------------+ 8880 | | | | | | 8881 | *NEXT | COUNT: N | *BRLAB 1 | | *BRLAB N | 8882 | | | | | | 8883 +------------+------------+------------+ ... +------------+ 8884 8885 __BRANCH_TABLE__ layout 8886 8887 The first word of the header is used to locate multiple branch 8888 tables, since each object file may contain one. Normally the links 8889 are maintained with a call to an initialization routine, placed at 8890 the beginning of each function in the file. The GNU C compiler 8891 generates these calls automatically when you give it a `-b' option. 8892 For further details, see the documentation of `gbr960'. 8893 8894 `-no-relax' 8895 Normally, Compare-and-Branch instructions with targets that require 8896 displacements greater than 13 bits (or that have external targets) 8897 are replaced with the corresponding compare (or `chkbit') and 8898 branch instructions. You can use the `-no-relax' option to 8899 specify that `as' should generate errors instead, if the target 8900 displacement is larger than 13 bits. 8901 8902 This option does not affect the Compare-and-Jump instructions; the 8903 code emitted for them is _always_ adjusted when necessary 8904 (depending on displacement size), regardless of whether you use 8905 `-no-relax'. 8906 8907 8908 File: as.info, Node: Floating Point-i960, Next: Directives-i960, Prev: Options-i960, Up: i960-Dependent 8909 8910 8.13.2 Floating Point 8911 --------------------- 8912 8913 `as' generates IEEE floating-point numbers for the directives `.float', 8914 `.double', `.extended', and `.single'. 8915 8916 8917 File: as.info, Node: Directives-i960, Next: Opcodes for i960, Prev: Floating Point-i960, Up: i960-Dependent 8918 8919 8.13.3 i960 Machine Directives 8920 ------------------------------ 8921 8922 `.bss SYMBOL, LENGTH, ALIGN' 8923 Reserve LENGTH bytes in the bss section for a local SYMBOL, 8924 aligned to the power of two specified by ALIGN. LENGTH and ALIGN 8925 must be positive absolute expressions. This directive differs 8926 from `.lcomm' only in that it permits you to specify an alignment. 8927 *Note `.lcomm': Lcomm. 8928 8929 `.extended FLONUMS' 8930 `.extended' expects zero or more flonums, separated by commas; for 8931 each flonum, `.extended' emits an IEEE extended-format (80-bit) 8932 floating-point number. 8933 8934 `.leafproc CALL-LAB, BAL-LAB' 8935 You can use the `.leafproc' directive in conjunction with the 8936 optimized `callj' instruction to enable faster calls of leaf 8937 procedures. If a procedure is known to call no other procedures, 8938 you may define an entry point that skips procedure prolog code 8939 (and that does not depend on system-supplied saved context), and 8940 declare it as the BAL-LAB using `.leafproc'. If the procedure 8941 also has an entry point that goes through the normal prolog, you 8942 can specify that entry point as CALL-LAB. 8943 8944 A `.leafproc' declaration is meant for use in conjunction with the 8945 optimized call instruction `callj'; the directive records the data 8946 needed later to choose between converting the `callj' into a `bal' 8947 or a `call'. 8948 8949 CALL-LAB is optional; if only one argument is present, or if the 8950 two arguments are identical, the single argument is assumed to be 8951 the `bal' entry point. 8952 8953 `.sysproc NAME, INDEX' 8954 The `.sysproc' directive defines a name for a system procedure. 8955 After you define it using `.sysproc', you can use NAME to refer to 8956 the system procedure identified by INDEX when calling procedures 8957 with the optimized call instruction `callj'. 8958 8959 Both arguments are required; INDEX must be between 0 and 31 8960 (inclusive). 8961 8962 8963 File: as.info, Node: Opcodes for i960, Prev: Directives-i960, Up: i960-Dependent 8964 8965 8.13.4 i960 Opcodes 8966 ------------------- 8967 8968 All Intel 960 machine instructions are supported; *note i960 8969 Command-line Options: Options-i960. for a discussion of selecting the 8970 instruction subset for a particular 960 architecture. 8971 8972 Some opcodes are processed beyond simply emitting a single 8973 corresponding instruction: `callj', and Compare-and-Branch or 8974 Compare-and-Jump instructions with target displacements larger than 13 8975 bits. 8976 8977 * Menu: 8978 8979 * callj-i960:: `callj' 8980 * Compare-and-branch-i960:: Compare-and-Branch 8981 8982 8983 File: as.info, Node: callj-i960, Next: Compare-and-branch-i960, Up: Opcodes for i960 8984 8985 8.13.4.1 `callj' 8986 ................ 8987 8988 You can write `callj' to have the assembler or the linker determine the 8989 most appropriate form of subroutine call: `call', `bal', or `calls'. 8990 If the assembly source contains enough information--a `.leafproc' or 8991 `.sysproc' directive defining the operand--then `as' translates the 8992 `callj'; if not, it simply emits the `callj', leaving it for the linker 8993 to resolve. 8994 8995 8996 File: as.info, Node: Compare-and-branch-i960, Prev: callj-i960, Up: Opcodes for i960 8997 8998 8.13.4.2 Compare-and-Branch 8999 ........................... 9000 9001 The 960 architectures provide combined Compare-and-Branch instructions 9002 that permit you to store the branch target in the lower 13 bits of the 9003 instruction word itself. However, if you specify a branch target far 9004 enough away that its address won't fit in 13 bits, the assembler can 9005 either issue an error, or convert your Compare-and-Branch instruction 9006 into separate instructions to do the compare and the branch. 9007 9008 Whether `as' gives an error or expands the instruction depends on 9009 two choices you can make: whether you use the `-no-relax' option, and 9010 whether you use a "Compare and Branch" instruction or a "Compare and 9011 Jump" instruction. The "Jump" instructions are _always_ expanded if 9012 necessary; the "Branch" instructions are expanded when necessary 9013 _unless_ you specify `-no-relax'--in which case `as' gives an error 9014 instead. 9015 9016 These are the Compare-and-Branch instructions, their "Jump" variants, 9017 and the instruction pairs they may expand into: 9018 9019 Compare and 9020 Branch Jump Expanded to 9021 ------ ------ ------------ 9022 bbc chkbit; bno 9023 bbs chkbit; bo 9024 cmpibe cmpije cmpi; be 9025 cmpibg cmpijg cmpi; bg 9026 cmpibge cmpijge cmpi; bge 9027 cmpibl cmpijl cmpi; bl 9028 cmpible cmpijle cmpi; ble 9029 cmpibno cmpijno cmpi; bno 9030 cmpibne cmpijne cmpi; bne 9031 cmpibo cmpijo cmpi; bo 9032 cmpobe cmpoje cmpo; be 9033 cmpobg cmpojg cmpo; bg 9034 cmpobge cmpojge cmpo; bge 9035 cmpobl cmpojl cmpo; bl 9036 cmpoble cmpojle cmpo; ble 9037 cmpobne cmpojne cmpo; bne 9038 9039 9040 File: as.info, Node: IA-64-Dependent, Next: IP2K-Dependent, Prev: i960-Dependent, Up: Machine Dependencies 9041 9042 8.14 IA-64 Dependent Features 9043 ============================= 9044 9045 * Menu: 9046 9047 * IA-64 Options:: Options 9048 * IA-64 Syntax:: Syntax 9049 * IA-64 Opcodes:: Opcodes 9050 9051 9052 File: as.info, Node: IA-64 Options, Next: IA-64 Syntax, Up: IA-64-Dependent 9053 9054 8.14.1 Options 9055 -------------- 9056 9057 `-mconstant-gp' 9058 This option instructs the assembler to mark the resulting object 9059 file as using the "constant GP" model. With this model, it is 9060 assumed that the entire program uses a single global pointer (GP) 9061 value. Note that this option does not in any fashion affect the 9062 machine code emitted by the assembler. All it does is turn on the 9063 EF_IA_64_CONS_GP flag in the ELF file header. 9064 9065 `-mauto-pic' 9066 This option instructs the assembler to mark the resulting object 9067 file as using the "constant GP without function descriptor" data 9068 model. This model is like the "constant GP" model, except that it 9069 additionally does away with function descriptors. What this means 9070 is that the address of a function refers directly to the 9071 function's code entry-point. Normally, such an address would 9072 refer to a function descriptor, which contains both the code 9073 entry-point and the GP-value needed by the function. Note that 9074 this option does not in any fashion affect the machine code 9075 emitted by the assembler. All it does is turn on the 9076 EF_IA_64_NOFUNCDESC_CONS_GP flag in the ELF file header. 9077 9078 `-milp32' 9079 9080 `-milp64' 9081 9082 `-mlp64' 9083 9084 `-mp64' 9085 These options select the data model. The assembler defaults to 9086 `-mlp64' (LP64 data model). 9087 9088 `-mle' 9089 9090 `-mbe' 9091 These options select the byte order. The `-mle' option selects 9092 little-endian byte order (default) and `-mbe' selects big-endian 9093 byte order. Note that IA-64 machine code always uses 9094 little-endian byte order. 9095 9096 `-mtune=itanium1' 9097 9098 `-mtune=itanium2' 9099 Tune for a particular IA-64 CPU, ITANIUM1 or ITANIUM2. The default 9100 is ITANIUM2. 9101 9102 `-munwind-check=warning' 9103 9104 `-munwind-check=error' 9105 These options control what the assembler will do when performing 9106 consistency checks on unwind directives. `-munwind-check=warning' 9107 will make the assembler issue a warning when an unwind directive 9108 check fails. This is the default. `-munwind-check=error' will 9109 make the assembler issue an error when an unwind directive check 9110 fails. 9111 9112 `-mhint.b=ok' 9113 9114 `-mhint.b=warning' 9115 9116 `-mhint.b=error' 9117 These options control what the assembler will do when the `hint.b' 9118 instruction is used. `-mhint.b=ok' will make the assembler accept 9119 `hint.b'. `-mint.b=warning' will make the assembler issue a 9120 warning when `hint.b' is used. `-mhint.b=error' will make the 9121 assembler treat `hint.b' as an error, which is the default. 9122 9123 `-x' 9124 9125 `-xexplicit' 9126 These options turn on dependency violation checking. 9127 9128 `-xauto' 9129 This option instructs the assembler to automatically insert stop 9130 bits where necessary to remove dependency violations. This is the 9131 default mode. 9132 9133 `-xnone' 9134 This option turns off dependency violation checking. 9135 9136 `-xdebug' 9137 This turns on debug output intended to help tracking down bugs in 9138 the dependency violation checker. 9139 9140 `-xdebugn' 9141 This is a shortcut for -xnone -xdebug. 9142 9143 `-xdebugx' 9144 This is a shortcut for -xexplicit -xdebug. 9145 9146 9147 9148 File: as.info, Node: IA-64 Syntax, Next: IA-64 Opcodes, Prev: IA-64 Options, Up: IA-64-Dependent 9149 9150 8.14.2 Syntax 9151 ------------- 9152 9153 The assembler syntax closely follows the IA-64 Assembly Language 9154 Reference Guide. 9155 9156 * Menu: 9157 9158 * IA-64-Chars:: Special Characters 9159 * IA-64-Regs:: Register Names 9160 * IA-64-Bits:: Bit Names 9161 9162 9163 File: as.info, Node: IA-64-Chars, Next: IA-64-Regs, Up: IA-64 Syntax 9164 9165 8.14.2.1 Special Characters 9166 ........................... 9167 9168 `//' is the line comment token. 9169 9170 `;' can be used instead of a newline to separate statements. 9171 9172 9173 File: as.info, Node: IA-64-Regs, Next: IA-64-Bits, Prev: IA-64-Chars, Up: IA-64 Syntax 9174 9175 8.14.2.2 Register Names 9176 ....................... 9177 9178 The 128 integer registers are referred to as `rN'. The 128 9179 floating-point registers are referred to as `fN'. The 128 application 9180 registers are referred to as `arN'. The 128 control registers are 9181 referred to as `crN'. The 64 one-bit predicate registers are referred 9182 to as `pN'. The 8 branch registers are referred to as `bN'. In 9183 addition, the assembler defines a number of aliases: `gp' (`r1'), `sp' 9184 (`r12'), `rp' (`b0'), `ret0' (`r8'), `ret1' (`r9'), `ret2' (`r10'), 9185 `ret3' (`r9'), `fargN' (`f8+N'), and `fretN' (`f8+N'). 9186 9187 For convenience, the assembler also defines aliases for all named 9188 application and control registers. For example, `ar.bsp' refers to the 9189 register backing store pointer (`ar17'). Similarly, `cr.eoi' refers to 9190 the end-of-interrupt register (`cr67'). 9191 9192 9193 File: as.info, Node: IA-64-Bits, Prev: IA-64-Regs, Up: IA-64 Syntax 9194 9195 8.14.2.3 IA-64 Processor-Status-Register (PSR) Bit Names 9196 ........................................................ 9197 9198 The assembler defines bit masks for each of the bits in the IA-64 9199 processor status register. For example, `psr.ic' corresponds to a 9200 value of 0x2000. These masks are primarily intended for use with the 9201 `ssm'/`sum' and `rsm'/`rum' instructions, but they can be used anywhere 9202 else where an integer constant is expected. 9203 9204 9205 File: as.info, Node: IA-64 Opcodes, Prev: IA-64 Syntax, Up: IA-64-Dependent 9206 9207 8.14.3 Opcodes 9208 -------------- 9209 9210 For detailed information on the IA-64 machine instruction set, see the 9211 IA-64 Architecture Handbook 9212 (http://developer.intel.com/design/itanium/arch_spec.htm). 9213 9214 9215 File: as.info, Node: IP2K-Dependent, Next: M32C-Dependent, Prev: IA-64-Dependent, Up: Machine Dependencies 9216 9217 8.15 IP2K Dependent Features 9218 ============================ 9219 9220 * Menu: 9221 9222 * IP2K-Opts:: IP2K Options 9223 9224 9225 File: as.info, Node: IP2K-Opts, Up: IP2K-Dependent 9226 9227 8.15.1 IP2K Options 9228 ------------------- 9229 9230 The Ubicom IP2K version of `as' has a few machine dependent options: 9231 9232 `-mip2022ext' 9233 `as' can assemble the extended IP2022 instructions, but it will 9234 only do so if this is specifically allowed via this command line 9235 option. 9236 9237 `-mip2022' 9238 This option restores the assembler's default behaviour of not 9239 permitting the extended IP2022 instructions to be assembled. 9240 9241 9242 9243 File: as.info, Node: M32C-Dependent, Next: M32R-Dependent, Prev: IP2K-Dependent, Up: Machine Dependencies 9244 9245 8.16 M32C Dependent Features 9246 ============================ 9247 9248 `as' can assemble code for several different members of the Renesas 9249 M32C family. Normally the default is to assemble code for the M16C 9250 microprocessor. The `-m32c' option may be used to change the default 9251 to the M32C microprocessor. 9252 9253 * Menu: 9254 9255 * M32C-Opts:: M32C Options 9256 * M32C-Modifiers:: Symbolic Operand Modifiers 9257 9258 9259 File: as.info, Node: M32C-Opts, Next: M32C-Modifiers, Up: M32C-Dependent 9260 9261 8.16.1 M32C Options 9262 ------------------- 9263 9264 The Renesas M32C version of `as' has two machine-dependent options: 9265 9266 `-m32c' 9267 Assemble M32C instructions. 9268 9269 `-m16c' 9270 Assemble M16C instructions (default). 9271 9272 9273 9274 File: as.info, Node: M32C-Modifiers, Prev: M32C-Opts, Up: M32C-Dependent 9275 9276 8.16.2 Symbolic Operand Modifiers 9277 --------------------------------- 9278 9279 The assembler supports several modifiers when using symbol addresses in 9280 M32C instruction operands. The general syntax is the following: 9281 9282 %modifier(symbol) 9283 9284 `%dsp8' 9285 `%dsp16' 9286 These modifiers override the assembler's assumptions about how big 9287 a symbol's address is. Normally, when it sees an operand like 9288 `sym[a0]' it assumes `sym' may require the widest displacement 9289 field (16 bits for `-m16c', 24 bits for `-m32c'). These modifiers 9290 tell it to assume the address will fit in an 8 or 16 bit 9291 (respectively) unsigned displacement. Note that, of course, if it 9292 doesn't actually fit you will get linker errors. Example: 9293 9294 mov.w %dsp8(sym)[a0],r1 9295 mov.b #0,%dsp8(sym)[a0] 9296 9297 `%hi8' 9298 This modifier allows you to load bits 16 through 23 of a 24 bit 9299 address into an 8 bit register. This is useful with, for example, 9300 the M16C `smovf' instruction, which expects a 20 bit address in 9301 `r1h' and `a0'. Example: 9302 9303 mov.b #%hi8(sym),r1h 9304 mov.w #%lo16(sym),a0 9305 smovf.b 9306 9307 `%lo16' 9308 Likewise, this modifier allows you to load bits 0 through 15 of a 9309 24 bit address into a 16 bit register. 9310 9311 `%hi16' 9312 This modifier allows you to load bits 16 through 31 of a 32 bit 9313 address into a 16 bit register. While the M32C family only has 24 9314 bits of address space, it does support addresses in pairs of 16 bit 9315 registers (like `a1a0' for the `lde' instruction). This modifier 9316 is for loading the upper half in such cases. Example: 9317 9318 mov.w #%hi16(sym),a1 9319 mov.w #%lo16(sym),a0 9320 ... 9321 lde.w [a1a0],r1 9322 9323 9324 9325 File: as.info, Node: M32R-Dependent, Next: M68K-Dependent, Prev: M32C-Dependent, Up: Machine Dependencies 9326 9327 8.17 M32R Dependent Features 9328 ============================ 9329 9330 * Menu: 9331 9332 * M32R-Opts:: M32R Options 9333 * M32R-Directives:: M32R Directives 9334 * M32R-Warnings:: M32R Warnings 9335 9336 9337 File: as.info, Node: M32R-Opts, Next: M32R-Directives, Up: M32R-Dependent 9338 9339 8.17.1 M32R Options 9340 ------------------- 9341 9342 The Renease M32R version of `as' has a few machine dependent options: 9343 9344 `-m32rx' 9345 `as' can assemble code for several different members of the 9346 Renesas M32R family. Normally the default is to assemble code for 9347 the M32R microprocessor. This option may be used to change the 9348 default to the M32RX microprocessor, which adds some more 9349 instructions to the basic M32R instruction set, and some 9350 additional parameters to some of the original instructions. 9351 9352 `-m32r2' 9353 This option changes the target processor to the the M32R2 9354 microprocessor. 9355 9356 `-m32r' 9357 This option can be used to restore the assembler's default 9358 behaviour of assembling for the M32R microprocessor. This can be 9359 useful if the default has been changed by a previous command line 9360 option. 9361 9362 `-little' 9363 This option tells the assembler to produce little-endian code and 9364 data. The default is dependent upon how the toolchain was 9365 configured. 9366 9367 `-EL' 9368 This is a synonum for _-little_. 9369 9370 `-big' 9371 This option tells the assembler to produce big-endian code and 9372 data. 9373 9374 `-EB' 9375 This is a synonum for _-big_. 9376 9377 `-KPIC' 9378 This option specifies that the output of the assembler should be 9379 marked as position-independent code (PIC). 9380 9381 `-parallel' 9382 This option tells the assembler to attempts to combine two 9383 sequential instructions into a single, parallel instruction, where 9384 it is legal to do so. 9385 9386 `-no-parallel' 9387 This option disables a previously enabled _-parallel_ option. 9388 9389 `-no-bitinst' 9390 This option disables the support for the extended bit-field 9391 instructions provided by the M32R2. If this support needs to be 9392 re-enabled the _-bitinst_ switch can be used to restore it. 9393 9394 `-O' 9395 This option tells the assembler to attempt to optimize the 9396 instructions that it produces. This includes filling delay slots 9397 and converting sequential instructions into parallel ones. This 9398 option implies _-parallel_. 9399 9400 `-warn-explicit-parallel-conflicts' 9401 Instructs `as' to produce warning messages when questionable 9402 parallel instructions are encountered. This option is enabled by 9403 default, but `gcc' disables it when it invokes `as' directly. 9404 Questionable instructions are those whoes behaviour would be 9405 different if they were executed sequentially. For example the 9406 code fragment `mv r1, r2 || mv r3, r1' produces a different result 9407 from `mv r1, r2 \n mv r3, r1' since the former moves r1 into r3 9408 and then r2 into r1, whereas the later moves r2 into r1 and r3. 9409 9410 `-Wp' 9411 This is a shorter synonym for the 9412 _-warn-explicit-parallel-conflicts_ option. 9413 9414 `-no-warn-explicit-parallel-conflicts' 9415 Instructs `as' not to produce warning messages when questionable 9416 parallel instructions are encountered. 9417 9418 `-Wnp' 9419 This is a shorter synonym for the 9420 _-no-warn-explicit-parallel-conflicts_ option. 9421 9422 `-ignore-parallel-conflicts' 9423 This option tells the assembler's to stop checking parallel 9424 instructions for contraint violations. This ability is provided 9425 for hardware vendors testing chip designs and should not be used 9426 under normal circumstances. 9427 9428 `-no-ignore-parallel-conflicts' 9429 This option restores the assembler's default behaviour of checking 9430 parallel instructions to detect constraint violations. 9431 9432 `-Ip' 9433 This is a shorter synonym for the _-ignore-parallel-conflicts_ 9434 option. 9435 9436 `-nIp' 9437 This is a shorter synonym for the _-no-ignore-parallel-conflicts_ 9438 option. 9439 9440 `-warn-unmatched-high' 9441 This option tells the assembler to produce a warning message if a 9442 `.high' pseudo op is encountered without a mathcing `.low' pseudo 9443 op. The presence of such an unmatches pseudo op usually indicates 9444 a programming error. 9445 9446 `-no-warn-unmatched-high' 9447 Disables a previously enabled _-warn-unmatched-high_ option. 9448 9449 `-Wuh' 9450 This is a shorter synonym for the _-warn-unmatched-high_ option. 9451 9452 `-Wnuh' 9453 This is a shorter synonym for the _-no-warn-unmatched-high_ option. 9454 9455 9456 9457 File: as.info, Node: M32R-Directives, Next: M32R-Warnings, Prev: M32R-Opts, Up: M32R-Dependent 9458 9459 8.17.2 M32R Directives 9460 ---------------------- 9461 9462 The Renease M32R version of `as' has a few architecture specific 9463 directives: 9464 9465 `low EXPRESSION' 9466 The `low' directive computes the value of its expression and 9467 places the lower 16-bits of the result into the immediate-field of 9468 the instruction. For example: 9469 9470 or3 r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678 9471 add3, r0, r0, #low(fred) ; compute r0 = r0 + low 16-bits of address of fred 9472 9473 `high EXPRESSION' 9474 The `high' directive computes the value of its expression and 9475 places the upper 16-bits of the result into the immediate-field of 9476 the instruction. For example: 9477 9478 seth r0, #high(0x12345678) ; compute r0 = 0x12340000 9479 seth, r0, #high(fred) ; compute r0 = upper 16-bits of address of fred 9480 9481 `shigh EXPRESSION' 9482 The `shigh' directive is very similar to the `high' directive. It 9483 also computes the value of its expression and places the upper 9484 16-bits of the result into the immediate-field of the instruction. 9485 The difference is that `shigh' also checks to see if the lower 9486 16-bits could be interpreted as a signed number, and if so it 9487 assumes that a borrow will occur from the upper-16 bits. To 9488 compensate for this the `shigh' directive pre-biases the upper 16 9489 bit value by adding one to it. For example: 9490 9491 For example: 9492 9493 seth r0, #shigh(0x12345678) ; compute r0 = 0x12340000 9494 seth r0, #shigh(0x00008000) ; compute r0 = 0x00010000 9495 9496 In the second example the lower 16-bits are 0x8000. If these are 9497 treated as a signed value and sign extended to 32-bits then the 9498 value becomes 0xffff8000. If this value is then added to 9499 0x00010000 then the result is 0x00008000. 9500 9501 This behaviour is to allow for the different semantics of the 9502 `or3' and `add3' instructions. The `or3' instruction treats its 9503 16-bit immediate argument as unsigned whereas the `add3' treats 9504 its 16-bit immediate as a signed value. So for example: 9505 9506 seth r0, #shigh(0x00008000) 9507 add3 r0, r0, #low(0x00008000) 9508 9509 Produces the correct result in r0, whereas: 9510 9511 seth r0, #shigh(0x00008000) 9512 or3 r0, r0, #low(0x00008000) 9513 9514 Stores 0xffff8000 into r0. 9515 9516 Note - the `shigh' directive does not know where in the assembly 9517 source code the lower 16-bits of the value are going set, so it 9518 cannot check to make sure that an `or3' instruction is being used 9519 rather than an `add3' instruction. It is up to the programmer to 9520 make sure that correct directives are used. 9521 9522 `.m32r' 9523 The directive performs a similar thing as the _-m32r_ command line 9524 option. It tells the assembler to only accept M32R instructions 9525 from now on. An instructions from later M32R architectures are 9526 refused. 9527 9528 `.m32rx' 9529 The directive performs a similar thing as the _-m32rx_ command 9530 line option. It tells the assembler to start accepting the extra 9531 instructions in the M32RX ISA as well as the ordinary M32R ISA. 9532 9533 `.m32r2' 9534 The directive performs a similar thing as the _-m32r2_ command 9535 line option. It tells the assembler to start accepting the extra 9536 instructions in the M32R2 ISA as well as the ordinary M32R ISA. 9537 9538 `.little' 9539 The directive performs a similar thing as the _-little_ command 9540 line option. It tells the assembler to start producing 9541 little-endian code and data. This option should be used with care 9542 as producing mixed-endian binary files is frought with danger. 9543 9544 `.big' 9545 The directive performs a similar thing as the _-big_ command line 9546 option. It tells the assembler to start producing big-endian code 9547 and data. This option should be used with care as producing 9548 mixed-endian binary files is frought with danger. 9549 9550 9551 9552 File: as.info, Node: M32R-Warnings, Prev: M32R-Directives, Up: M32R-Dependent 9553 9554 8.17.3 M32R Warnings 9555 -------------------- 9556 9557 There are several warning and error messages that can be produced by 9558 `as' which are specific to the M32R: 9559 9560 `output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?' 9561 This message is only produced if warnings for explicit parallel 9562 conflicts have been enabled. It indicates that the assembler has 9563 encountered a parallel instruction in which the destination 9564 register of the left hand instruction is used as an input register 9565 in the right hand instruction. For example in this code fragment 9566 `mv r1, r2 || neg r3, r1' register r1 is the destination of the 9567 move instruction and the input to the neg instruction. 9568 9569 `output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?' 9570 This message is only produced if warnings for explicit parallel 9571 conflicts have been enabled. It indicates that the assembler has 9572 encountered a parallel instruction in which the destination 9573 register of the right hand instruction is used as an input 9574 register in the left hand instruction. For example in this code 9575 fragment `mv r1, r2 || neg r2, r3' register r2 is the destination 9576 of the neg instruction and the input to the move instruction. 9577 9578 `instruction `...' is for the M32RX only' 9579 This message is produced when the assembler encounters an 9580 instruction which is only supported by the M32Rx processor, and 9581 the `-m32rx' command line flag has not been specified to allow 9582 assembly of such instructions. 9583 9584 `unknown instruction `...'' 9585 This message is produced when the assembler encounters an 9586 instruction which it does not recognise. 9587 9588 `only the NOP instruction can be issued in parallel on the m32r' 9589 This message is produced when the assembler encounters a parallel 9590 instruction which does not involve a NOP instruction and the 9591 `-m32rx' command line flag has not been specified. Only the M32Rx 9592 processor is able to execute two instructions in parallel. 9593 9594 `instruction `...' cannot be executed in parallel.' 9595 This message is produced when the assembler encounters a parallel 9596 instruction which is made up of one or two instructions which 9597 cannot be executed in parallel. 9598 9599 `Instructions share the same execution pipeline' 9600 This message is produced when the assembler encounters a parallel 9601 instruction whoes components both use the same execution pipeline. 9602 9603 `Instructions write to the same destination register.' 9604 This message is produced when the assembler encounters a parallel 9605 instruction where both components attempt to modify the same 9606 register. For example these code fragments will produce this 9607 message: `mv r1, r2 || neg r1, r3' `jl r0 || mv r14, r1' `st r2, 9608 @-r1 || mv r1, r3' `mv r1, r2 || ld r0, @r1+' `cmp r1, r2 || addx 9609 r3, r4' (Both write to the condition bit) 9610 9611 9612 9613 File: as.info, Node: M68K-Dependent, Next: M68HC11-Dependent, Prev: M32R-Dependent, Up: Machine Dependencies 9614 9615 8.18 M680x0 Dependent Features 9616 ============================== 9617 9618 * Menu: 9619 9620 * M68K-Opts:: M680x0 Options 9621 * M68K-Syntax:: Syntax 9622 * M68K-Moto-Syntax:: Motorola Syntax 9623 * M68K-Float:: Floating Point 9624 * M68K-Directives:: 680x0 Machine Directives 9625 * M68K-opcodes:: Opcodes 9626 9627 9628 File: as.info, Node: M68K-Opts, Next: M68K-Syntax, Up: M68K-Dependent 9629 9630 8.18.1 M680x0 Options 9631 --------------------- 9632 9633 The Motorola 680x0 version of `as' has a few machine dependent options: 9634 9635 `-march=ARCHITECTURE' 9636 This option specifies a target architecture. The following 9637 architectures are recognized: `68000', `68010', `68020', `68030', 9638 `68040', `68060', `cpu32', `isaa', `isaaplus', `isab' and `cfv4e'. 9639 9640 `-mcpu=CPU' 9641 This option specifies a target cpu. When used in conjunction with 9642 the `-march' option, the cpu must be within the specified 9643 architecture. Also, the generic features of the architecture are 9644 used for instruction generation, rather than those of the specific 9645 chip. 9646 9647 `-m[no-]68851' 9648 9649 `-m[no-]68881' 9650 9651 `-m[no-]div' 9652 9653 `-m[no-]usp' 9654 9655 `-m[no-]float' 9656 9657 `-m[no-]mac' 9658 9659 `-m[no-]emac' 9660 Enable or disable various architecture specific features. If a 9661 chip or architecture by default supports an option (for instance 9662 `-march=isaaplus' includes the `-mdiv' option), explicitly 9663 disabling the option will override the default. 9664 9665 `-l' 9666 You can use the `-l' option to shorten the size of references to 9667 undefined symbols. If you do not use the `-l' option, references 9668 to undefined symbols are wide enough for a full `long' (32 bits). 9669 (Since `as' cannot know where these symbols end up, `as' can only 9670 allocate space for the linker to fill in later. Since `as' does 9671 not know how far away these symbols are, it allocates as much 9672 space as it can.) If you use this option, the references are only 9673 one word wide (16 bits). This may be useful if you want the 9674 object file to be as small as possible, and you know that the 9675 relevant symbols are always less than 17 bits away. 9676 9677 `--register-prefix-optional' 9678 For some configurations, especially those where the compiler 9679 normally does not prepend an underscore to the names of user 9680 variables, the assembler requires a `%' before any use of a 9681 register name. This is intended to let the assembler distinguish 9682 between C variables and functions named `a0' through `a7', and so 9683 on. The `%' is always accepted, but is not required for certain 9684 configurations, notably `sun3'. The `--register-prefix-optional' 9685 option may be used to permit omitting the `%' even for 9686 configurations for which it is normally required. If this is 9687 done, it will generally be impossible to refer to C variables and 9688 functions with the same names as register names. 9689 9690 `--bitwise-or' 9691 Normally the character `|' is treated as a comment character, which 9692 means that it can not be used in expressions. The `--bitwise-or' 9693 option turns `|' into a normal character. In this mode, you must 9694 either use C style comments, or start comments with a `#' character 9695 at the beginning of a line. 9696 9697 `--base-size-default-16 --base-size-default-32' 9698 If you use an addressing mode with a base register without 9699 specifying the size, `as' will normally use the full 32 bit value. 9700 For example, the addressing mode `%a0@(%d0)' is equivalent to 9701 `%a0@(%d0:l)'. You may use the `--base-size-default-16' option to 9702 tell `as' to default to using the 16 bit value. In this case, 9703 `%a0@(%d0)' is equivalent to `%a0@(%d0:w)'. You may use the 9704 `--base-size-default-32' option to restore the default behaviour. 9705 9706 `--disp-size-default-16 --disp-size-default-32' 9707 If you use an addressing mode with a displacement, and the value 9708 of the displacement is not known, `as' will normally assume that 9709 the value is 32 bits. For example, if the symbol `disp' has not 9710 been defined, `as' will assemble the addressing mode 9711 `%a0@(disp,%d0)' as though `disp' is a 32 bit value. You may use 9712 the `--disp-size-default-16' option to tell `as' to instead assume 9713 that the displacement is 16 bits. In this case, `as' will 9714 assemble `%a0@(disp,%d0)' as though `disp' is a 16 bit value. You 9715 may use the `--disp-size-default-32' option to restore the default 9716 behaviour. 9717 9718 `--pcrel' 9719 Always keep branches PC-relative. In the M680x0 architecture all 9720 branches are defined as PC-relative. However, on some processors 9721 they are limited to word displacements maximum. When `as' needs a 9722 long branch that is not available, it normally emits an absolute 9723 jump instead. This option disables this substitution. When this 9724 option is given and no long branches are available, only word 9725 branches will be emitted. An error message will be generated if a 9726 word branch cannot reach its target. This option has no effect on 9727 68020 and other processors that have long branches. *note Branch 9728 Improvement: M68K-Branch. 9729 9730 `-m68000' 9731 `as' can assemble code for several different members of the 9732 Motorola 680x0 family. The default depends upon how `as' was 9733 configured when it was built; normally, the default is to assemble 9734 code for the 68020 microprocessor. The following options may be 9735 used to change the default. These options control which 9736 instructions and addressing modes are permitted. The members of 9737 the 680x0 family are very similar. For detailed information about 9738 the differences, see the Motorola manuals. 9739 9740 `-m68000' 9741 `-m68ec000' 9742 `-m68hc000' 9743 `-m68hc001' 9744 `-m68008' 9745 `-m68302' 9746 `-m68306' 9747 `-m68307' 9748 `-m68322' 9749 `-m68356' 9750 Assemble for the 68000. `-m68008', `-m68302', and so on are 9751 synonyms for `-m68000', since the chips are the same from the 9752 point of view of the assembler. 9753 9754 `-m68010' 9755 Assemble for the 68010. 9756 9757 `-m68020' 9758 `-m68ec020' 9759 Assemble for the 68020. This is normally the default. 9760 9761 `-m68030' 9762 `-m68ec030' 9763 Assemble for the 68030. 9764 9765 `-m68040' 9766 `-m68ec040' 9767 Assemble for the 68040. 9768 9769 `-m68060' 9770 `-m68ec060' 9771 Assemble for the 68060. 9772 9773 `-mcpu32' 9774 `-m68330' 9775 `-m68331' 9776 `-m68332' 9777 `-m68333' 9778 `-m68334' 9779 `-m68336' 9780 `-m68340' 9781 `-m68341' 9782 `-m68349' 9783 `-m68360' 9784 Assemble for the CPU32 family of chips. 9785 9786 `-m5200' 9787 9788 `-m5202' 9789 9790 `-m5204' 9791 9792 `-m5206' 9793 9794 `-m5206e' 9795 9796 `-m521x' 9797 9798 `-m5249' 9799 9800 `-m528x' 9801 9802 `-m5307' 9803 9804 `-m5407' 9805 9806 `-m547x' 9807 9808 `-m548x' 9809 9810 `-mcfv4' 9811 9812 `-mcfv4e' 9813 Assemble for the ColdFire family of chips. 9814 9815 `-m68881' 9816 `-m68882' 9817 Assemble 68881 floating point instructions. This is the 9818 default for the 68020, 68030, and the CPU32. The 68040 and 9819 68060 always support floating point instructions. 9820 9821 `-mno-68881' 9822 Do not assemble 68881 floating point instructions. This is 9823 the default for 68000 and the 68010. The 68040 and 68060 9824 always support floating point instructions, even if this 9825 option is used. 9826 9827 `-m68851' 9828 Assemble 68851 MMU instructions. This is the default for the 9829 68020, 68030, and 68060. The 68040 accepts a somewhat 9830 different set of MMU instructions; `-m68851' and `-m68040' 9831 should not be used together. 9832 9833 `-mno-68851' 9834 Do not assemble 68851 MMU instructions. This is the default 9835 for the 68000, 68010, and the CPU32. The 68040 accepts a 9836 somewhat different set of MMU instructions. 9837 9838 9839 File: as.info, Node: M68K-Syntax, Next: M68K-Moto-Syntax, Prev: M68K-Opts, Up: M68K-Dependent 9840 9841 8.18.2 Syntax 9842 ------------- 9843 9844 This syntax for the Motorola 680x0 was developed at MIT. 9845 9846 The 680x0 version of `as' uses instructions names and syntax 9847 compatible with the Sun assembler. Intervening periods are ignored; 9848 for example, `movl' is equivalent to `mov.l'. 9849 9850 In the following table APC stands for any of the address registers 9851 (`%a0' through `%a7'), the program counter (`%pc'), the zero-address 9852 relative to the program counter (`%zpc'), a suppressed address register 9853 (`%za0' through `%za7'), or it may be omitted entirely. The use of 9854 SIZE means one of `w' or `l', and it may be omitted, along with the 9855 leading colon, unless a scale is also specified. The use of SCALE 9856 means one of `1', `2', `4', or `8', and it may always be omitted along 9857 with the leading colon. 9858 9859 The following addressing modes are understood: 9860 "Immediate" 9861 `#NUMBER' 9862 9863 "Data Register" 9864 `%d0' through `%d7' 9865 9866 "Address Register" 9867 `%a0' through `%a7' 9868 `%a7' is also known as `%sp', i.e. the Stack Pointer. `%a6' is 9869 also known as `%fp', the Frame Pointer. 9870 9871 "Address Register Indirect" 9872 `%a0@' through `%a7@' 9873 9874 "Address Register Postincrement" 9875 `%a0@+' through `%a7@+' 9876 9877 "Address Register Predecrement" 9878 `%a0@-' through `%a7@-' 9879 9880 "Indirect Plus Offset" 9881 `APC@(NUMBER)' 9882 9883 "Index" 9884 `APC@(NUMBER,REGISTER:SIZE:SCALE)' 9885 9886 The NUMBER may be omitted. 9887 9888 "Postindex" 9889 `APC@(NUMBER)@(ONUMBER,REGISTER:SIZE:SCALE)' 9890 9891 The ONUMBER or the REGISTER, but not both, may be omitted. 9892 9893 "Preindex" 9894 `APC@(NUMBER,REGISTER:SIZE:SCALE)@(ONUMBER)' 9895 9896 The NUMBER may be omitted. Omitting the REGISTER produces the 9897 Postindex addressing mode. 9898 9899 "Absolute" 9900 `SYMBOL', or `DIGITS', optionally followed by `:b', `:w', or `:l'. 9901 9902 9903 File: as.info, Node: M68K-Moto-Syntax, Next: M68K-Float, Prev: M68K-Syntax, Up: M68K-Dependent 9904 9905 8.18.3 Motorola Syntax 9906 ---------------------- 9907 9908 The standard Motorola syntax for this chip differs from the syntax 9909 already discussed (*note Syntax: M68K-Syntax.). `as' can accept 9910 Motorola syntax for operands, even if MIT syntax is used for other 9911 operands in the same instruction. The two kinds of syntax are fully 9912 compatible. 9913 9914 In the following table APC stands for any of the address registers 9915 (`%a0' through `%a7'), the program counter (`%pc'), the zero-address 9916 relative to the program counter (`%zpc'), or a suppressed address 9917 register (`%za0' through `%za7'). The use of SIZE means one of `w' or 9918 `l', and it may always be omitted along with the leading dot. The use 9919 of SCALE means one of `1', `2', `4', or `8', and it may always be 9920 omitted along with the leading asterisk. 9921 9922 The following additional addressing modes are understood: 9923 9924 "Address Register Indirect" 9925 `(%a0)' through `(%a7)' 9926 `%a7' is also known as `%sp', i.e. the Stack Pointer. `%a6' is 9927 also known as `%fp', the Frame Pointer. 9928 9929 "Address Register Postincrement" 9930 `(%a0)+' through `(%a7)+' 9931 9932 "Address Register Predecrement" 9933 `-(%a0)' through `-(%a7)' 9934 9935 "Indirect Plus Offset" 9936 `NUMBER(%A0)' through `NUMBER(%A7)', or `NUMBER(%PC)'. 9937 9938 The NUMBER may also appear within the parentheses, as in 9939 `(NUMBER,%A0)'. When used with the PC, the NUMBER may be omitted 9940 (with an address register, omitting the NUMBER produces Address 9941 Register Indirect mode). 9942 9943 "Index" 9944 `NUMBER(APC,REGISTER.SIZE*SCALE)' 9945 9946 The NUMBER may be omitted, or it may appear within the 9947 parentheses. The APC may be omitted. The REGISTER and the APC 9948 may appear in either order. If both APC and REGISTER are address 9949 registers, and the SIZE and SCALE are omitted, then the first 9950 register is taken as the base register, and the second as the 9951 index register. 9952 9953 "Postindex" 9954 `([NUMBER,APC],REGISTER.SIZE*SCALE,ONUMBER)' 9955 9956 The ONUMBER, or the REGISTER, or both, may be omitted. Either the 9957 NUMBER or the APC may be omitted, but not both. 9958 9959 "Preindex" 9960 `([NUMBER,APC,REGISTER.SIZE*SCALE],ONUMBER)' 9961 9962 The NUMBER, or the APC, or the REGISTER, or any two of them, may 9963 be omitted. The ONUMBER may be omitted. The REGISTER and the APC 9964 may appear in either order. If both APC and REGISTER are address 9965 registers, and the SIZE and SCALE are omitted, then the first 9966 register is taken as the base register, and the second as the 9967 index register. 9968 9969 9970 File: as.info, Node: M68K-Float, Next: M68K-Directives, Prev: M68K-Moto-Syntax, Up: M68K-Dependent 9971 9972 8.18.4 Floating Point 9973 --------------------- 9974 9975 Packed decimal (P) format floating literals are not supported. Feel 9976 free to add the code! 9977 9978 The floating point formats generated by directives are these. 9979 9980 `.float' 9981 `Single' precision floating point constants. 9982 9983 `.double' 9984 `Double' precision floating point constants. 9985 9986 `.extend' 9987 `.ldouble' 9988 `Extended' precision (`long double') floating point constants. 9989 9990 9991 File: as.info, Node: M68K-Directives, Next: M68K-opcodes, Prev: M68K-Float, Up: M68K-Dependent 9992 9993 8.18.5 680x0 Machine Directives 9994 ------------------------------- 9995 9996 In order to be compatible with the Sun assembler the 680x0 assembler 9997 understands the following directives. 9998 9999 `.data1' 10000 This directive is identical to a `.data 1' directive. 10001 10002 `.data2' 10003 This directive is identical to a `.data 2' directive. 10004 10005 `.even' 10006 This directive is a special case of the `.align' directive; it 10007 aligns the output to an even byte boundary. 10008 10009 `.skip' 10010 This directive is identical to a `.space' directive. 10011 10012 `.arch NAME' 10013 Select the target architecture and extension features. Valid 10014 valuse for NAME are the same as for the `-march' command line 10015 option. This directive cannot be specified after any instructions 10016 have been assembled. If it is given multiple times, or in 10017 conjuction with the `-march' option, all uses must be for the same 10018 architecture and extension set. 10019 10020 `.cpu NAME' 10021 Select the target cpu. Valid valuse for NAME are the same as for 10022 the `-mcpu' command line option. This directive cannot be 10023 specified after any instructions have been assembled. If it is 10024 given multiple times, or in conjuction with the `-mopt' option, 10025 all uses must be for the same cpu. 10026 10027 10028 10029 File: as.info, Node: M68K-opcodes, Prev: M68K-Directives, Up: M68K-Dependent 10030 10031 8.18.6 Opcodes 10032 -------------- 10033 10034 * Menu: 10035 10036 * M68K-Branch:: Branch Improvement 10037 * M68K-Chars:: Special Characters 10038 10039 10040 File: as.info, Node: M68K-Branch, Next: M68K-Chars, Up: M68K-opcodes 10041 10042 8.18.6.1 Branch Improvement 10043 ........................... 10044 10045 Certain pseudo opcodes are permitted for branch instructions. They 10046 expand to the shortest branch instruction that reach the target. 10047 Generally these mnemonics are made by substituting `j' for `b' at the 10048 start of a Motorola mnemonic. 10049 10050 The following table summarizes the pseudo-operations. A `*' flags 10051 cases that are more fully described after the table: 10052 10053 Displacement 10054 +------------------------------------------------------------ 10055 | 68020 68000/10, not PC-relative OK 10056 Pseudo-Op |BYTE WORD LONG ABSOLUTE LONG JUMP ** 10057 +------------------------------------------------------------ 10058 jbsr |bsrs bsrw bsrl jsr 10059 jra |bras braw bral jmp 10060 * jXX |bXXs bXXw bXXl bNXs;jmp 10061 * dbXX | N/A dbXXw dbXX;bras;bral dbXX;bras;jmp 10062 fjXX | N/A fbXXw fbXXl N/A 10063 10064 XX: condition 10065 NX: negative of condition XX 10066 `*'--see full description below 10067 `**'--this expansion mode is disallowed by `--pcrel' 10068 10069 `jbsr' 10070 `jra' 10071 These are the simplest jump pseudo-operations; they always map to 10072 one particular machine instruction, depending on the displacement 10073 to the branch target. This instruction will be a byte or word 10074 branch is that is sufficient. Otherwise, a long branch will be 10075 emitted if available. If no long branches are available and the 10076 `--pcrel' option is not given, an absolute long jump will be 10077 emitted instead. If no long branches are available, the `--pcrel' 10078 option is given, and a word branch cannot reach the target, an 10079 error message is generated. 10080 10081 In addition to standard branch operands, `as' allows these 10082 pseudo-operations to have all operands that are allowed for jsr 10083 and jmp, substituting these instructions if the operand given is 10084 not valid for a branch instruction. 10085 10086 `jXX' 10087 Here, `jXX' stands for an entire family of pseudo-operations, 10088 where XX is a conditional branch or condition-code test. The full 10089 list of pseudo-ops in this family is: 10090 jhi jls jcc jcs jne jeq jvc 10091 jvs jpl jmi jge jlt jgt jle 10092 10093 Usually, each of these pseudo-operations expands to a single branch 10094 instruction. However, if a word branch is not sufficient, no long 10095 branches are available, and the `--pcrel' option is not given, `as' 10096 issues a longer code fragment in terms of NX, the opposite 10097 condition to XX. For example, under these conditions: 10098 jXX foo 10099 gives 10100 bNXs oof 10101 jmp foo 10102 oof: 10103 10104 `dbXX' 10105 The full family of pseudo-operations covered here is 10106 dbhi dbls dbcc dbcs dbne dbeq dbvc 10107 dbvs dbpl dbmi dbge dblt dbgt dble 10108 dbf dbra dbt 10109 10110 Motorola `dbXX' instructions allow word displacements only. When 10111 a word displacement is sufficient, each of these pseudo-operations 10112 expands to the corresponding Motorola instruction. When a word 10113 displacement is not sufficient and long branches are available, 10114 when the source reads `dbXX foo', `as' emits 10115 dbXX oo1 10116 bras oo2 10117 oo1:bral foo 10118 oo2: 10119 10120 If, however, long branches are not available and the `--pcrel' 10121 option is not given, `as' emits 10122 dbXX oo1 10123 bras oo2 10124 oo1:jmp foo 10125 oo2: 10126 10127 `fjXX' 10128 This family includes 10129 fjne fjeq fjge fjlt fjgt fjle fjf 10130 fjt fjgl fjgle fjnge fjngl fjngle fjngt 10131 fjnle fjnlt fjoge fjogl fjogt fjole fjolt 10132 fjor fjseq fjsf fjsne fjst fjueq fjuge 10133 fjugt fjule fjult fjun 10134 10135 Each of these pseudo-operations always expands to a single Motorola 10136 coprocessor branch instruction, word or long. All Motorola 10137 coprocessor branch instructions allow both word and long 10138 displacements. 10139 10140 10141 10142 File: as.info, Node: M68K-Chars, Prev: M68K-Branch, Up: M68K-opcodes 10143 10144 8.18.6.2 Special Characters 10145 ........................... 10146 10147 The immediate character is `#' for Sun compatibility. The line-comment 10148 character is `|' (unless the `--bitwise-or' option is used). If a `#' 10149 appears at the beginning of a line, it is treated as a comment unless 10150 it looks like `# line file', in which case it is treated normally. 10151 10152 10153 File: as.info, Node: M68HC11-Dependent, Next: MIPS-Dependent, Prev: M68K-Dependent, Up: Machine Dependencies 10154 10155 8.19 M68HC11 and M68HC12 Dependent Features 10156 =========================================== 10157 10158 * Menu: 10159 10160 * M68HC11-Opts:: M68HC11 and M68HC12 Options 10161 * M68HC11-Syntax:: Syntax 10162 * M68HC11-Modifiers:: Symbolic Operand Modifiers 10163 * M68HC11-Directives:: Assembler Directives 10164 * M68HC11-Float:: Floating Point 10165 * M68HC11-opcodes:: Opcodes 10166 10167 10168 File: as.info, Node: M68HC11-Opts, Next: M68HC11-Syntax, Up: M68HC11-Dependent 10169 10170 8.19.1 M68HC11 and M68HC12 Options 10171 ---------------------------------- 10172 10173 The Motorola 68HC11 and 68HC12 version of `as' have a few machine 10174 dependent options. 10175 10176 `-m68hc11' 10177 This option switches the assembler in the M68HC11 mode. In this 10178 mode, the assembler only accepts 68HC11 operands and mnemonics. It 10179 produces code for the 68HC11. 10180 10181 `-m68hc12' 10182 This option switches the assembler in the M68HC12 mode. In this 10183 mode, the assembler also accepts 68HC12 operands and mnemonics. It 10184 produces code for the 68HC12. A few 68HC11 instructions are 10185 replaced by some 68HC12 instructions as recommended by Motorola 10186 specifications. 10187 10188 `-m68hcs12' 10189 This option switches the assembler in the M68HCS12 mode. This 10190 mode is similar to `-m68hc12' but specifies to assemble for the 10191 68HCS12 series. The only difference is on the assembling of the 10192 `movb' and `movw' instruction when a PC-relative operand is used. 10193 10194 `-mshort' 10195 This option controls the ABI and indicates to use a 16-bit integer 10196 ABI. It has no effect on the assembled instructions. This is the 10197 default. 10198 10199 `-mlong' 10200 This option controls the ABI and indicates to use a 32-bit integer 10201 ABI. 10202 10203 `-mshort-double' 10204 This option controls the ABI and indicates to use a 32-bit float 10205 ABI. This is the default. 10206 10207 `-mlong-double' 10208 This option controls the ABI and indicates to use a 64-bit float 10209 ABI. 10210 10211 `--strict-direct-mode' 10212 You can use the `--strict-direct-mode' option to disable the 10213 automatic translation of direct page mode addressing into extended 10214 mode when the instruction does not support direct mode. For 10215 example, the `clr' instruction does not support direct page mode 10216 addressing. When it is used with the direct page mode, `as' will 10217 ignore it and generate an absolute addressing. This option 10218 prevents `as' from doing this, and the wrong usage of the direct 10219 page mode will raise an error. 10220 10221 `--short-branchs' 10222 The `--short-branchs' option turns off the translation of relative 10223 branches into absolute branches when the branch offset is out of 10224 range. By default `as' transforms the relative branch (`bsr', 10225 `bgt', `bge', `beq', `bne', `ble', `blt', `bhi', `bcc', `bls', 10226 `bcs', `bmi', `bvs', `bvs', `bra') into an absolute branch when 10227 the offset is out of the -128 .. 127 range. In that case, the 10228 `bsr' instruction is translated into a `jsr', the `bra' 10229 instruction is translated into a `jmp' and the conditional branchs 10230 instructions are inverted and followed by a `jmp'. This option 10231 disables these translations and `as' will generate an error if a 10232 relative branch is out of range. This option does not affect the 10233 optimization associated to the `jbra', `jbsr' and `jbXX' pseudo 10234 opcodes. 10235 10236 `--force-long-branchs' 10237 The `--force-long-branchs' option forces the translation of 10238 relative branches into absolute branches. This option does not 10239 affect the optimization associated to the `jbra', `jbsr' and 10240 `jbXX' pseudo opcodes. 10241 10242 `--print-insn-syntax' 10243 You can use the `--print-insn-syntax' option to obtain the syntax 10244 description of the instruction when an error is detected. 10245 10246 `--print-opcodes' 10247 The `--print-opcodes' option prints the list of all the 10248 instructions with their syntax. The first item of each line 10249 represents the instruction name and the rest of the line indicates 10250 the possible operands for that instruction. The list is printed in 10251 alphabetical order. Once the list is printed `as' exits. 10252 10253 `--generate-example' 10254 The `--generate-example' option is similar to `--print-opcodes' 10255 but it generates an example for each instruction instead. 10256 10257 10258 File: as.info, Node: M68HC11-Syntax, Next: M68HC11-Modifiers, Prev: M68HC11-Opts, Up: M68HC11-Dependent 10259 10260 8.19.2 Syntax 10261 ------------- 10262 10263 In the M68HC11 syntax, the instruction name comes first and it may be 10264 followed by one or several operands (up to three). Operands are 10265 separated by comma (`,'). In the normal mode, `as' will complain if too 10266 many operands are specified for a given instruction. In the MRI mode 10267 (turned on with `-M' option), it will treat them as comments. Example: 10268 10269 inx 10270 lda #23 10271 bset 2,x #4 10272 brclr *bot #8 foo 10273 10274 The following addressing modes are understood for 68HC11 and 68HC12: 10275 "Immediate" 10276 `#NUMBER' 10277 10278 "Address Register" 10279 `NUMBER,X', `NUMBER,Y' 10280 10281 The NUMBER may be omitted in which case 0 is assumed. 10282 10283 "Direct Addressing mode" 10284 `*SYMBOL', or `*DIGITS' 10285 10286 "Absolute" 10287 `SYMBOL', or `DIGITS' 10288 10289 The M68HC12 has other more complex addressing modes. All of them are 10290 supported and they are represented below: 10291 10292 "Constant Offset Indexed Addressing Mode" 10293 `NUMBER,REG' 10294 10295 The NUMBER may be omitted in which case 0 is assumed. The 10296 register can be either `X', `Y', `SP' or `PC'. The assembler will 10297 use the smaller post-byte definition according to the constant 10298 value (5-bit constant offset, 9-bit constant offset or 16-bit 10299 constant offset). If the constant is not known by the assembler 10300 it will use the 16-bit constant offset post-byte and the value 10301 will be resolved at link time. 10302 10303 "Offset Indexed Indirect" 10304 `[NUMBER,REG]' 10305 10306 The register can be either `X', `Y', `SP' or `PC'. 10307 10308 "Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement" 10309 `NUMBER,-REG' `NUMBER,+REG' `NUMBER,REG-' `NUMBER,REG+' 10310 10311 The number must be in the range `-8'..`+8' and must not be 0. The 10312 register can be either `X', `Y', `SP' or `PC'. 10313 10314 "Accumulator Offset" 10315 `ACC,REG' 10316 10317 The accumulator register can be either `A', `B' or `D'. The 10318 register can be either `X', `Y', `SP' or `PC'. 10319 10320 "Accumulator D offset indexed-indirect" 10321 `[D,REG]' 10322 10323 The register can be either `X', `Y', `SP' or `PC'. 10324 10325 10326 For example: 10327 10328 ldab 1024,sp 10329 ldd [10,x] 10330 orab 3,+x 10331 stab -2,y- 10332 ldx a,pc 10333 sty [d,sp] 10334 10335 10336 File: as.info, Node: M68HC11-Modifiers, Next: M68HC11-Directives, Prev: M68HC11-Syntax, Up: M68HC11-Dependent 10337 10338 8.19.3 Symbolic Operand Modifiers 10339 --------------------------------- 10340 10341 The assembler supports several modifiers when using symbol addresses in 10342 68HC11 and 68HC12 instruction operands. The general syntax is the 10343 following: 10344 10345 %modifier(symbol) 10346 10347 `%addr' 10348 This modifier indicates to the assembler and linker to use the 10349 16-bit physical address corresponding to the symbol. This is 10350 intended to be used on memory window systems to map a symbol in 10351 the memory bank window. If the symbol is in a memory expansion 10352 part, the physical address corresponds to the symbol address 10353 within the memory bank window. If the symbol is not in a memory 10354 expansion part, this is the symbol address (using or not using the 10355 %addr modifier has no effect in that case). 10356 10357 `%page' 10358 This modifier indicates to use the memory page number corresponding 10359 to the symbol. If the symbol is in a memory expansion part, its 10360 page number is computed by the linker as a number used to map the 10361 page containing the symbol in the memory bank window. If the 10362 symbol is not in a memory expansion part, the page number is 0. 10363 10364 `%hi' 10365 This modifier indicates to use the 8-bit high part of the physical 10366 address of the symbol. 10367 10368 `%lo' 10369 This modifier indicates to use the 8-bit low part of the physical 10370 address of the symbol. 10371 10372 10373 For example a 68HC12 call to a function `foo_example' stored in 10374 memory expansion part could be written as follows: 10375 10376 call %addr(foo_example),%page(foo_example) 10377 10378 and this is equivalent to 10379 10380 call foo_example 10381 10382 And for 68HC11 it could be written as follows: 10383 10384 ldab #%page(foo_example) 10385 stab _page_switch 10386 jsr %addr(foo_example) 10387 10388 10389 File: as.info, Node: M68HC11-Directives, Next: M68HC11-Float, Prev: M68HC11-Modifiers, Up: M68HC11-Dependent 10390 10391 8.19.4 Assembler Directives 10392 --------------------------- 10393 10394 The 68HC11 and 68HC12 version of `as' have the following specific 10395 assembler directives: 10396 10397 `.relax' 10398 The relax directive is used by the `GNU Compiler' to emit a 10399 specific relocation to mark a group of instructions for linker 10400 relaxation. The sequence of instructions within the group must be 10401 known to the linker so that relaxation can be performed. 10402 10403 `.mode [mshort|mlong|mshort-double|mlong-double]' 10404 This directive specifies the ABI. It overrides the `-mshort', 10405 `-mlong', `-mshort-double' and `-mlong-double' options. 10406 10407 `.far SYMBOL' 10408 This directive marks the symbol as a `far' symbol meaning that it 10409 uses a `call/rtc' calling convention as opposed to `jsr/rts'. 10410 During a final link, the linker will identify references to the 10411 `far' symbol and will verify the proper calling convention. 10412 10413 `.interrupt SYMBOL' 10414 This directive marks the symbol as an interrupt entry point. This 10415 information is then used by the debugger to correctly unwind the 10416 frame across interrupts. 10417 10418 `.xrefb SYMBOL' 10419 This directive is defined for compatibility with the 10420 `Specification for Motorola 8 and 16-Bit Assembly Language Input 10421 Standard' and is ignored. 10422 10423 10424 10425 File: as.info, Node: M68HC11-Float, Next: M68HC11-opcodes, Prev: M68HC11-Directives, Up: M68HC11-Dependent 10426 10427 8.19.5 Floating Point 10428 --------------------- 10429 10430 Packed decimal (P) format floating literals are not supported. Feel 10431 free to add the code! 10432 10433 The floating point formats generated by directives are these. 10434 10435 `.float' 10436 `Single' precision floating point constants. 10437 10438 `.double' 10439 `Double' precision floating point constants. 10440 10441 `.extend' 10442 `.ldouble' 10443 `Extended' precision (`long double') floating point constants. 10444 10445 10446 File: as.info, Node: M68HC11-opcodes, Prev: M68HC11-Float, Up: M68HC11-Dependent 10447 10448 8.19.6 Opcodes 10449 -------------- 10450 10451 * Menu: 10452 10453 * M68HC11-Branch:: Branch Improvement 10454 10455 10456 File: as.info, Node: M68HC11-Branch, Up: M68HC11-opcodes 10457 10458 8.19.6.1 Branch Improvement 10459 ........................... 10460 10461 Certain pseudo opcodes are permitted for branch instructions. They 10462 expand to the shortest branch instruction that reach the target. 10463 Generally these mnemonics are made by prepending `j' to the start of 10464 Motorola mnemonic. These pseudo opcodes are not affected by the 10465 `--short-branchs' or `--force-long-branchs' options. 10466 10467 The following table summarizes the pseudo-operations. 10468 10469 Displacement Width 10470 +-------------------------------------------------------------+ 10471 | Options | 10472 | --short-branchs --force-long-branchs | 10473 +--------------------------+----------------------------------+ 10474 Op |BYTE WORD | BYTE WORD | 10475 +--------------------------+----------------------------------+ 10476 bsr | bsr <pc-rel> <error> | jsr <abs> | 10477 bra | bra <pc-rel> <error> | jmp <abs> | 10478 jbsr | bsr <pc-rel> jsr <abs> | bsr <pc-rel> jsr <abs> | 10479 jbra | bra <pc-rel> jmp <abs> | bra <pc-rel> jmp <abs> | 10480 bXX | bXX <pc-rel> <error> | bNX +3; jmp <abs> | 10481 jbXX | bXX <pc-rel> bNX +3; | bXX <pc-rel> bNX +3; jmp <abs> | 10482 | jmp <abs> | | 10483 +--------------------------+----------------------------------+ 10484 XX: condition 10485 NX: negative of condition XX 10486 10487 `jbsr' 10488 `jbra' 10489 These are the simplest jump pseudo-operations; they always map to 10490 one particular machine instruction, depending on the displacement 10491 to the branch target. 10492 10493 `jbXX' 10494 Here, `jbXX' stands for an entire family of pseudo-operations, 10495 where XX is a conditional branch or condition-code test. The full 10496 list of pseudo-ops in this family is: 10497 jbcc jbeq jbge jbgt jbhi jbvs jbpl jblo 10498 jbcs jbne jblt jble jbls jbvc jbmi 10499 10500 For the cases of non-PC relative displacements and long 10501 displacements, `as' issues a longer code fragment in terms of NX, 10502 the opposite condition to XX. For example, for the non-PC 10503 relative case: 10504 jbXX foo 10505 gives 10506 bNXs oof 10507 jmp foo 10508 oof: 10509 10510 10511 10512 File: as.info, Node: MIPS-Dependent, Next: MMIX-Dependent, Prev: M68HC11-Dependent, Up: Machine Dependencies 10513 10514 8.20 MIPS Dependent Features 10515 ============================ 10516 10517 GNU `as' for MIPS architectures supports several different MIPS 10518 processors, and MIPS ISA levels I through V, MIPS32, and MIPS64. For 10519 information about the MIPS instruction set, see `MIPS RISC 10520 Architecture', by Kane and Heindrich (Prentice-Hall). For an overview 10521 of MIPS assembly conventions, see "Appendix D: Assembly Language 10522 Programming" in the same work. 10523 10524 * Menu: 10525 10526 * MIPS Opts:: Assembler options 10527 * MIPS Object:: ECOFF object code 10528 * MIPS Stabs:: Directives for debugging information 10529 * MIPS ISA:: Directives to override the ISA level 10530 * MIPS symbol sizes:: Directives to override the size of symbols 10531 * MIPS autoextend:: Directives for extending MIPS 16 bit instructions 10532 * MIPS insn:: Directive to mark data as an instruction 10533 * MIPS option stack:: Directives to save and restore options 10534 * MIPS ASE instruction generation overrides:: Directives to control 10535 generation of MIPS ASE instructions 10536 10537 10538 File: as.info, Node: MIPS Opts, Next: MIPS Object, Up: MIPS-Dependent 10539 10540 8.20.1 Assembler options 10541 ------------------------ 10542 10543 The MIPS configurations of GNU `as' support these special options: 10544 10545 `-G NUM' 10546 This option sets the largest size of an object that can be 10547 referenced implicitly with the `gp' register. It is only accepted 10548 for targets that use ECOFF format. The default value is 8. 10549 10550 `-EB' 10551 `-EL' 10552 Any MIPS configuration of `as' can select big-endian or 10553 little-endian output at run time (unlike the other GNU development 10554 tools, which must be configured for one or the other). Use `-EB' 10555 to select big-endian output, and `-EL' for little-endian. 10556 10557 `-mips1' 10558 `-mips2' 10559 `-mips3' 10560 `-mips4' 10561 `-mips5' 10562 `-mips32' 10563 `-mips32r2' 10564 `-mips64' 10565 `-mips64r2' 10566 Generate code for a particular MIPS Instruction Set Architecture 10567 level. `-mips1' corresponds to the R2000 and R3000 processors, 10568 `-mips2' to the R6000 processor, `-mips3' to the R4000 processor, 10569 and `-mips4' to the R8000 and R10000 processors. `-mips5', 10570 `-mips32', `-mips32r2', `-mips64', and `-mips64r2' correspond to 10571 generic MIPS V, MIPS32, MIPS32 RELEASE 2, MIPS64, and MIPS64 10572 RELEASE 2 ISA processors, respectively. You can also switch 10573 instruction sets during the assembly; see *Note Directives to 10574 override the ISA level: MIPS ISA. 10575 10576 `-mgp32' 10577 `-mfp32' 10578 Some macros have different expansions for 32-bit and 64-bit 10579 registers. The register sizes are normally inferred from the ISA 10580 and ABI, but these flags force a certain group of registers to be 10581 treated as 32 bits wide at all times. `-mgp32' controls the size 10582 of general-purpose registers and `-mfp32' controls the size of 10583 floating-point registers. 10584 10585 On some MIPS variants there is a 32-bit mode flag; when this flag 10586 is set, 64-bit instructions generate a trap. Also, some 32-bit 10587 OSes only save the 32-bit registers on a context switch, so it is 10588 essential never to use the 64-bit registers. 10589 10590 `-mgp64' 10591 Assume that 64-bit general purpose registers are available. This 10592 is provided in the interests of symmetry with -gp32. 10593 10594 `-mips16' 10595 `-no-mips16' 10596 Generate code for the MIPS 16 processor. This is equivalent to 10597 putting `.set mips16' at the start of the assembly file. 10598 `-no-mips16' turns off this option. 10599 10600 `-mips3d' 10601 `-no-mips3d' 10602 Generate code for the MIPS-3D Application Specific Extension. 10603 This tells the assembler to accept MIPS-3D instructions. 10604 `-no-mips3d' turns off this option. 10605 10606 `-mdmx' 10607 `-no-mdmx' 10608 Generate code for the MDMX Application Specific Extension. This 10609 tells the assembler to accept MDMX instructions. `-no-mdmx' turns 10610 off this option. 10611 10612 `-mdsp' 10613 `-mno-dsp' 10614 Generate code for the DSP Application Specific Extension. This 10615 tells the assembler to accept DSP instructions. `-mno-dsp' turns 10616 off this option. 10617 10618 `-mmt' 10619 `-mno-mt' 10620 Generate code for the MT Application Specific Extension. This 10621 tells the assembler to accept MT instructions. `-mno-mt' turns 10622 off this option. 10623 10624 `-mfix7000' 10625 `-mno-fix7000' 10626 Cause nops to be inserted if the read of the destination register 10627 of an mfhi or mflo instruction occurs in the following two 10628 instructions. 10629 10630 `-mfix-vr4120' 10631 `-no-mfix-vr4120' 10632 Insert nops to work around certain VR4120 errata. This option is 10633 intended to be used on GCC-generated code: it is not designed to 10634 catch all problems in hand-written assembler code. 10635 10636 `-mfix-vr4130' 10637 `-no-mfix-vr4130' 10638 Insert nops to work around the VR4130 `mflo'/`mfhi' errata. 10639 10640 `-m4010' 10641 `-no-m4010' 10642 Generate code for the LSI R4010 chip. This tells the assembler to 10643 accept the R4010 specific instructions (`addciu', `ffc', etc.), 10644 and to not schedule `nop' instructions around accesses to the `HI' 10645 and `LO' registers. `-no-m4010' turns off this option. 10646 10647 `-m4650' 10648 `-no-m4650' 10649 Generate code for the MIPS R4650 chip. This tells the assembler 10650 to accept the `mad' and `madu' instruction, and to not schedule 10651 `nop' instructions around accesses to the `HI' and `LO' registers. 10652 `-no-m4650' turns off this option. 10653 10654 `-m3900' 10655 `-no-m3900' 10656 `-m4100' 10657 `-no-m4100' 10658 For each option `-mNNNN', generate code for the MIPS RNNNN chip. 10659 This tells the assembler to accept instructions specific to that 10660 chip, and to schedule for that chip's hazards. 10661 10662 `-march=CPU' 10663 Generate code for a particular MIPS cpu. It is exactly equivalent 10664 to `-mCPU', except that there are more value of CPU understood. 10665 Valid CPU value are: 10666 10667 2000, 3000, 3900, 4000, 4010, 4100, 4111, vr4120, vr4130, 10668 vr4181, 4300, 4400, 4600, 4650, 5000, rm5200, rm5230, rm5231, 10669 rm5261, rm5721, vr5400, vr5500, 6000, rm7000, 8000, rm9000, 10670 10000, 12000, mips32-4k, sb1 10671 10672 `-mtune=CPU' 10673 Schedule and tune for a particular MIPS cpu. Valid CPU values are 10674 identical to `-march=CPU'. 10675 10676 `-mabi=ABI' 10677 Record which ABI the source code uses. The recognized arguments 10678 are: `32', `n32', `o64', `64' and `eabi'. 10679 10680 `-msym32' 10681 `-mno-sym32' 10682 Equivalent to adding `.set sym32' or `.set nosym32' to the 10683 beginning of the assembler input. *Note MIPS symbol sizes::. 10684 10685 `-nocpp' 10686 This option is ignored. It is accepted for command-line 10687 compatibility with other assemblers, which use it to turn off C 10688 style preprocessing. With GNU `as', there is no need for 10689 `-nocpp', because the GNU assembler itself never runs the C 10690 preprocessor. 10691 10692 `--construct-floats' 10693 `--no-construct-floats' 10694 The `--no-construct-floats' option disables the construction of 10695 double width floating point constants by loading the two halves of 10696 the value into the two single width floating point registers that 10697 make up the double width register. This feature is useful if the 10698 processor support the FR bit in its status register, and this bit 10699 is known (by the programmer) to be set. This bit prevents the 10700 aliasing of the double width register by the single width 10701 registers. 10702 10703 By default `--construct-floats' is selected, allowing construction 10704 of these floating point constants. 10705 10706 `--trap' 10707 `--no-break' 10708 `as' automatically macro expands certain division and 10709 multiplication instructions to check for overflow and division by 10710 zero. This option causes `as' to generate code to take a trap 10711 exception rather than a break exception when an error is detected. 10712 The trap instructions are only supported at Instruction Set 10713 Architecture level 2 and higher. 10714 10715 `--break' 10716 `--no-trap' 10717 Generate code to take a break exception rather than a trap 10718 exception when an error is detected. This is the default. 10719 10720 `-mpdr' 10721 `-mno-pdr' 10722 Control generation of `.pdr' sections. Off by default on IRIX, on 10723 elsewhere. 10724 10725 `-mshared' 10726 `-mno-shared' 10727 When generating code using the Unix calling conventions (selected 10728 by `-KPIC' or `-mcall_shared'), gas will normally generate code 10729 which can go into a shared library. The `-mno-shared' option 10730 tells gas to generate code which uses the calling convention, but 10731 can not go into a shared library. The resulting code is slightly 10732 more efficient. This option only affects the handling of the 10733 `.cpload' and `.cpsetup' pseudo-ops. 10734 10735 10736 File: as.info, Node: MIPS Object, Next: MIPS Stabs, Prev: MIPS Opts, Up: MIPS-Dependent 10737 10738 8.20.2 MIPS ECOFF object code 10739 ----------------------------- 10740 10741 Assembling for a MIPS ECOFF target supports some additional sections 10742 besides the usual `.text', `.data' and `.bss'. The additional sections 10743 are `.rdata', used for read-only data, `.sdata', used for small data, 10744 and `.sbss', used for small common objects. 10745 10746 When assembling for ECOFF, the assembler uses the `$gp' (`$28') 10747 register to form the address of a "small object". Any object in the 10748 `.sdata' or `.sbss' sections is considered "small" in this sense. For 10749 external objects, or for objects in the `.bss' section, you can use the 10750 `gcc' `-G' option to control the size of objects addressed via `$gp'; 10751 the default value is 8, meaning that a reference to any object eight 10752 bytes or smaller uses `$gp'. Passing `-G 0' to `as' prevents it from 10753 using the `$gp' register on the basis of object size (but the assembler 10754 uses `$gp' for objects in `.sdata' or `sbss' in any case). The size of 10755 an object in the `.bss' section is set by the `.comm' or `.lcomm' 10756 directive that defines it. The size of an external object may be set 10757 with the `.extern' directive. For example, `.extern sym,4' declares 10758 that the object at `sym' is 4 bytes in length, whie leaving `sym' 10759 otherwise undefined. 10760 10761 Using small ECOFF objects requires linker support, and assumes that 10762 the `$gp' register is correctly initialized (normally done 10763 automatically by the startup code). MIPS ECOFF assembly code must not 10764 modify the `$gp' register. 10765 10766 10767 File: as.info, Node: MIPS Stabs, Next: MIPS ISA, Prev: MIPS Object, Up: MIPS-Dependent 10768 10769 8.20.3 Directives for debugging information 10770 ------------------------------------------- 10771 10772 MIPS ECOFF `as' supports several directives used for generating 10773 debugging information which are not support by traditional MIPS 10774 assemblers. These are `.def', `.endef', `.dim', `.file', `.scl', 10775 `.size', `.tag', `.type', `.val', `.stabd', `.stabn', and `.stabs'. 10776 The debugging information generated by the three `.stab' directives can 10777 only be read by GDB, not by traditional MIPS debuggers (this 10778 enhancement is required to fully support C++ debugging). These 10779 directives are primarily used by compilers, not assembly language 10780 programmers! 10781 10782 10783 File: as.info, Node: MIPS symbol sizes, Next: MIPS autoextend, Prev: MIPS ISA, Up: MIPS-Dependent 10784 10785 8.20.4 Directives to override the size of symbols 10786 ------------------------------------------------- 10787 10788 The n64 ABI allows symbols to have any 64-bit value. Although this 10789 provides a great deal of flexibility, it means that some macros have 10790 much longer expansions than their 32-bit counterparts. For example, 10791 the non-PIC expansion of `dla $4,sym' is usually: 10792 10793 lui $4,%highest(sym) 10794 lui $1,%hi(sym) 10795 daddiu $4,$4,%higher(sym) 10796 daddiu $1,$1,%lo(sym) 10797 dsll32 $4,$4,0 10798 daddu $4,$4,$1 10799 10800 whereas the 32-bit expansion is simply: 10801 10802 lui $4,%hi(sym) 10803 daddiu $4,$4,%lo(sym) 10804 10805 n64 code is sometimes constructed in such a way that all symbolic 10806 constants are known to have 32-bit values, and in such cases, it's 10807 preferable to use the 32-bit expansion instead of the 64-bit expansion. 10808 10809 You can use the `.set sym32' directive to tell the assembler that, 10810 from this point on, all expressions of the form `SYMBOL' or `SYMBOL + 10811 OFFSET' have 32-bit values. For example: 10812 10813 .set sym32 10814 dla $4,sym 10815 lw $4,sym+16 10816 sw $4,sym+0x8000($4) 10817 10818 will cause the assembler to treat `sym', `sym+16' and `sym+0x8000' 10819 as 32-bit values. The handling of non-symbolic addresses is not 10820 affected. 10821 10822 The directive `.set nosym32' ends a `.set sym32' block and reverts 10823 to the normal behavior. It is also possible to change the symbol size 10824 using the command-line options `-msym32' and `-mno-sym32'. 10825 10826 These options and directives are always accepted, but at present, 10827 they have no effect for anything other than n64. 10828 10829 10830 File: as.info, Node: MIPS ISA, Next: MIPS symbol sizes, Prev: MIPS Stabs, Up: MIPS-Dependent 10831 10832 8.20.5 Directives to override the ISA level 10833 ------------------------------------------- 10834 10835 GNU `as' supports an additional directive to change the MIPS 10836 Instruction Set Architecture level on the fly: `.set mipsN'. N should 10837 be a number from 0 to 5, or 32, 32r2, 64 or 64r2. The values other 10838 than 0 make the assembler accept instructions for the corresponding ISA 10839 level, from that point on in the assembly. `.set mipsN' affects not 10840 only which instructions are permitted, but also how certain macros are 10841 expanded. `.set mips0' restores the ISA level to its original level: 10842 either the level you selected with command line options, or the default 10843 for your configuration. You can use this feature to permit specific 10844 R4000 instructions while assembling in 32 bit mode. Use this directive 10845 with care! 10846 10847 The directive `.set mips16' puts the assembler into MIPS 16 mode, in 10848 which it will assemble instructions for the MIPS 16 processor. Use 10849 `.set nomips16' to return to normal 32 bit mode. 10850 10851 Traditional MIPS assemblers do not support this directive. 10852 10853 10854 File: as.info, Node: MIPS autoextend, Next: MIPS insn, Prev: MIPS symbol sizes, Up: MIPS-Dependent 10855 10856 8.20.6 Directives for extending MIPS 16 bit instructions 10857 -------------------------------------------------------- 10858 10859 By default, MIPS 16 instructions are automatically extended to 32 bits 10860 when necessary. The directive `.set noautoextend' will turn this off. 10861 When `.set noautoextend' is in effect, any 32 bit instruction must be 10862 explicitly extended with the `.e' modifier (e.g., `li.e $4,1000'). The 10863 directive `.set autoextend' may be used to once again automatically 10864 extend instructions when necessary. 10865 10866 This directive is only meaningful when in MIPS 16 mode. Traditional 10867 MIPS assemblers do not support this directive. 10868 10869 10870 File: as.info, Node: MIPS insn, Next: MIPS option stack, Prev: MIPS autoextend, Up: MIPS-Dependent 10871 10872 8.20.7 Directive to mark data as an instruction 10873 ----------------------------------------------- 10874 10875 The `.insn' directive tells `as' that the following data is actually 10876 instructions. This makes a difference in MIPS 16 mode: when loading 10877 the address of a label which precedes instructions, `as' automatically 10878 adds 1 to the value, so that jumping to the loaded address will do the 10879 right thing. 10880 10881 10882 File: as.info, Node: MIPS option stack, Next: MIPS ASE instruction generation overrides, Prev: MIPS insn, Up: MIPS-Dependent 10883 10884 8.20.8 Directives to save and restore options 10885 --------------------------------------------- 10886 10887 The directives `.set push' and `.set pop' may be used to save and 10888 restore the current settings for all the options which are controlled 10889 by `.set'. The `.set push' directive saves the current settings on a 10890 stack. The `.set pop' directive pops the stack and restores the 10891 settings. 10892 10893 These directives can be useful inside an macro which must change an 10894 option such as the ISA level or instruction reordering but does not want 10895 to change the state of the code which invoked the macro. 10896 10897 Traditional MIPS assemblers do not support these directives. 10898 10899 10900 File: as.info, Node: MIPS ASE instruction generation overrides, Prev: MIPS option stack, Up: MIPS-Dependent 10901 10902 8.20.9 Directives to control generation of MIPS ASE instructions 10903 ---------------------------------------------------------------- 10904 10905 The directive `.set mips3d' makes the assembler accept instructions 10906 from the MIPS-3D Application Specific Extension from that point on in 10907 the assembly. The `.set nomips3d' directive prevents MIPS-3D 10908 instructions from being accepted. 10909 10910 The directive `.set mdmx' makes the assembler accept instructions 10911 from the MDMX Application Specific Extension from that point on in the 10912 assembly. The `.set nomdmx' directive prevents MDMX instructions from 10913 being accepted. 10914 10915 The directive `.set dsp' makes the assembler accept instructions 10916 from the DSP Application Specific Extension from that point on in the 10917 assembly. The `.set nodsp' directive prevents DSP instructions from 10918 being accepted. 10919 10920 The directive `.set mt' makes the assembler accept instructions from 10921 the MT Application Specific Extension from that point on in the 10922 assembly. The `.set nomt' directive prevents MT instructions from 10923 being accepted. 10924 10925 Traditional MIPS assemblers do not support these directives. 10926 10927 10928 File: as.info, Node: MMIX-Dependent, Next: MSP430-Dependent, Prev: MIPS-Dependent, Up: Machine Dependencies 10929 10930 8.21 MMIX Dependent Features 10931 ============================ 10932 10933 * Menu: 10934 10935 * MMIX-Opts:: Command-line Options 10936 * MMIX-Expand:: Instruction expansion 10937 * MMIX-Syntax:: Syntax 10938 * MMIX-mmixal:: Differences to `mmixal' syntax and semantics 10939 10940 10941 File: as.info, Node: MMIX-Opts, Next: MMIX-Expand, Up: MMIX-Dependent 10942 10943 8.21.1 Command-line Options 10944 --------------------------- 10945 10946 The MMIX version of `as' has some machine-dependent options. 10947 10948 When `--fixed-special-register-names' is specified, only the register 10949 names specified in *Note MMIX-Regs:: are recognized in the instructions 10950 `PUT' and `GET'. 10951 10952 You can use the `--globalize-symbols' to make all symbols global. 10953 This option is useful when splitting up a `mmixal' program into several 10954 files. 10955 10956 The `--gnu-syntax' turns off most syntax compatibility with 10957 `mmixal'. Its usability is currently doubtful. 10958 10959 The `--relax' option is not fully supported, but will eventually make 10960 the object file prepared for linker relaxation. 10961 10962 If you want to avoid inadvertently calling a predefined symbol and 10963 would rather get an error, for example when using `as' with a compiler 10964 or other machine-generated code, specify `--no-predefined-syms'. This 10965 turns off built-in predefined definitions of all such symbols, 10966 including rounding-mode symbols, segment symbols, `BIT' symbols, and 10967 `TRAP' symbols used in `mmix' "system calls". It also turns off 10968 predefined special-register names, except when used in `PUT' and `GET' 10969 instructions. 10970 10971 By default, some instructions are expanded to fit the size of the 10972 operand or an external symbol (*note MMIX-Expand::). By passing 10973 `--no-expand', no such expansion will be done, instead causing errors 10974 at link time if the operand does not fit. 10975 10976 The `mmixal' documentation (*note mmixsite::) specifies that global 10977 registers allocated with the `GREG' directive (*note MMIX-greg::) and 10978 initialized to the same non-zero value, will refer to the same global 10979 register. This isn't strictly enforceable in `as' since the final 10980 addresses aren't known until link-time, but it will do an effort unless 10981 the `--no-merge-gregs' option is specified. (Register merging isn't 10982 yet implemented in `ld'.) 10983 10984 `as' will warn every time it expands an instruction to fit an 10985 operand unless the option `-x' is specified. It is believed that this 10986 behaviour is more useful than just mimicking `mmixal''s behaviour, in 10987 which instructions are only expanded if the `-x' option is specified, 10988 and assembly fails otherwise, when an instruction needs to be expanded. 10989 It needs to be kept in mind that `mmixal' is both an assembler and 10990 linker, while `as' will expand instructions that at link stage can be 10991 contracted. (Though linker relaxation isn't yet implemented in `ld'.) 10992 The option `-x' also imples `--linker-allocated-gregs'. 10993 10994 If instruction expansion is enabled, `as' can expand a `PUSHJ' 10995 instruction into a series of instructions. The shortest expansion is 10996 to not expand it, but just mark the call as redirectable to a stub, 10997 which `ld' creates at link-time, but only if the original `PUSHJ' 10998 instruction is found not to reach the target. The stub consists of the 10999 necessary instructions to form a jump to the target. This happens if 11000 `as' can assert that the `PUSHJ' instruction can reach such a stub. 11001 The option `--no-pushj-stubs' disables this shorter expansion, and the 11002 longer series of instructions is then created at assembly-time. The 11003 option `--no-stubs' is a synonym, intended for compatibility with 11004 future releases, where generation of stubs for other instructions may 11005 be implemented. 11006 11007 Usually a two-operand-expression (*note GREG-base::) without a 11008 matching `GREG' directive is treated as an error by `as'. When the 11009 option `--linker-allocated-gregs' is in effect, they are instead passed 11010 through to the linker, which will allocate as many global registers as 11011 is needed. 11012 11013 11014 File: as.info, Node: MMIX-Expand, Next: MMIX-Syntax, Prev: MMIX-Opts, Up: MMIX-Dependent 11015 11016 8.21.2 Instruction expansion 11017 ---------------------------- 11018 11019 When `as' encounters an instruction with an operand that is either not 11020 known or does not fit the operand size of the instruction, `as' (and 11021 `ld') will expand the instruction into a sequence of instructions 11022 semantically equivalent to the operand fitting the instruction. 11023 Expansion will take place for the following instructions: 11024 11025 `GETA' 11026 Expands to a sequence of four instructions: `SETL', `INCML', 11027 `INCMH' and `INCH'. The operand must be a multiple of four. 11028 11029 Conditional branches 11030 A branch instruction is turned into a branch with the complemented 11031 condition and prediction bit over five instructions; four 11032 instructions setting `$255' to the operand value, which like with 11033 `GETA' must be a multiple of four, and a final `GO $255,$255,0'. 11034 11035 `PUSHJ' 11036 Similar to expansion for conditional branches; four instructions 11037 set `$255' to the operand value, followed by a `PUSHGO 11038 $255,$255,0'. 11039 11040 `JMP' 11041 Similar to conditional branches and `PUSHJ'. The final instruction 11042 is `GO $255,$255,0'. 11043 11044 The linker `ld' is expected to shrink these expansions for code 11045 assembled with `--relax' (though not currently implemented). 11046 11047 11048 File: as.info, Node: MMIX-Syntax, Next: MMIX-mmixal, Prev: MMIX-Expand, Up: MMIX-Dependent 11049 11050 8.21.3 Syntax 11051 ------------- 11052 11053 The assembly syntax is supposed to be upward compatible with that 11054 described in Sections 1.3 and 1.4 of `The Art of Computer Programming, 11055 Volume 1'. Draft versions of those chapters as well as other MMIX 11056 information is located at 11057 `http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html'. Most code 11058 examples from the mmixal package located there should work unmodified 11059 when assembled and linked as single files, with a few noteworthy 11060 exceptions (*note MMIX-mmixal::). 11061 11062 Before an instruction is emitted, the current location is aligned to 11063 the next four-byte boundary. If a label is defined at the beginning of 11064 the line, its value will be the aligned value. 11065 11066 In addition to the traditional hex-prefix `0x', a hexadecimal number 11067 can also be specified by the prefix character `#'. 11068 11069 After all operands to an MMIX instruction or directive have been 11070 specified, the rest of the line is ignored, treated as a comment. 11071 11072 * Menu: 11073 11074 * MMIX-Chars:: Special Characters 11075 * MMIX-Symbols:: Symbols 11076 * MMIX-Regs:: Register Names 11077 * MMIX-Pseudos:: Assembler Directives 11078 11079 11080 File: as.info, Node: MMIX-Chars, Next: MMIX-Symbols, Up: MMIX-Syntax 11081 11082 8.21.3.1 Special Characters 11083 ........................... 11084 11085 The characters `*' and `#' are line comment characters; each start a 11086 comment at the beginning of a line, but only at the beginning of a 11087 line. A `#' prefixes a hexadecimal number if found elsewhere on a line. 11088 11089 Two other characters, `%' and `!', each start a comment anywhere on 11090 the line. Thus you can't use the `modulus' and `not' operators in 11091 expressions normally associated with these two characters. 11092 11093 A `;' is a line separator, treated as a new-line, so separate 11094 instructions can be specified on a single line. 11095 11096 11097 File: as.info, Node: MMIX-Symbols, Next: MMIX-Regs, Prev: MMIX-Chars, Up: MMIX-Syntax 11098 11099 8.21.3.2 Symbols 11100 ................ 11101 11102 The character `:' is permitted in identifiers. There are two 11103 exceptions to it being treated as any other symbol character: if a 11104 symbol begins with `:', it means that the symbol is in the global 11105 namespace and that the current prefix should not be prepended to that 11106 symbol (*note MMIX-prefix::). The `:' is then not considered part of 11107 the symbol. For a symbol in the label position (first on a line), a `:' 11108 at the end of a symbol is silently stripped off. A label is permitted, 11109 but not required, to be followed by a `:', as with many other assembly 11110 formats. 11111 11112 The character `@' in an expression, is a synonym for `.', the 11113 current location. 11114 11115 In addition to the common forward and backward local symbol formats 11116 (*note Symbol Names::), they can be specified with upper-case `B' and 11117 `F', as in `8B' and `9F'. A local label defined for the current 11118 position is written with a `H' appended to the number: 11119 3H LDB $0,$1,2 11120 This and traditional local-label formats cannot be mixed: a label 11121 must be defined and referred to using the same format. 11122 11123 There's a minor caveat: just as for the ordinary local symbols, the 11124 local symbols are translated into ordinary symbols using control 11125 characters are to hide the ordinal number of the symbol. 11126 Unfortunately, these symbols are not translated back in error messages. 11127 Thus you may see confusing error messages when local symbols are used. 11128 Control characters `\003' (control-C) and `\004' (control-D) are used 11129 for the MMIX-specific local-symbol syntax. 11130 11131 The symbol `Main' is handled specially; it is always global. 11132 11133 By defining the symbols `__.MMIX.start..text' and 11134 `__.MMIX.start..data', the address of respectively the `.text' and 11135 `.data' segments of the final program can be defined, though when 11136 linking more than one object file, the code or data in the object file 11137 containing the symbol is not guaranteed to be start at that position; 11138 just the final executable. *Note MMIX-loc::. 11139 11140 11141 File: as.info, Node: MMIX-Regs, Next: MMIX-Pseudos, Prev: MMIX-Symbols, Up: MMIX-Syntax 11142 11143 8.21.3.3 Register names 11144 ....................... 11145 11146 Local and global registers are specified as `$0' to `$255'. The 11147 recognized special register names are `rJ', `rA', `rB', `rC', `rD', 11148 `rE', `rF', `rG', `rH', `rI', `rK', `rL', `rM', `rN', `rO', `rP', `rQ', 11149 `rR', `rS', `rT', `rU', `rV', `rW', `rX', `rY', `rZ', `rBB', `rTT', 11150 `rWW', `rXX', `rYY' and `rZZ'. A leading `:' is optional for special 11151 register names. 11152 11153 Local and global symbols can be equated to register names and used in 11154 place of ordinary registers. 11155 11156 Similarly for special registers, local and global symbols can be 11157 used. Also, symbols equated from numbers and constant expressions are 11158 allowed in place of a special register, except when either of the 11159 options `--no-predefined-syms' and `--fixed-special-register-names' are 11160 specified. Then only the special register names above are allowed for 11161 the instructions having a special register operand; `GET' and `PUT'. 11162 11163 11164 File: as.info, Node: MMIX-Pseudos, Prev: MMIX-Regs, Up: MMIX-Syntax 11165 11166 8.21.3.4 Assembler Directives 11167 ............................. 11168 11169 `LOC' 11170 The `LOC' directive sets the current location to the value of the 11171 operand field, which may include changing sections. If the 11172 operand is a constant, the section is set to either `.data' if the 11173 value is `0x2000000000000000' or larger, else it is set to `.text'. 11174 Within a section, the current location may only be changed to 11175 monotonically higher addresses. A LOC expression must be a 11176 previously defined symbol or a "pure" constant. 11177 11178 An example, which sets the label PREV to the current location, and 11179 updates the current location to eight bytes forward: 11180 prev LOC @+8 11181 11182 When a LOC has a constant as its operand, a symbol 11183 `__.MMIX.start..text' or `__.MMIX.start..data' is defined 11184 depending on the address as mentioned above. Each such symbol is 11185 interpreted as special by the linker, locating the section at that 11186 address. Note that if multiple files are linked, the first object 11187 file with that section will be mapped to that address (not 11188 necessarily the file with the LOC definition). 11189 11190 `LOCAL' 11191 Example: 11192 LOCAL external_symbol 11193 LOCAL 42 11194 .local asymbol 11195 11196 This directive-operation generates a link-time assertion that the 11197 operand does not correspond to a global register. The operand is 11198 an expression that at link-time resolves to a register symbol or a 11199 number. A number is treated as the register having that number. 11200 There is one restriction on the use of this directive: the 11201 pseudo-directive must be placed in a section with contents, code 11202 or data. 11203 11204 `IS' 11205 The `IS' directive: 11206 asymbol IS an_expression 11207 sets the symbol `asymbol' to `an_expression'. A symbol may not be 11208 set more than once using this directive. Local labels may be set 11209 using this directive, for example: 11210 5H IS @+4 11211 11212 `GREG' 11213 This directive reserves a global register, gives it an initial 11214 value and optionally gives it a symbolic name. Some examples: 11215 11216 areg GREG 11217 breg GREG data_value 11218 GREG data_buffer 11219 .greg creg, another_data_value 11220 11221 The symbolic register name can be used in place of a (non-special) 11222 register. If a value isn't provided, it defaults to zero. Unless 11223 the option `--no-merge-gregs' is specified, non-zero registers 11224 allocated with this directive may be eliminated by `as'; another 11225 register with the same value used in its place. Any of the 11226 instructions `CSWAP', `GO', `LDA', `LDBU', `LDB', `LDHT', `LDOU', 11227 `LDO', `LDSF', `LDTU', `LDT', `LDUNC', `LDVTS', `LDWU', `LDW', 11228 `PREGO', `PRELD', `PREST', `PUSHGO', `STBU', `STB', `STCO', `STHT', 11229 `STOU', `STSF', `STTU', `STT', `STUNC', `SYNCD', `SYNCID', can 11230 have a value nearby an initial value in place of its second and 11231 third operands. Here, "nearby" is defined as within the range 11232 0...255 from the initial value of such an allocated register. 11233 11234 buffer1 BYTE 0,0,0,0,0 11235 buffer2 BYTE 0,0,0,0,0 11236 ... 11237 GREG buffer1 11238 LDOU $42,buffer2 11239 In the example above, the `Y' field of the `LDOUI' instruction 11240 (LDOU with a constant Z) will be replaced with the global register 11241 allocated for `buffer1', and the `Z' field will have the value 5, 11242 the offset from `buffer1' to `buffer2'. The result is equivalent 11243 to this code: 11244 buffer1 BYTE 0,0,0,0,0 11245 buffer2 BYTE 0,0,0,0,0 11246 ... 11247 tmpreg GREG buffer1 11248 LDOU $42,tmpreg,(buffer2-buffer1) 11249 11250 Global registers allocated with this directive are allocated in 11251 order higher-to-lower within a file. Other than that, the exact 11252 order of register allocation and elimination is undefined. For 11253 example, the order is undefined when more than one file with such 11254 directives are linked together. With the options `-x' and 11255 `--linker-allocated-gregs', `GREG' directives for two-operand 11256 cases like the one mentioned above can be omitted. Sufficient 11257 global registers will then be allocated by the linker. 11258 11259 `BYTE' 11260 The `BYTE' directive takes a series of operands separated by a 11261 comma. If an operand is a string (*note Strings::), each 11262 character of that string is emitted as a byte. Other operands 11263 must be constant expressions without forward references, in the 11264 range 0...255. If you need operands having expressions with 11265 forward references, use `.byte' (*note Byte::). An operand can be 11266 omitted, defaulting to a zero value. 11267 11268 `WYDE' 11269 `TETRA' 11270 `OCTA' 11271 The directives `WYDE', `TETRA' and `OCTA' emit constants of two, 11272 four and eight bytes size respectively. Before anything else 11273 happens for the directive, the current location is aligned to the 11274 respective constant-size boundary. If a label is defined at the 11275 beginning of the line, its value will be that after the alignment. 11276 A single operand can be omitted, defaulting to a zero value 11277 emitted for the directive. Operands can be expressed as strings 11278 (*note Strings::), in which case each character in the string is 11279 emitted as a separate constant of the size indicated by the 11280 directive. 11281 11282 `PREFIX' 11283 The `PREFIX' directive sets a symbol name prefix to be prepended to 11284 all symbols (except local symbols, *note MMIX-Symbols::), that are 11285 not prefixed with `:', until the next `PREFIX' directive. Such 11286 prefixes accumulate. For example, 11287 PREFIX a 11288 PREFIX b 11289 c IS 0 11290 defines a symbol `abc' with the value 0. 11291 11292 `BSPEC' 11293 `ESPEC' 11294 A pair of `BSPEC' and `ESPEC' directives delimit a section of 11295 special contents (without specified semantics). Example: 11296 BSPEC 42 11297 TETRA 1,2,3 11298 ESPEC 11299 The single operand to `BSPEC' must be number in the range 0...255. 11300 The `BSPEC' number 80 is used by the GNU binutils implementation. 11301 11302 11303 File: as.info, Node: MMIX-mmixal, Prev: MMIX-Syntax, Up: MMIX-Dependent 11304 11305 8.21.4 Differences to `mmixal' 11306 ------------------------------ 11307 11308 The binutils `as' and `ld' combination has a few differences in 11309 function compared to `mmixal' (*note mmixsite::). 11310 11311 The replacement of a symbol with a GREG-allocated register (*note 11312 GREG-base::) is not handled the exactly same way in `as' as in 11313 `mmixal'. This is apparent in the `mmixal' example file `inout.mms', 11314 where different registers with different offsets, eventually yielding 11315 the same address, are used in the first instruction. This type of 11316 difference should however not affect the function of any program unless 11317 it has specific assumptions about the allocated register number. 11318 11319 Line numbers (in the `mmo' object format) are currently not 11320 supported. 11321 11322 Expression operator precedence is not that of mmixal: operator 11323 precedence is that of the C programming language. It's recommended to 11324 use parentheses to explicitly specify wanted operator precedence 11325 whenever more than one type of operators are used. 11326 11327 The serialize unary operator `&', the fractional division operator 11328 `//', the logical not operator `!' and the modulus operator `%' are not 11329 available. 11330 11331 Symbols are not global by default, unless the option 11332 `--globalize-symbols' is passed. Use the `.global' directive to 11333 globalize symbols (*note Global::). 11334 11335 Operand syntax is a bit stricter with `as' than `mmixal'. For 11336 example, you can't say `addu 1,2,3', instead you must write `addu 11337 $1,$2,3'. 11338 11339 You can't LOC to a lower address than those already visited (i.e. 11340 "backwards"). 11341 11342 A LOC directive must come before any emitted code. 11343 11344 Predefined symbols are visible as file-local symbols after use. (In 11345 the ELF file, that is--the linked mmo file has no notion of a file-local 11346 symbol.) 11347 11348 Some mapping of constant expressions to sections in LOC expressions 11349 is attempted, but that functionality is easily confused and should be 11350 avoided unless compatibility with `mmixal' is required. A LOC 11351 expression to `0x2000000000000000' or higher, maps to the `.data' 11352 section and lower addresses map to the `.text' section (*note 11353 MMIX-loc::). 11354 11355 The code and data areas are each contiguous. Sparse programs with 11356 far-away LOC directives will take up the same amount of space as a 11357 contiguous program with zeros filled in the gaps between the LOC 11358 directives. If you need sparse programs, you might try and get the 11359 wanted effect with a linker script and splitting up the code parts into 11360 sections (*note Section::). Assembly code for this, to be compatible 11361 with `mmixal', would look something like: 11362 .if 0 11363 LOC away_expression 11364 .else 11365 .section away,"ax" 11366 .fi 11367 `as' will not execute the LOC directive and `mmixal' ignores the 11368 lines with `.'. This construct can be used generally to help 11369 compatibility. 11370 11371 Symbols can't be defined twice-not even to the same value. 11372 11373 Instruction mnemonics are recognized case-insensitive, though the 11374 `IS' and `GREG' pseudo-operations must be specified in upper-case 11375 characters. 11376 11377 There's no unicode support. 11378 11379 The following is a list of programs in `mmix.tar.gz', available at 11380 `http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html', last 11381 checked with the version dated 2001-08-25 (md5sum 11382 c393470cfc86fac040487d22d2bf0172) that assemble with `mmixal' but do 11383 not assemble with `as': 11384 11385 `silly.mms' 11386 LOC to a previous address. 11387 11388 `sim.mms' 11389 Redefines symbol `Done'. 11390 11391 `test.mms' 11392 Uses the serial operator `&'. 11393 11394 11395 File: as.info, Node: MSP430-Dependent, Next: SH-Dependent, Prev: MMIX-Dependent, Up: Machine Dependencies 11396 11397 8.22 MSP 430 Dependent Features 11398 =============================== 11399 11400 * Menu: 11401 11402 * MSP430 Options:: Options 11403 * MSP430 Syntax:: Syntax 11404 * MSP430 Floating Point:: Floating Point 11405 * MSP430 Directives:: MSP 430 Machine Directives 11406 * MSP430 Opcodes:: Opcodes 11407 * MSP430 Profiling Capability:: Profiling Capability 11408 11409 11410 File: as.info, Node: MSP430 Options, Next: MSP430 Syntax, Up: MSP430-Dependent 11411 11412 8.22.1 Options 11413 -------------- 11414 11415 `-m' 11416 select the mpu arch. Currently has no effect. 11417 11418 `-mP' 11419 enables polymorph instructions handler. 11420 11421 `-mQ' 11422 enables relaxation at assembly time. DANGEROUS! 11423 11424 11425 11426 File: as.info, Node: MSP430 Syntax, Next: MSP430 Floating Point, Prev: MSP430 Options, Up: MSP430-Dependent 11427 11428 8.22.2 Syntax 11429 ------------- 11430 11431 * Menu: 11432 11433 * MSP430-Macros:: Macros 11434 * MSP430-Chars:: Special Characters 11435 * MSP430-Regs:: Register Names 11436 * MSP430-Ext:: Assembler Extensions 11437 11438 11439 File: as.info, Node: MSP430-Macros, Next: MSP430-Chars, Up: MSP430 Syntax 11440 11441 8.22.2.1 Macros 11442 ............... 11443 11444 The macro syntax used on the MSP 430 is like that described in the MSP 11445 430 Family Assembler Specification. Normal `as' macros should still 11446 work. 11447 11448 Additional built-in macros are: 11449 11450 `llo(exp)' 11451 Extracts least significant word from 32-bit expression 'exp'. 11452 11453 `lhi(exp)' 11454 Extracts most significant word from 32-bit expression 'exp'. 11455 11456 `hlo(exp)' 11457 Extracts 3rd word from 64-bit expression 'exp'. 11458 11459 `hhi(exp)' 11460 Extracts 4rd word from 64-bit expression 'exp'. 11461 11462 11463 They normally being used as an immediate source operand. 11464 mov #llo(1), r10 ; == mov #1, r10 11465 mov #lhi(1), r10 ; == mov #0, r10 11466 11467 11468 File: as.info, Node: MSP430-Chars, Next: MSP430-Regs, Prev: MSP430-Macros, Up: MSP430 Syntax 11469 11470 8.22.2.2 Special Characters 11471 ........................... 11472 11473 `;' is the line comment character. 11474 11475 The character `$' in jump instructions indicates current location and 11476 implemented only for TI syntax compatibility. 11477 11478 11479 File: as.info, Node: MSP430-Regs, Next: MSP430-Ext, Prev: MSP430-Chars, Up: MSP430 Syntax 11480 11481 8.22.2.3 Register Names 11482 ....................... 11483 11484 General-purpose registers are represented by predefined symbols of the 11485 form `rN' (for global registers), where N represents a number between 11486 `0' and `15'. The leading letters may be in either upper or lower 11487 case; for example, `r13' and `R7' are both valid register names. 11488 11489 Register names `PC', `SP' and `SR' cannot be used as register names 11490 and will be treated as variables. Use `r0', `r1', and `r2' instead. 11491 11492 11493 File: as.info, Node: MSP430-Ext, Prev: MSP430-Regs, Up: MSP430 Syntax 11494 11495 8.22.2.4 Assembler Extensions 11496 ............................. 11497 11498 `@rN' 11499 As destination operand being treated as `0(rn)' 11500 11501 `0(rN)' 11502 As source operand being treated as `@rn' 11503 11504 `jCOND +N' 11505 Skips next N bytes followed by jump instruction and equivalent to 11506 `jCOND $+N+2' 11507 11508 11509 Also, there are some instructions, which cannot be found in other 11510 assemblers. These are branch instructions, which has different opcodes 11511 upon jump distance. They all got PC relative addressing mode. 11512 11513 `beq label' 11514 A polymorph instruction which is `jeq label' in case if jump 11515 distance within allowed range for cpu's jump instruction. If not, 11516 this unrolls into a sequence of 11517 jne $+6 11518 br label 11519 11520 `bne label' 11521 A polymorph instruction which is `jne label' or `jeq +4; br label' 11522 11523 `blt label' 11524 A polymorph instruction which is `jl label' or `jge +4; br label' 11525 11526 `bltn label' 11527 A polymorph instruction which is `jn label' or `jn +2; jmp +4; br 11528 label' 11529 11530 `bltu label' 11531 A polymorph instruction which is `jlo label' or `jhs +2; br label' 11532 11533 `bge label' 11534 A polymorph instruction which is `jge label' or `jl +4; br label' 11535 11536 `bgeu label' 11537 A polymorph instruction which is `jhs label' or `jlo +4; br label' 11538 11539 `bgt label' 11540 A polymorph instruction which is `jeq +2; jge label' or `jeq +6; 11541 jl +4; br label' 11542 11543 `bgtu label' 11544 A polymorph instruction which is `jeq +2; jhs label' or `jeq +6; 11545 jlo +4; br label' 11546 11547 `bleu label' 11548 A polymorph instruction which is `jeq label; jlo label' or `jeq 11549 +2; jhs +4; br label' 11550 11551 `ble label' 11552 A polymorph instruction which is `jeq label; jl label' or `jeq 11553 +2; jge +4; br label' 11554 11555 `jump label' 11556 A polymorph instruction which is `jmp label' or `br label' 11557 11558 11559 File: as.info, Node: MSP430 Floating Point, Next: MSP430 Directives, Prev: MSP430 Syntax, Up: MSP430-Dependent 11560 11561 8.22.3 Floating Point 11562 --------------------- 11563 11564 The MSP 430 family uses IEEE 32-bit floating-point numbers. 11565 11566 11567 File: as.info, Node: MSP430 Directives, Next: MSP430 Opcodes, Prev: MSP430 Floating Point, Up: MSP430-Dependent 11568 11569 8.22.4 MSP 430 Machine Directives 11570 --------------------------------- 11571 11572 `.file' 11573 This directive is ignored; it is accepted for compatibility with 11574 other MSP 430 assemblers. 11575 11576 _Warning:_ in other versions of the GNU assembler, `.file' is 11577 used for the directive called `.app-file' in the MSP 430 11578 support. 11579 11580 `.line' 11581 This directive is ignored; it is accepted for compatibility with 11582 other MSP 430 assemblers. 11583 11584 `.arch' 11585 Currently this directive is ignored; it is accepted for 11586 compatibility with other MSP 430 assemblers. 11587 11588 `.profiler' 11589 This directive instructs assembler to add new profile entry to the 11590 object file. 11591 11592 11593 11594 File: as.info, Node: MSP430 Opcodes, Next: MSP430 Profiling Capability, Prev: MSP430 Directives, Up: MSP430-Dependent 11595 11596 8.22.5 Opcodes 11597 -------------- 11598 11599 `as' implements all the standard MSP 430 opcodes. No additional 11600 pseudo-instructions are needed on this family. 11601 11602 For information on the 430 machine instruction set, see `MSP430 11603 User's Manual, document slau049d', Texas Instrument, Inc. 11604 11605 11606 File: as.info, Node: MSP430 Profiling Capability, Prev: MSP430 Opcodes, Up: MSP430-Dependent 11607 11608 8.22.6 Profiling Capability 11609 --------------------------- 11610 11611 It is a performance hit to use gcc's profiling approach for this tiny 11612 target. Even more - jtag hardware facility does not perform any 11613 profiling functions. However we've got gdb's built-in simulator where 11614 we can do anything. 11615 11616 We define new section `.profiler' which holds all profiling 11617 information. We define new pseudo operation `.profiler' which will 11618 instruct assembler to add new profile entry to the object file. Profile 11619 should take place at the present address. 11620 11621 Pseudo operation format: 11622 11623 `.profiler flags,function_to_profile [, cycle_corrector, extra]' 11624 11625 where: 11626 11627 `flags' is a combination of the following characters: 11628 11629 `s' 11630 function entry 11631 11632 `x' 11633 function exit 11634 11635 `i' 11636 function is in init section 11637 11638 `f' 11639 function is in fini section 11640 11641 `l' 11642 library call 11643 11644 `c' 11645 libc standard call 11646 11647 `d' 11648 stack value demand 11649 11650 `I' 11651 interrupt service routine 11652 11653 `P' 11654 prologue start 11655 11656 `p' 11657 prologue end 11658 11659 `E' 11660 epilogue start 11661 11662 `e' 11663 epilogue end 11664 11665 `j' 11666 long jump / sjlj unwind 11667 11668 `a' 11669 an arbitrary code fragment 11670 11671 `t' 11672 extra parameter saved (a constant value like frame size) 11673 11674 `function_to_profile' 11675 a function address 11676 11677 `cycle_corrector' 11678 a value which should be added to the cycle counter, zero if 11679 omitted. 11680 11681 `extra' 11682 any extra parameter, zero if omitted. 11683 11684 11685 For example: 11686 .global fxx 11687 .type fxx,@function 11688 fxx: 11689 .LFrameOffset_fxx=0x08 11690 .profiler "scdP", fxx ; function entry. 11691 ; we also demand stack value to be saved 11692 push r11 11693 push r10 11694 push r9 11695 push r8 11696 .profiler "cdpt",fxx,0, .LFrameOffset_fxx ; check stack value at this point 11697 ; (this is a prologue end) 11698 ; note, that spare var filled with 11699 ; the farme size 11700 mov r15,r8 11701 ... 11702 .profiler cdE,fxx ; check stack 11703 pop r8 11704 pop r9 11705 pop r10 11706 pop r11 11707 .profiler xcde,fxx,3 ; exit adds 3 to the cycle counter 11708 ret ; cause 'ret' insn takes 3 cycles 11709 11710 11711 File: as.info, Node: PDP-11-Dependent, Next: PJ-Dependent, Prev: SH64-Dependent, Up: Machine Dependencies 11712 11713 8.23 PDP-11 Dependent Features 11714 ============================== 11715 11716 * Menu: 11717 11718 * PDP-11-Options:: Options 11719 * PDP-11-Pseudos:: Assembler Directives 11720 * PDP-11-Syntax:: DEC Syntax versus BSD Syntax 11721 * PDP-11-Mnemonics:: Instruction Naming 11722 * PDP-11-Synthetic:: Synthetic Instructions 11723 11724 11725 File: as.info, Node: PDP-11-Options, Next: PDP-11-Pseudos, Up: PDP-11-Dependent 11726 11727 8.23.1 Options 11728 -------------- 11729 11730 The PDP-11 version of `as' has a rich set of machine dependent options. 11731 11732 8.23.1.1 Code Generation Options 11733 ................................ 11734 11735 `-mpic | -mno-pic' 11736 Generate position-independent (or position-dependent) code. 11737 11738 The default is to generate position-independent code. 11739 11740 8.23.1.2 Instruction Set Extension Options 11741 .......................................... 11742 11743 These options enables or disables the use of extensions over the base 11744 line instruction set as introduced by the first PDP-11 CPU: the KA11. 11745 Most options come in two variants: a `-m'EXTENSION that enables 11746 EXTENSION, and a `-mno-'EXTENSION that disables EXTENSION. 11747 11748 The default is to enable all extensions. 11749 11750 `-mall | -mall-extensions' 11751 Enable all instruction set extensions. 11752 11753 `-mno-extensions' 11754 Disable all instruction set extensions. 11755 11756 `-mcis | -mno-cis' 11757 Enable (or disable) the use of the commercial instruction set, 11758 which consists of these instructions: `ADDNI', `ADDN', `ADDPI', 11759 `ADDP', `ASHNI', `ASHN', `ASHPI', `ASHP', `CMPCI', `CMPC', 11760 `CMPNI', `CMPN', `CMPPI', `CMPP', `CVTLNI', `CVTLN', `CVTLPI', 11761 `CVTLP', `CVTNLI', `CVTNL', `CVTNPI', `CVTNP', `CVTPLI', `CVTPL', 11762 `CVTPNI', `CVTPN', `DIVPI', `DIVP', `L2DR', `L3DR', `LOCCI', 11763 `LOCC', `MATCI', `MATC', `MOVCI', `MOVC', `MOVRCI', `MOVRC', 11764 `MOVTCI', `MOVTC', `MULPI', `MULP', `SCANCI', `SCANC', `SKPCI', 11765 `SKPC', `SPANCI', `SPANC', `SUBNI', `SUBN', `SUBPI', and `SUBP'. 11766 11767 `-mcsm | -mno-csm' 11768 Enable (or disable) the use of the `CSM' instruction. 11769 11770 `-meis | -mno-eis' 11771 Enable (or disable) the use of the extended instruction set, which 11772 consists of these instructions: `ASHC', `ASH', `DIV', `MARK', 11773 `MUL', `RTT', `SOB' `SXT', and `XOR'. 11774 11775 `-mfis | -mkev11' 11776 `-mno-fis | -mno-kev11' 11777 Enable (or disable) the use of the KEV11 floating-point 11778 instructions: `FADD', `FDIV', `FMUL', and `FSUB'. 11779 11780 `-mfpp | -mfpu | -mfp-11' 11781 `-mno-fpp | -mno-fpu | -mno-fp-11' 11782 Enable (or disable) the use of FP-11 floating-point instructions: 11783 `ABSF', `ADDF', `CFCC', `CLRF', `CMPF', `DIVF', `LDCFF', `LDCIF', 11784 `LDEXP', `LDF', `LDFPS', `MODF', `MULF', `NEGF', `SETD', `SETF', 11785 `SETI', `SETL', `STCFF', `STCFI', `STEXP', `STF', `STFPS', `STST', 11786 `SUBF', and `TSTF'. 11787 11788 `-mlimited-eis | -mno-limited-eis' 11789 Enable (or disable) the use of the limited extended instruction 11790 set: `MARK', `RTT', `SOB', `SXT', and `XOR'. 11791 11792 The -mno-limited-eis options also implies -mno-eis. 11793 11794 `-mmfpt | -mno-mfpt' 11795 Enable (or disable) the use of the `MFPT' instruction. 11796 11797 `-mmultiproc | -mno-multiproc' 11798 Enable (or disable) the use of multiprocessor instructions: 11799 `TSTSET' and `WRTLCK'. 11800 11801 `-mmxps | -mno-mxps' 11802 Enable (or disable) the use of the `MFPS' and `MTPS' instructions. 11803 11804 `-mspl | -mno-spl' 11805 Enable (or disable) the use of the `SPL' instruction. 11806 11807 Enable (or disable) the use of the microcode instructions: `LDUB', 11808 `MED', and `XFC'. 11809 11810 8.23.1.3 CPU Model Options 11811 .......................... 11812 11813 These options enable the instruction set extensions supported by a 11814 particular CPU, and disables all other extensions. 11815 11816 `-mka11' 11817 KA11 CPU. Base line instruction set only. 11818 11819 `-mkb11' 11820 KB11 CPU. Enable extended instruction set and `SPL'. 11821 11822 `-mkd11a' 11823 KD11-A CPU. Enable limited extended instruction set. 11824 11825 `-mkd11b' 11826 KD11-B CPU. Base line instruction set only. 11827 11828 `-mkd11d' 11829 KD11-D CPU. Base line instruction set only. 11830 11831 `-mkd11e' 11832 KD11-E CPU. Enable extended instruction set, `MFPS', and `MTPS'. 11833 11834 `-mkd11f | -mkd11h | -mkd11q' 11835 KD11-F, KD11-H, or KD11-Q CPU. Enable limited extended 11836 instruction set, `MFPS', and `MTPS'. 11837 11838 `-mkd11k' 11839 KD11-K CPU. Enable extended instruction set, `LDUB', `MED', 11840 `MFPS', `MFPT', `MTPS', and `XFC'. 11841 11842 `-mkd11z' 11843 KD11-Z CPU. Enable extended instruction set, `CSM', `MFPS', 11844 `MFPT', `MTPS', and `SPL'. 11845 11846 `-mf11' 11847 F11 CPU. Enable extended instruction set, `MFPS', `MFPT', and 11848 `MTPS'. 11849 11850 `-mj11' 11851 J11 CPU. Enable extended instruction set, `CSM', `MFPS', `MFPT', 11852 `MTPS', `SPL', `TSTSET', and `WRTLCK'. 11853 11854 `-mt11' 11855 T11 CPU. Enable limited extended instruction set, `MFPS', and 11856 `MTPS'. 11857 11858 8.23.1.4 Machine Model Options 11859 .............................. 11860 11861 These options enable the instruction set extensions supported by a 11862 particular machine model, and disables all other extensions. 11863 11864 `-m11/03' 11865 Same as `-mkd11f'. 11866 11867 `-m11/04' 11868 Same as `-mkd11d'. 11869 11870 `-m11/05 | -m11/10' 11871 Same as `-mkd11b'. 11872 11873 `-m11/15 | -m11/20' 11874 Same as `-mka11'. 11875 11876 `-m11/21' 11877 Same as `-mt11'. 11878 11879 `-m11/23 | -m11/24' 11880 Same as `-mf11'. 11881 11882 `-m11/34' 11883 Same as `-mkd11e'. 11884 11885 `-m11/34a' 11886 Ame as `-mkd11e' `-mfpp'. 11887 11888 `-m11/35 | -m11/40' 11889 Same as `-mkd11a'. 11890 11891 `-m11/44' 11892 Same as `-mkd11z'. 11893 11894 `-m11/45 | -m11/50 | -m11/55 | -m11/70' 11895 Same as `-mkb11'. 11896 11897 `-m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94' 11898 Same as `-mj11'. 11899 11900 `-m11/60' 11901 Same as `-mkd11k'. 11902 11903 11904 File: as.info, Node: PDP-11-Pseudos, Next: PDP-11-Syntax, Prev: PDP-11-Options, Up: PDP-11-Dependent 11905 11906 8.23.2 Assembler Directives 11907 --------------------------- 11908 11909 The PDP-11 version of `as' has a few machine dependent assembler 11910 directives. 11911 11912 `.bss' 11913 Switch to the `bss' section. 11914 11915 `.even' 11916 Align the location counter to an even number. 11917 11918 11919 File: as.info, Node: PDP-11-Syntax, Next: PDP-11-Mnemonics, Prev: PDP-11-Pseudos, Up: PDP-11-Dependent 11920 11921 8.23.3 PDP-11 Assembly Language Syntax 11922 -------------------------------------- 11923 11924 `as' supports both DEC syntax and BSD syntax. The only difference is 11925 that in DEC syntax, a `#' character is used to denote an immediate 11926 constants, while in BSD syntax the character for this purpose is `$'. 11927 11928 eneral-purpose registers are named `r0' through `r7'. Mnemonic 11929 alternatives for `r6' and `r7' are `sp' and `pc', respectively. 11930 11931 Floating-point registers are named `ac0' through `ac3', or 11932 alternatively `fr0' through `fr3'. 11933 11934 Comments are started with a `#' or a `/' character, and extend to 11935 the end of the line. (FIXME: clash with immediates?) 11936 11937 11938 File: as.info, Node: PDP-11-Mnemonics, Next: PDP-11-Synthetic, Prev: PDP-11-Syntax, Up: PDP-11-Dependent 11939 11940 8.23.4 Instruction Naming 11941 ------------------------- 11942 11943 Some instructions have alternative names. 11944 11945 `BCC' 11946 `BHIS' 11947 11948 `BCS' 11949 `BLO' 11950 11951 `L2DR' 11952 `L2D' 11953 11954 `L3DR' 11955 `L3D' 11956 11957 `SYS' 11958 `TRAP' 11959 11960 11961 File: as.info, Node: PDP-11-Synthetic, Prev: PDP-11-Mnemonics, Up: PDP-11-Dependent 11962 11963 8.23.5 Synthetic Instructions 11964 ----------------------------- 11965 11966 The `JBR' and `J'CC synthetic instructions are not supported yet. 11967 11968 11969 File: as.info, Node: PJ-Dependent, Next: PPC-Dependent, Prev: PDP-11-Dependent, Up: Machine Dependencies 11970 11971 8.24 picoJava Dependent Features 11972 ================================ 11973 11974 * Menu: 11975 11976 * PJ Options:: Options 11977 11978 11979 File: as.info, Node: PJ Options, Up: PJ-Dependent 11980 11981 8.24.1 Options 11982 -------------- 11983 11984 `as' has two additional command-line options for the picoJava 11985 architecture. 11986 `-ml' 11987 This option selects little endian data output. 11988 11989 `-mb' 11990 This option selects big endian data output. 11991 11992 11993 File: as.info, Node: PPC-Dependent, Next: Sparc-Dependent, Prev: PJ-Dependent, Up: Machine Dependencies 11994 11995 8.25 PowerPC Dependent Features 11996 =============================== 11997 11998 * Menu: 11999 12000 * PowerPC-Opts:: Options 12001 * PowerPC-Pseudo:: PowerPC Assembler Directives 12002 12003 12004 File: as.info, Node: PowerPC-Opts, Next: PowerPC-Pseudo, Up: PPC-Dependent 12005 12006 8.25.1 Options 12007 -------------- 12008 12009 The PowerPC chip family includes several successive levels, using the 12010 same core instruction set, but including a few additional instructions 12011 at each level. There are exceptions to this however. For details on 12012 what instructions each variant supports, please see the chip's 12013 architecture reference manual. 12014 12015 The following table lists all available PowerPC options. 12016 12017 `-mpwrx | -mpwr2' 12018 Generate code for POWER/2 (RIOS2). 12019 12020 `-mpwr' 12021 Generate code for POWER (RIOS1) 12022 12023 `-m601' 12024 Generate code for PowerPC 601. 12025 12026 `-mppc, -mppc32, -m603, -m604' 12027 Generate code for PowerPC 603/604. 12028 12029 `-m403, -m405' 12030 Generate code for PowerPC 403/405. 12031 12032 `-m440' 12033 Generate code for PowerPC 440. BookE and some 405 instructions. 12034 12035 `-m7400, -m7410, -m7450, -m7455' 12036 Generate code for PowerPC 7400/7410/7450/7455. 12037 12038 `-mppc64, -m620' 12039 Generate code for PowerPC 620/625/630. 12040 12041 `-mppc64bridge' 12042 Generate code for PowerPC 64, including bridge insns. 12043 12044 `-mbooke64' 12045 Generate code for 64-bit BookE. 12046 12047 `-mbooke, mbooke32' 12048 Generate code for 32-bit BookE. 12049 12050 `-me300' 12051 Generate code for PowerPC e300 family. 12052 12053 `-maltivec' 12054 Generate code for processors with AltiVec instructions. 12055 12056 `-mpower4' 12057 Generate code for Power4 architecture. 12058 12059 `-mpower5' 12060 Generate code for Power5 architecture. 12061 12062 `-mcom' 12063 Generate code Power/PowerPC common instructions. 12064 12065 `-many' 12066 Generate code for any architecture (PWR/PWRX/PPC). 12067 12068 `-mregnames' 12069 Allow symbolic names for registers. 12070 12071 `-mno-regnames' 12072 Do not allow symbolic names for registers. 12073 12074 `-mrelocatable' 12075 Support for GCC's -mrelocatble option. 12076 12077 `-mrelocatable-lib' 12078 Support for GCC's -mrelocatble-lib option. 12079 12080 `-memb' 12081 Set PPC_EMB bit in ELF flags. 12082 12083 `-mlittle, -mlittle-endian' 12084 Generate code for a little endian machine. 12085 12086 `-mbig, -mbig-endian' 12087 Generate code for a big endian machine. 12088 12089 `-msolaris' 12090 Generate code for Solaris. 12091 12092 `-mno-solaris' 12093 Do not generate code for Solaris. 12094 12095 12096 File: as.info, Node: PowerPC-Pseudo, Prev: PowerPC-Opts, Up: PPC-Dependent 12097 12098 8.25.2 PowerPC Assembler Directives 12099 ----------------------------------- 12100 12101 A number of assembler directives are available for PowerPC. The 12102 following table is far from complete. 12103 12104 `.machine "string"' 12105 This directive allows you to change the machine for which code is 12106 generated. `"string"' may be any of the -m cpu selection options 12107 (without the -m) enclosed in double quotes, `"push"', or `"pop"'. 12108 `.machine "push"' saves the currently selected cpu, which may be 12109 restored with `.machine "pop"'. 12110 12111 12112 File: as.info, Node: SH-Dependent, Next: SH64-Dependent, Prev: MSP430-Dependent, Up: Machine Dependencies 12113 12114 8.26 Renesas / SuperH SH Dependent Features 12115 =========================================== 12116 12117 * Menu: 12118 12119 * SH Options:: Options 12120 * SH Syntax:: Syntax 12121 * SH Floating Point:: Floating Point 12122 * SH Directives:: SH Machine Directives 12123 * SH Opcodes:: Opcodes 12124 12125 12126 File: as.info, Node: SH Options, Next: SH Syntax, Up: SH-Dependent 12127 12128 8.26.1 Options 12129 -------------- 12130 12131 `as' has following command-line options for the Renesas (formerly 12132 Hitachi) / SuperH SH family. 12133 12134 `--little' 12135 Generate little endian code. 12136 12137 `--big' 12138 Generate big endian code. 12139 12140 `--relax' 12141 Alter jump instructions for long displacements. 12142 12143 `--small' 12144 Align sections to 4 byte boundaries, not 16. 12145 12146 `--dsp' 12147 Enable sh-dsp insns, and disable sh3e / sh4 insns. 12148 12149 `--renesas' 12150 Disable optimization with section symbol for compatibility with 12151 Renesas assembler. 12152 12153 `--allow-reg-prefix' 12154 Allow '$' as a register name prefix. 12155 12156 `--isa=sh4 | sh4a' 12157 Specify the sh4 or sh4a instruction set. 12158 12159 `--isa=dsp' 12160 Enable sh-dsp insns, and disable sh3e / sh4 insns. 12161 12162 `--isa=fp' 12163 Enable sh2e, sh3e, sh4, and sh4a insn sets. 12164 12165 `--isa=all' 12166 Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets. 12167 12168 12169 12170 File: as.info, Node: SH Syntax, Next: SH Floating Point, Prev: SH Options, Up: SH-Dependent 12171 12172 8.26.2 Syntax 12173 ------------- 12174 12175 * Menu: 12176 12177 * SH-Chars:: Special Characters 12178 * SH-Regs:: Register Names 12179 * SH-Addressing:: Addressing Modes 12180 12181 12182 File: as.info, Node: SH-Chars, Next: SH-Regs, Up: SH Syntax 12183 12184 8.26.2.1 Special Characters 12185 ........................... 12186 12187 `!' is the line comment character. 12188 12189 You can use `;' instead of a newline to separate statements. 12190 12191 Since `$' has no special meaning, you may use it in symbol names. 12192 12193 12194 File: as.info, Node: SH-Regs, Next: SH-Addressing, Prev: SH-Chars, Up: SH Syntax 12195 12196 8.26.2.2 Register Names 12197 ....................... 12198 12199 You can use the predefined symbols `r0', `r1', `r2', `r3', `r4', `r5', 12200 `r6', `r7', `r8', `r9', `r10', `r11', `r12', `r13', `r14', and `r15' to 12201 refer to the SH registers. 12202 12203 The SH also has these control registers: 12204 12205 `pr' 12206 procedure register (holds return address) 12207 12208 `pc' 12209 program counter 12210 12211 `mach' 12212 `macl' 12213 high and low multiply accumulator registers 12214 12215 `sr' 12216 status register 12217 12218 `gbr' 12219 global base register 12220 12221 `vbr' 12222 vector base register (for interrupt vectors) 12223 12224 12225 File: as.info, Node: SH-Addressing, Prev: SH-Regs, Up: SH Syntax 12226 12227 8.26.2.3 Addressing Modes 12228 ......................... 12229 12230 `as' understands the following addressing modes for the SH. `RN' in 12231 the following refers to any of the numbered registers, but _not_ the 12232 control registers. 12233 12234 `RN' 12235 Register direct 12236 12237 `@RN' 12238 Register indirect 12239 12240 `@-RN' 12241 Register indirect with pre-decrement 12242 12243 `@RN+' 12244 Register indirect with post-increment 12245 12246 `@(DISP, RN)' 12247 Register indirect with displacement 12248 12249 `@(R0, RN)' 12250 Register indexed 12251 12252 `@(DISP, GBR)' 12253 `GBR' offset 12254 12255 `@(R0, GBR)' 12256 GBR indexed 12257 12258 `ADDR' 12259 `@(DISP, PC)' 12260 PC relative address (for branch or for addressing memory). The 12261 `as' implementation allows you to use the simpler form ADDR 12262 anywhere a PC relative address is called for; the alternate form 12263 is supported for compatibility with other assemblers. 12264 12265 `#IMM' 12266 Immediate data 12267 12268 12269 File: as.info, Node: SH Floating Point, Next: SH Directives, Prev: SH Syntax, Up: SH-Dependent 12270 12271 8.26.3 Floating Point 12272 --------------------- 12273 12274 SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other 12275 SH groups can use `.float' directive to generate IEEE floating-point 12276 numbers. 12277 12278 SH2E and SH3E support single-precision floating point calculations as 12279 well as entirely PCAPI compatible emulation of double-precision 12280 floating point calculations. SH2E and SH3E instructions are a subset of 12281 the floating point calculations conforming to the IEEE754 standard. 12282 12283 In addition to single-precision and double-precision floating-point 12284 operation capability, the on-chip FPU of SH4 has a 128-bit graphic 12285 engine that enables 32-bit floating-point data to be processed 128 bits 12286 at a time. It also supports 4 * 4 array operations and inner product 12287 operations. Also, a superscalar architecture is employed that enables 12288 simultaneous execution of two instructions (including FPU 12289 instructions), providing performance of up to twice that of 12290 conventional architectures at the same frequency. 12291 12292 12293 File: as.info, Node: SH Directives, Next: SH Opcodes, Prev: SH Floating Point, Up: SH-Dependent 12294 12295 8.26.4 SH Machine Directives 12296 ---------------------------- 12297 12298 `uaword' 12299 `ualong' 12300 `as' will issue a warning when a misaligned `.word' or `.long' 12301 directive is used. You may use `.uaword' or `.ualong' to indicate 12302 that the value is intentionally misaligned. 12303 12304 12305 File: as.info, Node: SH Opcodes, Prev: SH Directives, Up: SH-Dependent 12306 12307 8.26.5 Opcodes 12308 -------------- 12309 12310 For detailed information on the SH machine instruction set, see 12311 `SH-Microcomputer User's Manual' (Renesas) or `SH-4 32-bit CPU Core 12312 Architecture' (SuperH) and `SuperH (SH) 64-Bit RISC Series' (SuperH). 12313 12314 `as' implements all the standard SH opcodes. No additional 12315 pseudo-instructions are needed on this family. Note, however, that 12316 because `as' supports a simpler form of PC-relative addressing, you may 12317 simply write (for example) 12318 12319 mov.l bar,r0 12320 12321 where other assemblers might require an explicit displacement to `bar' 12322 from the program counter: 12323 12324 mov.l @(DISP, PC) 12325 12326 Here is a summary of SH opcodes: 12327 12328 Legend: 12329 Rn a numbered register 12330 Rm another numbered register 12331 #imm immediate data 12332 disp displacement 12333 disp8 8-bit displacement 12334 disp12 12-bit displacement 12335 12336 add #imm,Rn lds.l @Rn+,PR 12337 add Rm,Rn mac.w @Rm+,@Rn+ 12338 addc Rm,Rn mov #imm,Rn 12339 addv Rm,Rn mov Rm,Rn 12340 and #imm,R0 mov.b Rm,@(R0,Rn) 12341 and Rm,Rn mov.b Rm,@-Rn 12342 and.b #imm,@(R0,GBR) mov.b Rm,@Rn 12343 bf disp8 mov.b @(disp,Rm),R0 12344 bra disp12 mov.b @(disp,GBR),R0 12345 bsr disp12 mov.b @(R0,Rm),Rn 12346 bt disp8 mov.b @Rm+,Rn 12347 clrmac mov.b @Rm,Rn 12348 clrt mov.b R0,@(disp,Rm) 12349 cmp/eq #imm,R0 mov.b R0,@(disp,GBR) 12350 cmp/eq Rm,Rn mov.l Rm,@(disp,Rn) 12351 cmp/ge Rm,Rn mov.l Rm,@(R0,Rn) 12352 cmp/gt Rm,Rn mov.l Rm,@-Rn 12353 cmp/hi Rm,Rn mov.l Rm,@Rn 12354 cmp/hs Rm,Rn mov.l @(disp,Rn),Rm 12355 cmp/pl Rn mov.l @(disp,GBR),R0 12356 cmp/pz Rn mov.l @(disp,PC),Rn 12357 cmp/str Rm,Rn mov.l @(R0,Rm),Rn 12358 div0s Rm,Rn mov.l @Rm+,Rn 12359 div0u mov.l @Rm,Rn 12360 div1 Rm,Rn mov.l R0,@(disp,GBR) 12361 exts.b Rm,Rn mov.w Rm,@(R0,Rn) 12362 exts.w Rm,Rn mov.w Rm,@-Rn 12363 extu.b Rm,Rn mov.w Rm,@Rn 12364 extu.w Rm,Rn mov.w @(disp,Rm),R0 12365 jmp @Rn mov.w @(disp,GBR),R0 12366 jsr @Rn mov.w @(disp,PC),Rn 12367 ldc Rn,GBR mov.w @(R0,Rm),Rn 12368 ldc Rn,SR mov.w @Rm+,Rn 12369 ldc Rn,VBR mov.w @Rm,Rn 12370 ldc.l @Rn+,GBR mov.w R0,@(disp,Rm) 12371 ldc.l @Rn+,SR mov.w R0,@(disp,GBR) 12372 ldc.l @Rn+,VBR mova @(disp,PC),R0 12373 lds Rn,MACH movt Rn 12374 lds Rn,MACL muls Rm,Rn 12375 lds Rn,PR mulu Rm,Rn 12376 lds.l @Rn+,MACH neg Rm,Rn 12377 lds.l @Rn+,MACL negc Rm,Rn 12378 12379 nop stc VBR,Rn 12380 not Rm,Rn stc.l GBR,@-Rn 12381 or #imm,R0 stc.l SR,@-Rn 12382 or Rm,Rn stc.l VBR,@-Rn 12383 or.b #imm,@(R0,GBR) sts MACH,Rn 12384 rotcl Rn sts MACL,Rn 12385 rotcr Rn sts PR,Rn 12386 rotl Rn sts.l MACH,@-Rn 12387 rotr Rn sts.l MACL,@-Rn 12388 rte sts.l PR,@-Rn 12389 rts sub Rm,Rn 12390 sett subc Rm,Rn 12391 shal Rn subv Rm,Rn 12392 shar Rn swap.b Rm,Rn 12393 shll Rn swap.w Rm,Rn 12394 shll16 Rn tas.b @Rn 12395 shll2 Rn trapa #imm 12396 shll8 Rn tst #imm,R0 12397 shlr Rn tst Rm,Rn 12398 shlr16 Rn tst.b #imm,@(R0,GBR) 12399 shlr2 Rn xor #imm,R0 12400 shlr8 Rn xor Rm,Rn 12401 sleep xor.b #imm,@(R0,GBR) 12402 stc GBR,Rn xtrct Rm,Rn 12403 stc SR,Rn 12404 12405 12406 File: as.info, Node: SH64-Dependent, Next: PDP-11-Dependent, Prev: SH-Dependent, Up: Machine Dependencies 12407 12408 8.27 SuperH SH64 Dependent Features 12409 =================================== 12410 12411 * Menu: 12412 12413 * SH64 Options:: Options 12414 * SH64 Syntax:: Syntax 12415 * SH64 Directives:: SH64 Machine Directives 12416 * SH64 Opcodes:: Opcodes 12417 12418 12419 File: as.info, Node: SH64 Options, Next: SH64 Syntax, Up: SH64-Dependent 12420 12421 8.27.1 Options 12422 -------------- 12423 12424 `-isa=sh4 | sh4a' 12425 Specify the sh4 or sh4a instruction set. 12426 12427 `-isa=dsp' 12428 Enable sh-dsp insns, and disable sh3e / sh4 insns. 12429 12430 `-isa=fp' 12431 Enable sh2e, sh3e, sh4, and sh4a insn sets. 12432 12433 `-isa=all' 12434 Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets. 12435 12436 `-isa=shmedia | -isa=shcompact' 12437 Specify the default instruction set. `SHmedia' specifies the 12438 32-bit opcodes, and `SHcompact' specifies the 16-bit opcodes 12439 compatible with previous SH families. The default depends on the 12440 ABI selected; the default for the 64-bit ABI is SHmedia, and the 12441 default for the 32-bit ABI is SHcompact. If neither the ABI nor 12442 the ISA is specified, the default is 32-bit SHcompact. 12443 12444 Note that the `.mode' pseudo-op is not permitted if the ISA is not 12445 specified on the command line. 12446 12447 `-abi=32 | -abi=64' 12448 Specify the default ABI. If the ISA is specified and the ABI is 12449 not, the default ABI depends on the ISA, with SHmedia defaulting 12450 to 64-bit and SHcompact defaulting to 32-bit. 12451 12452 Note that the `.abi' pseudo-op is not permitted if the ABI is not 12453 specified on the command line. When the ABI is specified on the 12454 command line, any `.abi' pseudo-ops in the source must match it. 12455 12456 `-shcompact-const-crange' 12457 Emit code-range descriptors for constants in SHcompact code 12458 sections. 12459 12460 `-no-mix' 12461 Disallow SHmedia code in the same section as constants and 12462 SHcompact code. 12463 12464 `-no-expand' 12465 Do not expand MOVI, PT, PTA or PTB instructions. 12466 12467 `-expand-pt32' 12468 With -abi=64, expand PT, PTA and PTB instructions to 32 bits only. 12469 12470 12471 12472 File: as.info, Node: SH64 Syntax, Next: SH64 Directives, Prev: SH64 Options, Up: SH64-Dependent 12473 12474 8.27.2 Syntax 12475 ------------- 12476 12477 * Menu: 12478 12479 * SH64-Chars:: Special Characters 12480 * SH64-Regs:: Register Names 12481 * SH64-Addressing:: Addressing Modes 12482 12483 12484 File: as.info, Node: SH64-Chars, Next: SH64-Regs, Up: SH64 Syntax 12485 12486 8.27.2.1 Special Characters 12487 ........................... 12488 12489 `!' is the line comment character. 12490 12491 You can use `;' instead of a newline to separate statements. 12492 12493 Since `$' has no special meaning, you may use it in symbol names. 12494 12495 12496 File: as.info, Node: SH64-Regs, Next: SH64-Addressing, Prev: SH64-Chars, Up: SH64 Syntax 12497 12498 8.27.2.2 Register Names 12499 ....................... 12500 12501 You can use the predefined symbols `r0' through `r63' to refer to the 12502 SH64 general registers, `cr0' through `cr63' for control registers, 12503 `tr0' through `tr7' for target address registers, `fr0' through `fr63' 12504 for single-precision floating point registers, `dr0' through `dr62' 12505 (even numbered registers only) for double-precision floating point 12506 registers, `fv0' through `fv60' (multiples of four only) for 12507 single-precision floating point vectors, `fp0' through `fp62' (even 12508 numbered registers only) for single-precision floating point pairs, 12509 `mtrx0' through `mtrx48' (multiples of 16 only) for 4x4 matrices of 12510 single-precision floating point registers, `pc' for the program 12511 counter, and `fpscr' for the floating point status and control register. 12512 12513 You can also refer to the control registers by the mnemonics `sr', 12514 `ssr', `pssr', `intevt', `expevt', `pexpevt', `tra', `spc', `pspc', 12515 `resvec', `vbr', `tea', `dcr', `kcr0', `kcr1', `ctc', and `usr'. 12516 12517 12518 File: as.info, Node: SH64-Addressing, Prev: SH64-Regs, Up: SH64 Syntax 12519 12520 8.27.2.3 Addressing Modes 12521 ......................... 12522 12523 SH64 operands consist of either a register or immediate value. The 12524 immediate value can be a constant or label reference (or portion of a 12525 label reference), as in this example: 12526 12527 movi 4,r2 12528 pt function, tr4 12529 movi (function >> 16) & 65535,r0 12530 shori function & 65535, r0 12531 ld.l r0,4,r0 12532 12533 Instruction label references can reference labels in either SHmedia 12534 or SHcompact. To differentiate between the two, labels in SHmedia 12535 sections will always have the least significant bit set (i.e. they will 12536 be odd), which SHcompact labels will have the least significant bit 12537 reset (i.e. they will be even). If you need to reference the actual 12538 address of a label, you can use the `datalabel' modifier, as in this 12539 example: 12540 12541 .long function 12542 .long datalabel function 12543 12544 In that example, the first longword may or may not have the least 12545 significant bit set depending on whether the label is an SHmedia label 12546 or an SHcompact label. The second longword will be the actual address 12547 of the label, regardless of what type of label it is. 12548 12549 12550 File: as.info, Node: SH64 Directives, Next: SH64 Opcodes, Prev: SH64 Syntax, Up: SH64-Dependent 12551 12552 8.27.3 SH64 Machine Directives 12553 ------------------------------ 12554 12555 In addition to the SH directives, the SH64 provides the following 12556 directives: 12557 12558 `.mode [shmedia|shcompact]' 12559 `.isa [shmedia|shcompact]' 12560 Specify the ISA for the following instructions (the two directives 12561 are equivalent). Note that programs such as `objdump' rely on 12562 symbolic labels to determine when such mode switches occur (by 12563 checking the least significant bit of the label's address), so 12564 such mode/isa changes should always be followed by a label (in 12565 practice, this is true anyway). Note that you cannot use these 12566 directives if you didn't specify an ISA on the command line. 12567 12568 `.abi [32|64]' 12569 Specify the ABI for the following instructions. Note that you 12570 cannot use this directive unless you specified an ABI on the 12571 command line, and the ABIs specified must match. 12572 12573 `.uaquad' 12574 Like .uaword and .ualong, this allows you to specify an 12575 intentionally unaligned quadword (64 bit word). 12576 12577 12578 12579 File: as.info, Node: SH64 Opcodes, Prev: SH64 Directives, Up: SH64-Dependent 12580 12581 8.27.4 Opcodes 12582 -------------- 12583 12584 For detailed information on the SH64 machine instruction set, see 12585 `SuperH 64 bit RISC Series Architecture Manual' (SuperH, Inc.). 12586 12587 `as' implements all the standard SH64 opcodes. In addition, the 12588 following pseudo-opcodes may be expanded into one or more alternate 12589 opcodes: 12590 12591 `movi' 12592 If the value doesn't fit into a standard `movi' opcode, `as' will 12593 replace the `movi' with a sequence of `movi' and `shori' opcodes. 12594 12595 `pt' 12596 This expands to a sequence of `movi' and `shori' opcode, followed 12597 by a `ptrel' opcode, or to a `pta' or `ptb' opcode, depending on 12598 the label referenced. 12599 12600 12601 12602 File: as.info, Node: Sparc-Dependent, Next: TIC54X-Dependent, Prev: PPC-Dependent, Up: Machine Dependencies 12603 12604 8.28 SPARC Dependent Features 12605 ============================= 12606 12607 * Menu: 12608 12609 * Sparc-Opts:: Options 12610 * Sparc-Aligned-Data:: Option to enforce aligned data 12611 * Sparc-Float:: Floating Point 12612 * Sparc-Directives:: Sparc Machine Directives 12613 12614 12615 File: as.info, Node: Sparc-Opts, Next: Sparc-Aligned-Data, Up: Sparc-Dependent 12616 12617 8.28.1 Options 12618 -------------- 12619 12620 The SPARC chip family includes several successive levels, using the same 12621 core instruction set, but including a few additional instructions at 12622 each level. There are exceptions to this however. For details on what 12623 instructions each variant supports, please see the chip's architecture 12624 reference manual. 12625 12626 By default, `as' assumes the core instruction set (SPARC v6), but 12627 "bumps" the architecture level as needed: it switches to successively 12628 higher architectures as it encounters instructions that only exist in 12629 the higher levels. 12630 12631 If not configured for SPARC v9 (`sparc64-*-*') GAS will not bump 12632 passed sparclite by default, an option must be passed to enable the v9 12633 instructions. 12634 12635 GAS treats sparclite as being compatible with v8, unless an 12636 architecture is explicitly requested. SPARC v9 is always incompatible 12637 with sparclite. 12638 12639 `-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite' 12640 `-Av8plus | -Av8plusa | -Av9 | -Av9a' 12641 Use one of the `-A' options to select one of the SPARC 12642 architectures explicitly. If you select an architecture 12643 explicitly, `as' reports a fatal error if it encounters an 12644 instruction or feature requiring an incompatible or higher level. 12645 12646 `-Av8plus' and `-Av8plusa' select a 32 bit environment. 12647 12648 `-Av9' and `-Av9a' select a 64 bit environment and are not 12649 available unless GAS is explicitly configured with 64 bit 12650 environment support. 12651 12652 `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with 12653 UltraSPARC extensions. 12654 12655 `-xarch=v8plus | -xarch=v8plusa' 12656 For compatibility with the Solaris v9 assembler. These options are 12657 equivalent to -Av8plus and -Av8plusa, respectively. 12658 12659 `-bump' 12660 Warn whenever it is necessary to switch to another level. If an 12661 architecture level is explicitly requested, GAS will not issue 12662 warnings until that level is reached, and will then bump the level 12663 as required (except between incompatible levels). 12664 12665 `-32 | -64' 12666 Select the word size, either 32 bits or 64 bits. These options 12667 are only available with the ELF object file format, and require 12668 that the necessary BFD support has been included. 12669 12670 12671 File: as.info, Node: Sparc-Aligned-Data, Next: Sparc-Float, Prev: Sparc-Opts, Up: Sparc-Dependent 12672 12673 8.28.2 Enforcing aligned data 12674 ----------------------------- 12675 12676 SPARC GAS normally permits data to be misaligned. For example, it 12677 permits the `.long' pseudo-op to be used on a byte boundary. However, 12678 the native SunOS and Solaris assemblers issue an error when they see 12679 misaligned data. 12680 12681 You can use the `--enforce-aligned-data' option to make SPARC GAS 12682 also issue an error about misaligned data, just as the SunOS and Solaris 12683 assemblers do. 12684 12685 The `--enforce-aligned-data' option is not the default because gcc 12686 issues misaligned data pseudo-ops when it initializes certain packed 12687 data structures (structures defined using the `packed' attribute). You 12688 may have to assemble with GAS in order to initialize packed data 12689 structures in your own code. 12690 12691 12692 File: as.info, Node: Sparc-Float, Next: Sparc-Directives, Prev: Sparc-Aligned-Data, Up: Sparc-Dependent 12693 12694 8.28.3 Floating Point 12695 --------------------- 12696 12697 The Sparc uses IEEE floating-point numbers. 12698 12699 12700 File: as.info, Node: Sparc-Directives, Prev: Sparc-Float, Up: Sparc-Dependent 12701 12702 8.28.4 Sparc Machine Directives 12703 ------------------------------- 12704 12705 The Sparc version of `as' supports the following additional machine 12706 directives: 12707 12708 `.align' 12709 This must be followed by the desired alignment in bytes. 12710 12711 `.common' 12712 This must be followed by a symbol name, a positive number, and 12713 `"bss"'. This behaves somewhat like `.comm', but the syntax is 12714 different. 12715 12716 `.half' 12717 This is functionally identical to `.short'. 12718 12719 `.nword' 12720 On the Sparc, the `.nword' directive produces native word sized 12721 value, ie. if assembling with -32 it is equivalent to `.word', if 12722 assembling with -64 it is equivalent to `.xword'. 12723 12724 `.proc' 12725 This directive is ignored. Any text following it on the same line 12726 is also ignored. 12727 12728 `.register' 12729 This directive declares use of a global application or system 12730 register. It must be followed by a register name %g2, %g3, %g6 or 12731 %g7, comma and the symbol name for that register. If symbol name 12732 is `#scratch', it is a scratch register, if it is `#ignore', it 12733 just suppresses any errors about using undeclared global register, 12734 but does not emit any information about it into the object file. 12735 This can be useful e.g. if you save the register before use and 12736 restore it after. 12737 12738 `.reserve' 12739 This must be followed by a symbol name, a positive number, and 12740 `"bss"'. This behaves somewhat like `.lcomm', but the syntax is 12741 different. 12742 12743 `.seg' 12744 This must be followed by `"text"', `"data"', or `"data1"'. It 12745 behaves like `.text', `.data', or `.data 1'. 12746 12747 `.skip' 12748 This is functionally identical to the `.space' directive. 12749 12750 `.word' 12751 On the Sparc, the `.word' directive produces 32 bit values, 12752 instead of the 16 bit values it produces on many other machines. 12753 12754 `.xword' 12755 On the Sparc V9 processor, the `.xword' directive produces 64 bit 12756 values. 12757 12758 12759 File: as.info, Node: TIC54X-Dependent, Next: V850-Dependent, Prev: Sparc-Dependent, Up: Machine Dependencies 12760 12761 8.29 TIC54X Dependent Features 12762 ============================== 12763 12764 * Menu: 12765 12766 * TIC54X-Opts:: Command-line Options 12767 * TIC54X-Block:: Blocking 12768 * TIC54X-Env:: Environment Settings 12769 * TIC54X-Constants:: Constants Syntax 12770 * TIC54X-Subsyms:: String Substitution 12771 * TIC54X-Locals:: Local Label Syntax 12772 * TIC54X-Builtins:: Builtin Assembler Math Functions 12773 * TIC54X-Ext:: Extended Addressing Support 12774 * TIC54X-Directives:: Directives 12775 * TIC54X-Macros:: Macro Features 12776 * TIC54X-MMRegs:: Memory-mapped Registers 12777 12778 12779 File: as.info, Node: TIC54X-Opts, Next: TIC54X-Block, Up: TIC54X-Dependent 12780 12781 8.29.1 Options 12782 -------------- 12783 12784 The TMS320C54x version of `as' has a few machine-dependent options. 12785 12786 You can use the `-mfar-mode' option to enable extended addressing 12787 mode. All addresses will be assumed to be > 16 bits, and the 12788 appropriate relocation types will be used. This option is equivalent 12789 to using the `.far_mode' directive in the assembly code. If you do not 12790 use the `-mfar-mode' option, all references will be assumed to be 16 12791 bits. This option may be abbreviated to `-mf'. 12792 12793 You can use the `-mcpu' option to specify a particular CPU. This 12794 option is equivalent to using the `.version' directive in the assembly 12795 code. For recognized CPU codes, see *Note `.version': 12796 TIC54X-Directives. The default CPU version is `542'. 12797 12798 You can use the `-merrors-to-file' option to redirect error output 12799 to a file (this provided for those deficient environments which don't 12800 provide adequate output redirection). This option may be abbreviated to 12801 `-me'. 12802 12803 12804 File: as.info, Node: TIC54X-Block, Next: TIC54X-Env, Prev: TIC54X-Opts, Up: TIC54X-Dependent 12805 12806 8.29.2 Blocking 12807 --------------- 12808 12809 A blocked section or memory block is guaranteed not to cross the 12810 blocking boundary (usually a page, or 128 words) if it is smaller than 12811 the blocking size, or to start on a page boundary if it is larger than 12812 the blocking size. 12813 12814 12815 File: as.info, Node: TIC54X-Env, Next: TIC54X-Constants, Prev: TIC54X-Block, Up: TIC54X-Dependent 12816 12817 8.29.3 Environment Settings 12818 --------------------------- 12819 12820 `C54XDSP_DIR' and `A_DIR' are semicolon-separated paths which are added 12821 to the list of directories normally searched for source and include 12822 files. `C54XDSP_DIR' will override `A_DIR'. 12823 12824 12825 File: as.info, Node: TIC54X-Constants, Next: TIC54X-Subsyms, Prev: TIC54X-Env, Up: TIC54X-Dependent 12826 12827 8.29.4 Constants Syntax 12828 ----------------------- 12829 12830 The TIC54X version of `as' allows the following additional constant 12831 formats, using a suffix to indicate the radix: 12832 12833 Binary `000000B, 011000b' 12834 Octal `10Q, 224q' 12835 Hexadecimal `45h, 0FH' 12836 12837 12838 File: as.info, Node: TIC54X-Subsyms, Next: TIC54X-Locals, Prev: TIC54X-Constants, Up: TIC54X-Dependent 12839 12840 8.29.5 String Substitution 12841 -------------------------- 12842 12843 A subset of allowable symbols (which we'll call subsyms) may be assigned 12844 arbitrary string values. This is roughly equivalent to C preprocessor 12845 #define macros. When `as' encounters one of these symbols, the symbol 12846 is replaced in the input stream by its string value. Subsym names 12847 *must* begin with a letter. 12848 12849 Subsyms may be defined using the `.asg' and `.eval' directives 12850 (*Note `.asg': TIC54X-Directives, *Note `.eval': TIC54X-Directives. 12851 12852 Expansion is recursive until a previously encountered symbol is 12853 seen, at which point substitution stops. 12854 12855 In this example, x is replaced with SYM2; SYM2 is replaced with 12856 SYM1, and SYM1 is replaced with x. At this point, x has already been 12857 encountered and the substitution stops. 12858 12859 .asg "x",SYM1 12860 .asg "SYM1",SYM2 12861 .asg "SYM2",x 12862 add x,a ; final code assembled is "add x, a" 12863 12864 Macro parameters are converted to subsyms; a side effect of this is 12865 the normal `as' '\ARG' dereferencing syntax is unnecessary. Subsyms 12866 defined within a macro will have global scope, unless the `.var' 12867 directive is used to identify the subsym as a local macro variable 12868 *note `.var': TIC54X-Directives. 12869 12870 Substitution may be forced in situations where replacement might be 12871 ambiguous by placing colons on either side of the subsym. The following 12872 code: 12873 12874 .eval "10",x 12875 LAB:X: add #x, a 12876 12877 When assembled becomes: 12878 12879 LAB10 add #10, a 12880 12881 Smaller parts of the string assigned to a subsym may be accessed with 12882 the following syntax: 12883 12884 ``:SYMBOL(CHAR_INDEX):'' 12885 Evaluates to a single-character string, the character at 12886 CHAR_INDEX. 12887 12888 ``:SYMBOL(START,LENGTH):'' 12889 Evaluates to a substring of SYMBOL beginning at START with length 12890 LENGTH. 12891 12892 12893 File: as.info, Node: TIC54X-Locals, Next: TIC54X-Builtins, Prev: TIC54X-Subsyms, Up: TIC54X-Dependent 12894 12895 8.29.6 Local Labels 12896 ------------------- 12897 12898 Local labels may be defined in two ways: 12899 12900 * $N, where N is a decimal number between 0 and 9 12901 12902 * LABEL?, where LABEL is any legal symbol name. 12903 12904 Local labels thus defined may be redefined or automatically 12905 generated. The scope of a local label is based on when it may be 12906 undefined or reset. This happens when one of the following situations 12907 is encountered: 12908 12909 * .newblock directive *note `.newblock': TIC54X-Directives. 12910 12911 * The current section is changed (.sect, .text, or .data) 12912 12913 * Entering or leaving an included file 12914 12915 * The macro scope where the label was defined is exited 12916 12917 12918 File: as.info, Node: TIC54X-Builtins, Next: TIC54X-Ext, Prev: TIC54X-Locals, Up: TIC54X-Dependent 12919 12920 8.29.7 Math Builtins 12921 -------------------- 12922 12923 The following built-in functions may be used to generate a 12924 floating-point value. All return a floating-point value except `$cvi', 12925 `$int', and `$sgn', which return an integer value. 12926 12927 ``$acos(EXPR)'' 12928 Returns the floating point arccosine of EXPR. 12929 12930 ``$asin(EXPR)'' 12931 Returns the floating point arcsine of EXPR. 12932 12933 ``$atan(EXPR)'' 12934 Returns the floating point arctangent of EXPR. 12935 12936 ``$atan2(EXPR1,EXPR2)'' 12937 Returns the floating point arctangent of EXPR1 / EXPR2. 12938 12939 ``$ceil(EXPR)'' 12940 Returns the smallest integer not less than EXPR as floating point. 12941 12942 ``$cosh(EXPR)'' 12943 Returns the floating point hyperbolic cosine of EXPR. 12944 12945 ``$cos(EXPR)'' 12946 Returns the floating point cosine of EXPR. 12947 12948 ``$cvf(EXPR)'' 12949 Returns the integer value EXPR converted to floating-point. 12950 12951 ``$cvi(EXPR)'' 12952 Returns the floating point value EXPR converted to integer. 12953 12954 ``$exp(EXPR)'' 12955 Returns the floating point value e ^ EXPR. 12956 12957 ``$fabs(EXPR)'' 12958 Returns the floating point absolute value of EXPR. 12959 12960 ``$floor(EXPR)'' 12961 Returns the largest integer that is not greater than EXPR as 12962 floating point. 12963 12964 ``$fmod(EXPR1,EXPR2)'' 12965 Returns the floating point remainder of EXPR1 / EXPR2. 12966 12967 ``$int(EXPR)'' 12968 Returns 1 if EXPR evaluates to an integer, zero otherwise. 12969 12970 ``$ldexp(EXPR1,EXPR2)'' 12971 Returns the floating point value EXPR1 * 2 ^ EXPR2. 12972 12973 ``$log10(EXPR)'' 12974 Returns the base 10 logarithm of EXPR. 12975 12976 ``$log(EXPR)'' 12977 Returns the natural logarithm of EXPR. 12978 12979 ``$max(EXPR1,EXPR2)'' 12980 Returns the floating point maximum of EXPR1 and EXPR2. 12981 12982 ``$min(EXPR1,EXPR2)'' 12983 Returns the floating point minimum of EXPR1 and EXPR2. 12984 12985 ``$pow(EXPR1,EXPR2)'' 12986 Returns the floating point value EXPR1 ^ EXPR2. 12987 12988 ``$round(EXPR)'' 12989 Returns the nearest integer to EXPR as a floating point number. 12990 12991 ``$sgn(EXPR)'' 12992 Returns -1, 0, or 1 based on the sign of EXPR. 12993 12994 ``$sin(EXPR)'' 12995 Returns the floating point sine of EXPR. 12996 12997 ``$sinh(EXPR)'' 12998 Returns the floating point hyperbolic sine of EXPR. 12999 13000 ``$sqrt(EXPR)'' 13001 Returns the floating point square root of EXPR. 13002 13003 ``$tan(EXPR)'' 13004 Returns the floating point tangent of EXPR. 13005 13006 ``$tanh(EXPR)'' 13007 Returns the floating point hyperbolic tangent of EXPR. 13008 13009 ``$trunc(EXPR)'' 13010 Returns the integer value of EXPR truncated towards zero as 13011 floating point. 13012 13013 13014 13015 File: as.info, Node: TIC54X-Ext, Next: TIC54X-Directives, Prev: TIC54X-Builtins, Up: TIC54X-Dependent 13016 13017 8.29.8 Extended Addressing 13018 -------------------------- 13019 13020 The `LDX' pseudo-op is provided for loading the extended addressing bits 13021 of a label or address. For example, if an address `_label' resides in 13022 extended program memory, the value of `_label' may be loaded as follows: 13023 ldx #_label,16,a ; loads extended bits of _label 13024 or #_label,a ; loads lower 16 bits of _label 13025 bacc a ; full address is in accumulator A 13026 13027 13028 File: as.info, Node: TIC54X-Directives, Next: TIC54X-Macros, Prev: TIC54X-Ext, Up: TIC54X-Dependent 13029 13030 8.29.9 Directives 13031 ----------------- 13032 13033 `.align [SIZE]' 13034 `.even' 13035 Align the section program counter on the next boundary, based on 13036 SIZE. SIZE may be any power of 2. `.even' is equivalent to 13037 `.align' with a SIZE of 2. 13038 `1' 13039 Align SPC to word boundary 13040 13041 `2' 13042 Align SPC to longword boundary (same as .even) 13043 13044 `128' 13045 Align SPC to page boundary 13046 13047 `.asg STRING, NAME' 13048 Assign NAME the string STRING. String replacement is performed on 13049 STRING before assignment. 13050 13051 `.eval STRING, NAME' 13052 Evaluate the contents of string STRING and assign the result as a 13053 string to the subsym NAME. String replacement is performed on 13054 STRING before assignment. 13055 13056 `.bss SYMBOL, SIZE [, [BLOCKING_FLAG] [,ALIGNMENT_FLAG]]' 13057 Reserve space for SYMBOL in the .bss section. SIZE is in words. 13058 If present, BLOCKING_FLAG indicates the allocated space should be 13059 aligned on a page boundary if it would otherwise cross a page 13060 boundary. If present, ALIGNMENT_FLAG causes the assembler to 13061 allocate SIZE on a long word boundary. 13062 13063 `.byte VALUE [,...,VALUE_N]' 13064 `.ubyte VALUE [,...,VALUE_N]' 13065 `.char VALUE [,...,VALUE_N]' 13066 `.uchar VALUE [,...,VALUE_N]' 13067 Place one or more bytes into consecutive words of the current 13068 section. The upper 8 bits of each word is zero-filled. If a 13069 label is used, it points to the word allocated for the first byte 13070 encountered. 13071 13072 `.clink ["SECTION_NAME"]' 13073 Set STYP_CLINK flag for this section, which indicates to the 13074 linker that if no symbols from this section are referenced, the 13075 section should not be included in the link. If SECTION_NAME is 13076 omitted, the current section is used. 13077 13078 `.c_mode' 13079 TBD. 13080 13081 `.copy "FILENAME" | FILENAME' 13082 `.include "FILENAME" | FILENAME' 13083 Read source statements from FILENAME. The normal include search 13084 path is used. Normally .copy will cause statements from the 13085 included file to be printed in the assembly listing and .include 13086 will not, but this distinction is not currently implemented. 13087 13088 `.data' 13089 Begin assembling code into the .data section. 13090 13091 `.double VALUE [,...,VALUE_N]' 13092 `.ldouble VALUE [,...,VALUE_N]' 13093 `.float VALUE [,...,VALUE_N]' 13094 `.xfloat VALUE [,...,VALUE_N]' 13095 Place an IEEE single-precision floating-point representation of 13096 one or more floating-point values into the current section. All 13097 but `.xfloat' align the result on a longword boundary. Values are 13098 stored most-significant word first. 13099 13100 `.drlist' 13101 `.drnolist' 13102 Control printing of directives to the listing file. Ignored. 13103 13104 `.emsg STRING' 13105 `.mmsg STRING' 13106 `.wmsg STRING' 13107 Emit a user-defined error, message, or warning, respectively. 13108 13109 `.far_mode' 13110 Use extended addressing when assembling statements. This should 13111 appear only once per file, and is equivalent to the -mfar-mode 13112 option *note `-mfar-mode': TIC54X-Opts. 13113 13114 `.fclist' 13115 `.fcnolist' 13116 Control printing of false conditional blocks to the listing file. 13117 13118 `.field VALUE [,SIZE]' 13119 Initialize a bitfield of SIZE bits in the current section. If 13120 VALUE is relocatable, then SIZE must be 16. SIZE defaults to 16 13121 bits. If VALUE does not fit into SIZE bits, the value will be 13122 truncated. Successive `.field' directives will pack starting at 13123 the current word, filling the most significant bits first, and 13124 aligning to the start of the next word if the field size does not 13125 fit into the space remaining in the current word. A `.align' 13126 directive with an operand of 1 will force the next `.field' 13127 directive to begin packing into a new word. If a label is used, it 13128 points to the word that contains the specified field. 13129 13130 `.global SYMBOL [,...,SYMBOL_N]' 13131 `.def SYMBOL [,...,SYMBOL_N]' 13132 `.ref SYMBOL [,...,SYMBOL_N]' 13133 `.def' nominally identifies a symbol defined in the current file 13134 and availalbe to other files. `.ref' identifies a symbol used in 13135 the current file but defined elsewhere. Both map to the standard 13136 `.global' directive. 13137 13138 `.half VALUE [,...,VALUE_N]' 13139 `.uhalf VALUE [,...,VALUE_N]' 13140 `.short VALUE [,...,VALUE_N]' 13141 `.ushort VALUE [,...,VALUE_N]' 13142 `.int VALUE [,...,VALUE_N]' 13143 `.uint VALUE [,...,VALUE_N]' 13144 `.word VALUE [,...,VALUE_N]' 13145 `.uword VALUE [,...,VALUE_N]' 13146 Place one or more values into consecutive words of the current 13147 section. If a label is used, it points to the word allocated for 13148 the first value encountered. 13149 13150 `.label SYMBOL' 13151 Define a special SYMBOL to refer to the load time address of the 13152 current section program counter. 13153 13154 `.length' 13155 `.width' 13156 Set the page length and width of the output listing file. Ignored. 13157 13158 `.list' 13159 `.nolist' 13160 Control whether the source listing is printed. Ignored. 13161 13162 `.long VALUE [,...,VALUE_N]' 13163 `.ulong VALUE [,...,VALUE_N]' 13164 `.xlong VALUE [,...,VALUE_N]' 13165 Place one or more 32-bit values into consecutive words in the 13166 current section. The most significant word is stored first. 13167 `.long' and `.ulong' align the result on a longword boundary; 13168 `xlong' does not. 13169 13170 `.loop [COUNT]' 13171 `.break [CONDITION]' 13172 `.endloop' 13173 Repeatedly assemble a block of code. `.loop' begins the block, and 13174 `.endloop' marks its termination. COUNT defaults to 1024, and 13175 indicates the number of times the block should be repeated. 13176 `.break' terminates the loop so that assembly begins after the 13177 `.endloop' directive. The optional CONDITION will cause the loop 13178 to terminate only if it evaluates to zero. 13179 13180 `MACRO_NAME .macro [PARAM1][,...PARAM_N]' 13181 `[.mexit]' 13182 `.endm' 13183 See the section on macros for more explanation (*Note 13184 TIC54X-Macros::. 13185 13186 `.mlib "FILENAME" | FILENAME' 13187 Load the macro library FILENAME. FILENAME must be an archived 13188 library (BFD ar-compatible) of text files, expected to contain 13189 only macro definitions. The standard include search path is used. 13190 13191 `.mlist' 13192 13193 `.mnolist' 13194 Control whether to include macro and loop block expansions in the 13195 listing output. Ignored. 13196 13197 `.mmregs' 13198 Define global symbolic names for the 'c54x registers. Supposedly 13199 equivalent to executing `.set' directives for each register with 13200 its memory-mapped value, but in reality is provided only for 13201 compatibility and does nothing. 13202 13203 `.newblock' 13204 This directive resets any TIC54X local labels currently defined. 13205 Normal `as' local labels are unaffected. 13206 13207 `.option OPTION_LIST' 13208 Set listing options. Ignored. 13209 13210 `.sblock "SECTION_NAME" | SECTION_NAME [,"NAME_N" | NAME_N]' 13211 Designate SECTION_NAME for blocking. Blocking guarantees that a 13212 section will start on a page boundary (128 words) if it would 13213 otherwise cross a page boundary. Only initialized sections may be 13214 designated with this directive. See also *Note TIC54X-Block::. 13215 13216 `.sect "SECTION_NAME"' 13217 Define a named initialized section and make it the current section. 13218 13219 `SYMBOL .set "VALUE"' 13220 `SYMBOL .equ "VALUE"' 13221 Equate a constant VALUE to a SYMBOL, which is placed in the symbol 13222 table. SYMBOL may not be previously defined. 13223 13224 `.space SIZE_IN_BITS' 13225 `.bes SIZE_IN_BITS' 13226 Reserve the given number of bits in the current section and 13227 zero-fill them. If a label is used with `.space', it points to the 13228 *first* word reserved. With `.bes', the label points to the 13229 *last* word reserved. 13230 13231 `.sslist' 13232 `.ssnolist' 13233 Controls the inclusion of subsym replacement in the listing 13234 output. Ignored. 13235 13236 `.string "STRING" [,...,"STRING_N"]' 13237 `.pstring "STRING" [,...,"STRING_N"]' 13238 Place 8-bit characters from STRING into the current section. 13239 `.string' zero-fills the upper 8 bits of each word, while 13240 `.pstring' puts two characters into each word, filling the 13241 most-significant bits first. Unused space is zero-filled. If a 13242 label is used, it points to the first word initialized. 13243 13244 `[STAG] .struct [OFFSET]' 13245 `[NAME_1] element [COUNT_1]' 13246 `[NAME_2] element [COUNT_2]' 13247 `[TNAME] .tag STAGX [TCOUNT]' 13248 `...' 13249 `[NAME_N] element [COUNT_N]' 13250 `[SSIZE] .endstruct' 13251 `LABEL .tag [STAG]' 13252 Assign symbolic offsets to the elements of a structure. STAG 13253 defines a symbol to use to reference the structure. OFFSET 13254 indicates a starting value to use for the first element 13255 encountered; otherwise it defaults to zero. Each element can have 13256 a named offset, NAME, which is a symbol assigned the value of the 13257 element's offset into the structure. If STAG is missing, these 13258 become global symbols. COUNT adjusts the offset that many times, 13259 as if `element' were an array. `element' may be one of `.byte', 13260 `.word', `.long', `.float', or any equivalent of those, and the 13261 structure offset is adjusted accordingly. `.field' and `.string' 13262 are also allowed; the size of `.field' is one bit, and `.string' 13263 is considered to be one word in size. Only element descriptors, 13264 structure/union tags, `.align' and conditional assembly directives 13265 are allowed within `.struct'/`.endstruct'. `.align' aligns member 13266 offsets to word boundaries only. SSIZE, if provided, will always 13267 be assigned the size of the structure. 13268 13269 The `.tag' directive, in addition to being used to define a 13270 structure/union element within a structure, may be used to apply a 13271 structure to a symbol. Once applied to LABEL, the individual 13272 structure elements may be applied to LABEL to produce the desired 13273 offsets using LABEL as the structure base. 13274 13275 `.tab' 13276 Set the tab size in the output listing. Ignored. 13277 13278 `[UTAG] .union' 13279 `[NAME_1] element [COUNT_1]' 13280 `[NAME_2] element [COUNT_2]' 13281 `[TNAME] .tag UTAGX[,TCOUNT]' 13282 `...' 13283 `[NAME_N] element [COUNT_N]' 13284 `[USIZE] .endstruct' 13285 `LABEL .tag [UTAG]' 13286 Similar to `.struct', but the offset after each element is reset to 13287 zero, and the USIZE is set to the maximum of all defined elements. 13288 Starting offset for the union is always zero. 13289 13290 `[SYMBOL] .usect "SECTION_NAME", SIZE, [,[BLOCKING_FLAG] [,ALIGNMENT_FLAG]]' 13291 Reserve space for variables in a named, uninitialized section 13292 (similar to .bss). `.usect' allows definitions sections 13293 independent of .bss. SYMBOL points to the first location reserved 13294 by this allocation. The symbol may be used as a variable name. 13295 SIZE is the allocated size in words. BLOCKING_FLAG indicates 13296 whether to block this section on a page boundary (128 words) 13297 (*note TIC54X-Block::). ALIGNMENT FLAG indicates whether the 13298 section should be longword-aligned. 13299 13300 `.var SYM[,..., SYM_N]' 13301 Define a subsym to be a local variable within a macro. See *Note 13302 TIC54X-Macros::. 13303 13304 `.version VERSION' 13305 Set which processor to build instructions for. Though the 13306 following values are accepted, the op is ignored. 13307 `541' 13308 `542' 13309 `543' 13310 `545' 13311 `545LP' 13312 `546LP' 13313 `548' 13314 `549' 13315 13316 13317 File: as.info, Node: TIC54X-Macros, Next: TIC54X-MMRegs, Prev: TIC54X-Directives, Up: TIC54X-Dependent 13318 13319 8.29.10 Macros 13320 -------------- 13321 13322 Macros do not require explicit dereferencing of arguments (i.e. \ARG). 13323 13324 During macro expansion, the macro parameters are converted to 13325 subsyms. If the number of arguments passed the macro invocation 13326 exceeds the number of parameters defined, the last parameter is 13327 assigned the string equivalent of all remaining arguments. If fewer 13328 arguments are given than parameters, the missing parameters are 13329 assigned empty strings. To include a comma in an argument, you must 13330 enclose the argument in quotes. 13331 13332 The following built-in subsym functions allow examination of the 13333 string value of subsyms (or ordinary strings). The arguments are 13334 strings unless otherwise indicated (subsyms passed as args will be 13335 replaced by the strings they represent). 13336 ``$symlen(STR)'' 13337 Returns the length of STR. 13338 13339 ``$symcmp(STR1,STR2)'' 13340 Returns 0 if STR1 == STR2, non-zero otherwise. 13341 13342 ``$firstch(STR,CH)'' 13343 Returns index of the first occurrence of character constant CH in 13344 STR. 13345 13346 ``$lastch(STR,CH)'' 13347 Returns index of the last occurrence of character constant CH in 13348 STR. 13349 13350 ``$isdefed(SYMBOL)'' 13351 Returns zero if the symbol SYMBOL is not in the symbol table, 13352 non-zero otherwise. 13353 13354 ``$ismember(SYMBOL,LIST)'' 13355 Assign the first member of comma-separated string LIST to SYMBOL; 13356 LIST is reassigned the remainder of the list. Returns zero if 13357 LIST is a null string. Both arguments must be subsyms. 13358 13359 ``$iscons(EXPR)'' 13360 Returns 1 if string EXPR is binary, 2 if octal, 3 if hexadecimal, 13361 4 if a character, 5 if decimal, and zero if not an integer. 13362 13363 ``$isname(NAME)'' 13364 Returns 1 if NAME is a valid symbol name, zero otherwise. 13365 13366 ``$isreg(REG)'' 13367 Returns 1 if REG is a valid predefined register name (AR0-AR7 13368 only). 13369 13370 ``$structsz(STAG)'' 13371 Returns the size of the structure or union represented by STAG. 13372 13373 ``$structacc(STAG)'' 13374 Returns the reference point of the structure or union represented 13375 by STAG. Always returns zero. 13376 13377 13378 13379 File: as.info, Node: TIC54X-MMRegs, Prev: TIC54X-Macros, Up: TIC54X-Dependent 13380 13381 8.29.11 Memory-mapped Registers 13382 ------------------------------- 13383 13384 The following symbols are recognized as memory-mapped registers: 13385 13386 13387 13388 File: as.info, Node: Z80-Dependent, Next: Z8000-Dependent, Prev: Xtensa-Dependent, Up: Machine Dependencies 13389 13390 8.30 Z80 Dependent Features 13391 =========================== 13392 13393 * Menu: 13394 13395 * Z80 Options:: Options 13396 * Z80 Syntax:: Syntax 13397 * Z80 Floating Point:: Floating Point 13398 * Z80 Directives:: Z80 Machine Directives 13399 * Z80 Opcodes:: Opcodes 13400 13401 13402 File: as.info, Node: Z80 Options, Next: Z80 Syntax, Up: Z80-Dependent 13403 13404 8.30.1 Options 13405 -------------- 13406 13407 The Zilog Z80 and Ascii R800 version of `as' have a few machine 13408 dependent options. 13409 `-z80' 13410 Produce code for the Z80 processor. There are additional options to 13411 request warnings and error messages for undocumented instructions. 13412 13413 `-ignore-undocumented-instructions' 13414 `-Wnud' 13415 Silently assemble undocumented Z80-instructions that have been 13416 adopted as documented R800-instructions. 13417 13418 `-ignore-unportable-instructions' 13419 `-Wnup' 13420 Silently assemble all undocumented Z80-instructions. 13421 13422 `-warn-undocumented-instructions' 13423 `-Wud' 13424 Issue warnings for undocumented Z80-instructions that work on 13425 R800, do not assemble other undocumented instructions without 13426 warning. 13427 13428 `-warn-unportable-instructions' 13429 `-Wup' 13430 Issue warnings for other undocumented Z80-instructions, do not 13431 treat any undocumented instructions as errors. 13432 13433 `-forbid-undocumented-instructions' 13434 `-Fud' 13435 Treat all undocumented z80-instructions as errors. 13436 13437 `-forbid-unportable-instructions' 13438 `-Fup' 13439 Treat undocumented z80-instructions that do not work on R800 as 13440 errors. 13441 13442 `-r800' 13443 Produce code for the R800 processor. The assembler does not support 13444 undocumented instructions for the R800. In line with common 13445 practice, `as' uses Z80 instriction names for the R800 processor, 13446 as far as they exist. 13447 13448 13449 File: as.info, Node: Z80 Syntax, Next: Z80 Floating Point, Prev: Z80 Options, Up: Z80-Dependent 13450 13451 8.30.2 Syntax 13452 ------------- 13453 13454 The assembler syntax closely follows the 'Z80 family CPU User Manual' by 13455 Zilog. In expressions a single `=' may be used as "is equal to" 13456 comparison operator. 13457 13458 Suffices can be used to indicate the radix of integer constants; `H' 13459 or `h' for hexadecimal, `D' or `d' for decimal, `Q', `O', `q' or `o' 13460 for octal, and `B' for binary. 13461 13462 The suffix `b' denotes a backreference to local label. 13463 13464 * Menu: 13465 13466 * Z80-Chars:: Special Characters 13467 * Z80-Regs:: Register Names 13468 * Z80-Case:: Case Sensitivity 13469 13470 13471 File: as.info, Node: Z80-Chars, Next: Z80-Regs, Up: Z80 Syntax 13472 13473 8.30.2.1 Special Characters 13474 ........................... 13475 13476 The semicolon `;' is the line comment character; 13477 13478 The dollar sign `$' can be used as a prefix for hexadecimal numbers 13479 and as a symbol denoting the current location counter. 13480 13481 A backslash `\' is an ordinary character for the Z80 assembler. 13482 13483 The single quote `'' must be followed by a closing quote. If there 13484 is one character inbetween, it is a character constant, otherwise it is 13485 a string constant. 13486 13487 13488 File: as.info, Node: Z80-Regs, Next: Z80-Case, Prev: Z80-Chars, Up: Z80 Syntax 13489 13490 8.30.2.2 Register Names 13491 ....................... 13492 13493 The registers are referred to with the letters assigned to them by 13494 Zilog. In addition `as' recognises `ixl' and `ixh' as the least and 13495 most significant octet in `ix', and similarly `iyl' and `iyh' as parts 13496 of `iy'. 13497 13498 13499 File: as.info, Node: Z80-Case, Prev: Z80-Regs, Up: Z80 Syntax 13500 13501 8.30.2.3 Case Sensitivity 13502 ......................... 13503 13504 Upper and lower case are equivalent in register names, opcodes, 13505 condition codes and assembler directives. The case of letters is 13506 significant in labels and symbol names. The case is also important to 13507 distinguish the suffix `b' for a backward reference to a local label 13508 from the suffix `B' for a number in binary notation. 13509 13510 13511 File: as.info, Node: Z80 Floating Point, Next: Z80 Directives, Prev: Z80 Syntax, Up: Z80-Dependent 13512 13513 8.30.3 Floating Point 13514 --------------------- 13515 13516 Floating-point numbers are not supported. 13517 13518 13519 File: as.info, Node: Z80 Directives, Next: Z80 Opcodes, Prev: Z80 Floating Point, Up: Z80-Dependent 13520 13521 8.30.4 Z80 Assembler Directives 13522 ------------------------------- 13523 13524 `as' for the Z80 supports some additional directives for compatibility 13525 with other assemblers. 13526 13527 These are the additional directives in `as' for the Z80: 13528 13529 `db EXPRESSION|STRING[,EXPRESSION|STRING...]' 13530 `defb EXPRESSION|STRING[,EXPRESSION|STRING...]' 13531 For each STRING the characters are copied to the object file, for 13532 each other EXPRESSION the value is stored in one byte. A warning 13533 is issued in case of an overflow. 13534 13535 `dw EXPRESSION[,EXPRESSION...]' 13536 `defw EXPRESSION[,EXPRESSION...]' 13537 For each EXPRESSION the value is stored in two bytes, ignoring 13538 overflow. 13539 13540 `d24 EXPRESSION[,EXPRESSION...]' 13541 `def24 EXPRESSION[,EXPRESSION...]' 13542 For each EXPRESSION the value is stored in three bytes, ignoring 13543 overflow. 13544 13545 `d32 EXPRESSION[,EXPRESSION...]' 13546 `def32 EXPRESSION[,EXPRESSION...]' 13547 For each EXPRESSION the value is stored in four bytes, ignoring 13548 overflow. 13549 13550 `ds COUNT[, VALUE]' 13551 `defs COUNT[, VALUE]' 13552 Fill COUNT bytes in the object file with VALUE, if VALUE is 13553 omitted it defaults to zero. 13554 13555 `SYMBOL equ EXPRESSION' 13556 `SYMBOL defl EXPRESSION' 13557 These directives set the value of SYMBOL to EXPRESSION. If `equ' 13558 is used, it is an error if SYMBOL is already defined. Symbols 13559 defined with `equ' are not protected from redefinition. 13560 13561 `set' 13562 This is a normal instruction on Z80, and not an assembler 13563 directive. 13564 13565 `psect NAME' 13566 A synonym for *Note Section::, no second argument should be given. 13567 13568 13569 13570 File: as.info, Node: Z80 Opcodes, Prev: Z80 Directives, Up: Z80-Dependent 13571 13572 8.30.5 Opcodes 13573 -------------- 13574 13575 In line with commmon practice Z80 mnonics are used for both the Z80 and 13576 the R800. 13577 13578 In many instructions it is possible to use one of the half index 13579 registers (`ixl',`ixh',`iyl',`iyh') in stead of an 8-bit general 13580 purpose register. This yields instructions that are documented on the 13581 R800 and undocumented on the Z80. Similarly `in f,(c)' is documented 13582 on the R800 and undocumented on the Z80. 13583 13584 The assembler also supports the following undocumented 13585 Z80-instructions, that have not been adopted in the R800 instruction 13586 set: 13587 `out (c),0' 13588 Sends zero to the port pointed to by register c. 13589 13590 `sli M' 13591 Equivalent to `M = (M<<1)+1', the operand M can be any operand 13592 that is valid for `sla'. One can use `sll' as a synonym for `sli'. 13593 13594 `OP (ix+D), R' 13595 This is equivalent to 13596 13597 ld R, (ix+D) 13598 OPC R 13599 ld (ix+D), R 13600 13601 The operation `OPC' may be any of `res B,', `set B,', `rl', `rlc', 13602 `rr', `rrc', `sla', `sli', `sra' and `srl', and the register `R' 13603 may be any of `a', `b', `c', `d', `e', `h' and `l'. 13604 13605 `OPC (iy+D), R' 13606 As above, but with `iy' instead of `ix'. 13607 13608 The web site at `http://www.z80.info' is a good starting place to 13609 find more information on programming the Z80. 13610 13611 13612 File: as.info, Node: Z8000-Dependent, Next: Vax-Dependent, Prev: Z80-Dependent, Up: Machine Dependencies 13613 13614 8.31 Z8000 Dependent Features 13615 ============================= 13616 13617 The Z8000 as supports both members of the Z8000 family: the 13618 unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with 13619 24 bit addresses. 13620 13621 When the assembler is in unsegmented mode (specified with the 13622 `unsegm' directive), an address takes up one word (16 bit) sized 13623 register. When the assembler is in segmented mode (specified with the 13624 `segm' directive), a 24-bit address takes up a long (32 bit) register. 13625 *Note Assembler Directives for the Z8000: Z8000 Directives, for a list 13626 of other Z8000 specific assembler directives. 13627 13628 * Menu: 13629 13630 * Z8000 Options:: Command-line options for the Z8000 13631 * Z8000 Syntax:: Assembler syntax for the Z8000 13632 * Z8000 Directives:: Special directives for the Z8000 13633 * Z8000 Opcodes:: Opcodes 13634 13635 13636 File: as.info, Node: Z8000 Options, Next: Z8000 Syntax, Up: Z8000-Dependent 13637 13638 8.31.1 Options 13639 -------------- 13640 13641 `-z8001' 13642 Generate segmented code by default. 13643 13644 `-z8002' 13645 Generate unsegmented code by default. 13646 13647 13648 File: as.info, Node: Z8000 Syntax, Next: Z8000 Directives, Prev: Z8000 Options, Up: Z8000-Dependent 13649 13650 8.31.2 Syntax 13651 ------------- 13652 13653 * Menu: 13654 13655 * Z8000-Chars:: Special Characters 13656 * Z8000-Regs:: Register Names 13657 * Z8000-Addressing:: Addressing Modes 13658 13659 13660 File: as.info, Node: Z8000-Chars, Next: Z8000-Regs, Up: Z8000 Syntax 13661 13662 8.31.2.1 Special Characters 13663 ........................... 13664 13665 `!' is the line comment character. 13666 13667 You can use `;' instead of a newline to separate statements. 13668 13669 13670 File: as.info, Node: Z8000-Regs, Next: Z8000-Addressing, Prev: Z8000-Chars, Up: Z8000 Syntax 13671 13672 8.31.2.2 Register Names 13673 ....................... 13674 13675 The Z8000 has sixteen 16 bit registers, numbered 0 to 15. You can refer 13676 to different sized groups of registers by register number, with the 13677 prefix `r' for 16 bit registers, `rr' for 32 bit registers and `rq' for 13678 64 bit registers. You can also refer to the contents of the first 13679 eight (of the sixteen 16 bit registers) by bytes. They are named `rlN' 13680 and `rhN'. 13681 13682 _byte registers_ 13683 rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3 13684 rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7 13685 13686 _word registers_ 13687 r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 13688 13689 _long word registers_ 13690 rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14 13691 13692 _quad word registers_ 13693 rq0 rq4 rq8 rq12 13694 13695 13696 File: as.info, Node: Z8000-Addressing, Prev: Z8000-Regs, Up: Z8000 Syntax 13697 13698 8.31.2.3 Addressing Modes 13699 ......................... 13700 13701 as understands the following addressing modes for the Z8000: 13702 13703 `rlN' 13704 `rhN' 13705 `rN' 13706 `rrN' 13707 `rqN' 13708 Register direct: 8bit, 16bit, 32bit, and 64bit registers. 13709 13710 `@rN' 13711 `@rrN' 13712 Indirect register: @rrN in segmented mode, @rN in unsegmented 13713 mode. 13714 13715 `ADDR' 13716 Direct: the 16 bit or 24 bit address (depending on whether the 13717 assembler is in segmented or unsegmented mode) of the operand is 13718 in the instruction. 13719 13720 `address(rN)' 13721 Indexed: the 16 or 24 bit address is added to the 16 bit register 13722 to produce the final address in memory of the operand. 13723 13724 `rN(#IMM)' 13725 `rrN(#IMM)' 13726 Base Address: the 16 or 24 bit register is added to the 16 bit sign 13727 extended immediate displacement to produce the final address in 13728 memory of the operand. 13729 13730 `rN(rM)' 13731 `rrN(rM)' 13732 Base Index: the 16 or 24 bit register rN or rrN is added to the 13733 sign extended 16 bit index register rM to produce the final 13734 address in memory of the operand. 13735 13736 `#XX' 13737 Immediate data XX. 13738 13739 13740 File: as.info, Node: Z8000 Directives, Next: Z8000 Opcodes, Prev: Z8000 Syntax, Up: Z8000-Dependent 13741 13742 8.31.3 Assembler Directives for the Z8000 13743 ----------------------------------------- 13744 13745 The Z8000 port of as includes additional assembler directives, for 13746 compatibility with other Z8000 assemblers. These do not begin with `.' 13747 (unlike the ordinary as directives). 13748 13749 `segm' 13750 `.z8001' 13751 Generate code for the segmented Z8001. 13752 13753 `unsegm' 13754 `.z8002' 13755 Generate code for the unsegmented Z8002. 13756 13757 `name' 13758 Synonym for `.file' 13759 13760 `global' 13761 Synonym for `.global' 13762 13763 `wval' 13764 Synonym for `.word' 13765 13766 `lval' 13767 Synonym for `.long' 13768 13769 `bval' 13770 Synonym for `.byte' 13771 13772 `sval' 13773 Assemble a string. `sval' expects one string literal, delimited by 13774 single quotes. It assembles each byte of the string into 13775 consecutive addresses. You can use the escape sequence `%XX' 13776 (where XX represents a two-digit hexadecimal number) to represent 13777 the character whose ASCII value is XX. Use this feature to 13778 describe single quote and other characters that may not appear in 13779 string literals as themselves. For example, the C statement 13780 `char *a = "he said \"it's 50% off\"";' is represented in Z8000 13781 assembly language (shown with the assembler output in hex at the 13782 left) as 13783 13784 68652073 sval 'he said %22it%27s 50%25 off%22%00' 13785 61696420 13786 22697427 13787 73203530 13788 25206F66 13789 662200 13790 13791 `rsect' 13792 synonym for `.section' 13793 13794 `block' 13795 synonym for `.space' 13796 13797 `even' 13798 special case of `.align'; aligns output to even byte boundary. 13799 13800 13801 File: as.info, Node: Z8000 Opcodes, Prev: Z8000 Directives, Up: Z8000-Dependent 13802 13803 8.31.4 Opcodes 13804 -------------- 13805 13806 For detailed information on the Z8000 machine instruction set, see 13807 `Z8000 Technical Manual'. 13808 13809 The following table summarizes the opcodes and their arguments: 13810 13811 rs 16 bit source register 13812 rd 16 bit destination register 13813 rbs 8 bit source register 13814 rbd 8 bit destination register 13815 rrs 32 bit source register 13816 rrd 32 bit destination register 13817 rqs 64 bit source register 13818 rqd 64 bit destination register 13819 addr 16/24 bit address 13820 imm immediate data 13821 13822 adc rd,rs clrb addr cpsir @rd,@rs,rr,cc 13823 adcb rbd,rbs clrb addr(rd) cpsirb @rd,@rs,rr,cc 13824 add rd,@rs clrb rbd dab rbd 13825 add rd,addr com @rd dbjnz rbd,disp7 13826 add rd,addr(rs) com addr dec @rd,imm4m1 13827 add rd,imm16 com addr(rd) dec addr(rd),imm4m1 13828 add rd,rs com rd dec addr,imm4m1 13829 addb rbd,@rs comb @rd dec rd,imm4m1 13830 addb rbd,addr comb addr decb @rd,imm4m1 13831 addb rbd,addr(rs) comb addr(rd) decb addr(rd),imm4m1 13832 addb rbd,imm8 comb rbd decb addr,imm4m1 13833 addb rbd,rbs comflg flags decb rbd,imm4m1 13834 addl rrd,@rs cp @rd,imm16 di i2 13835 addl rrd,addr cp addr(rd),imm16 div rrd,@rs 13836 addl rrd,addr(rs) cp addr,imm16 div rrd,addr 13837 addl rrd,imm32 cp rd,@rs div rrd,addr(rs) 13838 addl rrd,rrs cp rd,addr div rrd,imm16 13839 and rd,@rs cp rd,addr(rs) div rrd,rs 13840 and rd,addr cp rd,imm16 divl rqd,@rs 13841 and rd,addr(rs) cp rd,rs divl rqd,addr 13842 and rd,imm16 cpb @rd,imm8 divl rqd,addr(rs) 13843 and rd,rs cpb addr(rd),imm8 divl rqd,imm32 13844 andb rbd,@rs cpb addr,imm8 divl rqd,rrs 13845 andb rbd,addr cpb rbd,@rs djnz rd,disp7 13846 andb rbd,addr(rs) cpb rbd,addr ei i2 13847 andb rbd,imm8 cpb rbd,addr(rs) ex rd,@rs 13848 andb rbd,rbs cpb rbd,imm8 ex rd,addr 13849 bit @rd,imm4 cpb rbd,rbs ex rd,addr(rs) 13850 bit addr(rd),imm4 cpd rd,@rs,rr,cc ex rd,rs 13851 bit addr,imm4 cpdb rbd,@rs,rr,cc exb rbd,@rs 13852 bit rd,imm4 cpdr rd,@rs,rr,cc exb rbd,addr 13853 bit rd,rs cpdrb rbd,@rs,rr,cc exb rbd,addr(rs) 13854 bitb @rd,imm4 cpi rd,@rs,rr,cc exb rbd,rbs 13855 bitb addr(rd),imm4 cpib rbd,@rs,rr,cc ext0e imm8 13856 bitb addr,imm4 cpir rd,@rs,rr,cc ext0f imm8 13857 bitb rbd,imm4 cpirb rbd,@rs,rr,cc ext8e imm8 13858 bitb rbd,rs cpl rrd,@rs ext8f imm8 13859 bpt cpl rrd,addr exts rrd 13860 call @rd cpl rrd,addr(rs) extsb rd 13861 call addr cpl rrd,imm32 extsl rqd 13862 call addr(rd) cpl rrd,rrs halt 13863 calr disp12 cpsd @rd,@rs,rr,cc in rd,@rs 13864 clr @rd cpsdb @rd,@rs,rr,cc in rd,imm16 13865 clr addr cpsdr @rd,@rs,rr,cc inb rbd,@rs 13866 clr addr(rd) cpsdrb @rd,@rs,rr,cc inb rbd,imm16 13867 clr rd cpsi @rd,@rs,rr,cc inc @rd,imm4m1 13868 clrb @rd cpsib @rd,@rs,rr,cc inc addr(rd),imm4m1 13869 inc addr,imm4m1 ldb rbd,rs(rx) mult rrd,addr(rs) 13870 inc rd,imm4m1 ldb rd(imm16),rbs mult rrd,imm16 13871 incb @rd,imm4m1 ldb rd(rx),rbs mult rrd,rs 13872 incb addr(rd),imm4m1 ldctl ctrl,rs multl rqd,@rs 13873 incb addr,imm4m1 ldctl rd,ctrl multl rqd,addr 13874 incb rbd,imm4m1 ldd @rs,@rd,rr multl rqd,addr(rs) 13875 ind @rd,@rs,ra lddb @rs,@rd,rr multl rqd,imm32 13876 indb @rd,@rs,rba lddr @rs,@rd,rr multl rqd,rrs 13877 inib @rd,@rs,ra lddrb @rs,@rd,rr neg @rd 13878 inibr @rd,@rs,ra ldi @rd,@rs,rr neg addr 13879 iret ldib @rd,@rs,rr neg addr(rd) 13880 jp cc,@rd ldir @rd,@rs,rr neg rd 13881 jp cc,addr ldirb @rd,@rs,rr negb @rd 13882 jp cc,addr(rd) ldk rd,imm4 negb addr 13883 jr cc,disp8 ldl @rd,rrs negb addr(rd) 13884 ld @rd,imm16 ldl addr(rd),rrs negb rbd 13885 ld @rd,rs ldl addr,rrs nop 13886 ld addr(rd),imm16 ldl rd(imm16),rrs or rd,@rs 13887 ld addr(rd),rs ldl rd(rx),rrs or rd,addr 13888 ld addr,imm16 ldl rrd,@rs or rd,addr(rs) 13889 ld addr,rs ldl rrd,addr or rd,imm16 13890 ld rd(imm16),rs ldl rrd,addr(rs) or rd,rs 13891 ld rd(rx),rs ldl rrd,imm32 orb rbd,@rs 13892 ld rd,@rs ldl rrd,rrs orb rbd,addr 13893 ld rd,addr ldl rrd,rs(imm16) orb rbd,addr(rs) 13894 ld rd,addr(rs) ldl rrd,rs(rx) orb rbd,imm8 13895 ld rd,imm16 ldm @rd,rs,n orb rbd,rbs 13896 ld rd,rs ldm addr(rd),rs,n out @rd,rs 13897 ld rd,rs(imm16) ldm addr,rs,n out imm16,rs 13898 ld rd,rs(rx) ldm rd,@rs,n outb @rd,rbs 13899 lda rd,addr ldm rd,addr(rs),n outb imm16,rbs 13900 lda rd,addr(rs) ldm rd,addr,n outd @rd,@rs,ra 13901 lda rd,rs(imm16) ldps @rs outdb @rd,@rs,rba 13902 lda rd,rs(rx) ldps addr outib @rd,@rs,ra 13903 ldar rd,disp16 ldps addr(rs) outibr @rd,@rs,ra 13904 ldb @rd,imm8 ldr disp16,rs pop @rd,@rs 13905 ldb @rd,rbs ldr rd,disp16 pop addr(rd),@rs 13906 ldb addr(rd),imm8 ldrb disp16,rbs pop addr,@rs 13907 ldb addr(rd),rbs ldrb rbd,disp16 pop rd,@rs 13908 ldb addr,imm8 ldrl disp16,rrs popl @rd,@rs 13909 ldb addr,rbs ldrl rrd,disp16 popl addr(rd),@rs 13910 ldb rbd,@rs mbit popl addr,@rs 13911 ldb rbd,addr mreq rd popl rrd,@rs 13912 ldb rbd,addr(rs) mres push @rd,@rs 13913 ldb rbd,imm8 mset push @rd,addr 13914 ldb rbd,rbs mult rrd,@rs push @rd,addr(rs) 13915 ldb rbd,rs(imm16) mult rrd,addr push @rd,imm16 13916 push @rd,rs set addr,imm4 subl rrd,imm32 13917 pushl @rd,@rs set rd,imm4 subl rrd,rrs 13918 pushl @rd,addr set rd,rs tcc cc,rd 13919 pushl @rd,addr(rs) setb @rd,imm4 tccb cc,rbd 13920 pushl @rd,rrs setb addr(rd),imm4 test @rd 13921 res @rd,imm4 setb addr,imm4 test addr 13922 res addr(rd),imm4 setb rbd,imm4 test addr(rd) 13923 res addr,imm4 setb rbd,rs test rd 13924 res rd,imm4 setflg imm4 testb @rd 13925 res rd,rs sinb rbd,imm16 testb addr 13926 resb @rd,imm4 sinb rd,imm16 testb addr(rd) 13927 resb addr(rd),imm4 sind @rd,@rs,ra testb rbd 13928 resb addr,imm4 sindb @rd,@rs,rba testl @rd 13929 resb rbd,imm4 sinib @rd,@rs,ra testl addr 13930 resb rbd,rs sinibr @rd,@rs,ra testl addr(rd) 13931 resflg imm4 sla rd,imm8 testl rrd 13932 ret cc slab rbd,imm8 trdb @rd,@rs,rba 13933 rl rd,imm1or2 slal rrd,imm8 trdrb @rd,@rs,rba 13934 rlb rbd,imm1or2 sll rd,imm8 trib @rd,@rs,rbr 13935 rlc rd,imm1or2 sllb rbd,imm8 trirb @rd,@rs,rbr 13936 rlcb rbd,imm1or2 slll rrd,imm8 trtdrb @ra,@rb,rbr 13937 rldb rbb,rba sout imm16,rs trtib @ra,@rb,rr 13938 rr rd,imm1or2 soutb imm16,rbs trtirb @ra,@rb,rbr 13939 rrb rbd,imm1or2 soutd @rd,@rs,ra trtrb @ra,@rb,rbr 13940 rrc rd,imm1or2 soutdb @rd,@rs,rba tset @rd 13941 rrcb rbd,imm1or2 soutib @rd,@rs,ra tset addr 13942 rrdb rbb,rba soutibr @rd,@rs,ra tset addr(rd) 13943 rsvd36 sra rd,imm8 tset rd 13944 rsvd38 srab rbd,imm8 tsetb @rd 13945 rsvd78 sral rrd,imm8 tsetb addr 13946 rsvd7e srl rd,imm8 tsetb addr(rd) 13947 rsvd9d srlb rbd,imm8 tsetb rbd 13948 rsvd9f srll rrd,imm8 xor rd,@rs 13949 rsvdb9 sub rd,@rs xor rd,addr 13950 rsvdbf sub rd,addr xor rd,addr(rs) 13951 sbc rd,rs sub rd,addr(rs) xor rd,imm16 13952 sbcb rbd,rbs sub rd,imm16 xor rd,rs 13953 sc imm8 sub rd,rs xorb rbd,@rs 13954 sda rd,rs subb rbd,@rs xorb rbd,addr 13955 sdab rbd,rs subb rbd,addr xorb rbd,addr(rs) 13956 sdal rrd,rs subb rbd,addr(rs) xorb rbd,imm8 13957 sdl rd,rs subb rbd,imm8 xorb rbd,rbs 13958 sdlb rbd,rs subb rbd,rbs xorb rbd,rbs 13959 sdll rrd,rs subl rrd,@rs 13960 set @rd,imm4 subl rrd,addr 13961 set addr(rd),imm4 subl rrd,addr(rs) 13962 13963 13964 File: as.info, Node: Vax-Dependent, Prev: Z8000-Dependent, Up: Machine Dependencies 13965 13966 8.32 VAX Dependent Features 13967 =========================== 13968 13969 * Menu: 13970 13971 * VAX-Opts:: VAX Command-Line Options 13972 * VAX-float:: VAX Floating Point 13973 * VAX-directives:: Vax Machine Directives 13974 * VAX-opcodes:: VAX Opcodes 13975 * VAX-branch:: VAX Branch Improvement 13976 * VAX-operands:: VAX Operands 13977 * VAX-no:: Not Supported on VAX 13978 13979 13980 File: as.info, Node: VAX-Opts, Next: VAX-float, Up: Vax-Dependent 13981 13982 8.32.1 VAX Command-Line Options 13983 ------------------------------- 13984 13985 The Vax version of `as' accepts any of the following options, gives a 13986 warning message that the option was ignored and proceeds. These 13987 options are for compatibility with scripts designed for other people's 13988 assemblers. 13989 13990 ``-D' (Debug)' 13991 ``-S' (Symbol Table)' 13992 ``-T' (Token Trace)' 13993 These are obsolete options used to debug old assemblers. 13994 13995 ``-d' (Displacement size for JUMPs)' 13996 This option expects a number following the `-d'. Like options 13997 that expect filenames, the number may immediately follow the `-d' 13998 (old standard) or constitute the whole of the command line 13999 argument that follows `-d' (GNU standard). 14000 14001 ``-V' (Virtualize Interpass Temporary File)' 14002 Some other assemblers use a temporary file. This option commanded 14003 them to keep the information in active memory rather than in a 14004 disk file. `as' always does this, so this option is redundant. 14005 14006 ``-J' (JUMPify Longer Branches)' 14007 Many 32-bit computers permit a variety of branch instructions to 14008 do the same job. Some of these instructions are short (and fast) 14009 but have a limited range; others are long (and slow) but can 14010 branch anywhere in virtual memory. Often there are 3 flavors of 14011 branch: short, medium and long. Some other assemblers would emit 14012 short and medium branches, unless told by this option to emit 14013 short and long branches. 14014 14015 ``-t' (Temporary File Directory)' 14016 Some other assemblers may use a temporary file, and this option 14017 takes a filename being the directory to site the temporary file. 14018 Since `as' does not use a temporary disk file, this option makes 14019 no difference. `-t' needs exactly one filename. 14020 14021 The Vax version of the assembler accepts additional options when 14022 compiled for VMS: 14023 14024 `-h N' 14025 External symbol or section (used for global variables) names are 14026 not case sensitive on VAX/VMS and always mapped to upper case. 14027 This is contrary to the C language definition which explicitly 14028 distinguishes upper and lower case. To implement a standard 14029 conforming C compiler, names must be changed (mapped) to preserve 14030 the case information. The default mapping is to convert all lower 14031 case characters to uppercase and adding an underscore followed by 14032 a 6 digit hex value, representing a 24 digit binary value. The 14033 one digits in the binary value represent which characters are 14034 uppercase in the original symbol name. 14035 14036 The `-h N' option determines how we map names. This takes several 14037 values. No `-h' switch at all allows case hacking as described 14038 above. A value of zero (`-h0') implies names should be upper 14039 case, and inhibits the case hack. A value of 2 (`-h2') implies 14040 names should be all lower case, with no case hack. A value of 3 14041 (`-h3') implies that case should be preserved. The value 1 is 14042 unused. The `-H' option directs `as' to display every mapped 14043 symbol during assembly. 14044 14045 Symbols whose names include a dollar sign `$' are exceptions to the 14046 general name mapping. These symbols are normally only used to 14047 reference VMS library names. Such symbols are always mapped to 14048 upper case. 14049 14050 `-+' 14051 The `-+' option causes `as' to truncate any symbol name larger 14052 than 31 characters. The `-+' option also prevents some code 14053 following the `_main' symbol normally added to make the object 14054 file compatible with Vax-11 "C". 14055 14056 `-1' 14057 This option is ignored for backward compatibility with `as' 14058 version 1.x. 14059 14060 `-H' 14061 The `-H' option causes `as' to print every symbol which was 14062 changed by case mapping. 14063 14064 14065 File: as.info, Node: VAX-float, Next: VAX-directives, Prev: VAX-Opts, Up: Vax-Dependent 14066 14067 8.32.2 VAX Floating Point 14068 ------------------------- 14069 14070 Conversion of flonums to floating point is correct, and compatible with 14071 previous assemblers. Rounding is towards zero if the remainder is 14072 exactly half the least significant bit. 14073 14074 `D', `F', `G' and `H' floating point formats are understood. 14075 14076 Immediate floating literals (_e.g._ `S`$6.9') are rendered 14077 correctly. Again, rounding is towards zero in the boundary case. 14078 14079 The `.float' directive produces `f' format numbers. The `.double' 14080 directive produces `d' format numbers. 14081 14082 14083 File: as.info, Node: VAX-directives, Next: VAX-opcodes, Prev: VAX-float, Up: Vax-Dependent 14084 14085 8.32.3 Vax Machine Directives 14086 ----------------------------- 14087 14088 The Vax version of the assembler supports four directives for 14089 generating Vax floating point constants. They are described in the 14090 table below. 14091 14092 `.dfloat' 14093 This expects zero or more flonums, separated by commas, and 14094 assembles Vax `d' format 64-bit floating point constants. 14095 14096 `.ffloat' 14097 This expects zero or more flonums, separated by commas, and 14098 assembles Vax `f' format 32-bit floating point constants. 14099 14100 `.gfloat' 14101 This expects zero or more flonums, separated by commas, and 14102 assembles Vax `g' format 64-bit floating point constants. 14103 14104 `.hfloat' 14105 This expects zero or more flonums, separated by commas, and 14106 assembles Vax `h' format 128-bit floating point constants. 14107 14108 14109 14110 File: as.info, Node: VAX-opcodes, Next: VAX-branch, Prev: VAX-directives, Up: Vax-Dependent 14111 14112 8.32.4 VAX Opcodes 14113 ------------------ 14114 14115 All DEC mnemonics are supported. Beware that `case...' instructions 14116 have exactly 3 operands. The dispatch table that follows the `case...' 14117 instruction should be made with `.word' statements. This is compatible 14118 with all unix assemblers we know of. 14119 14120 14121 File: as.info, Node: VAX-branch, Next: VAX-operands, Prev: VAX-opcodes, Up: Vax-Dependent 14122 14123 8.32.5 VAX Branch Improvement 14124 ----------------------------- 14125 14126 Certain pseudo opcodes are permitted. They are for branch 14127 instructions. They expand to the shortest branch instruction that 14128 reaches the target. Generally these mnemonics are made by substituting 14129 `j' for `b' at the start of a DEC mnemonic. This feature is included 14130 both for compatibility and to help compilers. If you do not need this 14131 feature, avoid these opcodes. Here are the mnemonics, and the code 14132 they can expand into. 14133 14134 `jbsb' 14135 `Jsb' is already an instruction mnemonic, so we chose `jbsb'. 14136 (byte displacement) 14137 `bsbb ...' 14138 14139 (word displacement) 14140 `bsbw ...' 14141 14142 (long displacement) 14143 `jsb ...' 14144 14145 `jbr' 14146 `jr' 14147 Unconditional branch. 14148 (byte displacement) 14149 `brb ...' 14150 14151 (word displacement) 14152 `brw ...' 14153 14154 (long displacement) 14155 `jmp ...' 14156 14157 `jCOND' 14158 COND may be any one of the conditional branches `neq', `nequ', 14159 `eql', `eqlu', `gtr', `geq', `lss', `gtru', `lequ', `vc', `vs', 14160 `gequ', `cc', `lssu', `cs'. COND may also be one of the bit tests 14161 `bs', `bc', `bss', `bcs', `bsc', `bcc', `bssi', `bcci', `lbs', 14162 `lbc'. NOTCOND is the opposite condition to COND. 14163 (byte displacement) 14164 `bCOND ...' 14165 14166 (word displacement) 14167 `bNOTCOND foo ; brw ... ; foo:' 14168 14169 (long displacement) 14170 `bNOTCOND foo ; jmp ... ; foo:' 14171 14172 `jacbX' 14173 X may be one of `b d f g h l w'. 14174 (word displacement) 14175 `OPCODE ...' 14176 14177 (long displacement) 14178 OPCODE ..., foo ; 14179 brb bar ; 14180 foo: jmp ... ; 14181 bar: 14182 14183 `jaobYYY' 14184 YYY may be one of `lss leq'. 14185 14186 `jsobZZZ' 14187 ZZZ may be one of `geq gtr'. 14188 (byte displacement) 14189 `OPCODE ...' 14190 14191 (word displacement) 14192 OPCODE ..., foo ; 14193 brb bar ; 14194 foo: brw DESTINATION ; 14195 bar: 14196 14197 (long displacement) 14198 OPCODE ..., foo ; 14199 brb bar ; 14200 foo: jmp DESTINATION ; 14201 bar: 14202 14203 `aobleq' 14204 `aoblss' 14205 `sobgeq' 14206 `sobgtr' 14207 14208 (byte displacement) 14209 `OPCODE ...' 14210 14211 (word displacement) 14212 OPCODE ..., foo ; 14213 brb bar ; 14214 foo: brw DESTINATION ; 14215 bar: 14216 14217 (long displacement) 14218 OPCODE ..., foo ; 14219 brb bar ; 14220 foo: jmp DESTINATION ; 14221 bar: 14222 14223 14224 File: as.info, Node: VAX-operands, Next: VAX-no, Prev: VAX-branch, Up: Vax-Dependent 14225 14226 8.32.6 VAX Operands 14227 ------------------- 14228 14229 The immediate character is `$' for Unix compatibility, not `#' as DEC 14230 writes it. 14231 14232 The indirect character is `*' for Unix compatibility, not `@' as DEC 14233 writes it. 14234 14235 The displacement sizing character is ``' (an accent grave) for Unix 14236 compatibility, not `^' as DEC writes it. The letter preceding ``' may 14237 have either case. `G' is not understood, but all other letters (`b i l 14238 s w') are understood. 14239 14240 Register names understood are `r0 r1 r2 ... r15 ap fp sp pc'. Upper 14241 and lower case letters are equivalent. 14242 14243 For instance 14244 tstb *w`$4(r5) 14245 14246 Any expression is permitted in an operand. Operands are comma 14247 separated. 14248 14249 14250 File: as.info, Node: VAX-no, Prev: VAX-operands, Up: Vax-Dependent 14251 14252 8.32.7 Not Supported on VAX 14253 --------------------------- 14254 14255 Vax bit fields can not be assembled with `as'. Someone can add the 14256 required code if they really need it. 14257 14258 14259 File: as.info, Node: V850-Dependent, Next: Xtensa-Dependent, Prev: TIC54X-Dependent, Up: Machine Dependencies 14260 14261 8.33 v850 Dependent Features 14262 ============================ 14263 14264 * Menu: 14265 14266 * V850 Options:: Options 14267 * V850 Syntax:: Syntax 14268 * V850 Floating Point:: Floating Point 14269 * V850 Directives:: V850 Machine Directives 14270 * V850 Opcodes:: Opcodes 14271 14272 14273 File: as.info, Node: V850 Options, Next: V850 Syntax, Up: V850-Dependent 14274 14275 8.33.1 Options 14276 -------------- 14277 14278 `as' supports the following additional command-line options for the 14279 V850 processor family: 14280 14281 `-wsigned_overflow' 14282 Causes warnings to be produced when signed immediate values 14283 overflow the space available for then within their opcodes. By 14284 default this option is disabled as it is possible to receive 14285 spurious warnings due to using exact bit patterns as immediate 14286 constants. 14287 14288 `-wunsigned_overflow' 14289 Causes warnings to be produced when unsigned immediate values 14290 overflow the space available for then within their opcodes. By 14291 default this option is disabled as it is possible to receive 14292 spurious warnings due to using exact bit patterns as immediate 14293 constants. 14294 14295 `-mv850' 14296 Specifies that the assembled code should be marked as being 14297 targeted at the V850 processor. This allows the linker to detect 14298 attempts to link such code with code assembled for other 14299 processors. 14300 14301 `-mv850e' 14302 Specifies that the assembled code should be marked as being 14303 targeted at the V850E processor. This allows the linker to detect 14304 attempts to link such code with code assembled for other 14305 processors. 14306 14307 `-mv850e1' 14308 Specifies that the assembled code should be marked as being 14309 targeted at the V850E1 processor. This allows the linker to 14310 detect attempts to link such code with code assembled for other 14311 processors. 14312 14313 `-mv850any' 14314 Specifies that the assembled code should be marked as being 14315 targeted at the V850 processor but support instructions that are 14316 specific to the extended variants of the process. This allows the 14317 production of binaries that contain target specific code, but 14318 which are also intended to be used in a generic fashion. For 14319 example libgcc.a contains generic routines used by the code 14320 produced by GCC for all versions of the v850 architecture, 14321 together with support routines only used by the V850E architecture. 14322 14323 `-mrelax' 14324 Enables relaxation. This allows the .longcall and .longjump pseudo 14325 ops to be used in the assembler source code. These ops label 14326 sections of code which are either a long function call or a long 14327 branch. The assembler will then flag these sections of code and 14328 the linker will attempt to relax them. 14329 14330 14331 14332 File: as.info, Node: V850 Syntax, Next: V850 Floating Point, Prev: V850 Options, Up: V850-Dependent 14333 14334 8.33.2 Syntax 14335 ------------- 14336 14337 * Menu: 14338 14339 * V850-Chars:: Special Characters 14340 * V850-Regs:: Register Names 14341 14342 14343 File: as.info, Node: V850-Chars, Next: V850-Regs, Up: V850 Syntax 14344 14345 8.33.2.1 Special Characters 14346 ........................... 14347 14348 `#' is the line comment character. 14349 14350 14351 File: as.info, Node: V850-Regs, Prev: V850-Chars, Up: V850 Syntax 14352 14353 8.33.2.2 Register Names 14354 ....................... 14355 14356 `as' supports the following names for registers: 14357 `general register 0' 14358 r0, zero 14359 14360 `general register 1' 14361 r1 14362 14363 `general register 2' 14364 r2, hp 14365 14366 `general register 3' 14367 r3, sp 14368 14369 `general register 4' 14370 r4, gp 14371 14372 `general register 5' 14373 r5, tp 14374 14375 `general register 6' 14376 r6 14377 14378 `general register 7' 14379 r7 14380 14381 `general register 8' 14382 r8 14383 14384 `general register 9' 14385 r9 14386 14387 `general register 10' 14388 r10 14389 14390 `general register 11' 14391 r11 14392 14393 `general register 12' 14394 r12 14395 14396 `general register 13' 14397 r13 14398 14399 `general register 14' 14400 r14 14401 14402 `general register 15' 14403 r15 14404 14405 `general register 16' 14406 r16 14407 14408 `general register 17' 14409 r17 14410 14411 `general register 18' 14412 r18 14413 14414 `general register 19' 14415 r19 14416 14417 `general register 20' 14418 r20 14419 14420 `general register 21' 14421 r21 14422 14423 `general register 22' 14424 r22 14425 14426 `general register 23' 14427 r23 14428 14429 `general register 24' 14430 r24 14431 14432 `general register 25' 14433 r25 14434 14435 `general register 26' 14436 r26 14437 14438 `general register 27' 14439 r27 14440 14441 `general register 28' 14442 r28 14443 14444 `general register 29' 14445 r29 14446 14447 `general register 30' 14448 r30, ep 14449 14450 `general register 31' 14451 r31, lp 14452 14453 `system register 0' 14454 eipc 14455 14456 `system register 1' 14457 eipsw 14458 14459 `system register 2' 14460 fepc 14461 14462 `system register 3' 14463 fepsw 14464 14465 `system register 4' 14466 ecr 14467 14468 `system register 5' 14469 psw 14470 14471 `system register 16' 14472 ctpc 14473 14474 `system register 17' 14475 ctpsw 14476 14477 `system register 18' 14478 dbpc 14479 14480 `system register 19' 14481 dbpsw 14482 14483 `system register 20' 14484 ctbp 14485 14486 14487 File: as.info, Node: V850 Floating Point, Next: V850 Directives, Prev: V850 Syntax, Up: V850-Dependent 14488 14489 8.33.3 Floating Point 14490 --------------------- 14491 14492 The V850 family uses IEEE floating-point numbers. 14493 14494 14495 File: as.info, Node: V850 Directives, Next: V850 Opcodes, Prev: V850 Floating Point, Up: V850-Dependent 14496 14497 8.33.4 V850 Machine Directives 14498 ------------------------------ 14499 14500 `.offset <EXPRESSION>' 14501 Moves the offset into the current section to the specified amount. 14502 14503 `.section "name", <type>' 14504 This is an extension to the standard .section directive. It sets 14505 the current section to be <type> and creates an alias for this 14506 section called "name". 14507 14508 `.v850' 14509 Specifies that the assembled code should be marked as being 14510 targeted at the V850 processor. This allows the linker to detect 14511 attempts to link such code with code assembled for other 14512 processors. 14513 14514 `.v850e' 14515 Specifies that the assembled code should be marked as being 14516 targeted at the V850E processor. This allows the linker to detect 14517 attempts to link such code with code assembled for other 14518 processors. 14519 14520 `.v850e1' 14521 Specifies that the assembled code should be marked as being 14522 targeted at the V850E1 processor. This allows the linker to 14523 detect attempts to link such code with code assembled for other 14524 processors. 14525 14526 14527 14528 File: as.info, Node: V850 Opcodes, Prev: V850 Directives, Up: V850-Dependent 14529 14530 8.33.5 Opcodes 14531 -------------- 14532 14533 `as' implements all the standard V850 opcodes. 14534 14535 `as' also implements the following pseudo ops: 14536 14537 `hi0()' 14538 Computes the higher 16 bits of the given expression and stores it 14539 into the immediate operand field of the given instruction. For 14540 example: 14541 14542 `mulhi hi0(here - there), r5, r6' 14543 14544 computes the difference between the address of labels 'here' and 14545 'there', takes the upper 16 bits of this difference, shifts it 14546 down 16 bits and then mutliplies it by the lower 16 bits in 14547 register 5, putting the result into register 6. 14548 14549 `lo()' 14550 Computes the lower 16 bits of the given expression and stores it 14551 into the immediate operand field of the given instruction. For 14552 example: 14553 14554 `addi lo(here - there), r5, r6' 14555 14556 computes the difference between the address of labels 'here' and 14557 'there', takes the lower 16 bits of this difference and adds it to 14558 register 5, putting the result into register 6. 14559 14560 `hi()' 14561 Computes the higher 16 bits of the given expression and then adds 14562 the value of the most significant bit of the lower 16 bits of the 14563 expression and stores the result into the immediate operand field 14564 of the given instruction. For example the following code can be 14565 used to compute the address of the label 'here' and store it into 14566 register 6: 14567 14568 `movhi hi(here), r0, r6' `movea lo(here), r6, r6' 14569 14570 The reason for this special behaviour is that movea performs a sign 14571 extension on its immediate operand. So for example if the address 14572 of 'here' was 0xFFFFFFFF then without the special behaviour of the 14573 hi() pseudo-op the movhi instruction would put 0xFFFF0000 into r6, 14574 then the movea instruction would takes its immediate operand, 14575 0xFFFF, sign extend it to 32 bits, 0xFFFFFFFF, and then add it 14576 into r6 giving 0xFFFEFFFF which is wrong (the fifth nibble is E). 14577 With the hi() pseudo op adding in the top bit of the lo() pseudo 14578 op, the movhi instruction actually stores 0 into r6 (0xFFFF + 1 = 14579 0x0000), so that the movea instruction stores 0xFFFFFFFF into r6 - 14580 the right value. 14581 14582 `hilo()' 14583 Computes the 32 bit value of the given expression and stores it 14584 into the immediate operand field of the given instruction (which 14585 must be a mov instruction). For example: 14586 14587 `mov hilo(here), r6' 14588 14589 computes the absolute address of label 'here' and puts the result 14590 into register 6. 14591 14592 `sdaoff()' 14593 Computes the offset of the named variable from the start of the 14594 Small Data Area (whoes address is held in register 4, the GP 14595 register) and stores the result as a 16 bit signed value in the 14596 immediate operand field of the given instruction. For example: 14597 14598 `ld.w sdaoff(_a_variable)[gp],r6' 14599 14600 loads the contents of the location pointed to by the label 14601 '_a_variable' into register 6, provided that the label is located 14602 somewhere within +/- 32K of the address held in the GP register. 14603 [Note the linker assumes that the GP register contains a fixed 14604 address set to the address of the label called '__gp'. This can 14605 either be set up automatically by the linker, or specifically set 14606 by using the `--defsym __gp=<value>' command line option]. 14607 14608 `tdaoff()' 14609 Computes the offset of the named variable from the start of the 14610 Tiny Data Area (whoes address is held in register 30, the EP 14611 register) and stores the result as a 4,5, 7 or 8 bit unsigned 14612 value in the immediate operand field of the given instruction. 14613 For example: 14614 14615 `sld.w tdaoff(_a_variable)[ep],r6' 14616 14617 loads the contents of the location pointed to by the label 14618 '_a_variable' into register 6, provided that the label is located 14619 somewhere within +256 bytes of the address held in the EP 14620 register. [Note the linker assumes that the EP register contains 14621 a fixed address set to the address of the label called '__ep'. 14622 This can either be set up automatically by the linker, or 14623 specifically set by using the `--defsym __ep=<value>' command line 14624 option]. 14625 14626 `zdaoff()' 14627 Computes the offset of the named variable from address 0 and 14628 stores the result as a 16 bit signed value in the immediate 14629 operand field of the given instruction. For example: 14630 14631 `movea zdaoff(_a_variable),zero,r6' 14632 14633 puts the address of the label '_a_variable' into register 6, 14634 assuming that the label is somewhere within the first 32K of 14635 memory. (Strictly speaking it also possible to access the last 14636 32K of memory as well, as the offsets are signed). 14637 14638 `ctoff()' 14639 Computes the offset of the named variable from the start of the 14640 Call Table Area (whoes address is helg in system register 20, the 14641 CTBP register) and stores the result a 6 or 16 bit unsigned value 14642 in the immediate field of then given instruction or piece of data. 14643 For example: 14644 14645 `callt ctoff(table_func1)' 14646 14647 will put the call the function whoes address is held in the call 14648 table at the location labeled 'table_func1'. 14649 14650 `.longcall `name'' 14651 Indicates that the following sequence of instructions is a long 14652 call to function `name'. The linker will attempt to shorten this 14653 call sequence if `name' is within a 22bit offset of the call. Only 14654 valid if the `-mrelax' command line switch has been enabled. 14655 14656 `.longjump `name'' 14657 Indicates that the following sequence of instructions is a long 14658 jump to label `name'. The linker will attempt to shorten this code 14659 sequence if `name' is within a 22bit offset of the jump. Only 14660 valid if the `-mrelax' command line switch has been enabled. 14661 14662 14663 For information on the V850 instruction set, see `V850 Family 14664 32-/16-Bit single-Chip Microcontroller Architecture Manual' from NEC. 14665 Ltd. 14666 14667 14668 File: as.info, Node: Xtensa-Dependent, Next: Z80-Dependent, Prev: V850-Dependent, Up: Machine Dependencies 14669 14670 8.34 Xtensa Dependent Features 14671 ============================== 14672 14673 This chapter covers features of the GNU assembler that are specific 14674 to the Xtensa architecture. For details about the Xtensa instruction 14675 set, please consult the `Xtensa Instruction Set Architecture (ISA) 14676 Reference Manual'. 14677 14678 * Menu: 14679 14680 * Xtensa Options:: Command-line Options. 14681 * Xtensa Syntax:: Assembler Syntax for Xtensa Processors. 14682 * Xtensa Optimizations:: Assembler Optimizations. 14683 * Xtensa Relaxation:: Other Automatic Transformations. 14684 * Xtensa Directives:: Directives for Xtensa Processors. 14685 14686 14687 File: as.info, Node: Xtensa Options, Next: Xtensa Syntax, Up: Xtensa-Dependent 14688 14689 8.34.1 Command Line Options 14690 --------------------------- 14691 14692 The Xtensa version of the GNU assembler supports these special options: 14693 14694 `--text-section-literals | --no-text-section-literals' 14695 Control the treatment of literal pools. The default is 14696 `--no-text-section-literals', which places literals in a separate 14697 section in the output file. This allows the literal pool to be 14698 placed in a data RAM/ROM. With `--text-section-literals', the 14699 literals are interspersed in the text section in order to keep 14700 them as close as possible to their references. This may be 14701 necessary for large assembly files, where the literals would 14702 otherwise be out of range of the `L32R' instructions in the text 14703 section. These options only affect literals referenced via 14704 PC-relative `L32R' instructions; literals for absolute mode `L32R' 14705 instructions are handled separately. 14706 14707 `--absolute-literals | --no-absolute-literals' 14708 Indicate to the assembler whether `L32R' instructions use absolute 14709 or PC-relative addressing. If the processor includes the absolute 14710 addressing option, the default is to use absolute `L32R' 14711 relocations. Otherwise, only the PC-relative `L32R' relocations 14712 can be used. 14713 14714 `--target-align | --no-target-align' 14715 Enable or disable automatic alignment to reduce branch penalties 14716 at some expense in code size. *Note Automatic Instruction 14717 Alignment: Xtensa Automatic Alignment. This optimization is 14718 enabled by default. Note that the assembler will always align 14719 instructions like `LOOP' that have fixed alignment requirements. 14720 14721 `--longcalls | --no-longcalls' 14722 Enable or disable transformation of call instructions to allow 14723 calls across a greater range of addresses. *Note Function Call 14724 Relaxation: Xtensa Call Relaxation. This option should be used 14725 when call targets can potentially be out of range. It may degrade 14726 both code size and performance, but the linker can generally 14727 optimize away the unnecessary overhead when a call ends up within 14728 range. The default is `--no-longcalls'. 14729 14730 `--transform | --no-transform' 14731 Enable or disable all assembler transformations of Xtensa 14732 instructions, including both relaxation and optimization. The 14733 default is `--transform'; `--no-transform' should only be used in 14734 the rare cases when the instructions must be exactly as specified 14735 in the assembly source. Using `--no-transform' causes out of range 14736 instruction operands to be errors. 14737 14738 `--rename-section OLDNAME=NEWNAME' 14739 Rename the OLDNAME section to NEWNAME. This option can be used 14740 multiple times to rename multiple sections. 14741 14742 14743 File: as.info, Node: Xtensa Syntax, Next: Xtensa Optimizations, Prev: Xtensa Options, Up: Xtensa-Dependent 14744 14745 8.34.2 Assembler Syntax 14746 ----------------------- 14747 14748 Block comments are delimited by `/*' and `*/'. End of line comments 14749 may be introduced with either `#' or `//'. 14750 14751 Instructions consist of a leading opcode or macro name followed by 14752 whitespace and an optional comma-separated list of operands: 14753 14754 OPCODE [OPERAND, ...] 14755 14756 Instructions must be separated by a newline or semicolon. 14757 14758 FLIX instructions, which bundle multiple opcodes together in a single 14759 instruction, are specified by enclosing the bundled opcodes inside 14760 braces: 14761 14762 { 14763 [FORMAT] 14764 OPCODE0 [OPERANDS] 14765 OPCODE1 [OPERANDS] 14766 OPCODE2 [OPERANDS] 14767 ... 14768 } 14769 14770 The opcodes in a FLIX instruction are listed in the same order as the 14771 corresponding instruction slots in the TIE format declaration. 14772 Directives and labels are not allowed inside the braces of a FLIX 14773 instruction. A particular TIE format name can optionally be specified 14774 immediately after the opening brace, but this is usually unnecessary. 14775 The assembler will automatically search for a format that can encode the 14776 specified opcodes, so the format name need only be specified in rare 14777 cases where there is more than one applicable format and where it 14778 matters which of those formats is used. A FLIX instruction can also be 14779 specified on a single line by separating the opcodes with semicolons: 14780 14781 { [FORMAT;] OPCODE0 [OPERANDS]; OPCODE1 [OPERANDS]; OPCODE2 [OPERANDS]; ... } 14782 14783 The assembler can automatically bundle opcodes into FLIX 14784 instructions. It encodes the opcodes in order, one at a time, choosing 14785 the smallest format where each opcode can be encoded and filling unused 14786 instruction slots with no-ops. 14787 14788 * Menu: 14789 14790 * Xtensa Opcodes:: Opcode Naming Conventions. 14791 * Xtensa Registers:: Register Naming. 14792 14793 14794 File: as.info, Node: Xtensa Opcodes, Next: Xtensa Registers, Up: Xtensa Syntax 14795 14796 8.34.2.1 Opcode Names 14797 ..................... 14798 14799 See the `Xtensa Instruction Set Architecture (ISA) Reference Manual' 14800 for a complete list of opcodes and descriptions of their semantics. 14801 14802 If an opcode name is prefixed with an underscore character (`_'), 14803 `as' will not transform that instruction in any way. The underscore 14804 prefix disables both optimization (*note Xtensa Optimizations: Xtensa 14805 Optimizations.) and relaxation (*note Xtensa Relaxation: Xtensa 14806 Relaxation.) for that particular instruction. Only use the underscore 14807 prefix when it is essential to select the exact opcode produced by the 14808 assembler. Using this feature unnecessarily makes the code less 14809 efficient by disabling assembler optimization and less flexible by 14810 disabling relaxation. 14811 14812 Note that this special handling of underscore prefixes only applies 14813 to Xtensa opcodes, not to either built-in macros or user-defined macros. 14814 When an underscore prefix is used with a macro (e.g., `_MOV'), it 14815 refers to a different macro. The assembler generally provides built-in 14816 macros both with and without the underscore prefix, where the underscore 14817 versions behave as if the underscore carries through to the instructions 14818 in the macros. For example, `_MOV' may expand to `_MOV.N'. 14819 14820 The underscore prefix only applies to individual instructions, not to 14821 series of instructions. For example, if a series of instructions have 14822 underscore prefixes, the assembler will not transform the individual 14823 instructions, but it may insert other instructions between them (e.g., 14824 to align a `LOOP' instruction). To prevent the assembler from 14825 modifying a series of instructions as a whole, use the `no-transform' 14826 directive. *Note transform: Transform Directive. 14827 14828 14829 File: as.info, Node: Xtensa Registers, Prev: Xtensa Opcodes, Up: Xtensa Syntax 14830 14831 8.34.2.2 Register Names 14832 ....................... 14833 14834 The assembly syntax for a register file entry is the "short" name for a 14835 TIE register file followed by the index into that register file. For 14836 example, the general-purpose `AR' register file has a short name of 14837 `a', so these registers are named `a0'...`a15'. As a special feature, 14838 `sp' is also supported as a synonym for `a1'. Additional registers may 14839 be added by processor configuration options and by designer-defined TIE 14840 extensions. An initial `$' character is optional in all register names. 14841 14842 14843 File: as.info, Node: Xtensa Optimizations, Next: Xtensa Relaxation, Prev: Xtensa Syntax, Up: Xtensa-Dependent 14844 14845 8.34.3 Xtensa Optimizations 14846 --------------------------- 14847 14848 The optimizations currently supported by `as' are generation of density 14849 instructions where appropriate and automatic branch target alignment. 14850 14851 * Menu: 14852 14853 * Density Instructions:: Using Density Instructions. 14854 * Xtensa Automatic Alignment:: Automatic Instruction Alignment. 14855 14856 14857 File: as.info, Node: Density Instructions, Next: Xtensa Automatic Alignment, Up: Xtensa Optimizations 14858 14859 8.34.3.1 Using Density Instructions 14860 ................................... 14861 14862 The Xtensa instruction set has a code density option that provides 14863 16-bit versions of some of the most commonly used opcodes. Use of these 14864 opcodes can significantly reduce code size. When possible, the 14865 assembler automatically translates instructions from the core Xtensa 14866 instruction set into equivalent instructions from the Xtensa code 14867 density option. This translation can be disabled by using underscore 14868 prefixes (*note Opcode Names: Xtensa Opcodes.), by using the 14869 `--no-transform' command-line option (*note Command Line Options: 14870 Xtensa Options.), or by using the `no-transform' directive (*note 14871 transform: Transform Directive.). 14872 14873 It is a good idea _not_ to use the density instructions directly. 14874 The assembler will automatically select dense instructions where 14875 possible. If you later need to use an Xtensa processor without the code 14876 density option, the same assembly code will then work without 14877 modification. 14878 14879 14880 File: as.info, Node: Xtensa Automatic Alignment, Prev: Density Instructions, Up: Xtensa Optimizations 14881 14882 8.34.3.2 Automatic Instruction Alignment 14883 ........................................ 14884 14885 The Xtensa assembler will automatically align certain instructions, both 14886 to optimize performance and to satisfy architectural requirements. 14887 14888 As an optimization to improve performance, the assembler attempts to 14889 align branch targets so they do not cross instruction fetch boundaries. 14890 (Xtensa processors can be configured with either 32-bit or 64-bit 14891 instruction fetch widths.) An instruction immediately following a call 14892 is treated as a branch target in this context, because it will be the 14893 target of a return from the call. This alignment has the potential to 14894 reduce branch penalties at some expense in code size. The assembler 14895 will not attempt to align labels with the prefixes `.Ln' and `.LM', 14896 since these labels are used for debugging information and are not 14897 typically branch targets. This optimization is enabled by default. 14898 You can disable it with the `--no-target-align' command-line option 14899 (*note Command Line Options: Xtensa Options.). 14900 14901 The target alignment optimization is done without adding instructions 14902 that could increase the execution time of the program. If there are 14903 density instructions in the code preceding a target, the assembler can 14904 change the target alignment by widening some of those instructions to 14905 the equivalent 24-bit instructions. Extra bytes of padding can be 14906 inserted immediately following unconditional jump and return 14907 instructions. This approach is usually successful in aligning many, 14908 but not all, branch targets. 14909 14910 The `LOOP' family of instructions must be aligned such that the 14911 first instruction in the loop body does not cross an instruction fetch 14912 boundary (e.g., with a 32-bit fetch width, a `LOOP' instruction must be 14913 on either a 1 or 2 mod 4 byte boundary). The assembler knows about 14914 this restriction and inserts the minimal number of 2 or 3 byte no-op 14915 instructions to satisfy it. When no-op instructions are added, any 14916 label immediately preceding the original loop will be moved in order to 14917 refer to the loop instruction, not the newly generated no-op 14918 instruction. To preserve binary compatibility across processors with 14919 different fetch widths, the assembler conservatively assumes a 32-bit 14920 fetch width when aligning `LOOP' instructions (except if the first 14921 instruction in the loop is a 64-bit instruction). 14922 14923 Similarly, the `ENTRY' instruction must be aligned on a 0 mod 4 byte 14924 boundary. The assembler satisfies this requirement by inserting zero 14925 bytes when required. In addition, labels immediately preceding the 14926 `ENTRY' instruction will be moved to the newly aligned instruction 14927 location. 14928 14929 14930 File: as.info, Node: Xtensa Relaxation, Next: Xtensa Directives, Prev: Xtensa Optimizations, Up: Xtensa-Dependent 14931 14932 8.34.4 Xtensa Relaxation 14933 ------------------------ 14934 14935 When an instruction operand is outside the range allowed for that 14936 particular instruction field, `as' can transform the code to use a 14937 functionally-equivalent instruction or sequence of instructions. This 14938 process is known as "relaxation". This is typically done for branch 14939 instructions because the distance of the branch targets is not known 14940 until assembly-time. The Xtensa assembler offers branch relaxation and 14941 also extends this concept to function calls, `MOVI' instructions and 14942 other instructions with immediate fields. 14943 14944 * Menu: 14945 14946 * Xtensa Branch Relaxation:: Relaxation of Branches. 14947 * Xtensa Call Relaxation:: Relaxation of Function Calls. 14948 * Xtensa Immediate Relaxation:: Relaxation of other Immediate Fields. 14949 14950 14951 File: as.info, Node: Xtensa Branch Relaxation, Next: Xtensa Call Relaxation, Up: Xtensa Relaxation 14952 14953 8.34.4.1 Conditional Branch Relaxation 14954 ...................................... 14955 14956 When the target of a branch is too far away from the branch itself, 14957 i.e., when the offset from the branch to the target is too large to fit 14958 in the immediate field of the branch instruction, it may be necessary to 14959 replace the branch with a branch around a jump. For example, 14960 14961 beqz a2, L 14962 14963 may result in: 14964 14965 bnez.n a2, M 14966 j L 14967 M: 14968 14969 (The `BNEZ.N' instruction would be used in this example only if the 14970 density option is available. Otherwise, `BNEZ' would be used.) 14971 14972 This relaxation works well because the unconditional jump instruction 14973 has a much larger offset range than the various conditional branches. 14974 However, an error will occur if a branch target is beyond the range of a 14975 jump instruction. `as' cannot relax unconditional jumps. Similarly, 14976 an error will occur if the original input contains an unconditional 14977 jump to a target that is out of range. 14978 14979 Branch relaxation is enabled by default. It can be disabled by using 14980 underscore prefixes (*note Opcode Names: Xtensa Opcodes.), the 14981 `--no-transform' command-line option (*note Command Line Options: 14982 Xtensa Options.), or the `no-transform' directive (*note transform: 14983 Transform Directive.). 14984 14985 14986 File: as.info, Node: Xtensa Call Relaxation, Next: Xtensa Immediate Relaxation, Prev: Xtensa Branch Relaxation, Up: Xtensa Relaxation 14987 14988 8.34.4.2 Function Call Relaxation 14989 ................................. 14990 14991 Function calls may require relaxation because the Xtensa immediate call 14992 instructions (`CALL0', `CALL4', `CALL8' and `CALL12') provide a 14993 PC-relative offset of only 512 Kbytes in either direction. For larger 14994 programs, it may be necessary to use indirect calls (`CALLX0', 14995 `CALLX4', `CALLX8' and `CALLX12') where the target address is specified 14996 in a register. The Xtensa assembler can automatically relax immediate 14997 call instructions into indirect call instructions. This relaxation is 14998 done by loading the address of the called function into the callee's 14999 return address register and then using a `CALLX' instruction. So, for 15000 example: 15001 15002 call8 func 15003 15004 might be relaxed to: 15005 15006 .literal .L1, func 15007 l32r a8, .L1 15008 callx8 a8 15009 15010 Because the addresses of targets of function calls are not generally 15011 known until link-time, the assembler must assume the worst and relax all 15012 the calls to functions in other source files, not just those that really 15013 will be out of range. The linker can recognize calls that were 15014 unnecessarily relaxed, and it will remove the overhead introduced by the 15015 assembler for those cases where direct calls are sufficient. 15016 15017 Call relaxation is disabled by default because it can have a negative 15018 effect on both code size and performance, although the linker can 15019 usually eliminate the unnecessary overhead. If a program is too large 15020 and some of the calls are out of range, function call relaxation can be 15021 enabled using the `--longcalls' command-line option or the `longcalls' 15022 directive (*note longcalls: Longcalls Directive.). 15023 15024 15025 File: as.info, Node: Xtensa Immediate Relaxation, Prev: Xtensa Call Relaxation, Up: Xtensa Relaxation 15026 15027 8.34.4.3 Other Immediate Field Relaxation 15028 ......................................... 15029 15030 The assembler normally performs the following other relaxations. They 15031 can be disabled by using underscore prefixes (*note Opcode Names: 15032 Xtensa Opcodes.), the `--no-transform' command-line option (*note 15033 Command Line Options: Xtensa Options.), or the `no-transform' directive 15034 (*note transform: Transform Directive.). 15035 15036 The `MOVI' machine instruction can only materialize values in the 15037 range from -2048 to 2047. Values outside this range are best 15038 materialized with `L32R' instructions. Thus: 15039 15040 movi a0, 100000 15041 15042 is assembled into the following machine code: 15043 15044 .literal .L1, 100000 15045 l32r a0, .L1 15046 15047 The `L8UI' machine instruction can only be used with immediate 15048 offsets in the range from 0 to 255. The `L16SI' and `L16UI' machine 15049 instructions can only be used with offsets from 0 to 510. The `L32I' 15050 machine instruction can only be used with offsets from 0 to 1020. A 15051 load offset outside these ranges can be materalized with an `L32R' 15052 instruction if the destination register of the load is different than 15053 the source address register. For example: 15054 15055 l32i a1, a0, 2040 15056 15057 is translated to: 15058 15059 .literal .L1, 2040 15060 l32r a1, .L1 15061 addi a1, a0, a1 15062 l32i a1, a1, 0 15063 15064 If the load destination and source address register are the same, an 15065 out-of-range offset causes an error. 15066 15067 The Xtensa `ADDI' instruction only allows immediate operands in the 15068 range from -128 to 127. There are a number of alternate instruction 15069 sequences for the `ADDI' operation. First, if the immediate is 0, the 15070 `ADDI' will be turned into a `MOV.N' instruction (or the equivalent 15071 `OR' instruction if the code density option is not available). If the 15072 `ADDI' immediate is outside of the range -128 to 127, but inside the 15073 range -32896 to 32639, an `ADDMI' instruction or `ADDMI'/`ADDI' 15074 sequence will be used. Finally, if the immediate is outside of this 15075 range and a free register is available, an `L32R'/`ADD' sequence will 15076 be used with a literal allocated from the literal pool. 15077 15078 For example: 15079 15080 addi a5, a6, 0 15081 addi a5, a6, 512 15082 addi a5, a6, 513 15083 addi a5, a6, 50000 15084 15085 is assembled into the following: 15086 15087 .literal .L1, 50000 15088 mov.n a5, a6 15089 addmi a5, a6, 0x200 15090 addmi a5, a6, 0x200 15091 addi a5, a5, 1 15092 l32r a5, .L1 15093 add a5, a6, a5 15094 15095 15096 File: as.info, Node: Xtensa Directives, Prev: Xtensa Relaxation, Up: Xtensa-Dependent 15097 15098 8.34.5 Directives 15099 ----------------- 15100 15101 The Xtensa assember supports a region-based directive syntax: 15102 15103 .begin DIRECTIVE [OPTIONS] 15104 ... 15105 .end DIRECTIVE 15106 15107 All the Xtensa-specific directives that apply to a region of code use 15108 this syntax. 15109 15110 The directive applies to code between the `.begin' and the `.end'. 15111 The state of the option after the `.end' reverts to what it was before 15112 the `.begin'. A nested `.begin'/`.end' region can further change the 15113 state of the directive without having to be aware of its outer state. 15114 For example, consider: 15115 15116 .begin no-transform 15117 L: add a0, a1, a2 15118 .begin transform 15119 M: add a0, a1, a2 15120 .end transform 15121 N: add a0, a1, a2 15122 .end no-transform 15123 15124 The `ADD' opcodes at `L' and `N' in the outer `no-transform' region 15125 both result in `ADD' machine instructions, but the assembler selects an 15126 `ADD.N' instruction for the `ADD' at `M' in the inner `transform' 15127 region. 15128 15129 The advantage of this style is that it works well inside macros 15130 which can preserve the context of their callers. 15131 15132 The following directives are available: 15133 15134 * Menu: 15135 15136 * Schedule Directive:: Enable instruction scheduling. 15137 * Longcalls Directive:: Use Indirect Calls for Greater Range. 15138 * Transform Directive:: Disable All Assembler Transformations. 15139 * Literal Directive:: Intermix Literals with Instructions. 15140 * Literal Position Directive:: Specify Inline Literal Pool Locations. 15141 * Literal Prefix Directive:: Specify Literal Section Name Prefix. 15142 * Absolute Literals Directive:: Control PC-Relative vs. Absolute Literals. 15143 15144 15145 File: as.info, Node: Schedule Directive, Next: Longcalls Directive, Up: Xtensa Directives 15146 15147 8.34.5.1 schedule 15148 ................. 15149 15150 The `schedule' directive is recognized only for compatibility with 15151 Tensilica's assembler. 15152 15153 .begin [no-]schedule 15154 .end [no-]schedule 15155 15156 This directive is ignored and has no effect on `as'. 15157 15158 15159 File: as.info, Node: Longcalls Directive, Next: Transform Directive, Prev: Schedule Directive, Up: Xtensa Directives 15160 15161 8.34.5.2 longcalls 15162 .................. 15163 15164 The `longcalls' directive enables or disables function call relaxation. 15165 *Note Function Call Relaxation: Xtensa Call Relaxation. 15166 15167 .begin [no-]longcalls 15168 .end [no-]longcalls 15169 15170 Call relaxation is disabled by default unless the `--longcalls' 15171 command-line option is specified. The `longcalls' directive overrides 15172 the default determined by the command-line options. 15173 15174 15175 File: as.info, Node: Transform Directive, Next: Literal Directive, Prev: Longcalls Directive, Up: Xtensa Directives 15176 15177 8.34.5.3 transform 15178 .................. 15179 15180 This directive enables or disables all assembler transformation, 15181 including relaxation (*note Xtensa Relaxation: Xtensa Relaxation.) and 15182 optimization (*note Xtensa Optimizations: Xtensa Optimizations.). 15183 15184 .begin [no-]transform 15185 .end [no-]transform 15186 15187 Transformations are enabled by default unless the `--no-transform' 15188 option is used. The `transform' directive overrides the default 15189 determined by the command-line options. An underscore opcode prefix, 15190 disabling transformation of that opcode, always takes precedence over 15191 both directives and command-line flags. 15192 15193 15194 File: as.info, Node: Literal Directive, Next: Literal Position Directive, Prev: Transform Directive, Up: Xtensa Directives 15195 15196 8.34.5.4 literal 15197 ................ 15198 15199 The `.literal' directive is used to define literal pool data, i.e., 15200 read-only 32-bit data accessed via `L32R' instructions. 15201 15202 .literal LABEL, VALUE[, VALUE...] 15203 15204 This directive is similar to the standard `.word' directive, except 15205 that the actual location of the literal data is determined by the 15206 assembler and linker, not by the position of the `.literal' directive. 15207 Using this directive gives the assembler freedom to locate the literal 15208 data in the most appropriate place and possibly to combine identical 15209 literals. For example, the code: 15210 15211 entry sp, 40 15212 .literal .L1, sym 15213 l32r a4, .L1 15214 15215 can be used to load a pointer to the symbol `sym' into register 15216 `a4'. The value of `sym' will not be placed between the `ENTRY' and 15217 `L32R' instructions; instead, the assembler puts the data in a literal 15218 pool. 15219 15220 Literal pools for absolute mode `L32R' instructions (*note Absolute 15221 Literals Directive::) are placed in a separate `.lit4' section. By 15222 default literal pools for PC-relative mode `L32R' instructions are 15223 placed in a separate `.literal' section; however, when using the 15224 `--text-section-literals' option (*note Command Line Options: Xtensa 15225 Options.), the literal pools are placed in the current section. These 15226 text section literal pools are created automatically before `ENTRY' 15227 instructions and manually after `.literal_position' directives (*note 15228 literal_position: Literal Position Directive.). If there are no 15229 preceding `ENTRY' instructions, explicit `.literal_position' directives 15230 must be used to place the text section literal pools; otherwise, `as' 15231 will report an error. 15232 15233 15234 File: as.info, Node: Literal Position Directive, Next: Literal Prefix Directive, Prev: Literal Directive, Up: Xtensa Directives 15235 15236 8.34.5.5 literal_position 15237 ......................... 15238 15239 When using `--text-section-literals' to place literals inline in the 15240 section being assembled, the `.literal_position' directive can be used 15241 to mark a potential location for a literal pool. 15242 15243 .literal_position 15244 15245 The `.literal_position' directive is ignored when the 15246 `--text-section-literals' option is not used or when `L32R' 15247 instructions use the absolute addressing mode. 15248 15249 The assembler will automatically place text section literal pools 15250 before `ENTRY' instructions, so the `.literal_position' directive is 15251 only needed to specify some other location for a literal pool. You may 15252 need to add an explicit jump instruction to skip over an inline literal 15253 pool. 15254 15255 For example, an interrupt vector does not begin with an `ENTRY' 15256 instruction so the assembler will be unable to automatically find a good 15257 place to put a literal pool. Moreover, the code for the interrupt 15258 vector must be at a specific starting address, so the literal pool 15259 cannot come before the start of the code. The literal pool for the 15260 vector must be explicitly positioned in the middle of the vector (before 15261 any uses of the literals, due to the negative offsets used by 15262 PC-relative `L32R' instructions). The `.literal_position' directive 15263 can be used to do this. In the following code, the literal for `M' 15264 will automatically be aligned correctly and is placed after the 15265 unconditional jump. 15266 15267 .global M 15268 code_start: 15269 j continue 15270 .literal_position 15271 .align 4 15272 continue: 15273 movi a4, M 15274 15275 15276 File: as.info, Node: Literal Prefix Directive, Next: Absolute Literals Directive, Prev: Literal Position Directive, Up: Xtensa Directives 15277 15278 8.34.5.6 literal_prefix 15279 ....................... 15280 15281 The `literal_prefix' directive allows you to specify different sections 15282 to hold literals from different portions of an assembly file. With 15283 this directive, a single assembly file can be used to generate code 15284 into multiple sections, including literals generated by the assembler. 15285 15286 .begin literal_prefix [NAME] 15287 .end literal_prefix 15288 15289 By default the assembler places literal pools in sections separate 15290 from the instructions, using the default literal section names of 15291 `.literal' for PC-relative mode `L32R' instructions and `.lit4' for 15292 absolute mode `L32R' instructions (*note Absolute Literals 15293 Directive::). The `literal_prefix' directive causes different literal 15294 sections to be used for the code inside the delimited region. The new 15295 literal sections are determined by including NAME as a prefix to the 15296 default literal section names. If the NAME argument is omitted, the 15297 literal sections revert to the defaults. This directive has no effect 15298 when using the `--text-section-literals' option (*note Command Line 15299 Options: Xtensa Options.). 15300 15301 Except for two special cases, the assembler determines the new 15302 literal sections by simply prepending NAME to the default section names, 15303 resulting in `NAME.literal' and `NAME.lit4' sections. The 15304 `literal_prefix' directive is often used with the name of the current 15305 text section as the prefix argument. To facilitate this usage, the 15306 assembler uses special case rules when it recognizes NAME as a text 15307 section name. First, if NAME ends with `.text', that suffix is not 15308 included in the literal section name. For example, if NAME is 15309 `.iram0.text', then the literal sections will be `.iram0.literal' and 15310 `.iram0.lit4'. Second, if NAME begins with `.gnu.linkonce.t.', then 15311 the literal section names are formed by replacing the `.t' substring 15312 with `.literal' and `.lit4'. For example, if NAME is 15313 `.gnu.linkonce.t.func', the literal sections will be 15314 `.gnu.linkonce.literal.func' and `.gnu.linkonce.lit4.func'. 15315 15316 15317 File: as.info, Node: Absolute Literals Directive, Prev: Literal Prefix Directive, Up: Xtensa Directives 15318 15319 8.34.5.7 absolute-literals 15320 .......................... 15321 15322 The `absolute-literals' and `no-absolute-literals' directives control 15323 the absolute vs. PC-relative mode for `L32R' instructions. These are 15324 relevant only for Xtensa configurations that include the absolute 15325 addressing option for `L32R' instructions. 15326 15327 .begin [no-]absolute-literals 15328 .end [no-]absolute-literals 15329 15330 These directives do not change the `L32R' mode--they only cause the 15331 assembler to emit the appropriate kind of relocation for `L32R' 15332 instructions and to place the literal values in the appropriate section. 15333 To change the `L32R' mode, the program must write the `LITBASE' special 15334 register. It is the programmer's responsibility to keep track of the 15335 mode and indicate to the assembler which mode is used in each region of 15336 code. 15337 15338 If the Xtensa configuration includes the absolute `L32R' addressing 15339 option, the default is to assume absolute `L32R' addressing unless the 15340 `--no-absolute-literals' command-line option is specified. Otherwise, 15341 the default is to assume PC-relative `L32R' addressing. The 15342 `absolute-literals' directive can then be used to override the default 15343 determined by the command-line options. 15344 15345 15346 File: as.info, Node: Reporting Bugs, Next: Acknowledgements, Prev: Machine Dependencies, Up: Top 15347 15348 9 Reporting Bugs 15349 **************** 15350 15351 Your bug reports play an essential role in making `as' reliable. 15352 15353 Reporting a bug may help you by bringing a solution to your problem, 15354 or it may not. But in any case the principal function of a bug report 15355 is to help the entire community by making the next version of `as' work 15356 better. Bug reports are your contribution to the maintenance of `as'. 15357 15358 In order for a bug report to serve its purpose, you must include the 15359 information that enables us to fix the bug. 15360 15361 * Menu: 15362 15363 * Bug Criteria:: Have you found a bug? 15364 * Bug Reporting:: How to report bugs 15365 15366 15367 File: as.info, Node: Bug Criteria, Next: Bug Reporting, Up: Reporting Bugs 15368 15369 9.1 Have You Found a Bug? 15370 ========================= 15371 15372 If you are not sure whether you have found a bug, here are some 15373 guidelines: 15374 15375 * If the assembler gets a fatal signal, for any input whatever, that 15376 is a `as' bug. Reliable assemblers never crash. 15377 15378 * If `as' produces an error message for valid input, that is a bug. 15379 15380 * If `as' does not produce an error message for invalid input, that 15381 is a bug. However, you should note that your idea of "invalid 15382 input" might be our idea of "an extension" or "support for 15383 traditional practice". 15384 15385 * If you are an experienced user of assemblers, your suggestions for 15386 improvement of `as' are welcome in any case. 15387 15388 15389 File: as.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Reporting Bugs 15390 15391 9.2 How to Report Bugs 15392 ====================== 15393 15394 A number of companies and individuals offer support for GNU products. 15395 If you obtained `as' from a support organization, we recommend you 15396 contact that organization first. 15397 15398 You can find contact information for many support companies and 15399 individuals in the file `etc/SERVICE' in the GNU Emacs distribution. 15400 15401 In any event, we also recommend that you send bug reports for `as' 15402 to `bug-binutils (a] gnu.org'. 15403 15404 The fundamental principle of reporting bugs usefully is this: 15405 *report all the facts*. If you are not sure whether to state a fact or 15406 leave it out, state it! 15407 15408 Often people omit facts because they think they know what causes the 15409 problem and assume that some details do not matter. Thus, you might 15410 assume that the name of a symbol you use in an example does not matter. 15411 Well, probably it does not, but one cannot be sure. Perhaps the bug 15412 is a stray memory reference which happens to fetch from the location 15413 where that name is stored in memory; perhaps, if the name were 15414 different, the contents of that location would fool the assembler into 15415 doing the right thing despite the bug. Play it safe and give a 15416 specific, complete example. That is the easiest thing for you to do, 15417 and the most helpful. 15418 15419 Keep in mind that the purpose of a bug report is to enable us to fix 15420 the bug if it is new to us. Therefore, always write your bug reports 15421 on the assumption that the bug has not been reported previously. 15422 15423 Sometimes people give a few sketchy facts and ask, "Does this ring a 15424 bell?" This cannot help us fix a bug, so it is basically useless. We 15425 respond by asking for enough details to enable us to investigate. You 15426 might as well expedite matters by sending them to begin with. 15427 15428 To enable us to fix the bug, you should include all these things: 15429 15430 * The version of `as'. `as' announces it if you start it with the 15431 `--version' argument. 15432 15433 Without this, we will not know whether there is any point in 15434 looking for the bug in the current version of `as'. 15435 15436 * Any patches you may have applied to the `as' source. 15437 15438 * The type of machine you are using, and the operating system name 15439 and version number. 15440 15441 * What compiler (and its version) was used to compile `as'--e.g. 15442 "`gcc-2.7'". 15443 15444 * The command arguments you gave the assembler to assemble your 15445 example and observe the bug. To guarantee you will not omit 15446 something important, list them all. A copy of the Makefile (or 15447 the output from make) is sufficient. 15448 15449 If we were to try to guess the arguments, we would probably guess 15450 wrong and then we might not encounter the bug. 15451 15452 * A complete input file that will reproduce the bug. If the bug is 15453 observed when the assembler is invoked via a compiler, send the 15454 assembler source, not the high level language source. Most 15455 compilers will produce the assembler source when run with the `-S' 15456 option. If you are using `gcc', use the options `-v 15457 --save-temps'; this will save the assembler source in a file with 15458 an extension of `.s', and also show you exactly how `as' is being 15459 run. 15460 15461 * A description of what behavior you observe that you believe is 15462 incorrect. For example, "It gets a fatal signal." 15463 15464 Of course, if the bug is that `as' gets a fatal signal, then we 15465 will certainly notice it. But if the bug is incorrect output, we 15466 might not notice unless it is glaringly wrong. You might as well 15467 not give us a chance to make a mistake. 15468 15469 Even if the problem you experience is a fatal signal, you should 15470 still say so explicitly. Suppose something strange is going on, 15471 such as, your copy of `as' is out of synch, or you have 15472 encountered a bug in the C library on your system. (This has 15473 happened!) Your copy might crash and ours would not. If you told 15474 us to expect a crash, then when ours fails to crash, we would know 15475 that the bug was not happening for us. If you had not told us to 15476 expect a crash, then we would not be able to draw any conclusion 15477 from our observations. 15478 15479 * If you wish to suggest changes to the `as' source, send us context 15480 diffs, as generated by `diff' with the `-u', `-c', or `-p' option. 15481 Always send diffs from the old file to the new file. If you even 15482 discuss something in the `as' source, refer to it by context, not 15483 by line number. 15484 15485 The line numbers in our development sources will not match those 15486 in your sources. Your line numbers would convey no useful 15487 information to us. 15488 15489 Here are some things that are not necessary: 15490 15491 * A description of the envelope of the bug. 15492 15493 Often people who encounter a bug spend a lot of time investigating 15494 which changes to the input file will make the bug go away and which 15495 changes will not affect it. 15496 15497 This is often time consuming and not very useful, because the way 15498 we will find the bug is by running a single example under the 15499 debugger with breakpoints, not by pure deduction from a series of 15500 examples. We recommend that you save your time for something else. 15501 15502 Of course, if you can find a simpler example to report _instead_ 15503 of the original one, that is a convenience for us. Errors in the 15504 output will be easier to spot, running under the debugger will take 15505 less time, and so on. 15506 15507 However, simplification is not vital; if you do not want to do 15508 this, report the bug anyway and send us the entire test case you 15509 used. 15510 15511 * A patch for the bug. 15512 15513 A patch for the bug does help us if it is a good one. But do not 15514 omit the necessary information, such as the test case, on the 15515 assumption that a patch is all we need. We might see problems 15516 with your patch and decide to fix the problem another way, or we 15517 might not understand it at all. 15518 15519 Sometimes with a program as complicated as `as' it is very hard to 15520 construct an example that will make the program follow a certain 15521 path through the code. If you do not send us the example, we will 15522 not be able to construct one, so we will not be able to verify 15523 that the bug is fixed. 15524 15525 And if we cannot understand what bug you are trying to fix, or why 15526 your patch should be an improvement, we will not install it. A 15527 test case will help us to understand. 15528 15529 * A guess about what the bug is or what it depends on. 15530 15531 Such guesses are usually wrong. Even we cannot guess right about 15532 such things without first using the debugger to find the facts. 15533 15534 15535 File: as.info, Node: Acknowledgements, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top 15536 15537 10 Acknowledgements 15538 ******************* 15539 15540 If you have contributed to GAS and your name isn't listed here, it is 15541 not meant as a slight. We just don't know about it. Send mail to the 15542 maintainer, and we'll correct the situation. Currently the maintainer 15543 is Ken Raeburn (email address `raeburn (a] cygnus.com'). 15544 15545 Dean Elsner wrote the original GNU assembler for the VAX.(1) 15546 15547 Jay Fenlason maintained GAS for a while, adding support for 15548 GDB-specific debug information and the 68k series machines, most of the 15549 preprocessing pass, and extensive changes in `messages.c', 15550 `input-file.c', `write.c'. 15551 15552 K. Richard Pixley maintained GAS for a while, adding various 15553 enhancements and many bug fixes, including merging support for several 15554 processors, breaking GAS up to handle multiple object file format back 15555 ends (including heavy rewrite, testing, an integration of the coff and 15556 b.out back ends), adding configuration including heavy testing and 15557 verification of cross assemblers and file splits and renaming, 15558 converted GAS to strictly ANSI C including full prototypes, added 15559 support for m680[34]0 and cpu32, did considerable work on i960 15560 including a COFF port (including considerable amounts of reverse 15561 engineering), a SPARC opcode file rewrite, DECstation, rs6000, and 15562 hp300hpux host ports, updated "know" assertions and made them work, 15563 much other reorganization, cleanup, and lint. 15564 15565 Ken Raeburn wrote the high-level BFD interface code to replace most 15566 of the code in format-specific I/O modules. 15567 15568 The original VMS support was contributed by David L. Kashtan. Eric 15569 Youngdale has done much work with it since. 15570 15571 The Intel 80386 machine description was written by Eliot Dresselhaus. 15572 15573 Minh Tran-Le at IntelliCorp contributed some AIX 386 support. 15574 15575 The Motorola 88k machine description was contributed by Devon Bowen 15576 of Buffalo University and Torbjorn Granlund of the Swedish Institute of 15577 Computer Science. 15578 15579 Keith Knowles at the Open Software Foundation wrote the original 15580 MIPS back end (`tc-mips.c', `tc-mips.h'), and contributed Rose format 15581 support (which hasn't been merged in yet). Ralph Campbell worked with 15582 the MIPS code to support a.out format. 15583 15584 Support for the Zilog Z8k and Renesas H8/300 processors (tc-z8k, 15585 tc-h8300), and IEEE 695 object file format (obj-ieee), was written by 15586 Steve Chamberlain of Cygnus Support. Steve also modified the COFF back 15587 end to use BFD for some low-level operations, for use with the H8/300 15588 and AMD 29k targets. 15589 15590 John Gilmore built the AMD 29000 support, added `.include' support, 15591 and simplified the configuration of which versions accept which 15592 directives. He updated the 68k machine description so that Motorola's 15593 opcodes always produced fixed-size instructions (e.g., `jsr'), while 15594 synthetic instructions remained shrinkable (`jbsr'). John fixed many 15595 bugs, including true tested cross-compilation support, and one bug in 15596 relaxation that took a week and required the proverbial one-bit fix. 15597 15598 Ian Lance Taylor of Cygnus Support merged the Motorola and MIT 15599 syntax for the 68k, completed support for some COFF targets (68k, i386 15600 SVR3, and SCO Unix), added support for MIPS ECOFF and ELF targets, 15601 wrote the initial RS/6000 and PowerPC assembler, and made a few other 15602 minor patches. 15603 15604 Steve Chamberlain made GAS able to generate listings. 15605 15606 Hewlett-Packard contributed support for the HP9000/300. 15607 15608 Jeff Law wrote GAS and BFD support for the native HPPA object format 15609 (SOM) along with a fairly extensive HPPA testsuite (for both SOM and 15610 ELF object formats). This work was supported by both the Center for 15611 Software Science at the University of Utah and Cygnus Support. 15612 15613 Support for ELF format files has been worked on by Mark Eichin of 15614 Cygnus Support (original, incomplete implementation for SPARC), Pete 15615 Hoogenboom and Jeff Law at the University of Utah (HPPA mainly), 15616 Michael Meissner of the Open Software Foundation (i386 mainly), and Ken 15617 Raeburn of Cygnus Support (sparc, and some initial 64-bit support). 15618 15619 Linas Vepstas added GAS support for the ESA/390 "IBM 370" 15620 architecture. 15621 15622 Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote 15623 GAS and BFD support for openVMS/Alpha. 15624 15625 Timothy Wall, Michael Hayes, and Greg Smart contributed to the 15626 various tic* flavors. 15627 15628 David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from 15629 Tensilica, Inc. added support for Xtensa processors. 15630 15631 Several engineers at Cygnus Support have also provided many small 15632 bug fixes and configuration enhancements. 15633 15634 Many others have contributed large or small bugfixes and 15635 enhancements. If you have contributed significant work and are not 15636 mentioned on this list, and want to be, let us know. Some of the 15637 history has been lost; we are not intentionally leaving anyone out. 15638 15639 ---------- Footnotes ---------- 15640 15641 (1) Any more details? 15642 15643 15644 File: as.info, Node: GNU Free Documentation License, Next: Index, Prev: Acknowledgements, Up: Top 15645 15646 Appendix A GNU Free Documentation License 15647 ***************************************** 15648 15649 Version 1.1, March 2000 15650 15651 Copyright (C) 2000, 2003 Free Software Foundation, Inc. 15652 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 15653 15654 Everyone is permitted to copy and distribute verbatim copies 15655 of this license document, but changing it is not allowed. 15656 15657 15658 0. PREAMBLE 15659 15660 The purpose of this License is to make a manual, textbook, or other 15661 written document "free" in the sense of freedom: to assure everyone 15662 the effective freedom to copy and redistribute it, with or without 15663 modifying it, either commercially or noncommercially. Secondarily, 15664 this License preserves for the author and publisher a way to get 15665 credit for their work, while not being considered responsible for 15666 modifications made by others. 15667 15668 This License is a kind of "copyleft", which means that derivative 15669 works of the document must themselves be free in the same sense. 15670 It complements the GNU General Public License, which is a copyleft 15671 license designed for free software. 15672 15673 We have designed this License in order to use it for manuals for 15674 free software, because free software needs free documentation: a 15675 free program should come with manuals providing the same freedoms 15676 that the software does. But this License is not limited to 15677 software manuals; it can be used for any textual work, regardless 15678 of subject matter or whether it is published as a printed book. 15679 We recommend this License principally for works whose purpose is 15680 instruction or reference. 15681 15682 15683 1. APPLICABILITY AND DEFINITIONS 15684 15685 This License applies to any manual or other work that contains a 15686 notice placed by the copyright holder saying it can be distributed 15687 under the terms of this License. The "Document", below, refers to 15688 any such manual or work. Any member of the public is a licensee, 15689 and is addressed as "you." 15690 15691 A "Modified Version" of the Document means any work containing the 15692 Document or a portion of it, either copied verbatim, or with 15693 modifications and/or translated into another language. 15694 15695 A "Secondary Section" is a named appendix or a front-matter 15696 section of the Document that deals exclusively with the 15697 relationship of the publishers or authors of the Document to the 15698 Document's overall subject (or to related matters) and contains 15699 nothing that could fall directly within that overall subject. 15700 (For example, if the Document is in part a textbook of 15701 mathematics, a Secondary Section may not explain any mathematics.) 15702 The relationship could be a matter of historical connection with 15703 the subject or with related matters, or of legal, commercial, 15704 philosophical, ethical or political position regarding them. 15705 15706 The "Invariant Sections" are certain Secondary Sections whose 15707 titles are designated, as being those of Invariant Sections, in 15708 the notice that says that the Document is released under this 15709 License. 15710 15711 The "Cover Texts" are certain short passages of text that are 15712 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 15713 that says that the Document is released under this License. 15714 15715 A "Transparent" copy of the Document means a machine-readable copy, 15716 represented in a format whose specification is available to the 15717 general public, whose contents can be viewed and edited directly 15718 and straightforwardly with generic text editors or (for images 15719 composed of pixels) generic paint programs or (for drawings) some 15720 widely available drawing editor, and that is suitable for input to 15721 text formatters or for automatic translation to a variety of 15722 formats suitable for input to text formatters. A copy made in an 15723 otherwise Transparent file format whose markup has been designed 15724 to thwart or discourage subsequent modification by readers is not 15725 Transparent. A copy that is not "Transparent" is called "Opaque." 15726 15727 Examples of suitable formats for Transparent copies include plain 15728 ASCII without markup, Texinfo input format, LaTeX input format, 15729 SGML or XML using a publicly available DTD, and 15730 standard-conforming simple HTML designed for human modification. 15731 Opaque formats include PostScript, PDF, proprietary formats that 15732 can be read and edited only by proprietary word processors, SGML 15733 or XML for which the DTD and/or processing tools are not generally 15734 available, and the machine-generated HTML produced by some word 15735 processors for output purposes only. 15736 15737 The "Title Page" means, for a printed book, the title page itself, 15738 plus such following pages as are needed to hold, legibly, the 15739 material this License requires to appear in the title page. For 15740 works in formats which do not have any title page as such, "Title 15741 Page" means the text near the most prominent appearance of the 15742 work's title, preceding the beginning of the body of the text. 15743 15744 2. VERBATIM COPYING 15745 15746 You may copy and distribute the Document in any medium, either 15747 commercially or noncommercially, provided that this License, the 15748 copyright notices, and the license notice saying this License 15749 applies to the Document are reproduced in all copies, and that you 15750 add no other conditions whatsoever to those of this License. You 15751 may not use technical measures to obstruct or control the reading 15752 or further copying of the copies you make or distribute. However, 15753 you may accept compensation in exchange for copies. If you 15754 distribute a large enough number of copies you must also follow 15755 the conditions in section 3. 15756 15757 You may also lend copies, under the same conditions stated above, 15758 and you may publicly display copies. 15759 15760 3. COPYING IN QUANTITY 15761 15762 If you publish printed copies of the Document numbering more than 15763 100, and the Document's license notice requires Cover Texts, you 15764 must enclose the copies in covers that carry, clearly and legibly, 15765 all these Cover Texts: Front-Cover Texts on the front cover, and 15766 Back-Cover Texts on the back cover. Both covers must also clearly 15767 and legibly identify you as the publisher of these copies. The 15768 front cover must present the full title with all words of the 15769 title equally prominent and visible. You may add other material 15770 on the covers in addition. Copying with changes limited to the 15771 covers, as long as they preserve the title of the Document and 15772 satisfy these conditions, can be treated as verbatim copying in 15773 other respects. 15774 15775 If the required texts for either cover are too voluminous to fit 15776 legibly, you should put the first ones listed (as many as fit 15777 reasonably) on the actual cover, and continue the rest onto 15778 adjacent pages. 15779 15780 If you publish or distribute Opaque copies of the Document 15781 numbering more than 100, you must either include a 15782 machine-readable Transparent copy along with each Opaque copy, or 15783 state in or with each Opaque copy a publicly-accessible 15784 computer-network location containing a complete Transparent copy 15785 of the Document, free of added material, which the general 15786 network-using public has access to download anonymously at no 15787 charge using public-standard network protocols. If you use the 15788 latter option, you must take reasonably prudent steps, when you 15789 begin distribution of Opaque copies in quantity, to ensure that 15790 this Transparent copy will remain thus accessible at the stated 15791 location until at least one year after the last time you 15792 distribute an Opaque copy (directly or through your agents or 15793 retailers) of that edition to the public. 15794 15795 It is requested, but not required, that you contact the authors of 15796 the Document well before redistributing any large number of 15797 copies, to give them a chance to provide you with an updated 15798 version of the Document. 15799 15800 4. MODIFICATIONS 15801 15802 You may copy and distribute a Modified Version of the Document 15803 under the conditions of sections 2 and 3 above, provided that you 15804 release the Modified Version under precisely this License, with 15805 the Modified Version filling the role of the Document, thus 15806 licensing distribution and modification of the Modified Version to 15807 whoever possesses a copy of it. In addition, you must do these 15808 things in the Modified Version: 15809 15810 A. Use in the Title Page (and on the covers, if any) a title 15811 distinct from that of the Document, and from those of previous 15812 versions (which should, if there were any, be listed in the 15813 History section of the Document). You may use the same title 15814 as a previous version if the original publisher of that version 15815 gives permission. 15816 B. List on the Title Page, as authors, one or more persons or 15817 entities responsible for authorship of the modifications in the 15818 Modified Version, together with at least five of the principal 15819 authors of the Document (all of its principal authors, if it 15820 has less than five). 15821 C. State on the Title page the name of the publisher of the 15822 Modified Version, as the publisher. 15823 D. Preserve all the copyright notices of the Document. 15824 E. Add an appropriate copyright notice for your modifications 15825 adjacent to the other copyright notices. 15826 F. Include, immediately after the copyright notices, a license 15827 notice giving the public permission to use the Modified Version 15828 under the terms of this License, in the form shown in the 15829 Addendum below. 15830 G. Preserve in that license notice the full lists of Invariant 15831 Sections and required Cover Texts given in the Document's 15832 license notice. 15833 H. Include an unaltered copy of this License. 15834 I. Preserve the section entitled "History", and its title, and add 15835 to it an item stating at least the title, year, new authors, and 15836 publisher of the Modified Version as given on the Title Page. 15837 If there is no section entitled "History" in the Document, 15838 create one stating the title, year, authors, and publisher of 15839 the Document as given on its Title Page, then add an item 15840 describing the Modified Version as stated in the previous 15841 sentence. 15842 J. Preserve the network location, if any, given in the Document for 15843 public access to a Transparent copy of the Document, and 15844 likewise the network locations given in the Document for 15845 previous versions it was based on. These may be placed in the 15846 "History" section. You may omit a network location for a work 15847 that was published at least four years before the Document 15848 itself, or if the original publisher of the version it refers 15849 to gives permission. 15850 K. In any section entitled "Acknowledgements" or "Dedications", 15851 preserve the section's title, and preserve in the section all the 15852 substance and tone of each of the contributor acknowledgements 15853 and/or dedications given therein. 15854 L. Preserve all the Invariant Sections of the Document, 15855 unaltered in their text and in their titles. Section numbers 15856 or the equivalent are not considered part of the section titles. 15857 M. Delete any section entitled "Endorsements." Such a section 15858 may not be included in the Modified Version. 15859 N. Do not retitle any existing section as "Endorsements" or to 15860 conflict in title with any Invariant Section. 15861 15862 If the Modified Version includes new front-matter sections or 15863 appendices that qualify as Secondary Sections and contain no 15864 material copied from the Document, you may at your option 15865 designate some or all of these sections as invariant. To do this, 15866 add their titles to the list of Invariant Sections in the Modified 15867 Version's license notice. These titles must be distinct from any 15868 other section titles. 15869 15870 You may add a section entitled "Endorsements", provided it contains 15871 nothing but endorsements of your Modified Version by various 15872 parties-for example, statements of peer review or that the text has 15873 been approved by an organization as the authoritative definition 15874 of a standard. 15875 15876 You may add a passage of up to five words as a Front-Cover Text, 15877 and a passage of up to 25 words as a Back-Cover Text, to the end 15878 of the list of Cover Texts in the Modified Version. Only one 15879 passage of Front-Cover Text and one of Back-Cover Text may be 15880 added by (or through arrangements made by) any one entity. If the 15881 Document already includes a cover text for the same cover, 15882 previously added by you or by arrangement made by the same entity 15883 you are acting on behalf of, you may not add another; but you may 15884 replace the old one, on explicit permission from the previous 15885 publisher that added the old one. 15886 15887 The author(s) and publisher(s) of the Document do not by this 15888 License give permission to use their names for publicity for or to 15889 assert or imply endorsement of any Modified Version. 15890 15891 5. COMBINING DOCUMENTS 15892 15893 You may combine the Document with other documents released under 15894 this License, under the terms defined in section 4 above for 15895 modified versions, provided that you include in the combination 15896 all of the Invariant Sections of all of the original documents, 15897 unmodified, and list them all as Invariant Sections of your 15898 combined work in its license notice. 15899 15900 The combined work need only contain one copy of this License, and 15901 multiple identical Invariant Sections may be replaced with a single 15902 copy. If there are multiple Invariant Sections with the same name 15903 but different contents, make the title of each such section unique 15904 by adding at the end of it, in parentheses, the name of the 15905 original author or publisher of that section if known, or else a 15906 unique number. Make the same adjustment to the section titles in 15907 the list of Invariant Sections in the license notice of the 15908 combined work. 15909 15910 In the combination, you must combine any sections entitled 15911 "History" in the various original documents, forming one section 15912 entitled "History"; likewise combine any sections entitled 15913 "Acknowledgements", and any sections entitled "Dedications." You 15914 must delete all sections entitled "Endorsements." 15915 15916 6. COLLECTIONS OF DOCUMENTS 15917 15918 You may make a collection consisting of the Document and other 15919 documents released under this License, and replace the individual 15920 copies of this License in the various documents with a single copy 15921 that is included in the collection, provided that you follow the 15922 rules of this License for verbatim copying of each of the 15923 documents in all other respects. 15924 15925 You may extract a single document from such a collection, and 15926 distribute it individually under this License, provided you insert 15927 a copy of this License into the extracted document, and follow 15928 this License in all other respects regarding verbatim copying of 15929 that document. 15930 15931 7. AGGREGATION WITH INDEPENDENT WORKS 15932 15933 A compilation of the Document or its derivatives with other 15934 separate and independent documents or works, in or on a volume of 15935 a storage or distribution medium, does not as a whole count as a 15936 Modified Version of the Document, provided no compilation 15937 copyright is claimed for the compilation. Such a compilation is 15938 called an "aggregate", and this License does not apply to the 15939 other self-contained works thus compiled with the Document, on 15940 account of their being thus compiled, if they are not themselves 15941 derivative works of the Document. 15942 15943 If the Cover Text requirement of section 3 is applicable to these 15944 copies of the Document, then if the Document is less than one 15945 quarter of the entire aggregate, the Document's Cover Texts may be 15946 placed on covers that surround only the Document within the 15947 aggregate. Otherwise they must appear on covers around the whole 15948 aggregate. 15949 15950 8. TRANSLATION 15951 15952 Translation is considered a kind of modification, so you may 15953 distribute translations of the Document under the terms of section 15954 4. Replacing Invariant Sections with translations requires special 15955 permission from their copyright holders, but you may include 15956 translations of some or all Invariant Sections in addition to the 15957 original versions of these Invariant Sections. You may include a 15958 translation of this License provided that you also include the 15959 original English version of this License. In case of a 15960 disagreement between the translation and the original English 15961 version of this License, the original English version will prevail. 15962 15963 9. TERMINATION 15964 15965 You may not copy, modify, sublicense, or distribute the Document 15966 except as expressly provided for under this License. Any other 15967 attempt to copy, modify, sublicense or distribute the Document is 15968 void, and will automatically terminate your rights under this 15969 License. However, parties who have received copies, or rights, 15970 from you under this License will not have their licenses 15971 terminated so long as such parties remain in full compliance. 15972 15973 10. FUTURE REVISIONS OF THIS LICENSE 15974 15975 The Free Software Foundation may publish new, revised versions of 15976 the GNU Free Documentation License from time to time. Such new 15977 versions will be similar in spirit to the present version, but may 15978 differ in detail to address new problems or concerns. See 15979 http://www.gnu.org/copyleft/. 15980 15981 Each version of the License is given a distinguishing version 15982 number. If the Document specifies that a particular numbered 15983 version of this License "or any later version" applies to it, you 15984 have the option of following the terms and conditions either of 15985 that specified version or of any later version that has been 15986 published (not as a draft) by the Free Software Foundation. If 15987 the Document does not specify a version number of this License, 15988 you may choose any version ever published (not as a draft) by the 15989 Free Software Foundation. 15990 15991 15992 ADDENDUM: How to use this License for your documents 15993 ==================================================== 15994 15995 To use this License in a document you have written, include a copy of 15996 the License in the document and put the following copyright and license 15997 notices just after the title page: 15998 15999 Copyright (C) YEAR YOUR NAME. 16000 Permission is granted to copy, distribute and/or modify this document 16001 under the terms of the GNU Free Documentation License, Version 1.1 16002 or any later version published by the Free Software Foundation; 16003 with the Invariant Sections being LIST THEIR TITLES, with the 16004 Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. 16005 A copy of the license is included in the section entitled "GNU 16006 Free Documentation License." 16007 16008 If you have no Invariant Sections, write "with no Invariant Sections" 16009 instead of saying which ones are invariant. If you have no Front-Cover 16010 Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being 16011 LIST"; likewise for Back-Cover Texts. 16012 16013 If your document contains nontrivial examples of program code, we 16014 recommend releasing these examples in parallel under your choice of 16015 free software license, such as the GNU General Public License, to 16016 permit their use in free software. 16017 16018 16019 File: as.info, Node: Index, Prev: GNU Free Documentation License, Up: Top 16020 16021 Index 16022 ***** 16023 16024 [index] 16025 * Menu: 16026 16027 * #: Comments. (line 38) 16028 * #APP: Preprocessing. (line 27) 16029 * #NO_APP: Preprocessing. (line 27) 16030 * $ in symbol names <1>: SH64-Chars. (line 10) 16031 * $ in symbol names <2>: SH-Chars. (line 10) 16032 * $ in symbol names <3>: D30V-Chars. (line 63) 16033 * $ in symbol names: D10V-Chars. (line 46) 16034 * $a: ARM Mapping Symbols. (line 9) 16035 * $acos math builtin, TIC54X: TIC54X-Builtins. (line 10) 16036 * $asin math builtin, TIC54X: TIC54X-Builtins. (line 13) 16037 * $atan math builtin, TIC54X: TIC54X-Builtins. (line 16) 16038 * $atan2 math builtin, TIC54X: TIC54X-Builtins. (line 19) 16039 * $ceil math builtin, TIC54X: TIC54X-Builtins. (line 22) 16040 * $cos math builtin, TIC54X: TIC54X-Builtins. (line 28) 16041 * $cosh math builtin, TIC54X: TIC54X-Builtins. (line 25) 16042 * $cvf math builtin, TIC54X: TIC54X-Builtins. (line 31) 16043 * $cvi math builtin, TIC54X: TIC54X-Builtins. (line 34) 16044 * $d: ARM Mapping Symbols. (line 15) 16045 * $exp math builtin, TIC54X: TIC54X-Builtins. (line 37) 16046 * $fabs math builtin, TIC54X: TIC54X-Builtins. (line 40) 16047 * $firstch subsym builtin, TIC54X: TIC54X-Macros. (line 26) 16048 * $floor math builtin, TIC54X: TIC54X-Builtins. (line 43) 16049 * $fmod math builtin, TIC54X: TIC54X-Builtins. (line 47) 16050 * $int math builtin, TIC54X: TIC54X-Builtins. (line 50) 16051 * $iscons subsym builtin, TIC54X: TIC54X-Macros. (line 43) 16052 * $isdefed subsym builtin, TIC54X: TIC54X-Macros. (line 34) 16053 * $ismember subsym builtin, TIC54X: TIC54X-Macros. (line 38) 16054 * $isname subsym builtin, TIC54X: TIC54X-Macros. (line 47) 16055 * $isreg subsym builtin, TIC54X: TIC54X-Macros. (line 50) 16056 * $lastch subsym builtin, TIC54X: TIC54X-Macros. (line 30) 16057 * $ldexp math builtin, TIC54X: TIC54X-Builtins. (line 53) 16058 * $log math builtin, TIC54X: TIC54X-Builtins. (line 59) 16059 * $log10 math builtin, TIC54X: TIC54X-Builtins. (line 56) 16060 * $max math builtin, TIC54X: TIC54X-Builtins. (line 62) 16061 * $min math builtin, TIC54X: TIC54X-Builtins. (line 65) 16062 * $pow math builtin, TIC54X: TIC54X-Builtins. (line 68) 16063 * $round math builtin, TIC54X: TIC54X-Builtins. (line 71) 16064 * $sgn math builtin, TIC54X: TIC54X-Builtins. (line 74) 16065 * $sin math builtin, TIC54X: TIC54X-Builtins. (line 77) 16066 * $sinh math builtin, TIC54X: TIC54X-Builtins. (line 80) 16067 * $sqrt math builtin, TIC54X: TIC54X-Builtins. (line 83) 16068 * $structacc subsym builtin, TIC54X: TIC54X-Macros. (line 57) 16069 * $structsz subsym builtin, TIC54X: TIC54X-Macros. (line 54) 16070 * $symcmp subsym builtin, TIC54X: TIC54X-Macros. (line 23) 16071 * $symlen subsym builtin, TIC54X: TIC54X-Macros. (line 20) 16072 * $t: ARM Mapping Symbols. (line 12) 16073 * $tan math builtin, TIC54X: TIC54X-Builtins. (line 86) 16074 * $tanh math builtin, TIC54X: TIC54X-Builtins. (line 89) 16075 * $trunc math builtin, TIC54X: TIC54X-Builtins. (line 92) 16076 * -+ option, VAX/VMS: VAX-Opts. (line 71) 16077 * --: Command Line. (line 10) 16078 * --32 option, i386: i386-Options. (line 8) 16079 * --32 option, x86-64: i386-Options. (line 8) 16080 * --64 option, i386: i386-Options. (line 8) 16081 * --64 option, x86-64: i386-Options. (line 8) 16082 * --absolute-literals: Xtensa Options. (line 22) 16083 * --allow-reg-prefix: SH Options. (line 9) 16084 * --alternate: alternate. (line 6) 16085 * --base-size-default-16: M68K-Opts. (line 70) 16086 * --base-size-default-32: M68K-Opts. (line 70) 16087 * --big: SH Options. (line 9) 16088 * --bitwise-or option, M680x0: M68K-Opts. (line 63) 16089 * --disp-size-default-16: M68K-Opts. (line 79) 16090 * --disp-size-default-32: M68K-Opts. (line 79) 16091 * --divide option, i386: i386-Options. (line 24) 16092 * --dsp: SH Options. (line 9) 16093 * --emulation=crisaout command line option, CRIS: CRIS-Opts. (line 9) 16094 * --emulation=criself command line option, CRIS: CRIS-Opts. (line 9) 16095 * --enforce-aligned-data: Sparc-Aligned-Data. (line 11) 16096 * --fatal-warnings: W. (line 16) 16097 * --fixed-special-register-names command line option, MMIX: MMIX-Opts. 16098 (line 8) 16099 * --force-long-branchs: M68HC11-Opts. (line 69) 16100 * --generate-example: M68HC11-Opts. (line 86) 16101 * --globalize-symbols command line option, MMIX: MMIX-Opts. (line 12) 16102 * --gnu-syntax command line option, MMIX: MMIX-Opts. (line 16) 16103 * --hash-size=NUMBER: Overview. (line 297) 16104 * --linker-allocated-gregs command line option, MMIX: MMIX-Opts. 16105 (line 67) 16106 * --listing-cont-lines: listing. (line 33) 16107 * --listing-lhs-width: listing. (line 15) 16108 * --listing-lhs-width2: listing. (line 20) 16109 * --listing-rhs-width: listing. (line 27) 16110 * --little: SH Options. (line 9) 16111 * --longcalls: Xtensa Options. (line 36) 16112 * --march=ARCHITECTURE command line option, CRIS: CRIS-Opts. (line 33) 16113 * --MD: MD. (line 6) 16114 * --mul-bug-abort command line option, CRIS: CRIS-Opts. (line 61) 16115 * --no-absolute-literals: Xtensa Options. (line 22) 16116 * --no-expand command line option, MMIX: MMIX-Opts. (line 31) 16117 * --no-longcalls: Xtensa Options. (line 36) 16118 * --no-merge-gregs command line option, MMIX: MMIX-Opts. (line 36) 16119 * --no-mul-bug-abort command line option, CRIS: CRIS-Opts. (line 61) 16120 * --no-predefined-syms command line option, MMIX: MMIX-Opts. (line 22) 16121 * --no-pushj-stubs command line option, MMIX: MMIX-Opts. (line 54) 16122 * --no-stubs command line option, MMIX: MMIX-Opts. (line 54) 16123 * --no-target-align: Xtensa Options. (line 29) 16124 * --no-text-section-literals: Xtensa Options. (line 9) 16125 * --no-transform: Xtensa Options. (line 45) 16126 * --no-underscore command line option, CRIS: CRIS-Opts. (line 15) 16127 * --no-warn: W. (line 11) 16128 * --pcrel: M68K-Opts. (line 91) 16129 * --pic command line option, CRIS: CRIS-Opts. (line 27) 16130 * --print-insn-syntax: M68HC11-Opts. (line 75) 16131 * --print-opcodes: M68HC11-Opts. (line 79) 16132 * --register-prefix-optional option, M680x0: M68K-Opts. (line 50) 16133 * --relax: SH Options. (line 9) 16134 * --relax command line option, MMIX: MMIX-Opts. (line 19) 16135 * --rename-section: Xtensa Options. (line 53) 16136 * --renesas: SH Options. (line 9) 16137 * --short-branchs: M68HC11-Opts. (line 54) 16138 * --small: SH Options. (line 9) 16139 * --statistics: statistics. (line 6) 16140 * --strict-direct-mode: M68HC11-Opts. (line 44) 16141 * --target-align: Xtensa Options. (line 29) 16142 * --text-section-literals: Xtensa Options. (line 9) 16143 * --traditional-format: traditional-format. (line 6) 16144 * --transform: Xtensa Options. (line 45) 16145 * --underscore command line option, CRIS: CRIS-Opts. (line 15) 16146 * --warn: W. (line 19) 16147 * -1 option, VAX/VMS: VAX-Opts. (line 77) 16148 * -32addr command line option, Alpha: Alpha Options. (line 50) 16149 * -a: a. (line 6) 16150 * -A options, i960: Options-i960. (line 6) 16151 * -ac: a. (line 6) 16152 * -ad: a. (line 6) 16153 * -ah: a. (line 6) 16154 * -al: a. (line 6) 16155 * -an: a. (line 6) 16156 * -as: a. (line 6) 16157 * -Asparclet: Sparc-Opts. (line 25) 16158 * -Asparclite: Sparc-Opts. (line 25) 16159 * -Av6: Sparc-Opts. (line 25) 16160 * -Av8: Sparc-Opts. (line 25) 16161 * -Av9: Sparc-Opts. (line 25) 16162 * -Av9a: Sparc-Opts. (line 25) 16163 * -b option, i960: Options-i960. (line 22) 16164 * -big option, M32R: M32R-Opts. (line 35) 16165 * -construct-floats: MIPS Opts. (line 157) 16166 * -D: D. (line 6) 16167 * -D, ignored on VAX: VAX-Opts. (line 11) 16168 * -d, VAX option: VAX-Opts. (line 16) 16169 * -eabi= command line option, ARM: ARM Options. (line 107) 16170 * -EB command line option, ARC: ARC Options. (line 31) 16171 * -EB command line option, ARM: ARM Options. (line 112) 16172 * -EB option (MIPS): MIPS Opts. (line 13) 16173 * -EB option, M32R: M32R-Opts. (line 39) 16174 * -EL command line option, ARC: ARC Options. (line 35) 16175 * -EL command line option, ARM: ARM Options. (line 116) 16176 * -EL option (MIPS): MIPS Opts. (line 13) 16177 * -EL option, M32R: M32R-Opts. (line 32) 16178 * -f: f. (line 6) 16179 * -F command line option, Alpha: Alpha Options. (line 50) 16180 * -G command line option, Alpha: Alpha Options. (line 46) 16181 * -g command line option, Alpha: Alpha Options. (line 40) 16182 * -G option (MIPS): MIPS Opts. (line 8) 16183 * -H option, VAX/VMS: VAX-Opts. (line 81) 16184 * -h option, VAX/VMS: VAX-Opts. (line 45) 16185 * -I PATH: I. (line 6) 16186 * -ignore-parallel-conflicts option, M32RX: M32R-Opts. (line 87) 16187 * -Ip option, M32RX: M32R-Opts. (line 97) 16188 * -J, ignored on VAX: VAX-Opts. (line 27) 16189 * -K: K. (line 6) 16190 * -k command line option, ARM: ARM Options. (line 120) 16191 * -KPIC option, M32R: M32R-Opts. (line 42) 16192 * -L: L. (line 6) 16193 * -l option, M680x0: M68K-Opts. (line 38) 16194 * -little option, M32R: M32R-Opts. (line 27) 16195 * -M: M. (line 6) 16196 * -m11/03: PDP-11-Options. (line 140) 16197 * -m11/04: PDP-11-Options. (line 143) 16198 * -m11/05: PDP-11-Options. (line 146) 16199 * -m11/10: PDP-11-Options. (line 146) 16200 * -m11/15: PDP-11-Options. (line 149) 16201 * -m11/20: PDP-11-Options. (line 149) 16202 * -m11/21: PDP-11-Options. (line 152) 16203 * -m11/23: PDP-11-Options. (line 155) 16204 * -m11/24: PDP-11-Options. (line 155) 16205 * -m11/34: PDP-11-Options. (line 158) 16206 * -m11/34a: PDP-11-Options. (line 161) 16207 * -m11/35: PDP-11-Options. (line 164) 16208 * -m11/40: PDP-11-Options. (line 164) 16209 * -m11/44: PDP-11-Options. (line 167) 16210 * -m11/45: PDP-11-Options. (line 170) 16211 * -m11/50: PDP-11-Options. (line 170) 16212 * -m11/53: PDP-11-Options. (line 173) 16213 * -m11/55: PDP-11-Options. (line 170) 16214 * -m11/60: PDP-11-Options. (line 176) 16215 * -m11/70: PDP-11-Options. (line 170) 16216 * -m11/73: PDP-11-Options. (line 173) 16217 * -m11/83: PDP-11-Options. (line 173) 16218 * -m11/84: PDP-11-Options. (line 173) 16219 * -m11/93: PDP-11-Options. (line 173) 16220 * -m11/94: PDP-11-Options. (line 173) 16221 * -m16c option, M16C: M32C-Opts. (line 12) 16222 * -m32c option, M32C: M32C-Opts. (line 9) 16223 * -m32r option, M32R: M32R-Opts. (line 21) 16224 * -m32rx option, M32R2: M32R-Opts. (line 17) 16225 * -m32rx option, M32RX: M32R-Opts. (line 9) 16226 * -m68000 and related options: M68K-Opts. (line 103) 16227 * -m68hc11: M68HC11-Opts. (line 9) 16228 * -m68hc12: M68HC11-Opts. (line 14) 16229 * -m68hcs12: M68HC11-Opts. (line 21) 16230 * -m[no-]68851 command line option, M680x0: M68K-Opts. (line 20) 16231 * -m[no-]68881 command line option, M680x0: M68K-Opts. (line 20) 16232 * -m[no-]div command line option, M680x0: M68K-Opts. (line 20) 16233 * -m[no-]emac command line option, M680x0: M68K-Opts. (line 20) 16234 * -m[no-]float command line option, M680x0: M68K-Opts. (line 20) 16235 * -m[no-]mac command line option, M680x0: M68K-Opts. (line 20) 16236 * -m[no-]usp command line option, M680x0: M68K-Opts. (line 20) 16237 * -mall: PDP-11-Options. (line 26) 16238 * -mall-extensions: PDP-11-Options. (line 26) 16239 * -mapcs command line option, ARM: ARM Options. (line 80) 16240 * -mapcs-float command line option, ARM: ARM Options. (line 93) 16241 * -mapcs-reentrant command line option, ARM: ARM Options. (line 98) 16242 * -marc[5|6|7|8] command line option, ARC: ARC Options. (line 6) 16243 * -march= command line option, ARM: ARM Options. (line 37) 16244 * -march= command line option, M680x0: M68K-Opts. (line 8) 16245 * -matpcs command line option, ARM: ARM Options. (line 85) 16246 * -mcis: PDP-11-Options. (line 32) 16247 * -mconstant-gp command line option, IA-64: IA-64 Options. (line 6) 16248 * -mCPU command line option, Alpha: Alpha Options. (line 6) 16249 * -mcpu option, cpu: TIC54X-Opts. (line 15) 16250 * -mcpu= command line option, ARM: ARM Options. (line 6) 16251 * -mcpu= command line option, M680x0: M68K-Opts. (line 13) 16252 * -mcsm: PDP-11-Options. (line 43) 16253 * -mdebug command line option, Alpha: Alpha Options. (line 25) 16254 * -me option, stderr redirect: TIC54X-Opts. (line 20) 16255 * -meis: PDP-11-Options. (line 46) 16256 * -merrors-to-file option, stderr redirect: TIC54X-Opts. (line 20) 16257 * -mf option, far-mode: TIC54X-Opts. (line 8) 16258 * -mf11: PDP-11-Options. (line 122) 16259 * -mfar-mode option, far-mode: TIC54X-Opts. (line 8) 16260 * -mfis: PDP-11-Options. (line 51) 16261 * -mfloat-abi= command line option, ARM: ARM Options. (line 102) 16262 * -mfp-11: PDP-11-Options. (line 56) 16263 * -mfpp: PDP-11-Options. (line 56) 16264 * -mfpu: PDP-11-Options. (line 56) 16265 * -mfpu= command line option, ARM: ARM Options. (line 52) 16266 * -mip2022 option, IP2K: IP2K-Opts. (line 14) 16267 * -mip2022ext option, IP2022: IP2K-Opts. (line 9) 16268 * -mj11: PDP-11-Options. (line 126) 16269 * -mka11: PDP-11-Options. (line 92) 16270 * -mkb11: PDP-11-Options. (line 95) 16271 * -mkd11a: PDP-11-Options. (line 98) 16272 * -mkd11b: PDP-11-Options. (line 101) 16273 * -mkd11d: PDP-11-Options. (line 104) 16274 * -mkd11e: PDP-11-Options. (line 107) 16275 * -mkd11f: PDP-11-Options. (line 110) 16276 * -mkd11h: PDP-11-Options. (line 110) 16277 * -mkd11k: PDP-11-Options. (line 114) 16278 * -mkd11q: PDP-11-Options. (line 110) 16279 * -mkd11z: PDP-11-Options. (line 118) 16280 * -mkev11: PDP-11-Options. (line 51) 16281 * -mlimited-eis: PDP-11-Options. (line 64) 16282 * -mlong: M68HC11-Opts. (line 32) 16283 * -mlong-double: M68HC11-Opts. (line 40) 16284 * -mmfpt: PDP-11-Options. (line 70) 16285 * -mmicrocode: PDP-11-Options. (line 83) 16286 * -mmutiproc: PDP-11-Options. (line 73) 16287 * -mmxps: PDP-11-Options. (line 77) 16288 * -mno-cis: PDP-11-Options. (line 32) 16289 * -mno-csm: PDP-11-Options. (line 43) 16290 * -mno-eis: PDP-11-Options. (line 46) 16291 * -mno-extensions: PDP-11-Options. (line 29) 16292 * -mno-fis: PDP-11-Options. (line 51) 16293 * -mno-fp-11: PDP-11-Options. (line 56) 16294 * -mno-fpp: PDP-11-Options. (line 56) 16295 * -mno-fpu: PDP-11-Options. (line 56) 16296 * -mno-kev11: PDP-11-Options. (line 51) 16297 * -mno-limited-eis: PDP-11-Options. (line 64) 16298 * -mno-mfpt: PDP-11-Options. (line 70) 16299 * -mno-microcode: PDP-11-Options. (line 83) 16300 * -mno-mutiproc: PDP-11-Options. (line 73) 16301 * -mno-mxps: PDP-11-Options. (line 77) 16302 * -mno-pic: PDP-11-Options. (line 11) 16303 * -mno-spl: PDP-11-Options. (line 80) 16304 * -mno-sym32: MIPS Opts. (line 145) 16305 * -mpic: PDP-11-Options. (line 11) 16306 * -mrelax command line option, V850: V850 Options. (line 51) 16307 * -mshort: M68HC11-Opts. (line 27) 16308 * -mshort-double: M68HC11-Opts. (line 36) 16309 * -mspl: PDP-11-Options. (line 80) 16310 * -msym32: MIPS Opts. (line 145) 16311 * -mt11: PDP-11-Options. (line 130) 16312 * -mthumb command line option, ARM: ARM Options. (line 71) 16313 * -mthumb-interwork command line option, ARM: ARM Options. (line 76) 16314 * -mv850 command line option, V850: V850 Options. (line 23) 16315 * -mv850any command line option, V850: V850 Options. (line 41) 16316 * -mv850e command line option, V850: V850 Options. (line 29) 16317 * -mv850e1 command line option, V850: V850 Options. (line 35) 16318 * -N command line option, CRIS: CRIS-Opts. (line 57) 16319 * -nIp option, M32RX: M32R-Opts. (line 101) 16320 * -no-bitinst, M32R2: M32R-Opts. (line 54) 16321 * -no-construct-floats: MIPS Opts. (line 157) 16322 * -no-ignore-parallel-conflicts option, M32RX: M32R-Opts. (line 93) 16323 * -no-mdebug command line option, Alpha: Alpha Options. (line 25) 16324 * -no-parallel option, M32RX: M32R-Opts. (line 51) 16325 * -no-relax option, i960: Options-i960. (line 66) 16326 * -no-warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. 16327 (line 79) 16328 * -no-warn-unmatched-high option, M32R: M32R-Opts. (line 111) 16329 * -nocpp ignored (MIPS): MIPS Opts. (line 148) 16330 * -o: o. (line 6) 16331 * -O option, M32RX: M32R-Opts. (line 59) 16332 * -parallel option, M32RX: M32R-Opts. (line 46) 16333 * -R: R. (line 6) 16334 * -r800 command line option, Z80: Z80 Options. (line 41) 16335 * -relax command line option, Alpha: Alpha Options. (line 32) 16336 * -S, ignored on VAX: VAX-Opts. (line 11) 16337 * -t, ignored on VAX: VAX-Opts. (line 36) 16338 * -T, ignored on VAX: VAX-Opts. (line 11) 16339 * -v: v. (line 6) 16340 * -V, redundant on VAX: VAX-Opts. (line 22) 16341 * -version: v. (line 6) 16342 * -W: W. (line 11) 16343 * -warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. (line 65) 16344 * -warn-unmatched-high option, M32R: M32R-Opts. (line 105) 16345 * -Wnp option, M32RX: M32R-Opts. (line 83) 16346 * -Wnuh option, M32RX: M32R-Opts. (line 117) 16347 * -Wp option, M32RX: M32R-Opts. (line 75) 16348 * -wsigned_overflow command line option, V850: V850 Options. (line 9) 16349 * -Wuh option, M32RX: M32R-Opts. (line 114) 16350 * -wunsigned_overflow command line option, V850: V850 Options. 16351 (line 16) 16352 * -x command line option, MMIX: MMIX-Opts. (line 44) 16353 * -z80 command line option, Z80: Z80 Options. (line 8) 16354 * -z8001 command line option, Z8000: Z8000 Options. (line 6) 16355 * -z8002 command line option, Z8000: Z8000 Options. (line 9) 16356 * . (symbol): Dot. (line 6) 16357 * .arch directive, ARM: ARM Directives. (line 164) 16358 * .big directive, M32RX: M32R-Directives. (line 88) 16359 * .cantunwind directive, ARM: ARM Directives. (line 87) 16360 * .cpu directive, ARM: ARM Directives. (line 160) 16361 * .eabi_attribute directive, ARM: ARM Directives. (line 172) 16362 * .fnend directive, ARM: ARM Directives. (line 78) 16363 * .fnstart directive, ARM: ARM Directives. (line 75) 16364 * .fpu directive, ARM: ARM Directives. (line 168) 16365 * .handlerdata directive, ARM: ARM Directives. (line 98) 16366 * .insn: MIPS insn. (line 6) 16367 * .little directive, M32RX: M32R-Directives. (line 82) 16368 * .ltorg directive, ARM: ARM Directives. (line 58) 16369 * .m32r directive, M32R: M32R-Directives. (line 66) 16370 * .m32r2 directive, M32R2: M32R-Directives. (line 77) 16371 * .m32rx directive, M32RX: M32R-Directives. (line 72) 16372 * .movsp directive, ARM: ARM Directives. (line 136) 16373 * .o: Object. (line 6) 16374 * .pad directive, ARM: ARM Directives. (line 131) 16375 * .param on HPPA: HPPA Directives. (line 19) 16376 * .personality directive, ARM: ARM Directives. (line 91) 16377 * .personalityindex directive, ARM: ARM Directives. (line 94) 16378 * .pool directive, ARM: ARM Directives. (line 72) 16379 * .save directive, ARM: ARM Directives. (line 107) 16380 * .set autoextend: MIPS autoextend. (line 6) 16381 * .set dsp: MIPS ASE instruction generation overrides. 16382 (line 16) 16383 * .set mdmx: MIPS ASE instruction generation overrides. 16384 (line 11) 16385 * .set mips3d: MIPS ASE instruction generation overrides. 16386 (line 6) 16387 * .set mipsN: MIPS ISA. (line 6) 16388 * .set mt: MIPS ASE instruction generation overrides. 16389 (line 21) 16390 * .set noautoextend: MIPS autoextend. (line 6) 16391 * .set nodsp: MIPS ASE instruction generation overrides. 16392 (line 16) 16393 * .set nomdmx: MIPS ASE instruction generation overrides. 16394 (line 11) 16395 * .set nomips3d: MIPS ASE instruction generation overrides. 16396 (line 6) 16397 * .set nomt: MIPS ASE instruction generation overrides. 16398 (line 21) 16399 * .set nosym32: MIPS symbol sizes. (line 6) 16400 * .set pop: MIPS option stack. (line 6) 16401 * .set push: MIPS option stack. (line 6) 16402 * .set sym32: MIPS symbol sizes. (line 6) 16403 * .setfp directive, ARM: ARM Directives. (line 139) 16404 * .unwind_raw directive, ARM: ARM Directives. (line 153) 16405 * .v850 directive, V850: V850 Directives. (line 14) 16406 * .v850e directive, V850: V850 Directives. (line 20) 16407 * .v850e1 directive, V850: V850 Directives. (line 26) 16408 * .z8001: Z8000 Directives. (line 11) 16409 * .z8002: Z8000 Directives. (line 15) 16410 * 16-bit code, i386: i386-16bit. (line 6) 16411 * 2byte directive, ARC: ARC Directives. (line 9) 16412 * 3byte directive, ARC: ARC Directives. (line 12) 16413 * 3DNow!, i386: i386-SIMD. (line 6) 16414 * 3DNow!, x86-64: i386-SIMD. (line 6) 16415 * 430 support: MSP430-Dependent. (line 6) 16416 * 4byte directive, ARC: ARC Directives. (line 15) 16417 * : (label): Statements. (line 30) 16418 * @word modifier, D10V: D10V-Word. (line 6) 16419 * \" (doublequote character): Strings. (line 43) 16420 * \\ (\ character): Strings. (line 40) 16421 * \b (backspace character): Strings. (line 15) 16422 * \DDD (octal character code): Strings. (line 30) 16423 * \f (formfeed character): Strings. (line 18) 16424 * \n (newline character): Strings. (line 21) 16425 * \r (carriage return character): Strings. (line 24) 16426 * \t (tab): Strings. (line 27) 16427 * \XD... (hex character code): Strings. (line 36) 16428 * _ opcode prefix: Xtensa Opcodes. (line 9) 16429 * a.out: Object. (line 6) 16430 * a.out symbol attributes: a.out Symbols. (line 6) 16431 * A_DIR environment variable, TIC54X: TIC54X-Env. (line 6) 16432 * ABI options, SH64: SH64 Options. (line 29) 16433 * ABORT directive: ABORT. (line 6) 16434 * abort directive: Abort. (line 6) 16435 * absolute section: Ld Sections. (line 29) 16436 * absolute-literals directive: Absolute Literals Directive. 16437 (line 6) 16438 * ADDI instructions, relaxation: Xtensa Immediate Relaxation. 16439 (line 43) 16440 * addition, permitted arguments: Infix Ops. (line 44) 16441 * addresses: Expressions. (line 6) 16442 * addresses, format of: Secs Background. (line 68) 16443 * addressing modes, D10V: D10V-Addressing. (line 6) 16444 * addressing modes, D30V: D30V-Addressing. (line 6) 16445 * addressing modes, H8/300: H8/300-Addressing. (line 6) 16446 * addressing modes, M680x0: M68K-Syntax. (line 21) 16447 * addressing modes, M68HC11: M68HC11-Syntax. (line 17) 16448 * addressing modes, SH: SH-Addressing. (line 6) 16449 * addressing modes, SH64: SH64-Addressing. (line 6) 16450 * addressing modes, Z8000: Z8000-Addressing. (line 6) 16451 * ADR reg,<label> pseudo op, ARM: ARM Opcodes. (line 25) 16452 * ADRL reg,<label> pseudo op, ARM: ARM Opcodes. (line 35) 16453 * advancing location counter: Org. (line 6) 16454 * align directive: Align. (line 6) 16455 * align directive, ARM: ARM Directives. (line 6) 16456 * align directive, SPARC: Sparc-Directives. (line 9) 16457 * align directive, TIC54X: TIC54X-Directives. (line 6) 16458 * alignment of branch targets: Xtensa Automatic Alignment. 16459 (line 6) 16460 * alignment of ENTRY instructions: Xtensa Automatic Alignment. 16461 (line 6) 16462 * alignment of LOOP instructions: Xtensa Automatic Alignment. 16463 (line 6) 16464 * Alpha floating point (IEEE): Alpha Floating Point. 16465 (line 6) 16466 * Alpha line comment character: Alpha-Chars. (line 6) 16467 * Alpha line separator: Alpha-Chars. (line 8) 16468 * Alpha notes: Alpha Notes. (line 6) 16469 * Alpha options: Alpha Options. (line 6) 16470 * Alpha registers: Alpha-Regs. (line 6) 16471 * Alpha relocations: Alpha-Relocs. (line 6) 16472 * Alpha support: Alpha-Dependent. (line 6) 16473 * Alpha Syntax: Alpha Options. (line 54) 16474 * Alpha-only directives: Alpha Directives. (line 10) 16475 * altered difference tables: Word. (line 12) 16476 * alternate syntax for the 680x0: M68K-Moto-Syntax. (line 6) 16477 * ARC floating point (IEEE): ARC Floating Point. (line 6) 16478 * ARC machine directives: ARC Directives. (line 6) 16479 * ARC opcodes: ARC Opcodes. (line 6) 16480 * ARC options (none): ARC Options. (line 6) 16481 * ARC register names: ARC-Regs. (line 6) 16482 * ARC special characters: ARC-Chars. (line 6) 16483 * ARC support: ARC-Dependent. (line 6) 16484 * arc5 arc5, ARC: ARC Options. (line 10) 16485 * arc6 arc6, ARC: ARC Options. (line 13) 16486 * arc7 arc7, ARC: ARC Options. (line 21) 16487 * arc8 arc8, ARC: ARC Options. (line 24) 16488 * arch directive, i386: i386-Arch. (line 6) 16489 * arch directive, M680x0: M68K-Directives. (line 22) 16490 * arch directive, x86-64: i386-Arch. (line 6) 16491 * architecture options, i960: Options-i960. (line 6) 16492 * architecture options, IP2022: IP2K-Opts. (line 9) 16493 * architecture options, IP2K: IP2K-Opts. (line 14) 16494 * architecture options, M16C: M32C-Opts. (line 12) 16495 * architecture options, M32C: M32C-Opts. (line 9) 16496 * architecture options, M32R: M32R-Opts. (line 21) 16497 * architecture options, M32R2: M32R-Opts. (line 17) 16498 * architecture options, M32RX: M32R-Opts. (line 9) 16499 * architecture options, M680x0: M68K-Opts. (line 103) 16500 * Architecture variant option, CRIS: CRIS-Opts. (line 33) 16501 * architectures, PowerPC: PowerPC-Opts. (line 6) 16502 * architectures, SPARC: Sparc-Opts. (line 6) 16503 * arguments for addition: Infix Ops. (line 44) 16504 * arguments for subtraction: Infix Ops. (line 49) 16505 * arguments in expressions: Arguments. (line 6) 16506 * arithmetic functions: Operators. (line 6) 16507 * arithmetic operands: Arguments. (line 6) 16508 * arm directive, ARM: ARM Directives. (line 36) 16509 * ARM floating point (IEEE): ARM Floating Point. (line 6) 16510 * ARM identifiers: ARM-Chars. (line 15) 16511 * ARM immediate character: ARM-Chars. (line 13) 16512 * ARM line comment character: ARM-Chars. (line 6) 16513 * ARM line separator: ARM-Chars. (line 10) 16514 * ARM machine directives: ARM Directives. (line 6) 16515 * ARM opcodes: ARM Opcodes. (line 6) 16516 * ARM options (none): ARM Options. (line 6) 16517 * ARM register names: ARM-Regs. (line 6) 16518 * ARM support: ARM-Dependent. (line 6) 16519 * ascii directive: Ascii. (line 6) 16520 * asciz directive: Asciz. (line 6) 16521 * asg directive, TIC54X: TIC54X-Directives. (line 20) 16522 * assembler bugs, reporting: Bug Reporting. (line 6) 16523 * assembler crash: Bug Criteria. (line 9) 16524 * assembler directive .arch, CRIS: CRIS-Pseudos. (line 45) 16525 * assembler directive .dword, CRIS: CRIS-Pseudos. (line 12) 16526 * assembler directive .far, M68HC11: M68HC11-Directives. (line 20) 16527 * assembler directive .interrupt, M68HC11: M68HC11-Directives. 16528 (line 26) 16529 * assembler directive .mode, M68HC11: M68HC11-Directives. (line 16) 16530 * assembler directive .relax, M68HC11: M68HC11-Directives. (line 10) 16531 * assembler directive .syntax, CRIS: CRIS-Pseudos. (line 17) 16532 * assembler directive .xrefb, M68HC11: M68HC11-Directives. (line 31) 16533 * assembler directive BSPEC, MMIX: MMIX-Pseudos. (line 131) 16534 * assembler directive BYTE, MMIX: MMIX-Pseudos. (line 97) 16535 * assembler directive ESPEC, MMIX: MMIX-Pseudos. (line 131) 16536 * assembler directive GREG, MMIX: MMIX-Pseudos. (line 50) 16537 * assembler directive IS, MMIX: MMIX-Pseudos. (line 42) 16538 * assembler directive LOC, MMIX: MMIX-Pseudos. (line 7) 16539 * assembler directive LOCAL, MMIX: MMIX-Pseudos. (line 28) 16540 * assembler directive OCTA, MMIX: MMIX-Pseudos. (line 108) 16541 * assembler directive PREFIX, MMIX: MMIX-Pseudos. (line 120) 16542 * assembler directive TETRA, MMIX: MMIX-Pseudos. (line 108) 16543 * assembler directive WYDE, MMIX: MMIX-Pseudos. (line 108) 16544 * assembler directives, CRIS: CRIS-Pseudos. (line 6) 16545 * assembler directives, M68HC11: M68HC11-Directives. (line 6) 16546 * assembler directives, M68HC12: M68HC11-Directives. (line 6) 16547 * assembler directives, MMIX: MMIX-Pseudos. (line 6) 16548 * assembler internal logic error: As Sections. (line 13) 16549 * assembler version: v. (line 6) 16550 * assembler, and linker: Secs Background. (line 10) 16551 * assembly listings, enabling: a. (line 6) 16552 * assigning values to symbols <1>: Equ. (line 6) 16553 * assigning values to symbols: Setting Symbols. (line 6) 16554 * atmp directive, i860: Directives-i860. (line 16) 16555 * att_syntax pseudo op, i386: i386-Syntax. (line 6) 16556 * att_syntax pseudo op, x86-64: i386-Syntax. (line 6) 16557 * attributes, symbol: Symbol Attributes. (line 6) 16558 * auxiliary attributes, COFF symbols: COFF Symbols. (line 19) 16559 * auxiliary symbol information, COFF: Dim. (line 6) 16560 * Av7: Sparc-Opts. (line 25) 16561 * backslash (\\): Strings. (line 40) 16562 * backspace (\b): Strings. (line 15) 16563 * balign directive: Balign. (line 6) 16564 * balignl directive: Balign. (line 27) 16565 * balignw directive: Balign. (line 27) 16566 * bes directive, TIC54X: TIC54X-Directives. (line 197) 16567 * BFIN directives: BFIN Directives. (line 6) 16568 * BFIN syntax: BFIN Syntax. (line 6) 16569 * big endian output, MIPS: Overview. (line 606) 16570 * big endian output, PJ: Overview. (line 513) 16571 * big-endian output, MIPS: MIPS Opts. (line 13) 16572 * bignums: Bignums. (line 6) 16573 * binary constants, TIC54X: TIC54X-Constants. (line 8) 16574 * binary files, including: Incbin. (line 6) 16575 * binary integers: Integers. (line 6) 16576 * bit names, IA-64: IA-64-Bits. (line 6) 16577 * bitfields, not supported on VAX: VAX-no. (line 6) 16578 * Blackfin support: BFIN-Dependent. (line 6) 16579 * block: Z8000 Directives. (line 55) 16580 * branch improvement, M680x0: M68K-Branch. (line 6) 16581 * branch improvement, M68HC11: M68HC11-Branch. (line 6) 16582 * branch improvement, VAX: VAX-branch. (line 6) 16583 * branch instructions, relaxation: Xtensa Branch Relaxation. 16584 (line 6) 16585 * branch recording, i960: Options-i960. (line 22) 16586 * branch statistics table, i960: Options-i960. (line 40) 16587 * branch target alignment: Xtensa Automatic Alignment. 16588 (line 6) 16589 * break directive, TIC54X: TIC54X-Directives. (line 143) 16590 * BSD syntax: PDP-11-Syntax. (line 6) 16591 * bss directive, i960: Directives-i960. (line 6) 16592 * bss directive, TIC54X: TIC54X-Directives. (line 29) 16593 * bss section <1>: bss. (line 6) 16594 * bss section: Ld Sections. (line 20) 16595 * bug criteria: Bug Criteria. (line 6) 16596 * bug reports: Bug Reporting. (line 6) 16597 * bugs in assembler: Reporting Bugs. (line 6) 16598 * Built-in symbols, CRIS: CRIS-Symbols. (line 6) 16599 * builtin math functions, TIC54X: TIC54X-Builtins. (line 6) 16600 * builtin subsym functions, TIC54X: TIC54X-Macros. (line 16) 16601 * bus lock prefixes, i386: i386-Prefixes. (line 36) 16602 * bval: Z8000 Directives. (line 30) 16603 * byte directive: Byte. (line 6) 16604 * byte directive, TIC54X: TIC54X-Directives. (line 36) 16605 * C54XDSP_DIR environment variable, TIC54X: TIC54X-Env. (line 6) 16606 * c_mode directive, TIC54X: TIC54X-Directives. (line 51) 16607 * call instructions, i386: i386-Mnemonics. (line 51) 16608 * call instructions, relaxation: Xtensa Call Relaxation. 16609 (line 6) 16610 * call instructions, x86-64: i386-Mnemonics. (line 51) 16611 * callj, i960 pseudo-opcode: callj-i960. (line 6) 16612 * carriage return (\r): Strings. (line 24) 16613 * case sensitivity, Z80: Z80-Case. (line 6) 16614 * cfi_endproc directive: CFI directives. (line 14) 16615 * cfi_startproc directive: CFI directives. (line 6) 16616 * char directive, TIC54X: TIC54X-Directives. (line 36) 16617 * character constant, Z80: Z80-Chars. (line 13) 16618 * character constants: Characters. (line 6) 16619 * character escape codes: Strings. (line 15) 16620 * character escapes, Z80: Z80-Chars. (line 11) 16621 * character, single: Chars. (line 6) 16622 * characters used in symbols: Symbol Intro. (line 6) 16623 * clink directive, TIC54X: TIC54X-Directives. (line 45) 16624 * code directive, ARM: ARM Directives. (line 29) 16625 * code16 directive, i386: i386-16bit. (line 6) 16626 * code16gcc directive, i386: i386-16bit. (line 6) 16627 * code32 directive, i386: i386-16bit. (line 6) 16628 * code64 directive, i386: i386-16bit. (line 6) 16629 * code64 directive, x86-64: i386-16bit. (line 6) 16630 * COFF auxiliary symbol information: Dim. (line 6) 16631 * COFF structure debugging: Tag. (line 6) 16632 * COFF symbol attributes: COFF Symbols. (line 6) 16633 * COFF symbol descriptor: Desc. (line 6) 16634 * COFF symbol storage class: Scl. (line 6) 16635 * COFF symbol type: Type. (line 11) 16636 * COFF symbols, debugging: Def. (line 6) 16637 * COFF value attribute: Val. (line 6) 16638 * COMDAT: Linkonce. (line 6) 16639 * comm directive: Comm. (line 6) 16640 * command line conventions: Command Line. (line 6) 16641 * command line options, V850: V850 Options. (line 9) 16642 * command-line options ignored, VAX: VAX-Opts. (line 6) 16643 * comments: Comments. (line 6) 16644 * comments, M680x0: M68K-Chars. (line 6) 16645 * comments, removed by preprocessor: Preprocessing. (line 11) 16646 * common directive, SPARC: Sparc-Directives. (line 12) 16647 * common sections: Linkonce. (line 6) 16648 * common variable storage: bss. (line 6) 16649 * compare and jump expansions, i960: Compare-and-branch-i960. 16650 (line 13) 16651 * compare/branch instructions, i960: Compare-and-branch-i960. 16652 (line 6) 16653 * comparison expressions: Infix Ops. (line 55) 16654 * conditional assembly: If. (line 6) 16655 * constant, single character: Chars. (line 6) 16656 * constants: Constants. (line 6) 16657 * constants, bignum: Bignums. (line 6) 16658 * constants, character: Characters. (line 6) 16659 * constants, converted by preprocessor: Preprocessing. (line 14) 16660 * constants, floating point: Flonums. (line 6) 16661 * constants, integer: Integers. (line 6) 16662 * constants, number: Numbers. (line 6) 16663 * constants, string: Strings. (line 6) 16664 * constants, TIC54X: TIC54X-Constants. (line 6) 16665 * conversion instructions, i386: i386-Mnemonics. (line 32) 16666 * conversion instructions, x86-64: i386-Mnemonics. (line 32) 16667 * coprocessor wait, i386: i386-Prefixes. (line 40) 16668 * copy directive, TIC54X: TIC54X-Directives. (line 54) 16669 * cpu directive, M680x0: M68K-Directives. (line 30) 16670 * crash of assembler: Bug Criteria. (line 9) 16671 * CRIS --emulation=crisaout command line option: CRIS-Opts. (line 9) 16672 * CRIS --emulation=criself command line option: CRIS-Opts. (line 9) 16673 * CRIS --march=ARCHITECTURE command line option: CRIS-Opts. (line 33) 16674 * CRIS --mul-bug-abort command line option: CRIS-Opts. (line 61) 16675 * CRIS --no-mul-bug-abort command line option: CRIS-Opts. (line 61) 16676 * CRIS --no-underscore command line option: CRIS-Opts. (line 15) 16677 * CRIS --pic command line option: CRIS-Opts. (line 27) 16678 * CRIS --underscore command line option: CRIS-Opts. (line 15) 16679 * CRIS -N command line option: CRIS-Opts. (line 57) 16680 * CRIS architecture variant option: CRIS-Opts. (line 33) 16681 * CRIS assembler directive .arch: CRIS-Pseudos. (line 45) 16682 * CRIS assembler directive .dword: CRIS-Pseudos. (line 12) 16683 * CRIS assembler directive .syntax: CRIS-Pseudos. (line 17) 16684 * CRIS assembler directives: CRIS-Pseudos. (line 6) 16685 * CRIS built-in symbols: CRIS-Symbols. (line 6) 16686 * CRIS instruction expansion: CRIS-Expand. (line 6) 16687 * CRIS line comment characters: CRIS-Chars. (line 6) 16688 * CRIS options: CRIS-Opts. (line 6) 16689 * CRIS position-independent code: CRIS-Opts. (line 27) 16690 * CRIS pseudo-op .arch: CRIS-Pseudos. (line 45) 16691 * CRIS pseudo-op .dword: CRIS-Pseudos. (line 12) 16692 * CRIS pseudo-op .syntax: CRIS-Pseudos. (line 17) 16693 * CRIS pseudo-ops: CRIS-Pseudos. (line 6) 16694 * CRIS register names: CRIS-Regs. (line 6) 16695 * CRIS support: CRIS-Dependent. (line 6) 16696 * CRIS symbols in position-independent code: CRIS-Pic. (line 6) 16697 * ctbp register, V850: V850-Regs. (line 131) 16698 * ctoff pseudo-op, V850: V850 Opcodes. (line 111) 16699 * ctpc register, V850: V850-Regs. (line 119) 16700 * ctpsw register, V850: V850-Regs. (line 122) 16701 * current address: Dot. (line 6) 16702 * current address, advancing: Org. (line 6) 16703 * D10V @word modifier: D10V-Word. (line 6) 16704 * D10V addressing modes: D10V-Addressing. (line 6) 16705 * D10V floating point: D10V-Float. (line 6) 16706 * D10V line comment character: D10V-Chars. (line 6) 16707 * D10V opcode summary: D10V-Opcodes. (line 6) 16708 * D10V optimization: Overview. (line 391) 16709 * D10V options: D10V-Opts. (line 6) 16710 * D10V registers: D10V-Regs. (line 6) 16711 * D10V size modifiers: D10V-Size. (line 6) 16712 * D10V sub-instruction ordering: D10V-Chars. (line 6) 16713 * D10V sub-instructions: D10V-Subs. (line 6) 16714 * D10V support: D10V-Dependent. (line 6) 16715 * D10V syntax: D10V-Syntax. (line 6) 16716 * D30V addressing modes: D30V-Addressing. (line 6) 16717 * D30V floating point: D30V-Float. (line 6) 16718 * D30V Guarded Execution: D30V-Guarded. (line 6) 16719 * D30V line comment character: D30V-Chars. (line 6) 16720 * D30V nops: Overview. (line 399) 16721 * D30V nops after 32-bit multiply: Overview. (line 402) 16722 * D30V opcode summary: D30V-Opcodes. (line 6) 16723 * D30V optimization: Overview. (line 396) 16724 * D30V options: D30V-Opts. (line 6) 16725 * D30V registers: D30V-Regs. (line 6) 16726 * D30V size modifiers: D30V-Size. (line 6) 16727 * D30V sub-instruction ordering: D30V-Chars. (line 6) 16728 * D30V sub-instructions: D30V-Subs. (line 6) 16729 * D30V support: D30V-Dependent. (line 6) 16730 * D30V syntax: D30V-Syntax. (line 6) 16731 * data alignment on SPARC: Sparc-Aligned-Data. (line 6) 16732 * data and text sections, joining: R. (line 6) 16733 * data directive: Data. (line 6) 16734 * data directive, TIC54X: TIC54X-Directives. (line 61) 16735 * data section: Ld Sections. (line 9) 16736 * data1 directive, M680x0: M68K-Directives. (line 9) 16737 * data2 directive, M680x0: M68K-Directives. (line 12) 16738 * datalabel, SH64: SH64-Addressing. (line 16) 16739 * dbpc register, V850: V850-Regs. (line 125) 16740 * dbpsw register, V850: V850-Regs. (line 128) 16741 * debuggers, and symbol order: Symbols. (line 10) 16742 * debugging COFF symbols: Def. (line 6) 16743 * DEC syntax: PDP-11-Syntax. (line 6) 16744 * decimal integers: Integers. (line 12) 16745 * def directive: Def. (line 6) 16746 * def directive, TIC54X: TIC54X-Directives. (line 103) 16747 * density instructions: Density Instructions. 16748 (line 6) 16749 * dependency tracking: MD. (line 6) 16750 * deprecated directives: Deprecated. (line 6) 16751 * desc directive: Desc. (line 6) 16752 * descriptor, of a.out symbol: Symbol Desc. (line 6) 16753 * dfloat directive, VAX: VAX-directives. (line 10) 16754 * difference tables altered: Word. (line 12) 16755 * difference tables, warning: K. (line 6) 16756 * differences, mmixal: MMIX-mmixal. (line 6) 16757 * dim directive: Dim. (line 6) 16758 * directives and instructions: Statements. (line 19) 16759 * directives for PowerPC: PowerPC-Pseudo. (line 6) 16760 * directives, BFIN: BFIN Directives. (line 6) 16761 * directives, M32R: M32R-Directives. (line 6) 16762 * directives, M680x0: M68K-Directives. (line 6) 16763 * directives, machine independent: Pseudo Ops. (line 6) 16764 * directives, Xtensa: Xtensa Directives. (line 6) 16765 * directives, Z8000: Z8000 Directives. (line 6) 16766 * displacement sizing character, VAX: VAX-operands. (line 12) 16767 * dollar local symbols: Symbol Names. (line 91) 16768 * dot (symbol): Dot. (line 6) 16769 * double directive: Double. (line 6) 16770 * double directive, i386: i386-Float. (line 14) 16771 * double directive, M680x0: M68K-Float. (line 14) 16772 * double directive, M68HC11: M68HC11-Float. (line 14) 16773 * double directive, TIC54X: TIC54X-Directives. (line 64) 16774 * double directive, VAX: VAX-float. (line 15) 16775 * double directive, x86-64: i386-Float. (line 14) 16776 * doublequote (\"): Strings. (line 43) 16777 * drlist directive, TIC54X: TIC54X-Directives. (line 73) 16778 * drnolist directive, TIC54X: TIC54X-Directives. (line 73) 16779 * dual directive, i860: Directives-i860. (line 6) 16780 * ECOFF sections: MIPS Object. (line 6) 16781 * ecr register, V850: V850-Regs. (line 113) 16782 * eight-byte integer: Quad. (line 9) 16783 * eipc register, V850: V850-Regs. (line 101) 16784 * eipsw register, V850: V850-Regs. (line 104) 16785 * eject directive: Eject. (line 6) 16786 * ELF symbol type: Type. (line 22) 16787 * else directive: Else. (line 6) 16788 * elseif directive: Elseif. (line 6) 16789 * empty expressions: Empty Exprs. (line 6) 16790 * emsg directive, TIC54X: TIC54X-Directives. (line 77) 16791 * emulation: Overview. (line 697) 16792 * end directive: End. (line 6) 16793 * enddual directive, i860: Directives-i860. (line 11) 16794 * endef directive: Endef. (line 6) 16795 * endfunc directive: Endfunc. (line 6) 16796 * endianness, MIPS: Overview. (line 606) 16797 * endianness, PJ: Overview. (line 513) 16798 * endif directive: Endif. (line 6) 16799 * endloop directive, TIC54X: TIC54X-Directives. (line 143) 16800 * endm directive: Macro. (line 96) 16801 * endm directive, TIC54X: TIC54X-Directives. (line 153) 16802 * endstruct directive, TIC54X: TIC54X-Directives. (line 217) 16803 * endunion directive, TIC54X: TIC54X-Directives. (line 251) 16804 * ENTRY instructions, alignment: Xtensa Automatic Alignment. 16805 (line 6) 16806 * environment settings, TIC54X: TIC54X-Env. (line 6) 16807 * EOF, newline must precede: Statements. (line 13) 16808 * ep register, V850: V850-Regs. (line 95) 16809 * equ directive: Equ. (line 6) 16810 * equ directive, TIC54X: TIC54X-Directives. (line 192) 16811 * equiv directive: Equiv. (line 6) 16812 * eqv directive: Eqv. (line 6) 16813 * err directive: Err. (line 6) 16814 * error directive: Error. (line 6) 16815 * error messages: Errors. (line 6) 16816 * error on valid input: Bug Criteria. (line 12) 16817 * errors, caused by warnings: W. (line 16) 16818 * errors, continuing after: Z. (line 6) 16819 * ESA/390 floating point (IEEE): ESA/390 Floating Point. 16820 (line 6) 16821 * ESA/390 support: ESA/390-Dependent. (line 6) 16822 * ESA/390 Syntax: ESA/390 Options. (line 8) 16823 * ESA/390-only directives: ESA/390 Directives. (line 12) 16824 * escape codes, character: Strings. (line 15) 16825 * eval directive, TIC54X: TIC54X-Directives. (line 24) 16826 * even: Z8000 Directives. (line 58) 16827 * even directive, M680x0: M68K-Directives. (line 15) 16828 * even directive, TIC54X: TIC54X-Directives. (line 6) 16829 * exitm directive: Macro. (line 99) 16830 * expr (internal section): As Sections. (line 17) 16831 * expression arguments: Arguments. (line 6) 16832 * expressions: Expressions. (line 6) 16833 * expressions, comparison: Infix Ops. (line 55) 16834 * expressions, empty: Empty Exprs. (line 6) 16835 * expressions, integer: Integer Exprs. (line 6) 16836 * extAuxRegister directive, ARC: ARC Directives. (line 18) 16837 * extCondCode directive, ARC: ARC Directives. (line 41) 16838 * extCoreRegister directive, ARC: ARC Directives. (line 53) 16839 * extend directive M680x0: M68K-Float. (line 17) 16840 * extend directive M68HC11: M68HC11-Float. (line 17) 16841 * extended directive, i960: Directives-i960. (line 13) 16842 * extern directive: Extern. (line 6) 16843 * extInstruction directive, ARC: ARC Directives. (line 78) 16844 * fail directive: Fail. (line 6) 16845 * far_mode directive, TIC54X: TIC54X-Directives. (line 82) 16846 * faster processing (-f): f. (line 6) 16847 * fatal signal: Bug Criteria. (line 9) 16848 * fclist directive, TIC54X: TIC54X-Directives. (line 87) 16849 * fcnolist directive, TIC54X: TIC54X-Directives. (line 87) 16850 * fepc register, V850: V850-Regs. (line 107) 16851 * fepsw register, V850: V850-Regs. (line 110) 16852 * ffloat directive, VAX: VAX-directives. (line 14) 16853 * field directive, TIC54X: TIC54X-Directives. (line 91) 16854 * file directive <1>: File. (line 6) 16855 * file directive: LNS directives. (line 6) 16856 * file directive, MSP 430: MSP430 Directives. (line 6) 16857 * file name, logical: File. (line 6) 16858 * files, including: Include. (line 6) 16859 * files, input: Input Files. (line 6) 16860 * fill directive: Fill. (line 6) 16861 * filling memory <1>: Space. (line 6) 16862 * filling memory: Skip. (line 6) 16863 * FLIX syntax: Xtensa Syntax. (line 6) 16864 * float directive: Float. (line 6) 16865 * float directive, i386: i386-Float. (line 14) 16866 * float directive, M680x0: M68K-Float. (line 11) 16867 * float directive, M68HC11: M68HC11-Float. (line 11) 16868 * float directive, TIC54X: TIC54X-Directives. (line 64) 16869 * float directive, VAX: VAX-float. (line 15) 16870 * float directive, x86-64: i386-Float. (line 14) 16871 * floating point numbers: Flonums. (line 6) 16872 * floating point numbers (double): Double. (line 6) 16873 * floating point numbers (single) <1>: Single. (line 6) 16874 * floating point numbers (single): Float. (line 6) 16875 * floating point, Alpha (IEEE): Alpha Floating Point. 16876 (line 6) 16877 * floating point, ARC (IEEE): ARC Floating Point. (line 6) 16878 * floating point, ARM (IEEE): ARM Floating Point. (line 6) 16879 * floating point, D10V: D10V-Float. (line 6) 16880 * floating point, D30V: D30V-Float. (line 6) 16881 * floating point, ESA/390 (IEEE): ESA/390 Floating Point. 16882 (line 6) 16883 * floating point, H8/300 (IEEE): H8/300 Floating Point. 16884 (line 6) 16885 * floating point, HPPA (IEEE): HPPA Floating Point. (line 6) 16886 * floating point, i386: i386-Float. (line 6) 16887 * floating point, i960 (IEEE): Floating Point-i960. (line 6) 16888 * floating point, M680x0: M68K-Float. (line 6) 16889 * floating point, M68HC11: M68HC11-Float. (line 6) 16890 * floating point, MSP 430 (IEEE): MSP430 Floating Point. 16891 (line 6) 16892 * floating point, SH (IEEE): SH Floating Point. (line 6) 16893 * floating point, SPARC (IEEE): Sparc-Float. (line 6) 16894 * floating point, V850 (IEEE): V850 Floating Point. (line 6) 16895 * floating point, VAX: VAX-float. (line 6) 16896 * floating point, x86-64: i386-Float. (line 6) 16897 * floating point, Z80: Z80 Floating Point. (line 6) 16898 * flonums: Flonums. (line 6) 16899 * force_thumb directive, ARM: ARM Directives. (line 39) 16900 * format of error messages: Errors. (line 24) 16901 * format of warning messages: Errors. (line 12) 16902 * formfeed (\f): Strings. (line 18) 16903 * func directive: Func. (line 6) 16904 * functions, in expressions: Operators. (line 6) 16905 * gbr960, i960 postprocessor: Options-i960. (line 40) 16906 * gfloat directive, VAX: VAX-directives. (line 18) 16907 * global: Z8000 Directives. (line 21) 16908 * global directive: Global. (line 6) 16909 * global directive, TIC54X: TIC54X-Directives. (line 103) 16910 * gp register, MIPS: MIPS Object. (line 11) 16911 * gp register, V850: V850-Regs. (line 17) 16912 * grouping data: Sub-Sections. (line 6) 16913 * H8/300 addressing modes: H8/300-Addressing. (line 6) 16914 * H8/300 floating point (IEEE): H8/300 Floating Point. 16915 (line 6) 16916 * H8/300 line comment character: H8/300-Chars. (line 6) 16917 * H8/300 line separator: H8/300-Chars. (line 8) 16918 * H8/300 machine directives (none): H8/300 Directives. (line 6) 16919 * H8/300 opcode summary: H8/300 Opcodes. (line 6) 16920 * H8/300 options (none): H8/300 Options. (line 6) 16921 * H8/300 registers: H8/300-Regs. (line 6) 16922 * H8/300 size suffixes: H8/300 Opcodes. (line 163) 16923 * H8/300 support: H8/300-Dependent. (line 6) 16924 * H8/300H, assembling for: H8/300 Directives. (line 8) 16925 * half directive, ARC: ARC Directives. (line 156) 16926 * half directive, SPARC: Sparc-Directives. (line 17) 16927 * half directive, TIC54X: TIC54X-Directives. (line 111) 16928 * hex character code (\XD...): Strings. (line 36) 16929 * hexadecimal integers: Integers. (line 15) 16930 * hexadecimal prefix, Z80: Z80-Chars. (line 8) 16931 * hfloat directive, VAX: VAX-directives. (line 22) 16932 * hi pseudo-op, V850: V850 Opcodes. (line 33) 16933 * hi0 pseudo-op, V850: V850 Opcodes. (line 10) 16934 * hidden directive: Hidden. (line 6) 16935 * high directive, M32R: M32R-Directives. (line 18) 16936 * hilo pseudo-op, V850: V850 Opcodes. (line 55) 16937 * HPPA directives not supported: HPPA Directives. (line 11) 16938 * HPPA floating point (IEEE): HPPA Floating Point. (line 6) 16939 * HPPA Syntax: HPPA Options. (line 8) 16940 * HPPA-only directives: HPPA Directives. (line 24) 16941 * hword directive: hword. (line 6) 16942 * i370 support: ESA/390-Dependent. (line 6) 16943 * i386 16-bit code: i386-16bit. (line 6) 16944 * i386 arch directive: i386-Arch. (line 6) 16945 * i386 att_syntax pseudo op: i386-Syntax. (line 6) 16946 * i386 conversion instructions: i386-Mnemonics. (line 32) 16947 * i386 floating point: i386-Float. (line 6) 16948 * i386 immediate operands: i386-Syntax. (line 15) 16949 * i386 instruction naming: i386-Mnemonics. (line 6) 16950 * i386 instruction prefixes: i386-Prefixes. (line 6) 16951 * i386 intel_syntax pseudo op: i386-Syntax. (line 6) 16952 * i386 jump optimization: i386-Jumps. (line 6) 16953 * i386 jump, call, return: i386-Syntax. (line 38) 16954 * i386 jump/call operands: i386-Syntax. (line 15) 16955 * i386 memory references: i386-Memory. (line 6) 16956 * i386 mul, imul instructions: i386-Notes. (line 6) 16957 * i386 options: i386-Options. (line 6) 16958 * i386 register operands: i386-Syntax. (line 15) 16959 * i386 registers: i386-Regs. (line 6) 16960 * i386 sections: i386-Syntax. (line 44) 16961 * i386 size suffixes: i386-Syntax. (line 29) 16962 * i386 source, destination operands: i386-Syntax. (line 22) 16963 * i386 support: i386-Dependent. (line 6) 16964 * i386 syntax compatibility: i386-Syntax. (line 6) 16965 * i80306 support: i386-Dependent. (line 6) 16966 * i860 machine directives: Directives-i860. (line 6) 16967 * i860 opcodes: Opcodes for i860. (line 6) 16968 * i860 support: i860-Dependent. (line 6) 16969 * i960 architecture options: Options-i960. (line 6) 16970 * i960 branch recording: Options-i960. (line 22) 16971 * i960 callj pseudo-opcode: callj-i960. (line 6) 16972 * i960 compare and jump expansions: Compare-and-branch-i960. 16973 (line 13) 16974 * i960 compare/branch instructions: Compare-and-branch-i960. 16975 (line 6) 16976 * i960 floating point (IEEE): Floating Point-i960. (line 6) 16977 * i960 machine directives: Directives-i960. (line 6) 16978 * i960 opcodes: Opcodes for i960. (line 6) 16979 * i960 options: Options-i960. (line 6) 16980 * i960 support: i960-Dependent. (line 6) 16981 * IA-64 line comment character: IA-64-Chars. (line 6) 16982 * IA-64 line separator: IA-64-Chars. (line 8) 16983 * IA-64 options: IA-64 Options. (line 6) 16984 * IA-64 Processor-status-Register bit names: IA-64-Bits. (line 6) 16985 * IA-64 registers: IA-64-Regs. (line 6) 16986 * IA-64 support: IA-64-Dependent. (line 6) 16987 * IA-64 Syntax: IA-64 Options. (line 96) 16988 * ident directive: Ident. (line 6) 16989 * identifiers, ARM: ARM-Chars. (line 15) 16990 * identifiers, MSP 430: MSP430-Chars. (line 8) 16991 * if directive: If. (line 6) 16992 * ifb directive: If. (line 21) 16993 * ifc directive: If. (line 25) 16994 * ifdef directive: If. (line 16) 16995 * ifeq directive: If. (line 33) 16996 * ifeqs directive: If. (line 36) 16997 * ifge directive: If. (line 40) 16998 * ifgt directive: If. (line 44) 16999 * ifle directive: If. (line 48) 17000 * iflt directive: If. (line 52) 17001 * ifnb directive: If. (line 56) 17002 * ifnc directive: If. (line 61) 17003 * ifndef directive: If. (line 65) 17004 * ifne directive: If. (line 72) 17005 * ifnes directive: If. (line 76) 17006 * ifnotdef directive: If. (line 65) 17007 * immediate character, ARM: ARM-Chars. (line 13) 17008 * immediate character, M680x0: M68K-Chars. (line 6) 17009 * immediate character, VAX: VAX-operands. (line 6) 17010 * immediate fields, relaxation: Xtensa Immediate Relaxation. 17011 (line 6) 17012 * immediate operands, i386: i386-Syntax. (line 15) 17013 * immediate operands, x86-64: i386-Syntax. (line 15) 17014 * imul instruction, i386: i386-Notes. (line 6) 17015 * imul instruction, x86-64: i386-Notes. (line 6) 17016 * incbin directive: Incbin. (line 6) 17017 * include directive: Include. (line 6) 17018 * include directive search path: I. (line 6) 17019 * indirect character, VAX: VAX-operands. (line 9) 17020 * infix operators: Infix Ops. (line 6) 17021 * inhibiting interrupts, i386: i386-Prefixes. (line 36) 17022 * input: Input Files. (line 6) 17023 * input file linenumbers: Input Files. (line 35) 17024 * instruction expansion, CRIS: CRIS-Expand. (line 6) 17025 * instruction expansion, MMIX: MMIX-Expand. (line 6) 17026 * instruction naming, i386: i386-Mnemonics. (line 6) 17027 * instruction naming, x86-64: i386-Mnemonics. (line 6) 17028 * instruction prefixes, i386: i386-Prefixes. (line 6) 17029 * instruction set, M680x0: M68K-opcodes. (line 6) 17030 * instruction set, M68HC11: M68HC11-opcodes. (line 6) 17031 * instruction summary, D10V: D10V-Opcodes. (line 6) 17032 * instruction summary, D30V: D30V-Opcodes. (line 6) 17033 * instruction summary, H8/300: H8/300 Opcodes. (line 6) 17034 * instruction summary, SH: SH Opcodes. (line 6) 17035 * instruction summary, SH64: SH64 Opcodes. (line 6) 17036 * instruction summary, Z8000: Z8000 Opcodes. (line 6) 17037 * instructions and directives: Statements. (line 19) 17038 * int directive: Int. (line 6) 17039 * int directive, H8/300: H8/300 Directives. (line 6) 17040 * int directive, i386: i386-Float. (line 21) 17041 * int directive, TIC54X: TIC54X-Directives. (line 111) 17042 * int directive, x86-64: i386-Float. (line 21) 17043 * integer expressions: Integer Exprs. (line 6) 17044 * integer, 16-byte: Octa. (line 6) 17045 * integer, 8-byte: Quad. (line 9) 17046 * integers: Integers. (line 6) 17047 * integers, 16-bit: hword. (line 6) 17048 * integers, 32-bit: Int. (line 6) 17049 * integers, binary: Integers. (line 6) 17050 * integers, decimal: Integers. (line 12) 17051 * integers, hexadecimal: Integers. (line 15) 17052 * integers, octal: Integers. (line 9) 17053 * integers, one byte: Byte. (line 6) 17054 * intel_syntax pseudo op, i386: i386-Syntax. (line 6) 17055 * intel_syntax pseudo op, x86-64: i386-Syntax. (line 6) 17056 * internal assembler sections: As Sections. (line 6) 17057 * internal directive: Internal. (line 6) 17058 * invalid input: Bug Criteria. (line 14) 17059 * invocation summary: Overview. (line 6) 17060 * IP2K architecture options: IP2K-Opts. (line 9) 17061 * IP2K options: IP2K-Opts. (line 6) 17062 * IP2K support: IP2K-Dependent. (line 6) 17063 * irp directive: Irp. (line 6) 17064 * irpc directive: Irpc. (line 6) 17065 * ISA options, SH64: SH64 Options. (line 6) 17066 * joining text and data sections: R. (line 6) 17067 * jump instructions, i386: i386-Mnemonics. (line 51) 17068 * jump instructions, x86-64: i386-Mnemonics. (line 51) 17069 * jump optimization, i386: i386-Jumps. (line 6) 17070 * jump optimization, x86-64: i386-Jumps. (line 6) 17071 * jump/call operands, i386: i386-Syntax. (line 15) 17072 * jump/call operands, x86-64: i386-Syntax. (line 15) 17073 * L16SI instructions, relaxation: Xtensa Immediate Relaxation. 17074 (line 23) 17075 * L16UI instructions, relaxation: Xtensa Immediate Relaxation. 17076 (line 23) 17077 * L32I instructions, relaxation: Xtensa Immediate Relaxation. 17078 (line 23) 17079 * L8UI instructions, relaxation: Xtensa Immediate Relaxation. 17080 (line 23) 17081 * label (:): Statements. (line 30) 17082 * label directive, TIC54X: TIC54X-Directives. (line 123) 17083 * labels: Labels. (line 6) 17084 * lcomm directive: Lcomm. (line 6) 17085 * ld: Object. (line 15) 17086 * ldouble directive M680x0: M68K-Float. (line 17) 17087 * ldouble directive M68HC11: M68HC11-Float. (line 17) 17088 * ldouble directive, TIC54X: TIC54X-Directives. (line 64) 17089 * LDR reg,=<label> pseudo op, ARM: ARM Opcodes. (line 15) 17090 * leafproc directive, i960: Directives-i960. (line 18) 17091 * length directive, TIC54X: TIC54X-Directives. (line 127) 17092 * length of symbols: Symbol Intro. (line 14) 17093 * lflags directive (ignored): Lflags. (line 6) 17094 * line comment character: Comments. (line 19) 17095 * line comment character, Alpha: Alpha-Chars. (line 6) 17096 * line comment character, ARM: ARM-Chars. (line 6) 17097 * line comment character, D10V: D10V-Chars. (line 6) 17098 * line comment character, D30V: D30V-Chars. (line 6) 17099 * line comment character, H8/300: H8/300-Chars. (line 6) 17100 * line comment character, IA-64: IA-64-Chars. (line 6) 17101 * line comment character, M680x0: M68K-Chars. (line 6) 17102 * line comment character, MSP 430: MSP430-Chars. (line 6) 17103 * line comment character, SH: SH-Chars. (line 6) 17104 * line comment character, SH64: SH64-Chars. (line 6) 17105 * line comment character, V850: V850-Chars. (line 6) 17106 * line comment character, Z80: Z80-Chars. (line 6) 17107 * line comment character, Z8000: Z8000-Chars. (line 6) 17108 * line comment characters, CRIS: CRIS-Chars. (line 6) 17109 * line comment characters, MMIX: MMIX-Chars. (line 6) 17110 * line directive: Line. (line 6) 17111 * line directive, MSP 430: MSP430 Directives. (line 14) 17112 * line numbers, in input files: Input Files. (line 35) 17113 * line numbers, in warnings/errors: Errors. (line 16) 17114 * line separator character: Statements. (line 6) 17115 * line separator, Alpha: Alpha-Chars. (line 8) 17116 * line separator, ARM: ARM-Chars. (line 10) 17117 * line separator, H8/300: H8/300-Chars. (line 8) 17118 * line separator, IA-64: IA-64-Chars. (line 8) 17119 * line separator, SH: SH-Chars. (line 8) 17120 * line separator, SH64: SH64-Chars. (line 8) 17121 * line separator, Z8000: Z8000-Chars. (line 8) 17122 * lines starting with #: Comments. (line 38) 17123 * linker: Object. (line 15) 17124 * linker, and assembler: Secs Background. (line 10) 17125 * linkonce directive: Linkonce. (line 6) 17126 * list directive: List. (line 6) 17127 * list directive, TIC54X: TIC54X-Directives. (line 131) 17128 * listing control, turning off: Nolist. (line 6) 17129 * listing control, turning on: List. (line 6) 17130 * listing control: new page: Eject. (line 6) 17131 * listing control: paper size: Psize. (line 6) 17132 * listing control: subtitle: Sbttl. (line 6) 17133 * listing control: title line: Title. (line 6) 17134 * listings, enabling: a. (line 6) 17135 * literal directive: Literal Directive. (line 6) 17136 * literal_position directive: Literal Position Directive. 17137 (line 6) 17138 * literal_prefix directive: Literal Prefix Directive. 17139 (line 6) 17140 * little endian output, MIPS: Overview. (line 609) 17141 * little endian output, PJ: Overview. (line 516) 17142 * little-endian output, MIPS: MIPS Opts. (line 13) 17143 * ln directive: Ln. (line 6) 17144 * lo pseudo-op, V850: V850 Opcodes. (line 22) 17145 * loc directive: LNS directives. (line 19) 17146 * loc_mark_blocks directive: LNS directives. (line 50) 17147 * local common symbols: Lcomm. (line 6) 17148 * local labels, retaining in output: L. (line 6) 17149 * local symbol names: Symbol Names. (line 22) 17150 * location counter: Dot. (line 6) 17151 * location counter, advancing: Org. (line 6) 17152 * location counter, Z80: Z80-Chars. (line 8) 17153 * logical file name: File. (line 6) 17154 * logical line number: Line. (line 6) 17155 * logical line numbers: Comments. (line 38) 17156 * long directive: Long. (line 6) 17157 * long directive, ARC: ARC Directives. (line 159) 17158 * long directive, i386: i386-Float. (line 21) 17159 * long directive, TIC54X: TIC54X-Directives. (line 135) 17160 * long directive, x86-64: i386-Float. (line 21) 17161 * longcall pseudo-op, V850: V850 Opcodes. (line 123) 17162 * longcalls directive: Longcalls Directive. (line 6) 17163 * longjump pseudo-op, V850: V850 Opcodes. (line 129) 17164 * loop directive, TIC54X: TIC54X-Directives. (line 143) 17165 * LOOP instructions, alignment: Xtensa Automatic Alignment. 17166 (line 6) 17167 * low directive, M32R: M32R-Directives. (line 9) 17168 * lp register, V850: V850-Regs. (line 98) 17169 * lval: Z8000 Directives. (line 27) 17170 * M16C architecture option: M32C-Opts. (line 12) 17171 * M32C architecture option: M32C-Opts. (line 9) 17172 * M32C modifiers: M32C-Modifiers. (line 6) 17173 * M32C options: M32C-Opts. (line 6) 17174 * M32C support: M32C-Dependent. (line 6) 17175 * M32R architecture options: M32R-Opts. (line 9) 17176 * M32R directives: M32R-Directives. (line 6) 17177 * M32R options: M32R-Opts. (line 6) 17178 * M32R support: M32R-Dependent. (line 6) 17179 * M32R warnings: M32R-Warnings. (line 6) 17180 * M680x0 addressing modes: M68K-Syntax. (line 21) 17181 * M680x0 architecture options: M68K-Opts. (line 103) 17182 * M680x0 branch improvement: M68K-Branch. (line 6) 17183 * M680x0 directives: M68K-Directives. (line 6) 17184 * M680x0 floating point: M68K-Float. (line 6) 17185 * M680x0 immediate character: M68K-Chars. (line 6) 17186 * M680x0 line comment character: M68K-Chars. (line 6) 17187 * M680x0 opcodes: M68K-opcodes. (line 6) 17188 * M680x0 options: M68K-Opts. (line 6) 17189 * M680x0 pseudo-opcodes: M68K-Branch. (line 6) 17190 * M680x0 size modifiers: M68K-Syntax. (line 8) 17191 * M680x0 support: M68K-Dependent. (line 6) 17192 * M680x0 syntax: M68K-Syntax. (line 8) 17193 * M68HC11 addressing modes: M68HC11-Syntax. (line 17) 17194 * M68HC11 and M68HC12 support: M68HC11-Dependent. (line 6) 17195 * M68HC11 assembler directive .far: M68HC11-Directives. (line 20) 17196 * M68HC11 assembler directive .interrupt: M68HC11-Directives. (line 26) 17197 * M68HC11 assembler directive .mode: M68HC11-Directives. (line 16) 17198 * M68HC11 assembler directive .relax: M68HC11-Directives. (line 10) 17199 * M68HC11 assembler directive .xrefb: M68HC11-Directives. (line 31) 17200 * M68HC11 assembler directives: M68HC11-Directives. (line 6) 17201 * M68HC11 branch improvement: M68HC11-Branch. (line 6) 17202 * M68HC11 floating point: M68HC11-Float. (line 6) 17203 * M68HC11 modifiers: M68HC11-Modifiers. (line 6) 17204 * M68HC11 opcodes: M68HC11-opcodes. (line 6) 17205 * M68HC11 options: M68HC11-Opts. (line 6) 17206 * M68HC11 pseudo-opcodes: M68HC11-Branch. (line 6) 17207 * M68HC11 syntax: M68HC11-Syntax. (line 6) 17208 * M68HC12 assembler directives: M68HC11-Directives. (line 6) 17209 * machine dependencies: Machine Dependencies. 17210 (line 6) 17211 * machine directives, ARC: ARC Directives. (line 6) 17212 * machine directives, ARM: ARM Directives. (line 6) 17213 * machine directives, H8/300 (none): H8/300 Directives. (line 6) 17214 * machine directives, i860: Directives-i860. (line 6) 17215 * machine directives, i960: Directives-i960. (line 6) 17216 * machine directives, MSP 430: MSP430 Directives. (line 6) 17217 * machine directives, SH: SH Directives. (line 6) 17218 * machine directives, SH64: SH64 Directives. (line 9) 17219 * machine directives, SPARC: Sparc-Directives. (line 6) 17220 * machine directives, TIC54X: TIC54X-Directives. (line 6) 17221 * machine directives, V850: V850 Directives. (line 6) 17222 * machine directives, VAX: VAX-directives. (line 6) 17223 * machine independent directives: Pseudo Ops. (line 6) 17224 * machine instructions (not covered): Manual. (line 14) 17225 * machine-independent syntax: Syntax. (line 6) 17226 * macro directive: Macro. (line 28) 17227 * macro directive, TIC54X: TIC54X-Directives. (line 153) 17228 * macros: Macro. (line 6) 17229 * macros, count executed: Macro. (line 101) 17230 * Macros, MSP 430: MSP430-Macros. (line 6) 17231 * macros, TIC54X: TIC54X-Macros. (line 6) 17232 * make rules: MD. (line 6) 17233 * manual, structure and purpose: Manual. (line 6) 17234 * math builtins, TIC54X: TIC54X-Builtins. (line 6) 17235 * Maximum number of continuation lines: listing. (line 33) 17236 * memory references, i386: i386-Memory. (line 6) 17237 * memory references, x86-64: i386-Memory. (line 6) 17238 * memory-mapped registers, TIC54X: TIC54X-MMRegs. (line 6) 17239 * merging text and data sections: R. (line 6) 17240 * messages from assembler: Errors. (line 6) 17241 * minus, permitted arguments: Infix Ops. (line 49) 17242 * MIPS architecture options: MIPS Opts. (line 20) 17243 * MIPS big-endian output: MIPS Opts. (line 13) 17244 * MIPS debugging directives: MIPS Stabs. (line 6) 17245 * MIPS DSP instruction generation override: MIPS ASE instruction generation overrides. 17246 (line 16) 17247 * MIPS ECOFF sections: MIPS Object. (line 6) 17248 * MIPS endianness: Overview. (line 606) 17249 * MIPS ISA: Overview. (line 612) 17250 * MIPS ISA override: MIPS ISA. (line 6) 17251 * MIPS little-endian output: MIPS Opts. (line 13) 17252 * MIPS MDMX instruction generation override: MIPS ASE instruction generation overrides. 17253 (line 11) 17254 * MIPS MIPS-3D instruction generation override: MIPS ASE instruction generation overrides. 17255 (line 6) 17256 * MIPS MT instruction generation override: MIPS ASE instruction generation overrides. 17257 (line 21) 17258 * MIPS option stack: MIPS option stack. (line 6) 17259 * MIPS processor: MIPS-Dependent. (line 6) 17260 * MIT: M68K-Syntax. (line 6) 17261 * mlib directive, TIC54X: TIC54X-Directives. (line 159) 17262 * mlist directive, TIC54X: TIC54X-Directives. (line 164) 17263 * MMIX assembler directive BSPEC: MMIX-Pseudos. (line 131) 17264 * MMIX assembler directive BYTE: MMIX-Pseudos. (line 97) 17265 * MMIX assembler directive ESPEC: MMIX-Pseudos. (line 131) 17266 * MMIX assembler directive GREG: MMIX-Pseudos. (line 50) 17267 * MMIX assembler directive IS: MMIX-Pseudos. (line 42) 17268 * MMIX assembler directive LOC: MMIX-Pseudos. (line 7) 17269 * MMIX assembler directive LOCAL: MMIX-Pseudos. (line 28) 17270 * MMIX assembler directive OCTA: MMIX-Pseudos. (line 108) 17271 * MMIX assembler directive PREFIX: MMIX-Pseudos. (line 120) 17272 * MMIX assembler directive TETRA: MMIX-Pseudos. (line 108) 17273 * MMIX assembler directive WYDE: MMIX-Pseudos. (line 108) 17274 * MMIX assembler directives: MMIX-Pseudos. (line 6) 17275 * MMIX line comment characters: MMIX-Chars. (line 6) 17276 * MMIX options: MMIX-Opts. (line 6) 17277 * MMIX pseudo-op BSPEC: MMIX-Pseudos. (line 131) 17278 * MMIX pseudo-op BYTE: MMIX-Pseudos. (line 97) 17279 * MMIX pseudo-op ESPEC: MMIX-Pseudos. (line 131) 17280 * MMIX pseudo-op GREG: MMIX-Pseudos. (line 50) 17281 * MMIX pseudo-op IS: MMIX-Pseudos. (line 42) 17282 * MMIX pseudo-op LOC: MMIX-Pseudos. (line 7) 17283 * MMIX pseudo-op LOCAL: MMIX-Pseudos. (line 28) 17284 * MMIX pseudo-op OCTA: MMIX-Pseudos. (line 108) 17285 * MMIX pseudo-op PREFIX: MMIX-Pseudos. (line 120) 17286 * MMIX pseudo-op TETRA: MMIX-Pseudos. (line 108) 17287 * MMIX pseudo-op WYDE: MMIX-Pseudos. (line 108) 17288 * MMIX pseudo-ops: MMIX-Pseudos. (line 6) 17289 * MMIX register names: MMIX-Regs. (line 6) 17290 * MMIX support: MMIX-Dependent. (line 6) 17291 * mmixal differences: MMIX-mmixal. (line 6) 17292 * mmregs directive, TIC54X: TIC54X-Directives. (line 170) 17293 * mmsg directive, TIC54X: TIC54X-Directives. (line 77) 17294 * MMX, i386: i386-SIMD. (line 6) 17295 * MMX, x86-64: i386-SIMD. (line 6) 17296 * mnemonic suffixes, i386: i386-Syntax. (line 29) 17297 * mnemonic suffixes, x86-64: i386-Syntax. (line 29) 17298 * mnemonics for opcodes, VAX: VAX-opcodes. (line 6) 17299 * mnemonics, D10V: D10V-Opcodes. (line 6) 17300 * mnemonics, D30V: D30V-Opcodes. (line 6) 17301 * mnemonics, H8/300: H8/300 Opcodes. (line 6) 17302 * mnemonics, SH: SH Opcodes. (line 6) 17303 * mnemonics, SH64: SH64 Opcodes. (line 6) 17304 * mnemonics, Z8000: Z8000 Opcodes. (line 6) 17305 * mnolist directive, TIC54X: TIC54X-Directives. (line 164) 17306 * Motorola syntax for the 680x0: M68K-Moto-Syntax. (line 6) 17307 * MOVI instructions, relaxation: Xtensa Immediate Relaxation. 17308 (line 12) 17309 * MRI compatibility mode: M. (line 6) 17310 * mri directive: MRI. (line 6) 17311 * MRI mode, temporarily: MRI. (line 6) 17312 * MSP 430 floating point (IEEE): MSP430 Floating Point. 17313 (line 6) 17314 * MSP 430 identifiers: MSP430-Chars. (line 8) 17315 * MSP 430 line comment character: MSP430-Chars. (line 6) 17316 * MSP 430 machine directives: MSP430 Directives. (line 6) 17317 * MSP 430 macros: MSP430-Macros. (line 6) 17318 * MSP 430 opcodes: MSP430 Opcodes. (line 6) 17319 * MSP 430 options (none): MSP430 Options. (line 6) 17320 * MSP 430 profiling capability: MSP430 Profiling Capability. 17321 (line 6) 17322 * MSP 430 register names: MSP430-Regs. (line 6) 17323 * MSP 430 support: MSP430-Dependent. (line 6) 17324 * MSP430 Assembler Extensions: MSP430-Ext. (line 6) 17325 * mul instruction, i386: i386-Notes. (line 6) 17326 * mul instruction, x86-64: i386-Notes. (line 6) 17327 * name: Z8000 Directives. (line 18) 17328 * named section: Section. (line 6) 17329 * named sections: Ld Sections. (line 8) 17330 * names, symbol: Symbol Names. (line 6) 17331 * naming object file: o. (line 6) 17332 * new page, in listings: Eject. (line 6) 17333 * newblock directive, TIC54X: TIC54X-Directives. (line 176) 17334 * newline (\n): Strings. (line 21) 17335 * newline, required at file end: Statements. (line 13) 17336 * no-absolute-literals directive: Absolute Literals Directive. 17337 (line 6) 17338 * no-longcalls directive: Longcalls Directive. (line 6) 17339 * no-schedule directive: Schedule Directive. (line 6) 17340 * no-transform directive: Transform Directive. (line 6) 17341 * nolist directive: Nolist. (line 6) 17342 * nolist directive, TIC54X: TIC54X-Directives. (line 131) 17343 * NOP pseudo op, ARM: ARM Opcodes. (line 9) 17344 * notes for Alpha: Alpha Notes. (line 6) 17345 * null-terminated strings: Asciz. (line 6) 17346 * number constants: Numbers. (line 6) 17347 * number of macros executed: Macro. (line 101) 17348 * numbered subsections: Sub-Sections. (line 6) 17349 * numbers, 16-bit: hword. (line 6) 17350 * numeric values: Expressions. (line 6) 17351 * nword directive, SPARC: Sparc-Directives. (line 20) 17352 * object file: Object. (line 6) 17353 * object file format: Object Formats. (line 6) 17354 * object file name: o. (line 6) 17355 * object file, after errors: Z. (line 6) 17356 * obsolescent directives: Deprecated. (line 6) 17357 * octa directive: Octa. (line 6) 17358 * octal character code (\DDD): Strings. (line 30) 17359 * octal integers: Integers. (line 9) 17360 * offset directive, V850: V850 Directives. (line 6) 17361 * opcode mnemonics, VAX: VAX-opcodes. (line 6) 17362 * opcode names, Xtensa: Xtensa Opcodes. (line 6) 17363 * opcode summary, D10V: D10V-Opcodes. (line 6) 17364 * opcode summary, D30V: D30V-Opcodes. (line 6) 17365 * opcode summary, H8/300: H8/300 Opcodes. (line 6) 17366 * opcode summary, SH: SH Opcodes. (line 6) 17367 * opcode summary, SH64: SH64 Opcodes. (line 6) 17368 * opcode summary, Z8000: Z8000 Opcodes. (line 6) 17369 * opcodes for ARC: ARC Opcodes. (line 6) 17370 * opcodes for ARM: ARM Opcodes. (line 6) 17371 * opcodes for MSP 430: MSP430 Opcodes. (line 6) 17372 * opcodes for V850: V850 Opcodes. (line 6) 17373 * opcodes, i860: Opcodes for i860. (line 6) 17374 * opcodes, i960: Opcodes for i960. (line 6) 17375 * opcodes, M680x0: M68K-opcodes. (line 6) 17376 * opcodes, M68HC11: M68HC11-opcodes. (line 6) 17377 * operand delimiters, i386: i386-Syntax. (line 15) 17378 * operand delimiters, x86-64: i386-Syntax. (line 15) 17379 * operand notation, VAX: VAX-operands. (line 6) 17380 * operands in expressions: Arguments. (line 6) 17381 * operator precedence: Infix Ops. (line 11) 17382 * operators, in expressions: Operators. (line 6) 17383 * operators, permitted arguments: Infix Ops. (line 6) 17384 * optimization, D10V: Overview. (line 391) 17385 * optimization, D30V: Overview. (line 396) 17386 * optimizations: Xtensa Optimizations. 17387 (line 6) 17388 * option directive, ARC: ARC Directives. (line 162) 17389 * option directive, TIC54X: TIC54X-Directives. (line 180) 17390 * option summary: Overview. (line 6) 17391 * options for Alpha: Alpha Options. (line 6) 17392 * options for ARC (none): ARC Options. (line 6) 17393 * options for ARM (none): ARM Options. (line 6) 17394 * options for i386: i386-Options. (line 6) 17395 * options for IA-64: IA-64 Options. (line 6) 17396 * options for MSP430 (none): MSP430 Options. (line 6) 17397 * options for PDP-11: PDP-11-Options. (line 6) 17398 * options for PowerPC: PowerPC-Opts. (line 6) 17399 * options for SPARC: Sparc-Opts. (line 6) 17400 * options for V850 (none): V850 Options. (line 6) 17401 * options for VAX/VMS: VAX-Opts. (line 42) 17402 * options for x86-64: i386-Options. (line 6) 17403 * options for Z80: Z80 Options. (line 6) 17404 * options, all versions of assembler: Invoking. (line 6) 17405 * options, command line: Command Line. (line 13) 17406 * options, CRIS: CRIS-Opts. (line 6) 17407 * options, D10V: D10V-Opts. (line 6) 17408 * options, D30V: D30V-Opts. (line 6) 17409 * options, H8/300 (none): H8/300 Options. (line 6) 17410 * options, i960: Options-i960. (line 6) 17411 * options, IP2K: IP2K-Opts. (line 6) 17412 * options, M32C: M32C-Opts. (line 6) 17413 * options, M32R: M32R-Opts. (line 6) 17414 * options, M680x0: M68K-Opts. (line 6) 17415 * options, M68HC11: M68HC11-Opts. (line 6) 17416 * options, MMIX: MMIX-Opts. (line 6) 17417 * options, PJ: PJ Options. (line 6) 17418 * options, SH: SH Options. (line 6) 17419 * options, SH64: SH64 Options. (line 6) 17420 * options, TIC54X: TIC54X-Opts. (line 6) 17421 * options, Z8000: Z8000 Options. (line 6) 17422 * org directive: Org. (line 6) 17423 * other attribute, of a.out symbol: Symbol Other. (line 6) 17424 * output file: Object. (line 6) 17425 * p2align directive: P2align. (line 6) 17426 * p2alignl directive: P2align. (line 28) 17427 * p2alignw directive: P2align. (line 28) 17428 * padding the location counter: Align. (line 6) 17429 * padding the location counter given a power of two: P2align. (line 6) 17430 * padding the location counter given number of bytes: Balign. (line 6) 17431 * page, in listings: Eject. (line 6) 17432 * paper size, for listings: Psize. (line 6) 17433 * paths for .include: I. (line 6) 17434 * patterns, writing in memory: Fill. (line 6) 17435 * PDP-11 comments: PDP-11-Syntax. (line 16) 17436 * PDP-11 floating-point register syntax: PDP-11-Syntax. (line 13) 17437 * PDP-11 general-purpose register syntax: PDP-11-Syntax. (line 10) 17438 * PDP-11 instruction naming: PDP-11-Mnemonics. (line 6) 17439 * PDP-11 support: PDP-11-Dependent. (line 6) 17440 * PDP-11 syntax: PDP-11-Syntax. (line 6) 17441 * PIC code generation for ARM: ARM Options. (line 120) 17442 * PIC code generation for M32R: M32R-Opts. (line 42) 17443 * PJ endianness: Overview. (line 513) 17444 * PJ options: PJ Options. (line 6) 17445 * PJ support: PJ-Dependent. (line 6) 17446 * plus, permitted arguments: Infix Ops. (line 44) 17447 * popsection directive: PopSection. (line 6) 17448 * Position-independent code, CRIS: CRIS-Opts. (line 27) 17449 * Position-independent code, symbols in, CRIS: CRIS-Pic. (line 6) 17450 * PowerPC architectures: PowerPC-Opts. (line 6) 17451 * PowerPC directives: PowerPC-Pseudo. (line 6) 17452 * PowerPC options: PowerPC-Opts. (line 6) 17453 * PowerPC support: PPC-Dependent. (line 6) 17454 * precedence of operators: Infix Ops. (line 11) 17455 * precision, floating point: Flonums. (line 6) 17456 * prefix operators: Prefix Ops. (line 6) 17457 * prefixes, i386: i386-Prefixes. (line 6) 17458 * preprocessing: Preprocessing. (line 6) 17459 * preprocessing, turning on and off: Preprocessing. (line 27) 17460 * previous directive: Previous. (line 6) 17461 * primary attributes, COFF symbols: COFF Symbols. (line 13) 17462 * print directive: Print. (line 6) 17463 * proc directive, SPARC: Sparc-Directives. (line 25) 17464 * profiler directive, MSP 430: MSP430 Directives. (line 22) 17465 * profiling capability for MSP 430: MSP430 Profiling Capability. 17466 (line 6) 17467 * protected directive: Protected. (line 6) 17468 * pseudo-op .arch, CRIS: CRIS-Pseudos. (line 45) 17469 * pseudo-op .dword, CRIS: CRIS-Pseudos. (line 12) 17470 * pseudo-op .syntax, CRIS: CRIS-Pseudos. (line 17) 17471 * pseudo-op BSPEC, MMIX: MMIX-Pseudos. (line 131) 17472 * pseudo-op BYTE, MMIX: MMIX-Pseudos. (line 97) 17473 * pseudo-op ESPEC, MMIX: MMIX-Pseudos. (line 131) 17474 * pseudo-op GREG, MMIX: MMIX-Pseudos. (line 50) 17475 * pseudo-op IS, MMIX: MMIX-Pseudos. (line 42) 17476 * pseudo-op LOC, MMIX: MMIX-Pseudos. (line 7) 17477 * pseudo-op LOCAL, MMIX: MMIX-Pseudos. (line 28) 17478 * pseudo-op OCTA, MMIX: MMIX-Pseudos. (line 108) 17479 * pseudo-op PREFIX, MMIX: MMIX-Pseudos. (line 120) 17480 * pseudo-op TETRA, MMIX: MMIX-Pseudos. (line 108) 17481 * pseudo-op WYDE, MMIX: MMIX-Pseudos. (line 108) 17482 * pseudo-opcodes, M680x0: M68K-Branch. (line 6) 17483 * pseudo-opcodes, M68HC11: M68HC11-Branch. (line 6) 17484 * pseudo-ops for branch, VAX: VAX-branch. (line 6) 17485 * pseudo-ops, CRIS: CRIS-Pseudos. (line 6) 17486 * pseudo-ops, machine independent: Pseudo Ops. (line 6) 17487 * pseudo-ops, MMIX: MMIX-Pseudos. (line 6) 17488 * psize directive: Psize. (line 6) 17489 * PSR bits: IA-64-Bits. (line 6) 17490 * pstring directive, TIC54X: TIC54X-Directives. (line 209) 17491 * psw register, V850: V850-Regs. (line 116) 17492 * purgem directive: Purgem. (line 6) 17493 * purpose of GNU assembler: GNU Assembler. (line 12) 17494 * pushsection directive: PushSection. (line 6) 17495 * quad directive: Quad. (line 6) 17496 * quad directive, i386: i386-Float. (line 21) 17497 * quad directive, x86-64: i386-Float. (line 21) 17498 * real-mode code, i386: i386-16bit. (line 6) 17499 * ref directive, TIC54X: TIC54X-Directives. (line 103) 17500 * register directive, SPARC: Sparc-Directives. (line 29) 17501 * register names, Alpha: Alpha-Regs. (line 6) 17502 * register names, ARC: ARC-Regs. (line 6) 17503 * register names, ARM: ARM-Regs. (line 6) 17504 * register names, CRIS: CRIS-Regs. (line 6) 17505 * register names, H8/300: H8/300-Regs. (line 6) 17506 * register names, IA-64: IA-64-Regs. (line 6) 17507 * register names, MMIX: MMIX-Regs. (line 6) 17508 * register names, MSP 430: MSP430-Regs. (line 6) 17509 * register names, V850: V850-Regs. (line 6) 17510 * register names, VAX: VAX-operands. (line 17) 17511 * register names, Xtensa: Xtensa Registers. (line 6) 17512 * register names, Z80: Z80-Regs. (line 6) 17513 * register operands, i386: i386-Syntax. (line 15) 17514 * register operands, x86-64: i386-Syntax. (line 15) 17515 * registers, D10V: D10V-Regs. (line 6) 17516 * registers, D30V: D30V-Regs. (line 6) 17517 * registers, i386: i386-Regs. (line 6) 17518 * registers, SH: SH-Regs. (line 6) 17519 * registers, SH64: SH64-Regs. (line 6) 17520 * registers, TIC54X memory-mapped: TIC54X-MMRegs. (line 6) 17521 * registers, x86-64: i386-Regs. (line 6) 17522 * registers, Z8000: Z8000-Regs. (line 6) 17523 * relaxation: Xtensa Relaxation. (line 6) 17524 * relaxation of ADDI instructions: Xtensa Immediate Relaxation. 17525 (line 43) 17526 * relaxation of branch instructions: Xtensa Branch Relaxation. 17527 (line 6) 17528 * relaxation of call instructions: Xtensa Call Relaxation. 17529 (line 6) 17530 * relaxation of immediate fields: Xtensa Immediate Relaxation. 17531 (line 6) 17532 * relaxation of L16SI instructions: Xtensa Immediate Relaxation. 17533 (line 23) 17534 * relaxation of L16UI instructions: Xtensa Immediate Relaxation. 17535 (line 23) 17536 * relaxation of L32I instructions: Xtensa Immediate Relaxation. 17537 (line 23) 17538 * relaxation of L8UI instructions: Xtensa Immediate Relaxation. 17539 (line 23) 17540 * relaxation of MOVI instructions: Xtensa Immediate Relaxation. 17541 (line 12) 17542 * relocation: Sections. (line 6) 17543 * relocation example: Ld Sections. (line 40) 17544 * relocations, Alpha: Alpha-Relocs. (line 6) 17545 * repeat prefixes, i386: i386-Prefixes. (line 44) 17546 * reporting bugs in assembler: Reporting Bugs. (line 6) 17547 * rept directive: Rept. (line 6) 17548 * req directive, ARM: ARM Directives. (line 13) 17549 * reserve directive, SPARC: Sparc-Directives. (line 39) 17550 * return instructions, i386: i386-Syntax. (line 38) 17551 * return instructions, x86-64: i386-Syntax. (line 38) 17552 * REX prefixes, i386: i386-Prefixes. (line 46) 17553 * rsect: Z8000 Directives. (line 52) 17554 * sblock directive, TIC54X: TIC54X-Directives. (line 183) 17555 * sbttl directive: Sbttl. (line 6) 17556 * schedule directive: Schedule Directive. (line 6) 17557 * scl directive: Scl. (line 6) 17558 * sdaoff pseudo-op, V850: V850 Opcodes. (line 65) 17559 * search path for .include: I. (line 6) 17560 * sect directive, MSP 430: MSP430 Directives. (line 18) 17561 * sect directive, TIC54X: TIC54X-Directives. (line 189) 17562 * section directive (COFF version): Section. (line 16) 17563 * section directive (ELF version): Section. (line 67) 17564 * section directive, V850: V850 Directives. (line 9) 17565 * section override prefixes, i386: i386-Prefixes. (line 23) 17566 * Section Stack <1>: SubSection. (line 6) 17567 * Section Stack <2>: Section. (line 62) 17568 * Section Stack <3>: PushSection. (line 6) 17569 * Section Stack <4>: PopSection. (line 6) 17570 * Section Stack: Previous. (line 6) 17571 * section-relative addressing: Secs Background. (line 68) 17572 * sections: Sections. (line 6) 17573 * sections in messages, internal: As Sections. (line 6) 17574 * sections, i386: i386-Syntax. (line 44) 17575 * sections, named: Ld Sections. (line 8) 17576 * sections, x86-64: i386-Syntax. (line 44) 17577 * seg directive, SPARC: Sparc-Directives. (line 44) 17578 * segm: Z8000 Directives. (line 10) 17579 * set directive: Set. (line 6) 17580 * set directive, TIC54X: TIC54X-Directives. (line 192) 17581 * SH addressing modes: SH-Addressing. (line 6) 17582 * SH floating point (IEEE): SH Floating Point. (line 6) 17583 * SH line comment character: SH-Chars. (line 6) 17584 * SH line separator: SH-Chars. (line 8) 17585 * SH machine directives: SH Directives. (line 6) 17586 * SH opcode summary: SH Opcodes. (line 6) 17587 * SH options: SH Options. (line 6) 17588 * SH registers: SH-Regs. (line 6) 17589 * SH support: SH-Dependent. (line 6) 17590 * SH64 ABI options: SH64 Options. (line 29) 17591 * SH64 addressing modes: SH64-Addressing. (line 6) 17592 * SH64 ISA options: SH64 Options. (line 6) 17593 * SH64 line comment character: SH64-Chars. (line 6) 17594 * SH64 line separator: SH64-Chars. (line 8) 17595 * SH64 machine directives: SH64 Directives. (line 9) 17596 * SH64 opcode summary: SH64 Opcodes. (line 6) 17597 * SH64 options: SH64 Options. (line 6) 17598 * SH64 registers: SH64-Regs. (line 6) 17599 * SH64 support: SH64-Dependent. (line 6) 17600 * shigh directive, M32R: M32R-Directives. (line 26) 17601 * short directive: Short. (line 6) 17602 * short directive, ARC: ARC Directives. (line 171) 17603 * short directive, TIC54X: TIC54X-Directives. (line 111) 17604 * SIMD, i386: i386-SIMD. (line 6) 17605 * SIMD, x86-64: i386-SIMD. (line 6) 17606 * single character constant: Chars. (line 6) 17607 * single directive: Single. (line 6) 17608 * single directive, i386: i386-Float. (line 14) 17609 * single directive, x86-64: i386-Float. (line 14) 17610 * single quote, Z80: Z80-Chars. (line 13) 17611 * sixteen bit integers: hword. (line 6) 17612 * sixteen byte integer: Octa. (line 6) 17613 * size directive (COFF version): Size. (line 11) 17614 * size directive (ELF version): Size. (line 19) 17615 * size modifiers, D10V: D10V-Size. (line 6) 17616 * size modifiers, D30V: D30V-Size. (line 6) 17617 * size modifiers, M680x0: M68K-Syntax. (line 8) 17618 * size prefixes, i386: i386-Prefixes. (line 27) 17619 * size suffixes, H8/300: H8/300 Opcodes. (line 163) 17620 * sizes operands, i386: i386-Syntax. (line 29) 17621 * sizes operands, x86-64: i386-Syntax. (line 29) 17622 * skip directive: Skip. (line 6) 17623 * skip directive, M680x0: M68K-Directives. (line 19) 17624 * skip directive, SPARC: Sparc-Directives. (line 48) 17625 * sleb128 directive: Sleb128. (line 6) 17626 * small objects, MIPS ECOFF: MIPS Object. (line 11) 17627 * SOM symbol attributes: SOM Symbols. (line 6) 17628 * source program: Input Files. (line 6) 17629 * source, destination operands; i386: i386-Syntax. (line 22) 17630 * source, destination operands; x86-64: i386-Syntax. (line 22) 17631 * sp register: Xtensa Registers. (line 6) 17632 * sp register, V850: V850-Regs. (line 14) 17633 * space directive: Space. (line 6) 17634 * space directive, TIC54X: TIC54X-Directives. (line 197) 17635 * space used, maximum for assembly: statistics. (line 6) 17636 * SPARC architectures: Sparc-Opts. (line 6) 17637 * SPARC data alignment: Sparc-Aligned-Data. (line 6) 17638 * SPARC floating point (IEEE): Sparc-Float. (line 6) 17639 * SPARC machine directives: Sparc-Directives. (line 6) 17640 * SPARC options: Sparc-Opts. (line 6) 17641 * SPARC support: Sparc-Dependent. (line 6) 17642 * special characters, ARC: ARC-Chars. (line 6) 17643 * special characters, M680x0: M68K-Chars. (line 6) 17644 * special purpose registers, MSP 430: MSP430-Regs. (line 11) 17645 * sslist directive, TIC54X: TIC54X-Directives. (line 204) 17646 * ssnolist directive, TIC54X: TIC54X-Directives. (line 204) 17647 * stabd directive: Stab. (line 38) 17648 * stabn directive: Stab. (line 48) 17649 * stabs directive: Stab. (line 51) 17650 * stabX directives: Stab. (line 6) 17651 * standard assembler sections: Secs Background. (line 27) 17652 * standard input, as input file: Command Line. (line 10) 17653 * statement separator character: Statements. (line 6) 17654 * statement separator, Alpha: Alpha-Chars. (line 8) 17655 * statement separator, ARM: ARM-Chars. (line 10) 17656 * statement separator, H8/300: H8/300-Chars. (line 8) 17657 * statement separator, IA-64: IA-64-Chars. (line 8) 17658 * statement separator, SH: SH-Chars. (line 8) 17659 * statement separator, SH64: SH64-Chars. (line 8) 17660 * statement separator, Z8000: Z8000-Chars. (line 8) 17661 * statements, structure of: Statements. (line 6) 17662 * statistics, about assembly: statistics. (line 6) 17663 * stopping the assembly: Abort. (line 6) 17664 * string constants: Strings. (line 6) 17665 * string directive: String. (line 6) 17666 * string directive on HPPA: HPPA Directives. (line 137) 17667 * string directive, TIC54X: TIC54X-Directives. (line 209) 17668 * string literals: Ascii. (line 6) 17669 * string, copying to object file: String. (line 6) 17670 * struct directive: Struct. (line 6) 17671 * struct directive, TIC54X: TIC54X-Directives. (line 217) 17672 * structure debugging, COFF: Tag. (line 6) 17673 * sub-instruction ordering, D10V: D10V-Chars. (line 6) 17674 * sub-instruction ordering, D30V: D30V-Chars. (line 6) 17675 * sub-instructions, D10V: D10V-Subs. (line 6) 17676 * sub-instructions, D30V: D30V-Subs. (line 6) 17677 * subexpressions: Arguments. (line 24) 17678 * subsection directive: SubSection. (line 6) 17679 * subsym builtins, TIC54X: TIC54X-Macros. (line 16) 17680 * subtitles for listings: Sbttl. (line 6) 17681 * subtraction, permitted arguments: Infix Ops. (line 49) 17682 * summary of options: Overview. (line 6) 17683 * support: HPPA-Dependent. (line 6) 17684 * supporting files, including: Include. (line 6) 17685 * suppressing warnings: W. (line 11) 17686 * sval: Z8000 Directives. (line 33) 17687 * symbol attributes: Symbol Attributes. (line 6) 17688 * symbol attributes, a.out: a.out Symbols. (line 6) 17689 * symbol attributes, COFF: COFF Symbols. (line 6) 17690 * symbol attributes, SOM: SOM Symbols. (line 6) 17691 * symbol descriptor, COFF: Desc. (line 6) 17692 * symbol modifiers <1>: M68HC11-Modifiers. (line 12) 17693 * symbol modifiers: M32C-Modifiers. (line 11) 17694 * symbol names: Symbol Names. (line 6) 17695 * symbol names, $ in <1>: SH64-Chars. (line 10) 17696 * symbol names, $ in <2>: SH-Chars. (line 10) 17697 * symbol names, $ in <3>: D30V-Chars. (line 63) 17698 * symbol names, $ in: D10V-Chars. (line 46) 17699 * symbol names, local: Symbol Names. (line 22) 17700 * symbol names, temporary: Symbol Names. (line 22) 17701 * symbol storage class (COFF): Scl. (line 6) 17702 * symbol type: Symbol Type. (line 6) 17703 * symbol type, COFF: Type. (line 11) 17704 * symbol type, ELF: Type. (line 22) 17705 * symbol value: Symbol Value. (line 6) 17706 * symbol value, setting: Set. (line 6) 17707 * symbol values, assigning: Setting Symbols. (line 6) 17708 * symbol versioning: Symver. (line 6) 17709 * symbol, common: Comm. (line 6) 17710 * symbol, making visible to linker: Global. (line 6) 17711 * symbolic debuggers, information for: Stab. (line 6) 17712 * symbols: Symbols. (line 6) 17713 * Symbols in position-independent code, CRIS: CRIS-Pic. (line 6) 17714 * symbols with uppercase, VAX/VMS: VAX-Opts. (line 42) 17715 * symbols, assigning values to: Equ. (line 6) 17716 * Symbols, built-in, CRIS: CRIS-Symbols. (line 6) 17717 * Symbols, CRIS, built-in: CRIS-Symbols. (line 6) 17718 * symbols, local common: Lcomm. (line 6) 17719 * symver directive: Symver. (line 6) 17720 * syntax compatibility, i386: i386-Syntax. (line 6) 17721 * syntax compatibility, x86-64: i386-Syntax. (line 6) 17722 * syntax, BFIN: BFIN Syntax. (line 6) 17723 * syntax, D10V: D10V-Syntax. (line 6) 17724 * syntax, D30V: D30V-Syntax. (line 6) 17725 * syntax, M32C: M32C-Modifiers. (line 6) 17726 * syntax, M680x0: M68K-Syntax. (line 8) 17727 * syntax, M68HC11 <1>: M68HC11-Modifiers. (line 6) 17728 * syntax, M68HC11: M68HC11-Syntax. (line 6) 17729 * syntax, machine-independent: Syntax. (line 6) 17730 * syntax, Xtensa assembler: Xtensa Syntax. (line 6) 17731 * sysproc directive, i960: Directives-i960. (line 37) 17732 * tab (\t): Strings. (line 27) 17733 * tab directive, TIC54X: TIC54X-Directives. (line 248) 17734 * tag directive: Tag. (line 6) 17735 * tag directive, TIC54X: TIC54X-Directives. (line 217) 17736 * tdaoff pseudo-op, V850: V850 Opcodes. (line 81) 17737 * temporary symbol names: Symbol Names. (line 22) 17738 * text and data sections, joining: R. (line 6) 17739 * text directive: Text. (line 6) 17740 * text section: Ld Sections. (line 9) 17741 * tfloat directive, i386: i386-Float. (line 14) 17742 * tfloat directive, x86-64: i386-Float. (line 14) 17743 * thumb directive, ARM: ARM Directives. (line 33) 17744 * Thumb support: ARM-Dependent. (line 6) 17745 * thumb_func directive, ARM: ARM Directives. (line 43) 17746 * thumb_set directive, ARM: ARM Directives. (line 51) 17747 * TIC54X builtin math functions: TIC54X-Builtins. (line 6) 17748 * TIC54X machine directives: TIC54X-Directives. (line 6) 17749 * TIC54X memory-mapped registers: TIC54X-MMRegs. (line 6) 17750 * TIC54X options: TIC54X-Opts. (line 6) 17751 * TIC54X subsym builtins: TIC54X-Macros. (line 16) 17752 * TIC54X support: TIC54X-Dependent. (line 6) 17753 * TIC54X-specific macros: TIC54X-Macros. (line 6) 17754 * time, total for assembly: statistics. (line 6) 17755 * title directive: Title. (line 6) 17756 * tp register, V850: V850-Regs. (line 20) 17757 * transform directive: Transform Directive. (line 6) 17758 * trusted compiler: f. (line 6) 17759 * turning preprocessing on and off: Preprocessing. (line 27) 17760 * type directive (COFF version): Type. (line 11) 17761 * type directive (ELF version): Type. (line 22) 17762 * type of a symbol: Symbol Type. (line 6) 17763 * ualong directive, SH: SH Directives. (line 6) 17764 * uaword directive, SH: SH Directives. (line 6) 17765 * ubyte directive, TIC54X: TIC54X-Directives. (line 36) 17766 * uchar directive, TIC54X: TIC54X-Directives. (line 36) 17767 * uhalf directive, TIC54X: TIC54X-Directives. (line 111) 17768 * uint directive, TIC54X: TIC54X-Directives. (line 111) 17769 * uleb128 directive: Uleb128. (line 6) 17770 * ulong directive, TIC54X: TIC54X-Directives. (line 135) 17771 * undefined section: Ld Sections. (line 36) 17772 * union directive, TIC54X: TIC54X-Directives. (line 251) 17773 * unreq directive, ARM: ARM Directives. (line 18) 17774 * unsegm: Z8000 Directives. (line 14) 17775 * usect directive, TIC54X: TIC54X-Directives. (line 263) 17776 * ushort directive, TIC54X: TIC54X-Directives. (line 111) 17777 * uword directive, TIC54X: TIC54X-Directives. (line 111) 17778 * V850 command line options: V850 Options. (line 9) 17779 * V850 floating point (IEEE): V850 Floating Point. (line 6) 17780 * V850 line comment character: V850-Chars. (line 6) 17781 * V850 machine directives: V850 Directives. (line 6) 17782 * V850 opcodes: V850 Opcodes. (line 6) 17783 * V850 options (none): V850 Options. (line 6) 17784 * V850 register names: V850-Regs. (line 6) 17785 * V850 support: V850-Dependent. (line 6) 17786 * val directive: Val. (line 6) 17787 * value attribute, COFF: Val. (line 6) 17788 * value of a symbol: Symbol Value. (line 6) 17789 * var directive, TIC54X: TIC54X-Directives. (line 273) 17790 * VAX bitfields not supported: VAX-no. (line 6) 17791 * VAX branch improvement: VAX-branch. (line 6) 17792 * VAX command-line options ignored: VAX-Opts. (line 6) 17793 * VAX displacement sizing character: VAX-operands. (line 12) 17794 * VAX floating point: VAX-float. (line 6) 17795 * VAX immediate character: VAX-operands. (line 6) 17796 * VAX indirect character: VAX-operands. (line 9) 17797 * VAX machine directives: VAX-directives. (line 6) 17798 * VAX opcode mnemonics: VAX-opcodes. (line 6) 17799 * VAX operand notation: VAX-operands. (line 6) 17800 * VAX register names: VAX-operands. (line 17) 17801 * VAX support: Vax-Dependent. (line 6) 17802 * Vax-11 C compatibility: VAX-Opts. (line 42) 17803 * VAX/VMS options: VAX-Opts. (line 42) 17804 * version directive: Version. (line 6) 17805 * version directive, TIC54X: TIC54X-Directives. (line 277) 17806 * version of assembler: v. (line 6) 17807 * versions of symbols: Symver. (line 6) 17808 * visibility <1>: Protected. (line 6) 17809 * visibility <2>: Internal. (line 6) 17810 * visibility: Hidden. (line 6) 17811 * VMS (VAX) options: VAX-Opts. (line 42) 17812 * vtable_entry directive: VTableEntry. (line 6) 17813 * vtable_inherit directive: VTableInherit. (line 6) 17814 * warning directive: Warning. (line 6) 17815 * warning for altered difference tables: K. (line 6) 17816 * warning messages: Errors. (line 6) 17817 * warnings, causing error: W. (line 16) 17818 * warnings, M32R: M32R-Warnings. (line 6) 17819 * warnings, suppressing: W. (line 11) 17820 * warnings, switching on: W. (line 19) 17821 * weak directive: Weak. (line 6) 17822 * weakref directive: Weakref. (line 6) 17823 * whitespace: Whitespace. (line 6) 17824 * whitespace, removed by preprocessor: Preprocessing. (line 7) 17825 * wide floating point directives, VAX: VAX-directives. (line 10) 17826 * width directive, TIC54X: TIC54X-Directives. (line 127) 17827 * Width of continuation lines of disassembly output: listing. (line 20) 17828 * Width of first line disassembly output: listing. (line 15) 17829 * Width of source line output: listing. (line 27) 17830 * wmsg directive, TIC54X: TIC54X-Directives. (line 77) 17831 * word directive: Word. (line 6) 17832 * word directive, ARC: ARC Directives. (line 174) 17833 * word directive, H8/300: H8/300 Directives. (line 6) 17834 * word directive, i386: i386-Float. (line 21) 17835 * word directive, SPARC: Sparc-Directives. (line 51) 17836 * word directive, TIC54X: TIC54X-Directives. (line 111) 17837 * word directive, x86-64: i386-Float. (line 21) 17838 * writing patterns in memory: Fill. (line 6) 17839 * wval: Z8000 Directives. (line 24) 17840 * x86-64 arch directive: i386-Arch. (line 6) 17841 * x86-64 att_syntax pseudo op: i386-Syntax. (line 6) 17842 * x86-64 conversion instructions: i386-Mnemonics. (line 32) 17843 * x86-64 floating point: i386-Float. (line 6) 17844 * x86-64 immediate operands: i386-Syntax. (line 15) 17845 * x86-64 instruction naming: i386-Mnemonics. (line 6) 17846 * x86-64 intel_syntax pseudo op: i386-Syntax. (line 6) 17847 * x86-64 jump optimization: i386-Jumps. (line 6) 17848 * x86-64 jump, call, return: i386-Syntax. (line 38) 17849 * x86-64 jump/call operands: i386-Syntax. (line 15) 17850 * x86-64 memory references: i386-Memory. (line 6) 17851 * x86-64 options: i386-Options. (line 6) 17852 * x86-64 register operands: i386-Syntax. (line 15) 17853 * x86-64 registers: i386-Regs. (line 6) 17854 * x86-64 sections: i386-Syntax. (line 44) 17855 * x86-64 size suffixes: i386-Syntax. (line 29) 17856 * x86-64 source, destination operands: i386-Syntax. (line 22) 17857 * x86-64 support: i386-Dependent. (line 6) 17858 * x86-64 syntax compatibility: i386-Syntax. (line 6) 17859 * xfloat directive, TIC54X: TIC54X-Directives. (line 64) 17860 * xlong directive, TIC54X: TIC54X-Directives. (line 135) 17861 * Xtensa architecture: Xtensa-Dependent. (line 6) 17862 * Xtensa assembler syntax: Xtensa Syntax. (line 6) 17863 * Xtensa directives: Xtensa Directives. (line 6) 17864 * Xtensa opcode names: Xtensa Opcodes. (line 6) 17865 * Xtensa register names: Xtensa Registers. (line 6) 17866 * xword directive, SPARC: Sparc-Directives. (line 55) 17867 * Z80 $: Z80-Chars. (line 8) 17868 * Z80 ': Z80-Chars. (line 13) 17869 * Z80 floating point: Z80 Floating Point. (line 6) 17870 * Z80 line comment character: Z80-Chars. (line 6) 17871 * Z80 options: Z80 Options. (line 6) 17872 * Z80 registers: Z80-Regs. (line 6) 17873 * Z80 support: Z80-Dependent. (line 6) 17874 * Z80 Syntax: Z80 Options. (line 47) 17875 * Z80, \: Z80-Chars. (line 11) 17876 * Z80, case sensitivity: Z80-Case. (line 6) 17877 * Z80-only directives: Z80 Directives. (line 9) 17878 * Z800 addressing modes: Z8000-Addressing. (line 6) 17879 * Z8000 directives: Z8000 Directives. (line 6) 17880 * Z8000 line comment character: Z8000-Chars. (line 6) 17881 * Z8000 line separator: Z8000-Chars. (line 8) 17882 * Z8000 opcode summary: Z8000 Opcodes. (line 6) 17883 * Z8000 options: Z8000 Options. (line 6) 17884 * Z8000 registers: Z8000-Regs. (line 6) 17885 * Z8000 support: Z8000-Dependent. (line 6) 17886 * zdaoff pseudo-op, V850: V850 Opcodes. (line 99) 17887 * zero register, V850: V850-Regs. (line 7) 17888 * zero-terminated strings: Asciz. (line 6) 17889 17890 17891 17892 Tag Table: 17893 Node: Top778 17894 Node: Overview1695 17895 Node: Manual28187 17896 Node: GNU Assembler29131 17897 Node: Object Formats30302 17898 Node: Command Line30754 17899 Node: Input Files31841 17900 Node: Object33822 17901 Node: Errors34718 17902 Node: Invoking35913 17903 Node: a37862 17904 Node: alternate39634 17905 Node: D39806 17906 Node: f40039 17907 Node: I40547 17908 Node: K41091 17909 Node: L41394 17910 Node: listing42231 17911 Node: M43823 17912 Node: MD48224 17913 Node: o48650 17914 Node: R49105 17915 Node: statistics50135 17916 Node: traditional-format50542 17917 Node: v51015 17918 Node: W51290 17919 Node: Z52197 17920 Node: Syntax52719 17921 Node: Preprocessing53310 17922 Node: Whitespace54873 17923 Node: Comments55269 17924 Node: Symbol Intro57422 17925 Node: Statements58112 17926 Node: Constants60028 17927 Node: Characters60659 17928 Node: Strings61161 17929 Node: Chars63327 17930 Node: Numbers64081 17931 Node: Integers64621 17932 Node: Bignums65277 17933 Node: Flonums65633 17934 Node: Sections67380 17935 Node: Secs Background67758 17936 Node: Ld Sections72797 17937 Node: As Sections75181 17938 Node: Sub-Sections76091 17939 Node: bss79238 17940 Node: Symbols80188 17941 Node: Labels80836 17942 Node: Setting Symbols81567 17943 Node: Symbol Names82063 17944 Node: Dot86428 17945 Node: Symbol Attributes86875 17946 Node: Symbol Value87612 17947 Node: Symbol Type88657 17948 Node: a.out Symbols89045 17949 Node: Symbol Desc89307 17950 Node: Symbol Other89602 17951 Node: COFF Symbols89771 17952 Node: SOM Symbols90444 17953 Node: Expressions90886 17954 Node: Empty Exprs91635 17955 Node: Integer Exprs91982 17956 Node: Arguments92377 17957 Node: Operators93483 17958 Node: Prefix Ops93818 17959 Node: Infix Ops94146 17960 Node: Pseudo Ops96536 17961 Node: Abort101731 17962 Node: ABORT102136 17963 Node: Align102323 17964 Node: Ascii104605 17965 Node: Asciz104914 17966 Node: Balign105159 17967 Node: Byte107022 17968 Node: Comm107260 17969 Node: CFI directives108634 17970 Node: LNS directives110986 17971 Node: Data113063 17972 Node: Def113390 17973 Node: Desc113622 17974 Node: Dim114122 17975 Node: Double114379 17976 Node: Eject114717 17977 Node: Else114892 17978 Node: Elseif115188 17979 Node: End115478 17980 Node: Endef115693 17981 Node: Endfunc115870 17982 Node: Endif116045 17983 Node: Equ116306 17984 Node: Equiv116815 17985 Node: Eqv117371 17986 Node: Err117735 17987 Node: Error118046 17988 Node: Exitm118491 17989 Node: Extern118660 17990 Node: Fail118921 17991 Node: File119366 17992 Node: Fill119843 17993 Node: Float120807 17994 Node: Func121149 17995 Node: Global121739 17996 Node: Hidden122489 17997 Node: hword123068 17998 Node: Ident123396 17999 Node: If123970 18000 Node: Incbin127029 18001 Node: Include127724 18002 Node: Int128275 18003 Node: Internal128656 18004 Node: Irp129304 18005 Node: Irpc130201 18006 Node: Lcomm131118 18007 Node: Lflags131866 18008 Node: Line132060 18009 Node: Linkonce132979 18010 Node: Ln134208 18011 Node: MRI134369 18012 Node: List134707 18013 Node: Long135315 18014 Node: Macro135501 18015 Node: Altmacro140064 18016 Node: Noaltmacro141394 18017 Node: Nolist141562 18018 Node: Octa141992 18019 Node: Org142326 18020 Node: P2align143609 18021 Node: Previous145537 18022 Node: PopSection146231 18023 Node: Print146739 18024 Node: Protected146968 18025 Node: Psize147615 18026 Node: Purgem148299 18027 Node: PushSection148520 18028 Node: Quad149077 18029 Node: Rept149532 18030 Node: Sbttl149945 18031 Node: Scl150310 18032 Node: Section150651 18033 Node: Set155791 18034 Node: Short156428 18035 Node: Single156748 18036 Node: Size157093 18037 Node: Sleb128157765 18038 Node: Skip158087 18039 Node: Space158409 18040 Node: Stab159048 18041 Node: String161050 18042 Node: Struct161476 18043 Node: SubSection162199 18044 Node: Symver162760 18045 Node: Tag165151 18046 Node: Text165531 18047 Node: Title165850 18048 Node: Type166229 18049 Node: Uleb128167306 18050 Node: Val167630 18051 Node: Version167880 18052 Node: VTableEntry168155 18053 Node: VTableInherit168445 18054 Node: Warning168891 18055 Node: Weak169125 18056 Node: Weakref169794 18057 Node: Word170759 18058 Node: Deprecated172605 18059 Node: Machine Dependencies172840 18060 Node: Alpha-Dependent175604 18061 Node: Alpha Notes176018 18062 Node: Alpha Options176299 18063 Node: Alpha Syntax178497 18064 Node: Alpha-Chars178966 18065 Node: Alpha-Regs179197 18066 Node: Alpha-Relocs179584 18067 Node: Alpha Floating Point185842 18068 Node: Alpha Directives186064 18069 Node: Alpha Opcodes191587 18070 Node: ARC-Dependent191882 18071 Node: ARC Options192265 18072 Node: ARC Syntax193334 18073 Node: ARC-Chars193566 18074 Node: ARC-Regs193698 18075 Node: ARC Floating Point193822 18076 Node: ARC Directives194133 18077 Node: ARC Opcodes200104 18078 Node: ARM-Dependent200330 18079 Node: ARM Options200757 18080 Node: ARM Syntax206551 18081 Node: ARM-Chars206783 18082 Node: ARM-Regs207307 18083 Node: ARM Floating Point207492 18084 Node: ARM Directives207691 18085 Node: ARM Opcodes214055 18086 Node: ARM Mapping Symbols216143 18087 Node: BFIN-Dependent216922 18088 Node: BFIN Syntax217176 18089 Node: BFIN Directives222873 18090 Node: CRIS-Dependent223280 18091 Node: CRIS-Opts223626 18092 Ref: march-option225244 18093 Node: CRIS-Expand227061 18094 Node: CRIS-Symbols228244 18095 Node: CRIS-Syntax229413 18096 Node: CRIS-Chars229749 18097 Node: CRIS-Pic230300 18098 Ref: crispic230496 18099 Node: CRIS-Regs234036 18100 Node: CRIS-Pseudos234453 18101 Ref: crisnous235229 18102 Node: D10V-Dependent236511 18103 Node: D10V-Opts236862 18104 Node: D10V-Syntax237825 18105 Node: D10V-Size238354 18106 Node: D10V-Subs239327 18107 Node: D10V-Chars240362 18108 Node: D10V-Regs241966 18109 Node: D10V-Addressing243011 18110 Node: D10V-Word243697 18111 Node: D10V-Float244212 18112 Node: D10V-Opcodes244523 18113 Node: D30V-Dependent244916 18114 Node: D30V-Opts245269 18115 Node: D30V-Syntax245944 18116 Node: D30V-Size246476 18117 Node: D30V-Subs247447 18118 Node: D30V-Chars248482 18119 Node: D30V-Guarded250780 18120 Node: D30V-Regs251460 18121 Node: D30V-Addressing252599 18122 Node: D30V-Float253267 18123 Node: D30V-Opcodes253578 18124 Node: H8/300-Dependent253971 18125 Node: H8/300 Options254381 18126 Node: H8/300 Syntax254590 18127 Node: H8/300-Chars254889 18128 Node: H8/300-Regs255186 18129 Node: H8/300-Addressing256103 18130 Node: H8/300 Floating Point257142 18131 Node: H8/300 Directives257467 18132 Node: H8/300 Opcodes258593 18133 Node: HPPA-Dependent266913 18134 Node: HPPA Notes267346 18135 Node: HPPA Options268102 18136 Node: HPPA Syntax268295 18137 Node: HPPA Floating Point269563 18138 Node: HPPA Directives269767 18139 Node: HPPA Opcodes278451 18140 Node: ESA/390-Dependent278708 18141 Node: ESA/390 Notes279168 18142 Node: ESA/390 Options279959 18143 Node: ESA/390 Syntax280169 18144 Node: ESA/390 Floating Point282342 18145 Node: ESA/390 Directives282621 18146 Node: ESA/390 Opcodes285910 18147 Node: i386-Dependent286172 18148 Node: i386-Options287240 18149 Node: i386-Syntax288430 18150 Node: i386-Mnemonics290844 18151 Node: i386-Regs293309 18152 Node: i386-Prefixes295354 18153 Node: i386-Memory298114 18154 Node: i386-Jumps301051 18155 Node: i386-Float302172 18156 Node: i386-SIMD304001 18157 Node: i386-16bit305110 18158 Node: i386-Bugs307148 18159 Node: i386-Arch307902 18160 Node: i386-Notes310083 18161 Node: i860-Dependent310941 18162 Node: Notes-i860311337 18163 Node: Options-i860312242 18164 Node: Directives-i860313605 18165 Node: Opcodes for i860314674 18166 Node: i960-Dependent316841 18167 Node: Options-i960317244 18168 Node: Floating Point-i960321128 18169 Node: Directives-i960321396 18170 Node: Opcodes for i960323430 18171 Node: callj-i960324047 18172 Node: Compare-and-branch-i960324536 18173 Node: IA-64-Dependent326440 18174 Node: IA-64 Options326741 18175 Node: IA-64 Syntax329901 18176 Node: IA-64-Chars330264 18177 Node: IA-64-Regs330494 18178 Node: IA-64-Bits331420 18179 Node: IA-64 Opcodes331929 18180 Node: IP2K-Dependent332201 18181 Node: IP2K-Opts332429 18182 Node: M32C-Dependent332909 18183 Node: M32C-Opts333433 18184 Node: M32C-Modifiers333717 18185 Node: M32R-Dependent335504 18186 Node: M32R-Opts335825 18187 Node: M32R-Directives339991 18188 Node: M32R-Warnings343966 18189 Node: M68K-Dependent346972 18190 Node: M68K-Opts347439 18191 Node: M68K-Syntax354818 18192 Node: M68K-Moto-Syntax356657 18193 Node: M68K-Float359246 18194 Node: M68K-Directives359766 18195 Node: M68K-opcodes361092 18196 Node: M68K-Branch361318 18197 Node: M68K-Chars365516 18198 Node: M68HC11-Dependent365929 18199 Node: M68HC11-Opts366460 18200 Node: M68HC11-Syntax370276 18201 Node: M68HC11-Modifiers372490 18202 Node: M68HC11-Directives374318 18203 Node: M68HC11-Float375694 18204 Node: M68HC11-opcodes376222 18205 Node: M68HC11-Branch376404 18206 Node: MIPS-Dependent378851 18207 Node: MIPS Opts379941 18208 Node: MIPS Object387268 18209 Node: MIPS Stabs388834 18210 Node: MIPS symbol sizes389556 18211 Node: MIPS ISA391225 18212 Node: MIPS autoextend392374 18213 Node: MIPS insn393104 18214 Node: MIPS option stack393601 18215 Node: MIPS ASE instruction generation overrides394375 18216 Node: MMIX-Dependent395592 18217 Node: MMIX-Opts395972 18218 Node: MMIX-Expand399576 18219 Node: MMIX-Syntax400891 18220 Ref: mmixsite401248 18221 Node: MMIX-Chars402089 18222 Node: MMIX-Symbols402743 18223 Node: MMIX-Regs404811 18224 Node: MMIX-Pseudos405836 18225 Ref: MMIX-loc405977 18226 Ref: MMIX-local407057 18227 Ref: MMIX-is407589 18228 Ref: MMIX-greg407860 18229 Ref: GREG-base408779 18230 Ref: MMIX-byte410096 18231 Ref: MMIX-constants410567 18232 Ref: MMIX-prefix411213 18233 Ref: MMIX-spec411587 18234 Node: MMIX-mmixal411921 18235 Node: MSP430-Dependent415418 18236 Node: MSP430 Options415884 18237 Node: MSP430 Syntax416170 18238 Node: MSP430-Macros416486 18239 Node: MSP430-Chars417217 18240 Node: MSP430-Regs417530 18241 Node: MSP430-Ext418090 18242 Node: MSP430 Floating Point419911 18243 Node: MSP430 Directives420135 18244 Node: MSP430 Opcodes420926 18245 Node: MSP430 Profiling Capability421321 18246 Node: PDP-11-Dependent423650 18247 Node: PDP-11-Options424039 18248 Node: PDP-11-Pseudos429110 18249 Node: PDP-11-Syntax429455 18250 Node: PDP-11-Mnemonics430206 18251 Node: PDP-11-Synthetic430508 18252 Node: PJ-Dependent430726 18253 Node: PJ Options430951 18254 Node: PPC-Dependent431228 18255 Node: PowerPC-Opts431515 18256 Node: PowerPC-Pseudo433590 18257 Node: SH-Dependent434189 18258 Node: SH Options434601 18259 Node: SH Syntax435529 18260 Node: SH-Chars435802 18261 Node: SH-Regs436096 18262 Node: SH-Addressing436710 18263 Node: SH Floating Point437619 18264 Node: SH Directives438713 18265 Node: SH Opcodes439083 18266 Node: SH64-Dependent443405 18267 Node: SH64 Options443768 18268 Node: SH64 Syntax445485 18269 Node: SH64-Chars445768 18270 Node: SH64-Regs446068 18271 Node: SH64-Addressing447164 18272 Node: SH64 Directives448347 18273 Node: SH64 Opcodes449457 18274 Node: Sparc-Dependent450173 18275 Node: Sparc-Opts450558 18276 Node: Sparc-Aligned-Data452815 18277 Node: Sparc-Float453670 18278 Node: Sparc-Directives453871 18279 Node: TIC54X-Dependent455831 18280 Node: TIC54X-Opts456557 18281 Node: TIC54X-Block457600 18282 Node: TIC54X-Env457960 18283 Node: TIC54X-Constants458308 18284 Node: TIC54X-Subsyms458710 18285 Node: TIC54X-Locals460619 18286 Node: TIC54X-Builtins461363 18287 Node: TIC54X-Ext463834 18288 Node: TIC54X-Directives464405 18289 Node: TIC54X-Macros475307 18290 Node: TIC54X-MMRegs477417 18291 Node: Z80-Dependent477633 18292 Node: Z80 Options478021 18293 Node: Z80 Syntax479444 18294 Node: Z80-Chars480116 18295 Node: Z80-Regs480649 18296 Node: Z80-Case481001 18297 Node: Z80 Floating Point481446 18298 Node: Z80 Directives481640 18299 Node: Z80 Opcodes483265 18300 Node: Z8000-Dependent484607 18301 Node: Z8000 Options485568 18302 Node: Z8000 Syntax485785 18303 Node: Z8000-Chars486075 18304 Node: Z8000-Regs486308 18305 Node: Z8000-Addressing487098 18306 Node: Z8000 Directives488215 18307 Node: Z8000 Opcodes489824 18308 Node: Vax-Dependent499766 18309 Node: VAX-Opts500283 18310 Node: VAX-float504018 18311 Node: VAX-directives504650 18312 Node: VAX-opcodes505511 18313 Node: VAX-branch505900 18314 Node: VAX-operands508407 18315 Node: VAX-no509170 18316 Node: V850-Dependent509407 18317 Node: V850 Options509805 18318 Node: V850 Syntax512194 18319 Node: V850-Chars512434 18320 Node: V850-Regs512599 18321 Node: V850 Floating Point514167 18322 Node: V850 Directives514373 18323 Node: V850 Opcodes515516 18324 Node: Xtensa-Dependent521408 18325 Node: Xtensa Options522137 18326 Node: Xtensa Syntax524908 18327 Node: Xtensa Opcodes526797 18328 Node: Xtensa Registers528591 18329 Node: Xtensa Optimizations529224 18330 Node: Density Instructions529676 18331 Node: Xtensa Automatic Alignment530778 18332 Node: Xtensa Relaxation533524 18333 Node: Xtensa Branch Relaxation534432 18334 Node: Xtensa Call Relaxation535804 18335 Node: Xtensa Immediate Relaxation537590 18336 Node: Xtensa Directives540164 18337 Node: Schedule Directive541872 18338 Node: Longcalls Directive542212 18339 Node: Transform Directive542756 18340 Node: Literal Directive543498 18341 Node: Literal Position Directive545283 18342 Node: Literal Prefix Directive546982 18343 Node: Absolute Literals Directive549145 18344 Node: Reporting Bugs550452 18345 Node: Bug Criteria551176 18346 Node: Bug Reporting551941 18347 Node: Acknowledgements558574 18348 Ref: Acknowledgements-Footnote-1563472 18349 Node: GNU Free Documentation License563498 18350 Node: Index583225 18351 18352 End Tag Table 18353