1This is as.info, produced by makeinfo version 4.8 from as.texinfo. 2 3INFO-DIR-SECTION Software development 4START-INFO-DIR-ENTRY 5* As: (as). The GNU assembler. 6* Gas: (as). The GNU assembler. 7END-INFO-DIR-ENTRY 8 9 This file documents the GNU Assembler "as". 10 11 Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 122000, 2001, 2002, 2006, 2007, 2008, 2009, 2010, 2011 Free Software 13Foundation, Inc. 14 15 Permission is granted to copy, distribute and/or modify this document 16under the terms of the GNU Free Documentation License, Version 1.3 or 17any later version published by the Free Software Foundation; with no 18Invariant Sections, with no Front-Cover Texts, and with no Back-Cover 19Texts. A copy of the license is included in the section entitled "GNU 20Free Documentation License". 21 22 23File: as.info, Node: Top, Next: Overview, Up: (dir) 24 25Using as 26******** 27 28This file is a user guide to the GNU assembler `as' (GNU Binutils) 29version 2.21.1. 30 31 This document is distributed under the terms of the GNU Free 32Documentation License. A copy of the license is included in the 33section entitled "GNU Free Documentation License". 34 35* Menu: 36 37* Overview:: Overview 38* Invoking:: Command-Line Options 39* Syntax:: Syntax 40* Sections:: Sections and Relocation 41* Symbols:: Symbols 42* Expressions:: Expressions 43* Pseudo Ops:: Assembler Directives 44 45* Object Attributes:: Object Attributes 46* Machine Dependencies:: Machine Dependent Features 47* Reporting Bugs:: Reporting Bugs 48* Acknowledgements:: Who Did What 49* GNU Free Documentation License:: GNU Free Documentation License 50* AS Index:: AS Index 51 52 53File: as.info, Node: Overview, Next: Invoking, Prev: Top, Up: Top 54 551 Overview 56********** 57 58Here is a brief summary of how to invoke `as'. For details, see *Note 59Command-Line Options: Invoking. 60 61 as [-a[cdghlns][=FILE]] [-alternate] [-D] 62 [-compress-debug-sections] [-nocompress-debug-sections] 63 [-debug-prefix-map OLD=NEW] 64 [-defsym SYM=VAL] [-f] [-g] [-gstabs] 65 [-gstabs+] [-gdwarf-2] [-help] [-I DIR] [-J] 66 [-K] [-L] [-listing-lhs-width=NUM] 67 [-listing-lhs-width2=NUM] [-listing-rhs-width=NUM] 68 [-listing-cont-lines=NUM] [-keep-locals] [-o 69 OBJFILE] [-R] [-reduce-memory-overheads] [-statistics] 70 [-v] [-version] [-version] [-W] [-warn] 71 [-fatal-warnings] [-w] [-x] [-Z] [@FILE] 72 [-size-check=[error|warning]] 73 [-target-help] [TARGET-OPTIONS] 74 [-|FILES ...] 75 76 _Target Alpha options:_ 77 [-mCPU] 78 [-mdebug | -no-mdebug] 79 [-replace | -noreplace] 80 [-relax] [-g] [-GSIZE] 81 [-F] [-32addr] 82 83 _Target ARC options:_ 84 [-marc[5|6|7|8]] 85 [-EB|-EL] 86 87 _Target ARM options:_ 88 [-mcpu=PROCESSOR[+EXTENSION...]] 89 [-march=ARCHITECTURE[+EXTENSION...]] 90 [-mfpu=FLOATING-POINT-FORMAT] 91 [-mfloat-abi=ABI] 92 [-meabi=VER] 93 [-mthumb] 94 [-EB|-EL] 95 [-mapcs-32|-mapcs-26|-mapcs-float| 96 -mapcs-reentrant] 97 [-mthumb-interwork] [-k] 98 99 _Target Blackfin options:_ 100 [-mcpu=PROCESSOR[-SIREVISION]] 101 [-mfdpic] 102 [-mno-fdpic] 103 [-mnopic] 104 105 _Target CRIS options:_ 106 [-underscore | -no-underscore] 107 [-pic] [-N] 108 [-emulation=criself | -emulation=crisaout] 109 [-march=v0_v10 | -march=v10 | -march=v32 | -march=common_v10_v32] 110 111 _Target D10V options:_ 112 [-O] 113 114 _Target D30V options:_ 115 [-O|-n|-N] 116 117 _Target H8/300 options:_ 118 [-h-tick-hex] 119 120 _Target i386 options:_ 121 [-32|-64] [-n] 122 [-march=CPU[+EXTENSION...]] [-mtune=CPU] 123 124 _Target i960 options:_ 125 [-ACA|-ACA_A|-ACB|-ACC|-AKA|-AKB| 126 -AKC|-AMC] 127 [-b] [-no-relax] 128 129 _Target IA-64 options:_ 130 [-mconstant-gp|-mauto-pic] 131 [-milp32|-milp64|-mlp64|-mp64] 132 [-mle|mbe] 133 [-mtune=itanium1|-mtune=itanium2] 134 [-munwind-check=warning|-munwind-check=error] 135 [-mhint.b=ok|-mhint.b=warning|-mhint.b=error] 136 [-x|-xexplicit] [-xauto] [-xdebug] 137 138 _Target IP2K options:_ 139 [-mip2022|-mip2022ext] 140 141 _Target M32C options:_ 142 [-m32c|-m16c] [-relax] [-h-tick-hex] 143 144 _Target M32R options:_ 145 [-m32rx|-[no-]warn-explicit-parallel-conflicts| 146 -W[n]p] 147 148 _Target M680X0 options:_ 149 [-l] [-m68000|-m68010|-m68020|...] 150 151 _Target M68HC11 options:_ 152 [-m68hc11|-m68hc12|-m68hcs12] 153 [-mshort|-mlong] 154 [-mshort-double|-mlong-double] 155 [-force-long-branches] [-short-branches] 156 [-strict-direct-mode] [-print-insn-syntax] 157 [-print-opcodes] [-generate-example] 158 159 _Target MCORE options:_ 160 [-jsri2bsr] [-sifilter] [-relax] 161 [-mcpu=[210|340]] 162 _Target MICROBLAZE options:_ 163 164 _Target MIPS options:_ 165 [-nocpp] [-EL] [-EB] [-O[OPTIMIZATION LEVEL]] 166 [-g[DEBUG LEVEL]] [-G NUM] [-KPIC] [-call_shared] 167 [-non_shared] [-xgot [-mvxworks-pic] 168 [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32] 169 [-march=CPU] [-mtune=CPU] [-mips1] [-mips2] 170 [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2] 171 [-mips64] [-mips64r2] 172 [-construct-floats] [-no-construct-floats] 173 [-trap] [-no-break] [-break] [-no-trap] 174 [-mips16] [-no-mips16] 175 [-msmartmips] [-mno-smartmips] 176 [-mips3d] [-no-mips3d] 177 [-mdmx] [-no-mdmx] 178 [-mdsp] [-mno-dsp] 179 [-mdspr2] [-mno-dspr2] 180 [-mmt] [-mno-mt] 181 [-mfix7000] [-mno-fix7000] 182 [-mfix-vr4120] [-mno-fix-vr4120] 183 [-mfix-vr4130] [-mno-fix-vr4130] 184 [-mdebug] [-no-mdebug] 185 [-mpdr] [-mno-pdr] 186 187 _Target MMIX options:_ 188 [-fixed-special-register-names] [-globalize-symbols] 189 [-gnu-syntax] [-relax] [-no-predefined-symbols] 190 [-no-expand] [-no-merge-gregs] [-x] 191 [-linker-allocated-gregs] 192 193 _Target PDP11 options:_ 194 [-mpic|-mno-pic] [-mall] [-mno-extensions] 195 [-mEXTENSION|-mno-EXTENSION] 196 [-mCPU] [-mMACHINE] 197 198 _Target picoJava options:_ 199 [-mb|-me] 200 201 _Target PowerPC options:_ 202 [-a32|-a64] 203 [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604|-m403|-m405| 204 -m440|-m464|-m476|-m7400|-m7410|-m7450|-m7455|-m750cl|-mppc64| 205 -m620|-me500|-e500x2|-me500mc|-me500mc64|-mppc64bridge|-mbooke| 206 -mpower4|-mpr4|-mpower5|-mpwr5|-mpwr5x|-mpower6|-mpwr6| 207 -mpower7|-mpw7|-ma2|-mcell|-mspe|-mtitan|-me300|-mcom] 208 [-many] [-maltivec|-mvsx] 209 [-mregnames|-mno-regnames] 210 [-mrelocatable|-mrelocatable-lib|-K PIC] [-memb] 211 [-mlittle|-mlittle-endian|-le|-mbig|-mbig-endian|-be] 212 [-msolaris|-mno-solaris] 213 [-nops=COUNT] 214 215 _Target RX options:_ 216 [-mlittle-endian|-mbig-endian] 217 [-m32bit-ints|-m16bit-ints] 218 [-m32bit-doubles|-m64bit-doubles] 219 220 _Target s390 options:_ 221 [-m31|-m64] [-mesa|-mzarch] [-march=CPU] 222 [-mregnames|-mno-regnames] 223 [-mwarn-areg-zero] 224 225 _Target SCORE options:_ 226 [-EB][-EL][-FIXDD][-NWARN] 227 [-SCORE5][-SCORE5U][-SCORE7][-SCORE3] 228 [-march=score7][-march=score3] 229 [-USE_R1][-KPIC][-O0][-G NUM][-V] 230 231 _Target SPARC options:_ 232 [-Av6|-Av7|-Av8|-Asparclet|-Asparclite 233 -Av8plus|-Av8plusa|-Av9|-Av9a] 234 [-xarch=v8plus|-xarch=v8plusa] [-bump] 235 [-32|-64] 236 237 _Target TIC54X options:_ 238 [-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf] 239 [-merrors-to-file <FILENAME>|-me <FILENAME>] 240 241 242 _Target TIC6X options:_ 243 [-march=ARCH] [-matomic|-mno-atomic] 244 [-mbig-endian|-mlittle-endian] [-mdsbt|-mno-dsbt] 245 [-mpid=no|-mpid=near|-mpid=far] [-mpic|-mno-pic] 246 247 248 _Target Z80 options:_ 249 [-z80] [-r800] 250 [ -ignore-undocumented-instructions] [-Wnud] 251 [ -ignore-unportable-instructions] [-Wnup] 252 [ -warn-undocumented-instructions] [-Wud] 253 [ -warn-unportable-instructions] [-Wup] 254 [ -forbid-undocumented-instructions] [-Fud] 255 [ -forbid-unportable-instructions] [-Fup] 256 257 258 _Target Xtensa options:_ 259 [-[no-]text-section-literals] [-[no-]absolute-literals] 260 [-[no-]target-align] [-[no-]longcalls] 261 [-[no-]transform] 262 [-rename-section OLDNAME=NEWNAME] 263 264`@FILE' 265 Read command-line options from FILE. The options read are 266 inserted in place of the original @FILE option. If FILE does not 267 exist, or cannot be read, then the option will be treated 268 literally, and not removed. 269 270 Options in FILE are separated by whitespace. A whitespace 271 character may be included in an option by surrounding the entire 272 option in either single or double quotes. Any character 273 (including a backslash) may be included by prefixing the character 274 to be included with a backslash. The FILE may itself contain 275 additional @FILE options; any such options will be processed 276 recursively. 277 278`-a[cdghlmns]' 279 Turn on listings, in any of a variety of ways: 280 281 `-ac' 282 omit false conditionals 283 284 `-ad' 285 omit debugging directives 286 287 `-ag' 288 include general information, like as version and options 289 passed 290 291 `-ah' 292 include high-level source 293 294 `-al' 295 include assembly 296 297 `-am' 298 include macro expansions 299 300 `-an' 301 omit forms processing 302 303 `-as' 304 include symbols 305 306 `=file' 307 set the name of the listing file 308 309 You may combine these options; for example, use `-aln' for assembly 310 listing without forms processing. The `=file' option, if used, 311 must be the last one. By itself, `-a' defaults to `-ahls'. 312 313`--alternate' 314 Begin in alternate macro mode. *Note `.altmacro': Altmacro. 315 316`--compress-debug-sections' 317 Compress DWARF debug sections using zlib. The debug sections are 318 renamed to begin with `.zdebug', and the resulting object file may 319 not be compatible with older linkers and object file utilities. 320 321`--nocompress-debug-sections' 322 Do not compress DWARF debug sections. This is the default. 323 324`-D' 325 Ignored. This option is accepted for script compatibility with 326 calls to other assemblers. 327 328`--debug-prefix-map OLD=NEW' 329 When assembling files in directory `OLD', record debugging 330 information describing them as in `NEW' instead. 331 332`--defsym SYM=VALUE' 333 Define the symbol SYM to be VALUE before assembling the input file. 334 VALUE must be an integer constant. As in C, a leading `0x' 335 indicates a hexadecimal value, and a leading `0' indicates an octal 336 value. The value of the symbol can be overridden inside a source 337 file via the use of a `.set' pseudo-op. 338 339`-f' 340 "fast"--skip whitespace and comment preprocessing (assume source is 341 compiler output). 342 343`-g' 344`--gen-debug' 345 Generate debugging information for each assembler source line 346 using whichever debug format is preferred by the target. This 347 currently means either STABS, ECOFF or DWARF2. 348 349`--gstabs' 350 Generate stabs debugging information for each assembler line. This 351 may help debugging assembler code, if the debugger can handle it. 352 353`--gstabs+' 354 Generate stabs debugging information for each assembler line, with 355 GNU extensions that probably only gdb can handle, and that could 356 make other debuggers crash or refuse to read your program. This 357 may help debugging assembler code. Currently the only GNU 358 extension is the location of the current working directory at 359 assembling time. 360 361`--gdwarf-2' 362 Generate DWARF2 debugging information for each assembler line. 363 This may help debugging assembler code, if the debugger can handle 364 it. Note--this option is only supported by some targets, not all 365 of them. 366 367`--size-check=error' 368`--size-check=warning' 369 Issue an error or warning for invalid ELF .size directive. 370 371`--help' 372 Print a summary of the command line options and exit. 373 374`--target-help' 375 Print a summary of all target specific options and exit. 376 377`-I DIR' 378 Add directory DIR to the search list for `.include' directives. 379 380`-J' 381 Don't warn about signed overflow. 382 383`-K' 384 Issue warnings when difference tables altered for long 385 displacements. 386 387`-L' 388`--keep-locals' 389 Keep (in the symbol table) local symbols. These symbols start with 390 system-specific local label prefixes, typically `.L' for ELF 391 systems or `L' for traditional a.out systems. *Note Symbol 392 Names::. 393 394`--listing-lhs-width=NUMBER' 395 Set the maximum width, in words, of the output data column for an 396 assembler listing to NUMBER. 397 398`--listing-lhs-width2=NUMBER' 399 Set the maximum width, in words, of the output data column for 400 continuation lines in an assembler listing to NUMBER. 401 402`--listing-rhs-width=NUMBER' 403 Set the maximum width of an input source line, as displayed in a 404 listing, to NUMBER bytes. 405 406`--listing-cont-lines=NUMBER' 407 Set the maximum number of lines printed in a listing for a single 408 line of input to NUMBER + 1. 409 410`-o OBJFILE' 411 Name the object-file output from `as' OBJFILE. 412 413`-R' 414 Fold the data section into the text section. 415 416 Set the default size of GAS's hash tables to a prime number close 417 to NUMBER. Increasing this value can reduce the length of time it 418 takes the assembler to perform its tasks, at the expense of 419 increasing the assembler's memory requirements. Similarly 420 reducing this value can reduce the memory requirements at the 421 expense of speed. 422 423`--reduce-memory-overheads' 424 This option reduces GAS's memory requirements, at the expense of 425 making the assembly processes slower. Currently this switch is a 426 synonym for `--hash-size=4051', but in the future it may have 427 other effects as well. 428 429`--statistics' 430 Print the maximum space (in bytes) and total time (in seconds) 431 used by assembly. 432 433`--strip-local-absolute' 434 Remove local absolute symbols from the outgoing symbol table. 435 436`-v' 437`-version' 438 Print the `as' version. 439 440`--version' 441 Print the `as' version and exit. 442 443`-W' 444`--no-warn' 445 Suppress warning messages. 446 447`--fatal-warnings' 448 Treat warnings as errors. 449 450`--warn' 451 Don't suppress warning messages or treat them as errors. 452 453`-w' 454 Ignored. 455 456`-x' 457 Ignored. 458 459`-Z' 460 Generate an object file even after errors. 461 462`-- | FILES ...' 463 Standard input, or source files to assemble. 464 465 466 The following options are available when as is configured for an ARC 467processor. 468 469`-marc[5|6|7|8]' 470 This option selects the core processor variant. 471 472`-EB | -EL' 473 Select either big-endian (-EB) or little-endian (-EL) output. 474 475 The following options are available when as is configured for the ARM 476processor family. 477 478`-mcpu=PROCESSOR[+EXTENSION...]' 479 Specify which ARM processor variant is the target. 480 481`-march=ARCHITECTURE[+EXTENSION...]' 482 Specify which ARM architecture variant is used by the target. 483 484`-mfpu=FLOATING-POINT-FORMAT' 485 Select which Floating Point architecture is the target. 486 487`-mfloat-abi=ABI' 488 Select which floating point ABI is in use. 489 490`-mthumb' 491 Enable Thumb only instruction decoding. 492 493`-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant' 494 Select which procedure calling convention is in use. 495 496`-EB | -EL' 497 Select either big-endian (-EB) or little-endian (-EL) output. 498 499`-mthumb-interwork' 500 Specify that the code has been generated with interworking between 501 Thumb and ARM code in mind. 502 503`-k' 504 Specify that PIC code has been generated. 505 506 The following options are available when as is configured for the 507Blackfin processor family. 508 509`-mcpu=PROCESSOR[-SIREVISION]' 510 This option specifies the target processor. The optional 511 SIREVISION is not used in assembler. 512 513`-mfdpic' 514 Assemble for the FDPIC ABI. 515 516`-mno-fdpic' 517`-mnopic' 518 Disable -mfdpic. 519 520 See the info pages for documentation of the CRIS-specific options. 521 522 The following options are available when as is configured for a D10V 523processor. 524`-O' 525 Optimize output by parallelizing instructions. 526 527 The following options are available when as is configured for a D30V 528processor. 529`-O' 530 Optimize output by parallelizing instructions. 531 532`-n' 533 Warn when nops are generated. 534 535`-N' 536 Warn when a nop after a 32-bit multiply instruction is generated. 537 538 The following options are available when as is configured for the 539Intel 80960 processor. 540 541`-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC' 542 Specify which variant of the 960 architecture is the target. 543 544`-b' 545 Add code to collect statistics about branches taken. 546 547`-no-relax' 548 Do not alter compare-and-branch instructions for long 549 displacements; error if necessary. 550 551 552 The following options are available when as is configured for the 553Ubicom IP2K series. 554 555`-mip2022ext' 556 Specifies that the extended IP2022 instructions are allowed. 557 558`-mip2022' 559 Restores the default behaviour, which restricts the permitted 560 instructions to just the basic IP2022 ones. 561 562 563 The following options are available when as is configured for the 564Renesas M32C and M16C processors. 565 566`-m32c' 567 Assemble M32C instructions. 568 569`-m16c' 570 Assemble M16C instructions (the default). 571 572`-relax' 573 Enable support for link-time relaxations. 574 575`-h-tick-hex' 576 Support H'00 style hex constants in addition to 0x00 style. 577 578 579 The following options are available when as is configured for the 580Renesas M32R (formerly Mitsubishi M32R) series. 581 582`--m32rx' 583 Specify which processor in the M32R family is the target. The 584 default is normally the M32R, but this option changes it to the 585 M32RX. 586 587`--warn-explicit-parallel-conflicts or --Wp' 588 Produce warning messages when questionable parallel constructs are 589 encountered. 590 591`--no-warn-explicit-parallel-conflicts or --Wnp' 592 Do not produce warning messages when questionable parallel 593 constructs are encountered. 594 595 596 The following options are available when as is configured for the 597Motorola 68000 series. 598 599`-l' 600 Shorten references to undefined symbols, to one word instead of 601 two. 602 603`-m68000 | -m68008 | -m68010 | -m68020 | -m68030' 604`| -m68040 | -m68060 | -m68302 | -m68331 | -m68332' 605`| -m68333 | -m68340 | -mcpu32 | -m5200' 606 Specify what processor in the 68000 family is the target. The 607 default is normally the 68020, but this can be changed at 608 configuration time. 609 610`-m68881 | -m68882 | -mno-68881 | -mno-68882' 611 The target machine does (or does not) have a floating-point 612 coprocessor. The default is to assume a coprocessor for 68020, 613 68030, and cpu32. Although the basic 68000 is not compatible with 614 the 68881, a combination of the two can be specified, since it's 615 possible to do emulation of the coprocessor instructions with the 616 main processor. 617 618`-m68851 | -mno-68851' 619 The target machine does (or does not) have a memory-management 620 unit coprocessor. The default is to assume an MMU for 68020 and 621 up. 622 623 624 For details about the PDP-11 machine dependent features options, see 625*Note PDP-11-Options::. 626 627`-mpic | -mno-pic' 628 Generate position-independent (or position-dependent) code. The 629 default is `-mpic'. 630 631`-mall' 632`-mall-extensions' 633 Enable all instruction set extensions. This is the default. 634 635`-mno-extensions' 636 Disable all instruction set extensions. 637 638`-mEXTENSION | -mno-EXTENSION' 639 Enable (or disable) a particular instruction set extension. 640 641`-mCPU' 642 Enable the instruction set extensions supported by a particular 643 CPU, and disable all other extensions. 644 645`-mMACHINE' 646 Enable the instruction set extensions supported by a particular 647 machine model, and disable all other extensions. 648 649 The following options are available when as is configured for a 650picoJava processor. 651 652`-mb' 653 Generate "big endian" format output. 654 655`-ml' 656 Generate "little endian" format output. 657 658 659 The following options are available when as is configured for the 660Motorola 68HC11 or 68HC12 series. 661 662`-m68hc11 | -m68hc12 | -m68hcs12' 663 Specify what processor is the target. The default is defined by 664 the configuration option when building the assembler. 665 666`-mshort' 667 Specify to use the 16-bit integer ABI. 668 669`-mlong' 670 Specify to use the 32-bit integer ABI. 671 672`-mshort-double' 673 Specify to use the 32-bit double ABI. 674 675`-mlong-double' 676 Specify to use the 64-bit double ABI. 677 678`--force-long-branches' 679 Relative branches are turned into absolute ones. This concerns 680 conditional branches, unconditional branches and branches to a sub 681 routine. 682 683`-S | --short-branches' 684 Do not turn relative branches into absolute ones when the offset 685 is out of range. 686 687`--strict-direct-mode' 688 Do not turn the direct addressing mode into extended addressing 689 mode when the instruction does not support direct addressing mode. 690 691`--print-insn-syntax' 692 Print the syntax of instruction in case of error. 693 694`--print-opcodes' 695 print the list of instructions with syntax and then exit. 696 697`--generate-example' 698 print an example of instruction for each possible instruction and 699 then exit. This option is only useful for testing `as'. 700 701 702 The following options are available when `as' is configured for the 703SPARC architecture: 704 705`-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite' 706`-Av8plus | -Av8plusa | -Av9 | -Av9a' 707 Explicitly select a variant of the SPARC architecture. 708 709 `-Av8plus' and `-Av8plusa' select a 32 bit environment. `-Av9' 710 and `-Av9a' select a 64 bit environment. 711 712 `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with 713 UltraSPARC extensions. 714 715`-xarch=v8plus | -xarch=v8plusa' 716 For compatibility with the Solaris v9 assembler. These options are 717 equivalent to -Av8plus and -Av8plusa, respectively. 718 719`-bump' 720 Warn when the assembler switches to another architecture. 721 722 The following options are available when as is configured for the 723'c54x architecture. 724 725`-mfar-mode' 726 Enable extended addressing mode. All addresses and relocations 727 will assume extended addressing (usually 23 bits). 728 729`-mcpu=CPU_VERSION' 730 Sets the CPU version being compiled for. 731 732`-merrors-to-file FILENAME' 733 Redirect error output to a file, for broken systems which don't 734 support such behaviour in the shell. 735 736 The following options are available when as is configured for a MIPS 737processor. 738 739`-G NUM' 740 This option sets the largest size of an object that can be 741 referenced implicitly with the `gp' register. It is only accepted 742 for targets that use ECOFF format, such as a DECstation running 743 Ultrix. The default value is 8. 744 745`-EB' 746 Generate "big endian" format output. 747 748`-EL' 749 Generate "little endian" format output. 750 751`-mips1' 752`-mips2' 753`-mips3' 754`-mips4' 755`-mips5' 756`-mips32' 757`-mips32r2' 758`-mips64' 759`-mips64r2' 760 Generate code for a particular MIPS Instruction Set Architecture 761 level. `-mips1' is an alias for `-march=r3000', `-mips2' is an 762 alias for `-march=r6000', `-mips3' is an alias for `-march=r4000' 763 and `-mips4' is an alias for `-march=r8000'. `-mips5', `-mips32', 764 `-mips32r2', `-mips64', and `-mips64r2' correspond to generic 765 `MIPS V', `MIPS32', `MIPS32 Release 2', `MIPS64', and `MIPS64 766 Release 2' ISA processors, respectively. 767 768`-march=CPU' 769 Generate code for a particular MIPS cpu. 770 771`-mtune=CPU' 772 Schedule and tune for a particular MIPS cpu. 773 774`-mfix7000' 775`-mno-fix7000' 776 Cause nops to be inserted if the read of the destination register 777 of an mfhi or mflo instruction occurs in the following two 778 instructions. 779 780`-mdebug' 781`-no-mdebug' 782 Cause stabs-style debugging output to go into an ECOFF-style 783 .mdebug section instead of the standard ELF .stabs sections. 784 785`-mpdr' 786`-mno-pdr' 787 Control generation of `.pdr' sections. 788 789`-mgp32' 790`-mfp32' 791 The register sizes are normally inferred from the ISA and ABI, but 792 these flags force a certain group of registers to be treated as 32 793 bits wide at all times. `-mgp32' controls the size of 794 general-purpose registers and `-mfp32' controls the size of 795 floating-point registers. 796 797`-mips16' 798`-no-mips16' 799 Generate code for the MIPS 16 processor. This is equivalent to 800 putting `.set mips16' at the start of the assembly file. 801 `-no-mips16' turns off this option. 802 803`-msmartmips' 804`-mno-smartmips' 805 Enables the SmartMIPS extension to the MIPS32 instruction set. 806 This is equivalent to putting `.set smartmips' at the start of the 807 assembly file. `-mno-smartmips' turns off this option. 808 809`-mips3d' 810`-no-mips3d' 811 Generate code for the MIPS-3D Application Specific Extension. 812 This tells the assembler to accept MIPS-3D instructions. 813 `-no-mips3d' turns off this option. 814 815`-mdmx' 816`-no-mdmx' 817 Generate code for the MDMX Application Specific Extension. This 818 tells the assembler to accept MDMX instructions. `-no-mdmx' turns 819 off this option. 820 821`-mdsp' 822`-mno-dsp' 823 Generate code for the DSP Release 1 Application Specific Extension. 824 This tells the assembler to accept DSP Release 1 instructions. 825 `-mno-dsp' turns off this option. 826 827`-mdspr2' 828`-mno-dspr2' 829 Generate code for the DSP Release 2 Application Specific Extension. 830 This option implies -mdsp. This tells the assembler to accept DSP 831 Release 2 instructions. `-mno-dspr2' turns off this option. 832 833`-mmt' 834`-mno-mt' 835 Generate code for the MT Application Specific Extension. This 836 tells the assembler to accept MT instructions. `-mno-mt' turns 837 off this option. 838 839`--construct-floats' 840`--no-construct-floats' 841 The `--no-construct-floats' option disables the construction of 842 double width floating point constants by loading the two halves of 843 the value into the two single width floating point registers that 844 make up the double width register. By default 845 `--construct-floats' is selected, allowing construction of these 846 floating point constants. 847 848`--emulation=NAME' 849 This option causes `as' to emulate `as' configured for some other 850 target, in all respects, including output format (choosing between 851 ELF and ECOFF only), handling of pseudo-opcodes which may generate 852 debugging information or store symbol table information, and 853 default endianness. The available configuration names are: 854 `mipsecoff', `mipself', `mipslecoff', `mipsbecoff', `mipslelf', 855 `mipsbelf'. The first two do not alter the default endianness 856 from that of the primary target for which the assembler was 857 configured; the others change the default to little- or big-endian 858 as indicated by the `b' or `l' in the name. Using `-EB' or `-EL' 859 will override the endianness selection in any case. 860 861 This option is currently supported only when the primary target 862 `as' is configured for is a MIPS ELF or ECOFF target. 863 Furthermore, the primary target or others specified with 864 `--enable-targets=...' at configuration time must include support 865 for the other format, if both are to be available. For example, 866 the Irix 5 configuration includes support for both. 867 868 Eventually, this option will support more configurations, with more 869 fine-grained control over the assembler's behavior, and will be 870 supported for more processors. 871 872`-nocpp' 873 `as' ignores this option. It is accepted for compatibility with 874 the native tools. 875 876`--trap' 877`--no-trap' 878`--break' 879`--no-break' 880 Control how to deal with multiplication overflow and division by 881 zero. `--trap' or `--no-break' (which are synonyms) take a trap 882 exception (and only work for Instruction Set Architecture level 2 883 and higher); `--break' or `--no-trap' (also synonyms, and the 884 default) take a break exception. 885 886`-n' 887 When this option is used, `as' will issue a warning every time it 888 generates a nop instruction from a macro. 889 890 The following options are available when as is configured for an 891MCore processor. 892 893`-jsri2bsr' 894`-nojsri2bsr' 895 Enable or disable the JSRI to BSR transformation. By default this 896 is enabled. The command line option `-nojsri2bsr' can be used to 897 disable it. 898 899`-sifilter' 900`-nosifilter' 901 Enable or disable the silicon filter behaviour. By default this 902 is disabled. The default can be overridden by the `-sifilter' 903 command line option. 904 905`-relax' 906 Alter jump instructions for long displacements. 907 908`-mcpu=[210|340]' 909 Select the cpu type on the target hardware. This controls which 910 instructions can be assembled. 911 912`-EB' 913 Assemble for a big endian target. 914 915`-EL' 916 Assemble for a little endian target. 917 918 919 See the info pages for documentation of the MMIX-specific options. 920 921 See the info pages for documentation of the RX-specific options. 922 923 The following options are available when as is configured for the 924s390 processor family. 925 926`-m31' 927`-m64' 928 Select the word size, either 31/32 bits or 64 bits. 929 930`-mesa' 931 932`-mzarch' 933 Select the architecture mode, either the Enterprise System 934 Architecture (esa) or the z/Architecture mode (zarch). 935 936`-march=PROCESSOR' 937 Specify which s390 processor variant is the target, `g6', `g6', 938 `z900', `z990', `z9-109', `z9-ec', or `z10'. 939 940`-mregnames' 941`-mno-regnames' 942 Allow or disallow symbolic names for registers. 943 944`-mwarn-areg-zero' 945 Warn whenever the operand for a base or index register has been 946 specified but evaluates to zero. 947 948 The following options are available when as is configured for a 949TMS320C6000 processor. 950 951`-march=ARCH' 952 Enable (only) instructions from architecture ARCH. By default, 953 all instructions are permitted. 954 955 The following values of ARCH are accepted: `c62x', `c64x', 956 `c64x+', `c67x', `c67x+', `c674x'. 957 958`-matomic' 959`-mno-atomic' 960 Enable or disable the optional C64x+ atomic operation instructions. 961 By default, they are enabled if no `-march' option is given, or if 962 an architecture is specified with `-march' that implies these 963 instructions are present (currently, there are no such 964 architectures); they are disabled if an architecture is specified 965 with `-march' on which the instructions are optional or not 966 present. This option overrides such a default from the 967 architecture, independent of the order in which the `-march' or 968 `-matomic' or `-mno-atomic' options are passed. 969 970`-mdsbt' 971`-mno-dsbt' 972 The `-mdsbt' option causes the assembler to generate the 973 `Tag_ABI_DSBT' attribute with a value of 1, indicating that the 974 code is using DSBT addressing. The `-mno-dsbt' option, the 975 default, causes the tag to have a value of 0, indicating that the 976 code does not use DSBT addressing. The linker will emit a warning 977 if objects of different type (DSBT and non-DSBT) are linked 978 together. 979 980`-mpid=no' 981`-mpid=near' 982`-mpid=far' 983 The `-mpid=' option causes the assembler to generate the 984 `Tag_ABI_PID' attribute with a value indicating the form of data 985 addressing used by the code. `-mpid=no', the default, indicates 986 position-dependent data addressing, `-mpid=near' indicates 987 position-independent addressing with GOT accesses using near DP 988 addressing, and `-mpid=far' indicates position-independent 989 addressing with GOT accesses using far DP addressing. The linker 990 will emit a warning if objects built with different settings of 991 this option are linked together. 992 993`-mpic' 994`-mno-pic' 995 The `-mpic' option causes the assembler to generate the 996 `Tag_ABI_PIC' attribute with a value of 1, indicating that the 997 code is using position-independent code addressing, The 998 `-mno-pic' option, the default, causes the tag to have a value of 999 0, indicating position-dependent code addressing. The linker will 1000 emit a warning if objects of different type (position-dependent and 1001 position-independent) are linked together. 1002 1003`-mbig-endian' 1004`-mlittle-endian' 1005 Generate code for the specified endianness. The default is 1006 little-endian. 1007 1008 The following options are available when as is configured for an 1009Xtensa processor. 1010 1011`--text-section-literals | --no-text-section-literals' 1012 With `--text-section-literals', literal pools are interspersed in 1013 the text section. The default is `--no-text-section-literals', 1014 which places literals in a separate section in the output file. 1015 These options only affect literals referenced via PC-relative 1016 `L32R' instructions; literals for absolute mode `L32R' 1017 instructions are handled separately. 1018 1019`--absolute-literals | --no-absolute-literals' 1020 Indicate to the assembler whether `L32R' instructions use absolute 1021 or PC-relative addressing. The default is to assume absolute 1022 addressing if the Xtensa processor includes the absolute `L32R' 1023 addressing option. Otherwise, only the PC-relative `L32R' mode 1024 can be used. 1025 1026`--target-align | --no-target-align' 1027 Enable or disable automatic alignment to reduce branch penalties 1028 at the expense of some code density. The default is 1029 `--target-align'. 1030 1031`--longcalls | --no-longcalls' 1032 Enable or disable transformation of call instructions to allow 1033 calls across a greater range of addresses. The default is 1034 `--no-longcalls'. 1035 1036`--transform | --no-transform' 1037 Enable or disable all assembler transformations of Xtensa 1038 instructions. The default is `--transform'; `--no-transform' 1039 should be used only in the rare cases when the instructions must 1040 be exactly as specified in the assembly source. 1041 1042`--rename-section OLDNAME=NEWNAME' 1043 When generating output sections, rename the OLDNAME section to 1044 NEWNAME. 1045 1046 The following options are available when as is configured for a Z80 1047family processor. 1048`-z80' 1049 Assemble for Z80 processor. 1050 1051`-r800' 1052 Assemble for R800 processor. 1053 1054`-ignore-undocumented-instructions' 1055`-Wnud' 1056 Assemble undocumented Z80 instructions that also work on R800 1057 without warning. 1058 1059`-ignore-unportable-instructions' 1060`-Wnup' 1061 Assemble all undocumented Z80 instructions without warning. 1062 1063`-warn-undocumented-instructions' 1064`-Wud' 1065 Issue a warning for undocumented Z80 instructions that also work 1066 on R800. 1067 1068`-warn-unportable-instructions' 1069`-Wup' 1070 Issue a warning for undocumented Z80 instructions that do not work 1071 on R800. 1072 1073`-forbid-undocumented-instructions' 1074`-Fud' 1075 Treat all undocumented instructions as errors. 1076 1077`-forbid-unportable-instructions' 1078`-Fup' 1079 Treat undocumented Z80 instructions that do not work on R800 as 1080 errors. 1081 1082* Menu: 1083 1084* Manual:: Structure of this Manual 1085* GNU Assembler:: The GNU Assembler 1086* Object Formats:: Object File Formats 1087* Command Line:: Command Line 1088* Input Files:: Input Files 1089* Object:: Output (Object) File 1090* Errors:: Error and Warning Messages 1091 1092 1093File: as.info, Node: Manual, Next: GNU Assembler, Up: Overview 1094 10951.1 Structure of this Manual 1096============================ 1097 1098This manual is intended to describe what you need to know to use GNU 1099`as'. We cover the syntax expected in source files, including notation 1100for symbols, constants, and expressions; the directives that `as' 1101understands; and of course how to invoke `as'. 1102 1103 This manual also describes some of the machine-dependent features of 1104various flavors of the assembler. 1105 1106 On the other hand, this manual is _not_ intended as an introduction 1107to programming in assembly language--let alone programming in general! 1108In a similar vein, we make no attempt to introduce the machine 1109architecture; we do _not_ describe the instruction set, standard 1110mnemonics, registers or addressing modes that are standard to a 1111particular architecture. You may want to consult the manufacturer's 1112machine architecture manual for this information. 1113 1114 1115File: as.info, Node: GNU Assembler, Next: Object Formats, Prev: Manual, Up: Overview 1116 11171.2 The GNU Assembler 1118===================== 1119 1120GNU `as' is really a family of assemblers. If you use (or have used) 1121the GNU assembler on one architecture, you should find a fairly similar 1122environment when you use it on another architecture. Each version has 1123much in common with the others, including object file formats, most 1124assembler directives (often called "pseudo-ops") and assembler syntax. 1125 1126 `as' is primarily intended to assemble the output of the GNU C 1127compiler `gcc' for use by the linker `ld'. Nevertheless, we've tried 1128to make `as' assemble correctly everything that other assemblers for 1129the same machine would assemble. Any exceptions are documented 1130explicitly (*note Machine Dependencies::). This doesn't mean `as' 1131always uses the same syntax as another assembler for the same 1132architecture; for example, we know of several incompatible versions of 1133680x0 assembly language syntax. 1134 1135 Unlike older assemblers, `as' is designed to assemble a source 1136program in one pass of the source file. This has a subtle impact on the 1137`.org' directive (*note `.org': Org.). 1138 1139 1140File: as.info, Node: Object Formats, Next: Command Line, Prev: GNU Assembler, Up: Overview 1141 11421.3 Object File Formats 1143======================= 1144 1145The GNU assembler can be configured to produce several alternative 1146object file formats. For the most part, this does not affect how you 1147write assembly language programs; but directives for debugging symbols 1148are typically different in different file formats. *Note Symbol 1149Attributes: Symbol Attributes. 1150 1151 1152File: as.info, Node: Command Line, Next: Input Files, Prev: Object Formats, Up: Overview 1153 11541.4 Command Line 1155================ 1156 1157After the program name `as', the command line may contain options and 1158file names. Options may appear in any order, and may be before, after, 1159or between file names. The order of file names is significant. 1160 1161 `--' (two hyphens) by itself names the standard input file 1162explicitly, as one of the files for `as' to assemble. 1163 1164 Except for `--' any command line argument that begins with a hyphen 1165(`-') is an option. Each option changes the behavior of `as'. No 1166option changes the way another option works. An option is a `-' 1167followed by one or more letters; the case of the letter is important. 1168All options are optional. 1169 1170 Some options expect exactly one file name to follow them. The file 1171name may either immediately follow the option's letter (compatible with 1172older assemblers) or it may be the next command argument (GNU 1173standard). These two command lines are equivalent: 1174 1175 as -o my-object-file.o mumble.s 1176 as -omy-object-file.o mumble.s 1177 1178 1179File: as.info, Node: Input Files, Next: Object, Prev: Command Line, Up: Overview 1180 11811.5 Input Files 1182=============== 1183 1184We use the phrase "source program", abbreviated "source", to describe 1185the program input to one run of `as'. The program may be in one or 1186more files; how the source is partitioned into files doesn't change the 1187meaning of the source. 1188 1189 The source program is a concatenation of the text in all the files, 1190in the order specified. 1191 1192 Each time you run `as' it assembles exactly one source program. The 1193source program is made up of one or more files. (The standard input is 1194also a file.) 1195 1196 You give `as' a command line that has zero or more input file names. 1197The input files are read (from left file name to right). A command 1198line argument (in any position) that has no special meaning is taken to 1199be an input file name. 1200 1201 If you give `as' no file names it attempts to read one input file 1202from the `as' standard input, which is normally your terminal. You may 1203have to type <ctl-D> to tell `as' there is no more program to assemble. 1204 1205 Use `--' if you need to explicitly name the standard input file in 1206your command line. 1207 1208 If the source is empty, `as' produces a small, empty object file. 1209 1210Filenames and Line-numbers 1211-------------------------- 1212 1213There are two ways of locating a line in the input file (or files) and 1214either may be used in reporting error messages. One way refers to a 1215line number in a physical file; the other refers to a line number in a 1216"logical" file. *Note Error and Warning Messages: Errors. 1217 1218 "Physical files" are those files named in the command line given to 1219`as'. 1220 1221 "Logical files" are simply names declared explicitly by assembler 1222directives; they bear no relation to physical files. Logical file 1223names help error messages reflect the original source file, when `as' 1224source is itself synthesized from other files. `as' understands the 1225`#' directives emitted by the `gcc' preprocessor. See also *Note 1226`.file': File. 1227 1228 1229File: as.info, Node: Object, Next: Errors, Prev: Input Files, Up: Overview 1230 12311.6 Output (Object) File 1232======================== 1233 1234Every time you run `as' it produces an output file, which is your 1235assembly language program translated into numbers. This file is the 1236object file. Its default name is `a.out'. You can give it another 1237name by using the `-o' option. Conventionally, object file names end 1238with `.o'. The default name is used for historical reasons: older 1239assemblers were capable of assembling self-contained programs directly 1240into a runnable program. (For some formats, this isn't currently 1241possible, but it can be done for the `a.out' format.) 1242 1243 The object file is meant for input to the linker `ld'. It contains 1244assembled program code, information to help `ld' integrate the 1245assembled program into a runnable file, and (optionally) symbolic 1246information for the debugger. 1247 1248 1249File: as.info, Node: Errors, Prev: Object, Up: Overview 1250 12511.7 Error and Warning Messages 1252============================== 1253 1254`as' may write warnings and error messages to the standard error file 1255(usually your terminal). This should not happen when a compiler runs 1256`as' automatically. Warnings report an assumption made so that `as' 1257could keep assembling a flawed program; errors report a grave problem 1258that stops the assembly. 1259 1260 Warning messages have the format 1261 1262 file_name:NNN:Warning Message Text 1263 1264(where NNN is a line number). If a logical file name has been given 1265(*note `.file': File.) it is used for the filename, otherwise the name 1266of the current input file is used. If a logical line number was given 1267(*note `.line': Line.) then it is used to calculate the number printed, 1268otherwise the actual line in the current source file is printed. The 1269message text is intended to be self explanatory (in the grand Unix 1270tradition). 1271 1272 Error messages have the format 1273 file_name:NNN:FATAL:Error Message Text 1274 The file name and line number are derived as for warning messages. 1275The actual message text may be rather less explanatory because many of 1276them aren't supposed to happen. 1277 1278 1279File: as.info, Node: Invoking, Next: Syntax, Prev: Overview, Up: Top 1280 12812 Command-Line Options 1282********************** 1283 1284This chapter describes command-line options available in _all_ versions 1285of the GNU assembler; see *Note Machine Dependencies::, for options 1286specific to particular machine architectures. 1287 1288 If you are invoking `as' via the GNU C compiler, you can use the 1289`-Wa' option to pass arguments through to the assembler. The assembler 1290arguments must be separated from each other (and the `-Wa') by commas. 1291For example: 1292 1293 gcc -c -g -O -Wa,-alh,-L file.c 1294 1295This passes two options to the assembler: `-alh' (emit a listing to 1296standard output with high-level and assembly source) and `-L' (retain 1297local symbols in the symbol table). 1298 1299 Usually you do not need to use this `-Wa' mechanism, since many 1300compiler command-line options are automatically passed to the assembler 1301by the compiler. (You can call the GNU compiler driver with the `-v' 1302option to see precisely what options it passes to each compilation 1303pass, including the assembler.) 1304 1305* Menu: 1306 1307* a:: -a[cdghlns] enable listings 1308* alternate:: --alternate enable alternate macro syntax 1309* D:: -D for compatibility 1310* f:: -f to work faster 1311* I:: -I for .include search path 1312 1313* K:: -K for difference tables 1314 1315* L:: -L to retain local symbols 1316* listing:: --listing-XXX to configure listing output 1317* M:: -M or --mri to assemble in MRI compatibility mode 1318* MD:: --MD for dependency tracking 1319* o:: -o to name the object file 1320* R:: -R to join data and text sections 1321* statistics:: --statistics to see statistics about assembly 1322* traditional-format:: --traditional-format for compatible output 1323* v:: -v to announce version 1324* W:: -W, --no-warn, --warn, --fatal-warnings to control warnings 1325* Z:: -Z to make object file even after errors 1326 1327 1328File: as.info, Node: a, Next: alternate, Up: Invoking 1329 13302.1 Enable Listings: `-a[cdghlns]' 1331================================== 1332 1333These options enable listing output from the assembler. By itself, 1334`-a' requests high-level, assembly, and symbols listing. You can use 1335other letters to select specific options for the list: `-ah' requests a 1336high-level language listing, `-al' requests an output-program assembly 1337listing, and `-as' requests a symbol table listing. High-level 1338listings require that a compiler debugging option like `-g' be used, 1339and that assembly listings (`-al') be requested also. 1340 1341 Use the `-ag' option to print a first section with general assembly 1342information, like as version, switches passed, or time stamp. 1343 1344 Use the `-ac' option to omit false conditionals from a listing. Any 1345lines which are not assembled because of a false `.if' (or `.ifdef', or 1346any other conditional), or a true `.if' followed by an `.else', will be 1347omitted from the listing. 1348 1349 Use the `-ad' option to omit debugging directives from the listing. 1350 1351 Once you have specified one of these options, you can further control 1352listing output and its appearance using the directives `.list', 1353`.nolist', `.psize', `.eject', `.title', and `.sbttl'. The `-an' 1354option turns off all forms processing. If you do not request listing 1355output with one of the `-a' options, the listing-control directives 1356have no effect. 1357 1358 The letters after `-a' may be combined into one option, _e.g._, 1359`-aln'. 1360 1361 Note if the assembler source is coming from the standard input (e.g., 1362because it is being created by `gcc' and the `-pipe' command line switch 1363is being used) then the listing will not contain any comments or 1364preprocessor directives. This is because the listing code buffers 1365input source lines from stdin only after they have been preprocessed by 1366the assembler. This reduces memory usage and makes the code more 1367efficient. 1368 1369 1370File: as.info, Node: alternate, Next: D, Prev: a, Up: Invoking 1371 13722.2 `--alternate' 1373================= 1374 1375Begin in alternate macro mode, see *Note `.altmacro': Altmacro. 1376 1377 1378File: as.info, Node: D, Next: f, Prev: alternate, Up: Invoking 1379 13802.3 `-D' 1381======== 1382 1383This option has no effect whatsoever, but it is accepted to make it more 1384likely that scripts written for other assemblers also work with `as'. 1385 1386 1387File: as.info, Node: f, Next: I, Prev: D, Up: Invoking 1388 13892.4 Work Faster: `-f' 1390===================== 1391 1392`-f' should only be used when assembling programs written by a 1393(trusted) compiler. `-f' stops the assembler from doing whitespace and 1394comment preprocessing on the input file(s) before assembling them. 1395*Note Preprocessing: Preprocessing. 1396 1397 _Warning:_ if you use `-f' when the files actually need to be 1398 preprocessed (if they contain comments, for example), `as' does 1399 not work correctly. 1400 1401 1402File: as.info, Node: I, Next: K, Prev: f, Up: Invoking 1403 14042.5 `.include' Search Path: `-I' PATH 1405===================================== 1406 1407Use this option to add a PATH to the list of directories `as' searches 1408for files specified in `.include' directives (*note `.include': 1409Include.). You may use `-I' as many times as necessary to include a 1410variety of paths. The current working directory is always searched 1411first; after that, `as' searches any `-I' directories in the same order 1412as they were specified (left to right) on the command line. 1413 1414 1415File: as.info, Node: K, Next: L, Prev: I, Up: Invoking 1416 14172.6 Difference Tables: `-K' 1418=========================== 1419 1420`as' sometimes alters the code emitted for directives of the form 1421`.word SYM1-SYM2'. *Note `.word': Word. You can use the `-K' option 1422if you want a warning issued when this is done. 1423 1424 1425File: as.info, Node: L, Next: listing, Prev: K, Up: Invoking 1426 14272.7 Include Local Symbols: `-L' 1428=============================== 1429 1430Symbols beginning with system-specific local label prefixes, typically 1431`.L' for ELF systems or `L' for traditional a.out systems, are called 1432"local symbols". *Note Symbol Names::. Normally you do not see such 1433symbols when debugging, because they are intended for the use of 1434programs (like compilers) that compose assembler programs, not for your 1435notice. Normally both `as' and `ld' discard such symbols, so you do 1436not normally debug with them. 1437 1438 This option tells `as' to retain those local symbols in the object 1439file. Usually if you do this you also tell the linker `ld' to preserve 1440those symbols. 1441 1442 1443File: as.info, Node: listing, Next: M, Prev: L, Up: Invoking 1444 14452.8 Configuring listing output: `--listing' 1446=========================================== 1447 1448The listing feature of the assembler can be enabled via the command 1449line switch `-a' (*note a::). This feature combines the input source 1450file(s) with a hex dump of the corresponding locations in the output 1451object file, and displays them as a listing file. The format of this 1452listing can be controlled by directives inside the assembler source 1453(i.e., `.list' (*note List::), `.title' (*note Title::), `.sbttl' 1454(*note Sbttl::), `.psize' (*note Psize::), and `.eject' (*note Eject::) 1455and also by the following switches: 1456 1457`--listing-lhs-width=`number'' 1458 Sets the maximum width, in words, of the first line of the hex 1459 byte dump. This dump appears on the left hand side of the listing 1460 output. 1461 1462`--listing-lhs-width2=`number'' 1463 Sets the maximum width, in words, of any further lines of the hex 1464 byte dump for a given input source line. If this value is not 1465 specified, it defaults to being the same as the value specified 1466 for `--listing-lhs-width'. If neither switch is used the default 1467 is to one. 1468 1469`--listing-rhs-width=`number'' 1470 Sets the maximum width, in characters, of the source line that is 1471 displayed alongside the hex dump. The default value for this 1472 parameter is 100. The source line is displayed on the right hand 1473 side of the listing output. 1474 1475`--listing-cont-lines=`number'' 1476 Sets the maximum number of continuation lines of hex dump that 1477 will be displayed for a given single line of source input. The 1478 default value is 4. 1479 1480 1481File: as.info, Node: M, Next: MD, Prev: listing, Up: Invoking 1482 14832.9 Assemble in MRI Compatibility Mode: `-M' 1484============================================ 1485 1486The `-M' or `--mri' option selects MRI compatibility mode. This 1487changes the syntax and pseudo-op handling of `as' to make it compatible 1488with the `ASM68K' or the `ASM960' (depending upon the configured 1489target) assembler from Microtec Research. The exact nature of the MRI 1490syntax will not be documented here; see the MRI manuals for more 1491information. Note in particular that the handling of macros and macro 1492arguments is somewhat different. The purpose of this option is to 1493permit assembling existing MRI assembler code using `as'. 1494 1495 The MRI compatibility is not complete. Certain operations of the 1496MRI assembler depend upon its object file format, and can not be 1497supported using other object file formats. Supporting these would 1498require enhancing each object file format individually. These are: 1499 1500 * global symbols in common section 1501 1502 The m68k MRI assembler supports common sections which are merged 1503 by the linker. Other object file formats do not support this. 1504 `as' handles common sections by treating them as a single common 1505 symbol. It permits local symbols to be defined within a common 1506 section, but it can not support global symbols, since it has no 1507 way to describe them. 1508 1509 * complex relocations 1510 1511 The MRI assemblers support relocations against a negated section 1512 address, and relocations which combine the start addresses of two 1513 or more sections. These are not support by other object file 1514 formats. 1515 1516 * `END' pseudo-op specifying start address 1517 1518 The MRI `END' pseudo-op permits the specification of a start 1519 address. This is not supported by other object file formats. The 1520 start address may instead be specified using the `-e' option to 1521 the linker, or in a linker script. 1522 1523 * `IDNT', `.ident' and `NAME' pseudo-ops 1524 1525 The MRI `IDNT', `.ident' and `NAME' pseudo-ops assign a module 1526 name to the output file. This is not supported by other object 1527 file formats. 1528 1529 * `ORG' pseudo-op 1530 1531 The m68k MRI `ORG' pseudo-op begins an absolute section at a given 1532 address. This differs from the usual `as' `.org' pseudo-op, which 1533 changes the location within the current section. Absolute 1534 sections are not supported by other object file formats. The 1535 address of a section may be assigned within a linker script. 1536 1537 There are some other features of the MRI assembler which are not 1538supported by `as', typically either because they are difficult or 1539because they seem of little consequence. Some of these may be 1540supported in future releases. 1541 1542 * EBCDIC strings 1543 1544 EBCDIC strings are not supported. 1545 1546 * packed binary coded decimal 1547 1548 Packed binary coded decimal is not supported. This means that the 1549 `DC.P' and `DCB.P' pseudo-ops are not supported. 1550 1551 * `FEQU' pseudo-op 1552 1553 The m68k `FEQU' pseudo-op is not supported. 1554 1555 * `NOOBJ' pseudo-op 1556 1557 The m68k `NOOBJ' pseudo-op is not supported. 1558 1559 * `OPT' branch control options 1560 1561 The m68k `OPT' branch control options--`B', `BRS', `BRB', `BRL', 1562 and `BRW'--are ignored. `as' automatically relaxes all branches, 1563 whether forward or backward, to an appropriate size, so these 1564 options serve no purpose. 1565 1566 * `OPT' list control options 1567 1568 The following m68k `OPT' list control options are ignored: `C', 1569 `CEX', `CL', `CRE', `E', `G', `I', `M', `MEX', `MC', `MD', `X'. 1570 1571 * other `OPT' options 1572 1573 The following m68k `OPT' options are ignored: `NEST', `O', `OLD', 1574 `OP', `P', `PCO', `PCR', `PCS', `R'. 1575 1576 * `OPT' `D' option is default 1577 1578 The m68k `OPT' `D' option is the default, unlike the MRI assembler. 1579 `OPT NOD' may be used to turn it off. 1580 1581 * `XREF' pseudo-op. 1582 1583 The m68k `XREF' pseudo-op is ignored. 1584 1585 * `.debug' pseudo-op 1586 1587 The i960 `.debug' pseudo-op is not supported. 1588 1589 * `.extended' pseudo-op 1590 1591 The i960 `.extended' pseudo-op is not supported. 1592 1593 * `.list' pseudo-op. 1594 1595 The various options of the i960 `.list' pseudo-op are not 1596 supported. 1597 1598 * `.optimize' pseudo-op 1599 1600 The i960 `.optimize' pseudo-op is not supported. 1601 1602 * `.output' pseudo-op 1603 1604 The i960 `.output' pseudo-op is not supported. 1605 1606 * `.setreal' pseudo-op 1607 1608 The i960 `.setreal' pseudo-op is not supported. 1609 1610 1611 1612File: as.info, Node: MD, Next: o, Prev: M, Up: Invoking 1613 16142.10 Dependency Tracking: `--MD' 1615================================ 1616 1617`as' can generate a dependency file for the file it creates. This file 1618consists of a single rule suitable for `make' describing the 1619dependencies of the main source file. 1620 1621 The rule is written to the file named in its argument. 1622 1623 This feature is used in the automatic updating of makefiles. 1624 1625 1626File: as.info, Node: o, Next: R, Prev: MD, Up: Invoking 1627 16282.11 Name the Object File: `-o' 1629=============================== 1630 1631There is always one object file output when you run `as'. By default 1632it has the name `a.out' (or `b.out', for Intel 960 targets only). You 1633use this option (which takes exactly one filename) to give the object 1634file a different name. 1635 1636 Whatever the object file is called, `as' overwrites any existing 1637file of the same name. 1638 1639 1640File: as.info, Node: R, Next: statistics, Prev: o, Up: Invoking 1641 16422.12 Join Data and Text Sections: `-R' 1643====================================== 1644 1645`-R' tells `as' to write the object file as if all data-section data 1646lives in the text section. This is only done at the very last moment: 1647your binary data are the same, but data section parts are relocated 1648differently. The data section part of your object file is zero bytes 1649long because all its bytes are appended to the text section. (*Note 1650Sections and Relocation: Sections.) 1651 1652 When you specify `-R' it would be possible to generate shorter 1653address displacements (because we do not have to cross between text and 1654data section). We refrain from doing this simply for compatibility with 1655older versions of `as'. In future, `-R' may work this way. 1656 1657 When `as' is configured for COFF or ELF output, this option is only 1658useful if you use sections named `.text' and `.data'. 1659 1660 `-R' is not supported for any of the HPPA targets. Using `-R' 1661generates a warning from `as'. 1662 1663 1664File: as.info, Node: statistics, Next: traditional-format, Prev: R, Up: Invoking 1665 16662.13 Display Assembly Statistics: `--statistics' 1667================================================ 1668 1669Use `--statistics' to display two statistics about the resources used by 1670`as': the maximum amount of space allocated during the assembly (in 1671bytes), and the total execution time taken for the assembly (in CPU 1672seconds). 1673 1674 1675File: as.info, Node: traditional-format, Next: v, Prev: statistics, Up: Invoking 1676 16772.14 Compatible Output: `--traditional-format' 1678============================================== 1679 1680For some targets, the output of `as' is different in some ways from the 1681output of some existing assembler. This switch requests `as' to use 1682the traditional format instead. 1683 1684 For example, it disables the exception frame optimizations which 1685`as' normally does by default on `gcc' output. 1686 1687 1688File: as.info, Node: v, Next: W, Prev: traditional-format, Up: Invoking 1689 16902.15 Announce Version: `-v' 1691=========================== 1692 1693You can find out what version of as is running by including the option 1694`-v' (which you can also spell as `-version') on the command line. 1695 1696 1697File: as.info, Node: W, Next: Z, Prev: v, Up: Invoking 1698 16992.16 Control Warnings: `-W', `--warn', `--no-warn', `--fatal-warnings' 1700====================================================================== 1701 1702`as' should never give a warning or error message when assembling 1703compiler output. But programs written by people often cause `as' to 1704give a warning that a particular assumption was made. All such 1705warnings are directed to the standard error file. 1706 1707 If you use the `-W' and `--no-warn' options, no warnings are issued. 1708This only affects the warning messages: it does not change any 1709particular of how `as' assembles your file. Errors, which stop the 1710assembly, are still reported. 1711 1712 If you use the `--fatal-warnings' option, `as' considers files that 1713generate warnings to be in error. 1714 1715 You can switch these options off again by specifying `--warn', which 1716causes warnings to be output as usual. 1717 1718 1719File: as.info, Node: Z, Prev: W, Up: Invoking 1720 17212.17 Generate Object File in Spite of Errors: `-Z' 1722================================================== 1723 1724After an error message, `as' normally produces no output. If for some 1725reason you are interested in object file output even after `as' gives 1726an error message on your program, use the `-Z' option. If there are 1727any errors, `as' continues anyways, and writes an object file after a 1728final warning message of the form `N errors, M warnings, generating bad 1729object file.' 1730 1731 1732File: as.info, Node: Syntax, Next: Sections, Prev: Invoking, Up: Top 1733 17343 Syntax 1735******** 1736 1737This chapter describes the machine-independent syntax allowed in a 1738source file. `as' syntax is similar to what many other assemblers use; 1739it is inspired by the BSD 4.2 assembler, except that `as' does not 1740assemble Vax bit-fields. 1741 1742* Menu: 1743 1744* Preprocessing:: Preprocessing 1745* Whitespace:: Whitespace 1746* Comments:: Comments 1747* Symbol Intro:: Symbols 1748* Statements:: Statements 1749* Constants:: Constants 1750 1751 1752File: as.info, Node: Preprocessing, Next: Whitespace, Up: Syntax 1753 17543.1 Preprocessing 1755================= 1756 1757The `as' internal preprocessor: 1758 * adjusts and removes extra whitespace. It leaves one space or tab 1759 before the keywords on a line, and turns any other whitespace on 1760 the line into a single space. 1761 1762 * removes all comments, replacing them with a single space, or an 1763 appropriate number of newlines. 1764 1765 * converts character constants into the appropriate numeric values. 1766 1767 It does not do macro processing, include file handling, or anything 1768else you may get from your C compiler's preprocessor. You can do 1769include file processing with the `.include' directive (*note 1770`.include': Include.). You can use the GNU C compiler driver to get 1771other "CPP" style preprocessing by giving the input file a `.S' suffix. 1772*Note Options Controlling the Kind of Output: (gcc.info)Overall 1773Options. 1774 1775 Excess whitespace, comments, and character constants cannot be used 1776in the portions of the input text that are not preprocessed. 1777 1778 If the first line of an input file is `#NO_APP' or if you use the 1779`-f' option, whitespace and comments are not removed from the input 1780file. Within an input file, you can ask for whitespace and comment 1781removal in specific portions of the by putting a line that says `#APP' 1782before the text that may contain whitespace or comments, and putting a 1783line that says `#NO_APP' after this text. This feature is mainly 1784intend to support `asm' statements in compilers whose output is 1785otherwise free of comments and whitespace. 1786 1787 1788File: as.info, Node: Whitespace, Next: Comments, Prev: Preprocessing, Up: Syntax 1789 17903.2 Whitespace 1791============== 1792 1793"Whitespace" is one or more blanks or tabs, in any order. Whitespace 1794is used to separate symbols, and to make programs neater for people to 1795read. Unless within character constants (*note Character Constants: 1796Characters.), any whitespace means the same as exactly one space. 1797 1798 1799File: as.info, Node: Comments, Next: Symbol Intro, Prev: Whitespace, Up: Syntax 1800 18013.3 Comments 1802============ 1803 1804There are two ways of rendering comments to `as'. In both cases the 1805comment is equivalent to one space. 1806 1807 Anything from `/*' through the next `*/' is a comment. This means 1808you may not nest these comments. 1809 1810 /* 1811 The only way to include a newline ('\n') in a comment 1812 is to use this sort of comment. 1813 */ 1814 1815 /* This sort of comment does not nest. */ 1816 1817 Anything from the "line comment" character to the next newline is 1818considered a comment and is ignored. The line comment character is `;' 1819on the ARC; `@' on the ARM; `;' for the H8/300 family; `;' for the HPPA; 1820`#' on the i386 and x86-64; `#' on the i960; `;' for the PDP-11; `;' 1821for picoJava; `#' for Motorola PowerPC; `#' for IBM S/390; `#' for the 1822Sunplus SCORE; `!' for the Renesas / SuperH SH; `!' on the SPARC; `#' 1823on the ip2k; `#' on the m32c; `#' on the m32r; `|' on the 680x0; `#' on 1824the 68HC11 and 68HC12; `#' on the RX; `;' on the TMS320C6X; `#' on the 1825Vax; `;' for the Z80; `!' for the Z8000; `#' on the V850; `#' for 1826Xtensa systems; see *Note Machine Dependencies::. 1827 1828 On some machines there are two different line comment characters. 1829One character only begins a comment if it is the first non-whitespace 1830character on a line, while the other always begins a comment. 1831 1832 The V850 assembler also supports a double dash as starting a comment 1833that extends to the end of the line. 1834 1835 `--'; 1836 1837 To be compatible with past assemblers, lines that begin with `#' 1838have a special interpretation. Following the `#' should be an absolute 1839expression (*note Expressions::): the logical line number of the _next_ 1840line. Then a string (*note Strings: Strings.) is allowed: if present 1841it is a new logical file name. The rest of the line, if any, should be 1842whitespace. 1843 1844 If the first non-whitespace characters on the line are not numeric, 1845the line is ignored. (Just like a comment.) 1846 1847 # This is an ordinary comment. 1848 # 42-6 "new_file_name" # New logical file name 1849 # This is logical line # 36. 1850 This feature is deprecated, and may disappear from future versions 1851of `as'. 1852 1853 1854File: as.info, Node: Symbol Intro, Next: Statements, Prev: Comments, Up: Syntax 1855 18563.4 Symbols 1857=========== 1858 1859A "symbol" is one or more characters chosen from the set of all letters 1860(both upper and lower case), digits and the three characters `_.$'. On 1861most machines, you can also use `$' in symbol names; exceptions are 1862noted in *Note Machine Dependencies::. No symbol may begin with a 1863digit. Case is significant. There is no length limit: all characters 1864are significant. Symbols are delimited by characters not in that set, 1865or by the beginning of a file (since the source program must end with a 1866newline, the end of a file is not a possible symbol delimiter). *Note 1867Symbols::. 1868 1869 1870File: as.info, Node: Statements, Next: Constants, Prev: Symbol Intro, Up: Syntax 1871 18723.5 Statements 1873============== 1874 1875A "statement" ends at a newline character (`\n') or line separator 1876character. (The line separator is usually `;', unless this conflicts 1877with the comment character; see *Note Machine Dependencies::.) The 1878newline or separator character is considered part of the preceding 1879statement. Newlines and separators within character constants are an 1880exception: they do not end statements. 1881 1882It is an error to end any statement with end-of-file: the last 1883character of any input file should be a newline. 1884 1885 An empty statement is allowed, and may include whitespace. It is 1886ignored. 1887 1888 A statement begins with zero or more labels, optionally followed by a 1889key symbol which determines what kind of statement it is. The key 1890symbol determines the syntax of the rest of the statement. If the 1891symbol begins with a dot `.' then the statement is an assembler 1892directive: typically valid for any computer. If the symbol begins with 1893a letter the statement is an assembly language "instruction": it 1894assembles into a machine language instruction. Different versions of 1895`as' for different computers recognize different instructions. In 1896fact, the same symbol may represent a different instruction in a 1897different computer's assembly language. 1898 1899 A label is a symbol immediately followed by a colon (`:'). 1900Whitespace before a label or after a colon is permitted, but you may not 1901have whitespace between a label's symbol and its colon. *Note Labels::. 1902 1903 For HPPA targets, labels need not be immediately followed by a 1904colon, but the definition of a label must begin in column zero. This 1905also implies that only one label may be defined on each line. 1906 1907 label: .directive followed by something 1908 another_label: # This is an empty statement. 1909 instruction operand_1, operand_2, ... 1910 1911 1912File: as.info, Node: Constants, Prev: Statements, Up: Syntax 1913 19143.6 Constants 1915============= 1916 1917A constant is a number, written so that its value is known by 1918inspection, without knowing any context. Like this: 1919 .byte 74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value. 1920 .ascii "Ring the bell\7" # A string constant. 1921 .octa 0x123456789abcdef0123456789ABCDEF0 # A bignum. 1922 .float 0f-314159265358979323846264338327\ 1923 95028841971.693993751E-40 # - pi, a flonum. 1924 1925* Menu: 1926 1927* Characters:: Character Constants 1928* Numbers:: Number Constants 1929 1930 1931File: as.info, Node: Characters, Next: Numbers, Up: Constants 1932 19333.6.1 Character Constants 1934------------------------- 1935 1936There are two kinds of character constants. A "character" stands for 1937one character in one byte and its value may be used in numeric 1938expressions. String constants (properly called string _literals_) are 1939potentially many bytes and their values may not be used in arithmetic 1940expressions. 1941 1942* Menu: 1943 1944* Strings:: Strings 1945* Chars:: Characters 1946 1947 1948File: as.info, Node: Strings, Next: Chars, Up: Characters 1949 19503.6.1.1 Strings 1951............... 1952 1953A "string" is written between double-quotes. It may contain 1954double-quotes or null characters. The way to get special characters 1955into a string is to "escape" these characters: precede them with a 1956backslash `\' character. For example `\\' represents one backslash: 1957the first `\' is an escape which tells `as' to interpret the second 1958character literally as a backslash (which prevents `as' from 1959recognizing the second `\' as an escape character). The complete list 1960of escapes follows. 1961 1962`\b' 1963 Mnemonic for backspace; for ASCII this is octal code 010. 1964 1965`\f' 1966 Mnemonic for FormFeed; for ASCII this is octal code 014. 1967 1968`\n' 1969 Mnemonic for newline; for ASCII this is octal code 012. 1970 1971`\r' 1972 Mnemonic for carriage-Return; for ASCII this is octal code 015. 1973 1974`\t' 1975 Mnemonic for horizontal Tab; for ASCII this is octal code 011. 1976 1977`\ DIGIT DIGIT DIGIT' 1978 An octal character code. The numeric code is 3 octal digits. For 1979 compatibility with other Unix systems, 8 and 9 are accepted as 1980 digits: for example, `\008' has the value 010, and `\009' the 1981 value 011. 1982 1983`\`x' HEX-DIGITS...' 1984 A hex character code. All trailing hex digits are combined. 1985 Either upper or lower case `x' works. 1986 1987`\\' 1988 Represents one `\' character. 1989 1990`\"' 1991 Represents one `"' character. Needed in strings to represent this 1992 character, because an unescaped `"' would end the string. 1993 1994`\ ANYTHING-ELSE' 1995 Any other character when escaped by `\' gives a warning, but 1996 assembles as if the `\' was not present. The idea is that if you 1997 used an escape sequence you clearly didn't want the literal 1998 interpretation of the following character. However `as' has no 1999 other interpretation, so `as' knows it is giving you the wrong 2000 code and warns you of the fact. 2001 2002 Which characters are escapable, and what those escapes represent, 2003varies widely among assemblers. The current set is what we think the 2004BSD 4.2 assembler recognizes, and is a subset of what most C compilers 2005recognize. If you are in doubt, do not use an escape sequence. 2006 2007 2008File: as.info, Node: Chars, Prev: Strings, Up: Characters 2009 20103.6.1.2 Characters 2011.................. 2012 2013A single character may be written as a single quote immediately 2014followed by that character. The same escapes apply to characters as to 2015strings. So if you want to write the character backslash, you must 2016write `'\\' where the first `\' escapes the second `\'. As you can 2017see, the quote is an acute accent, not a grave accent. A newline 2018immediately following an acute accent is taken as a literal character 2019and does not count as the end of a statement. The value of a character 2020constant in a numeric expression is the machine's byte-wide code for 2021that character. `as' assumes your character code is ASCII: `'A' means 202265, `'B' means 66, and so on. 2023 2024 2025File: as.info, Node: Numbers, Prev: Characters, Up: Constants 2026 20273.6.2 Number Constants 2028---------------------- 2029 2030`as' distinguishes three kinds of numbers according to how they are 2031stored in the target machine. _Integers_ are numbers that would fit 2032into an `int' in the C language. _Bignums_ are integers, but they are 2033stored in more than 32 bits. _Flonums_ are floating point numbers, 2034described below. 2035 2036* Menu: 2037 2038* Integers:: Integers 2039* Bignums:: Bignums 2040* Flonums:: Flonums 2041 2042 2043File: as.info, Node: Integers, Next: Bignums, Up: Numbers 2044 20453.6.2.1 Integers 2046................ 2047 2048A binary integer is `0b' or `0B' followed by zero or more of the binary 2049digits `01'. 2050 2051 An octal integer is `0' followed by zero or more of the octal digits 2052(`01234567'). 2053 2054 A decimal integer starts with a non-zero digit followed by zero or 2055more digits (`0123456789'). 2056 2057 A hexadecimal integer is `0x' or `0X' followed by one or more 2058hexadecimal digits chosen from `0123456789abcdefABCDEF'. 2059 2060 Integers have the usual values. To denote a negative integer, use 2061the prefix operator `-' discussed under expressions (*note Prefix 2062Operators: Prefix Ops.). 2063 2064 2065File: as.info, Node: Bignums, Next: Flonums, Prev: Integers, Up: Numbers 2066 20673.6.2.2 Bignums 2068............... 2069 2070A "bignum" has the same syntax and semantics as an integer except that 2071the number (or its negative) takes more than 32 bits to represent in 2072binary. The distinction is made because in some places integers are 2073permitted while bignums are not. 2074 2075 2076File: as.info, Node: Flonums, Prev: Bignums, Up: Numbers 2077 20783.6.2.3 Flonums 2079............... 2080 2081A "flonum" represents a floating point number. The translation is 2082indirect: a decimal floating point number from the text is converted by 2083`as' to a generic binary floating point number of more than sufficient 2084precision. This generic floating point number is converted to a 2085particular computer's floating point format (or formats) by a portion 2086of `as' specialized to that computer. 2087 2088 A flonum is written by writing (in order) 2089 * The digit `0'. (`0' is optional on the HPPA.) 2090 2091 * A letter, to tell `as' the rest of the number is a flonum. `e' is 2092 recommended. Case is not important. 2093 2094 On the H8/300, Renesas / SuperH SH, and AMD 29K architectures, the 2095 letter must be one of the letters `DFPRSX' (in upper or lower 2096 case). 2097 2098 On the ARC, the letter must be one of the letters `DFRS' (in upper 2099 or lower case). 2100 2101 On the Intel 960 architecture, the letter must be one of the 2102 letters `DFT' (in upper or lower case). 2103 2104 On the HPPA architecture, the letter must be `E' (upper case only). 2105 2106 * An optional sign: either `+' or `-'. 2107 2108 * An optional "integer part": zero or more decimal digits. 2109 2110 * An optional "fractional part": `.' followed by zero or more 2111 decimal digits. 2112 2113 * An optional exponent, consisting of: 2114 2115 * An `E' or `e'. 2116 2117 * Optional sign: either `+' or `-'. 2118 2119 * One or more decimal digits. 2120 2121 2122 At least one of the integer part or the fractional part must be 2123present. The floating point number has the usual base-10 value. 2124 2125 `as' does all processing using integers. Flonums are computed 2126independently of any floating point hardware in the computer running 2127`as'. 2128 2129 2130File: as.info, Node: Sections, Next: Symbols, Prev: Syntax, Up: Top 2131 21324 Sections and Relocation 2133************************* 2134 2135* Menu: 2136 2137* Secs Background:: Background 2138* Ld Sections:: Linker Sections 2139* As Sections:: Assembler Internal Sections 2140* Sub-Sections:: Sub-Sections 2141* bss:: bss Section 2142 2143 2144File: as.info, Node: Secs Background, Next: Ld Sections, Up: Sections 2145 21464.1 Background 2147============== 2148 2149Roughly, a section is a range of addresses, with no gaps; all data "in" 2150those addresses is treated the same for some particular purpose. For 2151example there may be a "read only" section. 2152 2153 The linker `ld' reads many object files (partial programs) and 2154combines their contents to form a runnable program. When `as' emits an 2155object file, the partial program is assumed to start at address 0. 2156`ld' assigns the final addresses for the partial program, so that 2157different partial programs do not overlap. This is actually an 2158oversimplification, but it suffices to explain how `as' uses sections. 2159 2160 `ld' moves blocks of bytes of your program to their run-time 2161addresses. These blocks slide to their run-time addresses as rigid 2162units; their length does not change and neither does the order of bytes 2163within them. Such a rigid unit is called a _section_. Assigning 2164run-time addresses to sections is called "relocation". It includes the 2165task of adjusting mentions of object-file addresses so they refer to 2166the proper run-time addresses. For the H8/300, and for the Renesas / 2167SuperH SH, `as' pads sections if needed to ensure they end on a word 2168(sixteen bit) boundary. 2169 2170 An object file written by `as' has at least three sections, any of 2171which may be empty. These are named "text", "data" and "bss" sections. 2172 2173 When it generates COFF or ELF output, `as' can also generate 2174whatever other named sections you specify using the `.section' 2175directive (*note `.section': Section.). If you do not use any 2176directives that place output in the `.text' or `.data' sections, these 2177sections still exist, but are empty. 2178 2179 When `as' generates SOM or ELF output for the HPPA, `as' can also 2180generate whatever other named sections you specify using the `.space' 2181and `.subspace' directives. See `HP9000 Series 800 Assembly Language 2182Reference Manual' (HP 92432-90001) for details on the `.space' and 2183`.subspace' assembler directives. 2184 2185 Additionally, `as' uses different names for the standard text, data, 2186and bss sections when generating SOM output. Program text is placed 2187into the `$CODE$' section, data into `$DATA$', and BSS into `$BSS$'. 2188 2189 Within the object file, the text section starts at address `0', the 2190data section follows, and the bss section follows the data section. 2191 2192 When generating either SOM or ELF output files on the HPPA, the text 2193section starts at address `0', the data section at address `0x4000000', 2194and the bss section follows the data section. 2195 2196 To let `ld' know which data changes when the sections are relocated, 2197and how to change that data, `as' also writes to the object file 2198details of the relocation needed. To perform relocation `ld' must 2199know, each time an address in the object file is mentioned: 2200 * Where in the object file is the beginning of this reference to an 2201 address? 2202 2203 * How long (in bytes) is this reference? 2204 2205 * Which section does the address refer to? What is the numeric 2206 value of 2207 (ADDRESS) - (START-ADDRESS OF SECTION)? 2208 2209 * Is the reference to an address "Program-Counter relative"? 2210 2211 In fact, every address `as' ever uses is expressed as 2212 (SECTION) + (OFFSET INTO SECTION) 2213 Further, most expressions `as' computes have this section-relative 2214nature. (For some object formats, such as SOM for the HPPA, some 2215expressions are symbol-relative instead.) 2216 2217 In this manual we use the notation {SECNAME N} to mean "offset N 2218into section SECNAME." 2219 2220 Apart from text, data and bss sections you need to know about the 2221"absolute" section. When `ld' mixes partial programs, addresses in the 2222absolute section remain unchanged. For example, address `{absolute 0}' 2223is "relocated" to run-time address 0 by `ld'. Although the linker 2224never arranges two partial programs' data sections with overlapping 2225addresses after linking, _by definition_ their absolute sections must 2226overlap. Address `{absolute 239}' in one part of a program is always 2227the same address when the program is running as address `{absolute 2228239}' in any other part of the program. 2229 2230 The idea of sections is extended to the "undefined" section. Any 2231address whose section is unknown at assembly time is by definition 2232rendered {undefined U}--where U is filled in later. Since numbers are 2233always defined, the only way to generate an undefined address is to 2234mention an undefined symbol. A reference to a named common block would 2235be such a symbol: its value is unknown at assembly time so it has 2236section _undefined_. 2237 2238 By analogy the word _section_ is used to describe groups of sections 2239in the linked program. `ld' puts all partial programs' text sections 2240in contiguous addresses in the linked program. It is customary to 2241refer to the _text section_ of a program, meaning all the addresses of 2242all partial programs' text sections. Likewise for data and bss 2243sections. 2244 2245 Some sections are manipulated by `ld'; others are invented for use 2246of `as' and have no meaning except during assembly. 2247 2248 2249File: as.info, Node: Ld Sections, Next: As Sections, Prev: Secs Background, Up: Sections 2250 22514.2 Linker Sections 2252=================== 2253 2254`ld' deals with just four kinds of sections, summarized below. 2255 2256*named sections* 2257*text section* 2258*data section* 2259 These sections hold your program. `as' and `ld' treat them as 2260 separate but equal sections. Anything you can say of one section 2261 is true of another. When the program is running, however, it is 2262 customary for the text section to be unalterable. The text 2263 section is often shared among processes: it contains instructions, 2264 constants and the like. The data section of a running program is 2265 usually alterable: for example, C variables would be stored in the 2266 data section. 2267 2268*bss section* 2269 This section contains zeroed bytes when your program begins 2270 running. It is used to hold uninitialized variables or common 2271 storage. The length of each partial program's bss section is 2272 important, but because it starts out containing zeroed bytes there 2273 is no need to store explicit zero bytes in the object file. The 2274 bss section was invented to eliminate those explicit zeros from 2275 object files. 2276 2277*absolute section* 2278 Address 0 of this section is always "relocated" to runtime address 2279 0. This is useful if you want to refer to an address that `ld' 2280 must not change when relocating. In this sense we speak of 2281 absolute addresses being "unrelocatable": they do not change 2282 during relocation. 2283 2284*undefined section* 2285 This "section" is a catch-all for address references to objects 2286 not in the preceding sections. 2287 2288 An idealized example of three relocatable sections follows. The 2289example uses the traditional section names `.text' and `.data'. Memory 2290addresses are on the horizontal axis. 2291 2292 +-----+----+--+ 2293 partial program # 1: |ttttt|dddd|00| 2294 +-----+----+--+ 2295 2296 text data bss 2297 seg. seg. seg. 2298 2299 +---+---+---+ 2300 partial program # 2: |TTT|DDD|000| 2301 +---+---+---+ 2302 2303 +--+---+-----+--+----+---+-----+~~ 2304 linked program: | |TTT|ttttt| |dddd|DDD|00000| 2305 +--+---+-----+--+----+---+-----+~~ 2306 2307 addresses: 0 ... 2308 2309 2310File: as.info, Node: As Sections, Next: Sub-Sections, Prev: Ld Sections, Up: Sections 2311 23124.3 Assembler Internal Sections 2313=============================== 2314 2315These sections are meant only for the internal use of `as'. They have 2316no meaning at run-time. You do not really need to know about these 2317sections for most purposes; but they can be mentioned in `as' warning 2318messages, so it might be helpful to have an idea of their meanings to 2319`as'. These sections are used to permit the value of every expression 2320in your assembly language program to be a section-relative address. 2321 2322ASSEMBLER-INTERNAL-LOGIC-ERROR! 2323 An internal assembler logic error has been found. This means 2324 there is a bug in the assembler. 2325 2326expr section 2327 The assembler stores complex expression internally as combinations 2328 of symbols. When it needs to represent an expression as a symbol, 2329 it puts it in the expr section. 2330 2331 2332File: as.info, Node: Sub-Sections, Next: bss, Prev: As Sections, Up: Sections 2333 23344.4 Sub-Sections 2335================ 2336 2337Assembled bytes conventionally fall into two sections: text and data. 2338You may have separate groups of data in named sections that you want to 2339end up near to each other in the object file, even though they are not 2340contiguous in the assembler source. `as' allows you to use 2341"subsections" for this purpose. Within each section, there can be 2342numbered subsections with values from 0 to 8192. Objects assembled 2343into the same subsection go into the object file together with other 2344objects in the same subsection. For example, a compiler might want to 2345store constants in the text section, but might not want to have them 2346interspersed with the program being assembled. In this case, the 2347compiler could issue a `.text 0' before each section of code being 2348output, and a `.text 1' before each group of constants being output. 2349 2350Subsections are optional. If you do not use subsections, everything 2351goes in subsection number zero. 2352 2353 Each subsection is zero-padded up to a multiple of four bytes. 2354(Subsections may be padded a different amount on different flavors of 2355`as'.) 2356 2357 Subsections appear in your object file in numeric order, lowest 2358numbered to highest. (All this to be compatible with other people's 2359assemblers.) The object file contains no representation of 2360subsections; `ld' and other programs that manipulate object files see 2361no trace of them. They just see all your text subsections as a text 2362section, and all your data subsections as a data section. 2363 2364 To specify which subsection you want subsequent statements assembled 2365into, use a numeric argument to specify it, in a `.text EXPRESSION' or 2366a `.data EXPRESSION' statement. When generating COFF output, you can 2367also use an extra subsection argument with arbitrary named sections: 2368`.section NAME, EXPRESSION'. When generating ELF output, you can also 2369use the `.subsection' directive (*note SubSection::) to specify a 2370subsection: `.subsection EXPRESSION'. EXPRESSION should be an absolute 2371expression (*note Expressions::). If you just say `.text' then `.text 23720' is assumed. Likewise `.data' means `.data 0'. Assembly begins in 2373`text 0'. For instance: 2374 .text 0 # The default subsection is text 0 anyway. 2375 .ascii "This lives in the first text subsection. *" 2376 .text 1 2377 .ascii "But this lives in the second text subsection." 2378 .data 0 2379 .ascii "This lives in the data section," 2380 .ascii "in the first data subsection." 2381 .text 0 2382 .ascii "This lives in the first text section," 2383 .ascii "immediately following the asterisk (*)." 2384 2385 Each section has a "location counter" incremented by one for every 2386byte assembled into that section. Because subsections are merely a 2387convenience restricted to `as' there is no concept of a subsection 2388location counter. There is no way to directly manipulate a location 2389counter--but the `.align' directive changes it, and any label 2390definition captures its current value. The location counter of the 2391section where statements are being assembled is said to be the "active" 2392location counter. 2393 2394 2395File: as.info, Node: bss, Prev: Sub-Sections, Up: Sections 2396 23974.5 bss Section 2398=============== 2399 2400The bss section is used for local common variable storage. You may 2401allocate address space in the bss section, but you may not dictate data 2402to load into it before your program executes. When your program starts 2403running, all the contents of the bss section are zeroed bytes. 2404 2405 The `.lcomm' pseudo-op defines a symbol in the bss section; see 2406*Note `.lcomm': Lcomm. 2407 2408 The `.comm' pseudo-op may be used to declare a common symbol, which 2409is another form of uninitialized symbol; see *Note `.comm': Comm. 2410 2411 When assembling for a target which supports multiple sections, such 2412as ELF or COFF, you may switch into the `.bss' section and define 2413symbols as usual; see *Note `.section': Section. You may only assemble 2414zero values into the section. Typically the section will only contain 2415symbol definitions and `.skip' directives (*note `.skip': Skip.). 2416 2417 2418File: as.info, Node: Symbols, Next: Expressions, Prev: Sections, Up: Top 2419 24205 Symbols 2421********* 2422 2423Symbols are a central concept: the programmer uses symbols to name 2424things, the linker uses symbols to link, and the debugger uses symbols 2425to debug. 2426 2427 _Warning:_ `as' does not place symbols in the object file in the 2428 same order they were declared. This may break some debuggers. 2429 2430* Menu: 2431 2432* Labels:: Labels 2433* Setting Symbols:: Giving Symbols Other Values 2434* Symbol Names:: Symbol Names 2435* Dot:: The Special Dot Symbol 2436* Symbol Attributes:: Symbol Attributes 2437 2438 2439File: as.info, Node: Labels, Next: Setting Symbols, Up: Symbols 2440 24415.1 Labels 2442========== 2443 2444A "label" is written as a symbol immediately followed by a colon `:'. 2445The symbol then represents the current value of the active location 2446counter, and is, for example, a suitable instruction operand. You are 2447warned if you use the same symbol to represent two different locations: 2448the first definition overrides any other definitions. 2449 2450 On the HPPA, the usual form for a label need not be immediately 2451followed by a colon, but instead must start in column zero. Only one 2452label may be defined on a single line. To work around this, the HPPA 2453version of `as' also provides a special directive `.label' for defining 2454labels more flexibly. 2455 2456 2457File: as.info, Node: Setting Symbols, Next: Symbol Names, Prev: Labels, Up: Symbols 2458 24595.2 Giving Symbols Other Values 2460=============================== 2461 2462A symbol can be given an arbitrary value by writing a symbol, followed 2463by an equals sign `=', followed by an expression (*note Expressions::). 2464This is equivalent to using the `.set' directive. *Note `.set': Set. 2465In the same way, using a double equals sign `='`=' here represents an 2466equivalent of the `.eqv' directive. *Note `.eqv': Eqv. 2467 2468 Blackfin does not support symbol assignment with `='. 2469 2470 2471File: as.info, Node: Symbol Names, Next: Dot, Prev: Setting Symbols, Up: Symbols 2472 24735.3 Symbol Names 2474================ 2475 2476Symbol names begin with a letter or with one of `._'. On most 2477machines, you can also use `$' in symbol names; exceptions are noted in 2478*Note Machine Dependencies::. That character may be followed by any 2479string of digits, letters, dollar signs (unless otherwise noted for a 2480particular target machine), and underscores. 2481 2482Case of letters is significant: `foo' is a different symbol name than 2483`Foo'. 2484 2485 Each symbol has exactly one name. Each name in an assembly language 2486program refers to exactly one symbol. You may use that symbol name any 2487number of times in a program. 2488 2489Local Symbol Names 2490------------------ 2491 2492A local symbol is any symbol beginning with certain local label 2493prefixes. By default, the local label prefix is `.L' for ELF systems or 2494`L' for traditional a.out systems, but each target may have its own set 2495of local label prefixes. On the HPPA local symbols begin with `L$'. 2496 2497 Local symbols are defined and used within the assembler, but they are 2498normally not saved in object files. Thus, they are not visible when 2499debugging. You may use the `-L' option (*note Include Local Symbols: 2500`-L': L.) to retain the local symbols in the object files. 2501 2502Local Labels 2503------------ 2504 2505Local labels help compilers and programmers use names temporarily. 2506They create symbols which are guaranteed to be unique over the entire 2507scope of the input source code and which can be referred to by a simple 2508notation. To define a local label, write a label of the form `N:' 2509(where N represents any positive integer). To refer to the most recent 2510previous definition of that label write `Nb', using the same number as 2511when you defined the label. To refer to the next definition of a local 2512label, write `Nf'--the `b' stands for "backwards" and the `f' stands 2513for "forwards". 2514 2515 There is no restriction on how you can use these labels, and you can 2516reuse them too. So that it is possible to repeatedly define the same 2517local label (using the same number `N'), although you can only refer to 2518the most recently defined local label of that number (for a backwards 2519reference) or the next definition of a specific local label for a 2520forward reference. It is also worth noting that the first 10 local 2521labels (`0:'...`9:') are implemented in a slightly more efficient 2522manner than the others. 2523 2524 Here is an example: 2525 2526 1: branch 1f 2527 2: branch 1b 2528 1: branch 2f 2529 2: branch 1b 2530 2531 Which is the equivalent of: 2532 2533 label_1: branch label_3 2534 label_2: branch label_1 2535 label_3: branch label_4 2536 label_4: branch label_3 2537 2538 Local label names are only a notational device. They are immediately 2539transformed into more conventional symbol names before the assembler 2540uses them. The symbol names are stored in the symbol table, appear in 2541error messages, and are optionally emitted to the object file. The 2542names are constructed using these parts: 2543 2544`_local label prefix_' 2545 All local symbols begin with the system-specific local label 2546 prefix. Normally both `as' and `ld' forget symbols that start 2547 with the local label prefix. These labels are used for symbols 2548 you are never intended to see. If you use the `-L' option then 2549 `as' retains these symbols in the object file. If you also 2550 instruct `ld' to retain these symbols, you may use them in 2551 debugging. 2552 2553`NUMBER' 2554 This is the number that was used in the local label definition. 2555 So if the label is written `55:' then the number is `55'. 2556 2557`C-B' 2558 This unusual character is included so you do not accidentally 2559 invent a symbol of the same name. The character has ASCII value 2560 of `\002' (control-B). 2561 2562`_ordinal number_' 2563 This is a serial number to keep the labels distinct. The first 2564 definition of `0:' gets the number `1'. The 15th definition of 2565 `0:' gets the number `15', and so on. Likewise the first 2566 definition of `1:' gets the number `1' and its 15th definition 2567 gets `15' as well. 2568 2569 So for example, the first `1:' may be named `.L1C-B1', and the 44th 2570`3:' may be named `.L3C-B44'. 2571 2572Dollar Local Labels 2573------------------- 2574 2575`as' also supports an even more local form of local labels called 2576dollar labels. These labels go out of scope (i.e., they become 2577undefined) as soon as a non-local label is defined. Thus they remain 2578valid for only a small region of the input source code. Normal local 2579labels, by contrast, remain in scope for the entire file, or until they 2580are redefined by another occurrence of the same local label. 2581 2582 Dollar labels are defined in exactly the same way as ordinary local 2583labels, except that they have a dollar sign suffix to their numeric 2584value, e.g., `55$:'. 2585 2586 They can also be distinguished from ordinary local labels by their 2587transformed names which use ASCII character `\001' (control-A) as the 2588magic character to distinguish them from ordinary labels. For example, 2589the fifth definition of `6$' may be named `.L6C-A5'. 2590 2591 2592File: as.info, Node: Dot, Next: Symbol Attributes, Prev: Symbol Names, Up: Symbols 2593 25945.4 The Special Dot Symbol 2595========================== 2596 2597The special symbol `.' refers to the current address that `as' is 2598assembling into. Thus, the expression `melvin: .long .' defines 2599`melvin' to contain its own address. Assigning a value to `.' is 2600treated the same as a `.org' directive. Thus, the expression `.=.+4' 2601is the same as saying `.space 4'. 2602 2603 2604File: as.info, Node: Symbol Attributes, Prev: Dot, Up: Symbols 2605 26065.5 Symbol Attributes 2607===================== 2608 2609Every symbol has, as well as its name, the attributes "Value" and 2610"Type". Depending on output format, symbols can also have auxiliary 2611attributes. 2612 2613 If you use a symbol without defining it, `as' assumes zero for all 2614these attributes, and probably won't warn you. This makes the symbol 2615an externally defined symbol, which is generally what you would want. 2616 2617* Menu: 2618 2619* Symbol Value:: Value 2620* Symbol Type:: Type 2621 2622 2623* a.out Symbols:: Symbol Attributes: `a.out' 2624 2625* COFF Symbols:: Symbol Attributes for COFF 2626 2627* SOM Symbols:: Symbol Attributes for SOM 2628 2629 2630File: as.info, Node: Symbol Value, Next: Symbol Type, Up: Symbol Attributes 2631 26325.5.1 Value 2633----------- 2634 2635The value of a symbol is (usually) 32 bits. For a symbol which labels a 2636location in the text, data, bss or absolute sections the value is the 2637number of addresses from the start of that section to the label. 2638Naturally for text, data and bss sections the value of a symbol changes 2639as `ld' changes section base addresses during linking. Absolute 2640symbols' values do not change during linking: that is why they are 2641called absolute. 2642 2643 The value of an undefined symbol is treated in a special way. If it 2644is 0 then the symbol is not defined in this assembler source file, and 2645`ld' tries to determine its value from other files linked into the same 2646program. You make this kind of symbol simply by mentioning a symbol 2647name without defining it. A non-zero value represents a `.comm' common 2648declaration. The value is how much common storage to reserve, in bytes 2649(addresses). The symbol refers to the first address of the allocated 2650storage. 2651 2652 2653File: as.info, Node: Symbol Type, Next: a.out Symbols, Prev: Symbol Value, Up: Symbol Attributes 2654 26555.5.2 Type 2656---------- 2657 2658The type attribute of a symbol contains relocation (section) 2659information, any flag settings indicating that a symbol is external, and 2660(optionally), other information for linkers and debuggers. The exact 2661format depends on the object-code output format in use. 2662 2663 2664File: as.info, Node: a.out Symbols, Next: COFF Symbols, Prev: Symbol Type, Up: Symbol Attributes 2665 26665.5.3 Symbol Attributes: `a.out' 2667-------------------------------- 2668 2669* Menu: 2670 2671* Symbol Desc:: Descriptor 2672* Symbol Other:: Other 2673 2674 2675File: as.info, Node: Symbol Desc, Next: Symbol Other, Up: a.out Symbols 2676 26775.5.3.1 Descriptor 2678.................. 2679 2680This is an arbitrary 16-bit value. You may establish a symbol's 2681descriptor value by using a `.desc' statement (*note `.desc': Desc.). 2682A descriptor value means nothing to `as'. 2683 2684 2685File: as.info, Node: Symbol Other, Prev: Symbol Desc, Up: a.out Symbols 2686 26875.5.3.2 Other 2688............. 2689 2690This is an arbitrary 8-bit value. It means nothing to `as'. 2691 2692 2693File: as.info, Node: COFF Symbols, Next: SOM Symbols, Prev: a.out Symbols, Up: Symbol Attributes 2694 26955.5.4 Symbol Attributes for COFF 2696-------------------------------- 2697 2698The COFF format supports a multitude of auxiliary symbol attributes; 2699like the primary symbol attributes, they are set between `.def' and 2700`.endef' directives. 2701 27025.5.4.1 Primary Attributes 2703.......................... 2704 2705The symbol name is set with `.def'; the value and type, respectively, 2706with `.val' and `.type'. 2707 27085.5.4.2 Auxiliary Attributes 2709............................ 2710 2711The `as' directives `.dim', `.line', `.scl', `.size', `.tag', and 2712`.weak' can generate auxiliary symbol table information for COFF. 2713 2714 2715File: as.info, Node: SOM Symbols, Prev: COFF Symbols, Up: Symbol Attributes 2716 27175.5.5 Symbol Attributes for SOM 2718------------------------------- 2719 2720The SOM format for the HPPA supports a multitude of symbol attributes 2721set with the `.EXPORT' and `.IMPORT' directives. 2722 2723 The attributes are described in `HP9000 Series 800 Assembly Language 2724Reference Manual' (HP 92432-90001) under the `IMPORT' and `EXPORT' 2725assembler directive documentation. 2726 2727 2728File: as.info, Node: Expressions, Next: Pseudo Ops, Prev: Symbols, Up: Top 2729 27306 Expressions 2731************* 2732 2733An "expression" specifies an address or numeric value. Whitespace may 2734precede and/or follow an expression. 2735 2736 The result of an expression must be an absolute number, or else an 2737offset into a particular section. If an expression is not absolute, 2738and there is not enough information when `as' sees the expression to 2739know its section, a second pass over the source program might be 2740necessary to interpret the expression--but the second pass is currently 2741not implemented. `as' aborts with an error message in this situation. 2742 2743* Menu: 2744 2745* Empty Exprs:: Empty Expressions 2746* Integer Exprs:: Integer Expressions 2747 2748 2749File: as.info, Node: Empty Exprs, Next: Integer Exprs, Up: Expressions 2750 27516.1 Empty Expressions 2752===================== 2753 2754An empty expression has no value: it is just whitespace or null. 2755Wherever an absolute expression is required, you may omit the 2756expression, and `as' assumes a value of (absolute) 0. This is 2757compatible with other assemblers. 2758 2759 2760File: as.info, Node: Integer Exprs, Prev: Empty Exprs, Up: Expressions 2761 27626.2 Integer Expressions 2763======================= 2764 2765An "integer expression" is one or more _arguments_ delimited by 2766_operators_. 2767 2768* Menu: 2769 2770* Arguments:: Arguments 2771* Operators:: Operators 2772* Prefix Ops:: Prefix Operators 2773* Infix Ops:: Infix Operators 2774 2775 2776File: as.info, Node: Arguments, Next: Operators, Up: Integer Exprs 2777 27786.2.1 Arguments 2779--------------- 2780 2781"Arguments" are symbols, numbers or subexpressions. In other contexts 2782arguments are sometimes called "arithmetic operands". In this manual, 2783to avoid confusing them with the "instruction operands" of the machine 2784language, we use the term "argument" to refer to parts of expressions 2785only, reserving the word "operand" to refer only to machine instruction 2786operands. 2787 2788 Symbols are evaluated to yield {SECTION NNN} where SECTION is one of 2789text, data, bss, absolute, or undefined. NNN is a signed, 2's 2790complement 32 bit integer. 2791 2792 Numbers are usually integers. 2793 2794 A number can be a flonum or bignum. In this case, you are warned 2795that only the low order 32 bits are used, and `as' pretends these 32 2796bits are an integer. You may write integer-manipulating instructions 2797that act on exotic constants, compatible with other assemblers. 2798 2799 Subexpressions are a left parenthesis `(' followed by an integer 2800expression, followed by a right parenthesis `)'; or a prefix operator 2801followed by an argument. 2802 2803 2804File: as.info, Node: Operators, Next: Prefix Ops, Prev: Arguments, Up: Integer Exprs 2805 28066.2.2 Operators 2807--------------- 2808 2809"Operators" are arithmetic functions, like `+' or `%'. Prefix 2810operators are followed by an argument. Infix operators appear between 2811their arguments. Operators may be preceded and/or followed by 2812whitespace. 2813 2814 2815File: as.info, Node: Prefix Ops, Next: Infix Ops, Prev: Operators, Up: Integer Exprs 2816 28176.2.3 Prefix Operator 2818--------------------- 2819 2820`as' has the following "prefix operators". They each take one 2821argument, which must be absolute. 2822 2823`-' 2824 "Negation". Two's complement negation. 2825 2826`~' 2827 "Complementation". Bitwise not. 2828 2829 2830File: as.info, Node: Infix Ops, Prev: Prefix Ops, Up: Integer Exprs 2831 28326.2.4 Infix Operators 2833--------------------- 2834 2835"Infix operators" take two arguments, one on either side. Operators 2836have precedence, but operations with equal precedence are performed left 2837to right. Apart from `+' or `-', both arguments must be absolute, and 2838the result is absolute. 2839 2840 1. Highest Precedence 2841 2842 `*' 2843 "Multiplication". 2844 2845 `/' 2846 "Division". Truncation is the same as the C operator `/' 2847 2848 `%' 2849 "Remainder". 2850 2851 `<<' 2852 "Shift Left". Same as the C operator `<<'. 2853 2854 `>>' 2855 "Shift Right". Same as the C operator `>>'. 2856 2857 2. Intermediate precedence 2858 2859 `|' 2860 "Bitwise Inclusive Or". 2861 2862 `&' 2863 "Bitwise And". 2864 2865 `^' 2866 "Bitwise Exclusive Or". 2867 2868 `!' 2869 "Bitwise Or Not". 2870 2871 3. Low Precedence 2872 2873 `+' 2874 "Addition". If either argument is absolute, the result has 2875 the section of the other argument. You may not add together 2876 arguments from different sections. 2877 2878 `-' 2879 "Subtraction". If the right argument is absolute, the result 2880 has the section of the left argument. If both arguments are 2881 in the same section, the result is absolute. You may not 2882 subtract arguments from different sections. 2883 2884 `==' 2885 "Is Equal To" 2886 2887 `<>' 2888 `!=' 2889 "Is Not Equal To" 2890 2891 `<' 2892 "Is Less Than" 2893 2894 `>' 2895 "Is Greater Than" 2896 2897 `>=' 2898 "Is Greater Than Or Equal To" 2899 2900 `<=' 2901 "Is Less Than Or Equal To" 2902 2903 The comparison operators can be used as infix operators. A 2904 true results has a value of -1 whereas a false result has a 2905 value of 0. Note, these operators perform signed 2906 comparisons. 2907 2908 4. Lowest Precedence 2909 2910 `&&' 2911 "Logical And". 2912 2913 `||' 2914 "Logical Or". 2915 2916 These two logical operations can be used to combine the 2917 results of sub expressions. Note, unlike the comparison 2918 operators a true result returns a value of 1 but a false 2919 results does still return 0. Also note that the logical or 2920 operator has a slightly lower precedence than logical and. 2921 2922 2923 In short, it's only meaningful to add or subtract the _offsets_ in an 2924address; you can only have a defined section in one of the two 2925arguments. 2926 2927 2928File: as.info, Node: Pseudo Ops, Next: Object Attributes, Prev: Expressions, Up: Top 2929 29307 Assembler Directives 2931********************** 2932 2933All assembler directives have names that begin with a period (`.'). 2934The rest of the name is letters, usually in lower case. 2935 2936 This chapter discusses directives that are available regardless of 2937the target machine configuration for the GNU assembler. Some machine 2938configurations provide additional directives. *Note Machine 2939Dependencies::. 2940 2941* Menu: 2942 2943* Abort:: `.abort' 2944 2945* ABORT (COFF):: `.ABORT' 2946 2947* Align:: `.align ABS-EXPR , ABS-EXPR' 2948* Altmacro:: `.altmacro' 2949* Ascii:: `.ascii "STRING"'... 2950* Asciz:: `.asciz "STRING"'... 2951* Balign:: `.balign ABS-EXPR , ABS-EXPR' 2952* Byte:: `.byte EXPRESSIONS' 2953* CFI directives:: `.cfi_startproc [simple]', `.cfi_endproc', etc. 2954* Comm:: `.comm SYMBOL , LENGTH ' 2955* Data:: `.data SUBSECTION' 2956 2957* Def:: `.def NAME' 2958 2959* Desc:: `.desc SYMBOL, ABS-EXPRESSION' 2960 2961* Dim:: `.dim' 2962 2963* Double:: `.double FLONUMS' 2964* Eject:: `.eject' 2965* Else:: `.else' 2966* Elseif:: `.elseif' 2967* End:: `.end' 2968 2969* Endef:: `.endef' 2970 2971* Endfunc:: `.endfunc' 2972* Endif:: `.endif' 2973* Equ:: `.equ SYMBOL, EXPRESSION' 2974* Equiv:: `.equiv SYMBOL, EXPRESSION' 2975* Eqv:: `.eqv SYMBOL, EXPRESSION' 2976* Err:: `.err' 2977* Error:: `.error STRING' 2978* Exitm:: `.exitm' 2979* Extern:: `.extern' 2980* Fail:: `.fail' 2981* File:: `.file' 2982* Fill:: `.fill REPEAT , SIZE , VALUE' 2983* Float:: `.float FLONUMS' 2984* Func:: `.func' 2985* Global:: `.global SYMBOL', `.globl SYMBOL' 2986 2987* Gnu_attribute:: `.gnu_attribute TAG,VALUE' 2988* Hidden:: `.hidden NAMES' 2989 2990* hword:: `.hword EXPRESSIONS' 2991* Ident:: `.ident' 2992* If:: `.if ABSOLUTE EXPRESSION' 2993* Incbin:: `.incbin "FILE"[,SKIP[,COUNT]]' 2994* Include:: `.include "FILE"' 2995* Int:: `.int EXPRESSIONS' 2996 2997* Internal:: `.internal NAMES' 2998 2999* Irp:: `.irp SYMBOL,VALUES'... 3000* Irpc:: `.irpc SYMBOL,VALUES'... 3001* Lcomm:: `.lcomm SYMBOL , LENGTH' 3002* Lflags:: `.lflags' 3003 3004* Line:: `.line LINE-NUMBER' 3005 3006* Linkonce:: `.linkonce [TYPE]' 3007* List:: `.list' 3008* Ln:: `.ln LINE-NUMBER' 3009* Loc:: `.loc FILENO LINENO' 3010* Loc_mark_labels:: `.loc_mark_labels ENABLE' 3011 3012* Local:: `.local NAMES' 3013 3014* Long:: `.long EXPRESSIONS' 3015 3016* Macro:: `.macro NAME ARGS'... 3017* MRI:: `.mri VAL' 3018* Noaltmacro:: `.noaltmacro' 3019* Nolist:: `.nolist' 3020* Octa:: `.octa BIGNUMS' 3021* Org:: `.org NEW-LC, FILL' 3022* P2align:: `.p2align ABS-EXPR, ABS-EXPR, ABS-EXPR' 3023 3024* PopSection:: `.popsection' 3025* Previous:: `.previous' 3026 3027* Print:: `.print STRING' 3028 3029* Protected:: `.protected NAMES' 3030 3031* Psize:: `.psize LINES, COLUMNS' 3032* Purgem:: `.purgem NAME' 3033 3034* PushSection:: `.pushsection NAME' 3035 3036* Quad:: `.quad BIGNUMS' 3037* Reloc:: `.reloc OFFSET, RELOC_NAME[, EXPRESSION]' 3038* Rept:: `.rept COUNT' 3039* Sbttl:: `.sbttl "SUBHEADING"' 3040 3041* Scl:: `.scl CLASS' 3042 3043* Section:: `.section NAME[, FLAGS]' 3044 3045* Set:: `.set SYMBOL, EXPRESSION' 3046* Short:: `.short EXPRESSIONS' 3047* Single:: `.single FLONUMS' 3048 3049* Size:: `.size [NAME , EXPRESSION]' 3050 3051* Skip:: `.skip SIZE , FILL' 3052 3053* Sleb128:: `.sleb128 EXPRESSIONS' 3054 3055* Space:: `.space SIZE , FILL' 3056 3057* Stab:: `.stabd, .stabn, .stabs' 3058 3059* String:: `.string "STR"', `.string8 "STR"', `.string16 "STR"', `.string32 "STR"', `.string64 "STR"' 3060* Struct:: `.struct EXPRESSION' 3061 3062* SubSection:: `.subsection' 3063* Symver:: `.symver NAME,NAME2@NODENAME' 3064 3065 3066* Tag:: `.tag STRUCTNAME' 3067 3068* Text:: `.text SUBSECTION' 3069* Title:: `.title "HEADING"' 3070 3071* Type:: `.type <INT | NAME , TYPE DESCRIPTION>' 3072 3073* Uleb128:: `.uleb128 EXPRESSIONS' 3074 3075* Val:: `.val ADDR' 3076 3077 3078* Version:: `.version "STRING"' 3079* VTableEntry:: `.vtable_entry TABLE, OFFSET' 3080* VTableInherit:: `.vtable_inherit CHILD, PARENT' 3081 3082* Warning:: `.warning STRING' 3083* Weak:: `.weak NAMES' 3084* Weakref:: `.weakref ALIAS, SYMBOL' 3085* Word:: `.word EXPRESSIONS' 3086* Deprecated:: Deprecated Directives 3087 3088 3089File: as.info, Node: Abort, Next: ABORT (COFF), Up: Pseudo Ops 3090 30917.1 `.abort' 3092============ 3093 3094This directive stops the assembly immediately. It is for compatibility 3095with other assemblers. The original idea was that the assembly 3096language source would be piped into the assembler. If the sender of 3097the source quit, it could use this directive tells `as' to quit also. 3098One day `.abort' will not be supported. 3099 3100 3101File: as.info, Node: ABORT (COFF), Next: Align, Prev: Abort, Up: Pseudo Ops 3102 31037.2 `.ABORT' (COFF) 3104=================== 3105 3106When producing COFF output, `as' accepts this directive as a synonym 3107for `.abort'. 3108 3109 3110File: as.info, Node: Align, Next: Altmacro, Prev: ABORT (COFF), Up: Pseudo Ops 3111 31127.3 `.align ABS-EXPR, ABS-EXPR, ABS-EXPR' 3113========================================= 3114 3115Pad the location counter (in the current subsection) to a particular 3116storage boundary. The first expression (which must be absolute) is the 3117alignment required, as described below. 3118 3119 The second expression (also absolute) gives the fill value to be 3120stored in the padding bytes. It (and the comma) may be omitted. If it 3121is omitted, the padding bytes are normally zero. However, on some 3122systems, if the section is marked as containing code and the fill value 3123is omitted, the space is filled with no-op instructions. 3124 3125 The third expression is also absolute, and is also optional. If it 3126is present, it is the maximum number of bytes that should be skipped by 3127this alignment directive. If doing the alignment would require 3128skipping more bytes than the specified maximum, then the alignment is 3129not done at all. You can omit the fill value (the second argument) 3130entirely by simply using two commas after the required alignment; this 3131can be useful if you want the alignment to be filled with no-op 3132instructions when appropriate. 3133 3134 The way the required alignment is specified varies from system to 3135system. For the arc, hppa, i386 using ELF, i860, iq2000, m68k, or32, 3136s390, sparc, tic4x, tic80 and xtensa, the first expression is the 3137alignment request in bytes. For example `.align 8' advances the 3138location counter until it is a multiple of 8. If the location counter 3139is already a multiple of 8, no change is needed. For the tic54x, the 3140first expression is the alignment request in words. 3141 3142 For other systems, including ppc, i386 using a.out format, arm and 3143strongarm, it is the number of low-order zero bits the location counter 3144must have after advancement. For example `.align 3' advances the 3145location counter until it a multiple of 8. If the location counter is 3146already a multiple of 8, no change is needed. 3147 3148 This inconsistency is due to the different behaviors of the various 3149native assemblers for these systems which GAS must emulate. GAS also 3150provides `.balign' and `.p2align' directives, described later, which 3151have a consistent behavior across all architectures (but are specific 3152to GAS). 3153 3154 3155File: as.info, Node: Altmacro, Next: Ascii, Prev: Align, Up: Pseudo Ops 3156 31577.4 `.altmacro' 3158=============== 3159 3160Enable alternate macro mode, enabling: 3161 3162`LOCAL NAME [ , ... ]' 3163 One additional directive, `LOCAL', is available. It is used to 3164 generate a string replacement for each of the NAME arguments, and 3165 replace any instances of NAME in each macro expansion. The 3166 replacement string is unique in the assembly, and different for 3167 each separate macro expansion. `LOCAL' allows you to write macros 3168 that define symbols, without fear of conflict between separate 3169 macro expansions. 3170 3171`String delimiters' 3172 You can write strings delimited in these other ways besides 3173 `"STRING"': 3174 3175 `'STRING'' 3176 You can delimit strings with single-quote characters. 3177 3178 `<STRING>' 3179 You can delimit strings with matching angle brackets. 3180 3181`single-character string escape' 3182 To include any single character literally in a string (even if the 3183 character would otherwise have some special meaning), you can 3184 prefix the character with `!' (an exclamation mark). For example, 3185 you can write `<4.3 !> 5.4!!>' to get the literal text `4.3 > 3186 5.4!'. 3187 3188`Expression results as strings' 3189 You can write `%EXPR' to evaluate the expression EXPR and use the 3190 result as a string. 3191 3192 3193File: as.info, Node: Ascii, Next: Asciz, Prev: Altmacro, Up: Pseudo Ops 3194 31957.5 `.ascii "STRING"'... 3196======================== 3197 3198`.ascii' expects zero or more string literals (*note Strings::) 3199separated by commas. It assembles each string (with no automatic 3200trailing zero byte) into consecutive addresses. 3201 3202 3203File: as.info, Node: Asciz, Next: Balign, Prev: Ascii, Up: Pseudo Ops 3204 32057.6 `.asciz "STRING"'... 3206======================== 3207 3208`.asciz' is just like `.ascii', but each string is followed by a zero 3209byte. The "z" in `.asciz' stands for "zero". 3210 3211 3212File: as.info, Node: Balign, Next: Byte, Prev: Asciz, Up: Pseudo Ops 3213 32147.7 `.balign[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR' 3215============================================== 3216 3217Pad the location counter (in the current subsection) to a particular 3218storage boundary. The first expression (which must be absolute) is the 3219alignment request in bytes. For example `.balign 8' advances the 3220location counter until it is a multiple of 8. If the location counter 3221is already a multiple of 8, no change is needed. 3222 3223 The second expression (also absolute) gives the fill value to be 3224stored in the padding bytes. It (and the comma) may be omitted. If it 3225is omitted, the padding bytes are normally zero. However, on some 3226systems, if the section is marked as containing code and the fill value 3227is omitted, the space is filled with no-op instructions. 3228 3229 The third expression is also absolute, and is also optional. If it 3230is present, it is the maximum number of bytes that should be skipped by 3231this alignment directive. If doing the alignment would require 3232skipping more bytes than the specified maximum, then the alignment is 3233not done at all. You can omit the fill value (the second argument) 3234entirely by simply using two commas after the required alignment; this 3235can be useful if you want the alignment to be filled with no-op 3236instructions when appropriate. 3237 3238 The `.balignw' and `.balignl' directives are variants of the 3239`.balign' directive. The `.balignw' directive treats the fill pattern 3240as a two byte word value. The `.balignl' directives treats the fill 3241pattern as a four byte longword value. For example, `.balignw 32424,0x368d' will align to a multiple of 4. If it skips two bytes, they 3243will be filled in with the value 0x368d (the exact placement of the 3244bytes depends upon the endianness of the processor). If it skips 1 or 32453 bytes, the fill value is undefined. 3246 3247 3248File: as.info, Node: Byte, Next: CFI directives, Prev: Balign, Up: Pseudo Ops 3249 32507.8 `.byte EXPRESSIONS' 3251======================= 3252 3253`.byte' expects zero or more expressions, separated by commas. Each 3254expression is assembled into the next byte. 3255 3256 3257File: as.info, Node: CFI directives, Next: Comm, Prev: Byte, Up: Pseudo Ops 3258 32597.9 `.cfi_sections SECTION_LIST' 3260================================ 3261 3262`.cfi_sections' may be used to specify whether CFI directives should 3263emit `.eh_frame' section and/or `.debug_frame' section. If 3264SECTION_LIST is `.eh_frame', `.eh_frame' is emitted, if SECTION_LIST is 3265`.debug_frame', `.debug_frame' is emitted. To emit both use 3266`.eh_frame, .debug_frame'. The default if this directive is not used 3267is `.cfi_sections .eh_frame'. 3268 32697.10 `.cfi_startproc [simple]' 3270============================== 3271 3272`.cfi_startproc' is used at the beginning of each function that should 3273have an entry in `.eh_frame'. It initializes some internal data 3274structures. Don't forget to close the function by `.cfi_endproc'. 3275 3276 Unless `.cfi_startproc' is used along with parameter `simple' it 3277also emits some architecture dependent initial CFI instructions. 3278 32797.11 `.cfi_endproc' 3280=================== 3281 3282`.cfi_endproc' is used at the end of a function where it closes its 3283unwind entry previously opened by `.cfi_startproc', and emits it to 3284`.eh_frame'. 3285 32867.12 `.cfi_personality ENCODING [, EXP]' 3287======================================== 3288 3289`.cfi_personality' defines personality routine and its encoding. 3290ENCODING must be a constant determining how the personality should be 3291encoded. If it is 255 (`DW_EH_PE_omit'), second argument is not 3292present, otherwise second argument should be a constant or a symbol 3293name. When using indirect encodings, the symbol provided should be the 3294location where personality can be loaded from, not the personality 3295routine itself. The default after `.cfi_startproc' is 3296`.cfi_personality 0xff', no personality routine. 3297 32987.13 `.cfi_lsda ENCODING [, EXP]' 3299================================= 3300 3301`.cfi_lsda' defines LSDA and its encoding. ENCODING must be a constant 3302determining how the LSDA should be encoded. If it is 255 3303(`DW_EH_PE_omit'), second argument is not present, otherwise second 3304argument should be a constant or a symbol name. The default after 3305`.cfi_startproc' is `.cfi_lsda 0xff', no LSDA. 3306 33077.14 `.cfi_def_cfa REGISTER, OFFSET' 3308==================================== 3309 3310`.cfi_def_cfa' defines a rule for computing CFA as: take address from 3311REGISTER and add OFFSET to it. 3312 33137.15 `.cfi_def_cfa_register REGISTER' 3314===================================== 3315 3316`.cfi_def_cfa_register' modifies a rule for computing CFA. From now on 3317REGISTER will be used instead of the old one. Offset remains the same. 3318 33197.16 `.cfi_def_cfa_offset OFFSET' 3320================================= 3321 3322`.cfi_def_cfa_offset' modifies a rule for computing CFA. Register 3323remains the same, but OFFSET is new. Note that it is the absolute 3324offset that will be added to a defined register to compute CFA address. 3325 33267.17 `.cfi_adjust_cfa_offset OFFSET' 3327==================================== 3328 3329Same as `.cfi_def_cfa_offset' but OFFSET is a relative value that is 3330added/substracted from the previous offset. 3331 33327.18 `.cfi_offset REGISTER, OFFSET' 3333=================================== 3334 3335Previous value of REGISTER is saved at offset OFFSET from CFA. 3336 33377.19 `.cfi_rel_offset REGISTER, OFFSET' 3338======================================= 3339 3340Previous value of REGISTER is saved at offset OFFSET from the current 3341CFA register. This is transformed to `.cfi_offset' using the known 3342displacement of the CFA register from the CFA. This is often easier to 3343use, because the number will match the code it's annotating. 3344 33457.20 `.cfi_register REGISTER1, REGISTER2' 3346========================================= 3347 3348Previous value of REGISTER1 is saved in register REGISTER2. 3349 33507.21 `.cfi_restore REGISTER' 3351============================ 3352 3353`.cfi_restore' says that the rule for REGISTER is now the same as it 3354was at the beginning of the function, after all initial instruction 3355added by `.cfi_startproc' were executed. 3356 33577.22 `.cfi_undefined REGISTER' 3358============================== 3359 3360From now on the previous value of REGISTER can't be restored anymore. 3361 33627.23 `.cfi_same_value REGISTER' 3363=============================== 3364 3365Current value of REGISTER is the same like in the previous frame, i.e. 3366no restoration needed. 3367 33687.24 `.cfi_remember_state', 3369=========================== 3370 3371First save all current rules for all registers by `.cfi_remember_state', 3372then totally screw them up by subsequent `.cfi_*' directives and when 3373everything is hopelessly bad, use `.cfi_restore_state' to restore the 3374previous saved state. 3375 33767.25 `.cfi_return_column REGISTER' 3377================================== 3378 3379Change return column REGISTER, i.e. the return address is either 3380directly in REGISTER or can be accessed by rules for REGISTER. 3381 33827.26 `.cfi_signal_frame' 3383======================== 3384 3385Mark current function as signal trampoline. 3386 33877.27 `.cfi_window_save' 3388======================= 3389 3390SPARC register window has been saved. 3391 33927.28 `.cfi_escape' EXPRESSION[, ...] 3393==================================== 3394 3395Allows the user to add arbitrary bytes to the unwind info. One might 3396use this to add OS-specific CFI opcodes, or generic CFI opcodes that 3397GAS does not yet support. 3398 33997.29 `.cfi_val_encoded_addr REGISTER, ENCODING, LABEL' 3400====================================================== 3401 3402The current value of REGISTER is LABEL. The value of LABEL will be 3403encoded in the output file according to ENCODING; see the description 3404of `.cfi_personality' for details on this encoding. 3405 3406 The usefulness of equating a register to a fixed label is probably 3407limited to the return address register. Here, it can be useful to mark 3408a code segment that has only one return address which is reached by a 3409direct branch and no copy of the return address exists in memory or 3410another register. 3411 3412 3413File: as.info, Node: Comm, Next: Data, Prev: CFI directives, Up: Pseudo Ops 3414 34157.30 `.comm SYMBOL , LENGTH ' 3416============================= 3417 3418`.comm' declares a common symbol named SYMBOL. When linking, a common 3419symbol in one object file may be merged with a defined or common symbol 3420of the same name in another object file. If `ld' does not see a 3421definition for the symbol-just one or more common symbols-then it will 3422allocate LENGTH bytes of uninitialized memory. LENGTH must be an 3423absolute expression. If `ld' sees multiple common symbols with the 3424same name, and they do not all have the same size, it will allocate 3425space using the largest size. 3426 3427 When using ELF or (as a GNU extension) PE, the `.comm' directive 3428takes an optional third argument. This is the desired alignment of the 3429symbol, specified for ELF as a byte boundary (for example, an alignment 3430of 16 means that the least significant 4 bits of the address should be 3431zero), and for PE as a power of two (for example, an alignment of 5 3432means aligned to a 32-byte boundary). The alignment must be an 3433absolute expression, and it must be a power of two. If `ld' allocates 3434uninitialized memory for the common symbol, it will use the alignment 3435when placing the symbol. If no alignment is specified, `as' will set 3436the alignment to the largest power of two less than or equal to the 3437size of the symbol, up to a maximum of 16 on ELF, or the default 3438section alignment of 4 on PE(1). 3439 3440 The syntax for `.comm' differs slightly on the HPPA. The syntax is 3441`SYMBOL .comm, LENGTH'; SYMBOL is optional. 3442 3443 ---------- Footnotes ---------- 3444 3445 (1) This is not the same as the executable image file alignment 3446controlled by `ld''s `--section-alignment' option; image file sections 3447in PE are aligned to multiples of 4096, which is far too large an 3448alignment for ordinary variables. It is rather the default alignment 3449for (non-debug) sections within object (`*.o') files, which are less 3450strictly aligned. 3451 3452 3453File: as.info, Node: Data, Next: Def, Prev: Comm, Up: Pseudo Ops 3454 34557.31 `.data SUBSECTION' 3456======================= 3457 3458`.data' tells `as' to assemble the following statements onto the end of 3459the data subsection numbered SUBSECTION (which is an absolute 3460expression). If SUBSECTION is omitted, it defaults to zero. 3461 3462 3463File: as.info, Node: Def, Next: Desc, Prev: Data, Up: Pseudo Ops 3464 34657.32 `.def NAME' 3466================ 3467 3468Begin defining debugging information for a symbol NAME; the definition 3469extends until the `.endef' directive is encountered. 3470 3471 3472File: as.info, Node: Desc, Next: Dim, Prev: Def, Up: Pseudo Ops 3473 34747.33 `.desc SYMBOL, ABS-EXPRESSION' 3475=================================== 3476 3477This directive sets the descriptor of the symbol (*note Symbol 3478Attributes::) to the low 16 bits of an absolute expression. 3479 3480 The `.desc' directive is not available when `as' is configured for 3481COFF output; it is only for `a.out' or `b.out' object format. For the 3482sake of compatibility, `as' accepts it, but produces no output, when 3483configured for COFF. 3484 3485 3486File: as.info, Node: Dim, Next: Double, Prev: Desc, Up: Pseudo Ops 3487 34887.34 `.dim' 3489=========== 3490 3491This directive is generated by compilers to include auxiliary debugging 3492information in the symbol table. It is only permitted inside 3493`.def'/`.endef' pairs. 3494 3495 3496File: as.info, Node: Double, Next: Eject, Prev: Dim, Up: Pseudo Ops 3497 34987.35 `.double FLONUMS' 3499====================== 3500 3501`.double' expects zero or more flonums, separated by commas. It 3502assembles floating point numbers. The exact kind of floating point 3503numbers emitted depends on how `as' is configured. *Note Machine 3504Dependencies::. 3505 3506 3507File: as.info, Node: Eject, Next: Else, Prev: Double, Up: Pseudo Ops 3508 35097.36 `.eject' 3510============= 3511 3512Force a page break at this point, when generating assembly listings. 3513 3514 3515File: as.info, Node: Else, Next: Elseif, Prev: Eject, Up: Pseudo Ops 3516 35177.37 `.else' 3518============ 3519 3520`.else' is part of the `as' support for conditional assembly; see *Note 3521`.if': If. It marks the beginning of a section of code to be assembled 3522if the condition for the preceding `.if' was false. 3523 3524 3525File: as.info, Node: Elseif, Next: End, Prev: Else, Up: Pseudo Ops 3526 35277.38 `.elseif' 3528============== 3529 3530`.elseif' is part of the `as' support for conditional assembly; see 3531*Note `.if': If. It is shorthand for beginning a new `.if' block that 3532would otherwise fill the entire `.else' section. 3533 3534 3535File: as.info, Node: End, Next: Endef, Prev: Elseif, Up: Pseudo Ops 3536 35377.39 `.end' 3538=========== 3539 3540`.end' marks the end of the assembly file. `as' does not process 3541anything in the file past the `.end' directive. 3542 3543 3544File: as.info, Node: Endef, Next: Endfunc, Prev: End, Up: Pseudo Ops 3545 35467.40 `.endef' 3547============= 3548 3549This directive flags the end of a symbol definition begun with `.def'. 3550 3551 3552File: as.info, Node: Endfunc, Next: Endif, Prev: Endef, Up: Pseudo Ops 3553 35547.41 `.endfunc' 3555=============== 3556 3557`.endfunc' marks the end of a function specified with `.func'. 3558 3559 3560File: as.info, Node: Endif, Next: Equ, Prev: Endfunc, Up: Pseudo Ops 3561 35627.42 `.endif' 3563============= 3564 3565`.endif' is part of the `as' support for conditional assembly; it marks 3566the end of a block of code that is only assembled conditionally. *Note 3567`.if': If. 3568 3569 3570File: as.info, Node: Equ, Next: Equiv, Prev: Endif, Up: Pseudo Ops 3571 35727.43 `.equ SYMBOL, EXPRESSION' 3573============================== 3574 3575This directive sets the value of SYMBOL to EXPRESSION. It is 3576synonymous with `.set'; see *Note `.set': Set. 3577 3578 The syntax for `equ' on the HPPA is `SYMBOL .equ EXPRESSION'. 3579 3580 The syntax for `equ' on the Z80 is `SYMBOL equ EXPRESSION'. On the 3581Z80 it is an eror if SYMBOL is already defined, but the symbol is not 3582protected from later redefinition. Compare *Note Equiv::. 3583 3584 3585File: as.info, Node: Equiv, Next: Eqv, Prev: Equ, Up: Pseudo Ops 3586 35877.44 `.equiv SYMBOL, EXPRESSION' 3588================================ 3589 3590The `.equiv' directive is like `.equ' and `.set', except that the 3591assembler will signal an error if SYMBOL is already defined. Note a 3592symbol which has been referenced but not actually defined is considered 3593to be undefined. 3594 3595 Except for the contents of the error message, this is roughly 3596equivalent to 3597 .ifdef SYM 3598 .err 3599 .endif 3600 .equ SYM,VAL 3601 plus it protects the symbol from later redefinition. 3602 3603 3604File: as.info, Node: Eqv, Next: Err, Prev: Equiv, Up: Pseudo Ops 3605 36067.45 `.eqv SYMBOL, EXPRESSION' 3607============================== 3608 3609The `.eqv' directive is like `.equiv', but no attempt is made to 3610evaluate the expression or any part of it immediately. Instead each 3611time the resulting symbol is used in an expression, a snapshot of its 3612current value is taken. 3613 3614 3615File: as.info, Node: Err, Next: Error, Prev: Eqv, Up: Pseudo Ops 3616 36177.46 `.err' 3618=========== 3619 3620If `as' assembles a `.err' directive, it will print an error message 3621and, unless the `-Z' option was used, it will not generate an object 3622file. This can be used to signal an error in conditionally compiled 3623code. 3624 3625 3626File: as.info, Node: Error, Next: Exitm, Prev: Err, Up: Pseudo Ops 3627 36287.47 `.error "STRING"' 3629====================== 3630 3631Similarly to `.err', this directive emits an error, but you can specify 3632a string that will be emitted as the error message. If you don't 3633specify the message, it defaults to `".error directive invoked in 3634source file"'. *Note Error and Warning Messages: Errors. 3635 3636 .error "This code has not been assembled and tested." 3637 3638 3639File: as.info, Node: Exitm, Next: Extern, Prev: Error, Up: Pseudo Ops 3640 36417.48 `.exitm' 3642============= 3643 3644Exit early from the current macro definition. *Note Macro::. 3645 3646 3647File: as.info, Node: Extern, Next: Fail, Prev: Exitm, Up: Pseudo Ops 3648 36497.49 `.extern' 3650============== 3651 3652`.extern' is accepted in the source program--for compatibility with 3653other assemblers--but it is ignored. `as' treats all undefined symbols 3654as external. 3655 3656 3657File: as.info, Node: Fail, Next: File, Prev: Extern, Up: Pseudo Ops 3658 36597.50 `.fail EXPRESSION' 3660======================= 3661 3662Generates an error or a warning. If the value of the EXPRESSION is 500 3663or more, `as' will print a warning message. If the value is less than 3664500, `as' will print an error message. The message will include the 3665value of EXPRESSION. This can occasionally be useful inside complex 3666nested macros or conditional assembly. 3667 3668 3669File: as.info, Node: File, Next: Fill, Prev: Fail, Up: Pseudo Ops 3670 36717.51 `.file' 3672============ 3673 3674There are two different versions of the `.file' directive. Targets 3675that support DWARF2 line number information use the DWARF2 version of 3676`.file'. Other targets use the default version. 3677 3678Default Version 3679--------------- 3680 3681This version of the `.file' directive tells `as' that we are about to 3682start a new logical file. The syntax is: 3683 3684 .file STRING 3685 3686 STRING is the new file name. In general, the filename is recognized 3687whether or not it is surrounded by quotes `"'; but if you wish to 3688specify an empty file name, you must give the quotes-`""'. This 3689statement may go away in future: it is only recognized to be compatible 3690with old `as' programs. 3691 3692DWARF2 Version 3693-------------- 3694 3695When emitting DWARF2 line number information, `.file' assigns filenames 3696to the `.debug_line' file name table. The syntax is: 3697 3698 .file FILENO FILENAME 3699 3700 The FILENO operand should be a unique positive integer to use as the 3701index of the entry in the table. The FILENAME operand is a C string 3702literal. 3703 3704 The detail of filename indices is exposed to the user because the 3705filename table is shared with the `.debug_info' section of the DWARF2 3706debugging information, and thus the user must know the exact indices 3707that table entries will have. 3708 3709 3710File: as.info, Node: Fill, Next: Float, Prev: File, Up: Pseudo Ops 3711 37127.52 `.fill REPEAT , SIZE , VALUE' 3713================================== 3714 3715REPEAT, SIZE and VALUE are absolute expressions. This emits REPEAT 3716copies of SIZE bytes. REPEAT may be zero or more. SIZE may be zero or 3717more, but if it is more than 8, then it is deemed to have the value 8, 3718compatible with other people's assemblers. The contents of each REPEAT 3719bytes is taken from an 8-byte number. The highest order 4 bytes are 3720zero. The lowest order 4 bytes are VALUE rendered in the byte-order of 3721an integer on the computer `as' is assembling for. Each SIZE bytes in 3722a repetition is taken from the lowest order SIZE bytes of this number. 3723Again, this bizarre behavior is compatible with other people's 3724assemblers. 3725 3726 SIZE and VALUE are optional. If the second comma and VALUE are 3727absent, VALUE is assumed zero. If the first comma and following tokens 3728are absent, SIZE is assumed to be 1. 3729 3730 3731File: as.info, Node: Float, Next: Func, Prev: Fill, Up: Pseudo Ops 3732 37337.53 `.float FLONUMS' 3734===================== 3735 3736This directive assembles zero or more flonums, separated by commas. It 3737has the same effect as `.single'. The exact kind of floating point 3738numbers emitted depends on how `as' is configured. *Note Machine 3739Dependencies::. 3740 3741 3742File: as.info, Node: Func, Next: Global, Prev: Float, Up: Pseudo Ops 3743 37447.54 `.func NAME[,LABEL]' 3745========================= 3746 3747`.func' emits debugging information to denote function NAME, and is 3748ignored unless the file is assembled with debugging enabled. Only 3749`--gstabs[+]' is currently supported. LABEL is the entry point of the 3750function and if omitted NAME prepended with the `leading char' is used. 3751`leading char' is usually `_' or nothing, depending on the target. All 3752functions are currently defined to have `void' return type. The 3753function must be terminated with `.endfunc'. 3754 3755 3756File: as.info, Node: Global, Next: Gnu_attribute, Prev: Func, Up: Pseudo Ops 3757 37587.55 `.global SYMBOL', `.globl SYMBOL' 3759====================================== 3760 3761`.global' makes the symbol visible to `ld'. If you define SYMBOL in 3762your partial program, its value is made available to other partial 3763programs that are linked with it. Otherwise, SYMBOL takes its 3764attributes from a symbol of the same name from another file linked into 3765the same program. 3766 3767 Both spellings (`.globl' and `.global') are accepted, for 3768compatibility with other assemblers. 3769 3770 On the HPPA, `.global' is not always enough to make it accessible to 3771other partial programs. You may need the HPPA-only `.EXPORT' directive 3772as well. *Note HPPA Assembler Directives: HPPA Directives. 3773 3774 3775File: as.info, Node: Gnu_attribute, Next: Hidden, Prev: Global, Up: Pseudo Ops 3776 37777.56 `.gnu_attribute TAG,VALUE' 3778=============================== 3779 3780Record a GNU object attribute for this file. *Note Object Attributes::. 3781 3782 3783File: as.info, Node: Hidden, Next: hword, Prev: Gnu_attribute, Up: Pseudo Ops 3784 37857.57 `.hidden NAMES' 3786==================== 3787 3788This is one of the ELF visibility directives. The other two are 3789`.internal' (*note `.internal': Internal.) and `.protected' (*note 3790`.protected': Protected.). 3791 3792 This directive overrides the named symbols default visibility (which 3793is set by their binding: local, global or weak). The directive sets 3794the visibility to `hidden' which means that the symbols are not visible 3795to other components. Such symbols are always considered to be 3796`protected' as well. 3797 3798 3799File: as.info, Node: hword, Next: Ident, Prev: Hidden, Up: Pseudo Ops 3800 38017.58 `.hword EXPRESSIONS' 3802========================= 3803 3804This expects zero or more EXPRESSIONS, and emits a 16 bit number for 3805each. 3806 3807 This directive is a synonym for `.short'; depending on the target 3808architecture, it may also be a synonym for `.word'. 3809 3810 3811File: as.info, Node: Ident, Next: If, Prev: hword, Up: Pseudo Ops 3812 38137.59 `.ident' 3814============= 3815 3816This directive is used by some assemblers to place tags in object 3817files. The behavior of this directive varies depending on the target. 3818When using the a.out object file format, `as' simply accepts the 3819directive for source-file compatibility with existing assemblers, but 3820does not emit anything for it. When using COFF, comments are emitted 3821to the `.comment' or `.rdata' section, depending on the target. When 3822using ELF, comments are emitted to the `.comment' section. 3823 3824 3825File: as.info, Node: If, Next: Incbin, Prev: Ident, Up: Pseudo Ops 3826 38277.60 `.if ABSOLUTE EXPRESSION' 3828============================== 3829 3830`.if' marks the beginning of a section of code which is only considered 3831part of the source program being assembled if the argument (which must 3832be an ABSOLUTE EXPRESSION) is non-zero. The end of the conditional 3833section of code must be marked by `.endif' (*note `.endif': Endif.); 3834optionally, you may include code for the alternative condition, flagged 3835by `.else' (*note `.else': Else.). If you have several conditions to 3836check, `.elseif' may be used to avoid nesting blocks if/else within 3837each subsequent `.else' block. 3838 3839 The following variants of `.if' are also supported: 3840`.ifdef SYMBOL' 3841 Assembles the following section of code if the specified SYMBOL 3842 has been defined. Note a symbol which has been referenced but not 3843 yet defined is considered to be undefined. 3844 3845`.ifb TEXT' 3846 Assembles the following section of code if the operand is blank 3847 (empty). 3848 3849`.ifc STRING1,STRING2' 3850 Assembles the following section of code if the two strings are the 3851 same. The strings may be optionally quoted with single quotes. 3852 If they are not quoted, the first string stops at the first comma, 3853 and the second string stops at the end of the line. Strings which 3854 contain whitespace should be quoted. The string comparison is 3855 case sensitive. 3856 3857`.ifeq ABSOLUTE EXPRESSION' 3858 Assembles the following section of code if the argument is zero. 3859 3860`.ifeqs STRING1,STRING2' 3861 Another form of `.ifc'. The strings must be quoted using double 3862 quotes. 3863 3864`.ifge ABSOLUTE EXPRESSION' 3865 Assembles the following section of code if the argument is greater 3866 than or equal to zero. 3867 3868`.ifgt ABSOLUTE EXPRESSION' 3869 Assembles the following section of code if the argument is greater 3870 than zero. 3871 3872`.ifle ABSOLUTE EXPRESSION' 3873 Assembles the following section of code if the argument is less 3874 than or equal to zero. 3875 3876`.iflt ABSOLUTE EXPRESSION' 3877 Assembles the following section of code if the argument is less 3878 than zero. 3879 3880`.ifnb TEXT' 3881 Like `.ifb', but the sense of the test is reversed: this assembles 3882 the following section of code if the operand is non-blank 3883 (non-empty). 3884 3885`.ifnc STRING1,STRING2.' 3886 Like `.ifc', but the sense of the test is reversed: this assembles 3887 the following section of code if the two strings are not the same. 3888 3889`.ifndef SYMBOL' 3890`.ifnotdef SYMBOL' 3891 Assembles the following section of code if the specified SYMBOL 3892 has not been defined. Both spelling variants are equivalent. 3893 Note a symbol which has been referenced but not yet defined is 3894 considered to be undefined. 3895 3896`.ifne ABSOLUTE EXPRESSION' 3897 Assembles the following section of code if the argument is not 3898 equal to zero (in other words, this is equivalent to `.if'). 3899 3900`.ifnes STRING1,STRING2' 3901 Like `.ifeqs', but the sense of the test is reversed: this 3902 assembles the following section of code if the two strings are not 3903 the same. 3904 3905 3906File: as.info, Node: Incbin, Next: Include, Prev: If, Up: Pseudo Ops 3907 39087.61 `.incbin "FILE"[,SKIP[,COUNT]]' 3909==================================== 3910 3911The `incbin' directive includes FILE verbatim at the current location. 3912You can control the search paths used with the `-I' command-line option 3913(*note Command-Line Options: Invoking.). Quotation marks are required 3914around FILE. 3915 3916 The SKIP argument skips a number of bytes from the start of the 3917FILE. The COUNT argument indicates the maximum number of bytes to 3918read. Note that the data is not aligned in any way, so it is the user's 3919responsibility to make sure that proper alignment is provided both 3920before and after the `incbin' directive. 3921 3922 3923File: as.info, Node: Include, Next: Int, Prev: Incbin, Up: Pseudo Ops 3924 39257.62 `.include "FILE"' 3926====================== 3927 3928This directive provides a way to include supporting files at specified 3929points in your source program. The code from FILE is assembled as if 3930it followed the point of the `.include'; when the end of the included 3931file is reached, assembly of the original file continues. You can 3932control the search paths used with the `-I' command-line option (*note 3933Command-Line Options: Invoking.). Quotation marks are required around 3934FILE. 3935 3936 3937File: as.info, Node: Int, Next: Internal, Prev: Include, Up: Pseudo Ops 3938 39397.63 `.int EXPRESSIONS' 3940======================= 3941 3942Expect zero or more EXPRESSIONS, of any section, separated by commas. 3943For each expression, emit a number that, at run time, is the value of 3944that expression. The byte order and bit size of the number depends on 3945what kind of target the assembly is for. 3946 3947 3948File: as.info, Node: Internal, Next: Irp, Prev: Int, Up: Pseudo Ops 3949 39507.64 `.internal NAMES' 3951====================== 3952 3953This is one of the ELF visibility directives. The other two are 3954`.hidden' (*note `.hidden': Hidden.) and `.protected' (*note 3955`.protected': Protected.). 3956 3957 This directive overrides the named symbols default visibility (which 3958is set by their binding: local, global or weak). The directive sets 3959the visibility to `internal' which means that the symbols are 3960considered to be `hidden' (i.e., not visible to other components), and 3961that some extra, processor specific processing must also be performed 3962upon the symbols as well. 3963 3964 3965File: as.info, Node: Irp, Next: Irpc, Prev: Internal, Up: Pseudo Ops 3966 39677.65 `.irp SYMBOL,VALUES'... 3968============================ 3969 3970Evaluate a sequence of statements assigning different values to SYMBOL. 3971The sequence of statements starts at the `.irp' directive, and is 3972terminated by an `.endr' directive. For each VALUE, SYMBOL is set to 3973VALUE, and the sequence of statements is assembled. If no VALUE is 3974listed, the sequence of statements is assembled once, with SYMBOL set 3975to the null string. To refer to SYMBOL within the sequence of 3976statements, use \SYMBOL. 3977 3978 For example, assembling 3979 3980 .irp param,1,2,3 3981 move d\param,sp@- 3982 .endr 3983 3984 is equivalent to assembling 3985 3986 move d1,sp@- 3987 move d2,sp@- 3988 move d3,sp@- 3989 3990 For some caveats with the spelling of SYMBOL, see also *Note Macro::. 3991 3992 3993File: as.info, Node: Irpc, Next: Lcomm, Prev: Irp, Up: Pseudo Ops 3994 39957.66 `.irpc SYMBOL,VALUES'... 3996============================= 3997 3998Evaluate a sequence of statements assigning different values to SYMBOL. 3999The sequence of statements starts at the `.irpc' directive, and is 4000terminated by an `.endr' directive. For each character in VALUE, 4001SYMBOL is set to the character, and the sequence of statements is 4002assembled. If no VALUE is listed, the sequence of statements is 4003assembled once, with SYMBOL set to the null string. To refer to SYMBOL 4004within the sequence of statements, use \SYMBOL. 4005 4006 For example, assembling 4007 4008 .irpc param,123 4009 move d\param,sp@- 4010 .endr 4011 4012 is equivalent to assembling 4013 4014 move d1,sp@- 4015 move d2,sp@- 4016 move d3,sp@- 4017 4018 For some caveats with the spelling of SYMBOL, see also the discussion 4019at *Note Macro::. 4020 4021 4022File: as.info, Node: Lcomm, Next: Lflags, Prev: Irpc, Up: Pseudo Ops 4023 40247.67 `.lcomm SYMBOL , LENGTH' 4025============================= 4026 4027Reserve LENGTH (an absolute expression) bytes for a local common 4028denoted by SYMBOL. The section and value of SYMBOL are those of the 4029new local common. The addresses are allocated in the bss section, so 4030that at run-time the bytes start off zeroed. SYMBOL is not declared 4031global (*note `.global': Global.), so is normally not visible to `ld'. 4032 4033 Some targets permit a third argument to be used with `.lcomm'. This 4034argument specifies the desired alignment of the symbol in the bss 4035section. 4036 4037 The syntax for `.lcomm' differs slightly on the HPPA. The syntax is 4038`SYMBOL .lcomm, LENGTH'; SYMBOL is optional. 4039 4040 4041File: as.info, Node: Lflags, Next: Line, Prev: Lcomm, Up: Pseudo Ops 4042 40437.68 `.lflags' 4044============== 4045 4046`as' accepts this directive, for compatibility with other assemblers, 4047but ignores it. 4048 4049 4050File: as.info, Node: Line, Next: Linkonce, Prev: Lflags, Up: Pseudo Ops 4051 40527.69 `.line LINE-NUMBER' 4053======================== 4054 4055Change the logical line number. LINE-NUMBER must be an absolute 4056expression. The next line has that logical line number. Therefore any 4057other statements on the current line (after a statement separator 4058character) are reported as on logical line number LINE-NUMBER - 1. One 4059day `as' will no longer support this directive: it is recognized only 4060for compatibility with existing assembler programs. 4061 4062Even though this is a directive associated with the `a.out' or `b.out' 4063object-code formats, `as' still recognizes it when producing COFF 4064output, and treats `.line' as though it were the COFF `.ln' _if_ it is 4065found outside a `.def'/`.endef' pair. 4066 4067 Inside a `.def', `.line' is, instead, one of the directives used by 4068compilers to generate auxiliary symbol information for debugging. 4069 4070 4071File: as.info, Node: Linkonce, Next: List, Prev: Line, Up: Pseudo Ops 4072 40737.70 `.linkonce [TYPE]' 4074======================= 4075 4076Mark the current section so that the linker only includes a single copy 4077of it. This may be used to include the same section in several 4078different object files, but ensure that the linker will only include it 4079once in the final output file. The `.linkonce' pseudo-op must be used 4080for each instance of the section. Duplicate sections are detected 4081based on the section name, so it should be unique. 4082 4083 This directive is only supported by a few object file formats; as of 4084this writing, the only object file format which supports it is the 4085Portable Executable format used on Windows NT. 4086 4087 The TYPE argument is optional. If specified, it must be one of the 4088following strings. For example: 4089 .linkonce same_size 4090 Not all types may be supported on all object file formats. 4091 4092`discard' 4093 Silently discard duplicate sections. This is the default. 4094 4095`one_only' 4096 Warn if there are duplicate sections, but still keep only one copy. 4097 4098`same_size' 4099 Warn if any of the duplicates have different sizes. 4100 4101`same_contents' 4102 Warn if any of the duplicates do not have exactly the same 4103 contents. 4104 4105 4106File: as.info, Node: List, Next: Ln, Prev: Linkonce, Up: Pseudo Ops 4107 41087.71 `.list' 4109============ 4110 4111Control (in conjunction with the `.nolist' directive) whether or not 4112assembly listings are generated. These two directives maintain an 4113internal counter (which is zero initially). `.list' increments the 4114counter, and `.nolist' decrements it. Assembly listings are generated 4115whenever the counter is greater than zero. 4116 4117 By default, listings are disabled. When you enable them (with the 4118`-a' command line option; *note Command-Line Options: Invoking.), the 4119initial value of the listing counter is one. 4120 4121 4122File: as.info, Node: Ln, Next: Loc, Prev: List, Up: Pseudo Ops 4123 41247.72 `.ln LINE-NUMBER' 4125====================== 4126 4127`.ln' is a synonym for `.line'. 4128 4129 4130File: as.info, Node: Loc, Next: Loc_mark_labels, Prev: Ln, Up: Pseudo Ops 4131 41327.73 `.loc FILENO LINENO [COLUMN] [OPTIONS]' 4133============================================ 4134 4135When emitting DWARF2 line number information, the `.loc' directive will 4136add a row to the `.debug_line' line number matrix corresponding to the 4137immediately following assembly instruction. The FILENO, LINENO, and 4138optional COLUMN arguments will be applied to the `.debug_line' state 4139machine before the row is added. 4140 4141 The OPTIONS are a sequence of the following tokens in any order: 4142 4143`basic_block' 4144 This option will set the `basic_block' register in the 4145 `.debug_line' state machine to `true'. 4146 4147`prologue_end' 4148 This option will set the `prologue_end' register in the 4149 `.debug_line' state machine to `true'. 4150 4151`epilogue_begin' 4152 This option will set the `epilogue_begin' register in the 4153 `.debug_line' state machine to `true'. 4154 4155`is_stmt VALUE' 4156 This option will set the `is_stmt' register in the `.debug_line' 4157 state machine to `value', which must be either 0 or 1. 4158 4159`isa VALUE' 4160 This directive will set the `isa' register in the `.debug_line' 4161 state machine to VALUE, which must be an unsigned integer. 4162 4163`discriminator VALUE' 4164 This directive will set the `discriminator' register in the 4165 `.debug_line' state machine to VALUE, which must be an unsigned 4166 integer. 4167 4168 4169 4170File: as.info, Node: Loc_mark_labels, Next: Local, Prev: Loc, Up: Pseudo Ops 4171 41727.74 `.loc_mark_labels ENABLE' 4173============================== 4174 4175When emitting DWARF2 line number information, the `.loc_mark_labels' 4176directive makes the assembler emit an entry to the `.debug_line' line 4177number matrix with the `basic_block' register in the state machine set 4178whenever a code label is seen. The ENABLE argument should be either 1 4179or 0, to enable or disable this function respectively. 4180 4181 4182File: as.info, Node: Local, Next: Long, Prev: Loc_mark_labels, Up: Pseudo Ops 4183 41847.75 `.local NAMES' 4185=================== 4186 4187This directive, which is available for ELF targets, marks each symbol in 4188the comma-separated list of `names' as a local symbol so that it will 4189not be externally visible. If the symbols do not already exist, they 4190will be created. 4191 4192 For targets where the `.lcomm' directive (*note Lcomm::) does not 4193accept an alignment argument, which is the case for most ELF targets, 4194the `.local' directive can be used in combination with `.comm' (*note 4195Comm::) to define aligned local common data. 4196 4197 4198File: as.info, Node: Long, Next: Macro, Prev: Local, Up: Pseudo Ops 4199 42007.76 `.long EXPRESSIONS' 4201======================== 4202 4203`.long' is the same as `.int'. *Note `.int': Int. 4204 4205 4206File: as.info, Node: Macro, Next: MRI, Prev: Long, Up: Pseudo Ops 4207 42087.77 `.macro' 4209============= 4210 4211The commands `.macro' and `.endm' allow you to define macros that 4212generate assembly output. For example, this definition specifies a 4213macro `sum' that puts a sequence of numbers into memory: 4214 4215 .macro sum from=0, to=5 4216 .long \from 4217 .if \to-\from 4218 sum "(\from+1)",\to 4219 .endif 4220 .endm 4221 4222With that definition, `SUM 0,5' is equivalent to this assembly input: 4223 4224 .long 0 4225 .long 1 4226 .long 2 4227 .long 3 4228 .long 4 4229 .long 5 4230 4231`.macro MACNAME' 4232`.macro MACNAME MACARGS ...' 4233 Begin the definition of a macro called MACNAME. If your macro 4234 definition requires arguments, specify their names after the macro 4235 name, separated by commas or spaces. You can qualify the macro 4236 argument to indicate whether all invocations must specify a 4237 non-blank value (through `:`req''), or whether it takes all of the 4238 remaining arguments (through `:`vararg''). You can supply a 4239 default value for any macro argument by following the name with 4240 `=DEFLT'. You cannot define two macros with the same MACNAME 4241 unless it has been subject to the `.purgem' directive (*note 4242 Purgem::) between the two definitions. For example, these are all 4243 valid `.macro' statements: 4244 4245 `.macro comm' 4246 Begin the definition of a macro called `comm', which takes no 4247 arguments. 4248 4249 `.macro plus1 p, p1' 4250 `.macro plus1 p p1' 4251 Either statement begins the definition of a macro called 4252 `plus1', which takes two arguments; within the macro 4253 definition, write `\p' or `\p1' to evaluate the arguments. 4254 4255 `.macro reserve_str p1=0 p2' 4256 Begin the definition of a macro called `reserve_str', with two 4257 arguments. The first argument has a default value, but not 4258 the second. After the definition is complete, you can call 4259 the macro either as `reserve_str A,B' (with `\p1' evaluating 4260 to A and `\p2' evaluating to B), or as `reserve_str ,B' (with 4261 `\p1' evaluating as the default, in this case `0', and `\p2' 4262 evaluating to B). 4263 4264 `.macro m p1:req, p2=0, p3:vararg' 4265 Begin the definition of a macro called `m', with at least 4266 three arguments. The first argument must always have a value 4267 specified, but not the second, which instead has a default 4268 value. The third formal will get assigned all remaining 4269 arguments specified at invocation time. 4270 4271 When you call a macro, you can specify the argument values 4272 either by position, or by keyword. For example, `sum 9,17' 4273 is equivalent to `sum to=17, from=9'. 4274 4275 4276 Note that since each of the MACARGS can be an identifier exactly 4277 as any other one permitted by the target architecture, there may be 4278 occasional problems if the target hand-crafts special meanings to 4279 certain characters when they occur in a special position. For 4280 example, if the colon (`:') is generally permitted to be part of a 4281 symbol name, but the architecture specific code special-cases it 4282 when occurring as the final character of a symbol (to denote a 4283 label), then the macro parameter replacement code will have no way 4284 of knowing that and consider the whole construct (including the 4285 colon) an identifier, and check only this identifier for being the 4286 subject to parameter substitution. So for example this macro 4287 definition: 4288 4289 .macro label l 4290 \l: 4291 .endm 4292 4293 might not work as expected. Invoking `label foo' might not create 4294 a label called `foo' but instead just insert the text `\l:' into 4295 the assembler source, probably generating an error about an 4296 unrecognised identifier. 4297 4298 Similarly problems might occur with the period character (`.') 4299 which is often allowed inside opcode names (and hence identifier 4300 names). So for example constructing a macro to build an opcode 4301 from a base name and a length specifier like this: 4302 4303 .macro opcode base length 4304 \base.\length 4305 .endm 4306 4307 and invoking it as `opcode store l' will not create a `store.l' 4308 instruction but instead generate some kind of error as the 4309 assembler tries to interpret the text `\base.\length'. 4310 4311 There are several possible ways around this problem: 4312 4313 `Insert white space' 4314 If it is possible to use white space characters then this is 4315 the simplest solution. eg: 4316 4317 .macro label l 4318 \l : 4319 .endm 4320 4321 `Use `\()'' 4322 The string `\()' can be used to separate the end of a macro 4323 argument from the following text. eg: 4324 4325 .macro opcode base length 4326 \base\().\length 4327 .endm 4328 4329 `Use the alternate macro syntax mode' 4330 In the alternative macro syntax mode the ampersand character 4331 (`&') can be used as a separator. eg: 4332 4333 .altmacro 4334 .macro label l 4335 l&: 4336 .endm 4337 4338 Note: this problem of correctly identifying string parameters to 4339 pseudo ops also applies to the identifiers used in `.irp' (*note 4340 Irp::) and `.irpc' (*note Irpc::) as well. 4341 4342`.endm' 4343 Mark the end of a macro definition. 4344 4345`.exitm' 4346 Exit early from the current macro definition. 4347 4348`\@' 4349 `as' maintains a counter of how many macros it has executed in 4350 this pseudo-variable; you can copy that number to your output with 4351 `\@', but _only within a macro definition_. 4352 4353`LOCAL NAME [ , ... ]' 4354 _Warning: `LOCAL' is only available if you select "alternate macro 4355 syntax" with `--alternate' or `.altmacro'._ *Note `.altmacro': 4356 Altmacro. 4357 4358 4359File: as.info, Node: MRI, Next: Noaltmacro, Prev: Macro, Up: Pseudo Ops 4360 43617.78 `.mri VAL' 4362=============== 4363 4364If VAL is non-zero, this tells `as' to enter MRI mode. If VAL is zero, 4365this tells `as' to exit MRI mode. This change affects code assembled 4366until the next `.mri' directive, or until the end of the file. *Note 4367MRI mode: M. 4368 4369 4370File: as.info, Node: Noaltmacro, Next: Nolist, Prev: MRI, Up: Pseudo Ops 4371 43727.79 `.noaltmacro' 4373================== 4374 4375Disable alternate macro mode. *Note Altmacro::. 4376 4377 4378File: as.info, Node: Nolist, Next: Octa, Prev: Noaltmacro, Up: Pseudo Ops 4379 43807.80 `.nolist' 4381============== 4382 4383Control (in conjunction with the `.list' directive) whether or not 4384assembly listings are generated. These two directives maintain an 4385internal counter (which is zero initially). `.list' increments the 4386counter, and `.nolist' decrements it. Assembly listings are generated 4387whenever the counter is greater than zero. 4388 4389 4390File: as.info, Node: Octa, Next: Org, Prev: Nolist, Up: Pseudo Ops 4391 43927.81 `.octa BIGNUMS' 4393==================== 4394 4395This directive expects zero or more bignums, separated by commas. For 4396each bignum, it emits a 16-byte integer. 4397 4398 The term "octa" comes from contexts in which a "word" is two bytes; 4399hence _octa_-word for 16 bytes. 4400 4401 4402File: as.info, Node: Org, Next: P2align, Prev: Octa, Up: Pseudo Ops 4403 44047.82 `.org NEW-LC , FILL' 4405========================= 4406 4407Advance the location counter of the current section to NEW-LC. NEW-LC 4408is either an absolute expression or an expression with the same section 4409as the current subsection. That is, you can't use `.org' to cross 4410sections: if NEW-LC has the wrong section, the `.org' directive is 4411ignored. To be compatible with former assemblers, if the section of 4412NEW-LC is absolute, `as' issues a warning, then pretends the section of 4413NEW-LC is the same as the current subsection. 4414 4415 `.org' may only increase the location counter, or leave it 4416unchanged; you cannot use `.org' to move the location counter backwards. 4417 4418 Because `as' tries to assemble programs in one pass, NEW-LC may not 4419be undefined. If you really detest this restriction we eagerly await a 4420chance to share your improved assembler. 4421 4422 Beware that the origin is relative to the start of the section, not 4423to the start of the subsection. This is compatible with other people's 4424assemblers. 4425 4426 When the location counter (of the current subsection) is advanced, 4427the intervening bytes are filled with FILL which should be an absolute 4428expression. If the comma and FILL are omitted, FILL defaults to zero. 4429 4430 4431File: as.info, Node: P2align, Next: PopSection, Prev: Org, Up: Pseudo Ops 4432 44337.83 `.p2align[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR' 4434================================================ 4435 4436Pad the location counter (in the current subsection) to a particular 4437storage boundary. The first expression (which must be absolute) is the 4438number of low-order zero bits the location counter must have after 4439advancement. For example `.p2align 3' advances the location counter 4440until it a multiple of 8. If the location counter is already a 4441multiple of 8, no change is needed. 4442 4443 The second expression (also absolute) gives the fill value to be 4444stored in the padding bytes. It (and the comma) may be omitted. If it 4445is omitted, the padding bytes are normally zero. However, on some 4446systems, if the section is marked as containing code and the fill value 4447is omitted, the space is filled with no-op instructions. 4448 4449 The third expression is also absolute, and is also optional. If it 4450is present, it is the maximum number of bytes that should be skipped by 4451this alignment directive. If doing the alignment would require 4452skipping more bytes than the specified maximum, then the alignment is 4453not done at all. You can omit the fill value (the second argument) 4454entirely by simply using two commas after the required alignment; this 4455can be useful if you want the alignment to be filled with no-op 4456instructions when appropriate. 4457 4458 The `.p2alignw' and `.p2alignl' directives are variants of the 4459`.p2align' directive. The `.p2alignw' directive treats the fill 4460pattern as a two byte word value. The `.p2alignl' directives treats the 4461fill pattern as a four byte longword value. For example, `.p2alignw 44622,0x368d' will align to a multiple of 4. If it skips two bytes, they 4463will be filled in with the value 0x368d (the exact placement of the 4464bytes depends upon the endianness of the processor). If it skips 1 or 44653 bytes, the fill value is undefined. 4466 4467 4468File: as.info, Node: PopSection, Next: Previous, Prev: P2align, Up: Pseudo Ops 4469 44707.84 `.popsection' 4471================== 4472 4473This is one of the ELF section stack manipulation directives. The 4474others are `.section' (*note Section::), `.subsection' (*note 4475SubSection::), `.pushsection' (*note PushSection::), and `.previous' 4476(*note Previous::). 4477 4478 This directive replaces the current section (and subsection) with 4479the top section (and subsection) on the section stack. This section is 4480popped off the stack. 4481 4482 4483File: as.info, Node: Previous, Next: Print, Prev: PopSection, Up: Pseudo Ops 4484 44857.85 `.previous' 4486================ 4487 4488This is one of the ELF section stack manipulation directives. The 4489others are `.section' (*note Section::), `.subsection' (*note 4490SubSection::), `.pushsection' (*note PushSection::), and `.popsection' 4491(*note PopSection::). 4492 4493 This directive swaps the current section (and subsection) with most 4494recently referenced section/subsection pair prior to this one. Multiple 4495`.previous' directives in a row will flip between two sections (and 4496their subsections). For example: 4497 4498 .section A 4499 .subsection 1 4500 .word 0x1234 4501 .subsection 2 4502 .word 0x5678 4503 .previous 4504 .word 0x9abc 4505 4506 Will place 0x1234 and 0x9abc into subsection 1 and 0x5678 into 4507subsection 2 of section A. Whilst: 4508 4509 .section A 4510 .subsection 1 4511 # Now in section A subsection 1 4512 .word 0x1234 4513 .section B 4514 .subsection 0 4515 # Now in section B subsection 0 4516 .word 0x5678 4517 .subsection 1 4518 # Now in section B subsection 1 4519 .word 0x9abc 4520 .previous 4521 # Now in section B subsection 0 4522 .word 0xdef0 4523 4524 Will place 0x1234 into section A, 0x5678 and 0xdef0 into subsection 45250 of section B and 0x9abc into subsection 1 of section B. 4526 4527 In terms of the section stack, this directive swaps the current 4528section with the top section on the section stack. 4529 4530 4531File: as.info, Node: Print, Next: Protected, Prev: Previous, Up: Pseudo Ops 4532 45337.86 `.print STRING' 4534==================== 4535 4536`as' will print STRING on the standard output during assembly. You 4537must put STRING in double quotes. 4538 4539 4540File: as.info, Node: Protected, Next: Psize, Prev: Print, Up: Pseudo Ops 4541 45427.87 `.protected NAMES' 4543======================= 4544 4545This is one of the ELF visibility directives. The other two are 4546`.hidden' (*note Hidden::) and `.internal' (*note Internal::). 4547 4548 This directive overrides the named symbols default visibility (which 4549is set by their binding: local, global or weak). The directive sets 4550the visibility to `protected' which means that any references to the 4551symbols from within the components that defines them must be resolved 4552to the definition in that component, even if a definition in another 4553component would normally preempt this. 4554 4555 4556File: as.info, Node: Psize, Next: Purgem, Prev: Protected, Up: Pseudo Ops 4557 45587.88 `.psize LINES , COLUMNS' 4559============================= 4560 4561Use this directive to declare the number of lines--and, optionally, the 4562number of columns--to use for each page, when generating listings. 4563 4564 If you do not use `.psize', listings use a default line-count of 60. 4565You may omit the comma and COLUMNS specification; the default width is 4566200 columns. 4567 4568 `as' generates formfeeds whenever the specified number of lines is 4569exceeded (or whenever you explicitly request one, using `.eject'). 4570 4571 If you specify LINES as `0', no formfeeds are generated save those 4572explicitly specified with `.eject'. 4573 4574 4575File: as.info, Node: Purgem, Next: PushSection, Prev: Psize, Up: Pseudo Ops 4576 45777.89 `.purgem NAME' 4578=================== 4579 4580Undefine the macro NAME, so that later uses of the string will not be 4581expanded. *Note Macro::. 4582 4583 4584File: as.info, Node: PushSection, Next: Quad, Prev: Purgem, Up: Pseudo Ops 4585 45867.90 `.pushsection NAME [, SUBSECTION] [, "FLAGS"[, @TYPE[,ARGUMENTS]]]' 4587======================================================================== 4588 4589This is one of the ELF section stack manipulation directives. The 4590others are `.section' (*note Section::), `.subsection' (*note 4591SubSection::), `.popsection' (*note PopSection::), and `.previous' 4592(*note Previous::). 4593 4594 This directive pushes the current section (and subsection) onto the 4595top of the section stack, and then replaces the current section and 4596subsection with `name' and `subsection'. The optional `flags', `type' 4597and `arguments' are treated the same as in the `.section' (*note 4598Section::) directive. 4599 4600 4601File: as.info, Node: Quad, Next: Reloc, Prev: PushSection, Up: Pseudo Ops 4602 46037.91 `.quad BIGNUMS' 4604==================== 4605 4606`.quad' expects zero or more bignums, separated by commas. For each 4607bignum, it emits an 8-byte integer. If the bignum won't fit in 8 4608bytes, it prints a warning message; and just takes the lowest order 8 4609bytes of the bignum. 4610 4611 The term "quad" comes from contexts in which a "word" is two bytes; 4612hence _quad_-word for 8 bytes. 4613 4614 4615File: as.info, Node: Reloc, Next: Rept, Prev: Quad, Up: Pseudo Ops 4616 46177.92 `.reloc OFFSET, RELOC_NAME[, EXPRESSION]' 4618============================================== 4619 4620Generate a relocation at OFFSET of type RELOC_NAME with value 4621EXPRESSION. If OFFSET is a number, the relocation is generated in the 4622current section. If OFFSET is an expression that resolves to a symbol 4623plus offset, the relocation is generated in the given symbol's section. 4624EXPRESSION, if present, must resolve to a symbol plus addend or to an 4625absolute value, but note that not all targets support an addend. e.g. 4626ELF REL targets such as i386 store an addend in the section contents 4627rather than in the relocation. This low level interface does not 4628support addends stored in the section. 4629 4630 4631File: as.info, Node: Rept, Next: Sbttl, Prev: Reloc, Up: Pseudo Ops 4632 46337.93 `.rept COUNT' 4634================== 4635 4636Repeat the sequence of lines between the `.rept' directive and the next 4637`.endr' directive COUNT times. 4638 4639 For example, assembling 4640 4641 .rept 3 4642 .long 0 4643 .endr 4644 4645 is equivalent to assembling 4646 4647 .long 0 4648 .long 0 4649 .long 0 4650 4651 4652File: as.info, Node: Sbttl, Next: Scl, Prev: Rept, Up: Pseudo Ops 4653 46547.94 `.sbttl "SUBHEADING"' 4655========================== 4656 4657Use SUBHEADING as the title (third line, immediately after the title 4658line) when generating assembly listings. 4659 4660 This directive affects subsequent pages, as well as the current page 4661if it appears within ten lines of the top of a page. 4662 4663 4664File: as.info, Node: Scl, Next: Section, Prev: Sbttl, Up: Pseudo Ops 4665 46667.95 `.scl CLASS' 4667================= 4668 4669Set the storage-class value for a symbol. This directive may only be 4670used inside a `.def'/`.endef' pair. Storage class may flag whether a 4671symbol is static or external, or it may record further symbolic 4672debugging information. 4673 4674 4675File: as.info, Node: Section, Next: Set, Prev: Scl, Up: Pseudo Ops 4676 46777.96 `.section NAME' 4678==================== 4679 4680Use the `.section' directive to assemble the following code into a 4681section named NAME. 4682 4683 This directive is only supported for targets that actually support 4684arbitrarily named sections; on `a.out' targets, for example, it is not 4685accepted, even with a standard `a.out' section name. 4686 4687COFF Version 4688------------ 4689 4690 For COFF targets, the `.section' directive is used in one of the 4691following ways: 4692 4693 .section NAME[, "FLAGS"] 4694 .section NAME[, SUBSECTION] 4695 4696 If the optional argument is quoted, it is taken as flags to use for 4697the section. Each flag is a single character. The following flags are 4698recognized: 4699`b' 4700 bss section (uninitialized data) 4701 4702`n' 4703 section is not loaded 4704 4705`w' 4706 writable section 4707 4708`d' 4709 data section 4710 4711`r' 4712 read-only section 4713 4714`x' 4715 executable section 4716 4717`s' 4718 shared section (meaningful for PE targets) 4719 4720`a' 4721 ignored. (For compatibility with the ELF version) 4722 4723`y' 4724 section is not readable (meaningful for PE targets) 4725 4726`0-9' 4727 single-digit power-of-two section alignment (GNU extension) 4728 4729 If no flags are specified, the default flags depend upon the section 4730name. If the section name is not recognized, the default will be for 4731the section to be loaded and writable. Note the `n' and `w' flags 4732remove attributes from the section, rather than adding them, so if they 4733are used on their own it will be as if no flags had been specified at 4734all. 4735 4736 If the optional argument to the `.section' directive is not quoted, 4737it is taken as a subsection number (*note Sub-Sections::). 4738 4739ELF Version 4740----------- 4741 4742 This is one of the ELF section stack manipulation directives. The 4743others are `.subsection' (*note SubSection::), `.pushsection' (*note 4744PushSection::), `.popsection' (*note PopSection::), and `.previous' 4745(*note Previous::). 4746 4747 For ELF targets, the `.section' directive is used like this: 4748 4749 .section NAME [, "FLAGS"[, @TYPE[,FLAG_SPECIFIC_ARGUMENTS]]] 4750 4751 The optional FLAGS argument is a quoted string which may contain any 4752combination of the following characters: 4753`a' 4754 section is allocatable 4755 4756`e' 4757 section is excluded from executable and shared library. 4758 4759`w' 4760 section is writable 4761 4762`x' 4763 section is executable 4764 4765`M' 4766 section is mergeable 4767 4768`S' 4769 section contains zero terminated strings 4770 4771`G' 4772 section is a member of a section group 4773 4774`T' 4775 section is used for thread-local-storage 4776 4777`?' 4778 section is a member of the previously-current section's group, if 4779 any 4780 4781 The optional TYPE argument may contain one of the following 4782constants: 4783`@progbits' 4784 section contains data 4785 4786`@nobits' 4787 section does not contain data (i.e., section only occupies space) 4788 4789`@note' 4790 section contains data which is used by things other than the 4791 program 4792 4793`@init_array' 4794 section contains an array of pointers to init functions 4795 4796`@fini_array' 4797 section contains an array of pointers to finish functions 4798 4799`@preinit_array' 4800 section contains an array of pointers to pre-init functions 4801 4802 Many targets only support the first three section types. 4803 4804 Note on targets where the `@' character is the start of a comment (eg 4805ARM) then another character is used instead. For example the ARM port 4806uses the `%' character. 4807 4808 If FLAGS contains the `M' symbol then the TYPE argument must be 4809specified as well as an extra argument--ENTSIZE--like this: 4810 4811 .section NAME , "FLAGS"M, @TYPE, ENTSIZE 4812 4813 Sections with the `M' flag but not `S' flag must contain fixed size 4814constants, each ENTSIZE octets long. Sections with both `M' and `S' 4815must contain zero terminated strings where each character is ENTSIZE 4816bytes long. The linker may remove duplicates within sections with the 4817same name, same entity size and same flags. ENTSIZE must be an 4818absolute expression. For sections with both `M' and `S', a string 4819which is a suffix of a larger string is considered a duplicate. Thus 4820`"def"' will be merged with `"abcdef"'; A reference to the first 4821`"def"' will be changed to a reference to `"abcdef"+3'. 4822 4823 If FLAGS contains the `G' symbol then the TYPE argument must be 4824present along with an additional field like this: 4825 4826 .section NAME , "FLAGS"G, @TYPE, GROUPNAME[, LINKAGE] 4827 4828 The GROUPNAME field specifies the name of the section group to which 4829this particular section belongs. The optional linkage field can 4830contain: 4831`comdat' 4832 indicates that only one copy of this section should be retained 4833 4834`.gnu.linkonce' 4835 an alias for comdat 4836 4837 Note: if both the M and G flags are present then the fields for the 4838Merge flag should come first, like this: 4839 4840 .section NAME , "FLAGS"MG, @TYPE, ENTSIZE, GROUPNAME[, LINKAGE] 4841 4842 If FLAGS contains the `?' symbol then it may not also contain the 4843`G' symbol and the GROUPNAME or LINKAGE fields should not be present. 4844Instead, `?' says to consider the section that's current before this 4845directive. If that section used `G', then the new section will use `G' 4846with those same GROUPNAME and LINKAGE fields implicitly. If not, then 4847the `?' symbol has no effect. 4848 4849 If no flags are specified, the default flags depend upon the section 4850name. If the section name is not recognized, the default will be for 4851the section to have none of the above flags: it will not be allocated 4852in memory, nor writable, nor executable. The section will contain data. 4853 4854 For ELF targets, the assembler supports another type of `.section' 4855directive for compatibility with the Solaris assembler: 4856 4857 .section "NAME"[, FLAGS...] 4858 4859 Note that the section name is quoted. There may be a sequence of 4860comma separated flags: 4861`#alloc' 4862 section is allocatable 4863 4864`#write' 4865 section is writable 4866 4867`#execinstr' 4868 section is executable 4869 4870`#exclude' 4871 section is excluded from executable and shared library. 4872 4873`#tls' 4874 section is used for thread local storage 4875 4876 This directive replaces the current section and subsection. See the 4877contents of the gas testsuite directory `gas/testsuite/gas/elf' for 4878some examples of how this directive and the other section stack 4879directives work. 4880 4881 4882File: as.info, Node: Set, Next: Short, Prev: Section, Up: Pseudo Ops 4883 48847.97 `.set SYMBOL, EXPRESSION' 4885============================== 4886 4887Set the value of SYMBOL to EXPRESSION. This changes SYMBOL's value and 4888type to conform to EXPRESSION. If SYMBOL was flagged as external, it 4889remains flagged (*note Symbol Attributes::). 4890 4891 You may `.set' a symbol many times in the same assembly. 4892 4893 If you `.set' a global symbol, the value stored in the object file 4894is the last value stored into it. 4895 4896 On Z80 `set' is a real instruction, use `SYMBOL defl EXPRESSION' 4897instead. 4898 4899 4900File: as.info, Node: Short, Next: Single, Prev: Set, Up: Pseudo Ops 4901 49027.98 `.short EXPRESSIONS' 4903========================= 4904 4905`.short' is normally the same as `.word'. *Note `.word': Word. 4906 4907 In some configurations, however, `.short' and `.word' generate 4908numbers of different lengths. *Note Machine Dependencies::. 4909 4910 4911File: as.info, Node: Single, Next: Size, Prev: Short, Up: Pseudo Ops 4912 49137.99 `.single FLONUMS' 4914====================== 4915 4916This directive assembles zero or more flonums, separated by commas. It 4917has the same effect as `.float'. The exact kind of floating point 4918numbers emitted depends on how `as' is configured. *Note Machine 4919Dependencies::. 4920 4921 4922File: as.info, Node: Size, Next: Skip, Prev: Single, Up: Pseudo Ops 4923 49247.100 `.size' 4925============= 4926 4927This directive is used to set the size associated with a symbol. 4928 4929COFF Version 4930------------ 4931 4932 For COFF targets, the `.size' directive is only permitted inside 4933`.def'/`.endef' pairs. It is used like this: 4934 4935 .size EXPRESSION 4936 4937ELF Version 4938----------- 4939 4940 For ELF targets, the `.size' directive is used like this: 4941 4942 .size NAME , EXPRESSION 4943 4944 This directive sets the size associated with a symbol NAME. The 4945size in bytes is computed from EXPRESSION which can make use of label 4946arithmetic. This directive is typically used to set the size of 4947function symbols. 4948 4949 4950File: as.info, Node: Skip, Next: Sleb128, Prev: Size, Up: Pseudo Ops 4951 49527.101 `.skip SIZE , FILL' 4953========================= 4954 4955This directive emits SIZE bytes, each of value FILL. Both SIZE and 4956FILL are absolute expressions. If the comma and FILL are omitted, FILL 4957is assumed to be zero. This is the same as `.space'. 4958 4959 4960File: as.info, Node: Sleb128, Next: Space, Prev: Skip, Up: Pseudo Ops 4961 49627.102 `.sleb128 EXPRESSIONS' 4963============================ 4964 4965SLEB128 stands for "signed little endian base 128." This is a compact, 4966variable length representation of numbers used by the DWARF symbolic 4967debugging format. *Note `.uleb128': Uleb128. 4968 4969 4970File: as.info, Node: Space, Next: Stab, Prev: Sleb128, Up: Pseudo Ops 4971 49727.103 `.space SIZE , FILL' 4973========================== 4974 4975This directive emits SIZE bytes, each of value FILL. Both SIZE and 4976FILL are absolute expressions. If the comma and FILL are omitted, FILL 4977is assumed to be zero. This is the same as `.skip'. 4978 4979 _Warning:_ `.space' has a completely different meaning for HPPA 4980 targets; use `.block' as a substitute. See `HP9000 Series 800 4981 Assembly Language Reference Manual' (HP 92432-90001) for the 4982 meaning of the `.space' directive. *Note HPPA Assembler 4983 Directives: HPPA Directives, for a summary. 4984 4985 4986File: as.info, Node: Stab, Next: String, Prev: Space, Up: Pseudo Ops 4987 49887.104 `.stabd, .stabn, .stabs' 4989============================== 4990 4991There are three directives that begin `.stab'. All emit symbols (*note 4992Symbols::), for use by symbolic debuggers. The symbols are not entered 4993in the `as' hash table: they cannot be referenced elsewhere in the 4994source file. Up to five fields are required: 4995 4996STRING 4997 This is the symbol's name. It may contain any character except 4998 `\000', so is more general than ordinary symbol names. Some 4999 debuggers used to code arbitrarily complex structures into symbol 5000 names using this field. 5001 5002TYPE 5003 An absolute expression. The symbol's type is set to the low 8 5004 bits of this expression. Any bit pattern is permitted, but `ld' 5005 and debuggers choke on silly bit patterns. 5006 5007OTHER 5008 An absolute expression. The symbol's "other" attribute is set to 5009 the low 8 bits of this expression. 5010 5011DESC 5012 An absolute expression. The symbol's descriptor is set to the low 5013 16 bits of this expression. 5014 5015VALUE 5016 An absolute expression which becomes the symbol's value. 5017 5018 If a warning is detected while reading a `.stabd', `.stabn', or 5019`.stabs' statement, the symbol has probably already been created; you 5020get a half-formed symbol in your object file. This is compatible with 5021earlier assemblers! 5022 5023`.stabd TYPE , OTHER , DESC' 5024 The "name" of the symbol generated is not even an empty string. 5025 It is a null pointer, for compatibility. Older assemblers used a 5026 null pointer so they didn't waste space in object files with empty 5027 strings. 5028 5029 The symbol's value is set to the location counter, relocatably. 5030 When your program is linked, the value of this symbol is the 5031 address of the location counter when the `.stabd' was assembled. 5032 5033`.stabn TYPE , OTHER , DESC , VALUE' 5034 The name of the symbol is set to the empty string `""'. 5035 5036`.stabs STRING , TYPE , OTHER , DESC , VALUE' 5037 All five fields are specified. 5038 5039 5040File: as.info, Node: String, Next: Struct, Prev: Stab, Up: Pseudo Ops 5041 50427.105 `.string' "STR", `.string8' "STR", `.string16' 5043==================================================== 5044 5045"STR", `.string32' "STR", `.string64' "STR" 5046 5047 Copy the characters in STR to the object file. You may specify more 5048than one string to copy, separated by commas. Unless otherwise 5049specified for a particular machine, the assembler marks the end of each 5050string with a 0 byte. You can use any of the escape sequences 5051described in *Note Strings: Strings. 5052 5053 The variants `string16', `string32' and `string64' differ from the 5054`string' pseudo opcode in that each 8-bit character from STR is copied 5055and expanded to 16, 32 or 64 bits respectively. The expanded characters 5056are stored in target endianness byte order. 5057 5058 Example: 5059 .string32 "BYE" 5060 expands to: 5061 .string "B\0\0\0Y\0\0\0E\0\0\0" /* On little endian targets. */ 5062 .string "\0\0\0B\0\0\0Y\0\0\0E" /* On big endian targets. */ 5063 5064 5065File: as.info, Node: Struct, Next: SubSection, Prev: String, Up: Pseudo Ops 5066 50677.106 `.struct EXPRESSION' 5068========================== 5069 5070Switch to the absolute section, and set the section offset to 5071EXPRESSION, which must be an absolute expression. You might use this 5072as follows: 5073 .struct 0 5074 field1: 5075 .struct field1 + 4 5076 field2: 5077 .struct field2 + 4 5078 field3: 5079 This would define the symbol `field1' to have the value 0, the symbol 5080`field2' to have the value 4, and the symbol `field3' to have the value 50818. Assembly would be left in the absolute section, and you would need 5082to use a `.section' directive of some sort to change to some other 5083section before further assembly. 5084 5085 5086File: as.info, Node: SubSection, Next: Symver, Prev: Struct, Up: Pseudo Ops 5087 50887.107 `.subsection NAME' 5089======================== 5090 5091This is one of the ELF section stack manipulation directives. The 5092others are `.section' (*note Section::), `.pushsection' (*note 5093PushSection::), `.popsection' (*note PopSection::), and `.previous' 5094(*note Previous::). 5095 5096 This directive replaces the current subsection with `name'. The 5097current section is not changed. The replaced subsection is put onto 5098the section stack in place of the then current top of stack subsection. 5099 5100 5101File: as.info, Node: Symver, Next: Tag, Prev: SubSection, Up: Pseudo Ops 5102 51037.108 `.symver' 5104=============== 5105 5106Use the `.symver' directive to bind symbols to specific version nodes 5107within a source file. This is only supported on ELF platforms, and is 5108typically used when assembling files to be linked into a shared library. 5109There are cases where it may make sense to use this in objects to be 5110bound into an application itself so as to override a versioned symbol 5111from a shared library. 5112 5113 For ELF targets, the `.symver' directive can be used like this: 5114 .symver NAME, NAME2@NODENAME 5115 If the symbol NAME is defined within the file being assembled, the 5116`.symver' directive effectively creates a symbol alias with the name 5117NAME2@NODENAME, and in fact the main reason that we just don't try and 5118create a regular alias is that the @ character isn't permitted in 5119symbol names. The NAME2 part of the name is the actual name of the 5120symbol by which it will be externally referenced. The name NAME itself 5121is merely a name of convenience that is used so that it is possible to 5122have definitions for multiple versions of a function within a single 5123source file, and so that the compiler can unambiguously know which 5124version of a function is being mentioned. The NODENAME portion of the 5125alias should be the name of a node specified in the version script 5126supplied to the linker when building a shared library. If you are 5127attempting to override a versioned symbol from a shared library, then 5128NODENAME should correspond to the nodename of the symbol you are trying 5129to override. 5130 5131 If the symbol NAME is not defined within the file being assembled, 5132all references to NAME will be changed to NAME2@NODENAME. If no 5133reference to NAME is made, NAME2@NODENAME will be removed from the 5134symbol table. 5135 5136 Another usage of the `.symver' directive is: 5137 .symver NAME, NAME2@@NODENAME 5138 In this case, the symbol NAME must exist and be defined within the 5139file being assembled. It is similar to NAME2@NODENAME. The difference 5140is NAME2@@NODENAME will also be used to resolve references to NAME2 by 5141the linker. 5142 5143 The third usage of the `.symver' directive is: 5144 .symver NAME, NAME2@@@NODENAME 5145 When NAME is not defined within the file being assembled, it is 5146treated as NAME2@NODENAME. When NAME is defined within the file being 5147assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME. 5148 5149 5150File: as.info, Node: Tag, Next: Text, Prev: Symver, Up: Pseudo Ops 5151 51527.109 `.tag STRUCTNAME' 5153======================= 5154 5155This directive is generated by compilers to include auxiliary debugging 5156information in the symbol table. It is only permitted inside 5157`.def'/`.endef' pairs. Tags are used to link structure definitions in 5158the symbol table with instances of those structures. 5159 5160 5161File: as.info, Node: Text, Next: Title, Prev: Tag, Up: Pseudo Ops 5162 51637.110 `.text SUBSECTION' 5164======================== 5165 5166Tells `as' to assemble the following statements onto the end of the 5167text subsection numbered SUBSECTION, which is an absolute expression. 5168If SUBSECTION is omitted, subsection number zero is used. 5169 5170 5171File: as.info, Node: Title, Next: Type, Prev: Text, Up: Pseudo Ops 5172 51737.111 `.title "HEADING"' 5174======================== 5175 5176Use HEADING as the title (second line, immediately after the source 5177file name and pagenumber) when generating assembly listings. 5178 5179 This directive affects subsequent pages, as well as the current page 5180if it appears within ten lines of the top of a page. 5181 5182 5183File: as.info, Node: Type, Next: Uleb128, Prev: Title, Up: Pseudo Ops 5184 51857.112 `.type' 5186============= 5187 5188This directive is used to set the type of a symbol. 5189 5190COFF Version 5191------------ 5192 5193 For COFF targets, this directive is permitted only within 5194`.def'/`.endef' pairs. It is used like this: 5195 5196 .type INT 5197 5198 This records the integer INT as the type attribute of a symbol table 5199entry. 5200 5201ELF Version 5202----------- 5203 5204 For ELF targets, the `.type' directive is used like this: 5205 5206 .type NAME , TYPE DESCRIPTION 5207 5208 This sets the type of symbol NAME to be either a function symbol or 5209an object symbol. There are five different syntaxes supported for the 5210TYPE DESCRIPTION field, in order to provide compatibility with various 5211other assemblers. 5212 5213 Because some of the characters used in these syntaxes (such as `@' 5214and `#') are comment characters for some architectures, some of the 5215syntaxes below do not work on all architectures. The first variant 5216will be accepted by the GNU assembler on all architectures so that 5217variant should be used for maximum portability, if you do not need to 5218assemble your code with other assemblers. 5219 5220 The syntaxes supported are: 5221 5222 .type <name> STT_<TYPE_IN_UPPER_CASE> 5223 .type <name>,#<type> 5224 .type <name>,@<type> 5225 .type <name>,%<type> 5226 .type <name>,"<type>" 5227 5228 The types supported are: 5229 5230`STT_FUNC' 5231`function' 5232 Mark the symbol as being a function name. 5233 5234`STT_GNU_IFUNC' 5235`gnu_indirect_function' 5236 Mark the symbol as an indirect function when evaluated during reloc 5237 processing. (This is only supported on Linux targeted assemblers). 5238 5239`STT_OBJECT' 5240`object' 5241 Mark the symbol as being a data object. 5242 5243`STT_TLS' 5244`tls_object' 5245 Mark the symbol as being a thead-local data object. 5246 5247`STT_COMMON' 5248`common' 5249 Mark the symbol as being a common data object. 5250 5251`STT_NOTYPE' 5252`notype' 5253 Does not mark the symbol in any way. It is supported just for 5254 completeness. 5255 5256`gnu_unique_object' 5257 Marks the symbol as being a globally unique data object. The 5258 dynamic linker will make sure that in the entire process there is 5259 just one symbol with this name and type in use. (This is only 5260 supported on Linux targeted assemblers). 5261 5262 5263 Note: Some targets support extra types in addition to those listed 5264above. 5265 5266 5267File: as.info, Node: Uleb128, Next: Val, Prev: Type, Up: Pseudo Ops 5268 52697.113 `.uleb128 EXPRESSIONS' 5270============================ 5271 5272ULEB128 stands for "unsigned little endian base 128." This is a 5273compact, variable length representation of numbers used by the DWARF 5274symbolic debugging format. *Note `.sleb128': Sleb128. 5275 5276 5277File: as.info, Node: Val, Next: Version, Prev: Uleb128, Up: Pseudo Ops 5278 52797.114 `.val ADDR' 5280================= 5281 5282This directive, permitted only within `.def'/`.endef' pairs, records 5283the address ADDR as the value attribute of a symbol table entry. 5284 5285 5286File: as.info, Node: Version, Next: VTableEntry, Prev: Val, Up: Pseudo Ops 5287 52887.115 `.version "STRING"' 5289========================= 5290 5291This directive creates a `.note' section and places into it an ELF 5292formatted note of type NT_VERSION. The note's name is set to `string'. 5293 5294 5295File: as.info, Node: VTableEntry, Next: VTableInherit, Prev: Version, Up: Pseudo Ops 5296 52977.116 `.vtable_entry TABLE, OFFSET' 5298=================================== 5299 5300This directive finds or creates a symbol `table' and creates a 5301`VTABLE_ENTRY' relocation for it with an addend of `offset'. 5302 5303 5304File: as.info, Node: VTableInherit, Next: Warning, Prev: VTableEntry, Up: Pseudo Ops 5305 53067.117 `.vtable_inherit CHILD, PARENT' 5307===================================== 5308 5309This directive finds the symbol `child' and finds or creates the symbol 5310`parent' and then creates a `VTABLE_INHERIT' relocation for the parent 5311whose addend is the value of the child symbol. As a special case the 5312parent name of `0' is treated as referring to the `*ABS*' section. 5313 5314 5315File: as.info, Node: Warning, Next: Weak, Prev: VTableInherit, Up: Pseudo Ops 5316 53177.118 `.warning "STRING"' 5318========================= 5319 5320Similar to the directive `.error' (*note `.error "STRING"': Error.), 5321but just emits a warning. 5322 5323 5324File: as.info, Node: Weak, Next: Weakref, Prev: Warning, Up: Pseudo Ops 5325 53267.119 `.weak NAMES' 5327=================== 5328 5329This directive sets the weak attribute on the comma separated list of 5330symbol `names'. If the symbols do not already exist, they will be 5331created. 5332 5333 On COFF targets other than PE, weak symbols are a GNU extension. 5334This directive sets the weak attribute on the comma separated list of 5335symbol `names'. If the symbols do not already exist, they will be 5336created. 5337 5338 On the PE target, weak symbols are supported natively as weak 5339aliases. When a weak symbol is created that is not an alias, GAS 5340creates an alternate symbol to hold the default value. 5341 5342 5343File: as.info, Node: Weakref, Next: Word, Prev: Weak, Up: Pseudo Ops 5344 53457.120 `.weakref ALIAS, TARGET' 5346============================== 5347 5348This directive creates an alias to the target symbol that enables the 5349symbol to be referenced with weak-symbol semantics, but without 5350actually making it weak. If direct references or definitions of the 5351symbol are present, then the symbol will not be weak, but if all 5352references to it are through weak references, the symbol will be marked 5353as weak in the symbol table. 5354 5355 The effect is equivalent to moving all references to the alias to a 5356separate assembly source file, renaming the alias to the symbol in it, 5357declaring the symbol as weak there, and running a reloadable link to 5358merge the object files resulting from the assembly of the new source 5359file and the old source file that had the references to the alias 5360removed. 5361 5362 The alias itself never makes to the symbol table, and is entirely 5363handled within the assembler. 5364 5365 5366File: as.info, Node: Word, Next: Deprecated, Prev: Weakref, Up: Pseudo Ops 5367 53687.121 `.word EXPRESSIONS' 5369========================= 5370 5371This directive expects zero or more EXPRESSIONS, of any section, 5372separated by commas. 5373 5374 The size of the number emitted, and its byte order, depend on what 5375target computer the assembly is for. 5376 5377 _Warning: Special Treatment to support Compilers_ 5378 5379 Machines with a 32-bit address space, but that do less than 32-bit 5380addressing, require the following special treatment. If the machine of 5381interest to you does 32-bit addressing (or doesn't require it; *note 5382Machine Dependencies::), you can ignore this issue. 5383 5384 In order to assemble compiler output into something that works, `as' 5385occasionally does strange things to `.word' directives. Directives of 5386the form `.word sym1-sym2' are often emitted by compilers as part of 5387jump tables. Therefore, when `as' assembles a directive of the form 5388`.word sym1-sym2', and the difference between `sym1' and `sym2' does 5389not fit in 16 bits, `as' creates a "secondary jump table", immediately 5390before the next label. This secondary jump table is preceded by a 5391short-jump to the first byte after the secondary table. This 5392short-jump prevents the flow of control from accidentally falling into 5393the new table. Inside the table is a long-jump to `sym2'. The 5394original `.word' contains `sym1' minus the address of the long-jump to 5395`sym2'. 5396 5397 If there were several occurrences of `.word sym1-sym2' before the 5398secondary jump table, all of them are adjusted. If there was a `.word 5399sym3-sym4', that also did not fit in sixteen bits, a long-jump to 5400`sym4' is included in the secondary jump table, and the `.word' 5401directives are adjusted to contain `sym3' minus the address of the 5402long-jump to `sym4'; and so on, for as many entries in the original 5403jump table as necessary. 5404 5405 5406File: as.info, Node: Deprecated, Prev: Word, Up: Pseudo Ops 5407 54087.122 Deprecated Directives 5409=========================== 5410 5411One day these directives won't work. They are included for 5412compatibility with older assemblers. 5413.abort 5414 5415.line 5416 5417 5418File: as.info, Node: Object Attributes, Next: Machine Dependencies, Prev: Pseudo Ops, Up: Top 5419 54208 Object Attributes 5421******************* 5422 5423`as' assembles source files written for a specific architecture into 5424object files for that architecture. But not all object files are alike. 5425Many architectures support incompatible variations. For instance, 5426floating point arguments might be passed in floating point registers if 5427the object file requires hardware floating point support--or floating 5428point arguments might be passed in integer registers if the object file 5429supports processors with no hardware floating point unit. Or, if two 5430objects are built for different generations of the same architecture, 5431the combination may require the newer generation at run-time. 5432 5433 This information is useful during and after linking. At link time, 5434`ld' can warn about incompatible object files. After link time, tools 5435like `gdb' can use it to process the linked file correctly. 5436 5437 Compatibility information is recorded as a series of object 5438attributes. Each attribute has a "vendor", "tag", and "value". The 5439vendor is a string, and indicates who sets the meaning of the tag. The 5440tag is an integer, and indicates what property the attribute describes. 5441The value may be a string or an integer, and indicates how the 5442property affects this object. Missing attributes are the same as 5443attributes with a zero value or empty string value. 5444 5445 Object attributes were developed as part of the ABI for the ARM 5446Architecture. The file format is documented in `ELF for the ARM 5447Architecture'. 5448 5449* Menu: 5450 5451* GNU Object Attributes:: GNU Object Attributes 5452* Defining New Object Attributes:: Defining New Object Attributes 5453 5454 5455File: as.info, Node: GNU Object Attributes, Next: Defining New Object Attributes, Up: Object Attributes 5456 54578.1 GNU Object Attributes 5458========================= 5459 5460The `.gnu_attribute' directive records an object attribute with vendor 5461`gnu'. 5462 5463 Except for `Tag_compatibility', which has both an integer and a 5464string for its value, GNU attributes have a string value if the tag 5465number is odd and an integer value if the tag number is even. The 5466second bit (`TAG & 2' is set for architecture-independent attributes 5467and clear for architecture-dependent ones. 5468 54698.1.1 Common GNU attributes 5470--------------------------- 5471 5472These attributes are valid on all architectures. 5473 5474Tag_compatibility (32) 5475 The compatibility attribute takes an integer flag value and a 5476 vendor name. If the flag value is 0, the file is compatible with 5477 other toolchains. If it is 1, then the file is only compatible 5478 with the named toolchain. If it is greater than 1, the file can 5479 only be processed by other toolchains under some private 5480 arrangement indicated by the flag value and the vendor name. 5481 54828.1.2 MIPS Attributes 5483--------------------- 5484 5485Tag_GNU_MIPS_ABI_FP (4) 5486 The floating-point ABI used by this object file. The value will 5487 be: 5488 5489 * 0 for files not affected by the floating-point ABI. 5490 5491 * 1 for files using the hardware floating-point with a standard 5492 double-precision FPU. 5493 5494 * 2 for files using the hardware floating-point ABI with a 5495 single-precision FPU. 5496 5497 * 3 for files using the software floating-point ABI. 5498 5499 * 4 for files using the hardware floating-point ABI with 64-bit 5500 wide double-precision floating-point registers and 32-bit 5501 wide general purpose registers. 5502 55038.1.3 PowerPC Attributes 5504------------------------ 5505 5506Tag_GNU_Power_ABI_FP (4) 5507 The floating-point ABI used by this object file. The value will 5508 be: 5509 5510 * 0 for files not affected by the floating-point ABI. 5511 5512 * 1 for files using double-precision hardware floating-point 5513 ABI. 5514 5515 * 2 for files using the software floating-point ABI. 5516 5517 * 3 for files using single-precision hardware floating-point 5518 ABI. 5519 5520Tag_GNU_Power_ABI_Vector (8) 5521 The vector ABI used by this object file. The value will be: 5522 5523 * 0 for files not affected by the vector ABI. 5524 5525 * 1 for files using general purpose registers to pass vectors. 5526 5527 * 2 for files using AltiVec registers to pass vectors. 5528 5529 * 3 for files using SPE registers to pass vectors. 5530 5531 5532File: as.info, Node: Defining New Object Attributes, Prev: GNU Object Attributes, Up: Object Attributes 5533 55348.2 Defining New Object Attributes 5535================================== 5536 5537If you want to define a new GNU object attribute, here are the places 5538you will need to modify. New attributes should be discussed on the 5539`binutils' mailing list. 5540 5541 * This manual, which is the official register of attributes. 5542 5543 * The header for your architecture `include/elf', to define the tag. 5544 5545 * The `bfd' support file for your architecture, to merge the 5546 attribute and issue any appropriate link warnings. 5547 5548 * Test cases in `ld/testsuite' for merging and link warnings. 5549 5550 * `binutils/readelf.c' to display your attribute. 5551 5552 * GCC, if you want the compiler to mark the attribute automatically. 5553 5554 5555File: as.info, Node: Machine Dependencies, Next: Reporting Bugs, Prev: Object Attributes, Up: Top 5556 55579 Machine Dependent Features 5558**************************** 5559 5560The machine instruction sets are (almost by definition) different on 5561each machine where `as' runs. Floating point representations vary as 5562well, and `as' often supports a few additional directives or 5563command-line options for compatibility with other assemblers on a 5564particular platform. Finally, some versions of `as' support special 5565pseudo-instructions for branch optimization. 5566 5567 This chapter discusses most of these differences, though it does not 5568include details on any machine's instruction set. For details on that 5569subject, see the hardware manufacturer's manual. 5570 5571* Menu: 5572 5573 5574* Alpha-Dependent:: Alpha Dependent Features 5575 5576* ARC-Dependent:: ARC Dependent Features 5577 5578* ARM-Dependent:: ARM Dependent Features 5579 5580* AVR-Dependent:: AVR Dependent Features 5581 5582* Blackfin-Dependent:: Blackfin Dependent Features 5583 5584* CR16-Dependent:: CR16 Dependent Features 5585 5586* CRIS-Dependent:: CRIS Dependent Features 5587 5588* D10V-Dependent:: D10V Dependent Features 5589 5590* D30V-Dependent:: D30V Dependent Features 5591 5592* H8/300-Dependent:: Renesas H8/300 Dependent Features 5593 5594* HPPA-Dependent:: HPPA Dependent Features 5595 5596* ESA/390-Dependent:: IBM ESA/390 Dependent Features 5597 5598* i386-Dependent:: Intel 80386 and AMD x86-64 Dependent Features 5599 5600* i860-Dependent:: Intel 80860 Dependent Features 5601 5602* i960-Dependent:: Intel 80960 Dependent Features 5603 5604* IA-64-Dependent:: Intel IA-64 Dependent Features 5605 5606* IP2K-Dependent:: IP2K Dependent Features 5607 5608* LM32-Dependent:: LM32 Dependent Features 5609 5610* M32C-Dependent:: M32C Dependent Features 5611 5612* M32R-Dependent:: M32R Dependent Features 5613 5614* M68K-Dependent:: M680x0 Dependent Features 5615 5616* M68HC11-Dependent:: M68HC11 and 68HC12 Dependent Features 5617 5618* MicroBlaze-Dependent:: MICROBLAZE Dependent Features 5619 5620* MIPS-Dependent:: MIPS Dependent Features 5621 5622* MMIX-Dependent:: MMIX Dependent Features 5623 5624* MSP430-Dependent:: MSP430 Dependent Features 5625 5626* SH-Dependent:: Renesas / SuperH SH Dependent Features 5627* SH64-Dependent:: SuperH SH64 Dependent Features 5628 5629* PDP-11-Dependent:: PDP-11 Dependent Features 5630 5631* PJ-Dependent:: picoJava Dependent Features 5632 5633* PPC-Dependent:: PowerPC Dependent Features 5634 5635* RX-Dependent:: RX Dependent Features 5636 5637* S/390-Dependent:: IBM S/390 Dependent Features 5638 5639* SCORE-Dependent:: SCORE Dependent Features 5640 5641* Sparc-Dependent:: SPARC Dependent Features 5642 5643* TIC54X-Dependent:: TI TMS320C54x Dependent Features 5644 5645* TIC6X-Dependent :: TI TMS320C6x Dependent Features 5646 5647* V850-Dependent:: V850 Dependent Features 5648 5649* Xtensa-Dependent:: Xtensa Dependent Features 5650 5651* Z80-Dependent:: Z80 Dependent Features 5652 5653* Z8000-Dependent:: Z8000 Dependent Features 5654 5655* Vax-Dependent:: VAX Dependent Features 5656 5657 5658File: as.info, Node: Alpha-Dependent, Next: ARC-Dependent, Up: Machine Dependencies 5659 56609.1 Alpha Dependent Features 5661============================ 5662 5663* Menu: 5664 5665* Alpha Notes:: Notes 5666* Alpha Options:: Options 5667* Alpha Syntax:: Syntax 5668* Alpha Floating Point:: Floating Point 5669* Alpha Directives:: Alpha Machine Directives 5670* Alpha Opcodes:: Opcodes 5671 5672 5673File: as.info, Node: Alpha Notes, Next: Alpha Options, Up: Alpha-Dependent 5674 56759.1.1 Notes 5676----------- 5677 5678The documentation here is primarily for the ELF object format. `as' 5679also supports the ECOFF and EVAX formats, but features specific to 5680these formats are not yet documented. 5681 5682 5683File: as.info, Node: Alpha Options, Next: Alpha Syntax, Prev: Alpha Notes, Up: Alpha-Dependent 5684 56859.1.2 Options 5686------------- 5687 5688`-mCPU' 5689 This option specifies the target processor. If an attempt is made 5690 to assemble an instruction which will not execute on the target 5691 processor, the assembler may either expand the instruction as a 5692 macro or issue an error message. This option is equivalent to the 5693 `.arch' directive. 5694 5695 The following processor names are recognized: `21064', `21064a', 5696 `21066', `21068', `21164', `21164a', `21164pc', `21264', `21264a', 5697 `21264b', `ev4', `ev5', `lca45', `ev5', `ev56', `pca56', `ev6', 5698 `ev67', `ev68'. The special name `all' may be used to allow the 5699 assembler to accept instructions valid for any Alpha processor. 5700 5701 In order to support existing practice in OSF/1 with respect to 5702 `.arch', and existing practice within `MILO' (the Linux ARC 5703 bootloader), the numbered processor names (e.g. 21064) enable the 5704 processor-specific PALcode instructions, while the 5705 "electro-vlasic" names (e.g. `ev4') do not. 5706 5707`-mdebug' 5708`-no-mdebug' 5709 Enables or disables the generation of `.mdebug' encapsulation for 5710 stabs directives and procedure descriptors. The default is to 5711 automatically enable `.mdebug' when the first stabs directive is 5712 seen. 5713 5714`-relax' 5715 This option forces all relocations to be put into the object file, 5716 instead of saving space and resolving some relocations at assembly 5717 time. Note that this option does not propagate all symbol 5718 arithmetic into the object file, because not all symbol arithmetic 5719 can be represented. However, the option can still be useful in 5720 specific applications. 5721 5722`-replace' 5723`-noreplace' 5724 Enables or disables the optimization of procedure calls, both at 5725 assemblage and at link time. These options are only available for 5726 VMS targets and `-replace' is the default. See section 1.4.1 of 5727 the OpenVMS Linker Utility Manual. 5728 5729`-g' 5730 This option is used when the compiler generates debug information. 5731 When `gcc' is using `mips-tfile' to generate debug information 5732 for ECOFF, local labels must be passed through to the object file. 5733 Otherwise this option has no effect. 5734 5735`-GSIZE' 5736 A local common symbol larger than SIZE is placed in `.bss', while 5737 smaller symbols are placed in `.sbss'. 5738 5739`-F' 5740`-32addr' 5741 These options are ignored for backward compatibility. 5742 5743 5744File: as.info, Node: Alpha Syntax, Next: Alpha Floating Point, Prev: Alpha Options, Up: Alpha-Dependent 5745 57469.1.3 Syntax 5747------------ 5748 5749The assembler syntax closely follow the Alpha Reference Manual; 5750assembler directives and general syntax closely follow the OSF/1 and 5751OpenVMS syntax, with a few differences for ELF. 5752 5753* Menu: 5754 5755* Alpha-Chars:: Special Characters 5756* Alpha-Regs:: Register Names 5757* Alpha-Relocs:: Relocations 5758 5759 5760File: as.info, Node: Alpha-Chars, Next: Alpha-Regs, Up: Alpha Syntax 5761 57629.1.3.1 Special Characters 5763.......................... 5764 5765`#' is the line comment character. 5766 5767 `;' can be used instead of a newline to separate statements. 5768 5769 5770File: as.info, Node: Alpha-Regs, Next: Alpha-Relocs, Prev: Alpha-Chars, Up: Alpha Syntax 5771 57729.1.3.2 Register Names 5773...................... 5774 5775The 32 integer registers are referred to as `$N' or `$rN'. In 5776addition, registers 15, 28, 29, and 30 may be referred to by the 5777symbols `$fp', `$at', `$gp', and `$sp' respectively. 5778 5779 The 32 floating-point registers are referred to as `$fN'. 5780 5781 5782File: as.info, Node: Alpha-Relocs, Prev: Alpha-Regs, Up: Alpha Syntax 5783 57849.1.3.3 Relocations 5785................... 5786 5787Some of these relocations are available for ECOFF, but mostly only for 5788ELF. They are modeled after the relocation format introduced in 5789Digital Unix 4.0, but there are additions. 5790 5791 The format is `!TAG' or `!TAG!NUMBER' where TAG is the name of the 5792relocation. In some cases NUMBER is used to relate specific 5793instructions. 5794 5795 The relocation is placed at the end of the instruction like so: 5796 5797 ldah $0,a($29) !gprelhigh 5798 lda $0,a($0) !gprellow 5799 ldq $1,b($29) !literal!100 5800 ldl $2,0($1) !lituse_base!100 5801 5802`!literal' 5803`!literal!N' 5804 Used with an `ldq' instruction to load the address of a symbol 5805 from the GOT. 5806 5807 A sequence number N is optional, and if present is used to pair 5808 `lituse' relocations with this `literal' relocation. The `lituse' 5809 relocations are used by the linker to optimize the code based on 5810 the final location of the symbol. 5811 5812 Note that these optimizations are dependent on the data flow of the 5813 program. Therefore, if _any_ `lituse' is paired with a `literal' 5814 relocation, then _all_ uses of the register set by the `literal' 5815 instruction must also be marked with `lituse' relocations. This 5816 is because the original `literal' instruction may be deleted or 5817 transformed into another instruction. 5818 5819 Also note that there may be a one-to-many relationship between 5820 `literal' and `lituse', but not a many-to-one. That is, if there 5821 are two code paths that load up the same address and feed the 5822 value to a single use, then the use may not use a `lituse' 5823 relocation. 5824 5825`!lituse_base!N' 5826 Used with any memory format instruction (e.g. `ldl') to indicate 5827 that the literal is used for an address load. The offset field of 5828 the instruction must be zero. During relaxation, the code may be 5829 altered to use a gp-relative load. 5830 5831`!lituse_jsr!N' 5832 Used with a register branch format instruction (e.g. `jsr') to 5833 indicate that the literal is used for a call. During relaxation, 5834 the code may be altered to use a direct branch (e.g. `bsr'). 5835 5836`!lituse_jsrdirect!N' 5837 Similar to `lituse_jsr', but also that this call cannot be vectored 5838 through a PLT entry. This is useful for functions with special 5839 calling conventions which do not allow the normal call-clobbered 5840 registers to be clobbered. 5841 5842`!lituse_bytoff!N' 5843 Used with a byte mask instruction (e.g. `extbl') to indicate that 5844 only the low 3 bits of the address are relevant. During 5845 relaxation, the code may be altered to use an immediate instead of 5846 a register shift. 5847 5848`!lituse_addr!N' 5849 Used with any other instruction to indicate that the original 5850 address is in fact used, and the original `ldq' instruction may 5851 not be altered or deleted. This is useful in conjunction with 5852 `lituse_jsr' to test whether a weak symbol is defined. 5853 5854 ldq $27,foo($29) !literal!1 5855 beq $27,is_undef !lituse_addr!1 5856 jsr $26,($27),foo !lituse_jsr!1 5857 5858`!lituse_tlsgd!N' 5859 Used with a register branch format instruction to indicate that the 5860 literal is the call to `__tls_get_addr' used to compute the 5861 address of the thread-local storage variable whose descriptor was 5862 loaded with `!tlsgd!N'. 5863 5864`!lituse_tlsldm!N' 5865 Used with a register branch format instruction to indicate that the 5866 literal is the call to `__tls_get_addr' used to compute the 5867 address of the base of the thread-local storage block for the 5868 current module. The descriptor for the module must have been 5869 loaded with `!tlsldm!N'. 5870 5871`!gpdisp!N' 5872 Used with `ldah' and `lda' to load the GP from the current 5873 address, a-la the `ldgp' macro. The source register for the 5874 `ldah' instruction must contain the address of the `ldah' 5875 instruction. There must be exactly one `lda' instruction paired 5876 with the `ldah' instruction, though it may appear anywhere in the 5877 instruction stream. The immediate operands must be zero. 5878 5879 bsr $26,foo 5880 ldah $29,0($26) !gpdisp!1 5881 lda $29,0($29) !gpdisp!1 5882 5883`!gprelhigh' 5884 Used with an `ldah' instruction to add the high 16 bits of a 5885 32-bit displacement from the GP. 5886 5887`!gprellow' 5888 Used with any memory format instruction to add the low 16 bits of a 5889 32-bit displacement from the GP. 5890 5891`!gprel' 5892 Used with any memory format instruction to add a 16-bit 5893 displacement from the GP. 5894 5895`!samegp' 5896 Used with any branch format instruction to skip the GP load at the 5897 target address. The referenced symbol must have the same GP as the 5898 source object file, and it must be declared to either not use `$27' 5899 or perform a standard GP load in the first two instructions via the 5900 `.prologue' directive. 5901 5902`!tlsgd' 5903`!tlsgd!N' 5904 Used with an `lda' instruction to load the address of a TLS 5905 descriptor for a symbol in the GOT. 5906 5907 The sequence number N is optional, and if present it used to pair 5908 the descriptor load with both the `literal' loading the address of 5909 the `__tls_get_addr' function and the `lituse_tlsgd' marking the 5910 call to that function. 5911 5912 For proper relaxation, both the `tlsgd', `literal' and `lituse' 5913 relocations must be in the same extended basic block. That is, 5914 the relocation with the lowest address must be executed first at 5915 runtime. 5916 5917`!tlsldm' 5918`!tlsldm!N' 5919 Used with an `lda' instruction to load the address of a TLS 5920 descriptor for the current module in the GOT. 5921 5922 Similar in other respects to `tlsgd'. 5923 5924`!gotdtprel' 5925 Used with an `ldq' instruction to load the offset of the TLS 5926 symbol within its module's thread-local storage block. Also known 5927 as the dynamic thread pointer offset or dtp-relative offset. 5928 5929`!dtprelhi' 5930`!dtprello' 5931`!dtprel' 5932 Like `gprel' relocations except they compute dtp-relative offsets. 5933 5934`!gottprel' 5935 Used with an `ldq' instruction to load the offset of the TLS 5936 symbol from the thread pointer. Also known as the tp-relative 5937 offset. 5938 5939`!tprelhi' 5940`!tprello' 5941`!tprel' 5942 Like `gprel' relocations except they compute tp-relative offsets. 5943 5944 5945File: as.info, Node: Alpha Floating Point, Next: Alpha Directives, Prev: Alpha Syntax, Up: Alpha-Dependent 5946 59479.1.4 Floating Point 5948-------------------- 5949 5950The Alpha family uses both IEEE and VAX floating-point numbers. 5951 5952 5953File: as.info, Node: Alpha Directives, Next: Alpha Opcodes, Prev: Alpha Floating Point, Up: Alpha-Dependent 5954 59559.1.5 Alpha Assembler Directives 5956-------------------------------- 5957 5958`as' for the Alpha supports many additional directives for 5959compatibility with the native assembler. This section describes them 5960only briefly. 5961 5962 These are the additional directives in `as' for the Alpha: 5963 5964`.arch CPU' 5965 Specifies the target processor. This is equivalent to the `-mCPU' 5966 command-line option. *Note Options: Alpha Options, for a list of 5967 values for CPU. 5968 5969`.ent FUNCTION[, N]' 5970 Mark the beginning of FUNCTION. An optional number may follow for 5971 compatibility with the OSF/1 assembler, but is ignored. When 5972 generating `.mdebug' information, this will create a procedure 5973 descriptor for the function. In ELF, it will mark the symbol as a 5974 function a-la the generic `.type' directive. 5975 5976`.end FUNCTION' 5977 Mark the end of FUNCTION. In ELF, it will set the size of the 5978 symbol a-la the generic `.size' directive. 5979 5980`.mask MASK, OFFSET' 5981 Indicate which of the integer registers are saved in the current 5982 function's stack frame. MASK is interpreted a bit mask in which 5983 bit N set indicates that register N is saved. The registers are 5984 saved in a block located OFFSET bytes from the "canonical frame 5985 address" (CFA) which is the value of the stack pointer on entry to 5986 the function. The registers are saved sequentially, except that 5987 the return address register (normally `$26') is saved first. 5988 5989 This and the other directives that describe the stack frame are 5990 currently only used when generating `.mdebug' information. They 5991 may in the future be used to generate DWARF2 `.debug_frame' unwind 5992 information for hand written assembly. 5993 5994`.fmask MASK, OFFSET' 5995 Indicate which of the floating-point registers are saved in the 5996 current stack frame. The MASK and OFFSET parameters are 5997 interpreted as with `.mask'. 5998 5999`.frame FRAMEREG, FRAMEOFFSET, RETREG[, ARGOFFSET]' 6000 Describes the shape of the stack frame. The frame pointer in use 6001 is FRAMEREG; normally this is either `$fp' or `$sp'. The frame 6002 pointer is FRAMEOFFSET bytes below the CFA. The return address is 6003 initially located in RETREG until it is saved as indicated in 6004 `.mask'. For compatibility with OSF/1 an optional ARGOFFSET 6005 parameter is accepted and ignored. It is believed to indicate the 6006 offset from the CFA to the saved argument registers. 6007 6008`.prologue N' 6009 Indicate that the stack frame is set up and all registers have been 6010 spilled. The argument N indicates whether and how the function 6011 uses the incoming "procedure vector" (the address of the called 6012 function) in `$27'. 0 indicates that `$27' is not used; 1 6013 indicates that the first two instructions of the function use `$27' 6014 to perform a load of the GP register; 2 indicates that `$27' is 6015 used in some non-standard way and so the linker cannot elide the 6016 load of the procedure vector during relaxation. 6017 6018`.usepv FUNCTION, WHICH' 6019 Used to indicate the use of the `$27' register, similar to 6020 `.prologue', but without the other semantics of needing to be 6021 inside an open `.ent'/`.end' block. 6022 6023 The WHICH argument should be either `no', indicating that `$27' is 6024 not used, or `std', indicating that the first two instructions of 6025 the function perform a GP load. 6026 6027 One might use this directive instead of `.prologue' if you are 6028 also using dwarf2 CFI directives. 6029 6030`.gprel32 EXPRESSION' 6031 Computes the difference between the address in EXPRESSION and the 6032 GP for the current object file, and stores it in 4 bytes. In 6033 addition to being smaller than a full 8 byte address, this also 6034 does not require a dynamic relocation when used in a shared 6035 library. 6036 6037`.t_floating EXPRESSION' 6038 Stores EXPRESSION as an IEEE double precision value. 6039 6040`.s_floating EXPRESSION' 6041 Stores EXPRESSION as an IEEE single precision value. 6042 6043`.f_floating EXPRESSION' 6044 Stores EXPRESSION as a VAX F format value. 6045 6046`.g_floating EXPRESSION' 6047 Stores EXPRESSION as a VAX G format value. 6048 6049`.d_floating EXPRESSION' 6050 Stores EXPRESSION as a VAX D format value. 6051 6052`.set FEATURE' 6053 Enables or disables various assembler features. Using the positive 6054 name of the feature enables while using `noFEATURE' disables. 6055 6056 `at' 6057 Indicates that macro expansions may clobber the "assembler 6058 temporary" (`$at' or `$28') register. Some macros may not be 6059 expanded without this and will generate an error message if 6060 `noat' is in effect. When `at' is in effect, a warning will 6061 be generated if `$at' is used by the programmer. 6062 6063 `macro' 6064 Enables the expansion of macro instructions. Note that 6065 variants of real instructions, such as `br label' vs `br 6066 $31,label' are considered alternate forms and not macros. 6067 6068 `move' 6069 `reorder' 6070 `volatile' 6071 These control whether and how the assembler may re-order 6072 instructions. Accepted for compatibility with the OSF/1 6073 assembler, but `as' does not do instruction scheduling, so 6074 these features are ignored. 6075 6076 The following directives are recognized for compatibility with the 6077OSF/1 assembler but are ignored. 6078 6079 .proc .aproc 6080 .reguse .livereg 6081 .option .aent 6082 .ugen .eflag 6083 .alias .noalias 6084 6085 6086File: as.info, Node: Alpha Opcodes, Prev: Alpha Directives, Up: Alpha-Dependent 6087 60889.1.6 Opcodes 6089------------- 6090 6091For detailed information on the Alpha machine instruction set, see the 6092Alpha Architecture Handbook 6093(ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf). 6094 6095 6096File: as.info, Node: ARC-Dependent, Next: ARM-Dependent, Prev: Alpha-Dependent, Up: Machine Dependencies 6097 60989.2 ARC Dependent Features 6099========================== 6100 6101* Menu: 6102 6103* ARC Options:: Options 6104* ARC Syntax:: Syntax 6105* ARC Floating Point:: Floating Point 6106* ARC Directives:: ARC Machine Directives 6107* ARC Opcodes:: Opcodes 6108 6109 6110File: as.info, Node: ARC Options, Next: ARC Syntax, Up: ARC-Dependent 6111 61129.2.1 Options 6113------------- 6114 6115`-marc[5|6|7|8]' 6116 This option selects the core processor variant. Using `-marc' is 6117 the same as `-marc6', which is also the default. 6118 6119 `arc5' 6120 Base instruction set. 6121 6122 `arc6' 6123 Jump-and-link (jl) instruction. No requirement of an 6124 instruction between setting flags and conditional jump. For 6125 example: 6126 6127 mov.f r0,r1 6128 beq foo 6129 6130 `arc7' 6131 Break (brk) and sleep (sleep) instructions. 6132 6133 `arc8' 6134 Software interrupt (swi) instruction. 6135 6136 6137 Note: the `.option' directive can to be used to select a core 6138 variant from within assembly code. 6139 6140`-EB' 6141 This option specifies that the output generated by the assembler 6142 should be marked as being encoded for a big-endian processor. 6143 6144`-EL' 6145 This option specifies that the output generated by the assembler 6146 should be marked as being encoded for a little-endian processor - 6147 this is the default. 6148 6149 6150 6151File: as.info, Node: ARC Syntax, Next: ARC Floating Point, Prev: ARC Options, Up: ARC-Dependent 6152 61539.2.2 Syntax 6154------------ 6155 6156* Menu: 6157 6158* ARC-Chars:: Special Characters 6159* ARC-Regs:: Register Names 6160 6161 6162File: as.info, Node: ARC-Chars, Next: ARC-Regs, Up: ARC Syntax 6163 61649.2.2.1 Special Characters 6165.......................... 6166 6167*TODO* 6168 6169 6170File: as.info, Node: ARC-Regs, Prev: ARC-Chars, Up: ARC Syntax 6171 61729.2.2.2 Register Names 6173...................... 6174 6175*TODO* 6176 6177 6178File: as.info, Node: ARC Floating Point, Next: ARC Directives, Prev: ARC Syntax, Up: ARC-Dependent 6179 61809.2.3 Floating Point 6181-------------------- 6182 6183The ARC core does not currently have hardware floating point support. 6184Software floating point support is provided by `GCC' and uses IEEE 6185floating-point numbers. 6186 6187 6188File: as.info, Node: ARC Directives, Next: ARC Opcodes, Prev: ARC Floating Point, Up: ARC-Dependent 6189 61909.2.4 ARC Machine Directives 6191---------------------------- 6192 6193The ARC version of `as' supports the following additional machine 6194directives: 6195 6196`.2byte EXPRESSIONS' 6197 *TODO* 6198 6199`.3byte EXPRESSIONS' 6200 *TODO* 6201 6202`.4byte EXPRESSIONS' 6203 *TODO* 6204 6205`.extAuxRegister NAME,ADDRESS,MODE' 6206 The ARCtangent A4 has extensible auxiliary register space. The 6207 auxiliary registers can be defined in the assembler source code by 6208 using this directive. The first parameter is the NAME of the new 6209 auxiallry register. The second parameter is the ADDRESS of the 6210 register in the auxiliary register memory map for the variant of 6211 the ARC. The third parameter specifies the MODE in which the 6212 register can be operated is and it can be one of: 6213 6214 `r (readonly)' 6215 6216 `w (write only)' 6217 6218 `r|w (read or write)' 6219 6220 For example: 6221 6222 .extAuxRegister mulhi,0x12,w 6223 6224 This specifies an extension auxiliary register called _mulhi_ 6225 which is at address 0x12 in the memory space and which is only 6226 writable. 6227 6228`.extCondCode SUFFIX,VALUE' 6229 The condition codes on the ARCtangent A4 are extensible and can be 6230 specified by means of this assembler directive. They are specified 6231 by the suffix and the value for the condition code. They can be 6232 used to specify extra condition codes with any values. For 6233 example: 6234 6235 .extCondCode is_busy,0x14 6236 6237 add.is_busy r1,r2,r3 6238 bis_busy _main 6239 6240`.extCoreRegister NAME,REGNUM,MODE,SHORTCUT' 6241 Specifies an extension core register NAME for the application. 6242 This allows a register NAME with a valid REGNUM between 0 and 60, 6243 with the following as valid values for MODE 6244 6245 `_r_ (readonly)' 6246 6247 `_w_ (write only)' 6248 6249 `_r|w_ (read or write)' 6250 6251 The other parameter gives a description of the register having a 6252 SHORTCUT in the pipeline. The valid values are: 6253 6254 `can_shortcut' 6255 6256 `cannot_shortcut' 6257 6258 For example: 6259 6260 .extCoreRegister mlo,57,r,can_shortcut 6261 6262 This defines an extension core register mlo with the value 57 which 6263 can shortcut the pipeline. 6264 6265`.extInstruction NAME,OPCODE,SUBOPCODE,SUFFIXCLASS,SYNTAXCLASS' 6266 The ARCtangent A4 allows the user to specify extension 6267 instructions. The extension instructions are not macros. The 6268 assembler creates encodings for use of these instructions 6269 according to the specification by the user. The parameters are: 6270 6271 *NAME 6272 Name of the extension instruction 6273 6274 *OPCODE 6275 Opcode to be used. (Bits 27:31 in the encoding). Valid values 6276 0x10-0x1f or 0x03 6277 6278 *SUBOPCODE 6279 Subopcode to be used. Valid values are from 0x09-0x3f. 6280 However the correct value also depends on SYNTAXCLASS 6281 6282 *SUFFIXCLASS 6283 Determines the kinds of suffixes to be allowed. Valid values 6284 are `SUFFIX_NONE', `SUFFIX_COND', `SUFFIX_FLAG' which 6285 indicates the absence or presence of conditional suffixes and 6286 flag setting by the extension instruction. It is also 6287 possible to specify that an instruction sets the flags and is 6288 conditional by using `SUFFIX_CODE' | `SUFFIX_FLAG'. 6289 6290 *SYNTAXCLASS 6291 Determines the syntax class for the instruction. It can have 6292 the following values: 6293 6294 ``SYNTAX_2OP':' 6295 2 Operand Instruction 6296 6297 ``SYNTAX_3OP':' 6298 3 Operand Instruction 6299 6300 In addition there could be modifiers for the syntax class as 6301 described below: 6302 6303 Syntax Class Modifiers are: 6304 6305 - `OP1_MUST_BE_IMM': Modifies syntax class SYNTAX_3OP, 6306 specifying that the first operand of a three-operand 6307 instruction must be an immediate (i.e., the result is 6308 discarded). OP1_MUST_BE_IMM is used by bitwise ORing it 6309 with SYNTAX_3OP as given in the example below. This 6310 could usually be used to set the flags using specific 6311 instructions and not retain results. 6312 6313 - `OP1_IMM_IMPLIED': Modifies syntax class SYNTAX_20P, it 6314 specifies that there is an implied immediate destination 6315 operand which does not appear in the syntax. For 6316 example, if the source code contains an instruction like: 6317 6318 inst r1,r2 6319 6320 it really means that the first argument is an implied 6321 immediate (that is, the result is discarded). This is 6322 the same as though the source code were: inst 0,r1,r2. 6323 You use OP1_IMM_IMPLIED by bitwise ORing it with 6324 SYNTAX_20P. 6325 6326 6327 For example, defining 64-bit multiplier with immediate operands: 6328 6329 .extInstruction mp64,0x14,0x0,SUFFIX_COND | SUFFIX_FLAG , 6330 SYNTAX_3OP|OP1_MUST_BE_IMM 6331 6332 The above specifies an extension instruction called mp64 which has 6333 3 operands, sets the flags, can be used with a condition code, for 6334 which the first operand is an immediate. (Equivalent to 6335 discarding the result of the operation). 6336 6337 .extInstruction mul64,0x14,0x00,SUFFIX_COND, SYNTAX_2OP|OP1_IMM_IMPLIED 6338 6339 This describes a 2 operand instruction with an implicit first 6340 immediate operand. The result of this operation would be 6341 discarded. 6342 6343`.half EXPRESSIONS' 6344 *TODO* 6345 6346`.long EXPRESSIONS' 6347 *TODO* 6348 6349`.option ARC|ARC5|ARC6|ARC7|ARC8' 6350 The `.option' directive must be followed by the desired core 6351 version. Again `arc' is an alias for `arc6'. 6352 6353 Note: the `.option' directive overrides the command line option 6354 `-marc'; a warning is emitted when the version is not consistent 6355 between the two - even for the implicit default core version 6356 (arc6). 6357 6358`.short EXPRESSIONS' 6359 *TODO* 6360 6361`.word EXPRESSIONS' 6362 *TODO* 6363 6364 6365 6366File: as.info, Node: ARC Opcodes, Prev: ARC Directives, Up: ARC-Dependent 6367 63689.2.5 Opcodes 6369------------- 6370 6371For information on the ARC instruction set, see `ARC Programmers 6372Reference Manual', ARC International (www.arc.com) 6373 6374 6375File: as.info, Node: ARM-Dependent, Next: AVR-Dependent, Prev: ARC-Dependent, Up: Machine Dependencies 6376 63779.3 ARM Dependent Features 6378========================== 6379 6380* Menu: 6381 6382* ARM Options:: Options 6383* ARM Syntax:: Syntax 6384* ARM Floating Point:: Floating Point 6385* ARM Directives:: ARM Machine Directives 6386* ARM Opcodes:: Opcodes 6387* ARM Mapping Symbols:: Mapping Symbols 6388* ARM Unwinding Tutorial:: Unwinding 6389 6390 6391File: as.info, Node: ARM Options, Next: ARM Syntax, Up: ARM-Dependent 6392 63939.3.1 Options 6394------------- 6395 6396`-mcpu=PROCESSOR[+EXTENSION...]' 6397 This option specifies the target processor. The assembler will 6398 issue an error message if an attempt is made to assemble an 6399 instruction which will not execute on the target processor. The 6400 following processor names are recognized: `arm1', `arm2', `arm250', 6401 `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', 6402 `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', 6403 `arm700i', `arm710', `arm710t', `arm720', `arm720t', `arm740t', 6404 `arm710c', `arm7100', `arm7500', `arm7500fe', `arm7t', `arm7tdmi', 6405 `arm7tdmi-s', `arm8', `arm810', `strongarm', `strongarm1', 6406 `strongarm110', `strongarm1100', `strongarm1110', `arm9', `arm920', 6407 `arm920t', `arm922t', `arm940t', `arm9tdmi', `fa526' (Faraday 6408 FA526 processor), `fa626' (Faraday FA626 processor), `arm9e', 6409 `arm926e', `arm926ej-s', `arm946e-r0', `arm946e', `arm946e-s', 6410 `arm966e-r0', `arm966e', `arm966e-s', `arm968e-s', `arm10t', 6411 `arm10tdmi', `arm10e', `arm1020', `arm1020t', `arm1020e', 6412 `arm1022e', `arm1026ej-s', `fa626te' (Faraday FA626TE processor), 6413 `fa726te' (Faraday FA726TE processor), `arm1136j-s', `arm1136jf-s', 6414 `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s', 6415 `mpcore', `mpcorenovfp', `cortex-a5', `cortex-a8', `cortex-a9', 6416 `cortex-a15', `cortex-r4', `cortex-r4f', `cortex-m4', `cortex-m3', 6417 `cortex-m1', `cortex-m0', `ep9312' (ARM920 with Cirrus Maverick 6418 coprocessor), `i80200' (Intel XScale processor) `iwmmxt' (Intel(r) 6419 XScale processor with Wireless MMX(tm) technology coprocessor) and 6420 `xscale'. The special name `all' may be used to allow the 6421 assembler to accept instructions valid for any ARM processor. 6422 6423 In addition to the basic instruction set, the assembler can be 6424 told to accept various extension mnemonics that extend the 6425 processor using the co-processor instruction space. For example, 6426 `-mcpu=arm920+maverick' is equivalent to specifying `-mcpu=ep9312'. 6427 6428 Multiple extensions may be specified, separated by a `+'. The 6429 extensions should be specified in ascending alphabetical order. 6430 6431 Some extensions may be restricted to particular architectures; 6432 this is documented in the list of extensions below. 6433 6434 Extension mnemonics may also be removed from those the assembler 6435 accepts. This is done be prepending `no' to the option that adds 6436 the extension. Extensions that are removed should be listed after 6437 all extensions which have been added, again in ascending 6438 alphabetical order. For example, `-mcpu=ep9312+nomaverick' is 6439 equivalent to specifying `-mcpu=arm920'. 6440 6441 The following extensions are currently supported: `idiv', (Integer 6442 Divide Extensions for v7-A architecture), `iwmmxt', `iwmmxt2', 6443 `maverick', `mp' (Multiprocessing Extensions for v7-A and v7-R 6444 architectures), `os' (Operating System for v6M architecture), 6445 `sec' (Security Extensions for v6K and v7-A architectures), `virt' 6446 (Virtualization Extensions for v7-A architecture, implies `idiv'), 6447 and `xscale'. 6448 6449`-march=ARCHITECTURE[+EXTENSION...]' 6450 This option specifies the target architecture. The assembler will 6451 issue an error message if an attempt is made to assemble an 6452 instruction which will not execute on the target architecture. 6453 The following architecture names are recognized: `armv1', `armv2', 6454 `armv2a', `armv2s', `armv3', `armv3m', `armv4', `armv4xm', 6455 `armv4t', `armv4txm', `armv5', `armv5t', `armv5txm', `armv5te', 6456 `armv5texp', `armv6', `armv6j', `armv6k', `armv6z', `armv6zk', 6457 `armv6-m', `armv6s-m', `armv7', `armv7-a', `armv7-r', `armv7-m', 6458 `armv7e-m', `iwmmxt' and `xscale'. If both `-mcpu' and `-march' 6459 are specified, the assembler will use the setting for `-mcpu'. 6460 6461 The architecture option can be extended with the same instruction 6462 set extension options as the `-mcpu' option. 6463 6464`-mfpu=FLOATING-POINT-FORMAT' 6465 This option specifies the floating point format to assemble for. 6466 The assembler will issue an error message if an attempt is made to 6467 assemble an instruction which will not execute on the target 6468 floating point unit. The following format options are recognized: 6469 `softfpa', `fpe', `fpe2', `fpe3', `fpa', `fpa10', `fpa11', 6470 `arm7500fe', `softvfp', `softvfp+vfp', `vfp', `vfp10', `vfp10-r0', 6471 `vfp9', `vfpxd', `vfpv2', `vfpv3', `vfpv3-fp16', `vfpv3-d16', 6472 `vfpv3-d16-fp16', `vfpv3xd', `vfpv3xd-d16', `vfpv4', `vfpv4-d16', 6473 `fpv4-sp-d16', `arm1020t', `arm1020e', `arm1136jf-s', `maverick', 6474 `neon', and `neon-vfpv4'. 6475 6476 In addition to determining which instructions are assembled, this 6477 option also affects the way in which the `.double' assembler 6478 directive behaves when assembling little-endian code. 6479 6480 The default is dependent on the processor selected. For 6481 Architecture 5 or later, the default is to assembler for VFP 6482 instructions; for earlier architectures the default is to assemble 6483 for FPA instructions. 6484 6485`-mthumb' 6486 This option specifies that the assembler should start assembling 6487 Thumb instructions; that is, it should behave as though the file 6488 starts with a `.code 16' directive. 6489 6490`-mthumb-interwork' 6491 This option specifies that the output generated by the assembler 6492 should be marked as supporting interworking. 6493 6494`-mimplicit-it=never' 6495`-mimplicit-it=always' 6496`-mimplicit-it=arm' 6497`-mimplicit-it=thumb' 6498 The `-mimplicit-it' option controls the behavior of the assembler 6499 when conditional instructions are not enclosed in IT blocks. 6500 There are four possible behaviors. If `never' is specified, such 6501 constructs cause a warning in ARM code and an error in Thumb-2 6502 code. If `always' is specified, such constructs are accepted in 6503 both ARM and Thumb-2 code, where the IT instruction is added 6504 implicitly. If `arm' is specified, such constructs are accepted 6505 in ARM code and cause an error in Thumb-2 code. If `thumb' is 6506 specified, such constructs cause a warning in ARM code and are 6507 accepted in Thumb-2 code. If you omit this option, the behavior 6508 is equivalent to `-mimplicit-it=arm'. 6509 6510`-mapcs-26' 6511`-mapcs-32' 6512 These options specify that the output generated by the assembler 6513 should be marked as supporting the indicated version of the Arm 6514 Procedure. Calling Standard. 6515 6516`-matpcs' 6517 This option specifies that the output generated by the assembler 6518 should be marked as supporting the Arm/Thumb Procedure Calling 6519 Standard. If enabled this option will cause the assembler to 6520 create an empty debugging section in the object file called 6521 .arm.atpcs. Debuggers can use this to determine the ABI being 6522 used by. 6523 6524`-mapcs-float' 6525 This indicates the floating point variant of the APCS should be 6526 used. In this variant floating point arguments are passed in FP 6527 registers rather than integer registers. 6528 6529`-mapcs-reentrant' 6530 This indicates that the reentrant variant of the APCS should be 6531 used. This variant supports position independent code. 6532 6533`-mfloat-abi=ABI' 6534 This option specifies that the output generated by the assembler 6535 should be marked as using specified floating point ABI. The 6536 following values are recognized: `soft', `softfp' and `hard'. 6537 6538`-meabi=VER' 6539 This option specifies which EABI version the produced object files 6540 should conform to. The following values are recognized: `gnu', `4' 6541 and `5'. 6542 6543`-EB' 6544 This option specifies that the output generated by the assembler 6545 should be marked as being encoded for a big-endian processor. 6546 6547`-EL' 6548 This option specifies that the output generated by the assembler 6549 should be marked as being encoded for a little-endian processor. 6550 6551`-k' 6552 This option specifies that the output of the assembler should be 6553 marked as position-independent code (PIC). 6554 6555`--fix-v4bx' 6556 Allow `BX' instructions in ARMv4 code. This is intended for use 6557 with the linker option of the same name. 6558 6559`-mwarn-deprecated' 6560`-mno-warn-deprecated' 6561 Enable or disable warnings about using deprecated options or 6562 features. The default is to warn. 6563 6564 6565 6566File: as.info, Node: ARM Syntax, Next: ARM Floating Point, Prev: ARM Options, Up: ARM-Dependent 6567 65689.3.2 Syntax 6569------------ 6570 6571* Menu: 6572 6573* ARM-Instruction-Set:: Instruction Set 6574* ARM-Chars:: Special Characters 6575* ARM-Regs:: Register Names 6576* ARM-Relocations:: Relocations 6577* ARM-Neon-Alignment:: NEON Alignment Specifiers 6578 6579 6580File: as.info, Node: ARM-Instruction-Set, Next: ARM-Chars, Up: ARM Syntax 6581 65829.3.2.1 Instruction Set Syntax 6583.............................. 6584 6585Two slightly different syntaxes are support for ARM and THUMB 6586instructions. The default, `divided', uses the old style where ARM and 6587THUMB instructions had their own, separate syntaxes. The new, 6588`unified' syntax, which can be selected via the `.syntax' directive, 6589and has the following main features: 6590 6591* 6592 Immediate operands do not require a `#' prefix. 6593 6594* 6595 The `IT' instruction may appear, and if it does it is validated 6596 against subsequent conditional affixes. In ARM mode it does not 6597 generate machine code, in THUMB mode it does. 6598 6599* 6600 For ARM instructions the conditional affixes always appear at the 6601 end of the instruction. For THUMB instructions conditional 6602 affixes can be used, but only inside the scope of an `IT' 6603 instruction. 6604 6605* 6606 All of the instructions new to the V6T2 architecture (and later) 6607 are available. (Only a few such instructions can be written in the 6608 `divided' syntax). 6609 6610* 6611 The `.N' and `.W' suffixes are recognized and honored. 6612 6613* 6614 All instructions set the flags if and only if they have an `s' 6615 affix. 6616 6617 6618File: as.info, Node: ARM-Chars, Next: ARM-Regs, Prev: ARM-Instruction-Set, Up: ARM Syntax 6619 66209.3.2.2 Special Characters 6621.......................... 6622 6623The presence of a `@' on a line indicates the start of a comment that 6624extends to the end of the current line. If a `#' appears as the first 6625character of a line, the whole line is treated as a comment. 6626 6627 The `;' character can be used instead of a newline to separate 6628statements. 6629 6630 Either `#' or `$' can be used to indicate immediate operands. 6631 6632 *TODO* Explain about /data modifier on symbols. 6633 6634 6635File: as.info, Node: ARM-Regs, Next: ARM-Relocations, Prev: ARM-Chars, Up: ARM Syntax 6636 66379.3.2.3 Register Names 6638...................... 6639 6640*TODO* Explain about ARM register naming, and the predefined names. 6641 6642 6643File: as.info, Node: ARM-Neon-Alignment, Prev: ARM-Relocations, Up: ARM Syntax 6644 66459.3.2.4 NEON Alignment Specifiers 6646................................. 6647 6648Some NEON load/store instructions allow an optional address alignment 6649qualifier. The ARM documentation specifies that this is indicated by 6650`@ ALIGN'. However GAS already interprets the `@' character as a "line 6651comment" start, so `: ALIGN' is used instead. For example: 6652 6653 vld1.8 {q0}, [r0, :128] 6654 6655 6656File: as.info, Node: ARM Floating Point, Next: ARM Directives, Prev: ARM Syntax, Up: ARM-Dependent 6657 66589.3.3 Floating Point 6659-------------------- 6660 6661The ARM family uses IEEE floating-point numbers. 6662 6663 6664File: as.info, Node: ARM-Relocations, Next: ARM-Neon-Alignment, Prev: ARM-Regs, Up: ARM Syntax 6665 66669.3.3.1 ARM relocation generation 6667................................. 6668 6669Specific data relocations can be generated by putting the relocation 6670name in parentheses after the symbol name. For example: 6671 6672 .word foo(TARGET1) 6673 6674 This will generate an `R_ARM_TARGET1' relocation against the symbol 6675FOO. The following relocations are supported: `GOT', `GOTOFF', 6676`TARGET1', `TARGET2', `SBREL', `TLSGD', `TLSLDM', `TLSLDO', `GOTTPOFF', 6677`GOT_PREL' and `TPOFF'. 6678 6679 For compatibility with older toolchains the assembler also accepts 6680`(PLT)' after branch targets. This will generate the deprecated 6681`R_ARM_PLT32' relocation. 6682 6683 Relocations for `MOVW' and `MOVT' instructions can be generated by 6684prefixing the value with `#:lower16:' and `#:upper16' respectively. 6685For example to load the 32-bit address of foo into r0: 6686 6687 MOVW r0, #:lower16:foo 6688 MOVT r0, #:upper16:foo 6689 6690 6691File: as.info, Node: ARM Directives, Next: ARM Opcodes, Prev: ARM Floating Point, Up: ARM-Dependent 6692 66939.3.4 ARM Machine Directives 6694---------------------------- 6695 6696`.2byte EXPRESSION [, EXPRESSION]*' 6697`.4byte EXPRESSION [, EXPRESSION]*' 6698`.8byte EXPRESSION [, EXPRESSION]*' 6699 These directives write 2, 4 or 8 byte values to the output section. 6700 6701`.align EXPRESSION [, EXPRESSION]' 6702 This is the generic .ALIGN directive. For the ARM however if the 6703 first argument is zero (ie no alignment is needed) the assembler 6704 will behave as if the argument had been 2 (ie pad to the next four 6705 byte boundary). This is for compatibility with ARM's own 6706 assembler. 6707 6708`.arch NAME' 6709 Select the target architecture. Valid values for NAME are the 6710 same as for the `-march' commandline option. 6711 6712 Specifying `.arch' clears any previously selected architecture 6713 extensions. 6714 6715`.arch_extension NAME' 6716 Add or remove an architecture extension to the target 6717 architecture. Valid values for NAME are the same as those 6718 accepted as architectural extensions by the `-mcpu' commandline 6719 option. 6720 6721 `.arch_extension' may be used multiple times to add or remove 6722 extensions incrementally to the architecture being compiled for. 6723 6724`.arm' 6725 This performs the same action as .CODE 32. 6726 6727`.pad #COUNT' 6728 Generate unwinder annotations for a stack adjustment of COUNT 6729 bytes. A positive value indicates the function prologue allocated 6730 stack space by decrementing the stack pointer. 6731 6732`.bss' 6733 This directive switches to the `.bss' section. 6734 6735`.cantunwind' 6736 Prevents unwinding through the current function. No personality 6737 routine or exception table data is required or permitted. 6738 6739`.code `[16|32]'' 6740 This directive selects the instruction set being generated. The 6741 value 16 selects Thumb, with the value 32 selecting ARM. 6742 6743`.cpu NAME' 6744 Select the target processor. Valid values for NAME are the same as 6745 for the `-mcpu' commandline option. 6746 6747 Specifying `.cpu' clears any previously selected architecture 6748 extensions. 6749 6750`NAME .dn REGISTER NAME [.TYPE] [[INDEX]]' 6751`NAME .qn REGISTER NAME [.TYPE] [[INDEX]]' 6752 The `dn' and `qn' directives are used to create typed and/or 6753 indexed register aliases for use in Advanced SIMD Extension (Neon) 6754 instructions. The former should be used to create aliases of 6755 double-precision registers, and the latter to create aliases of 6756 quad-precision registers. 6757 6758 If these directives are used to create typed aliases, those 6759 aliases can be used in Neon instructions instead of writing types 6760 after the mnemonic or after each operand. For example: 6761 6762 x .dn d2.f32 6763 y .dn d3.f32 6764 z .dn d4.f32[1] 6765 vmul x,y,z 6766 6767 This is equivalent to writing the following: 6768 6769 vmul.f32 d2,d3,d4[1] 6770 6771 Aliases created using `dn' or `qn' can be destroyed using `unreq'. 6772 6773`.eabi_attribute TAG, VALUE' 6774 Set the EABI object attribute TAG to VALUE. 6775 6776 The TAG is either an attribute number, or one of the following: 6777 `Tag_CPU_raw_name', `Tag_CPU_name', `Tag_CPU_arch', 6778 `Tag_CPU_arch_profile', `Tag_ARM_ISA_use', `Tag_THUMB_ISA_use', 6779 `Tag_FP_arch', `Tag_WMMX_arch', `Tag_Advanced_SIMD_arch', 6780 `Tag_PCS_config', `Tag_ABI_PCS_R9_use', `Tag_ABI_PCS_RW_data', 6781 `Tag_ABI_PCS_RO_data', `Tag_ABI_PCS_GOT_use', 6782 `Tag_ABI_PCS_wchar_t', `Tag_ABI_FP_rounding', 6783 `Tag_ABI_FP_denormal', `Tag_ABI_FP_exceptions', 6784 `Tag_ABI_FP_user_exceptions', `Tag_ABI_FP_number_model', 6785 `Tag_ABI_align_needed', `Tag_ABI_align_preserved', 6786 `Tag_ABI_enum_size', `Tag_ABI_HardFP_use', `Tag_ABI_VFP_args', 6787 `Tag_ABI_WMMX_args', `Tag_ABI_optimization_goals', 6788 `Tag_ABI_FP_optimization_goals', `Tag_compatibility', 6789 `Tag_CPU_unaligned_access', `Tag_FP_HP_extension', 6790 `Tag_ABI_FP_16bit_format', `Tag_MPextension_use', `Tag_DIV_use', 6791 `Tag_nodefaults', `Tag_also_compatible_with', `Tag_conformance', 6792 `Tag_T2EE_use', `Tag_Virtualization_use' 6793 6794 The VALUE is either a `number', `"string"', or `number, "string"' 6795 depending on the tag. 6796 6797 Note - the following legacy values are also accepted by TAG: 6798 `Tag_VFP_arch', `Tag_ABI_align8_needed', 6799 `Tag_ABI_align8_preserved', `Tag_VFP_HP_extension', 6800 6801`.even' 6802 This directive aligns to an even-numbered address. 6803 6804`.extend EXPRESSION [, EXPRESSION]*' 6805`.ldouble EXPRESSION [, EXPRESSION]*' 6806 These directives write 12byte long double floating-point values to 6807 the output section. These are not compatible with current ARM 6808 processors or ABIs. 6809 6810`.fnend' 6811 Marks the end of a function with an unwind table entry. The 6812 unwind index table entry is created when this directive is 6813 processed. 6814 6815 If no personality routine has been specified then standard 6816 personality routine 0 or 1 will be used, depending on the number 6817 of unwind opcodes required. 6818 6819`.fnstart' 6820 Marks the start of a function with an unwind table entry. 6821 6822`.force_thumb' 6823 This directive forces the selection of Thumb instructions, even if 6824 the target processor does not support those instructions 6825 6826`.fpu NAME' 6827 Select the floating-point unit to assemble for. Valid values for 6828 NAME are the same as for the `-mfpu' commandline option. 6829 6830`.handlerdata' 6831 Marks the end of the current function, and the start of the 6832 exception table entry for that function. Anything between this 6833 directive and the `.fnend' directive will be added to the 6834 exception table entry. 6835 6836 Must be preceded by a `.personality' or `.personalityindex' 6837 directive. 6838 6839`.inst OPCODE [ , ... ]' 6840`.inst.n OPCODE [ , ... ]' 6841`.inst.w OPCODE [ , ... ]' 6842 Generates the instruction corresponding to the numerical value 6843 OPCODE. `.inst.n' and `.inst.w' allow the Thumb instruction size 6844 to be specified explicitly, overriding the normal encoding rules. 6845 6846`.ldouble EXPRESSION [, EXPRESSION]*' 6847 See `.extend'. 6848 6849`.ltorg' 6850 This directive causes the current contents of the literal pool to 6851 be dumped into the current section (which is assumed to be the 6852 .text section) at the current location (aligned to a word 6853 boundary). `GAS' maintains a separate literal pool for each 6854 section and each sub-section. The `.ltorg' directive will only 6855 affect the literal pool of the current section and sub-section. 6856 At the end of assembly all remaining, un-empty literal pools will 6857 automatically be dumped. 6858 6859 Note - older versions of `GAS' would dump the current literal pool 6860 any time a section change occurred. This is no longer done, since 6861 it prevents accurate control of the placement of literal pools. 6862 6863`.movsp REG [, #OFFSET]' 6864 Tell the unwinder that REG contains an offset from the current 6865 stack pointer. If OFFSET is not specified then it is assumed to be 6866 zero. 6867 6868`.object_arch NAME' 6869 Override the architecture recorded in the EABI object attribute 6870 section. Valid values for NAME are the same as for the `.arch' 6871 directive. Typically this is useful when code uses runtime 6872 detection of CPU features. 6873 6874`.packed EXPRESSION [, EXPRESSION]*' 6875 This directive writes 12-byte packed floating-point values to the 6876 output section. These are not compatible with current ARM 6877 processors or ABIs. 6878 6879`.pad #COUNT' 6880 Generate unwinder annotations for a stack adjustment of COUNT 6881 bytes. A positive value indicates the function prologue allocated 6882 stack space by decrementing the stack pointer. 6883 6884`.personality NAME' 6885 Sets the personality routine for the current function to NAME. 6886 6887`.personalityindex INDEX' 6888 Sets the personality routine for the current function to the EABI 6889 standard routine number INDEX 6890 6891`.pool' 6892 This is a synonym for .ltorg. 6893 6894`NAME .req REGISTER NAME' 6895 This creates an alias for REGISTER NAME called NAME. For example: 6896 6897 foo .req r0 6898 6899`.save REGLIST' 6900 Generate unwinder annotations to restore the registers in REGLIST. 6901 The format of REGLIST is the same as the corresponding 6902 store-multiple instruction. 6903 6904 _core registers_ 6905 .save {r4, r5, r6, lr} 6906 stmfd sp!, {r4, r5, r6, lr} 6907 _FPA registers_ 6908 .save f4, 2 6909 sfmfd f4, 2, [sp]! 6910 _VFP registers_ 6911 .save {d8, d9, d10} 6912 fstmdx sp!, {d8, d9, d10} 6913 _iWMMXt registers_ 6914 .save {wr10, wr11} 6915 wstrd wr11, [sp, #-8]! 6916 wstrd wr10, [sp, #-8]! 6917 or 6918 .save wr11 6919 wstrd wr11, [sp, #-8]! 6920 .save wr10 6921 wstrd wr10, [sp, #-8]! 6922 6923`.setfp FPREG, SPREG [, #OFFSET]' 6924 Make all unwinder annotations relative to a frame pointer. 6925 Without this the unwinder will use offsets from the stack pointer. 6926 6927 The syntax of this directive is the same as the `add' or `mov' 6928 instruction used to set the frame pointer. SPREG must be either 6929 `sp' or mentioned in a previous `.movsp' directive. 6930 6931 .movsp ip 6932 mov ip, sp 6933 ... 6934 .setfp fp, ip, #4 6935 add fp, ip, #4 6936 6937`.secrel32 EXPRESSION [, EXPRESSION]*' 6938 This directive emits relocations that evaluate to the 6939 section-relative offset of each expression's symbol. This 6940 directive is only supported for PE targets. 6941 6942`.syntax [`unified' | `divided']' 6943 This directive sets the Instruction Set Syntax as described in the 6944 *Note ARM-Instruction-Set:: section. 6945 6946`.thumb' 6947 This performs the same action as .CODE 16. 6948 6949`.thumb_func' 6950 This directive specifies that the following symbol is the name of a 6951 Thumb encoded function. This information is necessary in order to 6952 allow the assembler and linker to generate correct code for 6953 interworking between Arm and Thumb instructions and should be used 6954 even if interworking is not going to be performed. The presence 6955 of this directive also implies `.thumb' 6956 6957 This directive is not neccessary when generating EABI objects. On 6958 these targets the encoding is implicit when generating Thumb code. 6959 6960`.thumb_set' 6961 This performs the equivalent of a `.set' directive in that it 6962 creates a symbol which is an alias for another symbol (possibly 6963 not yet defined). This directive also has the added property in 6964 that it marks the aliased symbol as being a thumb function entry 6965 point, in the same way that the `.thumb_func' directive does. 6966 6967`.unreq ALIAS-NAME' 6968 This undefines a register alias which was previously defined using 6969 the `req', `dn' or `qn' directives. For example: 6970 6971 foo .req r0 6972 .unreq foo 6973 6974 An error occurs if the name is undefined. Note - this pseudo op 6975 can be used to delete builtin in register name aliases (eg 'r0'). 6976 This should only be done if it is really necessary. 6977 6978`.unwind_raw OFFSET, BYTE1, ...' 6979 Insert one of more arbitary unwind opcode bytes, which are known 6980 to adjust the stack pointer by OFFSET bytes. 6981 6982 For example `.unwind_raw 4, 0xb1, 0x01' is equivalent to `.save 6983 {r0}' 6984 6985`.vsave VFP-REGLIST' 6986 Generate unwinder annotations to restore the VFP registers in 6987 VFP-REGLIST using FLDMD. Also works for VFPv3 registers that are 6988 to be restored using VLDM. The format of VFP-REGLIST is the same 6989 as the corresponding store-multiple instruction. 6990 6991 _VFP registers_ 6992 .vsave {d8, d9, d10} 6993 fstmdd sp!, {d8, d9, d10} 6994 _VFPv3 registers_ 6995 .vsave {d15, d16, d17} 6996 vstm sp!, {d15, d16, d17} 6997 6998 Since FLDMX and FSTMX are now deprecated, this directive should be 6999 used in favour of `.save' for saving VFP registers for ARMv6 and 7000 above. 7001 7002 7003 7004File: as.info, Node: ARM Opcodes, Next: ARM Mapping Symbols, Prev: ARM Directives, Up: ARM-Dependent 7005 70069.3.5 Opcodes 7007------------- 7008 7009`as' implements all the standard ARM opcodes. It also implements 7010several pseudo opcodes, including several synthetic load instructions. 7011 7012`NOP' 7013 nop 7014 7015 This pseudo op will always evaluate to a legal ARM instruction 7016 that does nothing. Currently it will evaluate to MOV r0, r0. 7017 7018`LDR' 7019 ldr <register> , = <expression> 7020 7021 If expression evaluates to a numeric constant then a MOV or MVN 7022 instruction will be used in place of the LDR instruction, if the 7023 constant can be generated by either of these instructions. 7024 Otherwise the constant will be placed into the nearest literal 7025 pool (if it not already there) and a PC relative LDR instruction 7026 will be generated. 7027 7028`ADR' 7029 adr <register> <label> 7030 7031 This instruction will load the address of LABEL into the indicated 7032 register. The instruction will evaluate to a PC relative ADD or 7033 SUB instruction depending upon where the label is located. If the 7034 label is out of range, or if it is not defined in the same file 7035 (and section) as the ADR instruction, then an error will be 7036 generated. This instruction will not make use of the literal pool. 7037 7038`ADRL' 7039 adrl <register> <label> 7040 7041 This instruction will load the address of LABEL into the indicated 7042 register. The instruction will evaluate to one or two PC relative 7043 ADD or SUB instructions depending upon where the label is located. 7044 If a second instruction is not needed a NOP instruction will be 7045 generated in its place, so that this instruction is always 8 bytes 7046 long. 7047 7048 If the label is out of range, or if it is not defined in the same 7049 file (and section) as the ADRL instruction, then an error will be 7050 generated. This instruction will not make use of the literal pool. 7051 7052 7053 For information on the ARM or Thumb instruction sets, see `ARM 7054Software Development Toolkit Reference Manual', Advanced RISC Machines 7055Ltd. 7056 7057 7058File: as.info, Node: ARM Mapping Symbols, Next: ARM Unwinding Tutorial, Prev: ARM Opcodes, Up: ARM-Dependent 7059 70609.3.6 Mapping Symbols 7061--------------------- 7062 7063The ARM ELF specification requires that special symbols be inserted 7064into object files to mark certain features: 7065 7066`$a' 7067 At the start of a region of code containing ARM instructions. 7068 7069`$t' 7070 At the start of a region of code containing THUMB instructions. 7071 7072`$d' 7073 At the start of a region of data. 7074 7075 7076 The assembler will automatically insert these symbols for you - there 7077is no need to code them yourself. Support for tagging symbols ($b, $f, 7078$p and $m) which is also mentioned in the current ARM ELF specification 7079is not implemented. This is because they have been dropped from the 7080new EABI and so tools cannot rely upon their presence. 7081 7082 7083File: as.info, Node: ARM Unwinding Tutorial, Prev: ARM Mapping Symbols, Up: ARM-Dependent 7084 70859.3.7 Unwinding 7086--------------- 7087 7088The ABI for the ARM Architecture specifies a standard format for 7089exception unwind information. This information is used when an 7090exception is thrown to determine where control should be transferred. 7091In particular, the unwind information is used to determine which 7092function called the function that threw the exception, and which 7093function called that one, and so forth. This information is also used 7094to restore the values of callee-saved registers in the function 7095catching the exception. 7096 7097 If you are writing functions in assembly code, and those functions 7098call other functions that throw exceptions, you must use assembly 7099pseudo ops to ensure that appropriate exception unwind information is 7100generated. Otherwise, if one of the functions called by your assembly 7101code throws an exception, the run-time library will be unable to unwind 7102the stack through your assembly code and your program will not behave 7103correctly. 7104 7105 To illustrate the use of these pseudo ops, we will examine the code 7106that G++ generates for the following C++ input: 7107 7108 7109void callee (int *); 7110 7111int 7112caller () 7113{ 7114 int i; 7115 callee (&i); 7116 return i; 7117} 7118 7119 This example does not show how to throw or catch an exception from 7120assembly code. That is a much more complex operation and should always 7121be done in a high-level language, such as C++, that directly supports 7122exceptions. 7123 7124 The code generated by one particular version of G++ when compiling 7125the example above is: 7126 7127 7128_Z6callerv: 7129 .fnstart 7130.LFB2: 7131 @ Function supports interworking. 7132 @ args = 0, pretend = 0, frame = 8 7133 @ frame_needed = 1, uses_anonymous_args = 0 7134 stmfd sp!, {fp, lr} 7135 .save {fp, lr} 7136.LCFI0: 7137 .setfp fp, sp, #4 7138 add fp, sp, #4 7139.LCFI1: 7140 .pad #8 7141 sub sp, sp, #8 7142.LCFI2: 7143 sub r3, fp, #8 7144 mov r0, r3 7145 bl _Z6calleePi 7146 ldr r3, [fp, #-8] 7147 mov r0, r3 7148 sub sp, fp, #4 7149 ldmfd sp!, {fp, lr} 7150 bx lr 7151.LFE2: 7152 .fnend 7153 7154 Of course, the sequence of instructions varies based on the options 7155you pass to GCC and on the version of GCC in use. The exact 7156instructions are not important since we are focusing on the pseudo ops 7157that are used to generate unwind information. 7158 7159 An important assumption made by the unwinder is that the stack frame 7160does not change during the body of the function. In particular, since 7161we assume that the assembly code does not itself throw an exception, 7162the only point where an exception can be thrown is from a call, such as 7163the `bl' instruction above. At each call site, the same saved 7164registers (including `lr', which indicates the return address) must be 7165located in the same locations relative to the frame pointer. 7166 7167 The `.fnstart' (*note .fnstart pseudo op: arm_fnstart.) pseudo op 7168appears immediately before the first instruction of the function while 7169the `.fnend' (*note .fnend pseudo op: arm_fnend.) pseudo op appears 7170immediately after the last instruction of the function. These pseudo 7171ops specify the range of the function. 7172 7173 Only the order of the other pseudos ops (e.g., `.setfp' or `.pad') 7174matters; their exact locations are irrelevant. In the example above, 7175the compiler emits the pseudo ops with particular instructions. That 7176makes it easier to understand the code, but it is not required for 7177correctness. It would work just as well to emit all of the pseudo ops 7178other than `.fnend' in the same order, but immediately after `.fnstart'. 7179 7180 The `.save' (*note .save pseudo op: arm_save.) pseudo op indicates 7181registers that have been saved to the stack so that they can be 7182restored before the function returns. The argument to the `.save' 7183pseudo op is a list of registers to save. If a register is 7184"callee-saved" (as specified by the ABI) and is modified by the 7185function you are writing, then your code must save the value before it 7186is modified and restore the original value before the function returns. 7187If an exception is thrown, the run-time library restores the values of 7188these registers from their locations on the stack before returning 7189control to the exception handler. (Of course, if an exception is not 7190thrown, the function that contains the `.save' pseudo op restores these 7191registers in the function epilogue, as is done with the `ldmfd' 7192instruction above.) 7193 7194 You do not have to save callee-saved registers at the very beginning 7195of the function and you do not need to use the `.save' pseudo op 7196immediately following the point at which the registers are saved. 7197However, if you modify a callee-saved register, you must save it on the 7198stack before modifying it and before calling any functions which might 7199throw an exception. And, you must use the `.save' pseudo op to 7200indicate that you have done so. 7201 7202 The `.pad' (*note .pad: arm_pad.) pseudo op indicates a modification 7203of the stack pointer that does not save any registers. The argument is 7204the number of bytes (in decimal) that are subtracted from the stack 7205pointer. (On ARM CPUs, the stack grows downwards, so subtracting from 7206the stack pointer increases the size of the stack.) 7207 7208 The `.setfp' (*note .setfp pseudo op: arm_setfp.) pseudo op 7209indicates the register that contains the frame pointer. The first 7210argument is the register that is set, which is typically `fp'. The 7211second argument indicates the register from which the frame pointer 7212takes its value. The third argument, if present, is the value (in 7213decimal) added to the register specified by the second argument to 7214compute the value of the frame pointer. You should not modify the 7215frame pointer in the body of the function. 7216 7217 If you do not use a frame pointer, then you should not use the 7218`.setfp' pseudo op. If you do not use a frame pointer, then you should 7219avoid modifying the stack pointer outside of the function prologue. 7220Otherwise, the run-time library will be unable to find saved registers 7221when it is unwinding the stack. 7222 7223 The pseudo ops described above are sufficient for writing assembly 7224code that calls functions which may throw exceptions. If you need to 7225know more about the object-file format used to represent unwind 7226information, you may consult the `Exception Handling ABI for the ARM 7227Architecture' available from `http://infocenter.arm.com'. 7228 7229 7230File: as.info, Node: AVR-Dependent, Next: Blackfin-Dependent, Prev: ARM-Dependent, Up: Machine Dependencies 7231 72329.4 AVR Dependent Features 7233========================== 7234 7235* Menu: 7236 7237* AVR Options:: Options 7238* AVR Syntax:: Syntax 7239* AVR Opcodes:: Opcodes 7240 7241 7242File: as.info, Node: AVR Options, Next: AVR Syntax, Up: AVR-Dependent 7243 72449.4.1 Options 7245------------- 7246 7247`-mmcu=MCU' 7248 Specify ATMEL AVR instruction set or MCU type. 7249 7250 Instruction set avr1 is for the minimal AVR core, not supported by 7251 the C compiler, only for assembler programs (MCU types: at90s1200, 7252 attiny11, attiny12, attiny15, attiny28). 7253 7254 Instruction set avr2 (default) is for the classic AVR core with up 7255 to 8K program memory space (MCU types: at90s2313, at90s2323, 7256 at90s2333, at90s2343, attiny22, attiny26, at90s4414, at90s4433, 7257 at90s4434, at90s8515, at90c8534, at90s8535). 7258 7259 Instruction set avr25 is for the classic AVR core with up to 8K 7260 program memory space plus the MOVW instruction (MCU types: 7261 attiny13, attiny13a, attiny2313, attiny2313a, attiny24, attiny24a, 7262 attiny4313, attiny44, attiny44a, attiny84, attiny84a, attiny25, 7263 attiny45, attiny85, attiny261, attiny261a, attiny461, attiny461a, 7264 attiny861, attiny861a, attiny87, attiny43u, attiny48, attiny88, 7265 at86rf401, ata6289). 7266 7267 Instruction set avr3 is for the classic AVR core with up to 128K 7268 program memory space (MCU types: at43usb355, at76c711). 7269 7270 Instruction set avr31 is for the classic AVR core with exactly 7271 128K program memory space (MCU types: atmega103, at43usb320). 7272 7273 Instruction set avr35 is for classic AVR core plus MOVW, CALL, and 7274 JMP instructions (MCU types: attiny167, at90usb82, at90usb162, 7275 atmega8u2, atmega16u2, atmega32u2). 7276 7277 Instruction set avr4 is for the enhanced AVR core with up to 8K 7278 program memory space (MCU types: atmega48, atmega48a, atmega48p, 7279 atmega8, atmega88, atmega88a, atmega88p, atmega88pa, atmega8515, 7280 atmega8535, atmega8hva, at90pwm1, at90pwm2, at90pwm2b, at90pwm3, 7281 at90pwm3b, at90pwm81). 7282 7283 Instruction set avr5 is for the enhanced AVR core with up to 128K 7284 program memory space (MCU types: atmega16, atmega16a, atmega161, 7285 atmega162, atmega163, atmega164a, atmega164p, atmega165, 7286 atmega165a, atmega165p, atmega168, atmega168a, atmega168p, 7287 atmega169, atmega169a, atmega169p, atmega169pa, atmega32, 7288 atmega323, atmega324a, atmega324p, atmega325, atmega325a, 7289 atmega325p, atmega3250, atmega3250a, atmega3250p, atmega328, 7290 atmega328p, atmega329, atmega329a, atmega329p, atmega329pa, 7291 atmega3290, atmega3290a, atmega3290p, atmega406, atmega64, 7292 atmega640, atmega644, atmega644a, atmega644p, atmega644pa, 7293 atmega645, atmega645a, atmega645p, atmega6450, atmega6450a, 7294 atmega6450p, atmega649, atmega649a, atmega649p, atmega6490, 7295 atmega6490a, atmega6490p, atmega16hva, atmega16hva2, atmega16hvb, 7296 atmega32hvb, atmega64hve, at90can32, at90can64, at90pwm216, 7297 at90pwm316, atmega32c1, atmega64c1, atmega16m1, atmega32m1, 7298 atmega64m1, atmega16u4, atmega32u4, atmega32u6, at90usb646, 7299 at90usb647, at94k, at90scr100). 7300 7301 Instruction set avr51 is for the enhanced AVR core with exactly 7302 128K program memory space (MCU types: atmega128, atmega1280, 7303 atmega1281, atmega1284p, atmega128rfa1, at90can128, at90usb1286, 7304 at90usb1287, m3000). 7305 7306 Instruction set avr6 is for the enhanced AVR core with a 3-byte PC 7307 (MCU types: atmega2560, atmega2561). 7308 7309`-mall-opcodes' 7310 Accept all AVR opcodes, even if not supported by `-mmcu'. 7311 7312`-mno-skip-bug' 7313 This option disable warnings for skipping two-word instructions. 7314 7315`-mno-wrap' 7316 This option reject `rjmp/rcall' instructions with 8K wrap-around. 7317 7318 7319 7320File: as.info, Node: AVR Syntax, Next: AVR Opcodes, Prev: AVR Options, Up: AVR-Dependent 7321 73229.4.2 Syntax 7323------------ 7324 7325* Menu: 7326 7327* AVR-Chars:: Special Characters 7328* AVR-Regs:: Register Names 7329* AVR-Modifiers:: Relocatable Expression Modifiers 7330 7331 7332File: as.info, Node: AVR-Chars, Next: AVR-Regs, Up: AVR Syntax 7333 73349.4.2.1 Special Characters 7335.......................... 7336 7337The presence of a `;' on a line indicates the start of a comment that 7338extends to the end of the current line. If a `#' appears as the first 7339character of a line, the whole line is treated as a comment. 7340 7341 The `$' character can be used instead of a newline to separate 7342statements. 7343 7344 7345File: as.info, Node: AVR-Regs, Next: AVR-Modifiers, Prev: AVR-Chars, Up: AVR Syntax 7346 73479.4.2.2 Register Names 7348...................... 7349 7350The AVR has 32 x 8-bit general purpose working registers `r0', `r1', 7351... `r31'. Six of the 32 registers can be used as three 16-bit 7352indirect address register pointers for Data Space addressing. One of 7353the these address pointers can also be used as an address pointer for 7354look up tables in Flash program memory. These added function registers 7355are the 16-bit `X', `Y' and `Z' - registers. 7356 7357 X = r26:r27 7358 Y = r28:r29 7359 Z = r30:r31 7360 7361 7362File: as.info, Node: AVR-Modifiers, Prev: AVR-Regs, Up: AVR Syntax 7363 73649.4.2.3 Relocatable Expression Modifiers 7365........................................ 7366 7367The assembler supports several modifiers when using relocatable 7368addresses in AVR instruction operands. The general syntax is the 7369following: 7370 7371 modifier(relocatable-expression) 7372 7373`lo8' 7374 This modifier allows you to use bits 0 through 7 of an address 7375 expression as 8 bit relocatable expression. 7376 7377`hi8' 7378 This modifier allows you to use bits 7 through 15 of an address 7379 expression as 8 bit relocatable expression. This is useful with, 7380 for example, the AVR `ldi' instruction and `lo8' modifier. 7381 7382 For example 7383 7384 ldi r26, lo8(sym+10) 7385 ldi r27, hi8(sym+10) 7386 7387`hh8' 7388 This modifier allows you to use bits 16 through 23 of an address 7389 expression as 8 bit relocatable expression. Also, can be useful 7390 for loading 32 bit constants. 7391 7392`hlo8' 7393 Synonym of `hh8'. 7394 7395`hhi8' 7396 This modifier allows you to use bits 24 through 31 of an 7397 expression as 8 bit expression. This is useful with, for example, 7398 the AVR `ldi' instruction and `lo8', `hi8', `hlo8', `hhi8', 7399 modifier. 7400 7401 For example 7402 7403 ldi r26, lo8(285774925) 7404 ldi r27, hi8(285774925) 7405 ldi r28, hlo8(285774925) 7406 ldi r29, hhi8(285774925) 7407 ; r29,r28,r27,r26 = 285774925 7408 7409`pm_lo8' 7410 This modifier allows you to use bits 0 through 7 of an address 7411 expression as 8 bit relocatable expression. This modifier useful 7412 for addressing data or code from Flash/Program memory. The using 7413 of `pm_lo8' similar to `lo8'. 7414 7415`pm_hi8' 7416 This modifier allows you to use bits 8 through 15 of an address 7417 expression as 8 bit relocatable expression. This modifier useful 7418 for addressing data or code from Flash/Program memory. 7419 7420`pm_hh8' 7421 This modifier allows you to use bits 15 through 23 of an address 7422 expression as 8 bit relocatable expression. This modifier useful 7423 for addressing data or code from Flash/Program memory. 7424 7425 7426 7427File: as.info, Node: AVR Opcodes, Prev: AVR Syntax, Up: AVR-Dependent 7428 74299.4.3 Opcodes 7430------------- 7431 7432For detailed information on the AVR machine instruction set, see 7433`www.atmel.com/products/AVR'. 7434 7435 `as' implements all the standard AVR opcodes. The following table 7436summarizes the AVR opcodes, and their arguments. 7437 7438 Legend: 7439 r any register 7440 d `ldi' register (r16-r31) 7441 v `movw' even register (r0, r2, ..., r28, r30) 7442 a `fmul' register (r16-r23) 7443 w `adiw' register (r24,r26,r28,r30) 7444 e pointer registers (X,Y,Z) 7445 b base pointer register and displacement ([YZ]+disp) 7446 z Z pointer register (for [e]lpm Rd,Z[+]) 7447 M immediate value from 0 to 255 7448 n immediate value from 0 to 255 ( n = ~M ). Relocation impossible 7449 s immediate value from 0 to 7 7450 P Port address value from 0 to 63. (in, out) 7451 p Port address value from 0 to 31. (cbi, sbi, sbic, sbis) 7452 K immediate value from 0 to 63 (used in `adiw', `sbiw') 7453 i immediate value 7454 l signed pc relative offset from -64 to 63 7455 L signed pc relative offset from -2048 to 2047 7456 h absolute code address (call, jmp) 7457 S immediate value from 0 to 7 (S = s << 4) 7458 ? use this opcode entry if no parameters, else use next opcode entry 7459 7460 1001010010001000 clc 7461 1001010011011000 clh 7462 1001010011111000 cli 7463 1001010010101000 cln 7464 1001010011001000 cls 7465 1001010011101000 clt 7466 1001010010111000 clv 7467 1001010010011000 clz 7468 1001010000001000 sec 7469 1001010001011000 seh 7470 1001010001111000 sei 7471 1001010000101000 sen 7472 1001010001001000 ses 7473 1001010001101000 set 7474 1001010000111000 sev 7475 1001010000011000 sez 7476 100101001SSS1000 bclr S 7477 100101000SSS1000 bset S 7478 1001010100001001 icall 7479 1001010000001001 ijmp 7480 1001010111001000 lpm ? 7481 1001000ddddd010+ lpm r,z 7482 1001010111011000 elpm ? 7483 1001000ddddd011+ elpm r,z 7484 0000000000000000 nop 7485 1001010100001000 ret 7486 1001010100011000 reti 7487 1001010110001000 sleep 7488 1001010110011000 break 7489 1001010110101000 wdr 7490 1001010111101000 spm 7491 000111rdddddrrrr adc r,r 7492 000011rdddddrrrr add r,r 7493 001000rdddddrrrr and r,r 7494 000101rdddddrrrr cp r,r 7495 000001rdddddrrrr cpc r,r 7496 000100rdddddrrrr cpse r,r 7497 001001rdddddrrrr eor r,r 7498 001011rdddddrrrr mov r,r 7499 100111rdddddrrrr mul r,r 7500 001010rdddddrrrr or r,r 7501 000010rdddddrrrr sbc r,r 7502 000110rdddddrrrr sub r,r 7503 001001rdddddrrrr clr r 7504 000011rdddddrrrr lsl r 7505 000111rdddddrrrr rol r 7506 001000rdddddrrrr tst r 7507 0111KKKKddddKKKK andi d,M 7508 0111KKKKddddKKKK cbr d,n 7509 1110KKKKddddKKKK ldi d,M 7510 11101111dddd1111 ser d 7511 0110KKKKddddKKKK ori d,M 7512 0110KKKKddddKKKK sbr d,M 7513 0011KKKKddddKKKK cpi d,M 7514 0100KKKKddddKKKK sbci d,M 7515 0101KKKKddddKKKK subi d,M 7516 1111110rrrrr0sss sbrc r,s 7517 1111111rrrrr0sss sbrs r,s 7518 1111100ddddd0sss bld r,s 7519 1111101ddddd0sss bst r,s 7520 10110PPdddddPPPP in r,P 7521 10111PPrrrrrPPPP out P,r 7522 10010110KKddKKKK adiw w,K 7523 10010111KKddKKKK sbiw w,K 7524 10011000pppppsss cbi p,s 7525 10011010pppppsss sbi p,s 7526 10011001pppppsss sbic p,s 7527 10011011pppppsss sbis p,s 7528 111101lllllll000 brcc l 7529 111100lllllll000 brcs l 7530 111100lllllll001 breq l 7531 111101lllllll100 brge l 7532 111101lllllll101 brhc l 7533 111100lllllll101 brhs l 7534 111101lllllll111 brid l 7535 111100lllllll111 brie l 7536 111100lllllll000 brlo l 7537 111100lllllll100 brlt l 7538 111100lllllll010 brmi l 7539 111101lllllll001 brne l 7540 111101lllllll010 brpl l 7541 111101lllllll000 brsh l 7542 111101lllllll110 brtc l 7543 111100lllllll110 brts l 7544 111101lllllll011 brvc l 7545 111100lllllll011 brvs l 7546 111101lllllllsss brbc s,l 7547 111100lllllllsss brbs s,l 7548 1101LLLLLLLLLLLL rcall L 7549 1100LLLLLLLLLLLL rjmp L 7550 1001010hhhhh111h call h 7551 1001010hhhhh110h jmp h 7552 1001010rrrrr0101 asr r 7553 1001010rrrrr0000 com r 7554 1001010rrrrr1010 dec r 7555 1001010rrrrr0011 inc r 7556 1001010rrrrr0110 lsr r 7557 1001010rrrrr0001 neg r 7558 1001000rrrrr1111 pop r 7559 1001001rrrrr1111 push r 7560 1001010rrrrr0111 ror r 7561 1001010rrrrr0010 swap r 7562 00000001ddddrrrr movw v,v 7563 00000010ddddrrrr muls d,d 7564 000000110ddd0rrr mulsu a,a 7565 000000110ddd1rrr fmul a,a 7566 000000111ddd0rrr fmuls a,a 7567 000000111ddd1rrr fmulsu a,a 7568 1001001ddddd0000 sts i,r 7569 1001000ddddd0000 lds r,i 7570 10o0oo0dddddbooo ldd r,b 7571 100!000dddddee-+ ld r,e 7572 10o0oo1rrrrrbooo std b,r 7573 100!001rrrrree-+ st e,r 7574 1001010100011001 eicall 7575 1001010000011001 eijmp 7576 7577 7578File: as.info, Node: Blackfin-Dependent, Next: CR16-Dependent, Prev: AVR-Dependent, Up: Machine Dependencies 7579 75809.5 Blackfin Dependent Features 7581=============================== 7582 7583* Menu: 7584 7585* Blackfin Options:: Blackfin Options 7586* Blackfin Syntax:: Blackfin Syntax 7587* Blackfin Directives:: Blackfin Directives 7588 7589 7590File: as.info, Node: Blackfin Options, Next: Blackfin Syntax, Up: Blackfin-Dependent 7591 75929.5.1 Options 7593------------- 7594 7595`-mcpu=PROCESSOR[-SIREVISION]' 7596 This option specifies the target processor. The optional 7597 SIREVISION is not used in assembler. It's here such that GCC can 7598 easily pass down its `-mcpu=' option. The assembler will issue an 7599 error message if an attempt is made to assemble an instruction 7600 which will not execute on the target processor. The following 7601 processor names are recognized: `bf504', `bf506', `bf512', `bf514', 7602 `bf516', `bf518', `bf522', `bf523', `bf524', `bf525', `bf526', 7603 `bf527', `bf531', `bf532', `bf533', `bf534', `bf535' (not 7604 implemented yet), `bf536', `bf537', `bf538', `bf539', `bf542', 7605 `bf542m', `bf544', `bf544m', `bf547', `bf547m', `bf548', `bf548m', 7606 `bf549', `bf549m', `bf561', and `bf592'. 7607 7608`-mfdpic' 7609 Assemble for the FDPIC ABI. 7610 7611`-mno-fdpic' 7612`-mnopic' 7613 Disable -mfdpic. 7614 7615 7616File: as.info, Node: Blackfin Syntax, Next: Blackfin Directives, Prev: Blackfin Options, Up: Blackfin-Dependent 7617 76189.5.2 Syntax 7619------------ 7620 7621`Special Characters' 7622 Assembler input is free format and may appear anywhere on the line. 7623 One instruction may extend across multiple lines or more than one 7624 instruction may appear on the same line. White space (space, tab, 7625 comments or newline) may appear anywhere between tokens. A token 7626 must not have embedded spaces. Tokens include numbers, register 7627 names, keywords, user identifiers, and also some multicharacter 7628 special symbols like "+=", "/*" or "||". 7629 7630`Instruction Delimiting' 7631 A semicolon must terminate every instruction. Sometimes a complete 7632 instruction will consist of more than one operation. There are two 7633 cases where this occurs. The first is when two general operations 7634 are combined. Normally a comma separates the different parts, as 7635 in 7636 7637 a0= r3.h * r2.l, a1 = r3.l * r2.h ; 7638 7639 The second case occurs when a general instruction is combined with 7640 one or two memory references for joint issue. The latter portions 7641 are set off by a "||" token. 7642 7643 a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++]; 7644 7645`Register Names' 7646 The assembler treats register names and instruction keywords in a 7647 case insensitive manner. User identifiers are case sensitive. 7648 Thus, R3.l, R3.L, r3.l and r3.L are all equivalent input to the 7649 assembler. 7650 7651 Register names are reserved and may not be used as program 7652 identifiers. 7653 7654 Some operations (such as "Move Register") require a register pair. 7655 Register pairs are always data registers and are denoted using a 7656 colon, eg., R3:2. The larger number must be written firsts. Note 7657 that the hardware only supports odd-even pairs, eg., R7:6, R5:4, 7658 R3:2, and R1:0. 7659 7660 Some instructions (such as -SP (Push Multiple)) require a group of 7661 adjacent registers. Adjacent registers are denoted in the syntax 7662 by the range enclosed in parentheses and separated by a colon, 7663 eg., (R7:3). Again, the larger number appears first. 7664 7665 Portions of a particular register may be individually specified. 7666 This is written with a dot (".") following the register name and 7667 then a letter denoting the desired portion. For 32-bit registers, 7668 ".H" denotes the most significant ("High") portion. ".L" denotes 7669 the least-significant portion. The subdivisions of the 40-bit 7670 registers are described later. 7671 7672`Accumulators' 7673 The set of 40-bit registers A1 and A0 that normally contain data 7674 that is being manipulated. Each accumulator can be accessed in 7675 four ways. 7676 7677 `one 40-bit register' 7678 The register will be referred to as A1 or A0. 7679 7680 `one 32-bit register' 7681 The registers are designated as A1.W or A0.W. 7682 7683 `two 16-bit registers' 7684 The registers are designated as A1.H, A1.L, A0.H or A0.L. 7685 7686 `one 8-bit register' 7687 The registers are designated as A1.X or A0.X for the bits that 7688 extend beyond bit 31. 7689 7690`Data Registers' 7691 The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7) 7692 that normally contain data for manipulation. These are 7693 abbreviated as D-register or Dreg. Data registers can be accessed 7694 as 32-bit registers or as two independent 16-bit registers. The 7695 least significant 16 bits of each register is called the "low" 7696 half and is designated with ".L" following the register name. The 7697 most significant 16 bits are called the "high" half and is 7698 designated with ".H" following the name. 7699 7700 R7.L, r2.h, r4.L, R0.H 7701 7702`Pointer Registers' 7703 The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP) 7704 that normally contain byte addresses of data structures. These are 7705 abbreviated as P-register or Preg. 7706 7707 p2, p5, fp, sp 7708 7709`Stack Pointer SP' 7710 The stack pointer contains the 32-bit address of the last occupied 7711 byte location in the stack. The stack grows by decrementing the 7712 stack pointer. 7713 7714`Frame Pointer FP' 7715 The frame pointer contains the 32-bit address of the previous frame 7716 pointer in the stack. It is located at the top of a frame. 7717 7718`Loop Top' 7719 LT0 and LT1. These registers contain the 32-bit address of the 7720 top of a zero overhead loop. 7721 7722`Loop Count' 7723 LC0 and LC1. These registers contain the 32-bit counter of the 7724 zero overhead loop executions. 7725 7726`Loop Bottom' 7727 LB0 and LB1. These registers contain the 32-bit address of the 7728 bottom of a zero overhead loop. 7729 7730`Index Registers' 7731 The set of 32-bit registers (I0, I1, I2, I3) that normally contain 7732 byte addresses of data structures. Abbreviated I-register or Ireg. 7733 7734`Modify Registers' 7735 The set of 32-bit registers (M0, M1, M2, M3) that normally contain 7736 offset values that are added and subracted to one of the index 7737 registers. Abbreviated as Mreg. 7738 7739`Length Registers' 7740 The set of 32-bit registers (L0, L1, L2, L3) that normally contain 7741 the length in bytes of the circular buffer. Abbreviated as Lreg. 7742 Clear the Lreg to disable circular addressing for the 7743 corresponding Ireg. 7744 7745`Base Registers' 7746 The set of 32-bit registers (B0, B1, B2, B3) that normally contain 7747 the base address in bytes of the circular buffer. Abbreviated as 7748 Breg. 7749 7750`Floating Point' 7751 The Blackfin family has no hardware floating point but the .float 7752 directive generates ieee floating point numbers for use with 7753 software floating point libraries. 7754 7755`Blackfin Opcodes' 7756 For detailed information on the Blackfin machine instruction set, 7757 see the Blackfin(r) Processor Instruction Set Reference. 7758 7759 7760 7761File: as.info, Node: Blackfin Directives, Prev: Blackfin Syntax, Up: Blackfin-Dependent 7762 77639.5.3 Directives 7764---------------- 7765 7766The following directives are provided for compatibility with the VDSP 7767assembler. 7768 7769`.byte2' 7770 Initializes a four byte data object. 7771 7772`.byte4' 7773 Initializes a two byte data object. 7774 7775`.db' 7776 TBD 7777 7778`.dd' 7779 TBD 7780 7781`.dw' 7782 TBD 7783 7784`.var' 7785 Define and initialize a 32 bit data object. 7786 7787 7788File: as.info, Node: CR16-Dependent, Next: CRIS-Dependent, Prev: Blackfin-Dependent, Up: Machine Dependencies 7789 77909.6 CR16 Dependent Features 7791=========================== 7792 7793* Menu: 7794 7795* CR16 Operand Qualifiers:: CR16 Machine Operand Qualifiers 7796 7797 7798File: as.info, Node: CR16 Operand Qualifiers, Up: CR16-Dependent 7799 78009.6.1 CR16 Operand Qualifiers 7801----------------------------- 7802 7803The National Semiconductor CR16 target of `as' has a few machine 7804dependent operand qualifiers. 7805 7806 Operand expression type qualifier is an optional field in the 7807instruction operand, to determines the type of the expression field of 7808an operand. The `@' is required. CR16 architecture uses one of the 7809following expression qualifiers: 7810 7811`s' 7812 - `Specifies expression operand type as small' 7813 7814`m' 7815 - `Specifies expression operand type as medium' 7816 7817`l' 7818 - `Specifies expression operand type as large' 7819 7820`c' 7821 - `Specifies the CR16 Assembler generates a relocation entry for 7822 the operand, where pc has implied bit, the expression is adjusted 7823 accordingly. The linker uses the relocation entry to update the 7824 operand address at link time.' 7825 7826`got/GOT' 7827 - `Specifies the CR16 Assembler generates a relocation entry for 7828 the operand, offset from Global Offset Table. The linker uses this 7829 relocation entry to update the operand address at link time' 7830 7831`cgot/cGOT' 7832 - `Specifies the CompactRISC Assembler generates a relocation 7833 entry for the operand, where pc has implied bit, the expression is 7834 adjusted accordingly. The linker uses the relocation entry to 7835 update the operand address at link time.' 7836 7837 CR16 target operand qualifiers and its size (in bits): 7838 7839`Immediate Operand' 7840 - s --- 4 bits 7841 7842`' 7843 - m --- 16 bits, for movb and movw instructions. 7844 7845`' 7846 - m --- 20 bits, movd instructions. 7847 7848`' 7849 - l --- 32 bits 7850 7851`Absolute Operand' 7852 - s --- Illegal specifier for this operand. 7853 7854`' 7855 - m --- 20 bits, movd instructions. 7856 7857`Displacement Operand' 7858 - s --- 8 bits 7859 7860`' 7861 - m --- 16 bits 7862 7863`' 7864 - l --- 24 bits 7865 7866 For example: 7867 1 `movw $_myfun@c,r1' 7868 7869 This loads the address of _myfun, shifted right by 1, into r1. 7870 7871 2 `movd $_myfun@c,(r2,r1)' 7872 7873 This loads the address of _myfun, shifted right by 1, into register-pair r2-r1. 7874 7875 3 `_myfun_ptr:' 7876 `.long _myfun@c' 7877 `loadd _myfun_ptr, (r1,r0)' 7878 `jal (r1,r0)' 7879 7880 This .long directive, the address of _myfunc, shifted right by 1 at link time. 7881 7882 4 `loadd _data1@GOT(r12), (r1,r0)' 7883 7884 This loads the address of _data1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r2-r1. 7885 7886 5 `loadd _myfunc@cGOT(r12), (r1,r0)' 7887 7888 This loads the address of _myfun, shifted right by 1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r1-r0. 7889 7890 7891File: as.info, Node: CRIS-Dependent, Next: D10V-Dependent, Prev: CR16-Dependent, Up: Machine Dependencies 7892 78939.7 CRIS Dependent Features 7894=========================== 7895 7896* Menu: 7897 7898* CRIS-Opts:: Command-line Options 7899* CRIS-Expand:: Instruction expansion 7900* CRIS-Symbols:: Symbols 7901* CRIS-Syntax:: Syntax 7902 7903 7904File: as.info, Node: CRIS-Opts, Next: CRIS-Expand, Up: CRIS-Dependent 7905 79069.7.1 Command-line Options 7907-------------------------- 7908 7909The CRIS version of `as' has these machine-dependent command-line 7910options. 7911 7912 The format of the generated object files can be either ELF or a.out, 7913specified by the command-line options `--emulation=crisaout' and 7914`--emulation=criself'. The default is ELF (criself), unless `as' has 7915been configured specifically for a.out by using the configuration name 7916`cris-axis-aout'. 7917 7918 There are two different link-incompatible ELF object file variants 7919for CRIS, for use in environments where symbols are expected to be 7920prefixed by a leading `_' character and for environments without such a 7921symbol prefix. The variant used for GNU/Linux port has no symbol 7922prefix. Which variant to produce is specified by either of the options 7923`--underscore' and `--no-underscore'. The default is `--underscore'. 7924Since symbols in CRIS a.out objects are expected to have a `_' prefix, 7925specifying `--no-underscore' when generating a.out objects is an error. 7926Besides the object format difference, the effect of this option is to 7927parse register names differently (*note crisnous::). The 7928`--no-underscore' option makes a `$' register prefix mandatory. 7929 7930 The option `--pic' must be passed to `as' in order to recognize the 7931symbol syntax used for ELF (SVR4 PIC) position-independent-code (*note 7932crispic::). This will also affect expansion of instructions. The 7933expansion with `--pic' will use PC-relative rather than (slightly 7934faster) absolute addresses in those expansions. 7935 7936 The option `--march=ARCHITECTURE' specifies the recognized 7937instruction set and recognized register names. It also controls the 7938architecture type of the object file. Valid values for ARCHITECTURE 7939are: 7940`v0_v10' 7941 All instructions and register names for any architecture variant 7942 in the set v0...v10 are recognized. This is the default if the 7943 target is configured as cris-*. 7944 7945`v10' 7946 Only instructions and register names for CRIS v10 (as found in 7947 ETRAX 100 LX) are recognized. This is the default if the target 7948 is configured as crisv10-*. 7949 7950`v32' 7951 Only instructions and register names for CRIS v32 (code name 7952 Guinness) are recognized. This is the default if the target is 7953 configured as crisv32-*. This value implies `--no-mul-bug-abort'. 7954 (A subsequent `--mul-bug-abort' will turn it back on.) 7955 7956`common_v10_v32' 7957 Only instructions with register names and addressing modes with 7958 opcodes common to the v10 and v32 are recognized. 7959 7960 When `-N' is specified, `as' will emit a warning when a 16-bit 7961branch instruction is expanded into a 32-bit multiple-instruction 7962construct (*note CRIS-Expand::). 7963 7964 Some versions of the CRIS v10, for example in the Etrax 100 LX, 7965contain a bug that causes destabilizing memory accesses when a multiply 7966instruction is executed with certain values in the first operand just 7967before a cache-miss. When the `--mul-bug-abort' command line option is 7968active (the default value), `as' will refuse to assemble a file 7969containing a multiply instruction at a dangerous offset, one that could 7970be the last on a cache-line, or is in a section with insufficient 7971alignment. This placement checking does not catch any case where the 7972multiply instruction is dangerously placed because it is located in a 7973delay-slot. The `--mul-bug-abort' command line option turns off the 7974checking. 7975 7976 7977File: as.info, Node: CRIS-Expand, Next: CRIS-Symbols, Prev: CRIS-Opts, Up: CRIS-Dependent 7978 79799.7.2 Instruction expansion 7980--------------------------- 7981 7982`as' will silently choose an instruction that fits the operand size for 7983`[register+constant]' operands. For example, the offset `127' in 7984`move.d [r3+127],r4' fits in an instruction using a signed-byte offset. 7985Similarly, `move.d [r2+32767],r1' will generate an instruction using a 798616-bit offset. For symbolic expressions and constants that do not fit 7987in 16 bits including the sign bit, a 32-bit offset is generated. 7988 7989 For branches, `as' will expand from a 16-bit branch instruction into 7990a sequence of instructions that can reach a full 32-bit address. Since 7991this does not correspond to a single instruction, such expansions can 7992optionally be warned about. *Note CRIS-Opts::. 7993 7994 If the operand is found to fit the range, a `lapc' mnemonic will 7995translate to a `lapcq' instruction. Use `lapc.d' to force the 32-bit 7996`lapc' instruction. 7997 7998 Similarly, the `addo' mnemonic will translate to the shortest 7999fitting instruction of `addoq', `addo.w' and `addo.d', when used with a 8000operand that is a constant known at assembly time. 8001 8002 8003File: as.info, Node: CRIS-Symbols, Next: CRIS-Syntax, Prev: CRIS-Expand, Up: CRIS-Dependent 8004 80059.7.3 Symbols 8006------------- 8007 8008Some symbols are defined by the assembler. They're intended to be used 8009in conditional assembly, for example: 8010 .if ..asm.arch.cris.v32 8011 CODE FOR CRIS V32 8012 .elseif ..asm.arch.cris.common_v10_v32 8013 CODE COMMON TO CRIS V32 AND CRIS V10 8014 .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10 8015 CODE FOR V10 8016 .else 8017 .error "Code needs to be added here." 8018 .endif 8019 8020 These symbols are defined in the assembler, reflecting command-line 8021options, either when specified or the default. They are always 8022defined, to 0 or 1. 8023`..asm.arch.cris.any_v0_v10' 8024 This symbol is non-zero when `--march=v0_v10' is specified or the 8025 default. 8026 8027`..asm.arch.cris.common_v10_v32' 8028 Set according to the option `--march=common_v10_v32'. 8029 8030`..asm.arch.cris.v10' 8031 Reflects the option `--march=v10'. 8032 8033`..asm.arch.cris.v32' 8034 Corresponds to `--march=v10'. 8035 8036 Speaking of symbols, when a symbol is used in code, it can have a 8037suffix modifying its value for use in position-independent code. *Note 8038CRIS-Pic::. 8039 8040 8041File: as.info, Node: CRIS-Syntax, Prev: CRIS-Symbols, Up: CRIS-Dependent 8042 80439.7.4 Syntax 8044------------ 8045 8046There are different aspects of the CRIS assembly syntax. 8047 8048* Menu: 8049 8050* CRIS-Chars:: Special Characters 8051* CRIS-Pic:: Position-Independent Code Symbols 8052* CRIS-Regs:: Register Names 8053* CRIS-Pseudos:: Assembler Directives 8054 8055 8056File: as.info, Node: CRIS-Chars, Next: CRIS-Pic, Up: CRIS-Syntax 8057 80589.7.4.1 Special Characters 8059.......................... 8060 8061The character `#' is a line comment character. It starts a comment if 8062and only if it is placed at the beginning of a line. 8063 8064 A `;' character starts a comment anywhere on the line, causing all 8065characters up to the end of the line to be ignored. 8066 8067 A `@' character is handled as a line separator equivalent to a 8068logical new-line character (except in a comment), so separate 8069instructions can be specified on a single line. 8070 8071 8072File: as.info, Node: CRIS-Pic, Next: CRIS-Regs, Prev: CRIS-Chars, Up: CRIS-Syntax 8073 80749.7.4.2 Symbols in position-independent code 8075............................................ 8076 8077When generating position-independent code (SVR4 PIC) for use in 8078cris-axis-linux-gnu or crisv32-axis-linux-gnu shared libraries, symbol 8079suffixes are used to specify what kind of run-time symbol lookup will 8080be used, expressed in the object as different _relocation types_. 8081Usually, all absolute symbol values must be located in a table, the 8082_global offset table_, leaving the code position-independent; 8083independent of values of global symbols and independent of the address 8084of the code. The suffix modifies the value of the symbol, into for 8085example an index into the global offset table where the real symbol 8086value is entered, or a PC-relative value, or a value relative to the 8087start of the global offset table. All symbol suffixes start with the 8088character `:' (omitted in the list below). Every symbol use in code or 8089a read-only section must therefore have a PIC suffix to enable a useful 8090shared library to be created. Usually, these constructs must not be 8091used with an additive constant offset as is usually allowed, i.e. no 4 8092as in `symbol + 4' is allowed. This restriction is checked at 8093link-time, not at assembly-time. 8094 8095`GOT' 8096 Attaching this suffix to a symbol in an instruction causes the 8097 symbol to be entered into the global offset table. The value is a 8098 32-bit index for that symbol into the global offset table. The 8099 name of the corresponding relocation is `R_CRIS_32_GOT'. Example: 8100 `move.d [$r0+extsym:GOT],$r9' 8101 8102`GOT16' 8103 Same as for `GOT', but the value is a 16-bit index into the global 8104 offset table. The corresponding relocation is `R_CRIS_16_GOT'. 8105 Example: `move.d [$r0+asymbol:GOT16],$r10' 8106 8107`PLT' 8108 This suffix is used for function symbols. It causes a _procedure 8109 linkage table_, an array of code stubs, to be created at the time 8110 the shared object is created or linked against, together with a 8111 global offset table entry. The value is a pc-relative offset to 8112 the corresponding stub code in the procedure linkage table. This 8113 arrangement causes the run-time symbol resolver to be called to 8114 look up and set the value of the symbol the first time the 8115 function is called (at latest; depending environment variables). 8116 It is only safe to leave the symbol unresolved this way if all 8117 references are function calls. The name of the relocation is 8118 `R_CRIS_32_PLT_PCREL'. Example: `add.d fnname:PLT,$pc' 8119 8120`PLTG' 8121 Like PLT, but the value is relative to the beginning of the global 8122 offset table. The relocation is `R_CRIS_32_PLT_GOTREL'. Example: 8123 `move.d fnname:PLTG,$r3' 8124 8125`GOTPLT' 8126 Similar to `PLT', but the value of the symbol is a 32-bit index 8127 into the global offset table. This is somewhat of a mix between 8128 the effect of the `GOT' and the `PLT' suffix; the difference to 8129 `GOT' is that there will be a procedure linkage table entry 8130 created, and that the symbol is assumed to be a function entry and 8131 will be resolved by the run-time resolver as with `PLT'. The 8132 relocation is `R_CRIS_32_GOTPLT'. Example: `jsr 8133 [$r0+fnname:GOTPLT]' 8134 8135`GOTPLT16' 8136 A variant of `GOTPLT' giving a 16-bit value. Its relocation name 8137 is `R_CRIS_16_GOTPLT'. Example: `jsr [$r0+fnname:GOTPLT16]' 8138 8139`GOTOFF' 8140 This suffix must only be attached to a local symbol, but may be 8141 used in an expression adding an offset. The value is the address 8142 of the symbol relative to the start of the global offset table. 8143 The relocation name is `R_CRIS_32_GOTREL'. Example: `move.d 8144 [$r0+localsym:GOTOFF],r3' 8145 8146 8147File: as.info, Node: CRIS-Regs, Next: CRIS-Pseudos, Prev: CRIS-Pic, Up: CRIS-Syntax 8148 81499.7.4.3 Register names 8150...................... 8151 8152A `$' character may always prefix a general or special register name in 8153an instruction operand but is mandatory when the option 8154`--no-underscore' is specified or when the `.syntax register_prefix' 8155directive is in effect (*note crisnous::). Register names are 8156case-insensitive. 8157 8158 8159File: as.info, Node: CRIS-Pseudos, Prev: CRIS-Regs, Up: CRIS-Syntax 8160 81619.7.4.4 Assembler Directives 8162............................ 8163 8164There are a few CRIS-specific pseudo-directives in addition to the 8165generic ones. *Note Pseudo Ops::. Constants emitted by 8166pseudo-directives are in little-endian order for CRIS. There is no 8167support for floating-point-specific directives for CRIS. 8168 8169`.dword EXPRESSIONS' 8170 The `.dword' directive is a synonym for `.int', expecting zero or 8171 more EXPRESSIONS, separated by commas. For each expression, a 8172 32-bit little-endian constant is emitted. 8173 8174`.syntax ARGUMENT' 8175 The `.syntax' directive takes as ARGUMENT one of the following 8176 case-sensitive choices. 8177 8178 `no_register_prefix' 8179 The `.syntax no_register_prefix' directive makes a `$' 8180 character prefix on all registers optional. It overrides a 8181 previous setting, including the corresponding effect of the 8182 option `--no-underscore'. If this directive is used when 8183 ordinary symbols do not have a `_' character prefix, care 8184 must be taken to avoid ambiguities whether an operand is a 8185 register or a symbol; using symbols with names the same as 8186 general or special registers then invoke undefined behavior. 8187 8188 `register_prefix' 8189 This directive makes a `$' character prefix on all registers 8190 mandatory. It overrides a previous setting, including the 8191 corresponding effect of the option `--underscore'. 8192 8193 `leading_underscore' 8194 This is an assertion directive, emitting an error if the 8195 `--no-underscore' option is in effect. 8196 8197 `no_leading_underscore' 8198 This is the opposite of the `.syntax leading_underscore' 8199 directive and emits an error if the option `--underscore' is 8200 in effect. 8201 8202`.arch ARGUMENT' 8203 This is an assertion directive, giving an error if the specified 8204 ARGUMENT is not the same as the specified or default value for the 8205 `--march=ARCHITECTURE' option (*note march-option::). 8206 8207 8208 8209File: as.info, Node: D10V-Dependent, Next: D30V-Dependent, Prev: CRIS-Dependent, Up: Machine Dependencies 8210 82119.8 D10V Dependent Features 8212=========================== 8213 8214* Menu: 8215 8216* D10V-Opts:: D10V Options 8217* D10V-Syntax:: Syntax 8218* D10V-Float:: Floating Point 8219* D10V-Opcodes:: Opcodes 8220 8221 8222File: as.info, Node: D10V-Opts, Next: D10V-Syntax, Up: D10V-Dependent 8223 82249.8.1 D10V Options 8225------------------ 8226 8227The Mitsubishi D10V version of `as' has a few machine dependent options. 8228 8229`-O' 8230 The D10V can often execute two sub-instructions in parallel. When 8231 this option is used, `as' will attempt to optimize its output by 8232 detecting when instructions can be executed in parallel. 8233 8234`--nowarnswap' 8235 To optimize execution performance, `as' will sometimes swap the 8236 order of instructions. Normally this generates a warning. When 8237 this option is used, no warning will be generated when 8238 instructions are swapped. 8239 8240`--gstabs-packing' 8241`--no-gstabs-packing' 8242 `as' packs adjacent short instructions into a single packed 8243 instruction. `--no-gstabs-packing' turns instruction packing off if 8244 `--gstabs' is specified as well; `--gstabs-packing' (the default) 8245 turns instruction packing on even when `--gstabs' is specified. 8246 8247 8248File: as.info, Node: D10V-Syntax, Next: D10V-Float, Prev: D10V-Opts, Up: D10V-Dependent 8249 82509.8.2 Syntax 8251------------ 8252 8253The D10V syntax is based on the syntax in Mitsubishi's D10V 8254architecture manual. The differences are detailed below. 8255 8256* Menu: 8257 8258* D10V-Size:: Size Modifiers 8259* D10V-Subs:: Sub-Instructions 8260* D10V-Chars:: Special Characters 8261* D10V-Regs:: Register Names 8262* D10V-Addressing:: Addressing Modes 8263* D10V-Word:: @WORD Modifier 8264 8265 8266File: as.info, Node: D10V-Size, Next: D10V-Subs, Up: D10V-Syntax 8267 82689.8.2.1 Size Modifiers 8269...................... 8270 8271The D10V version of `as' uses the instruction names in the D10V 8272Architecture Manual. However, the names in the manual are sometimes 8273ambiguous. There are instruction names that can assemble to a short or 8274long form opcode. How does the assembler pick the correct form? `as' 8275will always pick the smallest form if it can. When dealing with a 8276symbol that is not defined yet when a line is being assembled, it will 8277always use the long form. If you need to force the assembler to use 8278either the short or long form of the instruction, you can append either 8279`.s' (short) or `.l' (long) to it. For example, if you are writing an 8280assembly program and you want to do a branch to a symbol that is 8281defined later in your program, you can write `bra.s foo'. Objdump 8282and GDB will always append `.s' or `.l' to instructions which have both 8283short and long forms. 8284 8285 8286File: as.info, Node: D10V-Subs, Next: D10V-Chars, Prev: D10V-Size, Up: D10V-Syntax 8287 82889.8.2.2 Sub-Instructions 8289........................ 8290 8291The D10V assembler takes as input a series of instructions, either 8292one-per-line, or in the special two-per-line format described in the 8293next section. Some of these instructions will be short-form or 8294sub-instructions. These sub-instructions can be packed into a single 8295instruction. The assembler will do this automatically. It will also 8296detect when it should not pack instructions. For example, when a label 8297is defined, the next instruction will never be packaged with the 8298previous one. Whenever a branch and link instruction is called, it 8299will not be packaged with the next instruction so the return address 8300will be valid. Nops are automatically inserted when necessary. 8301 8302 If you do not want the assembler automatically making these 8303decisions, you can control the packaging and execution type (parallel 8304or sequential) with the special execution symbols described in the next 8305section. 8306 8307 8308File: as.info, Node: D10V-Chars, Next: D10V-Regs, Prev: D10V-Subs, Up: D10V-Syntax 8309 83109.8.2.3 Special Characters 8311.......................... 8312 8313`;' and `#' are the line comment characters. Sub-instructions may be 8314executed in order, in reverse-order, or in parallel. Instructions 8315listed in the standard one-per-line format will be executed 8316sequentially. To specify the executing order, use the following 8317symbols: 8318`->' 8319 Sequential with instruction on the left first. 8320 8321`<-' 8322 Sequential with instruction on the right first. 8323 8324`||' 8325 Parallel 8326 The D10V syntax allows either one instruction per line, one 8327instruction per line with the execution symbol, or two instructions per 8328line. For example 8329`abs a1 -> abs r0' 8330 Execute these sequentially. The instruction on the right is in 8331 the right container and is executed second. 8332 8333`abs r0 <- abs a1' 8334 Execute these reverse-sequentially. The instruction on the right 8335 is in the right container, and is executed first. 8336 8337`ld2w r2,@r8+ || mac a0,r0,r7' 8338 Execute these in parallel. 8339 8340`ld2w r2,@r8+ ||' 8341`mac a0,r0,r7' 8342 Two-line format. Execute these in parallel. 8343 8344`ld2w r2,@r8+' 8345`mac a0,r0,r7' 8346 Two-line format. Execute these sequentially. Assembler will put 8347 them in the proper containers. 8348 8349`ld2w r2,@r8+ ->' 8350`mac a0,r0,r7' 8351 Two-line format. Execute these sequentially. Same as above but 8352 second instruction will always go into right container. 8353 Since `$' has no special meaning, you may use it in symbol names. 8354 8355 8356File: as.info, Node: D10V-Regs, Next: D10V-Addressing, Prev: D10V-Chars, Up: D10V-Syntax 8357 83589.8.2.4 Register Names 8359...................... 8360 8361You can use the predefined symbols `r0' through `r15' to refer to the 8362D10V registers. You can also use `sp' as an alias for `r15'. The 8363accumulators are `a0' and `a1'. There are special register-pair names 8364that may optionally be used in opcodes that require even-numbered 8365registers. Register names are not case sensitive. 8366 8367 Register Pairs 8368`r0-r1' 8369 8370`r2-r3' 8371 8372`r4-r5' 8373 8374`r6-r7' 8375 8376`r8-r9' 8377 8378`r10-r11' 8379 8380`r12-r13' 8381 8382`r14-r15' 8383 8384 The D10V also has predefined symbols for these control registers and 8385status bits: 8386`psw' 8387 Processor Status Word 8388 8389`bpsw' 8390 Backup Processor Status Word 8391 8392`pc' 8393 Program Counter 8394 8395`bpc' 8396 Backup Program Counter 8397 8398`rpt_c' 8399 Repeat Count 8400 8401`rpt_s' 8402 Repeat Start address 8403 8404`rpt_e' 8405 Repeat End address 8406 8407`mod_s' 8408 Modulo Start address 8409 8410`mod_e' 8411 Modulo End address 8412 8413`iba' 8414 Instruction Break Address 8415 8416`f0' 8417 Flag 0 8418 8419`f1' 8420 Flag 1 8421 8422`c' 8423 Carry flag 8424 8425 8426File: as.info, Node: D10V-Addressing, Next: D10V-Word, Prev: D10V-Regs, Up: D10V-Syntax 8427 84289.8.2.5 Addressing Modes 8429........................ 8430 8431`as' understands the following addressing modes for the D10V. `RN' in 8432the following refers to any of the numbered registers, but _not_ the 8433control registers. 8434`RN' 8435 Register direct 8436 8437`@RN' 8438 Register indirect 8439 8440`@RN+' 8441 Register indirect with post-increment 8442 8443`@RN-' 8444 Register indirect with post-decrement 8445 8446`@-SP' 8447 Register indirect with pre-decrement 8448 8449`@(DISP, RN)' 8450 Register indirect with displacement 8451 8452`ADDR' 8453 PC relative address (for branch or rep). 8454 8455`#IMM' 8456 Immediate data (the `#' is optional and ignored) 8457 8458 8459File: as.info, Node: D10V-Word, Prev: D10V-Addressing, Up: D10V-Syntax 8460 84619.8.2.6 @WORD Modifier 8462...................... 8463 8464Any symbol followed by `@word' will be replaced by the symbol's value 8465shifted right by 2. This is used in situations such as loading a 8466register with the address of a function (or any other code fragment). 8467For example, if you want to load a register with the location of the 8468function `main' then jump to that function, you could do it as follows: 8469 ldi r2, main@word 8470 jmp r2 8471 8472 8473File: as.info, Node: D10V-Float, Next: D10V-Opcodes, Prev: D10V-Syntax, Up: D10V-Dependent 8474 84759.8.3 Floating Point 8476-------------------- 8477 8478The D10V has no hardware floating point, but the `.float' and `.double' 8479directives generates IEEE floating-point numbers for compatibility with 8480other development tools. 8481 8482 8483File: as.info, Node: D10V-Opcodes, Prev: D10V-Float, Up: D10V-Dependent 8484 84859.8.4 Opcodes 8486------------- 8487 8488For detailed information on the D10V machine instruction set, see `D10V 8489Architecture: A VLIW Microprocessor for Multimedia Applications' 8490(Mitsubishi Electric Corp.). `as' implements all the standard D10V 8491opcodes. The only changes are those described in the section on size 8492modifiers 8493 8494 8495File: as.info, Node: D30V-Dependent, Next: H8/300-Dependent, Prev: D10V-Dependent, Up: Machine Dependencies 8496 84979.9 D30V Dependent Features 8498=========================== 8499 8500* Menu: 8501 8502* D30V-Opts:: D30V Options 8503* D30V-Syntax:: Syntax 8504* D30V-Float:: Floating Point 8505* D30V-Opcodes:: Opcodes 8506 8507 8508File: as.info, Node: D30V-Opts, Next: D30V-Syntax, Up: D30V-Dependent 8509 85109.9.1 D30V Options 8511------------------ 8512 8513The Mitsubishi D30V version of `as' has a few machine dependent options. 8514 8515`-O' 8516 The D30V can often execute two sub-instructions in parallel. When 8517 this option is used, `as' will attempt to optimize its output by 8518 detecting when instructions can be executed in parallel. 8519 8520`-n' 8521 When this option is used, `as' will issue a warning every time it 8522 adds a nop instruction. 8523 8524`-N' 8525 When this option is used, `as' will issue a warning if it needs to 8526 insert a nop after a 32-bit multiply before a load or 16-bit 8527 multiply instruction. 8528 8529 8530File: as.info, Node: D30V-Syntax, Next: D30V-Float, Prev: D30V-Opts, Up: D30V-Dependent 8531 85329.9.2 Syntax 8533------------ 8534 8535The D30V syntax is based on the syntax in Mitsubishi's D30V 8536architecture manual. The differences are detailed below. 8537 8538* Menu: 8539 8540* D30V-Size:: Size Modifiers 8541* D30V-Subs:: Sub-Instructions 8542* D30V-Chars:: Special Characters 8543* D30V-Guarded:: Guarded Execution 8544* D30V-Regs:: Register Names 8545* D30V-Addressing:: Addressing Modes 8546 8547 8548File: as.info, Node: D30V-Size, Next: D30V-Subs, Up: D30V-Syntax 8549 85509.9.2.1 Size Modifiers 8551...................... 8552 8553The D30V version of `as' uses the instruction names in the D30V 8554Architecture Manual. However, the names in the manual are sometimes 8555ambiguous. There are instruction names that can assemble to a short or 8556long form opcode. How does the assembler pick the correct form? `as' 8557will always pick the smallest form if it can. When dealing with a 8558symbol that is not defined yet when a line is being assembled, it will 8559always use the long form. If you need to force the assembler to use 8560either the short or long form of the instruction, you can append either 8561`.s' (short) or `.l' (long) to it. For example, if you are writing an 8562assembly program and you want to do a branch to a symbol that is 8563defined later in your program, you can write `bra.s foo'. Objdump and 8564GDB will always append `.s' or `.l' to instructions which have both 8565short and long forms. 8566 8567 8568File: as.info, Node: D30V-Subs, Next: D30V-Chars, Prev: D30V-Size, Up: D30V-Syntax 8569 85709.9.2.2 Sub-Instructions 8571........................ 8572 8573The D30V assembler takes as input a series of instructions, either 8574one-per-line, or in the special two-per-line format described in the 8575next section. Some of these instructions will be short-form or 8576sub-instructions. These sub-instructions can be packed into a single 8577instruction. The assembler will do this automatically. It will also 8578detect when it should not pack instructions. For example, when a label 8579is defined, the next instruction will never be packaged with the 8580previous one. Whenever a branch and link instruction is called, it 8581will not be packaged with the next instruction so the return address 8582will be valid. Nops are automatically inserted when necessary. 8583 8584 If you do not want the assembler automatically making these 8585decisions, you can control the packaging and execution type (parallel 8586or sequential) with the special execution symbols described in the next 8587section. 8588 8589 8590File: as.info, Node: D30V-Chars, Next: D30V-Guarded, Prev: D30V-Subs, Up: D30V-Syntax 8591 85929.9.2.3 Special Characters 8593.......................... 8594 8595`;' and `#' are the line comment characters. Sub-instructions may be 8596executed in order, in reverse-order, or in parallel. Instructions 8597listed in the standard one-per-line format will be executed 8598sequentially unless you use the `-O' option. 8599 8600 To specify the executing order, use the following symbols: 8601`->' 8602 Sequential with instruction on the left first. 8603 8604`<-' 8605 Sequential with instruction on the right first. 8606 8607`||' 8608 Parallel 8609 8610 The D30V syntax allows either one instruction per line, one 8611instruction per line with the execution symbol, or two instructions per 8612line. For example 8613`abs r2,r3 -> abs r4,r5' 8614 Execute these sequentially. The instruction on the right is in 8615 the right container and is executed second. 8616 8617`abs r2,r3 <- abs r4,r5' 8618 Execute these reverse-sequentially. The instruction on the right 8619 is in the right container, and is executed first. 8620 8621`abs r2,r3 || abs r4,r5' 8622 Execute these in parallel. 8623 8624`ldw r2,@(r3,r4) ||' 8625`mulx r6,r8,r9' 8626 Two-line format. Execute these in parallel. 8627 8628`mulx a0,r8,r9' 8629`stw r2,@(r3,r4)' 8630 Two-line format. Execute these sequentially unless `-O' option is 8631 used. If the `-O' option is used, the assembler will determine if 8632 the instructions could be done in parallel (the above two 8633 instructions can be done in parallel), and if so, emit them as 8634 parallel instructions. The assembler will put them in the proper 8635 containers. In the above example, the assembler will put the 8636 `stw' instruction in left container and the `mulx' instruction in 8637 the right container. 8638 8639`stw r2,@(r3,r4) ->' 8640`mulx a0,r8,r9' 8641 Two-line format. Execute the `stw' instruction followed by the 8642 `mulx' instruction sequentially. The first instruction goes in the 8643 left container and the second instruction goes into right 8644 container. The assembler will give an error if the machine 8645 ordering constraints are violated. 8646 8647`stw r2,@(r3,r4) <-' 8648`mulx a0,r8,r9' 8649 Same as previous example, except that the `mulx' instruction is 8650 executed before the `stw' instruction. 8651 8652 Since `$' has no special meaning, you may use it in symbol names. 8653 8654 8655File: as.info, Node: D30V-Guarded, Next: D30V-Regs, Prev: D30V-Chars, Up: D30V-Syntax 8656 86579.9.2.4 Guarded Execution 8658......................... 8659 8660`as' supports the full range of guarded execution directives for each 8661instruction. Just append the directive after the instruction proper. 8662The directives are: 8663 8664`/tx' 8665 Execute the instruction if flag f0 is true. 8666 8667`/fx' 8668 Execute the instruction if flag f0 is false. 8669 8670`/xt' 8671 Execute the instruction if flag f1 is true. 8672 8673`/xf' 8674 Execute the instruction if flag f1 is false. 8675 8676`/tt' 8677 Execute the instruction if both flags f0 and f1 are true. 8678 8679`/tf' 8680 Execute the instruction if flag f0 is true and flag f1 is false. 8681 8682 8683File: as.info, Node: D30V-Regs, Next: D30V-Addressing, Prev: D30V-Guarded, Up: D30V-Syntax 8684 86859.9.2.5 Register Names 8686...................... 8687 8688You can use the predefined symbols `r0' through `r63' to refer to the 8689D30V registers. You can also use `sp' as an alias for `r63' and `link' 8690as an alias for `r62'. The accumulators are `a0' and `a1'. 8691 8692 The D30V also has predefined symbols for these control registers and 8693status bits: 8694`psw' 8695 Processor Status Word 8696 8697`bpsw' 8698 Backup Processor Status Word 8699 8700`pc' 8701 Program Counter 8702 8703`bpc' 8704 Backup Program Counter 8705 8706`rpt_c' 8707 Repeat Count 8708 8709`rpt_s' 8710 Repeat Start address 8711 8712`rpt_e' 8713 Repeat End address 8714 8715`mod_s' 8716 Modulo Start address 8717 8718`mod_e' 8719 Modulo End address 8720 8721`iba' 8722 Instruction Break Address 8723 8724`f0' 8725 Flag 0 8726 8727`f1' 8728 Flag 1 8729 8730`f2' 8731 Flag 2 8732 8733`f3' 8734 Flag 3 8735 8736`f4' 8737 Flag 4 8738 8739`f5' 8740 Flag 5 8741 8742`f6' 8743 Flag 6 8744 8745`f7' 8746 Flag 7 8747 8748`s' 8749 Same as flag 4 (saturation flag) 8750 8751`v' 8752 Same as flag 5 (overflow flag) 8753 8754`va' 8755 Same as flag 6 (sticky overflow flag) 8756 8757`c' 8758 Same as flag 7 (carry/borrow flag) 8759 8760`b' 8761 Same as flag 7 (carry/borrow flag) 8762 8763 8764File: as.info, Node: D30V-Addressing, Prev: D30V-Regs, Up: D30V-Syntax 8765 87669.9.2.6 Addressing Modes 8767........................ 8768 8769`as' understands the following addressing modes for the D30V. `RN' in 8770the following refers to any of the numbered registers, but _not_ the 8771control registers. 8772`RN' 8773 Register direct 8774 8775`@RN' 8776 Register indirect 8777 8778`@RN+' 8779 Register indirect with post-increment 8780 8781`@RN-' 8782 Register indirect with post-decrement 8783 8784`@-SP' 8785 Register indirect with pre-decrement 8786 8787`@(DISP, RN)' 8788 Register indirect with displacement 8789 8790`ADDR' 8791 PC relative address (for branch or rep). 8792 8793`#IMM' 8794 Immediate data (the `#' is optional and ignored) 8795 8796 8797File: as.info, Node: D30V-Float, Next: D30V-Opcodes, Prev: D30V-Syntax, Up: D30V-Dependent 8798 87999.9.3 Floating Point 8800-------------------- 8801 8802The D30V has no hardware floating point, but the `.float' and `.double' 8803directives generates IEEE floating-point numbers for compatibility with 8804other development tools. 8805 8806 8807File: as.info, Node: D30V-Opcodes, Prev: D30V-Float, Up: D30V-Dependent 8808 88099.9.4 Opcodes 8810------------- 8811 8812For detailed information on the D30V machine instruction set, see `D30V 8813Architecture: A VLIW Microprocessor for Multimedia Applications' 8814(Mitsubishi Electric Corp.). `as' implements all the standard D30V 8815opcodes. The only changes are those described in the section on size 8816modifiers 8817 8818 8819File: as.info, Node: H8/300-Dependent, Next: HPPA-Dependent, Prev: D30V-Dependent, Up: Machine Dependencies 8820 88219.10 H8/300 Dependent Features 8822============================== 8823 8824* Menu: 8825 8826* H8/300 Options:: Options 8827* H8/300 Syntax:: Syntax 8828* H8/300 Floating Point:: Floating Point 8829* H8/300 Directives:: H8/300 Machine Directives 8830* H8/300 Opcodes:: Opcodes 8831 8832 8833File: as.info, Node: H8/300 Options, Next: H8/300 Syntax, Up: H8/300-Dependent 8834 88359.10.1 Options 8836-------------- 8837 8838The Renesas H8/300 version of `as' has one machine-dependent option: 8839 8840`-h-tick-hex' 8841 Support H'00 style hex constants in addition to 0x00 style. 8842 8843 8844 8845File: as.info, Node: H8/300 Syntax, Next: H8/300 Floating Point, Prev: H8/300 Options, Up: H8/300-Dependent 8846 88479.10.2 Syntax 8848------------- 8849 8850* Menu: 8851 8852* H8/300-Chars:: Special Characters 8853* H8/300-Regs:: Register Names 8854* H8/300-Addressing:: Addressing Modes 8855 8856 8857File: as.info, Node: H8/300-Chars, Next: H8/300-Regs, Up: H8/300 Syntax 8858 88599.10.2.1 Special Characters 8860........................... 8861 8862`;' is the line comment character. 8863 8864 `$' can be used instead of a newline to separate statements. 8865Therefore _you may not use `$' in symbol names_ on the H8/300. 8866 8867 8868File: as.info, Node: H8/300-Regs, Next: H8/300-Addressing, Prev: H8/300-Chars, Up: H8/300 Syntax 8869 88709.10.2.2 Register Names 8871....................... 8872 8873You can use predefined symbols of the form `rNh' and `rNl' to refer to 8874the H8/300 registers as sixteen 8-bit general-purpose registers. N is 8875a digit from `0' to `7'); for instance, both `r0h' and `r7l' are valid 8876register names. 8877 8878 You can also use the eight predefined symbols `rN' to refer to the 8879H8/300 registers as 16-bit registers (you must use this form for 8880addressing). 8881 8882 On the H8/300H, you can also use the eight predefined symbols `erN' 8883(`er0' ... `er7') to refer to the 32-bit general purpose registers. 8884 8885 The two control registers are called `pc' (program counter; a 16-bit 8886register, except on the H8/300H where it is 24 bits) and `ccr' 8887(condition code register; an 8-bit register). `r7' is used as the 8888stack pointer, and can also be called `sp'. 8889 8890 8891File: as.info, Node: H8/300-Addressing, Prev: H8/300-Regs, Up: H8/300 Syntax 8892 88939.10.2.3 Addressing Modes 8894......................... 8895 8896as understands the following addressing modes for the H8/300: 8897`rN' 8898 Register direct 8899 8900`@rN' 8901 Register indirect 8902 8903`@(D, rN)' 8904`@(D:16, rN)' 8905`@(D:24, rN)' 8906 Register indirect: 16-bit or 24-bit displacement D from register 8907 N. (24-bit displacements are only meaningful on the H8/300H.) 8908 8909`@rN+' 8910 Register indirect with post-increment 8911 8912`@-rN' 8913 Register indirect with pre-decrement 8914 8915``@'AA' 8916``@'AA:8' 8917``@'AA:16' 8918``@'AA:24' 8919 Absolute address `aa'. (The address size `:24' only makes sense 8920 on the H8/300H.) 8921 8922`#XX' 8923`#XX:8' 8924`#XX:16' 8925`#XX:32' 8926 Immediate data XX. You may specify the `:8', `:16', or `:32' for 8927 clarity, if you wish; but `as' neither requires this nor uses 8928 it--the data size required is taken from context. 8929 8930``@'`@'AA' 8931``@'`@'AA:8' 8932 Memory indirect. You may specify the `:8' for clarity, if you 8933 wish; but `as' neither requires this nor uses it. 8934 8935 8936File: as.info, Node: H8/300 Floating Point, Next: H8/300 Directives, Prev: H8/300 Syntax, Up: H8/300-Dependent 8937 89389.10.3 Floating Point 8939--------------------- 8940 8941The H8/300 family has no hardware floating point, but the `.float' 8942directive generates IEEE floating-point numbers for compatibility with 8943other development tools. 8944 8945 8946File: as.info, Node: H8/300 Directives, Next: H8/300 Opcodes, Prev: H8/300 Floating Point, Up: H8/300-Dependent 8947 89489.10.4 H8/300 Machine Directives 8949-------------------------------- 8950 8951`as' has the following machine-dependent directives for the H8/300: 8952 8953`.h8300h' 8954 Recognize and emit additional instructions for the H8/300H 8955 variant, and also make `.int' emit 32-bit numbers rather than the 8956 usual (16-bit) for the H8/300 family. 8957 8958`.h8300s' 8959 Recognize and emit additional instructions for the H8S variant, and 8960 also make `.int' emit 32-bit numbers rather than the usual (16-bit) 8961 for the H8/300 family. 8962 8963`.h8300hn' 8964 Recognize and emit additional instructions for the H8/300H variant 8965 in normal mode, and also make `.int' emit 32-bit numbers rather 8966 than the usual (16-bit) for the H8/300 family. 8967 8968`.h8300sn' 8969 Recognize and emit additional instructions for the H8S variant in 8970 normal mode, and also make `.int' emit 32-bit numbers rather than 8971 the usual (16-bit) for the H8/300 family. 8972 8973 On the H8/300 family (including the H8/300H) `.word' directives 8974generate 16-bit numbers. 8975 8976 8977File: as.info, Node: H8/300 Opcodes, Prev: H8/300 Directives, Up: H8/300-Dependent 8978 89799.10.5 Opcodes 8980-------------- 8981 8982For detailed information on the H8/300 machine instruction set, see 8983`H8/300 Series Programming Manual'. For information specific to the 8984H8/300H, see `H8/300H Series Programming Manual' (Renesas). 8985 8986 `as' implements all the standard H8/300 opcodes. No additional 8987pseudo-instructions are needed on this family. 8988 8989 The following table summarizes the H8/300 opcodes, and their 8990arguments. Entries marked `*' are opcodes used only on the H8/300H. 8991 8992 Legend: 8993 Rs source register 8994 Rd destination register 8995 abs absolute address 8996 imm immediate data 8997 disp:N N-bit displacement from a register 8998 pcrel:N N-bit displacement relative to program counter 8999 9000 add.b #imm,rd * andc #imm,ccr 9001 add.b rs,rd band #imm,rd 9002 add.w rs,rd band #imm,@rd 9003 * add.w #imm,rd band #imm,@abs:8 9004 * add.l rs,rd bra pcrel:8 9005 * add.l #imm,rd * bra pcrel:16 9006 adds #imm,rd bt pcrel:8 9007 addx #imm,rd * bt pcrel:16 9008 addx rs,rd brn pcrel:8 9009 and.b #imm,rd * brn pcrel:16 9010 and.b rs,rd bf pcrel:8 9011 * and.w rs,rd * bf pcrel:16 9012 * and.w #imm,rd bhi pcrel:8 9013 * and.l #imm,rd * bhi pcrel:16 9014 * and.l rs,rd bls pcrel:8 9015 9016 * bls pcrel:16 bld #imm,rd 9017 bcc pcrel:8 bld #imm,@rd 9018 * bcc pcrel:16 bld #imm,@abs:8 9019 bhs pcrel:8 bnot #imm,rd 9020 * bhs pcrel:16 bnot #imm,@rd 9021 bcs pcrel:8 bnot #imm,@abs:8 9022 * bcs pcrel:16 bnot rs,rd 9023 blo pcrel:8 bnot rs,@rd 9024 * blo pcrel:16 bnot rs,@abs:8 9025 bne pcrel:8 bor #imm,rd 9026 * bne pcrel:16 bor #imm,@rd 9027 beq pcrel:8 bor #imm,@abs:8 9028 * beq pcrel:16 bset #imm,rd 9029 bvc pcrel:8 bset #imm,@rd 9030 * bvc pcrel:16 bset #imm,@abs:8 9031 bvs pcrel:8 bset rs,rd 9032 * bvs pcrel:16 bset rs,@rd 9033 bpl pcrel:8 bset rs,@abs:8 9034 * bpl pcrel:16 bsr pcrel:8 9035 bmi pcrel:8 bsr pcrel:16 9036 * bmi pcrel:16 bst #imm,rd 9037 bge pcrel:8 bst #imm,@rd 9038 * bge pcrel:16 bst #imm,@abs:8 9039 blt pcrel:8 btst #imm,rd 9040 * blt pcrel:16 btst #imm,@rd 9041 bgt pcrel:8 btst #imm,@abs:8 9042 * bgt pcrel:16 btst rs,rd 9043 ble pcrel:8 btst rs,@rd 9044 * ble pcrel:16 btst rs,@abs:8 9045 bclr #imm,rd bxor #imm,rd 9046 bclr #imm,@rd bxor #imm,@rd 9047 bclr #imm,@abs:8 bxor #imm,@abs:8 9048 bclr rs,rd cmp.b #imm,rd 9049 bclr rs,@rd cmp.b rs,rd 9050 bclr rs,@abs:8 cmp.w rs,rd 9051 biand #imm,rd cmp.w rs,rd 9052 biand #imm,@rd * cmp.w #imm,rd 9053 biand #imm,@abs:8 * cmp.l #imm,rd 9054 bild #imm,rd * cmp.l rs,rd 9055 bild #imm,@rd daa rs 9056 bild #imm,@abs:8 das rs 9057 bior #imm,rd dec.b rs 9058 bior #imm,@rd * dec.w #imm,rd 9059 bior #imm,@abs:8 * dec.l #imm,rd 9060 bist #imm,rd divxu.b rs,rd 9061 bist #imm,@rd * divxu.w rs,rd 9062 bist #imm,@abs:8 * divxs.b rs,rd 9063 bixor #imm,rd * divxs.w rs,rd 9064 bixor #imm,@rd eepmov 9065 bixor #imm,@abs:8 * eepmovw 9066 9067 * exts.w rd mov.w rs,@abs:16 9068 * exts.l rd * mov.l #imm,rd 9069 * extu.w rd * mov.l rs,rd 9070 * extu.l rd * mov.l @rs,rd 9071 inc rs * mov.l @(disp:16,rs),rd 9072 * inc.w #imm,rd * mov.l @(disp:24,rs),rd 9073 * inc.l #imm,rd * mov.l @rs+,rd 9074 jmp @rs * mov.l @abs:16,rd 9075 jmp abs * mov.l @abs:24,rd 9076 jmp @@abs:8 * mov.l rs,@rd 9077 jsr @rs * mov.l rs,@(disp:16,rd) 9078 jsr abs * mov.l rs,@(disp:24,rd) 9079 jsr @@abs:8 * mov.l rs,@-rd 9080 ldc #imm,ccr * mov.l rs,@abs:16 9081 ldc rs,ccr * mov.l rs,@abs:24 9082 * ldc @abs:16,ccr movfpe @abs:16,rd 9083 * ldc @abs:24,ccr movtpe rs,@abs:16 9084 * ldc @(disp:16,rs),ccr mulxu.b rs,rd 9085 * ldc @(disp:24,rs),ccr * mulxu.w rs,rd 9086 * ldc @rs+,ccr * mulxs.b rs,rd 9087 * ldc @rs,ccr * mulxs.w rs,rd 9088 * mov.b @(disp:24,rs),rd neg.b rs 9089 * mov.b rs,@(disp:24,rd) * neg.w rs 9090 mov.b @abs:16,rd * neg.l rs 9091 mov.b rs,rd nop 9092 mov.b @abs:8,rd not.b rs 9093 mov.b rs,@abs:8 * not.w rs 9094 mov.b rs,rd * not.l rs 9095 mov.b #imm,rd or.b #imm,rd 9096 mov.b @rs,rd or.b rs,rd 9097 mov.b @(disp:16,rs),rd * or.w #imm,rd 9098 mov.b @rs+,rd * or.w rs,rd 9099 mov.b @abs:8,rd * or.l #imm,rd 9100 mov.b rs,@rd * or.l rs,rd 9101 mov.b rs,@(disp:16,rd) orc #imm,ccr 9102 mov.b rs,@-rd pop.w rs 9103 mov.b rs,@abs:8 * pop.l rs 9104 mov.w rs,@rd push.w rs 9105 * mov.w @(disp:24,rs),rd * push.l rs 9106 * mov.w rs,@(disp:24,rd) rotl.b rs 9107 * mov.w @abs:24,rd * rotl.w rs 9108 * mov.w rs,@abs:24 * rotl.l rs 9109 mov.w rs,rd rotr.b rs 9110 mov.w #imm,rd * rotr.w rs 9111 mov.w @rs,rd * rotr.l rs 9112 mov.w @(disp:16,rs),rd rotxl.b rs 9113 mov.w @rs+,rd * rotxl.w rs 9114 mov.w @abs:16,rd * rotxl.l rs 9115 mov.w rs,@(disp:16,rd) rotxr.b rs 9116 mov.w rs,@-rd * rotxr.w rs 9117 9118 * rotxr.l rs * stc ccr,@(disp:24,rd) 9119 bpt * stc ccr,@-rd 9120 rte * stc ccr,@abs:16 9121 rts * stc ccr,@abs:24 9122 shal.b rs sub.b rs,rd 9123 * shal.w rs sub.w rs,rd 9124 * shal.l rs * sub.w #imm,rd 9125 shar.b rs * sub.l rs,rd 9126 * shar.w rs * sub.l #imm,rd 9127 * shar.l rs subs #imm,rd 9128 shll.b rs subx #imm,rd 9129 * shll.w rs subx rs,rd 9130 * shll.l rs * trapa #imm 9131 shlr.b rs xor #imm,rd 9132 * shlr.w rs xor rs,rd 9133 * shlr.l rs * xor.w #imm,rd 9134 sleep * xor.w rs,rd 9135 stc ccr,rd * xor.l #imm,rd 9136 * stc ccr,@rs * xor.l rs,rd 9137 * stc ccr,@(disp:16,rd) xorc #imm,ccr 9138 9139 Four H8/300 instructions (`add', `cmp', `mov', `sub') are defined 9140with variants using the suffixes `.b', `.w', and `.l' to specify the 9141size of a memory operand. `as' supports these suffixes, but does not 9142require them; since one of the operands is always a register, `as' can 9143deduce the correct size. 9144 9145 For example, since `r0' refers to a 16-bit register, 9146 mov r0,@foo 9147is equivalent to 9148 mov.w r0,@foo 9149 9150 If you use the size suffixes, `as' issues a warning when the suffix 9151and the register size do not match. 9152 9153 9154File: as.info, Node: HPPA-Dependent, Next: ESA/390-Dependent, Prev: H8/300-Dependent, Up: Machine Dependencies 9155 91569.11 HPPA Dependent Features 9157============================ 9158 9159* Menu: 9160 9161* HPPA Notes:: Notes 9162* HPPA Options:: Options 9163* HPPA Syntax:: Syntax 9164* HPPA Floating Point:: Floating Point 9165* HPPA Directives:: HPPA Machine Directives 9166* HPPA Opcodes:: Opcodes 9167 9168 9169File: as.info, Node: HPPA Notes, Next: HPPA Options, Up: HPPA-Dependent 9170 91719.11.1 Notes 9172------------ 9173 9174As a back end for GNU CC `as' has been throughly tested and should work 9175extremely well. We have tested it only minimally on hand written 9176assembly code and no one has tested it much on the assembly output from 9177the HP compilers. 9178 9179 The format of the debugging sections has changed since the original 9180`as' port (version 1.3X) was released; therefore, you must rebuild all 9181HPPA objects and libraries with the new assembler so that you can debug 9182the final executable. 9183 9184 The HPPA `as' port generates a small subset of the relocations 9185available in the SOM and ELF object file formats. Additional relocation 9186support will be added as it becomes necessary. 9187 9188 9189File: as.info, Node: HPPA Options, Next: HPPA Syntax, Prev: HPPA Notes, Up: HPPA-Dependent 9190 91919.11.2 Options 9192-------------- 9193 9194`as' has no machine-dependent command-line options for the HPPA. 9195 9196 9197File: as.info, Node: HPPA Syntax, Next: HPPA Floating Point, Prev: HPPA Options, Up: HPPA-Dependent 9198 91999.11.3 Syntax 9200------------- 9201 9202The assembler syntax closely follows the HPPA instruction set reference 9203manual; assembler directives and general syntax closely follow the HPPA 9204assembly language reference manual, with a few noteworthy differences. 9205 9206 First, a colon may immediately follow a label definition. This is 9207simply for compatibility with how most assembly language programmers 9208write code. 9209 9210 Some obscure expression parsing problems may affect hand written 9211code which uses the `spop' instructions, or code which makes significant 9212use of the `!' line separator. 9213 9214 `as' is much less forgiving about missing arguments and other 9215similar oversights than the HP assembler. `as' notifies you of missing 9216arguments as syntax errors; this is regarded as a feature, not a bug. 9217 9218 Finally, `as' allows you to use an external symbol without 9219explicitly importing the symbol. _Warning:_ in the future this will be 9220an error for HPPA targets. 9221 9222 Special characters for HPPA targets include: 9223 9224 `;' is the line comment character. 9225 9226 `!' can be used instead of a newline to separate statements. 9227 9228 Since `$' has no special meaning, you may use it in symbol names. 9229 9230 9231File: as.info, Node: HPPA Floating Point, Next: HPPA Directives, Prev: HPPA Syntax, Up: HPPA-Dependent 9232 92339.11.4 Floating Point 9234--------------------- 9235 9236The HPPA family uses IEEE floating-point numbers. 9237 9238 9239File: as.info, Node: HPPA Directives, Next: HPPA Opcodes, Prev: HPPA Floating Point, Up: HPPA-Dependent 9240 92419.11.5 HPPA Assembler Directives 9242-------------------------------- 9243 9244`as' for the HPPA supports many additional directives for compatibility 9245with the native assembler. This section describes them only briefly. 9246For detailed information on HPPA-specific assembler directives, see 9247`HP9000 Series 800 Assembly Language Reference Manual' (HP 92432-90001). 9248 9249 `as' does _not_ support the following assembler directives described 9250in the HP manual: 9251 9252 .endm .liston 9253 .enter .locct 9254 .leave .macro 9255 .listoff 9256 9257 Beyond those implemented for compatibility, `as' supports one 9258additional assembler directive for the HPPA: `.param'. It conveys 9259register argument locations for static functions. Its syntax closely 9260follows the `.export' directive. 9261 9262 These are the additional directives in `as' for the HPPA: 9263 9264`.block N' 9265`.blockz N' 9266 Reserve N bytes of storage, and initialize them to zero. 9267 9268`.call' 9269 Mark the beginning of a procedure call. Only the special case 9270 with _no arguments_ is allowed. 9271 9272`.callinfo [ PARAM=VALUE, ... ] [ FLAG, ... ]' 9273 Specify a number of parameters and flags that define the 9274 environment for a procedure. 9275 9276 PARAM may be any of `frame' (frame size), `entry_gr' (end of 9277 general register range), `entry_fr' (end of float register range), 9278 `entry_sr' (end of space register range). 9279 9280 The values for FLAG are `calls' or `caller' (proc has 9281 subroutines), `no_calls' (proc does not call subroutines), 9282 `save_rp' (preserve return pointer), `save_sp' (proc preserves 9283 stack pointer), `no_unwind' (do not unwind this proc), `hpux_int' 9284 (proc is interrupt routine). 9285 9286`.code' 9287 Assemble into the standard section called `$TEXT$', subsection 9288 `$CODE$'. 9289 9290`.copyright "STRING"' 9291 In the SOM object format, insert STRING into the object code, 9292 marked as a copyright string. 9293 9294`.copyright "STRING"' 9295 In the ELF object format, insert STRING into the object code, 9296 marked as a version string. 9297 9298`.enter' 9299 Not yet supported; the assembler rejects programs containing this 9300 directive. 9301 9302`.entry' 9303 Mark the beginning of a procedure. 9304 9305`.exit' 9306 Mark the end of a procedure. 9307 9308`.export NAME [ ,TYP ] [ ,PARAM=R ]' 9309 Make a procedure NAME available to callers. TYP, if present, must 9310 be one of `absolute', `code' (ELF only, not SOM), `data', `entry', 9311 `data', `entry', `millicode', `plabel', `pri_prog', or `sec_prog'. 9312 9313 PARAM, if present, provides either relocation information for the 9314 procedure arguments and result, or a privilege level. PARAM may be 9315 `argwN' (where N ranges from `0' to `3', and indicates one of four 9316 one-word arguments); `rtnval' (the procedure's result); or 9317 `priv_lev' (privilege level). For arguments or the result, R 9318 specifies how to relocate, and must be one of `no' (not 9319 relocatable), `gr' (argument is in general register), `fr' (in 9320 floating point register), or `fu' (upper half of float register). 9321 For `priv_lev', R is an integer. 9322 9323`.half N' 9324 Define a two-byte integer constant N; synonym for the portable 9325 `as' directive `.short'. 9326 9327`.import NAME [ ,TYP ]' 9328 Converse of `.export'; make a procedure available to call. The 9329 arguments use the same conventions as the first two arguments for 9330 `.export'. 9331 9332`.label NAME' 9333 Define NAME as a label for the current assembly location. 9334 9335`.leave' 9336 Not yet supported; the assembler rejects programs containing this 9337 directive. 9338 9339`.origin LC' 9340 Advance location counter to LC. Synonym for the `as' portable 9341 directive `.org'. 9342 9343`.param NAME [ ,TYP ] [ ,PARAM=R ]' 9344 Similar to `.export', but used for static procedures. 9345 9346`.proc' 9347 Use preceding the first statement of a procedure. 9348 9349`.procend' 9350 Use following the last statement of a procedure. 9351 9352`LABEL .reg EXPR' 9353 Synonym for `.equ'; define LABEL with the absolute expression EXPR 9354 as its value. 9355 9356`.space SECNAME [ ,PARAMS ]' 9357 Switch to section SECNAME, creating a new section by that name if 9358 necessary. You may only use PARAMS when creating a new section, 9359 not when switching to an existing one. SECNAME may identify a 9360 section by number rather than by name. 9361 9362 If specified, the list PARAMS declares attributes of the section, 9363 identified by keywords. The keywords recognized are `spnum=EXP' 9364 (identify this section by the number EXP, an absolute expression), 9365 `sort=EXP' (order sections according to this sort key when linking; 9366 EXP is an absolute expression), `unloadable' (section contains no 9367 loadable data), `notdefined' (this section defined elsewhere), and 9368 `private' (data in this section not available to other programs). 9369 9370`.spnum SECNAM' 9371 Allocate four bytes of storage, and initialize them with the 9372 section number of the section named SECNAM. (You can define the 9373 section number with the HPPA `.space' directive.) 9374 9375`.string "STR"' 9376 Copy the characters in the string STR to the object file. *Note 9377 Strings: Strings, for information on escape sequences you can use 9378 in `as' strings. 9379 9380 _Warning!_ The HPPA version of `.string' differs from the usual 9381 `as' definition: it does _not_ write a zero byte after copying STR. 9382 9383`.stringz "STR"' 9384 Like `.string', but appends a zero byte after copying STR to object 9385 file. 9386 9387`.subspa NAME [ ,PARAMS ]' 9388`.nsubspa NAME [ ,PARAMS ]' 9389 Similar to `.space', but selects a subsection NAME within the 9390 current section. You may only specify PARAMS when you create a 9391 subsection (in the first instance of `.subspa' for this NAME). 9392 9393 If specified, the list PARAMS declares attributes of the 9394 subsection, identified by keywords. The keywords recognized are 9395 `quad=EXPR' ("quadrant" for this subsection), `align=EXPR' 9396 (alignment for beginning of this subsection; a power of two), 9397 `access=EXPR' (value for "access rights" field), `sort=EXPR' 9398 (sorting order for this subspace in link), `code_only' (subsection 9399 contains only code), `unloadable' (subsection cannot be loaded 9400 into memory), `comdat' (subsection is comdat), `common' 9401 (subsection is common block), `dup_comm' (subsection may have 9402 duplicate names), or `zero' (subsection is all zeros, do not write 9403 in object file). 9404 9405 `.nsubspa' always creates a new subspace with the given name, even 9406 if one with the same name already exists. 9407 9408 `comdat', `common' and `dup_comm' can be used to implement various 9409 flavors of one-only support when using the SOM linker. The SOM 9410 linker only supports specific combinations of these flags. The 9411 details are not documented. A brief description is provided here. 9412 9413 `comdat' provides a form of linkonce support. It is useful for 9414 both code and data subspaces. A `comdat' subspace has a key symbol 9415 marked by the `is_comdat' flag or `ST_COMDAT'. Only the first 9416 subspace for any given key is selected. The key symbol becomes 9417 universal in shared links. This is similar to the behavior of 9418 `secondary_def' symbols. 9419 9420 `common' provides Fortran named common support. It is only useful 9421 for data subspaces. Symbols with the flag `is_common' retain this 9422 flag in shared links. Referencing a `is_common' symbol in a shared 9423 library from outside the library doesn't work. Thus, `is_common' 9424 symbols must be output whenever they are needed. 9425 9426 `common' and `dup_comm' together provide Cobol common support. 9427 The subspaces in this case must all be the same length. 9428 Otherwise, this support is similar to the Fortran common support. 9429 9430 `dup_comm' by itself provides a type of one-only support for code. 9431 Only the first `dup_comm' subspace is selected. There is a rather 9432 complex algorithm to compare subspaces. Code symbols marked with 9433 the `dup_common' flag are hidden. This support was intended for 9434 "C++ duplicate inlines". 9435 9436 A simplified technique is used to mark the flags of symbols based 9437 on the flags of their subspace. A symbol with the scope 9438 SS_UNIVERSAL and type ST_ENTRY, ST_CODE or ST_DATA is marked with 9439 the corresponding settings of `comdat', `common' and `dup_comm' 9440 from the subspace, respectively. This avoids having to introduce 9441 additional directives to mark these symbols. The HP assembler 9442 sets `is_common' from `common'. However, it doesn't set the 9443 `dup_common' from `dup_comm'. It doesn't have `comdat' support. 9444 9445`.version "STR"' 9446 Write STR as version identifier in object code. 9447 9448 9449File: as.info, Node: HPPA Opcodes, Prev: HPPA Directives, Up: HPPA-Dependent 9450 94519.11.6 Opcodes 9452-------------- 9453 9454For detailed information on the HPPA machine instruction set, see 9455`PA-RISC Architecture and Instruction Set Reference Manual' (HP 945609740-90039). 9457 9458 9459File: as.info, Node: ESA/390-Dependent, Next: i386-Dependent, Prev: HPPA-Dependent, Up: Machine Dependencies 9460 94619.12 ESA/390 Dependent Features 9462=============================== 9463 9464* Menu: 9465 9466* ESA/390 Notes:: Notes 9467* ESA/390 Options:: Options 9468* ESA/390 Syntax:: Syntax 9469* ESA/390 Floating Point:: Floating Point 9470* ESA/390 Directives:: ESA/390 Machine Directives 9471* ESA/390 Opcodes:: Opcodes 9472 9473 9474File: as.info, Node: ESA/390 Notes, Next: ESA/390 Options, Up: ESA/390-Dependent 9475 94769.12.1 Notes 9477------------ 9478 9479The ESA/390 `as' port is currently intended to be a back-end for the 9480GNU CC compiler. It is not HLASM compatible, although it does support 9481a subset of some of the HLASM directives. The only supported binary 9482file format is ELF; none of the usual MVS/VM/OE/USS object file 9483formats, such as ESD or XSD, are supported. 9484 9485 When used with the GNU CC compiler, the ESA/390 `as' will produce 9486correct, fully relocated, functional binaries, and has been used to 9487compile and execute large projects. However, many aspects should still 9488be considered experimental; these include shared library support, 9489dynamically loadable objects, and any relocation other than the 31-bit 9490relocation. 9491 9492 9493File: as.info, Node: ESA/390 Options, Next: ESA/390 Syntax, Prev: ESA/390 Notes, Up: ESA/390-Dependent 9494 94959.12.2 Options 9496-------------- 9497 9498`as' has no machine-dependent command-line options for the ESA/390. 9499 9500 9501File: as.info, Node: ESA/390 Syntax, Next: ESA/390 Floating Point, Prev: ESA/390 Options, Up: ESA/390-Dependent 9502 95039.12.3 Syntax 9504------------- 9505 9506The opcode/operand syntax follows the ESA/390 Principles of Operation 9507manual; assembler directives and general syntax are loosely based on the 9508prevailing AT&T/SVR4/ELF/Solaris style notation. HLASM-style directives 9509are _not_ supported for the most part, with the exception of those 9510described herein. 9511 9512 A leading dot in front of directives is optional, and the case of 9513directives is ignored; thus for example, .using and USING have the same 9514effect. 9515 9516 A colon may immediately follow a label definition. This is simply 9517for compatibility with how most assembly language programmers write 9518code. 9519 9520 `#' is the line comment character. 9521 9522 `;' can be used instead of a newline to separate statements. 9523 9524 Since `$' has no special meaning, you may use it in symbol names. 9525 9526 Registers can be given the symbolic names r0..r15, fp0, fp2, fp4, 9527fp6. By using thesse symbolic names, `as' can detect simple syntax 9528errors. The name rarg or r.arg is a synonym for r11, rtca or r.tca for 9529r12, sp, r.sp, dsa r.dsa for r13, lr or r.lr for r14, rbase or r.base 9530for r3 and rpgt or r.pgt for r4. 9531 9532 `*' is the current location counter. Unlike `.' it is always 9533relative to the last USING directive. Note that this means that 9534expressions cannot use multiplication, as any occurrence of `*' will be 9535interpreted as a location counter. 9536 9537 All labels are relative to the last USING. Thus, branches to a label 9538always imply the use of base+displacement. 9539 9540 Many of the usual forms of address constants / address literals are 9541supported. Thus, 9542 .using *,r3 9543 L r15,=A(some_routine) 9544 LM r6,r7,=V(some_longlong_extern) 9545 A r1,=F'12' 9546 AH r0,=H'42' 9547 ME r6,=E'3.1416' 9548 MD r6,=D'3.14159265358979' 9549 O r6,=XL4'cacad0d0' 9550 .ltorg 9551 should all behave as expected: that is, an entry in the literal pool 9552will be created (or reused if it already exists), and the instruction 9553operands will be the displacement into the literal pool using the 9554current base register (as last declared with the `.using' directive). 9555 9556 9557File: as.info, Node: ESA/390 Floating Point, Next: ESA/390 Directives, Prev: ESA/390 Syntax, Up: ESA/390-Dependent 9558 95599.12.4 Floating Point 9560--------------------- 9561 9562The assembler generates only IEEE floating-point numbers. The older 9563floating point formats are not supported. 9564 9565 9566File: as.info, Node: ESA/390 Directives, Next: ESA/390 Opcodes, Prev: ESA/390 Floating Point, Up: ESA/390-Dependent 9567 95689.12.5 ESA/390 Assembler Directives 9569----------------------------------- 9570 9571`as' for the ESA/390 supports all of the standard ELF/SVR4 assembler 9572directives that are documented in the main part of this documentation. 9573Several additional directives are supported in order to implement the 9574ESA/390 addressing model. The most important of these are `.using' and 9575`.ltorg' 9576 9577 These are the additional directives in `as' for the ESA/390: 9578 9579`.dc' 9580 A small subset of the usual DC directive is supported. 9581 9582`.drop REGNO' 9583 Stop using REGNO as the base register. The REGNO must have been 9584 previously declared with a `.using' directive in the same section 9585 as the current section. 9586 9587`.ebcdic STRING' 9588 Emit the EBCDIC equivalent of the indicated string. The emitted 9589 string will be null terminated. Note that the directives 9590 `.string' etc. emit ascii strings by default. 9591 9592`EQU' 9593 The standard HLASM-style EQU directive is not supported; however, 9594 the standard `as' directive .equ can be used to the same effect. 9595 9596`.ltorg' 9597 Dump the literal pool accumulated so far; begin a new literal pool. 9598 The literal pool will be written in the current section; in order 9599 to generate correct assembly, a `.using' must have been previously 9600 specified in the same section. 9601 9602`.using EXPR,REGNO' 9603 Use REGNO as the base register for all subsequent RX, RS, and SS 9604 form instructions. The EXPR will be evaluated to obtain the base 9605 address; usually, EXPR will merely be `*'. 9606 9607 This assembler allows two `.using' directives to be simultaneously 9608 outstanding, one in the `.text' section, and one in another section 9609 (typically, the `.data' section). This feature allows dynamically 9610 loaded objects to be implemented in a relatively straightforward 9611 way. A `.using' directive must always be specified in the `.text' 9612 section; this will specify the base register that will be used for 9613 branches in the `.text' section. A second `.using' may be 9614 specified in another section; this will specify the base register 9615 that is used for non-label address literals. When a second 9616 `.using' is specified, then the subsequent `.ltorg' must be put in 9617 the same section; otherwise an error will result. 9618 9619 Thus, for example, the following code uses `r3' to address branch 9620 targets and `r4' to address the literal pool, which has been 9621 written to the `.data' section. The is, the constants 9622 `=A(some_routine)', `=H'42'' and `=E'3.1416'' will all appear in 9623 the `.data' section. 9624 9625 .data 9626 .using LITPOOL,r4 9627 .text 9628 BASR r3,0 9629 .using *,r3 9630 B START 9631 .long LITPOOL 9632 START: 9633 L r4,4(,r3) 9634 L r15,=A(some_routine) 9635 LTR r15,r15 9636 BNE LABEL 9637 AH r0,=H'42' 9638 LABEL: 9639 ME r6,=E'3.1416' 9640 .data 9641 LITPOOL: 9642 .ltorg 9643 9644 Note that this dual-`.using' directive semantics extends and is 9645 not compatible with HLASM semantics. Note that this assembler 9646 directive does not support the full range of HLASM semantics. 9647 9648 9649 9650File: as.info, Node: ESA/390 Opcodes, Prev: ESA/390 Directives, Up: ESA/390-Dependent 9651 96529.12.6 Opcodes 9653-------------- 9654 9655For detailed information on the ESA/390 machine instruction set, see 9656`ESA/390 Principles of Operation' (IBM Publication Number DZ9AR004). 9657 9658 9659File: as.info, Node: i386-Dependent, Next: i860-Dependent, Prev: ESA/390-Dependent, Up: Machine Dependencies 9660 96619.13 80386 Dependent Features 9662============================= 9663 9664 The i386 version `as' supports both the original Intel 386 9665architecture in both 16 and 32-bit mode as well as AMD x86-64 9666architecture extending the Intel architecture to 64-bits. 9667 9668* Menu: 9669 9670* i386-Options:: Options 9671* i386-Directives:: X86 specific directives 9672* i386-Syntax:: AT&T Syntax versus Intel Syntax 9673* i386-Mnemonics:: Instruction Naming 9674* i386-Regs:: Register Naming 9675* i386-Prefixes:: Instruction Prefixes 9676* i386-Memory:: Memory References 9677* i386-Jumps:: Handling of Jump Instructions 9678* i386-Float:: Floating Point 9679* i386-SIMD:: Intel's MMX and AMD's 3DNow! SIMD Operations 9680* i386-LWP:: AMD's Lightweight Profiling Instructions 9681* i386-16bit:: Writing 16-bit Code 9682* i386-Arch:: Specifying an x86 CPU architecture 9683* i386-Bugs:: AT&T Syntax bugs 9684* i386-Notes:: Notes 9685 9686 9687File: as.info, Node: i386-Options, Next: i386-Directives, Up: i386-Dependent 9688 96899.13.1 Options 9690-------------- 9691 9692The i386 version of `as' has a few machine dependent options: 9693 9694`--32 | --64' 9695 Select the word size, either 32 bits or 64 bits. Selecting 32-bit 9696 implies Intel i386 architecture, while 64-bit implies AMD x86-64 9697 architecture. 9698 9699 These options are only available with the ELF object file format, 9700 and require that the necessary BFD support has been included (on a 9701 32-bit platform you have to add -enable-64-bit-bfd to configure 9702 enable 64-bit usage and use x86-64 as target platform). 9703 9704`-n' 9705 By default, x86 GAS replaces multiple nop instructions used for 9706 alignment within code sections with multi-byte nop instructions 9707 such as leal 0(%esi,1),%esi. This switch disables the 9708 optimization. 9709 9710`--divide' 9711 On SVR4-derived platforms, the character `/' is treated as a 9712 comment character, which means that it cannot be used in 9713 expressions. The `--divide' option turns `/' into a normal 9714 character. This does not disable `/' at the beginning of a line 9715 starting a comment, or affect using `#' for starting a comment. 9716 9717`-march=CPU[+EXTENSION...]' 9718 This option specifies the target processor. The assembler will 9719 issue an error message if an attempt is made to assemble an 9720 instruction which will not execute on the target processor. The 9721 following processor names are recognized: `i8086', `i186', `i286', 9722 `i386', `i486', `i586', `i686', `pentium', `pentiumpro', 9723 `pentiumii', `pentiumiii', `pentium4', `prescott', `nocona', 9724 `core', `core2', `corei7', `l1om', `k6', `k6_2', `athlon', 9725 `opteron', `k8', `amdfam10', `bdver1', `generic32' and `generic64'. 9726 9727 In addition to the basic instruction set, the assembler can be 9728 told to accept various extension mnemonics. For example, 9729 `-march=i686+sse4+vmx' extends I686 with SSE4 and VMX. The 9730 following extensions are currently supported: `8087', `287', `387', 9731 `no87', `mmx', `nommx', `sse', `sse2', `sse3', `ssse3', `sse4.1', 9732 `sse4.2', `sse4', `nosse', `avx', `noavx', `vmx', `smx', `xsave', 9733 `xsaveopt', `aes', `pclmul', `fsgsbase', `rdrnd', `f16c', `fma', 9734 `movbe', `ept', `clflush', `lwp', `fma4', `xop', `syscall', 9735 `rdtscp', `3dnow', `3dnowa', `sse4a', `sse5', `svme', `abm' and 9736 `padlock'. Note that rather than extending a basic instruction 9737 set, the extension mnemonics starting with `no' revoke the 9738 respective functionality. 9739 9740 When the `.arch' directive is used with `-march', the `.arch' 9741 directive will take precedent. 9742 9743`-mtune=CPU' 9744 This option specifies a processor to optimize for. When used in 9745 conjunction with the `-march' option, only instructions of the 9746 processor specified by the `-march' option will be generated. 9747 9748 Valid CPU values are identical to the processor list of 9749 `-march=CPU'. 9750 9751`-msse2avx' 9752 This option specifies that the assembler should encode SSE 9753 instructions with VEX prefix. 9754 9755`-msse-check=NONE' 9756`-msse-check=WARNING' 9757`-msse-check=ERROR' 9758 These options control if the assembler should check SSE 9759 intructions. `-msse-check=NONE' will make the assembler not to 9760 check SSE instructions, which is the default. 9761 `-msse-check=WARNING' will make the assembler issue a warning for 9762 any SSE intruction. `-msse-check=ERROR' will make the assembler 9763 issue an error for any SSE intruction. 9764 9765`-mavxscalar=128' 9766`-mavxscalar=256' 9767 This options control how the assembler should encode scalar AVX 9768 instructions. `-mavxscalar=128' will encode scalar AVX 9769 instructions with 128bit vector length, which is the default. 9770 `-mavxscalar=256' will encode scalar AVX instructions with 256bit 9771 vector length. 9772 9773`-mmnemonic=ATT' 9774`-mmnemonic=INTEL' 9775 This option specifies instruction mnemonic for matching 9776 instructions. The `.att_mnemonic' and `.intel_mnemonic' 9777 directives will take precedent. 9778 9779`-msyntax=ATT' 9780`-msyntax=INTEL' 9781 This option specifies instruction syntax when processing 9782 instructions. The `.att_syntax' and `.intel_syntax' directives 9783 will take precedent. 9784 9785`-mnaked-reg' 9786 This opetion specifies that registers don't require a `%' prefix. 9787 The `.att_syntax' and `.intel_syntax' directives will take 9788 precedent. 9789 9790 9791 9792File: as.info, Node: i386-Directives, Next: i386-Syntax, Prev: i386-Options, Up: i386-Dependent 9793 97949.13.2 x86 specific Directives 9795------------------------------ 9796 9797`.lcomm SYMBOL , LENGTH[, ALIGNMENT]' 9798 Reserve LENGTH (an absolute expression) bytes for a local common 9799 denoted by SYMBOL. The section and value of SYMBOL are those of 9800 the new local common. The addresses are allocated in the bss 9801 section, so that at run-time the bytes start off zeroed. Since 9802 SYMBOL is not declared global, it is normally not visible to `ld'. 9803 The optional third parameter, ALIGNMENT, specifies the desired 9804 alignment of the symbol in the bss section. 9805 9806 This directive is only available for COFF based x86 targets. 9807 9808 9809 9810File: as.info, Node: i386-Syntax, Next: i386-Mnemonics, Prev: i386-Directives, Up: i386-Dependent 9811 98129.13.3 AT&T Syntax versus Intel Syntax 9813-------------------------------------- 9814 9815`as' now supports assembly using Intel assembler syntax. 9816`.intel_syntax' selects Intel mode, and `.att_syntax' switches back to 9817the usual AT&T mode for compatibility with the output of `gcc'. Either 9818of these directives may have an optional argument, `prefix', or 9819`noprefix' specifying whether registers require a `%' prefix. AT&T 9820System V/386 assembler syntax is quite different from Intel syntax. We 9821mention these differences because almost all 80386 documents use Intel 9822syntax. Notable differences between the two syntaxes are: 9823 9824 * AT&T immediate operands are preceded by `$'; Intel immediate 9825 operands are undelimited (Intel `push 4' is AT&T `pushl $4'). 9826 AT&T register operands are preceded by `%'; Intel register operands 9827 are undelimited. AT&T absolute (as opposed to PC relative) 9828 jump/call operands are prefixed by `*'; they are undelimited in 9829 Intel syntax. 9830 9831 * AT&T and Intel syntax use the opposite order for source and 9832 destination operands. Intel `add eax, 4' is `addl $4, %eax'. The 9833 `source, dest' convention is maintained for compatibility with 9834 previous Unix assemblers. Note that `bound', `invlpga', and 9835 instructions with 2 immediate operands, such as the `enter' 9836 instruction, do _not_ have reversed order. *Note i386-Bugs::. 9837 9838 * In AT&T syntax the size of memory operands is determined from the 9839 last character of the instruction mnemonic. Mnemonic suffixes of 9840 `b', `w', `l' and `q' specify byte (8-bit), word (16-bit), long 9841 (32-bit) and quadruple word (64-bit) memory references. Intel 9842 syntax accomplishes this by prefixing memory operands (_not_ the 9843 instruction mnemonics) with `byte ptr', `word ptr', `dword ptr' 9844 and `qword ptr'. Thus, Intel `mov al, byte ptr FOO' is `movb FOO, 9845 %al' in AT&T syntax. 9846 9847 In 64-bit code, `movabs' can be used to encode the `mov' 9848 instruction with the 64-bit displacement or immediate operand. 9849 9850 * Immediate form long jumps and calls are `lcall/ljmp $SECTION, 9851 $OFFSET' in AT&T syntax; the Intel syntax is `call/jmp far 9852 SECTION:OFFSET'. Also, the far return instruction is `lret 9853 $STACK-ADJUST' in AT&T syntax; Intel syntax is `ret far 9854 STACK-ADJUST'. 9855 9856 * The AT&T assembler does not provide support for multiple section 9857 programs. Unix style systems expect all programs to be single 9858 sections. 9859 9860 9861File: as.info, Node: i386-Mnemonics, Next: i386-Regs, Prev: i386-Syntax, Up: i386-Dependent 9862 98639.13.4 Instruction Naming 9864------------------------- 9865 9866Instruction mnemonics are suffixed with one character modifiers which 9867specify the size of operands. The letters `b', `w', `l' and `q' 9868specify byte, word, long and quadruple word operands. If no suffix is 9869specified by an instruction then `as' tries to fill in the missing 9870suffix based on the destination register operand (the last one by 9871convention). Thus, `mov %ax, %bx' is equivalent to `movw %ax, %bx'; 9872also, `mov $1, %bx' is equivalent to `movw $1, bx'. Note that this is 9873incompatible with the AT&T Unix assembler which assumes that a missing 9874mnemonic suffix implies long operand size. (This incompatibility does 9875not affect compiler output since compilers always explicitly specify 9876the mnemonic suffix.) 9877 9878 Almost all instructions have the same names in AT&T and Intel format. 9879There are a few exceptions. The sign extend and zero extend 9880instructions need two sizes to specify them. They need a size to 9881sign/zero extend _from_ and a size to zero extend _to_. This is 9882accomplished by using two instruction mnemonic suffixes in AT&T syntax. 9883Base names for sign extend and zero extend are `movs...' and `movz...' 9884in AT&T syntax (`movsx' and `movzx' in Intel syntax). The instruction 9885mnemonic suffixes are tacked on to this base name, the _from_ suffix 9886before the _to_ suffix. Thus, `movsbl %al, %edx' is AT&T syntax for 9887"move sign extend _from_ %al _to_ %edx." Possible suffixes, thus, are 9888`bl' (from byte to long), `bw' (from byte to word), `wl' (from word to 9889long), `bq' (from byte to quadruple word), `wq' (from word to quadruple 9890word), and `lq' (from long to quadruple word). 9891 9892 Different encoding options can be specified via optional mnemonic 9893suffix. `.s' suffix swaps 2 register operands in encoding when moving 9894from one register to another. `.d32' suffix forces 32bit displacement 9895in encoding. 9896 9897 The Intel-syntax conversion instructions 9898 9899 * `cbw' -- sign-extend byte in `%al' to word in `%ax', 9900 9901 * `cwde' -- sign-extend word in `%ax' to long in `%eax', 9902 9903 * `cwd' -- sign-extend word in `%ax' to long in `%dx:%ax', 9904 9905 * `cdq' -- sign-extend dword in `%eax' to quad in `%edx:%eax', 9906 9907 * `cdqe' -- sign-extend dword in `%eax' to quad in `%rax' (x86-64 9908 only), 9909 9910 * `cqo' -- sign-extend quad in `%rax' to octuple in `%rdx:%rax' 9911 (x86-64 only), 9912 9913are called `cbtw', `cwtl', `cwtd', `cltd', `cltq', and `cqto' in AT&T 9914naming. `as' accepts either naming for these instructions. 9915 9916 Far call/jump instructions are `lcall' and `ljmp' in AT&T syntax, 9917but are `call far' and `jump far' in Intel convention. 9918 99199.13.5 AT&T Mnemonic versus Intel Mnemonic 9920------------------------------------------ 9921 9922`as' supports assembly using Intel mnemonic. `.intel_mnemonic' selects 9923Intel mnemonic with Intel syntax, and `.att_mnemonic' switches back to 9924the usual AT&T mnemonic with AT&T syntax for compatibility with the 9925output of `gcc'. Several x87 instructions, `fadd', `fdiv', `fdivp', 9926`fdivr', `fdivrp', `fmul', `fsub', `fsubp', `fsubr' and `fsubrp', are 9927implemented in AT&T System V/386 assembler with different mnemonics 9928from those in Intel IA32 specification. `gcc' generates those 9929instructions with AT&T mnemonic. 9930 9931 9932File: as.info, Node: i386-Regs, Next: i386-Prefixes, Prev: i386-Mnemonics, Up: i386-Dependent 9933 99349.13.6 Register Naming 9935---------------------- 9936 9937Register operands are always prefixed with `%'. The 80386 registers 9938consist of 9939 9940 * the 8 32-bit registers `%eax' (the accumulator), `%ebx', `%ecx', 9941 `%edx', `%edi', `%esi', `%ebp' (the frame pointer), and `%esp' 9942 (the stack pointer). 9943 9944 * the 8 16-bit low-ends of these: `%ax', `%bx', `%cx', `%dx', `%di', 9945 `%si', `%bp', and `%sp'. 9946 9947 * the 8 8-bit registers: `%ah', `%al', `%bh', `%bl', `%ch', `%cl', 9948 `%dh', and `%dl' (These are the high-bytes and low-bytes of `%ax', 9949 `%bx', `%cx', and `%dx') 9950 9951 * the 6 section registers `%cs' (code section), `%ds' (data 9952 section), `%ss' (stack section), `%es', `%fs', and `%gs'. 9953 9954 * the 3 processor control registers `%cr0', `%cr2', and `%cr3'. 9955 9956 * the 6 debug registers `%db0', `%db1', `%db2', `%db3', `%db6', and 9957 `%db7'. 9958 9959 * the 2 test registers `%tr6' and `%tr7'. 9960 9961 * the 8 floating point register stack `%st' or equivalently 9962 `%st(0)', `%st(1)', `%st(2)', `%st(3)', `%st(4)', `%st(5)', 9963 `%st(6)', and `%st(7)'. These registers are overloaded by 8 MMX 9964 registers `%mm0', `%mm1', `%mm2', `%mm3', `%mm4', `%mm5', `%mm6' 9965 and `%mm7'. 9966 9967 * the 8 SSE registers registers `%xmm0', `%xmm1', `%xmm2', `%xmm3', 9968 `%xmm4', `%xmm5', `%xmm6' and `%xmm7'. 9969 9970 The AMD x86-64 architecture extends the register set by: 9971 9972 * enhancing the 8 32-bit registers to 64-bit: `%rax' (the 9973 accumulator), `%rbx', `%rcx', `%rdx', `%rdi', `%rsi', `%rbp' (the 9974 frame pointer), `%rsp' (the stack pointer) 9975 9976 * the 8 extended registers `%r8'-`%r15'. 9977 9978 * the 8 32-bit low ends of the extended registers: `%r8d'-`%r15d' 9979 9980 * the 8 16-bit low ends of the extended registers: `%r8w'-`%r15w' 9981 9982 * the 8 8-bit low ends of the extended registers: `%r8b'-`%r15b' 9983 9984 * the 4 8-bit registers: `%sil', `%dil', `%bpl', `%spl'. 9985 9986 * the 8 debug registers: `%db8'-`%db15'. 9987 9988 * the 8 SSE registers: `%xmm8'-`%xmm15'. 9989 9990 9991File: as.info, Node: i386-Prefixes, Next: i386-Memory, Prev: i386-Regs, Up: i386-Dependent 9992 99939.13.7 Instruction Prefixes 9994--------------------------- 9995 9996Instruction prefixes are used to modify the following instruction. They 9997are used to repeat string instructions, to provide section overrides, to 9998perform bus lock operations, and to change operand and address sizes. 9999(Most instructions that normally operate on 32-bit operands will use 1000016-bit operands if the instruction has an "operand size" prefix.) 10001Instruction prefixes are best written on the same line as the 10002instruction they act upon. For example, the `scas' (scan string) 10003instruction is repeated with: 10004 10005 repne scas %es:(%edi),%al 10006 10007 You may also place prefixes on the lines immediately preceding the 10008instruction, but this circumvents checks that `as' does with prefixes, 10009and will not work with all prefixes. 10010 10011 Here is a list of instruction prefixes: 10012 10013 * Section override prefixes `cs', `ds', `ss', `es', `fs', `gs'. 10014 These are automatically added by specifying using the 10015 SECTION:MEMORY-OPERAND form for memory references. 10016 10017 * Operand/Address size prefixes `data16' and `addr16' change 32-bit 10018 operands/addresses into 16-bit operands/addresses, while `data32' 10019 and `addr32' change 16-bit ones (in a `.code16' section) into 10020 32-bit operands/addresses. These prefixes _must_ appear on the 10021 same line of code as the instruction they modify. For example, in 10022 a 16-bit `.code16' section, you might write: 10023 10024 addr32 jmpl *(%ebx) 10025 10026 * The bus lock prefix `lock' inhibits interrupts during execution of 10027 the instruction it precedes. (This is only valid with certain 10028 instructions; see a 80386 manual for details). 10029 10030 * The wait for coprocessor prefix `wait' waits for the coprocessor to 10031 complete the current instruction. This should never be needed for 10032 the 80386/80387 combination. 10033 10034 * The `rep', `repe', and `repne' prefixes are added to string 10035 instructions to make them repeat `%ecx' times (`%cx' times if the 10036 current address size is 16-bits). 10037 10038 * The `rex' family of prefixes is used by x86-64 to encode 10039 extensions to i386 instruction set. The `rex' prefix has four 10040 bits -- an operand size overwrite (`64') used to change operand 10041 size from 32-bit to 64-bit and X, Y and Z extensions bits used to 10042 extend the register set. 10043 10044 You may write the `rex' prefixes directly. The `rex64xyz' 10045 instruction emits `rex' prefix with all the bits set. By omitting 10046 the `64', `x', `y' or `z' you may write other prefixes as well. 10047 Normally, there is no need to write the prefixes explicitly, since 10048 gas will automatically generate them based on the instruction 10049 operands. 10050 10051 10052File: as.info, Node: i386-Memory, Next: i386-Jumps, Prev: i386-Prefixes, Up: i386-Dependent 10053 100549.13.8 Memory References 10055------------------------ 10056 10057An Intel syntax indirect memory reference of the form 10058 10059 SECTION:[BASE + INDEX*SCALE + DISP] 10060 10061is translated into the AT&T syntax 10062 10063 SECTION:DISP(BASE, INDEX, SCALE) 10064 10065where BASE and INDEX are the optional 32-bit base and index registers, 10066DISP is the optional displacement, and SCALE, taking the values 1, 2, 100674, and 8, multiplies INDEX to calculate the address of the operand. If 10068no SCALE is specified, SCALE is taken to be 1. SECTION specifies the 10069optional section register for the memory operand, and may override the 10070default section register (see a 80386 manual for section register 10071defaults). Note that section overrides in AT&T syntax _must_ be 10072preceded by a `%'. If you specify a section override which coincides 10073with the default section register, `as' does _not_ output any section 10074register override prefixes to assemble the given instruction. Thus, 10075section overrides can be specified to emphasize which section register 10076is used for a given memory operand. 10077 10078 Here are some examples of Intel and AT&T style memory references: 10079 10080AT&T: `-4(%ebp)', Intel: `[ebp - 4]' 10081 BASE is `%ebp'; DISP is `-4'. SECTION is missing, and the default 10082 section is used (`%ss' for addressing with `%ebp' as the base 10083 register). INDEX, SCALE are both missing. 10084 10085AT&T: `foo(,%eax,4)', Intel: `[foo + eax*4]' 10086 INDEX is `%eax' (scaled by a SCALE 4); DISP is `foo'. All other 10087 fields are missing. The section register here defaults to `%ds'. 10088 10089AT&T: `foo(,1)'; Intel `[foo]' 10090 This uses the value pointed to by `foo' as a memory operand. Note 10091 that BASE and INDEX are both missing, but there is only _one_ `,'. 10092 This is a syntactic exception. 10093 10094AT&T: `%gs:foo'; Intel `gs:foo' 10095 This selects the contents of the variable `foo' with section 10096 register SECTION being `%gs'. 10097 10098 Absolute (as opposed to PC relative) call and jump operands must be 10099prefixed with `*'. If no `*' is specified, `as' always chooses PC 10100relative addressing for jump/call labels. 10101 10102 Any instruction that has a memory operand, but no register operand, 10103_must_ specify its size (byte, word, long, or quadruple) with an 10104instruction mnemonic suffix (`b', `w', `l' or `q', respectively). 10105 10106 The x86-64 architecture adds an RIP (instruction pointer relative) 10107addressing. This addressing mode is specified by using `rip' as a base 10108register. Only constant offsets are valid. For example: 10109 10110AT&T: `1234(%rip)', Intel: `[rip + 1234]' 10111 Points to the address 1234 bytes past the end of the current 10112 instruction. 10113 10114AT&T: `symbol(%rip)', Intel: `[rip + symbol]' 10115 Points to the `symbol' in RIP relative way, this is shorter than 10116 the default absolute addressing. 10117 10118 Other addressing modes remain unchanged in x86-64 architecture, 10119except registers used are 64-bit instead of 32-bit. 10120 10121 10122File: as.info, Node: i386-Jumps, Next: i386-Float, Prev: i386-Memory, Up: i386-Dependent 10123 101249.13.9 Handling of Jump Instructions 10125------------------------------------ 10126 10127Jump instructions are always optimized to use the smallest possible 10128displacements. This is accomplished by using byte (8-bit) displacement 10129jumps whenever the target is sufficiently close. If a byte displacement 10130is insufficient a long displacement is used. We do not support word 10131(16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump 10132instruction with the `data16' instruction prefix), since the 80386 10133insists upon masking `%eip' to 16 bits after the word displacement is 10134added. (See also *note i386-Arch::) 10135 10136 Note that the `jcxz', `jecxz', `loop', `loopz', `loope', `loopnz' 10137and `loopne' instructions only come in byte displacements, so that if 10138you use these instructions (`gcc' does not use them) you may get an 10139error message (and incorrect code). The AT&T 80386 assembler tries to 10140get around this problem by expanding `jcxz foo' to 10141 10142 jcxz cx_zero 10143 jmp cx_nonzero 10144 cx_zero: jmp foo 10145 cx_nonzero: 10146 10147 10148File: as.info, Node: i386-Float, Next: i386-SIMD, Prev: i386-Jumps, Up: i386-Dependent 10149 101509.13.10 Floating Point 10151---------------------- 10152 10153All 80387 floating point types except packed BCD are supported. (BCD 10154support may be added without much difficulty). These data types are 1015516-, 32-, and 64- bit integers, and single (32-bit), double (64-bit), 10156and extended (80-bit) precision floating point. Each supported type 10157has an instruction mnemonic suffix and a constructor associated with 10158it. Instruction mnemonic suffixes specify the operand's data type. 10159Constructors build these data types into memory. 10160 10161 * Floating point constructors are `.float' or `.single', `.double', 10162 and `.tfloat' for 32-, 64-, and 80-bit formats. These correspond 10163 to instruction mnemonic suffixes `s', `l', and `t'. `t' stands for 10164 80-bit (ten byte) real. The 80387 only supports this format via 10165 the `fldt' (load 80-bit real to stack top) and `fstpt' (store 10166 80-bit real and pop stack) instructions. 10167 10168 * Integer constructors are `.word', `.long' or `.int', and `.quad' 10169 for the 16-, 32-, and 64-bit integer formats. The corresponding 10170 instruction mnemonic suffixes are `s' (single), `l' (long), and 10171 `q' (quad). As with the 80-bit real format, the 64-bit `q' format 10172 is only present in the `fildq' (load quad integer to stack top) 10173 and `fistpq' (store quad integer and pop stack) instructions. 10174 10175 Register to register operations should not use instruction mnemonic 10176suffixes. `fstl %st, %st(1)' will give a warning, and be assembled as 10177if you wrote `fst %st, %st(1)', since all register to register 10178operations use 80-bit floating point operands. (Contrast this with 10179`fstl %st, mem', which converts `%st' from 80-bit to 64-bit floating 10180point format, then stores the result in the 4 byte location `mem') 10181 10182 10183File: as.info, Node: i386-SIMD, Next: i386-LWP, Prev: i386-Float, Up: i386-Dependent 10184 101859.13.11 Intel's MMX and AMD's 3DNow! SIMD Operations 10186---------------------------------------------------- 10187 10188`as' supports Intel's MMX instruction set (SIMD instructions for 10189integer data), available on Intel's Pentium MMX processors and Pentium 10190II processors, AMD's K6 and K6-2 processors, Cyrix' M2 processor, and 10191probably others. It also supports AMD's 3DNow! instruction set (SIMD 10192instructions for 32-bit floating point data) available on AMD's K6-2 10193processor and possibly others in the future. 10194 10195 Currently, `as' does not support Intel's floating point SIMD, Katmai 10196(KNI). 10197 10198 The eight 64-bit MMX operands, also used by 3DNow!, are called 10199`%mm0', `%mm1', ... `%mm7'. They contain eight 8-bit integers, four 1020016-bit integers, two 32-bit integers, one 64-bit integer, or two 32-bit 10201floating point values. The MMX registers cannot be used at the same 10202time as the floating point stack. 10203 10204 See Intel and AMD documentation, keeping in mind that the operand 10205order in instructions is reversed from the Intel syntax. 10206 10207 10208File: as.info, Node: i386-LWP, Next: i386-16bit, Prev: i386-SIMD, Up: i386-Dependent 10209 102109.13.12 AMD's Lightweight Profiling Instructions 10211------------------------------------------------ 10212 10213`as' supports AMD's Lightweight Profiling (LWP) instruction set, 10214available on AMD's Family 15h (Orochi) processors. 10215 10216 LWP enables applications to collect and manage performance data, and 10217react to performance events. The collection of performance data 10218requires no context switches. LWP runs in the context of a thread and 10219so several counters can be used independently across multiple threads. 10220LWP can be used in both 64-bit and legacy 32-bit modes. 10221 10222 For detailed information on the LWP instruction set, see the `AMD 10223Lightweight Profiling Specification' available at Lightweight Profiling 10224Specification (http://developer.amd.com/cpu/LWP). 10225 10226 10227File: as.info, Node: i386-16bit, Next: i386-Arch, Prev: i386-LWP, Up: i386-Dependent 10228 102299.13.13 Writing 16-bit Code 10230--------------------------- 10231 10232While `as' normally writes only "pure" 32-bit i386 code or 64-bit 10233x86-64 code depending on the default configuration, it also supports 10234writing code to run in real mode or in 16-bit protected mode code 10235segments. To do this, put a `.code16' or `.code16gcc' directive before 10236the assembly language instructions to be run in 16-bit mode. You can 10237switch `as' to writing 32-bit code with the `.code32' directive or 1023864-bit code with the `.code64' directive. 10239 10240 `.code16gcc' provides experimental support for generating 16-bit 10241code from gcc, and differs from `.code16' in that `call', `ret', 10242`enter', `leave', `push', `pop', `pusha', `popa', `pushf', and `popf' 10243instructions default to 32-bit size. This is so that the stack pointer 10244is manipulated in the same way over function calls, allowing access to 10245function parameters at the same stack offsets as in 32-bit mode. 10246`.code16gcc' also automatically adds address size prefixes where 10247necessary to use the 32-bit addressing modes that gcc generates. 10248 10249 The code which `as' generates in 16-bit mode will not necessarily 10250run on a 16-bit pre-80386 processor. To write code that runs on such a 10251processor, you must refrain from using _any_ 32-bit constructs which 10252require `as' to output address or operand size prefixes. 10253 10254 Note that writing 16-bit code instructions by explicitly specifying a 10255prefix or an instruction mnemonic suffix within a 32-bit code section 10256generates different machine instructions than those generated for a 1025716-bit code segment. In a 32-bit code section, the following code 10258generates the machine opcode bytes `66 6a 04', which pushes the value 10259`4' onto the stack, decrementing `%esp' by 2. 10260 10261 pushw $4 10262 10263 The same code in a 16-bit code section would generate the machine 10264opcode bytes `6a 04' (i.e., without the operand size prefix), which is 10265correct since the processor default operand size is assumed to be 16 10266bits in a 16-bit code section. 10267 10268 10269File: as.info, Node: i386-Bugs, Next: i386-Notes, Prev: i386-Arch, Up: i386-Dependent 10270 102719.13.14 AT&T Syntax bugs 10272------------------------ 10273 10274The UnixWare assembler, and probably other AT&T derived ix86 Unix 10275assemblers, generate floating point instructions with reversed source 10276and destination registers in certain cases. Unfortunately, gcc and 10277possibly many other programs use this reversed syntax, so we're stuck 10278with it. 10279 10280 For example 10281 10282 fsub %st,%st(3) 10283 results in `%st(3)' being updated to `%st - %st(3)' rather than the 10284expected `%st(3) - %st'. This happens with all the non-commutative 10285arithmetic floating point operations with two register operands where 10286the source register is `%st' and the destination register is `%st(i)'. 10287 10288 10289File: as.info, Node: i386-Arch, Next: i386-Bugs, Prev: i386-16bit, Up: i386-Dependent 10290 102919.13.15 Specifying CPU Architecture 10292----------------------------------- 10293 10294`as' may be told to assemble for a particular CPU (sub-)architecture 10295with the `.arch CPU_TYPE' directive. This directive enables a warning 10296when gas detects an instruction that is not supported on the CPU 10297specified. The choices for CPU_TYPE are: 10298 10299`i8086' `i186' `i286' `i386' 10300`i486' `i586' `i686' `pentium' 10301`pentiumpro' `pentiumii' `pentiumiii' `pentium4' 10302`prescott' `nocona' `core' `core2' 10303`corei7' `l1om' 10304`k6' `k6_2' `athlon' `k8' 10305`amdfam10' `bdver1' 10306`generic32' `generic64' 10307`.mmx' `.sse' `.sse2' `.sse3' 10308`.ssse3' `.sse4.1' `.sse4.2' `.sse4' 10309`.avx' `.vmx' `.smx' `.ept' 10310`.clflush' `.movbe' `.xsave' `.xsaveopt' 10311`.aes' `.pclmul' `.fma' `.fsgsbase' 10312`.rdrnd' `.f16c' 10313`.3dnow' `.3dnowa' `.sse4a' `.sse5' 10314`.syscall' `.rdtscp' `.svme' `.abm' 10315`.lwp' `.fma4' `.xop' 10316`.padlock' 10317 10318 Apart from the warning, there are only two other effects on `as' 10319operation; Firstly, if you specify a CPU other than `i486', then shift 10320by one instructions such as `sarl $1, %eax' will automatically use a 10321two byte opcode sequence. The larger three byte opcode sequence is 10322used on the 486 (and when no architecture is specified) because it 10323executes faster on the 486. Note that you can explicitly request the 10324two byte opcode by writing `sarl %eax'. Secondly, if you specify 10325`i8086', `i186', or `i286', _and_ `.code16' or `.code16gcc' then byte 10326offset conditional jumps will be promoted when necessary to a two 10327instruction sequence consisting of a conditional jump of the opposite 10328sense around an unconditional jump to the target. 10329 10330 Following the CPU architecture (but not a sub-architecture, which 10331are those starting with a dot), you may specify `jumps' or `nojumps' to 10332control automatic promotion of conditional jumps. `jumps' is the 10333default, and enables jump promotion; All external jumps will be of the 10334long variety, and file-local jumps will be promoted as necessary. 10335(*note i386-Jumps::) `nojumps' leaves external conditional jumps as 10336byte offset jumps, and warns about file-local conditional jumps that 10337`as' promotes. Unconditional jumps are treated as for `jumps'. 10338 10339 For example 10340 10341 .arch i8086,nojumps 10342 10343 10344File: as.info, Node: i386-Notes, Prev: i386-Bugs, Up: i386-Dependent 10345 103469.13.16 Notes 10347------------- 10348 10349There is some trickery concerning the `mul' and `imul' instructions 10350that deserves mention. The 16-, 32-, 64- and 128-bit expanding 10351multiplies (base opcode `0xf6'; extension 4 for `mul' and 5 for `imul') 10352can be output only in the one operand form. Thus, `imul %ebx, %eax' 10353does _not_ select the expanding multiply; the expanding multiply would 10354clobber the `%edx' register, and this would confuse `gcc' output. Use 10355`imul %ebx' to get the 64-bit product in `%edx:%eax'. 10356 10357 We have added a two operand form of `imul' when the first operand is 10358an immediate mode expression and the second operand is a register. 10359This is just a shorthand, so that, multiplying `%eax' by 69, for 10360example, can be done with `imul $69, %eax' rather than `imul $69, %eax, 10361%eax'. 10362 10363 10364File: as.info, Node: i860-Dependent, Next: i960-Dependent, Prev: i386-Dependent, Up: Machine Dependencies 10365 103669.14 Intel i860 Dependent Features 10367================================== 10368 10369* Menu: 10370 10371* Notes-i860:: i860 Notes 10372* Options-i860:: i860 Command-line Options 10373* Directives-i860:: i860 Machine Directives 10374* Opcodes for i860:: i860 Opcodes 10375 10376 10377File: as.info, Node: Notes-i860, Next: Options-i860, Up: i860-Dependent 10378 103799.14.1 i860 Notes 10380----------------- 10381 10382This is a fairly complete i860 assembler which is compatible with the 10383UNIX System V/860 Release 4 assembler. However, it does not currently 10384support SVR4 PIC (i.e., `@GOT, @GOTOFF, @PLT'). 10385 10386 Like the SVR4/860 assembler, the output object format is ELF32. 10387Currently, this is the only supported object format. If there is 10388sufficient interest, other formats such as COFF may be implemented. 10389 10390 Both the Intel and AT&T/SVR4 syntaxes are supported, with the latter 10391being the default. One difference is that AT&T syntax requires the '%' 10392prefix on register names while Intel syntax does not. Another 10393difference is in the specification of relocatable expressions. The 10394Intel syntax is `ha%expression' whereas the SVR4 syntax is 10395`[expression]@ha' (and similarly for the "l" and "h" selectors). 10396 10397 10398File: as.info, Node: Options-i860, Next: Directives-i860, Prev: Notes-i860, Up: i860-Dependent 10399 104009.14.2 i860 Command-line Options 10401-------------------------------- 10402 104039.14.2.1 SVR4 compatibility options 10404................................... 10405 10406`-V' 10407 Print assembler version. 10408 10409`-Qy' 10410 Ignored. 10411 10412`-Qn' 10413 Ignored. 10414 104159.14.2.2 Other options 10416...................... 10417 10418`-EL' 10419 Select little endian output (this is the default). 10420 10421`-EB' 10422 Select big endian output. Note that the i860 always reads 10423 instructions as little endian data, so this option only effects 10424 data and not instructions. 10425 10426`-mwarn-expand' 10427 Emit a warning message if any pseudo-instruction expansions 10428 occurred. For example, a `or' instruction with an immediate 10429 larger than 16-bits will be expanded into two instructions. This 10430 is a very undesirable feature to rely on, so this flag can help 10431 detect any code where it happens. One use of it, for instance, has 10432 been to find and eliminate any place where `gcc' may emit these 10433 pseudo-instructions. 10434 10435`-mxp' 10436 Enable support for the i860XP instructions and control registers. 10437 By default, this option is disabled so that only the base 10438 instruction set (i.e., i860XR) is supported. 10439 10440`-mintel-syntax' 10441 The i860 assembler defaults to AT&T/SVR4 syntax. This option 10442 enables the Intel syntax. 10443 10444 10445File: as.info, Node: Directives-i860, Next: Opcodes for i860, Prev: Options-i860, Up: i860-Dependent 10446 104479.14.3 i860 Machine Directives 10448------------------------------ 10449 10450`.dual' 10451 Enter dual instruction mode. While this directive is supported, the 10452 preferred way to use dual instruction mode is to explicitly code 10453 the dual bit with the `d.' prefix. 10454 10455`.enddual' 10456 Exit dual instruction mode. While this directive is supported, the 10457 preferred way to use dual instruction mode is to explicitly code 10458 the dual bit with the `d.' prefix. 10459 10460`.atmp' 10461 Change the temporary register used when expanding pseudo 10462 operations. The default register is `r31'. 10463 10464 The `.dual', `.enddual', and `.atmp' directives are available only 10465in the Intel syntax mode. 10466 10467 Both syntaxes allow for the standard `.align' directive. However, 10468the Intel syntax additionally allows keywords for the alignment 10469parameter: "`.align type'", where `type' is one of `.short', `.long', 10470`.quad', `.single', `.double' representing alignments of 2, 4, 16, 4, 10471and 8, respectively. 10472 10473 10474File: as.info, Node: Opcodes for i860, Prev: Directives-i860, Up: i860-Dependent 10475 104769.14.4 i860 Opcodes 10477------------------- 10478 10479All of the Intel i860XR and i860XP machine instructions are supported. 10480Please see either _i860 Microprocessor Programmer's Reference Manual_ 10481or _i860 Microprocessor Architecture_ for more information. 10482 104839.14.4.1 Other instruction support (pseudo-instructions) 10484........................................................ 10485 10486For compatibility with some other i860 assemblers, a number of 10487pseudo-instructions are supported. While these are supported, they are 10488a very undesirable feature that should be avoided - in particular, when 10489they result in an expansion to multiple actual i860 instructions. Below 10490are the pseudo-instructions that result in expansions. 10491 * Load large immediate into general register: 10492 10493 The pseudo-instruction `mov imm,%rn' (where the immediate does not 10494 fit within a signed 16-bit field) will be expanded into: 10495 orh large_imm@h,%r0,%rn 10496 or large_imm@l,%rn,%rn 10497 10498 * Load/store with relocatable address expression: 10499 10500 For example, the pseudo-instruction `ld.b addr_exp(%rx),%rn' will 10501 be expanded into: 10502 orh addr_exp@ha,%rx,%r31 10503 ld.l addr_exp@l(%r31),%rn 10504 10505 The analogous expansions apply to `ld.x, st.x, fld.x, pfld.x, 10506 fst.x', and `pst.x' as well. 10507 10508 * Signed large immediate with add/subtract: 10509 10510 If any of the arithmetic operations `adds, addu, subs, subu' are 10511 used with an immediate larger than 16-bits (signed), then they 10512 will be expanded. For instance, the pseudo-instruction `adds 10513 large_imm,%rx,%rn' expands to: 10514 orh large_imm@h,%r0,%r31 10515 or large_imm@l,%r31,%r31 10516 adds %r31,%rx,%rn 10517 10518 * Unsigned large immediate with logical operations: 10519 10520 Logical operations (`or, andnot, or, xor') also result in 10521 expansions. The pseudo-instruction `or large_imm,%rx,%rn' results 10522 in: 10523 orh large_imm@h,%rx,%r31 10524 or large_imm@l,%r31,%rn 10525 10526 Similarly for the others, except for `and' which expands to: 10527 andnot (-1 - large_imm)@h,%rx,%r31 10528 andnot (-1 - large_imm)@l,%r31,%rn 10529 10530 10531File: as.info, Node: i960-Dependent, Next: IA-64-Dependent, Prev: i860-Dependent, Up: Machine Dependencies 10532 105339.15 Intel 80960 Dependent Features 10534=================================== 10535 10536* Menu: 10537 10538* Options-i960:: i960 Command-line Options 10539* Floating Point-i960:: Floating Point 10540* Directives-i960:: i960 Machine Directives 10541* Opcodes for i960:: i960 Opcodes 10542 10543 10544File: as.info, Node: Options-i960, Next: Floating Point-i960, Up: i960-Dependent 10545 105469.15.1 i960 Command-line Options 10547-------------------------------- 10548 10549`-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC' 10550 Select the 80960 architecture. Instructions or features not 10551 supported by the selected architecture cause fatal errors. 10552 10553 `-ACA' is equivalent to `-ACA_A'; `-AKC' is equivalent to `-AMC'. 10554 Synonyms are provided for compatibility with other tools. 10555 10556 If you do not specify any of these options, `as' generates code 10557 for any instruction or feature that is supported by _some_ version 10558 of the 960 (even if this means mixing architectures!). In 10559 principle, `as' attempts to deduce the minimal sufficient 10560 processor type if none is specified; depending on the object code 10561 format, the processor type may be recorded in the object file. If 10562 it is critical that the `as' output match a specific architecture, 10563 specify that architecture explicitly. 10564 10565`-b' 10566 Add code to collect information about conditional branches taken, 10567 for later optimization using branch prediction bits. (The 10568 conditional branch instructions have branch prediction bits in the 10569 CA, CB, and CC architectures.) If BR represents a conditional 10570 branch instruction, the following represents the code generated by 10571 the assembler when `-b' is specified: 10572 10573 call INCREMENT ROUTINE 10574 .word 0 # pre-counter 10575 Label: BR 10576 call INCREMENT ROUTINE 10577 .word 0 # post-counter 10578 10579 The counter following a branch records the number of times that 10580 branch was _not_ taken; the difference between the two counters is 10581 the number of times the branch _was_ taken. 10582 10583 A table of every such `Label' is also generated, so that the 10584 external postprocessor `gbr960' (supplied by Intel) can locate all 10585 the counters. This table is always labeled `__BRANCH_TABLE__'; 10586 this is a local symbol to permit collecting statistics for many 10587 separate object files. The table is word aligned, and begins with 10588 a two-word header. The first word, initialized to 0, is used in 10589 maintaining linked lists of branch tables. The second word is a 10590 count of the number of entries in the table, which follow 10591 immediately: each is a word, pointing to one of the labels 10592 illustrated above. 10593 10594 +------------+------------+------------+ ... +------------+ 10595 | | | | | | 10596 | *NEXT | COUNT: N | *BRLAB 1 | | *BRLAB N | 10597 | | | | | | 10598 +------------+------------+------------+ ... +------------+ 10599 10600 __BRANCH_TABLE__ layout 10601 10602 The first word of the header is used to locate multiple branch 10603 tables, since each object file may contain one. Normally the links 10604 are maintained with a call to an initialization routine, placed at 10605 the beginning of each function in the file. The GNU C compiler 10606 generates these calls automatically when you give it a `-b' option. 10607 For further details, see the documentation of `gbr960'. 10608 10609`-no-relax' 10610 Normally, Compare-and-Branch instructions with targets that require 10611 displacements greater than 13 bits (or that have external targets) 10612 are replaced with the corresponding compare (or `chkbit') and 10613 branch instructions. You can use the `-no-relax' option to 10614 specify that `as' should generate errors instead, if the target 10615 displacement is larger than 13 bits. 10616 10617 This option does not affect the Compare-and-Jump instructions; the 10618 code emitted for them is _always_ adjusted when necessary 10619 (depending on displacement size), regardless of whether you use 10620 `-no-relax'. 10621 10622 10623File: as.info, Node: Floating Point-i960, Next: Directives-i960, Prev: Options-i960, Up: i960-Dependent 10624 106259.15.2 Floating Point 10626--------------------- 10627 10628`as' generates IEEE floating-point numbers for the directives `.float', 10629`.double', `.extended', and `.single'. 10630 10631 10632File: as.info, Node: Directives-i960, Next: Opcodes for i960, Prev: Floating Point-i960, Up: i960-Dependent 10633 106349.15.3 i960 Machine Directives 10635------------------------------ 10636 10637`.bss SYMBOL, LENGTH, ALIGN' 10638 Reserve LENGTH bytes in the bss section for a local SYMBOL, 10639 aligned to the power of two specified by ALIGN. LENGTH and ALIGN 10640 must be positive absolute expressions. This directive differs 10641 from `.lcomm' only in that it permits you to specify an alignment. 10642 *Note `.lcomm': Lcomm. 10643 10644`.extended FLONUMS' 10645 `.extended' expects zero or more flonums, separated by commas; for 10646 each flonum, `.extended' emits an IEEE extended-format (80-bit) 10647 floating-point number. 10648 10649`.leafproc CALL-LAB, BAL-LAB' 10650 You can use the `.leafproc' directive in conjunction with the 10651 optimized `callj' instruction to enable faster calls of leaf 10652 procedures. If a procedure is known to call no other procedures, 10653 you may define an entry point that skips procedure prolog code 10654 (and that does not depend on system-supplied saved context), and 10655 declare it as the BAL-LAB using `.leafproc'. If the procedure 10656 also has an entry point that goes through the normal prolog, you 10657 can specify that entry point as CALL-LAB. 10658 10659 A `.leafproc' declaration is meant for use in conjunction with the 10660 optimized call instruction `callj'; the directive records the data 10661 needed later to choose between converting the `callj' into a `bal' 10662 or a `call'. 10663 10664 CALL-LAB is optional; if only one argument is present, or if the 10665 two arguments are identical, the single argument is assumed to be 10666 the `bal' entry point. 10667 10668`.sysproc NAME, INDEX' 10669 The `.sysproc' directive defines a name for a system procedure. 10670 After you define it using `.sysproc', you can use NAME to refer to 10671 the system procedure identified by INDEX when calling procedures 10672 with the optimized call instruction `callj'. 10673 10674 Both arguments are required; INDEX must be between 0 and 31 10675 (inclusive). 10676 10677 10678File: as.info, Node: Opcodes for i960, Prev: Directives-i960, Up: i960-Dependent 10679 106809.15.4 i960 Opcodes 10681------------------- 10682 10683All Intel 960 machine instructions are supported; *note i960 10684Command-line Options: Options-i960. for a discussion of selecting the 10685instruction subset for a particular 960 architecture. 10686 10687 Some opcodes are processed beyond simply emitting a single 10688corresponding instruction: `callj', and Compare-and-Branch or 10689Compare-and-Jump instructions with target displacements larger than 13 10690bits. 10691 10692* Menu: 10693 10694* callj-i960:: `callj' 10695* Compare-and-branch-i960:: Compare-and-Branch 10696 10697 10698File: as.info, Node: callj-i960, Next: Compare-and-branch-i960, Up: Opcodes for i960 10699 107009.15.4.1 `callj' 10701................ 10702 10703You can write `callj' to have the assembler or the linker determine the 10704most appropriate form of subroutine call: `call', `bal', or `calls'. 10705If the assembly source contains enough information--a `.leafproc' or 10706`.sysproc' directive defining the operand--then `as' translates the 10707`callj'; if not, it simply emits the `callj', leaving it for the linker 10708to resolve. 10709 10710 10711File: as.info, Node: Compare-and-branch-i960, Prev: callj-i960, Up: Opcodes for i960 10712 107139.15.4.2 Compare-and-Branch 10714........................... 10715 10716The 960 architectures provide combined Compare-and-Branch instructions 10717that permit you to store the branch target in the lower 13 bits of the 10718instruction word itself. However, if you specify a branch target far 10719enough away that its address won't fit in 13 bits, the assembler can 10720either issue an error, or convert your Compare-and-Branch instruction 10721into separate instructions to do the compare and the branch. 10722 10723 Whether `as' gives an error or expands the instruction depends on 10724two choices you can make: whether you use the `-no-relax' option, and 10725whether you use a "Compare and Branch" instruction or a "Compare and 10726Jump" instruction. The "Jump" instructions are _always_ expanded if 10727necessary; the "Branch" instructions are expanded when necessary 10728_unless_ you specify `-no-relax'--in which case `as' gives an error 10729instead. 10730 10731 These are the Compare-and-Branch instructions, their "Jump" variants, 10732and the instruction pairs they may expand into: 10733 10734 Compare and 10735 Branch Jump Expanded to 10736 ------ ------ ------------ 10737 bbc chkbit; bno 10738 bbs chkbit; bo 10739 cmpibe cmpije cmpi; be 10740 cmpibg cmpijg cmpi; bg 10741 cmpibge cmpijge cmpi; bge 10742 cmpibl cmpijl cmpi; bl 10743 cmpible cmpijle cmpi; ble 10744 cmpibno cmpijno cmpi; bno 10745 cmpibne cmpijne cmpi; bne 10746 cmpibo cmpijo cmpi; bo 10747 cmpobe cmpoje cmpo; be 10748 cmpobg cmpojg cmpo; bg 10749 cmpobge cmpojge cmpo; bge 10750 cmpobl cmpojl cmpo; bl 10751 cmpoble cmpojle cmpo; ble 10752 cmpobne cmpojne cmpo; bne 10753 10754 10755File: as.info, Node: IA-64-Dependent, Next: IP2K-Dependent, Prev: i960-Dependent, Up: Machine Dependencies 10756 107579.16 IA-64 Dependent Features 10758============================= 10759 10760* Menu: 10761 10762* IA-64 Options:: Options 10763* IA-64 Syntax:: Syntax 10764* IA-64 Opcodes:: Opcodes 10765 10766 10767File: as.info, Node: IA-64 Options, Next: IA-64 Syntax, Up: IA-64-Dependent 10768 107699.16.1 Options 10770-------------- 10771 10772`-mconstant-gp' 10773 This option instructs the assembler to mark the resulting object 10774 file as using the "constant GP" model. With this model, it is 10775 assumed that the entire program uses a single global pointer (GP) 10776 value. Note that this option does not in any fashion affect the 10777 machine code emitted by the assembler. All it does is turn on the 10778 EF_IA_64_CONS_GP flag in the ELF file header. 10779 10780`-mauto-pic' 10781 This option instructs the assembler to mark the resulting object 10782 file as using the "constant GP without function descriptor" data 10783 model. This model is like the "constant GP" model, except that it 10784 additionally does away with function descriptors. What this means 10785 is that the address of a function refers directly to the 10786 function's code entry-point. Normally, such an address would 10787 refer to a function descriptor, which contains both the code 10788 entry-point and the GP-value needed by the function. Note that 10789 this option does not in any fashion affect the machine code 10790 emitted by the assembler. All it does is turn on the 10791 EF_IA_64_NOFUNCDESC_CONS_GP flag in the ELF file header. 10792 10793`-milp32' 10794`-milp64' 10795`-mlp64' 10796`-mp64' 10797 These options select the data model. The assembler defaults to 10798 `-mlp64' (LP64 data model). 10799 10800`-mle' 10801`-mbe' 10802 These options select the byte order. The `-mle' option selects 10803 little-endian byte order (default) and `-mbe' selects big-endian 10804 byte order. Note that IA-64 machine code always uses 10805 little-endian byte order. 10806 10807`-mtune=itanium1' 10808`-mtune=itanium2' 10809 Tune for a particular IA-64 CPU, ITANIUM1 or ITANIUM2. The default 10810 is ITANIUM2. 10811 10812`-munwind-check=warning' 10813`-munwind-check=error' 10814 These options control what the assembler will do when performing 10815 consistency checks on unwind directives. `-munwind-check=warning' 10816 will make the assembler issue a warning when an unwind directive 10817 check fails. This is the default. `-munwind-check=error' will 10818 make the assembler issue an error when an unwind directive check 10819 fails. 10820 10821`-mhint.b=ok' 10822`-mhint.b=warning' 10823`-mhint.b=error' 10824 These options control what the assembler will do when the `hint.b' 10825 instruction is used. `-mhint.b=ok' will make the assembler accept 10826 `hint.b'. `-mint.b=warning' will make the assembler issue a 10827 warning when `hint.b' is used. `-mhint.b=error' will make the 10828 assembler treat `hint.b' as an error, which is the default. 10829 10830`-x' 10831`-xexplicit' 10832 These options turn on dependency violation checking. 10833 10834`-xauto' 10835 This option instructs the assembler to automatically insert stop 10836 bits where necessary to remove dependency violations. This is the 10837 default mode. 10838 10839`-xnone' 10840 This option turns off dependency violation checking. 10841 10842`-xdebug' 10843 This turns on debug output intended to help tracking down bugs in 10844 the dependency violation checker. 10845 10846`-xdebugn' 10847 This is a shortcut for -xnone -xdebug. 10848 10849`-xdebugx' 10850 This is a shortcut for -xexplicit -xdebug. 10851 10852 10853 10854File: as.info, Node: IA-64 Syntax, Next: IA-64 Opcodes, Prev: IA-64 Options, Up: IA-64-Dependent 10855 108569.16.2 Syntax 10857------------- 10858 10859The assembler syntax closely follows the IA-64 Assembly Language 10860Reference Guide. 10861 10862* Menu: 10863 10864* IA-64-Chars:: Special Characters 10865* IA-64-Regs:: Register Names 10866* IA-64-Bits:: Bit Names 10867* IA-64-Relocs:: Relocations 10868 10869 10870File: as.info, Node: IA-64-Chars, Next: IA-64-Regs, Up: IA-64 Syntax 10871 108729.16.2.1 Special Characters 10873........................... 10874 10875`//' is the line comment token. 10876 10877 `;' can be used instead of a newline to separate statements. 10878 10879 10880File: as.info, Node: IA-64-Regs, Next: IA-64-Bits, Prev: IA-64-Chars, Up: IA-64 Syntax 10881 108829.16.2.2 Register Names 10883....................... 10884 10885The 128 integer registers are referred to as `rN'. The 128 10886floating-point registers are referred to as `fN'. The 128 application 10887registers are referred to as `arN'. The 128 control registers are 10888referred to as `crN'. The 64 one-bit predicate registers are referred 10889to as `pN'. The 8 branch registers are referred to as `bN'. In 10890addition, the assembler defines a number of aliases: `gp' (`r1'), `sp' 10891(`r12'), `rp' (`b0'), `ret0' (`r8'), `ret1' (`r9'), `ret2' (`r10'), 10892`ret3' (`r9'), `fargN' (`f8+N'), and `fretN' (`f8+N'). 10893 10894 For convenience, the assembler also defines aliases for all named 10895application and control registers. For example, `ar.bsp' refers to the 10896register backing store pointer (`ar17'). Similarly, `cr.eoi' refers to 10897the end-of-interrupt register (`cr67'). 10898 10899 10900File: as.info, Node: IA-64-Bits, Next: IA-64-Relocs, Prev: IA-64-Regs, Up: IA-64 Syntax 10901 109029.16.2.3 IA-64 Processor-Status-Register (PSR) Bit Names 10903........................................................ 10904 10905The assembler defines bit masks for each of the bits in the IA-64 10906processor status register. For example, `psr.ic' corresponds to a 10907value of 0x2000. These masks are primarily intended for use with the 10908`ssm'/`sum' and `rsm'/`rum' instructions, but they can be used anywhere 10909else where an integer constant is expected. 10910 10911 10912File: as.info, Node: IA-64-Relocs, Prev: IA-64-Bits, Up: IA-64 Syntax 10913 109149.16.2.4 Relocations 10915.................... 10916 10917In addition to the standard IA-64 relocations, the following 10918relocations are implemented by `as': 10919 10920`@slotcount(V)' 10921 Convert the address offset V into a slot count. This pseudo 10922 function is available only on VMS. The expression V must be known 10923 at assembly time: it can't reference undefined symbols or symbols 10924 in different sections. 10925 10926 10927File: as.info, Node: IA-64 Opcodes, Prev: IA-64 Syntax, Up: IA-64-Dependent 10928 109299.16.3 Opcodes 10930-------------- 10931 10932For detailed information on the IA-64 machine instruction set, see the 10933IA-64 Architecture Handbook 10934(http://developer.intel.com/design/itanium/arch_spec.htm). 10935 10936 10937File: as.info, Node: IP2K-Dependent, Next: LM32-Dependent, Prev: IA-64-Dependent, Up: Machine Dependencies 10938 109399.17 IP2K Dependent Features 10940============================ 10941 10942* Menu: 10943 10944* IP2K-Opts:: IP2K Options 10945 10946 10947File: as.info, Node: IP2K-Opts, Up: IP2K-Dependent 10948 109499.17.1 IP2K Options 10950------------------- 10951 10952The Ubicom IP2K version of `as' has a few machine dependent options: 10953 10954`-mip2022ext' 10955 `as' can assemble the extended IP2022 instructions, but it will 10956 only do so if this is specifically allowed via this command line 10957 option. 10958 10959`-mip2022' 10960 This option restores the assembler's default behaviour of not 10961 permitting the extended IP2022 instructions to be assembled. 10962 10963 10964 10965File: as.info, Node: LM32-Dependent, Next: M32C-Dependent, Prev: IP2K-Dependent, Up: Machine Dependencies 10966 109679.18 LM32 Dependent Features 10968============================ 10969 10970* Menu: 10971 10972* LM32 Options:: Options 10973* LM32 Syntax:: Syntax 10974* LM32 Opcodes:: Opcodes 10975 10976 10977File: as.info, Node: LM32 Options, Next: LM32 Syntax, Up: LM32-Dependent 10978 109799.18.1 Options 10980-------------- 10981 10982`-mmultiply-enabled' 10983 Enable multiply instructions. 10984 10985`-mdivide-enabled' 10986 Enable divide instructions. 10987 10988`-mbarrel-shift-enabled' 10989 Enable barrel-shift instructions. 10990 10991`-msign-extend-enabled' 10992 Enable sign extend instructions. 10993 10994`-muser-enabled' 10995 Enable user defined instructions. 10996 10997`-micache-enabled' 10998 Enable instruction cache related CSRs. 10999 11000`-mdcache-enabled' 11001 Enable data cache related CSRs. 11002 11003`-mbreak-enabled' 11004 Enable break instructions. 11005 11006`-mall-enabled' 11007 Enable all instructions and CSRs. 11008 11009 11010 11011File: as.info, Node: LM32 Syntax, Next: LM32 Opcodes, Prev: LM32 Options, Up: LM32-Dependent 11012 110139.18.2 Syntax 11014------------- 11015 11016* Menu: 11017 11018* LM32-Regs:: Register Names 11019* LM32-Modifiers:: Relocatable Expression Modifiers 11020 11021 11022File: as.info, Node: LM32-Regs, Next: LM32-Modifiers, Up: LM32 Syntax 11023 110249.18.2.1 Register Names 11025....................... 11026 11027LM32 has 32 x 32-bit general purpose registers `r0', `r1', ... `r31'. 11028 11029 The following aliases are defined: `gp' - `r26', `fp' - `r27', `sp' 11030- `r28', `ra' - `r29', `ea' - `r30', `ba' - `r31'. 11031 11032 LM32 has the following Control and Status Registers (CSRs). 11033 11034`IE' 11035 Interrupt enable. 11036 11037`IM' 11038 Interrupt mask. 11039 11040`IP' 11041 Interrupt pending. 11042 11043`ICC' 11044 Instruction cache control. 11045 11046`DCC' 11047 Data cache control. 11048 11049`CC' 11050 Cycle counter. 11051 11052`CFG' 11053 Configuration. 11054 11055`EBA' 11056 Exception base address. 11057 11058`DC' 11059 Debug control. 11060 11061`DEBA' 11062 Debug exception base address. 11063 11064`JTX' 11065 JTAG transmit. 11066 11067`JRX' 11068 JTAG receive. 11069 11070`BP0' 11071 Breakpoint 0. 11072 11073`BP1' 11074 Breakpoint 1. 11075 11076`BP2' 11077 Breakpoint 2. 11078 11079`BP3' 11080 Breakpoint 3. 11081 11082`WP0' 11083 Watchpoint 0. 11084 11085`WP1' 11086 Watchpoint 1. 11087 11088`WP2' 11089 Watchpoint 2. 11090 11091`WP3' 11092 Watchpoint 3. 11093 11094 11095File: as.info, Node: LM32-Modifiers, Prev: LM32-Regs, Up: LM32 Syntax 11096 110979.18.2.2 Relocatable Expression Modifiers 11098......................................... 11099 11100The assembler supports several modifiers when using relocatable 11101addresses in LM32 instruction operands. The general syntax is the 11102following: 11103 11104 modifier(relocatable-expression) 11105 11106`lo' 11107 This modifier allows you to use bits 0 through 15 of an address 11108 expression as 16 bit relocatable expression. 11109 11110`hi' 11111 This modifier allows you to use bits 16 through 23 of an address 11112 expression as 16 bit relocatable expression. 11113 11114 For example 11115 11116 ori r4, r4, lo(sym+10) 11117 orhi r4, r4, hi(sym+10) 11118 11119`gp' 11120 This modified creates a 16-bit relocatable expression that is the 11121 offset of the symbol from the global pointer. 11122 11123 mva r4, gp(sym) 11124 11125`got' 11126 This modifier places a symbol in the GOT and creates a 16-bit 11127 relocatable expression that is the offset into the GOT of this 11128 symbol. 11129 11130 lw r4, (gp+got(sym)) 11131 11132`gotofflo16' 11133 This modifier allows you to use the bits 0 through 15 of an 11134 address which is an offset from the GOT. 11135 11136`gotoffhi16' 11137 This modifier allows you to use the bits 16 through 31 of an 11138 address which is an offset from the GOT. 11139 11140 orhi r4, r4, gotoffhi16(lsym) 11141 addi r4, r4, gotofflo16(lsym) 11142 11143 11144 11145File: as.info, Node: LM32 Opcodes, Prev: LM32 Syntax, Up: LM32-Dependent 11146 111479.18.3 Opcodes 11148-------------- 11149 11150For detailed information on the LM32 machine instruction set, see 11151`http://www.latticesemi.com/products/intellectualproperty/ipcores/mico32/'. 11152 11153 `as' implements all the standard LM32 opcodes. 11154 11155 11156File: as.info, Node: M32C-Dependent, Next: M32R-Dependent, Prev: LM32-Dependent, Up: Machine Dependencies 11157 111589.19 M32C Dependent Features 11159============================ 11160 11161 `as' can assemble code for several different members of the Renesas 11162M32C family. Normally the default is to assemble code for the M16C 11163microprocessor. The `-m32c' option may be used to change the default 11164to the M32C microprocessor. 11165 11166* Menu: 11167 11168* M32C-Opts:: M32C Options 11169* M32C-Modifiers:: Symbolic Operand Modifiers 11170 11171 11172File: as.info, Node: M32C-Opts, Next: M32C-Modifiers, Up: M32C-Dependent 11173 111749.19.1 M32C Options 11175------------------- 11176 11177The Renesas M32C version of `as' has these machine-dependent options: 11178 11179`-m32c' 11180 Assemble M32C instructions. 11181 11182`-m16c' 11183 Assemble M16C instructions (default). 11184 11185`-relax' 11186 Enable support for link-time relaxations. 11187 11188`-h-tick-hex' 11189 Support H'00 style hex constants in addition to 0x00 style. 11190 11191 11192 11193File: as.info, Node: M32C-Modifiers, Prev: M32C-Opts, Up: M32C-Dependent 11194 111959.19.2 Symbolic Operand Modifiers 11196--------------------------------- 11197 11198The assembler supports several modifiers when using symbol addresses in 11199M32C instruction operands. The general syntax is the following: 11200 11201 %modifier(symbol) 11202 11203`%dsp8' 11204`%dsp16' 11205 These modifiers override the assembler's assumptions about how big 11206 a symbol's address is. Normally, when it sees an operand like 11207 `sym[a0]' it assumes `sym' may require the widest displacement 11208 field (16 bits for `-m16c', 24 bits for `-m32c'). These modifiers 11209 tell it to assume the address will fit in an 8 or 16 bit 11210 (respectively) unsigned displacement. Note that, of course, if it 11211 doesn't actually fit you will get linker errors. Example: 11212 11213 mov.w %dsp8(sym)[a0],r1 11214 mov.b #0,%dsp8(sym)[a0] 11215 11216`%hi8' 11217 This modifier allows you to load bits 16 through 23 of a 24 bit 11218 address into an 8 bit register. This is useful with, for example, 11219 the M16C `smovf' instruction, which expects a 20 bit address in 11220 `r1h' and `a0'. Example: 11221 11222 mov.b #%hi8(sym),r1h 11223 mov.w #%lo16(sym),a0 11224 smovf.b 11225 11226`%lo16' 11227 Likewise, this modifier allows you to load bits 0 through 15 of a 11228 24 bit address into a 16 bit register. 11229 11230`%hi16' 11231 This modifier allows you to load bits 16 through 31 of a 32 bit 11232 address into a 16 bit register. While the M32C family only has 24 11233 bits of address space, it does support addresses in pairs of 16 bit 11234 registers (like `a1a0' for the `lde' instruction). This modifier 11235 is for loading the upper half in such cases. Example: 11236 11237 mov.w #%hi16(sym),a1 11238 mov.w #%lo16(sym),a0 11239 ... 11240 lde.w [a1a0],r1 11241 11242 11243 11244File: as.info, Node: M32R-Dependent, Next: M68K-Dependent, Prev: M32C-Dependent, Up: Machine Dependencies 11245 112469.20 M32R Dependent Features 11247============================ 11248 11249* Menu: 11250 11251* M32R-Opts:: M32R Options 11252* M32R-Directives:: M32R Directives 11253* M32R-Warnings:: M32R Warnings 11254 11255 11256File: as.info, Node: M32R-Opts, Next: M32R-Directives, Up: M32R-Dependent 11257 112589.20.1 M32R Options 11259------------------- 11260 11261The Renease M32R version of `as' has a few machine dependent options: 11262 11263`-m32rx' 11264 `as' can assemble code for several different members of the 11265 Renesas M32R family. Normally the default is to assemble code for 11266 the M32R microprocessor. This option may be used to change the 11267 default to the M32RX microprocessor, which adds some more 11268 instructions to the basic M32R instruction set, and some 11269 additional parameters to some of the original instructions. 11270 11271`-m32r2' 11272 This option changes the target processor to the the M32R2 11273 microprocessor. 11274 11275`-m32r' 11276 This option can be used to restore the assembler's default 11277 behaviour of assembling for the M32R microprocessor. This can be 11278 useful if the default has been changed by a previous command line 11279 option. 11280 11281`-little' 11282 This option tells the assembler to produce little-endian code and 11283 data. The default is dependent upon how the toolchain was 11284 configured. 11285 11286`-EL' 11287 This is a synonym for _-little_. 11288 11289`-big' 11290 This option tells the assembler to produce big-endian code and 11291 data. 11292 11293`-EB' 11294 This is a synonum for _-big_. 11295 11296`-KPIC' 11297 This option specifies that the output of the assembler should be 11298 marked as position-independent code (PIC). 11299 11300`-parallel' 11301 This option tells the assembler to attempts to combine two 11302 sequential instructions into a single, parallel instruction, where 11303 it is legal to do so. 11304 11305`-no-parallel' 11306 This option disables a previously enabled _-parallel_ option. 11307 11308`-no-bitinst' 11309 This option disables the support for the extended bit-field 11310 instructions provided by the M32R2. If this support needs to be 11311 re-enabled the _-bitinst_ switch can be used to restore it. 11312 11313`-O' 11314 This option tells the assembler to attempt to optimize the 11315 instructions that it produces. This includes filling delay slots 11316 and converting sequential instructions into parallel ones. This 11317 option implies _-parallel_. 11318 11319`-warn-explicit-parallel-conflicts' 11320 Instructs `as' to produce warning messages when questionable 11321 parallel instructions are encountered. This option is enabled by 11322 default, but `gcc' disables it when it invokes `as' directly. 11323 Questionable instructions are those whose behaviour would be 11324 different if they were executed sequentially. For example the 11325 code fragment `mv r1, r2 || mv r3, r1' produces a different result 11326 from `mv r1, r2 \n mv r3, r1' since the former moves r1 into r3 11327 and then r2 into r1, whereas the later moves r2 into r1 and r3. 11328 11329`-Wp' 11330 This is a shorter synonym for the 11331 _-warn-explicit-parallel-conflicts_ option. 11332 11333`-no-warn-explicit-parallel-conflicts' 11334 Instructs `as' not to produce warning messages when questionable 11335 parallel instructions are encountered. 11336 11337`-Wnp' 11338 This is a shorter synonym for the 11339 _-no-warn-explicit-parallel-conflicts_ option. 11340 11341`-ignore-parallel-conflicts' 11342 This option tells the assembler's to stop checking parallel 11343 instructions for constraint violations. This ability is provided 11344 for hardware vendors testing chip designs and should not be used 11345 under normal circumstances. 11346 11347`-no-ignore-parallel-conflicts' 11348 This option restores the assembler's default behaviour of checking 11349 parallel instructions to detect constraint violations. 11350 11351`-Ip' 11352 This is a shorter synonym for the _-ignore-parallel-conflicts_ 11353 option. 11354 11355`-nIp' 11356 This is a shorter synonym for the _-no-ignore-parallel-conflicts_ 11357 option. 11358 11359`-warn-unmatched-high' 11360 This option tells the assembler to produce a warning message if a 11361 `.high' pseudo op is encountered without a matching `.low' pseudo 11362 op. The presence of such an unmatched pseudo op usually indicates 11363 a programming error. 11364 11365`-no-warn-unmatched-high' 11366 Disables a previously enabled _-warn-unmatched-high_ option. 11367 11368`-Wuh' 11369 This is a shorter synonym for the _-warn-unmatched-high_ option. 11370 11371`-Wnuh' 11372 This is a shorter synonym for the _-no-warn-unmatched-high_ option. 11373 11374 11375 11376File: as.info, Node: M32R-Directives, Next: M32R-Warnings, Prev: M32R-Opts, Up: M32R-Dependent 11377 113789.20.2 M32R Directives 11379---------------------- 11380 11381The Renease M32R version of `as' has a few architecture specific 11382directives: 11383 11384`low EXPRESSION' 11385 The `low' directive computes the value of its expression and 11386 places the lower 16-bits of the result into the immediate-field of 11387 the instruction. For example: 11388 11389 or3 r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678 11390 add3, r0, r0, #low(fred) ; compute r0 = r0 + low 16-bits of address of fred 11391 11392`high EXPRESSION' 11393 The `high' directive computes the value of its expression and 11394 places the upper 16-bits of the result into the immediate-field of 11395 the instruction. For example: 11396 11397 seth r0, #high(0x12345678) ; compute r0 = 0x12340000 11398 seth, r0, #high(fred) ; compute r0 = upper 16-bits of address of fred 11399 11400`shigh EXPRESSION' 11401 The `shigh' directive is very similar to the `high' directive. It 11402 also computes the value of its expression and places the upper 11403 16-bits of the result into the immediate-field of the instruction. 11404 The difference is that `shigh' also checks to see if the lower 11405 16-bits could be interpreted as a signed number, and if so it 11406 assumes that a borrow will occur from the upper-16 bits. To 11407 compensate for this the `shigh' directive pre-biases the upper 16 11408 bit value by adding one to it. For example: 11409 11410 For example: 11411 11412 seth r0, #shigh(0x12345678) ; compute r0 = 0x12340000 11413 seth r0, #shigh(0x00008000) ; compute r0 = 0x00010000 11414 11415 In the second example the lower 16-bits are 0x8000. If these are 11416 treated as a signed value and sign extended to 32-bits then the 11417 value becomes 0xffff8000. If this value is then added to 11418 0x00010000 then the result is 0x00008000. 11419 11420 This behaviour is to allow for the different semantics of the 11421 `or3' and `add3' instructions. The `or3' instruction treats its 11422 16-bit immediate argument as unsigned whereas the `add3' treats 11423 its 16-bit immediate as a signed value. So for example: 11424 11425 seth r0, #shigh(0x00008000) 11426 add3 r0, r0, #low(0x00008000) 11427 11428 Produces the correct result in r0, whereas: 11429 11430 seth r0, #shigh(0x00008000) 11431 or3 r0, r0, #low(0x00008000) 11432 11433 Stores 0xffff8000 into r0. 11434 11435 Note - the `shigh' directive does not know where in the assembly 11436 source code the lower 16-bits of the value are going set, so it 11437 cannot check to make sure that an `or3' instruction is being used 11438 rather than an `add3' instruction. It is up to the programmer to 11439 make sure that correct directives are used. 11440 11441`.m32r' 11442 The directive performs a similar thing as the _-m32r_ command line 11443 option. It tells the assembler to only accept M32R instructions 11444 from now on. An instructions from later M32R architectures are 11445 refused. 11446 11447`.m32rx' 11448 The directive performs a similar thing as the _-m32rx_ command 11449 line option. It tells the assembler to start accepting the extra 11450 instructions in the M32RX ISA as well as the ordinary M32R ISA. 11451 11452`.m32r2' 11453 The directive performs a similar thing as the _-m32r2_ command 11454 line option. It tells the assembler to start accepting the extra 11455 instructions in the M32R2 ISA as well as the ordinary M32R ISA. 11456 11457`.little' 11458 The directive performs a similar thing as the _-little_ command 11459 line option. It tells the assembler to start producing 11460 little-endian code and data. This option should be used with care 11461 as producing mixed-endian binary files is fraught with danger. 11462 11463`.big' 11464 The directive performs a similar thing as the _-big_ command line 11465 option. It tells the assembler to start producing big-endian code 11466 and data. This option should be used with care as producing 11467 mixed-endian binary files is fraught with danger. 11468 11469 11470 11471File: as.info, Node: M32R-Warnings, Prev: M32R-Directives, Up: M32R-Dependent 11472 114739.20.3 M32R Warnings 11474-------------------- 11475 11476There are several warning and error messages that can be produced by 11477`as' which are specific to the M32R: 11478 11479`output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?' 11480 This message is only produced if warnings for explicit parallel 11481 conflicts have been enabled. It indicates that the assembler has 11482 encountered a parallel instruction in which the destination 11483 register of the left hand instruction is used as an input register 11484 in the right hand instruction. For example in this code fragment 11485 `mv r1, r2 || neg r3, r1' register r1 is the destination of the 11486 move instruction and the input to the neg instruction. 11487 11488`output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?' 11489 This message is only produced if warnings for explicit parallel 11490 conflicts have been enabled. It indicates that the assembler has 11491 encountered a parallel instruction in which the destination 11492 register of the right hand instruction is used as an input 11493 register in the left hand instruction. For example in this code 11494 fragment `mv r1, r2 || neg r2, r3' register r2 is the destination 11495 of the neg instruction and the input to the move instruction. 11496 11497`instruction `...' is for the M32RX only' 11498 This message is produced when the assembler encounters an 11499 instruction which is only supported by the M32Rx processor, and 11500 the `-m32rx' command line flag has not been specified to allow 11501 assembly of such instructions. 11502 11503`unknown instruction `...'' 11504 This message is produced when the assembler encounters an 11505 instruction which it does not recognize. 11506 11507`only the NOP instruction can be issued in parallel on the m32r' 11508 This message is produced when the assembler encounters a parallel 11509 instruction which does not involve a NOP instruction and the 11510 `-m32rx' command line flag has not been specified. Only the M32Rx 11511 processor is able to execute two instructions in parallel. 11512 11513`instruction `...' cannot be executed in parallel.' 11514 This message is produced when the assembler encounters a parallel 11515 instruction which is made up of one or two instructions which 11516 cannot be executed in parallel. 11517 11518`Instructions share the same execution pipeline' 11519 This message is produced when the assembler encounters a parallel 11520 instruction whoes components both use the same execution pipeline. 11521 11522`Instructions write to the same destination register.' 11523 This message is produced when the assembler encounters a parallel 11524 instruction where both components attempt to modify the same 11525 register. For example these code fragments will produce this 11526 message: `mv r1, r2 || neg r1, r3' `jl r0 || mv r14, r1' `st r2, 11527 @-r1 || mv r1, r3' `mv r1, r2 || ld r0, @r1+' `cmp r1, r2 || addx 11528 r3, r4' (Both write to the condition bit) 11529 11530 11531 11532File: as.info, Node: M68K-Dependent, Next: M68HC11-Dependent, Prev: M32R-Dependent, Up: Machine Dependencies 11533 115349.21 M680x0 Dependent Features 11535============================== 11536 11537* Menu: 11538 11539* M68K-Opts:: M680x0 Options 11540* M68K-Syntax:: Syntax 11541* M68K-Moto-Syntax:: Motorola Syntax 11542* M68K-Float:: Floating Point 11543* M68K-Directives:: 680x0 Machine Directives 11544* M68K-opcodes:: Opcodes 11545 11546 11547File: as.info, Node: M68K-Opts, Next: M68K-Syntax, Up: M68K-Dependent 11548 115499.21.1 M680x0 Options 11550--------------------- 11551 11552The Motorola 680x0 version of `as' has a few machine dependent options: 11553 11554`-march=ARCHITECTURE' 11555 This option specifies a target architecture. The following 11556 architectures are recognized: `68000', `68010', `68020', `68030', 11557 `68040', `68060', `cpu32', `isaa', `isaaplus', `isab', `isac' and 11558 `cfv4e'. 11559 11560`-mcpu=CPU' 11561 This option specifies a target cpu. When used in conjunction with 11562 the `-march' option, the cpu must be within the specified 11563 architecture. Also, the generic features of the architecture are 11564 used for instruction generation, rather than those of the specific 11565 chip. 11566 11567`-m[no-]68851' 11568`-m[no-]68881' 11569`-m[no-]div' 11570`-m[no-]usp' 11571`-m[no-]float' 11572`-m[no-]mac' 11573`-m[no-]emac' 11574 Enable or disable various architecture specific features. If a 11575 chip or architecture by default supports an option (for instance 11576 `-march=isaaplus' includes the `-mdiv' option), explicitly 11577 disabling the option will override the default. 11578 11579`-l' 11580 You can use the `-l' option to shorten the size of references to 11581 undefined symbols. If you do not use the `-l' option, references 11582 to undefined symbols are wide enough for a full `long' (32 bits). 11583 (Since `as' cannot know where these symbols end up, `as' can only 11584 allocate space for the linker to fill in later. Since `as' does 11585 not know how far away these symbols are, it allocates as much 11586 space as it can.) If you use this option, the references are only 11587 one word wide (16 bits). This may be useful if you want the 11588 object file to be as small as possible, and you know that the 11589 relevant symbols are always less than 17 bits away. 11590 11591`--register-prefix-optional' 11592 For some configurations, especially those where the compiler 11593 normally does not prepend an underscore to the names of user 11594 variables, the assembler requires a `%' before any use of a 11595 register name. This is intended to let the assembler distinguish 11596 between C variables and functions named `a0' through `a7', and so 11597 on. The `%' is always accepted, but is not required for certain 11598 configurations, notably `sun3'. The `--register-prefix-optional' 11599 option may be used to permit omitting the `%' even for 11600 configurations for which it is normally required. If this is 11601 done, it will generally be impossible to refer to C variables and 11602 functions with the same names as register names. 11603 11604`--bitwise-or' 11605 Normally the character `|' is treated as a comment character, which 11606 means that it can not be used in expressions. The `--bitwise-or' 11607 option turns `|' into a normal character. In this mode, you must 11608 either use C style comments, or start comments with a `#' character 11609 at the beginning of a line. 11610 11611`--base-size-default-16 --base-size-default-32' 11612 If you use an addressing mode with a base register without 11613 specifying the size, `as' will normally use the full 32 bit value. 11614 For example, the addressing mode `%a0@(%d0)' is equivalent to 11615 `%a0@(%d0:l)'. You may use the `--base-size-default-16' option to 11616 tell `as' to default to using the 16 bit value. In this case, 11617 `%a0@(%d0)' is equivalent to `%a0@(%d0:w)'. You may use the 11618 `--base-size-default-32' option to restore the default behaviour. 11619 11620`--disp-size-default-16 --disp-size-default-32' 11621 If you use an addressing mode with a displacement, and the value 11622 of the displacement is not known, `as' will normally assume that 11623 the value is 32 bits. For example, if the symbol `disp' has not 11624 been defined, `as' will assemble the addressing mode 11625 `%a0@(disp,%d0)' as though `disp' is a 32 bit value. You may use 11626 the `--disp-size-default-16' option to tell `as' to instead assume 11627 that the displacement is 16 bits. In this case, `as' will 11628 assemble `%a0@(disp,%d0)' as though `disp' is a 16 bit value. You 11629 may use the `--disp-size-default-32' option to restore the default 11630 behaviour. 11631 11632`--pcrel' 11633 Always keep branches PC-relative. In the M680x0 architecture all 11634 branches are defined as PC-relative. However, on some processors 11635 they are limited to word displacements maximum. When `as' needs a 11636 long branch that is not available, it normally emits an absolute 11637 jump instead. This option disables this substitution. When this 11638 option is given and no long branches are available, only word 11639 branches will be emitted. An error message will be generated if a 11640 word branch cannot reach its target. This option has no effect on 11641 68020 and other processors that have long branches. *note Branch 11642 Improvement: M68K-Branch. 11643 11644`-m68000' 11645 `as' can assemble code for several different members of the 11646 Motorola 680x0 family. The default depends upon how `as' was 11647 configured when it was built; normally, the default is to assemble 11648 code for the 68020 microprocessor. The following options may be 11649 used to change the default. These options control which 11650 instructions and addressing modes are permitted. The members of 11651 the 680x0 family are very similar. For detailed information about 11652 the differences, see the Motorola manuals. 11653 11654 `-m68000' 11655 `-m68ec000' 11656 `-m68hc000' 11657 `-m68hc001' 11658 `-m68008' 11659 `-m68302' 11660 `-m68306' 11661 `-m68307' 11662 `-m68322' 11663 `-m68356' 11664 Assemble for the 68000. `-m68008', `-m68302', and so on are 11665 synonyms for `-m68000', since the chips are the same from the 11666 point of view of the assembler. 11667 11668 `-m68010' 11669 Assemble for the 68010. 11670 11671 `-m68020' 11672 `-m68ec020' 11673 Assemble for the 68020. This is normally the default. 11674 11675 `-m68030' 11676 `-m68ec030' 11677 Assemble for the 68030. 11678 11679 `-m68040' 11680 `-m68ec040' 11681 Assemble for the 68040. 11682 11683 `-m68060' 11684 `-m68ec060' 11685 Assemble for the 68060. 11686 11687 `-mcpu32' 11688 `-m68330' 11689 `-m68331' 11690 `-m68332' 11691 `-m68333' 11692 `-m68334' 11693 `-m68336' 11694 `-m68340' 11695 `-m68341' 11696 `-m68349' 11697 `-m68360' 11698 Assemble for the CPU32 family of chips. 11699 11700 `-m5200' 11701 `-m5202' 11702 `-m5204' 11703 `-m5206' 11704 `-m5206e' 11705 `-m521x' 11706 `-m5249' 11707 `-m528x' 11708 `-m5307' 11709 `-m5407' 11710 `-m547x' 11711 `-m548x' 11712 `-mcfv4' 11713 `-mcfv4e' 11714 Assemble for the ColdFire family of chips. 11715 11716 `-m68881' 11717 `-m68882' 11718 Assemble 68881 floating point instructions. This is the 11719 default for the 68020, 68030, and the CPU32. The 68040 and 11720 68060 always support floating point instructions. 11721 11722 `-mno-68881' 11723 Do not assemble 68881 floating point instructions. This is 11724 the default for 68000 and the 68010. The 68040 and 68060 11725 always support floating point instructions, even if this 11726 option is used. 11727 11728 `-m68851' 11729 Assemble 68851 MMU instructions. This is the default for the 11730 68020, 68030, and 68060. The 68040 accepts a somewhat 11731 different set of MMU instructions; `-m68851' and `-m68040' 11732 should not be used together. 11733 11734 `-mno-68851' 11735 Do not assemble 68851 MMU instructions. This is the default 11736 for the 68000, 68010, and the CPU32. The 68040 accepts a 11737 somewhat different set of MMU instructions. 11738 11739 11740File: as.info, Node: M68K-Syntax, Next: M68K-Moto-Syntax, Prev: M68K-Opts, Up: M68K-Dependent 11741 117429.21.2 Syntax 11743------------- 11744 11745This syntax for the Motorola 680x0 was developed at MIT. 11746 11747 The 680x0 version of `as' uses instructions names and syntax 11748compatible with the Sun assembler. Intervening periods are ignored; 11749for example, `movl' is equivalent to `mov.l'. 11750 11751 In the following table APC stands for any of the address registers 11752(`%a0' through `%a7'), the program counter (`%pc'), the zero-address 11753relative to the program counter (`%zpc'), a suppressed address register 11754(`%za0' through `%za7'), or it may be omitted entirely. The use of 11755SIZE means one of `w' or `l', and it may be omitted, along with the 11756leading colon, unless a scale is also specified. The use of SCALE 11757means one of `1', `2', `4', or `8', and it may always be omitted along 11758with the leading colon. 11759 11760 The following addressing modes are understood: 11761"Immediate" 11762 `#NUMBER' 11763 11764"Data Register" 11765 `%d0' through `%d7' 11766 11767"Address Register" 11768 `%a0' through `%a7' 11769 `%a7' is also known as `%sp', i.e., the Stack Pointer. `%a6' is 11770 also known as `%fp', the Frame Pointer. 11771 11772"Address Register Indirect" 11773 `%a0@' through `%a7@' 11774 11775"Address Register Postincrement" 11776 `%a0@+' through `%a7@+' 11777 11778"Address Register Predecrement" 11779 `%a0@-' through `%a7@-' 11780 11781"Indirect Plus Offset" 11782 `APC@(NUMBER)' 11783 11784"Index" 11785 `APC@(NUMBER,REGISTER:SIZE:SCALE)' 11786 11787 The NUMBER may be omitted. 11788 11789"Postindex" 11790 `APC@(NUMBER)@(ONUMBER,REGISTER:SIZE:SCALE)' 11791 11792 The ONUMBER or the REGISTER, but not both, may be omitted. 11793 11794"Preindex" 11795 `APC@(NUMBER,REGISTER:SIZE:SCALE)@(ONUMBER)' 11796 11797 The NUMBER may be omitted. Omitting the REGISTER produces the 11798 Postindex addressing mode. 11799 11800"Absolute" 11801 `SYMBOL', or `DIGITS', optionally followed by `:b', `:w', or `:l'. 11802 11803 11804File: as.info, Node: M68K-Moto-Syntax, Next: M68K-Float, Prev: M68K-Syntax, Up: M68K-Dependent 11805 118069.21.3 Motorola Syntax 11807---------------------- 11808 11809The standard Motorola syntax for this chip differs from the syntax 11810already discussed (*note Syntax: M68K-Syntax.). `as' can accept 11811Motorola syntax for operands, even if MIT syntax is used for other 11812operands in the same instruction. The two kinds of syntax are fully 11813compatible. 11814 11815 In the following table APC stands for any of the address registers 11816(`%a0' through `%a7'), the program counter (`%pc'), the zero-address 11817relative to the program counter (`%zpc'), or a suppressed address 11818register (`%za0' through `%za7'). The use of SIZE means one of `w' or 11819`l', and it may always be omitted along with the leading dot. The use 11820of SCALE means one of `1', `2', `4', or `8', and it may always be 11821omitted along with the leading asterisk. 11822 11823 The following additional addressing modes are understood: 11824 11825"Address Register Indirect" 11826 `(%a0)' through `(%a7)' 11827 `%a7' is also known as `%sp', i.e., the Stack Pointer. `%a6' is 11828 also known as `%fp', the Frame Pointer. 11829 11830"Address Register Postincrement" 11831 `(%a0)+' through `(%a7)+' 11832 11833"Address Register Predecrement" 11834 `-(%a0)' through `-(%a7)' 11835 11836"Indirect Plus Offset" 11837 `NUMBER(%A0)' through `NUMBER(%A7)', or `NUMBER(%PC)'. 11838 11839 The NUMBER may also appear within the parentheses, as in 11840 `(NUMBER,%A0)'. When used with the PC, the NUMBER may be omitted 11841 (with an address register, omitting the NUMBER produces Address 11842 Register Indirect mode). 11843 11844"Index" 11845 `NUMBER(APC,REGISTER.SIZE*SCALE)' 11846 11847 The NUMBER may be omitted, or it may appear within the 11848 parentheses. The APC may be omitted. The REGISTER and the APC 11849 may appear in either order. If both APC and REGISTER are address 11850 registers, and the SIZE and SCALE are omitted, then the first 11851 register is taken as the base register, and the second as the 11852 index register. 11853 11854"Postindex" 11855 `([NUMBER,APC],REGISTER.SIZE*SCALE,ONUMBER)' 11856 11857 The ONUMBER, or the REGISTER, or both, may be omitted. Either the 11858 NUMBER or the APC may be omitted, but not both. 11859 11860"Preindex" 11861 `([NUMBER,APC,REGISTER.SIZE*SCALE],ONUMBER)' 11862 11863 The NUMBER, or the APC, or the REGISTER, or any two of them, may 11864 be omitted. The ONUMBER may be omitted. The REGISTER and the APC 11865 may appear in either order. If both APC and REGISTER are address 11866 registers, and the SIZE and SCALE are omitted, then the first 11867 register is taken as the base register, and the second as the 11868 index register. 11869 11870 11871File: as.info, Node: M68K-Float, Next: M68K-Directives, Prev: M68K-Moto-Syntax, Up: M68K-Dependent 11872 118739.21.4 Floating Point 11874--------------------- 11875 11876Packed decimal (P) format floating literals are not supported. Feel 11877free to add the code! 11878 11879 The floating point formats generated by directives are these. 11880 11881`.float' 11882 `Single' precision floating point constants. 11883 11884`.double' 11885 `Double' precision floating point constants. 11886 11887`.extend' 11888`.ldouble' 11889 `Extended' precision (`long double') floating point constants. 11890 11891 11892File: as.info, Node: M68K-Directives, Next: M68K-opcodes, Prev: M68K-Float, Up: M68K-Dependent 11893 118949.21.5 680x0 Machine Directives 11895------------------------------- 11896 11897In order to be compatible with the Sun assembler the 680x0 assembler 11898understands the following directives. 11899 11900`.data1' 11901 This directive is identical to a `.data 1' directive. 11902 11903`.data2' 11904 This directive is identical to a `.data 2' directive. 11905 11906`.even' 11907 This directive is a special case of the `.align' directive; it 11908 aligns the output to an even byte boundary. 11909 11910`.skip' 11911 This directive is identical to a `.space' directive. 11912 11913`.arch NAME' 11914 Select the target architecture and extension features. Valid 11915 values for NAME are the same as for the `-march' command line 11916 option. This directive cannot be specified after any instructions 11917 have been assembled. If it is given multiple times, or in 11918 conjunction with the `-march' option, all uses must be for the 11919 same architecture and extension set. 11920 11921`.cpu NAME' 11922 Select the target cpu. Valid valuse for NAME are the same as for 11923 the `-mcpu' command line option. This directive cannot be 11924 specified after any instructions have been assembled. If it is 11925 given multiple times, or in conjunction with the `-mopt' option, 11926 all uses must be for the same cpu. 11927 11928 11929 11930File: as.info, Node: M68K-opcodes, Prev: M68K-Directives, Up: M68K-Dependent 11931 119329.21.6 Opcodes 11933-------------- 11934 11935* Menu: 11936 11937* M68K-Branch:: Branch Improvement 11938* M68K-Chars:: Special Characters 11939 11940 11941File: as.info, Node: M68K-Branch, Next: M68K-Chars, Up: M68K-opcodes 11942 119439.21.6.1 Branch Improvement 11944........................... 11945 11946Certain pseudo opcodes are permitted for branch instructions. They 11947expand to the shortest branch instruction that reach the target. 11948Generally these mnemonics are made by substituting `j' for `b' at the 11949start of a Motorola mnemonic. 11950 11951 The following table summarizes the pseudo-operations. A `*' flags 11952cases that are more fully described after the table: 11953 11954 Displacement 11955 +------------------------------------------------------------ 11956 | 68020 68000/10, not PC-relative OK 11957 Pseudo-Op |BYTE WORD LONG ABSOLUTE LONG JUMP ** 11958 +------------------------------------------------------------ 11959 jbsr |bsrs bsrw bsrl jsr 11960 jra |bras braw bral jmp 11961 * jXX |bXXs bXXw bXXl bNXs;jmp 11962 * dbXX | N/A dbXXw dbXX;bras;bral dbXX;bras;jmp 11963 fjXX | N/A fbXXw fbXXl N/A 11964 11965 XX: condition 11966 NX: negative of condition XX 11967 `*'--see full description below 11968 `**'--this expansion mode is disallowed by `--pcrel' 11969 11970`jbsr' 11971`jra' 11972 These are the simplest jump pseudo-operations; they always map to 11973 one particular machine instruction, depending on the displacement 11974 to the branch target. This instruction will be a byte or word 11975 branch is that is sufficient. Otherwise, a long branch will be 11976 emitted if available. If no long branches are available and the 11977 `--pcrel' option is not given, an absolute long jump will be 11978 emitted instead. If no long branches are available, the `--pcrel' 11979 option is given, and a word branch cannot reach the target, an 11980 error message is generated. 11981 11982 In addition to standard branch operands, `as' allows these 11983 pseudo-operations to have all operands that are allowed for jsr 11984 and jmp, substituting these instructions if the operand given is 11985 not valid for a branch instruction. 11986 11987`jXX' 11988 Here, `jXX' stands for an entire family of pseudo-operations, 11989 where XX is a conditional branch or condition-code test. The full 11990 list of pseudo-ops in this family is: 11991 jhi jls jcc jcs jne jeq jvc 11992 jvs jpl jmi jge jlt jgt jle 11993 11994 Usually, each of these pseudo-operations expands to a single branch 11995 instruction. However, if a word branch is not sufficient, no long 11996 branches are available, and the `--pcrel' option is not given, `as' 11997 issues a longer code fragment in terms of NX, the opposite 11998 condition to XX. For example, under these conditions: 11999 jXX foo 12000 gives 12001 bNXs oof 12002 jmp foo 12003 oof: 12004 12005`dbXX' 12006 The full family of pseudo-operations covered here is 12007 dbhi dbls dbcc dbcs dbne dbeq dbvc 12008 dbvs dbpl dbmi dbge dblt dbgt dble 12009 dbf dbra dbt 12010 12011 Motorola `dbXX' instructions allow word displacements only. When 12012 a word displacement is sufficient, each of these pseudo-operations 12013 expands to the corresponding Motorola instruction. When a word 12014 displacement is not sufficient and long branches are available, 12015 when the source reads `dbXX foo', `as' emits 12016 dbXX oo1 12017 bras oo2 12018 oo1:bral foo 12019 oo2: 12020 12021 If, however, long branches are not available and the `--pcrel' 12022 option is not given, `as' emits 12023 dbXX oo1 12024 bras oo2 12025 oo1:jmp foo 12026 oo2: 12027 12028`fjXX' 12029 This family includes 12030 fjne fjeq fjge fjlt fjgt fjle fjf 12031 fjt fjgl fjgle fjnge fjngl fjngle fjngt 12032 fjnle fjnlt fjoge fjogl fjogt fjole fjolt 12033 fjor fjseq fjsf fjsne fjst fjueq fjuge 12034 fjugt fjule fjult fjun 12035 12036 Each of these pseudo-operations always expands to a single Motorola 12037 coprocessor branch instruction, word or long. All Motorola 12038 coprocessor branch instructions allow both word and long 12039 displacements. 12040 12041 12042 12043File: as.info, Node: M68K-Chars, Prev: M68K-Branch, Up: M68K-opcodes 12044 120459.21.6.2 Special Characters 12046........................... 12047 12048The immediate character is `#' for Sun compatibility. The line-comment 12049character is `|' (unless the `--bitwise-or' option is used). If a `#' 12050appears at the beginning of a line, it is treated as a comment unless 12051it looks like `# line file', in which case it is treated normally. 12052 12053 12054File: as.info, Node: M68HC11-Dependent, Next: MicroBlaze-Dependent, Prev: M68K-Dependent, Up: Machine Dependencies 12055 120569.22 M68HC11 and M68HC12 Dependent Features 12057=========================================== 12058 12059* Menu: 12060 12061* M68HC11-Opts:: M68HC11 and M68HC12 Options 12062* M68HC11-Syntax:: Syntax 12063* M68HC11-Modifiers:: Symbolic Operand Modifiers 12064* M68HC11-Directives:: Assembler Directives 12065* M68HC11-Float:: Floating Point 12066* M68HC11-opcodes:: Opcodes 12067 12068 12069File: as.info, Node: M68HC11-Opts, Next: M68HC11-Syntax, Up: M68HC11-Dependent 12070 120719.22.1 M68HC11 and M68HC12 Options 12072---------------------------------- 12073 12074The Motorola 68HC11 and 68HC12 version of `as' have a few machine 12075dependent options. 12076 12077`-m68hc11' 12078 This option switches the assembler in the M68HC11 mode. In this 12079 mode, the assembler only accepts 68HC11 operands and mnemonics. It 12080 produces code for the 68HC11. 12081 12082`-m68hc12' 12083 This option switches the assembler in the M68HC12 mode. In this 12084 mode, the assembler also accepts 68HC12 operands and mnemonics. It 12085 produces code for the 68HC12. A few 68HC11 instructions are 12086 replaced by some 68HC12 instructions as recommended by Motorola 12087 specifications. 12088 12089`-m68hcs12' 12090 This option switches the assembler in the M68HCS12 mode. This 12091 mode is similar to `-m68hc12' but specifies to assemble for the 12092 68HCS12 series. The only difference is on the assembling of the 12093 `movb' and `movw' instruction when a PC-relative operand is used. 12094 12095`-mshort' 12096 This option controls the ABI and indicates to use a 16-bit integer 12097 ABI. It has no effect on the assembled instructions. This is the 12098 default. 12099 12100`-mlong' 12101 This option controls the ABI and indicates to use a 32-bit integer 12102 ABI. 12103 12104`-mshort-double' 12105 This option controls the ABI and indicates to use a 32-bit float 12106 ABI. This is the default. 12107 12108`-mlong-double' 12109 This option controls the ABI and indicates to use a 64-bit float 12110 ABI. 12111 12112`--strict-direct-mode' 12113 You can use the `--strict-direct-mode' option to disable the 12114 automatic translation of direct page mode addressing into extended 12115 mode when the instruction does not support direct mode. For 12116 example, the `clr' instruction does not support direct page mode 12117 addressing. When it is used with the direct page mode, `as' will 12118 ignore it and generate an absolute addressing. This option 12119 prevents `as' from doing this, and the wrong usage of the direct 12120 page mode will raise an error. 12121 12122`--short-branches' 12123 The `--short-branches' option turns off the translation of 12124 relative branches into absolute branches when the branch offset is 12125 out of range. By default `as' transforms the relative branch 12126 (`bsr', `bgt', `bge', `beq', `bne', `ble', `blt', `bhi', `bcc', 12127 `bls', `bcs', `bmi', `bvs', `bvs', `bra') into an absolute branch 12128 when the offset is out of the -128 .. 127 range. In that case, 12129 the `bsr' instruction is translated into a `jsr', the `bra' 12130 instruction is translated into a `jmp' and the conditional 12131 branches instructions are inverted and followed by a `jmp'. This 12132 option disables these translations and `as' will generate an error 12133 if a relative branch is out of range. This option does not affect 12134 the optimization associated to the `jbra', `jbsr' and `jbXX' 12135 pseudo opcodes. 12136 12137`--force-long-branches' 12138 The `--force-long-branches' option forces the translation of 12139 relative branches into absolute branches. This option does not 12140 affect the optimization associated to the `jbra', `jbsr' and 12141 `jbXX' pseudo opcodes. 12142 12143`--print-insn-syntax' 12144 You can use the `--print-insn-syntax' option to obtain the syntax 12145 description of the instruction when an error is detected. 12146 12147`--print-opcodes' 12148 The `--print-opcodes' option prints the list of all the 12149 instructions with their syntax. The first item of each line 12150 represents the instruction name and the rest of the line indicates 12151 the possible operands for that instruction. The list is printed in 12152 alphabetical order. Once the list is printed `as' exits. 12153 12154`--generate-example' 12155 The `--generate-example' option is similar to `--print-opcodes' 12156 but it generates an example for each instruction instead. 12157 12158 12159File: as.info, Node: M68HC11-Syntax, Next: M68HC11-Modifiers, Prev: M68HC11-Opts, Up: M68HC11-Dependent 12160 121619.22.2 Syntax 12162------------- 12163 12164In the M68HC11 syntax, the instruction name comes first and it may be 12165followed by one or several operands (up to three). Operands are 12166separated by comma (`,'). In the normal mode, `as' will complain if too 12167many operands are specified for a given instruction. In the MRI mode 12168(turned on with `-M' option), it will treat them as comments. Example: 12169 12170 inx 12171 lda #23 12172 bset 2,x #4 12173 brclr *bot #8 foo 12174 12175 The following addressing modes are understood for 68HC11 and 68HC12: 12176"Immediate" 12177 `#NUMBER' 12178 12179"Address Register" 12180 `NUMBER,X', `NUMBER,Y' 12181 12182 The NUMBER may be omitted in which case 0 is assumed. 12183 12184"Direct Addressing mode" 12185 `*SYMBOL', or `*DIGITS' 12186 12187"Absolute" 12188 `SYMBOL', or `DIGITS' 12189 12190 The M68HC12 has other more complex addressing modes. All of them are 12191supported and they are represented below: 12192 12193"Constant Offset Indexed Addressing Mode" 12194 `NUMBER,REG' 12195 12196 The NUMBER may be omitted in which case 0 is assumed. The 12197 register can be either `X', `Y', `SP' or `PC'. The assembler will 12198 use the smaller post-byte definition according to the constant 12199 value (5-bit constant offset, 9-bit constant offset or 16-bit 12200 constant offset). If the constant is not known by the assembler 12201 it will use the 16-bit constant offset post-byte and the value 12202 will be resolved at link time. 12203 12204"Offset Indexed Indirect" 12205 `[NUMBER,REG]' 12206 12207 The register can be either `X', `Y', `SP' or `PC'. 12208 12209"Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement" 12210 `NUMBER,-REG' `NUMBER,+REG' `NUMBER,REG-' `NUMBER,REG+' 12211 12212 The number must be in the range `-8'..`+8' and must not be 0. The 12213 register can be either `X', `Y', `SP' or `PC'. 12214 12215"Accumulator Offset" 12216 `ACC,REG' 12217 12218 The accumulator register can be either `A', `B' or `D'. The 12219 register can be either `X', `Y', `SP' or `PC'. 12220 12221"Accumulator D offset indexed-indirect" 12222 `[D,REG]' 12223 12224 The register can be either `X', `Y', `SP' or `PC'. 12225 12226 12227 For example: 12228 12229 ldab 1024,sp 12230 ldd [10,x] 12231 orab 3,+x 12232 stab -2,y- 12233 ldx a,pc 12234 sty [d,sp] 12235 12236 12237File: as.info, Node: M68HC11-Modifiers, Next: M68HC11-Directives, Prev: M68HC11-Syntax, Up: M68HC11-Dependent 12238 122399.22.3 Symbolic Operand Modifiers 12240--------------------------------- 12241 12242The assembler supports several modifiers when using symbol addresses in 1224368HC11 and 68HC12 instruction operands. The general syntax is the 12244following: 12245 12246 %modifier(symbol) 12247 12248`%addr' 12249 This modifier indicates to the assembler and linker to use the 12250 16-bit physical address corresponding to the symbol. This is 12251 intended to be used on memory window systems to map a symbol in 12252 the memory bank window. If the symbol is in a memory expansion 12253 part, the physical address corresponds to the symbol address 12254 within the memory bank window. If the symbol is not in a memory 12255 expansion part, this is the symbol address (using or not using the 12256 %addr modifier has no effect in that case). 12257 12258`%page' 12259 This modifier indicates to use the memory page number corresponding 12260 to the symbol. If the symbol is in a memory expansion part, its 12261 page number is computed by the linker as a number used to map the 12262 page containing the symbol in the memory bank window. If the 12263 symbol is not in a memory expansion part, the page number is 0. 12264 12265`%hi' 12266 This modifier indicates to use the 8-bit high part of the physical 12267 address of the symbol. 12268 12269`%lo' 12270 This modifier indicates to use the 8-bit low part of the physical 12271 address of the symbol. 12272 12273 12274 For example a 68HC12 call to a function `foo_example' stored in 12275memory expansion part could be written as follows: 12276 12277 call %addr(foo_example),%page(foo_example) 12278 12279 and this is equivalent to 12280 12281 call foo_example 12282 12283 And for 68HC11 it could be written as follows: 12284 12285 ldab #%page(foo_example) 12286 stab _page_switch 12287 jsr %addr(foo_example) 12288 12289 12290File: as.info, Node: M68HC11-Directives, Next: M68HC11-Float, Prev: M68HC11-Modifiers, Up: M68HC11-Dependent 12291 122929.22.4 Assembler Directives 12293--------------------------- 12294 12295The 68HC11 and 68HC12 version of `as' have the following specific 12296assembler directives: 12297 12298`.relax' 12299 The relax directive is used by the `GNU Compiler' to emit a 12300 specific relocation to mark a group of instructions for linker 12301 relaxation. The sequence of instructions within the group must be 12302 known to the linker so that relaxation can be performed. 12303 12304`.mode [mshort|mlong|mshort-double|mlong-double]' 12305 This directive specifies the ABI. It overrides the `-mshort', 12306 `-mlong', `-mshort-double' and `-mlong-double' options. 12307 12308`.far SYMBOL' 12309 This directive marks the symbol as a `far' symbol meaning that it 12310 uses a `call/rtc' calling convention as opposed to `jsr/rts'. 12311 During a final link, the linker will identify references to the 12312 `far' symbol and will verify the proper calling convention. 12313 12314`.interrupt SYMBOL' 12315 This directive marks the symbol as an interrupt entry point. This 12316 information is then used by the debugger to correctly unwind the 12317 frame across interrupts. 12318 12319`.xrefb SYMBOL' 12320 This directive is defined for compatibility with the 12321 `Specification for Motorola 8 and 16-Bit Assembly Language Input 12322 Standard' and is ignored. 12323 12324 12325 12326File: as.info, Node: M68HC11-Float, Next: M68HC11-opcodes, Prev: M68HC11-Directives, Up: M68HC11-Dependent 12327 123289.22.5 Floating Point 12329--------------------- 12330 12331Packed decimal (P) format floating literals are not supported. Feel 12332free to add the code! 12333 12334 The floating point formats generated by directives are these. 12335 12336`.float' 12337 `Single' precision floating point constants. 12338 12339`.double' 12340 `Double' precision floating point constants. 12341 12342`.extend' 12343`.ldouble' 12344 `Extended' precision (`long double') floating point constants. 12345 12346 12347File: as.info, Node: M68HC11-opcodes, Prev: M68HC11-Float, Up: M68HC11-Dependent 12348 123499.22.6 Opcodes 12350-------------- 12351 12352* Menu: 12353 12354* M68HC11-Branch:: Branch Improvement 12355 12356 12357File: as.info, Node: M68HC11-Branch, Up: M68HC11-opcodes 12358 123599.22.6.1 Branch Improvement 12360........................... 12361 12362Certain pseudo opcodes are permitted for branch instructions. They 12363expand to the shortest branch instruction that reach the target. 12364Generally these mnemonics are made by prepending `j' to the start of 12365Motorola mnemonic. These pseudo opcodes are not affected by the 12366`--short-branches' or `--force-long-branches' options. 12367 12368 The following table summarizes the pseudo-operations. 12369 12370 Displacement Width 12371 +-------------------------------------------------------------+ 12372 | Options | 12373 | --short-branches --force-long-branches | 12374 +--------------------------+----------------------------------+ 12375 Op |BYTE WORD | BYTE WORD | 12376 +--------------------------+----------------------------------+ 12377 bsr | bsr <pc-rel> <error> | jsr <abs> | 12378 bra | bra <pc-rel> <error> | jmp <abs> | 12379 jbsr | bsr <pc-rel> jsr <abs> | bsr <pc-rel> jsr <abs> | 12380 jbra | bra <pc-rel> jmp <abs> | bra <pc-rel> jmp <abs> | 12381 bXX | bXX <pc-rel> <error> | bNX +3; jmp <abs> | 12382 jbXX | bXX <pc-rel> bNX +3; | bXX <pc-rel> bNX +3; jmp <abs> | 12383 | jmp <abs> | | 12384 +--------------------------+----------------------------------+ 12385 XX: condition 12386 NX: negative of condition XX 12387 12388`jbsr' 12389`jbra' 12390 These are the simplest jump pseudo-operations; they always map to 12391 one particular machine instruction, depending on the displacement 12392 to the branch target. 12393 12394`jbXX' 12395 Here, `jbXX' stands for an entire family of pseudo-operations, 12396 where XX is a conditional branch or condition-code test. The full 12397 list of pseudo-ops in this family is: 12398 jbcc jbeq jbge jbgt jbhi jbvs jbpl jblo 12399 jbcs jbne jblt jble jbls jbvc jbmi 12400 12401 For the cases of non-PC relative displacements and long 12402 displacements, `as' issues a longer code fragment in terms of NX, 12403 the opposite condition to XX. For example, for the non-PC 12404 relative case: 12405 jbXX foo 12406 gives 12407 bNXs oof 12408 jmp foo 12409 oof: 12410 12411 12412 12413File: as.info, Node: MicroBlaze-Dependent, Next: MIPS-Dependent, Prev: M68HC11-Dependent, Up: Machine Dependencies 12414 124159.23 MicroBlaze Dependent Features 12416================================== 12417 12418 The Xilinx MicroBlaze processor family includes several variants, 12419all using the same core instruction set. This chapter covers features 12420of the GNU assembler that are specific to the MicroBlaze architecture. 12421For details about the MicroBlaze instruction set, please see the 12422`MicroBlaze Processor Reference Guide (UG081)' available at 12423www.xilinx.com. 12424 12425* Menu: 12426 12427* MicroBlaze Directives:: Directives for MicroBlaze Processors. 12428 12429 12430File: as.info, Node: MicroBlaze Directives, Up: MicroBlaze-Dependent 12431 124329.23.1 Directives 12433----------------- 12434 12435A number of assembler directives are available for MicroBlaze. 12436 12437`.data8 EXPRESSION,...' 12438 This directive is an alias for `.byte'. Each expression is 12439 assembled into an eight-bit value. 12440 12441`.data16 EXPRESSION,...' 12442 This directive is an alias for `.hword'. Each expression is 12443 assembled into an 16-bit value. 12444 12445`.data32 EXPRESSION,...' 12446 This directive is an alias for `.word'. Each expression is 12447 assembled into an 32-bit value. 12448 12449`.ent NAME[,LABEL]' 12450 This directive is an alias for `.func' denoting the start of 12451 function NAME at (optional) LABEL. 12452 12453`.end NAME[,LABEL]' 12454 This directive is an alias for `.endfunc' denoting the end of 12455 function NAME. 12456 12457`.gpword LABEL,...' 12458 This directive is an alias for `.rva'. The resolved address of 12459 LABEL is stored in the data section. 12460 12461`.weakext LABEL' 12462 Declare that LABEL is a weak external symbol. 12463 12464`.rodata' 12465 Switch to .rodata section. Equivalent to `.section .rodata' 12466 12467`.sdata2' 12468 Switch to .sdata2 section. Equivalent to `.section .sdata2' 12469 12470`.sdata' 12471 Switch to .sdata section. Equivalent to `.section .sdata' 12472 12473`.bss' 12474 Switch to .bss section. Equivalent to `.section .bss' 12475 12476`.sbss' 12477 Switch to .sbss section. Equivalent to `.section .sbss' 12478 12479 12480File: as.info, Node: MIPS-Dependent, Next: MMIX-Dependent, Prev: MicroBlaze-Dependent, Up: Machine Dependencies 12481 124829.24 MIPS Dependent Features 12483============================ 12484 12485 GNU `as' for MIPS architectures supports several different MIPS 12486processors, and MIPS ISA levels I through V, MIPS32, and MIPS64. For 12487information about the MIPS instruction set, see `MIPS RISC 12488Architecture', by Kane and Heindrich (Prentice-Hall). For an overview 12489of MIPS assembly conventions, see "Appendix D: Assembly Language 12490Programming" in the same work. 12491 12492* Menu: 12493 12494* MIPS Opts:: Assembler options 12495* MIPS Object:: ECOFF object code 12496* MIPS Stabs:: Directives for debugging information 12497* MIPS ISA:: Directives to override the ISA level 12498* MIPS symbol sizes:: Directives to override the size of symbols 12499* MIPS autoextend:: Directives for extending MIPS 16 bit instructions 12500* MIPS insn:: Directive to mark data as an instruction 12501* MIPS option stack:: Directives to save and restore options 12502* MIPS ASE instruction generation overrides:: Directives to control 12503 generation of MIPS ASE instructions 12504* MIPS floating-point:: Directives to override floating-point options 12505 12506 12507File: as.info, Node: MIPS Opts, Next: MIPS Object, Up: MIPS-Dependent 12508 125099.24.1 Assembler options 12510------------------------ 12511 12512The MIPS configurations of GNU `as' support these special options: 12513 12514`-G NUM' 12515 This option sets the largest size of an object that can be 12516 referenced implicitly with the `gp' register. It is only accepted 12517 for targets that use ECOFF format. The default value is 8. 12518 12519`-EB' 12520`-EL' 12521 Any MIPS configuration of `as' can select big-endian or 12522 little-endian output at run time (unlike the other GNU development 12523 tools, which must be configured for one or the other). Use `-EB' 12524 to select big-endian output, and `-EL' for little-endian. 12525 12526`-KPIC' 12527 Generate SVR4-style PIC. This option tells the assembler to 12528 generate SVR4-style position-independent macro expansions. It 12529 also tells the assembler to mark the output file as PIC. 12530 12531`-mvxworks-pic' 12532 Generate VxWorks PIC. This option tells the assembler to generate 12533 VxWorks-style position-independent macro expansions. 12534 12535`-mips1' 12536`-mips2' 12537`-mips3' 12538`-mips4' 12539`-mips5xo' 12540`-mips32' 12541`-mips32r2' 12542`-mips64' 12543`-mips64r2' 12544 Generate code for a particular MIPS Instruction Set Architecture 12545 level. `-mips1' corresponds to the R2000 and R3000 processors, 12546 `-mips2' to the R6000 processor, `-mips3' to the R4000 processor, 12547 and `-mips4' to the R8000 and R10000 processors. `-mips5', 12548 `-mips32', `-mips32r2', `-mips64', and `-mips64r2' correspond to 12549 generic MIPS V, MIPS32, MIPS32 RELEASE 2, MIPS64, and MIPS64 12550 RELEASE 2 ISA processors, respectively. You can also switch 12551 instruction sets during the assembly; see *Note Directives to 12552 override the ISA level: MIPS ISA. 12553 12554`-mgp32' 12555`-mfp32' 12556 Some macros have different expansions for 32-bit and 64-bit 12557 registers. The register sizes are normally inferred from the ISA 12558 and ABI, but these flags force a certain group of registers to be 12559 treated as 32 bits wide at all times. `-mgp32' controls the size 12560 of general-purpose registers and `-mfp32' controls the size of 12561 floating-point registers. 12562 12563 The `.set gp=32' and `.set fp=32' directives allow the size of 12564 registers to be changed for parts of an object. The default value 12565 is restored by `.set gp=default' and `.set fp=default'. 12566 12567 On some MIPS variants there is a 32-bit mode flag; when this flag 12568 is set, 64-bit instructions generate a trap. Also, some 32-bit 12569 OSes only save the 32-bit registers on a context switch, so it is 12570 essential never to use the 64-bit registers. 12571 12572`-mgp64' 12573`-mfp64' 12574 Assume that 64-bit registers are available. This is provided in 12575 the interests of symmetry with `-mgp32' and `-mfp32'. 12576 12577 The `.set gp=64' and `.set fp=64' directives allow the size of 12578 registers to be changed for parts of an object. The default value 12579 is restored by `.set gp=default' and `.set fp=default'. 12580 12581`-mips16' 12582`-no-mips16' 12583 Generate code for the MIPS 16 processor. This is equivalent to 12584 putting `.set mips16' at the start of the assembly file. 12585 `-no-mips16' turns off this option. 12586 12587`-msmartmips' 12588`-mno-smartmips' 12589 Enables the SmartMIPS extensions to the MIPS32 instruction set, 12590 which provides a number of new instructions which target smartcard 12591 and cryptographic applications. This is equivalent to putting 12592 `.set smartmips' at the start of the assembly file. 12593 `-mno-smartmips' turns off this option. 12594 12595`-mips3d' 12596`-no-mips3d' 12597 Generate code for the MIPS-3D Application Specific Extension. 12598 This tells the assembler to accept MIPS-3D instructions. 12599 `-no-mips3d' turns off this option. 12600 12601`-mdmx' 12602`-no-mdmx' 12603 Generate code for the MDMX Application Specific Extension. This 12604 tells the assembler to accept MDMX instructions. `-no-mdmx' turns 12605 off this option. 12606 12607`-mdsp' 12608`-mno-dsp' 12609 Generate code for the DSP Release 1 Application Specific Extension. 12610 This tells the assembler to accept DSP Release 1 instructions. 12611 `-mno-dsp' turns off this option. 12612 12613`-mdspr2' 12614`-mno-dspr2' 12615 Generate code for the DSP Release 2 Application Specific Extension. 12616 This option implies -mdsp. This tells the assembler to accept DSP 12617 Release 2 instructions. `-mno-dspr2' turns off this option. 12618 12619`-mmt' 12620`-mno-mt' 12621 Generate code for the MT Application Specific Extension. This 12622 tells the assembler to accept MT instructions. `-mno-mt' turns 12623 off this option. 12624 12625`-mfix7000' 12626`-mno-fix7000' 12627 Cause nops to be inserted if the read of the destination register 12628 of an mfhi or mflo instruction occurs in the following two 12629 instructions. 12630 12631`-mfix-loongson2f-jump' 12632`-mno-fix-loongson2f-jump' 12633 Eliminate instruction fetch from outside 256M region to work 12634 around the Loongson2F `jump' instructions. Without it, under 12635 extreme cases, the kernel may crash. The issue has been solved in 12636 latest processor batches, but this fix has no side effect to them. 12637 12638`-mfix-loongson2f-nop' 12639`-mno-fix-loongson2f-nop' 12640 Replace nops by `or at,at,zero' to work around the Loongson2F 12641 `nop' errata. Without it, under extreme cases, cpu might 12642 deadlock. The issue has been solved in latest loongson2f batches, 12643 but this fix has no side effect to them. 12644 12645`-mfix-vr4120' 12646`-mno-fix-vr4120' 12647 Insert nops to work around certain VR4120 errata. This option is 12648 intended to be used on GCC-generated code: it is not designed to 12649 catch all problems in hand-written assembler code. 12650 12651`-mfix-vr4130' 12652`-mno-fix-vr4130' 12653 Insert nops to work around the VR4130 `mflo'/`mfhi' errata. 12654 12655`-mfix-24k' 12656`-no-mfix-24k' 12657 Insert nops to work around the 24K `eret'/`deret' errata. 12658 12659`-mfix-cn63xxp1' 12660`-mno-fix-cn63xxp1' 12661 Replace `pref' hints 0 - 4 and 6 - 24 with hint 28 to work around 12662 certain CN63XXP1 errata. 12663 12664`-m4010' 12665`-no-m4010' 12666 Generate code for the LSI R4010 chip. This tells the assembler to 12667 accept the R4010 specific instructions (`addciu', `ffc', etc.), 12668 and to not schedule `nop' instructions around accesses to the `HI' 12669 and `LO' registers. `-no-m4010' turns off this option. 12670 12671`-m4650' 12672`-no-m4650' 12673 Generate code for the MIPS R4650 chip. This tells the assembler 12674 to accept the `mad' and `madu' instruction, and to not schedule 12675 `nop' instructions around accesses to the `HI' and `LO' registers. 12676 `-no-m4650' turns off this option. 12677 12678`-m3900' 12679`-no-m3900' 12680`-m4100' 12681`-no-m4100' 12682 For each option `-mNNNN', generate code for the MIPS RNNNN chip. 12683 This tells the assembler to accept instructions specific to that 12684 chip, and to schedule for that chip's hazards. 12685 12686`-march=CPU' 12687 Generate code for a particular MIPS cpu. It is exactly equivalent 12688 to `-mCPU', except that there are more value of CPU understood. 12689 Valid CPU value are: 12690 12691 2000, 3000, 3900, 4000, 4010, 4100, 4111, vr4120, vr4130, 12692 vr4181, 4300, 4400, 4600, 4650, 5000, rm5200, rm5230, rm5231, 12693 rm5261, rm5721, vr5400, vr5500, 6000, rm7000, 8000, rm9000, 12694 10000, 12000, 14000, 16000, 4kc, 4km, 4kp, 4ksc, 4kec, 4kem, 12695 4kep, 4ksd, m4k, m4kp, 24kc, 24kf2_1, 24kf, 24kf1_1, 24kec, 12696 24kef2_1, 24kef, 24kef1_1, 34kc, 34kf2_1, 34kf, 34kf1_1, 74kc, 12697 74kf2_1, 74kf, 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf, 12698 1004kf1_1, 5kc, 5kf, 20kc, 25kf, sb1, sb1a, loongson2e, 12699 loongson2f, octeon, xlr 12700 12701 For compatibility reasons, `Nx' and `Bfx' are accepted as synonyms 12702 for `Nf1_1'. These values are deprecated. 12703 12704`-mtune=CPU' 12705 Schedule and tune for a particular MIPS cpu. Valid CPU values are 12706 identical to `-march=CPU'. 12707 12708`-mabi=ABI' 12709 Record which ABI the source code uses. The recognized arguments 12710 are: `32', `n32', `o64', `64' and `eabi'. 12711 12712`-msym32' 12713`-mno-sym32' 12714 Equivalent to adding `.set sym32' or `.set nosym32' to the 12715 beginning of the assembler input. *Note MIPS symbol sizes::. 12716 12717`-nocpp' 12718 This option is ignored. It is accepted for command-line 12719 compatibility with other assemblers, which use it to turn off C 12720 style preprocessing. With GNU `as', there is no need for 12721 `-nocpp', because the GNU assembler itself never runs the C 12722 preprocessor. 12723 12724`-msoft-float' 12725`-mhard-float' 12726 Disable or enable floating-point instructions. Note that by 12727 default floating-point instructions are always allowed even with 12728 CPU targets that don't have support for these instructions. 12729 12730`-msingle-float' 12731`-mdouble-float' 12732 Disable or enable double-precision floating-point operations. Note 12733 that by default double-precision floating-point operations are 12734 always allowed even with CPU targets that don't have support for 12735 these operations. 12736 12737`--construct-floats' 12738`--no-construct-floats' 12739 The `--no-construct-floats' option disables the construction of 12740 double width floating point constants by loading the two halves of 12741 the value into the two single width floating point registers that 12742 make up the double width register. This feature is useful if the 12743 processor support the FR bit in its status register, and this bit 12744 is known (by the programmer) to be set. This bit prevents the 12745 aliasing of the double width register by the single width 12746 registers. 12747 12748 By default `--construct-floats' is selected, allowing construction 12749 of these floating point constants. 12750 12751`--trap' 12752`--no-break' 12753 `as' automatically macro expands certain division and 12754 multiplication instructions to check for overflow and division by 12755 zero. This option causes `as' to generate code to take a trap 12756 exception rather than a break exception when an error is detected. 12757 The trap instructions are only supported at Instruction Set 12758 Architecture level 2 and higher. 12759 12760`--break' 12761`--no-trap' 12762 Generate code to take a break exception rather than a trap 12763 exception when an error is detected. This is the default. 12764 12765`-mpdr' 12766`-mno-pdr' 12767 Control generation of `.pdr' sections. Off by default on IRIX, on 12768 elsewhere. 12769 12770`-mshared' 12771`-mno-shared' 12772 When generating code using the Unix calling conventions (selected 12773 by `-KPIC' or `-mcall_shared'), gas will normally generate code 12774 which can go into a shared library. The `-mno-shared' option 12775 tells gas to generate code which uses the calling convention, but 12776 can not go into a shared library. The resulting code is slightly 12777 more efficient. This option only affects the handling of the 12778 `.cpload' and `.cpsetup' pseudo-ops. 12779 12780 12781File: as.info, Node: MIPS Object, Next: MIPS Stabs, Prev: MIPS Opts, Up: MIPS-Dependent 12782 127839.24.2 MIPS ECOFF object code 12784----------------------------- 12785 12786Assembling for a MIPS ECOFF target supports some additional sections 12787besides the usual `.text', `.data' and `.bss'. The additional sections 12788are `.rdata', used for read-only data, `.sdata', used for small data, 12789and `.sbss', used for small common objects. 12790 12791 When assembling for ECOFF, the assembler uses the `$gp' (`$28') 12792register to form the address of a "small object". Any object in the 12793`.sdata' or `.sbss' sections is considered "small" in this sense. For 12794external objects, or for objects in the `.bss' section, you can use the 12795`gcc' `-G' option to control the size of objects addressed via `$gp'; 12796the default value is 8, meaning that a reference to any object eight 12797bytes or smaller uses `$gp'. Passing `-G 0' to `as' prevents it from 12798using the `$gp' register on the basis of object size (but the assembler 12799uses `$gp' for objects in `.sdata' or `sbss' in any case). The size of 12800an object in the `.bss' section is set by the `.comm' or `.lcomm' 12801directive that defines it. The size of an external object may be set 12802with the `.extern' directive. For example, `.extern sym,4' declares 12803that the object at `sym' is 4 bytes in length, whie leaving `sym' 12804otherwise undefined. 12805 12806 Using small ECOFF objects requires linker support, and assumes that 12807the `$gp' register is correctly initialized (normally done 12808automatically by the startup code). MIPS ECOFF assembly code must not 12809modify the `$gp' register. 12810 12811 12812File: as.info, Node: MIPS Stabs, Next: MIPS ISA, Prev: MIPS Object, Up: MIPS-Dependent 12813 128149.24.3 Directives for debugging information 12815------------------------------------------- 12816 12817MIPS ECOFF `as' supports several directives used for generating 12818debugging information which are not support by traditional MIPS 12819assemblers. These are `.def', `.endef', `.dim', `.file', `.scl', 12820`.size', `.tag', `.type', `.val', `.stabd', `.stabn', and `.stabs'. 12821The debugging information generated by the three `.stab' directives can 12822only be read by GDB, not by traditional MIPS debuggers (this 12823enhancement is required to fully support C++ debugging). These 12824directives are primarily used by compilers, not assembly language 12825programmers! 12826 12827 12828File: as.info, Node: MIPS symbol sizes, Next: MIPS autoextend, Prev: MIPS ISA, Up: MIPS-Dependent 12829 128309.24.4 Directives to override the size of symbols 12831------------------------------------------------- 12832 12833The n64 ABI allows symbols to have any 64-bit value. Although this 12834provides a great deal of flexibility, it means that some macros have 12835much longer expansions than their 32-bit counterparts. For example, 12836the non-PIC expansion of `dla $4,sym' is usually: 12837 12838 lui $4,%highest(sym) 12839 lui $1,%hi(sym) 12840 daddiu $4,$4,%higher(sym) 12841 daddiu $1,$1,%lo(sym) 12842 dsll32 $4,$4,0 12843 daddu $4,$4,$1 12844 12845 whereas the 32-bit expansion is simply: 12846 12847 lui $4,%hi(sym) 12848 daddiu $4,$4,%lo(sym) 12849 12850 n64 code is sometimes constructed in such a way that all symbolic 12851constants are known to have 32-bit values, and in such cases, it's 12852preferable to use the 32-bit expansion instead of the 64-bit expansion. 12853 12854 You can use the `.set sym32' directive to tell the assembler that, 12855from this point on, all expressions of the form `SYMBOL' or `SYMBOL + 12856OFFSET' have 32-bit values. For example: 12857 12858 .set sym32 12859 dla $4,sym 12860 lw $4,sym+16 12861 sw $4,sym+0x8000($4) 12862 12863 will cause the assembler to treat `sym', `sym+16' and `sym+0x8000' 12864as 32-bit values. The handling of non-symbolic addresses is not 12865affected. 12866 12867 The directive `.set nosym32' ends a `.set sym32' block and reverts 12868to the normal behavior. It is also possible to change the symbol size 12869using the command-line options `-msym32' and `-mno-sym32'. 12870 12871 These options and directives are always accepted, but at present, 12872they have no effect for anything other than n64. 12873 12874 12875File: as.info, Node: MIPS ISA, Next: MIPS symbol sizes, Prev: MIPS Stabs, Up: MIPS-Dependent 12876 128779.24.5 Directives to override the ISA level 12878------------------------------------------- 12879 12880GNU `as' supports an additional directive to change the MIPS 12881Instruction Set Architecture level on the fly: `.set mipsN'. N should 12882be a number from 0 to 5, or 32, 32r2, 64 or 64r2. The values other 12883than 0 make the assembler accept instructions for the corresponding ISA 12884level, from that point on in the assembly. `.set mipsN' affects not 12885only which instructions are permitted, but also how certain macros are 12886expanded. `.set mips0' restores the ISA level to its original level: 12887either the level you selected with command line options, or the default 12888for your configuration. You can use this feature to permit specific 12889MIPS3 instructions while assembling in 32 bit mode. Use this directive 12890with care! 12891 12892 The `.set arch=CPU' directive provides even finer control. It 12893changes the effective CPU target and allows the assembler to use 12894instructions specific to a particular CPU. All CPUs supported by the 12895`-march' command line option are also selectable by this directive. 12896The original value is restored by `.set arch=default'. 12897 12898 The directive `.set mips16' puts the assembler into MIPS 16 mode, in 12899which it will assemble instructions for the MIPS 16 processor. Use 12900`.set nomips16' to return to normal 32 bit mode. 12901 12902 Traditional MIPS assemblers do not support this directive. 12903 12904 12905File: as.info, Node: MIPS autoextend, Next: MIPS insn, Prev: MIPS symbol sizes, Up: MIPS-Dependent 12906 129079.24.6 Directives for extending MIPS 16 bit instructions 12908-------------------------------------------------------- 12909 12910By default, MIPS 16 instructions are automatically extended to 32 bits 12911when necessary. The directive `.set noautoextend' will turn this off. 12912When `.set noautoextend' is in effect, any 32 bit instruction must be 12913explicitly extended with the `.e' modifier (e.g., `li.e $4,1000'). The 12914directive `.set autoextend' may be used to once again automatically 12915extend instructions when necessary. 12916 12917 This directive is only meaningful when in MIPS 16 mode. Traditional 12918MIPS assemblers do not support this directive. 12919 12920 12921File: as.info, Node: MIPS insn, Next: MIPS option stack, Prev: MIPS autoextend, Up: MIPS-Dependent 12922 129239.24.7 Directive to mark data as an instruction 12924----------------------------------------------- 12925 12926The `.insn' directive tells `as' that the following data is actually 12927instructions. This makes a difference in MIPS 16 mode: when loading 12928the address of a label which precedes instructions, `as' automatically 12929adds 1 to the value, so that jumping to the loaded address will do the 12930right thing. 12931 12932 The `.global' and `.globl' directives supported by `as' will by 12933default mark the symbol as pointing to a region of data not code. This 12934means that, for example, any instructions following such a symbol will 12935not be disassembled by `objdump' as it will regard them as data. To 12936change this behaviour an optional section name can be placed after the 12937symbol name in the `.global' directive. If this section exists and is 12938known to be a code section, then the symbol will be marked as poiting at 12939code not data. Ie the syntax for the directive is: 12940 12941 `.global SYMBOL[ SECTION][, SYMBOL[ SECTION]] ...', 12942 12943 Here is a short example: 12944 12945 .global foo .text, bar, baz .data 12946 foo: 12947 nop 12948 bar: 12949 .word 0x0 12950 baz: 12951 .word 0x1 12952 12953 12954File: as.info, Node: MIPS option stack, Next: MIPS ASE instruction generation overrides, Prev: MIPS insn, Up: MIPS-Dependent 12955 129569.24.8 Directives to save and restore options 12957--------------------------------------------- 12958 12959The directives `.set push' and `.set pop' may be used to save and 12960restore the current settings for all the options which are controlled 12961by `.set'. The `.set push' directive saves the current settings on a 12962stack. The `.set pop' directive pops the stack and restores the 12963settings. 12964 12965 These directives can be useful inside an macro which must change an 12966option such as the ISA level or instruction reordering but does not want 12967to change the state of the code which invoked the macro. 12968 12969 Traditional MIPS assemblers do not support these directives. 12970 12971 12972File: as.info, Node: MIPS ASE instruction generation overrides, Next: MIPS floating-point, Prev: MIPS option stack, Up: MIPS-Dependent 12973 129749.24.9 Directives to control generation of MIPS ASE instructions 12975---------------------------------------------------------------- 12976 12977The directive `.set mips3d' makes the assembler accept instructions 12978from the MIPS-3D Application Specific Extension from that point on in 12979the assembly. The `.set nomips3d' directive prevents MIPS-3D 12980instructions from being accepted. 12981 12982 The directive `.set smartmips' makes the assembler accept 12983instructions from the SmartMIPS Application Specific Extension to the 12984MIPS32 ISA from that point on in the assembly. The `.set nosmartmips' 12985directive prevents SmartMIPS instructions from being accepted. 12986 12987 The directive `.set mdmx' makes the assembler accept instructions 12988from the MDMX Application Specific Extension from that point on in the 12989assembly. The `.set nomdmx' directive prevents MDMX instructions from 12990being accepted. 12991 12992 The directive `.set dsp' makes the assembler accept instructions 12993from the DSP Release 1 Application Specific Extension from that point 12994on in the assembly. The `.set nodsp' directive prevents DSP Release 1 12995instructions from being accepted. 12996 12997 The directive `.set dspr2' makes the assembler accept instructions 12998from the DSP Release 2 Application Specific Extension from that point 12999on in the assembly. This dirctive implies `.set dsp'. The `.set 13000nodspr2' directive prevents DSP Release 2 instructions from being 13001accepted. 13002 13003 The directive `.set mt' makes the assembler accept instructions from 13004the MT Application Specific Extension from that point on in the 13005assembly. The `.set nomt' directive prevents MT instructions from 13006being accepted. 13007 13008 Traditional MIPS assemblers do not support these directives. 13009 13010 13011File: as.info, Node: MIPS floating-point, Prev: MIPS ASE instruction generation overrides, Up: MIPS-Dependent 13012 130139.24.10 Directives to override floating-point options 13014----------------------------------------------------- 13015 13016The directives `.set softfloat' and `.set hardfloat' provide finer 13017control of disabling and enabling float-point instructions. These 13018directives always override the default (that hard-float instructions 13019are accepted) or the command-line options (`-msoft-float' and 13020`-mhard-float'). 13021 13022 The directives `.set singlefloat' and `.set doublefloat' provide 13023finer control of disabling and enabling double-precision float-point 13024operations. These directives always override the default (that 13025double-precision operations are accepted) or the command-line options 13026(`-msingle-float' and `-mdouble-float'). 13027 13028 Traditional MIPS assemblers do not support these directives. 13029 13030 13031File: as.info, Node: MMIX-Dependent, Next: MSP430-Dependent, Prev: MIPS-Dependent, Up: Machine Dependencies 13032 130339.25 MMIX Dependent Features 13034============================ 13035 13036* Menu: 13037 13038* MMIX-Opts:: Command-line Options 13039* MMIX-Expand:: Instruction expansion 13040* MMIX-Syntax:: Syntax 13041* MMIX-mmixal:: Differences to `mmixal' syntax and semantics 13042 13043 13044File: as.info, Node: MMIX-Opts, Next: MMIX-Expand, Up: MMIX-Dependent 13045 130469.25.1 Command-line Options 13047--------------------------- 13048 13049The MMIX version of `as' has some machine-dependent options. 13050 13051 When `--fixed-special-register-names' is specified, only the register 13052names specified in *Note MMIX-Regs:: are recognized in the instructions 13053`PUT' and `GET'. 13054 13055 You can use the `--globalize-symbols' to make all symbols global. 13056This option is useful when splitting up a `mmixal' program into several 13057files. 13058 13059 The `--gnu-syntax' turns off most syntax compatibility with 13060`mmixal'. Its usability is currently doubtful. 13061 13062 The `--relax' option is not fully supported, but will eventually make 13063the object file prepared for linker relaxation. 13064 13065 If you want to avoid inadvertently calling a predefined symbol and 13066would rather get an error, for example when using `as' with a compiler 13067or other machine-generated code, specify `--no-predefined-syms'. This 13068turns off built-in predefined definitions of all such symbols, 13069including rounding-mode symbols, segment symbols, `BIT' symbols, and 13070`TRAP' symbols used in `mmix' "system calls". It also turns off 13071predefined special-register names, except when used in `PUT' and `GET' 13072instructions. 13073 13074 By default, some instructions are expanded to fit the size of the 13075operand or an external symbol (*note MMIX-Expand::). By passing 13076`--no-expand', no such expansion will be done, instead causing errors 13077at link time if the operand does not fit. 13078 13079 The `mmixal' documentation (*note mmixsite::) specifies that global 13080registers allocated with the `GREG' directive (*note MMIX-greg::) and 13081initialized to the same non-zero value, will refer to the same global 13082register. This isn't strictly enforceable in `as' since the final 13083addresses aren't known until link-time, but it will do an effort unless 13084the `--no-merge-gregs' option is specified. (Register merging isn't 13085yet implemented in `ld'.) 13086 13087 `as' will warn every time it expands an instruction to fit an 13088operand unless the option `-x' is specified. It is believed that this 13089behaviour is more useful than just mimicking `mmixal''s behaviour, in 13090which instructions are only expanded if the `-x' option is specified, 13091and assembly fails otherwise, when an instruction needs to be expanded. 13092It needs to be kept in mind that `mmixal' is both an assembler and 13093linker, while `as' will expand instructions that at link stage can be 13094contracted. (Though linker relaxation isn't yet implemented in `ld'.) 13095The option `-x' also imples `--linker-allocated-gregs'. 13096 13097 If instruction expansion is enabled, `as' can expand a `PUSHJ' 13098instruction into a series of instructions. The shortest expansion is 13099to not expand it, but just mark the call as redirectable to a stub, 13100which `ld' creates at link-time, but only if the original `PUSHJ' 13101instruction is found not to reach the target. The stub consists of the 13102necessary instructions to form a jump to the target. This happens if 13103`as' can assert that the `PUSHJ' instruction can reach such a stub. 13104The option `--no-pushj-stubs' disables this shorter expansion, and the 13105longer series of instructions is then created at assembly-time. The 13106option `--no-stubs' is a synonym, intended for compatibility with 13107future releases, where generation of stubs for other instructions may 13108be implemented. 13109 13110 Usually a two-operand-expression (*note GREG-base::) without a 13111matching `GREG' directive is treated as an error by `as'. When the 13112option `--linker-allocated-gregs' is in effect, they are instead passed 13113through to the linker, which will allocate as many global registers as 13114is needed. 13115 13116 13117File: as.info, Node: MMIX-Expand, Next: MMIX-Syntax, Prev: MMIX-Opts, Up: MMIX-Dependent 13118 131199.25.2 Instruction expansion 13120---------------------------- 13121 13122When `as' encounters an instruction with an operand that is either not 13123known or does not fit the operand size of the instruction, `as' (and 13124`ld') will expand the instruction into a sequence of instructions 13125semantically equivalent to the operand fitting the instruction. 13126Expansion will take place for the following instructions: 13127 13128`GETA' 13129 Expands to a sequence of four instructions: `SETL', `INCML', 13130 `INCMH' and `INCH'. The operand must be a multiple of four. 13131 13132Conditional branches 13133 A branch instruction is turned into a branch with the complemented 13134 condition and prediction bit over five instructions; four 13135 instructions setting `$255' to the operand value, which like with 13136 `GETA' must be a multiple of four, and a final `GO $255,$255,0'. 13137 13138`PUSHJ' 13139 Similar to expansion for conditional branches; four instructions 13140 set `$255' to the operand value, followed by a `PUSHGO 13141 $255,$255,0'. 13142 13143`JMP' 13144 Similar to conditional branches and `PUSHJ'. The final instruction 13145 is `GO $255,$255,0'. 13146 13147 The linker `ld' is expected to shrink these expansions for code 13148assembled with `--relax' (though not currently implemented). 13149 13150 13151File: as.info, Node: MMIX-Syntax, Next: MMIX-mmixal, Prev: MMIX-Expand, Up: MMIX-Dependent 13152 131539.25.3 Syntax 13154------------- 13155 13156The assembly syntax is supposed to be upward compatible with that 13157described in Sections 1.3 and 1.4 of `The Art of Computer Programming, 13158Volume 1'. Draft versions of those chapters as well as other MMIX 13159information is located at 13160`http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html'. Most code 13161examples from the mmixal package located there should work unmodified 13162when assembled and linked as single files, with a few noteworthy 13163exceptions (*note MMIX-mmixal::). 13164 13165 Before an instruction is emitted, the current location is aligned to 13166the next four-byte boundary. If a label is defined at the beginning of 13167the line, its value will be the aligned value. 13168 13169 In addition to the traditional hex-prefix `0x', a hexadecimal number 13170can also be specified by the prefix character `#'. 13171 13172 After all operands to an MMIX instruction or directive have been 13173specified, the rest of the line is ignored, treated as a comment. 13174 13175* Menu: 13176 13177* MMIX-Chars:: Special Characters 13178* MMIX-Symbols:: Symbols 13179* MMIX-Regs:: Register Names 13180* MMIX-Pseudos:: Assembler Directives 13181 13182 13183File: as.info, Node: MMIX-Chars, Next: MMIX-Symbols, Up: MMIX-Syntax 13184 131859.25.3.1 Special Characters 13186........................... 13187 13188The characters `*' and `#' are line comment characters; each start a 13189comment at the beginning of a line, but only at the beginning of a 13190line. A `#' prefixes a hexadecimal number if found elsewhere on a line. 13191 13192 Two other characters, `%' and `!', each start a comment anywhere on 13193the line. Thus you can't use the `modulus' and `not' operators in 13194expressions normally associated with these two characters. 13195 13196 A `;' is a line separator, treated as a new-line, so separate 13197instructions can be specified on a single line. 13198 13199 13200File: as.info, Node: MMIX-Symbols, Next: MMIX-Regs, Prev: MMIX-Chars, Up: MMIX-Syntax 13201 132029.25.3.2 Symbols 13203................ 13204 13205The character `:' is permitted in identifiers. There are two 13206exceptions to it being treated as any other symbol character: if a 13207symbol begins with `:', it means that the symbol is in the global 13208namespace and that the current prefix should not be prepended to that 13209symbol (*note MMIX-prefix::). The `:' is then not considered part of 13210the symbol. For a symbol in the label position (first on a line), a `:' 13211at the end of a symbol is silently stripped off. A label is permitted, 13212but not required, to be followed by a `:', as with many other assembly 13213formats. 13214 13215 The character `@' in an expression, is a synonym for `.', the 13216current location. 13217 13218 In addition to the common forward and backward local symbol formats 13219(*note Symbol Names::), they can be specified with upper-case `B' and 13220`F', as in `8B' and `9F'. A local label defined for the current 13221position is written with a `H' appended to the number: 13222 3H LDB $0,$1,2 13223 This and traditional local-label formats cannot be mixed: a label 13224must be defined and referred to using the same format. 13225 13226 There's a minor caveat: just as for the ordinary local symbols, the 13227local symbols are translated into ordinary symbols using control 13228characters are to hide the ordinal number of the symbol. 13229Unfortunately, these symbols are not translated back in error messages. 13230Thus you may see confusing error messages when local symbols are used. 13231Control characters `\003' (control-C) and `\004' (control-D) are used 13232for the MMIX-specific local-symbol syntax. 13233 13234 The symbol `Main' is handled specially; it is always global. 13235 13236 By defining the symbols `__.MMIX.start..text' and 13237`__.MMIX.start..data', the address of respectively the `.text' and 13238`.data' segments of the final program can be defined, though when 13239linking more than one object file, the code or data in the object file 13240containing the symbol is not guaranteed to be start at that position; 13241just the final executable. *Note MMIX-loc::. 13242 13243 13244File: as.info, Node: MMIX-Regs, Next: MMIX-Pseudos, Prev: MMIX-Symbols, Up: MMIX-Syntax 13245 132469.25.3.3 Register names 13247....................... 13248 13249Local and global registers are specified as `$0' to `$255'. The 13250recognized special register names are `rJ', `rA', `rB', `rC', `rD', 13251`rE', `rF', `rG', `rH', `rI', `rK', `rL', `rM', `rN', `rO', `rP', `rQ', 13252`rR', `rS', `rT', `rU', `rV', `rW', `rX', `rY', `rZ', `rBB', `rTT', 13253`rWW', `rXX', `rYY' and `rZZ'. A leading `:' is optional for special 13254register names. 13255 13256 Local and global symbols can be equated to register names and used in 13257place of ordinary registers. 13258 13259 Similarly for special registers, local and global symbols can be 13260used. Also, symbols equated from numbers and constant expressions are 13261allowed in place of a special register, except when either of the 13262options `--no-predefined-syms' and `--fixed-special-register-names' are 13263specified. Then only the special register names above are allowed for 13264the instructions having a special register operand; `GET' and `PUT'. 13265 13266 13267File: as.info, Node: MMIX-Pseudos, Prev: MMIX-Regs, Up: MMIX-Syntax 13268 132699.25.3.4 Assembler Directives 13270............................. 13271 13272`LOC' 13273 The `LOC' directive sets the current location to the value of the 13274 operand field, which may include changing sections. If the 13275 operand is a constant, the section is set to either `.data' if the 13276 value is `0x2000000000000000' or larger, else it is set to `.text'. 13277 Within a section, the current location may only be changed to 13278 monotonically higher addresses. A LOC expression must be a 13279 previously defined symbol or a "pure" constant. 13280 13281 An example, which sets the label PREV to the current location, and 13282 updates the current location to eight bytes forward: 13283 prev LOC @+8 13284 13285 When a LOC has a constant as its operand, a symbol 13286 `__.MMIX.start..text' or `__.MMIX.start..data' is defined 13287 depending on the address as mentioned above. Each such symbol is 13288 interpreted as special by the linker, locating the section at that 13289 address. Note that if multiple files are linked, the first object 13290 file with that section will be mapped to that address (not 13291 necessarily the file with the LOC definition). 13292 13293`LOCAL' 13294 Example: 13295 LOCAL external_symbol 13296 LOCAL 42 13297 .local asymbol 13298 13299 This directive-operation generates a link-time assertion that the 13300 operand does not correspond to a global register. The operand is 13301 an expression that at link-time resolves to a register symbol or a 13302 number. A number is treated as the register having that number. 13303 There is one restriction on the use of this directive: the 13304 pseudo-directive must be placed in a section with contents, code 13305 or data. 13306 13307`IS' 13308 The `IS' directive: 13309 asymbol IS an_expression 13310 sets the symbol `asymbol' to `an_expression'. A symbol may not be 13311 set more than once using this directive. Local labels may be set 13312 using this directive, for example: 13313 5H IS @+4 13314 13315`GREG' 13316 This directive reserves a global register, gives it an initial 13317 value and optionally gives it a symbolic name. Some examples: 13318 13319 areg GREG 13320 breg GREG data_value 13321 GREG data_buffer 13322 .greg creg, another_data_value 13323 13324 The symbolic register name can be used in place of a (non-special) 13325 register. If a value isn't provided, it defaults to zero. Unless 13326 the option `--no-merge-gregs' is specified, non-zero registers 13327 allocated with this directive may be eliminated by `as'; another 13328 register with the same value used in its place. Any of the 13329 instructions `CSWAP', `GO', `LDA', `LDBU', `LDB', `LDHT', `LDOU', 13330 `LDO', `LDSF', `LDTU', `LDT', `LDUNC', `LDVTS', `LDWU', `LDW', 13331 `PREGO', `PRELD', `PREST', `PUSHGO', `STBU', `STB', `STCO', `STHT', 13332 `STOU', `STSF', `STTU', `STT', `STUNC', `SYNCD', `SYNCID', can 13333 have a value nearby an initial value in place of its second and 13334 third operands. Here, "nearby" is defined as within the range 13335 0...255 from the initial value of such an allocated register. 13336 13337 buffer1 BYTE 0,0,0,0,0 13338 buffer2 BYTE 0,0,0,0,0 13339 ... 13340 GREG buffer1 13341 LDOU $42,buffer2 13342 In the example above, the `Y' field of the `LDOUI' instruction 13343 (LDOU with a constant Z) will be replaced with the global register 13344 allocated for `buffer1', and the `Z' field will have the value 5, 13345 the offset from `buffer1' to `buffer2'. The result is equivalent 13346 to this code: 13347 buffer1 BYTE 0,0,0,0,0 13348 buffer2 BYTE 0,0,0,0,0 13349 ... 13350 tmpreg GREG buffer1 13351 LDOU $42,tmpreg,(buffer2-buffer1) 13352 13353 Global registers allocated with this directive are allocated in 13354 order higher-to-lower within a file. Other than that, the exact 13355 order of register allocation and elimination is undefined. For 13356 example, the order is undefined when more than one file with such 13357 directives are linked together. With the options `-x' and 13358 `--linker-allocated-gregs', `GREG' directives for two-operand 13359 cases like the one mentioned above can be omitted. Sufficient 13360 global registers will then be allocated by the linker. 13361 13362`BYTE' 13363 The `BYTE' directive takes a series of operands separated by a 13364 comma. If an operand is a string (*note Strings::), each 13365 character of that string is emitted as a byte. Other operands 13366 must be constant expressions without forward references, in the 13367 range 0...255. If you need operands having expressions with 13368 forward references, use `.byte' (*note Byte::). An operand can be 13369 omitted, defaulting to a zero value. 13370 13371`WYDE' 13372`TETRA' 13373`OCTA' 13374 The directives `WYDE', `TETRA' and `OCTA' emit constants of two, 13375 four and eight bytes size respectively. Before anything else 13376 happens for the directive, the current location is aligned to the 13377 respective constant-size boundary. If a label is defined at the 13378 beginning of the line, its value will be that after the alignment. 13379 A single operand can be omitted, defaulting to a zero value 13380 emitted for the directive. Operands can be expressed as strings 13381 (*note Strings::), in which case each character in the string is 13382 emitted as a separate constant of the size indicated by the 13383 directive. 13384 13385`PREFIX' 13386 The `PREFIX' directive sets a symbol name prefix to be prepended to 13387 all symbols (except local symbols, *note MMIX-Symbols::), that are 13388 not prefixed with `:', until the next `PREFIX' directive. Such 13389 prefixes accumulate. For example, 13390 PREFIX a 13391 PREFIX b 13392 c IS 0 13393 defines a symbol `abc' with the value 0. 13394 13395`BSPEC' 13396`ESPEC' 13397 A pair of `BSPEC' and `ESPEC' directives delimit a section of 13398 special contents (without specified semantics). Example: 13399 BSPEC 42 13400 TETRA 1,2,3 13401 ESPEC 13402 The single operand to `BSPEC' must be number in the range 0...255. 13403 The `BSPEC' number 80 is used by the GNU binutils implementation. 13404 13405 13406File: as.info, Node: MMIX-mmixal, Prev: MMIX-Syntax, Up: MMIX-Dependent 13407 134089.25.4 Differences to `mmixal' 13409------------------------------ 13410 13411The binutils `as' and `ld' combination has a few differences in 13412function compared to `mmixal' (*note mmixsite::). 13413 13414 The replacement of a symbol with a GREG-allocated register (*note 13415GREG-base::) is not handled the exactly same way in `as' as in 13416`mmixal'. This is apparent in the `mmixal' example file `inout.mms', 13417where different registers with different offsets, eventually yielding 13418the same address, are used in the first instruction. This type of 13419difference should however not affect the function of any program unless 13420it has specific assumptions about the allocated register number. 13421 13422 Line numbers (in the `mmo' object format) are currently not 13423supported. 13424 13425 Expression operator precedence is not that of mmixal: operator 13426precedence is that of the C programming language. It's recommended to 13427use parentheses to explicitly specify wanted operator precedence 13428whenever more than one type of operators are used. 13429 13430 The serialize unary operator `&', the fractional division operator 13431`//', the logical not operator `!' and the modulus operator `%' are not 13432available. 13433 13434 Symbols are not global by default, unless the option 13435`--globalize-symbols' is passed. Use the `.global' directive to 13436globalize symbols (*note Global::). 13437 13438 Operand syntax is a bit stricter with `as' than `mmixal'. For 13439example, you can't say `addu 1,2,3', instead you must write `addu 13440$1,$2,3'. 13441 13442 You can't LOC to a lower address than those already visited (i.e., 13443"backwards"). 13444 13445 A LOC directive must come before any emitted code. 13446 13447 Predefined symbols are visible as file-local symbols after use. (In 13448the ELF file, that is--the linked mmo file has no notion of a file-local 13449symbol.) 13450 13451 Some mapping of constant expressions to sections in LOC expressions 13452is attempted, but that functionality is easily confused and should be 13453avoided unless compatibility with `mmixal' is required. A LOC 13454expression to `0x2000000000000000' or higher, maps to the `.data' 13455section and lower addresses map to the `.text' section (*note 13456MMIX-loc::). 13457 13458 The code and data areas are each contiguous. Sparse programs with 13459far-away LOC directives will take up the same amount of space as a 13460contiguous program with zeros filled in the gaps between the LOC 13461directives. If you need sparse programs, you might try and get the 13462wanted effect with a linker script and splitting up the code parts into 13463sections (*note Section::). Assembly code for this, to be compatible 13464with `mmixal', would look something like: 13465 .if 0 13466 LOC away_expression 13467 .else 13468 .section away,"ax" 13469 .fi 13470 `as' will not execute the LOC directive and `mmixal' ignores the 13471lines with `.'. This construct can be used generally to help 13472compatibility. 13473 13474 Symbols can't be defined twice-not even to the same value. 13475 13476 Instruction mnemonics are recognized case-insensitive, though the 13477`IS' and `GREG' pseudo-operations must be specified in upper-case 13478characters. 13479 13480 There's no unicode support. 13481 13482 The following is a list of programs in `mmix.tar.gz', available at 13483`http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html', last 13484checked with the version dated 2001-08-25 (md5sum 13485c393470cfc86fac040487d22d2bf0172) that assemble with `mmixal' but do 13486not assemble with `as': 13487 13488`silly.mms' 13489 LOC to a previous address. 13490 13491`sim.mms' 13492 Redefines symbol `Done'. 13493 13494`test.mms' 13495 Uses the serial operator `&'. 13496 13497 13498File: as.info, Node: MSP430-Dependent, Next: SH-Dependent, Prev: MMIX-Dependent, Up: Machine Dependencies 13499 135009.26 MSP 430 Dependent Features 13501=============================== 13502 13503* Menu: 13504 13505* MSP430 Options:: Options 13506* MSP430 Syntax:: Syntax 13507* MSP430 Floating Point:: Floating Point 13508* MSP430 Directives:: MSP 430 Machine Directives 13509* MSP430 Opcodes:: Opcodes 13510* MSP430 Profiling Capability:: Profiling Capability 13511 13512 13513File: as.info, Node: MSP430 Options, Next: MSP430 Syntax, Up: MSP430-Dependent 13514 135159.26.1 Options 13516-------------- 13517 13518`-m' 13519 select the mpu arch. Currently has no effect. 13520 13521`-mP' 13522 enables polymorph instructions handler. 13523 13524`-mQ' 13525 enables relaxation at assembly time. DANGEROUS! 13526 13527 13528 13529File: as.info, Node: MSP430 Syntax, Next: MSP430 Floating Point, Prev: MSP430 Options, Up: MSP430-Dependent 13530 135319.26.2 Syntax 13532------------- 13533 13534* Menu: 13535 13536* MSP430-Macros:: Macros 13537* MSP430-Chars:: Special Characters 13538* MSP430-Regs:: Register Names 13539* MSP430-Ext:: Assembler Extensions 13540 13541 13542File: as.info, Node: MSP430-Macros, Next: MSP430-Chars, Up: MSP430 Syntax 13543 135449.26.2.1 Macros 13545............... 13546 13547The macro syntax used on the MSP 430 is like that described in the MSP 13548430 Family Assembler Specification. Normal `as' macros should still 13549work. 13550 13551 Additional built-in macros are: 13552 13553`llo(exp)' 13554 Extracts least significant word from 32-bit expression 'exp'. 13555 13556`lhi(exp)' 13557 Extracts most significant word from 32-bit expression 'exp'. 13558 13559`hlo(exp)' 13560 Extracts 3rd word from 64-bit expression 'exp'. 13561 13562`hhi(exp)' 13563 Extracts 4rd word from 64-bit expression 'exp'. 13564 13565 13566 They normally being used as an immediate source operand. 13567 mov #llo(1), r10 ; == mov #1, r10 13568 mov #lhi(1), r10 ; == mov #0, r10 13569 13570 13571File: as.info, Node: MSP430-Chars, Next: MSP430-Regs, Prev: MSP430-Macros, Up: MSP430 Syntax 13572 135739.26.2.2 Special Characters 13574........................... 13575 13576`;' is the line comment character. 13577 13578 The character `$' in jump instructions indicates current location and 13579implemented only for TI syntax compatibility. 13580 13581 13582File: as.info, Node: MSP430-Regs, Next: MSP430-Ext, Prev: MSP430-Chars, Up: MSP430 Syntax 13583 135849.26.2.3 Register Names 13585....................... 13586 13587General-purpose registers are represented by predefined symbols of the 13588form `rN' (for global registers), where N represents a number between 13589`0' and `15'. The leading letters may be in either upper or lower 13590case; for example, `r13' and `R7' are both valid register names. 13591 13592 Register names `PC', `SP' and `SR' cannot be used as register names 13593and will be treated as variables. Use `r0', `r1', and `r2' instead. 13594 13595 13596File: as.info, Node: MSP430-Ext, Prev: MSP430-Regs, Up: MSP430 Syntax 13597 135989.26.2.4 Assembler Extensions 13599............................. 13600 13601`@rN' 13602 As destination operand being treated as `0(rn)' 13603 13604`0(rN)' 13605 As source operand being treated as `@rn' 13606 13607`jCOND +N' 13608 Skips next N bytes followed by jump instruction and equivalent to 13609 `jCOND $+N+2' 13610 13611 13612 Also, there are some instructions, which cannot be found in other 13613assemblers. These are branch instructions, which has different opcodes 13614upon jump distance. They all got PC relative addressing mode. 13615 13616`beq label' 13617 A polymorph instruction which is `jeq label' in case if jump 13618 distance within allowed range for cpu's jump instruction. If not, 13619 this unrolls into a sequence of 13620 jne $+6 13621 br label 13622 13623`bne label' 13624 A polymorph instruction which is `jne label' or `jeq +4; br label' 13625 13626`blt label' 13627 A polymorph instruction which is `jl label' or `jge +4; br label' 13628 13629`bltn label' 13630 A polymorph instruction which is `jn label' or `jn +2; jmp +4; br 13631 label' 13632 13633`bltu label' 13634 A polymorph instruction which is `jlo label' or `jhs +2; br label' 13635 13636`bge label' 13637 A polymorph instruction which is `jge label' or `jl +4; br label' 13638 13639`bgeu label' 13640 A polymorph instruction which is `jhs label' or `jlo +4; br label' 13641 13642`bgt label' 13643 A polymorph instruction which is `jeq +2; jge label' or `jeq +6; 13644 jl +4; br label' 13645 13646`bgtu label' 13647 A polymorph instruction which is `jeq +2; jhs label' or `jeq +6; 13648 jlo +4; br label' 13649 13650`bleu label' 13651 A polymorph instruction which is `jeq label; jlo label' or `jeq 13652 +2; jhs +4; br label' 13653 13654`ble label' 13655 A polymorph instruction which is `jeq label; jl label' or `jeq 13656 +2; jge +4; br label' 13657 13658`jump label' 13659 A polymorph instruction which is `jmp label' or `br label' 13660 13661 13662File: as.info, Node: MSP430 Floating Point, Next: MSP430 Directives, Prev: MSP430 Syntax, Up: MSP430-Dependent 13663 136649.26.3 Floating Point 13665--------------------- 13666 13667The MSP 430 family uses IEEE 32-bit floating-point numbers. 13668 13669 13670File: as.info, Node: MSP430 Directives, Next: MSP430 Opcodes, Prev: MSP430 Floating Point, Up: MSP430-Dependent 13671 136729.26.4 MSP 430 Machine Directives 13673--------------------------------- 13674 13675`.file' 13676 This directive is ignored; it is accepted for compatibility with 13677 other MSP 430 assemblers. 13678 13679 _Warning:_ in other versions of the GNU assembler, `.file' is 13680 used for the directive called `.app-file' in the MSP 430 13681 support. 13682 13683`.line' 13684 This directive is ignored; it is accepted for compatibility with 13685 other MSP 430 assemblers. 13686 13687`.arch' 13688 Currently this directive is ignored; it is accepted for 13689 compatibility with other MSP 430 assemblers. 13690 13691`.profiler' 13692 This directive instructs assembler to add new profile entry to the 13693 object file. 13694 13695 13696 13697File: as.info, Node: MSP430 Opcodes, Next: MSP430 Profiling Capability, Prev: MSP430 Directives, Up: MSP430-Dependent 13698 136999.26.5 Opcodes 13700-------------- 13701 13702`as' implements all the standard MSP 430 opcodes. No additional 13703pseudo-instructions are needed on this family. 13704 13705 For information on the 430 machine instruction set, see `MSP430 13706User's Manual, document slau049d', Texas Instrument, Inc. 13707 13708 13709File: as.info, Node: MSP430 Profiling Capability, Prev: MSP430 Opcodes, Up: MSP430-Dependent 13710 137119.26.6 Profiling Capability 13712--------------------------- 13713 13714It is a performance hit to use gcc's profiling approach for this tiny 13715target. Even more - jtag hardware facility does not perform any 13716profiling functions. However we've got gdb's built-in simulator where 13717we can do anything. 13718 13719 We define new section `.profiler' which holds all profiling 13720information. We define new pseudo operation `.profiler' which will 13721instruct assembler to add new profile entry to the object file. Profile 13722should take place at the present address. 13723 13724 Pseudo operation format: 13725 13726 `.profiler flags,function_to_profile [, cycle_corrector, extra]' 13727 13728 where: 13729 13730 `flags' is a combination of the following characters: 13731 13732 `s' 13733 function entry 13734 13735 `x' 13736 function exit 13737 13738 `i' 13739 function is in init section 13740 13741 `f' 13742 function is in fini section 13743 13744 `l' 13745 library call 13746 13747 `c' 13748 libc standard call 13749 13750 `d' 13751 stack value demand 13752 13753 `I' 13754 interrupt service routine 13755 13756 `P' 13757 prologue start 13758 13759 `p' 13760 prologue end 13761 13762 `E' 13763 epilogue start 13764 13765 `e' 13766 epilogue end 13767 13768 `j' 13769 long jump / sjlj unwind 13770 13771 `a' 13772 an arbitrary code fragment 13773 13774 `t' 13775 extra parameter saved (a constant value like frame size) 13776 13777`function_to_profile' 13778 a function address 13779 13780`cycle_corrector' 13781 a value which should be added to the cycle counter, zero if 13782 omitted. 13783 13784`extra' 13785 any extra parameter, zero if omitted. 13786 13787 13788 For example: 13789 .global fxx 13790 .type fxx,@function 13791 fxx: 13792 .LFrameOffset_fxx=0x08 13793 .profiler "scdP", fxx ; function entry. 13794 ; we also demand stack value to be saved 13795 push r11 13796 push r10 13797 push r9 13798 push r8 13799 .profiler "cdpt",fxx,0, .LFrameOffset_fxx ; check stack value at this point 13800 ; (this is a prologue end) 13801 ; note, that spare var filled with 13802 ; the farme size 13803 mov r15,r8 13804 ... 13805 .profiler cdE,fxx ; check stack 13806 pop r8 13807 pop r9 13808 pop r10 13809 pop r11 13810 .profiler xcde,fxx,3 ; exit adds 3 to the cycle counter 13811 ret ; cause 'ret' insn takes 3 cycles 13812 13813 13814File: as.info, Node: PDP-11-Dependent, Next: PJ-Dependent, Prev: SH64-Dependent, Up: Machine Dependencies 13815 138169.27 PDP-11 Dependent Features 13817============================== 13818 13819* Menu: 13820 13821* PDP-11-Options:: Options 13822* PDP-11-Pseudos:: Assembler Directives 13823* PDP-11-Syntax:: DEC Syntax versus BSD Syntax 13824* PDP-11-Mnemonics:: Instruction Naming 13825* PDP-11-Synthetic:: Synthetic Instructions 13826 13827 13828File: as.info, Node: PDP-11-Options, Next: PDP-11-Pseudos, Up: PDP-11-Dependent 13829 138309.27.1 Options 13831-------------- 13832 13833The PDP-11 version of `as' has a rich set of machine dependent options. 13834 138359.27.1.1 Code Generation Options 13836................................ 13837 13838`-mpic | -mno-pic' 13839 Generate position-independent (or position-dependent) code. 13840 13841 The default is to generate position-independent code. 13842 138439.27.1.2 Instruction Set Extension Options 13844.......................................... 13845 13846These options enables or disables the use of extensions over the base 13847line instruction set as introduced by the first PDP-11 CPU: the KA11. 13848Most options come in two variants: a `-m'EXTENSION that enables 13849EXTENSION, and a `-mno-'EXTENSION that disables EXTENSION. 13850 13851 The default is to enable all extensions. 13852 13853`-mall | -mall-extensions' 13854 Enable all instruction set extensions. 13855 13856`-mno-extensions' 13857 Disable all instruction set extensions. 13858 13859`-mcis | -mno-cis' 13860 Enable (or disable) the use of the commercial instruction set, 13861 which consists of these instructions: `ADDNI', `ADDN', `ADDPI', 13862 `ADDP', `ASHNI', `ASHN', `ASHPI', `ASHP', `CMPCI', `CMPC', 13863 `CMPNI', `CMPN', `CMPPI', `CMPP', `CVTLNI', `CVTLN', `CVTLPI', 13864 `CVTLP', `CVTNLI', `CVTNL', `CVTNPI', `CVTNP', `CVTPLI', `CVTPL', 13865 `CVTPNI', `CVTPN', `DIVPI', `DIVP', `L2DR', `L3DR', `LOCCI', 13866 `LOCC', `MATCI', `MATC', `MOVCI', `MOVC', `MOVRCI', `MOVRC', 13867 `MOVTCI', `MOVTC', `MULPI', `MULP', `SCANCI', `SCANC', `SKPCI', 13868 `SKPC', `SPANCI', `SPANC', `SUBNI', `SUBN', `SUBPI', and `SUBP'. 13869 13870`-mcsm | -mno-csm' 13871 Enable (or disable) the use of the `CSM' instruction. 13872 13873`-meis | -mno-eis' 13874 Enable (or disable) the use of the extended instruction set, which 13875 consists of these instructions: `ASHC', `ASH', `DIV', `MARK', 13876 `MUL', `RTT', `SOB' `SXT', and `XOR'. 13877 13878`-mfis | -mkev11' 13879`-mno-fis | -mno-kev11' 13880 Enable (or disable) the use of the KEV11 floating-point 13881 instructions: `FADD', `FDIV', `FMUL', and `FSUB'. 13882 13883`-mfpp | -mfpu | -mfp-11' 13884`-mno-fpp | -mno-fpu | -mno-fp-11' 13885 Enable (or disable) the use of FP-11 floating-point instructions: 13886 `ABSF', `ADDF', `CFCC', `CLRF', `CMPF', `DIVF', `LDCFF', `LDCIF', 13887 `LDEXP', `LDF', `LDFPS', `MODF', `MULF', `NEGF', `SETD', `SETF', 13888 `SETI', `SETL', `STCFF', `STCFI', `STEXP', `STF', `STFPS', `STST', 13889 `SUBF', and `TSTF'. 13890 13891`-mlimited-eis | -mno-limited-eis' 13892 Enable (or disable) the use of the limited extended instruction 13893 set: `MARK', `RTT', `SOB', `SXT', and `XOR'. 13894 13895 The -mno-limited-eis options also implies -mno-eis. 13896 13897`-mmfpt | -mno-mfpt' 13898 Enable (or disable) the use of the `MFPT' instruction. 13899 13900`-mmultiproc | -mno-multiproc' 13901 Enable (or disable) the use of multiprocessor instructions: 13902 `TSTSET' and `WRTLCK'. 13903 13904`-mmxps | -mno-mxps' 13905 Enable (or disable) the use of the `MFPS' and `MTPS' instructions. 13906 13907`-mspl | -mno-spl' 13908 Enable (or disable) the use of the `SPL' instruction. 13909 13910 Enable (or disable) the use of the microcode instructions: `LDUB', 13911 `MED', and `XFC'. 13912 139139.27.1.3 CPU Model Options 13914.......................... 13915 13916These options enable the instruction set extensions supported by a 13917particular CPU, and disables all other extensions. 13918 13919`-mka11' 13920 KA11 CPU. Base line instruction set only. 13921 13922`-mkb11' 13923 KB11 CPU. Enable extended instruction set and `SPL'. 13924 13925`-mkd11a' 13926 KD11-A CPU. Enable limited extended instruction set. 13927 13928`-mkd11b' 13929 KD11-B CPU. Base line instruction set only. 13930 13931`-mkd11d' 13932 KD11-D CPU. Base line instruction set only. 13933 13934`-mkd11e' 13935 KD11-E CPU. Enable extended instruction set, `MFPS', and `MTPS'. 13936 13937`-mkd11f | -mkd11h | -mkd11q' 13938 KD11-F, KD11-H, or KD11-Q CPU. Enable limited extended 13939 instruction set, `MFPS', and `MTPS'. 13940 13941`-mkd11k' 13942 KD11-K CPU. Enable extended instruction set, `LDUB', `MED', 13943 `MFPS', `MFPT', `MTPS', and `XFC'. 13944 13945`-mkd11z' 13946 KD11-Z CPU. Enable extended instruction set, `CSM', `MFPS', 13947 `MFPT', `MTPS', and `SPL'. 13948 13949`-mf11' 13950 F11 CPU. Enable extended instruction set, `MFPS', `MFPT', and 13951 `MTPS'. 13952 13953`-mj11' 13954 J11 CPU. Enable extended instruction set, `CSM', `MFPS', `MFPT', 13955 `MTPS', `SPL', `TSTSET', and `WRTLCK'. 13956 13957`-mt11' 13958 T11 CPU. Enable limited extended instruction set, `MFPS', and 13959 `MTPS'. 13960 139619.27.1.4 Machine Model Options 13962.............................. 13963 13964These options enable the instruction set extensions supported by a 13965particular machine model, and disables all other extensions. 13966 13967`-m11/03' 13968 Same as `-mkd11f'. 13969 13970`-m11/04' 13971 Same as `-mkd11d'. 13972 13973`-m11/05 | -m11/10' 13974 Same as `-mkd11b'. 13975 13976`-m11/15 | -m11/20' 13977 Same as `-mka11'. 13978 13979`-m11/21' 13980 Same as `-mt11'. 13981 13982`-m11/23 | -m11/24' 13983 Same as `-mf11'. 13984 13985`-m11/34' 13986 Same as `-mkd11e'. 13987 13988`-m11/34a' 13989 Ame as `-mkd11e' `-mfpp'. 13990 13991`-m11/35 | -m11/40' 13992 Same as `-mkd11a'. 13993 13994`-m11/44' 13995 Same as `-mkd11z'. 13996 13997`-m11/45 | -m11/50 | -m11/55 | -m11/70' 13998 Same as `-mkb11'. 13999 14000`-m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94' 14001 Same as `-mj11'. 14002 14003`-m11/60' 14004 Same as `-mkd11k'. 14005 14006 14007File: as.info, Node: PDP-11-Pseudos, Next: PDP-11-Syntax, Prev: PDP-11-Options, Up: PDP-11-Dependent 14008 140099.27.2 Assembler Directives 14010--------------------------- 14011 14012The PDP-11 version of `as' has a few machine dependent assembler 14013directives. 14014 14015`.bss' 14016 Switch to the `bss' section. 14017 14018`.even' 14019 Align the location counter to an even number. 14020 14021 14022File: as.info, Node: PDP-11-Syntax, Next: PDP-11-Mnemonics, Prev: PDP-11-Pseudos, Up: PDP-11-Dependent 14023 140249.27.3 PDP-11 Assembly Language Syntax 14025-------------------------------------- 14026 14027`as' supports both DEC syntax and BSD syntax. The only difference is 14028that in DEC syntax, a `#' character is used to denote an immediate 14029constants, while in BSD syntax the character for this purpose is `$'. 14030 14031 general-purpose registers are named `r0' through `r7'. Mnemonic 14032alternatives for `r6' and `r7' are `sp' and `pc', respectively. 14033 14034 Floating-point registers are named `ac0' through `ac3', or 14035alternatively `fr0' through `fr3'. 14036 14037 Comments are started with a `#' or a `/' character, and extend to 14038the end of the line. (FIXME: clash with immediates?) 14039 14040 14041File: as.info, Node: PDP-11-Mnemonics, Next: PDP-11-Synthetic, Prev: PDP-11-Syntax, Up: PDP-11-Dependent 14042 140439.27.4 Instruction Naming 14044------------------------- 14045 14046Some instructions have alternative names. 14047 14048`BCC' 14049 `BHIS' 14050 14051`BCS' 14052 `BLO' 14053 14054`L2DR' 14055 `L2D' 14056 14057`L3DR' 14058 `L3D' 14059 14060`SYS' 14061 `TRAP' 14062 14063 14064File: as.info, Node: PDP-11-Synthetic, Prev: PDP-11-Mnemonics, Up: PDP-11-Dependent 14065 140669.27.5 Synthetic Instructions 14067----------------------------- 14068 14069The `JBR' and `J'CC synthetic instructions are not supported yet. 14070 14071 14072File: as.info, Node: PJ-Dependent, Next: PPC-Dependent, Prev: PDP-11-Dependent, Up: Machine Dependencies 14073 140749.28 picoJava Dependent Features 14075================================ 14076 14077* Menu: 14078 14079* PJ Options:: Options 14080 14081 14082File: as.info, Node: PJ Options, Up: PJ-Dependent 14083 140849.28.1 Options 14085-------------- 14086 14087`as' has two additional command-line options for the picoJava 14088architecture. 14089`-ml' 14090 This option selects little endian data output. 14091 14092`-mb' 14093 This option selects big endian data output. 14094 14095 14096File: as.info, Node: PPC-Dependent, Next: RX-Dependent, Prev: PJ-Dependent, Up: Machine Dependencies 14097 140989.29 PowerPC Dependent Features 14099=============================== 14100 14101* Menu: 14102 14103* PowerPC-Opts:: Options 14104* PowerPC-Pseudo:: PowerPC Assembler Directives 14105 14106 14107File: as.info, Node: PowerPC-Opts, Next: PowerPC-Pseudo, Up: PPC-Dependent 14108 141099.29.1 Options 14110-------------- 14111 14112The PowerPC chip family includes several successive levels, using the 14113same core instruction set, but including a few additional instructions 14114at each level. There are exceptions to this however. For details on 14115what instructions each variant supports, please see the chip's 14116architecture reference manual. 14117 14118 The following table lists all available PowerPC options. 14119 14120`-a32' 14121 Generate ELF32 or XCOFF32. 14122 14123`-a64' 14124 Generate ELF64 or XCOFF64. 14125 14126`-K PIC' 14127 Set EF_PPC_RELOCATABLE_LIB in ELF flags. 14128 14129`-mpwrx | -mpwr2' 14130 Generate code for POWER/2 (RIOS2). 14131 14132`-mpwr' 14133 Generate code for POWER (RIOS1) 14134 14135`-m601' 14136 Generate code for PowerPC 601. 14137 14138`-mppc, -mppc32, -m603, -m604' 14139 Generate code for PowerPC 603/604. 14140 14141`-m403, -m405' 14142 Generate code for PowerPC 403/405. 14143 14144`-m440' 14145 Generate code for PowerPC 440. BookE and some 405 instructions. 14146 14147`-m464' 14148 Generate code for PowerPC 464. 14149 14150`-m476' 14151 Generate code for PowerPC 476. 14152 14153`-m7400, -m7410, -m7450, -m7455' 14154 Generate code for PowerPC 7400/7410/7450/7455. 14155 14156`-m750cl' 14157 Generate code for PowerPC 750CL. 14158 14159`-mppc64, -m620' 14160 Generate code for PowerPC 620/625/630. 14161 14162`-me500, -me500x2' 14163 Generate code for Motorola e500 core complex. 14164 14165`-me500mc' 14166 Generate code for Freescale e500mc core complex. 14167 14168`-me500mc64' 14169 Generate code for Freescale e500mc64 core complex. 14170 14171`-mspe' 14172 Generate code for Motorola SPE instructions. 14173 14174`-mtitan' 14175 Generate code for AppliedMicro Titan core complex. 14176 14177`-mppc64bridge' 14178 Generate code for PowerPC 64, including bridge insns. 14179 14180`-mbooke' 14181 Generate code for 32-bit BookE. 14182 14183`-ma2' 14184 Generate code for A2 architecture. 14185 14186`-me300' 14187 Generate code for PowerPC e300 family. 14188 14189`-maltivec' 14190 Generate code for processors with AltiVec instructions. 14191 14192`-mvsx' 14193 Generate code for processors with Vector-Scalar (VSX) instructions. 14194 14195`-mpower4, -mpwr4' 14196 Generate code for Power4 architecture. 14197 14198`-mpower5, -mpwr5, -mpwr5x' 14199 Generate code for Power5 architecture. 14200 14201`-mpower6, -mpwr6' 14202 Generate code for Power6 architecture. 14203 14204`-mpower7, -mpwr7' 14205 Generate code for Power7 architecture. 14206 14207`-mcell' 14208 Generate code for Cell Broadband Engine architecture. 14209 14210`-mcom' 14211 Generate code Power/PowerPC common instructions. 14212 14213`-many' 14214 Generate code for any architecture (PWR/PWRX/PPC). 14215 14216`-mregnames' 14217 Allow symbolic names for registers. 14218 14219`-mno-regnames' 14220 Do not allow symbolic names for registers. 14221 14222`-mrelocatable' 14223 Support for GCC's -mrelocatable option. 14224 14225`-mrelocatable-lib' 14226 Support for GCC's -mrelocatable-lib option. 14227 14228`-memb' 14229 Set PPC_EMB bit in ELF flags. 14230 14231`-mlittle, -mlittle-endian, -le' 14232 Generate code for a little endian machine. 14233 14234`-mbig, -mbig-endian, -be' 14235 Generate code for a big endian machine. 14236 14237`-msolaris' 14238 Generate code for Solaris. 14239 14240`-mno-solaris' 14241 Do not generate code for Solaris. 14242 14243`-nops=COUNT' 14244 If an alignment directive inserts more than COUNT nops, put a 14245 branch at the beginning to skip execution of the nops. 14246 14247 14248File: as.info, Node: PowerPC-Pseudo, Prev: PowerPC-Opts, Up: PPC-Dependent 14249 142509.29.2 PowerPC Assembler Directives 14251----------------------------------- 14252 14253A number of assembler directives are available for PowerPC. The 14254following table is far from complete. 14255 14256`.machine "string"' 14257 This directive allows you to change the machine for which code is 14258 generated. `"string"' may be any of the -m cpu selection options 14259 (without the -m) enclosed in double quotes, `"push"', or `"pop"'. 14260 `.machine "push"' saves the currently selected cpu, which may be 14261 restored with `.machine "pop"'. 14262 14263 14264File: as.info, Node: RX-Dependent, Next: S/390-Dependent, Prev: PPC-Dependent, Up: Machine Dependencies 14265 142669.30 RX Dependent Features 14267========================== 14268 14269* Menu: 14270 14271* RX-Opts:: RX Assembler Command Line Options 14272* RX-Modifiers:: Symbolic Operand Modifiers 14273* RX-Directives:: Assembler Directives 14274* RX-Float:: Floating Point 14275 14276 14277File: as.info, Node: RX-Opts, Next: RX-Modifiers, Up: RX-Dependent 14278 142799.30.1 RX Options 14280----------------- 14281 14282The Renesas RX port of `as' has a few target specfic command line 14283options: 14284 14285`-m32bit-doubles' 14286 This option controls the ABI and indicates to use a 32-bit float 14287 ABI. It has no effect on the assembled instructions, but it does 14288 influence the behaviour of the `.double' pseudo-op. This is the 14289 default. 14290 14291`-m64bit-doubles' 14292 This option controls the ABI and indicates to use a 64-bit float 14293 ABI. It has no effect on the assembled instructions, but it does 14294 influence the behaviour of the `.double' pseudo-op. 14295 14296`-mbig-endian' 14297 This option controls the ABI and indicates to use a big-endian data 14298 ABI. It has no effect on the assembled instructions, but it does 14299 influence the behaviour of the `.short', `.hword', `.int', 14300 `.word', `.long', `.quad' and `.octa' pseudo-ops. 14301 14302`-mlittle-endian' 14303 This option controls the ABI and indicates to use a little-endian 14304 data ABI. It has no effect on the assembled instructions, but it 14305 does influence the behaviour of the `.short', `.hword', `.int', 14306 `.word', `.long', `.quad' and `.octa' pseudo-ops. This is the 14307 default. 14308 14309`-muse-conventional-section-names' 14310 This option controls the default names given to the code (.text), 14311 initialised data (.data) and uninitialised data sections (.bss). 14312 14313`-muse-renesas-section-names' 14314 This option controls the default names given to the code (.P), 14315 initialised data (.D_1) and uninitialised data sections (.B_1). 14316 This is the default. 14317 14318`-msmall-data-limit' 14319 This option tells the assembler that the small data limit feature 14320 of the RX port of GCC is being used. This results in the assembler 14321 generating an undefined reference to a symbol called __gp for use 14322 by the relocations that are needed to support the small data limit 14323 feature. This option is not enabled by default as it would 14324 otherwise pollute the symbol table. 14325 14326 14327 14328File: as.info, Node: RX-Modifiers, Next: RX-Directives, Prev: RX-Opts, Up: RX-Dependent 14329 143309.30.2 Symbolic Operand Modifiers 14331--------------------------------- 14332 14333The assembler supports several modifiers when using symbol addresses in 14334RX instruction operands. The general syntax is the following: 14335 14336 %modifier(symbol) 14337 14338`%gp' 14339 14340 14341File: as.info, Node: RX-Directives, Next: RX-Float, Prev: RX-Modifiers, Up: RX-Dependent 14342 143439.30.3 Assembler Directives 14344--------------------------- 14345 14346The RX version of `as' has the following specific assembler directives: 14347 14348`.3byte' 14349 Inserts a 3-byte value into the output file at the current 14350 location. 14351 14352 14353 14354File: as.info, Node: RX-Float, Prev: RX-Directives, Up: RX-Dependent 14355 143569.30.4 Floating Point 14357--------------------- 14358 14359The floating point formats generated by directives are these. 14360 14361`.float' 14362 `Single' precision (32-bit) floating point constants. 14363 14364`.double' 14365 If the `-m64bit-doubles' command line option has been specified 14366 then then `double' directive generates `double' precision (64-bit) 14367 floating point constants, otherwise it generates `single' 14368 precision (32-bit) floating point constants. To force the 14369 generation of 64-bit floating point constants used the `dc.d' 14370 directive instead. 14371 14372 14373 14374File: as.info, Node: S/390-Dependent, Next: SCORE-Dependent, Prev: RX-Dependent, Up: Machine Dependencies 14375 143769.31 IBM S/390 Dependent Features 14377================================= 14378 14379 The s390 version of `as' supports two architectures modes and seven 14380chip levels. The architecture modes are the Enterprise System 14381Architecture (ESA) and the newer z/Architecture mode. The chip levels 14382are g5, g6, z900, z990, z9-109, z9-ec, z10 and z196. 14383 14384* Menu: 14385 14386* s390 Options:: Command-line Options. 14387* s390 Characters:: Special Characters. 14388* s390 Syntax:: Assembler Instruction syntax. 14389* s390 Directives:: Assembler Directives. 14390* s390 Floating Point:: Floating Point. 14391 14392 14393File: as.info, Node: s390 Options, Next: s390 Characters, Up: S/390-Dependent 14394 143959.31.1 Options 14396-------------- 14397 14398The following table lists all available s390 specific options: 14399 14400`-m31 | -m64' 14401 Select 31- or 64-bit ABI implying a word size of 32- or 64-bit. 14402 14403 These options are only available with the ELF object file format, 14404 and require that the necessary BFD support has been included (on a 14405 31-bit platform you must add -enable-64-bit-bfd on the call to the 14406 configure script to enable 64-bit usage and use s390x as target 14407 platform). 14408 14409`-mesa | -mzarch' 14410 Select the architecture mode, either the Enterprise System 14411 Architecture (esa) mode or the z/Architecture mode (zarch). 14412 14413 The 64-bit instructions are only available with the z/Architecture 14414 mode. The combination of `-m64' and `-mesa' results in a warning 14415 message. 14416 14417`-march=CPU' 14418 This option specifies the target processor. The following 14419 processor names are recognized: `g5', `g6', `z900', `z990', 14420 `z9-109', `z9-ec', `z10' and `z196'. Assembling an instruction 14421 that is not supported on the target processor results in an error 14422 message. Do not specify `g5' or `g6' with `-mzarch'. 14423 14424`-mregnames' 14425 Allow symbolic names for registers. 14426 14427`-mno-regnames' 14428 Do not allow symbolic names for registers. 14429 14430`-mwarn-areg-zero' 14431 Warn whenever the operand for a base or index register has been 14432 specified but evaluates to zero. This can indicate the misuse of 14433 general purpose register 0 as an address register. 14434 14435 14436 14437File: as.info, Node: s390 Characters, Next: s390 Syntax, Prev: s390 Options, Up: S/390-Dependent 14438 144399.31.2 Special Characters 14440------------------------- 14441 14442`#' is the line comment character. 14443 14444 14445File: as.info, Node: s390 Syntax, Next: s390 Directives, Prev: s390 Characters, Up: S/390-Dependent 14446 144479.31.3 Instruction syntax 14448------------------------- 14449 14450The assembler syntax closely follows the syntax outlined in Enterprise 14451Systems Architecture/390 Principles of Operation (SA22-7201) and the 14452z/Architecture Principles of Operation (SA22-7832). 14453 14454 Each instruction has two major parts, the instruction mnemonic and 14455the instruction operands. The instruction format varies. 14456 14457* Menu: 14458 14459* s390 Register:: Register Naming 14460* s390 Mnemonics:: Instruction Mnemonics 14461* s390 Operands:: Instruction Operands 14462* s390 Formats:: Instruction Formats 14463* s390 Aliases:: Instruction Aliases 14464* s390 Operand Modifier:: Instruction Operand Modifier 14465* s390 Instruction Marker:: Instruction Marker 14466* s390 Literal Pool Entries:: Literal Pool Entries 14467 14468 14469File: as.info, Node: s390 Register, Next: s390 Mnemonics, Up: s390 Syntax 14470 144719.31.3.1 Register naming 14472........................ 14473 14474The `as' recognizes a number of predefined symbols for the various 14475processor registers. A register specification in one of the instruction 14476formats is an unsigned integer between 0 and 15. The specific 14477instruction and the position of the register in the instruction format 14478denotes the type of the register. The register symbols are prefixed with 14479`%': 14480 14481 %rN the 16 general purpose registers, 0 <= N <= 15 14482 %fN the 16 floating point registers, 0 <= N <= 15 14483 %aN the 16 access registers, 0 <= N <= 15 14484 %cN the 16 control registers, 0 <= N <= 15 14485 %lit an alias for the general purpose register %r13 14486 %sp an alias for the general purpose register %r15 14487 14488 14489File: as.info, Node: s390 Mnemonics, Next: s390 Operands, Prev: s390 Register, Up: s390 Syntax 14490 144919.31.3.2 Instruction Mnemonics 14492.............................. 14493 14494All instructions documented in the Principles of Operation are supported 14495with the mnemonic and order of operands as described. The instruction 14496mnemonic identifies the instruction format (*Note s390 Formats::) and 14497the specific operation code for the instruction. For example, the `lr' 14498mnemonic denotes the instruction format `RR' with the operation code 14499`0x18'. 14500 14501 The definition of the various mnemonics follows a scheme, where the 14502first character usually hint at the type of the instruction: 14503 14504 a add instruction, for example `al' for add logical 32-bit 14505 b branch instruction, for example `bc' for branch on condition 14506 c compare or convert instruction, for example `cr' for compare 14507 register 32-bit 14508 d divide instruction, for example `dlr' devide logical register 14509 64-bit to 32-bit 14510 i insert instruction, for example `ic' insert character 14511 l load instruction, for example `ltr' load and test register 14512 mv move instruction, for example `mvc' move character 14513 m multiply instruction, for example `mh' multiply halfword 14514 n and instruction, for example `ni' and immediate 14515 o or instruction, for example `oc' or character 14516 sla, sll shift left single instruction 14517 sra, srl shift right single instruction 14518 st store instruction, for example `stm' store multiple 14519 s subtract instruction, for example `slr' subtract 14520 logical 32-bit 14521 t test or translate instruction, of example `tm' test under mask 14522 x exclusive or instruction, for example `xc' exclusive or 14523 character 14524 14525 Certain characters at the end of the mnemonic may describe a property 14526of the instruction: 14527 14528 c the instruction uses a 8-bit character operand 14529 f the instruction extends a 32-bit operand to 64 bit 14530 g the operands are treated as 64-bit values 14531 h the operand uses a 16-bit halfword operand 14532 i the instruction uses an immediate operand 14533 l the instruction uses unsigned, logical operands 14534 m the instruction uses a mask or operates on multiple values 14535 r if r is the last character, the instruction operates on registers 14536 y the instruction uses 20-bit displacements 14537 14538 There are many exceptions to the scheme outlined in the above lists, 14539in particular for the priviledged instructions. For non-priviledged 14540instruction it works quite well, for example the instruction `clgfr' c: 14541compare instruction, l: unsigned operands, g: 64-bit operands, f: 32- 14542to 64-bit extension, r: register operands. The instruction compares an 1454364-bit value in a register with the zero extended 32-bit value from a 14544second register. For a complete list of all mnemonics see appendix B 14545in the Principles of Operation. 14546 14547 14548File: as.info, Node: s390 Operands, Next: s390 Formats, Prev: s390 Mnemonics, Up: s390 Syntax 14549 145509.31.3.3 Instruction Operands 14551............................. 14552 14553Instruction operands can be grouped into three classes, operands located 14554in registers, immediate operands, and operands in storage. 14555 14556 A register operand can be located in general, floating-point, access, 14557or control register. The register is identified by a four-bit field. 14558The field containing the register operand is called the R field. 14559 14560 Immediate operands are contained within the instruction and can have 145618, 16 or 32 bits. The field containing the immediate operand is called 14562the I field. Dependent on the instruction the I field is either signed 14563or unsigned. 14564 14565 A storage operand consists of an address and a length. The address 14566of a storage operands can be specified in any of these ways: 14567 14568 * The content of a single general R 14569 14570 * The sum of the content of a general register called the base 14571 register B plus the content of a displacement field D 14572 14573 * The sum of the contents of two general registers called the index 14574 register X and the base register B plus the content of a 14575 displacement field 14576 14577 * The sum of the current instruction address and a 32-bit signed 14578 immediate field multiplied by two. 14579 14580 The length of a storage operand can be: 14581 14582 * Implied by the instruction 14583 14584 * Specified by a bitmask 14585 14586 * Specified by a four-bit or eight-bit length field L 14587 14588 * Specified by the content of a general register 14589 14590 The notation for storage operand addresses formed from multiple 14591fields is as follows: 14592 14593`Dn(Bn)' 14594 the address for operand number n is formed from the content of 14595 general register Bn called the base register and the displacement 14596 field Dn. 14597 14598`Dn(Xn,Bn)' 14599 the address for operand number n is formed from the content of 14600 general register Xn called the index register, general register Bn 14601 called the base register and the displacement field Dn. 14602 14603`Dn(Ln,Bn)' 14604 the address for operand number n is formed from the content of 14605 general regiser Bn called the base register and the displacement 14606 field Dn. The length of the operand n is specified by the field 14607 Ln. 14608 14609 The base registers Bn and the index registers Xn of a storage 14610operand can be skipped. If Bn and Xn are skipped, a zero will be stored 14611to the operand field. The notation changes as follows: 14612 14613 full notation short notation 14614 ------------------------------------------ 14615 Dn(0,Bn) Dn(Bn) 14616 Dn(0,0) Dn 14617 Dn(0) Dn 14618 Dn(Ln,0) Dn(Ln) 14619 14620 14621File: as.info, Node: s390 Formats, Next: s390 Aliases, Prev: s390 Operands, Up: s390 Syntax 14622 146239.31.3.4 Instruction Formats 14624............................ 14625 14626The Principles of Operation manuals lists 26 instruction formats where 14627some of the formats have multiple variants. For the `.insn' pseudo 14628directive the assembler recognizes some of the formats. Typically, the 14629most general variant of the instruction format is used by the `.insn' 14630directive. 14631 14632 The following table lists the abbreviations used in the table of 14633instruction formats: 14634 14635 OpCode / OpCd Part of the op code. 14636 Bx Base register number for operand x. 14637 Dx Displacement for operand x. 14638 DLx Displacement lower 12 bits for operand x. 14639 DHx Displacement higher 8-bits for operand x. 14640 Rx Register number for operand x. 14641 Xx Index register number for operand x. 14642 Ix Signed immediate for operand x. 14643 Ux Unsigned immediate for operand x. 14644 14645 An instruction is two, four, or six bytes in length and must be 14646aligned on a 2 byte boundary. The first two bits of the instruction 14647specify the length of the instruction, 00 indicates a two byte 14648instruction, 01 and 10 indicates a four byte instruction, and 11 14649indicates a six byte instruction. 14650 14651 The following table lists the s390 instruction formats that are 14652available with the `.insn' pseudo directive: 14653 14654`E format' 14655 14656 +-------------+ 14657 | OpCode | 14658 +-------------+ 14659 0 15 14660 14661`RI format: <insn> R1,I2' 14662 14663 +--------+----+----+------------------+ 14664 | OpCode | R1 |OpCd| I2 | 14665 +--------+----+----+------------------+ 14666 0 8 12 16 31 14667 14668`RIE format: <insn> R1,R3,I2' 14669 14670 +--------+----+----+------------------+--------+--------+ 14671 | OpCode | R1 | R3 | I2 |////////| OpCode | 14672 +--------+----+----+------------------+--------+--------+ 14673 0 8 12 16 32 40 47 14674 14675`RIL format: <insn> R1,I2' 14676 14677 +--------+----+----+------------------------------------+ 14678 | OpCode | R1 |OpCd| I2 | 14679 +--------+----+----+------------------------------------+ 14680 0 8 12 16 47 14681 14682`RILU format: <insn> R1,U2' 14683 14684 +--------+----+----+------------------------------------+ 14685 | OpCode | R1 |OpCd| U2 | 14686 +--------+----+----+------------------------------------+ 14687 0 8 12 16 47 14688 14689`RIS format: <insn> R1,I2,M3,D4(B4)' 14690 14691 +--------+----+----+----+-------------+--------+--------+ 14692 | OpCode | R1 | M3 | B4 | D4 | I2 | Opcode | 14693 +--------+----+----+----+-------------+--------+--------+ 14694 0 8 12 16 20 32 36 47 14695 14696`RR format: <insn> R1,R2' 14697 14698 +--------+----+----+ 14699 | OpCode | R1 | R2 | 14700 +--------+----+----+ 14701 0 8 12 15 14702 14703`RRE format: <insn> R1,R2' 14704 14705 +------------------+--------+----+----+ 14706 | OpCode |////////| R1 | R2 | 14707 +------------------+--------+----+----+ 14708 0 16 24 28 31 14709 14710`RRF format: <insn> R1,R2,R3,M4' 14711 14712 +------------------+----+----+----+----+ 14713 | OpCode | R3 | M4 | R1 | R2 | 14714 +------------------+----+----+----+----+ 14715 0 16 20 24 28 31 14716 14717`RRS format: <insn> R1,R2,M3,D4(B4)' 14718 14719 +--------+----+----+----+-------------+----+----+--------+ 14720 | OpCode | R1 | R3 | B4 | D4 | M3 |////| OpCode | 14721 +--------+----+----+----+-------------+----+----+--------+ 14722 0 8 12 16 20 32 36 40 47 14723 14724`RS format: <insn> R1,R3,D2(B2)' 14725 14726 +--------+----+----+----+-------------+ 14727 | OpCode | R1 | R3 | B2 | D2 | 14728 +--------+----+----+----+-------------+ 14729 0 8 12 16 20 31 14730 14731`RSE format: <insn> R1,R3,D2(B2)' 14732 14733 +--------+----+----+----+-------------+--------+--------+ 14734 | OpCode | R1 | R3 | B2 | D2 |////////| OpCode | 14735 +--------+----+----+----+-------------+--------+--------+ 14736 0 8 12 16 20 32 40 47 14737 14738`RSI format: <insn> R1,R3,I2' 14739 14740 +--------+----+----+------------------------------------+ 14741 | OpCode | R1 | R3 | I2 | 14742 +--------+----+----+------------------------------------+ 14743 0 8 12 16 47 14744 14745`RSY format: <insn> R1,R3,D2(B2)' 14746 14747 +--------+----+----+----+-------------+--------+--------+ 14748 | OpCode | R1 | R3 | B2 | DL2 | DH2 | OpCode | 14749 +--------+----+----+----+-------------+--------+--------+ 14750 0 8 12 16 20 32 40 47 14751 14752`RX format: <insn> R1,D2(X2,B2)' 14753 14754 +--------+----+----+----+-------------+ 14755 | OpCode | R1 | X2 | B2 | D2 | 14756 +--------+----+----+----+-------------+ 14757 0 8 12 16 20 31 14758 14759`RXE format: <insn> R1,D2(X2,B2)' 14760 14761 +--------+----+----+----+-------------+--------+--------+ 14762 | OpCode | R1 | X2 | B2 | D2 |////////| OpCode | 14763 +--------+----+----+----+-------------+--------+--------+ 14764 0 8 12 16 20 32 40 47 14765 14766`RXF format: <insn> R1,R3,D2(X2,B2)' 14767 14768 +--------+----+----+----+-------------+----+---+--------+ 14769 | OpCode | R3 | X2 | B2 | D2 | R1 |///| OpCode | 14770 +--------+----+----+----+-------------+----+---+--------+ 14771 0 8 12 16 20 32 36 40 47 14772 14773`RXY format: <insn> R1,D2(X2,B2)' 14774 14775 +--------+----+----+----+-------------+--------+--------+ 14776 | OpCode | R1 | X2 | B2 | DL2 | DH2 | OpCode | 14777 +--------+----+----+----+-------------+--------+--------+ 14778 0 8 12 16 20 32 36 40 47 14779 14780`S format: <insn> D2(B2)' 14781 14782 +------------------+----+-------------+ 14783 | OpCode | B2 | D2 | 14784 +------------------+----+-------------+ 14785 0 16 20 31 14786 14787`SI format: <insn> D1(B1),I2' 14788 14789 +--------+---------+----+-------------+ 14790 | OpCode | I2 | B1 | D1 | 14791 +--------+---------+----+-------------+ 14792 0 8 16 20 31 14793 14794`SIY format: <insn> D1(B1),U2' 14795 14796 +--------+---------+----+-------------+--------+--------+ 14797 | OpCode | I2 | B1 | DL1 | DH1 | OpCode | 14798 +--------+---------+----+-------------+--------+--------+ 14799 0 8 16 20 32 36 40 47 14800 14801`SIL format: <insn> D1(B1),I2' 14802 14803 +------------------+----+-------------+-----------------+ 14804 | OpCode | B1 | D1 | I2 | 14805 +------------------+----+-------------+-----------------+ 14806 0 16 20 32 47 14807 14808`SS format: <insn> D1(R1,B1),D2(B3),R3' 14809 14810 +--------+----+----+----+-------------+----+------------+ 14811 | OpCode | R1 | R3 | B1 | D1 | B2 | D2 | 14812 +--------+----+----+----+-------------+----+------------+ 14813 0 8 12 16 20 32 36 47 14814 14815`SSE format: <insn> D1(B1),D2(B2)' 14816 14817 +------------------+----+-------------+----+------------+ 14818 | OpCode | B1 | D1 | B2 | D2 | 14819 +------------------+----+-------------+----+------------+ 14820 0 8 12 16 20 32 36 47 14821 14822`SSF format: <insn> D1(B1),D2(B2),R3' 14823 14824 +--------+----+----+----+-------------+----+------------+ 14825 | OpCode | R3 |OpCd| B1 | D1 | B2 | D2 | 14826 +--------+----+----+----+-------------+----+------------+ 14827 0 8 12 16 20 32 36 47 14828 14829 14830 For the complete list of all instruction format variants see the 14831Principles of Operation manuals. 14832 14833 14834File: as.info, Node: s390 Aliases, Next: s390 Operand Modifier, Prev: s390 Formats, Up: s390 Syntax 14835 148369.31.3.5 Instruction Aliases 14837............................ 14838 14839A specific bit pattern can have multiple mnemonics, for example the bit 14840pattern `0xa7000000' has the mnemonics `tmh' and `tmlh'. In addition, 14841there are a number of mnemonics recognized by `as' that are not present 14842in the Principles of Operation. These are the short forms of the 14843branch instructions, where the condition code mask operand is encoded 14844in the mnemonic. This is relevant for the branch instructions, the 14845compare and branch instructions, and the compare and trap instructions. 14846 14847 For the branch instructions there are 20 condition code strings that 14848can be used as part of the mnemonic in place of a mask operand in the 14849instruction format: 14850 14851 instruction short form 14852 ------------------------------------------ 14853 bcr M1,R2 b<m>r R2 14854 bc M1,D2(X2,B2) b<m> D2(X2,B2) 14855 brc M1,I2 j<m> I2 14856 brcl M1,I2 jg<m> I2 14857 14858 In the mnemonic for a branch instruction the condition code string 14859<m> can be any of the following: 14860 14861 o jump on overflow / if ones 14862 h jump on A high 14863 p jump on plus 14864 nle jump on not low or equal 14865 l jump on A low 14866 m jump on minus 14867 nhe jump on not high or equal 14868 lh jump on low or high 14869 ne jump on A not equal B 14870 nz jump on not zero / if not zeros 14871 e jump on A equal B 14872 z jump on zero / if zeroes 14873 nlh jump on not low or high 14874 he jump on high or equal 14875 nl jump on A not low 14876 nm jump on not minus / if not mixed 14877 le jump on low or equal 14878 nh jump on A not high 14879 np jump on not plus 14880 no jump on not overflow / if not ones 14881 14882 For the compare and branch, and compare and trap instructions there 14883are 12 condition code strings that can be used as part of the mnemonic 14884in place of a mask operand in the instruction format: 14885 14886 instruction short form 14887 -------------------------------------------------------- 14888 crb R1,R2,M3,D4(B4) crb<m> R1,R2,D4(B4) 14889 cgrb R1,R2,M3,D4(B4) cgrb<m> R1,R2,D4(B4) 14890 crj R1,R2,M3,I4 crj<m> R1,R2,I4 14891 cgrj R1,R2,M3,I4 cgrj<m> R1,R2,I4 14892 cib R1,I2,M3,D4(B4) cib<m> R1,I2,D4(B4) 14893 cgib R1,I2,M3,D4(B4) cgib<m> R1,I2,D4(B4) 14894 cij R1,I2,M3,I4 cij<m> R1,I2,I4 14895 cgij R1,I2,M3,I4 cgij<m> R1,I2,I4 14896 crt R1,R2,M3 crt<m> R1,R2 14897 cgrt R1,R2,M3 cgrt<m> R1,R2 14898 cit R1,I2,M3 cit<m> R1,I2 14899 cgit R1,I2,M3 cgit<m> R1,I2 14900 clrb R1,R2,M3,D4(B4) clrb<m> R1,R2,D4(B4) 14901 clgrb R1,R2,M3,D4(B4) clgrb<m> R1,R2,D4(B4) 14902 clrj R1,R2,M3,I4 clrj<m> R1,R2,I4 14903 clgrj R1,R2,M3,I4 clgrj<m> R1,R2,I4 14904 clib R1,I2,M3,D4(B4) clib<m> R1,I2,D4(B4) 14905 clgib R1,I2,M3,D4(B4) clgib<m> R1,I2,D4(B4) 14906 clij R1,I2,M3,I4 clij<m> R1,I2,I4 14907 clgij R1,I2,M3,I4 clgij<m> R1,I2,I4 14908 clrt R1,R2,M3 clrt<m> R1,R2 14909 clgrt R1,R2,M3 clgrt<m> R1,R2 14910 clfit R1,I2,M3 clfit<m> R1,I2 14911 clgit R1,I2,M3 clgit<m> R1,I2 14912 14913 In the mnemonic for a compare and branch and compare and trap 14914instruction the condition code string <m> can be any of the following: 14915 14916 h jump on A high 14917 nle jump on not low or equal 14918 l jump on A low 14919 nhe jump on not high or equal 14920 ne jump on A not equal B 14921 lh jump on low or high 14922 e jump on A equal B 14923 nlh jump on not low or high 14924 nl jump on A not low 14925 he jump on high or equal 14926 nh jump on A not high 14927 le jump on low or equal 14928 14929 14930File: as.info, Node: s390 Operand Modifier, Next: s390 Instruction Marker, Prev: s390 Aliases, Up: s390 Syntax 14931 149329.31.3.6 Instruction Operand Modifier 14933..................................... 14934 14935If a symbol modifier is attached to a symbol in an expression for an 14936instruction operand field, the symbol term is replaced with a reference 14937to an object in the global offset table (GOT) or the procedure linkage 14938table (PLT). The following expressions are allowed: `symbol@modifier + 14939constant', `symbol@modifier + label + constant', and `symbol@modifier - 14940label + constant'. The term `symbol' is the symbol that will be 14941entered into the GOT or PLT, `label' is a local label, and `constant' 14942is an arbitrary expression that the assembler can evaluate to a 14943constant value. 14944 14945 The term `(symbol + constant1)@modifier +/- label + constant2' is 14946also accepted but a warning message is printed and the term is 14947converted to `symbol@modifier +/- label + constant1 + constant2'. 14948 14949`@got' 14950`@got12' 14951 The @got modifier can be used for displacement fields, 16-bit 14952 immediate fields and 32-bit pc-relative immediate fields. The 14953 @got12 modifier is synonym to @got. The symbol is added to the 14954 GOT. For displacement fields and 16-bit immediate fields the 14955 symbol term is replaced with the offset from the start of the GOT 14956 to the GOT slot for the symbol. For a 32-bit pc-relative field 14957 the pc-relative offset to the GOT slot from the current 14958 instruction address is used. 14959 14960`@gotent' 14961 The @gotent modifier can be used for 32-bit pc-relative immediate 14962 fields. The symbol is added to the GOT and the symbol term is 14963 replaced with the pc-relative offset from the current instruction 14964 to the GOT slot for the symbol. 14965 14966`@gotoff' 14967 The @gotoff modifier can be used for 16-bit immediate fields. The 14968 symbol term is replaced with the offset from the start of the GOT 14969 to the address of the symbol. 14970 14971`@gotplt' 14972 The @gotplt modifier can be used for displacement fields, 16-bit 14973 immediate fields, and 32-bit pc-relative immediate fields. A 14974 procedure linkage table entry is generated for the symbol and a 14975 jump slot for the symbol is added to the GOT. For displacement 14976 fields and 16-bit immediate fields the symbol term is replaced 14977 with the offset from the start of the GOT to the jump slot for the 14978 symbol. For a 32-bit pc-relative field the pc-relative offset to 14979 the jump slot from the current instruction address is used. 14980 14981`@plt' 14982 The @plt modifier can be used for 16-bit and 32-bit pc-relative 14983 immediate fields. A procedure linkage table entry is generated for 14984 the symbol. The symbol term is replaced with the relative offset 14985 from the current instruction to the PLT entry for the symbol. 14986 14987`@pltoff' 14988 The @pltoff modifier can be used for 16-bit immediate fields. The 14989 symbol term is replaced with the offset from the start of the PLT 14990 to the address of the symbol. 14991 14992`@gotntpoff' 14993 The @gotntpoff modifier can be used for displacement fields. The 14994 symbol is added to the static TLS block and the negated offset to 14995 the symbol in the static TLS block is added to the GOT. The symbol 14996 term is replaced with the offset to the GOT slot from the start of 14997 the GOT. 14998 14999`@indntpoff' 15000 The @indntpoff modifier can be used for 32-bit pc-relative 15001 immediate fields. The symbol is added to the static TLS block and 15002 the negated offset to the symbol in the static TLS block is added 15003 to the GOT. The symbol term is replaced with the pc-relative 15004 offset to the GOT slot from the current instruction address. 15005 15006 For more information about the thread local storage modifiers 15007`gotntpoff' and `indntpoff' see the ELF extension documentation `ELF 15008Handling For Thread-Local Storage'. 15009 15010 15011File: as.info, Node: s390 Instruction Marker, Next: s390 Literal Pool Entries, Prev: s390 Operand Modifier, Up: s390 Syntax 15012 150139.31.3.7 Instruction Marker 15014........................... 15015 15016The thread local storage instruction markers are used by the linker to 15017perform code optimization. 15018 15019`:tls_load' 15020 The :tls_load marker is used to flag the load instruction in the 15021 initial exec TLS model that retrieves the offset from the thread 15022 pointer to a thread local storage variable from the GOT. 15023 15024`:tls_gdcall' 15025 The :tls_gdcall marker is used to flag the branch-and-save 15026 instruction to the __tls_get_offset function in the global dynamic 15027 TLS model. 15028 15029`:tls_ldcall' 15030 The :tls_ldcall marker is used to flag the branch-and-save 15031 instruction to the __tls_get_offset function in the local dynamic 15032 TLS model. 15033 15034 For more information about the thread local storage instruction 15035marker and the linker optimizations see the ELF extension documentation 15036`ELF Handling For Thread-Local Storage'. 15037 15038 15039File: as.info, Node: s390 Literal Pool Entries, Prev: s390 Instruction Marker, Up: s390 Syntax 15040 150419.31.3.8 Literal Pool Entries 15042............................. 15043 15044A literal pool is a collection of values. To access the values a pointer 15045to the literal pool is loaded to a register, the literal pool register. 15046Usually, register %r13 is used as the literal pool register (*Note s390 15047Register::). Literal pool entries are created by adding the suffix 15048:lit1, :lit2, :lit4, or :lit8 to the end of an expression for an 15049instruction operand. The expression is added to the literal pool and the 15050operand is replaced with the offset to the literal in the literal pool. 15051 15052`:lit1' 15053 The literal pool entry is created as an 8-bit value. An operand 15054 modifier must not be used for the original expression. 15055 15056`:lit2' 15057 The literal pool entry is created as a 16 bit value. The operand 15058 modifier @got may be used in the original expression. The term 15059 `x@got:lit2' will put the got offset for the global symbol x to 15060 the literal pool as 16 bit value. 15061 15062`:lit4' 15063 The literal pool entry is created as a 32-bit value. The operand 15064 modifier @got and @plt may be used in the original expression. The 15065 term `x@got:lit4' will put the got offset for the global symbol x 15066 to the literal pool as a 32-bit value. The term `x@plt:lit4' will 15067 put the plt offset for the global symbol x to the literal pool as 15068 a 32-bit value. 15069 15070`:lit8' 15071 The literal pool entry is created as a 64-bit value. The operand 15072 modifier @got and @plt may be used in the original expression. The 15073 term `x@got:lit8' will put the got offset for the global symbol x 15074 to the literal pool as a 64-bit value. The term `x@plt:lit8' will 15075 put the plt offset for the global symbol x to the literal pool as 15076 a 64-bit value. 15077 15078 The assembler directive `.ltorg' is used to emit all literal pool 15079entries to the current position. 15080 15081 15082File: as.info, Node: s390 Directives, Next: s390 Floating Point, Prev: s390 Syntax, Up: S/390-Dependent 15083 150849.31.4 Assembler Directives 15085--------------------------- 15086 15087`as' for s390 supports all of the standard ELF assembler directives as 15088outlined in the main part of this document. Some directives have been 15089extended and there are some additional directives, which are only 15090available for the s390 `as'. 15091 15092`.insn' 15093 This directive permits the numeric representation of an 15094 instructions and makes the assembler insert the operands according 15095 to one of the instructions formats for `.insn' (*Note s390 15096 Formats::). For example, the instruction `l %r1,24(%r15)' could 15097 be written as `.insn rx,0x58000000,%r1,24(%r15)'. 15098 15099`.short' 15100`.long' 15101`.quad' 15102 This directive places one or more 16-bit (.short), 32-bit (.long), 15103 or 64-bit (.quad) values into the current section. If an ELF or 15104 TLS modifier is used only the following expressions are allowed: 15105 `symbol@modifier + constant', `symbol@modifier + label + 15106 constant', and `symbol@modifier - label + constant'. The 15107 following modifiers are available: 15108 `@got' 15109 `@got12' 15110 The @got modifier can be used for .short, .long and .quad. 15111 The @got12 modifier is synonym to @got. The symbol is added 15112 to the GOT. The symbol term is replaced with offset from the 15113 start of the GOT to the GOT slot for the symbol. 15114 15115 `@gotoff' 15116 The @gotoff modifier can be used for .short, .long and .quad. 15117 The symbol term is replaced with the offset from the start of 15118 the GOT to the address of the symbol. 15119 15120 `@gotplt' 15121 The @gotplt modifier can be used for .long and .quad. A 15122 procedure linkage table entry is generated for the symbol and 15123 a jump slot for the symbol is added to the GOT. The symbol 15124 term is replaced with the offset from the start of the GOT to 15125 the jump slot for the symbol. 15126 15127 `@plt' 15128 The @plt modifier can be used for .long and .quad. A 15129 procedure linkage table entry us generated for the symbol. 15130 The symbol term is replaced with the address of the PLT entry 15131 for the symbol. 15132 15133 `@pltoff' 15134 The @pltoff modifier can be used for .short, .long and .quad. 15135 The symbol term is replaced with the offset from the start of 15136 the PLT to the address of the symbol. 15137 15138 `@tlsgd' 15139 `@tlsldm' 15140 The @tlsgd and @tlsldm modifier can be used for .long and 15141 .quad. A tls_index structure for the symbol is added to the 15142 GOT. The symbol term is replaced with the offset from the 15143 start of the GOT to the tls_index structure. 15144 15145 `@gotntpoff' 15146 `@indntpoff' 15147 The @gotntpoff and @indntpoff modifier can be used for .long 15148 and .quad. The symbol is added to the static TLS block and 15149 the negated offset to the symbol in the static TLS block is 15150 added to the GOT. For @gotntpoff the symbol term is replaced 15151 with the offset from the start of the GOT to the GOT slot, 15152 for @indntpoff the symbol term is replaced with the address 15153 of the GOT slot. 15154 15155 `@dtpoff' 15156 The @dtpoff modifier can be used for .long and .quad. The 15157 symbol term is replaced with the offset of the symbol 15158 relative to the start of the TLS block it is contained in. 15159 15160 `@ntpoff' 15161 The @ntpoff modifier can be used for .long and .quad. The 15162 symbol term is replaced with the offset of the symbol 15163 relative to the TCB pointer. 15164 15165 For more information about the thread local storage modifiers see 15166 the ELF extension documentation `ELF Handling For Thread-Local 15167 Storage'. 15168 15169`.ltorg' 15170 This directive causes the current contents of the literal pool to 15171 be dumped to the current location (*Note s390 Literal Pool 15172 Entries::). 15173 15174`.machine string' 15175 This directive allows you to change the machine for which code is 15176 generated. `string' may be any of the `-march=' selection options 15177 (without the -march=), `push', or `pop'. `.machine push' saves 15178 the currently selected cpu, which may be restored with `.machine 15179 pop'. Be aware that the cpu string has to be put into double 15180 quotes in case it contains characters not appropriate for 15181 identifiers. So you have to write `"z9-109"' instead of just 15182 `z9-109'. 15183 15184 15185File: as.info, Node: s390 Floating Point, Prev: s390 Directives, Up: S/390-Dependent 15186 151879.31.5 Floating Point 15188--------------------- 15189 15190The assembler recognizes both the IEEE floating-point instruction and 15191the hexadecimal floating-point instructions. The floating-point 15192constructors `.float', `.single', and `.double' always emit the IEEE 15193format. To assemble hexadecimal floating-point constants the `.long' 15194and `.quad' directives must be used. 15195 15196 15197File: as.info, Node: SCORE-Dependent, Next: Sparc-Dependent, Prev: S/390-Dependent, Up: Machine Dependencies 15198 151999.32 SCORE Dependent Features 15200============================= 15201 15202* Menu: 15203 15204* SCORE-Opts:: Assembler options 15205* SCORE-Pseudo:: SCORE Assembler Directives 15206 15207 15208File: as.info, Node: SCORE-Opts, Next: SCORE-Pseudo, Up: SCORE-Dependent 15209 152109.32.1 Options 15211-------------- 15212 15213The following table lists all available SCORE options. 15214 15215`-G NUM' 15216 This option sets the largest size of an object that can be 15217 referenced implicitly with the `gp' register. The default value is 15218 8. 15219 15220`-EB' 15221 Assemble code for a big-endian cpu 15222 15223`-EL' 15224 Assemble code for a little-endian cpu 15225 15226`-FIXDD' 15227 Assemble code for fix data dependency 15228 15229`-NWARN' 15230 Assemble code for no warning message for fix data dependency 15231 15232`-SCORE5' 15233 Assemble code for target is SCORE5 15234 15235`-SCORE5U' 15236 Assemble code for target is SCORE5U 15237 15238`-SCORE7' 15239 Assemble code for target is SCORE7, this is default setting 15240 15241`-SCORE3' 15242 Assemble code for target is SCORE3 15243 15244`-march=score7' 15245 Assemble code for target is SCORE7, this is default setting 15246 15247`-march=score3' 15248 Assemble code for target is SCORE3 15249 15250`-USE_R1' 15251 Assemble code for no warning message when using temp register r1 15252 15253`-KPIC' 15254 Generate code for PIC. This option tells the assembler to generate 15255 score position-independent macro expansions. It also tells the 15256 assembler to mark the output file as PIC. 15257 15258`-O0' 15259 Assembler will not perform any optimizations 15260 15261`-V' 15262 Sunplus release version 15263 15264 15265 15266File: as.info, Node: SCORE-Pseudo, Prev: SCORE-Opts, Up: SCORE-Dependent 15267 152689.32.2 SCORE Assembler Directives 15269--------------------------------- 15270 15271A number of assembler directives are available for SCORE. The 15272following table is far from complete. 15273 15274`.set nwarn' 15275 Let the assembler not to generate warnings if the source machine 15276 language instructions happen data dependency. 15277 15278`.set fixdd' 15279 Let the assembler to insert bubbles (32 bit nop instruction / 16 15280 bit nop! Instruction) if the source machine language instructions 15281 happen data dependency. 15282 15283`.set nofixdd' 15284 Let the assembler to generate warnings if the source machine 15285 language instructions happen data dependency. (Default) 15286 15287`.set r1' 15288 Let the assembler not to generate warnings if the source program 15289 uses r1. allow user to use r1 15290 15291`set nor1' 15292 Let the assembler to generate warnings if the source program uses 15293 r1. (Default) 15294 15295`.sdata' 15296 Tell the assembler to add subsequent data into the sdata section 15297 15298`.rdata' 15299 Tell the assembler to add subsequent data into the rdata section 15300 15301`.frame "frame-register", "offset", "return-pc-register"' 15302 Describe a stack frame. "frame-register" is the frame register, 15303 "offset" is the distance from the frame register to the virtual 15304 frame pointer, "return-pc-register" is the return program register. 15305 You must use ".ent" before ".frame" and only one ".frame" can be 15306 used per ".ent". 15307 15308`.mask "bitmask", "frameoffset"' 15309 Indicate which of the integer registers are saved in the current 15310 function's stack frame, this is for the debugger to explain the 15311 frame chain. 15312 15313`.ent "proc-name"' 15314 Set the beginning of the procedure "proc_name". Use this directive 15315 when you want to generate information for the debugger. 15316 15317`.end proc-name' 15318 Set the end of a procedure. Use this directive to generate 15319 information for the debugger. 15320 15321`.bss' 15322 Switch the destination of following statements into the bss 15323 section, which is used for data that is uninitialized anywhere. 15324 15325 15326 15327File: as.info, Node: SH-Dependent, Next: SH64-Dependent, Prev: MSP430-Dependent, Up: Machine Dependencies 15328 153299.33 Renesas / SuperH SH Dependent Features 15330=========================================== 15331 15332* Menu: 15333 15334* SH Options:: Options 15335* SH Syntax:: Syntax 15336* SH Floating Point:: Floating Point 15337* SH Directives:: SH Machine Directives 15338* SH Opcodes:: Opcodes 15339 15340 15341File: as.info, Node: SH Options, Next: SH Syntax, Up: SH-Dependent 15342 153439.33.1 Options 15344-------------- 15345 15346`as' has following command-line options for the Renesas (formerly 15347Hitachi) / SuperH SH family. 15348 15349`--little' 15350 Generate little endian code. 15351 15352`--big' 15353 Generate big endian code. 15354 15355`--relax' 15356 Alter jump instructions for long displacements. 15357 15358`--small' 15359 Align sections to 4 byte boundaries, not 16. 15360 15361`--dsp' 15362 Enable sh-dsp insns, and disable sh3e / sh4 insns. 15363 15364`--renesas' 15365 Disable optimization with section symbol for compatibility with 15366 Renesas assembler. 15367 15368`--allow-reg-prefix' 15369 Allow '$' as a register name prefix. 15370 15371`--fdpic' 15372 Generate an FDPIC object file. 15373 15374`--isa=sh4 | sh4a' 15375 Specify the sh4 or sh4a instruction set. 15376 15377`--isa=dsp' 15378 Enable sh-dsp insns, and disable sh3e / sh4 insns. 15379 15380`--isa=fp' 15381 Enable sh2e, sh3e, sh4, and sh4a insn sets. 15382 15383`--isa=all' 15384 Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets. 15385 15386`-h-tick-hex' 15387 Support H'00 style hex constants in addition to 0x00 style. 15388 15389 15390 15391File: as.info, Node: SH Syntax, Next: SH Floating Point, Prev: SH Options, Up: SH-Dependent 15392 153939.33.2 Syntax 15394------------- 15395 15396* Menu: 15397 15398* SH-Chars:: Special Characters 15399* SH-Regs:: Register Names 15400* SH-Addressing:: Addressing Modes 15401 15402 15403File: as.info, Node: SH-Chars, Next: SH-Regs, Up: SH Syntax 15404 154059.33.2.1 Special Characters 15406........................... 15407 15408`!' is the line comment character. 15409 15410 You can use `;' instead of a newline to separate statements. 15411 15412 Since `$' has no special meaning, you may use it in symbol names. 15413 15414 15415File: as.info, Node: SH-Regs, Next: SH-Addressing, Prev: SH-Chars, Up: SH Syntax 15416 154179.33.2.2 Register Names 15418....................... 15419 15420You can use the predefined symbols `r0', `r1', `r2', `r3', `r4', `r5', 15421`r6', `r7', `r8', `r9', `r10', `r11', `r12', `r13', `r14', and `r15' to 15422refer to the SH registers. 15423 15424 The SH also has these control registers: 15425 15426`pr' 15427 procedure register (holds return address) 15428 15429`pc' 15430 program counter 15431 15432`mach' 15433`macl' 15434 high and low multiply accumulator registers 15435 15436`sr' 15437 status register 15438 15439`gbr' 15440 global base register 15441 15442`vbr' 15443 vector base register (for interrupt vectors) 15444 15445 15446File: as.info, Node: SH-Addressing, Prev: SH-Regs, Up: SH Syntax 15447 154489.33.2.3 Addressing Modes 15449......................... 15450 15451`as' understands the following addressing modes for the SH. `RN' in 15452the following refers to any of the numbered registers, but _not_ the 15453control registers. 15454 15455`RN' 15456 Register direct 15457 15458`@RN' 15459 Register indirect 15460 15461`@-RN' 15462 Register indirect with pre-decrement 15463 15464`@RN+' 15465 Register indirect with post-increment 15466 15467`@(DISP, RN)' 15468 Register indirect with displacement 15469 15470`@(R0, RN)' 15471 Register indexed 15472 15473`@(DISP, GBR)' 15474 `GBR' offset 15475 15476`@(R0, GBR)' 15477 GBR indexed 15478 15479`ADDR' 15480`@(DISP, PC)' 15481 PC relative address (for branch or for addressing memory). The 15482 `as' implementation allows you to use the simpler form ADDR 15483 anywhere a PC relative address is called for; the alternate form 15484 is supported for compatibility with other assemblers. 15485 15486`#IMM' 15487 Immediate data 15488 15489 15490File: as.info, Node: SH Floating Point, Next: SH Directives, Prev: SH Syntax, Up: SH-Dependent 15491 154929.33.3 Floating Point 15493--------------------- 15494 15495SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other 15496SH groups can use `.float' directive to generate IEEE floating-point 15497numbers. 15498 15499 SH2E and SH3E support single-precision floating point calculations as 15500well as entirely PCAPI compatible emulation of double-precision 15501floating point calculations. SH2E and SH3E instructions are a subset of 15502the floating point calculations conforming to the IEEE754 standard. 15503 15504 In addition to single-precision and double-precision floating-point 15505operation capability, the on-chip FPU of SH4 has a 128-bit graphic 15506engine that enables 32-bit floating-point data to be processed 128 bits 15507at a time. It also supports 4 * 4 array operations and inner product 15508operations. Also, a superscalar architecture is employed that enables 15509simultaneous execution of two instructions (including FPU 15510instructions), providing performance of up to twice that of 15511conventional architectures at the same frequency. 15512 15513 15514File: as.info, Node: SH Directives, Next: SH Opcodes, Prev: SH Floating Point, Up: SH-Dependent 15515 155169.33.4 SH Machine Directives 15517---------------------------- 15518 15519`uaword' 15520`ualong' 15521 `as' will issue a warning when a misaligned `.word' or `.long' 15522 directive is used. You may use `.uaword' or `.ualong' to indicate 15523 that the value is intentionally misaligned. 15524 15525 15526File: as.info, Node: SH Opcodes, Prev: SH Directives, Up: SH-Dependent 15527 155289.33.5 Opcodes 15529-------------- 15530 15531For detailed information on the SH machine instruction set, see 15532`SH-Microcomputer User's Manual' (Renesas) or `SH-4 32-bit CPU Core 15533Architecture' (SuperH) and `SuperH (SH) 64-Bit RISC Series' (SuperH). 15534 15535 `as' implements all the standard SH opcodes. No additional 15536pseudo-instructions are needed on this family. Note, however, that 15537because `as' supports a simpler form of PC-relative addressing, you may 15538simply write (for example) 15539 15540 mov.l bar,r0 15541 15542where other assemblers might require an explicit displacement to `bar' 15543from the program counter: 15544 15545 mov.l @(DISP, PC) 15546 15547 Here is a summary of SH opcodes: 15548 15549 Legend: 15550 Rn a numbered register 15551 Rm another numbered register 15552 #imm immediate data 15553 disp displacement 15554 disp8 8-bit displacement 15555 disp12 12-bit displacement 15556 15557 add #imm,Rn lds.l @Rn+,PR 15558 add Rm,Rn mac.w @Rm+,@Rn+ 15559 addc Rm,Rn mov #imm,Rn 15560 addv Rm,Rn mov Rm,Rn 15561 and #imm,R0 mov.b Rm,@(R0,Rn) 15562 and Rm,Rn mov.b Rm,@-Rn 15563 and.b #imm,@(R0,GBR) mov.b Rm,@Rn 15564 bf disp8 mov.b @(disp,Rm),R0 15565 bra disp12 mov.b @(disp,GBR),R0 15566 bsr disp12 mov.b @(R0,Rm),Rn 15567 bt disp8 mov.b @Rm+,Rn 15568 clrmac mov.b @Rm,Rn 15569 clrt mov.b R0,@(disp,Rm) 15570 cmp/eq #imm,R0 mov.b R0,@(disp,GBR) 15571 cmp/eq Rm,Rn mov.l Rm,@(disp,Rn) 15572 cmp/ge Rm,Rn mov.l Rm,@(R0,Rn) 15573 cmp/gt Rm,Rn mov.l Rm,@-Rn 15574 cmp/hi Rm,Rn mov.l Rm,@Rn 15575 cmp/hs Rm,Rn mov.l @(disp,Rn),Rm 15576 cmp/pl Rn mov.l @(disp,GBR),R0 15577 cmp/pz Rn mov.l @(disp,PC),Rn 15578 cmp/str Rm,Rn mov.l @(R0,Rm),Rn 15579 div0s Rm,Rn mov.l @Rm+,Rn 15580 div0u mov.l @Rm,Rn 15581 div1 Rm,Rn mov.l R0,@(disp,GBR) 15582 exts.b Rm,Rn mov.w Rm,@(R0,Rn) 15583 exts.w Rm,Rn mov.w Rm,@-Rn 15584 extu.b Rm,Rn mov.w Rm,@Rn 15585 extu.w Rm,Rn mov.w @(disp,Rm),R0 15586 jmp @Rn mov.w @(disp,GBR),R0 15587 jsr @Rn mov.w @(disp,PC),Rn 15588 ldc Rn,GBR mov.w @(R0,Rm),Rn 15589 ldc Rn,SR mov.w @Rm+,Rn 15590 ldc Rn,VBR mov.w @Rm,Rn 15591 ldc.l @Rn+,GBR mov.w R0,@(disp,Rm) 15592 ldc.l @Rn+,SR mov.w R0,@(disp,GBR) 15593 ldc.l @Rn+,VBR mova @(disp,PC),R0 15594 lds Rn,MACH movt Rn 15595 lds Rn,MACL muls Rm,Rn 15596 lds Rn,PR mulu Rm,Rn 15597 lds.l @Rn+,MACH neg Rm,Rn 15598 lds.l @Rn+,MACL negc Rm,Rn 15599 15600 nop stc VBR,Rn 15601 not Rm,Rn stc.l GBR,@-Rn 15602 or #imm,R0 stc.l SR,@-Rn 15603 or Rm,Rn stc.l VBR,@-Rn 15604 or.b #imm,@(R0,GBR) sts MACH,Rn 15605 rotcl Rn sts MACL,Rn 15606 rotcr Rn sts PR,Rn 15607 rotl Rn sts.l MACH,@-Rn 15608 rotr Rn sts.l MACL,@-Rn 15609 rte sts.l PR,@-Rn 15610 rts sub Rm,Rn 15611 sett subc Rm,Rn 15612 shal Rn subv Rm,Rn 15613 shar Rn swap.b Rm,Rn 15614 shll Rn swap.w Rm,Rn 15615 shll16 Rn tas.b @Rn 15616 shll2 Rn trapa #imm 15617 shll8 Rn tst #imm,R0 15618 shlr Rn tst Rm,Rn 15619 shlr16 Rn tst.b #imm,@(R0,GBR) 15620 shlr2 Rn xor #imm,R0 15621 shlr8 Rn xor Rm,Rn 15622 sleep xor.b #imm,@(R0,GBR) 15623 stc GBR,Rn xtrct Rm,Rn 15624 stc SR,Rn 15625 15626 15627File: as.info, Node: SH64-Dependent, Next: PDP-11-Dependent, Prev: SH-Dependent, Up: Machine Dependencies 15628 156299.34 SuperH SH64 Dependent Features 15630=================================== 15631 15632* Menu: 15633 15634* SH64 Options:: Options 15635* SH64 Syntax:: Syntax 15636* SH64 Directives:: SH64 Machine Directives 15637* SH64 Opcodes:: Opcodes 15638 15639 15640File: as.info, Node: SH64 Options, Next: SH64 Syntax, Up: SH64-Dependent 15641 156429.34.1 Options 15643-------------- 15644 15645`-isa=sh4 | sh4a' 15646 Specify the sh4 or sh4a instruction set. 15647 15648`-isa=dsp' 15649 Enable sh-dsp insns, and disable sh3e / sh4 insns. 15650 15651`-isa=fp' 15652 Enable sh2e, sh3e, sh4, and sh4a insn sets. 15653 15654`-isa=all' 15655 Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets. 15656 15657`-isa=shmedia | -isa=shcompact' 15658 Specify the default instruction set. `SHmedia' specifies the 15659 32-bit opcodes, and `SHcompact' specifies the 16-bit opcodes 15660 compatible with previous SH families. The default depends on the 15661 ABI selected; the default for the 64-bit ABI is SHmedia, and the 15662 default for the 32-bit ABI is SHcompact. If neither the ABI nor 15663 the ISA is specified, the default is 32-bit SHcompact. 15664 15665 Note that the `.mode' pseudo-op is not permitted if the ISA is not 15666 specified on the command line. 15667 15668`-abi=32 | -abi=64' 15669 Specify the default ABI. If the ISA is specified and the ABI is 15670 not, the default ABI depends on the ISA, with SHmedia defaulting 15671 to 64-bit and SHcompact defaulting to 32-bit. 15672 15673 Note that the `.abi' pseudo-op is not permitted if the ABI is not 15674 specified on the command line. When the ABI is specified on the 15675 command line, any `.abi' pseudo-ops in the source must match it. 15676 15677`-shcompact-const-crange' 15678 Emit code-range descriptors for constants in SHcompact code 15679 sections. 15680 15681`-no-mix' 15682 Disallow SHmedia code in the same section as constants and 15683 SHcompact code. 15684 15685`-no-expand' 15686 Do not expand MOVI, PT, PTA or PTB instructions. 15687 15688`-expand-pt32' 15689 With -abi=64, expand PT, PTA and PTB instructions to 32 bits only. 15690 15691`-h-tick-hex' 15692 Support H'00 style hex constants in addition to 0x00 style. 15693 15694 15695 15696File: as.info, Node: SH64 Syntax, Next: SH64 Directives, Prev: SH64 Options, Up: SH64-Dependent 15697 156989.34.2 Syntax 15699------------- 15700 15701* Menu: 15702 15703* SH64-Chars:: Special Characters 15704* SH64-Regs:: Register Names 15705* SH64-Addressing:: Addressing Modes 15706 15707 15708File: as.info, Node: SH64-Chars, Next: SH64-Regs, Up: SH64 Syntax 15709 157109.34.2.1 Special Characters 15711........................... 15712 15713`!' is the line comment character. 15714 15715 You can use `;' instead of a newline to separate statements. 15716 15717 Since `$' has no special meaning, you may use it in symbol names. 15718 15719 15720File: as.info, Node: SH64-Regs, Next: SH64-Addressing, Prev: SH64-Chars, Up: SH64 Syntax 15721 157229.34.2.2 Register Names 15723....................... 15724 15725You can use the predefined symbols `r0' through `r63' to refer to the 15726SH64 general registers, `cr0' through `cr63' for control registers, 15727`tr0' through `tr7' for target address registers, `fr0' through `fr63' 15728for single-precision floating point registers, `dr0' through `dr62' 15729(even numbered registers only) for double-precision floating point 15730registers, `fv0' through `fv60' (multiples of four only) for 15731single-precision floating point vectors, `fp0' through `fp62' (even 15732numbered registers only) for single-precision floating point pairs, 15733`mtrx0' through `mtrx48' (multiples of 16 only) for 4x4 matrices of 15734single-precision floating point registers, `pc' for the program 15735counter, and `fpscr' for the floating point status and control register. 15736 15737 You can also refer to the control registers by the mnemonics `sr', 15738`ssr', `pssr', `intevt', `expevt', `pexpevt', `tra', `spc', `pspc', 15739`resvec', `vbr', `tea', `dcr', `kcr0', `kcr1', `ctc', and `usr'. 15740 15741 15742File: as.info, Node: SH64-Addressing, Prev: SH64-Regs, Up: SH64 Syntax 15743 157449.34.2.3 Addressing Modes 15745......................... 15746 15747SH64 operands consist of either a register or immediate value. The 15748immediate value can be a constant or label reference (or portion of a 15749label reference), as in this example: 15750 15751 movi 4,r2 15752 pt function, tr4 15753 movi (function >> 16) & 65535,r0 15754 shori function & 65535, r0 15755 ld.l r0,4,r0 15756 15757 Instruction label references can reference labels in either SHmedia 15758or SHcompact. To differentiate between the two, labels in SHmedia 15759sections will always have the least significant bit set (i.e. they will 15760be odd), which SHcompact labels will have the least significant bit 15761reset (i.e. they will be even). If you need to reference the actual 15762address of a label, you can use the `datalabel' modifier, as in this 15763example: 15764 15765 .long function 15766 .long datalabel function 15767 15768 In that example, the first longword may or may not have the least 15769significant bit set depending on whether the label is an SHmedia label 15770or an SHcompact label. The second longword will be the actual address 15771of the label, regardless of what type of label it is. 15772 15773 15774File: as.info, Node: SH64 Directives, Next: SH64 Opcodes, Prev: SH64 Syntax, Up: SH64-Dependent 15775 157769.34.3 SH64 Machine Directives 15777------------------------------ 15778 15779In addition to the SH directives, the SH64 provides the following 15780directives: 15781 15782`.mode [shmedia|shcompact]' 15783`.isa [shmedia|shcompact]' 15784 Specify the ISA for the following instructions (the two directives 15785 are equivalent). Note that programs such as `objdump' rely on 15786 symbolic labels to determine when such mode switches occur (by 15787 checking the least significant bit of the label's address), so 15788 such mode/isa changes should always be followed by a label (in 15789 practice, this is true anyway). Note that you cannot use these 15790 directives if you didn't specify an ISA on the command line. 15791 15792`.abi [32|64]' 15793 Specify the ABI for the following instructions. Note that you 15794 cannot use this directive unless you specified an ABI on the 15795 command line, and the ABIs specified must match. 15796 15797`.uaquad' 15798 Like .uaword and .ualong, this allows you to specify an 15799 intentionally unaligned quadword (64 bit word). 15800 15801 15802 15803File: as.info, Node: SH64 Opcodes, Prev: SH64 Directives, Up: SH64-Dependent 15804 158059.34.4 Opcodes 15806-------------- 15807 15808For detailed information on the SH64 machine instruction set, see 15809`SuperH 64 bit RISC Series Architecture Manual' (SuperH, Inc.). 15810 15811 `as' implements all the standard SH64 opcodes. In addition, the 15812following pseudo-opcodes may be expanded into one or more alternate 15813opcodes: 15814 15815`movi' 15816 If the value doesn't fit into a standard `movi' opcode, `as' will 15817 replace the `movi' with a sequence of `movi' and `shori' opcodes. 15818 15819`pt' 15820 This expands to a sequence of `movi' and `shori' opcode, followed 15821 by a `ptrel' opcode, or to a `pta' or `ptb' opcode, depending on 15822 the label referenced. 15823 15824 15825 15826File: as.info, Node: Sparc-Dependent, Next: TIC54X-Dependent, Prev: SCORE-Dependent, Up: Machine Dependencies 15827 158289.35 SPARC Dependent Features 15829============================= 15830 15831* Menu: 15832 15833* Sparc-Opts:: Options 15834* Sparc-Aligned-Data:: Option to enforce aligned data 15835* Sparc-Syntax:: Syntax 15836* Sparc-Float:: Floating Point 15837* Sparc-Directives:: Sparc Machine Directives 15838 15839 15840File: as.info, Node: Sparc-Opts, Next: Sparc-Aligned-Data, Up: Sparc-Dependent 15841 158429.35.1 Options 15843-------------- 15844 15845The SPARC chip family includes several successive versions, using the 15846same core instruction set, but including a few additional instructions 15847at each version. There are exceptions to this however. For details on 15848what instructions each variant supports, please see the chip's 15849architecture reference manual. 15850 15851 By default, `as' assumes the core instruction set (SPARC v6), but 15852"bumps" the architecture level as needed: it switches to successively 15853higher architectures as it encounters instructions that only exist in 15854the higher levels. 15855 15856 If not configured for SPARC v9 (`sparc64-*-*') GAS will not bump 15857past sparclite by default, an option must be passed to enable the v9 15858instructions. 15859 15860 GAS treats sparclite as being compatible with v8, unless an 15861architecture is explicitly requested. SPARC v9 is always incompatible 15862with sparclite. 15863 15864`-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite' 15865`-Av8plus | -Av8plusa | -Av9 | -Av9a' 15866 Use one of the `-A' options to select one of the SPARC 15867 architectures explicitly. If you select an architecture 15868 explicitly, `as' reports a fatal error if it encounters an 15869 instruction or feature requiring an incompatible or higher level. 15870 15871 `-Av8plus' and `-Av8plusa' select a 32 bit environment. 15872 15873 `-Av9' and `-Av9a' select a 64 bit environment and are not 15874 available unless GAS is explicitly configured with 64 bit 15875 environment support. 15876 15877 `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with 15878 UltraSPARC extensions. 15879 15880`-xarch=v8plus | -xarch=v8plusa' 15881 For compatibility with the SunOS v9 assembler. These options are 15882 equivalent to -Av8plus and -Av8plusa, respectively. 15883 15884`-bump' 15885 Warn whenever it is necessary to switch to another level. If an 15886 architecture level is explicitly requested, GAS will not issue 15887 warnings until that level is reached, and will then bump the level 15888 as required (except between incompatible levels). 15889 15890`-32 | -64' 15891 Select the word size, either 32 bits or 64 bits. These options 15892 are only available with the ELF object file format, and require 15893 that the necessary BFD support has been included. 15894 15895 15896File: as.info, Node: Sparc-Aligned-Data, Next: Sparc-Syntax, Prev: Sparc-Opts, Up: Sparc-Dependent 15897 158989.35.2 Enforcing aligned data 15899----------------------------- 15900 15901SPARC GAS normally permits data to be misaligned. For example, it 15902permits the `.long' pseudo-op to be used on a byte boundary. However, 15903the native SunOS assemblers issue an error when they see misaligned 15904data. 15905 15906 You can use the `--enforce-aligned-data' option to make SPARC GAS 15907also issue an error about misaligned data, just as the SunOS assemblers 15908do. 15909 15910 The `--enforce-aligned-data' option is not the default because gcc 15911issues misaligned data pseudo-ops when it initializes certain packed 15912data structures (structures defined using the `packed' attribute). You 15913may have to assemble with GAS in order to initialize packed data 15914structures in your own code. 15915 15916 15917File: as.info, Node: Sparc-Syntax, Next: Sparc-Float, Prev: Sparc-Aligned-Data, Up: Sparc-Dependent 15918 159199.35.3 Sparc Syntax 15920------------------- 15921 15922The assembler syntax closely follows The Sparc Architecture Manual, 15923versions 8 and 9, as well as most extensions defined by Sun for their 15924UltraSPARC and Niagara line of processors. 15925 15926* Menu: 15927 15928* Sparc-Chars:: Special Characters 15929* Sparc-Regs:: Register Names 15930* Sparc-Constants:: Constant Names 15931* Sparc-Relocs:: Relocations 15932* Sparc-Size-Translations:: Size Translations 15933 15934 15935File: as.info, Node: Sparc-Chars, Next: Sparc-Regs, Up: Sparc-Syntax 15936 159379.35.3.1 Special Characters 15938........................... 15939 15940`#' is the line comment character. 15941 15942 `;' can be used instead of a newline to separate statements. 15943 15944 15945File: as.info, Node: Sparc-Regs, Next: Sparc-Constants, Prev: Sparc-Chars, Up: Sparc-Syntax 15946 159479.35.3.2 Register Names 15948....................... 15949 15950The Sparc integer register file is broken down into global, outgoing, 15951local, and incoming. 15952 15953 * The 8 global registers are referred to as `%gN'. 15954 15955 * The 8 outgoing registers are referred to as `%oN'. 15956 15957 * The 8 local registers are referred to as `%lN'. 15958 15959 * The 8 incoming registers are referred to as `%iN'. 15960 15961 * The frame pointer register `%i6' can be referenced using the alias 15962 `%fp'. 15963 15964 * The stack pointer register `%o6' can be referenced using the alias 15965 `%sp'. 15966 15967 Floating point registers are simply referred to as `%fN'. When 15968assembling for pre-V9, only 32 floating point registers are available. 15969For V9 and later there are 64, but there are restrictions when 15970referencing the upper 32 registers. They can only be accessed as 15971double or quad, and thus only even or quad numbered accesses are 15972allowed. For example, `%f34' is a legal floating point register, but 15973`%f35' is not. 15974 15975 Certain V9 instructions allow access to ancillary state registers. 15976Most simply they can be referred to as `%asrN' where N can be from 16 15977to 31. However, there are some aliases defined to reference ASR 15978registers defined for various UltraSPARC processors: 15979 15980 * The tick compare register is referred to as `%tick_cmpr'. 15981 15982 * The system tick register is referred to as `%stick'. An alias, 15983 `%sys_tick', exists but is deprecated and should not be used by 15984 new software. 15985 15986 * The system tick compare register is referred to as `%stick_cmpr'. 15987 An alias, `%sys_tick_cmpr', exists but is deprecated and should 15988 not be used by new software. 15989 15990 * The software interrupt register is referred to as `%softint'. 15991 15992 * The set software interrupt register is referred to as 15993 `%set_softint'. The mnemonic `%softint_set' is provided as an 15994 alias. 15995 15996 * The clear software interrupt register is referred to as 15997 `%clear_softint'. The mnemonic `%softint_clear' is provided as an 15998 alias. 15999 16000 * The performance instrumentation counters register is referred to as 16001 `%pic'. 16002 16003 * The performance control register is referred to as `%pcr'. 16004 16005 * The graphics status register is referred to as `%gsr'. 16006 16007 * The V9 dispatch control register is referred to as `%dcr'. 16008 16009 Various V9 branch and conditional move instructions allow 16010specification of which set of integer condition codes to test. These 16011are referred to as `%xcc' and `%icc'. 16012 16013 In V9, there are 4 sets of floating point condition codes which are 16014referred to as `%fccN'. 16015 16016 Several special privileged and non-privileged registers exist: 16017 16018 * The V9 address space identifier register is referred to as `%asi'. 16019 16020 * The V9 restorable windows register is referred to as `%canrestore'. 16021 16022 * The V9 savable windows register is referred to as `%cansave'. 16023 16024 * The V9 clean windows register is referred to as `%cleanwin'. 16025 16026 * The V9 current window pointer register is referred to as `%cwp'. 16027 16028 * The floating-point queue register is referred to as `%fq'. 16029 16030 * The V8 co-processor queue register is referred to as `%cq'. 16031 16032 * The floating point status register is referred to as `%fsr'. 16033 16034 * The other windows register is referred to as `%otherwin'. 16035 16036 * The V9 program counter register is referred to as `%pc'. 16037 16038 * The V9 next program counter register is referred to as `%npc'. 16039 16040 * The V9 processor interrupt level register is referred to as `%pil'. 16041 16042 * The V9 processor state register is referred to as `%pstate'. 16043 16044 * The trap base address register is referred to as `%tba'. 16045 16046 * The V9 tick register is referred to as `%tick'. 16047 16048 * The V9 trap level is referred to as `%tl'. 16049 16050 * The V9 trap program counter is referred to as `%tpc'. 16051 16052 * The V9 trap next program counter is referred to as `%tnpc'. 16053 16054 * The V9 trap state is referred to as `%tstate'. 16055 16056 * The V9 trap type is referred to as `%tt'. 16057 16058 * The V9 condition codes is referred to as `%ccr'. 16059 16060 * The V9 floating-point registers state is referred to as `%fprs'. 16061 16062 * The V9 version register is referred to as `%ver'. 16063 16064 * The V9 window state register is referred to as `%wstate'. 16065 16066 * The Y register is referred to as `%y'. 16067 16068 * The V8 window invalid mask register is referred to as `%wim'. 16069 16070 * The V8 processor state register is referred to as `%psr'. 16071 16072 * The V9 global register level register is referred to as `%gl'. 16073 16074 Several special register names exist for hypervisor mode code: 16075 16076 * The hyperprivileged processor state register is referred to as 16077 `%hpstate'. 16078 16079 * The hyperprivileged trap state register is referred to as 16080 `%htstate'. 16081 16082 * The hyperprivileged interrupt pending register is referred to as 16083 `%hintp'. 16084 16085 * The hyperprivileged trap base address register is referred to as 16086 `%htba'. 16087 16088 * The hyperprivileged implementation version register is referred to 16089 as `%hver'. 16090 16091 * The hyperprivileged system tick compare register is referred to as 16092 `%hstick_cmpr'. Note that there is no `%hstick' register, the 16093 normal `%stick' is used. 16094 16095 16096File: as.info, Node: Sparc-Constants, Next: Sparc-Relocs, Prev: Sparc-Regs, Up: Sparc-Syntax 16097 160989.35.3.3 Constants 16099.................. 16100 16101Several Sparc instructions take an immediate operand field for which 16102mnemonic names exist. Two such examples are `membar' and `prefetch'. 16103Another example are the set of V9 memory access instruction that allow 16104specification of an address space identifier. 16105 16106 The `membar' instruction specifies a memory barrier that is the 16107defined by the operand which is a bitmask. The supported mask 16108mnemonics are: 16109 16110 * `#Sync' requests that all operations (including nonmemory 16111 reference operations) appearing prior to the `membar' must have 16112 been performed and the effects of any exceptions become visible 16113 before any instructions after the `membar' may be initiated. This 16114 corresponds to `membar' cmask field bit 2. 16115 16116 * `#MemIssue' requests that all memory reference operations 16117 appearing prior to the `membar' must have been performed before 16118 any memory operation after the `membar' may be initiated. This 16119 corresponds to `membar' cmask field bit 1. 16120 16121 * `#Lookaside' requests that a store appearing prior to the `membar' 16122 must complete before any load following the `membar' referencing 16123 the same address can be initiated. This corresponds to `membar' 16124 cmask field bit 0. 16125 16126 * `#StoreStore' defines that the effects of all stores appearing 16127 prior to the `membar' instruction must be visible to all 16128 processors before the effect of any stores following the `membar'. 16129 Equivalent to the deprecated `stbar' instruction. This 16130 corresponds to `membar' mmask field bit 3. 16131 16132 * `#LoadStore' defines all loads appearing prior to the `membar' 16133 instruction must have been performed before the effect of any 16134 stores following the `membar' is visible to any other processor. 16135 This corresponds to `membar' mmask field bit 2. 16136 16137 * `#StoreLoad' defines that the effects of all stores appearing 16138 prior to the `membar' instruction must be visible to all 16139 processors before loads following the `membar' may be performed. 16140 This corresponds to `membar' mmask field bit 1. 16141 16142 * `#LoadLoad' defines that all loads appearing prior to the `membar' 16143 instruction must have been performed before any loads following 16144 the `membar' may be performed. This corresponds to `membar' mmask 16145 field bit 0. 16146 16147 16148 These values can be ored together, for example: 16149 16150 membar #Sync 16151 membar #StoreLoad | #LoadLoad 16152 membar #StoreLoad | #StoreStore 16153 16154 The `prefetch' and `prefetcha' instructions take a prefetch function 16155code. The following prefetch function code constant mnemonics are 16156available: 16157 16158 * `#n_reads' requests a prefetch for several reads, and corresponds 16159 to a prefetch function code of 0. 16160 16161 `#one_read' requests a prefetch for one read, and corresponds to a 16162 prefetch function code of 1. 16163 16164 `#n_writes' requests a prefetch for several writes (and possibly 16165 reads), and corresponds to a prefetch function code of 2. 16166 16167 `#one_write' requests a prefetch for one write, and corresponds to 16168 a prefetch function code of 3. 16169 16170 `#page' requests a prefetch page, and corresponds to a prefetch 16171 function code of 4. 16172 16173 `#invalidate' requests a prefetch invalidate, and corresponds to a 16174 prefetch function code of 16. 16175 16176 `#unified' requests a prefetch to the nearest unified cache, and 16177 corresponds to a prefetch function code of 17. 16178 16179 `#n_reads_strong' requests a strong prefetch for several reads, 16180 and corresponds to a prefetch function code of 20. 16181 16182 `#one_read_strong' requests a strong prefetch for one read, and 16183 corresponds to a prefetch function code of 21. 16184 16185 `#n_writes_strong' requests a strong prefetch for several writes, 16186 and corresponds to a prefetch function code of 22. 16187 16188 `#one_write_strong' requests a strong prefetch for one write, and 16189 corresponds to a prefetch function code of 23. 16190 16191 Onle one prefetch code may be specified. Here are some examples: 16192 16193 prefetch [%l0 + %l2], #one_read 16194 prefetch [%g2 + 8], #n_writes 16195 prefetcha [%g1] 0x8, #unified 16196 prefetcha [%o0 + 0x10] %asi, #n_reads 16197 16198 The actual behavior of a given prefetch function code is processor 16199 specific. If a processor does not implement a given prefetch 16200 function code, it will treat the prefetch instruction as a nop. 16201 16202 For instructions that accept an immediate address space identifier, 16203 `as' provides many mnemonics corresponding to V9 defined as well 16204 as UltraSPARC and Niagara extended values. For example, `#ASI_P' 16205 and `#ASI_BLK_INIT_QUAD_LDD_AIUS'. See the V9 and processor 16206 specific manuals for details. 16207 16208 16209 16210File: as.info, Node: Sparc-Relocs, Next: Sparc-Size-Translations, Prev: Sparc-Constants, Up: Sparc-Syntax 16211 162129.35.3.4 Relocations 16213.................... 16214 16215ELF relocations are available as defined in the 32-bit and 64-bit Sparc 16216ELF specifications. 16217 16218 `R_SPARC_HI22' is obtained using `%hi' and `R_SPARC_LO10' is 16219obtained using `%lo'. Likewise `R_SPARC_HIX22' is obtained from `%hix' 16220and `R_SPARC_LOX10' is obtained using `%lox'. For example: 16221 16222 sethi %hi(symbol), %g1 16223 or %g1, %lo(symbol), %g1 16224 16225 sethi %hix(symbol), %g1 16226 xor %g1, %lox(symbol), %g1 16227 16228 These "high" mnemonics extract bits 31:10 of their operand, and the 16229"low" mnemonics extract bits 9:0 of their operand. 16230 16231 V9 code model relocations can be requested as follows: 16232 16233 * `R_SPARC_HH22' is requested using `%hh'. It can also be generated 16234 using `%uhi'. 16235 16236 * `R_SPARC_HM10' is requested using `%hm'. It can also be generated 16237 using `%ulo'. 16238 16239 * `R_SPARC_LM22' is requested using `%lm'. 16240 16241 * `R_SPARC_H44' is requested using `%h44'. 16242 16243 * `R_SPARC_M44' is requested using `%m44'. 16244 16245 * `R_SPARC_L44' is requested using `%l44'. 16246 16247 The PC relative relocation `R_SPARC_PC22' can be obtained by 16248enclosing an operand inside of `%pc22'. Likewise, the `R_SPARC_PC10' 16249relocation can be obtained using `%pc10'. These are mostly used when 16250assembling PIC code. For example, the standard PIC sequence on Sparc 16251to get the base of the global offset table, PC relative, into a 16252register, can be performed as: 16253 16254 sethi %pc22(_GLOBAL_OFFSET_TABLE_-4), %l7 16255 add %l7, %pc10(_GLOBAL_OFFSET_TABLE_+4), %l7 16256 16257 Several relocations exist to allow the link editor to potentially 16258optimize GOT data references. The `R_SPARC_GOTDATA_OP_HIX22' 16259relocation can obtained by enclosing an operand inside of 16260`%gdop_hix22'. The `R_SPARC_GOTDATA_OP_LOX10' relocation can obtained 16261by enclosing an operand inside of `%gdop_lox10'. Likewise, 16262`R_SPARC_GOTDATA_OP' can be obtained by enclosing an operand inside of 16263`%gdop'. For example, assuming the GOT base is in register `%l7': 16264 16265 sethi %gdop_hix22(symbol), %l1 16266 xor %l1, %gdop_lox10(symbol), %l1 16267 ld [%l7 + %l1], %l2, %gdop(symbol) 16268 16269 There are many relocations that can be requested for access to 16270thread local storage variables. All of the Sparc TLS mnemonics are 16271supported: 16272 16273 * `R_SPARC_TLS_GD_HI22' is requested using `%tgd_hi22'. 16274 16275 * `R_SPARC_TLS_GD_LO10' is requested using `%tgd_lo10'. 16276 16277 * `R_SPARC_TLS_GD_ADD' is requested using `%tgd_add'. 16278 16279 * `R_SPARC_TLS_GD_CALL' is requested using `%tgd_call'. 16280 16281 * `R_SPARC_TLS_LDM_HI22' is requested using `%tldm_hi22'. 16282 16283 * `R_SPARC_TLS_LDM_LO10' is requested using `%tldm_lo10'. 16284 16285 * `R_SPARC_TLS_LDM_ADD' is requested using `%tldm_add'. 16286 16287 * `R_SPARC_TLS_LDM_CALL' is requested using `%tldm_call'. 16288 16289 * `R_SPARC_TLS_LDO_HIX22' is requested using `%tldo_hix22'. 16290 16291 * `R_SPARC_TLS_LDO_LOX10' is requested using `%tldo_lox10'. 16292 16293 * `R_SPARC_TLS_LDO_ADD' is requested using `%tldo_add'. 16294 16295 * `R_SPARC_TLS_IE_HI22' is requested using `%tie_hi22'. 16296 16297 * `R_SPARC_TLS_IE_LO10' is requested using `%tie_lo10'. 16298 16299 * `R_SPARC_TLS_IE_LD' is requested using `%tie_ld'. 16300 16301 * `R_SPARC_TLS_IE_LDX' is requested using `%tie_ldx'. 16302 16303 * `R_SPARC_TLS_IE_ADD' is requested using `%tie_add'. 16304 16305 * `R_SPARC_TLS_LE_HIX22' is requested using `%tle_hix22'. 16306 16307 * `R_SPARC_TLS_LE_LOX10' is requested using `%tle_lox10'. 16308 16309 Here are some example TLS model sequences. 16310 16311 First, General Dynamic: 16312 16313 sethi %tgd_hi22(symbol), %l1 16314 add %l1, %tgd_lo10(symbol), %l1 16315 add %l7, %l1, %o0, %tgd_add(symbol) 16316 call __tls_get_addr, %tgd_call(symbol) 16317 nop 16318 16319 Local Dynamic: 16320 16321 sethi %tldm_hi22(symbol), %l1 16322 add %l1, %tldm_lo10(symbol), %l1 16323 add %l7, %l1, %o0, %tldm_add(symbol) 16324 call __tls_get_addr, %tldm_call(symbol) 16325 nop 16326 16327 sethi %tldo_hix22(symbol), %l1 16328 xor %l1, %tldo_lox10(symbol), %l1 16329 add %o0, %l1, %l1, %tldo_add(symbol) 16330 16331 Initial Exec: 16332 16333 sethi %tie_hi22(symbol), %l1 16334 add %l1, %tie_lo10(symbol), %l1 16335 ld [%l7 + %l1], %o0, %tie_ld(symbol) 16336 add %g7, %o0, %o0, %tie_add(symbol) 16337 16338 sethi %tie_hi22(symbol), %l1 16339 add %l1, %tie_lo10(symbol), %l1 16340 ldx [%l7 + %l1], %o0, %tie_ldx(symbol) 16341 add %g7, %o0, %o0, %tie_add(symbol) 16342 16343 And finally, Local Exec: 16344 16345 sethi %tle_hix22(symbol), %l1 16346 add %l1, %tle_lox10(symbol), %l1 16347 add %g7, %l1, %l1 16348 16349 When assembling for 64-bit, and a secondary constant addend is 16350specified in an address expression that would normally generate an 16351`R_SPARC_LO10' relocation, the assembler will emit an `R_SPARC_OLO10' 16352instead. 16353 16354 16355File: as.info, Node: Sparc-Size-Translations, Prev: Sparc-Relocs, Up: Sparc-Syntax 16356 163579.35.3.5 Size Translations 16358.......................... 16359 16360Often it is desirable to write code in an operand size agnostic manner. 16361`as' provides support for this via operand size opcode translations. 16362Translations are supported for loads, stores, shifts, compare-and-swap 16363atomics, and the `clr' synthetic instruction. 16364 16365 If generating 32-bit code, `as' will generate the 32-bit opcode. 16366Whereas if 64-bit code is being generated, the 64-bit opcode will be 16367emitted. For example `ldn' will be transformed into `ld' for 32-bit 16368code and `ldx' for 64-bit code. 16369 16370 Here is an example meant to demonstrate all the supported opcode 16371translations: 16372 16373 ldn [%o0], %o1 16374 ldna [%o0] %asi, %o2 16375 stn %o1, [%o0] 16376 stna %o2, [%o0] %asi 16377 slln %o3, 3, %o3 16378 srln %o4, 8, %o4 16379 sran %o5, 12, %o5 16380 casn [%o0], %o1, %o2 16381 casna [%o0] %asi, %o1, %o2 16382 clrn %g1 16383 16384 In 32-bit mode `as' will emit: 16385 16386 ld [%o0], %o1 16387 lda [%o0] %asi, %o2 16388 st %o1, [%o0] 16389 sta %o2, [%o0] %asi 16390 sll %o3, 3, %o3 16391 srl %o4, 8, %o4 16392 sra %o5, 12, %o5 16393 cas [%o0], %o1, %o2 16394 casa [%o0] %asi, %o1, %o2 16395 clr %g1 16396 16397 And in 64-bit mode `as' will emit: 16398 16399 ldx [%o0], %o1 16400 ldxa [%o0] %asi, %o2 16401 stx %o1, [%o0] 16402 stxa %o2, [%o0] %asi 16403 sllx %o3, 3, %o3 16404 srlx %o4, 8, %o4 16405 srax %o5, 12, %o5 16406 casx [%o0], %o1, %o2 16407 casxa [%o0] %asi, %o1, %o2 16408 clrx %g1 16409 16410 Finally, the `.nword' translating directive is supported as well. 16411It is documented in the section on Sparc machine directives. 16412 16413 16414File: as.info, Node: Sparc-Float, Next: Sparc-Directives, Prev: Sparc-Syntax, Up: Sparc-Dependent 16415 164169.35.4 Floating Point 16417--------------------- 16418 16419The Sparc uses IEEE floating-point numbers. 16420 16421 16422File: as.info, Node: Sparc-Directives, Prev: Sparc-Float, Up: Sparc-Dependent 16423 164249.35.5 Sparc Machine Directives 16425------------------------------- 16426 16427The Sparc version of `as' supports the following additional machine 16428directives: 16429 16430`.align' 16431 This must be followed by the desired alignment in bytes. 16432 16433`.common' 16434 This must be followed by a symbol name, a positive number, and 16435 `"bss"'. This behaves somewhat like `.comm', but the syntax is 16436 different. 16437 16438`.half' 16439 This is functionally identical to `.short'. 16440 16441`.nword' 16442 On the Sparc, the `.nword' directive produces native word sized 16443 value, ie. if assembling with -32 it is equivalent to `.word', if 16444 assembling with -64 it is equivalent to `.xword'. 16445 16446`.proc' 16447 This directive is ignored. Any text following it on the same line 16448 is also ignored. 16449 16450`.register' 16451 This directive declares use of a global application or system 16452 register. It must be followed by a register name %g2, %g3, %g6 or 16453 %g7, comma and the symbol name for that register. If symbol name 16454 is `#scratch', it is a scratch register, if it is `#ignore', it 16455 just suppresses any errors about using undeclared global register, 16456 but does not emit any information about it into the object file. 16457 This can be useful e.g. if you save the register before use and 16458 restore it after. 16459 16460`.reserve' 16461 This must be followed by a symbol name, a positive number, and 16462 `"bss"'. This behaves somewhat like `.lcomm', but the syntax is 16463 different. 16464 16465`.seg' 16466 This must be followed by `"text"', `"data"', or `"data1"'. It 16467 behaves like `.text', `.data', or `.data 1'. 16468 16469`.skip' 16470 This is functionally identical to the `.space' directive. 16471 16472`.word' 16473 On the Sparc, the `.word' directive produces 32 bit values, 16474 instead of the 16 bit values it produces on many other machines. 16475 16476`.xword' 16477 On the Sparc V9 processor, the `.xword' directive produces 64 bit 16478 values. 16479 16480 16481File: as.info, Node: TIC54X-Dependent, Next: TIC6X-Dependent, Prev: Sparc-Dependent, Up: Machine Dependencies 16482 164839.36 TIC54X Dependent Features 16484============================== 16485 16486* Menu: 16487 16488* TIC54X-Opts:: Command-line Options 16489* TIC54X-Block:: Blocking 16490* TIC54X-Env:: Environment Settings 16491* TIC54X-Constants:: Constants Syntax 16492* TIC54X-Subsyms:: String Substitution 16493* TIC54X-Locals:: Local Label Syntax 16494* TIC54X-Builtins:: Builtin Assembler Math Functions 16495* TIC54X-Ext:: Extended Addressing Support 16496* TIC54X-Directives:: Directives 16497* TIC54X-Macros:: Macro Features 16498* TIC54X-MMRegs:: Memory-mapped Registers 16499 16500 16501File: as.info, Node: TIC54X-Opts, Next: TIC54X-Block, Up: TIC54X-Dependent 16502 165039.36.1 Options 16504-------------- 16505 16506The TMS320C54X version of `as' has a few machine-dependent options. 16507 16508 You can use the `-mfar-mode' option to enable extended addressing 16509mode. All addresses will be assumed to be > 16 bits, and the 16510appropriate relocation types will be used. This option is equivalent 16511to using the `.far_mode' directive in the assembly code. If you do not 16512use the `-mfar-mode' option, all references will be assumed to be 16 16513bits. This option may be abbreviated to `-mf'. 16514 16515 You can use the `-mcpu' option to specify a particular CPU. This 16516option is equivalent to using the `.version' directive in the assembly 16517code. For recognized CPU codes, see *Note `.version': 16518TIC54X-Directives. The default CPU version is `542'. 16519 16520 You can use the `-merrors-to-file' option to redirect error output 16521to a file (this provided for those deficient environments which don't 16522provide adequate output redirection). This option may be abbreviated to 16523`-me'. 16524 16525 16526File: as.info, Node: TIC54X-Block, Next: TIC54X-Env, Prev: TIC54X-Opts, Up: TIC54X-Dependent 16527 165289.36.2 Blocking 16529--------------- 16530 16531A blocked section or memory block is guaranteed not to cross the 16532blocking boundary (usually a page, or 128 words) if it is smaller than 16533the blocking size, or to start on a page boundary if it is larger than 16534the blocking size. 16535 16536 16537File: as.info, Node: TIC54X-Env, Next: TIC54X-Constants, Prev: TIC54X-Block, Up: TIC54X-Dependent 16538 165399.36.3 Environment Settings 16540--------------------------- 16541 16542`C54XDSP_DIR' and `A_DIR' are semicolon-separated paths which are added 16543to the list of directories normally searched for source and include 16544files. `C54XDSP_DIR' will override `A_DIR'. 16545 16546 16547File: as.info, Node: TIC54X-Constants, Next: TIC54X-Subsyms, Prev: TIC54X-Env, Up: TIC54X-Dependent 16548 165499.36.4 Constants Syntax 16550----------------------- 16551 16552The TIC54X version of `as' allows the following additional constant 16553formats, using a suffix to indicate the radix: 16554 16555 Binary `000000B, 011000b' 16556 Octal `10Q, 224q' 16557 Hexadecimal `45h, 0FH' 16558 16559 16560File: as.info, Node: TIC54X-Subsyms, Next: TIC54X-Locals, Prev: TIC54X-Constants, Up: TIC54X-Dependent 16561 165629.36.5 String Substitution 16563-------------------------- 16564 16565A subset of allowable symbols (which we'll call subsyms) may be assigned 16566arbitrary string values. This is roughly equivalent to C preprocessor 16567#define macros. When `as' encounters one of these symbols, the symbol 16568is replaced in the input stream by its string value. Subsym names 16569*must* begin with a letter. 16570 16571 Subsyms may be defined using the `.asg' and `.eval' directives 16572(*Note `.asg': TIC54X-Directives, *Note `.eval': TIC54X-Directives. 16573 16574 Expansion is recursive until a previously encountered symbol is 16575seen, at which point substitution stops. 16576 16577 In this example, x is replaced with SYM2; SYM2 is replaced with 16578SYM1, and SYM1 is replaced with x. At this point, x has already been 16579encountered and the substitution stops. 16580 16581 .asg "x",SYM1 16582 .asg "SYM1",SYM2 16583 .asg "SYM2",x 16584 add x,a ; final code assembled is "add x, a" 16585 16586 Macro parameters are converted to subsyms; a side effect of this is 16587the normal `as' '\ARG' dereferencing syntax is unnecessary. Subsyms 16588defined within a macro will have global scope, unless the `.var' 16589directive is used to identify the subsym as a local macro variable 16590*note `.var': TIC54X-Directives. 16591 16592 Substitution may be forced in situations where replacement might be 16593ambiguous by placing colons on either side of the subsym. The following 16594code: 16595 16596 .eval "10",x 16597 LAB:X: add #x, a 16598 16599 When assembled becomes: 16600 16601 LAB10 add #10, a 16602 16603 Smaller parts of the string assigned to a subsym may be accessed with 16604the following syntax: 16605 16606``:SYMBOL(CHAR_INDEX):'' 16607 Evaluates to a single-character string, the character at 16608 CHAR_INDEX. 16609 16610``:SYMBOL(START,LENGTH):'' 16611 Evaluates to a substring of SYMBOL beginning at START with length 16612 LENGTH. 16613 16614 16615File: as.info, Node: TIC54X-Locals, Next: TIC54X-Builtins, Prev: TIC54X-Subsyms, Up: TIC54X-Dependent 16616 166179.36.6 Local Labels 16618------------------- 16619 16620Local labels may be defined in two ways: 16621 16622 * $N, where N is a decimal number between 0 and 9 16623 16624 * LABEL?, where LABEL is any legal symbol name. 16625 16626 Local labels thus defined may be redefined or automatically 16627generated. The scope of a local label is based on when it may be 16628undefined or reset. This happens when one of the following situations 16629is encountered: 16630 16631 * .newblock directive *note `.newblock': TIC54X-Directives. 16632 16633 * The current section is changed (.sect, .text, or .data) 16634 16635 * Entering or leaving an included file 16636 16637 * The macro scope where the label was defined is exited 16638 16639 16640File: as.info, Node: TIC54X-Builtins, Next: TIC54X-Ext, Prev: TIC54X-Locals, Up: TIC54X-Dependent 16641 166429.36.7 Math Builtins 16643-------------------- 16644 16645The following built-in functions may be used to generate a 16646floating-point value. All return a floating-point value except `$cvi', 16647`$int', and `$sgn', which return an integer value. 16648 16649``$acos(EXPR)'' 16650 Returns the floating point arccosine of EXPR. 16651 16652``$asin(EXPR)'' 16653 Returns the floating point arcsine of EXPR. 16654 16655``$atan(EXPR)'' 16656 Returns the floating point arctangent of EXPR. 16657 16658``$atan2(EXPR1,EXPR2)'' 16659 Returns the floating point arctangent of EXPR1 / EXPR2. 16660 16661``$ceil(EXPR)'' 16662 Returns the smallest integer not less than EXPR as floating point. 16663 16664``$cosh(EXPR)'' 16665 Returns the floating point hyperbolic cosine of EXPR. 16666 16667``$cos(EXPR)'' 16668 Returns the floating point cosine of EXPR. 16669 16670``$cvf(EXPR)'' 16671 Returns the integer value EXPR converted to floating-point. 16672 16673``$cvi(EXPR)'' 16674 Returns the floating point value EXPR converted to integer. 16675 16676``$exp(EXPR)'' 16677 Returns the floating point value e ^ EXPR. 16678 16679``$fabs(EXPR)'' 16680 Returns the floating point absolute value of EXPR. 16681 16682``$floor(EXPR)'' 16683 Returns the largest integer that is not greater than EXPR as 16684 floating point. 16685 16686``$fmod(EXPR1,EXPR2)'' 16687 Returns the floating point remainder of EXPR1 / EXPR2. 16688 16689``$int(EXPR)'' 16690 Returns 1 if EXPR evaluates to an integer, zero otherwise. 16691 16692``$ldexp(EXPR1,EXPR2)'' 16693 Returns the floating point value EXPR1 * 2 ^ EXPR2. 16694 16695``$log10(EXPR)'' 16696 Returns the base 10 logarithm of EXPR. 16697 16698``$log(EXPR)'' 16699 Returns the natural logarithm of EXPR. 16700 16701``$max(EXPR1,EXPR2)'' 16702 Returns the floating point maximum of EXPR1 and EXPR2. 16703 16704``$min(EXPR1,EXPR2)'' 16705 Returns the floating point minimum of EXPR1 and EXPR2. 16706 16707``$pow(EXPR1,EXPR2)'' 16708 Returns the floating point value EXPR1 ^ EXPR2. 16709 16710``$round(EXPR)'' 16711 Returns the nearest integer to EXPR as a floating point number. 16712 16713``$sgn(EXPR)'' 16714 Returns -1, 0, or 1 based on the sign of EXPR. 16715 16716``$sin(EXPR)'' 16717 Returns the floating point sine of EXPR. 16718 16719``$sinh(EXPR)'' 16720 Returns the floating point hyperbolic sine of EXPR. 16721 16722``$sqrt(EXPR)'' 16723 Returns the floating point square root of EXPR. 16724 16725``$tan(EXPR)'' 16726 Returns the floating point tangent of EXPR. 16727 16728``$tanh(EXPR)'' 16729 Returns the floating point hyperbolic tangent of EXPR. 16730 16731``$trunc(EXPR)'' 16732 Returns the integer value of EXPR truncated towards zero as 16733 floating point. 16734 16735 16736 16737File: as.info, Node: TIC54X-Ext, Next: TIC54X-Directives, Prev: TIC54X-Builtins, Up: TIC54X-Dependent 16738 167399.36.8 Extended Addressing 16740-------------------------- 16741 16742The `LDX' pseudo-op is provided for loading the extended addressing bits 16743of a label or address. For example, if an address `_label' resides in 16744extended program memory, the value of `_label' may be loaded as follows: 16745 ldx #_label,16,a ; loads extended bits of _label 16746 or #_label,a ; loads lower 16 bits of _label 16747 bacc a ; full address is in accumulator A 16748 16749 16750File: as.info, Node: TIC54X-Directives, Next: TIC54X-Macros, Prev: TIC54X-Ext, Up: TIC54X-Dependent 16751 167529.36.9 Directives 16753----------------- 16754 16755`.align [SIZE]' 16756`.even' 16757 Align the section program counter on the next boundary, based on 16758 SIZE. SIZE may be any power of 2. `.even' is equivalent to 16759 `.align' with a SIZE of 2. 16760 `1' 16761 Align SPC to word boundary 16762 16763 `2' 16764 Align SPC to longword boundary (same as .even) 16765 16766 `128' 16767 Align SPC to page boundary 16768 16769`.asg STRING, NAME' 16770 Assign NAME the string STRING. String replacement is performed on 16771 STRING before assignment. 16772 16773`.eval STRING, NAME' 16774 Evaluate the contents of string STRING and assign the result as a 16775 string to the subsym NAME. String replacement is performed on 16776 STRING before assignment. 16777 16778`.bss SYMBOL, SIZE [, [BLOCKING_FLAG] [,ALIGNMENT_FLAG]]' 16779 Reserve space for SYMBOL in the .bss section. SIZE is in words. 16780 If present, BLOCKING_FLAG indicates the allocated space should be 16781 aligned on a page boundary if it would otherwise cross a page 16782 boundary. If present, ALIGNMENT_FLAG causes the assembler to 16783 allocate SIZE on a long word boundary. 16784 16785`.byte VALUE [,...,VALUE_N]' 16786`.ubyte VALUE [,...,VALUE_N]' 16787`.char VALUE [,...,VALUE_N]' 16788`.uchar VALUE [,...,VALUE_N]' 16789 Place one or more bytes into consecutive words of the current 16790 section. The upper 8 bits of each word is zero-filled. If a 16791 label is used, it points to the word allocated for the first byte 16792 encountered. 16793 16794`.clink ["SECTION_NAME"]' 16795 Set STYP_CLINK flag for this section, which indicates to the 16796 linker that if no symbols from this section are referenced, the 16797 section should not be included in the link. If SECTION_NAME is 16798 omitted, the current section is used. 16799 16800`.c_mode' 16801 TBD. 16802 16803`.copy "FILENAME" | FILENAME' 16804`.include "FILENAME" | FILENAME' 16805 Read source statements from FILENAME. The normal include search 16806 path is used. Normally .copy will cause statements from the 16807 included file to be printed in the assembly listing and .include 16808 will not, but this distinction is not currently implemented. 16809 16810`.data' 16811 Begin assembling code into the .data section. 16812 16813`.double VALUE [,...,VALUE_N]' 16814`.ldouble VALUE [,...,VALUE_N]' 16815`.float VALUE [,...,VALUE_N]' 16816`.xfloat VALUE [,...,VALUE_N]' 16817 Place an IEEE single-precision floating-point representation of 16818 one or more floating-point values into the current section. All 16819 but `.xfloat' align the result on a longword boundary. Values are 16820 stored most-significant word first. 16821 16822`.drlist' 16823`.drnolist' 16824 Control printing of directives to the listing file. Ignored. 16825 16826`.emsg STRING' 16827`.mmsg STRING' 16828`.wmsg STRING' 16829 Emit a user-defined error, message, or warning, respectively. 16830 16831`.far_mode' 16832 Use extended addressing when assembling statements. This should 16833 appear only once per file, and is equivalent to the -mfar-mode 16834 option *note `-mfar-mode': TIC54X-Opts. 16835 16836`.fclist' 16837`.fcnolist' 16838 Control printing of false conditional blocks to the listing file. 16839 16840`.field VALUE [,SIZE]' 16841 Initialize a bitfield of SIZE bits in the current section. If 16842 VALUE is relocatable, then SIZE must be 16. SIZE defaults to 16 16843 bits. If VALUE does not fit into SIZE bits, the value will be 16844 truncated. Successive `.field' directives will pack starting at 16845 the current word, filling the most significant bits first, and 16846 aligning to the start of the next word if the field size does not 16847 fit into the space remaining in the current word. A `.align' 16848 directive with an operand of 1 will force the next `.field' 16849 directive to begin packing into a new word. If a label is used, it 16850 points to the word that contains the specified field. 16851 16852`.global SYMBOL [,...,SYMBOL_N]' 16853`.def SYMBOL [,...,SYMBOL_N]' 16854`.ref SYMBOL [,...,SYMBOL_N]' 16855 `.def' nominally identifies a symbol defined in the current file 16856 and available to other files. `.ref' identifies a symbol used in 16857 the current file but defined elsewhere. Both map to the standard 16858 `.global' directive. 16859 16860`.half VALUE [,...,VALUE_N]' 16861`.uhalf VALUE [,...,VALUE_N]' 16862`.short VALUE [,...,VALUE_N]' 16863`.ushort VALUE [,...,VALUE_N]' 16864`.int VALUE [,...,VALUE_N]' 16865`.uint VALUE [,...,VALUE_N]' 16866`.word VALUE [,...,VALUE_N]' 16867`.uword VALUE [,...,VALUE_N]' 16868 Place one or more values into consecutive words of the current 16869 section. If a label is used, it points to the word allocated for 16870 the first value encountered. 16871 16872`.label SYMBOL' 16873 Define a special SYMBOL to refer to the load time address of the 16874 current section program counter. 16875 16876`.length' 16877`.width' 16878 Set the page length and width of the output listing file. Ignored. 16879 16880`.list' 16881`.nolist' 16882 Control whether the source listing is printed. Ignored. 16883 16884`.long VALUE [,...,VALUE_N]' 16885`.ulong VALUE [,...,VALUE_N]' 16886`.xlong VALUE [,...,VALUE_N]' 16887 Place one or more 32-bit values into consecutive words in the 16888 current section. The most significant word is stored first. 16889 `.long' and `.ulong' align the result on a longword boundary; 16890 `xlong' does not. 16891 16892`.loop [COUNT]' 16893`.break [CONDITION]' 16894`.endloop' 16895 Repeatedly assemble a block of code. `.loop' begins the block, and 16896 `.endloop' marks its termination. COUNT defaults to 1024, and 16897 indicates the number of times the block should be repeated. 16898 `.break' terminates the loop so that assembly begins after the 16899 `.endloop' directive. The optional CONDITION will cause the loop 16900 to terminate only if it evaluates to zero. 16901 16902`MACRO_NAME .macro [PARAM1][,...PARAM_N]' 16903`[.mexit]' 16904`.endm' 16905 See the section on macros for more explanation (*Note 16906 TIC54X-Macros::. 16907 16908`.mlib "FILENAME" | FILENAME' 16909 Load the macro library FILENAME. FILENAME must be an archived 16910 library (BFD ar-compatible) of text files, expected to contain 16911 only macro definitions. The standard include search path is used. 16912 16913`.mlist' 16914`.mnolist' 16915 Control whether to include macro and loop block expansions in the 16916 listing output. Ignored. 16917 16918`.mmregs' 16919 Define global symbolic names for the 'c54x registers. Supposedly 16920 equivalent to executing `.set' directives for each register with 16921 its memory-mapped value, but in reality is provided only for 16922 compatibility and does nothing. 16923 16924`.newblock' 16925 This directive resets any TIC54X local labels currently defined. 16926 Normal `as' local labels are unaffected. 16927 16928`.option OPTION_LIST' 16929 Set listing options. Ignored. 16930 16931`.sblock "SECTION_NAME" | SECTION_NAME [,"NAME_N" | NAME_N]' 16932 Designate SECTION_NAME for blocking. Blocking guarantees that a 16933 section will start on a page boundary (128 words) if it would 16934 otherwise cross a page boundary. Only initialized sections may be 16935 designated with this directive. See also *Note TIC54X-Block::. 16936 16937`.sect "SECTION_NAME"' 16938 Define a named initialized section and make it the current section. 16939 16940`SYMBOL .set "VALUE"' 16941`SYMBOL .equ "VALUE"' 16942 Equate a constant VALUE to a SYMBOL, which is placed in the symbol 16943 table. SYMBOL may not be previously defined. 16944 16945`.space SIZE_IN_BITS' 16946`.bes SIZE_IN_BITS' 16947 Reserve the given number of bits in the current section and 16948 zero-fill them. If a label is used with `.space', it points to the 16949 *first* word reserved. With `.bes', the label points to the 16950 *last* word reserved. 16951 16952`.sslist' 16953`.ssnolist' 16954 Controls the inclusion of subsym replacement in the listing 16955 output. Ignored. 16956 16957`.string "STRING" [,...,"STRING_N"]' 16958`.pstring "STRING" [,...,"STRING_N"]' 16959 Place 8-bit characters from STRING into the current section. 16960 `.string' zero-fills the upper 8 bits of each word, while 16961 `.pstring' puts two characters into each word, filling the 16962 most-significant bits first. Unused space is zero-filled. If a 16963 label is used, it points to the first word initialized. 16964 16965`[STAG] .struct [OFFSET]' 16966`[NAME_1] element [COUNT_1]' 16967`[NAME_2] element [COUNT_2]' 16968`[TNAME] .tag STAGX [TCOUNT]' 16969`...' 16970`[NAME_N] element [COUNT_N]' 16971`[SSIZE] .endstruct' 16972`LABEL .tag [STAG]' 16973 Assign symbolic offsets to the elements of a structure. STAG 16974 defines a symbol to use to reference the structure. OFFSET 16975 indicates a starting value to use for the first element 16976 encountered; otherwise it defaults to zero. Each element can have 16977 a named offset, NAME, which is a symbol assigned the value of the 16978 element's offset into the structure. If STAG is missing, these 16979 become global symbols. COUNT adjusts the offset that many times, 16980 as if `element' were an array. `element' may be one of `.byte', 16981 `.word', `.long', `.float', or any equivalent of those, and the 16982 structure offset is adjusted accordingly. `.field' and `.string' 16983 are also allowed; the size of `.field' is one bit, and `.string' 16984 is considered to be one word in size. Only element descriptors, 16985 structure/union tags, `.align' and conditional assembly directives 16986 are allowed within `.struct'/`.endstruct'. `.align' aligns member 16987 offsets to word boundaries only. SSIZE, if provided, will always 16988 be assigned the size of the structure. 16989 16990 The `.tag' directive, in addition to being used to define a 16991 structure/union element within a structure, may be used to apply a 16992 structure to a symbol. Once applied to LABEL, the individual 16993 structure elements may be applied to LABEL to produce the desired 16994 offsets using LABEL as the structure base. 16995 16996`.tab' 16997 Set the tab size in the output listing. Ignored. 16998 16999`[UTAG] .union' 17000`[NAME_1] element [COUNT_1]' 17001`[NAME_2] element [COUNT_2]' 17002`[TNAME] .tag UTAGX[,TCOUNT]' 17003`...' 17004`[NAME_N] element [COUNT_N]' 17005`[USIZE] .endstruct' 17006`LABEL .tag [UTAG]' 17007 Similar to `.struct', but the offset after each element is reset to 17008 zero, and the USIZE is set to the maximum of all defined elements. 17009 Starting offset for the union is always zero. 17010 17011`[SYMBOL] .usect "SECTION_NAME", SIZE, [,[BLOCKING_FLAG] [,ALIGNMENT_FLAG]]' 17012 Reserve space for variables in a named, uninitialized section 17013 (similar to .bss). `.usect' allows definitions sections 17014 independent of .bss. SYMBOL points to the first location reserved 17015 by this allocation. The symbol may be used as a variable name. 17016 SIZE is the allocated size in words. BLOCKING_FLAG indicates 17017 whether to block this section on a page boundary (128 words) 17018 (*note TIC54X-Block::). ALIGNMENT FLAG indicates whether the 17019 section should be longword-aligned. 17020 17021`.var SYM[,..., SYM_N]' 17022 Define a subsym to be a local variable within a macro. See *Note 17023 TIC54X-Macros::. 17024 17025`.version VERSION' 17026 Set which processor to build instructions for. Though the 17027 following values are accepted, the op is ignored. 17028 `541' 17029 `542' 17030 `543' 17031 `545' 17032 `545LP' 17033 `546LP' 17034 `548' 17035 `549' 17036 17037 17038File: as.info, Node: TIC54X-Macros, Next: TIC54X-MMRegs, Prev: TIC54X-Directives, Up: TIC54X-Dependent 17039 170409.36.10 Macros 17041-------------- 17042 17043Macros do not require explicit dereferencing of arguments (i.e., \ARG). 17044 17045 During macro expansion, the macro parameters are converted to 17046subsyms. If the number of arguments passed the macro invocation 17047exceeds the number of parameters defined, the last parameter is 17048assigned the string equivalent of all remaining arguments. If fewer 17049arguments are given than parameters, the missing parameters are 17050assigned empty strings. To include a comma in an argument, you must 17051enclose the argument in quotes. 17052 17053 The following built-in subsym functions allow examination of the 17054string value of subsyms (or ordinary strings). The arguments are 17055strings unless otherwise indicated (subsyms passed as args will be 17056replaced by the strings they represent). 17057``$symlen(STR)'' 17058 Returns the length of STR. 17059 17060``$symcmp(STR1,STR2)'' 17061 Returns 0 if STR1 == STR2, non-zero otherwise. 17062 17063``$firstch(STR,CH)'' 17064 Returns index of the first occurrence of character constant CH in 17065 STR. 17066 17067``$lastch(STR,CH)'' 17068 Returns index of the last occurrence of character constant CH in 17069 STR. 17070 17071``$isdefed(SYMBOL)'' 17072 Returns zero if the symbol SYMBOL is not in the symbol table, 17073 non-zero otherwise. 17074 17075``$ismember(SYMBOL,LIST)'' 17076 Assign the first member of comma-separated string LIST to SYMBOL; 17077 LIST is reassigned the remainder of the list. Returns zero if 17078 LIST is a null string. Both arguments must be subsyms. 17079 17080``$iscons(EXPR)'' 17081 Returns 1 if string EXPR is binary, 2 if octal, 3 if hexadecimal, 17082 4 if a character, 5 if decimal, and zero if not an integer. 17083 17084``$isname(NAME)'' 17085 Returns 1 if NAME is a valid symbol name, zero otherwise. 17086 17087``$isreg(REG)'' 17088 Returns 1 if REG is a valid predefined register name (AR0-AR7 17089 only). 17090 17091``$structsz(STAG)'' 17092 Returns the size of the structure or union represented by STAG. 17093 17094``$structacc(STAG)'' 17095 Returns the reference point of the structure or union represented 17096 by STAG. Always returns zero. 17097 17098 17099 17100File: as.info, Node: TIC54X-MMRegs, Prev: TIC54X-Macros, Up: TIC54X-Dependent 17101 171029.36.11 Memory-mapped Registers 17103------------------------------- 17104 17105The following symbols are recognized as memory-mapped registers: 17106 17107 17108 17109File: as.info, Node: TIC6X-Dependent, Next: V850-Dependent, Prev: TIC54X-Dependent, Up: Machine Dependencies 17110 171119.37 TIC6X Dependent Features 17112============================= 17113 17114* Menu: 17115 17116* TIC6X Options:: Options 17117* TIC6X Syntax:: Syntax 17118* TIC6X Directives:: Directives 17119 17120 17121File: as.info, Node: TIC6X Options, Next: TIC6X Syntax, Up: TIC6X-Dependent 17122 171239.37.1 TIC6X Options 17124-------------------- 17125 17126`-march=ARCH' 17127 Enable (only) instructions from architecture ARCH. By default, 17128 all instructions are permitted. 17129 17130 The following values of ARCH are accepted: `c62x', `c64x', 17131 `c64x+', `c67x', `c67x+', `c674x'. 17132 17133`-matomic' 17134`-mno-atomic' 17135 Enable or disable the optional C64x+ atomic operation instructions. 17136 By default, they are enabled if no `-march' option is given, or if 17137 an architecture is specified with `-march' that implies these 17138 instructions are present (currently, there are no such 17139 architectures); they are disabled if an architecture is specified 17140 with `-march' on which the instructions are optional or not 17141 present. This option overrides such a default from the 17142 architecture, independent of the order in which the `-march' or 17143 `-matomic' or `-mno-atomic' options are passed. 17144 17145`-mdsbt' 17146`-mno-dsbt' 17147 The `-mdsbt' option causes the assembler to generate the 17148 `Tag_ABI_DSBT' attribute with a value of 1, indicating that the 17149 code is using DSBT addressing. The `-mno-dsbt' option, the 17150 default, causes the tag to have a value of 0, indicating that the 17151 code does not use DSBT addressing. The linker will emit a warning 17152 if objects of different type (DSBT and non-DSBT) are linked 17153 together. 17154 17155`-mpid=no' 17156`-mpid=near' 17157`-mpid=far' 17158 The `-mpid=' option causes the assembler to generate the 17159 `Tag_ABI_PID' attribute with a value indicating the form of data 17160 addressing used by the code. `-mpid=no', the default, indicates 17161 position-dependent data addressing, `-mpid=near' indicates 17162 position-independent addressing with GOT accesses using near DP 17163 addressing, and `-mpid=far' indicates position-independent 17164 addressing with GOT accesses using far DP addressing. The linker 17165 will emit a warning if objects built with different settings of 17166 this option are linked together. 17167 17168`-mpic' 17169`-mno-pic' 17170 The `-mpic' option causes the assembler to generate the 17171 `Tag_ABI_PIC' attribute with a value of 1, indicating that the 17172 code is using position-independent code addressing, The 17173 `-mno-pic' option, the default, causes the tag to have a value of 17174 0, indicating position-dependent code addressing. The linker will 17175 emit a warning if objects of different type (position-dependent and 17176 position-independent) are linked together. 17177 17178`-mbig-endian' 17179`-mlittle-endian' 17180 Generate code for the specified endianness. The default is 17181 little-endian. 17182 17183 17184 17185File: as.info, Node: TIC6X Syntax, Next: TIC6X Directives, Prev: TIC6X Options, Up: TIC6X-Dependent 17186 171879.37.2 TIC6X Syntax 17188------------------- 17189 17190The presence of a `;' on a line indicates the start of a comment that 17191extends to the end of the current line. If a `#' or `*' appears as the 17192first character of a line, the whole line is treated as a comment. 17193 17194 The `@' character can be used instead of a newline to separate 17195statements. 17196 17197 Instruction, register and functional unit names are case-insensitive. 17198`as' requires fully-specified functional unit names, such as `.S1', 17199`.L1X' or `.D1T2', on all instructions using a functional unit. 17200 17201 For some instructions, there may be syntactic ambiguity between 17202register or functional unit names and the names of labels or other 17203symbols. To avoid this, enclose the ambiguous symbol name in 17204parentheses; register and functional unit names may not be enclosed in 17205parentheses. 17206 17207 17208File: as.info, Node: TIC6X Directives, Prev: TIC6X Syntax, Up: TIC6X-Dependent 17209 172109.37.3 TIC6X Directives 17211----------------------- 17212 17213Directives controlling the set of instructions accepted by the 17214assembler have effect for instructions between the directive and any 17215subsequent directive overriding it. 17216 17217`.arch ARCH' 17218 This has the same effect as `-march=ARCH'. 17219 17220`.atomic' 17221`.noatomic' 17222 These have the same effects as `-matomic' and `-mno-atomic'. 17223 17224`.c6xabi_attribute TAG, VALUE' 17225 Set the C6000 EABI build attribute TAG to VALUE. 17226 17227 The TAG is either an attribute number or one of `Tag_ISA', 17228 `Tag_ABI_wchar_t', `Tag_ABI_stack_align_needed', 17229 `Tag_ABI_stack_align_preserved', `Tag_ABI_DSBT', `Tag_ABI_PID', 17230 `Tag_ABI_PIC', `TAG_ABI_array_object_alignment', 17231 `TAG_ABI_array_object_align_expected', `Tag_ABI_compatibility' and 17232 `Tag_ABI_conformance'. The VALUE is either a `number', 17233 `"string"', or `number, "string"' depending on the tag. 17234 17235`.nocmp' 17236 Disallow use of C64x+ compact instructions in the current text 17237 section. 17238 17239 17240 17241File: as.info, Node: Z80-Dependent, Next: Z8000-Dependent, Prev: Xtensa-Dependent, Up: Machine Dependencies 17242 172439.38 Z80 Dependent Features 17244=========================== 17245 17246* Menu: 17247 17248* Z80 Options:: Options 17249* Z80 Syntax:: Syntax 17250* Z80 Floating Point:: Floating Point 17251* Z80 Directives:: Z80 Machine Directives 17252* Z80 Opcodes:: Opcodes 17253 17254 17255File: as.info, Node: Z80 Options, Next: Z80 Syntax, Up: Z80-Dependent 17256 172579.38.1 Options 17258-------------- 17259 17260The Zilog Z80 and Ascii R800 version of `as' have a few machine 17261dependent options. 17262`-z80' 17263 Produce code for the Z80 processor. There are additional options to 17264 request warnings and error messages for undocumented instructions. 17265 17266`-ignore-undocumented-instructions' 17267`-Wnud' 17268 Silently assemble undocumented Z80-instructions that have been 17269 adopted as documented R800-instructions. 17270 17271`-ignore-unportable-instructions' 17272`-Wnup' 17273 Silently assemble all undocumented Z80-instructions. 17274 17275`-warn-undocumented-instructions' 17276`-Wud' 17277 Issue warnings for undocumented Z80-instructions that work on 17278 R800, do not assemble other undocumented instructions without 17279 warning. 17280 17281`-warn-unportable-instructions' 17282`-Wup' 17283 Issue warnings for other undocumented Z80-instructions, do not 17284 treat any undocumented instructions as errors. 17285 17286`-forbid-undocumented-instructions' 17287`-Fud' 17288 Treat all undocumented z80-instructions as errors. 17289 17290`-forbid-unportable-instructions' 17291`-Fup' 17292 Treat undocumented z80-instructions that do not work on R800 as 17293 errors. 17294 17295`-r800' 17296 Produce code for the R800 processor. The assembler does not support 17297 undocumented instructions for the R800. In line with common 17298 practice, `as' uses Z80 instruction names for the R800 processor, 17299 as far as they exist. 17300 17301 17302File: as.info, Node: Z80 Syntax, Next: Z80 Floating Point, Prev: Z80 Options, Up: Z80-Dependent 17303 173049.38.2 Syntax 17305------------- 17306 17307The assembler syntax closely follows the 'Z80 family CPU User Manual' by 17308Zilog. In expressions a single `=' may be used as "is equal to" 17309comparison operator. 17310 17311 Suffices can be used to indicate the radix of integer constants; `H' 17312or `h' for hexadecimal, `D' or `d' for decimal, `Q', `O', `q' or `o' 17313for octal, and `B' for binary. 17314 17315 The suffix `b' denotes a backreference to local label. 17316 17317* Menu: 17318 17319* Z80-Chars:: Special Characters 17320* Z80-Regs:: Register Names 17321* Z80-Case:: Case Sensitivity 17322 17323 17324File: as.info, Node: Z80-Chars, Next: Z80-Regs, Up: Z80 Syntax 17325 173269.38.2.1 Special Characters 17327........................... 17328 17329The semicolon `;' is the line comment character; 17330 17331 The dollar sign `$' can be used as a prefix for hexadecimal numbers 17332and as a symbol denoting the current location counter. 17333 17334 A backslash `\' is an ordinary character for the Z80 assembler. 17335 17336 The single quote `'' must be followed by a closing quote. If there 17337is one character in between, it is a character constant, otherwise it is 17338a string constant. 17339 17340 17341File: as.info, Node: Z80-Regs, Next: Z80-Case, Prev: Z80-Chars, Up: Z80 Syntax 17342 173439.38.2.2 Register Names 17344....................... 17345 17346The registers are referred to with the letters assigned to them by 17347Zilog. In addition `as' recognizes `ixl' and `ixh' as the least and 17348most significant octet in `ix', and similarly `iyl' and `iyh' as parts 17349of `iy'. 17350 17351 17352File: as.info, Node: Z80-Case, Prev: Z80-Regs, Up: Z80 Syntax 17353 173549.38.2.3 Case Sensitivity 17355......................... 17356 17357Upper and lower case are equivalent in register names, opcodes, 17358condition codes and assembler directives. The case of letters is 17359significant in labels and symbol names. The case is also important to 17360distinguish the suffix `b' for a backward reference to a local label 17361from the suffix `B' for a number in binary notation. 17362 17363 17364File: as.info, Node: Z80 Floating Point, Next: Z80 Directives, Prev: Z80 Syntax, Up: Z80-Dependent 17365 173669.38.3 Floating Point 17367--------------------- 17368 17369Floating-point numbers are not supported. 17370 17371 17372File: as.info, Node: Z80 Directives, Next: Z80 Opcodes, Prev: Z80 Floating Point, Up: Z80-Dependent 17373 173749.38.4 Z80 Assembler Directives 17375------------------------------- 17376 17377`as' for the Z80 supports some additional directives for compatibility 17378with other assemblers. 17379 17380 These are the additional directives in `as' for the Z80: 17381 17382`db EXPRESSION|STRING[,EXPRESSION|STRING...]' 17383`defb EXPRESSION|STRING[,EXPRESSION|STRING...]' 17384 For each STRING the characters are copied to the object file, for 17385 each other EXPRESSION the value is stored in one byte. A warning 17386 is issued in case of an overflow. 17387 17388`dw EXPRESSION[,EXPRESSION...]' 17389`defw EXPRESSION[,EXPRESSION...]' 17390 For each EXPRESSION the value is stored in two bytes, ignoring 17391 overflow. 17392 17393`d24 EXPRESSION[,EXPRESSION...]' 17394`def24 EXPRESSION[,EXPRESSION...]' 17395 For each EXPRESSION the value is stored in three bytes, ignoring 17396 overflow. 17397 17398`d32 EXPRESSION[,EXPRESSION...]' 17399`def32 EXPRESSION[,EXPRESSION...]' 17400 For each EXPRESSION the value is stored in four bytes, ignoring 17401 overflow. 17402 17403`ds COUNT[, VALUE]' 17404`defs COUNT[, VALUE]' 17405 Fill COUNT bytes in the object file with VALUE, if VALUE is 17406 omitted it defaults to zero. 17407 17408`SYMBOL equ EXPRESSION' 17409`SYMBOL defl EXPRESSION' 17410 These directives set the value of SYMBOL to EXPRESSION. If `equ' 17411 is used, it is an error if SYMBOL is already defined. Symbols 17412 defined with `equ' are not protected from redefinition. 17413 17414`set' 17415 This is a normal instruction on Z80, and not an assembler 17416 directive. 17417 17418`psect NAME' 17419 A synonym for *Note Section::, no second argument should be given. 17420 17421 17422 17423File: as.info, Node: Z80 Opcodes, Prev: Z80 Directives, Up: Z80-Dependent 17424 174259.38.5 Opcodes 17426-------------- 17427 17428In line with common practice, Z80 mnemonics are used for both the Z80 17429and the R800. 17430 17431 In many instructions it is possible to use one of the half index 17432registers (`ixl',`ixh',`iyl',`iyh') in stead of an 8-bit general 17433purpose register. This yields instructions that are documented on the 17434R800 and undocumented on the Z80. Similarly `in f,(c)' is documented 17435on the R800 and undocumented on the Z80. 17436 17437 The assembler also supports the following undocumented 17438Z80-instructions, that have not been adopted in the R800 instruction 17439set: 17440`out (c),0' 17441 Sends zero to the port pointed to by register c. 17442 17443`sli M' 17444 Equivalent to `M = (M<<1)+1', the operand M can be any operand 17445 that is valid for `sla'. One can use `sll' as a synonym for `sli'. 17446 17447`OP (ix+D), R' 17448 This is equivalent to 17449 17450 ld R, (ix+D) 17451 OPC R 17452 ld (ix+D), R 17453 17454 The operation `OPC' may be any of `res B,', `set B,', `rl', `rlc', 17455 `rr', `rrc', `sla', `sli', `sra' and `srl', and the register `R' 17456 may be any of `a', `b', `c', `d', `e', `h' and `l'. 17457 17458`OPC (iy+D), R' 17459 As above, but with `iy' instead of `ix'. 17460 17461 The web site at `http://www.z80.info' is a good starting place to 17462find more information on programming the Z80. 17463 17464 17465File: as.info, Node: Z8000-Dependent, Next: Vax-Dependent, Prev: Z80-Dependent, Up: Machine Dependencies 17466 174679.39 Z8000 Dependent Features 17468============================= 17469 17470 The Z8000 as supports both members of the Z8000 family: the 17471unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with 1747224 bit addresses. 17473 17474 When the assembler is in unsegmented mode (specified with the 17475`unsegm' directive), an address takes up one word (16 bit) sized 17476register. When the assembler is in segmented mode (specified with the 17477`segm' directive), a 24-bit address takes up a long (32 bit) register. 17478*Note Assembler Directives for the Z8000: Z8000 Directives, for a list 17479of other Z8000 specific assembler directives. 17480 17481* Menu: 17482 17483* Z8000 Options:: Command-line options for the Z8000 17484* Z8000 Syntax:: Assembler syntax for the Z8000 17485* Z8000 Directives:: Special directives for the Z8000 17486* Z8000 Opcodes:: Opcodes 17487 17488 17489File: as.info, Node: Z8000 Options, Next: Z8000 Syntax, Up: Z8000-Dependent 17490 174919.39.1 Options 17492-------------- 17493 17494`-z8001' 17495 Generate segmented code by default. 17496 17497`-z8002' 17498 Generate unsegmented code by default. 17499 17500 17501File: as.info, Node: Z8000 Syntax, Next: Z8000 Directives, Prev: Z8000 Options, Up: Z8000-Dependent 17502 175039.39.2 Syntax 17504------------- 17505 17506* Menu: 17507 17508* Z8000-Chars:: Special Characters 17509* Z8000-Regs:: Register Names 17510* Z8000-Addressing:: Addressing Modes 17511 17512 17513File: as.info, Node: Z8000-Chars, Next: Z8000-Regs, Up: Z8000 Syntax 17514 175159.39.2.1 Special Characters 17516........................... 17517 17518`!' is the line comment character. 17519 17520 You can use `;' instead of a newline to separate statements. 17521 17522 17523File: as.info, Node: Z8000-Regs, Next: Z8000-Addressing, Prev: Z8000-Chars, Up: Z8000 Syntax 17524 175259.39.2.2 Register Names 17526....................... 17527 17528The Z8000 has sixteen 16 bit registers, numbered 0 to 15. You can refer 17529to different sized groups of registers by register number, with the 17530prefix `r' for 16 bit registers, `rr' for 32 bit registers and `rq' for 1753164 bit registers. You can also refer to the contents of the first 17532eight (of the sixteen 16 bit registers) by bytes. They are named `rlN' 17533and `rhN'. 17534 17535_byte registers_ 17536 rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3 17537 rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7 17538 17539_word registers_ 17540 r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 17541 17542_long word registers_ 17543 rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14 17544 17545_quad word registers_ 17546 rq0 rq4 rq8 rq12 17547 17548 17549File: as.info, Node: Z8000-Addressing, Prev: Z8000-Regs, Up: Z8000 Syntax 17550 175519.39.2.3 Addressing Modes 17552......................... 17553 17554as understands the following addressing modes for the Z8000: 17555 17556`rlN' 17557`rhN' 17558`rN' 17559`rrN' 17560`rqN' 17561 Register direct: 8bit, 16bit, 32bit, and 64bit registers. 17562 17563`@rN' 17564`@rrN' 17565 Indirect register: @rrN in segmented mode, @rN in unsegmented 17566 mode. 17567 17568`ADDR' 17569 Direct: the 16 bit or 24 bit address (depending on whether the 17570 assembler is in segmented or unsegmented mode) of the operand is 17571 in the instruction. 17572 17573`address(rN)' 17574 Indexed: the 16 or 24 bit address is added to the 16 bit register 17575 to produce the final address in memory of the operand. 17576 17577`rN(#IMM)' 17578`rrN(#IMM)' 17579 Base Address: the 16 or 24 bit register is added to the 16 bit sign 17580 extended immediate displacement to produce the final address in 17581 memory of the operand. 17582 17583`rN(rM)' 17584`rrN(rM)' 17585 Base Index: the 16 or 24 bit register rN or rrN is added to the 17586 sign extended 16 bit index register rM to produce the final 17587 address in memory of the operand. 17588 17589`#XX' 17590 Immediate data XX. 17591 17592 17593File: as.info, Node: Z8000 Directives, Next: Z8000 Opcodes, Prev: Z8000 Syntax, Up: Z8000-Dependent 17594 175959.39.3 Assembler Directives for the Z8000 17596----------------------------------------- 17597 17598The Z8000 port of as includes additional assembler directives, for 17599compatibility with other Z8000 assemblers. These do not begin with `.' 17600(unlike the ordinary as directives). 17601 17602`segm' 17603`.z8001' 17604 Generate code for the segmented Z8001. 17605 17606`unsegm' 17607`.z8002' 17608 Generate code for the unsegmented Z8002. 17609 17610`name' 17611 Synonym for `.file' 17612 17613`global' 17614 Synonym for `.global' 17615 17616`wval' 17617 Synonym for `.word' 17618 17619`lval' 17620 Synonym for `.long' 17621 17622`bval' 17623 Synonym for `.byte' 17624 17625`sval' 17626 Assemble a string. `sval' expects one string literal, delimited by 17627 single quotes. It assembles each byte of the string into 17628 consecutive addresses. You can use the escape sequence `%XX' 17629 (where XX represents a two-digit hexadecimal number) to represent 17630 the character whose ASCII value is XX. Use this feature to 17631 describe single quote and other characters that may not appear in 17632 string literals as themselves. For example, the C statement 17633 `char *a = "he said \"it's 50% off\"";' is represented in Z8000 17634 assembly language (shown with the assembler output in hex at the 17635 left) as 17636 17637 68652073 sval 'he said %22it%27s 50%25 off%22%00' 17638 61696420 17639 22697427 17640 73203530 17641 25206F66 17642 662200 17643 17644`rsect' 17645 synonym for `.section' 17646 17647`block' 17648 synonym for `.space' 17649 17650`even' 17651 special case of `.align'; aligns output to even byte boundary. 17652 17653 17654File: as.info, Node: Z8000 Opcodes, Prev: Z8000 Directives, Up: Z8000-Dependent 17655 176569.39.4 Opcodes 17657-------------- 17658 17659For detailed information on the Z8000 machine instruction set, see 17660`Z8000 Technical Manual'. 17661 17662 The following table summarizes the opcodes and their arguments: 17663 17664 rs 16 bit source register 17665 rd 16 bit destination register 17666 rbs 8 bit source register 17667 rbd 8 bit destination register 17668 rrs 32 bit source register 17669 rrd 32 bit destination register 17670 rqs 64 bit source register 17671 rqd 64 bit destination register 17672 addr 16/24 bit address 17673 imm immediate data 17674 17675 adc rd,rs clrb addr cpsir @rd,@rs,rr,cc 17676 adcb rbd,rbs clrb addr(rd) cpsirb @rd,@rs,rr,cc 17677 add rd,@rs clrb rbd dab rbd 17678 add rd,addr com @rd dbjnz rbd,disp7 17679 add rd,addr(rs) com addr dec @rd,imm4m1 17680 add rd,imm16 com addr(rd) dec addr(rd),imm4m1 17681 add rd,rs com rd dec addr,imm4m1 17682 addb rbd,@rs comb @rd dec rd,imm4m1 17683 addb rbd,addr comb addr decb @rd,imm4m1 17684 addb rbd,addr(rs) comb addr(rd) decb addr(rd),imm4m1 17685 addb rbd,imm8 comb rbd decb addr,imm4m1 17686 addb rbd,rbs comflg flags decb rbd,imm4m1 17687 addl rrd,@rs cp @rd,imm16 di i2 17688 addl rrd,addr cp addr(rd),imm16 div rrd,@rs 17689 addl rrd,addr(rs) cp addr,imm16 div rrd,addr 17690 addl rrd,imm32 cp rd,@rs div rrd,addr(rs) 17691 addl rrd,rrs cp rd,addr div rrd,imm16 17692 and rd,@rs cp rd,addr(rs) div rrd,rs 17693 and rd,addr cp rd,imm16 divl rqd,@rs 17694 and rd,addr(rs) cp rd,rs divl rqd,addr 17695 and rd,imm16 cpb @rd,imm8 divl rqd,addr(rs) 17696 and rd,rs cpb addr(rd),imm8 divl rqd,imm32 17697 andb rbd,@rs cpb addr,imm8 divl rqd,rrs 17698 andb rbd,addr cpb rbd,@rs djnz rd,disp7 17699 andb rbd,addr(rs) cpb rbd,addr ei i2 17700 andb rbd,imm8 cpb rbd,addr(rs) ex rd,@rs 17701 andb rbd,rbs cpb rbd,imm8 ex rd,addr 17702 bit @rd,imm4 cpb rbd,rbs ex rd,addr(rs) 17703 bit addr(rd),imm4 cpd rd,@rs,rr,cc ex rd,rs 17704 bit addr,imm4 cpdb rbd,@rs,rr,cc exb rbd,@rs 17705 bit rd,imm4 cpdr rd,@rs,rr,cc exb rbd,addr 17706 bit rd,rs cpdrb rbd,@rs,rr,cc exb rbd,addr(rs) 17707 bitb @rd,imm4 cpi rd,@rs,rr,cc exb rbd,rbs 17708 bitb addr(rd),imm4 cpib rbd,@rs,rr,cc ext0e imm8 17709 bitb addr,imm4 cpir rd,@rs,rr,cc ext0f imm8 17710 bitb rbd,imm4 cpirb rbd,@rs,rr,cc ext8e imm8 17711 bitb rbd,rs cpl rrd,@rs ext8f imm8 17712 bpt cpl rrd,addr exts rrd 17713 call @rd cpl rrd,addr(rs) extsb rd 17714 call addr cpl rrd,imm32 extsl rqd 17715 call addr(rd) cpl rrd,rrs halt 17716 calr disp12 cpsd @rd,@rs,rr,cc in rd,@rs 17717 clr @rd cpsdb @rd,@rs,rr,cc in rd,imm16 17718 clr addr cpsdr @rd,@rs,rr,cc inb rbd,@rs 17719 clr addr(rd) cpsdrb @rd,@rs,rr,cc inb rbd,imm16 17720 clr rd cpsi @rd,@rs,rr,cc inc @rd,imm4m1 17721 clrb @rd cpsib @rd,@rs,rr,cc inc addr(rd),imm4m1 17722 inc addr,imm4m1 ldb rbd,rs(rx) mult rrd,addr(rs) 17723 inc rd,imm4m1 ldb rd(imm16),rbs mult rrd,imm16 17724 incb @rd,imm4m1 ldb rd(rx),rbs mult rrd,rs 17725 incb addr(rd),imm4m1 ldctl ctrl,rs multl rqd,@rs 17726 incb addr,imm4m1 ldctl rd,ctrl multl rqd,addr 17727 incb rbd,imm4m1 ldd @rs,@rd,rr multl rqd,addr(rs) 17728 ind @rd,@rs,ra lddb @rs,@rd,rr multl rqd,imm32 17729 indb @rd,@rs,rba lddr @rs,@rd,rr multl rqd,rrs 17730 inib @rd,@rs,ra lddrb @rs,@rd,rr neg @rd 17731 inibr @rd,@rs,ra ldi @rd,@rs,rr neg addr 17732 iret ldib @rd,@rs,rr neg addr(rd) 17733 jp cc,@rd ldir @rd,@rs,rr neg rd 17734 jp cc,addr ldirb @rd,@rs,rr negb @rd 17735 jp cc,addr(rd) ldk rd,imm4 negb addr 17736 jr cc,disp8 ldl @rd,rrs negb addr(rd) 17737 ld @rd,imm16 ldl addr(rd),rrs negb rbd 17738 ld @rd,rs ldl addr,rrs nop 17739 ld addr(rd),imm16 ldl rd(imm16),rrs or rd,@rs 17740 ld addr(rd),rs ldl rd(rx),rrs or rd,addr 17741 ld addr,imm16 ldl rrd,@rs or rd,addr(rs) 17742 ld addr,rs ldl rrd,addr or rd,imm16 17743 ld rd(imm16),rs ldl rrd,addr(rs) or rd,rs 17744 ld rd(rx),rs ldl rrd,imm32 orb rbd,@rs 17745 ld rd,@rs ldl rrd,rrs orb rbd,addr 17746 ld rd,addr ldl rrd,rs(imm16) orb rbd,addr(rs) 17747 ld rd,addr(rs) ldl rrd,rs(rx) orb rbd,imm8 17748 ld rd,imm16 ldm @rd,rs,n orb rbd,rbs 17749 ld rd,rs ldm addr(rd),rs,n out @rd,rs 17750 ld rd,rs(imm16) ldm addr,rs,n out imm16,rs 17751 ld rd,rs(rx) ldm rd,@rs,n outb @rd,rbs 17752 lda rd,addr ldm rd,addr(rs),n outb imm16,rbs 17753 lda rd,addr(rs) ldm rd,addr,n outd @rd,@rs,ra 17754 lda rd,rs(imm16) ldps @rs outdb @rd,@rs,rba 17755 lda rd,rs(rx) ldps addr outib @rd,@rs,ra 17756 ldar rd,disp16 ldps addr(rs) outibr @rd,@rs,ra 17757 ldb @rd,imm8 ldr disp16,rs pop @rd,@rs 17758 ldb @rd,rbs ldr rd,disp16 pop addr(rd),@rs 17759 ldb addr(rd),imm8 ldrb disp16,rbs pop addr,@rs 17760 ldb addr(rd),rbs ldrb rbd,disp16 pop rd,@rs 17761 ldb addr,imm8 ldrl disp16,rrs popl @rd,@rs 17762 ldb addr,rbs ldrl rrd,disp16 popl addr(rd),@rs 17763 ldb rbd,@rs mbit popl addr,@rs 17764 ldb rbd,addr mreq rd popl rrd,@rs 17765 ldb rbd,addr(rs) mres push @rd,@rs 17766 ldb rbd,imm8 mset push @rd,addr 17767 ldb rbd,rbs mult rrd,@rs push @rd,addr(rs) 17768 ldb rbd,rs(imm16) mult rrd,addr push @rd,imm16 17769 push @rd,rs set addr,imm4 subl rrd,imm32 17770 pushl @rd,@rs set rd,imm4 subl rrd,rrs 17771 pushl @rd,addr set rd,rs tcc cc,rd 17772 pushl @rd,addr(rs) setb @rd,imm4 tccb cc,rbd 17773 pushl @rd,rrs setb addr(rd),imm4 test @rd 17774 res @rd,imm4 setb addr,imm4 test addr 17775 res addr(rd),imm4 setb rbd,imm4 test addr(rd) 17776 res addr,imm4 setb rbd,rs test rd 17777 res rd,imm4 setflg imm4 testb @rd 17778 res rd,rs sinb rbd,imm16 testb addr 17779 resb @rd,imm4 sinb rd,imm16 testb addr(rd) 17780 resb addr(rd),imm4 sind @rd,@rs,ra testb rbd 17781 resb addr,imm4 sindb @rd,@rs,rba testl @rd 17782 resb rbd,imm4 sinib @rd,@rs,ra testl addr 17783 resb rbd,rs sinibr @rd,@rs,ra testl addr(rd) 17784 resflg imm4 sla rd,imm8 testl rrd 17785 ret cc slab rbd,imm8 trdb @rd,@rs,rba 17786 rl rd,imm1or2 slal rrd,imm8 trdrb @rd,@rs,rba 17787 rlb rbd,imm1or2 sll rd,imm8 trib @rd,@rs,rbr 17788 rlc rd,imm1or2 sllb rbd,imm8 trirb @rd,@rs,rbr 17789 rlcb rbd,imm1or2 slll rrd,imm8 trtdrb @ra,@rb,rbr 17790 rldb rbb,rba sout imm16,rs trtib @ra,@rb,rr 17791 rr rd,imm1or2 soutb imm16,rbs trtirb @ra,@rb,rbr 17792 rrb rbd,imm1or2 soutd @rd,@rs,ra trtrb @ra,@rb,rbr 17793 rrc rd,imm1or2 soutdb @rd,@rs,rba tset @rd 17794 rrcb rbd,imm1or2 soutib @rd,@rs,ra tset addr 17795 rrdb rbb,rba soutibr @rd,@rs,ra tset addr(rd) 17796 rsvd36 sra rd,imm8 tset rd 17797 rsvd38 srab rbd,imm8 tsetb @rd 17798 rsvd78 sral rrd,imm8 tsetb addr 17799 rsvd7e srl rd,imm8 tsetb addr(rd) 17800 rsvd9d srlb rbd,imm8 tsetb rbd 17801 rsvd9f srll rrd,imm8 xor rd,@rs 17802 rsvdb9 sub rd,@rs xor rd,addr 17803 rsvdbf sub rd,addr xor rd,addr(rs) 17804 sbc rd,rs sub rd,addr(rs) xor rd,imm16 17805 sbcb rbd,rbs sub rd,imm16 xor rd,rs 17806 sc imm8 sub rd,rs xorb rbd,@rs 17807 sda rd,rs subb rbd,@rs xorb rbd,addr 17808 sdab rbd,rs subb rbd,addr xorb rbd,addr(rs) 17809 sdal rrd,rs subb rbd,addr(rs) xorb rbd,imm8 17810 sdl rd,rs subb rbd,imm8 xorb rbd,rbs 17811 sdlb rbd,rs subb rbd,rbs xorb rbd,rbs 17812 sdll rrd,rs subl rrd,@rs 17813 set @rd,imm4 subl rrd,addr 17814 set addr(rd),imm4 subl rrd,addr(rs) 17815 17816 17817File: as.info, Node: Vax-Dependent, Prev: Z8000-Dependent, Up: Machine Dependencies 17818 178199.40 VAX Dependent Features 17820=========================== 17821 17822* Menu: 17823 17824* VAX-Opts:: VAX Command-Line Options 17825* VAX-float:: VAX Floating Point 17826* VAX-directives:: Vax Machine Directives 17827* VAX-opcodes:: VAX Opcodes 17828* VAX-branch:: VAX Branch Improvement 17829* VAX-operands:: VAX Operands 17830* VAX-no:: Not Supported on VAX 17831 17832 17833File: as.info, Node: VAX-Opts, Next: VAX-float, Up: Vax-Dependent 17834 178359.40.1 VAX Command-Line Options 17836------------------------------- 17837 17838The Vax version of `as' accepts any of the following options, gives a 17839warning message that the option was ignored and proceeds. These 17840options are for compatibility with scripts designed for other people's 17841assemblers. 17842 17843``-D' (Debug)' 17844``-S' (Symbol Table)' 17845``-T' (Token Trace)' 17846 These are obsolete options used to debug old assemblers. 17847 17848``-d' (Displacement size for JUMPs)' 17849 This option expects a number following the `-d'. Like options 17850 that expect filenames, the number may immediately follow the `-d' 17851 (old standard) or constitute the whole of the command line 17852 argument that follows `-d' (GNU standard). 17853 17854``-V' (Virtualize Interpass Temporary File)' 17855 Some other assemblers use a temporary file. This option commanded 17856 them to keep the information in active memory rather than in a 17857 disk file. `as' always does this, so this option is redundant. 17858 17859``-J' (JUMPify Longer Branches)' 17860 Many 32-bit computers permit a variety of branch instructions to 17861 do the same job. Some of these instructions are short (and fast) 17862 but have a limited range; others are long (and slow) but can 17863 branch anywhere in virtual memory. Often there are 3 flavors of 17864 branch: short, medium and long. Some other assemblers would emit 17865 short and medium branches, unless told by this option to emit 17866 short and long branches. 17867 17868``-t' (Temporary File Directory)' 17869 Some other assemblers may use a temporary file, and this option 17870 takes a filename being the directory to site the temporary file. 17871 Since `as' does not use a temporary disk file, this option makes 17872 no difference. `-t' needs exactly one filename. 17873 17874 The Vax version of the assembler accepts additional options when 17875compiled for VMS: 17876 17877`-h N' 17878 External symbol or section (used for global variables) names are 17879 not case sensitive on VAX/VMS and always mapped to upper case. 17880 This is contrary to the C language definition which explicitly 17881 distinguishes upper and lower case. To implement a standard 17882 conforming C compiler, names must be changed (mapped) to preserve 17883 the case information. The default mapping is to convert all lower 17884 case characters to uppercase and adding an underscore followed by 17885 a 6 digit hex value, representing a 24 digit binary value. The 17886 one digits in the binary value represent which characters are 17887 uppercase in the original symbol name. 17888 17889 The `-h N' option determines how we map names. This takes several 17890 values. No `-h' switch at all allows case hacking as described 17891 above. A value of zero (`-h0') implies names should be upper 17892 case, and inhibits the case hack. A value of 2 (`-h2') implies 17893 names should be all lower case, with no case hack. A value of 3 17894 (`-h3') implies that case should be preserved. The value 1 is 17895 unused. The `-H' option directs `as' to display every mapped 17896 symbol during assembly. 17897 17898 Symbols whose names include a dollar sign `$' are exceptions to the 17899 general name mapping. These symbols are normally only used to 17900 reference VMS library names. Such symbols are always mapped to 17901 upper case. 17902 17903`-+' 17904 The `-+' option causes `as' to truncate any symbol name larger 17905 than 31 characters. The `-+' option also prevents some code 17906 following the `_main' symbol normally added to make the object 17907 file compatible with Vax-11 "C". 17908 17909`-1' 17910 This option is ignored for backward compatibility with `as' 17911 version 1.x. 17912 17913`-H' 17914 The `-H' option causes `as' to print every symbol which was 17915 changed by case mapping. 17916 17917 17918File: as.info, Node: VAX-float, Next: VAX-directives, Prev: VAX-Opts, Up: Vax-Dependent 17919 179209.40.2 VAX Floating Point 17921------------------------- 17922 17923Conversion of flonums to floating point is correct, and compatible with 17924previous assemblers. Rounding is towards zero if the remainder is 17925exactly half the least significant bit. 17926 17927 `D', `F', `G' and `H' floating point formats are understood. 17928 17929 Immediate floating literals (_e.g._ `S`$6.9') are rendered 17930correctly. Again, rounding is towards zero in the boundary case. 17931 17932 The `.float' directive produces `f' format numbers. The `.double' 17933directive produces `d' format numbers. 17934 17935 17936File: as.info, Node: VAX-directives, Next: VAX-opcodes, Prev: VAX-float, Up: Vax-Dependent 17937 179389.40.3 Vax Machine Directives 17939----------------------------- 17940 17941The Vax version of the assembler supports four directives for 17942generating Vax floating point constants. They are described in the 17943table below. 17944 17945`.dfloat' 17946 This expects zero or more flonums, separated by commas, and 17947 assembles Vax `d' format 64-bit floating point constants. 17948 17949`.ffloat' 17950 This expects zero or more flonums, separated by commas, and 17951 assembles Vax `f' format 32-bit floating point constants. 17952 17953`.gfloat' 17954 This expects zero or more flonums, separated by commas, and 17955 assembles Vax `g' format 64-bit floating point constants. 17956 17957`.hfloat' 17958 This expects zero or more flonums, separated by commas, and 17959 assembles Vax `h' format 128-bit floating point constants. 17960 17961 17962 17963File: as.info, Node: VAX-opcodes, Next: VAX-branch, Prev: VAX-directives, Up: Vax-Dependent 17964 179659.40.4 VAX Opcodes 17966------------------ 17967 17968All DEC mnemonics are supported. Beware that `case...' instructions 17969have exactly 3 operands. The dispatch table that follows the `case...' 17970instruction should be made with `.word' statements. This is compatible 17971with all unix assemblers we know of. 17972 17973 17974File: as.info, Node: VAX-branch, Next: VAX-operands, Prev: VAX-opcodes, Up: Vax-Dependent 17975 179769.40.5 VAX Branch Improvement 17977----------------------------- 17978 17979Certain pseudo opcodes are permitted. They are for branch 17980instructions. They expand to the shortest branch instruction that 17981reaches the target. Generally these mnemonics are made by substituting 17982`j' for `b' at the start of a DEC mnemonic. This feature is included 17983both for compatibility and to help compilers. If you do not need this 17984feature, avoid these opcodes. Here are the mnemonics, and the code 17985they can expand into. 17986 17987`jbsb' 17988 `Jsb' is already an instruction mnemonic, so we chose `jbsb'. 17989 (byte displacement) 17990 `bsbb ...' 17991 17992 (word displacement) 17993 `bsbw ...' 17994 17995 (long displacement) 17996 `jsb ...' 17997 17998`jbr' 17999`jr' 18000 Unconditional branch. 18001 (byte displacement) 18002 `brb ...' 18003 18004 (word displacement) 18005 `brw ...' 18006 18007 (long displacement) 18008 `jmp ...' 18009 18010`jCOND' 18011 COND may be any one of the conditional branches `neq', `nequ', 18012 `eql', `eqlu', `gtr', `geq', `lss', `gtru', `lequ', `vc', `vs', 18013 `gequ', `cc', `lssu', `cs'. COND may also be one of the bit tests 18014 `bs', `bc', `bss', `bcs', `bsc', `bcc', `bssi', `bcci', `lbs', 18015 `lbc'. NOTCOND is the opposite condition to COND. 18016 (byte displacement) 18017 `bCOND ...' 18018 18019 (word displacement) 18020 `bNOTCOND foo ; brw ... ; foo:' 18021 18022 (long displacement) 18023 `bNOTCOND foo ; jmp ... ; foo:' 18024 18025`jacbX' 18026 X may be one of `b d f g h l w'. 18027 (word displacement) 18028 `OPCODE ...' 18029 18030 (long displacement) 18031 OPCODE ..., foo ; 18032 brb bar ; 18033 foo: jmp ... ; 18034 bar: 18035 18036`jaobYYY' 18037 YYY may be one of `lss leq'. 18038 18039`jsobZZZ' 18040 ZZZ may be one of `geq gtr'. 18041 (byte displacement) 18042 `OPCODE ...' 18043 18044 (word displacement) 18045 OPCODE ..., foo ; 18046 brb bar ; 18047 foo: brw DESTINATION ; 18048 bar: 18049 18050 (long displacement) 18051 OPCODE ..., foo ; 18052 brb bar ; 18053 foo: jmp DESTINATION ; 18054 bar: 18055 18056`aobleq' 18057`aoblss' 18058`sobgeq' 18059`sobgtr' 18060 18061 (byte displacement) 18062 `OPCODE ...' 18063 18064 (word displacement) 18065 OPCODE ..., foo ; 18066 brb bar ; 18067 foo: brw DESTINATION ; 18068 bar: 18069 18070 (long displacement) 18071 OPCODE ..., foo ; 18072 brb bar ; 18073 foo: jmp DESTINATION ; 18074 bar: 18075 18076 18077File: as.info, Node: VAX-operands, Next: VAX-no, Prev: VAX-branch, Up: Vax-Dependent 18078 180799.40.6 VAX Operands 18080------------------- 18081 18082The immediate character is `$' for Unix compatibility, not `#' as DEC 18083writes it. 18084 18085 The indirect character is `*' for Unix compatibility, not `@' as DEC 18086writes it. 18087 18088 The displacement sizing character is ``' (an accent grave) for Unix 18089compatibility, not `^' as DEC writes it. The letter preceding ``' may 18090have either case. `G' is not understood, but all other letters (`b i l 18091s w') are understood. 18092 18093 Register names understood are `r0 r1 r2 ... r15 ap fp sp pc'. Upper 18094and lower case letters are equivalent. 18095 18096 For instance 18097 tstb *w`$4(r5) 18098 18099 Any expression is permitted in an operand. Operands are comma 18100separated. 18101 18102 18103File: as.info, Node: VAX-no, Prev: VAX-operands, Up: Vax-Dependent 18104 181059.40.7 Not Supported on VAX 18106--------------------------- 18107 18108Vax bit fields can not be assembled with `as'. Someone can add the 18109required code if they really need it. 18110 18111 18112File: as.info, Node: V850-Dependent, Next: Xtensa-Dependent, Prev: TIC6X-Dependent, Up: Machine Dependencies 18113 181149.41 v850 Dependent Features 18115============================ 18116 18117* Menu: 18118 18119* V850 Options:: Options 18120* V850 Syntax:: Syntax 18121* V850 Floating Point:: Floating Point 18122* V850 Directives:: V850 Machine Directives 18123* V850 Opcodes:: Opcodes 18124 18125 18126File: as.info, Node: V850 Options, Next: V850 Syntax, Up: V850-Dependent 18127 181289.41.1 Options 18129-------------- 18130 18131`as' supports the following additional command-line options for the 18132V850 processor family: 18133 18134`-wsigned_overflow' 18135 Causes warnings to be produced when signed immediate values 18136 overflow the space available for then within their opcodes. By 18137 default this option is disabled as it is possible to receive 18138 spurious warnings due to using exact bit patterns as immediate 18139 constants. 18140 18141`-wunsigned_overflow' 18142 Causes warnings to be produced when unsigned immediate values 18143 overflow the space available for then within their opcodes. By 18144 default this option is disabled as it is possible to receive 18145 spurious warnings due to using exact bit patterns as immediate 18146 constants. 18147 18148`-mv850' 18149 Specifies that the assembled code should be marked as being 18150 targeted at the V850 processor. This allows the linker to detect 18151 attempts to link such code with code assembled for other 18152 processors. 18153 18154`-mv850e' 18155 Specifies that the assembled code should be marked as being 18156 targeted at the V850E processor. This allows the linker to detect 18157 attempts to link such code with code assembled for other 18158 processors. 18159 18160`-mv850e1' 18161 Specifies that the assembled code should be marked as being 18162 targeted at the V850E1 processor. This allows the linker to 18163 detect attempts to link such code with code assembled for other 18164 processors. 18165 18166`-mv850any' 18167 Specifies that the assembled code should be marked as being 18168 targeted at the V850 processor but support instructions that are 18169 specific to the extended variants of the process. This allows the 18170 production of binaries that contain target specific code, but 18171 which are also intended to be used in a generic fashion. For 18172 example libgcc.a contains generic routines used by the code 18173 produced by GCC for all versions of the v850 architecture, 18174 together with support routines only used by the V850E architecture. 18175 18176`-mv850e2' 18177 Specifies that the assembled code should be marked as being 18178 targeted at the V850E2 processor. This allows the linker to 18179 detect attempts to link such code with code assembled for other 18180 processors. 18181 18182`-mv850e2v3' 18183 Specifies that the assembled code should be marked as being 18184 targeted at the V850E2V3 processor. This allows the linker to 18185 detect attempts to link such code with code assembled for other 18186 processors. 18187 18188`-mrelax' 18189 Enables relaxation. This allows the .longcall and .longjump pseudo 18190 ops to be used in the assembler source code. These ops label 18191 sections of code which are either a long function call or a long 18192 branch. The assembler will then flag these sections of code and 18193 the linker will attempt to relax them. 18194 18195 18196 18197File: as.info, Node: V850 Syntax, Next: V850 Floating Point, Prev: V850 Options, Up: V850-Dependent 18198 181999.41.2 Syntax 18200------------- 18201 18202* Menu: 18203 18204* V850-Chars:: Special Characters 18205* V850-Regs:: Register Names 18206 18207 18208File: as.info, Node: V850-Chars, Next: V850-Regs, Up: V850 Syntax 18209 182109.41.2.1 Special Characters 18211........................... 18212 18213`#' is the line comment character. 18214 18215 18216File: as.info, Node: V850-Regs, Prev: V850-Chars, Up: V850 Syntax 18217 182189.41.2.2 Register Names 18219....................... 18220 18221`as' supports the following names for registers: 18222`general register 0' 18223 r0, zero 18224 18225`general register 1' 18226 r1 18227 18228`general register 2' 18229 r2, hp 18230 18231`general register 3' 18232 r3, sp 18233 18234`general register 4' 18235 r4, gp 18236 18237`general register 5' 18238 r5, tp 18239 18240`general register 6' 18241 r6 18242 18243`general register 7' 18244 r7 18245 18246`general register 8' 18247 r8 18248 18249`general register 9' 18250 r9 18251 18252`general register 10' 18253 r10 18254 18255`general register 11' 18256 r11 18257 18258`general register 12' 18259 r12 18260 18261`general register 13' 18262 r13 18263 18264`general register 14' 18265 r14 18266 18267`general register 15' 18268 r15 18269 18270`general register 16' 18271 r16 18272 18273`general register 17' 18274 r17 18275 18276`general register 18' 18277 r18 18278 18279`general register 19' 18280 r19 18281 18282`general register 20' 18283 r20 18284 18285`general register 21' 18286 r21 18287 18288`general register 22' 18289 r22 18290 18291`general register 23' 18292 r23 18293 18294`general register 24' 18295 r24 18296 18297`general register 25' 18298 r25 18299 18300`general register 26' 18301 r26 18302 18303`general register 27' 18304 r27 18305 18306`general register 28' 18307 r28 18308 18309`general register 29' 18310 r29 18311 18312`general register 30' 18313 r30, ep 18314 18315`general register 31' 18316 r31, lp 18317 18318`system register 0' 18319 eipc 18320 18321`system register 1' 18322 eipsw 18323 18324`system register 2' 18325 fepc 18326 18327`system register 3' 18328 fepsw 18329 18330`system register 4' 18331 ecr 18332 18333`system register 5' 18334 psw 18335 18336`system register 16' 18337 ctpc 18338 18339`system register 17' 18340 ctpsw 18341 18342`system register 18' 18343 dbpc 18344 18345`system register 19' 18346 dbpsw 18347 18348`system register 20' 18349 ctbp 18350 18351 18352File: as.info, Node: V850 Floating Point, Next: V850 Directives, Prev: V850 Syntax, Up: V850-Dependent 18353 183549.41.3 Floating Point 18355--------------------- 18356 18357The V850 family uses IEEE floating-point numbers. 18358 18359 18360File: as.info, Node: V850 Directives, Next: V850 Opcodes, Prev: V850 Floating Point, Up: V850-Dependent 18361 183629.41.4 V850 Machine Directives 18363------------------------------ 18364 18365`.offset <EXPRESSION>' 18366 Moves the offset into the current section to the specified amount. 18367 18368`.section "name", <type>' 18369 This is an extension to the standard .section directive. It sets 18370 the current section to be <type> and creates an alias for this 18371 section called "name". 18372 18373`.v850' 18374 Specifies that the assembled code should be marked as being 18375 targeted at the V850 processor. This allows the linker to detect 18376 attempts to link such code with code assembled for other 18377 processors. 18378 18379`.v850e' 18380 Specifies that the assembled code should be marked as being 18381 targeted at the V850E processor. This allows the linker to detect 18382 attempts to link such code with code assembled for other 18383 processors. 18384 18385`.v850e1' 18386 Specifies that the assembled code should be marked as being 18387 targeted at the V850E1 processor. This allows the linker to 18388 detect attempts to link such code with code assembled for other 18389 processors. 18390 18391`.v850e2' 18392 Specifies that the assembled code should be marked as being 18393 targeted at the V850E2 processor. This allows the linker to 18394 detect attempts to link such code with code assembled for other 18395 processors. 18396 18397`.v850e2v3' 18398 Specifies that the assembled code should be marked as being 18399 targeted at the V850E2V3 processor. This allows the linker to 18400 detect attempts to link such code with code assembled for other 18401 processors. 18402 18403 18404 18405File: as.info, Node: V850 Opcodes, Prev: V850 Directives, Up: V850-Dependent 18406 184079.41.5 Opcodes 18408-------------- 18409 18410`as' implements all the standard V850 opcodes. 18411 18412 `as' also implements the following pseudo ops: 18413 18414`hi0()' 18415 Computes the higher 16 bits of the given expression and stores it 18416 into the immediate operand field of the given instruction. For 18417 example: 18418 18419 `mulhi hi0(here - there), r5, r6' 18420 18421 computes the difference between the address of labels 'here' and 18422 'there', takes the upper 16 bits of this difference, shifts it 18423 down 16 bits and then multiplies it by the lower 16 bits in 18424 register 5, putting the result into register 6. 18425 18426`lo()' 18427 Computes the lower 16 bits of the given expression and stores it 18428 into the immediate operand field of the given instruction. For 18429 example: 18430 18431 `addi lo(here - there), r5, r6' 18432 18433 computes the difference between the address of labels 'here' and 18434 'there', takes the lower 16 bits of this difference and adds it to 18435 register 5, putting the result into register 6. 18436 18437`hi()' 18438 Computes the higher 16 bits of the given expression and then adds 18439 the value of the most significant bit of the lower 16 bits of the 18440 expression and stores the result into the immediate operand field 18441 of the given instruction. For example the following code can be 18442 used to compute the address of the label 'here' and store it into 18443 register 6: 18444 18445 `movhi hi(here), r0, r6' `movea lo(here), r6, r6' 18446 18447 The reason for this special behaviour is that movea performs a sign 18448 extension on its immediate operand. So for example if the address 18449 of 'here' was 0xFFFFFFFF then without the special behaviour of the 18450 hi() pseudo-op the movhi instruction would put 0xFFFF0000 into r6, 18451 then the movea instruction would takes its immediate operand, 18452 0xFFFF, sign extend it to 32 bits, 0xFFFFFFFF, and then add it 18453 into r6 giving 0xFFFEFFFF which is wrong (the fifth nibble is E). 18454 With the hi() pseudo op adding in the top bit of the lo() pseudo 18455 op, the movhi instruction actually stores 0 into r6 (0xFFFF + 1 = 18456 0x0000), so that the movea instruction stores 0xFFFFFFFF into r6 - 18457 the right value. 18458 18459`hilo()' 18460 Computes the 32 bit value of the given expression and stores it 18461 into the immediate operand field of the given instruction (which 18462 must be a mov instruction). For example: 18463 18464 `mov hilo(here), r6' 18465 18466 computes the absolute address of label 'here' and puts the result 18467 into register 6. 18468 18469`sdaoff()' 18470 Computes the offset of the named variable from the start of the 18471 Small Data Area (whoes address is held in register 4, the GP 18472 register) and stores the result as a 16 bit signed value in the 18473 immediate operand field of the given instruction. For example: 18474 18475 `ld.w sdaoff(_a_variable)[gp],r6' 18476 18477 loads the contents of the location pointed to by the label 18478 '_a_variable' into register 6, provided that the label is located 18479 somewhere within +/- 32K of the address held in the GP register. 18480 [Note the linker assumes that the GP register contains a fixed 18481 address set to the address of the label called '__gp'. This can 18482 either be set up automatically by the linker, or specifically set 18483 by using the `--defsym __gp=<value>' command line option]. 18484 18485`tdaoff()' 18486 Computes the offset of the named variable from the start of the 18487 Tiny Data Area (whoes address is held in register 30, the EP 18488 register) and stores the result as a 4,5, 7 or 8 bit unsigned 18489 value in the immediate operand field of the given instruction. 18490 For example: 18491 18492 `sld.w tdaoff(_a_variable)[ep],r6' 18493 18494 loads the contents of the location pointed to by the label 18495 '_a_variable' into register 6, provided that the label is located 18496 somewhere within +256 bytes of the address held in the EP 18497 register. [Note the linker assumes that the EP register contains 18498 a fixed address set to the address of the label called '__ep'. 18499 This can either be set up automatically by the linker, or 18500 specifically set by using the `--defsym __ep=<value>' command line 18501 option]. 18502 18503`zdaoff()' 18504 Computes the offset of the named variable from address 0 and 18505 stores the result as a 16 bit signed value in the immediate 18506 operand field of the given instruction. For example: 18507 18508 `movea zdaoff(_a_variable),zero,r6' 18509 18510 puts the address of the label '_a_variable' into register 6, 18511 assuming that the label is somewhere within the first 32K of 18512 memory. (Strictly speaking it also possible to access the last 18513 32K of memory as well, as the offsets are signed). 18514 18515`ctoff()' 18516 Computes the offset of the named variable from the start of the 18517 Call Table Area (whoes address is helg in system register 20, the 18518 CTBP register) and stores the result a 6 or 16 bit unsigned value 18519 in the immediate field of then given instruction or piece of data. 18520 For example: 18521 18522 `callt ctoff(table_func1)' 18523 18524 will put the call the function whoes address is held in the call 18525 table at the location labeled 'table_func1'. 18526 18527`.longcall `name'' 18528 Indicates that the following sequence of instructions is a long 18529 call to function `name'. The linker will attempt to shorten this 18530 call sequence if `name' is within a 22bit offset of the call. Only 18531 valid if the `-mrelax' command line switch has been enabled. 18532 18533`.longjump `name'' 18534 Indicates that the following sequence of instructions is a long 18535 jump to label `name'. The linker will attempt to shorten this code 18536 sequence if `name' is within a 22bit offset of the jump. Only 18537 valid if the `-mrelax' command line switch has been enabled. 18538 18539 18540 For information on the V850 instruction set, see `V850 Family 1854132-/16-Bit single-Chip Microcontroller Architecture Manual' from NEC. 18542Ltd. 18543 18544 18545File: as.info, Node: Xtensa-Dependent, Next: Z80-Dependent, Prev: V850-Dependent, Up: Machine Dependencies 18546 185479.42 Xtensa Dependent Features 18548============================== 18549 18550 This chapter covers features of the GNU assembler that are specific 18551to the Xtensa architecture. For details about the Xtensa instruction 18552set, please consult the `Xtensa Instruction Set Architecture (ISA) 18553Reference Manual'. 18554 18555* Menu: 18556 18557* Xtensa Options:: Command-line Options. 18558* Xtensa Syntax:: Assembler Syntax for Xtensa Processors. 18559* Xtensa Optimizations:: Assembler Optimizations. 18560* Xtensa Relaxation:: Other Automatic Transformations. 18561* Xtensa Directives:: Directives for Xtensa Processors. 18562 18563 18564File: as.info, Node: Xtensa Options, Next: Xtensa Syntax, Up: Xtensa-Dependent 18565 185669.42.1 Command Line Options 18567--------------------------- 18568 18569The Xtensa version of the GNU assembler supports these special options: 18570 18571`--text-section-literals | --no-text-section-literals' 18572 Control the treatment of literal pools. The default is 18573 `--no-text-section-literals', which places literals in separate 18574 sections in the output file. This allows the literal pool to be 18575 placed in a data RAM/ROM. With `--text-section-literals', the 18576 literals are interspersed in the text section in order to keep 18577 them as close as possible to their references. This may be 18578 necessary for large assembly files, where the literals would 18579 otherwise be out of range of the `L32R' instructions in the text 18580 section. These options only affect literals referenced via 18581 PC-relative `L32R' instructions; literals for absolute mode `L32R' 18582 instructions are handled separately. *Note literal: Literal 18583 Directive. 18584 18585`--absolute-literals | --no-absolute-literals' 18586 Indicate to the assembler whether `L32R' instructions use absolute 18587 or PC-relative addressing. If the processor includes the absolute 18588 addressing option, the default is to use absolute `L32R' 18589 relocations. Otherwise, only the PC-relative `L32R' relocations 18590 can be used. 18591 18592`--target-align | --no-target-align' 18593 Enable or disable automatic alignment to reduce branch penalties 18594 at some expense in code size. *Note Automatic Instruction 18595 Alignment: Xtensa Automatic Alignment. This optimization is 18596 enabled by default. Note that the assembler will always align 18597 instructions like `LOOP' that have fixed alignment requirements. 18598 18599`--longcalls | --no-longcalls' 18600 Enable or disable transformation of call instructions to allow 18601 calls across a greater range of addresses. *Note Function Call 18602 Relaxation: Xtensa Call Relaxation. This option should be used 18603 when call targets can potentially be out of range. It may degrade 18604 both code size and performance, but the linker can generally 18605 optimize away the unnecessary overhead when a call ends up within 18606 range. The default is `--no-longcalls'. 18607 18608`--transform | --no-transform' 18609 Enable or disable all assembler transformations of Xtensa 18610 instructions, including both relaxation and optimization. The 18611 default is `--transform'; `--no-transform' should only be used in 18612 the rare cases when the instructions must be exactly as specified 18613 in the assembly source. Using `--no-transform' causes out of range 18614 instruction operands to be errors. 18615 18616`--rename-section OLDNAME=NEWNAME' 18617 Rename the OLDNAME section to NEWNAME. This option can be used 18618 multiple times to rename multiple sections. 18619 18620 18621File: as.info, Node: Xtensa Syntax, Next: Xtensa Optimizations, Prev: Xtensa Options, Up: Xtensa-Dependent 18622 186239.42.2 Assembler Syntax 18624----------------------- 18625 18626Block comments are delimited by `/*' and `*/'. End of line comments 18627may be introduced with either `#' or `//'. 18628 18629 Instructions consist of a leading opcode or macro name followed by 18630whitespace and an optional comma-separated list of operands: 18631 18632 OPCODE [OPERAND, ...] 18633 18634 Instructions must be separated by a newline or semicolon. 18635 18636 FLIX instructions, which bundle multiple opcodes together in a single 18637instruction, are specified by enclosing the bundled opcodes inside 18638braces: 18639 18640 { 18641 [FORMAT] 18642 OPCODE0 [OPERANDS] 18643 OPCODE1 [OPERANDS] 18644 OPCODE2 [OPERANDS] 18645 ... 18646 } 18647 18648 The opcodes in a FLIX instruction are listed in the same order as the 18649corresponding instruction slots in the TIE format declaration. 18650Directives and labels are not allowed inside the braces of a FLIX 18651instruction. A particular TIE format name can optionally be specified 18652immediately after the opening brace, but this is usually unnecessary. 18653The assembler will automatically search for a format that can encode the 18654specified opcodes, so the format name need only be specified in rare 18655cases where there is more than one applicable format and where it 18656matters which of those formats is used. A FLIX instruction can also be 18657specified on a single line by separating the opcodes with semicolons: 18658 18659 { [FORMAT;] OPCODE0 [OPERANDS]; OPCODE1 [OPERANDS]; OPCODE2 [OPERANDS]; ... } 18660 18661 If an opcode can only be encoded in a FLIX instruction but is not 18662specified as part of a FLIX bundle, the assembler will choose the 18663smallest format where the opcode can be encoded and will fill unused 18664instruction slots with no-ops. 18665 18666* Menu: 18667 18668* Xtensa Opcodes:: Opcode Naming Conventions. 18669* Xtensa Registers:: Register Naming. 18670 18671 18672File: as.info, Node: Xtensa Opcodes, Next: Xtensa Registers, Up: Xtensa Syntax 18673 186749.42.2.1 Opcode Names 18675..................... 18676 18677See the `Xtensa Instruction Set Architecture (ISA) Reference Manual' 18678for a complete list of opcodes and descriptions of their semantics. 18679 18680 If an opcode name is prefixed with an underscore character (`_'), 18681`as' will not transform that instruction in any way. The underscore 18682prefix disables both optimization (*note Xtensa Optimizations: Xtensa 18683Optimizations.) and relaxation (*note Xtensa Relaxation: Xtensa 18684Relaxation.) for that particular instruction. Only use the underscore 18685prefix when it is essential to select the exact opcode produced by the 18686assembler. Using this feature unnecessarily makes the code less 18687efficient by disabling assembler optimization and less flexible by 18688disabling relaxation. 18689 18690 Note that this special handling of underscore prefixes only applies 18691to Xtensa opcodes, not to either built-in macros or user-defined macros. 18692When an underscore prefix is used with a macro (e.g., `_MOV'), it 18693refers to a different macro. The assembler generally provides built-in 18694macros both with and without the underscore prefix, where the underscore 18695versions behave as if the underscore carries through to the instructions 18696in the macros. For example, `_MOV' may expand to `_MOV.N'. 18697 18698 The underscore prefix only applies to individual instructions, not to 18699series of instructions. For example, if a series of instructions have 18700underscore prefixes, the assembler will not transform the individual 18701instructions, but it may insert other instructions between them (e.g., 18702to align a `LOOP' instruction). To prevent the assembler from 18703modifying a series of instructions as a whole, use the `no-transform' 18704directive. *Note transform: Transform Directive. 18705 18706 18707File: as.info, Node: Xtensa Registers, Prev: Xtensa Opcodes, Up: Xtensa Syntax 18708 187099.42.2.2 Register Names 18710....................... 18711 18712The assembly syntax for a register file entry is the "short" name for a 18713TIE register file followed by the index into that register file. For 18714example, the general-purpose `AR' register file has a short name of 18715`a', so these registers are named `a0'...`a15'. As a special feature, 18716`sp' is also supported as a synonym for `a1'. Additional registers may 18717be added by processor configuration options and by designer-defined TIE 18718extensions. An initial `$' character is optional in all register names. 18719 18720 18721File: as.info, Node: Xtensa Optimizations, Next: Xtensa Relaxation, Prev: Xtensa Syntax, Up: Xtensa-Dependent 18722 187239.42.3 Xtensa Optimizations 18724--------------------------- 18725 18726The optimizations currently supported by `as' are generation of density 18727instructions where appropriate and automatic branch target alignment. 18728 18729* Menu: 18730 18731* Density Instructions:: Using Density Instructions. 18732* Xtensa Automatic Alignment:: Automatic Instruction Alignment. 18733 18734 18735File: as.info, Node: Density Instructions, Next: Xtensa Automatic Alignment, Up: Xtensa Optimizations 18736 187379.42.3.1 Using Density Instructions 18738................................... 18739 18740The Xtensa instruction set has a code density option that provides 1874116-bit versions of some of the most commonly used opcodes. Use of these 18742opcodes can significantly reduce code size. When possible, the 18743assembler automatically translates instructions from the core Xtensa 18744instruction set into equivalent instructions from the Xtensa code 18745density option. This translation can be disabled by using underscore 18746prefixes (*note Opcode Names: Xtensa Opcodes.), by using the 18747`--no-transform' command-line option (*note Command Line Options: 18748Xtensa Options.), or by using the `no-transform' directive (*note 18749transform: Transform Directive.). 18750 18751 It is a good idea _not_ to use the density instructions directly. 18752The assembler will automatically select dense instructions where 18753possible. If you later need to use an Xtensa processor without the code 18754density option, the same assembly code will then work without 18755modification. 18756 18757 18758File: as.info, Node: Xtensa Automatic Alignment, Prev: Density Instructions, Up: Xtensa Optimizations 18759 187609.42.3.2 Automatic Instruction Alignment 18761........................................ 18762 18763The Xtensa assembler will automatically align certain instructions, both 18764to optimize performance and to satisfy architectural requirements. 18765 18766 As an optimization to improve performance, the assembler attempts to 18767align branch targets so they do not cross instruction fetch boundaries. 18768(Xtensa processors can be configured with either 32-bit or 64-bit 18769instruction fetch widths.) An instruction immediately following a call 18770is treated as a branch target in this context, because it will be the 18771target of a return from the call. This alignment has the potential to 18772reduce branch penalties at some expense in code size. This 18773optimization is enabled by default. You can disable it with the 18774`--no-target-align' command-line option (*note Command Line Options: 18775Xtensa Options.). 18776 18777 The target alignment optimization is done without adding instructions 18778that could increase the execution time of the program. If there are 18779density instructions in the code preceding a target, the assembler can 18780change the target alignment by widening some of those instructions to 18781the equivalent 24-bit instructions. Extra bytes of padding can be 18782inserted immediately following unconditional jump and return 18783instructions. This approach is usually successful in aligning many, 18784but not all, branch targets. 18785 18786 The `LOOP' family of instructions must be aligned such that the 18787first instruction in the loop body does not cross an instruction fetch 18788boundary (e.g., with a 32-bit fetch width, a `LOOP' instruction must be 18789on either a 1 or 2 mod 4 byte boundary). The assembler knows about 18790this restriction and inserts the minimal number of 2 or 3 byte no-op 18791instructions to satisfy it. When no-op instructions are added, any 18792label immediately preceding the original loop will be moved in order to 18793refer to the loop instruction, not the newly generated no-op 18794instruction. To preserve binary compatibility across processors with 18795different fetch widths, the assembler conservatively assumes a 32-bit 18796fetch width when aligning `LOOP' instructions (except if the first 18797instruction in the loop is a 64-bit instruction). 18798 18799 Previous versions of the assembler automatically aligned `ENTRY' 18800instructions to 4-byte boundaries, but that alignment is now the 18801programmer's responsibility. 18802 18803 18804File: as.info, Node: Xtensa Relaxation, Next: Xtensa Directives, Prev: Xtensa Optimizations, Up: Xtensa-Dependent 18805 188069.42.4 Xtensa Relaxation 18807------------------------ 18808 18809When an instruction operand is outside the range allowed for that 18810particular instruction field, `as' can transform the code to use a 18811functionally-equivalent instruction or sequence of instructions. This 18812process is known as "relaxation". This is typically done for branch 18813instructions because the distance of the branch targets is not known 18814until assembly-time. The Xtensa assembler offers branch relaxation and 18815also extends this concept to function calls, `MOVI' instructions and 18816other instructions with immediate fields. 18817 18818* Menu: 18819 18820* Xtensa Branch Relaxation:: Relaxation of Branches. 18821* Xtensa Call Relaxation:: Relaxation of Function Calls. 18822* Xtensa Immediate Relaxation:: Relaxation of other Immediate Fields. 18823 18824 18825File: as.info, Node: Xtensa Branch Relaxation, Next: Xtensa Call Relaxation, Up: Xtensa Relaxation 18826 188279.42.4.1 Conditional Branch Relaxation 18828...................................... 18829 18830When the target of a branch is too far away from the branch itself, 18831i.e., when the offset from the branch to the target is too large to fit 18832in the immediate field of the branch instruction, it may be necessary to 18833replace the branch with a branch around a jump. For example, 18834 18835 beqz a2, L 18836 18837 may result in: 18838 18839 bnez.n a2, M 18840 j L 18841 M: 18842 18843 (The `BNEZ.N' instruction would be used in this example only if the 18844density option is available. Otherwise, `BNEZ' would be used.) 18845 18846 This relaxation works well because the unconditional jump instruction 18847has a much larger offset range than the various conditional branches. 18848However, an error will occur if a branch target is beyond the range of a 18849jump instruction. `as' cannot relax unconditional jumps. Similarly, 18850an error will occur if the original input contains an unconditional 18851jump to a target that is out of range. 18852 18853 Branch relaxation is enabled by default. It can be disabled by using 18854underscore prefixes (*note Opcode Names: Xtensa Opcodes.), the 18855`--no-transform' command-line option (*note Command Line Options: 18856Xtensa Options.), or the `no-transform' directive (*note transform: 18857Transform Directive.). 18858 18859 18860File: as.info, Node: Xtensa Call Relaxation, Next: Xtensa Immediate Relaxation, Prev: Xtensa Branch Relaxation, Up: Xtensa Relaxation 18861 188629.42.4.2 Function Call Relaxation 18863................................. 18864 18865Function calls may require relaxation because the Xtensa immediate call 18866instructions (`CALL0', `CALL4', `CALL8' and `CALL12') provide a 18867PC-relative offset of only 512 Kbytes in either direction. For larger 18868programs, it may be necessary to use indirect calls (`CALLX0', 18869`CALLX4', `CALLX8' and `CALLX12') where the target address is specified 18870in a register. The Xtensa assembler can automatically relax immediate 18871call instructions into indirect call instructions. This relaxation is 18872done by loading the address of the called function into the callee's 18873return address register and then using a `CALLX' instruction. So, for 18874example: 18875 18876 call8 func 18877 18878 might be relaxed to: 18879 18880 .literal .L1, func 18881 l32r a8, .L1 18882 callx8 a8 18883 18884 Because the addresses of targets of function calls are not generally 18885known until link-time, the assembler must assume the worst and relax all 18886the calls to functions in other source files, not just those that really 18887will be out of range. The linker can recognize calls that were 18888unnecessarily relaxed, and it will remove the overhead introduced by the 18889assembler for those cases where direct calls are sufficient. 18890 18891 Call relaxation is disabled by default because it can have a negative 18892effect on both code size and performance, although the linker can 18893usually eliminate the unnecessary overhead. If a program is too large 18894and some of the calls are out of range, function call relaxation can be 18895enabled using the `--longcalls' command-line option or the `longcalls' 18896directive (*note longcalls: Longcalls Directive.). 18897 18898 18899File: as.info, Node: Xtensa Immediate Relaxation, Prev: Xtensa Call Relaxation, Up: Xtensa Relaxation 18900 189019.42.4.3 Other Immediate Field Relaxation 18902......................................... 18903 18904The assembler normally performs the following other relaxations. They 18905can be disabled by using underscore prefixes (*note Opcode Names: 18906Xtensa Opcodes.), the `--no-transform' command-line option (*note 18907Command Line Options: Xtensa Options.), or the `no-transform' directive 18908(*note transform: Transform Directive.). 18909 18910 The `MOVI' machine instruction can only materialize values in the 18911range from -2048 to 2047. Values outside this range are best 18912materialized with `L32R' instructions. Thus: 18913 18914 movi a0, 100000 18915 18916 is assembled into the following machine code: 18917 18918 .literal .L1, 100000 18919 l32r a0, .L1 18920 18921 The `L8UI' machine instruction can only be used with immediate 18922offsets in the range from 0 to 255. The `L16SI' and `L16UI' machine 18923instructions can only be used with offsets from 0 to 510. The `L32I' 18924machine instruction can only be used with offsets from 0 to 1020. A 18925load offset outside these ranges can be materialized with an `L32R' 18926instruction if the destination register of the load is different than 18927the source address register. For example: 18928 18929 l32i a1, a0, 2040 18930 18931 is translated to: 18932 18933 .literal .L1, 2040 18934 l32r a1, .L1 18935 add a1, a0, a1 18936 l32i a1, a1, 0 18937 18938If the load destination and source address register are the same, an 18939out-of-range offset causes an error. 18940 18941 The Xtensa `ADDI' instruction only allows immediate operands in the 18942range from -128 to 127. There are a number of alternate instruction 18943sequences for the `ADDI' operation. First, if the immediate is 0, the 18944`ADDI' will be turned into a `MOV.N' instruction (or the equivalent 18945`OR' instruction if the code density option is not available). If the 18946`ADDI' immediate is outside of the range -128 to 127, but inside the 18947range -32896 to 32639, an `ADDMI' instruction or `ADDMI'/`ADDI' 18948sequence will be used. Finally, if the immediate is outside of this 18949range and a free register is available, an `L32R'/`ADD' sequence will 18950be used with a literal allocated from the literal pool. 18951 18952 For example: 18953 18954 addi a5, a6, 0 18955 addi a5, a6, 512 18956 addi a5, a6, 513 18957 addi a5, a6, 50000 18958 18959 is assembled into the following: 18960 18961 .literal .L1, 50000 18962 mov.n a5, a6 18963 addmi a5, a6, 0x200 18964 addmi a5, a6, 0x200 18965 addi a5, a5, 1 18966 l32r a5, .L1 18967 add a5, a6, a5 18968 18969 18970File: as.info, Node: Xtensa Directives, Prev: Xtensa Relaxation, Up: Xtensa-Dependent 18971 189729.42.5 Directives 18973----------------- 18974 18975The Xtensa assembler supports a region-based directive syntax: 18976 18977 .begin DIRECTIVE [OPTIONS] 18978 ... 18979 .end DIRECTIVE 18980 18981 All the Xtensa-specific directives that apply to a region of code use 18982this syntax. 18983 18984 The directive applies to code between the `.begin' and the `.end'. 18985The state of the option after the `.end' reverts to what it was before 18986the `.begin'. A nested `.begin'/`.end' region can further change the 18987state of the directive without having to be aware of its outer state. 18988For example, consider: 18989 18990 .begin no-transform 18991 L: add a0, a1, a2 18992 .begin transform 18993 M: add a0, a1, a2 18994 .end transform 18995 N: add a0, a1, a2 18996 .end no-transform 18997 18998 The `ADD' opcodes at `L' and `N' in the outer `no-transform' region 18999both result in `ADD' machine instructions, but the assembler selects an 19000`ADD.N' instruction for the `ADD' at `M' in the inner `transform' 19001region. 19002 19003 The advantage of this style is that it works well inside macros 19004which can preserve the context of their callers. 19005 19006 The following directives are available: 19007 19008* Menu: 19009 19010* Schedule Directive:: Enable instruction scheduling. 19011* Longcalls Directive:: Use Indirect Calls for Greater Range. 19012* Transform Directive:: Disable All Assembler Transformations. 19013* Literal Directive:: Intermix Literals with Instructions. 19014* Literal Position Directive:: Specify Inline Literal Pool Locations. 19015* Literal Prefix Directive:: Specify Literal Section Name Prefix. 19016* Absolute Literals Directive:: Control PC-Relative vs. Absolute Literals. 19017 19018 19019File: as.info, Node: Schedule Directive, Next: Longcalls Directive, Up: Xtensa Directives 19020 190219.42.5.1 schedule 19022................. 19023 19024The `schedule' directive is recognized only for compatibility with 19025Tensilica's assembler. 19026 19027 .begin [no-]schedule 19028 .end [no-]schedule 19029 19030 This directive is ignored and has no effect on `as'. 19031 19032 19033File: as.info, Node: Longcalls Directive, Next: Transform Directive, Prev: Schedule Directive, Up: Xtensa Directives 19034 190359.42.5.2 longcalls 19036.................. 19037 19038The `longcalls' directive enables or disables function call relaxation. 19039*Note Function Call Relaxation: Xtensa Call Relaxation. 19040 19041 .begin [no-]longcalls 19042 .end [no-]longcalls 19043 19044 Call relaxation is disabled by default unless the `--longcalls' 19045command-line option is specified. The `longcalls' directive overrides 19046the default determined by the command-line options. 19047 19048 19049File: as.info, Node: Transform Directive, Next: Literal Directive, Prev: Longcalls Directive, Up: Xtensa Directives 19050 190519.42.5.3 transform 19052.................. 19053 19054This directive enables or disables all assembler transformation, 19055including relaxation (*note Xtensa Relaxation: Xtensa Relaxation.) and 19056optimization (*note Xtensa Optimizations: Xtensa Optimizations.). 19057 19058 .begin [no-]transform 19059 .end [no-]transform 19060 19061 Transformations are enabled by default unless the `--no-transform' 19062option is used. The `transform' directive overrides the default 19063determined by the command-line options. An underscore opcode prefix, 19064disabling transformation of that opcode, always takes precedence over 19065both directives and command-line flags. 19066 19067 19068File: as.info, Node: Literal Directive, Next: Literal Position Directive, Prev: Transform Directive, Up: Xtensa Directives 19069 190709.42.5.4 literal 19071................ 19072 19073The `.literal' directive is used to define literal pool data, i.e., 19074read-only 32-bit data accessed via `L32R' instructions. 19075 19076 .literal LABEL, VALUE[, VALUE...] 19077 19078 This directive is similar to the standard `.word' directive, except 19079that the actual location of the literal data is determined by the 19080assembler and linker, not by the position of the `.literal' directive. 19081Using this directive gives the assembler freedom to locate the literal 19082data in the most appropriate place and possibly to combine identical 19083literals. For example, the code: 19084 19085 entry sp, 40 19086 .literal .L1, sym 19087 l32r a4, .L1 19088 19089 can be used to load a pointer to the symbol `sym' into register 19090`a4'. The value of `sym' will not be placed between the `ENTRY' and 19091`L32R' instructions; instead, the assembler puts the data in a literal 19092pool. 19093 19094 Literal pools are placed by default in separate literal sections; 19095however, when using the `--text-section-literals' option (*note Command 19096Line Options: Xtensa Options.), the literal pools for PC-relative mode 19097`L32R' instructions are placed in the current section.(1) These text 19098section literal pools are created automatically before `ENTRY' 19099instructions and manually after `.literal_position' directives (*note 19100literal_position: Literal Position Directive.). If there are no 19101preceding `ENTRY' instructions, explicit `.literal_position' directives 19102must be used to place the text section literal pools; otherwise, `as' 19103will report an error. 19104 19105 When literals are placed in separate sections, the literal section 19106names are derived from the names of the sections where the literals are 19107defined. The base literal section names are `.literal' for PC-relative 19108mode `L32R' instructions and `.lit4' for absolute mode `L32R' 19109instructions (*note absolute-literals: Absolute Literals Directive.). 19110These base names are used for literals defined in the default `.text' 19111section. For literals defined in other sections or within the scope of 19112a `literal_prefix' directive (*note literal_prefix: Literal Prefix 19113Directive.), the following rules determine the literal section name: 19114 19115 1. If the current section is a member of a section group, the literal 19116 section name includes the group name as a suffix to the base 19117 `.literal' or `.lit4' name, with a period to separate the base 19118 name and group name. The literal section is also made a member of 19119 the group. 19120 19121 2. If the current section name (or `literal_prefix' value) begins with 19122 "`.gnu.linkonce.KIND.'", the literal section name is formed by 19123 replacing "`.KIND'" with the base `.literal' or `.lit4' name. For 19124 example, for literals defined in a section named 19125 `.gnu.linkonce.t.func', the literal section will be 19126 `.gnu.linkonce.literal.func' or `.gnu.linkonce.lit4.func'. 19127 19128 3. If the current section name (or `literal_prefix' value) ends with 19129 `.text', the literal section name is formed by replacing that 19130 suffix with the base `.literal' or `.lit4' name. For example, for 19131 literals defined in a section named `.iram0.text', the literal 19132 section will be `.iram0.literal' or `.iram0.lit4'. 19133 19134 4. If none of the preceding conditions apply, the literal section 19135 name is formed by adding the base `.literal' or `.lit4' name as a 19136 suffix to the current section name (or `literal_prefix' value). 19137 19138 ---------- Footnotes ---------- 19139 19140 (1) Literals for the `.init' and `.fini' sections are always placed 19141in separate sections, even when `--text-section-literals' is enabled. 19142 19143 19144File: as.info, Node: Literal Position Directive, Next: Literal Prefix Directive, Prev: Literal Directive, Up: Xtensa Directives 19145 191469.42.5.5 literal_position 19147......................... 19148 19149When using `--text-section-literals' to place literals inline in the 19150section being assembled, the `.literal_position' directive can be used 19151to mark a potential location for a literal pool. 19152 19153 .literal_position 19154 19155 The `.literal_position' directive is ignored when the 19156`--text-section-literals' option is not used or when `L32R' 19157instructions use the absolute addressing mode. 19158 19159 The assembler will automatically place text section literal pools 19160before `ENTRY' instructions, so the `.literal_position' directive is 19161only needed to specify some other location for a literal pool. You may 19162need to add an explicit jump instruction to skip over an inline literal 19163pool. 19164 19165 For example, an interrupt vector does not begin with an `ENTRY' 19166instruction so the assembler will be unable to automatically find a good 19167place to put a literal pool. Moreover, the code for the interrupt 19168vector must be at a specific starting address, so the literal pool 19169cannot come before the start of the code. The literal pool for the 19170vector must be explicitly positioned in the middle of the vector (before 19171any uses of the literals, due to the negative offsets used by 19172PC-relative `L32R' instructions). The `.literal_position' directive 19173can be used to do this. In the following code, the literal for `M' 19174will automatically be aligned correctly and is placed after the 19175unconditional jump. 19176 19177 .global M 19178 code_start: 19179 j continue 19180 .literal_position 19181 .align 4 19182 continue: 19183 movi a4, M 19184 19185 19186File: as.info, Node: Literal Prefix Directive, Next: Absolute Literals Directive, Prev: Literal Position Directive, Up: Xtensa Directives 19187 191889.42.5.6 literal_prefix 19189....................... 19190 19191The `literal_prefix' directive allows you to override the default 19192literal section names, which are derived from the names of the sections 19193where the literals are defined. 19194 19195 .begin literal_prefix [NAME] 19196 .end literal_prefix 19197 19198 For literals defined within the delimited region, the literal section 19199names are derived from the NAME argument instead of the name of the 19200current section. The rules used to derive the literal section names do 19201not change. *Note literal: Literal Directive. If the NAME argument is 19202omitted, the literal sections revert to the defaults. This directive 19203has no effect when using the `--text-section-literals' option (*note 19204Command Line Options: Xtensa Options.). 19205 19206 19207File: as.info, Node: Absolute Literals Directive, Prev: Literal Prefix Directive, Up: Xtensa Directives 19208 192099.42.5.7 absolute-literals 19210.......................... 19211 19212The `absolute-literals' and `no-absolute-literals' directives control 19213the absolute vs. PC-relative mode for `L32R' instructions. These are 19214relevant only for Xtensa configurations that include the absolute 19215addressing option for `L32R' instructions. 19216 19217 .begin [no-]absolute-literals 19218 .end [no-]absolute-literals 19219 19220 These directives do not change the `L32R' mode--they only cause the 19221assembler to emit the appropriate kind of relocation for `L32R' 19222instructions and to place the literal values in the appropriate section. 19223To change the `L32R' mode, the program must write the `LITBASE' special 19224register. It is the programmer's responsibility to keep track of the 19225mode and indicate to the assembler which mode is used in each region of 19226code. 19227 19228 If the Xtensa configuration includes the absolute `L32R' addressing 19229option, the default is to assume absolute `L32R' addressing unless the 19230`--no-absolute-literals' command-line option is specified. Otherwise, 19231the default is to assume PC-relative `L32R' addressing. The 19232`absolute-literals' directive can then be used to override the default 19233determined by the command-line options. 19234 19235 19236File: as.info, Node: Reporting Bugs, Next: Acknowledgements, Prev: Machine Dependencies, Up: Top 19237 1923810 Reporting Bugs 19239***************** 19240 19241Your bug reports play an essential role in making `as' reliable. 19242 19243 Reporting a bug may help you by bringing a solution to your problem, 19244or it may not. But in any case the principal function of a bug report 19245is to help the entire community by making the next version of `as' work 19246better. Bug reports are your contribution to the maintenance of `as'. 19247 19248 In order for a bug report to serve its purpose, you must include the 19249information that enables us to fix the bug. 19250 19251* Menu: 19252 19253* Bug Criteria:: Have you found a bug? 19254* Bug Reporting:: How to report bugs 19255 19256 19257File: as.info, Node: Bug Criteria, Next: Bug Reporting, Up: Reporting Bugs 19258 1925910.1 Have You Found a Bug? 19260========================== 19261 19262If you are not sure whether you have found a bug, here are some 19263guidelines: 19264 19265 * If the assembler gets a fatal signal, for any input whatever, that 19266 is a `as' bug. Reliable assemblers never crash. 19267 19268 * If `as' produces an error message for valid input, that is a bug. 19269 19270 * If `as' does not produce an error message for invalid input, that 19271 is a bug. However, you should note that your idea of "invalid 19272 input" might be our idea of "an extension" or "support for 19273 traditional practice". 19274 19275 * If you are an experienced user of assemblers, your suggestions for 19276 improvement of `as' are welcome in any case. 19277 19278 19279File: as.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Reporting Bugs 19280 1928110.2 How to Report Bugs 19282======================= 19283 19284A number of companies and individuals offer support for GNU products. 19285If you obtained `as' from a support organization, we recommend you 19286contact that organization first. 19287 19288 You can find contact information for many support companies and 19289individuals in the file `etc/SERVICE' in the GNU Emacs distribution. 19290 19291 In any event, we also recommend that you send bug reports for `as' 19292to `http://www.sourceware.org/bugzilla/'. 19293 19294 The fundamental principle of reporting bugs usefully is this: 19295*report all the facts*. If you are not sure whether to state a fact or 19296leave it out, state it! 19297 19298 Often people omit facts because they think they know what causes the 19299problem and assume that some details do not matter. Thus, you might 19300assume that the name of a symbol you use in an example does not matter. 19301Well, probably it does not, but one cannot be sure. Perhaps the bug 19302is a stray memory reference which happens to fetch from the location 19303where that name is stored in memory; perhaps, if the name were 19304different, the contents of that location would fool the assembler into 19305doing the right thing despite the bug. Play it safe and give a 19306specific, complete example. That is the easiest thing for you to do, 19307and the most helpful. 19308 19309 Keep in mind that the purpose of a bug report is to enable us to fix 19310the bug if it is new to us. Therefore, always write your bug reports 19311on the assumption that the bug has not been reported previously. 19312 19313 Sometimes people give a few sketchy facts and ask, "Does this ring a 19314bell?" This cannot help us fix a bug, so it is basically useless. We 19315respond by asking for enough details to enable us to investigate. You 19316might as well expedite matters by sending them to begin with. 19317 19318 To enable us to fix the bug, you should include all these things: 19319 19320 * The version of `as'. `as' announces it if you start it with the 19321 `--version' argument. 19322 19323 Without this, we will not know whether there is any point in 19324 looking for the bug in the current version of `as'. 19325 19326 * Any patches you may have applied to the `as' source. 19327 19328 * The type of machine you are using, and the operating system name 19329 and version number. 19330 19331 * What compiler (and its version) was used to compile `as'--e.g. 19332 "`gcc-2.7'". 19333 19334 * The command arguments you gave the assembler to assemble your 19335 example and observe the bug. To guarantee you will not omit 19336 something important, list them all. A copy of the Makefile (or 19337 the output from make) is sufficient. 19338 19339 If we were to try to guess the arguments, we would probably guess 19340 wrong and then we might not encounter the bug. 19341 19342 * A complete input file that will reproduce the bug. If the bug is 19343 observed when the assembler is invoked via a compiler, send the 19344 assembler source, not the high level language source. Most 19345 compilers will produce the assembler source when run with the `-S' 19346 option. If you are using `gcc', use the options `-v 19347 --save-temps'; this will save the assembler source in a file with 19348 an extension of `.s', and also show you exactly how `as' is being 19349 run. 19350 19351 * A description of what behavior you observe that you believe is 19352 incorrect. For example, "It gets a fatal signal." 19353 19354 Of course, if the bug is that `as' gets a fatal signal, then we 19355 will certainly notice it. But if the bug is incorrect output, we 19356 might not notice unless it is glaringly wrong. You might as well 19357 not give us a chance to make a mistake. 19358 19359 Even if the problem you experience is a fatal signal, you should 19360 still say so explicitly. Suppose something strange is going on, 19361 such as, your copy of `as' is out of sync, or you have encountered 19362 a bug in the C library on your system. (This has happened!) Your 19363 copy might crash and ours would not. If you told us to expect a 19364 crash, then when ours fails to crash, we would know that the bug 19365 was not happening for us. If you had not told us to expect a 19366 crash, then we would not be able to draw any conclusion from our 19367 observations. 19368 19369 * If you wish to suggest changes to the `as' source, send us context 19370 diffs, as generated by `diff' with the `-u', `-c', or `-p' option. 19371 Always send diffs from the old file to the new file. If you even 19372 discuss something in the `as' source, refer to it by context, not 19373 by line number. 19374 19375 The line numbers in our development sources will not match those 19376 in your sources. Your line numbers would convey no useful 19377 information to us. 19378 19379 Here are some things that are not necessary: 19380 19381 * A description of the envelope of the bug. 19382 19383 Often people who encounter a bug spend a lot of time investigating 19384 which changes to the input file will make the bug go away and which 19385 changes will not affect it. 19386 19387 This is often time consuming and not very useful, because the way 19388 we will find the bug is by running a single example under the 19389 debugger with breakpoints, not by pure deduction from a series of 19390 examples. We recommend that you save your time for something else. 19391 19392 Of course, if you can find a simpler example to report _instead_ 19393 of the original one, that is a convenience for us. Errors in the 19394 output will be easier to spot, running under the debugger will take 19395 less time, and so on. 19396 19397 However, simplification is not vital; if you do not want to do 19398 this, report the bug anyway and send us the entire test case you 19399 used. 19400 19401 * A patch for the bug. 19402 19403 A patch for the bug does help us if it is a good one. But do not 19404 omit the necessary information, such as the test case, on the 19405 assumption that a patch is all we need. We might see problems 19406 with your patch and decide to fix the problem another way, or we 19407 might not understand it at all. 19408 19409 Sometimes with a program as complicated as `as' it is very hard to 19410 construct an example that will make the program follow a certain 19411 path through the code. If you do not send us the example, we will 19412 not be able to construct one, so we will not be able to verify 19413 that the bug is fixed. 19414 19415 And if we cannot understand what bug you are trying to fix, or why 19416 your patch should be an improvement, we will not install it. A 19417 test case will help us to understand. 19418 19419 * A guess about what the bug is or what it depends on. 19420 19421 Such guesses are usually wrong. Even we cannot guess right about 19422 such things without first using the debugger to find the facts. 19423 19424 19425File: as.info, Node: Acknowledgements, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top 19426 1942711 Acknowledgements 19428******************* 19429 19430If you have contributed to GAS and your name isn't listed here, it is 19431not meant as a slight. We just don't know about it. Send mail to the 19432maintainer, and we'll correct the situation. Currently the maintainer 19433is Ken Raeburn (email address `raeburn@cygnus.com'). 19434 19435 Dean Elsner wrote the original GNU assembler for the VAX.(1) 19436 19437 Jay Fenlason maintained GAS for a while, adding support for 19438GDB-specific debug information and the 68k series machines, most of the 19439preprocessing pass, and extensive changes in `messages.c', 19440`input-file.c', `write.c'. 19441 19442 K. Richard Pixley maintained GAS for a while, adding various 19443enhancements and many bug fixes, including merging support for several 19444processors, breaking GAS up to handle multiple object file format back 19445ends (including heavy rewrite, testing, an integration of the coff and 19446b.out back ends), adding configuration including heavy testing and 19447verification of cross assemblers and file splits and renaming, 19448converted GAS to strictly ANSI C including full prototypes, added 19449support for m680[34]0 and cpu32, did considerable work on i960 19450including a COFF port (including considerable amounts of reverse 19451engineering), a SPARC opcode file rewrite, DECstation, rs6000, and 19452hp300hpux host ports, updated "know" assertions and made them work, 19453much other reorganization, cleanup, and lint. 19454 19455 Ken Raeburn wrote the high-level BFD interface code to replace most 19456of the code in format-specific I/O modules. 19457 19458 The original VMS support was contributed by David L. Kashtan. Eric 19459Youngdale has done much work with it since. 19460 19461 The Intel 80386 machine description was written by Eliot Dresselhaus. 19462 19463 Minh Tran-Le at IntelliCorp contributed some AIX 386 support. 19464 19465 The Motorola 88k machine description was contributed by Devon Bowen 19466of Buffalo University and Torbjorn Granlund of the Swedish Institute of 19467Computer Science. 19468 19469 Keith Knowles at the Open Software Foundation wrote the original 19470MIPS back end (`tc-mips.c', `tc-mips.h'), and contributed Rose format 19471support (which hasn't been merged in yet). Ralph Campbell worked with 19472the MIPS code to support a.out format. 19473 19474 Support for the Zilog Z8k and Renesas H8/300 processors (tc-z8k, 19475tc-h8300), and IEEE 695 object file format (obj-ieee), was written by 19476Steve Chamberlain of Cygnus Support. Steve also modified the COFF back 19477end to use BFD for some low-level operations, for use with the H8/300 19478and AMD 29k targets. 19479 19480 John Gilmore built the AMD 29000 support, added `.include' support, 19481and simplified the configuration of which versions accept which 19482directives. He updated the 68k machine description so that Motorola's 19483opcodes always produced fixed-size instructions (e.g., `jsr'), while 19484synthetic instructions remained shrinkable (`jbsr'). John fixed many 19485bugs, including true tested cross-compilation support, and one bug in 19486relaxation that took a week and required the proverbial one-bit fix. 19487 19488 Ian Lance Taylor of Cygnus Support merged the Motorola and MIT 19489syntax for the 68k, completed support for some COFF targets (68k, i386 19490SVR3, and SCO Unix), added support for MIPS ECOFF and ELF targets, 19491wrote the initial RS/6000 and PowerPC assembler, and made a few other 19492minor patches. 19493 19494 Steve Chamberlain made GAS able to generate listings. 19495 19496 Hewlett-Packard contributed support for the HP9000/300. 19497 19498 Jeff Law wrote GAS and BFD support for the native HPPA object format 19499(SOM) along with a fairly extensive HPPA testsuite (for both SOM and 19500ELF object formats). This work was supported by both the Center for 19501Software Science at the University of Utah and Cygnus Support. 19502 19503 Support for ELF format files has been worked on by Mark Eichin of 19504Cygnus Support (original, incomplete implementation for SPARC), Pete 19505Hoogenboom and Jeff Law at the University of Utah (HPPA mainly), 19506Michael Meissner of the Open Software Foundation (i386 mainly), and Ken 19507Raeburn of Cygnus Support (sparc, and some initial 64-bit support). 19508 19509 Linas Vepstas added GAS support for the ESA/390 "IBM 370" 19510architecture. 19511 19512 Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote 19513GAS and BFD support for openVMS/Alpha. 19514 19515 Timothy Wall, Michael Hayes, and Greg Smart contributed to the 19516various tic* flavors. 19517 19518 David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from 19519Tensilica, Inc. added support for Xtensa processors. 19520 19521 Several engineers at Cygnus Support have also provided many small 19522bug fixes and configuration enhancements. 19523 19524 Jon Beniston added support for the Lattice Mico32 architecture. 19525 19526 Many others have contributed large or small bugfixes and 19527enhancements. If you have contributed significant work and are not 19528mentioned on this list, and want to be, let us know. Some of the 19529history has been lost; we are not intentionally leaving anyone out. 19530 19531 ---------- Footnotes ---------- 19532 19533 (1) Any more details? 19534 19535 19536File: as.info, Node: GNU Free Documentation License, Next: AS Index, Prev: Acknowledgements, Up: Top 19537 19538Appendix A GNU Free Documentation License 19539***************************************** 19540 19541 Version 1.3, 3 November 2008 19542 19543 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 19544 `http://fsf.org/' 19545 19546 Everyone is permitted to copy and distribute verbatim copies 19547 of this license document, but changing it is not allowed. 19548 19549 0. PREAMBLE 19550 19551 The purpose of this License is to make a manual, textbook, or other 19552 functional and useful document "free" in the sense of freedom: to 19553 assure everyone the effective freedom to copy and redistribute it, 19554 with or without modifying it, either commercially or 19555 noncommercially. Secondarily, this License preserves for the 19556 author and publisher a way to get credit for their work, while not 19557 being considered responsible for modifications made by others. 19558 19559 This License is a kind of "copyleft", which means that derivative 19560 works of the document must themselves be free in the same sense. 19561 It complements the GNU General Public License, which is a copyleft 19562 license designed for free software. 19563 19564 We have designed this License in order to use it for manuals for 19565 free software, because free software needs free documentation: a 19566 free program should come with manuals providing the same freedoms 19567 that the software does. But this License is not limited to 19568 software manuals; it can be used for any textual work, regardless 19569 of subject matter or whether it is published as a printed book. 19570 We recommend this License principally for works whose purpose is 19571 instruction or reference. 19572 19573 1. APPLICABILITY AND DEFINITIONS 19574 19575 This License applies to any manual or other work, in any medium, 19576 that contains a notice placed by the copyright holder saying it 19577 can be distributed under the terms of this License. Such a notice 19578 grants a world-wide, royalty-free license, unlimited in duration, 19579 to use that work under the conditions stated herein. The 19580 "Document", below, refers to any such manual or work. Any member 19581 of the public is a licensee, and is addressed as "you". You 19582 accept the license if you copy, modify or distribute the work in a 19583 way requiring permission under copyright law. 19584 19585 A "Modified Version" of the Document means any work containing the 19586 Document or a portion of it, either copied verbatim, or with 19587 modifications and/or translated into another language. 19588 19589 A "Secondary Section" is a named appendix or a front-matter section 19590 of the Document that deals exclusively with the relationship of the 19591 publishers or authors of the Document to the Document's overall 19592 subject (or to related matters) and contains nothing that could 19593 fall directly within that overall subject. (Thus, if the Document 19594 is in part a textbook of mathematics, a Secondary Section may not 19595 explain any mathematics.) The relationship could be a matter of 19596 historical connection with the subject or with related matters, or 19597 of legal, commercial, philosophical, ethical or political position 19598 regarding them. 19599 19600 The "Invariant Sections" are certain Secondary Sections whose 19601 titles are designated, as being those of Invariant Sections, in 19602 the notice that says that the Document is released under this 19603 License. If a section does not fit the above definition of 19604 Secondary then it is not allowed to be designated as Invariant. 19605 The Document may contain zero Invariant Sections. If the Document 19606 does not identify any Invariant Sections then there are none. 19607 19608 The "Cover Texts" are certain short passages of text that are 19609 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 19610 that says that the Document is released under this License. A 19611 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 19612 be at most 25 words. 19613 19614 A "Transparent" copy of the Document means a machine-readable copy, 19615 represented in a format whose specification is available to the 19616 general public, that is suitable for revising the document 19617 straightforwardly with generic text editors or (for images 19618 composed of pixels) generic paint programs or (for drawings) some 19619 widely available drawing editor, and that is suitable for input to 19620 text formatters or for automatic translation to a variety of 19621 formats suitable for input to text formatters. A copy made in an 19622 otherwise Transparent file format whose markup, or absence of 19623 markup, has been arranged to thwart or discourage subsequent 19624 modification by readers is not Transparent. An image format is 19625 not Transparent if used for any substantial amount of text. A 19626 copy that is not "Transparent" is called "Opaque". 19627 19628 Examples of suitable formats for Transparent copies include plain 19629 ASCII without markup, Texinfo input format, LaTeX input format, 19630 SGML or XML using a publicly available DTD, and 19631 standard-conforming simple HTML, PostScript or PDF designed for 19632 human modification. Examples of transparent image formats include 19633 PNG, XCF and JPG. Opaque formats include proprietary formats that 19634 can be read and edited only by proprietary word processors, SGML or 19635 XML for which the DTD and/or processing tools are not generally 19636 available, and the machine-generated HTML, PostScript or PDF 19637 produced by some word processors for output purposes only. 19638 19639 The "Title Page" means, for a printed book, the title page itself, 19640 plus such following pages as are needed to hold, legibly, the 19641 material this License requires to appear in the title page. For 19642 works in formats which do not have any title page as such, "Title 19643 Page" means the text near the most prominent appearance of the 19644 work's title, preceding the beginning of the body of the text. 19645 19646 The "publisher" means any person or entity that distributes copies 19647 of the Document to the public. 19648 19649 A section "Entitled XYZ" means a named subunit of the Document 19650 whose title either is precisely XYZ or contains XYZ in parentheses 19651 following text that translates XYZ in another language. (Here XYZ 19652 stands for a specific section name mentioned below, such as 19653 "Acknowledgements", "Dedications", "Endorsements", or "History".) 19654 To "Preserve the Title" of such a section when you modify the 19655 Document means that it remains a section "Entitled XYZ" according 19656 to this definition. 19657 19658 The Document may include Warranty Disclaimers next to the notice 19659 which states that this License applies to the Document. These 19660 Warranty Disclaimers are considered to be included by reference in 19661 this License, but only as regards disclaiming warranties: any other 19662 implication that these Warranty Disclaimers may have is void and 19663 has no effect on the meaning of this License. 19664 19665 2. VERBATIM COPYING 19666 19667 You may copy and distribute the Document in any medium, either 19668 commercially or noncommercially, provided that this License, the 19669 copyright notices, and the license notice saying this License 19670 applies to the Document are reproduced in all copies, and that you 19671 add no other conditions whatsoever to those of this License. You 19672 may not use technical measures to obstruct or control the reading 19673 or further copying of the copies you make or distribute. However, 19674 you may accept compensation in exchange for copies. If you 19675 distribute a large enough number of copies you must also follow 19676 the conditions in section 3. 19677 19678 You may also lend copies, under the same conditions stated above, 19679 and you may publicly display copies. 19680 19681 3. COPYING IN QUANTITY 19682 19683 If you publish printed copies (or copies in media that commonly 19684 have printed covers) of the Document, numbering more than 100, and 19685 the Document's license notice requires Cover Texts, you must 19686 enclose the copies in covers that carry, clearly and legibly, all 19687 these Cover Texts: Front-Cover Texts on the front cover, and 19688 Back-Cover Texts on the back cover. Both covers must also clearly 19689 and legibly identify you as the publisher of these copies. The 19690 front cover must present the full title with all words of the 19691 title equally prominent and visible. You may add other material 19692 on the covers in addition. Copying with changes limited to the 19693 covers, as long as they preserve the title of the Document and 19694 satisfy these conditions, can be treated as verbatim copying in 19695 other respects. 19696 19697 If the required texts for either cover are too voluminous to fit 19698 legibly, you should put the first ones listed (as many as fit 19699 reasonably) on the actual cover, and continue the rest onto 19700 adjacent pages. 19701 19702 If you publish or distribute Opaque copies of the Document 19703 numbering more than 100, you must either include a 19704 machine-readable Transparent copy along with each Opaque copy, or 19705 state in or with each Opaque copy a computer-network location from 19706 which the general network-using public has access to download 19707 using public-standard network protocols a complete Transparent 19708 copy of the Document, free of added material. If you use the 19709 latter option, you must take reasonably prudent steps, when you 19710 begin distribution of Opaque copies in quantity, to ensure that 19711 this Transparent copy will remain thus accessible at the stated 19712 location until at least one year after the last time you 19713 distribute an Opaque copy (directly or through your agents or 19714 retailers) of that edition to the public. 19715 19716 It is requested, but not required, that you contact the authors of 19717 the Document well before redistributing any large number of 19718 copies, to give them a chance to provide you with an updated 19719 version of the Document. 19720 19721 4. MODIFICATIONS 19722 19723 You may copy and distribute a Modified Version of the Document 19724 under the conditions of sections 2 and 3 above, provided that you 19725 release the Modified Version under precisely this License, with 19726 the Modified Version filling the role of the Document, thus 19727 licensing distribution and modification of the Modified Version to 19728 whoever possesses a copy of it. In addition, you must do these 19729 things in the Modified Version: 19730 19731 A. Use in the Title Page (and on the covers, if any) a title 19732 distinct from that of the Document, and from those of 19733 previous versions (which should, if there were any, be listed 19734 in the History section of the Document). You may use the 19735 same title as a previous version if the original publisher of 19736 that version gives permission. 19737 19738 B. List on the Title Page, as authors, one or more persons or 19739 entities responsible for authorship of the modifications in 19740 the Modified Version, together with at least five of the 19741 principal authors of the Document (all of its principal 19742 authors, if it has fewer than five), unless they release you 19743 from this requirement. 19744 19745 C. State on the Title page the name of the publisher of the 19746 Modified Version, as the publisher. 19747 19748 D. Preserve all the copyright notices of the Document. 19749 19750 E. Add an appropriate copyright notice for your modifications 19751 adjacent to the other copyright notices. 19752 19753 F. Include, immediately after the copyright notices, a license 19754 notice giving the public permission to use the Modified 19755 Version under the terms of this License, in the form shown in 19756 the Addendum below. 19757 19758 G. Preserve in that license notice the full lists of Invariant 19759 Sections and required Cover Texts given in the Document's 19760 license notice. 19761 19762 H. Include an unaltered copy of this License. 19763 19764 I. Preserve the section Entitled "History", Preserve its Title, 19765 and add to it an item stating at least the title, year, new 19766 authors, and publisher of the Modified Version as given on 19767 the Title Page. If there is no section Entitled "History" in 19768 the Document, create one stating the title, year, authors, 19769 and publisher of the Document as given on its Title Page, 19770 then add an item describing the Modified Version as stated in 19771 the previous sentence. 19772 19773 J. Preserve the network location, if any, given in the Document 19774 for public access to a Transparent copy of the Document, and 19775 likewise the network locations given in the Document for 19776 previous versions it was based on. These may be placed in 19777 the "History" section. You may omit a network location for a 19778 work that was published at least four years before the 19779 Document itself, or if the original publisher of the version 19780 it refers to gives permission. 19781 19782 K. For any section Entitled "Acknowledgements" or "Dedications", 19783 Preserve the Title of the section, and preserve in the 19784 section all the substance and tone of each of the contributor 19785 acknowledgements and/or dedications given therein. 19786 19787 L. Preserve all the Invariant Sections of the Document, 19788 unaltered in their text and in their titles. Section numbers 19789 or the equivalent are not considered part of the section 19790 titles. 19791 19792 M. Delete any section Entitled "Endorsements". Such a section 19793 may not be included in the Modified Version. 19794 19795 N. Do not retitle any existing section to be Entitled 19796 "Endorsements" or to conflict in title with any Invariant 19797 Section. 19798 19799 O. Preserve any Warranty Disclaimers. 19800 19801 If the Modified Version includes new front-matter sections or 19802 appendices that qualify as Secondary Sections and contain no 19803 material copied from the Document, you may at your option 19804 designate some or all of these sections as invariant. To do this, 19805 add their titles to the list of Invariant Sections in the Modified 19806 Version's license notice. These titles must be distinct from any 19807 other section titles. 19808 19809 You may add a section Entitled "Endorsements", provided it contains 19810 nothing but endorsements of your Modified Version by various 19811 parties--for example, statements of peer review or that the text 19812 has been approved by an organization as the authoritative 19813 definition of a standard. 19814 19815 You may add a passage of up to five words as a Front-Cover Text, 19816 and a passage of up to 25 words as a Back-Cover Text, to the end 19817 of the list of Cover Texts in the Modified Version. Only one 19818 passage of Front-Cover Text and one of Back-Cover Text may be 19819 added by (or through arrangements made by) any one entity. If the 19820 Document already includes a cover text for the same cover, 19821 previously added by you or by arrangement made by the same entity 19822 you are acting on behalf of, you may not add another; but you may 19823 replace the old one, on explicit permission from the previous 19824 publisher that added the old one. 19825 19826 The author(s) and publisher(s) of the Document do not by this 19827 License give permission to use their names for publicity for or to 19828 assert or imply endorsement of any Modified Version. 19829 19830 5. COMBINING DOCUMENTS 19831 19832 You may combine the Document with other documents released under 19833 this License, under the terms defined in section 4 above for 19834 modified versions, provided that you include in the combination 19835 all of the Invariant Sections of all of the original documents, 19836 unmodified, and list them all as Invariant Sections of your 19837 combined work in its license notice, and that you preserve all 19838 their Warranty Disclaimers. 19839 19840 The combined work need only contain one copy of this License, and 19841 multiple identical Invariant Sections may be replaced with a single 19842 copy. If there are multiple Invariant Sections with the same name 19843 but different contents, make the title of each such section unique 19844 by adding at the end of it, in parentheses, the name of the 19845 original author or publisher of that section if known, or else a 19846 unique number. Make the same adjustment to the section titles in 19847 the list of Invariant Sections in the license notice of the 19848 combined work. 19849 19850 In the combination, you must combine any sections Entitled 19851 "History" in the various original documents, forming one section 19852 Entitled "History"; likewise combine any sections Entitled 19853 "Acknowledgements", and any sections Entitled "Dedications". You 19854 must delete all sections Entitled "Endorsements." 19855 19856 6. COLLECTIONS OF DOCUMENTS 19857 19858 You may make a collection consisting of the Document and other 19859 documents released under this License, and replace the individual 19860 copies of this License in the various documents with a single copy 19861 that is included in the collection, provided that you follow the 19862 rules of this License for verbatim copying of each of the 19863 documents in all other respects. 19864 19865 You may extract a single document from such a collection, and 19866 distribute it individually under this License, provided you insert 19867 a copy of this License into the extracted document, and follow 19868 this License in all other respects regarding verbatim copying of 19869 that document. 19870 19871 7. AGGREGATION WITH INDEPENDENT WORKS 19872 19873 A compilation of the Document or its derivatives with other 19874 separate and independent documents or works, in or on a volume of 19875 a storage or distribution medium, is called an "aggregate" if the 19876 copyright resulting from the compilation is not used to limit the 19877 legal rights of the compilation's users beyond what the individual 19878 works permit. When the Document is included in an aggregate, this 19879 License does not apply to the other works in the aggregate which 19880 are not themselves derivative works of the Document. 19881 19882 If the Cover Text requirement of section 3 is applicable to these 19883 copies of the Document, then if the Document is less than one half 19884 of the entire aggregate, the Document's Cover Texts may be placed 19885 on covers that bracket the Document within the aggregate, or the 19886 electronic equivalent of covers if the Document is in electronic 19887 form. Otherwise they must appear on printed covers that bracket 19888 the whole aggregate. 19889 19890 8. TRANSLATION 19891 19892 Translation is considered a kind of modification, so you may 19893 distribute translations of the Document under the terms of section 19894 4. Replacing Invariant Sections with translations requires special 19895 permission from their copyright holders, but you may include 19896 translations of some or all Invariant Sections in addition to the 19897 original versions of these Invariant Sections. You may include a 19898 translation of this License, and all the license notices in the 19899 Document, and any Warranty Disclaimers, provided that you also 19900 include the original English version of this License and the 19901 original versions of those notices and disclaimers. In case of a 19902 disagreement between the translation and the original version of 19903 this License or a notice or disclaimer, the original version will 19904 prevail. 19905 19906 If a section in the Document is Entitled "Acknowledgements", 19907 "Dedications", or "History", the requirement (section 4) to 19908 Preserve its Title (section 1) will typically require changing the 19909 actual title. 19910 19911 9. TERMINATION 19912 19913 You may not copy, modify, sublicense, or distribute the Document 19914 except as expressly provided under this License. Any attempt 19915 otherwise to copy, modify, sublicense, or distribute it is void, 19916 and will automatically terminate your rights under this License. 19917 19918 However, if you cease all violation of this License, then your 19919 license from a particular copyright holder is reinstated (a) 19920 provisionally, unless and until the copyright holder explicitly 19921 and finally terminates your license, and (b) permanently, if the 19922 copyright holder fails to notify you of the violation by some 19923 reasonable means prior to 60 days after the cessation. 19924 19925 Moreover, your license from a particular copyright holder is 19926 reinstated permanently if the copyright holder notifies you of the 19927 violation by some reasonable means, this is the first time you have 19928 received notice of violation of this License (for any work) from 19929 that copyright holder, and you cure the violation prior to 30 days 19930 after your receipt of the notice. 19931 19932 Termination of your rights under this section does not terminate 19933 the licenses of parties who have received copies or rights from 19934 you under this License. If your rights have been terminated and 19935 not permanently reinstated, receipt of a copy of some or all of 19936 the same material does not give you any rights to use it. 19937 19938 10. FUTURE REVISIONS OF THIS LICENSE 19939 19940 The Free Software Foundation may publish new, revised versions of 19941 the GNU Free Documentation License from time to time. Such new 19942 versions will be similar in spirit to the present version, but may 19943 differ in detail to address new problems or concerns. See 19944 `http://www.gnu.org/copyleft/'. 19945 19946 Each version of the License is given a distinguishing version 19947 number. If the Document specifies that a particular numbered 19948 version of this License "or any later version" applies to it, you 19949 have the option of following the terms and conditions either of 19950 that specified version or of any later version that has been 19951 published (not as a draft) by the Free Software Foundation. If 19952 the Document does not specify a version number of this License, 19953 you may choose any version ever published (not as a draft) by the 19954 Free Software Foundation. If the Document specifies that a proxy 19955 can decide which future versions of this License can be used, that 19956 proxy's public statement of acceptance of a version permanently 19957 authorizes you to choose that version for the Document. 19958 19959 11. RELICENSING 19960 19961 "Massive Multiauthor Collaboration Site" (or "MMC Site") means any 19962 World Wide Web server that publishes copyrightable works and also 19963 provides prominent facilities for anybody to edit those works. A 19964 public wiki that anybody can edit is an example of such a server. 19965 A "Massive Multiauthor Collaboration" (or "MMC") contained in the 19966 site means any set of copyrightable works thus published on the MMC 19967 site. 19968 19969 "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 19970 license published by Creative Commons Corporation, a not-for-profit 19971 corporation with a principal place of business in San Francisco, 19972 California, as well as future copyleft versions of that license 19973 published by that same organization. 19974 19975 "Incorporate" means to publish or republish a Document, in whole or 19976 in part, as part of another Document. 19977 19978 An MMC is "eligible for relicensing" if it is licensed under this 19979 License, and if all works that were first published under this 19980 License somewhere other than this MMC, and subsequently 19981 incorporated in whole or in part into the MMC, (1) had no cover 19982 texts or invariant sections, and (2) were thus incorporated prior 19983 to November 1, 2008. 19984 19985 The operator of an MMC Site may republish an MMC contained in the 19986 site under CC-BY-SA on the same site at any time before August 1, 19987 2009, provided the MMC is eligible for relicensing. 19988 19989 19990ADDENDUM: How to use this License for your documents 19991==================================================== 19992 19993To use this License in a document you have written, include a copy of 19994the License in the document and put the following copyright and license 19995notices just after the title page: 19996 19997 Copyright (C) YEAR YOUR NAME. 19998 Permission is granted to copy, distribute and/or modify this document 19999 under the terms of the GNU Free Documentation License, Version 1.3 20000 or any later version published by the Free Software Foundation; 20001 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 20002 Texts. A copy of the license is included in the section entitled ``GNU 20003 Free Documentation License''. 20004 20005 If you have Invariant Sections, Front-Cover Texts and Back-Cover 20006Texts, replace the "with...Texts." line with this: 20007 20008 with the Invariant Sections being LIST THEIR TITLES, with 20009 the Front-Cover Texts being LIST, and with the Back-Cover Texts 20010 being LIST. 20011 20012 If you have Invariant Sections without Cover Texts, or some other 20013combination of the three, merge those two alternatives to suit the 20014situation. 20015 20016 If your document contains nontrivial examples of program code, we 20017recommend releasing these examples in parallel under your choice of 20018free software license, such as the GNU General Public License, to 20019permit their use in free software. 20020 20021 20022File: as.info, Node: AS Index, Prev: GNU Free Documentation License, Up: Top 20023 20024AS Index 20025******** 20026 20027[index] 20028* Menu: 20029 20030* #: Comments. (line 39) 20031* #APP: Preprocessing. (line 27) 20032* #NO_APP: Preprocessing. (line 27) 20033* $ in symbol names <1>: D10V-Chars. (line 46) 20034* $ in symbol names <2>: D30V-Chars. (line 63) 20035* $ in symbol names <3>: SH64-Chars. (line 10) 20036* $ in symbol names: SH-Chars. (line 10) 20037* $a: ARM Mapping Symbols. (line 9) 20038* $acos math builtin, TIC54X: TIC54X-Builtins. (line 10) 20039* $asin math builtin, TIC54X: TIC54X-Builtins. (line 13) 20040* $atan math builtin, TIC54X: TIC54X-Builtins. (line 16) 20041* $atan2 math builtin, TIC54X: TIC54X-Builtins. (line 19) 20042* $ceil math builtin, TIC54X: TIC54X-Builtins. (line 22) 20043* $cos math builtin, TIC54X: TIC54X-Builtins. (line 28) 20044* $cosh math builtin, TIC54X: TIC54X-Builtins. (line 25) 20045* $cvf math builtin, TIC54X: TIC54X-Builtins. (line 31) 20046* $cvi math builtin, TIC54X: TIC54X-Builtins. (line 34) 20047* $d: ARM Mapping Symbols. (line 15) 20048* $exp math builtin, TIC54X: TIC54X-Builtins. (line 37) 20049* $fabs math builtin, TIC54X: TIC54X-Builtins. (line 40) 20050* $firstch subsym builtin, TIC54X: TIC54X-Macros. (line 26) 20051* $floor math builtin, TIC54X: TIC54X-Builtins. (line 43) 20052* $fmod math builtin, TIC54X: TIC54X-Builtins. (line 47) 20053* $int math builtin, TIC54X: TIC54X-Builtins. (line 50) 20054* $iscons subsym builtin, TIC54X: TIC54X-Macros. (line 43) 20055* $isdefed subsym builtin, TIC54X: TIC54X-Macros. (line 34) 20056* $ismember subsym builtin, TIC54X: TIC54X-Macros. (line 38) 20057* $isname subsym builtin, TIC54X: TIC54X-Macros. (line 47) 20058* $isreg subsym builtin, TIC54X: TIC54X-Macros. (line 50) 20059* $lastch subsym builtin, TIC54X: TIC54X-Macros. (line 30) 20060* $ldexp math builtin, TIC54X: TIC54X-Builtins. (line 53) 20061* $log math builtin, TIC54X: TIC54X-Builtins. (line 59) 20062* $log10 math builtin, TIC54X: TIC54X-Builtins. (line 56) 20063* $max math builtin, TIC54X: TIC54X-Builtins. (line 62) 20064* $min math builtin, TIC54X: TIC54X-Builtins. (line 65) 20065* $pow math builtin, TIC54X: TIC54X-Builtins. (line 68) 20066* $round math builtin, TIC54X: TIC54X-Builtins. (line 71) 20067* $sgn math builtin, TIC54X: TIC54X-Builtins. (line 74) 20068* $sin math builtin, TIC54X: TIC54X-Builtins. (line 77) 20069* $sinh math builtin, TIC54X: TIC54X-Builtins. (line 80) 20070* $sqrt math builtin, TIC54X: TIC54X-Builtins. (line 83) 20071* $structacc subsym builtin, TIC54X: TIC54X-Macros. (line 57) 20072* $structsz subsym builtin, TIC54X: TIC54X-Macros. (line 54) 20073* $symcmp subsym builtin, TIC54X: TIC54X-Macros. (line 23) 20074* $symlen subsym builtin, TIC54X: TIC54X-Macros. (line 20) 20075* $t: ARM Mapping Symbols. (line 12) 20076* $tan math builtin, TIC54X: TIC54X-Builtins. (line 86) 20077* $tanh math builtin, TIC54X: TIC54X-Builtins. (line 89) 20078* $trunc math builtin, TIC54X: TIC54X-Builtins. (line 92) 20079* -+ option, VAX/VMS: VAX-Opts. (line 71) 20080* --: Command Line. (line 10) 20081* --32 option, i386: i386-Options. (line 8) 20082* --32 option, x86-64: i386-Options. (line 8) 20083* --64 option, i386: i386-Options. (line 8) 20084* --64 option, x86-64: i386-Options. (line 8) 20085* --absolute-literals: Xtensa Options. (line 23) 20086* --allow-reg-prefix: SH Options. (line 9) 20087* --alternate: alternate. (line 6) 20088* --base-size-default-16: M68K-Opts. (line 65) 20089* --base-size-default-32: M68K-Opts. (line 65) 20090* --big: SH Options. (line 9) 20091* --bitwise-or option, M680x0: M68K-Opts. (line 58) 20092* --disp-size-default-16: M68K-Opts. (line 74) 20093* --disp-size-default-32: M68K-Opts. (line 74) 20094* --divide option, i386: i386-Options. (line 24) 20095* --dsp: SH Options. (line 9) 20096* --emulation=crisaout command line option, CRIS: CRIS-Opts. (line 9) 20097* --emulation=criself command line option, CRIS: CRIS-Opts. (line 9) 20098* --enforce-aligned-data: Sparc-Aligned-Data. (line 11) 20099* --fatal-warnings: W. (line 16) 20100* --fdpic: SH Options. (line 31) 20101* --fix-v4bx command line option, ARM: ARM Options. (line 165) 20102* --fixed-special-register-names command line option, MMIX: MMIX-Opts. 20103 (line 8) 20104* --force-long-branches: M68HC11-Opts. (line 69) 20105* --generate-example: M68HC11-Opts. (line 86) 20106* --globalize-symbols command line option, MMIX: MMIX-Opts. (line 12) 20107* --gnu-syntax command line option, MMIX: MMIX-Opts. (line 16) 20108* --hash-size=NUMBER: Overview. (line 364) 20109* --linker-allocated-gregs command line option, MMIX: MMIX-Opts. 20110 (line 67) 20111* --listing-cont-lines: listing. (line 34) 20112* --listing-lhs-width: listing. (line 16) 20113* --listing-lhs-width2: listing. (line 21) 20114* --listing-rhs-width: listing. (line 28) 20115* --little: SH Options. (line 9) 20116* --longcalls: Xtensa Options. (line 37) 20117* --march=ARCHITECTURE command line option, CRIS: CRIS-Opts. (line 33) 20118* --MD: MD. (line 6) 20119* --mul-bug-abort command line option, CRIS: CRIS-Opts. (line 61) 20120* --no-absolute-literals: Xtensa Options. (line 23) 20121* --no-expand command line option, MMIX: MMIX-Opts. (line 31) 20122* --no-longcalls: Xtensa Options. (line 37) 20123* --no-merge-gregs command line option, MMIX: MMIX-Opts. (line 36) 20124* --no-mul-bug-abort command line option, CRIS: CRIS-Opts. (line 61) 20125* --no-predefined-syms command line option, MMIX: MMIX-Opts. (line 22) 20126* --no-pushj-stubs command line option, MMIX: MMIX-Opts. (line 54) 20127* --no-stubs command line option, MMIX: MMIX-Opts. (line 54) 20128* --no-target-align: Xtensa Options. (line 30) 20129* --no-text-section-literals: Xtensa Options. (line 9) 20130* --no-transform: Xtensa Options. (line 46) 20131* --no-underscore command line option, CRIS: CRIS-Opts. (line 15) 20132* --no-warn: W. (line 11) 20133* --pcrel: M68K-Opts. (line 86) 20134* --pic command line option, CRIS: CRIS-Opts. (line 27) 20135* --print-insn-syntax: M68HC11-Opts. (line 75) 20136* --print-opcodes: M68HC11-Opts. (line 79) 20137* --register-prefix-optional option, M680x0: M68K-Opts. (line 45) 20138* --relax: SH Options. (line 9) 20139* --relax command line option, MMIX: MMIX-Opts. (line 19) 20140* --rename-section: Xtensa Options. (line 54) 20141* --renesas: SH Options. (line 9) 20142* --short-branches: M68HC11-Opts. (line 54) 20143* --small: SH Options. (line 9) 20144* --statistics: statistics. (line 6) 20145* --strict-direct-mode: M68HC11-Opts. (line 44) 20146* --target-align: Xtensa Options. (line 30) 20147* --text-section-literals: Xtensa Options. (line 9) 20148* --traditional-format: traditional-format. (line 6) 20149* --transform: Xtensa Options. (line 46) 20150* --underscore command line option, CRIS: CRIS-Opts. (line 15) 20151* --warn: W. (line 19) 20152* -1 option, VAX/VMS: VAX-Opts. (line 77) 20153* -32addr command line option, Alpha: Alpha Options. (line 57) 20154* -a: a. (line 6) 20155* -A options, i960: Options-i960. (line 6) 20156* -ac: a. (line 6) 20157* -ad: a. (line 6) 20158* -ag: a. (line 6) 20159* -ah: a. (line 6) 20160* -al: a. (line 6) 20161* -an: a. (line 6) 20162* -as: a. (line 6) 20163* -Asparclet: Sparc-Opts. (line 25) 20164* -Asparclite: Sparc-Opts. (line 25) 20165* -Av6: Sparc-Opts. (line 25) 20166* -Av8: Sparc-Opts. (line 25) 20167* -Av9: Sparc-Opts. (line 25) 20168* -Av9a: Sparc-Opts. (line 25) 20169* -b option, i960: Options-i960. (line 22) 20170* -big option, M32R: M32R-Opts. (line 35) 20171* -D: D. (line 6) 20172* -D, ignored on VAX: VAX-Opts. (line 11) 20173* -d, VAX option: VAX-Opts. (line 16) 20174* -eabi= command line option, ARM: ARM Options. (line 148) 20175* -EB command line option, ARC: ARC Options. (line 31) 20176* -EB command line option, ARM: ARM Options. (line 153) 20177* -EB option (MIPS): MIPS Opts. (line 13) 20178* -EB option, M32R: M32R-Opts. (line 39) 20179* -EL command line option, ARC: ARC Options. (line 35) 20180* -EL command line option, ARM: ARM Options. (line 157) 20181* -EL option (MIPS): MIPS Opts. (line 13) 20182* -EL option, M32R: M32R-Opts. (line 32) 20183* -f: f. (line 6) 20184* -F command line option, Alpha: Alpha Options. (line 57) 20185* -G command line option, Alpha: Alpha Options. (line 53) 20186* -g command line option, Alpha: Alpha Options. (line 47) 20187* -G option (MIPS): MIPS Opts. (line 8) 20188* -h option, VAX/VMS: VAX-Opts. (line 45) 20189* -H option, VAX/VMS: VAX-Opts. (line 81) 20190* -I PATH: I. (line 6) 20191* -ignore-parallel-conflicts option, M32RX: M32R-Opts. (line 87) 20192* -Ip option, M32RX: M32R-Opts. (line 97) 20193* -J, ignored on VAX: VAX-Opts. (line 27) 20194* -K: K. (line 6) 20195* -k command line option, ARM: ARM Options. (line 161) 20196* -KPIC option, M32R: M32R-Opts. (line 42) 20197* -KPIC option, MIPS: MIPS Opts. (line 21) 20198* -L: L. (line 6) 20199* -l option, M680x0: M68K-Opts. (line 33) 20200* -little option, M32R: M32R-Opts. (line 27) 20201* -M: M. (line 6) 20202* -m11/03: PDP-11-Options. (line 140) 20203* -m11/04: PDP-11-Options. (line 143) 20204* -m11/05: PDP-11-Options. (line 146) 20205* -m11/10: PDP-11-Options. (line 146) 20206* -m11/15: PDP-11-Options. (line 149) 20207* -m11/20: PDP-11-Options. (line 149) 20208* -m11/21: PDP-11-Options. (line 152) 20209* -m11/23: PDP-11-Options. (line 155) 20210* -m11/24: PDP-11-Options. (line 155) 20211* -m11/34: PDP-11-Options. (line 158) 20212* -m11/34a: PDP-11-Options. (line 161) 20213* -m11/35: PDP-11-Options. (line 164) 20214* -m11/40: PDP-11-Options. (line 164) 20215* -m11/44: PDP-11-Options. (line 167) 20216* -m11/45: PDP-11-Options. (line 170) 20217* -m11/50: PDP-11-Options. (line 170) 20218* -m11/53: PDP-11-Options. (line 173) 20219* -m11/55: PDP-11-Options. (line 170) 20220* -m11/60: PDP-11-Options. (line 176) 20221* -m11/70: PDP-11-Options. (line 170) 20222* -m11/73: PDP-11-Options. (line 173) 20223* -m11/83: PDP-11-Options. (line 173) 20224* -m11/84: PDP-11-Options. (line 173) 20225* -m11/93: PDP-11-Options. (line 173) 20226* -m11/94: PDP-11-Options. (line 173) 20227* -m16c option, M16C: M32C-Opts. (line 12) 20228* -m31 option, s390: s390 Options. (line 8) 20229* -m32bit-doubles: RX-Opts. (line 9) 20230* -m32c option, M32C: M32C-Opts. (line 9) 20231* -m32r option, M32R: M32R-Opts. (line 21) 20232* -m32rx option, M32R2: M32R-Opts. (line 17) 20233* -m32rx option, M32RX: M32R-Opts. (line 9) 20234* -m64 option, s390: s390 Options. (line 8) 20235* -m64bit-doubles: RX-Opts. (line 15) 20236* -m68000 and related options: M68K-Opts. (line 98) 20237* -m68hc11: M68HC11-Opts. (line 9) 20238* -m68hc12: M68HC11-Opts. (line 14) 20239* -m68hcs12: M68HC11-Opts. (line 21) 20240* -m[no-]68851 command line option, M680x0: M68K-Opts. (line 21) 20241* -m[no-]68881 command line option, M680x0: M68K-Opts. (line 21) 20242* -m[no-]div command line option, M680x0: M68K-Opts. (line 21) 20243* -m[no-]emac command line option, M680x0: M68K-Opts. (line 21) 20244* -m[no-]float command line option, M680x0: M68K-Opts. (line 21) 20245* -m[no-]mac command line option, M680x0: M68K-Opts. (line 21) 20246* -m[no-]usp command line option, M680x0: M68K-Opts. (line 21) 20247* -mall: PDP-11-Options. (line 26) 20248* -mall-enabled command line option, LM32: LM32 Options. (line 30) 20249* -mall-extensions: PDP-11-Options. (line 26) 20250* -mall-opcodes command line option, AVR: AVR Options. (line 68) 20251* -mapcs-26 command line option, ARM: ARM Options. (line 120) 20252* -mapcs-32 command line option, ARM: ARM Options. (line 120) 20253* -mapcs-float command line option, ARM: ARM Options. (line 134) 20254* -mapcs-reentrant command line option, ARM: ARM Options. (line 139) 20255* -marc[5|6|7|8] command line option, ARC: ARC Options. (line 6) 20256* -march= command line option, ARM: ARM Options. (line 59) 20257* -march= command line option, M680x0: M68K-Opts. (line 8) 20258* -march= command line option, TIC6X: TIC6X Options. (line 6) 20259* -march= option, i386: i386-Options. (line 31) 20260* -march= option, s390: s390 Options. (line 25) 20261* -march= option, x86-64: i386-Options. (line 31) 20262* -matomic command line option, TIC6X: TIC6X Options. (line 13) 20263* -matpcs command line option, ARM: ARM Options. (line 126) 20264* -mavxscalar= option, i386: i386-Options. (line 79) 20265* -mavxscalar= option, x86-64: i386-Options. (line 79) 20266* -mbarrel-shift-enabled command line option, LM32: LM32 Options. 20267 (line 12) 20268* -mbig-endian: RX-Opts. (line 20) 20269* -mbreak-enabled command line option, LM32: LM32 Options. (line 27) 20270* -mcis: PDP-11-Options. (line 32) 20271* -mconstant-gp command line option, IA-64: IA-64 Options. (line 6) 20272* -mCPU command line option, Alpha: Alpha Options. (line 6) 20273* -mcpu option, cpu: TIC54X-Opts. (line 15) 20274* -mcpu= command line option, ARM: ARM Options. (line 6) 20275* -mcpu= command line option, Blackfin: Blackfin Options. (line 6) 20276* -mcpu= command line option, M680x0: M68K-Opts. (line 14) 20277* -mcsm: PDP-11-Options. (line 43) 20278* -mdcache-enabled command line option, LM32: LM32 Options. (line 24) 20279* -mdebug command line option, Alpha: Alpha Options. (line 25) 20280* -mdivide-enabled command line option, LM32: LM32 Options. (line 9) 20281* -mdsbt command line option, TIC6X: TIC6X Options. (line 25) 20282* -me option, stderr redirect: TIC54X-Opts. (line 20) 20283* -meis: PDP-11-Options. (line 46) 20284* -merrors-to-file option, stderr redirect: TIC54X-Opts. (line 20) 20285* -mesa option, s390: s390 Options. (line 17) 20286* -mf option, far-mode: TIC54X-Opts. (line 8) 20287* -mf11: PDP-11-Options. (line 122) 20288* -mfar-mode option, far-mode: TIC54X-Opts. (line 8) 20289* -mfdpic command line option, Blackfin: Blackfin Options. (line 19) 20290* -mfis: PDP-11-Options. (line 51) 20291* -mfloat-abi= command line option, ARM: ARM Options. (line 143) 20292* -mfp-11: PDP-11-Options. (line 56) 20293* -mfpp: PDP-11-Options. (line 56) 20294* -mfpu: PDP-11-Options. (line 56) 20295* -mfpu= command line option, ARM: ARM Options. (line 74) 20296* -micache-enabled command line option, LM32: LM32 Options. (line 21) 20297* -mimplicit-it command line option, ARM: ARM Options. (line 104) 20298* -mip2022 option, IP2K: IP2K-Opts. (line 14) 20299* -mip2022ext option, IP2022: IP2K-Opts. (line 9) 20300* -mj11: PDP-11-Options. (line 126) 20301* -mka11: PDP-11-Options. (line 92) 20302* -mkb11: PDP-11-Options. (line 95) 20303* -mkd11a: PDP-11-Options. (line 98) 20304* -mkd11b: PDP-11-Options. (line 101) 20305* -mkd11d: PDP-11-Options. (line 104) 20306* -mkd11e: PDP-11-Options. (line 107) 20307* -mkd11f: PDP-11-Options. (line 110) 20308* -mkd11h: PDP-11-Options. (line 110) 20309* -mkd11k: PDP-11-Options. (line 114) 20310* -mkd11q: PDP-11-Options. (line 110) 20311* -mkd11z: PDP-11-Options. (line 118) 20312* -mkev11: PDP-11-Options. (line 51) 20313* -mlimited-eis: PDP-11-Options. (line 64) 20314* -mlittle-endian: RX-Opts. (line 26) 20315* -mlong: M68HC11-Opts. (line 32) 20316* -mlong-double: M68HC11-Opts. (line 40) 20317* -mmcu= command line option, AVR: AVR Options. (line 6) 20318* -mmfpt: PDP-11-Options. (line 70) 20319* -mmicrocode: PDP-11-Options. (line 83) 20320* -mmnemonic= option, i386: i386-Options. (line 87) 20321* -mmnemonic= option, x86-64: i386-Options. (line 87) 20322* -mmultiply-enabled command line option, LM32: LM32 Options. (line 6) 20323* -mmutiproc: PDP-11-Options. (line 73) 20324* -mmxps: PDP-11-Options. (line 77) 20325* -mnaked-reg option, i386: i386-Options. (line 99) 20326* -mnaked-reg option, x86-64: i386-Options. (line 99) 20327* -mno-atomic command line option, TIC6X: TIC6X Options. (line 13) 20328* -mno-cis: PDP-11-Options. (line 32) 20329* -mno-csm: PDP-11-Options. (line 43) 20330* -mno-dsbt command line option, TIC6X: TIC6X Options. (line 25) 20331* -mno-eis: PDP-11-Options. (line 46) 20332* -mno-extensions: PDP-11-Options. (line 29) 20333* -mno-fdpic command line option, Blackfin: Blackfin Options. (line 22) 20334* -mno-fis: PDP-11-Options. (line 51) 20335* -mno-fp-11: PDP-11-Options. (line 56) 20336* -mno-fpp: PDP-11-Options. (line 56) 20337* -mno-fpu: PDP-11-Options. (line 56) 20338* -mno-kev11: PDP-11-Options. (line 51) 20339* -mno-limited-eis: PDP-11-Options. (line 64) 20340* -mno-mfpt: PDP-11-Options. (line 70) 20341* -mno-microcode: PDP-11-Options. (line 83) 20342* -mno-mutiproc: PDP-11-Options. (line 73) 20343* -mno-mxps: PDP-11-Options. (line 77) 20344* -mno-pic: PDP-11-Options. (line 11) 20345* -mno-pic command line option, TIC6X: TIC6X Options. (line 48) 20346* -mno-regnames option, s390: s390 Options. (line 35) 20347* -mno-skip-bug command line option, AVR: AVR Options. (line 71) 20348* -mno-spl: PDP-11-Options. (line 80) 20349* -mno-sym32: MIPS Opts. (line 208) 20350* -mno-wrap command line option, AVR: AVR Options. (line 74) 20351* -mnopic command line option, Blackfin: Blackfin Options. (line 22) 20352* -mpic: PDP-11-Options. (line 11) 20353* -mpic command line option, TIC6X: TIC6X Options. (line 48) 20354* -mpid= command line option, TIC6X: TIC6X Options. (line 35) 20355* -mregnames option, s390: s390 Options. (line 32) 20356* -mrelax command line option, V850: V850 Options. (line 63) 20357* -mshort: M68HC11-Opts. (line 27) 20358* -mshort-double: M68HC11-Opts. (line 36) 20359* -msign-extend-enabled command line option, LM32: LM32 Options. 20360 (line 15) 20361* -msmall-data-limit: RX-Opts. (line 42) 20362* -mspl: PDP-11-Options. (line 80) 20363* -msse-check= option, i386: i386-Options. (line 69) 20364* -msse-check= option, x86-64: i386-Options. (line 69) 20365* -msse2avx option, i386: i386-Options. (line 65) 20366* -msse2avx option, x86-64: i386-Options. (line 65) 20367* -msym32: MIPS Opts. (line 208) 20368* -msyntax= option, i386: i386-Options. (line 93) 20369* -msyntax= option, x86-64: i386-Options. (line 93) 20370* -mt11: PDP-11-Options. (line 130) 20371* -mthumb command line option, ARM: ARM Options. (line 95) 20372* -mthumb-interwork command line option, ARM: ARM Options. (line 100) 20373* -mtune= option, i386: i386-Options. (line 57) 20374* -mtune= option, x86-64: i386-Options. (line 57) 20375* -muse-conventional-section-names: RX-Opts. (line 33) 20376* -muse-renesas-section-names: RX-Opts. (line 37) 20377* -muser-enabled command line option, LM32: LM32 Options. (line 18) 20378* -mv850 command line option, V850: V850 Options. (line 23) 20379* -mv850any command line option, V850: V850 Options. (line 41) 20380* -mv850e command line option, V850: V850 Options. (line 29) 20381* -mv850e1 command line option, V850: V850 Options. (line 35) 20382* -mv850e2 command line option, V850: V850 Options. (line 51) 20383* -mv850e2v3 command line option, V850: V850 Options. (line 57) 20384* -mvxworks-pic option, MIPS: MIPS Opts. (line 26) 20385* -mwarn-areg-zero option, s390: s390 Options. (line 38) 20386* -mwarn-deprecated command line option, ARM: ARM Options. (line 169) 20387* -mzarch option, s390: s390 Options. (line 17) 20388* -N command line option, CRIS: CRIS-Opts. (line 57) 20389* -nIp option, M32RX: M32R-Opts. (line 101) 20390* -no-bitinst, M32R2: M32R-Opts. (line 54) 20391* -no-ignore-parallel-conflicts option, M32RX: M32R-Opts. (line 93) 20392* -no-mdebug command line option, Alpha: Alpha Options. (line 25) 20393* -no-parallel option, M32RX: M32R-Opts. (line 51) 20394* -no-relax option, i960: Options-i960. (line 66) 20395* -no-warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. 20396 (line 79) 20397* -no-warn-unmatched-high option, M32R: M32R-Opts. (line 111) 20398* -nocpp ignored (MIPS): MIPS Opts. (line 211) 20399* -noreplace command line option, Alpha: Alpha Options. (line 40) 20400* -o: o. (line 6) 20401* -O option, M32RX: M32R-Opts. (line 59) 20402* -parallel option, M32RX: M32R-Opts. (line 46) 20403* -R: R. (line 6) 20404* -r800 command line option, Z80: Z80 Options. (line 41) 20405* -relax command line option, Alpha: Alpha Options. (line 32) 20406* -replace command line option, Alpha: Alpha Options. (line 40) 20407* -S, ignored on VAX: VAX-Opts. (line 11) 20408* -t, ignored on VAX: VAX-Opts. (line 36) 20409* -T, ignored on VAX: VAX-Opts. (line 11) 20410* -v: v. (line 6) 20411* -V, redundant on VAX: VAX-Opts. (line 22) 20412* -version: v. (line 6) 20413* -W: W. (line 11) 20414* -warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. (line 65) 20415* -warn-unmatched-high option, M32R: M32R-Opts. (line 105) 20416* -Wnp option, M32RX: M32R-Opts. (line 83) 20417* -Wnuh option, M32RX: M32R-Opts. (line 117) 20418* -Wp option, M32RX: M32R-Opts. (line 75) 20419* -wsigned_overflow command line option, V850: V850 Options. (line 9) 20420* -Wuh option, M32RX: M32R-Opts. (line 114) 20421* -wunsigned_overflow command line option, V850: V850 Options. 20422 (line 16) 20423* -x command line option, MMIX: MMIX-Opts. (line 44) 20424* -z80 command line option, Z80: Z80 Options. (line 8) 20425* -z8001 command line option, Z8000: Z8000 Options. (line 6) 20426* -z8002 command line option, Z8000: Z8000 Options. (line 9) 20427* . (symbol): Dot. (line 6) 20428* .2byte directive, ARM: ARM Directives. (line 6) 20429* .4byte directive, ARM: ARM Directives. (line 6) 20430* .8byte directive, ARM: ARM Directives. (line 6) 20431* .align directive, ARM: ARM Directives. (line 11) 20432* .arch directive, ARM: ARM Directives. (line 18) 20433* .arch directive, TIC6X: TIC6X Directives. (line 10) 20434* .arch_extension directive, ARM: ARM Directives. (line 25) 20435* .arm directive, ARM: ARM Directives. (line 34) 20436* .atomic directive, TIC6X: TIC6X Directives. (line 13) 20437* .big directive, M32RX: M32R-Directives. (line 88) 20438* .bss directive, ARM: ARM Directives. (line 42) 20439* .c6xabi_attribute directive, TIC6X: TIC6X Directives. (line 17) 20440* .cantunwind directive, ARM: ARM Directives. (line 45) 20441* .code directive, ARM: ARM Directives. (line 49) 20442* .cpu directive, ARM: ARM Directives. (line 53) 20443* .dn and .qn directives, ARM: ARM Directives. (line 60) 20444* .eabi_attribute directive, ARM: ARM Directives. (line 83) 20445* .even directive, ARM: ARM Directives. (line 111) 20446* .extend directive, ARM: ARM Directives. (line 114) 20447* .fnend directive, ARM: ARM Directives. (line 120) 20448* .fnstart directive, ARM: ARM Directives. (line 129) 20449* .force_thumb directive, ARM: ARM Directives. (line 132) 20450* .fpu directive, ARM: ARM Directives. (line 136) 20451* .global: MIPS insn. (line 12) 20452* .handlerdata directive, ARM: ARM Directives. (line 140) 20453* .insn: MIPS insn. (line 6) 20454* .insn directive, s390: s390 Directives. (line 11) 20455* .inst directive, ARM: ARM Directives. (line 149) 20456* .ldouble directive, ARM: ARM Directives. (line 114) 20457* .little directive, M32RX: M32R-Directives. (line 82) 20458* .long directive, s390: s390 Directives. (line 16) 20459* .ltorg directive, ARM: ARM Directives. (line 159) 20460* .ltorg directive, s390: s390 Directives. (line 88) 20461* .m32r directive, M32R: M32R-Directives. (line 66) 20462* .m32r2 directive, M32R2: M32R-Directives. (line 77) 20463* .m32rx directive, M32RX: M32R-Directives. (line 72) 20464* .machine directive, s390: s390 Directives. (line 93) 20465* .movsp directive, ARM: ARM Directives. (line 173) 20466* .noatomic directive, TIC6X: TIC6X Directives. (line 13) 20467* .nocmp directive, TIC6X: TIC6X Directives. (line 28) 20468* .o: Object. (line 6) 20469* .object_arch directive, ARM: ARM Directives. (line 178) 20470* .packed directive, ARM: ARM Directives. (line 184) 20471* .pad directive, ARM: ARM Directives. (line 37) 20472* .param on HPPA: HPPA Directives. (line 19) 20473* .personality directive, ARM: ARM Directives. (line 194) 20474* .personalityindex directive, ARM: ARM Directives. (line 197) 20475* .pool directive, ARM: ARM Directives. (line 201) 20476* .quad directive, s390: s390 Directives. (line 16) 20477* .req directive, ARM: ARM Directives. (line 204) 20478* .save directive, ARM: ARM Directives. (line 209) 20479* .secrel32 directive, ARM: ARM Directives. (line 247) 20480* .set arch=CPU: MIPS ISA. (line 18) 20481* .set autoextend: MIPS autoextend. (line 6) 20482* .set doublefloat: MIPS floating-point. (line 12) 20483* .set dsp: MIPS ASE instruction generation overrides. 20484 (line 21) 20485* .set dspr2: MIPS ASE instruction generation overrides. 20486 (line 26) 20487* .set hardfloat: MIPS floating-point. (line 6) 20488* .set mdmx: MIPS ASE instruction generation overrides. 20489 (line 16) 20490* .set mips3d: MIPS ASE instruction generation overrides. 20491 (line 6) 20492* .set mipsN: MIPS ISA. (line 6) 20493* .set mt: MIPS ASE instruction generation overrides. 20494 (line 32) 20495* .set noautoextend: MIPS autoextend. (line 6) 20496* .set nodsp: MIPS ASE instruction generation overrides. 20497 (line 21) 20498* .set nodspr2: MIPS ASE instruction generation overrides. 20499 (line 26) 20500* .set nomdmx: MIPS ASE instruction generation overrides. 20501 (line 16) 20502* .set nomips3d: MIPS ASE instruction generation overrides. 20503 (line 6) 20504* .set nomt: MIPS ASE instruction generation overrides. 20505 (line 32) 20506* .set nosmartmips: MIPS ASE instruction generation overrides. 20507 (line 11) 20508* .set nosym32: MIPS symbol sizes. (line 6) 20509* .set pop: MIPS option stack. (line 6) 20510* .set push: MIPS option stack. (line 6) 20511* .set singlefloat: MIPS floating-point. (line 12) 20512* .set smartmips: MIPS ASE instruction generation overrides. 20513 (line 11) 20514* .set softfloat: MIPS floating-point. (line 6) 20515* .set sym32: MIPS symbol sizes. (line 6) 20516* .setfp directive, ARM: ARM Directives. (line 233) 20517* .short directive, s390: s390 Directives. (line 16) 20518* .syntax directive, ARM: ARM Directives. (line 252) 20519* .thumb directive, ARM: ARM Directives. (line 256) 20520* .thumb_func directive, ARM: ARM Directives. (line 259) 20521* .thumb_set directive, ARM: ARM Directives. (line 270) 20522* .unreq directive, ARM: ARM Directives. (line 277) 20523* .unwind_raw directive, ARM: ARM Directives. (line 288) 20524* .v850 directive, V850: V850 Directives. (line 14) 20525* .v850e directive, V850: V850 Directives. (line 20) 20526* .v850e1 directive, V850: V850 Directives. (line 26) 20527* .v850e2 directive, V850: V850 Directives. (line 32) 20528* .v850e2v3 directive, V850: V850 Directives. (line 38) 20529* .vsave directive, ARM: ARM Directives. (line 295) 20530* .z8001: Z8000 Directives. (line 11) 20531* .z8002: Z8000 Directives. (line 15) 20532* 16-bit code, i386: i386-16bit. (line 6) 20533* 2byte directive, ARC: ARC Directives. (line 9) 20534* 3byte directive, ARC: ARC Directives. (line 12) 20535* 3DNow!, i386: i386-SIMD. (line 6) 20536* 3DNow!, x86-64: i386-SIMD. (line 6) 20537* 430 support: MSP430-Dependent. (line 6) 20538* 4byte directive, ARC: ARC Directives. (line 15) 20539* : (label): Statements. (line 30) 20540* @word modifier, D10V: D10V-Word. (line 6) 20541* \" (doublequote character): Strings. (line 43) 20542* \\ (\ character): Strings. (line 40) 20543* \b (backspace character): Strings. (line 15) 20544* \DDD (octal character code): Strings. (line 30) 20545* \f (formfeed character): Strings. (line 18) 20546* \n (newline character): Strings. (line 21) 20547* \r (carriage return character): Strings. (line 24) 20548* \t (tab): Strings. (line 27) 20549* \XD... (hex character code): Strings. (line 36) 20550* _ opcode prefix: Xtensa Opcodes. (line 9) 20551* a.out: Object. (line 6) 20552* a.out symbol attributes: a.out Symbols. (line 6) 20553* A_DIR environment variable, TIC54X: TIC54X-Env. (line 6) 20554* ABI options, SH64: SH64 Options. (line 29) 20555* abort directive: Abort. (line 6) 20556* ABORT directive: ABORT (COFF). (line 6) 20557* absolute section: Ld Sections. (line 29) 20558* absolute-literals directive: Absolute Literals Directive. 20559 (line 6) 20560* ADDI instructions, relaxation: Xtensa Immediate Relaxation. 20561 (line 43) 20562* addition, permitted arguments: Infix Ops. (line 44) 20563* addresses: Expressions. (line 6) 20564* addresses, format of: Secs Background. (line 68) 20565* addressing modes, D10V: D10V-Addressing. (line 6) 20566* addressing modes, D30V: D30V-Addressing. (line 6) 20567* addressing modes, H8/300: H8/300-Addressing. (line 6) 20568* addressing modes, M680x0: M68K-Syntax. (line 21) 20569* addressing modes, M68HC11: M68HC11-Syntax. (line 17) 20570* addressing modes, SH: SH-Addressing. (line 6) 20571* addressing modes, SH64: SH64-Addressing. (line 6) 20572* addressing modes, Z8000: Z8000-Addressing. (line 6) 20573* ADR reg,<label> pseudo op, ARM: ARM Opcodes. (line 25) 20574* ADRL reg,<label> pseudo op, ARM: ARM Opcodes. (line 35) 20575* advancing location counter: Org. (line 6) 20576* align directive: Align. (line 6) 20577* align directive, SPARC: Sparc-Directives. (line 9) 20578* align directive, TIC54X: TIC54X-Directives. (line 6) 20579* alignment for NEON instructions: ARM-Neon-Alignment. (line 6) 20580* alignment of branch targets: Xtensa Automatic Alignment. 20581 (line 6) 20582* alignment of LOOP instructions: Xtensa Automatic Alignment. 20583 (line 6) 20584* Alpha floating point (IEEE): Alpha Floating Point. 20585 (line 6) 20586* Alpha line comment character: Alpha-Chars. (line 6) 20587* Alpha line separator: Alpha-Chars. (line 8) 20588* Alpha notes: Alpha Notes. (line 6) 20589* Alpha options: Alpha Options. (line 6) 20590* Alpha registers: Alpha-Regs. (line 6) 20591* Alpha relocations: Alpha-Relocs. (line 6) 20592* Alpha support: Alpha-Dependent. (line 6) 20593* Alpha Syntax: Alpha Options. (line 61) 20594* Alpha-only directives: Alpha Directives. (line 10) 20595* altered difference tables: Word. (line 12) 20596* alternate syntax for the 680x0: M68K-Moto-Syntax. (line 6) 20597* ARC floating point (IEEE): ARC Floating Point. (line 6) 20598* ARC machine directives: ARC Directives. (line 6) 20599* ARC opcodes: ARC Opcodes. (line 6) 20600* ARC options (none): ARC Options. (line 6) 20601* ARC register names: ARC-Regs. (line 6) 20602* ARC special characters: ARC-Chars. (line 6) 20603* ARC support: ARC-Dependent. (line 6) 20604* arc5 arc5, ARC: ARC Options. (line 10) 20605* arc6 arc6, ARC: ARC Options. (line 13) 20606* arc7 arc7, ARC: ARC Options. (line 21) 20607* arc8 arc8, ARC: ARC Options. (line 24) 20608* arch directive, i386: i386-Arch. (line 6) 20609* arch directive, M680x0: M68K-Directives. (line 22) 20610* arch directive, x86-64: i386-Arch. (line 6) 20611* architecture options, i960: Options-i960. (line 6) 20612* architecture options, IP2022: IP2K-Opts. (line 9) 20613* architecture options, IP2K: IP2K-Opts. (line 14) 20614* architecture options, M16C: M32C-Opts. (line 12) 20615* architecture options, M32C: M32C-Opts. (line 9) 20616* architecture options, M32R: M32R-Opts. (line 21) 20617* architecture options, M32R2: M32R-Opts. (line 17) 20618* architecture options, M32RX: M32R-Opts. (line 9) 20619* architecture options, M680x0: M68K-Opts. (line 98) 20620* Architecture variant option, CRIS: CRIS-Opts. (line 33) 20621* architectures, PowerPC: PowerPC-Opts. (line 6) 20622* architectures, SCORE: SCORE-Opts. (line 6) 20623* architectures, SPARC: Sparc-Opts. (line 6) 20624* arguments for addition: Infix Ops. (line 44) 20625* arguments for subtraction: Infix Ops. (line 49) 20626* arguments in expressions: Arguments. (line 6) 20627* arithmetic functions: Operators. (line 6) 20628* arithmetic operands: Arguments. (line 6) 20629* ARM data relocations: ARM-Relocations. (line 6) 20630* ARM floating point (IEEE): ARM Floating Point. (line 6) 20631* ARM identifiers: ARM-Chars. (line 15) 20632* ARM immediate character: ARM-Chars. (line 13) 20633* ARM line comment character: ARM-Chars. (line 6) 20634* ARM line separator: ARM-Chars. (line 10) 20635* ARM machine directives: ARM Directives. (line 6) 20636* ARM opcodes: ARM Opcodes. (line 6) 20637* ARM options (none): ARM Options. (line 6) 20638* ARM register names: ARM-Regs. (line 6) 20639* ARM support: ARM-Dependent. (line 6) 20640* ascii directive: Ascii. (line 6) 20641* asciz directive: Asciz. (line 6) 20642* asg directive, TIC54X: TIC54X-Directives. (line 20) 20643* assembler bugs, reporting: Bug Reporting. (line 6) 20644* assembler crash: Bug Criteria. (line 9) 20645* assembler directive .3byte, RX: RX-Directives. (line 9) 20646* assembler directive .arch, CRIS: CRIS-Pseudos. (line 45) 20647* assembler directive .dword, CRIS: CRIS-Pseudos. (line 12) 20648* assembler directive .far, M68HC11: M68HC11-Directives. (line 20) 20649* assembler directive .interrupt, M68HC11: M68HC11-Directives. 20650 (line 26) 20651* assembler directive .mode, M68HC11: M68HC11-Directives. (line 16) 20652* assembler directive .relax, M68HC11: M68HC11-Directives. (line 10) 20653* assembler directive .syntax, CRIS: CRIS-Pseudos. (line 17) 20654* assembler directive .xrefb, M68HC11: M68HC11-Directives. (line 31) 20655* assembler directive BSPEC, MMIX: MMIX-Pseudos. (line 131) 20656* assembler directive BYTE, MMIX: MMIX-Pseudos. (line 97) 20657* assembler directive ESPEC, MMIX: MMIX-Pseudos. (line 131) 20658* assembler directive GREG, MMIX: MMIX-Pseudos. (line 50) 20659* assembler directive IS, MMIX: MMIX-Pseudos. (line 42) 20660* assembler directive LOC, MMIX: MMIX-Pseudos. (line 7) 20661* assembler directive LOCAL, MMIX: MMIX-Pseudos. (line 28) 20662* assembler directive OCTA, MMIX: MMIX-Pseudos. (line 108) 20663* assembler directive PREFIX, MMIX: MMIX-Pseudos. (line 120) 20664* assembler directive TETRA, MMIX: MMIX-Pseudos. (line 108) 20665* assembler directive WYDE, MMIX: MMIX-Pseudos. (line 108) 20666* assembler directives, CRIS: CRIS-Pseudos. (line 6) 20667* assembler directives, M68HC11: M68HC11-Directives. (line 6) 20668* assembler directives, M68HC12: M68HC11-Directives. (line 6) 20669* assembler directives, MMIX: MMIX-Pseudos. (line 6) 20670* assembler directives, RX: RX-Directives. (line 6) 20671* assembler internal logic error: As Sections. (line 13) 20672* assembler version: v. (line 6) 20673* assembler, and linker: Secs Background. (line 10) 20674* assembly listings, enabling: a. (line 6) 20675* assigning values to symbols <1>: Setting Symbols. (line 6) 20676* assigning values to symbols: Equ. (line 6) 20677* atmp directive, i860: Directives-i860. (line 16) 20678* att_syntax pseudo op, i386: i386-Syntax. (line 6) 20679* att_syntax pseudo op, x86-64: i386-Syntax. (line 6) 20680* attributes, symbol: Symbol Attributes. (line 6) 20681* auxiliary attributes, COFF symbols: COFF Symbols. (line 19) 20682* auxiliary symbol information, COFF: Dim. (line 6) 20683* Av7: Sparc-Opts. (line 25) 20684* AVR line comment character: AVR-Chars. (line 6) 20685* AVR line separator: AVR-Chars. (line 10) 20686* AVR modifiers: AVR-Modifiers. (line 6) 20687* AVR opcode summary: AVR Opcodes. (line 6) 20688* AVR options (none): AVR Options. (line 6) 20689* AVR register names: AVR-Regs. (line 6) 20690* AVR support: AVR-Dependent. (line 6) 20691* backslash (\\): Strings. (line 40) 20692* backspace (\b): Strings. (line 15) 20693* balign directive: Balign. (line 6) 20694* balignl directive: Balign. (line 27) 20695* balignw directive: Balign. (line 27) 20696* bes directive, TIC54X: TIC54X-Directives. (line 196) 20697* big endian output, MIPS: Overview. (line 693) 20698* big endian output, PJ: Overview. (line 600) 20699* big-endian output, MIPS: MIPS Opts. (line 13) 20700* big-endian output, TIC6X: TIC6X Options. (line 58) 20701* bignums: Bignums. (line 6) 20702* binary constants, TIC54X: TIC54X-Constants. (line 8) 20703* binary files, including: Incbin. (line 6) 20704* binary integers: Integers. (line 6) 20705* bit names, IA-64: IA-64-Bits. (line 6) 20706* bitfields, not supported on VAX: VAX-no. (line 6) 20707* Blackfin directives: Blackfin Directives. (line 6) 20708* Blackfin options (none): Blackfin Options. (line 6) 20709* Blackfin support: Blackfin-Dependent. (line 6) 20710* Blackfin syntax: Blackfin Syntax. (line 6) 20711* block: Z8000 Directives. (line 55) 20712* branch improvement, M680x0: M68K-Branch. (line 6) 20713* branch improvement, M68HC11: M68HC11-Branch. (line 6) 20714* branch improvement, VAX: VAX-branch. (line 6) 20715* branch instructions, relaxation: Xtensa Branch Relaxation. 20716 (line 6) 20717* branch recording, i960: Options-i960. (line 22) 20718* branch statistics table, i960: Options-i960. (line 40) 20719* branch target alignment: Xtensa Automatic Alignment. 20720 (line 6) 20721* break directive, TIC54X: TIC54X-Directives. (line 143) 20722* BSD syntax: PDP-11-Syntax. (line 6) 20723* bss directive, i960: Directives-i960. (line 6) 20724* bss directive, TIC54X: TIC54X-Directives. (line 29) 20725* bss section <1>: Ld Sections. (line 20) 20726* bss section: bss. (line 6) 20727* bug criteria: Bug Criteria. (line 6) 20728* bug reports: Bug Reporting. (line 6) 20729* bugs in assembler: Reporting Bugs. (line 6) 20730* Built-in symbols, CRIS: CRIS-Symbols. (line 6) 20731* builtin math functions, TIC54X: TIC54X-Builtins. (line 6) 20732* builtin subsym functions, TIC54X: TIC54X-Macros. (line 16) 20733* bus lock prefixes, i386: i386-Prefixes. (line 36) 20734* bval: Z8000 Directives. (line 30) 20735* byte directive: Byte. (line 6) 20736* byte directive, TIC54X: TIC54X-Directives. (line 36) 20737* C54XDSP_DIR environment variable, TIC54X: TIC54X-Env. (line 6) 20738* c_mode directive, TIC54X: TIC54X-Directives. (line 51) 20739* call instructions, i386: i386-Mnemonics. (line 56) 20740* call instructions, relaxation: Xtensa Call Relaxation. 20741 (line 6) 20742* call instructions, x86-64: i386-Mnemonics. (line 56) 20743* callj, i960 pseudo-opcode: callj-i960. (line 6) 20744* carriage return (\r): Strings. (line 24) 20745* case sensitivity, Z80: Z80-Case. (line 6) 20746* cfi_endproc directive: CFI directives. (line 26) 20747* cfi_sections directive: CFI directives. (line 6) 20748* cfi_startproc directive: CFI directives. (line 16) 20749* char directive, TIC54X: TIC54X-Directives. (line 36) 20750* character constant, Z80: Z80-Chars. (line 13) 20751* character constants: Characters. (line 6) 20752* character escape codes: Strings. (line 15) 20753* character escapes, Z80: Z80-Chars. (line 11) 20754* character, single: Chars. (line 6) 20755* characters used in symbols: Symbol Intro. (line 6) 20756* clink directive, TIC54X: TIC54X-Directives. (line 45) 20757* code16 directive, i386: i386-16bit. (line 6) 20758* code16gcc directive, i386: i386-16bit. (line 6) 20759* code32 directive, i386: i386-16bit. (line 6) 20760* code64 directive, i386: i386-16bit. (line 6) 20761* code64 directive, x86-64: i386-16bit. (line 6) 20762* COFF auxiliary symbol information: Dim. (line 6) 20763* COFF structure debugging: Tag. (line 6) 20764* COFF symbol attributes: COFF Symbols. (line 6) 20765* COFF symbol descriptor: Desc. (line 6) 20766* COFF symbol storage class: Scl. (line 6) 20767* COFF symbol type: Type. (line 11) 20768* COFF symbols, debugging: Def. (line 6) 20769* COFF value attribute: Val. (line 6) 20770* COMDAT: Linkonce. (line 6) 20771* comm directive: Comm. (line 6) 20772* command line conventions: Command Line. (line 6) 20773* command line options, V850: V850 Options. (line 9) 20774* command-line options ignored, VAX: VAX-Opts. (line 6) 20775* comments: Comments. (line 6) 20776* comments, M680x0: M68K-Chars. (line 6) 20777* comments, removed by preprocessor: Preprocessing. (line 11) 20778* common directive, SPARC: Sparc-Directives. (line 12) 20779* common sections: Linkonce. (line 6) 20780* common variable storage: bss. (line 6) 20781* compare and jump expansions, i960: Compare-and-branch-i960. 20782 (line 13) 20783* compare/branch instructions, i960: Compare-and-branch-i960. 20784 (line 6) 20785* comparison expressions: Infix Ops. (line 55) 20786* conditional assembly: If. (line 6) 20787* constant, single character: Chars. (line 6) 20788* constants: Constants. (line 6) 20789* constants, bignum: Bignums. (line 6) 20790* constants, character: Characters. (line 6) 20791* constants, converted by preprocessor: Preprocessing. (line 14) 20792* constants, floating point: Flonums. (line 6) 20793* constants, integer: Integers. (line 6) 20794* constants, number: Numbers. (line 6) 20795* constants, Sparc: Sparc-Constants. (line 6) 20796* constants, string: Strings. (line 6) 20797* constants, TIC54X: TIC54X-Constants. (line 6) 20798* conversion instructions, i386: i386-Mnemonics. (line 37) 20799* conversion instructions, x86-64: i386-Mnemonics. (line 37) 20800* coprocessor wait, i386: i386-Prefixes. (line 40) 20801* copy directive, TIC54X: TIC54X-Directives. (line 54) 20802* cpu directive, M680x0: M68K-Directives. (line 30) 20803* CR16 Operand Qualifiers: CR16 Operand Qualifiers. 20804 (line 6) 20805* CR16 support: CR16-Dependent. (line 6) 20806* crash of assembler: Bug Criteria. (line 9) 20807* CRIS --emulation=crisaout command line option: CRIS-Opts. (line 9) 20808* CRIS --emulation=criself command line option: CRIS-Opts. (line 9) 20809* CRIS --march=ARCHITECTURE command line option: CRIS-Opts. (line 33) 20810* CRIS --mul-bug-abort command line option: CRIS-Opts. (line 61) 20811* CRIS --no-mul-bug-abort command line option: CRIS-Opts. (line 61) 20812* CRIS --no-underscore command line option: CRIS-Opts. (line 15) 20813* CRIS --pic command line option: CRIS-Opts. (line 27) 20814* CRIS --underscore command line option: CRIS-Opts. (line 15) 20815* CRIS -N command line option: CRIS-Opts. (line 57) 20816* CRIS architecture variant option: CRIS-Opts. (line 33) 20817* CRIS assembler directive .arch: CRIS-Pseudos. (line 45) 20818* CRIS assembler directive .dword: CRIS-Pseudos. (line 12) 20819* CRIS assembler directive .syntax: CRIS-Pseudos. (line 17) 20820* CRIS assembler directives: CRIS-Pseudos. (line 6) 20821* CRIS built-in symbols: CRIS-Symbols. (line 6) 20822* CRIS instruction expansion: CRIS-Expand. (line 6) 20823* CRIS line comment characters: CRIS-Chars. (line 6) 20824* CRIS options: CRIS-Opts. (line 6) 20825* CRIS position-independent code: CRIS-Opts. (line 27) 20826* CRIS pseudo-op .arch: CRIS-Pseudos. (line 45) 20827* CRIS pseudo-op .dword: CRIS-Pseudos. (line 12) 20828* CRIS pseudo-op .syntax: CRIS-Pseudos. (line 17) 20829* CRIS pseudo-ops: CRIS-Pseudos. (line 6) 20830* CRIS register names: CRIS-Regs. (line 6) 20831* CRIS support: CRIS-Dependent. (line 6) 20832* CRIS symbols in position-independent code: CRIS-Pic. (line 6) 20833* ctbp register, V850: V850-Regs. (line 131) 20834* ctoff pseudo-op, V850: V850 Opcodes. (line 111) 20835* ctpc register, V850: V850-Regs. (line 119) 20836* ctpsw register, V850: V850-Regs. (line 122) 20837* current address: Dot. (line 6) 20838* current address, advancing: Org. (line 6) 20839* D10V @word modifier: D10V-Word. (line 6) 20840* D10V addressing modes: D10V-Addressing. (line 6) 20841* D10V floating point: D10V-Float. (line 6) 20842* D10V line comment character: D10V-Chars. (line 6) 20843* D10V opcode summary: D10V-Opcodes. (line 6) 20844* D10V optimization: Overview. (line 472) 20845* D10V options: D10V-Opts. (line 6) 20846* D10V registers: D10V-Regs. (line 6) 20847* D10V size modifiers: D10V-Size. (line 6) 20848* D10V sub-instruction ordering: D10V-Chars. (line 6) 20849* D10V sub-instructions: D10V-Subs. (line 6) 20850* D10V support: D10V-Dependent. (line 6) 20851* D10V syntax: D10V-Syntax. (line 6) 20852* D30V addressing modes: D30V-Addressing. (line 6) 20853* D30V floating point: D30V-Float. (line 6) 20854* D30V Guarded Execution: D30V-Guarded. (line 6) 20855* D30V line comment character: D30V-Chars. (line 6) 20856* D30V nops: Overview. (line 480) 20857* D30V nops after 32-bit multiply: Overview. (line 483) 20858* D30V opcode summary: D30V-Opcodes. (line 6) 20859* D30V optimization: Overview. (line 477) 20860* D30V options: D30V-Opts. (line 6) 20861* D30V registers: D30V-Regs. (line 6) 20862* D30V size modifiers: D30V-Size. (line 6) 20863* D30V sub-instruction ordering: D30V-Chars. (line 6) 20864* D30V sub-instructions: D30V-Subs. (line 6) 20865* D30V support: D30V-Dependent. (line 6) 20866* D30V syntax: D30V-Syntax. (line 6) 20867* data alignment on SPARC: Sparc-Aligned-Data. (line 6) 20868* data and text sections, joining: R. (line 6) 20869* data directive: Data. (line 6) 20870* data directive, TIC54X: TIC54X-Directives. (line 61) 20871* data relocations, ARM: ARM-Relocations. (line 6) 20872* data section: Ld Sections. (line 9) 20873* data1 directive, M680x0: M68K-Directives. (line 9) 20874* data2 directive, M680x0: M68K-Directives. (line 12) 20875* datalabel, SH64: SH64-Addressing. (line 16) 20876* dbpc register, V850: V850-Regs. (line 125) 20877* dbpsw register, V850: V850-Regs. (line 128) 20878* debuggers, and symbol order: Symbols. (line 10) 20879* debugging COFF symbols: Def. (line 6) 20880* DEC syntax: PDP-11-Syntax. (line 6) 20881* decimal integers: Integers. (line 12) 20882* def directive: Def. (line 6) 20883* def directive, TIC54X: TIC54X-Directives. (line 103) 20884* density instructions: Density Instructions. 20885 (line 6) 20886* dependency tracking: MD. (line 6) 20887* deprecated directives: Deprecated. (line 6) 20888* desc directive: Desc. (line 6) 20889* descriptor, of a.out symbol: Symbol Desc. (line 6) 20890* dfloat directive, VAX: VAX-directives. (line 10) 20891* difference tables altered: Word. (line 12) 20892* difference tables, warning: K. (line 6) 20893* differences, mmixal: MMIX-mmixal. (line 6) 20894* dim directive: Dim. (line 6) 20895* directives and instructions: Statements. (line 19) 20896* directives for PowerPC: PowerPC-Pseudo. (line 6) 20897* directives for SCORE: SCORE-Pseudo. (line 6) 20898* directives, Blackfin: Blackfin Directives. (line 6) 20899* directives, M32R: M32R-Directives. (line 6) 20900* directives, M680x0: M68K-Directives. (line 6) 20901* directives, machine independent: Pseudo Ops. (line 6) 20902* directives, Xtensa: Xtensa Directives. (line 6) 20903* directives, Z8000: Z8000 Directives. (line 6) 20904* Disable floating-point instructions: MIPS floating-point. (line 6) 20905* Disable single-precision floating-point operations: MIPS floating-point. 20906 (line 12) 20907* displacement sizing character, VAX: VAX-operands. (line 12) 20908* dollar local symbols: Symbol Names. (line 105) 20909* dot (symbol): Dot. (line 6) 20910* double directive: Double. (line 6) 20911* double directive, i386: i386-Float. (line 14) 20912* double directive, M680x0: M68K-Float. (line 14) 20913* double directive, M68HC11: M68HC11-Float. (line 14) 20914* double directive, RX: RX-Float. (line 11) 20915* double directive, TIC54X: TIC54X-Directives. (line 64) 20916* double directive, VAX: VAX-float. (line 15) 20917* double directive, x86-64: i386-Float. (line 14) 20918* doublequote (\"): Strings. (line 43) 20919* drlist directive, TIC54X: TIC54X-Directives. (line 73) 20920* drnolist directive, TIC54X: TIC54X-Directives. (line 73) 20921* dual directive, i860: Directives-i860. (line 6) 20922* ECOFF sections: MIPS Object. (line 6) 20923* ecr register, V850: V850-Regs. (line 113) 20924* eight-byte integer: Quad. (line 9) 20925* eipc register, V850: V850-Regs. (line 101) 20926* eipsw register, V850: V850-Regs. (line 104) 20927* eject directive: Eject. (line 6) 20928* ELF symbol type: Type. (line 22) 20929* else directive: Else. (line 6) 20930* elseif directive: Elseif. (line 6) 20931* empty expressions: Empty Exprs. (line 6) 20932* emsg directive, TIC54X: TIC54X-Directives. (line 77) 20933* emulation: Overview. (line 796) 20934* encoding options, i386: i386-Mnemonics. (line 32) 20935* encoding options, x86-64: i386-Mnemonics. (line 32) 20936* end directive: End. (line 6) 20937* enddual directive, i860: Directives-i860. (line 11) 20938* endef directive: Endef. (line 6) 20939* endfunc directive: Endfunc. (line 6) 20940* endianness, MIPS: Overview. (line 693) 20941* endianness, PJ: Overview. (line 600) 20942* endif directive: Endif. (line 6) 20943* endloop directive, TIC54X: TIC54X-Directives. (line 143) 20944* endm directive: Macro. (line 138) 20945* endm directive, TIC54X: TIC54X-Directives. (line 153) 20946* endstruct directive, TIC54X: TIC54X-Directives. (line 216) 20947* endunion directive, TIC54X: TIC54X-Directives. (line 250) 20948* environment settings, TIC54X: TIC54X-Env. (line 6) 20949* EOF, newline must precede: Statements. (line 13) 20950* ep register, V850: V850-Regs. (line 95) 20951* equ directive: Equ. (line 6) 20952* equ directive, TIC54X: TIC54X-Directives. (line 191) 20953* equiv directive: Equiv. (line 6) 20954* eqv directive: Eqv. (line 6) 20955* err directive: Err. (line 6) 20956* error directive: Error. (line 6) 20957* error messages: Errors. (line 6) 20958* error on valid input: Bug Criteria. (line 12) 20959* errors, caused by warnings: W. (line 16) 20960* errors, continuing after: Z. (line 6) 20961* ESA/390 floating point (IEEE): ESA/390 Floating Point. 20962 (line 6) 20963* ESA/390 support: ESA/390-Dependent. (line 6) 20964* ESA/390 Syntax: ESA/390 Options. (line 8) 20965* ESA/390-only directives: ESA/390 Directives. (line 12) 20966* escape codes, character: Strings. (line 15) 20967* eval directive, TIC54X: TIC54X-Directives. (line 24) 20968* even: Z8000 Directives. (line 58) 20969* even directive, M680x0: M68K-Directives. (line 15) 20970* even directive, TIC54X: TIC54X-Directives. (line 6) 20971* exitm directive: Macro. (line 141) 20972* expr (internal section): As Sections. (line 17) 20973* expression arguments: Arguments. (line 6) 20974* expressions: Expressions. (line 6) 20975* expressions, comparison: Infix Ops. (line 55) 20976* expressions, empty: Empty Exprs. (line 6) 20977* expressions, integer: Integer Exprs. (line 6) 20978* extAuxRegister directive, ARC: ARC Directives. (line 18) 20979* extCondCode directive, ARC: ARC Directives. (line 41) 20980* extCoreRegister directive, ARC: ARC Directives. (line 53) 20981* extend directive M680x0: M68K-Float. (line 17) 20982* extend directive M68HC11: M68HC11-Float. (line 17) 20983* extended directive, i960: Directives-i960. (line 13) 20984* extern directive: Extern. (line 6) 20985* extInstruction directive, ARC: ARC Directives. (line 78) 20986* fail directive: Fail. (line 6) 20987* far_mode directive, TIC54X: TIC54X-Directives. (line 82) 20988* faster processing (-f): f. (line 6) 20989* fatal signal: Bug Criteria. (line 9) 20990* fclist directive, TIC54X: TIC54X-Directives. (line 87) 20991* fcnolist directive, TIC54X: TIC54X-Directives. (line 87) 20992* fepc register, V850: V850-Regs. (line 107) 20993* fepsw register, V850: V850-Regs. (line 110) 20994* ffloat directive, VAX: VAX-directives. (line 14) 20995* field directive, TIC54X: TIC54X-Directives. (line 91) 20996* file directive: File. (line 6) 20997* file directive, MSP 430: MSP430 Directives. (line 6) 20998* file name, logical: File. (line 13) 20999* files, including: Include. (line 6) 21000* files, input: Input Files. (line 6) 21001* fill directive: Fill. (line 6) 21002* filling memory <1>: Skip. (line 6) 21003* filling memory: Space. (line 6) 21004* FLIX syntax: Xtensa Syntax. (line 6) 21005* float directive: Float. (line 6) 21006* float directive, i386: i386-Float. (line 14) 21007* float directive, M680x0: M68K-Float. (line 11) 21008* float directive, M68HC11: M68HC11-Float. (line 11) 21009* float directive, RX: RX-Float. (line 8) 21010* float directive, TIC54X: TIC54X-Directives. (line 64) 21011* float directive, VAX: VAX-float. (line 15) 21012* float directive, x86-64: i386-Float. (line 14) 21013* floating point numbers: Flonums. (line 6) 21014* floating point numbers (double): Double. (line 6) 21015* floating point numbers (single) <1>: Float. (line 6) 21016* floating point numbers (single): Single. (line 6) 21017* floating point, Alpha (IEEE): Alpha Floating Point. 21018 (line 6) 21019* floating point, ARC (IEEE): ARC Floating Point. (line 6) 21020* floating point, ARM (IEEE): ARM Floating Point. (line 6) 21021* floating point, D10V: D10V-Float. (line 6) 21022* floating point, D30V: D30V-Float. (line 6) 21023* floating point, ESA/390 (IEEE): ESA/390 Floating Point. 21024 (line 6) 21025* floating point, H8/300 (IEEE): H8/300 Floating Point. 21026 (line 6) 21027* floating point, HPPA (IEEE): HPPA Floating Point. (line 6) 21028* floating point, i386: i386-Float. (line 6) 21029* floating point, i960 (IEEE): Floating Point-i960. (line 6) 21030* floating point, M680x0: M68K-Float. (line 6) 21031* floating point, M68HC11: M68HC11-Float. (line 6) 21032* floating point, MSP 430 (IEEE): MSP430 Floating Point. 21033 (line 6) 21034* floating point, RX: RX-Float. (line 6) 21035* floating point, s390: s390 Floating Point. (line 6) 21036* floating point, SH (IEEE): SH Floating Point. (line 6) 21037* floating point, SPARC (IEEE): Sparc-Float. (line 6) 21038* floating point, V850 (IEEE): V850 Floating Point. (line 6) 21039* floating point, VAX: VAX-float. (line 6) 21040* floating point, x86-64: i386-Float. (line 6) 21041* floating point, Z80: Z80 Floating Point. (line 6) 21042* flonums: Flonums. (line 6) 21043* format of error messages: Errors. (line 24) 21044* format of warning messages: Errors. (line 12) 21045* formfeed (\f): Strings. (line 18) 21046* func directive: Func. (line 6) 21047* functions, in expressions: Operators. (line 6) 21048* gbr960, i960 postprocessor: Options-i960. (line 40) 21049* gfloat directive, VAX: VAX-directives. (line 18) 21050* global: Z8000 Directives. (line 21) 21051* global directive: Global. (line 6) 21052* global directive, TIC54X: TIC54X-Directives. (line 103) 21053* gp register, MIPS: MIPS Object. (line 11) 21054* gp register, V850: V850-Regs. (line 17) 21055* grouping data: Sub-Sections. (line 6) 21056* H8/300 addressing modes: H8/300-Addressing. (line 6) 21057* H8/300 floating point (IEEE): H8/300 Floating Point. 21058 (line 6) 21059* H8/300 line comment character: H8/300-Chars. (line 6) 21060* H8/300 line separator: H8/300-Chars. (line 8) 21061* H8/300 machine directives (none): H8/300 Directives. (line 6) 21062* H8/300 opcode summary: H8/300 Opcodes. (line 6) 21063* H8/300 options: H8/300 Options. (line 6) 21064* H8/300 registers: H8/300-Regs. (line 6) 21065* H8/300 size suffixes: H8/300 Opcodes. (line 163) 21066* H8/300 support: H8/300-Dependent. (line 6) 21067* H8/300H, assembling for: H8/300 Directives. (line 8) 21068* half directive, ARC: ARC Directives. (line 156) 21069* half directive, SPARC: Sparc-Directives. (line 17) 21070* half directive, TIC54X: TIC54X-Directives. (line 111) 21071* hex character code (\XD...): Strings. (line 36) 21072* hexadecimal integers: Integers. (line 15) 21073* hexadecimal prefix, Z80: Z80-Chars. (line 8) 21074* hfloat directive, VAX: VAX-directives. (line 22) 21075* hi pseudo-op, V850: V850 Opcodes. (line 33) 21076* hi0 pseudo-op, V850: V850 Opcodes. (line 10) 21077* hidden directive: Hidden. (line 6) 21078* high directive, M32R: M32R-Directives. (line 18) 21079* hilo pseudo-op, V850: V850 Opcodes. (line 55) 21080* HPPA directives not supported: HPPA Directives. (line 11) 21081* HPPA floating point (IEEE): HPPA Floating Point. (line 6) 21082* HPPA Syntax: HPPA Options. (line 8) 21083* HPPA-only directives: HPPA Directives. (line 24) 21084* hword directive: hword. (line 6) 21085* i370 support: ESA/390-Dependent. (line 6) 21086* i386 16-bit code: i386-16bit. (line 6) 21087* i386 arch directive: i386-Arch. (line 6) 21088* i386 att_syntax pseudo op: i386-Syntax. (line 6) 21089* i386 conversion instructions: i386-Mnemonics. (line 37) 21090* i386 floating point: i386-Float. (line 6) 21091* i386 immediate operands: i386-Syntax. (line 15) 21092* i386 instruction naming: i386-Mnemonics. (line 6) 21093* i386 instruction prefixes: i386-Prefixes. (line 6) 21094* i386 intel_syntax pseudo op: i386-Syntax. (line 6) 21095* i386 jump optimization: i386-Jumps. (line 6) 21096* i386 jump, call, return: i386-Syntax. (line 41) 21097* i386 jump/call operands: i386-Syntax. (line 15) 21098* i386 memory references: i386-Memory. (line 6) 21099* i386 mnemonic compatibility: i386-Mnemonics. (line 62) 21100* i386 mul, imul instructions: i386-Notes. (line 6) 21101* i386 options: i386-Options. (line 6) 21102* i386 register operands: i386-Syntax. (line 15) 21103* i386 registers: i386-Regs. (line 6) 21104* i386 sections: i386-Syntax. (line 47) 21105* i386 size suffixes: i386-Syntax. (line 29) 21106* i386 source, destination operands: i386-Syntax. (line 22) 21107* i386 support: i386-Dependent. (line 6) 21108* i386 syntax compatibility: i386-Syntax. (line 6) 21109* i80386 support: i386-Dependent. (line 6) 21110* i860 machine directives: Directives-i860. (line 6) 21111* i860 opcodes: Opcodes for i860. (line 6) 21112* i860 support: i860-Dependent. (line 6) 21113* i960 architecture options: Options-i960. (line 6) 21114* i960 branch recording: Options-i960. (line 22) 21115* i960 callj pseudo-opcode: callj-i960. (line 6) 21116* i960 compare and jump expansions: Compare-and-branch-i960. 21117 (line 13) 21118* i960 compare/branch instructions: Compare-and-branch-i960. 21119 (line 6) 21120* i960 floating point (IEEE): Floating Point-i960. (line 6) 21121* i960 machine directives: Directives-i960. (line 6) 21122* i960 opcodes: Opcodes for i960. (line 6) 21123* i960 options: Options-i960. (line 6) 21124* i960 support: i960-Dependent. (line 6) 21125* IA-64 line comment character: IA-64-Chars. (line 6) 21126* IA-64 line separator: IA-64-Chars. (line 8) 21127* IA-64 options: IA-64 Options. (line 6) 21128* IA-64 Processor-status-Register bit names: IA-64-Bits. (line 6) 21129* IA-64 registers: IA-64-Regs. (line 6) 21130* IA-64 relocations: IA-64-Relocs. (line 6) 21131* IA-64 support: IA-64-Dependent. (line 6) 21132* IA-64 Syntax: IA-64 Options. (line 87) 21133* ident directive: Ident. (line 6) 21134* identifiers, ARM: ARM-Chars. (line 15) 21135* identifiers, MSP 430: MSP430-Chars. (line 8) 21136* if directive: If. (line 6) 21137* ifb directive: If. (line 21) 21138* ifc directive: If. (line 25) 21139* ifdef directive: If. (line 16) 21140* ifeq directive: If. (line 33) 21141* ifeqs directive: If. (line 36) 21142* ifge directive: If. (line 40) 21143* ifgt directive: If. (line 44) 21144* ifle directive: If. (line 48) 21145* iflt directive: If. (line 52) 21146* ifnb directive: If. (line 56) 21147* ifnc directive: If. (line 61) 21148* ifndef directive: If. (line 65) 21149* ifne directive: If. (line 72) 21150* ifnes directive: If. (line 76) 21151* ifnotdef directive: If. (line 65) 21152* immediate character, ARM: ARM-Chars. (line 13) 21153* immediate character, M680x0: M68K-Chars. (line 6) 21154* immediate character, VAX: VAX-operands. (line 6) 21155* immediate fields, relaxation: Xtensa Immediate Relaxation. 21156 (line 6) 21157* immediate operands, i386: i386-Syntax. (line 15) 21158* immediate operands, x86-64: i386-Syntax. (line 15) 21159* imul instruction, i386: i386-Notes. (line 6) 21160* imul instruction, x86-64: i386-Notes. (line 6) 21161* incbin directive: Incbin. (line 6) 21162* include directive: Include. (line 6) 21163* include directive search path: I. (line 6) 21164* indirect character, VAX: VAX-operands. (line 9) 21165* infix operators: Infix Ops. (line 6) 21166* inhibiting interrupts, i386: i386-Prefixes. (line 36) 21167* input: Input Files. (line 6) 21168* input file linenumbers: Input Files. (line 35) 21169* instruction aliases, s390: s390 Aliases. (line 6) 21170* instruction expansion, CRIS: CRIS-Expand. (line 6) 21171* instruction expansion, MMIX: MMIX-Expand. (line 6) 21172* instruction formats, s390: s390 Formats. (line 6) 21173* instruction marker, s390: s390 Instruction Marker. 21174 (line 6) 21175* instruction mnemonics, s390: s390 Mnemonics. (line 6) 21176* instruction naming, i386: i386-Mnemonics. (line 6) 21177* instruction naming, x86-64: i386-Mnemonics. (line 6) 21178* instruction operand modifier, s390: s390 Operand Modifier. 21179 (line 6) 21180* instruction operands, s390: s390 Operands. (line 6) 21181* instruction prefixes, i386: i386-Prefixes. (line 6) 21182* instruction set, M680x0: M68K-opcodes. (line 6) 21183* instruction set, M68HC11: M68HC11-opcodes. (line 6) 21184* instruction summary, AVR: AVR Opcodes. (line 6) 21185* instruction summary, D10V: D10V-Opcodes. (line 6) 21186* instruction summary, D30V: D30V-Opcodes. (line 6) 21187* instruction summary, H8/300: H8/300 Opcodes. (line 6) 21188* instruction summary, LM32: LM32 Opcodes. (line 6) 21189* instruction summary, SH: SH Opcodes. (line 6) 21190* instruction summary, SH64: SH64 Opcodes. (line 6) 21191* instruction summary, Z8000: Z8000 Opcodes. (line 6) 21192* instruction syntax, s390: s390 Syntax. (line 6) 21193* instructions and directives: Statements. (line 19) 21194* int directive: Int. (line 6) 21195* int directive, H8/300: H8/300 Directives. (line 6) 21196* int directive, i386: i386-Float. (line 21) 21197* int directive, TIC54X: TIC54X-Directives. (line 111) 21198* int directive, x86-64: i386-Float. (line 21) 21199* integer expressions: Integer Exprs. (line 6) 21200* integer, 16-byte: Octa. (line 6) 21201* integer, 8-byte: Quad. (line 9) 21202* integers: Integers. (line 6) 21203* integers, 16-bit: hword. (line 6) 21204* integers, 32-bit: Int. (line 6) 21205* integers, binary: Integers. (line 6) 21206* integers, decimal: Integers. (line 12) 21207* integers, hexadecimal: Integers. (line 15) 21208* integers, octal: Integers. (line 9) 21209* integers, one byte: Byte. (line 6) 21210* intel_syntax pseudo op, i386: i386-Syntax. (line 6) 21211* intel_syntax pseudo op, x86-64: i386-Syntax. (line 6) 21212* internal assembler sections: As Sections. (line 6) 21213* internal directive: Internal. (line 6) 21214* invalid input: Bug Criteria. (line 14) 21215* invocation summary: Overview. (line 6) 21216* IP2K architecture options: IP2K-Opts. (line 14) 21217* IP2K options: IP2K-Opts. (line 6) 21218* IP2K support: IP2K-Dependent. (line 6) 21219* irp directive: Irp. (line 6) 21220* irpc directive: Irpc. (line 6) 21221* ISA options, SH64: SH64 Options. (line 6) 21222* joining text and data sections: R. (line 6) 21223* jump instructions, i386: i386-Mnemonics. (line 56) 21224* jump instructions, x86-64: i386-Mnemonics. (line 56) 21225* jump optimization, i386: i386-Jumps. (line 6) 21226* jump optimization, x86-64: i386-Jumps. (line 6) 21227* jump/call operands, i386: i386-Syntax. (line 15) 21228* jump/call operands, x86-64: i386-Syntax. (line 15) 21229* L16SI instructions, relaxation: Xtensa Immediate Relaxation. 21230 (line 23) 21231* L16UI instructions, relaxation: Xtensa Immediate Relaxation. 21232 (line 23) 21233* L32I instructions, relaxation: Xtensa Immediate Relaxation. 21234 (line 23) 21235* L8UI instructions, relaxation: Xtensa Immediate Relaxation. 21236 (line 23) 21237* label (:): Statements. (line 30) 21238* label directive, TIC54X: TIC54X-Directives. (line 123) 21239* labels: Labels. (line 6) 21240* lcomm directive: Lcomm. (line 6) 21241* lcomm directive, COFF: i386-Directives. (line 6) 21242* ld: Object. (line 15) 21243* ldouble directive M680x0: M68K-Float. (line 17) 21244* ldouble directive M68HC11: M68HC11-Float. (line 17) 21245* ldouble directive, TIC54X: TIC54X-Directives. (line 64) 21246* LDR reg,=<label> pseudo op, ARM: ARM Opcodes. (line 15) 21247* leafproc directive, i960: Directives-i960. (line 18) 21248* length directive, TIC54X: TIC54X-Directives. (line 127) 21249* length of symbols: Symbol Intro. (line 14) 21250* lflags directive (ignored): Lflags. (line 6) 21251* line comment character: Comments. (line 19) 21252* line comment character, Alpha: Alpha-Chars. (line 6) 21253* line comment character, ARM: ARM-Chars. (line 6) 21254* line comment character, AVR: AVR-Chars. (line 6) 21255* line comment character, D10V: D10V-Chars. (line 6) 21256* line comment character, D30V: D30V-Chars. (line 6) 21257* line comment character, H8/300: H8/300-Chars. (line 6) 21258* line comment character, IA-64: IA-64-Chars. (line 6) 21259* line comment character, M680x0: M68K-Chars. (line 6) 21260* line comment character, MSP 430: MSP430-Chars. (line 6) 21261* line comment character, s390: s390 Characters. (line 6) 21262* line comment character, SH: SH-Chars. (line 6) 21263* line comment character, SH64: SH64-Chars. (line 6) 21264* line comment character, Sparc: Sparc-Chars. (line 6) 21265* line comment character, TIC6X: TIC6X Syntax. (line 6) 21266* line comment character, V850: V850-Chars. (line 6) 21267* line comment character, Z80: Z80-Chars. (line 6) 21268* line comment character, Z8000: Z8000-Chars. (line 6) 21269* line comment characters, CRIS: CRIS-Chars. (line 6) 21270* line comment characters, MMIX: MMIX-Chars. (line 6) 21271* line directive: Line. (line 6) 21272* line directive, MSP 430: MSP430 Directives. (line 14) 21273* line numbers, in input files: Input Files. (line 35) 21274* line numbers, in warnings/errors: Errors. (line 16) 21275* line separator character: Statements. (line 6) 21276* line separator, Alpha: Alpha-Chars. (line 8) 21277* line separator, ARM: ARM-Chars. (line 10) 21278* line separator, AVR: AVR-Chars. (line 10) 21279* line separator, H8/300: H8/300-Chars. (line 8) 21280* line separator, IA-64: IA-64-Chars. (line 8) 21281* line separator, SH: SH-Chars. (line 8) 21282* line separator, SH64: SH64-Chars. (line 8) 21283* line separator, Sparc: Sparc-Chars. (line 8) 21284* line separator, TIC6X: TIC6X Syntax. (line 10) 21285* line separator, Z8000: Z8000-Chars. (line 8) 21286* lines starting with #: Comments. (line 39) 21287* linker: Object. (line 15) 21288* linker, and assembler: Secs Background. (line 10) 21289* linkonce directive: Linkonce. (line 6) 21290* list directive: List. (line 6) 21291* list directive, TIC54X: TIC54X-Directives. (line 131) 21292* listing control, turning off: Nolist. (line 6) 21293* listing control, turning on: List. (line 6) 21294* listing control: new page: Eject. (line 6) 21295* listing control: paper size: Psize. (line 6) 21296* listing control: subtitle: Sbttl. (line 6) 21297* listing control: title line: Title. (line 6) 21298* listings, enabling: a. (line 6) 21299* literal directive: Literal Directive. (line 6) 21300* literal pool entries, s390: s390 Literal Pool Entries. 21301 (line 6) 21302* literal_position directive: Literal Position Directive. 21303 (line 6) 21304* literal_prefix directive: Literal Prefix Directive. 21305 (line 6) 21306* little endian output, MIPS: Overview. (line 696) 21307* little endian output, PJ: Overview. (line 603) 21308* little-endian output, MIPS: MIPS Opts. (line 13) 21309* little-endian output, TIC6X: TIC6X Options. (line 58) 21310* LM32 modifiers: LM32-Modifiers. (line 6) 21311* LM32 opcode summary: LM32 Opcodes. (line 6) 21312* LM32 options (none): LM32 Options. (line 6) 21313* LM32 register names: LM32-Regs. (line 6) 21314* LM32 support: LM32-Dependent. (line 6) 21315* ln directive: Ln. (line 6) 21316* lo pseudo-op, V850: V850 Opcodes. (line 22) 21317* loc directive: Loc. (line 6) 21318* loc_mark_labels directive: Loc_mark_labels. (line 6) 21319* local common symbols: Lcomm. (line 6) 21320* local directive: Local. (line 6) 21321* local labels: Symbol Names. (line 35) 21322* local symbol names: Symbol Names. (line 22) 21323* local symbols, retaining in output: L. (line 6) 21324* location counter: Dot. (line 6) 21325* location counter, advancing: Org. (line 6) 21326* location counter, Z80: Z80-Chars. (line 8) 21327* logical file name: File. (line 13) 21328* logical line number: Line. (line 6) 21329* logical line numbers: Comments. (line 39) 21330* long directive: Long. (line 6) 21331* long directive, ARC: ARC Directives. (line 159) 21332* long directive, i386: i386-Float. (line 21) 21333* long directive, TIC54X: TIC54X-Directives. (line 135) 21334* long directive, x86-64: i386-Float. (line 21) 21335* longcall pseudo-op, V850: V850 Opcodes. (line 123) 21336* longcalls directive: Longcalls Directive. (line 6) 21337* longjump pseudo-op, V850: V850 Opcodes. (line 129) 21338* loop directive, TIC54X: TIC54X-Directives. (line 143) 21339* LOOP instructions, alignment: Xtensa Automatic Alignment. 21340 (line 6) 21341* low directive, M32R: M32R-Directives. (line 9) 21342* lp register, V850: V850-Regs. (line 98) 21343* lval: Z8000 Directives. (line 27) 21344* LWP, i386: i386-LWP. (line 6) 21345* LWP, x86-64: i386-LWP. (line 6) 21346* M16C architecture option: M32C-Opts. (line 12) 21347* M32C architecture option: M32C-Opts. (line 9) 21348* M32C modifiers: M32C-Modifiers. (line 6) 21349* M32C options: M32C-Opts. (line 6) 21350* M32C support: M32C-Dependent. (line 6) 21351* M32R architecture options: M32R-Opts. (line 17) 21352* M32R directives: M32R-Directives. (line 6) 21353* M32R options: M32R-Opts. (line 6) 21354* M32R support: M32R-Dependent. (line 6) 21355* M32R warnings: M32R-Warnings. (line 6) 21356* M680x0 addressing modes: M68K-Syntax. (line 21) 21357* M680x0 architecture options: M68K-Opts. (line 98) 21358* M680x0 branch improvement: M68K-Branch. (line 6) 21359* M680x0 directives: M68K-Directives. (line 6) 21360* M680x0 floating point: M68K-Float. (line 6) 21361* M680x0 immediate character: M68K-Chars. (line 6) 21362* M680x0 line comment character: M68K-Chars. (line 6) 21363* M680x0 opcodes: M68K-opcodes. (line 6) 21364* M680x0 options: M68K-Opts. (line 6) 21365* M680x0 pseudo-opcodes: M68K-Branch. (line 6) 21366* M680x0 size modifiers: M68K-Syntax. (line 8) 21367* M680x0 support: M68K-Dependent. (line 6) 21368* M680x0 syntax: M68K-Syntax. (line 8) 21369* M68HC11 addressing modes: M68HC11-Syntax. (line 17) 21370* M68HC11 and M68HC12 support: M68HC11-Dependent. (line 6) 21371* M68HC11 assembler directive .far: M68HC11-Directives. (line 20) 21372* M68HC11 assembler directive .interrupt: M68HC11-Directives. (line 26) 21373* M68HC11 assembler directive .mode: M68HC11-Directives. (line 16) 21374* M68HC11 assembler directive .relax: M68HC11-Directives. (line 10) 21375* M68HC11 assembler directive .xrefb: M68HC11-Directives. (line 31) 21376* M68HC11 assembler directives: M68HC11-Directives. (line 6) 21377* M68HC11 branch improvement: M68HC11-Branch. (line 6) 21378* M68HC11 floating point: M68HC11-Float. (line 6) 21379* M68HC11 modifiers: M68HC11-Modifiers. (line 6) 21380* M68HC11 opcodes: M68HC11-opcodes. (line 6) 21381* M68HC11 options: M68HC11-Opts. (line 6) 21382* M68HC11 pseudo-opcodes: M68HC11-Branch. (line 6) 21383* M68HC11 syntax: M68HC11-Syntax. (line 6) 21384* M68HC12 assembler directives: M68HC11-Directives. (line 6) 21385* machine dependencies: Machine Dependencies. 21386 (line 6) 21387* machine directives, ARC: ARC Directives. (line 6) 21388* machine directives, ARM: ARM Directives. (line 6) 21389* machine directives, H8/300 (none): H8/300 Directives. (line 6) 21390* machine directives, i860: Directives-i860. (line 6) 21391* machine directives, i960: Directives-i960. (line 6) 21392* machine directives, MSP 430: MSP430 Directives. (line 6) 21393* machine directives, SH: SH Directives. (line 6) 21394* machine directives, SH64: SH64 Directives. (line 9) 21395* machine directives, SPARC: Sparc-Directives. (line 6) 21396* machine directives, TIC54X: TIC54X-Directives. (line 6) 21397* machine directives, TIC6X: TIC6X Directives. (line 6) 21398* machine directives, V850: V850 Directives. (line 6) 21399* machine directives, VAX: VAX-directives. (line 6) 21400* machine directives, x86: i386-Directives. (line 6) 21401* machine independent directives: Pseudo Ops. (line 6) 21402* machine instructions (not covered): Manual. (line 14) 21403* machine-independent syntax: Syntax. (line 6) 21404* macro directive: Macro. (line 28) 21405* macro directive, TIC54X: TIC54X-Directives. (line 153) 21406* macros: Macro. (line 6) 21407* macros, count executed: Macro. (line 143) 21408* Macros, MSP 430: MSP430-Macros. (line 6) 21409* macros, TIC54X: TIC54X-Macros. (line 6) 21410* make rules: MD. (line 6) 21411* manual, structure and purpose: Manual. (line 6) 21412* math builtins, TIC54X: TIC54X-Builtins. (line 6) 21413* Maximum number of continuation lines: listing. (line 34) 21414* memory references, i386: i386-Memory. (line 6) 21415* memory references, x86-64: i386-Memory. (line 6) 21416* memory-mapped registers, TIC54X: TIC54X-MMRegs. (line 6) 21417* merging text and data sections: R. (line 6) 21418* messages from assembler: Errors. (line 6) 21419* MicroBlaze architectures: MicroBlaze-Dependent. 21420 (line 6) 21421* MicroBlaze directives: MicroBlaze Directives. 21422 (line 6) 21423* MicroBlaze support: MicroBlaze-Dependent. 21424 (line 13) 21425* minus, permitted arguments: Infix Ops. (line 49) 21426* MIPS architecture options: MIPS Opts. (line 29) 21427* MIPS big-endian output: MIPS Opts. (line 13) 21428* MIPS CPU override: MIPS ISA. (line 18) 21429* MIPS debugging directives: MIPS Stabs. (line 6) 21430* MIPS DSP Release 1 instruction generation override: MIPS ASE instruction generation overrides. 21431 (line 21) 21432* MIPS DSP Release 2 instruction generation override: MIPS ASE instruction generation overrides. 21433 (line 26) 21434* MIPS ECOFF sections: MIPS Object. (line 6) 21435* MIPS endianness: Overview. (line 693) 21436* MIPS ISA: Overview. (line 699) 21437* MIPS ISA override: MIPS ISA. (line 6) 21438* MIPS little-endian output: MIPS Opts. (line 13) 21439* MIPS MDMX instruction generation override: MIPS ASE instruction generation overrides. 21440 (line 16) 21441* MIPS MIPS-3D instruction generation override: MIPS ASE instruction generation overrides. 21442 (line 6) 21443* MIPS MT instruction generation override: MIPS ASE instruction generation overrides. 21444 (line 32) 21445* MIPS option stack: MIPS option stack. (line 6) 21446* MIPS processor: MIPS-Dependent. (line 6) 21447* MIT: M68K-Syntax. (line 6) 21448* mlib directive, TIC54X: TIC54X-Directives. (line 159) 21449* mlist directive, TIC54X: TIC54X-Directives. (line 164) 21450* MMIX assembler directive BSPEC: MMIX-Pseudos. (line 131) 21451* MMIX assembler directive BYTE: MMIX-Pseudos. (line 97) 21452* MMIX assembler directive ESPEC: MMIX-Pseudos. (line 131) 21453* MMIX assembler directive GREG: MMIX-Pseudos. (line 50) 21454* MMIX assembler directive IS: MMIX-Pseudos. (line 42) 21455* MMIX assembler directive LOC: MMIX-Pseudos. (line 7) 21456* MMIX assembler directive LOCAL: MMIX-Pseudos. (line 28) 21457* MMIX assembler directive OCTA: MMIX-Pseudos. (line 108) 21458* MMIX assembler directive PREFIX: MMIX-Pseudos. (line 120) 21459* MMIX assembler directive TETRA: MMIX-Pseudos. (line 108) 21460* MMIX assembler directive WYDE: MMIX-Pseudos. (line 108) 21461* MMIX assembler directives: MMIX-Pseudos. (line 6) 21462* MMIX line comment characters: MMIX-Chars. (line 6) 21463* MMIX options: MMIX-Opts. (line 6) 21464* MMIX pseudo-op BSPEC: MMIX-Pseudos. (line 131) 21465* MMIX pseudo-op BYTE: MMIX-Pseudos. (line 97) 21466* MMIX pseudo-op ESPEC: MMIX-Pseudos. (line 131) 21467* MMIX pseudo-op GREG: MMIX-Pseudos. (line 50) 21468* MMIX pseudo-op IS: MMIX-Pseudos. (line 42) 21469* MMIX pseudo-op LOC: MMIX-Pseudos. (line 7) 21470* MMIX pseudo-op LOCAL: MMIX-Pseudos. (line 28) 21471* MMIX pseudo-op OCTA: MMIX-Pseudos. (line 108) 21472* MMIX pseudo-op PREFIX: MMIX-Pseudos. (line 120) 21473* MMIX pseudo-op TETRA: MMIX-Pseudos. (line 108) 21474* MMIX pseudo-op WYDE: MMIX-Pseudos. (line 108) 21475* MMIX pseudo-ops: MMIX-Pseudos. (line 6) 21476* MMIX register names: MMIX-Regs. (line 6) 21477* MMIX support: MMIX-Dependent. (line 6) 21478* mmixal differences: MMIX-mmixal. (line 6) 21479* mmregs directive, TIC54X: TIC54X-Directives. (line 169) 21480* mmsg directive, TIC54X: TIC54X-Directives. (line 77) 21481* MMX, i386: i386-SIMD. (line 6) 21482* MMX, x86-64: i386-SIMD. (line 6) 21483* mnemonic compatibility, i386: i386-Mnemonics. (line 62) 21484* mnemonic suffixes, i386: i386-Syntax. (line 29) 21485* mnemonic suffixes, x86-64: i386-Syntax. (line 29) 21486* mnemonics for opcodes, VAX: VAX-opcodes. (line 6) 21487* mnemonics, AVR: AVR Opcodes. (line 6) 21488* mnemonics, D10V: D10V-Opcodes. (line 6) 21489* mnemonics, D30V: D30V-Opcodes. (line 6) 21490* mnemonics, H8/300: H8/300 Opcodes. (line 6) 21491* mnemonics, LM32: LM32 Opcodes. (line 6) 21492* mnemonics, SH: SH Opcodes. (line 6) 21493* mnemonics, SH64: SH64 Opcodes. (line 6) 21494* mnemonics, Z8000: Z8000 Opcodes. (line 6) 21495* mnolist directive, TIC54X: TIC54X-Directives. (line 164) 21496* Motorola syntax for the 680x0: M68K-Moto-Syntax. (line 6) 21497* MOVI instructions, relaxation: Xtensa Immediate Relaxation. 21498 (line 12) 21499* MOVW and MOVT relocations, ARM: ARM-Relocations. (line 20) 21500* MRI compatibility mode: M. (line 6) 21501* mri directive: MRI. (line 6) 21502* MRI mode, temporarily: MRI. (line 6) 21503* MSP 430 floating point (IEEE): MSP430 Floating Point. 21504 (line 6) 21505* MSP 430 identifiers: MSP430-Chars. (line 8) 21506* MSP 430 line comment character: MSP430-Chars. (line 6) 21507* MSP 430 machine directives: MSP430 Directives. (line 6) 21508* MSP 430 macros: MSP430-Macros. (line 6) 21509* MSP 430 opcodes: MSP430 Opcodes. (line 6) 21510* MSP 430 options (none): MSP430 Options. (line 6) 21511* MSP 430 profiling capability: MSP430 Profiling Capability. 21512 (line 6) 21513* MSP 430 register names: MSP430-Regs. (line 6) 21514* MSP 430 support: MSP430-Dependent. (line 6) 21515* MSP430 Assembler Extensions: MSP430-Ext. (line 6) 21516* mul instruction, i386: i386-Notes. (line 6) 21517* mul instruction, x86-64: i386-Notes. (line 6) 21518* name: Z8000 Directives. (line 18) 21519* named section: Section. (line 6) 21520* named sections: Ld Sections. (line 8) 21521* names, symbol: Symbol Names. (line 6) 21522* naming object file: o. (line 6) 21523* new page, in listings: Eject. (line 6) 21524* newblock directive, TIC54X: TIC54X-Directives. (line 175) 21525* newline (\n): Strings. (line 21) 21526* newline, required at file end: Statements. (line 13) 21527* no-absolute-literals directive: Absolute Literals Directive. 21528 (line 6) 21529* no-longcalls directive: Longcalls Directive. (line 6) 21530* no-schedule directive: Schedule Directive. (line 6) 21531* no-transform directive: Transform Directive. (line 6) 21532* nolist directive: Nolist. (line 6) 21533* nolist directive, TIC54X: TIC54X-Directives. (line 131) 21534* NOP pseudo op, ARM: ARM Opcodes. (line 9) 21535* notes for Alpha: Alpha Notes. (line 6) 21536* null-terminated strings: Asciz. (line 6) 21537* number constants: Numbers. (line 6) 21538* number of macros executed: Macro. (line 143) 21539* numbered subsections: Sub-Sections. (line 6) 21540* numbers, 16-bit: hword. (line 6) 21541* numeric values: Expressions. (line 6) 21542* nword directive, SPARC: Sparc-Directives. (line 20) 21543* object attributes: Object Attributes. (line 6) 21544* object file: Object. (line 6) 21545* object file format: Object Formats. (line 6) 21546* object file name: o. (line 6) 21547* object file, after errors: Z. (line 6) 21548* obsolescent directives: Deprecated. (line 6) 21549* octa directive: Octa. (line 6) 21550* octal character code (\DDD): Strings. (line 30) 21551* octal integers: Integers. (line 9) 21552* offset directive, V850: V850 Directives. (line 6) 21553* opcode mnemonics, VAX: VAX-opcodes. (line 6) 21554* opcode names, Xtensa: Xtensa Opcodes. (line 6) 21555* opcode summary, AVR: AVR Opcodes. (line 6) 21556* opcode summary, D10V: D10V-Opcodes. (line 6) 21557* opcode summary, D30V: D30V-Opcodes. (line 6) 21558* opcode summary, H8/300: H8/300 Opcodes. (line 6) 21559* opcode summary, LM32: LM32 Opcodes. (line 6) 21560* opcode summary, SH: SH Opcodes. (line 6) 21561* opcode summary, SH64: SH64 Opcodes. (line 6) 21562* opcode summary, Z8000: Z8000 Opcodes. (line 6) 21563* opcodes for ARC: ARC Opcodes. (line 6) 21564* opcodes for ARM: ARM Opcodes. (line 6) 21565* opcodes for MSP 430: MSP430 Opcodes. (line 6) 21566* opcodes for V850: V850 Opcodes. (line 6) 21567* opcodes, i860: Opcodes for i860. (line 6) 21568* opcodes, i960: Opcodes for i960. (line 6) 21569* opcodes, M680x0: M68K-opcodes. (line 6) 21570* opcodes, M68HC11: M68HC11-opcodes. (line 6) 21571* operand delimiters, i386: i386-Syntax. (line 15) 21572* operand delimiters, x86-64: i386-Syntax. (line 15) 21573* operand notation, VAX: VAX-operands. (line 6) 21574* operands in expressions: Arguments. (line 6) 21575* operator precedence: Infix Ops. (line 11) 21576* operators, in expressions: Operators. (line 6) 21577* operators, permitted arguments: Infix Ops. (line 6) 21578* optimization, D10V: Overview. (line 472) 21579* optimization, D30V: Overview. (line 477) 21580* optimizations: Xtensa Optimizations. 21581 (line 6) 21582* option directive, ARC: ARC Directives. (line 162) 21583* option directive, TIC54X: TIC54X-Directives. (line 179) 21584* option summary: Overview. (line 6) 21585* options for Alpha: Alpha Options. (line 6) 21586* options for ARC (none): ARC Options. (line 6) 21587* options for ARM (none): ARM Options. (line 6) 21588* options for AVR (none): AVR Options. (line 6) 21589* options for Blackfin (none): Blackfin Options. (line 6) 21590* options for i386: i386-Options. (line 6) 21591* options for IA-64: IA-64 Options. (line 6) 21592* options for LM32 (none): LM32 Options. (line 6) 21593* options for MSP430 (none): MSP430 Options. (line 6) 21594* options for PDP-11: PDP-11-Options. (line 6) 21595* options for PowerPC: PowerPC-Opts. (line 6) 21596* options for s390: s390 Options. (line 6) 21597* options for SCORE: SCORE-Opts. (line 6) 21598* options for SPARC: Sparc-Opts. (line 6) 21599* options for TIC6X: TIC6X Options. (line 6) 21600* options for V850 (none): V850 Options. (line 6) 21601* options for VAX/VMS: VAX-Opts. (line 42) 21602* options for x86-64: i386-Options. (line 6) 21603* options for Z80: Z80 Options. (line 6) 21604* options, all versions of assembler: Invoking. (line 6) 21605* options, command line: Command Line. (line 13) 21606* options, CRIS: CRIS-Opts. (line 6) 21607* options, D10V: D10V-Opts. (line 6) 21608* options, D30V: D30V-Opts. (line 6) 21609* options, H8/300: H8/300 Options. (line 6) 21610* options, i960: Options-i960. (line 6) 21611* options, IP2K: IP2K-Opts. (line 6) 21612* options, M32C: M32C-Opts. (line 6) 21613* options, M32R: M32R-Opts. (line 6) 21614* options, M680x0: M68K-Opts. (line 6) 21615* options, M68HC11: M68HC11-Opts. (line 6) 21616* options, MMIX: MMIX-Opts. (line 6) 21617* options, PJ: PJ Options. (line 6) 21618* options, RX: RX-Opts. (line 6) 21619* options, SH: SH Options. (line 6) 21620* options, SH64: SH64 Options. (line 6) 21621* options, TIC54X: TIC54X-Opts. (line 6) 21622* options, Z8000: Z8000 Options. (line 6) 21623* org directive: Org. (line 6) 21624* other attribute, of a.out symbol: Symbol Other. (line 6) 21625* output file: Object. (line 6) 21626* p2align directive: P2align. (line 6) 21627* p2alignl directive: P2align. (line 28) 21628* p2alignw directive: P2align. (line 28) 21629* padding the location counter: Align. (line 6) 21630* padding the location counter given a power of two: P2align. (line 6) 21631* padding the location counter given number of bytes: Balign. (line 6) 21632* page, in listings: Eject. (line 6) 21633* paper size, for listings: Psize. (line 6) 21634* paths for .include: I. (line 6) 21635* patterns, writing in memory: Fill. (line 6) 21636* PDP-11 comments: PDP-11-Syntax. (line 16) 21637* PDP-11 floating-point register syntax: PDP-11-Syntax. (line 13) 21638* PDP-11 general-purpose register syntax: PDP-11-Syntax. (line 10) 21639* PDP-11 instruction naming: PDP-11-Mnemonics. (line 6) 21640* PDP-11 support: PDP-11-Dependent. (line 6) 21641* PDP-11 syntax: PDP-11-Syntax. (line 6) 21642* PIC code generation for ARM: ARM Options. (line 161) 21643* PIC code generation for M32R: M32R-Opts. (line 42) 21644* PIC selection, MIPS: MIPS Opts. (line 21) 21645* PJ endianness: Overview. (line 600) 21646* PJ options: PJ Options. (line 6) 21647* PJ support: PJ-Dependent. (line 6) 21648* plus, permitted arguments: Infix Ops. (line 44) 21649* popsection directive: PopSection. (line 6) 21650* Position-independent code, CRIS: CRIS-Opts. (line 27) 21651* Position-independent code, symbols in, CRIS: CRIS-Pic. (line 6) 21652* PowerPC architectures: PowerPC-Opts. (line 6) 21653* PowerPC directives: PowerPC-Pseudo. (line 6) 21654* PowerPC options: PowerPC-Opts. (line 6) 21655* PowerPC support: PPC-Dependent. (line 6) 21656* precedence of operators: Infix Ops. (line 11) 21657* precision, floating point: Flonums. (line 6) 21658* prefix operators: Prefix Ops. (line 6) 21659* prefixes, i386: i386-Prefixes. (line 6) 21660* preprocessing: Preprocessing. (line 6) 21661* preprocessing, turning on and off: Preprocessing. (line 27) 21662* previous directive: Previous. (line 6) 21663* primary attributes, COFF symbols: COFF Symbols. (line 13) 21664* print directive: Print. (line 6) 21665* proc directive, SPARC: Sparc-Directives. (line 25) 21666* profiler directive, MSP 430: MSP430 Directives. (line 22) 21667* profiling capability for MSP 430: MSP430 Profiling Capability. 21668 (line 6) 21669* protected directive: Protected. (line 6) 21670* pseudo-op .arch, CRIS: CRIS-Pseudos. (line 45) 21671* pseudo-op .dword, CRIS: CRIS-Pseudos. (line 12) 21672* pseudo-op .syntax, CRIS: CRIS-Pseudos. (line 17) 21673* pseudo-op BSPEC, MMIX: MMIX-Pseudos. (line 131) 21674* pseudo-op BYTE, MMIX: MMIX-Pseudos. (line 97) 21675* pseudo-op ESPEC, MMIX: MMIX-Pseudos. (line 131) 21676* pseudo-op GREG, MMIX: MMIX-Pseudos. (line 50) 21677* pseudo-op IS, MMIX: MMIX-Pseudos. (line 42) 21678* pseudo-op LOC, MMIX: MMIX-Pseudos. (line 7) 21679* pseudo-op LOCAL, MMIX: MMIX-Pseudos. (line 28) 21680* pseudo-op OCTA, MMIX: MMIX-Pseudos. (line 108) 21681* pseudo-op PREFIX, MMIX: MMIX-Pseudos. (line 120) 21682* pseudo-op TETRA, MMIX: MMIX-Pseudos. (line 108) 21683* pseudo-op WYDE, MMIX: MMIX-Pseudos. (line 108) 21684* pseudo-opcodes, M680x0: M68K-Branch. (line 6) 21685* pseudo-opcodes, M68HC11: M68HC11-Branch. (line 6) 21686* pseudo-ops for branch, VAX: VAX-branch. (line 6) 21687* pseudo-ops, CRIS: CRIS-Pseudos. (line 6) 21688* pseudo-ops, machine independent: Pseudo Ops. (line 6) 21689* pseudo-ops, MMIX: MMIX-Pseudos. (line 6) 21690* psize directive: Psize. (line 6) 21691* PSR bits: IA-64-Bits. (line 6) 21692* pstring directive, TIC54X: TIC54X-Directives. (line 208) 21693* psw register, V850: V850-Regs. (line 116) 21694* purgem directive: Purgem. (line 6) 21695* purpose of GNU assembler: GNU Assembler. (line 12) 21696* pushsection directive: PushSection. (line 6) 21697* quad directive: Quad. (line 6) 21698* quad directive, i386: i386-Float. (line 21) 21699* quad directive, x86-64: i386-Float. (line 21) 21700* real-mode code, i386: i386-16bit. (line 6) 21701* ref directive, TIC54X: TIC54X-Directives. (line 103) 21702* register directive, SPARC: Sparc-Directives. (line 29) 21703* register names, Alpha: Alpha-Regs. (line 6) 21704* register names, ARC: ARC-Regs. (line 6) 21705* register names, ARM: ARM-Regs. (line 6) 21706* register names, AVR: AVR-Regs. (line 6) 21707* register names, CRIS: CRIS-Regs. (line 6) 21708* register names, H8/300: H8/300-Regs. (line 6) 21709* register names, IA-64: IA-64-Regs. (line 6) 21710* register names, LM32: LM32-Regs. (line 6) 21711* register names, MMIX: MMIX-Regs. (line 6) 21712* register names, MSP 430: MSP430-Regs. (line 6) 21713* register names, Sparc: Sparc-Regs. (line 6) 21714* register names, V850: V850-Regs. (line 6) 21715* register names, VAX: VAX-operands. (line 17) 21716* register names, Xtensa: Xtensa Registers. (line 6) 21717* register names, Z80: Z80-Regs. (line 6) 21718* register naming, s390: s390 Register. (line 6) 21719* register operands, i386: i386-Syntax. (line 15) 21720* register operands, x86-64: i386-Syntax. (line 15) 21721* registers, D10V: D10V-Regs. (line 6) 21722* registers, D30V: D30V-Regs. (line 6) 21723* registers, i386: i386-Regs. (line 6) 21724* registers, SH: SH-Regs. (line 6) 21725* registers, SH64: SH64-Regs. (line 6) 21726* registers, TIC54X memory-mapped: TIC54X-MMRegs. (line 6) 21727* registers, x86-64: i386-Regs. (line 6) 21728* registers, Z8000: Z8000-Regs. (line 6) 21729* relaxation: Xtensa Relaxation. (line 6) 21730* relaxation of ADDI instructions: Xtensa Immediate Relaxation. 21731 (line 43) 21732* relaxation of branch instructions: Xtensa Branch Relaxation. 21733 (line 6) 21734* relaxation of call instructions: Xtensa Call Relaxation. 21735 (line 6) 21736* relaxation of immediate fields: Xtensa Immediate Relaxation. 21737 (line 6) 21738* relaxation of L16SI instructions: Xtensa Immediate Relaxation. 21739 (line 23) 21740* relaxation of L16UI instructions: Xtensa Immediate Relaxation. 21741 (line 23) 21742* relaxation of L32I instructions: Xtensa Immediate Relaxation. 21743 (line 23) 21744* relaxation of L8UI instructions: Xtensa Immediate Relaxation. 21745 (line 23) 21746* relaxation of MOVI instructions: Xtensa Immediate Relaxation. 21747 (line 12) 21748* reloc directive: Reloc. (line 6) 21749* relocation: Sections. (line 6) 21750* relocation example: Ld Sections. (line 40) 21751* relocations, Alpha: Alpha-Relocs. (line 6) 21752* relocations, Sparc: Sparc-Relocs. (line 6) 21753* repeat prefixes, i386: i386-Prefixes. (line 44) 21754* reporting bugs in assembler: Reporting Bugs. (line 6) 21755* rept directive: Rept. (line 6) 21756* reserve directive, SPARC: Sparc-Directives. (line 39) 21757* return instructions, i386: i386-Syntax. (line 41) 21758* return instructions, x86-64: i386-Syntax. (line 41) 21759* REX prefixes, i386: i386-Prefixes. (line 46) 21760* rsect: Z8000 Directives. (line 52) 21761* RX assembler directive .3byte: RX-Directives. (line 9) 21762* RX assembler directives: RX-Directives. (line 6) 21763* RX floating point: RX-Float. (line 6) 21764* RX modifiers: RX-Modifiers. (line 6) 21765* RX options: RX-Opts. (line 6) 21766* RX support: RX-Dependent. (line 6) 21767* s390 floating point: s390 Floating Point. (line 6) 21768* s390 instruction aliases: s390 Aliases. (line 6) 21769* s390 instruction formats: s390 Formats. (line 6) 21770* s390 instruction marker: s390 Instruction Marker. 21771 (line 6) 21772* s390 instruction mnemonics: s390 Mnemonics. (line 6) 21773* s390 instruction operand modifier: s390 Operand Modifier. 21774 (line 6) 21775* s390 instruction operands: s390 Operands. (line 6) 21776* s390 instruction syntax: s390 Syntax. (line 6) 21777* s390 line comment character: s390 Characters. (line 6) 21778* s390 literal pool entries: s390 Literal Pool Entries. 21779 (line 6) 21780* s390 options: s390 Options. (line 6) 21781* s390 register naming: s390 Register. (line 6) 21782* s390 support: S/390-Dependent. (line 6) 21783* sblock directive, TIC54X: TIC54X-Directives. (line 182) 21784* sbttl directive: Sbttl. (line 6) 21785* schedule directive: Schedule Directive. (line 6) 21786* scl directive: Scl. (line 6) 21787* SCORE architectures: SCORE-Opts. (line 6) 21788* SCORE directives: SCORE-Pseudo. (line 6) 21789* SCORE options: SCORE-Opts. (line 6) 21790* SCORE processor: SCORE-Dependent. (line 6) 21791* sdaoff pseudo-op, V850: V850 Opcodes. (line 65) 21792* search path for .include: I. (line 6) 21793* sect directive, MSP 430: MSP430 Directives. (line 18) 21794* sect directive, TIC54X: TIC54X-Directives. (line 188) 21795* section directive (COFF version): Section. (line 16) 21796* section directive (ELF version): Section. (line 73) 21797* section directive, V850: V850 Directives. (line 9) 21798* section override prefixes, i386: i386-Prefixes. (line 23) 21799* Section Stack <1>: SubSection. (line 6) 21800* Section Stack <2>: PopSection. (line 6) 21801* Section Stack <3>: Section. (line 68) 21802* Section Stack <4>: Previous. (line 6) 21803* Section Stack: PushSection. (line 6) 21804* section-relative addressing: Secs Background. (line 68) 21805* sections: Sections. (line 6) 21806* sections in messages, internal: As Sections. (line 6) 21807* sections, i386: i386-Syntax. (line 47) 21808* sections, named: Ld Sections. (line 8) 21809* sections, x86-64: i386-Syntax. (line 47) 21810* seg directive, SPARC: Sparc-Directives. (line 44) 21811* segm: Z8000 Directives. (line 10) 21812* set directive: Set. (line 6) 21813* set directive, TIC54X: TIC54X-Directives. (line 191) 21814* SH addressing modes: SH-Addressing. (line 6) 21815* SH floating point (IEEE): SH Floating Point. (line 6) 21816* SH line comment character: SH-Chars. (line 6) 21817* SH line separator: SH-Chars. (line 8) 21818* SH machine directives: SH Directives. (line 6) 21819* SH opcode summary: SH Opcodes. (line 6) 21820* SH options: SH Options. (line 6) 21821* SH registers: SH-Regs. (line 6) 21822* SH support: SH-Dependent. (line 6) 21823* SH64 ABI options: SH64 Options. (line 29) 21824* SH64 addressing modes: SH64-Addressing. (line 6) 21825* SH64 ISA options: SH64 Options. (line 6) 21826* SH64 line comment character: SH64-Chars. (line 6) 21827* SH64 line separator: SH64-Chars. (line 8) 21828* SH64 machine directives: SH64 Directives. (line 9) 21829* SH64 opcode summary: SH64 Opcodes. (line 6) 21830* SH64 options: SH64 Options. (line 6) 21831* SH64 registers: SH64-Regs. (line 6) 21832* SH64 support: SH64-Dependent. (line 6) 21833* shigh directive, M32R: M32R-Directives. (line 26) 21834* short directive: Short. (line 6) 21835* short directive, ARC: ARC Directives. (line 171) 21836* short directive, TIC54X: TIC54X-Directives. (line 111) 21837* SIMD, i386: i386-SIMD. (line 6) 21838* SIMD, x86-64: i386-SIMD. (line 6) 21839* single character constant: Chars. (line 6) 21840* single directive: Single. (line 6) 21841* single directive, i386: i386-Float. (line 14) 21842* single directive, x86-64: i386-Float. (line 14) 21843* single quote, Z80: Z80-Chars. (line 13) 21844* sixteen bit integers: hword. (line 6) 21845* sixteen byte integer: Octa. (line 6) 21846* size directive (COFF version): Size. (line 11) 21847* size directive (ELF version): Size. (line 19) 21848* size modifiers, D10V: D10V-Size. (line 6) 21849* size modifiers, D30V: D30V-Size. (line 6) 21850* size modifiers, M680x0: M68K-Syntax. (line 8) 21851* size prefixes, i386: i386-Prefixes. (line 27) 21852* size suffixes, H8/300: H8/300 Opcodes. (line 163) 21853* size, translations, Sparc: Sparc-Size-Translations. 21854 (line 6) 21855* sizes operands, i386: i386-Syntax. (line 29) 21856* sizes operands, x86-64: i386-Syntax. (line 29) 21857* skip directive: Skip. (line 6) 21858* skip directive, M680x0: M68K-Directives. (line 19) 21859* skip directive, SPARC: Sparc-Directives. (line 48) 21860* sleb128 directive: Sleb128. (line 6) 21861* small objects, MIPS ECOFF: MIPS Object. (line 11) 21862* SmartMIPS instruction generation override: MIPS ASE instruction generation overrides. 21863 (line 11) 21864* SOM symbol attributes: SOM Symbols. (line 6) 21865* source program: Input Files. (line 6) 21866* source, destination operands; i386: i386-Syntax. (line 22) 21867* source, destination operands; x86-64: i386-Syntax. (line 22) 21868* sp register: Xtensa Registers. (line 6) 21869* sp register, V850: V850-Regs. (line 14) 21870* space directive: Space. (line 6) 21871* space directive, TIC54X: TIC54X-Directives. (line 196) 21872* space used, maximum for assembly: statistics. (line 6) 21873* SPARC architectures: Sparc-Opts. (line 6) 21874* Sparc constants: Sparc-Constants. (line 6) 21875* SPARC data alignment: Sparc-Aligned-Data. (line 6) 21876* SPARC floating point (IEEE): Sparc-Float. (line 6) 21877* Sparc line comment character: Sparc-Chars. (line 6) 21878* Sparc line separator: Sparc-Chars. (line 8) 21879* SPARC machine directives: Sparc-Directives. (line 6) 21880* SPARC options: Sparc-Opts. (line 6) 21881* Sparc registers: Sparc-Regs. (line 6) 21882* Sparc relocations: Sparc-Relocs. (line 6) 21883* Sparc size translations: Sparc-Size-Translations. 21884 (line 6) 21885* SPARC support: Sparc-Dependent. (line 6) 21886* SPARC syntax: Sparc-Aligned-Data. (line 21) 21887* special characters, ARC: ARC-Chars. (line 6) 21888* special characters, M680x0: M68K-Chars. (line 6) 21889* special purpose registers, MSP 430: MSP430-Regs. (line 11) 21890* sslist directive, TIC54X: TIC54X-Directives. (line 203) 21891* ssnolist directive, TIC54X: TIC54X-Directives. (line 203) 21892* stabd directive: Stab. (line 38) 21893* stabn directive: Stab. (line 48) 21894* stabs directive: Stab. (line 51) 21895* stabX directives: Stab. (line 6) 21896* standard assembler sections: Secs Background. (line 27) 21897* standard input, as input file: Command Line. (line 10) 21898* statement separator character: Statements. (line 6) 21899* statement separator, Alpha: Alpha-Chars. (line 8) 21900* statement separator, ARM: ARM-Chars. (line 10) 21901* statement separator, AVR: AVR-Chars. (line 10) 21902* statement separator, H8/300: H8/300-Chars. (line 8) 21903* statement separator, IA-64: IA-64-Chars. (line 8) 21904* statement separator, SH: SH-Chars. (line 8) 21905* statement separator, SH64: SH64-Chars. (line 8) 21906* statement separator, Sparc: Sparc-Chars. (line 8) 21907* statement separator, TIC6X: TIC6X Syntax. (line 10) 21908* statement separator, Z8000: Z8000-Chars. (line 8) 21909* statements, structure of: Statements. (line 6) 21910* statistics, about assembly: statistics. (line 6) 21911* stopping the assembly: Abort. (line 6) 21912* string constants: Strings. (line 6) 21913* string directive: String. (line 8) 21914* string directive on HPPA: HPPA Directives. (line 137) 21915* string directive, TIC54X: TIC54X-Directives. (line 208) 21916* string literals: Ascii. (line 6) 21917* string, copying to object file: String. (line 8) 21918* string16 directive: String. (line 8) 21919* string16, copying to object file: String. (line 8) 21920* string32 directive: String. (line 8) 21921* string32, copying to object file: String. (line 8) 21922* string64 directive: String. (line 8) 21923* string64, copying to object file: String. (line 8) 21924* string8 directive: String. (line 8) 21925* string8, copying to object file: String. (line 8) 21926* struct directive: Struct. (line 6) 21927* struct directive, TIC54X: TIC54X-Directives. (line 216) 21928* structure debugging, COFF: Tag. (line 6) 21929* sub-instruction ordering, D10V: D10V-Chars. (line 6) 21930* sub-instruction ordering, D30V: D30V-Chars. (line 6) 21931* sub-instructions, D10V: D10V-Subs. (line 6) 21932* sub-instructions, D30V: D30V-Subs. (line 6) 21933* subexpressions: Arguments. (line 24) 21934* subsection directive: SubSection. (line 6) 21935* subsym builtins, TIC54X: TIC54X-Macros. (line 16) 21936* subtitles for listings: Sbttl. (line 6) 21937* subtraction, permitted arguments: Infix Ops. (line 49) 21938* summary of options: Overview. (line 6) 21939* support: HPPA-Dependent. (line 6) 21940* supporting files, including: Include. (line 6) 21941* suppressing warnings: W. (line 11) 21942* sval: Z8000 Directives. (line 33) 21943* symbol attributes: Symbol Attributes. (line 6) 21944* symbol attributes, a.out: a.out Symbols. (line 6) 21945* symbol attributes, COFF: COFF Symbols. (line 6) 21946* symbol attributes, SOM: SOM Symbols. (line 6) 21947* symbol descriptor, COFF: Desc. (line 6) 21948* symbol modifiers <1>: AVR-Modifiers. (line 12) 21949* symbol modifiers <2>: M68HC11-Modifiers. (line 12) 21950* symbol modifiers <3>: M32C-Modifiers. (line 11) 21951* symbol modifiers <4>: LM32-Modifiers. (line 12) 21952* symbol modifiers: RX-Modifiers. (line 11) 21953* symbol names: Symbol Names. (line 6) 21954* symbol names, $ in <1>: D30V-Chars. (line 63) 21955* symbol names, $ in <2>: SH64-Chars. (line 10) 21956* symbol names, $ in <3>: SH-Chars. (line 10) 21957* symbol names, $ in: D10V-Chars. (line 46) 21958* symbol names, local: Symbol Names. (line 22) 21959* symbol names, temporary: Symbol Names. (line 35) 21960* symbol storage class (COFF): Scl. (line 6) 21961* symbol type: Symbol Type. (line 6) 21962* symbol type, COFF: Type. (line 11) 21963* symbol type, ELF: Type. (line 22) 21964* symbol value: Symbol Value. (line 6) 21965* symbol value, setting: Set. (line 6) 21966* symbol values, assigning: Setting Symbols. (line 6) 21967* symbol versioning: Symver. (line 6) 21968* symbol, common: Comm. (line 6) 21969* symbol, making visible to linker: Global. (line 6) 21970* symbolic debuggers, information for: Stab. (line 6) 21971* symbols: Symbols. (line 6) 21972* Symbols in position-independent code, CRIS: CRIS-Pic. (line 6) 21973* symbols with uppercase, VAX/VMS: VAX-Opts. (line 42) 21974* symbols, assigning values to: Equ. (line 6) 21975* Symbols, built-in, CRIS: CRIS-Symbols. (line 6) 21976* Symbols, CRIS, built-in: CRIS-Symbols. (line 6) 21977* symbols, local common: Lcomm. (line 6) 21978* symver directive: Symver. (line 6) 21979* syntax compatibility, i386: i386-Syntax. (line 6) 21980* syntax compatibility, x86-64: i386-Syntax. (line 6) 21981* syntax, AVR: AVR-Modifiers. (line 6) 21982* syntax, Blackfin: Blackfin Syntax. (line 6) 21983* syntax, D10V: D10V-Syntax. (line 6) 21984* syntax, D30V: D30V-Syntax. (line 6) 21985* syntax, LM32: LM32-Modifiers. (line 6) 21986* syntax, M32C: M32C-Modifiers. (line 6) 21987* syntax, M680x0: M68K-Syntax. (line 8) 21988* syntax, M68HC11 <1>: M68HC11-Syntax. (line 6) 21989* syntax, M68HC11: M68HC11-Modifiers. (line 6) 21990* syntax, machine-independent: Syntax. (line 6) 21991* syntax, RX: RX-Modifiers. (line 6) 21992* syntax, SPARC: Sparc-Aligned-Data. (line 21) 21993* syntax, Xtensa assembler: Xtensa Syntax. (line 6) 21994* sysproc directive, i960: Directives-i960. (line 37) 21995* tab (\t): Strings. (line 27) 21996* tab directive, TIC54X: TIC54X-Directives. (line 247) 21997* tag directive: Tag. (line 6) 21998* tag directive, TIC54X: TIC54X-Directives. (line 216) 21999* tdaoff pseudo-op, V850: V850 Opcodes. (line 81) 22000* temporary symbol names: Symbol Names. (line 35) 22001* text and data sections, joining: R. (line 6) 22002* text directive: Text. (line 6) 22003* text section: Ld Sections. (line 9) 22004* tfloat directive, i386: i386-Float. (line 14) 22005* tfloat directive, x86-64: i386-Float. (line 14) 22006* Thumb support: ARM-Dependent. (line 6) 22007* TIC54X builtin math functions: TIC54X-Builtins. (line 6) 22008* TIC54X machine directives: TIC54X-Directives. (line 6) 22009* TIC54X memory-mapped registers: TIC54X-MMRegs. (line 6) 22010* TIC54X options: TIC54X-Opts. (line 6) 22011* TIC54X subsym builtins: TIC54X-Macros. (line 16) 22012* TIC54X support: TIC54X-Dependent. (line 6) 22013* TIC54X-specific macros: TIC54X-Macros. (line 6) 22014* TIC6X big-endian output: TIC6X Options. (line 58) 22015* TIC6X line comment character: TIC6X Syntax. (line 6) 22016* TIC6X line separator: TIC6X Syntax. (line 10) 22017* TIC6X little-endian output: TIC6X Options. (line 58) 22018* TIC6X machine directives: TIC6X Directives. (line 6) 22019* TIC6X options: TIC6X Options. (line 6) 22020* TIC6X support: TIC6X-Dependent. (line 6) 22021* time, total for assembly: statistics. (line 6) 22022* title directive: Title. (line 6) 22023* TMS320C6X support: TIC6X-Dependent. (line 6) 22024* tp register, V850: V850-Regs. (line 20) 22025* transform directive: Transform Directive. (line 6) 22026* trusted compiler: f. (line 6) 22027* turning preprocessing on and off: Preprocessing. (line 27) 22028* type directive (COFF version): Type. (line 11) 22029* type directive (ELF version): Type. (line 22) 22030* type of a symbol: Symbol Type. (line 6) 22031* ualong directive, SH: SH Directives. (line 6) 22032* uaword directive, SH: SH Directives. (line 6) 22033* ubyte directive, TIC54X: TIC54X-Directives. (line 36) 22034* uchar directive, TIC54X: TIC54X-Directives. (line 36) 22035* uhalf directive, TIC54X: TIC54X-Directives. (line 111) 22036* uint directive, TIC54X: TIC54X-Directives. (line 111) 22037* uleb128 directive: Uleb128. (line 6) 22038* ulong directive, TIC54X: TIC54X-Directives. (line 135) 22039* undefined section: Ld Sections. (line 36) 22040* union directive, TIC54X: TIC54X-Directives. (line 250) 22041* unsegm: Z8000 Directives. (line 14) 22042* usect directive, TIC54X: TIC54X-Directives. (line 262) 22043* ushort directive, TIC54X: TIC54X-Directives. (line 111) 22044* uword directive, TIC54X: TIC54X-Directives. (line 111) 22045* V850 command line options: V850 Options. (line 9) 22046* V850 floating point (IEEE): V850 Floating Point. (line 6) 22047* V850 line comment character: V850-Chars. (line 6) 22048* V850 machine directives: V850 Directives. (line 6) 22049* V850 opcodes: V850 Opcodes. (line 6) 22050* V850 options (none): V850 Options. (line 6) 22051* V850 register names: V850-Regs. (line 6) 22052* V850 support: V850-Dependent. (line 6) 22053* val directive: Val. (line 6) 22054* value attribute, COFF: Val. (line 6) 22055* value of a symbol: Symbol Value. (line 6) 22056* var directive, TIC54X: TIC54X-Directives. (line 272) 22057* VAX bitfields not supported: VAX-no. (line 6) 22058* VAX branch improvement: VAX-branch. (line 6) 22059* VAX command-line options ignored: VAX-Opts. (line 6) 22060* VAX displacement sizing character: VAX-operands. (line 12) 22061* VAX floating point: VAX-float. (line 6) 22062* VAX immediate character: VAX-operands. (line 6) 22063* VAX indirect character: VAX-operands. (line 9) 22064* VAX machine directives: VAX-directives. (line 6) 22065* VAX opcode mnemonics: VAX-opcodes. (line 6) 22066* VAX operand notation: VAX-operands. (line 6) 22067* VAX register names: VAX-operands. (line 17) 22068* VAX support: Vax-Dependent. (line 6) 22069* Vax-11 C compatibility: VAX-Opts. (line 42) 22070* VAX/VMS options: VAX-Opts. (line 42) 22071* version directive: Version. (line 6) 22072* version directive, TIC54X: TIC54X-Directives. (line 276) 22073* version of assembler: v. (line 6) 22074* versions of symbols: Symver. (line 6) 22075* visibility <1>: Internal. (line 6) 22076* visibility <2>: Hidden. (line 6) 22077* visibility: Protected. (line 6) 22078* VMS (VAX) options: VAX-Opts. (line 42) 22079* vtable_entry directive: VTableEntry. (line 6) 22080* vtable_inherit directive: VTableInherit. (line 6) 22081* warning directive: Warning. (line 6) 22082* warning for altered difference tables: K. (line 6) 22083* warning messages: Errors. (line 6) 22084* warnings, causing error: W. (line 16) 22085* warnings, M32R: M32R-Warnings. (line 6) 22086* warnings, suppressing: W. (line 11) 22087* warnings, switching on: W. (line 19) 22088* weak directive: Weak. (line 6) 22089* weakref directive: Weakref. (line 6) 22090* whitespace: Whitespace. (line 6) 22091* whitespace, removed by preprocessor: Preprocessing. (line 7) 22092* wide floating point directives, VAX: VAX-directives. (line 10) 22093* width directive, TIC54X: TIC54X-Directives. (line 127) 22094* Width of continuation lines of disassembly output: listing. (line 21) 22095* Width of first line disassembly output: listing. (line 16) 22096* Width of source line output: listing. (line 28) 22097* wmsg directive, TIC54X: TIC54X-Directives. (line 77) 22098* word directive: Word. (line 6) 22099* word directive, ARC: ARC Directives. (line 174) 22100* word directive, H8/300: H8/300 Directives. (line 6) 22101* word directive, i386: i386-Float. (line 21) 22102* word directive, SPARC: Sparc-Directives. (line 51) 22103* word directive, TIC54X: TIC54X-Directives. (line 111) 22104* word directive, x86-64: i386-Float. (line 21) 22105* writing patterns in memory: Fill. (line 6) 22106* wval: Z8000 Directives. (line 24) 22107* x86 machine directives: i386-Directives. (line 6) 22108* x86-64 arch directive: i386-Arch. (line 6) 22109* x86-64 att_syntax pseudo op: i386-Syntax. (line 6) 22110* x86-64 conversion instructions: i386-Mnemonics. (line 37) 22111* x86-64 floating point: i386-Float. (line 6) 22112* x86-64 immediate operands: i386-Syntax. (line 15) 22113* x86-64 instruction naming: i386-Mnemonics. (line 6) 22114* x86-64 intel_syntax pseudo op: i386-Syntax. (line 6) 22115* x86-64 jump optimization: i386-Jumps. (line 6) 22116* x86-64 jump, call, return: i386-Syntax. (line 41) 22117* x86-64 jump/call operands: i386-Syntax. (line 15) 22118* x86-64 memory references: i386-Memory. (line 6) 22119* x86-64 options: i386-Options. (line 6) 22120* x86-64 register operands: i386-Syntax. (line 15) 22121* x86-64 registers: i386-Regs. (line 6) 22122* x86-64 sections: i386-Syntax. (line 47) 22123* x86-64 size suffixes: i386-Syntax. (line 29) 22124* x86-64 source, destination operands: i386-Syntax. (line 22) 22125* x86-64 support: i386-Dependent. (line 6) 22126* x86-64 syntax compatibility: i386-Syntax. (line 6) 22127* xfloat directive, TIC54X: TIC54X-Directives. (line 64) 22128* xlong directive, TIC54X: TIC54X-Directives. (line 135) 22129* Xtensa architecture: Xtensa-Dependent. (line 6) 22130* Xtensa assembler syntax: Xtensa Syntax. (line 6) 22131* Xtensa directives: Xtensa Directives. (line 6) 22132* Xtensa opcode names: Xtensa Opcodes. (line 6) 22133* Xtensa register names: Xtensa Registers. (line 6) 22134* xword directive, SPARC: Sparc-Directives. (line 55) 22135* Z80 $: Z80-Chars. (line 8) 22136* Z80 ': Z80-Chars. (line 13) 22137* Z80 floating point: Z80 Floating Point. (line 6) 22138* Z80 line comment character: Z80-Chars. (line 6) 22139* Z80 options: Z80 Options. (line 6) 22140* Z80 registers: Z80-Regs. (line 6) 22141* Z80 support: Z80-Dependent. (line 6) 22142* Z80 Syntax: Z80 Options. (line 47) 22143* Z80, \: Z80-Chars. (line 11) 22144* Z80, case sensitivity: Z80-Case. (line 6) 22145* Z80-only directives: Z80 Directives. (line 9) 22146* Z800 addressing modes: Z8000-Addressing. (line 6) 22147* Z8000 directives: Z8000 Directives. (line 6) 22148* Z8000 line comment character: Z8000-Chars. (line 6) 22149* Z8000 line separator: Z8000-Chars. (line 8) 22150* Z8000 opcode summary: Z8000 Opcodes. (line 6) 22151* Z8000 options: Z8000 Options. (line 6) 22152* Z8000 registers: Z8000-Regs. (line 6) 22153* Z8000 support: Z8000-Dependent. (line 6) 22154* zdaoff pseudo-op, V850: V850 Opcodes. (line 99) 22155* zero register, V850: V850-Regs. (line 7) 22156* zero-terminated strings: Asciz. (line 6) 22157 22158 22159 22160Tag Table: 22161Node: Top836 22162Node: Overview1824 22163Node: Manual35089 22164Node: GNU Assembler36033 22165Node: Object Formats37204 22166Node: Command Line37656 22167Node: Input Files38743 22168Node: Object40724 22169Node: Errors41620 22170Node: Invoking42815 22171Node: a44770 22172Node: alternate46681 22173Node: D46853 22174Node: f47086 22175Node: I47594 22176Node: K48138 22177Node: L48442 22178Node: listing49181 22179Node: M50840 22180Node: MD55241 22181Node: o55667 22182Node: R56122 22183Node: statistics57152 22184Node: traditional-format57559 22185Node: v58032 22186Node: W58307 22187Node: Z59214 22188Node: Syntax59736 22189Node: Preprocessing60327 22190Node: Whitespace61890 22191Node: Comments62286 22192Node: Symbol Intro64522 22193Node: Statements65212 22194Node: Constants67133 22195Node: Characters67764 22196Node: Strings68266 22197Node: Chars70432 22198Node: Numbers71186 22199Node: Integers71726 22200Node: Bignums72382 22201Node: Flonums72738 22202Node: Sections74485 22203Node: Secs Background74863 22204Node: Ld Sections79902 22205Node: As Sections82286 22206Node: Sub-Sections83196 22207Node: bss86341 22208Node: Symbols87291 22209Node: Labels87939 22210Node: Setting Symbols88670 22211Node: Symbol Names89224 22212Node: Dot94265 22213Node: Symbol Attributes94712 22214Node: Symbol Value95449 22215Node: Symbol Type96494 22216Node: a.out Symbols96882 22217Node: Symbol Desc97144 22218Node: Symbol Other97439 22219Node: COFF Symbols97608 22220Node: SOM Symbols98281 22221Node: Expressions98723 22222Node: Empty Exprs99472 22223Node: Integer Exprs99819 22224Node: Arguments100214 22225Node: Operators101320 22226Node: Prefix Ops101655 22227Node: Infix Ops101983 22228Node: Pseudo Ops104373 22229Node: Abort109874 22230Node: ABORT (COFF)110286 22231Node: Align110494 22232Node: Altmacro112776 22233Node: Ascii114105 22234Node: Asciz114414 22235Node: Balign114659 22236Node: Byte116522 22237Node: CFI directives116770 22238Node: Comm122397 22239Ref: Comm-Footnote-1123998 22240Node: Data124360 22241Node: Def124677 22242Node: Desc124909 22243Node: Dim125409 22244Node: Double125666 22245Node: Eject126004 22246Node: Else126179 22247Node: Elseif126479 22248Node: End126773 22249Node: Endef126988 22250Node: Endfunc127165 22251Node: Endif127340 22252Node: Equ127601 22253Node: Equiv128115 22254Node: Eqv128671 22255Node: Err129035 22256Node: Error129346 22257Node: Exitm129791 22258Node: Extern129960 22259Node: Fail130221 22260Node: File130666 22261Node: Fill131995 22262Node: Float132959 22263Node: Func133301 22264Node: Global133891 22265Node: Gnu_attribute134648 22266Node: Hidden134873 22267Node: hword135459 22268Node: Ident135787 22269Node: If136361 22270Node: Incbin139420 22271Node: Include140115 22272Node: Int140666 22273Node: Internal141047 22274Node: Irp141695 22275Node: Irpc142574 22276Node: Lcomm143491 22277Node: Lflags144239 22278Node: Line144433 22279Node: Linkonce145346 22280Node: List146575 22281Node: Ln147183 22282Node: Loc147333 22283Node: Loc_mark_labels148719 22284Node: Local149203 22285Node: Long149815 22286Node: Macro149993 22287Node: MRI155915 22288Node: Noaltmacro156253 22289Node: Nolist156422 22290Node: Octa156852 22291Node: Org157186 22292Node: P2align158469 22293Node: PopSection160397 22294Node: Previous160905 22295Node: Print162318 22296Node: Protected162547 22297Node: Psize163194 22298Node: Purgem163878 22299Node: PushSection164099 22300Node: Quad164842 22301Node: Reloc165298 22302Node: Rept166059 22303Node: Sbttl166473 22304Node: Scl166838 22305Node: Section167179 22306Node: Set173294 22307Node: Short173865 22308Node: Single174186 22309Node: Size174531 22310Node: Skip175205 22311Node: Sleb128175529 22312Node: Space175853 22313Node: Stab176494 22314Node: String178498 22315Node: Struct179492 22316Node: SubSection180217 22317Node: Symver180780 22318Node: Tag183173 22319Node: Text183555 22320Node: Title183876 22321Node: Type184257 22322Node: Uleb128186551 22323Node: Val186875 22324Node: Version187125 22325Node: VTableEntry187400 22326Node: VTableInherit187690 22327Node: Warning188140 22328Node: Weak188374 22329Node: Weakref189043 22330Node: Word190008 22331Node: Deprecated191854 22332Node: Object Attributes192089 22333Node: GNU Object Attributes193809 22334Node: Defining New Object Attributes196362 22335Node: Machine Dependencies197159 22336Node: Alpha-Dependent200404 22337Node: Alpha Notes200818 22338Node: Alpha Options201099 22339Node: Alpha Syntax203574 22340Node: Alpha-Chars204043 22341Node: Alpha-Regs204274 22342Node: Alpha-Relocs204661 22343Node: Alpha Floating Point210919 22344Node: Alpha Directives211141 22345Node: Alpha Opcodes216664 22346Node: ARC-Dependent216959 22347Node: ARC Options217342 22348Node: ARC Syntax218411 22349Node: ARC-Chars218643 22350Node: ARC-Regs218775 22351Node: ARC Floating Point218899 22352Node: ARC Directives219210 22353Node: ARC Opcodes225182 22354Node: ARM-Dependent225408 22355Node: ARM Options225873 22356Node: ARM Syntax234219 22357Node: ARM-Instruction-Set234587 22358Node: ARM-Chars235819 22359Node: ARM-Regs236371 22360Node: ARM-Neon-Alignment236580 22361Node: ARM Floating Point237044 22362Node: ARM-Relocations237243 22363Node: ARM Directives238235 22364Ref: arm_pad239552 22365Ref: arm_fnend242889 22366Ref: arm_fnstart243213 22367Ref: arm_save246223 22368Ref: arm_setfp246924 22369Node: ARM Opcodes250005 22370Node: ARM Mapping Symbols252093 22371Node: ARM Unwinding Tutorial252903 22372Node: AVR-Dependent259105 22373Node: AVR Options259395 22374Node: AVR Syntax262898 22375Node: AVR-Chars263185 22376Node: AVR-Regs263591 22377Node: AVR-Modifiers264170 22378Node: AVR Opcodes266230 22379Node: Blackfin-Dependent271476 22380Node: Blackfin Options271788 22381Node: Blackfin Syntax272762 22382Node: Blackfin Directives278495 22383Node: CR16-Dependent278914 22384Node: CR16 Operand Qualifiers279162 22385Node: CRIS-Dependent281803 22386Node: CRIS-Opts282149 22387Ref: march-option283767 22388Node: CRIS-Expand285584 22389Node: CRIS-Symbols286767 22390Node: CRIS-Syntax287936 22391Node: CRIS-Chars288272 22392Node: CRIS-Pic288823 22393Ref: crispic289019 22394Node: CRIS-Regs292559 22395Node: CRIS-Pseudos292976 22396Ref: crisnous293752 22397Node: D10V-Dependent295034 22398Node: D10V-Opts295385 22399Node: D10V-Syntax296347 22400Node: D10V-Size296876 22401Node: D10V-Subs297849 22402Node: D10V-Chars298884 22403Node: D10V-Regs300488 22404Node: D10V-Addressing301533 22405Node: D10V-Word302219 22406Node: D10V-Float302734 22407Node: D10V-Opcodes303045 22408Node: D30V-Dependent303438 22409Node: D30V-Opts303791 22410Node: D30V-Syntax304466 22411Node: D30V-Size304998 22412Node: D30V-Subs305969 22413Node: D30V-Chars307004 22414Node: D30V-Guarded309302 22415Node: D30V-Regs309982 22416Node: D30V-Addressing311121 22417Node: D30V-Float311789 22418Node: D30V-Opcodes312100 22419Node: H8/300-Dependent312493 22420Node: H8/300 Options312905 22421Node: H8/300 Syntax313172 22422Node: H8/300-Chars313473 22423Node: H8/300-Regs313772 22424Node: H8/300-Addressing314691 22425Node: H8/300 Floating Point315732 22426Node: H8/300 Directives316059 22427Node: H8/300 Opcodes317187 22428Node: HPPA-Dependent325509 22429Node: HPPA Notes325944 22430Node: HPPA Options326702 22431Node: HPPA Syntax326897 22432Node: HPPA Floating Point328167 22433Node: HPPA Directives328373 22434Node: HPPA Opcodes337059 22435Node: ESA/390-Dependent337318 22436Node: ESA/390 Notes337778 22437Node: ESA/390 Options338569 22438Node: ESA/390 Syntax338779 22439Node: ESA/390 Floating Point340952 22440Node: ESA/390 Directives341231 22441Node: ESA/390 Opcodes344520 22442Node: i386-Dependent344782 22443Node: i386-Options345979 22444Node: i386-Directives350345 22445Node: i386-Syntax351083 22446Node: i386-Mnemonics353647 22447Node: i386-Regs356940 22448Node: i386-Prefixes358985 22449Node: i386-Memory361745 22450Node: i386-Jumps364682 22451Node: i386-Float365803 22452Node: i386-SIMD367634 22453Node: i386-LWP368743 22454Node: i386-16bit369579 22455Node: i386-Bugs371650 22456Node: i386-Arch372404 22457Node: i386-Notes375065 22458Node: i860-Dependent375923 22459Node: Notes-i860376319 22460Node: Options-i860377224 22461Node: Directives-i860378587 22462Node: Opcodes for i860379656 22463Node: i960-Dependent381823 22464Node: Options-i960382226 22465Node: Floating Point-i960386111 22466Node: Directives-i960386379 22467Node: Opcodes for i960388413 22468Node: callj-i960389030 22469Node: Compare-and-branch-i960389519 22470Node: IA-64-Dependent391423 22471Node: IA-64 Options391724 22472Node: IA-64 Syntax394875 22473Node: IA-64-Chars395281 22474Node: IA-64-Regs395511 22475Node: IA-64-Bits396437 22476Node: IA-64-Relocs396967 22477Node: IA-64 Opcodes397439 22478Node: IP2K-Dependent397711 22479Node: IP2K-Opts397939 22480Node: LM32-Dependent398419 22481Node: LM32 Options398714 22482Node: LM32 Syntax399348 22483Node: LM32-Regs399595 22484Node: LM32-Modifiers400554 22485Node: LM32 Opcodes401910 22486Node: M32C-Dependent402214 22487Node: M32C-Opts402738 22488Node: M32C-Modifiers403161 22489Node: M32R-Dependent404948 22490Node: M32R-Opts405269 22491Node: M32R-Directives409436 22492Node: M32R-Warnings413411 22493Node: M68K-Dependent416417 22494Node: M68K-Opts416884 22495Node: M68K-Syntax424257 22496Node: M68K-Moto-Syntax426097 22497Node: M68K-Float428687 22498Node: M68K-Directives429207 22499Node: M68K-opcodes430535 22500Node: M68K-Branch430761 22501Node: M68K-Chars434959 22502Node: M68HC11-Dependent435372 22503Node: M68HC11-Opts435909 22504Node: M68HC11-Syntax439730 22505Node: M68HC11-Modifiers441944 22506Node: M68HC11-Directives443772 22507Node: M68HC11-Float445148 22508Node: M68HC11-opcodes445676 22509Node: M68HC11-Branch445858 22510Node: MicroBlaze-Dependent448307 22511Node: MicroBlaze Directives448937 22512Node: MIPS-Dependent450294 22513Node: MIPS Opts451457 22514Node: MIPS Object461969 22515Node: MIPS Stabs463535 22516Node: MIPS symbol sizes464257 22517Node: MIPS ISA465926 22518Node: MIPS autoextend467400 22519Node: MIPS insn468130 22520Node: MIPS option stack469400 22521Node: MIPS ASE instruction generation overrides470174 22522Node: MIPS floating-point471988 22523Node: MMIX-Dependent472874 22524Node: MMIX-Opts473254 22525Node: MMIX-Expand476858 22526Node: MMIX-Syntax478173 22527Ref: mmixsite478530 22528Node: MMIX-Chars479371 22529Node: MMIX-Symbols480025 22530Node: MMIX-Regs482093 22531Node: MMIX-Pseudos483118 22532Ref: MMIX-loc483259 22533Ref: MMIX-local484339 22534Ref: MMIX-is484871 22535Ref: MMIX-greg485142 22536Ref: GREG-base486061 22537Ref: MMIX-byte487378 22538Ref: MMIX-constants487849 22539Ref: MMIX-prefix488495 22540Ref: MMIX-spec488869 22541Node: MMIX-mmixal489203 22542Node: MSP430-Dependent492701 22543Node: MSP430 Options493167 22544Node: MSP430 Syntax493453 22545Node: MSP430-Macros493769 22546Node: MSP430-Chars494500 22547Node: MSP430-Regs494813 22548Node: MSP430-Ext495373 22549Node: MSP430 Floating Point497194 22550Node: MSP430 Directives497418 22551Node: MSP430 Opcodes498209 22552Node: MSP430 Profiling Capability498604 22553Node: PDP-11-Dependent500933 22554Node: PDP-11-Options501322 22555Node: PDP-11-Pseudos506393 22556Node: PDP-11-Syntax506738 22557Node: PDP-11-Mnemonics507490 22558Node: PDP-11-Synthetic507792 22559Node: PJ-Dependent508010 22560Node: PJ Options508235 22561Node: PPC-Dependent508512 22562Node: PowerPC-Opts508796 22563Node: PowerPC-Pseudo511925 22564Node: RX-Dependent512524 22565Node: RX-Opts512917 22566Node: RX-Modifiers514943 22567Node: RX-Directives515274 22568Node: RX-Float515590 22569Node: S/390-Dependent516213 22570Node: s390 Options516921 22571Node: s390 Characters518467 22572Node: s390 Syntax518660 22573Node: s390 Register519561 22574Node: s390 Mnemonics520374 22575Node: s390 Operands523394 22576Node: s390 Formats526013 22577Node: s390 Aliases533884 22578Node: s390 Operand Modifier537781 22579Node: s390 Instruction Marker541582 22580Node: s390 Literal Pool Entries542598 22581Node: s390 Directives544521 22582Node: s390 Floating Point548949 22583Node: SCORE-Dependent549395 22584Node: SCORE-Opts549669 22585Node: SCORE-Pseudo550957 22586Node: SH-Dependent553013 22587Node: SH Options553425 22588Node: SH Syntax554480 22589Node: SH-Chars554753 22590Node: SH-Regs555047 22591Node: SH-Addressing555661 22592Node: SH Floating Point556570 22593Node: SH Directives557664 22594Node: SH Opcodes558034 22595Node: SH64-Dependent562356 22596Node: SH64 Options562719 22597Node: SH64 Syntax564516 22598Node: SH64-Chars564799 22599Node: SH64-Regs565099 22600Node: SH64-Addressing566195 22601Node: SH64 Directives567378 22602Node: SH64 Opcodes568488 22603Node: Sparc-Dependent569204 22604Node: Sparc-Opts569616 22605Node: Sparc-Aligned-Data571873 22606Node: Sparc-Syntax572705 22607Node: Sparc-Chars573279 22608Node: Sparc-Regs573512 22609Node: Sparc-Constants578623 22610Node: Sparc-Relocs583383 22611Node: Sparc-Size-Translations588063 22612Node: Sparc-Float589712 22613Node: Sparc-Directives589907 22614Node: TIC54X-Dependent591867 22615Node: TIC54X-Opts592594 22616Node: TIC54X-Block593637 22617Node: TIC54X-Env593997 22618Node: TIC54X-Constants594345 22619Node: TIC54X-Subsyms594747 22620Node: TIC54X-Locals596656 22621Node: TIC54X-Builtins597400 22622Node: TIC54X-Ext599871 22623Node: TIC54X-Directives600442 22624Node: TIC54X-Macros611343 22625Node: TIC54X-MMRegs613454 22626Node: TIC6X-Dependent613670 22627Node: TIC6X Options613970 22628Node: TIC6X Syntax616588 22629Node: TIC6X Directives617512 22630Node: Z80-Dependent618581 22631Node: Z80 Options618969 22632Node: Z80 Syntax620392 22633Node: Z80-Chars621064 22634Node: Z80-Regs621598 22635Node: Z80-Case621950 22636Node: Z80 Floating Point622395 22637Node: Z80 Directives622589 22638Node: Z80 Opcodes624214 22639Node: Z8000-Dependent625558 22640Node: Z8000 Options626519 22641Node: Z8000 Syntax626736 22642Node: Z8000-Chars627026 22643Node: Z8000-Regs627259 22644Node: Z8000-Addressing628049 22645Node: Z8000 Directives629166 22646Node: Z8000 Opcodes630775 22647Node: Vax-Dependent640717 22648Node: VAX-Opts641234 22649Node: VAX-float644969 22650Node: VAX-directives645601 22651Node: VAX-opcodes646462 22652Node: VAX-branch646851 22653Node: VAX-operands649358 22654Node: VAX-no650121 22655Node: V850-Dependent650358 22656Node: V850 Options650755 22657Node: V850 Syntax653606 22658Node: V850-Chars653846 22659Node: V850-Regs654011 22660Node: V850 Floating Point655579 22661Node: V850 Directives655785 22662Node: V850 Opcodes657388 22663Node: Xtensa-Dependent663280 22664Node: Xtensa Options664009 22665Node: Xtensa Syntax666819 22666Node: Xtensa Opcodes668708 22667Node: Xtensa Registers670502 22668Node: Xtensa Optimizations671135 22669Node: Density Instructions671587 22670Node: Xtensa Automatic Alignment672689 22671Node: Xtensa Relaxation675136 22672Node: Xtensa Branch Relaxation676044 22673Node: Xtensa Call Relaxation677416 22674Node: Xtensa Immediate Relaxation679202 22675Node: Xtensa Directives681776 22676Node: Schedule Directive683485 22677Node: Longcalls Directive683825 22678Node: Transform Directive684369 22679Node: Literal Directive685111 22680Ref: Literal Directive-Footnote-1688650 22681Node: Literal Position Directive688792 22682Node: Literal Prefix Directive690491 22683Node: Absolute Literals Directive691389 22684Node: Reporting Bugs692696 22685Node: Bug Criteria693422 22686Node: Bug Reporting694189 22687Node: Acknowledgements700838 22688Ref: Acknowledgements-Footnote-1705804 22689Node: GNU Free Documentation License705830 22690Node: AS Index730999 22691 22692End Tag Table 22693