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-2016 Free Software Foundation, Inc. 12 13 Permission is granted to copy, distribute and/or modify this document 14under the terms of the GNU Free Documentation License, Version 1.3 or 15any later version published by the Free Software Foundation; with no 16Invariant Sections, with no Front-Cover Texts, and with no Back-Cover 17Texts. A copy of the license is included in the section entitled "GNU 18Free Documentation License". 19 20 21File: as.info, Node: Top, Next: Overview, Up: (dir) 22 23Using as 24******** 25 26This file is a user guide to the GNU assembler `as' (GNU Binutils) 27version 2.27. 28 29 This document is distributed under the terms of the GNU Free 30Documentation License. A copy of the license is included in the 31section entitled "GNU Free Documentation License". 32 33* Menu: 34 35* Overview:: Overview 36* Invoking:: Command-Line Options 37* Syntax:: Syntax 38* Sections:: Sections and Relocation 39* Symbols:: Symbols 40* Expressions:: Expressions 41* Pseudo Ops:: Assembler Directives 42 43* Object Attributes:: Object Attributes 44* Machine Dependencies:: Machine Dependent Features 45* Reporting Bugs:: Reporting Bugs 46* Acknowledgements:: Who Did What 47* GNU Free Documentation License:: GNU Free Documentation License 48* AS Index:: AS Index 49 50 51File: as.info, Node: Overview, Next: Invoking, Prev: Top, Up: Top 52 531 Overview 54********** 55 56Here is a brief summary of how to invoke `as'. For details, see *Note 57Command-Line Options: Invoking. 58 59 as [-a[cdghlns][=FILE]] [-alternate] [-D] 60 [-compress-debug-sections] [-nocompress-debug-sections] 61 [-debug-prefix-map OLD=NEW] 62 [-defsym SYM=VAL] [-f] [-g] [-gstabs] 63 [-gstabs+] [-gdwarf-2] [-gdwarf-sections] 64 [-help] [-I DIR] [-J] 65 [-K] [-L] [-listing-lhs-width=NUM] 66 [-listing-lhs-width2=NUM] [-listing-rhs-width=NUM] 67 [-listing-cont-lines=NUM] [-keep-locals] 68 [-no-pad-sections] 69 [-o OBJFILE] [-R] 70 [-hash-size=NUM] [-reduce-memory-overheads] 71 [-statistics] 72 [-v] [-version] [-version] 73 [-W] [-warn] [-fatal-warnings] [-w] [-x] 74 [-Z] [@FILE] 75 [-sectname-subst] [-size-check=[error|warning]] 76 [-elf-stt-common=[no|yes]] 77 [-target-help] [TARGET-OPTIONS] 78 [-|FILES ...] 79 80 _Target AArch64 options:_ 81 [-EB|-EL] 82 [-mabi=ABI] 83 84 _Target Alpha options:_ 85 [-mCPU] 86 [-mdebug | -no-mdebug] 87 [-replace | -noreplace] 88 [-relax] [-g] [-GSIZE] 89 [-F] [-32addr] 90 91 _Target ARC options:_ 92 [-mcpu=CPU] 93 [-mA6|-mARC600|-mARC601|-mA7|-mARC700|-mEM|-mHS] 94 [-mcode-density] 95 [-mrelax] 96 [-EB|-EL] 97 98 _Target ARM options:_ 99 [-mcpu=PROCESSOR[+EXTENSION...]] 100 [-march=ARCHITECTURE[+EXTENSION...]] 101 [-mfpu=FLOATING-POINT-FORMAT] 102 [-mfloat-abi=ABI] 103 [-meabi=VER] 104 [-mthumb] 105 [-EB|-EL] 106 [-mapcs-32|-mapcs-26|-mapcs-float| 107 -mapcs-reentrant] 108 [-mthumb-interwork] [-k] 109 110 _Target Blackfin options:_ 111 [-mcpu=PROCESSOR[-SIREVISION]] 112 [-mfdpic] 113 [-mno-fdpic] 114 [-mnopic] 115 116 _Target CRIS options:_ 117 [-underscore | -no-underscore] 118 [-pic] [-N] 119 [-emulation=criself | -emulation=crisaout] 120 [-march=v0_v10 | -march=v10 | -march=v32 | -march=common_v10_v32] 121 122 _Target D10V options:_ 123 [-O] 124 125 _Target D30V options:_ 126 [-O|-n|-N] 127 128 _Target EPIPHANY options:_ 129 [-mepiphany|-mepiphany16] 130 131 _Target H8/300 options:_ 132 [-h-tick-hex] 133 134 _Target i386 options:_ 135 [-32|-x32|-64] [-n] 136 [-march=CPU[+EXTENSION...]] [-mtune=CPU] 137 138 _Target i960 options:_ 139 [-ACA|-ACA_A|-ACB|-ACC|-AKA|-AKB| 140 -AKC|-AMC] 141 [-b] [-no-relax] 142 143 _Target IA-64 options:_ 144 [-mconstant-gp|-mauto-pic] 145 [-milp32|-milp64|-mlp64|-mp64] 146 [-mle|mbe] 147 [-mtune=itanium1|-mtune=itanium2] 148 [-munwind-check=warning|-munwind-check=error] 149 [-mhint.b=ok|-mhint.b=warning|-mhint.b=error] 150 [-x|-xexplicit] [-xauto] [-xdebug] 151 152 _Target IP2K options:_ 153 [-mip2022|-mip2022ext] 154 155 _Target M32C options:_ 156 [-m32c|-m16c] [-relax] [-h-tick-hex] 157 158 _Target M32R options:_ 159 [-m32rx|-[no-]warn-explicit-parallel-conflicts| 160 -W[n]p] 161 162 _Target M680X0 options:_ 163 [-l] [-m68000|-m68010|-m68020|...] 164 165 _Target M68HC11 options:_ 166 [-m68hc11|-m68hc12|-m68hcs12|-mm9s12x|-mm9s12xg] 167 [-mshort|-mlong] 168 [-mshort-double|-mlong-double] 169 [-force-long-branches] [-short-branches] 170 [-strict-direct-mode] [-print-insn-syntax] 171 [-print-opcodes] [-generate-example] 172 173 _Target MCORE options:_ 174 [-jsri2bsr] [-sifilter] [-relax] 175 [-mcpu=[210|340]] 176 177 _Target Meta options:_ 178 [-mcpu=CPU] [-mfpu=CPU] [-mdsp=CPU] 179 _Target MICROBLAZE options:_ 180 181 _Target MIPS options:_ 182 [-nocpp] [-EL] [-EB] [-O[OPTIMIZATION LEVEL]] 183 [-g[DEBUG LEVEL]] [-G NUM] [-KPIC] [-call_shared] 184 [-non_shared] [-xgot [-mvxworks-pic] 185 [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32] 186 [-mfp64] [-mgp64] [-mfpxx] 187 [-modd-spreg] [-mno-odd-spreg] 188 [-march=CPU] [-mtune=CPU] [-mips1] [-mips2] 189 [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2] 190 [-mips32r3] [-mips32r5] [-mips32r6] [-mips64] [-mips64r2] 191 [-mips64r3] [-mips64r5] [-mips64r6] 192 [-construct-floats] [-no-construct-floats] 193 [-mnan=ENCODING] 194 [-trap] [-no-break] [-break] [-no-trap] 195 [-mips16] [-no-mips16] 196 [-mmicromips] [-mno-micromips] 197 [-msmartmips] [-mno-smartmips] 198 [-mips3d] [-no-mips3d] 199 [-mdmx] [-no-mdmx] 200 [-mdsp] [-mno-dsp] 201 [-mdspr2] [-mno-dspr2] 202 [-mdspr3] [-mno-dspr3] 203 [-mmsa] [-mno-msa] 204 [-mxpa] [-mno-xpa] 205 [-mmt] [-mno-mt] 206 [-mmcu] [-mno-mcu] 207 [-minsn32] [-mno-insn32] 208 [-mfix7000] [-mno-fix7000] 209 [-mfix-rm7000] [-mno-fix-rm7000] 210 [-mfix-vr4120] [-mno-fix-vr4120] 211 [-mfix-vr4130] [-mno-fix-vr4130] 212 [-mdebug] [-no-mdebug] 213 [-mpdr] [-mno-pdr] 214 215 _Target MMIX options:_ 216 [-fixed-special-register-names] [-globalize-symbols] 217 [-gnu-syntax] [-relax] [-no-predefined-symbols] 218 [-no-expand] [-no-merge-gregs] [-x] 219 [-linker-allocated-gregs] 220 221 _Target Nios II options:_ 222 [-relax-all] [-relax-section] [-no-relax] 223 [-EB] [-EL] 224 225 _Target NDS32 options:_ 226 [-EL] [-EB] [-O] [-Os] [-mcpu=CPU] 227 [-misa=ISA] [-mabi=ABI] [-mall-ext] 228 [-m[no-]16-bit] [-m[no-]perf-ext] [-m[no-]perf2-ext] 229 [-m[no-]string-ext] [-m[no-]dsp-ext] [-m[no-]mac] [-m[no-]div] 230 [-m[no-]audio-isa-ext] [-m[no-]fpu-sp-ext] [-m[no-]fpu-dp-ext] 231 [-m[no-]fpu-fma] [-mfpu-freg=FREG] [-mreduced-regs] 232 [-mfull-regs] [-m[no-]dx-regs] [-mpic] [-mno-relax] 233 [-mb2bb] 234 235 _Target PDP11 options:_ 236 [-mpic|-mno-pic] [-mall] [-mno-extensions] 237 [-mEXTENSION|-mno-EXTENSION] 238 [-mCPU] [-mMACHINE] 239 240 _Target picoJava options:_ 241 [-mb|-me] 242 243 _Target PowerPC options:_ 244 [-a32|-a64] 245 [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604|-m403|-m405| 246 -m440|-m464|-m476|-m7400|-m7410|-m7450|-m7455|-m750cl|-mppc64| 247 -m620|-me500|-e500x2|-me500mc|-me500mc64|-me5500|-me6500|-mppc64bridge| 248 -mbooke|-mpower4|-mpwr4|-mpower5|-mpwr5|-mpwr5x|-mpower6|-mpwr6| 249 -mpower7|-mpwr7|-mpower8|-mpwr8|-mpower9|-mpwr9-ma2| 250 -mcell|-mspe|-mtitan|-me300|-mcom] 251 [-many] [-maltivec|-mvsx|-mhtm|-mvle] 252 [-mregnames|-mno-regnames] 253 [-mrelocatable|-mrelocatable-lib|-K PIC] [-memb] 254 [-mlittle|-mlittle-endian|-le|-mbig|-mbig-endian|-be] 255 [-msolaris|-mno-solaris] 256 [-nops=COUNT] 257 258 _Target RL78 options:_ 259 [-mg10] 260 [-m32bit-doubles|-m64bit-doubles] 261 262 _Target RX options:_ 263 [-mlittle-endian|-mbig-endian] 264 [-m32bit-doubles|-m64bit-doubles] 265 [-muse-conventional-section-names] 266 [-msmall-data-limit] 267 [-mpid] 268 [-mrelax] 269 [-mint-register=NUMBER] 270 [-mgcc-abi|-mrx-abi] 271 272 _Target s390 options:_ 273 [-m31|-m64] [-mesa|-mzarch] [-march=CPU] 274 [-mregnames|-mno-regnames] 275 [-mwarn-areg-zero] 276 277 _Target SCORE options:_ 278 [-EB][-EL][-FIXDD][-NWARN] 279 [-SCORE5][-SCORE5U][-SCORE7][-SCORE3] 280 [-march=score7][-march=score3] 281 [-USE_R1][-KPIC][-O0][-G NUM][-V] 282 283 _Target SPARC options:_ 284 [-Av6|-Av7|-Av8|-Asparclet|-Asparclite 285 -Av8plus|-Av8plusa|-Av9|-Av9a] 286 [-xarch=v8plus|-xarch=v8plusa] [-bump] 287 [-32|-64] 288 289 _Target TIC54X options:_ 290 [-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf] 291 [-merrors-to-file <FILENAME>|-me <FILENAME>] 292 293 _Target TIC6X options:_ 294 [-march=ARCH] [-mbig-endian|-mlittle-endian] 295 [-mdsbt|-mno-dsbt] [-mpid=no|-mpid=near|-mpid=far] 296 [-mpic|-mno-pic] 297 298 _Target TILE-Gx options:_ 299 [-m32|-m64][-EB][-EL] 300 301 _Target Visium options:_ 302 [-mtune=ARCH] 303 304 _Target Xtensa options:_ 305 [-[no-]text-section-literals] [-[no-]auto-litpools] 306 [-[no-]absolute-literals] 307 [-[no-]target-align] [-[no-]longcalls] 308 [-[no-]transform] 309 [-rename-section OLDNAME=NEWNAME] 310 [-[no-]trampolines] 311 312 _Target Z80 options:_ 313 [-z80] [-r800] 314 [ -ignore-undocumented-instructions] [-Wnud] 315 [ -ignore-unportable-instructions] [-Wnup] 316 [ -warn-undocumented-instructions] [-Wud] 317 [ -warn-unportable-instructions] [-Wup] 318 [ -forbid-undocumented-instructions] [-Fud] 319 [ -forbid-unportable-instructions] [-Fup] 320 321`@FILE' 322 Read command-line options from FILE. The options read are 323 inserted in place of the original @FILE option. If FILE does not 324 exist, or cannot be read, then the option will be treated 325 literally, and not removed. 326 327 Options in FILE are separated by whitespace. A whitespace 328 character may be included in an option by surrounding the entire 329 option in either single or double quotes. Any character 330 (including a backslash) may be included by prefixing the character 331 to be included with a backslash. The FILE may itself contain 332 additional @FILE options; any such options will be processed 333 recursively. 334 335`-a[cdghlmns]' 336 Turn on listings, in any of a variety of ways: 337 338 `-ac' 339 omit false conditionals 340 341 `-ad' 342 omit debugging directives 343 344 `-ag' 345 include general information, like as version and options 346 passed 347 348 `-ah' 349 include high-level source 350 351 `-al' 352 include assembly 353 354 `-am' 355 include macro expansions 356 357 `-an' 358 omit forms processing 359 360 `-as' 361 include symbols 362 363 `=file' 364 set the name of the listing file 365 366 You may combine these options; for example, use `-aln' for assembly 367 listing without forms processing. The `=file' option, if used, 368 must be the last one. By itself, `-a' defaults to `-ahls'. 369 370`--alternate' 371 Begin in alternate macro mode. *Note `.altmacro': Altmacro. 372 373`--compress-debug-sections' 374 Compress DWARF debug sections using zlib with SHF_COMPRESSED from 375 the ELF ABI. The resulting object file may not be compatible with 376 older linkers and object file utilities. Note if compression 377 would make a given section _larger_ then it is not compressed. 378 379`--compress-debug-sections=none' 380`--compress-debug-sections=zlib' 381`--compress-debug-sections=zlib-gnu' 382`--compress-debug-sections=zlib-gabi' 383 These options control how DWARF debug sections are compressed. 384 `--compress-debug-sections=none' is equivalent to 385 `--nocompress-debug-sections'. `--compress-debug-sections=zlib' 386 and `--compress-debug-sections=zlib-gabi' are equivalent to 387 `--compress-debug-sections'. `--compress-debug-sections=zlib-gnu' 388 compresses DWARF debug sections using zlib. The debug sections 389 are renamed to begin with `.zdebug'. Note if compression would 390 make a given section _larger_ then it is not compressed nor 391 renamed. 392 393`--nocompress-debug-sections' 394 Do not compress DWARF debug sections. This is usually the default 395 for all targets except the x86/x86_64, but a configure time option 396 can be used to override this. 397 398`-D' 399 Ignored. This option is accepted for script compatibility with 400 calls to other assemblers. 401 402`--debug-prefix-map OLD=NEW' 403 When assembling files in directory `OLD', record debugging 404 information describing them as in `NEW' instead. 405 406`--defsym SYM=VALUE' 407 Define the symbol SYM to be VALUE before assembling the input file. 408 VALUE must be an integer constant. As in C, a leading `0x' 409 indicates a hexadecimal value, and a leading `0' indicates an octal 410 value. The value of the symbol can be overridden inside a source 411 file via the use of a `.set' pseudo-op. 412 413`-f' 414 "fast"--skip whitespace and comment preprocessing (assume source is 415 compiler output). 416 417`-g' 418`--gen-debug' 419 Generate debugging information for each assembler source line 420 using whichever debug format is preferred by the target. This 421 currently means either STABS, ECOFF or DWARF2. 422 423`--gstabs' 424 Generate stabs debugging information for each assembler line. This 425 may help debugging assembler code, if the debugger can handle it. 426 427`--gstabs+' 428 Generate stabs debugging information for each assembler line, with 429 GNU extensions that probably only gdb can handle, and that could 430 make other debuggers crash or refuse to read your program. This 431 may help debugging assembler code. Currently the only GNU 432 extension is the location of the current working directory at 433 assembling time. 434 435`--gdwarf-2' 436 Generate DWARF2 debugging information for each assembler line. 437 This may help debugging assembler code, if the debugger can handle 438 it. Note--this option is only supported by some targets, not all 439 of them. 440 441`--gdwarf-sections' 442 Instead of creating a .debug_line section, create a series of 443 .debug_line.FOO sections where FOO is the name of the 444 corresponding code section. For example a code section called 445 .TEXT.FUNC will have its dwarf line number information placed into 446 a section called .DEBUG_LINE.TEXT.FUNC. If the code section is 447 just called .TEXT then debug line section will still be called 448 just .DEBUG_LINE without any suffix. 449 450`--size-check=error' 451`--size-check=warning' 452 Issue an error or warning for invalid ELF .size directive. 453 454`--elf-stt-common=no' 455`--elf-stt-common=yes' 456 These options control whether the ELF assembler should generate 457 common symbols with the `STT_COMMON' type. The default can be 458 controlled by a configure option `--enable-elf-stt-common'. 459 460`--help' 461 Print a summary of the command line options and exit. 462 463`--target-help' 464 Print a summary of all target specific options and exit. 465 466`-I DIR' 467 Add directory DIR to the search list for `.include' directives. 468 469`-J' 470 Don't warn about signed overflow. 471 472`-K' 473 Issue warnings when difference tables altered for long 474 displacements. 475 476`-L' 477`--keep-locals' 478 Keep (in the symbol table) local symbols. These symbols start with 479 system-specific local label prefixes, typically `.L' for ELF 480 systems or `L' for traditional a.out systems. *Note Symbol 481 Names::. 482 483`--listing-lhs-width=NUMBER' 484 Set the maximum width, in words, of the output data column for an 485 assembler listing to NUMBER. 486 487`--listing-lhs-width2=NUMBER' 488 Set the maximum width, in words, of the output data column for 489 continuation lines in an assembler listing to NUMBER. 490 491`--listing-rhs-width=NUMBER' 492 Set the maximum width of an input source line, as displayed in a 493 listing, to NUMBER bytes. 494 495`--listing-cont-lines=NUMBER' 496 Set the maximum number of lines printed in a listing for a single 497 line of input to NUMBER + 1. 498 499`--no-pad-sections' 500 Stop the assembler for padding the ends of output sections to the 501 alignment of that section. The default is to pad the sections, 502 but this can waste space which might be needed on targets which 503 have tight memory constraints. 504 505`-o OBJFILE' 506 Name the object-file output from `as' OBJFILE. 507 508`-R' 509 Fold the data section into the text section. 510 511`--hash-size=NUMBER' 512 Set the default size of GAS's hash tables to a prime number close 513 to NUMBER. Increasing this value can reduce the length of time it 514 takes the assembler to perform its tasks, at the expense of 515 increasing the assembler's memory requirements. Similarly 516 reducing this value can reduce the memory requirements at the 517 expense of speed. 518 519`--reduce-memory-overheads' 520 This option reduces GAS's memory requirements, at the expense of 521 making the assembly processes slower. Currently this switch is a 522 synonym for `--hash-size=4051', but in the future it may have 523 other effects as well. 524 525`--sectname-subst' 526 Honor substitution sequences in section names. *Note `.section 527 NAME': Section Name Substitutions. 528 529`--statistics' 530 Print the maximum space (in bytes) and total time (in seconds) 531 used by assembly. 532 533`--strip-local-absolute' 534 Remove local absolute symbols from the outgoing symbol table. 535 536`-v' 537`-version' 538 Print the `as' version. 539 540`--version' 541 Print the `as' version and exit. 542 543`-W' 544`--no-warn' 545 Suppress warning messages. 546 547`--fatal-warnings' 548 Treat warnings as errors. 549 550`--warn' 551 Don't suppress warning messages or treat them as errors. 552 553`-w' 554 Ignored. 555 556`-x' 557 Ignored. 558 559`-Z' 560 Generate an object file even after errors. 561 562`-- | FILES ...' 563 Standard input, or source files to assemble. 564 565 566 *Note AArch64 Options::, for the options available when as is 567configured for the 64-bit mode of the ARM Architecture (AArch64). 568 569 *Note Alpha Options::, for the options available when as is 570configured for an Alpha processor. 571 572 The following options are available when as is configured for an ARC 573processor. 574 575`-mcpu=CPU' 576 This option selects the core processor variant. 577 578`-EB | -EL' 579 Select either big-endian (-EB) or little-endian (-EL) output. 580 581`-mcode-density' 582 Enable Code Density extenssion instructions. 583 584 The following options are available when as is configured for the ARM 585processor family. 586 587`-mcpu=PROCESSOR[+EXTENSION...]' 588 Specify which ARM processor variant is the target. 589 590`-march=ARCHITECTURE[+EXTENSION...]' 591 Specify which ARM architecture variant is used by the target. 592 593`-mfpu=FLOATING-POINT-FORMAT' 594 Select which Floating Point architecture is the target. 595 596`-mfloat-abi=ABI' 597 Select which floating point ABI is in use. 598 599`-mthumb' 600 Enable Thumb only instruction decoding. 601 602`-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant' 603 Select which procedure calling convention is in use. 604 605`-EB | -EL' 606 Select either big-endian (-EB) or little-endian (-EL) output. 607 608`-mthumb-interwork' 609 Specify that the code has been generated with interworking between 610 Thumb and ARM code in mind. 611 612`-mccs' 613 Turns on CodeComposer Studio assembly syntax compatibility mode. 614 615`-k' 616 Specify that PIC code has been generated. 617 618 *Note Blackfin Options::, for the options available when as is 619configured for the Blackfin processor family. 620 621 See the info pages for documentation of the CRIS-specific options. 622 623 The following options are available when as is configured for a D10V 624processor. 625`-O' 626 Optimize output by parallelizing instructions. 627 628 The following options are available when as is configured for a D30V 629processor. 630`-O' 631 Optimize output by parallelizing instructions. 632 633`-n' 634 Warn when nops are generated. 635 636`-N' 637 Warn when a nop after a 32-bit multiply instruction is generated. 638 639 The following options are available when as is configured for the 640Adapteva EPIPHANY series. 641 642 *Note Epiphany Options::, for the options available when as is 643configured for an Epiphany processor. 644 645 *Note i386-Options::, for the options available when as is 646configured for an i386 processor. 647 648 The following options are available when as is configured for the 649Intel 80960 processor. 650 651`-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC' 652 Specify which variant of the 960 architecture is the target. 653 654`-b' 655 Add code to collect statistics about branches taken. 656 657`-no-relax' 658 Do not alter compare-and-branch instructions for long 659 displacements; error if necessary. 660 661 662 The following options are available when as is configured for the 663Ubicom IP2K series. 664 665`-mip2022ext' 666 Specifies that the extended IP2022 instructions are allowed. 667 668`-mip2022' 669 Restores the default behaviour, which restricts the permitted 670 instructions to just the basic IP2022 ones. 671 672 673 The following options are available when as is configured for the 674Renesas M32C and M16C processors. 675 676`-m32c' 677 Assemble M32C instructions. 678 679`-m16c' 680 Assemble M16C instructions (the default). 681 682`-relax' 683 Enable support for link-time relaxations. 684 685`-h-tick-hex' 686 Support H'00 style hex constants in addition to 0x00 style. 687 688 689 The following options are available when as is configured for the 690Renesas M32R (formerly Mitsubishi M32R) series. 691 692`--m32rx' 693 Specify which processor in the M32R family is the target. The 694 default is normally the M32R, but this option changes it to the 695 M32RX. 696 697`--warn-explicit-parallel-conflicts or --Wp' 698 Produce warning messages when questionable parallel constructs are 699 encountered. 700 701`--no-warn-explicit-parallel-conflicts or --Wnp' 702 Do not produce warning messages when questionable parallel 703 constructs are encountered. 704 705 706 The following options are available when as is configured for the 707Motorola 68000 series. 708 709`-l' 710 Shorten references to undefined symbols, to one word instead of 711 two. 712 713`-m68000 | -m68008 | -m68010 | -m68020 | -m68030' 714`| -m68040 | -m68060 | -m68302 | -m68331 | -m68332' 715`| -m68333 | -m68340 | -mcpu32 | -m5200' 716 Specify what processor in the 68000 family is the target. The 717 default is normally the 68020, but this can be changed at 718 configuration time. 719 720`-m68881 | -m68882 | -mno-68881 | -mno-68882' 721 The target machine does (or does not) have a floating-point 722 coprocessor. The default is to assume a coprocessor for 68020, 723 68030, and cpu32. Although the basic 68000 is not compatible with 724 the 68881, a combination of the two can be specified, since it's 725 possible to do emulation of the coprocessor instructions with the 726 main processor. 727 728`-m68851 | -mno-68851' 729 The target machine does (or does not) have a memory-management 730 unit coprocessor. The default is to assume an MMU for 68020 and 731 up. 732 733 734 *Note Nios II Options::, for the options available when as is 735configured for an Altera Nios II processor. 736 737 For details about the PDP-11 machine dependent features options, see 738*Note PDP-11-Options::. 739 740`-mpic | -mno-pic' 741 Generate position-independent (or position-dependent) code. The 742 default is `-mpic'. 743 744`-mall' 745`-mall-extensions' 746 Enable all instruction set extensions. This is the default. 747 748`-mno-extensions' 749 Disable all instruction set extensions. 750 751`-mEXTENSION | -mno-EXTENSION' 752 Enable (or disable) a particular instruction set extension. 753 754`-mCPU' 755 Enable the instruction set extensions supported by a particular 756 CPU, and disable all other extensions. 757 758`-mMACHINE' 759 Enable the instruction set extensions supported by a particular 760 machine model, and disable all other extensions. 761 762 The following options are available when as is configured for a 763picoJava processor. 764 765`-mb' 766 Generate "big endian" format output. 767 768`-ml' 769 Generate "little endian" format output. 770 771 772 The following options are available when as is configured for the 773Motorola 68HC11 or 68HC12 series. 774 775`-m68hc11 | -m68hc12 | -m68hcs12 | -mm9s12x | -mm9s12xg' 776 Specify what processor is the target. The default is defined by 777 the configuration option when building the assembler. 778 779`--xgate-ramoffset' 780 Instruct the linker to offset RAM addresses from S12X address 781 space into XGATE address space. 782 783`-mshort' 784 Specify to use the 16-bit integer ABI. 785 786`-mlong' 787 Specify to use the 32-bit integer ABI. 788 789`-mshort-double' 790 Specify to use the 32-bit double ABI. 791 792`-mlong-double' 793 Specify to use the 64-bit double ABI. 794 795`--force-long-branches' 796 Relative branches are turned into absolute ones. This concerns 797 conditional branches, unconditional branches and branches to a sub 798 routine. 799 800`-S | --short-branches' 801 Do not turn relative branches into absolute ones when the offset 802 is out of range. 803 804`--strict-direct-mode' 805 Do not turn the direct addressing mode into extended addressing 806 mode when the instruction does not support direct addressing mode. 807 808`--print-insn-syntax' 809 Print the syntax of instruction in case of error. 810 811`--print-opcodes' 812 Print the list of instructions with syntax and then exit. 813 814`--generate-example' 815 Print an example of instruction for each possible instruction and 816 then exit. This option is only useful for testing `as'. 817 818 819 The following options are available when `as' is configured for the 820SPARC architecture: 821 822`-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite' 823`-Av8plus | -Av8plusa | -Av9 | -Av9a' 824 Explicitly select a variant of the SPARC architecture. 825 826 `-Av8plus' and `-Av8plusa' select a 32 bit environment. `-Av9' 827 and `-Av9a' select a 64 bit environment. 828 829 `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with 830 UltraSPARC extensions. 831 832`-xarch=v8plus | -xarch=v8plusa' 833 For compatibility with the Solaris v9 assembler. These options are 834 equivalent to -Av8plus and -Av8plusa, respectively. 835 836`-bump' 837 Warn when the assembler switches to another architecture. 838 839 The following options are available when as is configured for the 840'c54x architecture. 841 842`-mfar-mode' 843 Enable extended addressing mode. All addresses and relocations 844 will assume extended addressing (usually 23 bits). 845 846`-mcpu=CPU_VERSION' 847 Sets the CPU version being compiled for. 848 849`-merrors-to-file FILENAME' 850 Redirect error output to a file, for broken systems which don't 851 support such behaviour in the shell. 852 853 The following options are available when as is configured for a MIPS 854processor. 855 856`-G NUM' 857 This option sets the largest size of an object that can be 858 referenced implicitly with the `gp' register. It is only accepted 859 for targets that use ECOFF format, such as a DECstation running 860 Ultrix. The default value is 8. 861 862`-EB' 863 Generate "big endian" format output. 864 865`-EL' 866 Generate "little endian" format output. 867 868`-mips1' 869`-mips2' 870`-mips3' 871`-mips4' 872`-mips5' 873`-mips32' 874`-mips32r2' 875`-mips32r3' 876`-mips32r5' 877`-mips32r6' 878`-mips64' 879`-mips64r2' 880`-mips64r3' 881`-mips64r5' 882`-mips64r6' 883 Generate code for a particular MIPS Instruction Set Architecture 884 level. `-mips1' is an alias for `-march=r3000', `-mips2' is an 885 alias for `-march=r6000', `-mips3' is an alias for `-march=r4000' 886 and `-mips4' is an alias for `-march=r8000'. `-mips5', `-mips32', 887 `-mips32r2', `-mips32r3', `-mips32r5', `-mips32r6', `-mips64', 888 `-mips64r2', `-mips64r3', `-mips64r5', and `-mips64r6' correspond 889 to generic MIPS V, MIPS32, MIPS32 Release 2, MIPS32 Release 3, 890 MIPS32 Release 5, MIPS32 Release 6, MIPS64, MIPS64 Release 2, 891 MIPS64 Release 3, MIPS64 Release 5, and MIPS64 Release 6 ISA 892 processors, respectively. 893 894`-march=CPU' 895 Generate code for a particular MIPS CPU. 896 897`-mtune=CPU' 898 Schedule and tune for a particular MIPS CPU. 899 900`-mfix7000' 901`-mno-fix7000' 902 Cause nops to be inserted if the read of the destination register 903 of an mfhi or mflo instruction occurs in the following two 904 instructions. 905 906`-mfix-rm7000' 907`-mno-fix-rm7000' 908 Cause nops to be inserted if a dmult or dmultu instruction is 909 followed by a load instruction. 910 911`-mdebug' 912`-no-mdebug' 913 Cause stabs-style debugging output to go into an ECOFF-style 914 .mdebug section instead of the standard ELF .stabs sections. 915 916`-mpdr' 917`-mno-pdr' 918 Control generation of `.pdr' sections. 919 920`-mgp32' 921`-mfp32' 922 The register sizes are normally inferred from the ISA and ABI, but 923 these flags force a certain group of registers to be treated as 32 924 bits wide at all times. `-mgp32' controls the size of 925 general-purpose registers and `-mfp32' controls the size of 926 floating-point registers. 927 928`-mgp64' 929`-mfp64' 930 The register sizes are normally inferred from the ISA and ABI, but 931 these flags force a certain group of registers to be treated as 64 932 bits wide at all times. `-mgp64' controls the size of 933 general-purpose registers and `-mfp64' controls the size of 934 floating-point registers. 935 936`-mfpxx' 937 The register sizes are normally inferred from the ISA and ABI, but 938 using this flag in combination with `-mabi=32' enables an ABI 939 variant which will operate correctly with floating-point registers 940 which are 32 or 64 bits wide. 941 942`-modd-spreg' 943`-mno-odd-spreg' 944 Enable use of floating-point operations on odd-numbered 945 single-precision registers when supported by the ISA. `-mfpxx' 946 implies `-mno-odd-spreg', otherwise the default is `-modd-spreg'. 947 948`-mips16' 949`-no-mips16' 950 Generate code for the MIPS 16 processor. This is equivalent to 951 putting `.set mips16' at the start of the assembly file. 952 `-no-mips16' turns off this option. 953 954`-mmicromips' 955`-mno-micromips' 956 Generate code for the microMIPS processor. This is equivalent to 957 putting `.set micromips' at the start of the assembly file. 958 `-mno-micromips' turns off this option. This is equivalent to 959 putting `.set nomicromips' at the start of the assembly file. 960 961`-msmartmips' 962`-mno-smartmips' 963 Enables the SmartMIPS extension to the MIPS32 instruction set. 964 This is equivalent to putting `.set smartmips' at the start of the 965 assembly file. `-mno-smartmips' turns off this option. 966 967`-mips3d' 968`-no-mips3d' 969 Generate code for the MIPS-3D Application Specific Extension. 970 This tells the assembler to accept MIPS-3D instructions. 971 `-no-mips3d' turns off this option. 972 973`-mdmx' 974`-no-mdmx' 975 Generate code for the MDMX Application Specific Extension. This 976 tells the assembler to accept MDMX instructions. `-no-mdmx' turns 977 off this option. 978 979`-mdsp' 980`-mno-dsp' 981 Generate code for the DSP Release 1 Application Specific Extension. 982 This tells the assembler to accept DSP Release 1 instructions. 983 `-mno-dsp' turns off this option. 984 985`-mdspr2' 986`-mno-dspr2' 987 Generate code for the DSP Release 2 Application Specific Extension. 988 This option implies `-mdsp'. This tells the assembler to accept 989 DSP Release 2 instructions. `-mno-dspr2' turns off this option. 990 991`-mdspr3' 992`-mno-dspr3' 993 Generate code for the DSP Release 3 Application Specific Extension. 994 This option implies `-mdsp' and `-mdspr2'. This tells the 995 assembler to accept DSP Release 3 instructions. `-mno-dspr3' 996 turns off this option. 997 998`-mmsa' 999`-mno-msa' 1000 Generate code for the MIPS SIMD Architecture Extension. This 1001 tells the assembler to accept MSA instructions. `-mno-msa' turns 1002 off this option. 1003 1004`-mxpa' 1005`-mno-xpa' 1006 Generate code for the MIPS eXtended Physical Address (XPA) 1007 Extension. This tells the assembler to accept XPA instructions. 1008 `-mno-xpa' turns off this option. 1009 1010`-mmt' 1011`-mno-mt' 1012 Generate code for the MT Application Specific Extension. This 1013 tells the assembler to accept MT instructions. `-mno-mt' turns 1014 off this option. 1015 1016`-mmcu' 1017`-mno-mcu' 1018 Generate code for the MCU Application Specific Extension. This 1019 tells the assembler to accept MCU instructions. `-mno-mcu' turns 1020 off this option. 1021 1022`-minsn32' 1023`-mno-insn32' 1024 Only use 32-bit instruction encodings when generating code for the 1025 microMIPS processor. This option inhibits the use of any 16-bit 1026 instructions. This is equivalent to putting `.set insn32' at the 1027 start of the assembly file. `-mno-insn32' turns off this option. 1028 This is equivalent to putting `.set noinsn32' at the start of the 1029 assembly file. By default `-mno-insn32' is selected, allowing all 1030 instructions to be used. 1031 1032`--construct-floats' 1033`--no-construct-floats' 1034 The `--no-construct-floats' option disables the construction of 1035 double width floating point constants by loading the two halves of 1036 the value into the two single width floating point registers that 1037 make up the double width register. By default 1038 `--construct-floats' is selected, allowing construction of these 1039 floating point constants. 1040 1041`--relax-branch' 1042`--no-relax-branch' 1043 The `--relax-branch' option enables the relaxation of out-of-range 1044 branches. By default `--no-relax-branch' is selected, causing any 1045 out-of-range branches to produce an error. 1046 1047`-mnan=ENCODING' 1048 Select between the IEEE 754-2008 (`-mnan=2008') or the legacy 1049 (`-mnan=legacy') NaN encoding format. The latter is the default. 1050 1051`--emulation=NAME' 1052 This option was formerly used to switch between ELF and ECOFF 1053 output on targets like IRIX 5 that supported both. MIPS ECOFF 1054 support was removed in GAS 2.24, so the option now serves little 1055 purpose. It is retained for backwards compatibility. 1056 1057 The available configuration names are: `mipself', `mipslelf' and 1058 `mipsbelf'. Choosing `mipself' now has no effect, since the output 1059 is always ELF. `mipslelf' and `mipsbelf' select little- and 1060 big-endian output respectively, but `-EL' and `-EB' are now the 1061 preferred options instead. 1062 1063`-nocpp' 1064 `as' ignores this option. It is accepted for compatibility with 1065 the native tools. 1066 1067`--trap' 1068`--no-trap' 1069`--break' 1070`--no-break' 1071 Control how to deal with multiplication overflow and division by 1072 zero. `--trap' or `--no-break' (which are synonyms) take a trap 1073 exception (and only work for Instruction Set Architecture level 2 1074 and higher); `--break' or `--no-trap' (also synonyms, and the 1075 default) take a break exception. 1076 1077`-n' 1078 When this option is used, `as' will issue a warning every time it 1079 generates a nop instruction from a macro. 1080 1081 The following options are available when as is configured for an 1082MCore processor. 1083 1084`-jsri2bsr' 1085`-nojsri2bsr' 1086 Enable or disable the JSRI to BSR transformation. By default this 1087 is enabled. The command line option `-nojsri2bsr' can be used to 1088 disable it. 1089 1090`-sifilter' 1091`-nosifilter' 1092 Enable or disable the silicon filter behaviour. By default this 1093 is disabled. The default can be overridden by the `-sifilter' 1094 command line option. 1095 1096`-relax' 1097 Alter jump instructions for long displacements. 1098 1099`-mcpu=[210|340]' 1100 Select the cpu type on the target hardware. This controls which 1101 instructions can be assembled. 1102 1103`-EB' 1104 Assemble for a big endian target. 1105 1106`-EL' 1107 Assemble for a little endian target. 1108 1109 1110 *Note Meta Options::, for the options available when as is configured 1111for a Meta processor. 1112 1113 See the info pages for documentation of the MMIX-specific options. 1114 1115 *Note NDS32 Options::, for the options available when as is 1116configured for a NDS32 processor. 1117 1118 *Note PowerPC-Opts::, for the options available when as is configured 1119for a PowerPC processor. 1120 1121 See the info pages for documentation of the RX-specific options. 1122 1123 The following options are available when as is configured for the 1124s390 processor family. 1125 1126`-m31' 1127`-m64' 1128 Select the word size, either 31/32 bits or 64 bits. 1129 1130`-mesa' 1131 1132`-mzarch' 1133 Select the architecture mode, either the Enterprise System 1134 Architecture (esa) or the z/Architecture mode (zarch). 1135 1136`-march=PROCESSOR' 1137 Specify which s390 processor variant is the target, `g6', `g6', 1138 `z900', `z990', `z9-109', `z9-ec', `z10', `z196', `zEC12', or 1139 `z13'. 1140 1141`-mregnames' 1142`-mno-regnames' 1143 Allow or disallow symbolic names for registers. 1144 1145`-mwarn-areg-zero' 1146 Warn whenever the operand for a base or index register has been 1147 specified but evaluates to zero. 1148 1149 *Note TIC6X Options::, for the options available when as is 1150configured for a TMS320C6000 processor. 1151 1152 *Note TILE-Gx Options::, for the options available when as is 1153configured for a TILE-Gx processor. 1154 1155 *Note Visium Options::, for the options available when as is 1156configured for a Visium processor. 1157 1158 *Note Xtensa Options::, for the options available when as is 1159configured for an Xtensa processor. 1160 1161 The following options are available when as is configured for a Z80 1162family processor. 1163`-z80' 1164 Assemble for Z80 processor. 1165 1166`-r800' 1167 Assemble for R800 processor. 1168 1169`-ignore-undocumented-instructions' 1170`-Wnud' 1171 Assemble undocumented Z80 instructions that also work on R800 1172 without warning. 1173 1174`-ignore-unportable-instructions' 1175`-Wnup' 1176 Assemble all undocumented Z80 instructions without warning. 1177 1178`-warn-undocumented-instructions' 1179`-Wud' 1180 Issue a warning for undocumented Z80 instructions that also work 1181 on R800. 1182 1183`-warn-unportable-instructions' 1184`-Wup' 1185 Issue a warning for undocumented Z80 instructions that do not work 1186 on R800. 1187 1188`-forbid-undocumented-instructions' 1189`-Fud' 1190 Treat all undocumented instructions as errors. 1191 1192`-forbid-unportable-instructions' 1193`-Fup' 1194 Treat undocumented Z80 instructions that do not work on R800 as 1195 errors. 1196 1197* Menu: 1198 1199* Manual:: Structure of this Manual 1200* GNU Assembler:: The GNU Assembler 1201* Object Formats:: Object File Formats 1202* Command Line:: Command Line 1203* Input Files:: Input Files 1204* Object:: Output (Object) File 1205* Errors:: Error and Warning Messages 1206 1207 1208File: as.info, Node: Manual, Next: GNU Assembler, Up: Overview 1209 12101.1 Structure of this Manual 1211============================ 1212 1213This manual is intended to describe what you need to know to use GNU 1214`as'. We cover the syntax expected in source files, including notation 1215for symbols, constants, and expressions; the directives that `as' 1216understands; and of course how to invoke `as'. 1217 1218 This manual also describes some of the machine-dependent features of 1219various flavors of the assembler. 1220 1221 On the other hand, this manual is _not_ intended as an introduction 1222to programming in assembly language--let alone programming in general! 1223In a similar vein, we make no attempt to introduce the machine 1224architecture; we do _not_ describe the instruction set, standard 1225mnemonics, registers or addressing modes that are standard to a 1226particular architecture. You may want to consult the manufacturer's 1227machine architecture manual for this information. 1228 1229 1230File: as.info, Node: GNU Assembler, Next: Object Formats, Prev: Manual, Up: Overview 1231 12321.2 The GNU Assembler 1233===================== 1234 1235GNU `as' is really a family of assemblers. If you use (or have used) 1236the GNU assembler on one architecture, you should find a fairly similar 1237environment when you use it on another architecture. Each version has 1238much in common with the others, including object file formats, most 1239assembler directives (often called "pseudo-ops") and assembler syntax. 1240 1241 `as' is primarily intended to assemble the output of the GNU C 1242compiler `gcc' for use by the linker `ld'. Nevertheless, we've tried 1243to make `as' assemble correctly everything that other assemblers for 1244the same machine would assemble. Any exceptions are documented 1245explicitly (*note Machine Dependencies::). This doesn't mean `as' 1246always uses the same syntax as another assembler for the same 1247architecture; for example, we know of several incompatible versions of 1248680x0 assembly language syntax. 1249 1250 Unlike older assemblers, `as' is designed to assemble a source 1251program in one pass of the source file. This has a subtle impact on the 1252`.org' directive (*note `.org': Org.). 1253 1254 1255File: as.info, Node: Object Formats, Next: Command Line, Prev: GNU Assembler, Up: Overview 1256 12571.3 Object File Formats 1258======================= 1259 1260The GNU assembler can be configured to produce several alternative 1261object file formats. For the most part, this does not affect how you 1262write assembly language programs; but directives for debugging symbols 1263are typically different in different file formats. *Note Symbol 1264Attributes: Symbol Attributes. 1265 1266 1267File: as.info, Node: Command Line, Next: Input Files, Prev: Object Formats, Up: Overview 1268 12691.4 Command Line 1270================ 1271 1272After the program name `as', the command line may contain options and 1273file names. Options may appear in any order, and may be before, after, 1274or between file names. The order of file names is significant. 1275 1276 `--' (two hyphens) by itself names the standard input file 1277explicitly, as one of the files for `as' to assemble. 1278 1279 Except for `--' any command line argument that begins with a hyphen 1280(`-') is an option. Each option changes the behavior of `as'. No 1281option changes the way another option works. An option is a `-' 1282followed by one or more letters; the case of the letter is important. 1283All options are optional. 1284 1285 Some options expect exactly one file name to follow them. The file 1286name may either immediately follow the option's letter (compatible with 1287older assemblers) or it may be the next command argument (GNU 1288standard). These two command lines are equivalent: 1289 1290 as -o my-object-file.o mumble.s 1291 as -omy-object-file.o mumble.s 1292 1293 1294File: as.info, Node: Input Files, Next: Object, Prev: Command Line, Up: Overview 1295 12961.5 Input Files 1297=============== 1298 1299We use the phrase "source program", abbreviated "source", to describe 1300the program input to one run of `as'. The program may be in one or 1301more files; how the source is partitioned into files doesn't change the 1302meaning of the source. 1303 1304 The source program is a concatenation of the text in all the files, 1305in the order specified. 1306 1307 Each time you run `as' it assembles exactly one source program. The 1308source program is made up of one or more files. (The standard input is 1309also a file.) 1310 1311 You give `as' a command line that has zero or more input file names. 1312The input files are read (from left file name to right). A command 1313line argument (in any position) that has no special meaning is taken to 1314be an input file name. 1315 1316 If you give `as' no file names it attempts to read one input file 1317from the `as' standard input, which is normally your terminal. You may 1318have to type <ctl-D> to tell `as' there is no more program to assemble. 1319 1320 Use `--' if you need to explicitly name the standard input file in 1321your command line. 1322 1323 If the source is empty, `as' produces a small, empty object file. 1324 1325Filenames and Line-numbers 1326-------------------------- 1327 1328There are two ways of locating a line in the input file (or files) and 1329either may be used in reporting error messages. One way refers to a 1330line number in a physical file; the other refers to a line number in a 1331"logical" file. *Note Error and Warning Messages: Errors. 1332 1333 "Physical files" are those files named in the command line given to 1334`as'. 1335 1336 "Logical files" are simply names declared explicitly by assembler 1337directives; they bear no relation to physical files. Logical file 1338names help error messages reflect the original source file, when `as' 1339source is itself synthesized from other files. `as' understands the 1340`#' directives emitted by the `gcc' preprocessor. See also *Note 1341`.file': File. 1342 1343 1344File: as.info, Node: Object, Next: Errors, Prev: Input Files, Up: Overview 1345 13461.6 Output (Object) File 1347======================== 1348 1349Every time you run `as' it produces an output file, which is your 1350assembly language program translated into numbers. This file is the 1351object file. Its default name is `a.out'. You can give it another 1352name by using the `-o' option. Conventionally, object file names end 1353with `.o'. The default name is used for historical reasons: older 1354assemblers were capable of assembling self-contained programs directly 1355into a runnable program. (For some formats, this isn't currently 1356possible, but it can be done for the `a.out' format.) 1357 1358 The object file is meant for input to the linker `ld'. It contains 1359assembled program code, information to help `ld' integrate the 1360assembled program into a runnable file, and (optionally) symbolic 1361information for the debugger. 1362 1363 1364File: as.info, Node: Errors, Prev: Object, Up: Overview 1365 13661.7 Error and Warning Messages 1367============================== 1368 1369`as' may write warnings and error messages to the standard error file 1370(usually your terminal). This should not happen when a compiler runs 1371`as' automatically. Warnings report an assumption made so that `as' 1372could keep assembling a flawed program; errors report a grave problem 1373that stops the assembly. 1374 1375 Warning messages have the format 1376 1377 file_name:NNN:Warning Message Text 1378 1379(where NNN is a line number). If both a logical file name (*note 1380`.file': File.) and a logical line number (*note `.line': Line.) have 1381been given then they will be used, otherwise the file name and line 1382number in the current assembler source file will be used. The message 1383text is intended to be self explanatory (in the grand Unix tradition). 1384 1385 Note the file name must be set via the logical version of the `.file' 1386directive, not the DWARF2 version of the `.file' directive. For 1387example: 1388 1389 .file 2 "bar.c" 1390 error_assembler_source 1391 .file "foo.c" 1392 .line 30 1393 error_c_source 1394 1395 produces this output: 1396 1397 Assembler messages: 1398 asm.s:2: Error: no such instruction: `error_assembler_source' 1399 foo.c:31: Error: no such instruction: `error_c_source' 1400 1401 Error messages have the format 1402 1403 file_name:NNN:FATAL:Error Message Text 1404 1405 The file name and line number are derived as for warning messages. 1406The actual message text may be rather less explanatory because many of 1407them aren't supposed to happen. 1408 1409 1410File: as.info, Node: Invoking, Next: Syntax, Prev: Overview, Up: Top 1411 14122 Command-Line Options 1413********************** 1414 1415This chapter describes command-line options available in _all_ versions 1416of the GNU assembler; see *Note Machine Dependencies::, for options 1417specific to particular machine architectures. 1418 1419 If you are invoking `as' via the GNU C compiler, you can use the 1420`-Wa' option to pass arguments through to the assembler. The assembler 1421arguments must be separated from each other (and the `-Wa') by commas. 1422For example: 1423 1424 gcc -c -g -O -Wa,-alh,-L file.c 1425 1426This passes two options to the assembler: `-alh' (emit a listing to 1427standard output with high-level and assembly source) and `-L' (retain 1428local symbols in the symbol table). 1429 1430 Usually you do not need to use this `-Wa' mechanism, since many 1431compiler command-line options are automatically passed to the assembler 1432by the compiler. (You can call the GNU compiler driver with the `-v' 1433option to see precisely what options it passes to each compilation 1434pass, including the assembler.) 1435 1436* Menu: 1437 1438* a:: -a[cdghlns] enable listings 1439* alternate:: --alternate enable alternate macro syntax 1440* D:: -D for compatibility 1441* f:: -f to work faster 1442* I:: -I for .include search path 1443 1444* K:: -K for difference tables 1445 1446* L:: -L to retain local symbols 1447* listing:: --listing-XXX to configure listing output 1448* M:: -M or --mri to assemble in MRI compatibility mode 1449* MD:: --MD for dependency tracking 1450* no-pad-sections:: --no-pad-sections to stop section padding 1451* o:: -o to name the object file 1452* R:: -R to join data and text sections 1453* statistics:: --statistics to see statistics about assembly 1454* traditional-format:: --traditional-format for compatible output 1455* v:: -v to announce version 1456* W:: -W, --no-warn, --warn, --fatal-warnings to control warnings 1457* Z:: -Z to make object file even after errors 1458 1459 1460File: as.info, Node: a, Next: alternate, Up: Invoking 1461 14622.1 Enable Listings: `-a[cdghlns]' 1463================================== 1464 1465These options enable listing output from the assembler. By itself, 1466`-a' requests high-level, assembly, and symbols listing. You can use 1467other letters to select specific options for the list: `-ah' requests a 1468high-level language listing, `-al' requests an output-program assembly 1469listing, and `-as' requests a symbol table listing. High-level 1470listings require that a compiler debugging option like `-g' be used, 1471and that assembly listings (`-al') be requested also. 1472 1473 Use the `-ag' option to print a first section with general assembly 1474information, like as version, switches passed, or time stamp. 1475 1476 Use the `-ac' option to omit false conditionals from a listing. Any 1477lines which are not assembled because of a false `.if' (or `.ifdef', or 1478any other conditional), or a true `.if' followed by an `.else', will be 1479omitted from the listing. 1480 1481 Use the `-ad' option to omit debugging directives from the listing. 1482 1483 Once you have specified one of these options, you can further control 1484listing output and its appearance using the directives `.list', 1485`.nolist', `.psize', `.eject', `.title', and `.sbttl'. The `-an' 1486option turns off all forms processing. If you do not request listing 1487output with one of the `-a' options, the listing-control directives 1488have no effect. 1489 1490 The letters after `-a' may be combined into one option, _e.g._, 1491`-aln'. 1492 1493 Note if the assembler source is coming from the standard input (e.g., 1494because it is being created by `gcc' and the `-pipe' command line switch 1495is being used) then the listing will not contain any comments or 1496preprocessor directives. This is because the listing code buffers 1497input source lines from stdin only after they have been preprocessed by 1498the assembler. This reduces memory usage and makes the code more 1499efficient. 1500 1501 1502File: as.info, Node: alternate, Next: D, Prev: a, Up: Invoking 1503 15042.2 `--alternate' 1505================= 1506 1507Begin in alternate macro mode, see *Note `.altmacro': Altmacro. 1508 1509 1510File: as.info, Node: D, Next: f, Prev: alternate, Up: Invoking 1511 15122.3 `-D' 1513======== 1514 1515This option has no effect whatsoever, but it is accepted to make it more 1516likely that scripts written for other assemblers also work with `as'. 1517 1518 1519File: as.info, Node: f, Next: I, Prev: D, Up: Invoking 1520 15212.4 Work Faster: `-f' 1522===================== 1523 1524`-f' should only be used when assembling programs written by a 1525(trusted) compiler. `-f' stops the assembler from doing whitespace and 1526comment preprocessing on the input file(s) before assembling them. 1527*Note Preprocessing: Preprocessing. 1528 1529 _Warning:_ if you use `-f' when the files actually need to be 1530 preprocessed (if they contain comments, for example), `as' does 1531 not work correctly. 1532 1533 1534File: as.info, Node: I, Next: K, Prev: f, Up: Invoking 1535 15362.5 `.include' Search Path: `-I' PATH 1537===================================== 1538 1539Use this option to add a PATH to the list of directories `as' searches 1540for files specified in `.include' directives (*note `.include': 1541Include.). You may use `-I' as many times as necessary to include a 1542variety of paths. The current working directory is always searched 1543first; after that, `as' searches any `-I' directories in the same order 1544as they were specified (left to right) on the command line. 1545 1546 1547File: as.info, Node: K, Next: L, Prev: I, Up: Invoking 1548 15492.6 Difference Tables: `-K' 1550=========================== 1551 1552`as' sometimes alters the code emitted for directives of the form 1553`.word SYM1-SYM2'. *Note `.word': Word. You can use the `-K' option 1554if you want a warning issued when this is done. 1555 1556 1557File: as.info, Node: L, Next: listing, Prev: K, Up: Invoking 1558 15592.7 Include Local Symbols: `-L' 1560=============================== 1561 1562Symbols beginning with system-specific local label prefixes, typically 1563`.L' for ELF systems or `L' for traditional a.out systems, are called 1564"local symbols". *Note Symbol Names::. Normally you do not see such 1565symbols when debugging, because they are intended for the use of 1566programs (like compilers) that compose assembler programs, not for your 1567notice. Normally both `as' and `ld' discard such symbols, so you do 1568not normally debug with them. 1569 1570 This option tells `as' to retain those local symbols in the object 1571file. Usually if you do this you also tell the linker `ld' to preserve 1572those symbols. 1573 1574 1575File: as.info, Node: listing, Next: M, Prev: L, Up: Invoking 1576 15772.8 Configuring listing output: `--listing' 1578=========================================== 1579 1580The listing feature of the assembler can be enabled via the command 1581line switch `-a' (*note a::). This feature combines the input source 1582file(s) with a hex dump of the corresponding locations in the output 1583object file, and displays them as a listing file. The format of this 1584listing can be controlled by directives inside the assembler source 1585(i.e., `.list' (*note List::), `.title' (*note Title::), `.sbttl' 1586(*note Sbttl::), `.psize' (*note Psize::), and `.eject' (*note Eject::) 1587and also by the following switches: 1588 1589`--listing-lhs-width=`number'' 1590 Sets the maximum width, in words, of the first line of the hex 1591 byte dump. This dump appears on the left hand side of the listing 1592 output. 1593 1594`--listing-lhs-width2=`number'' 1595 Sets the maximum width, in words, of any further lines of the hex 1596 byte dump for a given input source line. If this value is not 1597 specified, it defaults to being the same as the value specified 1598 for `--listing-lhs-width'. If neither switch is used the default 1599 is to one. 1600 1601`--listing-rhs-width=`number'' 1602 Sets the maximum width, in characters, of the source line that is 1603 displayed alongside the hex dump. The default value for this 1604 parameter is 100. The source line is displayed on the right hand 1605 side of the listing output. 1606 1607`--listing-cont-lines=`number'' 1608 Sets the maximum number of continuation lines of hex dump that 1609 will be displayed for a given single line of source input. The 1610 default value is 4. 1611 1612 1613File: as.info, Node: M, Next: MD, Prev: listing, Up: Invoking 1614 16152.9 Assemble in MRI Compatibility Mode: `-M' 1616============================================ 1617 1618The `-M' or `--mri' option selects MRI compatibility mode. This 1619changes the syntax and pseudo-op handling of `as' to make it compatible 1620with the `ASM68K' or the `ASM960' (depending upon the configured 1621target) assembler from Microtec Research. The exact nature of the MRI 1622syntax will not be documented here; see the MRI manuals for more 1623information. Note in particular that the handling of macros and macro 1624arguments is somewhat different. The purpose of this option is to 1625permit assembling existing MRI assembler code using `as'. 1626 1627 The MRI compatibility is not complete. Certain operations of the 1628MRI assembler depend upon its object file format, and can not be 1629supported using other object file formats. Supporting these would 1630require enhancing each object file format individually. These are: 1631 1632 * global symbols in common section 1633 1634 The m68k MRI assembler supports common sections which are merged 1635 by the linker. Other object file formats do not support this. 1636 `as' handles common sections by treating them as a single common 1637 symbol. It permits local symbols to be defined within a common 1638 section, but it can not support global symbols, since it has no 1639 way to describe them. 1640 1641 * complex relocations 1642 1643 The MRI assemblers support relocations against a negated section 1644 address, and relocations which combine the start addresses of two 1645 or more sections. These are not support by other object file 1646 formats. 1647 1648 * `END' pseudo-op specifying start address 1649 1650 The MRI `END' pseudo-op permits the specification of a start 1651 address. This is not supported by other object file formats. The 1652 start address may instead be specified using the `-e' option to 1653 the linker, or in a linker script. 1654 1655 * `IDNT', `.ident' and `NAME' pseudo-ops 1656 1657 The MRI `IDNT', `.ident' and `NAME' pseudo-ops assign a module 1658 name to the output file. This is not supported by other object 1659 file formats. 1660 1661 * `ORG' pseudo-op 1662 1663 The m68k MRI `ORG' pseudo-op begins an absolute section at a given 1664 address. This differs from the usual `as' `.org' pseudo-op, which 1665 changes the location within the current section. Absolute 1666 sections are not supported by other object file formats. The 1667 address of a section may be assigned within a linker script. 1668 1669 There are some other features of the MRI assembler which are not 1670supported by `as', typically either because they are difficult or 1671because they seem of little consequence. Some of these may be 1672supported in future releases. 1673 1674 * EBCDIC strings 1675 1676 EBCDIC strings are not supported. 1677 1678 * packed binary coded decimal 1679 1680 Packed binary coded decimal is not supported. This means that the 1681 `DC.P' and `DCB.P' pseudo-ops are not supported. 1682 1683 * `FEQU' pseudo-op 1684 1685 The m68k `FEQU' pseudo-op is not supported. 1686 1687 * `NOOBJ' pseudo-op 1688 1689 The m68k `NOOBJ' pseudo-op is not supported. 1690 1691 * `OPT' branch control options 1692 1693 The m68k `OPT' branch control options--`B', `BRS', `BRB', `BRL', 1694 and `BRW'--are ignored. `as' automatically relaxes all branches, 1695 whether forward or backward, to an appropriate size, so these 1696 options serve no purpose. 1697 1698 * `OPT' list control options 1699 1700 The following m68k `OPT' list control options are ignored: `C', 1701 `CEX', `CL', `CRE', `E', `G', `I', `M', `MEX', `MC', `MD', `X'. 1702 1703 * other `OPT' options 1704 1705 The following m68k `OPT' options are ignored: `NEST', `O', `OLD', 1706 `OP', `P', `PCO', `PCR', `PCS', `R'. 1707 1708 * `OPT' `D' option is default 1709 1710 The m68k `OPT' `D' option is the default, unlike the MRI assembler. 1711 `OPT NOD' may be used to turn it off. 1712 1713 * `XREF' pseudo-op. 1714 1715 The m68k `XREF' pseudo-op is ignored. 1716 1717 * `.debug' pseudo-op 1718 1719 The i960 `.debug' pseudo-op is not supported. 1720 1721 * `.extended' pseudo-op 1722 1723 The i960 `.extended' pseudo-op is not supported. 1724 1725 * `.list' pseudo-op. 1726 1727 The various options of the i960 `.list' pseudo-op are not 1728 supported. 1729 1730 * `.optimize' pseudo-op 1731 1732 The i960 `.optimize' pseudo-op is not supported. 1733 1734 * `.output' pseudo-op 1735 1736 The i960 `.output' pseudo-op is not supported. 1737 1738 * `.setreal' pseudo-op 1739 1740 The i960 `.setreal' pseudo-op is not supported. 1741 1742 1743 1744File: as.info, Node: MD, Next: no-pad-sections, Prev: M, Up: Invoking 1745 17462.10 Dependency Tracking: `--MD' 1747================================ 1748 1749`as' can generate a dependency file for the file it creates. This file 1750consists of a single rule suitable for `make' describing the 1751dependencies of the main source file. 1752 1753 The rule is written to the file named in its argument. 1754 1755 This feature is used in the automatic updating of makefiles. 1756 1757 1758File: as.info, Node: no-pad-sections, Next: o, Prev: MD, Up: Invoking 1759 17602.11 Output Section Padding 1761=========================== 1762 1763Normally the assembler will pad the end of each output section up to its 1764alignment boundary. But this can waste space, which can be significant 1765on memory constrained targets. So the `--no-pad-sections' option will 1766disable this behaviour. 1767 1768 1769File: as.info, Node: o, Next: R, Prev: no-pad-sections, Up: Invoking 1770 17712.12 Name the Object File: `-o' 1772=============================== 1773 1774There is always one object file output when you run `as'. By default 1775it has the name `a.out' (or `b.out', for Intel 960 targets only). You 1776use this option (which takes exactly one filename) to give the object 1777file a different name. 1778 1779 Whatever the object file is called, `as' overwrites any existing 1780file of the same name. 1781 1782 1783File: as.info, Node: R, Next: statistics, Prev: o, Up: Invoking 1784 17852.13 Join Data and Text Sections: `-R' 1786====================================== 1787 1788`-R' tells `as' to write the object file as if all data-section data 1789lives in the text section. This is only done at the very last moment: 1790your binary data are the same, but data section parts are relocated 1791differently. The data section part of your object file is zero bytes 1792long because all its bytes are appended to the text section. (*Note 1793Sections and Relocation: Sections.) 1794 1795 When you specify `-R' it would be possible to generate shorter 1796address displacements (because we do not have to cross between text and 1797data section). We refrain from doing this simply for compatibility with 1798older versions of `as'. In future, `-R' may work this way. 1799 1800 When `as' is configured for COFF or ELF output, this option is only 1801useful if you use sections named `.text' and `.data'. 1802 1803 `-R' is not supported for any of the HPPA targets. Using `-R' 1804generates a warning from `as'. 1805 1806 1807File: as.info, Node: statistics, Next: traditional-format, Prev: R, Up: Invoking 1808 18092.14 Display Assembly Statistics: `--statistics' 1810================================================ 1811 1812Use `--statistics' to display two statistics about the resources used by 1813`as': the maximum amount of space allocated during the assembly (in 1814bytes), and the total execution time taken for the assembly (in CPU 1815seconds). 1816 1817 1818File: as.info, Node: traditional-format, Next: v, Prev: statistics, Up: Invoking 1819 18202.15 Compatible Output: `--traditional-format' 1821============================================== 1822 1823For some targets, the output of `as' is different in some ways from the 1824output of some existing assembler. This switch requests `as' to use 1825the traditional format instead. 1826 1827 For example, it disables the exception frame optimizations which 1828`as' normally does by default on `gcc' output. 1829 1830 1831File: as.info, Node: v, Next: W, Prev: traditional-format, Up: Invoking 1832 18332.16 Announce Version: `-v' 1834=========================== 1835 1836You can find out what version of as is running by including the option 1837`-v' (which you can also spell as `-version') on the command line. 1838 1839 1840File: as.info, Node: W, Next: Z, Prev: v, Up: Invoking 1841 18422.17 Control Warnings: `-W', `--warn', `--no-warn', `--fatal-warnings' 1843====================================================================== 1844 1845`as' should never give a warning or error message when assembling 1846compiler output. But programs written by people often cause `as' to 1847give a warning that a particular assumption was made. All such 1848warnings are directed to the standard error file. 1849 1850 If you use the `-W' and `--no-warn' options, no warnings are issued. 1851This only affects the warning messages: it does not change any 1852particular of how `as' assembles your file. Errors, which stop the 1853assembly, are still reported. 1854 1855 If you use the `--fatal-warnings' option, `as' considers files that 1856generate warnings to be in error. 1857 1858 You can switch these options off again by specifying `--warn', which 1859causes warnings to be output as usual. 1860 1861 1862File: as.info, Node: Z, Prev: W, Up: Invoking 1863 18642.18 Generate Object File in Spite of Errors: `-Z' 1865================================================== 1866 1867After an error message, `as' normally produces no output. If for some 1868reason you are interested in object file output even after `as' gives 1869an error message on your program, use the `-Z' option. If there are 1870any errors, `as' continues anyways, and writes an object file after a 1871final warning message of the form `N errors, M warnings, generating bad 1872object file.' 1873 1874 1875File: as.info, Node: Syntax, Next: Sections, Prev: Invoking, Up: Top 1876 18773 Syntax 1878******** 1879 1880This chapter describes the machine-independent syntax allowed in a 1881source file. `as' syntax is similar to what many other assemblers use; 1882it is inspired by the BSD 4.2 assembler, except that `as' does not 1883assemble Vax bit-fields. 1884 1885* Menu: 1886 1887* Preprocessing:: Preprocessing 1888* Whitespace:: Whitespace 1889* Comments:: Comments 1890* Symbol Intro:: Symbols 1891* Statements:: Statements 1892* Constants:: Constants 1893 1894 1895File: as.info, Node: Preprocessing, Next: Whitespace, Up: Syntax 1896 18973.1 Preprocessing 1898================= 1899 1900The `as' internal preprocessor: 1901 * adjusts and removes extra whitespace. It leaves one space or tab 1902 before the keywords on a line, and turns any other whitespace on 1903 the line into a single space. 1904 1905 * removes all comments, replacing them with a single space, or an 1906 appropriate number of newlines. 1907 1908 * converts character constants into the appropriate numeric values. 1909 1910 It does not do macro processing, include file handling, or anything 1911else you may get from your C compiler's preprocessor. You can do 1912include file processing with the `.include' directive (*note 1913`.include': Include.). You can use the GNU C compiler driver to get 1914other "CPP" style preprocessing by giving the input file a `.S' suffix. 1915*Note Options Controlling the Kind of Output: (gcc info)Overall 1916Options. 1917 1918 Excess whitespace, comments, and character constants cannot be used 1919in the portions of the input text that are not preprocessed. 1920 1921 If the first line of an input file is `#NO_APP' or if you use the 1922`-f' option, whitespace and comments are not removed from the input 1923file. Within an input file, you can ask for whitespace and comment 1924removal in specific portions of the by putting a line that says `#APP' 1925before the text that may contain whitespace or comments, and putting a 1926line that says `#NO_APP' after this text. This feature is mainly 1927intend to support `asm' statements in compilers whose output is 1928otherwise free of comments and whitespace. 1929 1930 1931File: as.info, Node: Whitespace, Next: Comments, Prev: Preprocessing, Up: Syntax 1932 19333.2 Whitespace 1934============== 1935 1936"Whitespace" is one or more blanks or tabs, in any order. Whitespace 1937is used to separate symbols, and to make programs neater for people to 1938read. Unless within character constants (*note Character Constants: 1939Characters.), any whitespace means the same as exactly one space. 1940 1941 1942File: as.info, Node: Comments, Next: Symbol Intro, Prev: Whitespace, Up: Syntax 1943 19443.3 Comments 1945============ 1946 1947There are two ways of rendering comments to `as'. In both cases the 1948comment is equivalent to one space. 1949 1950 Anything from `/*' through the next `*/' is a comment. This means 1951you may not nest these comments. 1952 1953 /* 1954 The only way to include a newline ('\n') in a comment 1955 is to use this sort of comment. 1956 */ 1957 1958 /* This sort of comment does not nest. */ 1959 1960 Anything from a "line comment" character up to the next newline is 1961considered a comment and is ignored. The line comment character is 1962target specific, and some targets multiple comment characters. Some 1963targets also have line comment characters that only work if they are 1964the first character on a line. Some targets use a sequence of two 1965characters to introduce a line comment. Some targets can also change 1966their line comment characters depending upon command line options that 1967have been used. For more details see the _Syntax_ section in the 1968documentation for individual targets. 1969 1970 If the line comment character is the hash sign (`#') then it still 1971has the special ability to enable and disable preprocessing (*note 1972Preprocessing::) and to specify logical line numbers: 1973 1974 To be compatible with past assemblers, lines that begin with `#' 1975have a special interpretation. Following the `#' should be an absolute 1976expression (*note Expressions::): the logical line number of the _next_ 1977line. Then a string (*note Strings: Strings.) is allowed: if present 1978it is a new logical file name. The rest of the line, if any, should be 1979whitespace. 1980 1981 If the first non-whitespace characters on the line are not numeric, 1982the line is ignored. (Just like a comment.) 1983 1984 # This is an ordinary comment. 1985 # 42-6 "new_file_name" # New logical file name 1986 # This is logical line # 36. 1987 This feature is deprecated, and may disappear from future versions 1988of `as'. 1989 1990 1991File: as.info, Node: Symbol Intro, Next: Statements, Prev: Comments, Up: Syntax 1992 19933.4 Symbols 1994=========== 1995 1996A "symbol" is one or more characters chosen from the set of all letters 1997(both upper and lower case), digits and the three characters `_.$'. On 1998most machines, you can also use `$' in symbol names; exceptions are 1999noted in *Note Machine Dependencies::. No symbol may begin with a 2000digit. Case is significant. There is no length limit; all characters 2001are significant. Multibyte characters are supported. Symbols are 2002delimited by characters not in that set, or by the beginning of a file 2003(since the source program must end with a newline, the end of a file is 2004not a possible symbol delimiter). *Note Symbols::. 2005 2006Symbol names may also be enclosed in double quote `"' characters. In 2007such cases any characters are allowed, except for the NUL character. 2008If a double quote character is to be included in the symbol name it 2009must be preceeded by a backslash `\' character. 2010 2011 2012File: as.info, Node: Statements, Next: Constants, Prev: Symbol Intro, Up: Syntax 2013 20143.5 Statements 2015============== 2016 2017A "statement" ends at a newline character (`\n') or a "line separator 2018character". The line separator character is target specific and 2019described in the _Syntax_ section of each target's documentation. Not 2020all targets support a line separator character. The newline or line 2021separator character is considered to be part of the preceding 2022statement. Newlines and separators within character constants are an 2023exception: they do not end statements. 2024 2025 It is an error to end any statement with end-of-file: the last 2026character of any input file should be a newline. 2027 2028 An empty statement is allowed, and may include whitespace. It is 2029ignored. 2030 2031 A statement begins with zero or more labels, optionally followed by a 2032key symbol which determines what kind of statement it is. The key 2033symbol determines the syntax of the rest of the statement. If the 2034symbol begins with a dot `.' then the statement is an assembler 2035directive: typically valid for any computer. If the symbol begins with 2036a letter the statement is an assembly language "instruction": it 2037assembles into a machine language instruction. Different versions of 2038`as' for different computers recognize different instructions. In 2039fact, the same symbol may represent a different instruction in a 2040different computer's assembly language. 2041 2042 A label is a symbol immediately followed by a colon (`:'). 2043Whitespace before a label or after a colon is permitted, but you may not 2044have whitespace between a label's symbol and its colon. *Note Labels::. 2045 2046 For HPPA targets, labels need not be immediately followed by a 2047colon, but the definition of a label must begin in column zero. This 2048also implies that only one label may be defined on each line. 2049 2050 label: .directive followed by something 2051 another_label: # This is an empty statement. 2052 instruction operand_1, operand_2, ... 2053 2054 2055File: as.info, Node: Constants, Prev: Statements, Up: Syntax 2056 20573.6 Constants 2058============= 2059 2060A constant is a number, written so that its value is known by 2061inspection, without knowing any context. Like this: 2062 .byte 74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value. 2063 .ascii "Ring the bell\7" # A string constant. 2064 .octa 0x123456789abcdef0123456789ABCDEF0 # A bignum. 2065 .float 0f-314159265358979323846264338327\ 2066 95028841971.693993751E-40 # - pi, a flonum. 2067 2068* Menu: 2069 2070* Characters:: Character Constants 2071* Numbers:: Number Constants 2072 2073 2074File: as.info, Node: Characters, Next: Numbers, Up: Constants 2075 20763.6.1 Character Constants 2077------------------------- 2078 2079There are two kinds of character constants. A "character" stands for 2080one character in one byte and its value may be used in numeric 2081expressions. String constants (properly called string _literals_) are 2082potentially many bytes and their values may not be used in arithmetic 2083expressions. 2084 2085* Menu: 2086 2087* Strings:: Strings 2088* Chars:: Characters 2089 2090 2091File: as.info, Node: Strings, Next: Chars, Up: Characters 2092 20933.6.1.1 Strings 2094............... 2095 2096A "string" is written between double-quotes. It may contain 2097double-quotes or null characters. The way to get special characters 2098into a string is to "escape" these characters: precede them with a 2099backslash `\' character. For example `\\' represents one backslash: 2100the first `\' is an escape which tells `as' to interpret the second 2101character literally as a backslash (which prevents `as' from 2102recognizing the second `\' as an escape character). The complete list 2103of escapes follows. 2104 2105`\b' 2106 Mnemonic for backspace; for ASCII this is octal code 010. 2107 2108`backslash-f' 2109 Mnemonic for FormFeed; for ASCII this is octal code 014. 2110 2111`\n' 2112 Mnemonic for newline; for ASCII this is octal code 012. 2113 2114`\r' 2115 Mnemonic for carriage-Return; for ASCII this is octal code 015. 2116 2117`\t' 2118 Mnemonic for horizontal Tab; for ASCII this is octal code 011. 2119 2120`\ DIGIT DIGIT DIGIT' 2121 An octal character code. The numeric code is 3 octal digits. For 2122 compatibility with other Unix systems, 8 and 9 are accepted as 2123 digits: for example, `\008' has the value 010, and `\009' the 2124 value 011. 2125 2126`\`x' HEX-DIGITS...' 2127 A hex character code. All trailing hex digits are combined. 2128 Either upper or lower case `x' works. 2129 2130`\\' 2131 Represents one `\' character. 2132 2133`\"' 2134 Represents one `"' character. Needed in strings to represent this 2135 character, because an unescaped `"' would end the string. 2136 2137`\ ANYTHING-ELSE' 2138 Any other character when escaped by `\' gives a warning, but 2139 assembles as if the `\' was not present. The idea is that if you 2140 used an escape sequence you clearly didn't want the literal 2141 interpretation of the following character. However `as' has no 2142 other interpretation, so `as' knows it is giving you the wrong 2143 code and warns you of the fact. 2144 2145 Which characters are escapable, and what those escapes represent, 2146varies widely among assemblers. The current set is what we think the 2147BSD 4.2 assembler recognizes, and is a subset of what most C compilers 2148recognize. If you are in doubt, do not use an escape sequence. 2149 2150 2151File: as.info, Node: Chars, Prev: Strings, Up: Characters 2152 21533.6.1.2 Characters 2154.................. 2155 2156A single character may be written as a single quote immediately 2157followed by that character. The same escapes apply to characters as to 2158strings. So if you want to write the character backslash, you must 2159write `'\\' where the first `\' escapes the second `\'. As you can 2160see, the quote is an acute accent, not a grave accent. A newline 2161immediately following an acute accent is taken as a literal character 2162and does not count as the end of a statement. The value of a character 2163constant in a numeric expression is the machine's byte-wide code for 2164that character. `as' assumes your character code is ASCII: `'A' means 216565, `'B' means 66, and so on. 2166 2167 2168File: as.info, Node: Numbers, Prev: Characters, Up: Constants 2169 21703.6.2 Number Constants 2171---------------------- 2172 2173`as' distinguishes three kinds of numbers according to how they are 2174stored in the target machine. _Integers_ are numbers that would fit 2175into an `int' in the C language. _Bignums_ are integers, but they are 2176stored in more than 32 bits. _Flonums_ are floating point numbers, 2177described below. 2178 2179* Menu: 2180 2181* Integers:: Integers 2182* Bignums:: Bignums 2183* Flonums:: Flonums 2184 2185 2186File: as.info, Node: Integers, Next: Bignums, Up: Numbers 2187 21883.6.2.1 Integers 2189................ 2190 2191A binary integer is `0b' or `0B' followed by zero or more of the binary 2192digits `01'. 2193 2194 An octal integer is `0' followed by zero or more of the octal digits 2195(`01234567'). 2196 2197 A decimal integer starts with a non-zero digit followed by zero or 2198more digits (`0123456789'). 2199 2200 A hexadecimal integer is `0x' or `0X' followed by one or more 2201hexadecimal digits chosen from `0123456789abcdefABCDEF'. 2202 2203 Integers have the usual values. To denote a negative integer, use 2204the prefix operator `-' discussed under expressions (*note Prefix 2205Operators: Prefix Ops.). 2206 2207 2208File: as.info, Node: Bignums, Next: Flonums, Prev: Integers, Up: Numbers 2209 22103.6.2.2 Bignums 2211............... 2212 2213A "bignum" has the same syntax and semantics as an integer except that 2214the number (or its negative) takes more than 32 bits to represent in 2215binary. The distinction is made because in some places integers are 2216permitted while bignums are not. 2217 2218 2219File: as.info, Node: Flonums, Prev: Bignums, Up: Numbers 2220 22213.6.2.3 Flonums 2222............... 2223 2224A "flonum" represents a floating point number. The translation is 2225indirect: a decimal floating point number from the text is converted by 2226`as' to a generic binary floating point number of more than sufficient 2227precision. This generic floating point number is converted to a 2228particular computer's floating point format (or formats) by a portion 2229of `as' specialized to that computer. 2230 2231 A flonum is written by writing (in order) 2232 * The digit `0'. (`0' is optional on the HPPA.) 2233 2234 * A letter, to tell `as' the rest of the number is a flonum. `e' is 2235 recommended. Case is not important. 2236 2237 On the H8/300, Renesas / SuperH SH, and AMD 29K architectures, the 2238 letter must be one of the letters `DFPRSX' (in upper or lower 2239 case). 2240 2241 On the ARC, the letter must be one of the letters `DFRS' (in upper 2242 or lower case). 2243 2244 On the Intel 960 architecture, the letter must be one of the 2245 letters `DFT' (in upper or lower case). 2246 2247 On the HPPA architecture, the letter must be `E' (upper case only). 2248 2249 * An optional sign: either `+' or `-'. 2250 2251 * An optional "integer part": zero or more decimal digits. 2252 2253 * An optional "fractional part": `.' followed by zero or more 2254 decimal digits. 2255 2256 * An optional exponent, consisting of: 2257 2258 * An `E' or `e'. 2259 2260 * Optional sign: either `+' or `-'. 2261 2262 * One or more decimal digits. 2263 2264 2265 At least one of the integer part or the fractional part must be 2266present. The floating point number has the usual base-10 value. 2267 2268 `as' does all processing using integers. Flonums are computed 2269independently of any floating point hardware in the computer running 2270`as'. 2271 2272 2273File: as.info, Node: Sections, Next: Symbols, Prev: Syntax, Up: Top 2274 22754 Sections and Relocation 2276************************* 2277 2278* Menu: 2279 2280* Secs Background:: Background 2281* Ld Sections:: Linker Sections 2282* As Sections:: Assembler Internal Sections 2283* Sub-Sections:: Sub-Sections 2284* bss:: bss Section 2285 2286 2287File: as.info, Node: Secs Background, Next: Ld Sections, Up: Sections 2288 22894.1 Background 2290============== 2291 2292Roughly, a section is a range of addresses, with no gaps; all data "in" 2293those addresses is treated the same for some particular purpose. For 2294example there may be a "read only" section. 2295 2296 The linker `ld' reads many object files (partial programs) and 2297combines their contents to form a runnable program. When `as' emits an 2298object file, the partial program is assumed to start at address 0. 2299`ld' assigns the final addresses for the partial program, so that 2300different partial programs do not overlap. This is actually an 2301oversimplification, but it suffices to explain how `as' uses sections. 2302 2303 `ld' moves blocks of bytes of your program to their run-time 2304addresses. These blocks slide to their run-time addresses as rigid 2305units; their length does not change and neither does the order of bytes 2306within them. Such a rigid unit is called a _section_. Assigning 2307run-time addresses to sections is called "relocation". It includes the 2308task of adjusting mentions of object-file addresses so they refer to 2309the proper run-time addresses. For the H8/300, and for the Renesas / 2310SuperH SH, `as' pads sections if needed to ensure they end on a word 2311(sixteen bit) boundary. 2312 2313 An object file written by `as' has at least three sections, any of 2314which may be empty. These are named "text", "data" and "bss" sections. 2315 2316 When it generates COFF or ELF output, `as' can also generate 2317whatever other named sections you specify using the `.section' 2318directive (*note `.section': Section.). If you do not use any 2319directives that place output in the `.text' or `.data' sections, these 2320sections still exist, but are empty. 2321 2322 When `as' generates SOM or ELF output for the HPPA, `as' can also 2323generate whatever other named sections you specify using the `.space' 2324and `.subspace' directives. See `HP9000 Series 800 Assembly Language 2325Reference Manual' (HP 92432-90001) for details on the `.space' and 2326`.subspace' assembler directives. 2327 2328 Additionally, `as' uses different names for the standard text, data, 2329and bss sections when generating SOM output. Program text is placed 2330into the `$CODE$' section, data into `$DATA$', and BSS into `$BSS$'. 2331 2332 Within the object file, the text section starts at address `0', the 2333data section follows, and the bss section follows the data section. 2334 2335 When generating either SOM or ELF output files on the HPPA, the text 2336section starts at address `0', the data section at address `0x4000000', 2337and the bss section follows the data section. 2338 2339 To let `ld' know which data changes when the sections are relocated, 2340and how to change that data, `as' also writes to the object file 2341details of the relocation needed. To perform relocation `ld' must 2342know, each time an address in the object file is mentioned: 2343 * Where in the object file is the beginning of this reference to an 2344 address? 2345 2346 * How long (in bytes) is this reference? 2347 2348 * Which section does the address refer to? What is the numeric 2349 value of 2350 (ADDRESS) - (START-ADDRESS OF SECTION)? 2351 2352 * Is the reference to an address "Program-Counter relative"? 2353 2354 In fact, every address `as' ever uses is expressed as 2355 (SECTION) + (OFFSET INTO SECTION) 2356 Further, most expressions `as' computes have this section-relative 2357nature. (For some object formats, such as SOM for the HPPA, some 2358expressions are symbol-relative instead.) 2359 2360 In this manual we use the notation {SECNAME N} to mean "offset N 2361into section SECNAME." 2362 2363 Apart from text, data and bss sections you need to know about the 2364"absolute" section. When `ld' mixes partial programs, addresses in the 2365absolute section remain unchanged. For example, address `{absolute 0}' 2366is "relocated" to run-time address 0 by `ld'. Although the linker 2367never arranges two partial programs' data sections with overlapping 2368addresses after linking, _by definition_ their absolute sections must 2369overlap. Address `{absolute 239}' in one part of a program is always 2370the same address when the program is running as address `{absolute 2371239}' in any other part of the program. 2372 2373 The idea of sections is extended to the "undefined" section. Any 2374address whose section is unknown at assembly time is by definition 2375rendered {undefined U}--where U is filled in later. Since numbers are 2376always defined, the only way to generate an undefined address is to 2377mention an undefined symbol. A reference to a named common block would 2378be such a symbol: its value is unknown at assembly time so it has 2379section _undefined_. 2380 2381 By analogy the word _section_ is used to describe groups of sections 2382in the linked program. `ld' puts all partial programs' text sections 2383in contiguous addresses in the linked program. It is customary to 2384refer to the _text section_ of a program, meaning all the addresses of 2385all partial programs' text sections. Likewise for data and bss 2386sections. 2387 2388 Some sections are manipulated by `ld'; others are invented for use 2389of `as' and have no meaning except during assembly. 2390 2391 2392File: as.info, Node: Ld Sections, Next: As Sections, Prev: Secs Background, Up: Sections 2393 23944.2 Linker Sections 2395=================== 2396 2397`ld' deals with just four kinds of sections, summarized below. 2398 2399*named sections* 2400*text section* 2401*data section* 2402 These sections hold your program. `as' and `ld' treat them as 2403 separate but equal sections. Anything you can say of one section 2404 is true of another. When the program is running, however, it is 2405 customary for the text section to be unalterable. The text 2406 section is often shared among processes: it contains instructions, 2407 constants and the like. The data section of a running program is 2408 usually alterable: for example, C variables would be stored in the 2409 data section. 2410 2411*bss section* 2412 This section contains zeroed bytes when your program begins 2413 running. It is used to hold uninitialized variables or common 2414 storage. The length of each partial program's bss section is 2415 important, but because it starts out containing zeroed bytes there 2416 is no need to store explicit zero bytes in the object file. The 2417 bss section was invented to eliminate those explicit zeros from 2418 object files. 2419 2420*absolute section* 2421 Address 0 of this section is always "relocated" to runtime address 2422 0. This is useful if you want to refer to an address that `ld' 2423 must not change when relocating. In this sense we speak of 2424 absolute addresses being "unrelocatable": they do not change 2425 during relocation. 2426 2427*undefined section* 2428 This "section" is a catch-all for address references to objects 2429 not in the preceding sections. 2430 2431 An idealized example of three relocatable sections follows. The 2432example uses the traditional section names `.text' and `.data'. Memory 2433addresses are on the horizontal axis. 2434 2435 +-----+----+--+ 2436 partial program # 1: |ttttt|dddd|00| 2437 +-----+----+--+ 2438 2439 text data bss 2440 seg. seg. seg. 2441 2442 +---+---+---+ 2443 partial program # 2: |TTT|DDD|000| 2444 +---+---+---+ 2445 2446 +--+---+-----+--+----+---+-----+~~ 2447 linked program: | |TTT|ttttt| |dddd|DDD|00000| 2448 +--+---+-----+--+----+---+-----+~~ 2449 2450 addresses: 0 ... 2451 2452 2453File: as.info, Node: As Sections, Next: Sub-Sections, Prev: Ld Sections, Up: Sections 2454 24554.3 Assembler Internal Sections 2456=============================== 2457 2458These sections are meant only for the internal use of `as'. They have 2459no meaning at run-time. You do not really need to know about these 2460sections for most purposes; but they can be mentioned in `as' warning 2461messages, so it might be helpful to have an idea of their meanings to 2462`as'. These sections are used to permit the value of every expression 2463in your assembly language program to be a section-relative address. 2464 2465ASSEMBLER-INTERNAL-LOGIC-ERROR! 2466 An internal assembler logic error has been found. This means 2467 there is a bug in the assembler. 2468 2469expr section 2470 The assembler stores complex expression internally as combinations 2471 of symbols. When it needs to represent an expression as a symbol, 2472 it puts it in the expr section. 2473 2474 2475File: as.info, Node: Sub-Sections, Next: bss, Prev: As Sections, Up: Sections 2476 24774.4 Sub-Sections 2478================ 2479 2480Assembled bytes conventionally fall into two sections: text and data. 2481You may have separate groups of data in named sections that you want to 2482end up near to each other in the object file, even though they are not 2483contiguous in the assembler source. `as' allows you to use 2484"subsections" for this purpose. Within each section, there can be 2485numbered subsections with values from 0 to 8192. Objects assembled 2486into the same subsection go into the object file together with other 2487objects in the same subsection. For example, a compiler might want to 2488store constants in the text section, but might not want to have them 2489interspersed with the program being assembled. In this case, the 2490compiler could issue a `.text 0' before each section of code being 2491output, and a `.text 1' before each group of constants being output. 2492 2493Subsections are optional. If you do not use subsections, everything 2494goes in subsection number zero. 2495 2496 Each subsection is zero-padded up to a multiple of four bytes. 2497(Subsections may be padded a different amount on different flavors of 2498`as'.) 2499 2500 Subsections appear in your object file in numeric order, lowest 2501numbered to highest. (All this to be compatible with other people's 2502assemblers.) The object file contains no representation of 2503subsections; `ld' and other programs that manipulate object files see 2504no trace of them. They just see all your text subsections as a text 2505section, and all your data subsections as a data section. 2506 2507 To specify which subsection you want subsequent statements assembled 2508into, use a numeric argument to specify it, in a `.text EXPRESSION' or 2509a `.data EXPRESSION' statement. When generating COFF output, you can 2510also use an extra subsection argument with arbitrary named sections: 2511`.section NAME, EXPRESSION'. When generating ELF output, you can also 2512use the `.subsection' directive (*note SubSection::) to specify a 2513subsection: `.subsection EXPRESSION'. EXPRESSION should be an absolute 2514expression (*note Expressions::). If you just say `.text' then `.text 25150' is assumed. Likewise `.data' means `.data 0'. Assembly begins in 2516`text 0'. For instance: 2517 .text 0 # The default subsection is text 0 anyway. 2518 .ascii "This lives in the first text subsection. *" 2519 .text 1 2520 .ascii "But this lives in the second text subsection." 2521 .data 0 2522 .ascii "This lives in the data section," 2523 .ascii "in the first data subsection." 2524 .text 0 2525 .ascii "This lives in the first text section," 2526 .ascii "immediately following the asterisk (*)." 2527 2528 Each section has a "location counter" incremented by one for every 2529byte assembled into that section. Because subsections are merely a 2530convenience restricted to `as' there is no concept of a subsection 2531location counter. There is no way to directly manipulate a location 2532counter--but the `.align' directive changes it, and any label 2533definition captures its current value. The location counter of the 2534section where statements are being assembled is said to be the "active" 2535location counter. 2536 2537 2538File: as.info, Node: bss, Prev: Sub-Sections, Up: Sections 2539 25404.5 bss Section 2541=============== 2542 2543The bss section is used for local common variable storage. You may 2544allocate address space in the bss section, but you may not dictate data 2545to load into it before your program executes. When your program starts 2546running, all the contents of the bss section are zeroed bytes. 2547 2548 The `.lcomm' pseudo-op defines a symbol in the bss section; see 2549*Note `.lcomm': Lcomm. 2550 2551 The `.comm' pseudo-op may be used to declare a common symbol, which 2552is another form of uninitialized symbol; see *Note `.comm': Comm. 2553 2554 When assembling for a target which supports multiple sections, such 2555as ELF or COFF, you may switch into the `.bss' section and define 2556symbols as usual; see *Note `.section': Section. You may only assemble 2557zero values into the section. Typically the section will only contain 2558symbol definitions and `.skip' directives (*note `.skip': Skip.). 2559 2560 2561File: as.info, Node: Symbols, Next: Expressions, Prev: Sections, Up: Top 2562 25635 Symbols 2564********* 2565 2566Symbols are a central concept: the programmer uses symbols to name 2567things, the linker uses symbols to link, and the debugger uses symbols 2568to debug. 2569 2570 _Warning:_ `as' does not place symbols in the object file in the 2571 same order they were declared. This may break some debuggers. 2572 2573* Menu: 2574 2575* Labels:: Labels 2576* Setting Symbols:: Giving Symbols Other Values 2577* Symbol Names:: Symbol Names 2578* Dot:: The Special Dot Symbol 2579* Symbol Attributes:: Symbol Attributes 2580 2581 2582File: as.info, Node: Labels, Next: Setting Symbols, Up: Symbols 2583 25845.1 Labels 2585========== 2586 2587A "label" is written as a symbol immediately followed by a colon `:'. 2588The symbol then represents the current value of the active location 2589counter, and is, for example, a suitable instruction operand. You are 2590warned if you use the same symbol to represent two different locations: 2591the first definition overrides any other definitions. 2592 2593 On the HPPA, the usual form for a label need not be immediately 2594followed by a colon, but instead must start in column zero. Only one 2595label may be defined on a single line. To work around this, the HPPA 2596version of `as' also provides a special directive `.label' for defining 2597labels more flexibly. 2598 2599 2600File: as.info, Node: Setting Symbols, Next: Symbol Names, Prev: Labels, Up: Symbols 2601 26025.2 Giving Symbols Other Values 2603=============================== 2604 2605A symbol can be given an arbitrary value by writing a symbol, followed 2606by an equals sign `=', followed by an expression (*note Expressions::). 2607This is equivalent to using the `.set' directive. *Note `.set': Set. 2608In the same way, using a double equals sign `='`=' here represents an 2609equivalent of the `.eqv' directive. *Note `.eqv': Eqv. 2610 2611 Blackfin does not support symbol assignment with `='. 2612 2613 2614File: as.info, Node: Symbol Names, Next: Dot, Prev: Setting Symbols, Up: Symbols 2615 26165.3 Symbol Names 2617================ 2618 2619Symbol names begin with a letter or with one of `._'. On most 2620machines, you can also use `$' in symbol names; exceptions are noted in 2621*Note Machine Dependencies::. That character may be followed by any 2622string of digits, letters, dollar signs (unless otherwise noted for a 2623particular target machine), and underscores. 2624 2625Case of letters is significant: `foo' is a different symbol name than 2626`Foo'. 2627 2628 Symbol names do not start with a digit. An exception to this rule 2629is made for Local Labels. See below. 2630 2631 Multibyte characters are supported. To generate a symbol name 2632containing multibyte characters enclose it within double quotes and use 2633escape codes. cf *Note Strings::. Generating a multibyte symbol name 2634from a label is not currently supported. 2635 2636 Each symbol has exactly one name. Each name in an assembly language 2637program refers to exactly one symbol. You may use that symbol name any 2638number of times in a program. 2639 2640Local Symbol Names 2641------------------ 2642 2643A local symbol is any symbol beginning with certain local label 2644prefixes. By default, the local label prefix is `.L' for ELF systems or 2645`L' for traditional a.out systems, but each target may have its own set 2646of local label prefixes. On the HPPA local symbols begin with `L$'. 2647 2648 Local symbols are defined and used within the assembler, but they are 2649normally not saved in object files. Thus, they are not visible when 2650debugging. You may use the `-L' option (*note Include Local Symbols: 2651L.) to retain the local symbols in the object files. 2652 2653Local Labels 2654------------ 2655 2656Local labels are different from local symbols. Local labels help 2657compilers and programmers use names temporarily. They create symbols 2658which are guaranteed to be unique over the entire scope of the input 2659source code and which can be referred to by a simple notation. To 2660define a local label, write a label of the form `N:' (where N 2661represents any non-negative integer). To refer to the most recent 2662previous definition of that label write `Nb', using the same number as 2663when you defined the label. To refer to the next definition of a local 2664label, write `Nf'. The `b' stands for "backwards" and the `f' stands 2665for "forwards". 2666 2667 There is no restriction on how you can use these labels, and you can 2668reuse them too. So that it is possible to repeatedly define the same 2669local label (using the same number `N'), although you can only refer to 2670the most recently defined local label of that number (for a backwards 2671reference) or the next definition of a specific local label for a 2672forward reference. It is also worth noting that the first 10 local 2673labels (`0:'...`9:') are implemented in a slightly more efficient 2674manner than the others. 2675 2676 Here is an example: 2677 2678 1: branch 1f 2679 2: branch 1b 2680 1: branch 2f 2681 2: branch 1b 2682 2683 Which is the equivalent of: 2684 2685 label_1: branch label_3 2686 label_2: branch label_1 2687 label_3: branch label_4 2688 label_4: branch label_3 2689 2690 Local label names are only a notational device. They are immediately 2691transformed into more conventional symbol names before the assembler 2692uses them. The symbol names are stored in the symbol table, appear in 2693error messages, and are optionally emitted to the object file. The 2694names are constructed using these parts: 2695 2696`_local label prefix_' 2697 All local symbols begin with the system-specific local label 2698 prefix. Normally both `as' and `ld' forget symbols that start 2699 with the local label prefix. These labels are used for symbols 2700 you are never intended to see. If you use the `-L' option then 2701 `as' retains these symbols in the object file. If you also 2702 instruct `ld' to retain these symbols, you may use them in 2703 debugging. 2704 2705`NUMBER' 2706 This is the number that was used in the local label definition. 2707 So if the label is written `55:' then the number is `55'. 2708 2709`C-B' 2710 This unusual character is included so you do not accidentally 2711 invent a symbol of the same name. The character has ASCII value 2712 of `\002' (control-B). 2713 2714`_ordinal number_' 2715 This is a serial number to keep the labels distinct. The first 2716 definition of `0:' gets the number `1'. The 15th definition of 2717 `0:' gets the number `15', and so on. Likewise the first 2718 definition of `1:' gets the number `1' and its 15th definition 2719 gets `15' as well. 2720 2721 So for example, the first `1:' may be named `.L1C-B1', and the 44th 2722`3:' may be named `.L3C-B44'. 2723 2724Dollar Local Labels 2725------------------- 2726 2727On some targets `as' also supports an even more local form of local 2728labels called dollar labels. These labels go out of scope (i.e., they 2729become undefined) as soon as a non-local label is defined. Thus they 2730remain valid for only a small region of the input source code. Normal 2731local labels, by contrast, remain in scope for the entire file, or 2732until they are redefined by another occurrence of the same local label. 2733 2734 Dollar labels are defined in exactly the same way as ordinary local 2735labels, except that they have a dollar sign suffix to their numeric 2736value, e.g., `55$:'. 2737 2738 They can also be distinguished from ordinary local labels by their 2739transformed names which use ASCII character `\001' (control-A) as the 2740magic character to distinguish them from ordinary labels. For example, 2741the fifth definition of `6$' may be named `.L6C-A5'. 2742 2743 2744File: as.info, Node: Dot, Next: Symbol Attributes, Prev: Symbol Names, Up: Symbols 2745 27465.4 The Special Dot Symbol 2747========================== 2748 2749The special symbol `.' refers to the current address that `as' is 2750assembling into. Thus, the expression `melvin: .long .' defines 2751`melvin' to contain its own address. Assigning a value to `.' is 2752treated the same as a `.org' directive. Thus, the expression `.=.+4' 2753is the same as saying `.space 4'. 2754 2755 2756File: as.info, Node: Symbol Attributes, Prev: Dot, Up: Symbols 2757 27585.5 Symbol Attributes 2759===================== 2760 2761Every symbol has, as well as its name, the attributes "Value" and 2762"Type". Depending on output format, symbols can also have auxiliary 2763attributes. 2764 2765 If you use a symbol without defining it, `as' assumes zero for all 2766these attributes, and probably won't warn you. This makes the symbol 2767an externally defined symbol, which is generally what you would want. 2768 2769* Menu: 2770 2771* Symbol Value:: Value 2772* Symbol Type:: Type 2773 2774 2775* a.out Symbols:: Symbol Attributes: `a.out' 2776 2777* COFF Symbols:: Symbol Attributes for COFF 2778 2779* SOM Symbols:: Symbol Attributes for SOM 2780 2781 2782File: as.info, Node: Symbol Value, Next: Symbol Type, Up: Symbol Attributes 2783 27845.5.1 Value 2785----------- 2786 2787The value of a symbol is (usually) 32 bits. For a symbol which labels a 2788location in the text, data, bss or absolute sections the value is the 2789number of addresses from the start of that section to the label. 2790Naturally for text, data and bss sections the value of a symbol changes 2791as `ld' changes section base addresses during linking. Absolute 2792symbols' values do not change during linking: that is why they are 2793called absolute. 2794 2795 The value of an undefined symbol is treated in a special way. If it 2796is 0 then the symbol is not defined in this assembler source file, and 2797`ld' tries to determine its value from other files linked into the same 2798program. You make this kind of symbol simply by mentioning a symbol 2799name without defining it. A non-zero value represents a `.comm' common 2800declaration. The value is how much common storage to reserve, in bytes 2801(addresses). The symbol refers to the first address of the allocated 2802storage. 2803 2804 2805File: as.info, Node: Symbol Type, Next: a.out Symbols, Prev: Symbol Value, Up: Symbol Attributes 2806 28075.5.2 Type 2808---------- 2809 2810The type attribute of a symbol contains relocation (section) 2811information, any flag settings indicating that a symbol is external, and 2812(optionally), other information for linkers and debuggers. The exact 2813format depends on the object-code output format in use. 2814 2815 2816File: as.info, Node: a.out Symbols, Next: COFF Symbols, Prev: Symbol Type, Up: Symbol Attributes 2817 28185.5.3 Symbol Attributes: `a.out' 2819-------------------------------- 2820 2821* Menu: 2822 2823* Symbol Desc:: Descriptor 2824* Symbol Other:: Other 2825 2826 2827File: as.info, Node: Symbol Desc, Next: Symbol Other, Up: a.out Symbols 2828 28295.5.3.1 Descriptor 2830.................. 2831 2832This is an arbitrary 16-bit value. You may establish a symbol's 2833descriptor value by using a `.desc' statement (*note `.desc': Desc.). 2834A descriptor value means nothing to `as'. 2835 2836 2837File: as.info, Node: Symbol Other, Prev: Symbol Desc, Up: a.out Symbols 2838 28395.5.3.2 Other 2840............. 2841 2842This is an arbitrary 8-bit value. It means nothing to `as'. 2843 2844 2845File: as.info, Node: COFF Symbols, Next: SOM Symbols, Prev: a.out Symbols, Up: Symbol Attributes 2846 28475.5.4 Symbol Attributes for COFF 2848-------------------------------- 2849 2850The COFF format supports a multitude of auxiliary symbol attributes; 2851like the primary symbol attributes, they are set between `.def' and 2852`.endef' directives. 2853 28545.5.4.1 Primary Attributes 2855.......................... 2856 2857The symbol name is set with `.def'; the value and type, respectively, 2858with `.val' and `.type'. 2859 28605.5.4.2 Auxiliary Attributes 2861............................ 2862 2863The `as' directives `.dim', `.line', `.scl', `.size', `.tag', and 2864`.weak' can generate auxiliary symbol table information for COFF. 2865 2866 2867File: as.info, Node: SOM Symbols, Prev: COFF Symbols, Up: Symbol Attributes 2868 28695.5.5 Symbol Attributes for SOM 2870------------------------------- 2871 2872The SOM format for the HPPA supports a multitude of symbol attributes 2873set with the `.EXPORT' and `.IMPORT' directives. 2874 2875 The attributes are described in `HP9000 Series 800 Assembly Language 2876Reference Manual' (HP 92432-90001) under the `IMPORT' and `EXPORT' 2877assembler directive documentation. 2878 2879 2880File: as.info, Node: Expressions, Next: Pseudo Ops, Prev: Symbols, Up: Top 2881 28826 Expressions 2883************* 2884 2885An "expression" specifies an address or numeric value. Whitespace may 2886precede and/or follow an expression. 2887 2888 The result of an expression must be an absolute number, or else an 2889offset into a particular section. If an expression is not absolute, 2890and there is not enough information when `as' sees the expression to 2891know its section, a second pass over the source program might be 2892necessary to interpret the expression--but the second pass is currently 2893not implemented. `as' aborts with an error message in this situation. 2894 2895* Menu: 2896 2897* Empty Exprs:: Empty Expressions 2898* Integer Exprs:: Integer Expressions 2899 2900 2901File: as.info, Node: Empty Exprs, Next: Integer Exprs, Up: Expressions 2902 29036.1 Empty Expressions 2904===================== 2905 2906An empty expression has no value: it is just whitespace or null. 2907Wherever an absolute expression is required, you may omit the 2908expression, and `as' assumes a value of (absolute) 0. This is 2909compatible with other assemblers. 2910 2911 2912File: as.info, Node: Integer Exprs, Prev: Empty Exprs, Up: Expressions 2913 29146.2 Integer Expressions 2915======================= 2916 2917An "integer expression" is one or more _arguments_ delimited by 2918_operators_. 2919 2920* Menu: 2921 2922* Arguments:: Arguments 2923* Operators:: Operators 2924* Prefix Ops:: Prefix Operators 2925* Infix Ops:: Infix Operators 2926 2927 2928File: as.info, Node: Arguments, Next: Operators, Up: Integer Exprs 2929 29306.2.1 Arguments 2931--------------- 2932 2933"Arguments" are symbols, numbers or subexpressions. In other contexts 2934arguments are sometimes called "arithmetic operands". In this manual, 2935to avoid confusing them with the "instruction operands" of the machine 2936language, we use the term "argument" to refer to parts of expressions 2937only, reserving the word "operand" to refer only to machine instruction 2938operands. 2939 2940 Symbols are evaluated to yield {SECTION NNN} where SECTION is one of 2941text, data, bss, absolute, or undefined. NNN is a signed, 2's 2942complement 32 bit integer. 2943 2944 Numbers are usually integers. 2945 2946 A number can be a flonum or bignum. In this case, you are warned 2947that only the low order 32 bits are used, and `as' pretends these 32 2948bits are an integer. You may write integer-manipulating instructions 2949that act on exotic constants, compatible with other assemblers. 2950 2951 Subexpressions are a left parenthesis `(' followed by an integer 2952expression, followed by a right parenthesis `)'; or a prefix operator 2953followed by an argument. 2954 2955 2956File: as.info, Node: Operators, Next: Prefix Ops, Prev: Arguments, Up: Integer Exprs 2957 29586.2.2 Operators 2959--------------- 2960 2961"Operators" are arithmetic functions, like `+' or `%'. Prefix 2962operators are followed by an argument. Infix operators appear between 2963their arguments. Operators may be preceded and/or followed by 2964whitespace. 2965 2966 2967File: as.info, Node: Prefix Ops, Next: Infix Ops, Prev: Operators, Up: Integer Exprs 2968 29696.2.3 Prefix Operator 2970--------------------- 2971 2972`as' has the following "prefix operators". They each take one 2973argument, which must be absolute. 2974 2975`-' 2976 "Negation". Two's complement negation. 2977 2978`~' 2979 "Complementation". Bitwise not. 2980 2981 2982File: as.info, Node: Infix Ops, Prev: Prefix Ops, Up: Integer Exprs 2983 29846.2.4 Infix Operators 2985--------------------- 2986 2987"Infix operators" take two arguments, one on either side. Operators 2988have precedence, but operations with equal precedence are performed left 2989to right. Apart from `+' or `-', both arguments must be absolute, and 2990the result is absolute. 2991 2992 1. Highest Precedence 2993 2994 `*' 2995 "Multiplication". 2996 2997 `/' 2998 "Division". Truncation is the same as the C operator `/' 2999 3000 `%' 3001 "Remainder". 3002 3003 `<<' 3004 "Shift Left". Same as the C operator `<<'. 3005 3006 `>>' 3007 "Shift Right". Same as the C operator `>>'. 3008 3009 2. Intermediate precedence 3010 3011 `|' 3012 "Bitwise Inclusive Or". 3013 3014 `&' 3015 "Bitwise And". 3016 3017 `^' 3018 "Bitwise Exclusive Or". 3019 3020 `!' 3021 "Bitwise Or Not". 3022 3023 3. Low Precedence 3024 3025 `+' 3026 "Addition". If either argument is absolute, the result has 3027 the section of the other argument. You may not add together 3028 arguments from different sections. 3029 3030 `-' 3031 "Subtraction". If the right argument is absolute, the result 3032 has the section of the left argument. If both arguments are 3033 in the same section, the result is absolute. You may not 3034 subtract arguments from different sections. 3035 3036 `==' 3037 "Is Equal To" 3038 3039 `<>' 3040 `!=' 3041 "Is Not Equal To" 3042 3043 `<' 3044 "Is Less Than" 3045 3046 `>' 3047 "Is Greater Than" 3048 3049 `>=' 3050 "Is Greater Than Or Equal To" 3051 3052 `<=' 3053 "Is Less Than Or Equal To" 3054 3055 The comparison operators can be used as infix operators. A 3056 true results has a value of -1 whereas a false result has a 3057 value of 0. Note, these operators perform signed 3058 comparisons. 3059 3060 4. Lowest Precedence 3061 3062 `&&' 3063 "Logical And". 3064 3065 `||' 3066 "Logical Or". 3067 3068 These two logical operations can be used to combine the 3069 results of sub expressions. Note, unlike the comparison 3070 operators a true result returns a value of 1 but a false 3071 results does still return 0. Also note that the logical or 3072 operator has a slightly lower precedence than logical and. 3073 3074 3075 In short, it's only meaningful to add or subtract the _offsets_ in an 3076address; you can only have a defined section in one of the two 3077arguments. 3078 3079 3080File: as.info, Node: Pseudo Ops, Next: Object Attributes, Prev: Expressions, Up: Top 3081 30827 Assembler Directives 3083********************** 3084 3085All assembler directives have names that begin with a period (`.'). 3086The names are case insensitive for most targets, and usually written in 3087lower case. 3088 3089 This chapter discusses directives that are available regardless of 3090the target machine configuration for the GNU assembler. Some machine 3091configurations provide additional directives. *Note Machine 3092Dependencies::. 3093 3094* Menu: 3095 3096* Abort:: `.abort' 3097 3098* ABORT (COFF):: `.ABORT' 3099 3100* Align:: `.align ABS-EXPR , ABS-EXPR' 3101* Altmacro:: `.altmacro' 3102* Ascii:: `.ascii "STRING"'... 3103* Asciz:: `.asciz "STRING"'... 3104* Balign:: `.balign ABS-EXPR , ABS-EXPR' 3105* Bundle directives:: `.bundle_align_mode ABS-EXPR', etc 3106* Byte:: `.byte EXPRESSIONS' 3107* CFI directives:: `.cfi_startproc [simple]', `.cfi_endproc', etc. 3108* Comm:: `.comm SYMBOL , LENGTH ' 3109* Data:: `.data SUBSECTION' 3110 3111* Def:: `.def NAME' 3112 3113* Desc:: `.desc SYMBOL, ABS-EXPRESSION' 3114 3115* Dim:: `.dim' 3116 3117* Double:: `.double FLONUMS' 3118* Eject:: `.eject' 3119* Else:: `.else' 3120* Elseif:: `.elseif' 3121* End:: `.end' 3122 3123* Endef:: `.endef' 3124 3125* Endfunc:: `.endfunc' 3126* Endif:: `.endif' 3127* Equ:: `.equ SYMBOL, EXPRESSION' 3128* Equiv:: `.equiv SYMBOL, EXPRESSION' 3129* Eqv:: `.eqv SYMBOL, EXPRESSION' 3130* Err:: `.err' 3131* Error:: `.error STRING' 3132* Exitm:: `.exitm' 3133* Extern:: `.extern' 3134* Fail:: `.fail' 3135* File:: `.file' 3136* Fill:: `.fill REPEAT , SIZE , VALUE' 3137* Float:: `.float FLONUMS' 3138* Func:: `.func' 3139* Global:: `.global SYMBOL', `.globl SYMBOL' 3140 3141* Gnu_attribute:: `.gnu_attribute TAG,VALUE' 3142* Hidden:: `.hidden NAMES' 3143 3144* hword:: `.hword EXPRESSIONS' 3145* Ident:: `.ident' 3146* If:: `.if ABSOLUTE EXPRESSION' 3147* Incbin:: `.incbin "FILE"[,SKIP[,COUNT]]' 3148* Include:: `.include "FILE"' 3149* Int:: `.int EXPRESSIONS' 3150 3151* Internal:: `.internal NAMES' 3152 3153* Irp:: `.irp SYMBOL,VALUES'... 3154* Irpc:: `.irpc SYMBOL,VALUES'... 3155* Lcomm:: `.lcomm SYMBOL , LENGTH' 3156* Lflags:: `.lflags' 3157 3158* Line:: `.line LINE-NUMBER' 3159 3160* Linkonce:: `.linkonce [TYPE]' 3161* List:: `.list' 3162* Ln:: `.ln LINE-NUMBER' 3163* Loc:: `.loc FILENO LINENO' 3164* Loc_mark_labels:: `.loc_mark_labels ENABLE' 3165 3166* Local:: `.local NAMES' 3167 3168* Long:: `.long EXPRESSIONS' 3169 3170* Macro:: `.macro NAME ARGS'... 3171* MRI:: `.mri VAL' 3172* Noaltmacro:: `.noaltmacro' 3173* Nolist:: `.nolist' 3174* Octa:: `.octa BIGNUMS' 3175* Offset:: `.offset LOC' 3176* Org:: `.org NEW-LC, FILL' 3177* P2align:: `.p2align ABS-EXPR, ABS-EXPR, ABS-EXPR' 3178 3179* PopSection:: `.popsection' 3180* Previous:: `.previous' 3181 3182* Print:: `.print STRING' 3183 3184* Protected:: `.protected NAMES' 3185 3186* Psize:: `.psize LINES, COLUMNS' 3187* Purgem:: `.purgem NAME' 3188 3189* PushSection:: `.pushsection NAME' 3190 3191* Quad:: `.quad BIGNUMS' 3192* Reloc:: `.reloc OFFSET, RELOC_NAME[, EXPRESSION]' 3193* Rept:: `.rept COUNT' 3194* Sbttl:: `.sbttl "SUBHEADING"' 3195 3196* Scl:: `.scl CLASS' 3197 3198* Section:: `.section NAME[, FLAGS]' 3199 3200* Set:: `.set SYMBOL, EXPRESSION' 3201* Short:: `.short EXPRESSIONS' 3202* Single:: `.single FLONUMS' 3203 3204* Size:: `.size [NAME , EXPRESSION]' 3205 3206* Skip:: `.skip SIZE , FILL' 3207 3208* Sleb128:: `.sleb128 EXPRESSIONS' 3209 3210* Space:: `.space SIZE , FILL' 3211 3212* Stab:: `.stabd, .stabn, .stabs' 3213 3214* String:: `.string "STR"', `.string8 "STR"', `.string16 "STR"', `.string32 "STR"', `.string64 "STR"' 3215* Struct:: `.struct EXPRESSION' 3216 3217* SubSection:: `.subsection' 3218* Symver:: `.symver NAME,NAME2@NODENAME' 3219 3220 3221* Tag:: `.tag STRUCTNAME' 3222 3223* Text:: `.text SUBSECTION' 3224* Title:: `.title "HEADING"' 3225 3226* Type:: `.type <INT | NAME , TYPE DESCRIPTION>' 3227 3228* Uleb128:: `.uleb128 EXPRESSIONS' 3229 3230* Val:: `.val ADDR' 3231 3232 3233* Version:: `.version "STRING"' 3234* VTableEntry:: `.vtable_entry TABLE, OFFSET' 3235* VTableInherit:: `.vtable_inherit CHILD, PARENT' 3236 3237* Warning:: `.warning STRING' 3238* Weak:: `.weak NAMES' 3239* Weakref:: `.weakref ALIAS, SYMBOL' 3240* Word:: `.word EXPRESSIONS' 3241 3242* Zero:: `.zero SIZE' 3243* Deprecated:: Deprecated Directives 3244 3245 3246File: as.info, Node: Abort, Next: ABORT (COFF), Up: Pseudo Ops 3247 32487.1 `.abort' 3249============ 3250 3251This directive stops the assembly immediately. It is for compatibility 3252with other assemblers. The original idea was that the assembly 3253language source would be piped into the assembler. If the sender of 3254the source quit, it could use this directive tells `as' to quit also. 3255One day `.abort' will not be supported. 3256 3257 3258File: as.info, Node: ABORT (COFF), Next: Align, Prev: Abort, Up: Pseudo Ops 3259 32607.2 `.ABORT' (COFF) 3261=================== 3262 3263When producing COFF output, `as' accepts this directive as a synonym 3264for `.abort'. 3265 3266 3267File: as.info, Node: Align, Next: Altmacro, Prev: ABORT (COFF), Up: Pseudo Ops 3268 32697.3 `.align ABS-EXPR, ABS-EXPR, ABS-EXPR' 3270========================================= 3271 3272Pad the location counter (in the current subsection) to a particular 3273storage boundary. The first expression (which must be absolute) is the 3274alignment required, as described below. 3275 3276 The second expression (also absolute) gives the fill value to be 3277stored in the padding bytes. It (and the comma) may be omitted. If it 3278is omitted, the padding bytes are normally zero. However, on some 3279systems, if the section is marked as containing code and the fill value 3280is omitted, the space is filled with no-op instructions. 3281 3282 The third expression is also absolute, and is also optional. If it 3283is present, it is the maximum number of bytes that should be skipped by 3284this alignment directive. If doing the alignment would require 3285skipping more bytes than the specified maximum, then the alignment is 3286not done at all. You can omit the fill value (the second argument) 3287entirely by simply using two commas after the required alignment; this 3288can be useful if you want the alignment to be filled with no-op 3289instructions when appropriate. 3290 3291 The way the required alignment is specified varies from system to 3292system. For the arc, hppa, i386 using ELF, i860, iq2000, m68k, or1k, 3293s390, sparc, tic4x, tic80 and xtensa, the first expression is the 3294alignment request in bytes. For example `.align 8' advances the 3295location counter until it is a multiple of 8. If the location counter 3296is already a multiple of 8, no change is needed. For the tic54x, the 3297first expression is the alignment request in words. 3298 3299 For other systems, including ppc, i386 using a.out format, arm and 3300strongarm, it is the number of low-order zero bits the location counter 3301must have after advancement. For example `.align 3' advances the 3302location counter until it a multiple of 8. If the location counter is 3303already a multiple of 8, no change is needed. 3304 3305 This inconsistency is due to the different behaviors of the various 3306native assemblers for these systems which GAS must emulate. GAS also 3307provides `.balign' and `.p2align' directives, described later, which 3308have a consistent behavior across all architectures (but are specific 3309to GAS). 3310 3311 3312File: as.info, Node: Altmacro, Next: Ascii, Prev: Align, Up: Pseudo Ops 3313 33147.4 `.altmacro' 3315=============== 3316 3317Enable alternate macro mode, enabling: 3318 3319`LOCAL NAME [ , ... ]' 3320 One additional directive, `LOCAL', is available. It is used to 3321 generate a string replacement for each of the NAME arguments, and 3322 replace any instances of NAME in each macro expansion. The 3323 replacement string is unique in the assembly, and different for 3324 each separate macro expansion. `LOCAL' allows you to write macros 3325 that define symbols, without fear of conflict between separate 3326 macro expansions. 3327 3328`String delimiters' 3329 You can write strings delimited in these other ways besides 3330 `"STRING"': 3331 3332 `'STRING'' 3333 You can delimit strings with single-quote characters. 3334 3335 `<STRING>' 3336 You can delimit strings with matching angle brackets. 3337 3338`single-character string escape' 3339 To include any single character literally in a string (even if the 3340 character would otherwise have some special meaning), you can 3341 prefix the character with `!' (an exclamation mark). For example, 3342 you can write `<4.3 !> 5.4!!>' to get the literal text `4.3 > 3343 5.4!'. 3344 3345`Expression results as strings' 3346 You can write `%EXPR' to evaluate the expression EXPR and use the 3347 result as a string. 3348 3349 3350File: as.info, Node: Ascii, Next: Asciz, Prev: Altmacro, Up: Pseudo Ops 3351 33527.5 `.ascii "STRING"'... 3353======================== 3354 3355`.ascii' expects zero or more string literals (*note Strings::) 3356separated by commas. It assembles each string (with no automatic 3357trailing zero byte) into consecutive addresses. 3358 3359 3360File: as.info, Node: Asciz, Next: Balign, Prev: Ascii, Up: Pseudo Ops 3361 33627.6 `.asciz "STRING"'... 3363======================== 3364 3365`.asciz' is just like `.ascii', but each string is followed by a zero 3366byte. The "z" in `.asciz' stands for "zero". 3367 3368 3369File: as.info, Node: Balign, Next: Bundle directives, Prev: Asciz, Up: Pseudo Ops 3370 33717.7 `.balign[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR' 3372============================================== 3373 3374Pad the location counter (in the current subsection) to a particular 3375storage boundary. The first expression (which must be absolute) is the 3376alignment request in bytes. For example `.balign 8' advances the 3377location counter until it is a multiple of 8. If the location counter 3378is already a multiple of 8, no change is needed. 3379 3380 The second expression (also absolute) gives the fill value to be 3381stored in the padding bytes. It (and the comma) may be omitted. If it 3382is omitted, the padding bytes are normally zero. However, on some 3383systems, if the section is marked as containing code and the fill value 3384is omitted, the space is filled with no-op instructions. 3385 3386 The third expression is also absolute, and is also optional. If it 3387is present, it is the maximum number of bytes that should be skipped by 3388this alignment directive. If doing the alignment would require 3389skipping more bytes than the specified maximum, then the alignment is 3390not done at all. You can omit the fill value (the second argument) 3391entirely by simply using two commas after the required alignment; this 3392can be useful if you want the alignment to be filled with no-op 3393instructions when appropriate. 3394 3395 The `.balignw' and `.balignl' directives are variants of the 3396`.balign' directive. The `.balignw' directive treats the fill pattern 3397as a two byte word value. The `.balignl' directives treats the fill 3398pattern as a four byte longword value. For example, `.balignw 33994,0x368d' will align to a multiple of 4. If it skips two bytes, they 3400will be filled in with the value 0x368d (the exact placement of the 3401bytes depends upon the endianness of the processor). If it skips 1 or 34023 bytes, the fill value is undefined. 3403 3404 3405File: as.info, Node: Bundle directives, Next: Byte, Prev: Balign, Up: Pseudo Ops 3406 34077.8 Bundle directives 3408===================== 3409 34107.8.1 `.bundle_align_mode ABS-EXPR' 3411----------------------------------- 3412 3413`.bundle_align_mode' enables or disables "aligned instruction bundle" 3414mode. In this mode, sequences of adjacent instructions are grouped 3415into fixed-sized "bundles". If the argument is zero, this mode is 3416disabled (which is the default state). If the argument it not zero, it 3417gives the size of an instruction bundle as a power of two (as for the 3418`.p2align' directive, *note P2align::). 3419 3420 For some targets, it's an ABI requirement that no instruction may 3421span a certain aligned boundary. A "bundle" is simply a sequence of 3422instructions that starts on an aligned boundary. For example, if 3423ABS-EXPR is `5' then the bundle size is 32, so each aligned chunk of 32 3424bytes is a bundle. When aligned instruction bundle mode is in effect, 3425no single instruction may span a boundary between bundles. If an 3426instruction would start too close to the end of a bundle for the length 3427of that particular instruction to fit within the bundle, then the space 3428at the end of that bundle is filled with no-op instructions so the 3429instruction starts in the next bundle. As a corollary, it's an error 3430if any single instruction's encoding is longer than the bundle size. 3431 34327.8.2 `.bundle_lock' and `.bundle_unlock' 3433----------------------------------------- 3434 3435The `.bundle_lock' and directive `.bundle_unlock' directives allow 3436explicit control over instruction bundle padding. These directives are 3437only valid when `.bundle_align_mode' has been used to enable aligned 3438instruction bundle mode. It's an error if they appear when 3439`.bundle_align_mode' has not been used at all, or when the last 3440directive was `.bundle_align_mode 0'. 3441 3442 For some targets, it's an ABI requirement that certain instructions 3443may appear only as part of specified permissible sequences of multiple 3444instructions, all within the same bundle. A pair of `.bundle_lock' and 3445`.bundle_unlock' directives define a "bundle-locked" instruction 3446sequence. For purposes of aligned instruction bundle mode, a sequence 3447starting with `.bundle_lock' and ending with `.bundle_unlock' is 3448treated as a single instruction. That is, the entire sequence must fit 3449into a single bundle and may not span a bundle boundary. If necessary, 3450no-op instructions will be inserted before the first instruction of the 3451sequence so that the whole sequence starts on an aligned bundle 3452boundary. It's an error if the sequence is longer than the bundle size. 3453 3454 For convenience when using `.bundle_lock' and `.bundle_unlock' 3455inside assembler macros (*note Macro::), bundle-locked sequences may be 3456nested. That is, a second `.bundle_lock' directive before the next 3457`.bundle_unlock' directive has no effect except that it must be matched 3458by another closing `.bundle_unlock' so that there is the same number of 3459`.bundle_lock' and `.bundle_unlock' directives. 3460 3461 3462File: as.info, Node: Byte, Next: CFI directives, Prev: Bundle directives, Up: Pseudo Ops 3463 34647.9 `.byte EXPRESSIONS' 3465======================= 3466 3467`.byte' expects zero or more expressions, separated by commas. Each 3468expression is assembled into the next byte. 3469 3470 3471File: as.info, Node: CFI directives, Next: Comm, Prev: Byte, Up: Pseudo Ops 3472 34737.10 CFI directives 3474=================== 3475 34767.10.1 `.cfi_sections SECTION_LIST' 3477----------------------------------- 3478 3479`.cfi_sections' may be used to specify whether CFI directives should 3480emit `.eh_frame' section and/or `.debug_frame' section. If 3481SECTION_LIST is `.eh_frame', `.eh_frame' is emitted, if SECTION_LIST is 3482`.debug_frame', `.debug_frame' is emitted. To emit both use 3483`.eh_frame, .debug_frame'. The default if this directive is not used 3484is `.cfi_sections .eh_frame'. 3485 3486 On targets that support compact unwinding tables these can be 3487generated by specifying `.eh_frame_entry' instead of `.eh_frame'. 3488 3489 Some targets may support an additional name, such as `.c6xabi.exidx' 3490which is used by the target. 3491 3492 The `.cfi_sections' directive can be repeated, with the same or 3493different arguments, provided that CFI generation has not yet started. 3494Once CFI generation has started however the section list is fixed and 3495any attempts to redefine it will result in an error. 3496 34977.10.2 `.cfi_startproc [simple]' 3498-------------------------------- 3499 3500`.cfi_startproc' is used at the beginning of each function that should 3501have an entry in `.eh_frame'. It initializes some internal data 3502structures. Don't forget to close the function by `.cfi_endproc'. 3503 3504 Unless `.cfi_startproc' is used along with parameter `simple' it 3505also emits some architecture dependent initial CFI instructions. 3506 35077.10.3 `.cfi_endproc' 3508--------------------- 3509 3510`.cfi_endproc' is used at the end of a function where it closes its 3511unwind entry previously opened by `.cfi_startproc', and emits it to 3512`.eh_frame'. 3513 35147.10.4 `.cfi_personality ENCODING [, EXP]' 3515------------------------------------------ 3516 3517`.cfi_personality' defines personality routine and its encoding. 3518ENCODING must be a constant determining how the personality should be 3519encoded. If it is 255 (`DW_EH_PE_omit'), second argument is not 3520present, otherwise second argument should be a constant or a symbol 3521name. When using indirect encodings, the symbol provided should be the 3522location where personality can be loaded from, not the personality 3523routine itself. The default after `.cfi_startproc' is 3524`.cfi_personality 0xff', no personality routine. 3525 35267.10.5 `.cfi_personality_id ID' 3527------------------------------- 3528 3529`cfi_personality_id' defines a personality routine by its index as 3530defined in a compact unwinding format. Only valid when generating 3531compact EH frames (i.e. with `.cfi_sections eh_frame_entry'. 3532 35337.10.6 `.cfi_fde_data [OPCODE1 [, ...]]' 3534---------------------------------------- 3535 3536`cfi_fde_data' is used to describe the compact unwind opcodes to be 3537used for the current function. These are emitted inline in the 3538`.eh_frame_entry' section if small enough and there is no LSDA, or in 3539the `.gnu.extab' section otherwise. Only valid when generating compact 3540EH frames (i.e. with `.cfi_sections eh_frame_entry'. 3541 35427.10.7 `.cfi_lsda ENCODING [, EXP]' 3543----------------------------------- 3544 3545`.cfi_lsda' defines LSDA and its encoding. ENCODING must be a constant 3546determining how the LSDA should be encoded. If it is 255 3547(`DW_EH_PE_omit'), the second argument is not present, otherwise the 3548second argument should be a constant or a symbol name. The default 3549after `.cfi_startproc' is `.cfi_lsda 0xff', meaning that no LSDA is 3550present. 3551 35527.10.8 `.cfi_inline_lsda' [ALIGN] 3553--------------------------------- 3554 3555`.cfi_inline_lsda' marks the start of a LSDA data section and switches 3556to the corresponding `.gnu.extab' section. Must be preceded by a CFI 3557block containing a `.cfi_lsda' directive. Only valid when generating 3558compact EH frames (i.e. with `.cfi_sections eh_frame_entry'. 3559 3560 The table header and unwinding opcodes will be generated at this 3561point, so that they are immediately followed by the LSDA data. The 3562symbol referenced by the `.cfi_lsda' directive should still be defined 3563in case a fallback FDE based encoding is used. The LSDA data is 3564terminated by a section directive. 3565 3566 The optional ALIGN argument specifies the alignment required. The 3567alignment is specified as a power of two, as with the `.p2align' 3568directive. 3569 35707.10.9 `.cfi_def_cfa REGISTER, OFFSET' 3571-------------------------------------- 3572 3573`.cfi_def_cfa' defines a rule for computing CFA as: take address from 3574REGISTER and add OFFSET to it. 3575 35767.10.10 `.cfi_def_cfa_register REGISTER' 3577---------------------------------------- 3578 3579`.cfi_def_cfa_register' modifies a rule for computing CFA. From now on 3580REGISTER will be used instead of the old one. Offset remains the same. 3581 35827.10.11 `.cfi_def_cfa_offset OFFSET' 3583------------------------------------ 3584 3585`.cfi_def_cfa_offset' modifies a rule for computing CFA. Register 3586remains the same, but OFFSET is new. Note that it is the absolute 3587offset that will be added to a defined register to compute CFA address. 3588 35897.10.12 `.cfi_adjust_cfa_offset OFFSET' 3590--------------------------------------- 3591 3592Same as `.cfi_def_cfa_offset' but OFFSET is a relative value that is 3593added/substracted from the previous offset. 3594 35957.10.13 `.cfi_offset REGISTER, OFFSET' 3596-------------------------------------- 3597 3598Previous value of REGISTER is saved at offset OFFSET from CFA. 3599 36007.10.14 `.cfi_rel_offset REGISTER, OFFSET' 3601------------------------------------------ 3602 3603Previous value of REGISTER is saved at offset OFFSET from the current 3604CFA register. This is transformed to `.cfi_offset' using the known 3605displacement of the CFA register from the CFA. This is often easier to 3606use, because the number will match the code it's annotating. 3607 36087.10.15 `.cfi_register REGISTER1, REGISTER2' 3609-------------------------------------------- 3610 3611Previous value of REGISTER1 is saved in register REGISTER2. 3612 36137.10.16 `.cfi_restore REGISTER' 3614------------------------------- 3615 3616`.cfi_restore' says that the rule for REGISTER is now the same as it 3617was at the beginning of the function, after all initial instruction 3618added by `.cfi_startproc' were executed. 3619 36207.10.17 `.cfi_undefined REGISTER' 3621--------------------------------- 3622 3623From now on the previous value of REGISTER can't be restored anymore. 3624 36257.10.18 `.cfi_same_value REGISTER' 3626---------------------------------- 3627 3628Current value of REGISTER is the same like in the previous frame, i.e. 3629no restoration needed. 3630 36317.10.19 `.cfi_remember_state' and `.cfi_restore_state' 3632------------------------------------------------------ 3633 3634`.cfi_remember_state' pushes the set of rules for every register onto an 3635implicit stack, while `.cfi_restore_state' pops them off the stack and 3636places them in the current row. This is useful for situations where 3637you have multiple `.cfi_*' directives that need to be undone due to the 3638control flow of the program. For example, we could have something like 3639this (assuming the CFA is the value of `rbp'): 3640 3641 je label 3642 popq %rbx 3643 .cfi_restore %rbx 3644 popq %r12 3645 .cfi_restore %r12 3646 popq %rbp 3647 .cfi_restore %rbp 3648 .cfi_def_cfa %rsp, 8 3649 ret 3650 label: 3651 /* Do something else */ 3652 3653 Here, we want the `.cfi' directives to affect only the rows 3654corresponding to the instructions before `label'. This means we'd have 3655to add multiple `.cfi' directives after `label' to recreate the 3656original save locations of the registers, as well as setting the CFA 3657back to the value of `rbp'. This would be clumsy, and result in a 3658larger binary size. Instead, we can write: 3659 3660 je label 3661 popq %rbx 3662 .cfi_remember_state 3663 .cfi_restore %rbx 3664 popq %r12 3665 .cfi_restore %r12 3666 popq %rbp 3667 .cfi_restore %rbp 3668 .cfi_def_cfa %rsp, 8 3669 ret 3670 label: 3671 .cfi_restore_state 3672 /* Do something else */ 3673 3674 That way, the rules for the instructions after `label' will be the 3675same as before the first `.cfi_restore' without having to use multiple 3676`.cfi' directives. 3677 36787.10.20 `.cfi_return_column REGISTER' 3679------------------------------------- 3680 3681Change return column REGISTER, i.e. the return address is either 3682directly in REGISTER or can be accessed by rules for REGISTER. 3683 36847.10.21 `.cfi_signal_frame' 3685--------------------------- 3686 3687Mark current function as signal trampoline. 3688 36897.10.22 `.cfi_window_save' 3690-------------------------- 3691 3692SPARC register window has been saved. 3693 36947.10.23 `.cfi_escape' EXPRESSION[, ...] 3695--------------------------------------- 3696 3697Allows the user to add arbitrary bytes to the unwind info. One might 3698use this to add OS-specific CFI opcodes, or generic CFI opcodes that 3699GAS does not yet support. 3700 37017.10.24 `.cfi_val_encoded_addr REGISTER, ENCODING, LABEL' 3702--------------------------------------------------------- 3703 3704The current value of REGISTER is LABEL. The value of LABEL will be 3705encoded in the output file according to ENCODING; see the description 3706of `.cfi_personality' for details on this encoding. 3707 3708 The usefulness of equating a register to a fixed label is probably 3709limited to the return address register. Here, it can be useful to mark 3710a code segment that has only one return address which is reached by a 3711direct branch and no copy of the return address exists in memory or 3712another register. 3713 3714 3715File: as.info, Node: Comm, Next: Data, Prev: CFI directives, Up: Pseudo Ops 3716 37177.11 `.comm SYMBOL , LENGTH ' 3718============================= 3719 3720`.comm' declares a common symbol named SYMBOL. When linking, a common 3721symbol in one object file may be merged with a defined or common symbol 3722of the same name in another object file. If `ld' does not see a 3723definition for the symbol-just one or more common symbols-then it will 3724allocate LENGTH bytes of uninitialized memory. LENGTH must be an 3725absolute expression. If `ld' sees multiple common symbols with the 3726same name, and they do not all have the same size, it will allocate 3727space using the largest size. 3728 3729 When using ELF or (as a GNU extension) PE, the `.comm' directive 3730takes an optional third argument. This is the desired alignment of the 3731symbol, specified for ELF as a byte boundary (for example, an alignment 3732of 16 means that the least significant 4 bits of the address should be 3733zero), and for PE as a power of two (for example, an alignment of 5 3734means aligned to a 32-byte boundary). The alignment must be an 3735absolute expression, and it must be a power of two. If `ld' allocates 3736uninitialized memory for the common symbol, it will use the alignment 3737when placing the symbol. If no alignment is specified, `as' will set 3738the alignment to the largest power of two less than or equal to the 3739size of the symbol, up to a maximum of 16 on ELF, or the default 3740section alignment of 4 on PE(1). 3741 3742 The syntax for `.comm' differs slightly on the HPPA. The syntax is 3743`SYMBOL .comm, LENGTH'; SYMBOL is optional. 3744 3745 ---------- Footnotes ---------- 3746 3747 (1) This is not the same as the executable image file alignment 3748controlled by `ld''s `--section-alignment' option; image file sections 3749in PE are aligned to multiples of 4096, which is far too large an 3750alignment for ordinary variables. It is rather the default alignment 3751for (non-debug) sections within object (`*.o') files, which are less 3752strictly aligned. 3753 3754 3755File: as.info, Node: Data, Next: Def, Prev: Comm, Up: Pseudo Ops 3756 37577.12 `.data SUBSECTION' 3758======================= 3759 3760`.data' tells `as' to assemble the following statements onto the end of 3761the data subsection numbered SUBSECTION (which is an absolute 3762expression). If SUBSECTION is omitted, it defaults to zero. 3763 3764 3765File: as.info, Node: Def, Next: Desc, Prev: Data, Up: Pseudo Ops 3766 37677.13 `.def NAME' 3768================ 3769 3770Begin defining debugging information for a symbol NAME; the definition 3771extends until the `.endef' directive is encountered. 3772 3773 3774File: as.info, Node: Desc, Next: Dim, Prev: Def, Up: Pseudo Ops 3775 37767.14 `.desc SYMBOL, ABS-EXPRESSION' 3777=================================== 3778 3779This directive sets the descriptor of the symbol (*note Symbol 3780Attributes::) to the low 16 bits of an absolute expression. 3781 3782 The `.desc' directive is not available when `as' is configured for 3783COFF output; it is only for `a.out' or `b.out' object format. For the 3784sake of compatibility, `as' accepts it, but produces no output, when 3785configured for COFF. 3786 3787 3788File: as.info, Node: Dim, Next: Double, Prev: Desc, Up: Pseudo Ops 3789 37907.15 `.dim' 3791=========== 3792 3793This directive is generated by compilers to include auxiliary debugging 3794information in the symbol table. It is only permitted inside 3795`.def'/`.endef' pairs. 3796 3797 3798File: as.info, Node: Double, Next: Eject, Prev: Dim, Up: Pseudo Ops 3799 38007.16 `.double FLONUMS' 3801====================== 3802 3803`.double' expects zero or more flonums, separated by commas. It 3804assembles floating point numbers. The exact kind of floating point 3805numbers emitted depends on how `as' is configured. *Note Machine 3806Dependencies::. 3807 3808 3809File: as.info, Node: Eject, Next: Else, Prev: Double, Up: Pseudo Ops 3810 38117.17 `.eject' 3812============= 3813 3814Force a page break at this point, when generating assembly listings. 3815 3816 3817File: as.info, Node: Else, Next: Elseif, Prev: Eject, Up: Pseudo Ops 3818 38197.18 `.else' 3820============ 3821 3822`.else' is part of the `as' support for conditional assembly; see *Note 3823`.if': If. It marks the beginning of a section of code to be assembled 3824if the condition for the preceding `.if' was false. 3825 3826 3827File: as.info, Node: Elseif, Next: End, Prev: Else, Up: Pseudo Ops 3828 38297.19 `.elseif' 3830============== 3831 3832`.elseif' is part of the `as' support for conditional assembly; see 3833*Note `.if': If. It is shorthand for beginning a new `.if' block that 3834would otherwise fill the entire `.else' section. 3835 3836 3837File: as.info, Node: End, Next: Endef, Prev: Elseif, Up: Pseudo Ops 3838 38397.20 `.end' 3840=========== 3841 3842`.end' marks the end of the assembly file. `as' does not process 3843anything in the file past the `.end' directive. 3844 3845 3846File: as.info, Node: Endef, Next: Endfunc, Prev: End, Up: Pseudo Ops 3847 38487.21 `.endef' 3849============= 3850 3851This directive flags the end of a symbol definition begun with `.def'. 3852 3853 3854File: as.info, Node: Endfunc, Next: Endif, Prev: Endef, Up: Pseudo Ops 3855 38567.22 `.endfunc' 3857=============== 3858 3859`.endfunc' marks the end of a function specified with `.func'. 3860 3861 3862File: as.info, Node: Endif, Next: Equ, Prev: Endfunc, Up: Pseudo Ops 3863 38647.23 `.endif' 3865============= 3866 3867`.endif' is part of the `as' support for conditional assembly; it marks 3868the end of a block of code that is only assembled conditionally. *Note 3869`.if': If. 3870 3871 3872File: as.info, Node: Equ, Next: Equiv, Prev: Endif, Up: Pseudo Ops 3873 38747.24 `.equ SYMBOL, EXPRESSION' 3875============================== 3876 3877This directive sets the value of SYMBOL to EXPRESSION. It is 3878synonymous with `.set'; see *Note `.set': Set. 3879 3880 The syntax for `equ' on the HPPA is `SYMBOL .equ EXPRESSION'. 3881 3882 The syntax for `equ' on the Z80 is `SYMBOL equ EXPRESSION'. On the 3883Z80 it is an eror if SYMBOL is already defined, but the symbol is not 3884protected from later redefinition. Compare *Note Equiv::. 3885 3886 3887File: as.info, Node: Equiv, Next: Eqv, Prev: Equ, Up: Pseudo Ops 3888 38897.25 `.equiv SYMBOL, EXPRESSION' 3890================================ 3891 3892The `.equiv' directive is like `.equ' and `.set', except that the 3893assembler will signal an error if SYMBOL is already defined. Note a 3894symbol which has been referenced but not actually defined is considered 3895to be undefined. 3896 3897 Except for the contents of the error message, this is roughly 3898equivalent to 3899 .ifdef SYM 3900 .err 3901 .endif 3902 .equ SYM,VAL 3903 plus it protects the symbol from later redefinition. 3904 3905 3906File: as.info, Node: Eqv, Next: Err, Prev: Equiv, Up: Pseudo Ops 3907 39087.26 `.eqv SYMBOL, EXPRESSION' 3909============================== 3910 3911The `.eqv' directive is like `.equiv', but no attempt is made to 3912evaluate the expression or any part of it immediately. Instead each 3913time the resulting symbol is used in an expression, a snapshot of its 3914current value is taken. 3915 3916 3917File: as.info, Node: Err, Next: Error, Prev: Eqv, Up: Pseudo Ops 3918 39197.27 `.err' 3920=========== 3921 3922If `as' assembles a `.err' directive, it will print an error message 3923and, unless the `-Z' option was used, it will not generate an object 3924file. This can be used to signal an error in conditionally compiled 3925code. 3926 3927 3928File: as.info, Node: Error, Next: Exitm, Prev: Err, Up: Pseudo Ops 3929 39307.28 `.error "STRING"' 3931====================== 3932 3933Similarly to `.err', this directive emits an error, but you can specify 3934a string that will be emitted as the error message. If you don't 3935specify the message, it defaults to `".error directive invoked in 3936source file"'. *Note Error and Warning Messages: Errors. 3937 3938 .error "This code has not been assembled and tested." 3939 3940 3941File: as.info, Node: Exitm, Next: Extern, Prev: Error, Up: Pseudo Ops 3942 39437.29 `.exitm' 3944============= 3945 3946Exit early from the current macro definition. *Note Macro::. 3947 3948 3949File: as.info, Node: Extern, Next: Fail, Prev: Exitm, Up: Pseudo Ops 3950 39517.30 `.extern' 3952============== 3953 3954`.extern' is accepted in the source program--for compatibility with 3955other assemblers--but it is ignored. `as' treats all undefined symbols 3956as external. 3957 3958 3959File: as.info, Node: Fail, Next: File, Prev: Extern, Up: Pseudo Ops 3960 39617.31 `.fail EXPRESSION' 3962======================= 3963 3964Generates an error or a warning. If the value of the EXPRESSION is 500 3965or more, `as' will print a warning message. If the value is less than 3966500, `as' will print an error message. The message will include the 3967value of EXPRESSION. This can occasionally be useful inside complex 3968nested macros or conditional assembly. 3969 3970 3971File: as.info, Node: File, Next: Fill, Prev: Fail, Up: Pseudo Ops 3972 39737.32 `.file' 3974============ 3975 3976There are two different versions of the `.file' directive. Targets 3977that support DWARF2 line number information use the DWARF2 version of 3978`.file'. Other targets use the default version. 3979 3980Default Version 3981--------------- 3982 3983This version of the `.file' directive tells `as' that we are about to 3984start a new logical file. The syntax is: 3985 3986 .file STRING 3987 3988 STRING is the new file name. In general, the filename is recognized 3989whether or not it is surrounded by quotes `"'; but if you wish to 3990specify an empty file name, you must give the quotes-`""'. This 3991statement may go away in future: it is only recognized to be compatible 3992with old `as' programs. 3993 3994DWARF2 Version 3995-------------- 3996 3997When emitting DWARF2 line number information, `.file' assigns filenames 3998to the `.debug_line' file name table. The syntax is: 3999 4000 .file FILENO FILENAME 4001 4002 The FILENO operand should be a unique positive integer to use as the 4003index of the entry in the table. The FILENAME operand is a C string 4004literal. 4005 4006 The detail of filename indices is exposed to the user because the 4007filename table is shared with the `.debug_info' section of the DWARF2 4008debugging information, and thus the user must know the exact indices 4009that table entries will have. 4010 4011 4012File: as.info, Node: Fill, Next: Float, Prev: File, Up: Pseudo Ops 4013 40147.33 `.fill REPEAT , SIZE , VALUE' 4015================================== 4016 4017REPEAT, SIZE and VALUE are absolute expressions. This emits REPEAT 4018copies of SIZE bytes. REPEAT may be zero or more. SIZE may be zero or 4019more, but if it is more than 8, then it is deemed to have the value 8, 4020compatible with other people's assemblers. The contents of each REPEAT 4021bytes is taken from an 8-byte number. The highest order 4 bytes are 4022zero. The lowest order 4 bytes are VALUE rendered in the byte-order of 4023an integer on the computer `as' is assembling for. Each SIZE bytes in 4024a repetition is taken from the lowest order SIZE bytes of this number. 4025Again, this bizarre behavior is compatible with other people's 4026assemblers. 4027 4028 SIZE and VALUE are optional. If the second comma and VALUE are 4029absent, VALUE is assumed zero. If the first comma and following tokens 4030are absent, SIZE is assumed to be 1. 4031 4032 4033File: as.info, Node: Float, Next: Func, Prev: Fill, Up: Pseudo Ops 4034 40357.34 `.float FLONUMS' 4036===================== 4037 4038This directive assembles zero or more flonums, separated by commas. It 4039has the same effect as `.single'. The exact kind of floating point 4040numbers emitted depends on how `as' is configured. *Note Machine 4041Dependencies::. 4042 4043 4044File: as.info, Node: Func, Next: Global, Prev: Float, Up: Pseudo Ops 4045 40467.35 `.func NAME[,LABEL]' 4047========================= 4048 4049`.func' emits debugging information to denote function NAME, and is 4050ignored unless the file is assembled with debugging enabled. Only 4051`--gstabs[+]' is currently supported. LABEL is the entry point of the 4052function and if omitted NAME prepended with the `leading char' is used. 4053`leading char' is usually `_' or nothing, depending on the target. All 4054functions are currently defined to have `void' return type. The 4055function must be terminated with `.endfunc'. 4056 4057 4058File: as.info, Node: Global, Next: Gnu_attribute, Prev: Func, Up: Pseudo Ops 4059 40607.36 `.global SYMBOL', `.globl SYMBOL' 4061====================================== 4062 4063`.global' makes the symbol visible to `ld'. If you define SYMBOL in 4064your partial program, its value is made available to other partial 4065programs that are linked with it. Otherwise, SYMBOL takes its 4066attributes from a symbol of the same name from another file linked into 4067the same program. 4068 4069 Both spellings (`.globl' and `.global') are accepted, for 4070compatibility with other assemblers. 4071 4072 On the HPPA, `.global' is not always enough to make it accessible to 4073other partial programs. You may need the HPPA-only `.EXPORT' directive 4074as well. *Note HPPA Assembler Directives: HPPA Directives. 4075 4076 4077File: as.info, Node: Gnu_attribute, Next: Hidden, Prev: Global, Up: Pseudo Ops 4078 40797.37 `.gnu_attribute TAG,VALUE' 4080=============================== 4081 4082Record a GNU object attribute for this file. *Note Object Attributes::. 4083 4084 4085File: as.info, Node: Hidden, Next: hword, Prev: Gnu_attribute, Up: Pseudo Ops 4086 40877.38 `.hidden NAMES' 4088==================== 4089 4090This is one of the ELF visibility directives. The other two are 4091`.internal' (*note `.internal': Internal.) and `.protected' (*note 4092`.protected': Protected.). 4093 4094 This directive overrides the named symbols default visibility (which 4095is set by their binding: local, global or weak). The directive sets 4096the visibility to `hidden' which means that the symbols are not visible 4097to other components. Such symbols are always considered to be 4098`protected' as well. 4099 4100 4101File: as.info, Node: hword, Next: Ident, Prev: Hidden, Up: Pseudo Ops 4102 41037.39 `.hword EXPRESSIONS' 4104========================= 4105 4106This expects zero or more EXPRESSIONS, and emits a 16 bit number for 4107each. 4108 4109 This directive is a synonym for `.short'; depending on the target 4110architecture, it may also be a synonym for `.word'. 4111 4112 4113File: as.info, Node: Ident, Next: If, Prev: hword, Up: Pseudo Ops 4114 41157.40 `.ident' 4116============= 4117 4118This directive is used by some assemblers to place tags in object 4119files. The behavior of this directive varies depending on the target. 4120When using the a.out object file format, `as' simply accepts the 4121directive for source-file compatibility with existing assemblers, but 4122does not emit anything for it. When using COFF, comments are emitted 4123to the `.comment' or `.rdata' section, depending on the target. When 4124using ELF, comments are emitted to the `.comment' section. 4125 4126 4127File: as.info, Node: If, Next: Incbin, Prev: Ident, Up: Pseudo Ops 4128 41297.41 `.if ABSOLUTE EXPRESSION' 4130============================== 4131 4132`.if' marks the beginning of a section of code which is only considered 4133part of the source program being assembled if the argument (which must 4134be an ABSOLUTE EXPRESSION) is non-zero. The end of the conditional 4135section of code must be marked by `.endif' (*note `.endif': Endif.); 4136optionally, you may include code for the alternative condition, flagged 4137by `.else' (*note `.else': Else.). If you have several conditions to 4138check, `.elseif' may be used to avoid nesting blocks if/else within 4139each subsequent `.else' block. 4140 4141 The following variants of `.if' are also supported: 4142`.ifdef SYMBOL' 4143 Assembles the following section of code if the specified SYMBOL 4144 has been defined. Note a symbol which has been referenced but not 4145 yet defined is considered to be undefined. 4146 4147`.ifb TEXT' 4148 Assembles the following section of code if the operand is blank 4149 (empty). 4150 4151`.ifc STRING1,STRING2' 4152 Assembles the following section of code if the two strings are the 4153 same. The strings may be optionally quoted with single quotes. 4154 If they are not quoted, the first string stops at the first comma, 4155 and the second string stops at the end of the line. Strings which 4156 contain whitespace should be quoted. The string comparison is 4157 case sensitive. 4158 4159`.ifeq ABSOLUTE EXPRESSION' 4160 Assembles the following section of code if the argument is zero. 4161 4162`.ifeqs STRING1,STRING2' 4163 Another form of `.ifc'. The strings must be quoted using double 4164 quotes. 4165 4166`.ifge ABSOLUTE EXPRESSION' 4167 Assembles the following section of code if the argument is greater 4168 than or equal to zero. 4169 4170`.ifgt ABSOLUTE EXPRESSION' 4171 Assembles the following section of code if the argument is greater 4172 than zero. 4173 4174`.ifle ABSOLUTE EXPRESSION' 4175 Assembles the following section of code if the argument is less 4176 than or equal to zero. 4177 4178`.iflt ABSOLUTE EXPRESSION' 4179 Assembles the following section of code if the argument is less 4180 than zero. 4181 4182`.ifnb TEXT' 4183 Like `.ifb', but the sense of the test is reversed: this assembles 4184 the following section of code if the operand is non-blank 4185 (non-empty). 4186 4187`.ifnc STRING1,STRING2.' 4188 Like `.ifc', but the sense of the test is reversed: this assembles 4189 the following section of code if the two strings are not the same. 4190 4191`.ifndef SYMBOL' 4192`.ifnotdef SYMBOL' 4193 Assembles the following section of code if the specified SYMBOL 4194 has not been defined. Both spelling variants are equivalent. 4195 Note a symbol which has been referenced but not yet defined is 4196 considered to be undefined. 4197 4198`.ifne ABSOLUTE EXPRESSION' 4199 Assembles the following section of code if the argument is not 4200 equal to zero (in other words, this is equivalent to `.if'). 4201 4202`.ifnes STRING1,STRING2' 4203 Like `.ifeqs', but the sense of the test is reversed: this 4204 assembles the following section of code if the two strings are not 4205 the same. 4206 4207 4208File: as.info, Node: Incbin, Next: Include, Prev: If, Up: Pseudo Ops 4209 42107.42 `.incbin "FILE"[,SKIP[,COUNT]]' 4211==================================== 4212 4213The `incbin' directive includes FILE verbatim at the current location. 4214You can control the search paths used with the `-I' command-line option 4215(*note Command-Line Options: Invoking.). Quotation marks are required 4216around FILE. 4217 4218 The SKIP argument skips a number of bytes from the start of the 4219FILE. The COUNT argument indicates the maximum number of bytes to 4220read. Note that the data is not aligned in any way, so it is the user's 4221responsibility to make sure that proper alignment is provided both 4222before and after the `incbin' directive. 4223 4224 4225File: as.info, Node: Include, Next: Int, Prev: Incbin, Up: Pseudo Ops 4226 42277.43 `.include "FILE"' 4228====================== 4229 4230This directive provides a way to include supporting files at specified 4231points in your source program. The code from FILE is assembled as if 4232it followed the point of the `.include'; when the end of the included 4233file is reached, assembly of the original file continues. You can 4234control the search paths used with the `-I' command-line option (*note 4235Command-Line Options: Invoking.). Quotation marks are required around 4236FILE. 4237 4238 4239File: as.info, Node: Int, Next: Internal, Prev: Include, Up: Pseudo Ops 4240 42417.44 `.int EXPRESSIONS' 4242======================= 4243 4244Expect zero or more EXPRESSIONS, of any section, separated by commas. 4245For each expression, emit a number that, at run time, is the value of 4246that expression. The byte order and bit size of the number depends on 4247what kind of target the assembly is for. 4248 4249 4250File: as.info, Node: Internal, Next: Irp, Prev: Int, Up: Pseudo Ops 4251 42527.45 `.internal NAMES' 4253====================== 4254 4255This is one of the ELF visibility directives. The other two are 4256`.hidden' (*note `.hidden': Hidden.) and `.protected' (*note 4257`.protected': Protected.). 4258 4259 This directive overrides the named symbols default visibility (which 4260is set by their binding: local, global or weak). The directive sets 4261the visibility to `internal' which means that the symbols are 4262considered to be `hidden' (i.e., not visible to other components), and 4263that some extra, processor specific processing must also be performed 4264upon the symbols as well. 4265 4266 4267File: as.info, Node: Irp, Next: Irpc, Prev: Internal, Up: Pseudo Ops 4268 42697.46 `.irp SYMBOL,VALUES'... 4270============================ 4271 4272Evaluate a sequence of statements assigning different values to SYMBOL. 4273The sequence of statements starts at the `.irp' directive, and is 4274terminated by an `.endr' directive. For each VALUE, SYMBOL is set to 4275VALUE, and the sequence of statements is assembled. If no VALUE is 4276listed, the sequence of statements is assembled once, with SYMBOL set 4277to the null string. To refer to SYMBOL within the sequence of 4278statements, use \SYMBOL. 4279 4280 For example, assembling 4281 4282 .irp param,1,2,3 4283 move d\param,sp@- 4284 .endr 4285 4286 is equivalent to assembling 4287 4288 move d1,sp@- 4289 move d2,sp@- 4290 move d3,sp@- 4291 4292 For some caveats with the spelling of SYMBOL, see also *Note Macro::. 4293 4294 4295File: as.info, Node: Irpc, Next: Lcomm, Prev: Irp, Up: Pseudo Ops 4296 42977.47 `.irpc SYMBOL,VALUES'... 4298============================= 4299 4300Evaluate a sequence of statements assigning different values to SYMBOL. 4301The sequence of statements starts at the `.irpc' directive, and is 4302terminated by an `.endr' directive. For each character in VALUE, 4303SYMBOL is set to the character, and the sequence of statements is 4304assembled. If no VALUE is listed, the sequence of statements is 4305assembled once, with SYMBOL set to the null string. To refer to SYMBOL 4306within the sequence of statements, use \SYMBOL. 4307 4308 For example, assembling 4309 4310 .irpc param,123 4311 move d\param,sp@- 4312 .endr 4313 4314 is equivalent to assembling 4315 4316 move d1,sp@- 4317 move d2,sp@- 4318 move d3,sp@- 4319 4320 For some caveats with the spelling of SYMBOL, see also the discussion 4321at *Note Macro::. 4322 4323 4324File: as.info, Node: Lcomm, Next: Lflags, Prev: Irpc, Up: Pseudo Ops 4325 43267.48 `.lcomm SYMBOL , LENGTH' 4327============================= 4328 4329Reserve LENGTH (an absolute expression) bytes for a local common 4330denoted by SYMBOL. The section and value of SYMBOL are those of the 4331new local common. The addresses are allocated in the bss section, so 4332that at run-time the bytes start off zeroed. SYMBOL is not declared 4333global (*note `.global': Global.), so is normally not visible to `ld'. 4334 4335 Some targets permit a third argument to be used with `.lcomm'. This 4336argument specifies the desired alignment of the symbol in the bss 4337section. 4338 4339 The syntax for `.lcomm' differs slightly on the HPPA. The syntax is 4340`SYMBOL .lcomm, LENGTH'; SYMBOL is optional. 4341 4342 4343File: as.info, Node: Lflags, Next: Line, Prev: Lcomm, Up: Pseudo Ops 4344 43457.49 `.lflags' 4346============== 4347 4348`as' accepts this directive, for compatibility with other assemblers, 4349but ignores it. 4350 4351 4352File: as.info, Node: Line, Next: Linkonce, Prev: Lflags, Up: Pseudo Ops 4353 43547.50 `.line LINE-NUMBER' 4355======================== 4356 4357Change the logical line number. LINE-NUMBER must be an absolute 4358expression. The next line has that logical line number. Therefore any 4359other statements on the current line (after a statement separator 4360character) are reported as on logical line number LINE-NUMBER - 1. One 4361day `as' will no longer support this directive: it is recognized only 4362for compatibility with existing assembler programs. 4363 4364Even though this is a directive associated with the `a.out' or `b.out' 4365object-code formats, `as' still recognizes it when producing COFF 4366output, and treats `.line' as though it were the COFF `.ln' _if_ it is 4367found outside a `.def'/`.endef' pair. 4368 4369 Inside a `.def', `.line' is, instead, one of the directives used by 4370compilers to generate auxiliary symbol information for debugging. 4371 4372 4373File: as.info, Node: Linkonce, Next: List, Prev: Line, Up: Pseudo Ops 4374 43757.51 `.linkonce [TYPE]' 4376======================= 4377 4378Mark the current section so that the linker only includes a single copy 4379of it. This may be used to include the same section in several 4380different object files, but ensure that the linker will only include it 4381once in the final output file. The `.linkonce' pseudo-op must be used 4382for each instance of the section. Duplicate sections are detected 4383based on the section name, so it should be unique. 4384 4385 This directive is only supported by a few object file formats; as of 4386this writing, the only object file format which supports it is the 4387Portable Executable format used on Windows NT. 4388 4389 The TYPE argument is optional. If specified, it must be one of the 4390following strings. For example: 4391 .linkonce same_size 4392 Not all types may be supported on all object file formats. 4393 4394`discard' 4395 Silently discard duplicate sections. This is the default. 4396 4397`one_only' 4398 Warn if there are duplicate sections, but still keep only one copy. 4399 4400`same_size' 4401 Warn if any of the duplicates have different sizes. 4402 4403`same_contents' 4404 Warn if any of the duplicates do not have exactly the same 4405 contents. 4406 4407 4408File: as.info, Node: List, Next: Ln, Prev: Linkonce, Up: Pseudo Ops 4409 44107.52 `.list' 4411============ 4412 4413Control (in conjunction with the `.nolist' directive) whether or not 4414assembly listings are generated. These two directives maintain an 4415internal counter (which is zero initially). `.list' increments the 4416counter, and `.nolist' decrements it. Assembly listings are generated 4417whenever the counter is greater than zero. 4418 4419 By default, listings are disabled. When you enable them (with the 4420`-a' command line option; *note Command-Line Options: Invoking.), the 4421initial value of the listing counter is one. 4422 4423 4424File: as.info, Node: Ln, Next: Loc, Prev: List, Up: Pseudo Ops 4425 44267.53 `.ln LINE-NUMBER' 4427====================== 4428 4429`.ln' is a synonym for `.line'. 4430 4431 4432File: as.info, Node: Loc, Next: Loc_mark_labels, Prev: Ln, Up: Pseudo Ops 4433 44347.54 `.loc FILENO LINENO [COLUMN] [OPTIONS]' 4435============================================ 4436 4437When emitting DWARF2 line number information, the `.loc' directive will 4438add a row to the `.debug_line' line number matrix corresponding to the 4439immediately following assembly instruction. The FILENO, LINENO, and 4440optional COLUMN arguments will be applied to the `.debug_line' state 4441machine before the row is added. 4442 4443 The OPTIONS are a sequence of the following tokens in any order: 4444 4445`basic_block' 4446 This option will set the `basic_block' register in the 4447 `.debug_line' state machine to `true'. 4448 4449`prologue_end' 4450 This option will set the `prologue_end' register in the 4451 `.debug_line' state machine to `true'. 4452 4453`epilogue_begin' 4454 This option will set the `epilogue_begin' register in the 4455 `.debug_line' state machine to `true'. 4456 4457`is_stmt VALUE' 4458 This option will set the `is_stmt' register in the `.debug_line' 4459 state machine to `value', which must be either 0 or 1. 4460 4461`isa VALUE' 4462 This directive will set the `isa' register in the `.debug_line' 4463 state machine to VALUE, which must be an unsigned integer. 4464 4465`discriminator VALUE' 4466 This directive will set the `discriminator' register in the 4467 `.debug_line' state machine to VALUE, which must be an unsigned 4468 integer. 4469 4470 4471 4472File: as.info, Node: Loc_mark_labels, Next: Local, Prev: Loc, Up: Pseudo Ops 4473 44747.55 `.loc_mark_labels ENABLE' 4475============================== 4476 4477When emitting DWARF2 line number information, the `.loc_mark_labels' 4478directive makes the assembler emit an entry to the `.debug_line' line 4479number matrix with the `basic_block' register in the state machine set 4480whenever a code label is seen. The ENABLE argument should be either 1 4481or 0, to enable or disable this function respectively. 4482 4483 4484File: as.info, Node: Local, Next: Long, Prev: Loc_mark_labels, Up: Pseudo Ops 4485 44867.56 `.local NAMES' 4487=================== 4488 4489This directive, which is available for ELF targets, marks each symbol in 4490the comma-separated list of `names' as a local symbol so that it will 4491not be externally visible. If the symbols do not already exist, they 4492will be created. 4493 4494 For targets where the `.lcomm' directive (*note Lcomm::) does not 4495accept an alignment argument, which is the case for most ELF targets, 4496the `.local' directive can be used in combination with `.comm' (*note 4497Comm::) to define aligned local common data. 4498 4499 4500File: as.info, Node: Long, Next: Macro, Prev: Local, Up: Pseudo Ops 4501 45027.57 `.long EXPRESSIONS' 4503======================== 4504 4505`.long' is the same as `.int'. *Note `.int': Int. 4506 4507 4508File: as.info, Node: Macro, Next: MRI, Prev: Long, Up: Pseudo Ops 4509 45107.58 `.macro' 4511============= 4512 4513The commands `.macro' and `.endm' allow you to define macros that 4514generate assembly output. For example, this definition specifies a 4515macro `sum' that puts a sequence of numbers into memory: 4516 4517 .macro sum from=0, to=5 4518 .long \from 4519 .if \to-\from 4520 sum "(\from+1)",\to 4521 .endif 4522 .endm 4523 4524With that definition, `SUM 0,5' is equivalent to this assembly input: 4525 4526 .long 0 4527 .long 1 4528 .long 2 4529 .long 3 4530 .long 4 4531 .long 5 4532 4533`.macro MACNAME' 4534`.macro MACNAME MACARGS ...' 4535 Begin the definition of a macro called MACNAME. If your macro 4536 definition requires arguments, specify their names after the macro 4537 name, separated by commas or spaces. You can qualify the macro 4538 argument to indicate whether all invocations must specify a 4539 non-blank value (through `:`req''), or whether it takes all of the 4540 remaining arguments (through `:`vararg''). You can supply a 4541 default value for any macro argument by following the name with 4542 `=DEFLT'. You cannot define two macros with the same MACNAME 4543 unless it has been subject to the `.purgem' directive (*note 4544 Purgem::) between the two definitions. For example, these are all 4545 valid `.macro' statements: 4546 4547 `.macro comm' 4548 Begin the definition of a macro called `comm', which takes no 4549 arguments. 4550 4551 `.macro plus1 p, p1' 4552 `.macro plus1 p p1' 4553 Either statement begins the definition of a macro called 4554 `plus1', which takes two arguments; within the macro 4555 definition, write `\p' or `\p1' to evaluate the arguments. 4556 4557 `.macro reserve_str p1=0 p2' 4558 Begin the definition of a macro called `reserve_str', with two 4559 arguments. The first argument has a default value, but not 4560 the second. After the definition is complete, you can call 4561 the macro either as `reserve_str A,B' (with `\p1' evaluating 4562 to A and `\p2' evaluating to B), or as `reserve_str ,B' (with 4563 `\p1' evaluating as the default, in this case `0', and `\p2' 4564 evaluating to B). 4565 4566 `.macro m p1:req, p2=0, p3:vararg' 4567 Begin the definition of a macro called `m', with at least 4568 three arguments. The first argument must always have a value 4569 specified, but not the second, which instead has a default 4570 value. The third formal will get assigned all remaining 4571 arguments specified at invocation time. 4572 4573 When you call a macro, you can specify the argument values 4574 either by position, or by keyword. For example, `sum 9,17' 4575 is equivalent to `sum to=17, from=9'. 4576 4577 4578 Note that since each of the MACARGS can be an identifier exactly 4579 as any other one permitted by the target architecture, there may be 4580 occasional problems if the target hand-crafts special meanings to 4581 certain characters when they occur in a special position. For 4582 example, if the colon (`:') is generally permitted to be part of a 4583 symbol name, but the architecture specific code special-cases it 4584 when occurring as the final character of a symbol (to denote a 4585 label), then the macro parameter replacement code will have no way 4586 of knowing that and consider the whole construct (including the 4587 colon) an identifier, and check only this identifier for being the 4588 subject to parameter substitution. So for example this macro 4589 definition: 4590 4591 .macro label l 4592 \l: 4593 .endm 4594 4595 might not work as expected. Invoking `label foo' might not create 4596 a label called `foo' but instead just insert the text `\l:' into 4597 the assembler source, probably generating an error about an 4598 unrecognised identifier. 4599 4600 Similarly problems might occur with the period character (`.') 4601 which is often allowed inside opcode names (and hence identifier 4602 names). So for example constructing a macro to build an opcode 4603 from a base name and a length specifier like this: 4604 4605 .macro opcode base length 4606 \base.\length 4607 .endm 4608 4609 and invoking it as `opcode store l' will not create a `store.l' 4610 instruction but instead generate some kind of error as the 4611 assembler tries to interpret the text `\base.\length'. 4612 4613 There are several possible ways around this problem: 4614 4615 `Insert white space' 4616 If it is possible to use white space characters then this is 4617 the simplest solution. eg: 4618 4619 .macro label l 4620 \l : 4621 .endm 4622 4623 `Use `\()'' 4624 The string `\()' can be used to separate the end of a macro 4625 argument from the following text. eg: 4626 4627 .macro opcode base length 4628 \base\().\length 4629 .endm 4630 4631 `Use the alternate macro syntax mode' 4632 In the alternative macro syntax mode the ampersand character 4633 (`&') can be used as a separator. eg: 4634 4635 .altmacro 4636 .macro label l 4637 l&: 4638 .endm 4639 4640 Note: this problem of correctly identifying string parameters to 4641 pseudo ops also applies to the identifiers used in `.irp' (*note 4642 Irp::) and `.irpc' (*note Irpc::) as well. 4643 4644`.endm' 4645 Mark the end of a macro definition. 4646 4647`.exitm' 4648 Exit early from the current macro definition. 4649 4650`\@' 4651 `as' maintains a counter of how many macros it has executed in 4652 this pseudo-variable; you can copy that number to your output with 4653 `\@', but _only within a macro definition_. 4654 4655`LOCAL NAME [ , ... ]' 4656 _Warning: `LOCAL' is only available if you select "alternate macro 4657 syntax" with `--alternate' or `.altmacro'._ *Note `.altmacro': 4658 Altmacro. 4659 4660 4661File: as.info, Node: MRI, Next: Noaltmacro, Prev: Macro, Up: Pseudo Ops 4662 46637.59 `.mri VAL' 4664=============== 4665 4666If VAL is non-zero, this tells `as' to enter MRI mode. If VAL is zero, 4667this tells `as' to exit MRI mode. This change affects code assembled 4668until the next `.mri' directive, or until the end of the file. *Note 4669MRI mode: M. 4670 4671 4672File: as.info, Node: Noaltmacro, Next: Nolist, Prev: MRI, Up: Pseudo Ops 4673 46747.60 `.noaltmacro' 4675================== 4676 4677Disable alternate macro mode. *Note Altmacro::. 4678 4679 4680File: as.info, Node: Nolist, Next: Octa, Prev: Noaltmacro, Up: Pseudo Ops 4681 46827.61 `.nolist' 4683============== 4684 4685Control (in conjunction with the `.list' directive) whether or not 4686assembly listings are generated. These two directives maintain an 4687internal counter (which is zero initially). `.list' increments the 4688counter, and `.nolist' decrements it. Assembly listings are generated 4689whenever the counter is greater than zero. 4690 4691 4692File: as.info, Node: Octa, Next: Offset, Prev: Nolist, Up: Pseudo Ops 4693 46947.62 `.octa BIGNUMS' 4695==================== 4696 4697This directive expects zero or more bignums, separated by commas. For 4698each bignum, it emits a 16-byte integer. 4699 4700 The term "octa" comes from contexts in which a "word" is two bytes; 4701hence _octa_-word for 16 bytes. 4702 4703 4704File: as.info, Node: Offset, Next: Org, Prev: Octa, Up: Pseudo Ops 4705 47067.63 `.offset LOC' 4707================== 4708 4709Set the location counter to LOC in the absolute section. LOC must be 4710an absolute expression. This directive may be useful for defining 4711symbols with absolute values. Do not confuse it with the `.org' 4712directive. 4713 4714 4715File: as.info, Node: Org, Next: P2align, Prev: Offset, Up: Pseudo Ops 4716 47177.64 `.org NEW-LC , FILL' 4718========================= 4719 4720Advance the location counter of the current section to NEW-LC. NEW-LC 4721is either an absolute expression or an expression with the same section 4722as the current subsection. That is, you can't use `.org' to cross 4723sections: if NEW-LC has the wrong section, the `.org' directive is 4724ignored. To be compatible with former assemblers, if the section of 4725NEW-LC is absolute, `as' issues a warning, then pretends the section of 4726NEW-LC is the same as the current subsection. 4727 4728 `.org' may only increase the location counter, or leave it 4729unchanged; you cannot use `.org' to move the location counter backwards. 4730 4731 Because `as' tries to assemble programs in one pass, NEW-LC may not 4732be undefined. If you really detest this restriction we eagerly await a 4733chance to share your improved assembler. 4734 4735 Beware that the origin is relative to the start of the section, not 4736to the start of the subsection. This is compatible with other people's 4737assemblers. 4738 4739 When the location counter (of the current subsection) is advanced, 4740the intervening bytes are filled with FILL which should be an absolute 4741expression. If the comma and FILL are omitted, FILL defaults to zero. 4742 4743 4744File: as.info, Node: P2align, Next: PopSection, Prev: Org, Up: Pseudo Ops 4745 47467.65 `.p2align[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR' 4747================================================ 4748 4749Pad the location counter (in the current subsection) to a particular 4750storage boundary. The first expression (which must be absolute) is the 4751number of low-order zero bits the location counter must have after 4752advancement. For example `.p2align 3' advances the location counter 4753until it a multiple of 8. If the location counter is already a 4754multiple of 8, no change is needed. 4755 4756 The second expression (also absolute) gives the fill value to be 4757stored in the padding bytes. It (and the comma) may be omitted. If it 4758is omitted, the padding bytes are normally zero. However, on some 4759systems, if the section is marked as containing code and the fill value 4760is omitted, the space is filled with no-op instructions. 4761 4762 The third expression is also absolute, and is also optional. If it 4763is present, it is the maximum number of bytes that should be skipped by 4764this alignment directive. If doing the alignment would require 4765skipping more bytes than the specified maximum, then the alignment is 4766not done at all. You can omit the fill value (the second argument) 4767entirely by simply using two commas after the required alignment; this 4768can be useful if you want the alignment to be filled with no-op 4769instructions when appropriate. 4770 4771 The `.p2alignw' and `.p2alignl' directives are variants of the 4772`.p2align' directive. The `.p2alignw' directive treats the fill 4773pattern as a two byte word value. The `.p2alignl' directives treats the 4774fill pattern as a four byte longword value. For example, `.p2alignw 47752,0x368d' will align to a multiple of 4. If it skips two bytes, they 4776will be filled in with the value 0x368d (the exact placement of the 4777bytes depends upon the endianness of the processor). If it skips 1 or 47783 bytes, the fill value is undefined. 4779 4780 4781File: as.info, Node: PopSection, Next: Previous, Prev: P2align, Up: Pseudo Ops 4782 47837.66 `.popsection' 4784================== 4785 4786This is one of the ELF section stack manipulation directives. The 4787others are `.section' (*note Section::), `.subsection' (*note 4788SubSection::), `.pushsection' (*note PushSection::), and `.previous' 4789(*note Previous::). 4790 4791 This directive replaces the current section (and subsection) with 4792the top section (and subsection) on the section stack. This section is 4793popped off the stack. 4794 4795 4796File: as.info, Node: Previous, Next: Print, Prev: PopSection, Up: Pseudo Ops 4797 47987.67 `.previous' 4799================ 4800 4801This is one of the ELF section stack manipulation directives. The 4802others are `.section' (*note Section::), `.subsection' (*note 4803SubSection::), `.pushsection' (*note PushSection::), and `.popsection' 4804(*note PopSection::). 4805 4806 This directive swaps the current section (and subsection) with most 4807recently referenced section/subsection pair prior to this one. Multiple 4808`.previous' directives in a row will flip between two sections (and 4809their subsections). For example: 4810 4811 .section A 4812 .subsection 1 4813 .word 0x1234 4814 .subsection 2 4815 .word 0x5678 4816 .previous 4817 .word 0x9abc 4818 4819 Will place 0x1234 and 0x9abc into subsection 1 and 0x5678 into 4820subsection 2 of section A. Whilst: 4821 4822 .section A 4823 .subsection 1 4824 # Now in section A subsection 1 4825 .word 0x1234 4826 .section B 4827 .subsection 0 4828 # Now in section B subsection 0 4829 .word 0x5678 4830 .subsection 1 4831 # Now in section B subsection 1 4832 .word 0x9abc 4833 .previous 4834 # Now in section B subsection 0 4835 .word 0xdef0 4836 4837 Will place 0x1234 into section A, 0x5678 and 0xdef0 into subsection 48380 of section B and 0x9abc into subsection 1 of section B. 4839 4840 In terms of the section stack, this directive swaps the current 4841section with the top section on the section stack. 4842 4843 4844File: as.info, Node: Print, Next: Protected, Prev: Previous, Up: Pseudo Ops 4845 48467.68 `.print STRING' 4847==================== 4848 4849`as' will print STRING on the standard output during assembly. You 4850must put STRING in double quotes. 4851 4852 4853File: as.info, Node: Protected, Next: Psize, Prev: Print, Up: Pseudo Ops 4854 48557.69 `.protected NAMES' 4856======================= 4857 4858This is one of the ELF visibility directives. The other two are 4859`.hidden' (*note Hidden::) and `.internal' (*note Internal::). 4860 4861 This directive overrides the named symbols default visibility (which 4862is set by their binding: local, global or weak). The directive sets 4863the visibility to `protected' which means that any references to the 4864symbols from within the components that defines them must be resolved 4865to the definition in that component, even if a definition in another 4866component would normally preempt this. 4867 4868 4869File: as.info, Node: Psize, Next: Purgem, Prev: Protected, Up: Pseudo Ops 4870 48717.70 `.psize LINES , COLUMNS' 4872============================= 4873 4874Use this directive to declare the number of lines--and, optionally, the 4875number of columns--to use for each page, when generating listings. 4876 4877 If you do not use `.psize', listings use a default line-count of 60. 4878You may omit the comma and COLUMNS specification; the default width is 4879200 columns. 4880 4881 `as' generates formfeeds whenever the specified number of lines is 4882exceeded (or whenever you explicitly request one, using `.eject'). 4883 4884 If you specify LINES as `0', no formfeeds are generated save those 4885explicitly specified with `.eject'. 4886 4887 4888File: as.info, Node: Purgem, Next: PushSection, Prev: Psize, Up: Pseudo Ops 4889 48907.71 `.purgem NAME' 4891=================== 4892 4893Undefine the macro NAME, so that later uses of the string will not be 4894expanded. *Note Macro::. 4895 4896 4897File: as.info, Node: PushSection, Next: Quad, Prev: Purgem, Up: Pseudo Ops 4898 48997.72 `.pushsection NAME [, SUBSECTION] [, "FLAGS"[, @TYPE[,ARGUMENTS]]]' 4900======================================================================== 4901 4902This is one of the ELF section stack manipulation directives. The 4903others are `.section' (*note Section::), `.subsection' (*note 4904SubSection::), `.popsection' (*note PopSection::), and `.previous' 4905(*note Previous::). 4906 4907 This directive pushes the current section (and subsection) onto the 4908top of the section stack, and then replaces the current section and 4909subsection with `name' and `subsection'. The optional `flags', `type' 4910and `arguments' are treated the same as in the `.section' (*note 4911Section::) directive. 4912 4913 4914File: as.info, Node: Quad, Next: Reloc, Prev: PushSection, Up: Pseudo Ops 4915 49167.73 `.quad BIGNUMS' 4917==================== 4918 4919`.quad' expects zero or more bignums, separated by commas. For each 4920bignum, it emits an 8-byte integer. If the bignum won't fit in 8 4921bytes, it prints a warning message; and just takes the lowest order 8 4922bytes of the bignum. 4923 4924 The term "quad" comes from contexts in which a "word" is two bytes; 4925hence _quad_-word for 8 bytes. 4926 4927 4928File: as.info, Node: Reloc, Next: Rept, Prev: Quad, Up: Pseudo Ops 4929 49307.74 `.reloc OFFSET, RELOC_NAME[, EXPRESSION]' 4931============================================== 4932 4933Generate a relocation at OFFSET of type RELOC_NAME with value 4934EXPRESSION. If OFFSET is a number, the relocation is generated in the 4935current section. If OFFSET is an expression that resolves to a symbol 4936plus offset, the relocation is generated in the given symbol's section. 4937EXPRESSION, if present, must resolve to a symbol plus addend or to an 4938absolute value, but note that not all targets support an addend. e.g. 4939ELF REL targets such as i386 store an addend in the section contents 4940rather than in the relocation. This low level interface does not 4941support addends stored in the section. 4942 4943 4944File: as.info, Node: Rept, Next: Sbttl, Prev: Reloc, Up: Pseudo Ops 4945 49467.75 `.rept COUNT' 4947================== 4948 4949Repeat the sequence of lines between the `.rept' directive and the next 4950`.endr' directive COUNT times. 4951 4952 For example, assembling 4953 4954 .rept 3 4955 .long 0 4956 .endr 4957 4958 is equivalent to assembling 4959 4960 .long 0 4961 .long 0 4962 .long 0 4963 4964 4965File: as.info, Node: Sbttl, Next: Scl, Prev: Rept, Up: Pseudo Ops 4966 49677.76 `.sbttl "SUBHEADING"' 4968========================== 4969 4970Use SUBHEADING as the title (third line, immediately after the title 4971line) when generating assembly listings. 4972 4973 This directive affects subsequent pages, as well as the current page 4974if it appears within ten lines of the top of a page. 4975 4976 4977File: as.info, Node: Scl, Next: Section, Prev: Sbttl, Up: Pseudo Ops 4978 49797.77 `.scl CLASS' 4980================= 4981 4982Set the storage-class value for a symbol. This directive may only be 4983used inside a `.def'/`.endef' pair. Storage class may flag whether a 4984symbol is static or external, or it may record further symbolic 4985debugging information. 4986 4987 4988File: as.info, Node: Section, Next: Set, Prev: Scl, Up: Pseudo Ops 4989 49907.78 `.section NAME' 4991==================== 4992 4993Use the `.section' directive to assemble the following code into a 4994section named NAME. 4995 4996 This directive is only supported for targets that actually support 4997arbitrarily named sections; on `a.out' targets, for example, it is not 4998accepted, even with a standard `a.out' section name. 4999 5000COFF Version 5001------------ 5002 5003 For COFF targets, the `.section' directive is used in one of the 5004following ways: 5005 5006 .section NAME[, "FLAGS"] 5007 .section NAME[, SUBSECTION] 5008 5009 If the optional argument is quoted, it is taken as flags to use for 5010the section. Each flag is a single character. The following flags are 5011recognized: 5012 5013`b' 5014 bss section (uninitialized data) 5015 5016`n' 5017 section is not loaded 5018 5019`w' 5020 writable section 5021 5022`d' 5023 data section 5024 5025`e' 5026 exclude section from linking 5027 5028`r' 5029 read-only section 5030 5031`x' 5032 executable section 5033 5034`s' 5035 shared section (meaningful for PE targets) 5036 5037`a' 5038 ignored. (For compatibility with the ELF version) 5039 5040`y' 5041 section is not readable (meaningful for PE targets) 5042 5043`0-9' 5044 single-digit power-of-two section alignment (GNU extension) 5045 5046 If no flags are specified, the default flags depend upon the section 5047name. If the section name is not recognized, the default will be for 5048the section to be loaded and writable. Note the `n' and `w' flags 5049remove attributes from the section, rather than adding them, so if they 5050are used on their own it will be as if no flags had been specified at 5051all. 5052 5053 If the optional argument to the `.section' directive is not quoted, 5054it is taken as a subsection number (*note Sub-Sections::). 5055 5056ELF Version 5057----------- 5058 5059 This is one of the ELF section stack manipulation directives. The 5060others are `.subsection' (*note SubSection::), `.pushsection' (*note 5061PushSection::), `.popsection' (*note PopSection::), and `.previous' 5062(*note Previous::). 5063 5064 For ELF targets, the `.section' directive is used like this: 5065 5066 .section NAME [, "FLAGS"[, @TYPE[,FLAG_SPECIFIC_ARGUMENTS]]] 5067 5068 If the `--sectname-subst' command-line option is provided, the NAME 5069argument may contain a substitution sequence. Only `%S' is supported at 5070the moment, and substitutes the current section name. For example: 5071 5072 .macro exception_code 5073 .section %S.exception 5074 [exception code here] 5075 .previous 5076 .endm 5077 5078 .text 5079 [code] 5080 exception_code 5081 [...] 5082 5083 .section .init 5084 [init code] 5085 exception_code 5086 [...] 5087 5088 The two `exception_code' invocations above would create the 5089`.text.exception' and `.init.exception' sections respectively. This is 5090useful e.g. to discriminate between anciliary sections that are tied to 5091setup code to be discarded after use from anciliary sections that need 5092to stay resident without having to define multiple `exception_code' 5093macros just for that purpose. 5094 5095 The optional FLAGS argument is a quoted string which may contain any 5096combination of the following characters: 5097 5098`a' 5099 section is allocatable 5100 5101`e' 5102 section is excluded from executable and shared library. 5103 5104`w' 5105 section is writable 5106 5107`x' 5108 section is executable 5109 5110`M' 5111 section is mergeable 5112 5113`S' 5114 section contains zero terminated strings 5115 5116`G' 5117 section is a member of a section group 5118 5119`T' 5120 section is used for thread-local-storage 5121 5122`?' 5123 section is a member of the previously-current section's group, if 5124 any 5125 5126``<number>'' 5127 a numeric value indicating the bits to be set in the ELF section 5128 header's flags field. Note - if one or more of the alphabetic 5129 characters described above is also included in the flags field, 5130 their bit values will be ORed into the resulting value. 5131 5132``<target specific>'' 5133 some targets extend this list with their own flag characters 5134 5135 Note - once a section's flags have been set they cannot be changed. 5136There are a few exceptions to this rule however. Processor and 5137application specific flags can be added to an already defined section. 5138The `.interp', `.strtab' and `.symtab' sections can have the allocate 5139flag (`a') set after they are initially defined, and the 5140`.note-GNU-stack' section may have the executable (`x') flag added. 5141 5142 The optional TYPE argument may contain one of the following 5143constants: 5144 5145`@progbits' 5146 section contains data 5147 5148`@nobits' 5149 section does not contain data (i.e., section only occupies space) 5150 5151`@note' 5152 section contains data which is used by things other than the 5153 program 5154 5155`@init_array' 5156 section contains an array of pointers to init functions 5157 5158`@fini_array' 5159 section contains an array of pointers to finish functions 5160 5161`@preinit_array' 5162 section contains an array of pointers to pre-init functions 5163 5164`@`<number>'' 5165 a numeric value to be set as the ELF section header's type field. 5166 5167`@`<target specific>'' 5168 some targets extend this list with their own types 5169 5170 Many targets only support the first three section types. The type 5171may be enclosed in double quotes if necessary. 5172 5173 Note on targets where the `@' character is the start of a comment (eg 5174ARM) then another character is used instead. For example the ARM port 5175uses the `%' character. 5176 5177 Note - some sections, eg `.text' and `.data' are considered to be 5178special and have fixed types. Any attempt to declare them with a 5179different type will generate an error from the assembler. 5180 5181 If FLAGS contains the `M' symbol then the TYPE argument must be 5182specified as well as an extra argument--ENTSIZE--like this: 5183 5184 .section NAME , "FLAGS"M, @TYPE, ENTSIZE 5185 5186 Sections with the `M' flag but not `S' flag must contain fixed size 5187constants, each ENTSIZE octets long. Sections with both `M' and `S' 5188must contain zero terminated strings where each character is ENTSIZE 5189bytes long. The linker may remove duplicates within sections with the 5190same name, same entity size and same flags. ENTSIZE must be an 5191absolute expression. For sections with both `M' and `S', a string 5192which is a suffix of a larger string is considered a duplicate. Thus 5193`"def"' will be merged with `"abcdef"'; A reference to the first 5194`"def"' will be changed to a reference to `"abcdef"+3'. 5195 5196 If FLAGS contains the `G' symbol then the TYPE argument must be 5197present along with an additional field like this: 5198 5199 .section NAME , "FLAGS"G, @TYPE, GROUPNAME[, LINKAGE] 5200 5201 The GROUPNAME field specifies the name of the section group to which 5202this particular section belongs. The optional linkage field can 5203contain: 5204 5205`comdat' 5206 indicates that only one copy of this section should be retained 5207 5208`.gnu.linkonce' 5209 an alias for comdat 5210 5211 Note: if both the M and G flags are present then the fields for the 5212Merge flag should come first, like this: 5213 5214 .section NAME , "FLAGS"MG, @TYPE, ENTSIZE, GROUPNAME[, LINKAGE] 5215 5216 If FLAGS contains the `?' symbol then it may not also contain the 5217`G' symbol and the GROUPNAME or LINKAGE fields should not be present. 5218Instead, `?' says to consider the section that's current before this 5219directive. If that section used `G', then the new section will use `G' 5220with those same GROUPNAME and LINKAGE fields implicitly. If not, then 5221the `?' symbol has no effect. 5222 5223 If no flags are specified, the default flags depend upon the section 5224name. If the section name is not recognized, the default will be for 5225the section to have none of the above flags: it will not be allocated 5226in memory, nor writable, nor executable. The section will contain data. 5227 5228 For ELF targets, the assembler supports another type of `.section' 5229directive for compatibility with the Solaris assembler: 5230 5231 .section "NAME"[, FLAGS...] 5232 5233 Note that the section name is quoted. There may be a sequence of 5234comma separated flags: 5235 5236`#alloc' 5237 section is allocatable 5238 5239`#write' 5240 section is writable 5241 5242`#execinstr' 5243 section is executable 5244 5245`#exclude' 5246 section is excluded from executable and shared library. 5247 5248`#tls' 5249 section is used for thread local storage 5250 5251 This directive replaces the current section and subsection. See the 5252contents of the gas testsuite directory `gas/testsuite/gas/elf' for 5253some examples of how this directive and the other section stack 5254directives work. 5255 5256 5257File: as.info, Node: Set, Next: Short, Prev: Section, Up: Pseudo Ops 5258 52597.79 `.set SYMBOL, EXPRESSION' 5260============================== 5261 5262Set the value of SYMBOL to EXPRESSION. This changes SYMBOL's value and 5263type to conform to EXPRESSION. If SYMBOL was flagged as external, it 5264remains flagged (*note Symbol Attributes::). 5265 5266 You may `.set' a symbol many times in the same assembly provided 5267that the values given to the symbol are constants. Values that are 5268based on expressions involving other symbols are allowed, but some 5269targets may restrict this to only being done once per assembly. This 5270is because those targets do not set the addresses of symbols at 5271assembly time, but rather delay the assignment until a final link is 5272performed. This allows the linker a chance to change the code in the 5273files, changing the location of, and the relative distance between, 5274various different symbols. 5275 5276 If you `.set' a global symbol, the value stored in the object file 5277is the last value stored into it. 5278 5279 On Z80 `set' is a real instruction, use `SYMBOL defl EXPRESSION' 5280instead. 5281 5282 5283File: as.info, Node: Short, Next: Single, Prev: Set, Up: Pseudo Ops 5284 52857.80 `.short EXPRESSIONS' 5286========================= 5287 5288`.short' is normally the same as `.word'. *Note `.word': Word. 5289 5290 In some configurations, however, `.short' and `.word' generate 5291numbers of different lengths. *Note Machine Dependencies::. 5292 5293 5294File: as.info, Node: Single, Next: Size, Prev: Short, Up: Pseudo Ops 5295 52967.81 `.single FLONUMS' 5297====================== 5298 5299This directive assembles zero or more flonums, separated by commas. It 5300has the same effect as `.float'. The exact kind of floating point 5301numbers emitted depends on how `as' is configured. *Note Machine 5302Dependencies::. 5303 5304 5305File: as.info, Node: Size, Next: Skip, Prev: Single, Up: Pseudo Ops 5306 53077.82 `.size' 5308============ 5309 5310This directive is used to set the size associated with a symbol. 5311 5312COFF Version 5313------------ 5314 5315 For COFF targets, the `.size' directive is only permitted inside 5316`.def'/`.endef' pairs. It is used like this: 5317 5318 .size EXPRESSION 5319 5320ELF Version 5321----------- 5322 5323 For ELF targets, the `.size' directive is used like this: 5324 5325 .size NAME , EXPRESSION 5326 5327 This directive sets the size associated with a symbol NAME. The 5328size in bytes is computed from EXPRESSION which can make use of label 5329arithmetic. This directive is typically used to set the size of 5330function symbols. 5331 5332 5333File: as.info, Node: Skip, Next: Sleb128, Prev: Size, Up: Pseudo Ops 5334 53357.83 `.skip SIZE , FILL' 5336======================== 5337 5338This directive emits SIZE bytes, each of value FILL. Both SIZE and 5339FILL are absolute expressions. If the comma and FILL are omitted, FILL 5340is assumed to be zero. This is the same as `.space'. 5341 5342 5343File: as.info, Node: Sleb128, Next: Space, Prev: Skip, Up: Pseudo Ops 5344 53457.84 `.sleb128 EXPRESSIONS' 5346=========================== 5347 5348SLEB128 stands for "signed little endian base 128." This is a compact, 5349variable length representation of numbers used by the DWARF symbolic 5350debugging format. *Note `.uleb128': Uleb128. 5351 5352 5353File: as.info, Node: Space, Next: Stab, Prev: Sleb128, Up: Pseudo Ops 5354 53557.85 `.space SIZE , FILL' 5356========================= 5357 5358This directive emits SIZE bytes, each of value FILL. Both SIZE and 5359FILL are absolute expressions. If the comma and FILL are omitted, FILL 5360is assumed to be zero. This is the same as `.skip'. 5361 5362 _Warning:_ `.space' has a completely different meaning for HPPA 5363 targets; use `.block' as a substitute. See `HP9000 Series 800 5364 Assembly Language Reference Manual' (HP 92432-90001) for the 5365 meaning of the `.space' directive. *Note HPPA Assembler 5366 Directives: HPPA Directives, for a summary. 5367 5368 5369File: as.info, Node: Stab, Next: String, Prev: Space, Up: Pseudo Ops 5370 53717.86 `.stabd, .stabn, .stabs' 5372============================= 5373 5374There are three directives that begin `.stab'. All emit symbols (*note 5375Symbols::), for use by symbolic debuggers. The symbols are not entered 5376in the `as' hash table: they cannot be referenced elsewhere in the 5377source file. Up to five fields are required: 5378 5379STRING 5380 This is the symbol's name. It may contain any character except 5381 `\000', so is more general than ordinary symbol names. Some 5382 debuggers used to code arbitrarily complex structures into symbol 5383 names using this field. 5384 5385TYPE 5386 An absolute expression. The symbol's type is set to the low 8 5387 bits of this expression. Any bit pattern is permitted, but `ld' 5388 and debuggers choke on silly bit patterns. 5389 5390OTHER 5391 An absolute expression. The symbol's "other" attribute is set to 5392 the low 8 bits of this expression. 5393 5394DESC 5395 An absolute expression. The symbol's descriptor is set to the low 5396 16 bits of this expression. 5397 5398VALUE 5399 An absolute expression which becomes the symbol's value. 5400 5401 If a warning is detected while reading a `.stabd', `.stabn', or 5402`.stabs' statement, the symbol has probably already been created; you 5403get a half-formed symbol in your object file. This is compatible with 5404earlier assemblers! 5405 5406`.stabd TYPE , OTHER , DESC' 5407 The "name" of the symbol generated is not even an empty string. 5408 It is a null pointer, for compatibility. Older assemblers used a 5409 null pointer so they didn't waste space in object files with empty 5410 strings. 5411 5412 The symbol's value is set to the location counter, relocatably. 5413 When your program is linked, the value of this symbol is the 5414 address of the location counter when the `.stabd' was assembled. 5415 5416`.stabn TYPE , OTHER , DESC , VALUE' 5417 The name of the symbol is set to the empty string `""'. 5418 5419`.stabs STRING , TYPE , OTHER , DESC , VALUE' 5420 All five fields are specified. 5421 5422 5423File: as.info, Node: String, Next: Struct, Prev: Stab, Up: Pseudo Ops 5424 54257.87 `.string' "STR", `.string8' "STR", `.string16' 5426=================================================== 5427 5428"STR", `.string32' "STR", `.string64' "STR" 5429 5430 Copy the characters in STR to the object file. You may specify more 5431than one string to copy, separated by commas. Unless otherwise 5432specified for a particular machine, the assembler marks the end of each 5433string with a 0 byte. You can use any of the escape sequences 5434described in *Note Strings: Strings. 5435 5436 The variants `string16', `string32' and `string64' differ from the 5437`string' pseudo opcode in that each 8-bit character from STR is copied 5438and expanded to 16, 32 or 64 bits respectively. The expanded characters 5439are stored in target endianness byte order. 5440 5441 Example: 5442 .string32 "BYE" 5443 expands to: 5444 .string "B\0\0\0Y\0\0\0E\0\0\0" /* On little endian targets. */ 5445 .string "\0\0\0B\0\0\0Y\0\0\0E" /* On big endian targets. */ 5446 5447 5448File: as.info, Node: Struct, Next: SubSection, Prev: String, Up: Pseudo Ops 5449 54507.88 `.struct EXPRESSION' 5451========================= 5452 5453Switch to the absolute section, and set the section offset to 5454EXPRESSION, which must be an absolute expression. You might use this 5455as follows: 5456 .struct 0 5457 field1: 5458 .struct field1 + 4 5459 field2: 5460 .struct field2 + 4 5461 field3: 5462 This would define the symbol `field1' to have the value 0, the symbol 5463`field2' to have the value 4, and the symbol `field3' to have the value 54648. Assembly would be left in the absolute section, and you would need 5465to use a `.section' directive of some sort to change to some other 5466section before further assembly. 5467 5468 5469File: as.info, Node: SubSection, Next: Symver, Prev: Struct, Up: Pseudo Ops 5470 54717.89 `.subsection NAME' 5472======================= 5473 5474This is one of the ELF section stack manipulation directives. The 5475others are `.section' (*note Section::), `.pushsection' (*note 5476PushSection::), `.popsection' (*note PopSection::), and `.previous' 5477(*note Previous::). 5478 5479 This directive replaces the current subsection with `name'. The 5480current section is not changed. The replaced subsection is put onto 5481the section stack in place of the then current top of stack subsection. 5482 5483 5484File: as.info, Node: Symver, Next: Tag, Prev: SubSection, Up: Pseudo Ops 5485 54867.90 `.symver' 5487============== 5488 5489Use the `.symver' directive to bind symbols to specific version nodes 5490within a source file. This is only supported on ELF platforms, and is 5491typically used when assembling files to be linked into a shared library. 5492There are cases where it may make sense to use this in objects to be 5493bound into an application itself so as to override a versioned symbol 5494from a shared library. 5495 5496 For ELF targets, the `.symver' directive can be used like this: 5497 .symver NAME, NAME2@NODENAME 5498 If the symbol NAME is defined within the file being assembled, the 5499`.symver' directive effectively creates a symbol alias with the name 5500NAME2@NODENAME, and in fact the main reason that we just don't try and 5501create a regular alias is that the @ character isn't permitted in 5502symbol names. The NAME2 part of the name is the actual name of the 5503symbol by which it will be externally referenced. The name NAME itself 5504is merely a name of convenience that is used so that it is possible to 5505have definitions for multiple versions of a function within a single 5506source file, and so that the compiler can unambiguously know which 5507version of a function is being mentioned. The NODENAME portion of the 5508alias should be the name of a node specified in the version script 5509supplied to the linker when building a shared library. If you are 5510attempting to override a versioned symbol from a shared library, then 5511NODENAME should correspond to the nodename of the symbol you are trying 5512to override. 5513 5514 If the symbol NAME is not defined within the file being assembled, 5515all references to NAME will be changed to NAME2@NODENAME. If no 5516reference to NAME is made, NAME2@NODENAME will be removed from the 5517symbol table. 5518 5519 Another usage of the `.symver' directive is: 5520 .symver NAME, NAME2@@NODENAME 5521 In this case, the symbol NAME must exist and be defined within the 5522file being assembled. It is similar to NAME2@NODENAME. The difference 5523is NAME2@@NODENAME will also be used to resolve references to NAME2 by 5524the linker. 5525 5526 The third usage of the `.symver' directive is: 5527 .symver NAME, NAME2@@@NODENAME 5528 When NAME is not defined within the file being assembled, it is 5529treated as NAME2@NODENAME. When NAME is defined within the file being 5530assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME. 5531 5532 5533File: as.info, Node: Tag, Next: Text, Prev: Symver, Up: Pseudo Ops 5534 55357.91 `.tag STRUCTNAME' 5536====================== 5537 5538This directive is generated by compilers to include auxiliary debugging 5539information in the symbol table. It is only permitted inside 5540`.def'/`.endef' pairs. Tags are used to link structure definitions in 5541the symbol table with instances of those structures. 5542 5543 5544File: as.info, Node: Text, Next: Title, Prev: Tag, Up: Pseudo Ops 5545 55467.92 `.text SUBSECTION' 5547======================= 5548 5549Tells `as' to assemble the following statements onto the end of the 5550text subsection numbered SUBSECTION, which is an absolute expression. 5551If SUBSECTION is omitted, subsection number zero is used. 5552 5553 5554File: as.info, Node: Title, Next: Type, Prev: Text, Up: Pseudo Ops 5555 55567.93 `.title "HEADING"' 5557======================= 5558 5559Use HEADING as the title (second line, immediately after the source 5560file name and pagenumber) when generating assembly listings. 5561 5562 This directive affects subsequent pages, as well as the current page 5563if it appears within ten lines of the top of a page. 5564 5565 5566File: as.info, Node: Type, Next: Uleb128, Prev: Title, Up: Pseudo Ops 5567 55687.94 `.type' 5569============ 5570 5571This directive is used to set the type of a symbol. 5572 5573COFF Version 5574------------ 5575 5576 For COFF targets, this directive is permitted only within 5577`.def'/`.endef' pairs. It is used like this: 5578 5579 .type INT 5580 5581 This records the integer INT as the type attribute of a symbol table 5582entry. 5583 5584ELF Version 5585----------- 5586 5587 For ELF targets, the `.type' directive is used like this: 5588 5589 .type NAME , TYPE DESCRIPTION 5590 5591 This sets the type of symbol NAME to be either a function symbol or 5592an object symbol. There are five different syntaxes supported for the 5593TYPE DESCRIPTION field, in order to provide compatibility with various 5594other assemblers. 5595 5596 Because some of the characters used in these syntaxes (such as `@' 5597and `#') are comment characters for some architectures, some of the 5598syntaxes below do not work on all architectures. The first variant 5599will be accepted by the GNU assembler on all architectures so that 5600variant should be used for maximum portability, if you do not need to 5601assemble your code with other assemblers. 5602 5603 The syntaxes supported are: 5604 5605 .type <name> STT_<TYPE_IN_UPPER_CASE> 5606 .type <name>,#<type> 5607 .type <name>,@<type> 5608 .type <name>,%<type> 5609 .type <name>,"<type>" 5610 5611 The types supported are: 5612 5613`STT_FUNC' 5614`function' 5615 Mark the symbol as being a function name. 5616 5617`STT_GNU_IFUNC' 5618`gnu_indirect_function' 5619 Mark the symbol as an indirect function when evaluated during reloc 5620 processing. (This is only supported on assemblers targeting GNU 5621 systems). 5622 5623`STT_OBJECT' 5624`object' 5625 Mark the symbol as being a data object. 5626 5627`STT_TLS' 5628`tls_object' 5629 Mark the symbol as being a thead-local data object. 5630 5631`STT_COMMON' 5632`common' 5633 Mark the symbol as being a common data object. 5634 5635`STT_NOTYPE' 5636`notype' 5637 Does not mark the symbol in any way. It is supported just for 5638 completeness. 5639 5640`gnu_unique_object' 5641 Marks the symbol as being a globally unique data object. The 5642 dynamic linker will make sure that in the entire process there is 5643 just one symbol with this name and type in use. (This is only 5644 supported on assemblers targeting GNU systems). 5645 5646 5647 Note: Some targets support extra types in addition to those listed 5648above. 5649 5650 5651File: as.info, Node: Uleb128, Next: Val, Prev: Type, Up: Pseudo Ops 5652 56537.95 `.uleb128 EXPRESSIONS' 5654=========================== 5655 5656ULEB128 stands for "unsigned little endian base 128." This is a 5657compact, variable length representation of numbers used by the DWARF 5658symbolic debugging format. *Note `.sleb128': Sleb128. 5659 5660 5661File: as.info, Node: Val, Next: Version, Prev: Uleb128, Up: Pseudo Ops 5662 56637.96 `.val ADDR' 5664================ 5665 5666This directive, permitted only within `.def'/`.endef' pairs, records 5667the address ADDR as the value attribute of a symbol table entry. 5668 5669 5670File: as.info, Node: Version, Next: VTableEntry, Prev: Val, Up: Pseudo Ops 5671 56727.97 `.version "STRING"' 5673======================== 5674 5675This directive creates a `.note' section and places into it an ELF 5676formatted note of type NT_VERSION. The note's name is set to `string'. 5677 5678 5679File: as.info, Node: VTableEntry, Next: VTableInherit, Prev: Version, Up: Pseudo Ops 5680 56817.98 `.vtable_entry TABLE, OFFSET' 5682================================== 5683 5684This directive finds or creates a symbol `table' and creates a 5685`VTABLE_ENTRY' relocation for it with an addend of `offset'. 5686 5687 5688File: as.info, Node: VTableInherit, Next: Warning, Prev: VTableEntry, Up: Pseudo Ops 5689 56907.99 `.vtable_inherit CHILD, PARENT' 5691==================================== 5692 5693This directive finds the symbol `child' and finds or creates the symbol 5694`parent' and then creates a `VTABLE_INHERIT' relocation for the parent 5695whose addend is the value of the child symbol. As a special case the 5696parent name of `0' is treated as referring to the `*ABS*' section. 5697 5698 5699File: as.info, Node: Warning, Next: Weak, Prev: VTableInherit, Up: Pseudo Ops 5700 57017.100 `.warning "STRING"' 5702========================= 5703 5704Similar to the directive `.error' (*note `.error "STRING"': Error.), 5705but just emits a warning. 5706 5707 5708File: as.info, Node: Weak, Next: Weakref, Prev: Warning, Up: Pseudo Ops 5709 57107.101 `.weak NAMES' 5711=================== 5712 5713This directive sets the weak attribute on the comma separated list of 5714symbol `names'. If the symbols do not already exist, they will be 5715created. 5716 5717 On COFF targets other than PE, weak symbols are a GNU extension. 5718This directive sets the weak attribute on the comma separated list of 5719symbol `names'. If the symbols do not already exist, they will be 5720created. 5721 5722 On the PE target, weak symbols are supported natively as weak 5723aliases. When a weak symbol is created that is not an alias, GAS 5724creates an alternate symbol to hold the default value. 5725 5726 5727File: as.info, Node: Weakref, Next: Word, Prev: Weak, Up: Pseudo Ops 5728 57297.102 `.weakref ALIAS, TARGET' 5730============================== 5731 5732This directive creates an alias to the target symbol that enables the 5733symbol to be referenced with weak-symbol semantics, but without 5734actually making it weak. If direct references or definitions of the 5735symbol are present, then the symbol will not be weak, but if all 5736references to it are through weak references, the symbol will be marked 5737as weak in the symbol table. 5738 5739 The effect is equivalent to moving all references to the alias to a 5740separate assembly source file, renaming the alias to the symbol in it, 5741declaring the symbol as weak there, and running a reloadable link to 5742merge the object files resulting from the assembly of the new source 5743file and the old source file that had the references to the alias 5744removed. 5745 5746 The alias itself never makes to the symbol table, and is entirely 5747handled within the assembler. 5748 5749 5750File: as.info, Node: Word, Next: Zero, Prev: Weakref, Up: Pseudo Ops 5751 57527.103 `.word EXPRESSIONS' 5753========================= 5754 5755This directive expects zero or more EXPRESSIONS, of any section, 5756separated by commas. 5757 5758 The size of the number emitted, and its byte order, depend on what 5759target computer the assembly is for. 5760 5761 _Warning: Special Treatment to support Compilers_ 5762 5763 Machines with a 32-bit address space, but that do less than 32-bit 5764addressing, require the following special treatment. If the machine of 5765interest to you does 32-bit addressing (or doesn't require it; *note 5766Machine Dependencies::), you can ignore this issue. 5767 5768 In order to assemble compiler output into something that works, `as' 5769occasionally does strange things to `.word' directives. Directives of 5770the form `.word sym1-sym2' are often emitted by compilers as part of 5771jump tables. Therefore, when `as' assembles a directive of the form 5772`.word sym1-sym2', and the difference between `sym1' and `sym2' does 5773not fit in 16 bits, `as' creates a "secondary jump table", immediately 5774before the next label. This secondary jump table is preceded by a 5775short-jump to the first byte after the secondary table. This 5776short-jump prevents the flow of control from accidentally falling into 5777the new table. Inside the table is a long-jump to `sym2'. The 5778original `.word' contains `sym1' minus the address of the long-jump to 5779`sym2'. 5780 5781 If there were several occurrences of `.word sym1-sym2' before the 5782secondary jump table, all of them are adjusted. If there was a `.word 5783sym3-sym4', that also did not fit in sixteen bits, a long-jump to 5784`sym4' is included in the secondary jump table, and the `.word' 5785directives are adjusted to contain `sym3' minus the address of the 5786long-jump to `sym4'; and so on, for as many entries in the original 5787jump table as necessary. 5788 5789 5790File: as.info, Node: Zero, Next: Deprecated, Prev: Word, Up: Pseudo Ops 5791 57927.104 `.zero SIZE' 5793================== 5794 5795This directive emits SIZE 0-valued bytes. SIZE must be an absolute 5796expression. This directive is actually an alias for the `.skip' 5797directive so in can take an optional second argument of the value to 5798store in the bytes instead of zero. Using `.zero' in this way would be 5799confusing however. 5800 5801 5802File: as.info, Node: Deprecated, Prev: Zero, Up: Pseudo Ops 5803 58047.105 Deprecated Directives 5805=========================== 5806 5807One day these directives won't work. They are included for 5808compatibility with older assemblers. 5809.abort 5810 5811.line 5812 5813 5814File: as.info, Node: Object Attributes, Next: Machine Dependencies, Prev: Pseudo Ops, Up: Top 5815 58168 Object Attributes 5817******************* 5818 5819`as' assembles source files written for a specific architecture into 5820object files for that architecture. But not all object files are alike. 5821Many architectures support incompatible variations. For instance, 5822floating point arguments might be passed in floating point registers if 5823the object file requires hardware floating point support--or floating 5824point arguments might be passed in integer registers if the object file 5825supports processors with no hardware floating point unit. Or, if two 5826objects are built for different generations of the same architecture, 5827the combination may require the newer generation at run-time. 5828 5829 This information is useful during and after linking. At link time, 5830`ld' can warn about incompatible object files. After link time, tools 5831like `gdb' can use it to process the linked file correctly. 5832 5833 Compatibility information is recorded as a series of object 5834attributes. Each attribute has a "vendor", "tag", and "value". The 5835vendor is a string, and indicates who sets the meaning of the tag. The 5836tag is an integer, and indicates what property the attribute describes. 5837The value may be a string or an integer, and indicates how the 5838property affects this object. Missing attributes are the same as 5839attributes with a zero value or empty string value. 5840 5841 Object attributes were developed as part of the ABI for the ARM 5842Architecture. The file format is documented in `ELF for the ARM 5843Architecture'. 5844 5845* Menu: 5846 5847* GNU Object Attributes:: GNU Object Attributes 5848* Defining New Object Attributes:: Defining New Object Attributes 5849 5850 5851File: as.info, Node: GNU Object Attributes, Next: Defining New Object Attributes, Up: Object Attributes 5852 58538.1 GNU Object Attributes 5854========================= 5855 5856The `.gnu_attribute' directive records an object attribute with vendor 5857`gnu'. 5858 5859 Except for `Tag_compatibility', which has both an integer and a 5860string for its value, GNU attributes have a string value if the tag 5861number is odd and an integer value if the tag number is even. The 5862second bit (`TAG & 2' is set for architecture-independent attributes 5863and clear for architecture-dependent ones. 5864 58658.1.1 Common GNU attributes 5866--------------------------- 5867 5868These attributes are valid on all architectures. 5869 5870Tag_compatibility (32) 5871 The compatibility attribute takes an integer flag value and a 5872 vendor name. If the flag value is 0, the file is compatible with 5873 other toolchains. If it is 1, then the file is only compatible 5874 with the named toolchain. If it is greater than 1, the file can 5875 only be processed by other toolchains under some private 5876 arrangement indicated by the flag value and the vendor name. 5877 58788.1.2 MIPS Attributes 5879--------------------- 5880 5881Tag_GNU_MIPS_ABI_FP (4) 5882 The floating-point ABI used by this object file. The value will 5883 be: 5884 5885 * 0 for files not affected by the floating-point ABI. 5886 5887 * 1 for files using the hardware floating-point ABI with a 5888 standard double-precision FPU. 5889 5890 * 2 for files using the hardware floating-point ABI with a 5891 single-precision FPU. 5892 5893 * 3 for files using the software floating-point ABI. 5894 5895 * 4 for files using the deprecated hardware floating-point ABI 5896 which used 64-bit floating-point registers, 32-bit 5897 general-purpose registers and increased the number of 5898 callee-saved floating-point registers. 5899 5900 * 5 for files using the hardware floating-point ABI with a 5901 double-precision FPU with either 32-bit or 64-bit 5902 floating-point registers and 32-bit general-purpose registers. 5903 5904 * 6 for files using the hardware floating-point ABI with 64-bit 5905 floating-point registers and 32-bit general-purpose registers. 5906 5907 * 7 for files using the hardware floating-point ABI with 64-bit 5908 floating-point registers, 32-bit general-purpose registers 5909 and a rule that forbids the direct use of odd-numbered 5910 single-precision floating-point registers. 5911 59128.1.3 PowerPC Attributes 5913------------------------ 5914 5915Tag_GNU_Power_ABI_FP (4) 5916 The floating-point ABI used by this object file. The value will 5917 be: 5918 5919 * 0 for files not affected by the floating-point ABI. 5920 5921 * 1 for files using double-precision hardware floating-point 5922 ABI. 5923 5924 * 2 for files using the software floating-point ABI. 5925 5926 * 3 for files using single-precision hardware floating-point 5927 ABI. 5928 5929Tag_GNU_Power_ABI_Vector (8) 5930 The vector ABI used by this object file. The value will be: 5931 5932 * 0 for files not affected by the vector ABI. 5933 5934 * 1 for files using general purpose registers to pass vectors. 5935 5936 * 2 for files using AltiVec registers to pass vectors. 5937 5938 * 3 for files using SPE registers to pass vectors. 5939 59408.1.4 IBM z Systems Attributes 5941------------------------------ 5942 5943Tag_GNU_S390_ABI_Vector (8) 5944 The vector ABI used by this object file. The value will be: 5945 5946 * 0 for files not affected by the vector ABI. 5947 5948 * 1 for files using software vector ABI. 5949 5950 * 2 for files using hardware vector ABI. 5951 5952 5953File: as.info, Node: Defining New Object Attributes, Prev: GNU Object Attributes, Up: Object Attributes 5954 59558.2 Defining New Object Attributes 5956================================== 5957 5958If you want to define a new GNU object attribute, here are the places 5959you will need to modify. New attributes should be discussed on the 5960`binutils' mailing list. 5961 5962 * This manual, which is the official register of attributes. 5963 5964 * The header for your architecture `include/elf', to define the tag. 5965 5966 * The `bfd' support file for your architecture, to merge the 5967 attribute and issue any appropriate link warnings. 5968 5969 * Test cases in `ld/testsuite' for merging and link warnings. 5970 5971 * `binutils/readelf.c' to display your attribute. 5972 5973 * GCC, if you want the compiler to mark the attribute automatically. 5974 5975 5976File: as.info, Node: Machine Dependencies, Next: Reporting Bugs, Prev: Object Attributes, Up: Top 5977 59789 Machine Dependent Features 5979**************************** 5980 5981The machine instruction sets are (almost by definition) different on 5982each machine where `as' runs. Floating point representations vary as 5983well, and `as' often supports a few additional directives or 5984command-line options for compatibility with other assemblers on a 5985particular platform. Finally, some versions of `as' support special 5986pseudo-instructions for branch optimization. 5987 5988 This chapter discusses most of these differences, though it does not 5989include details on any machine's instruction set. For details on that 5990subject, see the hardware manufacturer's manual. 5991 5992* Menu: 5993 5994 5995* AArch64-Dependent:: AArch64 Dependent Features 5996 5997* Alpha-Dependent:: Alpha Dependent Features 5998 5999* ARC-Dependent:: ARC Dependent Features 6000 6001* ARM-Dependent:: ARM Dependent Features 6002 6003* AVR-Dependent:: AVR Dependent Features 6004 6005* Blackfin-Dependent:: Blackfin Dependent Features 6006 6007* CR16-Dependent:: CR16 Dependent Features 6008 6009* CRIS-Dependent:: CRIS Dependent Features 6010 6011* D10V-Dependent:: D10V Dependent Features 6012 6013* D30V-Dependent:: D30V Dependent Features 6014 6015* Epiphany-Dependent:: EPIPHANY Dependent Features 6016 6017* H8/300-Dependent:: Renesas H8/300 Dependent Features 6018 6019* HPPA-Dependent:: HPPA Dependent Features 6020 6021* ESA/390-Dependent:: IBM ESA/390 Dependent Features 6022 6023* i386-Dependent:: Intel 80386 and AMD x86-64 Dependent Features 6024 6025* i860-Dependent:: Intel 80860 Dependent Features 6026 6027* i960-Dependent:: Intel 80960 Dependent Features 6028 6029* IA-64-Dependent:: Intel IA-64 Dependent Features 6030 6031* IP2K-Dependent:: IP2K Dependent Features 6032 6033* LM32-Dependent:: LM32 Dependent Features 6034 6035* M32C-Dependent:: M32C Dependent Features 6036 6037* M32R-Dependent:: M32R Dependent Features 6038 6039* M68K-Dependent:: M680x0 Dependent Features 6040 6041* M68HC11-Dependent:: M68HC11 and 68HC12 Dependent Features 6042 6043* Meta-Dependent :: Meta Dependent Features 6044 6045* MicroBlaze-Dependent:: MICROBLAZE Dependent Features 6046 6047* MIPS-Dependent:: MIPS Dependent Features 6048 6049* MMIX-Dependent:: MMIX Dependent Features 6050 6051* MSP430-Dependent:: MSP430 Dependent Features 6052 6053* NDS32-Dependent:: Andes NDS32 Dependent Features 6054 6055* NiosII-Dependent:: Altera Nios II Dependent Features 6056 6057* NS32K-Dependent:: NS32K Dependent Features 6058 6059* PDP-11-Dependent:: PDP-11 Dependent Features 6060 6061* PJ-Dependent:: picoJava Dependent Features 6062 6063* PPC-Dependent:: PowerPC Dependent Features 6064 6065* RL78-Dependent:: RL78 Dependent Features 6066 6067* RX-Dependent:: RX Dependent Features 6068 6069* S/390-Dependent:: IBM S/390 Dependent Features 6070 6071* SCORE-Dependent:: SCORE Dependent Features 6072 6073* SH-Dependent:: Renesas / SuperH SH Dependent Features 6074* SH64-Dependent:: SuperH SH64 Dependent Features 6075 6076* Sparc-Dependent:: SPARC Dependent Features 6077 6078* TIC54X-Dependent:: TI TMS320C54x Dependent Features 6079 6080* TIC6X-Dependent :: TI TMS320C6x Dependent Features 6081 6082* TILE-Gx-Dependent :: Tilera TILE-Gx Dependent Features 6083 6084* TILEPro-Dependent :: Tilera TILEPro Dependent Features 6085 6086* V850-Dependent:: V850 Dependent Features 6087 6088* Vax-Dependent:: VAX Dependent Features 6089 6090* Visium-Dependent:: Visium Dependent Features 6091 6092* XGATE-Dependent:: XGATE Features 6093 6094* XSTORMY16-Dependent:: XStormy16 Dependent Features 6095 6096* Xtensa-Dependent:: Xtensa Dependent Features 6097 6098* Z80-Dependent:: Z80 Dependent Features 6099 6100* Z8000-Dependent:: Z8000 Dependent Features 6101 6102 6103File: as.info, Node: AArch64-Dependent, Next: Alpha-Dependent, Up: Machine Dependencies 6104 61059.1 AArch64 Dependent Features 6106============================== 6107 6108* Menu: 6109 6110* AArch64 Options:: Options 6111* AArch64 Extensions:: Extensions 6112* AArch64 Syntax:: Syntax 6113* AArch64 Floating Point:: Floating Point 6114* AArch64 Directives:: AArch64 Machine Directives 6115* AArch64 Opcodes:: Opcodes 6116* AArch64 Mapping Symbols:: Mapping Symbols 6117 6118 6119File: as.info, Node: AArch64 Options, Next: AArch64 Extensions, Up: AArch64-Dependent 6120 61219.1.1 Options 6122------------- 6123 6124`-EB' 6125 This option specifies that the output generated by the assembler 6126 should be marked as being encoded for a big-endian processor. 6127 6128`-EL' 6129 This option specifies that the output generated by the assembler 6130 should be marked as being encoded for a little-endian processor. 6131 6132`-mabi=ABI' 6133 Specify which ABI the source code uses. The recognized arguments 6134 are: `ilp32' and `lp64', which decides the generated object file 6135 in ELF32 and ELF64 format respectively. The default is `lp64'. 6136 6137`-mcpu=PROCESSOR[+EXTENSION...]' 6138 This option specifies the target processor. The assembler will 6139 issue an error message if an attempt is made to assemble an 6140 instruction which will not execute on the target processor. The 6141 following processor names are recognized: `cortex-a35', 6142 `cortex-a53', `cortex-a57', `cortex-a72', `cortex-a73', 6143 `exynos-m1', `qdf24xx', `thunderx', `vulcan', `xgene1' and 6144 `xgene2'. The special name `all' may be used to allow the 6145 assembler to accept instructions valid for any supported 6146 processor, including all optional extensions. 6147 6148 In addition to the basic instruction set, the assembler can be 6149 told to accept, or restrict, various extension mnemonics that 6150 extend the processor. *Note AArch64 Extensions::. 6151 6152 If some implementations of a particular processor can have an 6153 extension, then then those extensions are automatically enabled. 6154 Consequently, you will not normally have to specify any additional 6155 extensions. 6156 6157`-march=ARCHITECTURE[+EXTENSION...]' 6158 This option specifies the target architecture. The assembler will 6159 issue an error message if an attempt is made to assemble an 6160 instruction which will not execute on the target architecture. The 6161 following architecture names are recognized: `armv8-a', 6162 `armv8.1-a' and `armv8.2-a'. 6163 6164 If both `-mcpu' and `-march' are specified, the assembler will use 6165 the setting for `-mcpu'. If neither are specified, the assembler 6166 will default to `-mcpu=all'. 6167 6168 The architecture option can be extended with the same instruction 6169 set extension options as the `-mcpu' option. Unlike `-mcpu', 6170 extensions are not always enabled by default, *Note AArch64 6171 Extensions::. 6172 6173`-mverbose-error' 6174 This option enables verbose error messages for AArch64 gas. This 6175 option is enabled by default. 6176 6177`-mno-verbose-error' 6178 This option disables verbose error messages in AArch64 gas. 6179 6180 6181 6182File: as.info, Node: AArch64 Extensions, Next: AArch64 Syntax, Prev: AArch64 Options, Up: AArch64-Dependent 6183 61849.1.2 Architecture Extensions 6185----------------------------- 6186 6187The table below lists the permitted architecture extensions that are 6188supported by the assembler and the conditions under which they are 6189automatically enabled. 6190 6191 Multiple extensions may be specified, separated by a `+'. Extension 6192mnemonics may also be removed from those the assembler accepts. This 6193is done by prepending `no' to the option that adds the extension. 6194Extensions that are removed must be listed after all extensions that 6195have been added. 6196 6197 Enabling an extension that requires other extensions will 6198automatically cause those extensions to be enabled. Similarly, 6199disabling an extension that is required by other extensions will 6200automatically cause those extensions to be disabled. 6201 6202Extension Minimum Enabled by Description 6203 Architecture default 6204---------------------------------------------------------------------------- 6205`crc' ARMv8-A ARMv8.1-A Enable CRC instructions. 6206 or later 6207`crypto' ARMv8-A No Enable cryptographic extensions. This 6208 implies `fp' and `simd'. 6209`fp' ARMv8-A ARMv8-A or Enable floating-point extensions. 6210 later 6211`fp16' ARMv8.2-A ARMv8.2-A Enable ARMv8.2 16-bit floating-point 6212 or later support. This implies `fp'. 6213`lor' ARMv8-A ARMv8.1-A Enable Limited Ordering Regions 6214 or later extensions. 6215`lse' ARMv8-A ARMv8.1-A Enable Large System extensions. 6216 or later 6217`pan' ARMv8-A ARMv8.1-A Enable Privileged Access Never support. 6218 or later 6219`profile' ARMv8.2-A No Enable statistical profiling 6220 extensions. 6221`ras' ARMv8-A ARMv8.2-A Enable the Reliability, Availability 6222 or later and Serviceability extension. 6223`rdma' ARMv8-A ARMv8.1-A Enable ARMv8.1 Advanced SIMD 6224 or later extensions. This implies `simd'. 6225`simd' ARMv8-A ARMv8-A or Enable Advanced SIMD extensions. This 6226 later implies `fp'. 6227 6228 6229File: as.info, Node: AArch64 Syntax, Next: AArch64 Floating Point, Prev: AArch64 Extensions, Up: AArch64-Dependent 6230 62319.1.3 Syntax 6232------------ 6233 6234* Menu: 6235 6236* AArch64-Chars:: Special Characters 6237* AArch64-Regs:: Register Names 6238* AArch64-Relocations:: Relocations 6239 6240 6241File: as.info, Node: AArch64-Chars, Next: AArch64-Regs, Up: AArch64 Syntax 6242 62439.1.3.1 Special Characters 6244.......................... 6245 6246The presence of a `//' on a line indicates the start of a comment that 6247extends to the end of the current line. If a `#' appears as the first 6248character of a line, the whole line is treated as a comment. 6249 6250 The `;' character can be used instead of a newline to separate 6251statements. 6252 6253 The `#' can be optionally used to indicate immediate operands. 6254 6255 6256File: as.info, Node: AArch64-Regs, Next: AArch64-Relocations, Prev: AArch64-Chars, Up: AArch64 Syntax 6257 62589.1.3.2 Register Names 6259...................... 6260 6261Please refer to the section `4.4 Register Names' of `ARMv8 Instruction 6262Set Overview', which is available at `http://infocenter.arm.com'. 6263 6264 6265File: as.info, Node: AArch64-Relocations, Prev: AArch64-Regs, Up: AArch64 Syntax 6266 62679.1.3.3 Relocations 6268................... 6269 6270Relocations for `MOVZ' and `MOVK' instructions can be generated by 6271prefixing the label with `#:abs_g2:' etc. For example to load the 627248-bit absolute address of FOO into x0: 6273 6274 movz x0, #:abs_g2:foo // bits 32-47, overflow check 6275 movk x0, #:abs_g1_nc:foo // bits 16-31, no overflow check 6276 movk x0, #:abs_g0_nc:foo // bits 0-15, no overflow check 6277 6278 Relocations for `ADRP', and `ADD', `LDR' or `STR' instructions can 6279be generated by prefixing the label with `:pg_hi21:' and `#:lo12:' 6280respectively. 6281 6282 For example to use 33-bit (+/-4GB) pc-relative addressing to load 6283the address of FOO into x0: 6284 6285 adrp x0, :pg_hi21:foo 6286 add x0, x0, #:lo12:foo 6287 6288 Or to load the value of FOO into x0: 6289 6290 adrp x0, :pg_hi21:foo 6291 ldr x0, [x0, #:lo12:foo] 6292 6293 Note that `:pg_hi21:' is optional. 6294 6295 adrp x0, foo 6296 6297 is equivalent to 6298 6299 adrp x0, :pg_hi21:foo 6300 6301 6302File: as.info, Node: AArch64 Floating Point, Next: AArch64 Directives, Prev: AArch64 Syntax, Up: AArch64-Dependent 6303 63049.1.4 Floating Point 6305-------------------- 6306 6307The AArch64 architecture uses IEEE floating-point numbers. 6308 6309 6310File: as.info, Node: AArch64 Directives, Next: AArch64 Opcodes, Prev: AArch64 Floating Point, Up: AArch64-Dependent 6311 63129.1.5 AArch64 Machine Directives 6313-------------------------------- 6314 6315`.arch NAME' 6316 Select the target architecture. Valid values for NAME are the 6317 same as for the `-march' commandline option. 6318 6319 Specifying `.arch' clears any previously selected architecture 6320 extensions. 6321 6322`.arch_extension NAME' 6323 Add or remove an architecture extension to the target 6324 architecture. Valid values for NAME are the same as those 6325 accepted as architectural extensions by the `-mcpu' commandline 6326 option. 6327 6328 `.arch_extension' may be used multiple times to add or remove 6329 extensions incrementally to the architecture being compiled for. 6330 6331`.bss' 6332 This directive switches to the `.bss' section. 6333 6334`.cpu NAME' 6335 Set the target processor. Valid values for NAME are the same as 6336 those accepted by the `-mcpu=' command line option. 6337 6338`.dword EXPRESSIONS' 6339 The `.dword' directive produces 64 bit values. 6340 6341`.even' 6342 The `.even' directive aligns the output on the next even byte 6343 boundary. 6344 6345`.inst EXPRESSIONS' 6346 Inserts the expressions into the output as if they were 6347 instructions, rather than data. 6348 6349`.ltorg' 6350 This directive causes the current contents of the literal pool to 6351 be dumped into the current section (which is assumed to be the 6352 .text section) at the current location (aligned to a word 6353 boundary). GAS maintains a separate literal pool for each section 6354 and each sub-section. The `.ltorg' directive will only affect the 6355 literal pool of the current section and sub-section. At the end 6356 of assembly all remaining, un-empty literal pools will 6357 automatically be dumped. 6358 6359 Note - older versions of GAS would dump the current literal pool 6360 any time a section change occurred. This is no longer done, since 6361 it prevents accurate control of the placement of literal pools. 6362 6363`.pool' 6364 This is a synonym for .ltorg. 6365 6366`NAME .req REGISTER NAME' 6367 This creates an alias for REGISTER NAME called NAME. For example: 6368 6369 foo .req w0 6370 6371``.tlsdescadd'' 6372 Emits a TLSDESC_ADD reloc on the next instruction. 6373 6374``.tlsdesccall'' 6375 Emits a TLSDESC_CALL reloc on the next instruction. 6376 6377``.tlsdescldr'' 6378 Emits a TLSDESC_LDR reloc on the next instruction. 6379 6380`.unreq ALIAS-NAME' 6381 This undefines a register alias which was previously defined using 6382 the `req' directive. For example: 6383 6384 foo .req w0 6385 .unreq foo 6386 6387 An error occurs if the name is undefined. Note - this pseudo op 6388 can be used to delete builtin in register name aliases (eg 'w0'). 6389 This should only be done if it is really necessary. 6390 6391`.xword EXPRESSIONS' 6392 The `.xword' directive produces 64 bit values. This is the same 6393 as the `.dword' directive. 6394 6395 6396 6397File: as.info, Node: AArch64 Opcodes, Next: AArch64 Mapping Symbols, Prev: AArch64 Directives, Up: AArch64-Dependent 6398 63999.1.6 Opcodes 6400------------- 6401 6402GAS implements all the standard AArch64 opcodes. It also implements 6403several pseudo opcodes, including several synthetic load instructions. 6404 6405`LDR =' 6406 ldr <register> , =<expression> 6407 6408 The constant expression will be placed into the nearest literal 6409 pool (if it not already there) and a PC-relative LDR instruction 6410 will be generated. 6411 6412 6413 For more information on the AArch64 instruction set and assembly 6414language notation, see `ARMv8 Instruction Set Overview' available at 6415`http://infocenter.arm.com'. 6416 6417 6418File: as.info, Node: AArch64 Mapping Symbols, Prev: AArch64 Opcodes, Up: AArch64-Dependent 6419 64209.1.7 Mapping Symbols 6421--------------------- 6422 6423The AArch64 ELF specification requires that special symbols be inserted 6424into object files to mark certain features: 6425 6426`$x' 6427 At the start of a region of code containing AArch64 instructions. 6428 6429`$d' 6430 At the start of a region of data. 6431 6432 6433 6434File: as.info, Node: Alpha-Dependent, Next: ARC-Dependent, Prev: AArch64-Dependent, Up: Machine Dependencies 6435 64369.2 Alpha Dependent Features 6437============================ 6438 6439* Menu: 6440 6441* Alpha Notes:: Notes 6442* Alpha Options:: Options 6443* Alpha Syntax:: Syntax 6444* Alpha Floating Point:: Floating Point 6445* Alpha Directives:: Alpha Machine Directives 6446* Alpha Opcodes:: Opcodes 6447 6448 6449File: as.info, Node: Alpha Notes, Next: Alpha Options, Up: Alpha-Dependent 6450 64519.2.1 Notes 6452----------- 6453 6454The documentation here is primarily for the ELF object format. `as' 6455also supports the ECOFF and EVAX formats, but features specific to 6456these formats are not yet documented. 6457 6458 6459File: as.info, Node: Alpha Options, Next: Alpha Syntax, Prev: Alpha Notes, Up: Alpha-Dependent 6460 64619.2.2 Options 6462------------- 6463 6464`-mCPU' 6465 This option specifies the target processor. If an attempt is made 6466 to assemble an instruction which will not execute on the target 6467 processor, the assembler may either expand the instruction as a 6468 macro or issue an error message. This option is equivalent to the 6469 `.arch' directive. 6470 6471 The following processor names are recognized: `21064', `21064a', 6472 `21066', `21068', `21164', `21164a', `21164pc', `21264', `21264a', 6473 `21264b', `ev4', `ev5', `lca45', `ev5', `ev56', `pca56', `ev6', 6474 `ev67', `ev68'. The special name `all' may be used to allow the 6475 assembler to accept instructions valid for any Alpha processor. 6476 6477 In order to support existing practice in OSF/1 with respect to 6478 `.arch', and existing practice within `MILO' (the Linux ARC 6479 bootloader), the numbered processor names (e.g. 21064) enable the 6480 processor-specific PALcode instructions, while the 6481 "electro-vlasic" names (e.g. `ev4') do not. 6482 6483`-mdebug' 6484`-no-mdebug' 6485 Enables or disables the generation of `.mdebug' encapsulation for 6486 stabs directives and procedure descriptors. The default is to 6487 automatically enable `.mdebug' when the first stabs directive is 6488 seen. 6489 6490`-relax' 6491 This option forces all relocations to be put into the object file, 6492 instead of saving space and resolving some relocations at assembly 6493 time. Note that this option does not propagate all symbol 6494 arithmetic into the object file, because not all symbol arithmetic 6495 can be represented. However, the option can still be useful in 6496 specific applications. 6497 6498`-replace' 6499`-noreplace' 6500 Enables or disables the optimization of procedure calls, both at 6501 assemblage and at link time. These options are only available for 6502 VMS targets and `-replace' is the default. See section 1.4.1 of 6503 the OpenVMS Linker Utility Manual. 6504 6505`-g' 6506 This option is used when the compiler generates debug information. 6507 When `gcc' is using `mips-tfile' to generate debug information 6508 for ECOFF, local labels must be passed through to the object file. 6509 Otherwise this option has no effect. 6510 6511`-GSIZE' 6512 A local common symbol larger than SIZE is placed in `.bss', while 6513 smaller symbols are placed in `.sbss'. 6514 6515`-F' 6516`-32addr' 6517 These options are ignored for backward compatibility. 6518 6519 6520File: as.info, Node: Alpha Syntax, Next: Alpha Floating Point, Prev: Alpha Options, Up: Alpha-Dependent 6521 65229.2.3 Syntax 6523------------ 6524 6525The assembler syntax closely follow the Alpha Reference Manual; 6526assembler directives and general syntax closely follow the OSF/1 and 6527OpenVMS syntax, with a few differences for ELF. 6528 6529* Menu: 6530 6531* Alpha-Chars:: Special Characters 6532* Alpha-Regs:: Register Names 6533* Alpha-Relocs:: Relocations 6534 6535 6536File: as.info, Node: Alpha-Chars, Next: Alpha-Regs, Up: Alpha Syntax 6537 65389.2.3.1 Special Characters 6539.......................... 6540 6541`#' is the line comment character. Note that if `#' is the first 6542character on a line then it can also be a logical line number directive 6543(*note Comments::) or a preprocessor control command (*note 6544Preprocessing::). 6545 6546 `;' can be used instead of a newline to separate statements. 6547 6548 6549File: as.info, Node: Alpha-Regs, Next: Alpha-Relocs, Prev: Alpha-Chars, Up: Alpha Syntax 6550 65519.2.3.2 Register Names 6552...................... 6553 6554The 32 integer registers are referred to as `$N' or `$rN'. In 6555addition, registers 15, 28, 29, and 30 may be referred to by the 6556symbols `$fp', `$at', `$gp', and `$sp' respectively. 6557 6558 The 32 floating-point registers are referred to as `$fN'. 6559 6560 6561File: as.info, Node: Alpha-Relocs, Prev: Alpha-Regs, Up: Alpha Syntax 6562 65639.2.3.3 Relocations 6564................... 6565 6566Some of these relocations are available for ECOFF, but mostly only for 6567ELF. They are modeled after the relocation format introduced in 6568Digital Unix 4.0, but there are additions. 6569 6570 The format is `!TAG' or `!TAG!NUMBER' where TAG is the name of the 6571relocation. In some cases NUMBER is used to relate specific 6572instructions. 6573 6574 The relocation is placed at the end of the instruction like so: 6575 6576 ldah $0,a($29) !gprelhigh 6577 lda $0,a($0) !gprellow 6578 ldq $1,b($29) !literal!100 6579 ldl $2,0($1) !lituse_base!100 6580 6581`!literal' 6582`!literal!N' 6583 Used with an `ldq' instruction to load the address of a symbol 6584 from the GOT. 6585 6586 A sequence number N is optional, and if present is used to pair 6587 `lituse' relocations with this `literal' relocation. The `lituse' 6588 relocations are used by the linker to optimize the code based on 6589 the final location of the symbol. 6590 6591 Note that these optimizations are dependent on the data flow of the 6592 program. Therefore, if _any_ `lituse' is paired with a `literal' 6593 relocation, then _all_ uses of the register set by the `literal' 6594 instruction must also be marked with `lituse' relocations. This 6595 is because the original `literal' instruction may be deleted or 6596 transformed into another instruction. 6597 6598 Also note that there may be a one-to-many relationship between 6599 `literal' and `lituse', but not a many-to-one. That is, if there 6600 are two code paths that load up the same address and feed the 6601 value to a single use, then the use may not use a `lituse' 6602 relocation. 6603 6604`!lituse_base!N' 6605 Used with any memory format instruction (e.g. `ldl') to indicate 6606 that the literal is used for an address load. The offset field of 6607 the instruction must be zero. During relaxation, the code may be 6608 altered to use a gp-relative load. 6609 6610`!lituse_jsr!N' 6611 Used with a register branch format instruction (e.g. `jsr') to 6612 indicate that the literal is used for a call. During relaxation, 6613 the code may be altered to use a direct branch (e.g. `bsr'). 6614 6615`!lituse_jsrdirect!N' 6616 Similar to `lituse_jsr', but also that this call cannot be vectored 6617 through a PLT entry. This is useful for functions with special 6618 calling conventions which do not allow the normal call-clobbered 6619 registers to be clobbered. 6620 6621`!lituse_bytoff!N' 6622 Used with a byte mask instruction (e.g. `extbl') to indicate that 6623 only the low 3 bits of the address are relevant. During 6624 relaxation, the code may be altered to use an immediate instead of 6625 a register shift. 6626 6627`!lituse_addr!N' 6628 Used with any other instruction to indicate that the original 6629 address is in fact used, and the original `ldq' instruction may 6630 not be altered or deleted. This is useful in conjunction with 6631 `lituse_jsr' to test whether a weak symbol is defined. 6632 6633 ldq $27,foo($29) !literal!1 6634 beq $27,is_undef !lituse_addr!1 6635 jsr $26,($27),foo !lituse_jsr!1 6636 6637`!lituse_tlsgd!N' 6638 Used with a register branch format instruction to indicate that the 6639 literal is the call to `__tls_get_addr' used to compute the 6640 address of the thread-local storage variable whose descriptor was 6641 loaded with `!tlsgd!N'. 6642 6643`!lituse_tlsldm!N' 6644 Used with a register branch format instruction to indicate that the 6645 literal is the call to `__tls_get_addr' used to compute the 6646 address of the base of the thread-local storage block for the 6647 current module. The descriptor for the module must have been 6648 loaded with `!tlsldm!N'. 6649 6650`!gpdisp!N' 6651 Used with `ldah' and `lda' to load the GP from the current 6652 address, a-la the `ldgp' macro. The source register for the 6653 `ldah' instruction must contain the address of the `ldah' 6654 instruction. There must be exactly one `lda' instruction paired 6655 with the `ldah' instruction, though it may appear anywhere in the 6656 instruction stream. The immediate operands must be zero. 6657 6658 bsr $26,foo 6659 ldah $29,0($26) !gpdisp!1 6660 lda $29,0($29) !gpdisp!1 6661 6662`!gprelhigh' 6663 Used with an `ldah' instruction to add the high 16 bits of a 6664 32-bit displacement from the GP. 6665 6666`!gprellow' 6667 Used with any memory format instruction to add the low 16 bits of a 6668 32-bit displacement from the GP. 6669 6670`!gprel' 6671 Used with any memory format instruction to add a 16-bit 6672 displacement from the GP. 6673 6674`!samegp' 6675 Used with any branch format instruction to skip the GP load at the 6676 target address. The referenced symbol must have the same GP as the 6677 source object file, and it must be declared to either not use `$27' 6678 or perform a standard GP load in the first two instructions via the 6679 `.prologue' directive. 6680 6681`!tlsgd' 6682`!tlsgd!N' 6683 Used with an `lda' instruction to load the address of a TLS 6684 descriptor for a symbol in the GOT. 6685 6686 The sequence number N is optional, and if present it used to pair 6687 the descriptor load with both the `literal' loading the address of 6688 the `__tls_get_addr' function and the `lituse_tlsgd' marking the 6689 call to that function. 6690 6691 For proper relaxation, both the `tlsgd', `literal' and `lituse' 6692 relocations must be in the same extended basic block. That is, 6693 the relocation with the lowest address must be executed first at 6694 runtime. 6695 6696`!tlsldm' 6697`!tlsldm!N' 6698 Used with an `lda' instruction to load the address of a TLS 6699 descriptor for the current module in the GOT. 6700 6701 Similar in other respects to `tlsgd'. 6702 6703`!gotdtprel' 6704 Used with an `ldq' instruction to load the offset of the TLS 6705 symbol within its module's thread-local storage block. Also known 6706 as the dynamic thread pointer offset or dtp-relative offset. 6707 6708`!dtprelhi' 6709`!dtprello' 6710`!dtprel' 6711 Like `gprel' relocations except they compute dtp-relative offsets. 6712 6713`!gottprel' 6714 Used with an `ldq' instruction to load the offset of the TLS 6715 symbol from the thread pointer. Also known as the tp-relative 6716 offset. 6717 6718`!tprelhi' 6719`!tprello' 6720`!tprel' 6721 Like `gprel' relocations except they compute tp-relative offsets. 6722 6723 6724File: as.info, Node: Alpha Floating Point, Next: Alpha Directives, Prev: Alpha Syntax, Up: Alpha-Dependent 6725 67269.2.4 Floating Point 6727-------------------- 6728 6729The Alpha family uses both IEEE and VAX floating-point numbers. 6730 6731 6732File: as.info, Node: Alpha Directives, Next: Alpha Opcodes, Prev: Alpha Floating Point, Up: Alpha-Dependent 6733 67349.2.5 Alpha Assembler Directives 6735-------------------------------- 6736 6737`as' for the Alpha supports many additional directives for 6738compatibility with the native assembler. This section describes them 6739only briefly. 6740 6741 These are the additional directives in `as' for the Alpha: 6742 6743`.arch CPU' 6744 Specifies the target processor. This is equivalent to the `-mCPU' 6745 command-line option. *Note Options: Alpha Options, for a list of 6746 values for CPU. 6747 6748`.ent FUNCTION[, N]' 6749 Mark the beginning of FUNCTION. An optional number may follow for 6750 compatibility with the OSF/1 assembler, but is ignored. When 6751 generating `.mdebug' information, this will create a procedure 6752 descriptor for the function. In ELF, it will mark the symbol as a 6753 function a-la the generic `.type' directive. 6754 6755`.end FUNCTION' 6756 Mark the end of FUNCTION. In ELF, it will set the size of the 6757 symbol a-la the generic `.size' directive. 6758 6759`.mask MASK, OFFSET' 6760 Indicate which of the integer registers are saved in the current 6761 function's stack frame. MASK is interpreted a bit mask in which 6762 bit N set indicates that register N is saved. The registers are 6763 saved in a block located OFFSET bytes from the "canonical frame 6764 address" (CFA) which is the value of the stack pointer on entry to 6765 the function. The registers are saved sequentially, except that 6766 the return address register (normally `$26') is saved first. 6767 6768 This and the other directives that describe the stack frame are 6769 currently only used when generating `.mdebug' information. They 6770 may in the future be used to generate DWARF2 `.debug_frame' unwind 6771 information for hand written assembly. 6772 6773`.fmask MASK, OFFSET' 6774 Indicate which of the floating-point registers are saved in the 6775 current stack frame. The MASK and OFFSET parameters are 6776 interpreted as with `.mask'. 6777 6778`.frame FRAMEREG, FRAMEOFFSET, RETREG[, ARGOFFSET]' 6779 Describes the shape of the stack frame. The frame pointer in use 6780 is FRAMEREG; normally this is either `$fp' or `$sp'. The frame 6781 pointer is FRAMEOFFSET bytes below the CFA. The return address is 6782 initially located in RETREG until it is saved as indicated in 6783 `.mask'. For compatibility with OSF/1 an optional ARGOFFSET 6784 parameter is accepted and ignored. It is believed to indicate the 6785 offset from the CFA to the saved argument registers. 6786 6787`.prologue N' 6788 Indicate that the stack frame is set up and all registers have been 6789 spilled. The argument N indicates whether and how the function 6790 uses the incoming "procedure vector" (the address of the called 6791 function) in `$27'. 0 indicates that `$27' is not used; 1 6792 indicates that the first two instructions of the function use `$27' 6793 to perform a load of the GP register; 2 indicates that `$27' is 6794 used in some non-standard way and so the linker cannot elide the 6795 load of the procedure vector during relaxation. 6796 6797`.usepv FUNCTION, WHICH' 6798 Used to indicate the use of the `$27' register, similar to 6799 `.prologue', but without the other semantics of needing to be 6800 inside an open `.ent'/`.end' block. 6801 6802 The WHICH argument should be either `no', indicating that `$27' is 6803 not used, or `std', indicating that the first two instructions of 6804 the function perform a GP load. 6805 6806 One might use this directive instead of `.prologue' if you are 6807 also using dwarf2 CFI directives. 6808 6809`.gprel32 EXPRESSION' 6810 Computes the difference between the address in EXPRESSION and the 6811 GP for the current object file, and stores it in 4 bytes. In 6812 addition to being smaller than a full 8 byte address, this also 6813 does not require a dynamic relocation when used in a shared 6814 library. 6815 6816`.t_floating EXPRESSION' 6817 Stores EXPRESSION as an IEEE double precision value. 6818 6819`.s_floating EXPRESSION' 6820 Stores EXPRESSION as an IEEE single precision value. 6821 6822`.f_floating EXPRESSION' 6823 Stores EXPRESSION as a VAX F format value. 6824 6825`.g_floating EXPRESSION' 6826 Stores EXPRESSION as a VAX G format value. 6827 6828`.d_floating EXPRESSION' 6829 Stores EXPRESSION as a VAX D format value. 6830 6831`.set FEATURE' 6832 Enables or disables various assembler features. Using the positive 6833 name of the feature enables while using `noFEATURE' disables. 6834 6835 `at' 6836 Indicates that macro expansions may clobber the "assembler 6837 temporary" (`$at' or `$28') register. Some macros may not be 6838 expanded without this and will generate an error message if 6839 `noat' is in effect. When `at' is in effect, a warning will 6840 be generated if `$at' is used by the programmer. 6841 6842 `macro' 6843 Enables the expansion of macro instructions. Note that 6844 variants of real instructions, such as `br label' vs `br 6845 $31,label' are considered alternate forms and not macros. 6846 6847 `move' 6848 `reorder' 6849 `volatile' 6850 These control whether and how the assembler may re-order 6851 instructions. Accepted for compatibility with the OSF/1 6852 assembler, but `as' does not do instruction scheduling, so 6853 these features are ignored. 6854 6855 The following directives are recognized for compatibility with the 6856OSF/1 assembler but are ignored. 6857 6858 .proc .aproc 6859 .reguse .livereg 6860 .option .aent 6861 .ugen .eflag 6862 .alias .noalias 6863 6864 6865File: as.info, Node: Alpha Opcodes, Prev: Alpha Directives, Up: Alpha-Dependent 6866 68679.2.6 Opcodes 6868------------- 6869 6870For detailed information on the Alpha machine instruction set, see the 6871Alpha Architecture Handbook 6872(ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf). 6873 6874 6875File: as.info, Node: ARC-Dependent, Next: ARM-Dependent, Prev: Alpha-Dependent, Up: Machine Dependencies 6876 68779.3 ARC Dependent Features 6878========================== 6879 6880* Menu: 6881 6882* ARC Options:: Options 6883* ARC Syntax:: Syntax 6884* ARC Directives:: ARC Machine Directives 6885* ARC Modifiers:: ARC Assembler Modifiers 6886* ARC Symbols:: ARC Pre-defined Symbols 6887* ARC Opcodes:: Opcodes 6888 6889 6890File: as.info, Node: ARC Options, Next: ARC Syntax, Up: ARC-Dependent 6891 68929.3.1 Options 6893------------- 6894 6895The following options control the type of CPU for which code is 6896assembled, and generic constraints on the code generated: 6897 6898`-mcpu=CPU' 6899 Set architecture type and register usage for CPU. There are also 6900 shortcut alias options available for backward compatibility and 6901 convenience. Supported values for CPU are 6902 6903 `arc600' 6904 Assemble for ARC 600. Aliases: `-mA6', `-mARC600'. 6905 6906 `arc601' 6907 Assemble for ARC 601. Alias: `-mARC601'. 6908 6909 `arc700' 6910 Assemble for ARC 700. Aliases: `-mA7', `-mARC700'. 6911 6912 `arcem' 6913 Assemble for ARC EM. Aliases: `-mEM' 6914 6915 `archs' 6916 Assemble for ARC HS. Aliases: `-mHS', `-mav2hs'. 6917 6918 `nps400' 6919 Assemble for ARC 700 with NPS-400 extended instructions. 6920 6921 6922 Note: the `.cpu' directive (*note ARC Directives::) can to be used 6923 to select a core variant from within assembly code. 6924 6925`-EB' 6926 This option specifies that the output generated by the assembler 6927 should be marked as being encoded for a big-endian processor. 6928 6929`-EL' 6930 This option specifies that the output generated by the assembler 6931 should be marked as being encoded for a little-endian processor - 6932 this is the default. 6933 6934`-mcode-density' 6935 This option turns on Code Density instructions. Only valid for 6936 ARC EM processors. 6937 6938`-mrelax' 6939 Enable support for assembly-time relaxation. The assembler will 6940 replace a longer version of an instruction with a shorter one, 6941 whenever it is possible. 6942 6943`-mnps400' 6944 Enable support for NPS-400 extended instructions. 6945 6946`-mspfp' 6947 Enable support for single-precision floating point instructions. 6948 6949`-mdpfp' 6950 Enable support for double-precision floating point instructions. 6951 6952`-mfpuda' 6953 Enable support for double-precision assist floating point 6954 instructions. Only valid for ARC EM processors. 6955 6956 6957 6958File: as.info, Node: ARC Syntax, Next: ARC Directives, Prev: ARC Options, Up: ARC-Dependent 6959 69609.3.2 Syntax 6961------------ 6962 6963* Menu: 6964 6965* ARC-Chars:: Special Characters 6966* ARC-Regs:: Register Names 6967 6968 6969File: as.info, Node: ARC-Chars, Next: ARC-Regs, Up: ARC Syntax 6970 69719.3.2.1 Special Characters 6972.......................... 6973 6974`%' 6975 A register name can optionally be prefixed by a `%' character. So 6976 register `%r0' is equivalent to `r0' in the assembly code. 6977 6978`#' 6979 The presence of a `#' character within a line (but not at the 6980 start of a line) indicates the start of a comment that extends to 6981 the end of the current line. 6982 6983 _Note:_ if a line starts with a `#' character then it can also be 6984 a logical line number directive (*note Comments::) or a 6985 preprocessor control command (*note Preprocessing::). 6986 6987`@' 6988 Prefixing an operand with an `@' specifies that the operand is a 6989 symbol and not a register. This is how the assembler disambiguates 6990 the use of an ARC register name as a symbol. So the instruction 6991 mov r0, @r0 6992 moves the address of symbol `r0' into register `r0'. 6993 6994``' 6995 The ``' (backtick) character is used to separate statements on a 6996 single line. 6997 6998`-' 6999 Used as a separator to obtain a sequence of commands from a C 7000 preprocessor macro. 7001 7002 7003 7004File: as.info, Node: ARC-Regs, Prev: ARC-Chars, Up: ARC Syntax 7005 70069.3.2.2 Register Names 7007...................... 7008 7009The ARC assembler uses the following register names for its core 7010registers: 7011 7012`r0-r31' 7013 The core general registers. Registers `r26' through `r31' have 7014 special functions, and are usually referred to by those synonyms. 7015 7016`gp' 7017 The global pointer and a synonym for `r26'. 7018 7019`fp' 7020 The frame pointer and a synonym for `r27'. 7021 7022`sp' 7023 The stack pointer and a synonym for `r28'. 7024 7025`ilink1' 7026 For ARC 600 and ARC 700, the level 1 interrupt link register and a 7027 synonym for `r29'. Not supported for ARCv2. 7028 7029`ilink' 7030 For ARCv2, the interrupt link register and a synonym for `r29'. 7031 Not supported for ARC 600 and ARC 700. 7032 7033`ilink2' 7034 For ARC 600 and ARC 700, the level 2 interrupt link register and a 7035 synonym for `r30'. Not supported for ARC v2. 7036 7037`blink' 7038 The link register and a synonym for `r31'. 7039 7040`r32-r59' 7041 The extension core registers. 7042 7043`lp_count' 7044 The loop count register. 7045 7046`pcl' 7047 The word aligned program counter. 7048 7049 7050 In addition the ARC processor has a large number of _auxiliary 7051registers_. The precise set depends on the extensions being supported, 7052but the following baseline set are always defined: 7053 7054`identity' 7055 Processor Identification register. Auxiliary register address 0x4. 7056 7057`pc' 7058 Program Counter. Auxiliary register address 0x6. 7059 7060`status32' 7061 Status register. Auxiliary register address 0x0a. 7062 7063`bta' 7064 Branch Target Address. Auxiliary register address 0x412. 7065 7066`ecr' 7067 Exception Cause Register. Auxiliary register address 0x403. 7068 7069`int_vector_base' 7070 Interrupt Vector Base address. Auxiliary register address 0x25. 7071 7072`status32_p0' 7073 Stored STATUS32 register on entry to level P0 interrupts. 7074 Auxiliary register address 0xb. 7075 7076`aux_user_sp' 7077 Saved User Stack Pointer. Auxiliary register address 0xd. 7078 7079`eret' 7080 Exception Return Address. Auxiliary register address 0x400. 7081 7082`erbta' 7083 BTA saved on exception entry. Auxiliary register address 0x401. 7084 7085`erstatus' 7086 STATUS32 saved on exception. Auxiliary register address 0x402. 7087 7088`bcr_ver' 7089 Build Configuration Registers Version. Auxiliary register address 7090 0x60. 7091 7092`bta_link_build' 7093 Build configuration for: BTA Registers. Auxiliary register 7094 address 0x63. 7095 7096`vecbase_ac_build' 7097 Build configuration for: Interrupts. Auxiliary register address 7098 0x68. 7099 7100`rf_build' 7101 Build configuration for: Core Registers. Auxiliary register 7102 address 0x6e. 7103 7104`dccm_build' 7105 DCCM RAM Configuration Register. Auxiliary register address 0xc1. 7106 7107 7108 Additional auxiliary register names are defined according to the 7109processor architecture version and extensions selected by the options. 7110 7111 7112File: as.info, Node: ARC Directives, Next: ARC Modifiers, Prev: ARC Syntax, Up: ARC-Dependent 7113 71149.3.3 ARC Machine Directives 7115---------------------------- 7116 7117The ARC version of `as' supports the following additional machine 7118directives: 7119 7120`.lcomm SYMBOL, LENGTH[, ALIGNMENT]' 7121 Reserve LENGTH (an absolute expression) bytes for a local common 7122 denoted by SYMBOL. The section and value of SYMBOL are those of 7123 the new local common. The addresses are allocated in the bss 7124 section, so that at run-time the bytes start off zeroed. Since 7125 SYMBOL is not declared global, it is normally not visible to `ld'. 7126 The optional third parameter, ALIGNMENT, specifies the desired 7127 alignment of the symbol in the bss section, specified as a byte 7128 boundary (for example, an alignment of 16 means that the least 7129 significant 4 bits of the address should be zero). The alignment 7130 must be an absolute expression, and it must be a power of two. If 7131 no alignment is specified, as will set the alignment to the 7132 largest power of two less than or equal to the size of the symbol, 7133 up to a maximum of 16. 7134 7135`.lcommon SYMBOL, LENGTH[, ALIGNMENT]' 7136 The same as `lcomm' directive. 7137 7138`.cpu CPU' 7139 The `.cpu' directive must be followed by the desired core version. 7140 Permitted values for CPU are: 7141 `ARC600' 7142 Assemble for the ARC600 instruction set. 7143 7144 `ARC700' 7145 Assemble for the ARC700 instruction set. 7146 7147 `NPS400' 7148 Assemble for the NPS400 instruction set. 7149 7150 `EM' 7151 Assemble for the ARC EM instruction set. 7152 7153 `HS' 7154 Assemble for the ARC HS instruction set. 7155 7156 7157 Note: the `.cpu' directive overrides the command line option 7158 `-mcpu=CPU'; a warning is emitted when the version is not 7159 consistent between the two. 7160 7161`.extAuxRegister NAME, ADDR, MODE' 7162 Auxiliary registers can be defined in the assembler source code by 7163 using this directive. The first parameter, NAME, is the name of 7164 the new auxiliary register. The second parameter, ADDR, is 7165 address the of the auxiliary register. The third parameter, MODE, 7166 specifies whether the register is readable and/or writable and is 7167 one of: 7168 `r' 7169 Read only; 7170 7171 `w' 7172 Write only; 7173 7174 `r|w' 7175 Read and write. 7176 7177 7178 For example: 7179 .extAuxRegister mulhi, 0x12, w 7180 specifies a write only extension auxiliary register, MULHI at 7181 address 0x12. 7182 7183`.extCondCode SUFFIX, VAL' 7184 ARC supports extensible condition codes. This directive defines a 7185 new condition code, to be known by the suffix, SUFFIX and will 7186 depend on the value, VAL in the condition code. 7187 7188 For example: 7189 .extCondCode is_busy,0x14 7190 add.is_busy r1,r2,r3 7191 will only execute the `add' instruction if the condition code 7192 value is 0x14. 7193 7194`.extCoreRegister NAME, REGNUM, MODE, SHORTCUT' 7195 Specifies an extension core register named NAME as a synonym for 7196 the register numbered REGNUM. The register number must be between 7197 32 and 59. The third argument, MODE, indicates whether the 7198 register is readable and/or writable and is one of: 7199 `r' 7200 Read only; 7201 7202 `w' 7203 Write only; 7204 7205 `r|w' 7206 Read and write. 7207 7208 7209 The final parameter, SHORTCUT indicates whether the register has a 7210 short cut in the pipeline. The valid values are: 7211 `can_shortcut' 7212 The register has a short cut in the pipeline; 7213 7214 `cannot_shortcut' 7215 The register does not have a short cut in the pipeline. 7216 7217 For example: 7218 .extCoreRegister mlo, 57, r , can_shortcut 7219 defines a read only extension core register, `mlo', which is 7220 register 57, and can short cut the pipeline. 7221 7222`.extInstruction NAME, OPCODE, SUBOPCODE, SUFFIXCLASS, SYNTAXCLASS' 7223 ARC allows the user to specify extension instructions. These 7224 extension instructions are not macros; the assembler creates 7225 encodings for use of these instructions according to the 7226 specification by the user. 7227 7228 The first argument, NAME, gives the name of the instruction. 7229 7230 The second argument, OPCODE, is the opcode to be used (bits 31:27 7231 in the encoding). 7232 7233 The third argument, SUBOPCODE, is the sub-opcode to be used, but 7234 the correct value also depends on the fifth argument, SYNTAXCLASS 7235 7236 The fourth argument, SUFFIXCLASS, determines the kinds of suffixes 7237 to be allowed. Valid values are: 7238 `SUFFIX_NONE' 7239 No suffixes are permitted; 7240 7241 `SUFFIX_COND' 7242 Conditional suffixes are permitted; 7243 7244 `SUFFIX_FLAG' 7245 Flag setting suffixes are permitted. 7246 7247 `SUFFIX_COND|SUFFIX_FLAG' 7248 Both conditional and flag setting suffices are permitted. 7249 7250 7251 The fifth and final argument, SYNTAXCLASS, determines the syntax 7252 class for the instruction. It can have the following values: 7253 `SYNTAX_2OP' 7254 Two Operand Instruction; 7255 7256 `SYNTAX_3OP' 7257 Three Operand Instruction. 7258 7259 `SYNTAX_1OP' 7260 One Operand Instruction. 7261 7262 `SYNTAX_NOP' 7263 No Operand Instruction. 7264 7265 The syntax class may be followed by `|' and one of the following 7266 modifiers. 7267 `OP1_MUST_BE_IMM' 7268 Modifies syntax class `SYNTAX_3OP', specifying that the first 7269 operand of a three-operand instruction must be an immediate 7270 (i.e., the result is discarded). This is usually used to set 7271 the flags using specific instructions and not retain results. 7272 7273 `OP1_IMM_IMPLIED' 7274 Modifies syntax class `SYNTAX_20P', specifying that there is 7275 an implied immediate destination operand which does not 7276 appear in the syntax. 7277 7278 For example, if the source code contains an instruction like: 7279 inst r1,r2 7280 the first argument is an implied immediate (that is, the 7281 result is discarded). This is the same as though the source 7282 code were: inst 0,r1,r2. 7283 7284 7285 For example, defining a 64-bit multiplier with immediate operands: 7286 .extInstruction mp64, 0x07, 0x2d, SUFFIX_COND|SUFFIX_FLAG, 7287 SYNTAX_3OP|OP1_MUST_BE_IMM 7288 which specifies an extension instruction named `mp64' with 3 7289 operands. It sets the flags and can be used with a condition code, 7290 for which the first operand is an immediate, i.e. equivalent to 7291 discarding the result of the operation. 7292 7293 A two operands instruction variant would be: 7294 .extInstruction mul64, 0x07, 0x2d, SUFFIX_COND, 7295 SYNTAX_2OP|OP1_IMM_IMPLIED 7296 which describes a two operand instruction with an implicit first 7297 immediate operand. The result of this operation would be 7298 discarded. 7299 7300 7301 7302File: as.info, Node: ARC Modifiers, Next: ARC Symbols, Prev: ARC Directives, Up: ARC-Dependent 7303 73049.3.4 ARC Assembler Modifiers 7305----------------------------- 7306 7307The following additional assembler modifiers have been added for 7308position-independent code. These modifiers are available only with the 7309ARC 700 and above processors and generate relocation entries, which are 7310interpreted by the linker as follows: 7311 7312`@pcl(SYMBOL)' 7313 Relative distance of SYMBOL's from the current program counter 7314 location. 7315 7316`@gotpc(SYMBOL)' 7317 Relative distance of SYMBOL's Global Offset Table entry from the 7318 current program counter location. 7319 7320`@gotoff(SYMBOL)' 7321 Distance of SYMBOL from the base of the Global Offset Table. 7322 7323`@plt(SYMBOL)' 7324 Distance of SYMBOL's Procedure Linkage Table entry from the 7325 current program counter. This is valid only with branch and link 7326 instructions and PC-relative calls. 7327 7328`@sda(SYMBOL)' 7329 Relative distance of SYMBOL from the base of the Small Data 7330 Pointer. 7331 7332 7333 7334File: as.info, Node: ARC Symbols, Next: ARC Opcodes, Prev: ARC Modifiers, Up: ARC-Dependent 7335 73369.3.5 ARC Pre-defined Symbols 7337----------------------------- 7338 7339The following assembler symbols will prove useful when developing 7340position-independent code. These symbols are available only with the 7341ARC 700 and above processors. 7342 7343`__GLOBAL_OFFSET_TABLE__' 7344 Symbol referring to the base of the Global Offset Table. 7345 7346`__DYNAMIC__' 7347 An alias for the Global Offset Table 7348 `Base__GLOBAL_OFFSET_TABLE__'. It can be used only with `@gotpc' 7349 modifiers. 7350 7351 7352 7353File: as.info, Node: ARC Opcodes, Prev: ARC Symbols, Up: ARC-Dependent 7354 73559.3.6 Opcodes 7356------------- 7357 7358For information on the ARC instruction set, see `ARC Programmers 7359Reference Manual', available where you download the processor IP 7360library. 7361 7362 7363File: as.info, Node: ARM-Dependent, Next: AVR-Dependent, Prev: ARC-Dependent, Up: Machine Dependencies 7364 73659.4 ARM Dependent Features 7366========================== 7367 7368* Menu: 7369 7370* ARM Options:: Options 7371* ARM Syntax:: Syntax 7372* ARM Floating Point:: Floating Point 7373* ARM Directives:: ARM Machine Directives 7374* ARM Opcodes:: Opcodes 7375* ARM Mapping Symbols:: Mapping Symbols 7376* ARM Unwinding Tutorial:: Unwinding 7377 7378 7379File: as.info, Node: ARM Options, Next: ARM Syntax, Up: ARM-Dependent 7380 73819.4.1 Options 7382------------- 7383 7384`-mcpu=PROCESSOR[+EXTENSION...]' 7385 This option specifies the target processor. The assembler will 7386 issue an error message if an attempt is made to assemble an 7387 instruction which will not execute on the target processor. The 7388 following processor names are recognized: `arm1', `arm2', `arm250', 7389 `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', 7390 `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', 7391 `arm700i', `arm710', `arm710t', `arm720', `arm720t', `arm740t', 7392 `arm710c', `arm7100', `arm7500', `arm7500fe', `arm7t', `arm7tdmi', 7393 `arm7tdmi-s', `arm8', `arm810', `strongarm', `strongarm1', 7394 `strongarm110', `strongarm1100', `strongarm1110', `arm9', `arm920', 7395 `arm920t', `arm922t', `arm940t', `arm9tdmi', `fa526' (Faraday 7396 FA526 processor), `fa626' (Faraday FA626 processor), `arm9e', 7397 `arm926e', `arm926ej-s', `arm946e-r0', `arm946e', `arm946e-s', 7398 `arm966e-r0', `arm966e', `arm966e-s', `arm968e-s', `arm10t', 7399 `arm10tdmi', `arm10e', `arm1020', `arm1020t', `arm1020e', 7400 `arm1022e', `arm1026ej-s', `fa606te' (Faraday FA606TE processor), 7401 `fa616te' (Faraday FA616TE processor), `fa626te' (Faraday FA626TE 7402 processor), `fmp626' (Faraday FMP626 processor), `fa726te' 7403 (Faraday FA726TE processor), `arm1136j-s', `arm1136jf-s', 7404 `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s', 7405 `mpcore', `mpcorenovfp', `cortex-a5', `cortex-a7', `cortex-a8', 7406 `cortex-a9', `cortex-a15', `cortex-a17', `cortex-a32', 7407 `cortex-a35', `cortex-a53', `cortex-a57', `cortex-a72', 7408 `cortex-a73', `cortex-r4', `cortex-r4f', `cortex-r5', `cortex-r7', 7409 `cortex-r8', `cortex-m7', `cortex-m4', `cortex-m3', `cortex-m1', 7410 `cortex-m0', `cortex-m0plus', `exynos-m1', `marvell-pj4', 7411 `marvell-whitney', `qdf24xx', `xgene1', `xgene2', `ep9312' (ARM920 7412 with Cirrus Maverick coprocessor), `i80200' (Intel XScale 7413 processor) `iwmmxt' (Intel(r) XScale processor with Wireless 7414 MMX(tm) technology coprocessor) and `xscale'. The special name 7415 `all' may be used to allow the assembler to accept instructions 7416 valid for any ARM processor. 7417 7418 In addition to the basic instruction set, the assembler can be 7419 told to accept various extension mnemonics that extend the 7420 processor using the co-processor instruction space. For example, 7421 `-mcpu=arm920+maverick' is equivalent to specifying `-mcpu=ep9312'. 7422 7423 Multiple extensions may be specified, separated by a `+'. The 7424 extensions should be specified in ascending alphabetical order. 7425 7426 Some extensions may be restricted to particular architectures; 7427 this is documented in the list of extensions below. 7428 7429 Extension mnemonics may also be removed from those the assembler 7430 accepts. This is done be prepending `no' to the option that adds 7431 the extension. Extensions that are removed should be listed after 7432 all extensions which have been added, again in ascending 7433 alphabetical order. For example, `-mcpu=ep9312+nomaverick' is 7434 equivalent to specifying `-mcpu=arm920'. 7435 7436 The following extensions are currently supported: `crc' `crypto' 7437 (Cryptography Extensions for v8-A architecture, implies `fp+simd'), 7438 `fp' (Floating Point Extensions for v8-A architecture), `idiv' 7439 (Integer Divide Extensions for v7-A and v7-R architectures), 7440 `iwmmxt', `iwmmxt2', `xscale', `maverick', `mp' (Multiprocessing 7441 Extensions for v7-A and v7-R architectures), `os' (Operating 7442 System for v6M architecture), `sec' (Security Extensions for v6K 7443 and v7-A architectures), `simd' (Advanced SIMD Extensions for v8-A 7444 architecture, implies `fp'), `virt' (Virtualization Extensions for 7445 v7-A architecture, implies `idiv'), `pan' (Priviliged Access Never 7446 Extensions for v8-A architecture), `ras' (Reliability, 7447 Availability and Serviceability extensions for v8-A architecture), 7448 `rdma' (ARMv8.1 Advanced SIMD extensions for v8-A architecture, 7449 implies `simd') and `xscale'. 7450 7451`-march=ARCHITECTURE[+EXTENSION...]' 7452 This option specifies the target architecture. The assembler will 7453 issue an error message if an attempt is made to assemble an 7454 instruction which will not execute on the target architecture. 7455 The following architecture names are recognized: `armv1', `armv2', 7456 `armv2a', `armv2s', `armv3', `armv3m', `armv4', `armv4xm', 7457 `armv4t', `armv4txm', `armv5', `armv5t', `armv5txm', `armv5te', 7458 `armv5texp', `armv6', `armv6j', `armv6k', `armv6z', `armv6kz', 7459 `armv6-m', `armv6s-m', `armv7', `armv7-a', `armv7ve', `armv7-r', 7460 `armv7-m', `armv7e-m', `armv8-a', `armv8.1-a', `armv8.2-a', 7461 `iwmmxt' `iwmmxt2' and `xscale'. If both `-mcpu' and `-march' are 7462 specified, the assembler will use the setting for `-mcpu'. 7463 7464 The architecture option can be extended with the same instruction 7465 set extension options as the `-mcpu' option. 7466 7467`-mfpu=FLOATING-POINT-FORMAT' 7468 This option specifies the floating point format to assemble for. 7469 The assembler will issue an error message if an attempt is made to 7470 assemble an instruction which will not execute on the target 7471 floating point unit. The following format options are recognized: 7472 `softfpa', `fpe', `fpe2', `fpe3', `fpa', `fpa10', `fpa11', 7473 `arm7500fe', `softvfp', `softvfp+vfp', `vfp', `vfp10', `vfp10-r0', 7474 `vfp9', `vfpxd', `vfpv2', `vfpv3', `vfpv3-fp16', `vfpv3-d16', 7475 `vfpv3-d16-fp16', `vfpv3xd', `vfpv3xd-d16', `vfpv4', `vfpv4-d16', 7476 `fpv4-sp-d16', `fpv5-sp-d16', `fpv5-d16', `fp-armv8', `arm1020t', 7477 `arm1020e', `arm1136jf-s', `maverick', `neon', `neon-vfpv4', 7478 `neon-fp-armv8', `crypto-neon-fp-armv8', `neon-fp-armv8.1' and 7479 `crypto-neon-fp-armv8.1'. 7480 7481 In addition to determining which instructions are assembled, this 7482 option also affects the way in which the `.double' assembler 7483 directive behaves when assembling little-endian code. 7484 7485 The default is dependent on the processor selected. For 7486 Architecture 5 or later, the default is to assembler for VFP 7487 instructions; for earlier architectures the default is to assemble 7488 for FPA instructions. 7489 7490`-mthumb' 7491 This option specifies that the assembler should start assembling 7492 Thumb instructions; that is, it should behave as though the file 7493 starts with a `.code 16' directive. 7494 7495`-mthumb-interwork' 7496 This option specifies that the output generated by the assembler 7497 should be marked as supporting interworking. 7498 7499`-mimplicit-it=never' 7500`-mimplicit-it=always' 7501`-mimplicit-it=arm' 7502`-mimplicit-it=thumb' 7503 The `-mimplicit-it' option controls the behavior of the assembler 7504 when conditional instructions are not enclosed in IT blocks. 7505 There are four possible behaviors. If `never' is specified, such 7506 constructs cause a warning in ARM code and an error in Thumb-2 7507 code. If `always' is specified, such constructs are accepted in 7508 both ARM and Thumb-2 code, where the IT instruction is added 7509 implicitly. If `arm' is specified, such constructs are accepted 7510 in ARM code and cause an error in Thumb-2 code. If `thumb' is 7511 specified, such constructs cause a warning in ARM code and are 7512 accepted in Thumb-2 code. If you omit this option, the behavior 7513 is equivalent to `-mimplicit-it=arm'. 7514 7515`-mapcs-26' 7516`-mapcs-32' 7517 These options specify that the output generated by the assembler 7518 should be marked as supporting the indicated version of the Arm 7519 Procedure. Calling Standard. 7520 7521`-matpcs' 7522 This option specifies that the output generated by the assembler 7523 should be marked as supporting the Arm/Thumb Procedure Calling 7524 Standard. If enabled this option will cause the assembler to 7525 create an empty debugging section in the object file called 7526 .arm.atpcs. Debuggers can use this to determine the ABI being 7527 used by. 7528 7529`-mapcs-float' 7530 This indicates the floating point variant of the APCS should be 7531 used. In this variant floating point arguments are passed in FP 7532 registers rather than integer registers. 7533 7534`-mapcs-reentrant' 7535 This indicates that the reentrant variant of the APCS should be 7536 used. This variant supports position independent code. 7537 7538`-mfloat-abi=ABI' 7539 This option specifies that the output generated by the assembler 7540 should be marked as using specified floating point ABI. The 7541 following values are recognized: `soft', `softfp' and `hard'. 7542 7543`-meabi=VER' 7544 This option specifies which EABI version the produced object files 7545 should conform to. The following values are recognized: `gnu', `4' 7546 and `5'. 7547 7548`-EB' 7549 This option specifies that the output generated by the assembler 7550 should be marked as being encoded for a big-endian processor. 7551 7552 Note: If a program is being built for a system with big-endian data 7553 and little-endian instructions then it should be assembled with the 7554 `-EB' option, (all of it, code and data) and then linked with the 7555 `--be8' option. This will reverse the endianness of the 7556 instructions back to little-endian, but leave the data as 7557 big-endian. 7558 7559`-EL' 7560 This option specifies that the output generated by the assembler 7561 should be marked as being encoded for a little-endian processor. 7562 7563`-k' 7564 This option specifies that the output of the assembler should be 7565 marked as position-independent code (PIC). 7566 7567`--fix-v4bx' 7568 Allow `BX' instructions in ARMv4 code. This is intended for use 7569 with the linker option of the same name. 7570 7571`-mwarn-deprecated' 7572`-mno-warn-deprecated' 7573 Enable or disable warnings about using deprecated options or 7574 features. The default is to warn. 7575 7576`-mccs' 7577 Turns on CodeComposer Studio assembly syntax compatibility mode. 7578 7579`-mwarn-syms' 7580`-mno-warn-syms' 7581 Enable or disable warnings about symbols that match the names of 7582 ARM instructions. The default is to warn. 7583 7584 7585 7586File: as.info, Node: ARM Syntax, Next: ARM Floating Point, Prev: ARM Options, Up: ARM-Dependent 7587 75889.4.2 Syntax 7589------------ 7590 7591* Menu: 7592 7593* ARM-Instruction-Set:: Instruction Set 7594* ARM-Chars:: Special Characters 7595* ARM-Regs:: Register Names 7596* ARM-Relocations:: Relocations 7597* ARM-Neon-Alignment:: NEON Alignment Specifiers 7598 7599 7600File: as.info, Node: ARM-Instruction-Set, Next: ARM-Chars, Up: ARM Syntax 7601 76029.4.2.1 Instruction Set Syntax 7603.............................. 7604 7605Two slightly different syntaxes are support for ARM and THUMB 7606instructions. The default, `divided', uses the old style where ARM and 7607THUMB instructions had their own, separate syntaxes. The new, 7608`unified' syntax, which can be selected via the `.syntax' directive, 7609and has the following main features: 7610 7611 * Immediate operands do not require a `#' prefix. 7612 7613 * The `IT' instruction may appear, and if it does it is validated 7614 against subsequent conditional affixes. In ARM mode it does not 7615 generate machine code, in THUMB mode it does. 7616 7617 * For ARM instructions the conditional affixes always appear at the 7618 end of the instruction. For THUMB instructions conditional 7619 affixes can be used, but only inside the scope of an `IT' 7620 instruction. 7621 7622 * All of the instructions new to the V6T2 architecture (and later) 7623 are available. (Only a few such instructions can be written in the 7624 `divided' syntax). 7625 7626 * The `.N' and `.W' suffixes are recognized and honored. 7627 7628 * All instructions set the flags if and only if they have an `s' 7629 affix. 7630 7631 7632File: as.info, Node: ARM-Chars, Next: ARM-Regs, Prev: ARM-Instruction-Set, Up: ARM Syntax 7633 76349.4.2.2 Special Characters 7635.......................... 7636 7637The presence of a `@' anywhere on a line indicates the start of a 7638comment that extends to the end of that line. 7639 7640 If a `#' appears as the first character of a line then the whole 7641line is treated as a comment, but in this case the line could also be a 7642logical line number directive (*note Comments::) or a preprocessor 7643control command (*note Preprocessing::). 7644 7645 The `;' character can be used instead of a newline to separate 7646statements. 7647 7648 Either `#' or `$' can be used to indicate immediate operands. 7649 7650 *TODO* Explain about /data modifier on symbols. 7651 7652 7653File: as.info, Node: ARM-Regs, Next: ARM-Relocations, Prev: ARM-Chars, Up: ARM Syntax 7654 76559.4.2.3 Register Names 7656...................... 7657 7658*TODO* Explain about ARM register naming, and the predefined names. 7659 7660 7661File: as.info, Node: ARM-Relocations, Next: ARM-Neon-Alignment, Prev: ARM-Regs, Up: ARM Syntax 7662 76639.4.2.4 ARM relocation generation 7664................................. 7665 7666Specific data relocations can be generated by putting the relocation 7667name in parentheses after the symbol name. For example: 7668 7669 .word foo(TARGET1) 7670 7671 This will generate an `R_ARM_TARGET1' relocation against the symbol 7672FOO. The following relocations are supported: `GOT', `GOTOFF', 7673`TARGET1', `TARGET2', `SBREL', `TLSGD', `TLSLDM', `TLSLDO', `TLSDESC', 7674`TLSCALL', `GOTTPOFF', `GOT_PREL' and `TPOFF'. 7675 7676 For compatibility with older toolchains the assembler also accepts 7677`(PLT)' after branch targets. On legacy targets this will generate the 7678deprecated `R_ARM_PLT32' relocation. On EABI targets it will encode 7679either the `R_ARM_CALL' or `R_ARM_JUMP24' relocation, as appropriate. 7680 7681 Relocations for `MOVW' and `MOVT' instructions can be generated by 7682prefixing the value with `#:lower16:' and `#:upper16' respectively. 7683For example to load the 32-bit address of foo into r0: 7684 7685 MOVW r0, #:lower16:foo 7686 MOVT r0, #:upper16:foo 7687 7688 Relocations `R_ARM_THM_ALU_ABS_G0_NC', `R_ARM_THM_ALU_ABS_G1_NC', 7689`R_ARM_THM_ALU_ABS_G2_NC' and `R_ARM_THM_ALU_ABS_G3_NC' can be 7690generated by prefixing the value with `#:lower0_7:#', `#:lower8_15:#', 7691`#:upper0_7:#' and `#:upper8_15:#' respectively. For example to load 7692the 32-bit address of foo into r0: 7693 7694 MOVS r0, #:upper8_15:#foo 7695 LSLS r0, r0, #8 7696 ADDS r0, #:upper0_7:#foo 7697 LSLS r0, r0, #8 7698 ADDS r0, #:lower8_15:#foo 7699 LSLS r0, r0, #8 7700 ADDS r0, #:lower0_7:#foo 7701 7702 7703File: as.info, Node: ARM-Neon-Alignment, Prev: ARM-Relocations, Up: ARM Syntax 7704 77059.4.2.5 NEON Alignment Specifiers 7706................................. 7707 7708Some NEON load/store instructions allow an optional address alignment 7709qualifier. The ARM documentation specifies that this is indicated by 7710`@ ALIGN'. However GAS already interprets the `@' character as a "line 7711comment" start, so `: ALIGN' is used instead. For example: 7712 7713 vld1.8 {q0}, [r0, :128] 7714 7715 7716File: as.info, Node: ARM Floating Point, Next: ARM Directives, Prev: ARM Syntax, Up: ARM-Dependent 7717 77189.4.3 Floating Point 7719-------------------- 7720 7721The ARM family uses IEEE floating-point numbers. 7722 7723 7724File: as.info, Node: ARM Directives, Next: ARM Opcodes, Prev: ARM Floating Point, Up: ARM-Dependent 7725 77269.4.4 ARM Machine Directives 7727---------------------------- 7728 7729`.2byte EXPRESSION [, EXPRESSION]*' 7730`.4byte EXPRESSION [, EXPRESSION]*' 7731`.8byte EXPRESSION [, EXPRESSION]*' 7732 These directives write 2, 4 or 8 byte values to the output section. 7733 7734`.align EXPRESSION [, EXPRESSION]' 7735 This is the generic .ALIGN directive. For the ARM however if the 7736 first argument is zero (ie no alignment is needed) the assembler 7737 will behave as if the argument had been 2 (ie pad to the next four 7738 byte boundary). This is for compatibility with ARM's own 7739 assembler. 7740 7741`.arch NAME' 7742 Select the target architecture. Valid values for NAME are the 7743 same as for the `-march' commandline option. 7744 7745 Specifying `.arch' clears any previously selected architecture 7746 extensions. 7747 7748`.arch_extension NAME' 7749 Add or remove an architecture extension to the target 7750 architecture. Valid values for NAME are the same as those 7751 accepted as architectural extensions by the `-mcpu' commandline 7752 option. 7753 7754 `.arch_extension' may be used multiple times to add or remove 7755 extensions incrementally to the architecture being compiled for. 7756 7757`.arm' 7758 This performs the same action as .CODE 32. 7759 7760`.bss' 7761 This directive switches to the `.bss' section. 7762 7763`.cantunwind' 7764 Prevents unwinding through the current function. No personality 7765 routine or exception table data is required or permitted. 7766 7767`.code `[16|32]'' 7768 This directive selects the instruction set being generated. The 7769 value 16 selects Thumb, with the value 32 selecting ARM. 7770 7771`.cpu NAME' 7772 Select the target processor. Valid values for NAME are the same as 7773 for the `-mcpu' commandline option. 7774 7775 Specifying `.cpu' clears any previously selected architecture 7776 extensions. 7777 7778`NAME .dn REGISTER NAME [.TYPE] [[INDEX]]' 7779`NAME .qn REGISTER NAME [.TYPE] [[INDEX]]' 7780 The `dn' and `qn' directives are used to create typed and/or 7781 indexed register aliases for use in Advanced SIMD Extension (Neon) 7782 instructions. The former should be used to create aliases of 7783 double-precision registers, and the latter to create aliases of 7784 quad-precision registers. 7785 7786 If these directives are used to create typed aliases, those 7787 aliases can be used in Neon instructions instead of writing types 7788 after the mnemonic or after each operand. For example: 7789 7790 x .dn d2.f32 7791 y .dn d3.f32 7792 z .dn d4.f32[1] 7793 vmul x,y,z 7794 7795 This is equivalent to writing the following: 7796 7797 vmul.f32 d2,d3,d4[1] 7798 7799 Aliases created using `dn' or `qn' can be destroyed using `unreq'. 7800 7801`.eabi_attribute TAG, VALUE' 7802 Set the EABI object attribute TAG to VALUE. 7803 7804 The TAG is either an attribute number, or one of the following: 7805 `Tag_CPU_raw_name', `Tag_CPU_name', `Tag_CPU_arch', 7806 `Tag_CPU_arch_profile', `Tag_ARM_ISA_use', `Tag_THUMB_ISA_use', 7807 `Tag_FP_arch', `Tag_WMMX_arch', `Tag_Advanced_SIMD_arch', 7808 `Tag_PCS_config', `Tag_ABI_PCS_R9_use', `Tag_ABI_PCS_RW_data', 7809 `Tag_ABI_PCS_RO_data', `Tag_ABI_PCS_GOT_use', 7810 `Tag_ABI_PCS_wchar_t', `Tag_ABI_FP_rounding', 7811 `Tag_ABI_FP_denormal', `Tag_ABI_FP_exceptions', 7812 `Tag_ABI_FP_user_exceptions', `Tag_ABI_FP_number_model', 7813 `Tag_ABI_align_needed', `Tag_ABI_align_preserved', 7814 `Tag_ABI_enum_size', `Tag_ABI_HardFP_use', `Tag_ABI_VFP_args', 7815 `Tag_ABI_WMMX_args', `Tag_ABI_optimization_goals', 7816 `Tag_ABI_FP_optimization_goals', `Tag_compatibility', 7817 `Tag_CPU_unaligned_access', `Tag_FP_HP_extension', 7818 `Tag_ABI_FP_16bit_format', `Tag_MPextension_use', `Tag_DIV_use', 7819 `Tag_nodefaults', `Tag_also_compatible_with', `Tag_conformance', 7820 `Tag_T2EE_use', `Tag_Virtualization_use' 7821 7822 The VALUE is either a `number', `"string"', or `number, "string"' 7823 depending on the tag. 7824 7825 Note - the following legacy values are also accepted by TAG: 7826 `Tag_VFP_arch', `Tag_ABI_align8_needed', 7827 `Tag_ABI_align8_preserved', `Tag_VFP_HP_extension', 7828 7829`.even' 7830 This directive aligns to an even-numbered address. 7831 7832`.extend EXPRESSION [, EXPRESSION]*' 7833`.ldouble EXPRESSION [, EXPRESSION]*' 7834 These directives write 12byte long double floating-point values to 7835 the output section. These are not compatible with current ARM 7836 processors or ABIs. 7837 7838`.fnend' 7839 Marks the end of a function with an unwind table entry. The 7840 unwind index table entry is created when this directive is 7841 processed. 7842 7843 If no personality routine has been specified then standard 7844 personality routine 0 or 1 will be used, depending on the number 7845 of unwind opcodes required. 7846 7847`.fnstart' 7848 Marks the start of a function with an unwind table entry. 7849 7850`.force_thumb' 7851 This directive forces the selection of Thumb instructions, even if 7852 the target processor does not support those instructions 7853 7854`.fpu NAME' 7855 Select the floating-point unit to assemble for. Valid values for 7856 NAME are the same as for the `-mfpu' commandline option. 7857 7858`.handlerdata' 7859 Marks the end of the current function, and the start of the 7860 exception table entry for that function. Anything between this 7861 directive and the `.fnend' directive will be added to the 7862 exception table entry. 7863 7864 Must be preceded by a `.personality' or `.personalityindex' 7865 directive. 7866 7867`.inst OPCODE [ , ... ]' 7868`.inst.n OPCODE [ , ... ]' 7869`.inst.w OPCODE [ , ... ]' 7870 Generates the instruction corresponding to the numerical value 7871 OPCODE. `.inst.n' and `.inst.w' allow the Thumb instruction size 7872 to be specified explicitly, overriding the normal encoding rules. 7873 7874`.ldouble EXPRESSION [, EXPRESSION]*' 7875 See `.extend'. 7876 7877`.ltorg' 7878 This directive causes the current contents of the literal pool to 7879 be dumped into the current section (which is assumed to be the 7880 .text section) at the current location (aligned to a word 7881 boundary). `GAS' maintains a separate literal pool for each 7882 section and each sub-section. The `.ltorg' directive will only 7883 affect the literal pool of the current section and sub-section. 7884 At the end of assembly all remaining, un-empty literal pools will 7885 automatically be dumped. 7886 7887 Note - older versions of `GAS' would dump the current literal pool 7888 any time a section change occurred. This is no longer done, since 7889 it prevents accurate control of the placement of literal pools. 7890 7891`.movsp REG [, #OFFSET]' 7892 Tell the unwinder that REG contains an offset from the current 7893 stack pointer. If OFFSET is not specified then it is assumed to be 7894 zero. 7895 7896`.object_arch NAME' 7897 Override the architecture recorded in the EABI object attribute 7898 section. Valid values for NAME are the same as for the `.arch' 7899 directive. Typically this is useful when code uses runtime 7900 detection of CPU features. 7901 7902`.packed EXPRESSION [, EXPRESSION]*' 7903 This directive writes 12-byte packed floating-point values to the 7904 output section. These are not compatible with current ARM 7905 processors or ABIs. 7906 7907`.pad #COUNT' 7908 Generate unwinder annotations for a stack adjustment of COUNT 7909 bytes. A positive value indicates the function prologue allocated 7910 stack space by decrementing the stack pointer. 7911 7912`.personality NAME' 7913 Sets the personality routine for the current function to NAME. 7914 7915`.personalityindex INDEX' 7916 Sets the personality routine for the current function to the EABI 7917 standard routine number INDEX 7918 7919`.pool' 7920 This is a synonym for .ltorg. 7921 7922`NAME .req REGISTER NAME' 7923 This creates an alias for REGISTER NAME called NAME. For example: 7924 7925 foo .req r0 7926 7927`.save REGLIST' 7928 Generate unwinder annotations to restore the registers in REGLIST. 7929 The format of REGLIST is the same as the corresponding 7930 store-multiple instruction. 7931 7932 _core registers_ 7933 .save {r4, r5, r6, lr} 7934 stmfd sp!, {r4, r5, r6, lr} 7935 _FPA registers_ 7936 .save f4, 2 7937 sfmfd f4, 2, [sp]! 7938 _VFP registers_ 7939 .save {d8, d9, d10} 7940 fstmdx sp!, {d8, d9, d10} 7941 _iWMMXt registers_ 7942 .save {wr10, wr11} 7943 wstrd wr11, [sp, #-8]! 7944 wstrd wr10, [sp, #-8]! 7945 or 7946 .save wr11 7947 wstrd wr11, [sp, #-8]! 7948 .save wr10 7949 wstrd wr10, [sp, #-8]! 7950 7951`.setfp FPREG, SPREG [, #OFFSET]' 7952 Make all unwinder annotations relative to a frame pointer. 7953 Without this the unwinder will use offsets from the stack pointer. 7954 7955 The syntax of this directive is the same as the `add' or `mov' 7956 instruction used to set the frame pointer. SPREG must be either 7957 `sp' or mentioned in a previous `.movsp' directive. 7958 7959 .movsp ip 7960 mov ip, sp 7961 ... 7962 .setfp fp, ip, #4 7963 add fp, ip, #4 7964 7965`.secrel32 EXPRESSION [, EXPRESSION]*' 7966 This directive emits relocations that evaluate to the 7967 section-relative offset of each expression's symbol. This 7968 directive is only supported for PE targets. 7969 7970`.syntax [`unified' | `divided']' 7971 This directive sets the Instruction Set Syntax as described in the 7972 *Note ARM-Instruction-Set:: section. 7973 7974`.thumb' 7975 This performs the same action as .CODE 16. 7976 7977`.thumb_func' 7978 This directive specifies that the following symbol is the name of a 7979 Thumb encoded function. This information is necessary in order to 7980 allow the assembler and linker to generate correct code for 7981 interworking between Arm and Thumb instructions and should be used 7982 even if interworking is not going to be performed. The presence 7983 of this directive also implies `.thumb' 7984 7985 This directive is not neccessary when generating EABI objects. On 7986 these targets the encoding is implicit when generating Thumb code. 7987 7988`.thumb_set' 7989 This performs the equivalent of a `.set' directive in that it 7990 creates a symbol which is an alias for another symbol (possibly 7991 not yet defined). This directive also has the added property in 7992 that it marks the aliased symbol as being a thumb function entry 7993 point, in the same way that the `.thumb_func' directive does. 7994 7995`.tlsdescseq TLS-VARIABLE' 7996 This directive is used to annotate parts of an inlined TLS 7997 descriptor trampoline. Normally the trampoline is provided by the 7998 linker, and this directive is not needed. 7999 8000`.unreq ALIAS-NAME' 8001 This undefines a register alias which was previously defined using 8002 the `req', `dn' or `qn' directives. For example: 8003 8004 foo .req r0 8005 .unreq foo 8006 8007 An error occurs if the name is undefined. Note - this pseudo op 8008 can be used to delete builtin in register name aliases (eg 'r0'). 8009 This should only be done if it is really necessary. 8010 8011`.unwind_raw OFFSET, BYTE1, ...' 8012 Insert one of more arbitary unwind opcode bytes, which are known 8013 to adjust the stack pointer by OFFSET bytes. 8014 8015 For example `.unwind_raw 4, 0xb1, 0x01' is equivalent to `.save 8016 {r0}' 8017 8018`.vsave VFP-REGLIST' 8019 Generate unwinder annotations to restore the VFP registers in 8020 VFP-REGLIST using FLDMD. Also works for VFPv3 registers that are 8021 to be restored using VLDM. The format of VFP-REGLIST is the same 8022 as the corresponding store-multiple instruction. 8023 8024 _VFP registers_ 8025 .vsave {d8, d9, d10} 8026 fstmdd sp!, {d8, d9, d10} 8027 _VFPv3 registers_ 8028 .vsave {d15, d16, d17} 8029 vstm sp!, {d15, d16, d17} 8030 8031 Since FLDMX and FSTMX are now deprecated, this directive should be 8032 used in favour of `.save' for saving VFP registers for ARMv6 and 8033 above. 8034 8035 8036 8037File: as.info, Node: ARM Opcodes, Next: ARM Mapping Symbols, Prev: ARM Directives, Up: ARM-Dependent 8038 80399.4.5 Opcodes 8040------------- 8041 8042`as' implements all the standard ARM opcodes. It also implements 8043several pseudo opcodes, including several synthetic load instructions. 8044 8045`NOP' 8046 nop 8047 8048 This pseudo op will always evaluate to a legal ARM instruction 8049 that does nothing. Currently it will evaluate to MOV r0, r0. 8050 8051`LDR' 8052 ldr <register> , = <expression> 8053 8054 If expression evaluates to a numeric constant then a MOV or MVN 8055 instruction will be used in place of the LDR instruction, if the 8056 constant can be generated by either of these instructions. 8057 Otherwise the constant will be placed into the nearest literal 8058 pool (if it not already there) and a PC relative LDR instruction 8059 will be generated. 8060 8061`ADR' 8062 adr <register> <label> 8063 8064 This instruction will load the address of LABEL into the indicated 8065 register. The instruction will evaluate to a PC relative ADD or 8066 SUB instruction depending upon where the label is located. If the 8067 label is out of range, or if it is not defined in the same file 8068 (and section) as the ADR instruction, then an error will be 8069 generated. This instruction will not make use of the literal pool. 8070 8071`ADRL' 8072 adrl <register> <label> 8073 8074 This instruction will load the address of LABEL into the indicated 8075 register. The instruction will evaluate to one or two PC relative 8076 ADD or SUB instructions depending upon where the label is located. 8077 If a second instruction is not needed a NOP instruction will be 8078 generated in its place, so that this instruction is always 8 bytes 8079 long. 8080 8081 If the label is out of range, or if it is not defined in the same 8082 file (and section) as the ADRL instruction, then an error will be 8083 generated. This instruction will not make use of the literal pool. 8084 8085 8086 For information on the ARM or Thumb instruction sets, see `ARM 8087Software Development Toolkit Reference Manual', Advanced RISC Machines 8088Ltd. 8089 8090 8091File: as.info, Node: ARM Mapping Symbols, Next: ARM Unwinding Tutorial, Prev: ARM Opcodes, Up: ARM-Dependent 8092 80939.4.6 Mapping Symbols 8094--------------------- 8095 8096The ARM ELF specification requires that special symbols be inserted 8097into object files to mark certain features: 8098 8099`$a' 8100 At the start of a region of code containing ARM instructions. 8101 8102`$t' 8103 At the start of a region of code containing THUMB instructions. 8104 8105`$d' 8106 At the start of a region of data. 8107 8108 8109 The assembler will automatically insert these symbols for you - there 8110is no need to code them yourself. Support for tagging symbols ($b, $f, 8111$p and $m) which is also mentioned in the current ARM ELF specification 8112is not implemented. This is because they have been dropped from the 8113new EABI and so tools cannot rely upon their presence. 8114 8115 8116File: as.info, Node: ARM Unwinding Tutorial, Prev: ARM Mapping Symbols, Up: ARM-Dependent 8117 81189.4.7 Unwinding 8119--------------- 8120 8121The ABI for the ARM Architecture specifies a standard format for 8122exception unwind information. This information is used when an 8123exception is thrown to determine where control should be transferred. 8124In particular, the unwind information is used to determine which 8125function called the function that threw the exception, and which 8126function called that one, and so forth. This information is also used 8127to restore the values of callee-saved registers in the function 8128catching the exception. 8129 8130 If you are writing functions in assembly code, and those functions 8131call other functions that throw exceptions, you must use assembly 8132pseudo ops to ensure that appropriate exception unwind information is 8133generated. Otherwise, if one of the functions called by your assembly 8134code throws an exception, the run-time library will be unable to unwind 8135the stack through your assembly code and your program will not behave 8136correctly. 8137 8138 To illustrate the use of these pseudo ops, we will examine the code 8139that G++ generates for the following C++ input: 8140 8141 8142void callee (int *); 8143 8144int 8145caller () 8146{ 8147 int i; 8148 callee (&i); 8149 return i; 8150} 8151 8152 This example does not show how to throw or catch an exception from 8153assembly code. That is a much more complex operation and should always 8154be done in a high-level language, such as C++, that directly supports 8155exceptions. 8156 8157 The code generated by one particular version of G++ when compiling 8158the example above is: 8159 8160 8161_Z6callerv: 8162 .fnstart 8163.LFB2: 8164 @ Function supports interworking. 8165 @ args = 0, pretend = 0, frame = 8 8166 @ frame_needed = 1, uses_anonymous_args = 0 8167 stmfd sp!, {fp, lr} 8168 .save {fp, lr} 8169.LCFI0: 8170 .setfp fp, sp, #4 8171 add fp, sp, #4 8172.LCFI1: 8173 .pad #8 8174 sub sp, sp, #8 8175.LCFI2: 8176 sub r3, fp, #8 8177 mov r0, r3 8178 bl _Z6calleePi 8179 ldr r3, [fp, #-8] 8180 mov r0, r3 8181 sub sp, fp, #4 8182 ldmfd sp!, {fp, lr} 8183 bx lr 8184.LFE2: 8185 .fnend 8186 8187 Of course, the sequence of instructions varies based on the options 8188you pass to GCC and on the version of GCC in use. The exact 8189instructions are not important since we are focusing on the pseudo ops 8190that are used to generate unwind information. 8191 8192 An important assumption made by the unwinder is that the stack frame 8193does not change during the body of the function. In particular, since 8194we assume that the assembly code does not itself throw an exception, 8195the only point where an exception can be thrown is from a call, such as 8196the `bl' instruction above. At each call site, the same saved 8197registers (including `lr', which indicates the return address) must be 8198located in the same locations relative to the frame pointer. 8199 8200 The `.fnstart' (*note .fnstart pseudo op: arm_fnstart.) pseudo op 8201appears immediately before the first instruction of the function while 8202the `.fnend' (*note .fnend pseudo op: arm_fnend.) pseudo op appears 8203immediately after the last instruction of the function. These pseudo 8204ops specify the range of the function. 8205 8206 Only the order of the other pseudos ops (e.g., `.setfp' or `.pad') 8207matters; their exact locations are irrelevant. In the example above, 8208the compiler emits the pseudo ops with particular instructions. That 8209makes it easier to understand the code, but it is not required for 8210correctness. It would work just as well to emit all of the pseudo ops 8211other than `.fnend' in the same order, but immediately after `.fnstart'. 8212 8213 The `.save' (*note .save pseudo op: arm_save.) pseudo op indicates 8214registers that have been saved to the stack so that they can be 8215restored before the function returns. The argument to the `.save' 8216pseudo op is a list of registers to save. If a register is 8217"callee-saved" (as specified by the ABI) and is modified by the 8218function you are writing, then your code must save the value before it 8219is modified and restore the original value before the function returns. 8220If an exception is thrown, the run-time library restores the values of 8221these registers from their locations on the stack before returning 8222control to the exception handler. (Of course, if an exception is not 8223thrown, the function that contains the `.save' pseudo op restores these 8224registers in the function epilogue, as is done with the `ldmfd' 8225instruction above.) 8226 8227 You do not have to save callee-saved registers at the very beginning 8228of the function and you do not need to use the `.save' pseudo op 8229immediately following the point at which the registers are saved. 8230However, if you modify a callee-saved register, you must save it on the 8231stack before modifying it and before calling any functions which might 8232throw an exception. And, you must use the `.save' pseudo op to 8233indicate that you have done so. 8234 8235 The `.pad' (*note .pad: arm_pad.) pseudo op indicates a modification 8236of the stack pointer that does not save any registers. The argument is 8237the number of bytes (in decimal) that are subtracted from the stack 8238pointer. (On ARM CPUs, the stack grows downwards, so subtracting from 8239the stack pointer increases the size of the stack.) 8240 8241 The `.setfp' (*note .setfp pseudo op: arm_setfp.) pseudo op 8242indicates the register that contains the frame pointer. The first 8243argument is the register that is set, which is typically `fp'. The 8244second argument indicates the register from which the frame pointer 8245takes its value. The third argument, if present, is the value (in 8246decimal) added to the register specified by the second argument to 8247compute the value of the frame pointer. You should not modify the 8248frame pointer in the body of the function. 8249 8250 If you do not use a frame pointer, then you should not use the 8251`.setfp' pseudo op. If you do not use a frame pointer, then you should 8252avoid modifying the stack pointer outside of the function prologue. 8253Otherwise, the run-time library will be unable to find saved registers 8254when it is unwinding the stack. 8255 8256 The pseudo ops described above are sufficient for writing assembly 8257code that calls functions which may throw exceptions. If you need to 8258know more about the object-file format used to represent unwind 8259information, you may consult the `Exception Handling ABI for the ARM 8260Architecture' available from `http://infocenter.arm.com'. 8261 8262 8263File: as.info, Node: AVR-Dependent, Next: Blackfin-Dependent, Prev: ARM-Dependent, Up: Machine Dependencies 8264 82659.5 AVR Dependent Features 8266========================== 8267 8268* Menu: 8269 8270* AVR Options:: Options 8271* AVR Syntax:: Syntax 8272* AVR Opcodes:: Opcodes 8273 8274 8275File: as.info, Node: AVR Options, Next: AVR Syntax, Up: AVR-Dependent 8276 82779.5.1 Options 8278------------- 8279 8280`-mmcu=MCU' 8281 Specify ATMEL AVR instruction set or MCU type. 8282 8283 Instruction set avr1 is for the minimal AVR core, not supported by 8284 the C compiler, only for assembler programs (MCU types: at90s1200, 8285 attiny11, attiny12, attiny15, attiny28). 8286 8287 Instruction set avr2 (default) is for the classic AVR core with up 8288 to 8K program memory space (MCU types: at90s2313, at90s2323, 8289 at90s2333, at90s2343, attiny22, attiny26, at90s4414, at90s4433, 8290 at90s4434, at90s8515, at90c8534, at90s8535). 8291 8292 Instruction set avr25 is for the classic AVR core with up to 8K 8293 program memory space plus the MOVW instruction (MCU types: 8294 attiny13, attiny13a, attiny2313, attiny2313a, attiny24, attiny24a, 8295 attiny4313, attiny44, attiny44a, attiny84, attiny84a, attiny25, 8296 attiny45, attiny85, attiny261, attiny261a, attiny461, attiny461a, 8297 attiny861, attiny861a, attiny87, attiny43u, attiny48, attiny88, 8298 attiny828, at86rf401, ata6289, ata5272). 8299 8300 Instruction set avr3 is for the classic AVR core with up to 128K 8301 program memory space (MCU types: at43usb355, at76c711). 8302 8303 Instruction set avr31 is for the classic AVR core with exactly 8304 128K program memory space (MCU types: atmega103, at43usb320). 8305 8306 Instruction set avr35 is for classic AVR core plus MOVW, CALL, and 8307 JMP instructions (MCU types: attiny167, attiny1634, at90usb82, 8308 at90usb162, atmega8u2, atmega16u2, atmega32u2, ata5505). 8309 8310 Instruction set avr4 is for the enhanced AVR core with up to 8K 8311 program memory space (MCU types: atmega48, atmega48a, atmega48pa, 8312 atmega48p, atmega8, atmega8a, atmega88, atmega88a, atmega88p, 8313 atmega88pa, atmega8515, atmega8535, atmega8hva, at90pwm1, 8314 at90pwm2, at90pwm2b, at90pwm3, at90pwm3b, at90pwm81, ata6285, 8315 ata6286). 8316 8317 Instruction set avr5 is for the enhanced AVR core with up to 128K 8318 program memory space (MCU types: at90pwm161, atmega16, atmega16a, 8319 atmega161, atmega162, atmega163, atmega164a, atmega164p, 8320 atmega164pa, atmega165, atmega165a, atmega165p, atmega165pa, 8321 atmega168, atmega168a, atmega168p, atmega168pa, atmega169, 8322 atmega169a, atmega169p, atmega169pa, atmega32, atmega323, 8323 atmega324a, atmega324p, atmega324pa, atmega325, atmega325a, 8324 atmega32, atmega32a, atmega323, atmega324a, atmega324p, 8325 atmega324pa, atmega325, atmega325a, atmega325p, atmega325p, 8326 atmega325pa, atmega3250, atmega3250a, atmega3250p, atmega3250pa, 8327 atmega328, atmega328p, atmega329, atmega329a, atmega329p, 8328 atmega329pa, atmega3290a, atmega3290p, atmega3290pa, atmega406, 8329 atmega64, atmega64a, atmega64rfr2, atmega644rfr2, atmega640, 8330 atmega644, atmega644a, atmega644p, atmega644pa, atmega645, 8331 atmega645a, atmega645p, atmega6450, atmega6450a, atmega6450p, 8332 atmega649, atmega649a, atmega649p, atmega6490, atmega6490a, 8333 atmega6490p, atmega16hva, atmega16hva2, atmega16hvb, 8334 atmega16hvbrevb, atmega32hvb, atmega32hvbrevb, atmega64hve, 8335 at90can32, at90can64, at90pwm161, at90pwm216, at90pwm316, 8336 atmega32c1, atmega64c1, atmega16m1, atmega32m1, atmega64m1, 8337 atmega16u4, atmega32u4, atmega32u6, at90usb646, at90usb647, at94k, 8338 at90scr100, ata5790, ata5795). 8339 8340 Instruction set avr51 is for the enhanced AVR core with exactly 8341 128K program memory space (MCU types: atmega128, atmega128a, 8342 atmega1280, atmega1281, atmega1284, atmega1284p, atmega128rfa1, 8343 atmega128rfr2, atmega1284rfr2, at90can128, at90usb1286, 8344 at90usb1287, m3000). 8345 8346 Instruction set avr6 is for the enhanced AVR core with a 3-byte PC 8347 (MCU types: atmega2560, atmega2561, atmega256rfr2, atmega2564rfr2). 8348 8349 Instruction set avrxmega2 is for the XMEGA AVR core with 8K to 64K 8350 program memory space and less than 64K data space (MCU types: 8351 atxmega16a4, atxmega16a4u, atxmega16c4, atxmega16d4, atxmega16x1, 8352 atxmega32a4, atxmega32a4u, atxmega32c4, atxmega32d4, atxmega16e5, 8353 atxmega8e5, atxmega32e5, atxmega32x1). 8354 8355 Instruction set avrxmega3 is for the XMEGA AVR core with 8K to 64K 8356 program memory space and greater than 64K data space (MCU types: 8357 none). 8358 8359 Instruction set avrxmega4 is for the XMEGA AVR core with up to 64K 8360 program memory space and less than 64K data space (MCU types: 8361 atxmega64a3, atxmega64a3u, atxmega64a4u, atxmega64b1, atxmega64b3, 8362 atxmega64c3, atxmega64d3, atxmega64d4). 8363 8364 Instruction set avrxmega5 is for the XMEGA AVR core with up to 64K 8365 program memory space and greater than 64K data space (MCU types: 8366 atxmega64a1, atxmega64a1u). 8367 8368 Instruction set avrxmega6 is for the XMEGA AVR core with larger 8369 than 64K program memory space and less than 64K data space (MCU 8370 types: atxmega128a3, atxmega128a3u, atxmega128c3, atxmega128d3, 8371 atxmega128d4, atxmega192a3, atxmega192a3u, atxmega128b1, 8372 atxmega128b3, atxmega192c3, atxmega192d3, atxmega256a3, 8373 atxmega256a3u, atxmega256a3b, atxmega256a3bu, atxmega256c3, 8374 atxmega256d3, atxmega384c3, atxmega256d3). 8375 8376 Instruction set avrxmega7 is for the XMEGA AVR core with larger 8377 than 64K program memory space and greater than 64K data space (MCU 8378 types: atxmega128a1, atxmega128a1u, atxmega128a4u). 8379 8380 Instruction set avrtiny is for the ATtiny4/5/9/10/20/40 8381 microcontrollers. 8382 8383`-mall-opcodes' 8384 Accept all AVR opcodes, even if not supported by `-mmcu'. 8385 8386`-mno-skip-bug' 8387 This option disable warnings for skipping two-word instructions. 8388 8389`-mno-wrap' 8390 This option reject `rjmp/rcall' instructions with 8K wrap-around. 8391 8392`-mrmw' 8393 Accept Read-Modify-Write (`XCH,LAC,LAS,LAT') instructions. 8394 8395`-mlink-relax' 8396 Enable support for link-time relaxation. This is now on by default 8397 and this flag no longer has any effect. 8398 8399`-mno-link-relax' 8400 Disable support for link-time relaxation. The assembler will 8401 resolve relocations when it can, and may be able to better 8402 compress some debug information. 8403 8404 8405 8406File: as.info, Node: AVR Syntax, Next: AVR Opcodes, Prev: AVR Options, Up: AVR-Dependent 8407 84089.5.2 Syntax 8409------------ 8410 8411* Menu: 8412 8413* AVR-Chars:: Special Characters 8414* AVR-Regs:: Register Names 8415* AVR-Modifiers:: Relocatable Expression Modifiers 8416 8417 8418File: as.info, Node: AVR-Chars, Next: AVR-Regs, Up: AVR Syntax 8419 84209.5.2.1 Special Characters 8421.......................... 8422 8423The presence of a `;' anywhere on a line indicates the start of a 8424comment that extends to the end of that line. 8425 8426 If a `#' appears as the first character of a line, the whole line is 8427treated as a comment, but in this case the line can also be a logical 8428line number directive (*note Comments::) or a preprocessor control 8429command (*note Preprocessing::). 8430 8431 The `$' character can be used instead of a newline to separate 8432statements. 8433 8434 8435File: as.info, Node: AVR-Regs, Next: AVR-Modifiers, Prev: AVR-Chars, Up: AVR Syntax 8436 84379.5.2.2 Register Names 8438...................... 8439 8440The AVR has 32 x 8-bit general purpose working registers `r0', `r1', 8441... `r31'. Six of the 32 registers can be used as three 16-bit 8442indirect address register pointers for Data Space addressing. One of 8443the these address pointers can also be used as an address pointer for 8444look up tables in Flash program memory. These added function registers 8445are the 16-bit `X', `Y' and `Z' - registers. 8446 8447 X = r26:r27 8448 Y = r28:r29 8449 Z = r30:r31 8450 8451 8452File: as.info, Node: AVR-Modifiers, Prev: AVR-Regs, Up: AVR Syntax 8453 84549.5.2.3 Relocatable Expression Modifiers 8455........................................ 8456 8457The assembler supports several modifiers when using relocatable 8458addresses in AVR instruction operands. The general syntax is the 8459following: 8460 8461 modifier(relocatable-expression) 8462 8463`lo8' 8464 This modifier allows you to use bits 0 through 7 of an address 8465 expression as 8 bit relocatable expression. 8466 8467`hi8' 8468 This modifier allows you to use bits 7 through 15 of an address 8469 expression as 8 bit relocatable expression. This is useful with, 8470 for example, the AVR `ldi' instruction and `lo8' modifier. 8471 8472 For example 8473 8474 ldi r26, lo8(sym+10) 8475 ldi r27, hi8(sym+10) 8476 8477`hh8' 8478 This modifier allows you to use bits 16 through 23 of an address 8479 expression as 8 bit relocatable expression. Also, can be useful 8480 for loading 32 bit constants. 8481 8482`hlo8' 8483 Synonym of `hh8'. 8484 8485`hhi8' 8486 This modifier allows you to use bits 24 through 31 of an 8487 expression as 8 bit expression. This is useful with, for example, 8488 the AVR `ldi' instruction and `lo8', `hi8', `hlo8', `hhi8', 8489 modifier. 8490 8491 For example 8492 8493 ldi r26, lo8(285774925) 8494 ldi r27, hi8(285774925) 8495 ldi r28, hlo8(285774925) 8496 ldi r29, hhi8(285774925) 8497 ; r29,r28,r27,r26 = 285774925 8498 8499`pm_lo8' 8500 This modifier allows you to use bits 0 through 7 of an address 8501 expression as 8 bit relocatable expression. This modifier useful 8502 for addressing data or code from Flash/Program memory. The using 8503 of `pm_lo8' similar to `lo8'. 8504 8505`pm_hi8' 8506 This modifier allows you to use bits 8 through 15 of an address 8507 expression as 8 bit relocatable expression. This modifier useful 8508 for addressing data or code from Flash/Program memory. 8509 8510`pm_hh8' 8511 This modifier allows you to use bits 15 through 23 of an address 8512 expression as 8 bit relocatable expression. This modifier useful 8513 for addressing data or code from Flash/Program memory. 8514 8515 8516 8517File: as.info, Node: AVR Opcodes, Prev: AVR Syntax, Up: AVR-Dependent 8518 85199.5.3 Opcodes 8520------------- 8521 8522For detailed information on the AVR machine instruction set, see 8523`www.atmel.com/products/AVR'. 8524 8525 `as' implements all the standard AVR opcodes. The following table 8526summarizes the AVR opcodes, and their arguments. 8527 8528 Legend: 8529 r any register 8530 d `ldi' register (r16-r31) 8531 v `movw' even register (r0, r2, ..., r28, r30) 8532 a `fmul' register (r16-r23) 8533 w `adiw' register (r24,r26,r28,r30) 8534 e pointer registers (X,Y,Z) 8535 b base pointer register and displacement ([YZ]+disp) 8536 z Z pointer register (for [e]lpm Rd,Z[+]) 8537 M immediate value from 0 to 255 8538 n immediate value from 0 to 255 ( n = ~M ). Relocation impossible 8539 s immediate value from 0 to 7 8540 P Port address value from 0 to 63. (in, out) 8541 p Port address value from 0 to 31. (cbi, sbi, sbic, sbis) 8542 K immediate value from 0 to 63 (used in `adiw', `sbiw') 8543 i immediate value 8544 l signed pc relative offset from -64 to 63 8545 L signed pc relative offset from -2048 to 2047 8546 h absolute code address (call, jmp) 8547 S immediate value from 0 to 7 (S = s << 4) 8548 ? use this opcode entry if no parameters, else use next opcode entry 8549 8550 1001010010001000 clc 8551 1001010011011000 clh 8552 1001010011111000 cli 8553 1001010010101000 cln 8554 1001010011001000 cls 8555 1001010011101000 clt 8556 1001010010111000 clv 8557 1001010010011000 clz 8558 1001010000001000 sec 8559 1001010001011000 seh 8560 1001010001111000 sei 8561 1001010000101000 sen 8562 1001010001001000 ses 8563 1001010001101000 set 8564 1001010000111000 sev 8565 1001010000011000 sez 8566 100101001SSS1000 bclr S 8567 100101000SSS1000 bset S 8568 1001010100001001 icall 8569 1001010000001001 ijmp 8570 1001010111001000 lpm ? 8571 1001000ddddd010+ lpm r,z 8572 1001010111011000 elpm ? 8573 1001000ddddd011+ elpm r,z 8574 0000000000000000 nop 8575 1001010100001000 ret 8576 1001010100011000 reti 8577 1001010110001000 sleep 8578 1001010110011000 break 8579 1001010110101000 wdr 8580 1001010111101000 spm 8581 000111rdddddrrrr adc r,r 8582 000011rdddddrrrr add r,r 8583 001000rdddddrrrr and r,r 8584 000101rdddddrrrr cp r,r 8585 000001rdddddrrrr cpc r,r 8586 000100rdddddrrrr cpse r,r 8587 001001rdddddrrrr eor r,r 8588 001011rdddddrrrr mov r,r 8589 100111rdddddrrrr mul r,r 8590 001010rdddddrrrr or r,r 8591 000010rdddddrrrr sbc r,r 8592 000110rdddddrrrr sub r,r 8593 001001rdddddrrrr clr r 8594 000011rdddddrrrr lsl r 8595 000111rdddddrrrr rol r 8596 001000rdddddrrrr tst r 8597 0111KKKKddddKKKK andi d,M 8598 0111KKKKddddKKKK cbr d,n 8599 1110KKKKddddKKKK ldi d,M 8600 11101111dddd1111 ser d 8601 0110KKKKddddKKKK ori d,M 8602 0110KKKKddddKKKK sbr d,M 8603 0011KKKKddddKKKK cpi d,M 8604 0100KKKKddddKKKK sbci d,M 8605 0101KKKKddddKKKK subi d,M 8606 1111110rrrrr0sss sbrc r,s 8607 1111111rrrrr0sss sbrs r,s 8608 1111100ddddd0sss bld r,s 8609 1111101ddddd0sss bst r,s 8610 10110PPdddddPPPP in r,P 8611 10111PPrrrrrPPPP out P,r 8612 10010110KKddKKKK adiw w,K 8613 10010111KKddKKKK sbiw w,K 8614 10011000pppppsss cbi p,s 8615 10011010pppppsss sbi p,s 8616 10011001pppppsss sbic p,s 8617 10011011pppppsss sbis p,s 8618 111101lllllll000 brcc l 8619 111100lllllll000 brcs l 8620 111100lllllll001 breq l 8621 111101lllllll100 brge l 8622 111101lllllll101 brhc l 8623 111100lllllll101 brhs l 8624 111101lllllll111 brid l 8625 111100lllllll111 brie l 8626 111100lllllll000 brlo l 8627 111100lllllll100 brlt l 8628 111100lllllll010 brmi l 8629 111101lllllll001 brne l 8630 111101lllllll010 brpl l 8631 111101lllllll000 brsh l 8632 111101lllllll110 brtc l 8633 111100lllllll110 brts l 8634 111101lllllll011 brvc l 8635 111100lllllll011 brvs l 8636 111101lllllllsss brbc s,l 8637 111100lllllllsss brbs s,l 8638 1101LLLLLLLLLLLL rcall L 8639 1100LLLLLLLLLLLL rjmp L 8640 1001010hhhhh111h call h 8641 1001010hhhhh110h jmp h 8642 1001010rrrrr0101 asr r 8643 1001010rrrrr0000 com r 8644 1001010rrrrr1010 dec r 8645 1001010rrrrr0011 inc r 8646 1001010rrrrr0110 lsr r 8647 1001010rrrrr0001 neg r 8648 1001000rrrrr1111 pop r 8649 1001001rrrrr1111 push r 8650 1001010rrrrr0111 ror r 8651 1001010rrrrr0010 swap r 8652 00000001ddddrrrr movw v,v 8653 00000010ddddrrrr muls d,d 8654 000000110ddd0rrr mulsu a,a 8655 000000110ddd1rrr fmul a,a 8656 000000111ddd0rrr fmuls a,a 8657 000000111ddd1rrr fmulsu a,a 8658 1001001ddddd0000 sts i,r 8659 1001000ddddd0000 lds r,i 8660 10o0oo0dddddbooo ldd r,b 8661 100!000dddddee-+ ld r,e 8662 10o0oo1rrrrrbooo std b,r 8663 100!001rrrrree-+ st e,r 8664 1001010100011001 eicall 8665 1001010000011001 eijmp 8666 8667 8668File: as.info, Node: Blackfin-Dependent, Next: CR16-Dependent, Prev: AVR-Dependent, Up: Machine Dependencies 8669 86709.6 Blackfin Dependent Features 8671=============================== 8672 8673* Menu: 8674 8675* Blackfin Options:: Blackfin Options 8676* Blackfin Syntax:: Blackfin Syntax 8677* Blackfin Directives:: Blackfin Directives 8678 8679 8680File: as.info, Node: Blackfin Options, Next: Blackfin Syntax, Up: Blackfin-Dependent 8681 86829.6.1 Options 8683------------- 8684 8685`-mcpu=PROCESSOR[-SIREVISION]' 8686 This option specifies the target processor. The optional 8687 SIREVISION is not used in assembler. It's here such that GCC can 8688 easily pass down its `-mcpu=' option. The assembler will issue an 8689 error message if an attempt is made to assemble an instruction 8690 which will not execute on the target processor. The following 8691 processor names are recognized: `bf504', `bf506', `bf512', `bf514', 8692 `bf516', `bf518', `bf522', `bf523', `bf524', `bf525', `bf526', 8693 `bf527', `bf531', `bf532', `bf533', `bf534', `bf535' (not 8694 implemented yet), `bf536', `bf537', `bf538', `bf539', `bf542', 8695 `bf542m', `bf544', `bf544m', `bf547', `bf547m', `bf548', `bf548m', 8696 `bf549', `bf549m', `bf561', and `bf592'. 8697 8698`-mfdpic' 8699 Assemble for the FDPIC ABI. 8700 8701`-mno-fdpic' 8702`-mnopic' 8703 Disable -mfdpic. 8704 8705 8706File: as.info, Node: Blackfin Syntax, Next: Blackfin Directives, Prev: Blackfin Options, Up: Blackfin-Dependent 8707 87089.6.2 Syntax 8709------------ 8710 8711`Special Characters' 8712 Assembler input is free format and may appear anywhere on the line. 8713 One instruction may extend across multiple lines or more than one 8714 instruction may appear on the same line. White space (space, tab, 8715 comments or newline) may appear anywhere between tokens. A token 8716 must not have embedded spaces. Tokens include numbers, register 8717 names, keywords, user identifiers, and also some multicharacter 8718 special symbols like "+=", "/*" or "||". 8719 8720 Comments are introduced by the `#' character and extend to the end 8721 of the current line. If the `#' appears as the first character of 8722 a line, the whole line is treated as a comment, but in this case 8723 the line can also be a logical line number directive (*note 8724 Comments::) or a preprocessor control command (*note 8725 Preprocessing::). 8726 8727`Instruction Delimiting' 8728 A semicolon must terminate every instruction. Sometimes a complete 8729 instruction will consist of more than one operation. There are two 8730 cases where this occurs. The first is when two general operations 8731 are combined. Normally a comma separates the different parts, as 8732 in 8733 8734 a0= r3.h * r2.l, a1 = r3.l * r2.h ; 8735 8736 The second case occurs when a general instruction is combined with 8737 one or two memory references for joint issue. The latter portions 8738 are set off by a "||" token. 8739 8740 a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++]; 8741 8742 Multiple instructions can occur on the same line. Each must be 8743 terminated by a semicolon character. 8744 8745`Register Names' 8746 The assembler treats register names and instruction keywords in a 8747 case insensitive manner. User identifiers are case sensitive. 8748 Thus, R3.l, R3.L, r3.l and r3.L are all equivalent input to the 8749 assembler. 8750 8751 Register names are reserved and may not be used as program 8752 identifiers. 8753 8754 Some operations (such as "Move Register") require a register pair. 8755 Register pairs are always data registers and are denoted using a 8756 colon, eg., R3:2. The larger number must be written firsts. Note 8757 that the hardware only supports odd-even pairs, eg., R7:6, R5:4, 8758 R3:2, and R1:0. 8759 8760 Some instructions (such as -SP (Push Multiple)) require a group of 8761 adjacent registers. Adjacent registers are denoted in the syntax 8762 by the range enclosed in parentheses and separated by a colon, 8763 eg., (R7:3). Again, the larger number appears first. 8764 8765 Portions of a particular register may be individually specified. 8766 This is written with a dot (".") following the register name and 8767 then a letter denoting the desired portion. For 32-bit registers, 8768 ".H" denotes the most significant ("High") portion. ".L" denotes 8769 the least-significant portion. The subdivisions of the 40-bit 8770 registers are described later. 8771 8772`Accumulators' 8773 The set of 40-bit registers A1 and A0 that normally contain data 8774 that is being manipulated. Each accumulator can be accessed in 8775 four ways. 8776 8777 `one 40-bit register' 8778 The register will be referred to as A1 or A0. 8779 8780 `one 32-bit register' 8781 The registers are designated as A1.W or A0.W. 8782 8783 `two 16-bit registers' 8784 The registers are designated as A1.H, A1.L, A0.H or A0.L. 8785 8786 `one 8-bit register' 8787 The registers are designated as A1.X or A0.X for the bits that 8788 extend beyond bit 31. 8789 8790`Data Registers' 8791 The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7) 8792 that normally contain data for manipulation. These are 8793 abbreviated as D-register or Dreg. Data registers can be accessed 8794 as 32-bit registers or as two independent 16-bit registers. The 8795 least significant 16 bits of each register is called the "low" 8796 half and is designated with ".L" following the register name. The 8797 most significant 16 bits are called the "high" half and is 8798 designated with ".H" following the name. 8799 8800 R7.L, r2.h, r4.L, R0.H 8801 8802`Pointer Registers' 8803 The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP) 8804 that normally contain byte addresses of data structures. These are 8805 abbreviated as P-register or Preg. 8806 8807 p2, p5, fp, sp 8808 8809`Stack Pointer SP' 8810 The stack pointer contains the 32-bit address of the last occupied 8811 byte location in the stack. The stack grows by decrementing the 8812 stack pointer. 8813 8814`Frame Pointer FP' 8815 The frame pointer contains the 32-bit address of the previous frame 8816 pointer in the stack. It is located at the top of a frame. 8817 8818`Loop Top' 8819 LT0 and LT1. These registers contain the 32-bit address of the 8820 top of a zero overhead loop. 8821 8822`Loop Count' 8823 LC0 and LC1. These registers contain the 32-bit counter of the 8824 zero overhead loop executions. 8825 8826`Loop Bottom' 8827 LB0 and LB1. These registers contain the 32-bit address of the 8828 bottom of a zero overhead loop. 8829 8830`Index Registers' 8831 The set of 32-bit registers (I0, I1, I2, I3) that normally contain 8832 byte addresses of data structures. Abbreviated I-register or Ireg. 8833 8834`Modify Registers' 8835 The set of 32-bit registers (M0, M1, M2, M3) that normally contain 8836 offset values that are added and subtracted to one of the index 8837 registers. Abbreviated as Mreg. 8838 8839`Length Registers' 8840 The set of 32-bit registers (L0, L1, L2, L3) that normally contain 8841 the length in bytes of the circular buffer. Abbreviated as Lreg. 8842 Clear the Lreg to disable circular addressing for the 8843 corresponding Ireg. 8844 8845`Base Registers' 8846 The set of 32-bit registers (B0, B1, B2, B3) that normally contain 8847 the base address in bytes of the circular buffer. Abbreviated as 8848 Breg. 8849 8850`Floating Point' 8851 The Blackfin family has no hardware floating point but the .float 8852 directive generates ieee floating point numbers for use with 8853 software floating point libraries. 8854 8855`Blackfin Opcodes' 8856 For detailed information on the Blackfin machine instruction set, 8857 see the Blackfin(r) Processor Instruction Set Reference. 8858 8859 8860 8861File: as.info, Node: Blackfin Directives, Prev: Blackfin Syntax, Up: Blackfin-Dependent 8862 88639.6.3 Directives 8864---------------- 8865 8866The following directives are provided for compatibility with the VDSP 8867assembler. 8868 8869`.byte2' 8870 Initializes a two byte data object. 8871 8872 This maps to the `.short' directive. 8873 8874`.byte4' 8875 Initializes a four byte data object. 8876 8877 This maps to the `.int' directive. 8878 8879`.db' 8880 Initializes a single byte data object. 8881 8882 This directive is a synonym for `.byte'. 8883 8884`.dw' 8885 Initializes a two byte data object. 8886 8887 This directive is a synonym for `.byte2'. 8888 8889`.dd' 8890 Initializes a four byte data object. 8891 8892 This directive is a synonym for `.byte4'. 8893 8894`.var' 8895 Define and initialize a 32 bit data object. 8896 8897 8898File: as.info, Node: CR16-Dependent, Next: CRIS-Dependent, Prev: Blackfin-Dependent, Up: Machine Dependencies 8899 89009.7 CR16 Dependent Features 8901=========================== 8902 8903* Menu: 8904 8905* CR16 Operand Qualifiers:: CR16 Machine Operand Qualifiers 8906* CR16 Syntax:: Syntax for the CR16 8907 8908 8909File: as.info, Node: CR16 Operand Qualifiers, Next: CR16 Syntax, Up: CR16-Dependent 8910 89119.7.1 CR16 Operand Qualifiers 8912----------------------------- 8913 8914The National Semiconductor CR16 target of `as' has a few machine 8915dependent operand qualifiers. 8916 8917 Operand expression type qualifier is an optional field in the 8918instruction operand, to determines the type of the expression field of 8919an operand. The `@' is required. CR16 architecture uses one of the 8920following expression qualifiers: 8921 8922`s' 8923 - `Specifies expression operand type as small' 8924 8925`m' 8926 - `Specifies expression operand type as medium' 8927 8928`l' 8929 - `Specifies expression operand type as large' 8930 8931`c' 8932 - `Specifies the CR16 Assembler generates a relocation entry for 8933 the operand, where pc has implied bit, the expression is adjusted 8934 accordingly. The linker uses the relocation entry to update the 8935 operand address at link time.' 8936 8937`got/GOT' 8938 - `Specifies the CR16 Assembler generates a relocation entry for 8939 the operand, offset from Global Offset Table. The linker uses this 8940 relocation entry to update the operand address at link time' 8941 8942`cgot/cGOT' 8943 - `Specifies the CompactRISC Assembler generates a relocation 8944 entry for the operand, where pc has implied bit, the expression is 8945 adjusted accordingly. The linker uses the relocation entry to 8946 update the operand address at link time.' 8947 8948 CR16 target operand qualifiers and its size (in bits): 8949 8950`Immediate Operand: s' 8951 4 bits. 8952 8953`Immediate Operand: m' 8954 16 bits, for movb and movw instructions. 8955 8956`Immediate Operand: m' 8957 20 bits, movd instructions. 8958 8959`Immediate Operand: l' 8960 32 bits. 8961 8962`Absolute Operand: s' 8963 Illegal specifier for this operand. 8964 8965`Absolute Operand: m' 8966 20 bits, movd instructions. 8967 8968`Displacement Operand: s' 8969 8 bits. 8970 8971`Displacement Operand: m' 8972 16 bits. 8973 8974`Displacement Operand: l' 8975 24 bits. 8976 8977 8978 For example: 8979 1 `movw $_myfun@c,r1' 8980 8981 This loads the address of _myfun, shifted right by 1, into r1. 8982 8983 2 `movd $_myfun@c,(r2,r1)' 8984 8985 This loads the address of _myfun, shifted right by 1, into register-pair r2-r1. 8986 8987 3 `_myfun_ptr:' 8988 `.long _myfun@c' 8989 `loadd _myfun_ptr, (r1,r0)' 8990 `jal (r1,r0)' 8991 8992 This .long directive, the address of _myfunc, shifted right by 1 at link time. 8993 8994 4 `loadd _data1@GOT(r12), (r1,r0)' 8995 8996 This loads the address of _data1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r2-r1. 8997 8998 5 `loadd _myfunc@cGOT(r12), (r1,r0)' 8999 9000 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. 9001 9002 9003File: as.info, Node: CR16 Syntax, Prev: CR16 Operand Qualifiers, Up: CR16-Dependent 9004 90059.7.2 CR16 Syntax 9006----------------- 9007 9008* Menu: 9009 9010* CR16-Chars:: Special Characters 9011 9012 9013File: as.info, Node: CR16-Chars, Up: CR16 Syntax 9014 90159.7.2.1 Special Characters 9016.......................... 9017 9018The presence of a `#' on a line indicates the start of a comment that 9019extends to the end of the current line. If the `#' appears as the 9020first character of a line, the whole line is treated as a comment, but 9021in this case the line can also be a logical line number directive 9022(*note Comments::) or a preprocessor control command (*note 9023Preprocessing::). 9024 9025 The `;' character can be used to separate statements on the same 9026line. 9027 9028 9029File: as.info, Node: CRIS-Dependent, Next: D10V-Dependent, Prev: CR16-Dependent, Up: Machine Dependencies 9030 90319.8 CRIS Dependent Features 9032=========================== 9033 9034* Menu: 9035 9036* CRIS-Opts:: Command-line Options 9037* CRIS-Expand:: Instruction expansion 9038* CRIS-Symbols:: Symbols 9039* CRIS-Syntax:: Syntax 9040 9041 9042File: as.info, Node: CRIS-Opts, Next: CRIS-Expand, Up: CRIS-Dependent 9043 90449.8.1 Command-line Options 9045-------------------------- 9046 9047The CRIS version of `as' has these machine-dependent command-line 9048options. 9049 9050 The format of the generated object files can be either ELF or a.out, 9051specified by the command-line options `--emulation=crisaout' and 9052`--emulation=criself'. The default is ELF (criself), unless `as' has 9053been configured specifically for a.out by using the configuration name 9054`cris-axis-aout'. 9055 9056 There are two different link-incompatible ELF object file variants 9057for CRIS, for use in environments where symbols are expected to be 9058prefixed by a leading `_' character and for environments without such a 9059symbol prefix. The variant used for GNU/Linux port has no symbol 9060prefix. Which variant to produce is specified by either of the options 9061`--underscore' and `--no-underscore'. The default is `--underscore'. 9062Since symbols in CRIS a.out objects are expected to have a `_' prefix, 9063specifying `--no-underscore' when generating a.out objects is an error. 9064Besides the object format difference, the effect of this option is to 9065parse register names differently (*note crisnous::). The 9066`--no-underscore' option makes a `$' register prefix mandatory. 9067 9068 The option `--pic' must be passed to `as' in order to recognize the 9069symbol syntax used for ELF (SVR4 PIC) position-independent-code (*note 9070crispic::). This will also affect expansion of instructions. The 9071expansion with `--pic' will use PC-relative rather than (slightly 9072faster) absolute addresses in those expansions. This option is only 9073valid when generating ELF format object files. 9074 9075 The option `--march=ARCHITECTURE' specifies the recognized 9076instruction set and recognized register names. It also controls the 9077architecture type of the object file. Valid values for ARCHITECTURE 9078are: 9079`v0_v10' 9080 All instructions and register names for any architecture variant 9081 in the set v0...v10 are recognized. This is the default if the 9082 target is configured as cris-*. 9083 9084`v10' 9085 Only instructions and register names for CRIS v10 (as found in 9086 ETRAX 100 LX) are recognized. This is the default if the target 9087 is configured as crisv10-*. 9088 9089`v32' 9090 Only instructions and register names for CRIS v32 (code name 9091 Guinness) are recognized. This is the default if the target is 9092 configured as crisv32-*. This value implies `--no-mul-bug-abort'. 9093 (A subsequent `--mul-bug-abort' will turn it back on.) 9094 9095`common_v10_v32' 9096 Only instructions with register names and addressing modes with 9097 opcodes common to the v10 and v32 are recognized. 9098 9099 When `-N' is specified, `as' will emit a warning when a 16-bit 9100branch instruction is expanded into a 32-bit multiple-instruction 9101construct (*note CRIS-Expand::). 9102 9103 Some versions of the CRIS v10, for example in the Etrax 100 LX, 9104contain a bug that causes destabilizing memory accesses when a multiply 9105instruction is executed with certain values in the first operand just 9106before a cache-miss. When the `--mul-bug-abort' command line option is 9107active (the default value), `as' will refuse to assemble a file 9108containing a multiply instruction at a dangerous offset, one that could 9109be the last on a cache-line, or is in a section with insufficient 9110alignment. This placement checking does not catch any case where the 9111multiply instruction is dangerously placed because it is located in a 9112delay-slot. The `--mul-bug-abort' command line option turns off the 9113checking. 9114 9115 9116File: as.info, Node: CRIS-Expand, Next: CRIS-Symbols, Prev: CRIS-Opts, Up: CRIS-Dependent 9117 91189.8.2 Instruction expansion 9119--------------------------- 9120 9121`as' will silently choose an instruction that fits the operand size for 9122`[register+constant]' operands. For example, the offset `127' in 9123`move.d [r3+127],r4' fits in an instruction using a signed-byte offset. 9124Similarly, `move.d [r2+32767],r1' will generate an instruction using a 912516-bit offset. For symbolic expressions and constants that do not fit 9126in 16 bits including the sign bit, a 32-bit offset is generated. 9127 9128 For branches, `as' will expand from a 16-bit branch instruction into 9129a sequence of instructions that can reach a full 32-bit address. Since 9130this does not correspond to a single instruction, such expansions can 9131optionally be warned about. *Note CRIS-Opts::. 9132 9133 If the operand is found to fit the range, a `lapc' mnemonic will 9134translate to a `lapcq' instruction. Use `lapc.d' to force the 32-bit 9135`lapc' instruction. 9136 9137 Similarly, the `addo' mnemonic will translate to the shortest 9138fitting instruction of `addoq', `addo.w' and `addo.d', when used with a 9139operand that is a constant known at assembly time. 9140 9141 9142File: as.info, Node: CRIS-Symbols, Next: CRIS-Syntax, Prev: CRIS-Expand, Up: CRIS-Dependent 9143 91449.8.3 Symbols 9145------------- 9146 9147Some symbols are defined by the assembler. They're intended to be used 9148in conditional assembly, for example: 9149 .if ..asm.arch.cris.v32 9150 CODE FOR CRIS V32 9151 .elseif ..asm.arch.cris.common_v10_v32 9152 CODE COMMON TO CRIS V32 AND CRIS V10 9153 .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10 9154 CODE FOR V10 9155 .else 9156 .error "Code needs to be added here." 9157 .endif 9158 9159 These symbols are defined in the assembler, reflecting command-line 9160options, either when specified or the default. They are always 9161defined, to 0 or 1. 9162`..asm.arch.cris.any_v0_v10' 9163 This symbol is non-zero when `--march=v0_v10' is specified or the 9164 default. 9165 9166`..asm.arch.cris.common_v10_v32' 9167 Set according to the option `--march=common_v10_v32'. 9168 9169`..asm.arch.cris.v10' 9170 Reflects the option `--march=v10'. 9171 9172`..asm.arch.cris.v32' 9173 Corresponds to `--march=v10'. 9174 9175 Speaking of symbols, when a symbol is used in code, it can have a 9176suffix modifying its value for use in position-independent code. *Note 9177CRIS-Pic::. 9178 9179 9180File: as.info, Node: CRIS-Syntax, Prev: CRIS-Symbols, Up: CRIS-Dependent 9181 91829.8.4 Syntax 9183------------ 9184 9185There are different aspects of the CRIS assembly syntax. 9186 9187* Menu: 9188 9189* CRIS-Chars:: Special Characters 9190* CRIS-Pic:: Position-Independent Code Symbols 9191* CRIS-Regs:: Register Names 9192* CRIS-Pseudos:: Assembler Directives 9193 9194 9195File: as.info, Node: CRIS-Chars, Next: CRIS-Pic, Up: CRIS-Syntax 9196 91979.8.4.1 Special Characters 9198.......................... 9199 9200The character `#' is a line comment character. It starts a comment if 9201and only if it is placed at the beginning of a line. 9202 9203 A `;' character starts a comment anywhere on the line, causing all 9204characters up to the end of the line to be ignored. 9205 9206 A `@' character is handled as a line separator equivalent to a 9207logical new-line character (except in a comment), so separate 9208instructions can be specified on a single line. 9209 9210 9211File: as.info, Node: CRIS-Pic, Next: CRIS-Regs, Prev: CRIS-Chars, Up: CRIS-Syntax 9212 92139.8.4.2 Symbols in position-independent code 9214............................................ 9215 9216When generating position-independent code (SVR4 PIC) for use in 9217cris-axis-linux-gnu or crisv32-axis-linux-gnu shared libraries, symbol 9218suffixes are used to specify what kind of run-time symbol lookup will 9219be used, expressed in the object as different _relocation types_. 9220Usually, all absolute symbol values must be located in a table, the 9221_global offset table_, leaving the code position-independent; 9222independent of values of global symbols and independent of the address 9223of the code. The suffix modifies the value of the symbol, into for 9224example an index into the global offset table where the real symbol 9225value is entered, or a PC-relative value, or a value relative to the 9226start of the global offset table. All symbol suffixes start with the 9227character `:' (omitted in the list below). Every symbol use in code or 9228a read-only section must therefore have a PIC suffix to enable a useful 9229shared library to be created. Usually, these constructs must not be 9230used with an additive constant offset as is usually allowed, i.e. no 4 9231as in `symbol + 4' is allowed. This restriction is checked at 9232link-time, not at assembly-time. 9233 9234`GOT' 9235 Attaching this suffix to a symbol in an instruction causes the 9236 symbol to be entered into the global offset table. The value is a 9237 32-bit index for that symbol into the global offset table. The 9238 name of the corresponding relocation is `R_CRIS_32_GOT'. Example: 9239 `move.d [$r0+extsym:GOT],$r9' 9240 9241`GOT16' 9242 Same as for `GOT', but the value is a 16-bit index into the global 9243 offset table. The corresponding relocation is `R_CRIS_16_GOT'. 9244 Example: `move.d [$r0+asymbol:GOT16],$r10' 9245 9246`PLT' 9247 This suffix is used for function symbols. It causes a _procedure 9248 linkage table_, an array of code stubs, to be created at the time 9249 the shared object is created or linked against, together with a 9250 global offset table entry. The value is a pc-relative offset to 9251 the corresponding stub code in the procedure linkage table. This 9252 arrangement causes the run-time symbol resolver to be called to 9253 look up and set the value of the symbol the first time the 9254 function is called (at latest; depending environment variables). 9255 It is only safe to leave the symbol unresolved this way if all 9256 references are function calls. The name of the relocation is 9257 `R_CRIS_32_PLT_PCREL'. Example: `add.d fnname:PLT,$pc' 9258 9259`PLTG' 9260 Like PLT, but the value is relative to the beginning of the global 9261 offset table. The relocation is `R_CRIS_32_PLT_GOTREL'. Example: 9262 `move.d fnname:PLTG,$r3' 9263 9264`GOTPLT' 9265 Similar to `PLT', but the value of the symbol is a 32-bit index 9266 into the global offset table. This is somewhat of a mix between 9267 the effect of the `GOT' and the `PLT' suffix; the difference to 9268 `GOT' is that there will be a procedure linkage table entry 9269 created, and that the symbol is assumed to be a function entry and 9270 will be resolved by the run-time resolver as with `PLT'. The 9271 relocation is `R_CRIS_32_GOTPLT'. Example: `jsr 9272 [$r0+fnname:GOTPLT]' 9273 9274`GOTPLT16' 9275 A variant of `GOTPLT' giving a 16-bit value. Its relocation name 9276 is `R_CRIS_16_GOTPLT'. Example: `jsr [$r0+fnname:GOTPLT16]' 9277 9278`GOTOFF' 9279 This suffix must only be attached to a local symbol, but may be 9280 used in an expression adding an offset. The value is the address 9281 of the symbol relative to the start of the global offset table. 9282 The relocation name is `R_CRIS_32_GOTREL'. Example: `move.d 9283 [$r0+localsym:GOTOFF],r3' 9284 9285 9286File: as.info, Node: CRIS-Regs, Next: CRIS-Pseudos, Prev: CRIS-Pic, Up: CRIS-Syntax 9287 92889.8.4.3 Register names 9289...................... 9290 9291A `$' character may always prefix a general or special register name in 9292an instruction operand but is mandatory when the option 9293`--no-underscore' is specified or when the `.syntax register_prefix' 9294directive is in effect (*note crisnous::). Register names are 9295case-insensitive. 9296 9297 9298File: as.info, Node: CRIS-Pseudos, Prev: CRIS-Regs, Up: CRIS-Syntax 9299 93009.8.4.4 Assembler Directives 9301............................ 9302 9303There are a few CRIS-specific pseudo-directives in addition to the 9304generic ones. *Note Pseudo Ops::. Constants emitted by 9305pseudo-directives are in little-endian order for CRIS. There is no 9306support for floating-point-specific directives for CRIS. 9307 9308`.dword EXPRESSIONS' 9309 The `.dword' directive is a synonym for `.int', expecting zero or 9310 more EXPRESSIONS, separated by commas. For each expression, a 9311 32-bit little-endian constant is emitted. 9312 9313`.syntax ARGUMENT' 9314 The `.syntax' directive takes as ARGUMENT one of the following 9315 case-sensitive choices. 9316 9317 `no_register_prefix' 9318 The `.syntax no_register_prefix' directive makes a `$' 9319 character prefix on all registers optional. It overrides a 9320 previous setting, including the corresponding effect of the 9321 option `--no-underscore'. If this directive is used when 9322 ordinary symbols do not have a `_' character prefix, care 9323 must be taken to avoid ambiguities whether an operand is a 9324 register or a symbol; using symbols with names the same as 9325 general or special registers then invoke undefined behavior. 9326 9327 `register_prefix' 9328 This directive makes a `$' character prefix on all registers 9329 mandatory. It overrides a previous setting, including the 9330 corresponding effect of the option `--underscore'. 9331 9332 `leading_underscore' 9333 This is an assertion directive, emitting an error if the 9334 `--no-underscore' option is in effect. 9335 9336 `no_leading_underscore' 9337 This is the opposite of the `.syntax leading_underscore' 9338 directive and emits an error if the option `--underscore' is 9339 in effect. 9340 9341`.arch ARGUMENT' 9342 This is an assertion directive, giving an error if the specified 9343 ARGUMENT is not the same as the specified or default value for the 9344 `--march=ARCHITECTURE' option (*note march-option::). 9345 9346 9347 9348File: as.info, Node: D10V-Dependent, Next: D30V-Dependent, Prev: CRIS-Dependent, Up: Machine Dependencies 9349 93509.9 D10V Dependent Features 9351=========================== 9352 9353* Menu: 9354 9355* D10V-Opts:: D10V Options 9356* D10V-Syntax:: Syntax 9357* D10V-Float:: Floating Point 9358* D10V-Opcodes:: Opcodes 9359 9360 9361File: as.info, Node: D10V-Opts, Next: D10V-Syntax, Up: D10V-Dependent 9362 93639.9.1 D10V Options 9364------------------ 9365 9366The Mitsubishi D10V version of `as' has a few machine dependent options. 9367 9368`-O' 9369 The D10V can often execute two sub-instructions in parallel. When 9370 this option is used, `as' will attempt to optimize its output by 9371 detecting when instructions can be executed in parallel. 9372 9373`--nowarnswap' 9374 To optimize execution performance, `as' will sometimes swap the 9375 order of instructions. Normally this generates a warning. When 9376 this option is used, no warning will be generated when 9377 instructions are swapped. 9378 9379`--gstabs-packing' 9380`--no-gstabs-packing' 9381 `as' packs adjacent short instructions into a single packed 9382 instruction. `--no-gstabs-packing' turns instruction packing off if 9383 `--gstabs' is specified as well; `--gstabs-packing' (the default) 9384 turns instruction packing on even when `--gstabs' is specified. 9385 9386 9387File: as.info, Node: D10V-Syntax, Next: D10V-Float, Prev: D10V-Opts, Up: D10V-Dependent 9388 93899.9.2 Syntax 9390------------ 9391 9392The D10V syntax is based on the syntax in Mitsubishi's D10V 9393architecture manual. The differences are detailed below. 9394 9395* Menu: 9396 9397* D10V-Size:: Size Modifiers 9398* D10V-Subs:: Sub-Instructions 9399* D10V-Chars:: Special Characters 9400* D10V-Regs:: Register Names 9401* D10V-Addressing:: Addressing Modes 9402* D10V-Word:: @WORD Modifier 9403 9404 9405File: as.info, Node: D10V-Size, Next: D10V-Subs, Up: D10V-Syntax 9406 94079.9.2.1 Size Modifiers 9408...................... 9409 9410The D10V version of `as' uses the instruction names in the D10V 9411Architecture Manual. However, the names in the manual are sometimes 9412ambiguous. There are instruction names that can assemble to a short or 9413long form opcode. How does the assembler pick the correct form? `as' 9414will always pick the smallest form if it can. When dealing with a 9415symbol that is not defined yet when a line is being assembled, it will 9416always use the long form. If you need to force the assembler to use 9417either the short or long form of the instruction, you can append either 9418`.s' (short) or `.l' (long) to it. For example, if you are writing an 9419assembly program and you want to do a branch to a symbol that is 9420defined later in your program, you can write `bra.s foo'. Objdump 9421and GDB will always append `.s' or `.l' to instructions which have both 9422short and long forms. 9423 9424 9425File: as.info, Node: D10V-Subs, Next: D10V-Chars, Prev: D10V-Size, Up: D10V-Syntax 9426 94279.9.2.2 Sub-Instructions 9428........................ 9429 9430The D10V assembler takes as input a series of instructions, either 9431one-per-line, or in the special two-per-line format described in the 9432next section. Some of these instructions will be short-form or 9433sub-instructions. These sub-instructions can be packed into a single 9434instruction. The assembler will do this automatically. It will also 9435detect when it should not pack instructions. For example, when a label 9436is defined, the next instruction will never be packaged with the 9437previous one. Whenever a branch and link instruction is called, it 9438will not be packaged with the next instruction so the return address 9439will be valid. Nops are automatically inserted when necessary. 9440 9441 If you do not want the assembler automatically making these 9442decisions, you can control the packaging and execution type (parallel 9443or sequential) with the special execution symbols described in the next 9444section. 9445 9446 9447File: as.info, Node: D10V-Chars, Next: D10V-Regs, Prev: D10V-Subs, Up: D10V-Syntax 9448 94499.9.2.3 Special Characters 9450.......................... 9451 9452A semicolon (`;') can be used anywhere on a line to start a comment 9453that extends to the end of the line. 9454 9455 If a `#' appears as the first character of a line, the whole line is 9456treated as a comment, but in this case the line could also be a logical 9457line number directive (*note Comments::) or a preprocessor control 9458command (*note Preprocessing::). 9459 9460 Sub-instructions may be executed in order, in reverse-order, or in 9461parallel. Instructions listed in the standard one-per-line format will 9462be executed sequentially. To specify the executing order, use the 9463following symbols: 9464`->' 9465 Sequential with instruction on the left first. 9466 9467`<-' 9468 Sequential with instruction on the right first. 9469 9470`||' 9471 Parallel 9472 The D10V syntax allows either one instruction per line, one 9473instruction per line with the execution symbol, or two instructions per 9474line. For example 9475`abs a1 -> abs r0' 9476 Execute these sequentially. The instruction on the right is in 9477 the right container and is executed second. 9478 9479`abs r0 <- abs a1' 9480 Execute these reverse-sequentially. The instruction on the right 9481 is in the right container, and is executed first. 9482 9483`ld2w r2,@r8+ || mac a0,r0,r7' 9484 Execute these in parallel. 9485 9486`ld2w r2,@r8+ ||' 9487`mac a0,r0,r7' 9488 Two-line format. Execute these in parallel. 9489 9490`ld2w r2,@r8+' 9491`mac a0,r0,r7' 9492 Two-line format. Execute these sequentially. Assembler will put 9493 them in the proper containers. 9494 9495`ld2w r2,@r8+ ->' 9496`mac a0,r0,r7' 9497 Two-line format. Execute these sequentially. Same as above but 9498 second instruction will always go into right container. 9499 Since `$' has no special meaning, you may use it in symbol names. 9500 9501 9502File: as.info, Node: D10V-Regs, Next: D10V-Addressing, Prev: D10V-Chars, Up: D10V-Syntax 9503 95049.9.2.4 Register Names 9505...................... 9506 9507You can use the predefined symbols `r0' through `r15' to refer to the 9508D10V registers. You can also use `sp' as an alias for `r15'. The 9509accumulators are `a0' and `a1'. There are special register-pair names 9510that may optionally be used in opcodes that require even-numbered 9511registers. Register names are not case sensitive. 9512 9513 Register Pairs 9514`r0-r1' 9515 9516`r2-r3' 9517 9518`r4-r5' 9519 9520`r6-r7' 9521 9522`r8-r9' 9523 9524`r10-r11' 9525 9526`r12-r13' 9527 9528`r14-r15' 9529 9530 The D10V also has predefined symbols for these control registers and 9531status bits: 9532`psw' 9533 Processor Status Word 9534 9535`bpsw' 9536 Backup Processor Status Word 9537 9538`pc' 9539 Program Counter 9540 9541`bpc' 9542 Backup Program Counter 9543 9544`rpt_c' 9545 Repeat Count 9546 9547`rpt_s' 9548 Repeat Start address 9549 9550`rpt_e' 9551 Repeat End address 9552 9553`mod_s' 9554 Modulo Start address 9555 9556`mod_e' 9557 Modulo End address 9558 9559`iba' 9560 Instruction Break Address 9561 9562`f0' 9563 Flag 0 9564 9565`f1' 9566 Flag 1 9567 9568`c' 9569 Carry flag 9570 9571 9572File: as.info, Node: D10V-Addressing, Next: D10V-Word, Prev: D10V-Regs, Up: D10V-Syntax 9573 95749.9.2.5 Addressing Modes 9575........................ 9576 9577`as' understands the following addressing modes for the D10V. `RN' in 9578the following refers to any of the numbered registers, but _not_ the 9579control registers. 9580`RN' 9581 Register direct 9582 9583`@RN' 9584 Register indirect 9585 9586`@RN+' 9587 Register indirect with post-increment 9588 9589`@RN-' 9590 Register indirect with post-decrement 9591 9592`@-SP' 9593 Register indirect with pre-decrement 9594 9595`@(DISP, RN)' 9596 Register indirect with displacement 9597 9598`ADDR' 9599 PC relative address (for branch or rep). 9600 9601`#IMM' 9602 Immediate data (the `#' is optional and ignored) 9603 9604 9605File: as.info, Node: D10V-Word, Prev: D10V-Addressing, Up: D10V-Syntax 9606 96079.9.2.6 @WORD Modifier 9608...................... 9609 9610Any symbol followed by `@word' will be replaced by the symbol's value 9611shifted right by 2. This is used in situations such as loading a 9612register with the address of a function (or any other code fragment). 9613For example, if you want to load a register with the location of the 9614function `main' then jump to that function, you could do it as follows: 9615 ldi r2, main@word 9616 jmp r2 9617 9618 9619File: as.info, Node: D10V-Float, Next: D10V-Opcodes, Prev: D10V-Syntax, Up: D10V-Dependent 9620 96219.9.3 Floating Point 9622-------------------- 9623 9624The D10V has no hardware floating point, but the `.float' and `.double' 9625directives generates IEEE floating-point numbers for compatibility with 9626other development tools. 9627 9628 9629File: as.info, Node: D10V-Opcodes, Prev: D10V-Float, Up: D10V-Dependent 9630 96319.9.4 Opcodes 9632------------- 9633 9634For detailed information on the D10V machine instruction set, see `D10V 9635Architecture: A VLIW Microprocessor for Multimedia Applications' 9636(Mitsubishi Electric Corp.). `as' implements all the standard D10V 9637opcodes. The only changes are those described in the section on size 9638modifiers 9639 9640 9641File: as.info, Node: D30V-Dependent, Next: Epiphany-Dependent, Prev: D10V-Dependent, Up: Machine Dependencies 9642 96439.10 D30V Dependent Features 9644============================ 9645 9646* Menu: 9647 9648* D30V-Opts:: D30V Options 9649* D30V-Syntax:: Syntax 9650* D30V-Float:: Floating Point 9651* D30V-Opcodes:: Opcodes 9652 9653 9654File: as.info, Node: D30V-Opts, Next: D30V-Syntax, Up: D30V-Dependent 9655 96569.10.1 D30V Options 9657------------------- 9658 9659The Mitsubishi D30V version of `as' has a few machine dependent options. 9660 9661`-O' 9662 The D30V can often execute two sub-instructions in parallel. When 9663 this option is used, `as' will attempt to optimize its output by 9664 detecting when instructions can be executed in parallel. 9665 9666`-n' 9667 When this option is used, `as' will issue a warning every time it 9668 adds a nop instruction. 9669 9670`-N' 9671 When this option is used, `as' will issue a warning if it needs to 9672 insert a nop after a 32-bit multiply before a load or 16-bit 9673 multiply instruction. 9674 9675 9676File: as.info, Node: D30V-Syntax, Next: D30V-Float, Prev: D30V-Opts, Up: D30V-Dependent 9677 96789.10.2 Syntax 9679------------- 9680 9681The D30V syntax is based on the syntax in Mitsubishi's D30V 9682architecture manual. The differences are detailed below. 9683 9684* Menu: 9685 9686* D30V-Size:: Size Modifiers 9687* D30V-Subs:: Sub-Instructions 9688* D30V-Chars:: Special Characters 9689* D30V-Guarded:: Guarded Execution 9690* D30V-Regs:: Register Names 9691* D30V-Addressing:: Addressing Modes 9692 9693 9694File: as.info, Node: D30V-Size, Next: D30V-Subs, Up: D30V-Syntax 9695 96969.10.2.1 Size Modifiers 9697....................... 9698 9699The D30V version of `as' uses the instruction names in the D30V 9700Architecture Manual. However, the names in the manual are sometimes 9701ambiguous. There are instruction names that can assemble to a short or 9702long form opcode. How does the assembler pick the correct form? `as' 9703will always pick the smallest form if it can. When dealing with a 9704symbol that is not defined yet when a line is being assembled, it will 9705always use the long form. If you need to force the assembler to use 9706either the short or long form of the instruction, you can append either 9707`.s' (short) or `.l' (long) to it. For example, if you are writing an 9708assembly program and you want to do a branch to a symbol that is 9709defined later in your program, you can write `bra.s foo'. Objdump and 9710GDB will always append `.s' or `.l' to instructions which have both 9711short and long forms. 9712 9713 9714File: as.info, Node: D30V-Subs, Next: D30V-Chars, Prev: D30V-Size, Up: D30V-Syntax 9715 97169.10.2.2 Sub-Instructions 9717......................... 9718 9719The D30V assembler takes as input a series of instructions, either 9720one-per-line, or in the special two-per-line format described in the 9721next section. Some of these instructions will be short-form or 9722sub-instructions. These sub-instructions can be packed into a single 9723instruction. The assembler will do this automatically. It will also 9724detect when it should not pack instructions. For example, when a label 9725is defined, the next instruction will never be packaged with the 9726previous one. Whenever a branch and link instruction is called, it 9727will not be packaged with the next instruction so the return address 9728will be valid. Nops are automatically inserted when necessary. 9729 9730 If you do not want the assembler automatically making these 9731decisions, you can control the packaging and execution type (parallel 9732or sequential) with the special execution symbols described in the next 9733section. 9734 9735 9736File: as.info, Node: D30V-Chars, Next: D30V-Guarded, Prev: D30V-Subs, Up: D30V-Syntax 9737 97389.10.2.3 Special Characters 9739........................... 9740 9741A semicolon (`;') can be used anywhere on a line to start a comment 9742that extends to the end of the line. 9743 9744 If a `#' appears as the first character of a line, the whole line is 9745treated as a comment, but in this case the line could also be a logical 9746line number directive (*note Comments::) or a preprocessor control 9747command (*note Preprocessing::). 9748 9749 Sub-instructions may be executed in order, in reverse-order, or in 9750parallel. Instructions listed in the standard one-per-line format will 9751be executed sequentially unless you use the `-O' option. 9752 9753 To specify the executing order, use the following symbols: 9754`->' 9755 Sequential with instruction on the left first. 9756 9757`<-' 9758 Sequential with instruction on the right first. 9759 9760`||' 9761 Parallel 9762 9763 The D30V syntax allows either one instruction per line, one 9764instruction per line with the execution symbol, or two instructions per 9765line. For example 9766`abs r2,r3 -> abs r4,r5' 9767 Execute these sequentially. The instruction on the right is in 9768 the right container and is executed second. 9769 9770`abs r2,r3 <- abs r4,r5' 9771 Execute these reverse-sequentially. The instruction on the right 9772 is in the right container, and is executed first. 9773 9774`abs r2,r3 || abs r4,r5' 9775 Execute these in parallel. 9776 9777`ldw r2,@(r3,r4) ||' 9778`mulx r6,r8,r9' 9779 Two-line format. Execute these in parallel. 9780 9781`mulx a0,r8,r9' 9782`stw r2,@(r3,r4)' 9783 Two-line format. Execute these sequentially unless `-O' option is 9784 used. If the `-O' option is used, the assembler will determine if 9785 the instructions could be done in parallel (the above two 9786 instructions can be done in parallel), and if so, emit them as 9787 parallel instructions. The assembler will put them in the proper 9788 containers. In the above example, the assembler will put the 9789 `stw' instruction in left container and the `mulx' instruction in 9790 the right container. 9791 9792`stw r2,@(r3,r4) ->' 9793`mulx a0,r8,r9' 9794 Two-line format. Execute the `stw' instruction followed by the 9795 `mulx' instruction sequentially. The first instruction goes in the 9796 left container and the second instruction goes into right 9797 container. The assembler will give an error if the machine 9798 ordering constraints are violated. 9799 9800`stw r2,@(r3,r4) <-' 9801`mulx a0,r8,r9' 9802 Same as previous example, except that the `mulx' instruction is 9803 executed before the `stw' instruction. 9804 9805 Since `$' has no special meaning, you may use it in symbol names. 9806 9807 9808File: as.info, Node: D30V-Guarded, Next: D30V-Regs, Prev: D30V-Chars, Up: D30V-Syntax 9809 98109.10.2.4 Guarded Execution 9811.......................... 9812 9813`as' supports the full range of guarded execution directives for each 9814instruction. Just append the directive after the instruction proper. 9815The directives are: 9816 9817`/tx' 9818 Execute the instruction if flag f0 is true. 9819 9820`/fx' 9821 Execute the instruction if flag f0 is false. 9822 9823`/xt' 9824 Execute the instruction if flag f1 is true. 9825 9826`/xf' 9827 Execute the instruction if flag f1 is false. 9828 9829`/tt' 9830 Execute the instruction if both flags f0 and f1 are true. 9831 9832`/tf' 9833 Execute the instruction if flag f0 is true and flag f1 is false. 9834 9835 9836File: as.info, Node: D30V-Regs, Next: D30V-Addressing, Prev: D30V-Guarded, Up: D30V-Syntax 9837 98389.10.2.5 Register Names 9839....................... 9840 9841You can use the predefined symbols `r0' through `r63' to refer to the 9842D30V registers. You can also use `sp' as an alias for `r63' and `link' 9843as an alias for `r62'. The accumulators are `a0' and `a1'. 9844 9845 The D30V also has predefined symbols for these control registers and 9846status bits: 9847`psw' 9848 Processor Status Word 9849 9850`bpsw' 9851 Backup Processor Status Word 9852 9853`pc' 9854 Program Counter 9855 9856`bpc' 9857 Backup Program Counter 9858 9859`rpt_c' 9860 Repeat Count 9861 9862`rpt_s' 9863 Repeat Start address 9864 9865`rpt_e' 9866 Repeat End address 9867 9868`mod_s' 9869 Modulo Start address 9870 9871`mod_e' 9872 Modulo End address 9873 9874`iba' 9875 Instruction Break Address 9876 9877`f0' 9878 Flag 0 9879 9880`f1' 9881 Flag 1 9882 9883`f2' 9884 Flag 2 9885 9886`f3' 9887 Flag 3 9888 9889`f4' 9890 Flag 4 9891 9892`f5' 9893 Flag 5 9894 9895`f6' 9896 Flag 6 9897 9898`f7' 9899 Flag 7 9900 9901`s' 9902 Same as flag 4 (saturation flag) 9903 9904`v' 9905 Same as flag 5 (overflow flag) 9906 9907`va' 9908 Same as flag 6 (sticky overflow flag) 9909 9910`c' 9911 Same as flag 7 (carry/borrow flag) 9912 9913`b' 9914 Same as flag 7 (carry/borrow flag) 9915 9916 9917File: as.info, Node: D30V-Addressing, Prev: D30V-Regs, Up: D30V-Syntax 9918 99199.10.2.6 Addressing Modes 9920......................... 9921 9922`as' understands the following addressing modes for the D30V. `RN' in 9923the following refers to any of the numbered registers, but _not_ the 9924control registers. 9925`RN' 9926 Register direct 9927 9928`@RN' 9929 Register indirect 9930 9931`@RN+' 9932 Register indirect with post-increment 9933 9934`@RN-' 9935 Register indirect with post-decrement 9936 9937`@-SP' 9938 Register indirect with pre-decrement 9939 9940`@(DISP, RN)' 9941 Register indirect with displacement 9942 9943`ADDR' 9944 PC relative address (for branch or rep). 9945 9946`#IMM' 9947 Immediate data (the `#' is optional and ignored) 9948 9949 9950File: as.info, Node: D30V-Float, Next: D30V-Opcodes, Prev: D30V-Syntax, Up: D30V-Dependent 9951 99529.10.3 Floating Point 9953--------------------- 9954 9955The D30V has no hardware floating point, but the `.float' and `.double' 9956directives generates IEEE floating-point numbers for compatibility with 9957other development tools. 9958 9959 9960File: as.info, Node: D30V-Opcodes, Prev: D30V-Float, Up: D30V-Dependent 9961 99629.10.4 Opcodes 9963-------------- 9964 9965For detailed information on the D30V machine instruction set, see `D30V 9966Architecture: A VLIW Microprocessor for Multimedia Applications' 9967(Mitsubishi Electric Corp.). `as' implements all the standard D30V 9968opcodes. The only changes are those described in the section on size 9969modifiers 9970 9971 9972File: as.info, Node: Epiphany-Dependent, Next: H8/300-Dependent, Prev: D30V-Dependent, Up: Machine Dependencies 9973 99749.11 Epiphany Dependent Features 9975================================ 9976 9977* Menu: 9978 9979* Epiphany Options:: Options 9980* Epiphany Syntax:: Epiphany Syntax 9981 9982 9983File: as.info, Node: Epiphany Options, Next: Epiphany Syntax, Up: Epiphany-Dependent 9984 99859.11.1 Options 9986-------------- 9987 9988`as' has two additional command-line options for the Epiphany 9989architecture. 9990 9991`-mepiphany' 9992 Specifies that the both 32 and 16 bit instructions are allowed. 9993 This is the default behavior. 9994 9995`-mepiphany16' 9996 Restricts the permitted instructions to just the 16 bit set. 9997 9998 9999File: as.info, Node: Epiphany Syntax, Prev: Epiphany Options, Up: Epiphany-Dependent 10000 100019.11.2 Epiphany Syntax 10002---------------------- 10003 10004* Menu: 10005 10006* Epiphany-Chars:: Special Characters 10007 10008 10009File: as.info, Node: Epiphany-Chars, Up: Epiphany Syntax 10010 100119.11.2.1 Special Characters 10012........................... 10013 10014The presence of a `;' on a line indicates the start of a comment that 10015extends to the end of the current line. 10016 10017 If a `#' appears as the first character of a line then the whole 10018line is treated as a comment, but in this case the line could also be a 10019logical line number directive (*note Comments::) or a preprocessor 10020control command (*note Preprocessing::). 10021 10022 The ``' character can be used to separate statements on the same 10023line. 10024 10025 10026File: as.info, Node: H8/300-Dependent, Next: HPPA-Dependent, Prev: Epiphany-Dependent, Up: Machine Dependencies 10027 100289.12 H8/300 Dependent Features 10029============================== 10030 10031* Menu: 10032 10033* H8/300 Options:: Options 10034* H8/300 Syntax:: Syntax 10035* H8/300 Floating Point:: Floating Point 10036* H8/300 Directives:: H8/300 Machine Directives 10037* H8/300 Opcodes:: Opcodes 10038 10039 10040File: as.info, Node: H8/300 Options, Next: H8/300 Syntax, Up: H8/300-Dependent 10041 100429.12.1 Options 10043-------------- 10044 10045The Renesas H8/300 version of `as' has one machine-dependent option: 10046 10047`-h-tick-hex' 10048 Support H'00 style hex constants in addition to 0x00 style. 10049 10050`-mach=NAME' 10051 Sets the H8300 machine variant. The following machine names are 10052 recognised: `h8300h', `h8300hn', `h8300s', `h8300sn', `h8300sx' and 10053 `h8300sxn'. 10054 10055 10056 10057File: as.info, Node: H8/300 Syntax, Next: H8/300 Floating Point, Prev: H8/300 Options, Up: H8/300-Dependent 10058 100599.12.2 Syntax 10060------------- 10061 10062* Menu: 10063 10064* H8/300-Chars:: Special Characters 10065* H8/300-Regs:: Register Names 10066* H8/300-Addressing:: Addressing Modes 10067 10068 10069File: as.info, Node: H8/300-Chars, Next: H8/300-Regs, Up: H8/300 Syntax 10070 100719.12.2.1 Special Characters 10072........................... 10073 10074`;' is the line comment character. 10075 10076 `$' can be used instead of a newline to separate statements. 10077Therefore _you may not use `$' in symbol names_ on the H8/300. 10078 10079 10080File: as.info, Node: H8/300-Regs, Next: H8/300-Addressing, Prev: H8/300-Chars, Up: H8/300 Syntax 10081 100829.12.2.2 Register Names 10083....................... 10084 10085You can use predefined symbols of the form `rNh' and `rNl' to refer to 10086the H8/300 registers as sixteen 8-bit general-purpose registers. N is 10087a digit from `0' to `7'); for instance, both `r0h' and `r7l' are valid 10088register names. 10089 10090 You can also use the eight predefined symbols `rN' to refer to the 10091H8/300 registers as 16-bit registers (you must use this form for 10092addressing). 10093 10094 On the H8/300H, you can also use the eight predefined symbols `erN' 10095(`er0' ... `er7') to refer to the 32-bit general purpose registers. 10096 10097 The two control registers are called `pc' (program counter; a 16-bit 10098register, except on the H8/300H where it is 24 bits) and `ccr' 10099(condition code register; an 8-bit register). `r7' is used as the 10100stack pointer, and can also be called `sp'. 10101 10102 10103File: as.info, Node: H8/300-Addressing, Prev: H8/300-Regs, Up: H8/300 Syntax 10104 101059.12.2.3 Addressing Modes 10106......................... 10107 10108as understands the following addressing modes for the H8/300: 10109`rN' 10110 Register direct 10111 10112`@rN' 10113 Register indirect 10114 10115`@(D, rN)' 10116`@(D:16, rN)' 10117`@(D:24, rN)' 10118 Register indirect: 16-bit or 24-bit displacement D from register 10119 N. (24-bit displacements are only meaningful on the H8/300H.) 10120 10121`@rN+' 10122 Register indirect with post-increment 10123 10124`@-rN' 10125 Register indirect with pre-decrement 10126 10127``@'AA' 10128``@'AA:8' 10129``@'AA:16' 10130``@'AA:24' 10131 Absolute address `aa'. (The address size `:24' only makes sense 10132 on the H8/300H.) 10133 10134`#XX' 10135`#XX:8' 10136`#XX:16' 10137`#XX:32' 10138 Immediate data XX. You may specify the `:8', `:16', or `:32' for 10139 clarity, if you wish; but `as' neither requires this nor uses 10140 it--the data size required is taken from context. 10141 10142``@'`@'AA' 10143``@'`@'AA:8' 10144 Memory indirect. You may specify the `:8' for clarity, if you 10145 wish; but `as' neither requires this nor uses it. 10146 10147 10148File: as.info, Node: H8/300 Floating Point, Next: H8/300 Directives, Prev: H8/300 Syntax, Up: H8/300-Dependent 10149 101509.12.3 Floating Point 10151--------------------- 10152 10153The H8/300 family has no hardware floating point, but the `.float' 10154directive generates IEEE floating-point numbers for compatibility with 10155other development tools. 10156 10157 10158File: as.info, Node: H8/300 Directives, Next: H8/300 Opcodes, Prev: H8/300 Floating Point, Up: H8/300-Dependent 10159 101609.12.4 H8/300 Machine Directives 10161-------------------------------- 10162 10163`as' has the following machine-dependent directives for the H8/300: 10164 10165`.h8300h' 10166 Recognize and emit additional instructions for the H8/300H 10167 variant, and also make `.int' emit 32-bit numbers rather than the 10168 usual (16-bit) for the H8/300 family. 10169 10170`.h8300s' 10171 Recognize and emit additional instructions for the H8S variant, and 10172 also make `.int' emit 32-bit numbers rather than the usual (16-bit) 10173 for the H8/300 family. 10174 10175`.h8300hn' 10176 Recognize and emit additional instructions for the H8/300H variant 10177 in normal mode, and also make `.int' emit 32-bit numbers rather 10178 than the usual (16-bit) for the H8/300 family. 10179 10180`.h8300sn' 10181 Recognize and emit additional instructions for the H8S variant in 10182 normal mode, and also make `.int' emit 32-bit numbers rather than 10183 the usual (16-bit) for the H8/300 family. 10184 10185 On the H8/300 family (including the H8/300H) `.word' directives 10186generate 16-bit numbers. 10187 10188 10189File: as.info, Node: H8/300 Opcodes, Prev: H8/300 Directives, Up: H8/300-Dependent 10190 101919.12.5 Opcodes 10192-------------- 10193 10194For detailed information on the H8/300 machine instruction set, see 10195`H8/300 Series Programming Manual'. For information specific to the 10196H8/300H, see `H8/300H Series Programming Manual' (Renesas). 10197 10198 `as' implements all the standard H8/300 opcodes. No additional 10199pseudo-instructions are needed on this family. 10200 10201 The following table summarizes the H8/300 opcodes, and their 10202arguments. Entries marked `*' are opcodes used only on the H8/300H. 10203 10204 Legend: 10205 Rs source register 10206 Rd destination register 10207 abs absolute address 10208 imm immediate data 10209 disp:N N-bit displacement from a register 10210 pcrel:N N-bit displacement relative to program counter 10211 10212 add.b #imm,rd * andc #imm,ccr 10213 add.b rs,rd band #imm,rd 10214 add.w rs,rd band #imm,@rd 10215 * add.w #imm,rd band #imm,@abs:8 10216 * add.l rs,rd bra pcrel:8 10217 * add.l #imm,rd * bra pcrel:16 10218 adds #imm,rd bt pcrel:8 10219 addx #imm,rd * bt pcrel:16 10220 addx rs,rd brn pcrel:8 10221 and.b #imm,rd * brn pcrel:16 10222 and.b rs,rd bf pcrel:8 10223 * and.w rs,rd * bf pcrel:16 10224 * and.w #imm,rd bhi pcrel:8 10225 * and.l #imm,rd * bhi pcrel:16 10226 * and.l rs,rd bls pcrel:8 10227 10228 * bls pcrel:16 bld #imm,rd 10229 bcc pcrel:8 bld #imm,@rd 10230 * bcc pcrel:16 bld #imm,@abs:8 10231 bhs pcrel:8 bnot #imm,rd 10232 * bhs pcrel:16 bnot #imm,@rd 10233 bcs pcrel:8 bnot #imm,@abs:8 10234 * bcs pcrel:16 bnot rs,rd 10235 blo pcrel:8 bnot rs,@rd 10236 * blo pcrel:16 bnot rs,@abs:8 10237 bne pcrel:8 bor #imm,rd 10238 * bne pcrel:16 bor #imm,@rd 10239 beq pcrel:8 bor #imm,@abs:8 10240 * beq pcrel:16 bset #imm,rd 10241 bvc pcrel:8 bset #imm,@rd 10242 * bvc pcrel:16 bset #imm,@abs:8 10243 bvs pcrel:8 bset rs,rd 10244 * bvs pcrel:16 bset rs,@rd 10245 bpl pcrel:8 bset rs,@abs:8 10246 * bpl pcrel:16 bsr pcrel:8 10247 bmi pcrel:8 bsr pcrel:16 10248 * bmi pcrel:16 bst #imm,rd 10249 bge pcrel:8 bst #imm,@rd 10250 * bge pcrel:16 bst #imm,@abs:8 10251 blt pcrel:8 btst #imm,rd 10252 * blt pcrel:16 btst #imm,@rd 10253 bgt pcrel:8 btst #imm,@abs:8 10254 * bgt pcrel:16 btst rs,rd 10255 ble pcrel:8 btst rs,@rd 10256 * ble pcrel:16 btst rs,@abs:8 10257 bclr #imm,rd bxor #imm,rd 10258 bclr #imm,@rd bxor #imm,@rd 10259 bclr #imm,@abs:8 bxor #imm,@abs:8 10260 bclr rs,rd cmp.b #imm,rd 10261 bclr rs,@rd cmp.b rs,rd 10262 bclr rs,@abs:8 cmp.w rs,rd 10263 biand #imm,rd cmp.w rs,rd 10264 biand #imm,@rd * cmp.w #imm,rd 10265 biand #imm,@abs:8 * cmp.l #imm,rd 10266 bild #imm,rd * cmp.l rs,rd 10267 bild #imm,@rd daa rs 10268 bild #imm,@abs:8 das rs 10269 bior #imm,rd dec.b rs 10270 bior #imm,@rd * dec.w #imm,rd 10271 bior #imm,@abs:8 * dec.l #imm,rd 10272 bist #imm,rd divxu.b rs,rd 10273 bist #imm,@rd * divxu.w rs,rd 10274 bist #imm,@abs:8 * divxs.b rs,rd 10275 bixor #imm,rd * divxs.w rs,rd 10276 bixor #imm,@rd eepmov 10277 bixor #imm,@abs:8 * eepmovw 10278 10279 * exts.w rd mov.w rs,@abs:16 10280 * exts.l rd * mov.l #imm,rd 10281 * extu.w rd * mov.l rs,rd 10282 * extu.l rd * mov.l @rs,rd 10283 inc rs * mov.l @(disp:16,rs),rd 10284 * inc.w #imm,rd * mov.l @(disp:24,rs),rd 10285 * inc.l #imm,rd * mov.l @rs+,rd 10286 jmp @rs * mov.l @abs:16,rd 10287 jmp abs * mov.l @abs:24,rd 10288 jmp @@abs:8 * mov.l rs,@rd 10289 jsr @rs * mov.l rs,@(disp:16,rd) 10290 jsr abs * mov.l rs,@(disp:24,rd) 10291 jsr @@abs:8 * mov.l rs,@-rd 10292 ldc #imm,ccr * mov.l rs,@abs:16 10293 ldc rs,ccr * mov.l rs,@abs:24 10294 * ldc @abs:16,ccr movfpe @abs:16,rd 10295 * ldc @abs:24,ccr movtpe rs,@abs:16 10296 * ldc @(disp:16,rs),ccr mulxu.b rs,rd 10297 * ldc @(disp:24,rs),ccr * mulxu.w rs,rd 10298 * ldc @rs+,ccr * mulxs.b rs,rd 10299 * ldc @rs,ccr * mulxs.w rs,rd 10300 * mov.b @(disp:24,rs),rd neg.b rs 10301 * mov.b rs,@(disp:24,rd) * neg.w rs 10302 mov.b @abs:16,rd * neg.l rs 10303 mov.b rs,rd nop 10304 mov.b @abs:8,rd not.b rs 10305 mov.b rs,@abs:8 * not.w rs 10306 mov.b rs,rd * not.l rs 10307 mov.b #imm,rd or.b #imm,rd 10308 mov.b @rs,rd or.b rs,rd 10309 mov.b @(disp:16,rs),rd * or.w #imm,rd 10310 mov.b @rs+,rd * or.w rs,rd 10311 mov.b @abs:8,rd * or.l #imm,rd 10312 mov.b rs,@rd * or.l rs,rd 10313 mov.b rs,@(disp:16,rd) orc #imm,ccr 10314 mov.b rs,@-rd pop.w rs 10315 mov.b rs,@abs:8 * pop.l rs 10316 mov.w rs,@rd push.w rs 10317 * mov.w @(disp:24,rs),rd * push.l rs 10318 * mov.w rs,@(disp:24,rd) rotl.b rs 10319 * mov.w @abs:24,rd * rotl.w rs 10320 * mov.w rs,@abs:24 * rotl.l rs 10321 mov.w rs,rd rotr.b rs 10322 mov.w #imm,rd * rotr.w rs 10323 mov.w @rs,rd * rotr.l rs 10324 mov.w @(disp:16,rs),rd rotxl.b rs 10325 mov.w @rs+,rd * rotxl.w rs 10326 mov.w @abs:16,rd * rotxl.l rs 10327 mov.w rs,@(disp:16,rd) rotxr.b rs 10328 mov.w rs,@-rd * rotxr.w rs 10329 10330 * rotxr.l rs * stc ccr,@(disp:24,rd) 10331 bpt * stc ccr,@-rd 10332 rte * stc ccr,@abs:16 10333 rts * stc ccr,@abs:24 10334 shal.b rs sub.b rs,rd 10335 * shal.w rs sub.w rs,rd 10336 * shal.l rs * sub.w #imm,rd 10337 shar.b rs * sub.l rs,rd 10338 * shar.w rs * sub.l #imm,rd 10339 * shar.l rs subs #imm,rd 10340 shll.b rs subx #imm,rd 10341 * shll.w rs subx rs,rd 10342 * shll.l rs * trapa #imm 10343 shlr.b rs xor #imm,rd 10344 * shlr.w rs xor rs,rd 10345 * shlr.l rs * xor.w #imm,rd 10346 sleep * xor.w rs,rd 10347 stc ccr,rd * xor.l #imm,rd 10348 * stc ccr,@rs * xor.l rs,rd 10349 * stc ccr,@(disp:16,rd) xorc #imm,ccr 10350 10351 Four H8/300 instructions (`add', `cmp', `mov', `sub') are defined 10352with variants using the suffixes `.b', `.w', and `.l' to specify the 10353size of a memory operand. `as' supports these suffixes, but does not 10354require them; since one of the operands is always a register, `as' can 10355deduce the correct size. 10356 10357 For example, since `r0' refers to a 16-bit register, 10358 mov r0,@foo 10359is equivalent to 10360 mov.w r0,@foo 10361 10362 If you use the size suffixes, `as' issues a warning when the suffix 10363and the register size do not match. 10364 10365 10366File: as.info, Node: HPPA-Dependent, Next: ESA/390-Dependent, Prev: H8/300-Dependent, Up: Machine Dependencies 10367 103689.13 HPPA Dependent Features 10369============================ 10370 10371* Menu: 10372 10373* HPPA Notes:: Notes 10374* HPPA Options:: Options 10375* HPPA Syntax:: Syntax 10376* HPPA Floating Point:: Floating Point 10377* HPPA Directives:: HPPA Machine Directives 10378* HPPA Opcodes:: Opcodes 10379 10380 10381File: as.info, Node: HPPA Notes, Next: HPPA Options, Up: HPPA-Dependent 10382 103839.13.1 Notes 10384------------ 10385 10386As a back end for GNU CC `as' has been throughly tested and should work 10387extremely well. We have tested it only minimally on hand written 10388assembly code and no one has tested it much on the assembly output from 10389the HP compilers. 10390 10391 The format of the debugging sections has changed since the original 10392`as' port (version 1.3X) was released; therefore, you must rebuild all 10393HPPA objects and libraries with the new assembler so that you can debug 10394the final executable. 10395 10396 The HPPA `as' port generates a small subset of the relocations 10397available in the SOM and ELF object file formats. Additional relocation 10398support will be added as it becomes necessary. 10399 10400 10401File: as.info, Node: HPPA Options, Next: HPPA Syntax, Prev: HPPA Notes, Up: HPPA-Dependent 10402 104039.13.2 Options 10404-------------- 10405 10406`as' has no machine-dependent command-line options for the HPPA. 10407 10408 10409File: as.info, Node: HPPA Syntax, Next: HPPA Floating Point, Prev: HPPA Options, Up: HPPA-Dependent 10410 104119.13.3 Syntax 10412------------- 10413 10414The assembler syntax closely follows the HPPA instruction set reference 10415manual; assembler directives and general syntax closely follow the HPPA 10416assembly language reference manual, with a few noteworthy differences. 10417 10418 First, a colon may immediately follow a label definition. This is 10419simply for compatibility with how most assembly language programmers 10420write code. 10421 10422 Some obscure expression parsing problems may affect hand written 10423code which uses the `spop' instructions, or code which makes significant 10424use of the `!' line separator. 10425 10426 `as' is much less forgiving about missing arguments and other 10427similar oversights than the HP assembler. `as' notifies you of missing 10428arguments as syntax errors; this is regarded as a feature, not a bug. 10429 10430 Finally, `as' allows you to use an external symbol without 10431explicitly importing the symbol. _Warning:_ in the future this will be 10432an error for HPPA targets. 10433 10434 Special characters for HPPA targets include: 10435 10436 `;' is the line comment character. 10437 10438 `!' can be used instead of a newline to separate statements. 10439 10440 Since `$' has no special meaning, you may use it in symbol names. 10441 10442 10443File: as.info, Node: HPPA Floating Point, Next: HPPA Directives, Prev: HPPA Syntax, Up: HPPA-Dependent 10444 104459.13.4 Floating Point 10446--------------------- 10447 10448The HPPA family uses IEEE floating-point numbers. 10449 10450 10451File: as.info, Node: HPPA Directives, Next: HPPA Opcodes, Prev: HPPA Floating Point, Up: HPPA-Dependent 10452 104539.13.5 HPPA Assembler Directives 10454-------------------------------- 10455 10456`as' for the HPPA supports many additional directives for compatibility 10457with the native assembler. This section describes them only briefly. 10458For detailed information on HPPA-specific assembler directives, see 10459`HP9000 Series 800 Assembly Language Reference Manual' (HP 92432-90001). 10460 10461 `as' does _not_ support the following assembler directives described 10462in the HP manual: 10463 10464 .endm .liston 10465 .enter .locct 10466 .leave .macro 10467 .listoff 10468 10469 Beyond those implemented for compatibility, `as' supports one 10470additional assembler directive for the HPPA: `.param'. It conveys 10471register argument locations for static functions. Its syntax closely 10472follows the `.export' directive. 10473 10474 These are the additional directives in `as' for the HPPA: 10475 10476`.block N' 10477`.blockz N' 10478 Reserve N bytes of storage, and initialize them to zero. 10479 10480`.call' 10481 Mark the beginning of a procedure call. Only the special case 10482 with _no arguments_ is allowed. 10483 10484`.callinfo [ PARAM=VALUE, ... ] [ FLAG, ... ]' 10485 Specify a number of parameters and flags that define the 10486 environment for a procedure. 10487 10488 PARAM may be any of `frame' (frame size), `entry_gr' (end of 10489 general register range), `entry_fr' (end of float register range), 10490 `entry_sr' (end of space register range). 10491 10492 The values for FLAG are `calls' or `caller' (proc has 10493 subroutines), `no_calls' (proc does not call subroutines), 10494 `save_rp' (preserve return pointer), `save_sp' (proc preserves 10495 stack pointer), `no_unwind' (do not unwind this proc), `hpux_int' 10496 (proc is interrupt routine). 10497 10498`.code' 10499 Assemble into the standard section called `$TEXT$', subsection 10500 `$CODE$'. 10501 10502`.copyright "STRING"' 10503 In the SOM object format, insert STRING into the object code, 10504 marked as a copyright string. 10505 10506`.copyright "STRING"' 10507 In the ELF object format, insert STRING into the object code, 10508 marked as a version string. 10509 10510`.enter' 10511 Not yet supported; the assembler rejects programs containing this 10512 directive. 10513 10514`.entry' 10515 Mark the beginning of a procedure. 10516 10517`.exit' 10518 Mark the end of a procedure. 10519 10520`.export NAME [ ,TYP ] [ ,PARAM=R ]' 10521 Make a procedure NAME available to callers. TYP, if present, must 10522 be one of `absolute', `code' (ELF only, not SOM), `data', `entry', 10523 `data', `entry', `millicode', `plabel', `pri_prog', or `sec_prog'. 10524 10525 PARAM, if present, provides either relocation information for the 10526 procedure arguments and result, or a privilege level. PARAM may be 10527 `argwN' (where N ranges from `0' to `3', and indicates one of four 10528 one-word arguments); `rtnval' (the procedure's result); or 10529 `priv_lev' (privilege level). For arguments or the result, R 10530 specifies how to relocate, and must be one of `no' (not 10531 relocatable), `gr' (argument is in general register), `fr' (in 10532 floating point register), or `fu' (upper half of float register). 10533 For `priv_lev', R is an integer. 10534 10535`.half N' 10536 Define a two-byte integer constant N; synonym for the portable 10537 `as' directive `.short'. 10538 10539`.import NAME [ ,TYP ]' 10540 Converse of `.export'; make a procedure available to call. The 10541 arguments use the same conventions as the first two arguments for 10542 `.export'. 10543 10544`.label NAME' 10545 Define NAME as a label for the current assembly location. 10546 10547`.leave' 10548 Not yet supported; the assembler rejects programs containing this 10549 directive. 10550 10551`.origin LC' 10552 Advance location counter to LC. Synonym for the `as' portable 10553 directive `.org'. 10554 10555`.param NAME [ ,TYP ] [ ,PARAM=R ]' 10556 Similar to `.export', but used for static procedures. 10557 10558`.proc' 10559 Use preceding the first statement of a procedure. 10560 10561`.procend' 10562 Use following the last statement of a procedure. 10563 10564`LABEL .reg EXPR' 10565 Synonym for `.equ'; define LABEL with the absolute expression EXPR 10566 as its value. 10567 10568`.space SECNAME [ ,PARAMS ]' 10569 Switch to section SECNAME, creating a new section by that name if 10570 necessary. You may only use PARAMS when creating a new section, 10571 not when switching to an existing one. SECNAME may identify a 10572 section by number rather than by name. 10573 10574 If specified, the list PARAMS declares attributes of the section, 10575 identified by keywords. The keywords recognized are `spnum=EXP' 10576 (identify this section by the number EXP, an absolute expression), 10577 `sort=EXP' (order sections according to this sort key when linking; 10578 EXP is an absolute expression), `unloadable' (section contains no 10579 loadable data), `notdefined' (this section defined elsewhere), and 10580 `private' (data in this section not available to other programs). 10581 10582`.spnum SECNAM' 10583 Allocate four bytes of storage, and initialize them with the 10584 section number of the section named SECNAM. (You can define the 10585 section number with the HPPA `.space' directive.) 10586 10587`.string "STR"' 10588 Copy the characters in the string STR to the object file. *Note 10589 Strings: Strings, for information on escape sequences you can use 10590 in `as' strings. 10591 10592 _Warning!_ The HPPA version of `.string' differs from the usual 10593 `as' definition: it does _not_ write a zero byte after copying STR. 10594 10595`.stringz "STR"' 10596 Like `.string', but appends a zero byte after copying STR to object 10597 file. 10598 10599`.subspa NAME [ ,PARAMS ]' 10600`.nsubspa NAME [ ,PARAMS ]' 10601 Similar to `.space', but selects a subsection NAME within the 10602 current section. You may only specify PARAMS when you create a 10603 subsection (in the first instance of `.subspa' for this NAME). 10604 10605 If specified, the list PARAMS declares attributes of the 10606 subsection, identified by keywords. The keywords recognized are 10607 `quad=EXPR' ("quadrant" for this subsection), `align=EXPR' 10608 (alignment for beginning of this subsection; a power of two), 10609 `access=EXPR' (value for "access rights" field), `sort=EXPR' 10610 (sorting order for this subspace in link), `code_only' (subsection 10611 contains only code), `unloadable' (subsection cannot be loaded 10612 into memory), `comdat' (subsection is comdat), `common' 10613 (subsection is common block), `dup_comm' (subsection may have 10614 duplicate names), or `zero' (subsection is all zeros, do not write 10615 in object file). 10616 10617 `.nsubspa' always creates a new subspace with the given name, even 10618 if one with the same name already exists. 10619 10620 `comdat', `common' and `dup_comm' can be used to implement various 10621 flavors of one-only support when using the SOM linker. The SOM 10622 linker only supports specific combinations of these flags. The 10623 details are not documented. A brief description is provided here. 10624 10625 `comdat' provides a form of linkonce support. It is useful for 10626 both code and data subspaces. A `comdat' subspace has a key symbol 10627 marked by the `is_comdat' flag or `ST_COMDAT'. Only the first 10628 subspace for any given key is selected. The key symbol becomes 10629 universal in shared links. This is similar to the behavior of 10630 `secondary_def' symbols. 10631 10632 `common' provides Fortran named common support. It is only useful 10633 for data subspaces. Symbols with the flag `is_common' retain this 10634 flag in shared links. Referencing a `is_common' symbol in a shared 10635 library from outside the library doesn't work. Thus, `is_common' 10636 symbols must be output whenever they are needed. 10637 10638 `common' and `dup_comm' together provide Cobol common support. 10639 The subspaces in this case must all be the same length. 10640 Otherwise, this support is similar to the Fortran common support. 10641 10642 `dup_comm' by itself provides a type of one-only support for code. 10643 Only the first `dup_comm' subspace is selected. There is a rather 10644 complex algorithm to compare subspaces. Code symbols marked with 10645 the `dup_common' flag are hidden. This support was intended for 10646 "C++ duplicate inlines". 10647 10648 A simplified technique is used to mark the flags of symbols based 10649 on the flags of their subspace. A symbol with the scope 10650 SS_UNIVERSAL and type ST_ENTRY, ST_CODE or ST_DATA is marked with 10651 the corresponding settings of `comdat', `common' and `dup_comm' 10652 from the subspace, respectively. This avoids having to introduce 10653 additional directives to mark these symbols. The HP assembler 10654 sets `is_common' from `common'. However, it doesn't set the 10655 `dup_common' from `dup_comm'. It doesn't have `comdat' support. 10656 10657`.version "STR"' 10658 Write STR as version identifier in object code. 10659 10660 10661File: as.info, Node: HPPA Opcodes, Prev: HPPA Directives, Up: HPPA-Dependent 10662 106639.13.6 Opcodes 10664-------------- 10665 10666For detailed information on the HPPA machine instruction set, see 10667`PA-RISC Architecture and Instruction Set Reference Manual' (HP 1066809740-90039). 10669 10670 10671File: as.info, Node: ESA/390-Dependent, Next: i386-Dependent, Prev: HPPA-Dependent, Up: Machine Dependencies 10672 106739.14 ESA/390 Dependent Features 10674=============================== 10675 10676* Menu: 10677 10678* ESA/390 Notes:: Notes 10679* ESA/390 Options:: Options 10680* ESA/390 Syntax:: Syntax 10681* ESA/390 Floating Point:: Floating Point 10682* ESA/390 Directives:: ESA/390 Machine Directives 10683* ESA/390 Opcodes:: Opcodes 10684 10685 10686File: as.info, Node: ESA/390 Notes, Next: ESA/390 Options, Up: ESA/390-Dependent 10687 106889.14.1 Notes 10689------------ 10690 10691The ESA/390 `as' port is currently intended to be a back-end for the 10692GNU CC compiler. It is not HLASM compatible, although it does support 10693a subset of some of the HLASM directives. The only supported binary 10694file format is ELF; none of the usual MVS/VM/OE/USS object file 10695formats, such as ESD or XSD, are supported. 10696 10697 When used with the GNU CC compiler, the ESA/390 `as' will produce 10698correct, fully relocated, functional binaries, and has been used to 10699compile and execute large projects. However, many aspects should still 10700be considered experimental; these include shared library support, 10701dynamically loadable objects, and any relocation other than the 31-bit 10702relocation. 10703 10704 10705File: as.info, Node: ESA/390 Options, Next: ESA/390 Syntax, Prev: ESA/390 Notes, Up: ESA/390-Dependent 10706 107079.14.2 Options 10708-------------- 10709 10710`as' has no machine-dependent command-line options for the ESA/390. 10711 10712 10713File: as.info, Node: ESA/390 Syntax, Next: ESA/390 Floating Point, Prev: ESA/390 Options, Up: ESA/390-Dependent 10714 107159.14.3 Syntax 10716------------- 10717 10718The opcode/operand syntax follows the ESA/390 Principles of Operation 10719manual; assembler directives and general syntax are loosely based on the 10720prevailing AT&T/SVR4/ELF/Solaris style notation. HLASM-style directives 10721are _not_ supported for the most part, with the exception of those 10722described herein. 10723 10724 A leading dot in front of directives is optional, and the case of 10725directives is ignored; thus for example, .using and USING have the same 10726effect. 10727 10728 A colon may immediately follow a label definition. This is simply 10729for compatibility with how most assembly language programmers write 10730code. 10731 10732 `#' is the line comment character. 10733 10734 `;' can be used instead of a newline to separate statements. 10735 10736 Since `$' has no special meaning, you may use it in symbol names. 10737 10738 Registers can be given the symbolic names r0..r15, fp0, fp2, fp4, 10739fp6. By using thesse symbolic names, `as' can detect simple syntax 10740errors. The name rarg or r.arg is a synonym for r11, rtca or r.tca for 10741r12, sp, r.sp, dsa r.dsa for r13, lr or r.lr for r14, rbase or r.base 10742for r3 and rpgt or r.pgt for r4. 10743 10744 `*' is the current location counter. Unlike `.' it is always 10745relative to the last USING directive. Note that this means that 10746expressions cannot use multiplication, as any occurrence of `*' will be 10747interpreted as a location counter. 10748 10749 All labels are relative to the last USING. Thus, branches to a label 10750always imply the use of base+displacement. 10751 10752 Many of the usual forms of address constants / address literals are 10753supported. Thus, 10754 .using *,r3 10755 L r15,=A(some_routine) 10756 LM r6,r7,=V(some_longlong_extern) 10757 A r1,=F'12' 10758 AH r0,=H'42' 10759 ME r6,=E'3.1416' 10760 MD r6,=D'3.14159265358979' 10761 O r6,=XL4'cacad0d0' 10762 .ltorg 10763 should all behave as expected: that is, an entry in the literal pool 10764will be created (or reused if it already exists), and the instruction 10765operands will be the displacement into the literal pool using the 10766current base register (as last declared with the `.using' directive). 10767 10768 10769File: as.info, Node: ESA/390 Floating Point, Next: ESA/390 Directives, Prev: ESA/390 Syntax, Up: ESA/390-Dependent 10770 107719.14.4 Floating Point 10772--------------------- 10773 10774The assembler generates only IEEE floating-point numbers. The older 10775floating point formats are not supported. 10776 10777 10778File: as.info, Node: ESA/390 Directives, Next: ESA/390 Opcodes, Prev: ESA/390 Floating Point, Up: ESA/390-Dependent 10779 107809.14.5 ESA/390 Assembler Directives 10781----------------------------------- 10782 10783`as' for the ESA/390 supports all of the standard ELF/SVR4 assembler 10784directives that are documented in the main part of this documentation. 10785Several additional directives are supported in order to implement the 10786ESA/390 addressing model. The most important of these are `.using' and 10787`.ltorg' 10788 10789 These are the additional directives in `as' for the ESA/390: 10790 10791`.dc' 10792 A small subset of the usual DC directive is supported. 10793 10794`.drop REGNO' 10795 Stop using REGNO as the base register. The REGNO must have been 10796 previously declared with a `.using' directive in the same section 10797 as the current section. 10798 10799`.ebcdic STRING' 10800 Emit the EBCDIC equivalent of the indicated string. The emitted 10801 string will be null terminated. Note that the directives 10802 `.string' etc. emit ascii strings by default. 10803 10804`EQU' 10805 The standard HLASM-style EQU directive is not supported; however, 10806 the standard `as' directive .equ can be used to the same effect. 10807 10808`.ltorg' 10809 Dump the literal pool accumulated so far; begin a new literal pool. 10810 The literal pool will be written in the current section; in order 10811 to generate correct assembly, a `.using' must have been previously 10812 specified in the same section. 10813 10814`.using EXPR,REGNO' 10815 Use REGNO as the base register for all subsequent RX, RS, and SS 10816 form instructions. The EXPR will be evaluated to obtain the base 10817 address; usually, EXPR will merely be `*'. 10818 10819 This assembler allows two `.using' directives to be simultaneously 10820 outstanding, one in the `.text' section, and one in another section 10821 (typically, the `.data' section). This feature allows dynamically 10822 loaded objects to be implemented in a relatively straightforward 10823 way. A `.using' directive must always be specified in the `.text' 10824 section; this will specify the base register that will be used for 10825 branches in the `.text' section. A second `.using' may be 10826 specified in another section; this will specify the base register 10827 that is used for non-label address literals. When a second 10828 `.using' is specified, then the subsequent `.ltorg' must be put in 10829 the same section; otherwise an error will result. 10830 10831 Thus, for example, the following code uses `r3' to address branch 10832 targets and `r4' to address the literal pool, which has been 10833 written to the `.data' section. The is, the constants 10834 `=A(some_routine)', `=H'42'' and `=E'3.1416'' will all appear in 10835 the `.data' section. 10836 10837 .data 10838 .using LITPOOL,r4 10839 .text 10840 BASR r3,0 10841 .using *,r3 10842 B START 10843 .long LITPOOL 10844 START: 10845 L r4,4(,r3) 10846 L r15,=A(some_routine) 10847 LTR r15,r15 10848 BNE LABEL 10849 AH r0,=H'42' 10850 LABEL: 10851 ME r6,=E'3.1416' 10852 .data 10853 LITPOOL: 10854 .ltorg 10855 10856 Note that this dual-`.using' directive semantics extends and is 10857 not compatible with HLASM semantics. Note that this assembler 10858 directive does not support the full range of HLASM semantics. 10859 10860 10861 10862File: as.info, Node: ESA/390 Opcodes, Prev: ESA/390 Directives, Up: ESA/390-Dependent 10863 108649.14.6 Opcodes 10865-------------- 10866 10867For detailed information on the ESA/390 machine instruction set, see 10868`ESA/390 Principles of Operation' (IBM Publication Number DZ9AR004). 10869 10870 10871File: as.info, Node: i386-Dependent, Next: i860-Dependent, Prev: ESA/390-Dependent, Up: Machine Dependencies 10872 108739.15 80386 Dependent Features 10874============================= 10875 10876 The i386 version `as' supports both the original Intel 386 10877architecture in both 16 and 32-bit mode as well as AMD x86-64 10878architecture extending the Intel architecture to 64-bits. 10879 10880* Menu: 10881 10882* i386-Options:: Options 10883* i386-Directives:: X86 specific directives 10884* i386-Syntax:: Syntactical considerations 10885* i386-Mnemonics:: Instruction Naming 10886* i386-Regs:: Register Naming 10887* i386-Prefixes:: Instruction Prefixes 10888* i386-Memory:: Memory References 10889* i386-Jumps:: Handling of Jump Instructions 10890* i386-Float:: Floating Point 10891* i386-SIMD:: Intel's MMX and AMD's 3DNow! SIMD Operations 10892* i386-LWP:: AMD's Lightweight Profiling Instructions 10893* i386-BMI:: Bit Manipulation Instruction 10894* i386-TBM:: AMD's Trailing Bit Manipulation Instructions 10895* i386-16bit:: Writing 16-bit Code 10896* i386-Arch:: Specifying an x86 CPU architecture 10897* i386-Bugs:: AT&T Syntax bugs 10898* i386-Notes:: Notes 10899 10900 10901File: as.info, Node: i386-Options, Next: i386-Directives, Up: i386-Dependent 10902 109039.15.1 Options 10904-------------- 10905 10906The i386 version of `as' has a few machine dependent options: 10907 10908`--32 | --x32 | --64' 10909 Select the word size, either 32 bits or 64 bits. `--32' implies 10910 Intel i386 architecture, while `--x32' and `--64' imply AMD x86-64 10911 architecture with 32-bit or 64-bit word-size respectively. 10912 10913 These options are only available with the ELF object file format, 10914 and require that the necessary BFD support has been included (on a 10915 32-bit platform you have to add -enable-64-bit-bfd to configure 10916 enable 64-bit usage and use x86-64 as target platform). 10917 10918`-n' 10919 By default, x86 GAS replaces multiple nop instructions used for 10920 alignment within code sections with multi-byte nop instructions 10921 such as leal 0(%esi,1),%esi. This switch disables the 10922 optimization. 10923 10924`--divide' 10925 On SVR4-derived platforms, the character `/' is treated as a 10926 comment character, which means that it cannot be used in 10927 expressions. The `--divide' option turns `/' into a normal 10928 character. This does not disable `/' at the beginning of a line 10929 starting a comment, or affect using `#' for starting a comment. 10930 10931`-march=CPU[+EXTENSION...]' 10932 This option specifies the target processor. The assembler will 10933 issue an error message if an attempt is made to assemble an 10934 instruction which will not execute on the target processor. The 10935 following processor names are recognized: `i8086', `i186', `i286', 10936 `i386', `i486', `i586', `i686', `pentium', `pentiumpro', 10937 `pentiumii', `pentiumiii', `pentium4', `prescott', `nocona', 10938 `core', `core2', `corei7', `l1om', `k1om', `iamcu', `k6', `k6_2', 10939 `athlon', `opteron', `k8', `amdfam10', `bdver1', `bdver2', 10940 `bdver3', `bdver4', `znver1', `btver1', `btver2', `generic32' and 10941 `generic64'. 10942 10943 In addition to the basic instruction set, the assembler can be 10944 told to accept various extension mnemonics. For example, 10945 `-march=i686+sse4+vmx' extends I686 with SSE4 and VMX. The 10946 following extensions are currently supported: `8087', `287', `387', 10947 `687', `no87', `no287', `no387', `no687', `mmx', `nommx', `sse', 10948 `sse2', `sse3', `ssse3', `sse4.1', `sse4.2', `sse4', `nosse', 10949 `nosse2', `nosse3', `nossse3', `nosse4.1', `nosse4.2', `nosse4', 10950 `avx', `avx2', `noavx', `noavx2', `adx', `rdseed', `prfchw', 10951 `smap', `mpx', `sha', `rdpid', `prefetchwt1', `clflushopt', `se1', 10952 `clwb', `pcommit', `avx512f', `avx512cd', `avx512er', `avx512pf', 10953 `avx512vl', `avx512bw', `avx512dq', `avx512ifma', `avx512vbmi', 10954 `noavx512f', `noavx512cd', `noavx512er', `noavx512pf', 10955 `noavx512vl', `noavx512bw', `noavx512dq', `noavx512ifma', 10956 `noavx512vbmi', `vmx', `vmfunc', `smx', `xsave', `xsaveopt', 10957 `xsavec', `xsaves', `aes', `pclmul', `fsgsbase', `rdrnd', `f16c', 10958 `bmi2', `fma', `movbe', `ept', `lzcnt', `hle', `rtm', `invpcid', 10959 `clflush', `mwaitx', `clzero', `lwp', `fma4', `xop', `cx16', 10960 `syscall', `rdtscp', `3dnow', `3dnowa', `sse4a', `sse5', `svme', 10961 `abm' and `padlock'. Note that rather than extending a basic 10962 instruction set, the extension mnemonics starting with `no' revoke 10963 the respective functionality. 10964 10965 When the `.arch' directive is used with `-march', the `.arch' 10966 directive will take precedent. 10967 10968`-mtune=CPU' 10969 This option specifies a processor to optimize for. When used in 10970 conjunction with the `-march' option, only instructions of the 10971 processor specified by the `-march' option will be generated. 10972 10973 Valid CPU values are identical to the processor list of 10974 `-march=CPU'. 10975 10976`-msse2avx' 10977 This option specifies that the assembler should encode SSE 10978 instructions with VEX prefix. 10979 10980`-msse-check=NONE' 10981`-msse-check=WARNING' 10982`-msse-check=ERROR' 10983 These options control if the assembler should check SSE 10984 instructions. `-msse-check=NONE' will make the assembler not to 10985 check SSE instructions, which is the default. 10986 `-msse-check=WARNING' will make the assembler issue a warning for 10987 any SSE instruction. `-msse-check=ERROR' will make the assembler 10988 issue an error for any SSE instruction. 10989 10990`-mavxscalar=128' 10991`-mavxscalar=256' 10992 These options control how the assembler should encode scalar AVX 10993 instructions. `-mavxscalar=128' will encode scalar AVX 10994 instructions with 128bit vector length, which is the default. 10995 `-mavxscalar=256' will encode scalar AVX instructions with 256bit 10996 vector length. 10997 10998`-mevexlig=128' 10999`-mevexlig=256' 11000`-mevexlig=512' 11001 These options control how the assembler should encode 11002 length-ignored (LIG) EVEX instructions. `-mevexlig=128' will 11003 encode LIG EVEX instructions with 128bit vector length, which is 11004 the default. `-mevexlig=256' and `-mevexlig=512' will encode LIG 11005 EVEX instructions with 256bit and 512bit vector length, 11006 respectively. 11007 11008`-mevexwig=0' 11009`-mevexwig=1' 11010 These options control how the assembler should encode w-ignored 11011 (WIG) EVEX instructions. `-mevexwig=0' will encode WIG EVEX 11012 instructions with evex.w = 0, which is the default. `-mevexwig=1' 11013 will encode WIG EVEX instructions with evex.w = 1. 11014 11015`-mmnemonic=ATT' 11016`-mmnemonic=INTEL' 11017 This option specifies instruction mnemonic for matching 11018 instructions. The `.att_mnemonic' and `.intel_mnemonic' 11019 directives will take precedent. 11020 11021`-msyntax=ATT' 11022`-msyntax=INTEL' 11023 This option specifies instruction syntax when processing 11024 instructions. The `.att_syntax' and `.intel_syntax' directives 11025 will take precedent. 11026 11027`-mnaked-reg' 11028 This opetion specifies that registers don't require a `%' prefix. 11029 The `.att_syntax' and `.intel_syntax' directives will take 11030 precedent. 11031 11032`-madd-bnd-prefix' 11033 This option forces the assembler to add BND prefix to all 11034 branches, even if such prefix was not explicitly specified in the 11035 source code. 11036 11037`-mno-shared' 11038 On ELF target, the assembler normally optimizes out non-PLT 11039 relocations against defined non-weak global branch targets with 11040 default visibility. The `-mshared' option tells the assembler to 11041 generate code which may go into a shared library where all 11042 non-weak global branch targets with default visibility can be 11043 preempted. The resulting code is slightly bigger. This option 11044 only affects the handling of branch instructions. 11045 11046`-mbig-obj' 11047 On x86-64 PE/COFF target this option forces the use of big object 11048 file format, which allows more than 32768 sections. 11049 11050`-momit-lock-prefix=NO' 11051`-momit-lock-prefix=YES' 11052 These options control how the assembler should encode lock prefix. 11053 This option is intended as a workaround for processors, that fail 11054 on lock prefix. This option can only be safely used with 11055 single-core, single-thread computers `-momit-lock-prefix=YES' will 11056 omit all lock prefixes. `-momit-lock-prefix=NO' will encode lock 11057 prefix as usual, which is the default. 11058 11059`-mfence-as-lock-add=NO' 11060`-mfence-as-lock-add=YES' 11061 These options control how the assembler should encode lfence, 11062 mfence and sfence. `-mfence-as-lock-add=YES' will encode lfence, 11063 mfence and sfence as `lock addl $0x0, (%rsp)' in 64-bit mode and 11064 `lock addl $0x0, (%esp)' in 32-bit mode. `-mfence-as-lock-add=NO' 11065 will encode lfence, mfence and sfence as usual, which is the 11066 default. 11067 11068`-mrelax-relocations=NO' 11069`-mrelax-relocations=YES' 11070 These options control whether the assembler should generate relax 11071 relocations, R_386_GOT32X, in 32-bit mode, or R_X86_64_GOTPCRELX 11072 and R_X86_64_REX_GOTPCRELX, in 64-bit mode. 11073 `-mrelax-relocations=YES' will generate relax relocations. 11074 `-mrelax-relocations=NO' will not generate relax relocations. The 11075 default can be controlled by a configure option 11076 `--enable-x86-relax-relocations'. 11077 11078`-mevexrcig=RNE' 11079`-mevexrcig=RD' 11080`-mevexrcig=RU' 11081`-mevexrcig=RZ' 11082 These options control how the assembler should encode SAE-only 11083 EVEX instructions. `-mevexrcig=RNE' will encode RC bits of EVEX 11084 instruction with 00, which is the default. `-mevexrcig=RD', 11085 `-mevexrcig=RU' and `-mevexrcig=RZ' will encode SAE-only EVEX 11086 instructions with 01, 10 and 11 RC bits, respectively. 11087 11088`-mamd64' 11089`-mintel64' 11090 This option specifies that the assembler should accept only AMD64 11091 or Intel64 ISA in 64-bit mode. The default is to accept both. 11092 11093 11094 11095File: as.info, Node: i386-Directives, Next: i386-Syntax, Prev: i386-Options, Up: i386-Dependent 11096 110979.15.2 x86 specific Directives 11098------------------------------ 11099 11100`.lcomm SYMBOL , LENGTH[, ALIGNMENT]' 11101 Reserve LENGTH (an absolute expression) bytes for a local common 11102 denoted by SYMBOL. The section and value of SYMBOL are those of 11103 the new local common. The addresses are allocated in the bss 11104 section, so that at run-time the bytes start off zeroed. Since 11105 SYMBOL is not declared global, it is normally not visible to `ld'. 11106 The optional third parameter, ALIGNMENT, specifies the desired 11107 alignment of the symbol in the bss section. 11108 11109 This directive is only available for COFF based x86 targets. 11110 11111 11112 11113File: as.info, Node: i386-Syntax, Next: i386-Mnemonics, Prev: i386-Directives, Up: i386-Dependent 11114 111159.15.3 i386 Syntactical Considerations 11116-------------------------------------- 11117 11118* Menu: 11119 11120* i386-Variations:: AT&T Syntax versus Intel Syntax 11121* i386-Chars:: Special Characters 11122 11123 11124File: as.info, Node: i386-Variations, Next: i386-Chars, Up: i386-Syntax 11125 111269.15.3.1 AT&T Syntax versus Intel Syntax 11127........................................ 11128 11129`as' now supports assembly using Intel assembler syntax. 11130`.intel_syntax' selects Intel mode, and `.att_syntax' switches back to 11131the usual AT&T mode for compatibility with the output of `gcc'. Either 11132of these directives may have an optional argument, `prefix', or 11133`noprefix' specifying whether registers require a `%' prefix. AT&T 11134System V/386 assembler syntax is quite different from Intel syntax. We 11135mention these differences because almost all 80386 documents use Intel 11136syntax. Notable differences between the two syntaxes are: 11137 11138 * AT&T immediate operands are preceded by `$'; Intel immediate 11139 operands are undelimited (Intel `push 4' is AT&T `pushl $4'). 11140 AT&T register operands are preceded by `%'; Intel register operands 11141 are undelimited. AT&T absolute (as opposed to PC relative) 11142 jump/call operands are prefixed by `*'; they are undelimited in 11143 Intel syntax. 11144 11145 * AT&T and Intel syntax use the opposite order for source and 11146 destination operands. Intel `add eax, 4' is `addl $4, %eax'. The 11147 `source, dest' convention is maintained for compatibility with 11148 previous Unix assemblers. Note that `bound', `invlpga', and 11149 instructions with 2 immediate operands, such as the `enter' 11150 instruction, do _not_ have reversed order. *Note i386-Bugs::. 11151 11152 * In AT&T syntax the size of memory operands is determined from the 11153 last character of the instruction mnemonic. Mnemonic suffixes of 11154 `b', `w', `l' and `q' specify byte (8-bit), word (16-bit), long 11155 (32-bit) and quadruple word (64-bit) memory references. Intel 11156 syntax accomplishes this by prefixing memory operands (_not_ the 11157 instruction mnemonics) with `byte ptr', `word ptr', `dword ptr' 11158 and `qword ptr'. Thus, Intel `mov al, byte ptr FOO' is `movb FOO, 11159 %al' in AT&T syntax. 11160 11161 In 64-bit code, `movabs' can be used to encode the `mov' 11162 instruction with the 64-bit displacement or immediate operand. 11163 11164 * Immediate form long jumps and calls are `lcall/ljmp $SECTION, 11165 $OFFSET' in AT&T syntax; the Intel syntax is `call/jmp far 11166 SECTION:OFFSET'. Also, the far return instruction is `lret 11167 $STACK-ADJUST' in AT&T syntax; Intel syntax is `ret far 11168 STACK-ADJUST'. 11169 11170 * The AT&T assembler does not provide support for multiple section 11171 programs. Unix style systems expect all programs to be single 11172 sections. 11173 11174 11175File: as.info, Node: i386-Chars, Prev: i386-Variations, Up: i386-Syntax 11176 111779.15.3.2 Special Characters 11178........................... 11179 11180The presence of a `#' appearing anywhere on a line indicates the start 11181of a comment that extends to the end of that line. 11182 11183 If a `#' appears as the first character of a line then the whole 11184line is treated as a comment, but in this case the line can also be a 11185logical line number directive (*note Comments::) or a preprocessor 11186control command (*note Preprocessing::). 11187 11188 If the `--divide' command line option has not been specified then 11189the `/' character appearing anywhere on a line also introduces a line 11190comment. 11191 11192 The `;' character can be used to separate statements on the same 11193line. 11194 11195 11196File: as.info, Node: i386-Mnemonics, Next: i386-Regs, Prev: i386-Syntax, Up: i386-Dependent 11197 111989.15.4 i386-Mnemonics 11199--------------------- 11200 112019.15.4.1 Instruction Naming 11202........................... 11203 11204Instruction mnemonics are suffixed with one character modifiers which 11205specify the size of operands. The letters `b', `w', `l' and `q' 11206specify byte, word, long and quadruple word operands. If no suffix is 11207specified by an instruction then `as' tries to fill in the missing 11208suffix based on the destination register operand (the last one by 11209convention). Thus, `mov %ax, %bx' is equivalent to `movw %ax, %bx'; 11210also, `mov $1, %bx' is equivalent to `movw $1, bx'. Note that this is 11211incompatible with the AT&T Unix assembler which assumes that a missing 11212mnemonic suffix implies long operand size. (This incompatibility does 11213not affect compiler output since compilers always explicitly specify 11214the mnemonic suffix.) 11215 11216 Almost all instructions have the same names in AT&T and Intel format. 11217There are a few exceptions. The sign extend and zero extend 11218instructions need two sizes to specify them. They need a size to 11219sign/zero extend _from_ and a size to zero extend _to_. This is 11220accomplished by using two instruction mnemonic suffixes in AT&T syntax. 11221Base names for sign extend and zero extend are `movs...' and `movz...' 11222in AT&T syntax (`movsx' and `movzx' in Intel syntax). The instruction 11223mnemonic suffixes are tacked on to this base name, the _from_ suffix 11224before the _to_ suffix. Thus, `movsbl %al, %edx' is AT&T syntax for 11225"move sign extend _from_ %al _to_ %edx." Possible suffixes, thus, are 11226`bl' (from byte to long), `bw' (from byte to word), `wl' (from word to 11227long), `bq' (from byte to quadruple word), `wq' (from word to quadruple 11228word), and `lq' (from long to quadruple word). 11229 11230 Different encoding options can be specified via optional mnemonic 11231suffix. `.s' suffix swaps 2 register operands in encoding when moving 11232from one register to another. `.d8' or `.d32' suffix prefers 8bit or 1123332bit displacement in encoding. 11234 11235 The Intel-syntax conversion instructions 11236 11237 * `cbw' -- sign-extend byte in `%al' to word in `%ax', 11238 11239 * `cwde' -- sign-extend word in `%ax' to long in `%eax', 11240 11241 * `cwd' -- sign-extend word in `%ax' to long in `%dx:%ax', 11242 11243 * `cdq' -- sign-extend dword in `%eax' to quad in `%edx:%eax', 11244 11245 * `cdqe' -- sign-extend dword in `%eax' to quad in `%rax' (x86-64 11246 only), 11247 11248 * `cqo' -- sign-extend quad in `%rax' to octuple in `%rdx:%rax' 11249 (x86-64 only), 11250 11251are called `cbtw', `cwtl', `cwtd', `cltd', `cltq', and `cqto' in AT&T 11252naming. `as' accepts either naming for these instructions. 11253 11254 Far call/jump instructions are `lcall' and `ljmp' in AT&T syntax, 11255but are `call far' and `jump far' in Intel convention. 11256 112579.15.4.2 AT&T Mnemonic versus Intel Mnemonic 11258............................................ 11259 11260`as' supports assembly using Intel mnemonic. `.intel_mnemonic' selects 11261Intel mnemonic with Intel syntax, and `.att_mnemonic' switches back to 11262the usual AT&T mnemonic with AT&T syntax for compatibility with the 11263output of `gcc'. Several x87 instructions, `fadd', `fdiv', `fdivp', 11264`fdivr', `fdivrp', `fmul', `fsub', `fsubp', `fsubr' and `fsubrp', are 11265implemented in AT&T System V/386 assembler with different mnemonics 11266from those in Intel IA32 specification. `gcc' generates those 11267instructions with AT&T mnemonic. 11268 11269 11270File: as.info, Node: i386-Regs, Next: i386-Prefixes, Prev: i386-Mnemonics, Up: i386-Dependent 11271 112729.15.5 Register Naming 11273---------------------- 11274 11275Register operands are always prefixed with `%'. The 80386 registers 11276consist of 11277 11278 * the 8 32-bit registers `%eax' (the accumulator), `%ebx', `%ecx', 11279 `%edx', `%edi', `%esi', `%ebp' (the frame pointer), and `%esp' 11280 (the stack pointer). 11281 11282 * the 8 16-bit low-ends of these: `%ax', `%bx', `%cx', `%dx', `%di', 11283 `%si', `%bp', and `%sp'. 11284 11285 * the 8 8-bit registers: `%ah', `%al', `%bh', `%bl', `%ch', `%cl', 11286 `%dh', and `%dl' (These are the high-bytes and low-bytes of `%ax', 11287 `%bx', `%cx', and `%dx') 11288 11289 * the 6 section registers `%cs' (code section), `%ds' (data 11290 section), `%ss' (stack section), `%es', `%fs', and `%gs'. 11291 11292 * the 5 processor control registers `%cr0', `%cr2', `%cr3', `%cr4', 11293 and `%cr8'. 11294 11295 * the 6 debug registers `%db0', `%db1', `%db2', `%db3', `%db6', and 11296 `%db7'. 11297 11298 * the 2 test registers `%tr6' and `%tr7'. 11299 11300 * the 8 floating point register stack `%st' or equivalently 11301 `%st(0)', `%st(1)', `%st(2)', `%st(3)', `%st(4)', `%st(5)', 11302 `%st(6)', and `%st(7)'. These registers are overloaded by 8 MMX 11303 registers `%mm0', `%mm1', `%mm2', `%mm3', `%mm4', `%mm5', `%mm6' 11304 and `%mm7'. 11305 11306 * the 8 128-bit SSE registers registers `%xmm0', `%xmm1', `%xmm2', 11307 `%xmm3', `%xmm4', `%xmm5', `%xmm6' and `%xmm7'. 11308 11309 The AMD x86-64 architecture extends the register set by: 11310 11311 * enhancing the 8 32-bit registers to 64-bit: `%rax' (the 11312 accumulator), `%rbx', `%rcx', `%rdx', `%rdi', `%rsi', `%rbp' (the 11313 frame pointer), `%rsp' (the stack pointer) 11314 11315 * the 8 extended registers `%r8'-`%r15'. 11316 11317 * the 8 32-bit low ends of the extended registers: `%r8d'-`%r15d'. 11318 11319 * the 8 16-bit low ends of the extended registers: `%r8w'-`%r15w'. 11320 11321 * the 8 8-bit low ends of the extended registers: `%r8b'-`%r15b'. 11322 11323 * the 4 8-bit registers: `%sil', `%dil', `%bpl', `%spl'. 11324 11325 * the 8 debug registers: `%db8'-`%db15'. 11326 11327 * the 8 128-bit SSE registers: `%xmm8'-`%xmm15'. 11328 11329 With the AVX extensions more registers were made available: 11330 11331 * the 16 256-bit SSE `%ymm0'-`%ymm15' (only the first 8 available in 11332 32-bit mode). The bottom 128 bits are overlaid with the 11333 `xmm0'-`xmm15' registers. 11334 11335 11336 The AVX2 extensions made in 64-bit mode more registers available: 11337 11338 * the 16 128-bit registers `%xmm16'-`%xmm31' and the 16 256-bit 11339 registers `%ymm16'-`%ymm31'. 11340 11341 11342 The AVX512 extensions added the following registers: 11343 11344 * the 32 512-bit registers `%zmm0'-`%zmm31' (only the first 8 11345 available in 32-bit mode). The bottom 128 bits are overlaid with 11346 the `%xmm0'-`%xmm31' registers and the first 256 bits are overlaid 11347 with the `%ymm0'-`%ymm31' registers. 11348 11349 * the 8 mask registers `%k0'-`%k7'. 11350 11351 11352 11353File: as.info, Node: i386-Prefixes, Next: i386-Memory, Prev: i386-Regs, Up: i386-Dependent 11354 113559.15.6 Instruction Prefixes 11356--------------------------- 11357 11358Instruction prefixes are used to modify the following instruction. They 11359are used to repeat string instructions, to provide section overrides, to 11360perform bus lock operations, and to change operand and address sizes. 11361(Most instructions that normally operate on 32-bit operands will use 1136216-bit operands if the instruction has an "operand size" prefix.) 11363Instruction prefixes are best written on the same line as the 11364instruction they act upon. For example, the `scas' (scan string) 11365instruction is repeated with: 11366 11367 repne scas %es:(%edi),%al 11368 11369 You may also place prefixes on the lines immediately preceding the 11370instruction, but this circumvents checks that `as' does with prefixes, 11371and will not work with all prefixes. 11372 11373 Here is a list of instruction prefixes: 11374 11375 * Section override prefixes `cs', `ds', `ss', `es', `fs', `gs'. 11376 These are automatically added by specifying using the 11377 SECTION:MEMORY-OPERAND form for memory references. 11378 11379 * Operand/Address size prefixes `data16' and `addr16' change 32-bit 11380 operands/addresses into 16-bit operands/addresses, while `data32' 11381 and `addr32' change 16-bit ones (in a `.code16' section) into 11382 32-bit operands/addresses. These prefixes _must_ appear on the 11383 same line of code as the instruction they modify. For example, in 11384 a 16-bit `.code16' section, you might write: 11385 11386 addr32 jmpl *(%ebx) 11387 11388 * The bus lock prefix `lock' inhibits interrupts during execution of 11389 the instruction it precedes. (This is only valid with certain 11390 instructions; see a 80386 manual for details). 11391 11392 * The wait for coprocessor prefix `wait' waits for the coprocessor to 11393 complete the current instruction. This should never be needed for 11394 the 80386/80387 combination. 11395 11396 * The `rep', `repe', and `repne' prefixes are added to string 11397 instructions to make them repeat `%ecx' times (`%cx' times if the 11398 current address size is 16-bits). 11399 11400 * The `rex' family of prefixes is used by x86-64 to encode 11401 extensions to i386 instruction set. The `rex' prefix has four 11402 bits -- an operand size overwrite (`64') used to change operand 11403 size from 32-bit to 64-bit and X, Y and Z extensions bits used to 11404 extend the register set. 11405 11406 You may write the `rex' prefixes directly. The `rex64xyz' 11407 instruction emits `rex' prefix with all the bits set. By omitting 11408 the `64', `x', `y' or `z' you may write other prefixes as well. 11409 Normally, there is no need to write the prefixes explicitly, since 11410 gas will automatically generate them based on the instruction 11411 operands. 11412 11413 11414File: as.info, Node: i386-Memory, Next: i386-Jumps, Prev: i386-Prefixes, Up: i386-Dependent 11415 114169.15.7 Memory References 11417------------------------ 11418 11419An Intel syntax indirect memory reference of the form 11420 11421 SECTION:[BASE + INDEX*SCALE + DISP] 11422 11423is translated into the AT&T syntax 11424 11425 SECTION:DISP(BASE, INDEX, SCALE) 11426 11427where BASE and INDEX are the optional 32-bit base and index registers, 11428DISP is the optional displacement, and SCALE, taking the values 1, 2, 114294, and 8, multiplies INDEX to calculate the address of the operand. If 11430no SCALE is specified, SCALE is taken to be 1. SECTION specifies the 11431optional section register for the memory operand, and may override the 11432default section register (see a 80386 manual for section register 11433defaults). Note that section overrides in AT&T syntax _must_ be 11434preceded by a `%'. If you specify a section override which coincides 11435with the default section register, `as' does _not_ output any section 11436register override prefixes to assemble the given instruction. Thus, 11437section overrides can be specified to emphasize which section register 11438is used for a given memory operand. 11439 11440 Here are some examples of Intel and AT&T style memory references: 11441 11442AT&T: `-4(%ebp)', Intel: `[ebp - 4]' 11443 BASE is `%ebp'; DISP is `-4'. SECTION is missing, and the default 11444 section is used (`%ss' for addressing with `%ebp' as the base 11445 register). INDEX, SCALE are both missing. 11446 11447AT&T: `foo(,%eax,4)', Intel: `[foo + eax*4]' 11448 INDEX is `%eax' (scaled by a SCALE 4); DISP is `foo'. All other 11449 fields are missing. The section register here defaults to `%ds'. 11450 11451AT&T: `foo(,1)'; Intel `[foo]' 11452 This uses the value pointed to by `foo' as a memory operand. Note 11453 that BASE and INDEX are both missing, but there is only _one_ `,'. 11454 This is a syntactic exception. 11455 11456AT&T: `%gs:foo'; Intel `gs:foo' 11457 This selects the contents of the variable `foo' with section 11458 register SECTION being `%gs'. 11459 11460 Absolute (as opposed to PC relative) call and jump operands must be 11461prefixed with `*'. If no `*' is specified, `as' always chooses PC 11462relative addressing for jump/call labels. 11463 11464 Any instruction that has a memory operand, but no register operand, 11465_must_ specify its size (byte, word, long, or quadruple) with an 11466instruction mnemonic suffix (`b', `w', `l' or `q', respectively). 11467 11468 The x86-64 architecture adds an RIP (instruction pointer relative) 11469addressing. This addressing mode is specified by using `rip' as a base 11470register. Only constant offsets are valid. For example: 11471 11472AT&T: `1234(%rip)', Intel: `[rip + 1234]' 11473 Points to the address 1234 bytes past the end of the current 11474 instruction. 11475 11476AT&T: `symbol(%rip)', Intel: `[rip + symbol]' 11477 Points to the `symbol' in RIP relative way, this is shorter than 11478 the default absolute addressing. 11479 11480 Other addressing modes remain unchanged in x86-64 architecture, 11481except registers used are 64-bit instead of 32-bit. 11482 11483 11484File: as.info, Node: i386-Jumps, Next: i386-Float, Prev: i386-Memory, Up: i386-Dependent 11485 114869.15.8 Handling of Jump Instructions 11487------------------------------------ 11488 11489Jump instructions are always optimized to use the smallest possible 11490displacements. This is accomplished by using byte (8-bit) displacement 11491jumps whenever the target is sufficiently close. If a byte displacement 11492is insufficient a long displacement is used. We do not support word 11493(16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump 11494instruction with the `data16' instruction prefix), since the 80386 11495insists upon masking `%eip' to 16 bits after the word displacement is 11496added. (See also *note i386-Arch::) 11497 11498 Note that the `jcxz', `jecxz', `loop', `loopz', `loope', `loopnz' 11499and `loopne' instructions only come in byte displacements, so that if 11500you use these instructions (`gcc' does not use them) you may get an 11501error message (and incorrect code). The AT&T 80386 assembler tries to 11502get around this problem by expanding `jcxz foo' to 11503 11504 jcxz cx_zero 11505 jmp cx_nonzero 11506 cx_zero: jmp foo 11507 cx_nonzero: 11508 11509 11510File: as.info, Node: i386-Float, Next: i386-SIMD, Prev: i386-Jumps, Up: i386-Dependent 11511 115129.15.9 Floating Point 11513--------------------- 11514 11515All 80387 floating point types except packed BCD are supported. (BCD 11516support may be added without much difficulty). These data types are 1151716-, 32-, and 64- bit integers, and single (32-bit), double (64-bit), 11518and extended (80-bit) precision floating point. Each supported type 11519has an instruction mnemonic suffix and a constructor associated with 11520it. Instruction mnemonic suffixes specify the operand's data type. 11521Constructors build these data types into memory. 11522 11523 * Floating point constructors are `.float' or `.single', `.double', 11524 and `.tfloat' for 32-, 64-, and 80-bit formats. These correspond 11525 to instruction mnemonic suffixes `s', `l', and `t'. `t' stands for 11526 80-bit (ten byte) real. The 80387 only supports this format via 11527 the `fldt' (load 80-bit real to stack top) and `fstpt' (store 11528 80-bit real and pop stack) instructions. 11529 11530 * Integer constructors are `.word', `.long' or `.int', and `.quad' 11531 for the 16-, 32-, and 64-bit integer formats. The corresponding 11532 instruction mnemonic suffixes are `s' (single), `l' (long), and 11533 `q' (quad). As with the 80-bit real format, the 64-bit `q' format 11534 is only present in the `fildq' (load quad integer to stack top) 11535 and `fistpq' (store quad integer and pop stack) instructions. 11536 11537 Register to register operations should not use instruction mnemonic 11538suffixes. `fstl %st, %st(1)' will give a warning, and be assembled as 11539if you wrote `fst %st, %st(1)', since all register to register 11540operations use 80-bit floating point operands. (Contrast this with 11541`fstl %st, mem', which converts `%st' from 80-bit to 64-bit floating 11542point format, then stores the result in the 4 byte location `mem') 11543 11544 11545File: as.info, Node: i386-SIMD, Next: i386-LWP, Prev: i386-Float, Up: i386-Dependent 11546 115479.15.10 Intel's MMX and AMD's 3DNow! SIMD Operations 11548---------------------------------------------------- 11549 11550`as' supports Intel's MMX instruction set (SIMD instructions for 11551integer data), available on Intel's Pentium MMX processors and Pentium 11552II processors, AMD's K6 and K6-2 processors, Cyrix' M2 processor, and 11553probably others. It also supports AMD's 3DNow! instruction set (SIMD 11554instructions for 32-bit floating point data) available on AMD's K6-2 11555processor and possibly others in the future. 11556 11557 Currently, `as' does not support Intel's floating point SIMD, Katmai 11558(KNI). 11559 11560 The eight 64-bit MMX operands, also used by 3DNow!, are called 11561`%mm0', `%mm1', ... `%mm7'. They contain eight 8-bit integers, four 1156216-bit integers, two 32-bit integers, one 64-bit integer, or two 32-bit 11563floating point values. The MMX registers cannot be used at the same 11564time as the floating point stack. 11565 11566 See Intel and AMD documentation, keeping in mind that the operand 11567order in instructions is reversed from the Intel syntax. 11568 11569 11570File: as.info, Node: i386-LWP, Next: i386-BMI, Prev: i386-SIMD, Up: i386-Dependent 11571 115729.15.11 AMD's Lightweight Profiling Instructions 11573------------------------------------------------ 11574 11575`as' supports AMD's Lightweight Profiling (LWP) instruction set, 11576available on AMD's Family 15h (Orochi) processors. 11577 11578 LWP enables applications to collect and manage performance data, and 11579react to performance events. The collection of performance data 11580requires no context switches. LWP runs in the context of a thread and 11581so several counters can be used independently across multiple threads. 11582LWP can be used in both 64-bit and legacy 32-bit modes. 11583 11584 For detailed information on the LWP instruction set, see the `AMD 11585Lightweight Profiling Specification' available at Lightweight Profiling 11586Specification (http://developer.amd.com/cpu/LWP). 11587 11588 11589File: as.info, Node: i386-BMI, Next: i386-TBM, Prev: i386-LWP, Up: i386-Dependent 11590 115919.15.12 Bit Manipulation Instructions 11592------------------------------------- 11593 11594`as' supports the Bit Manipulation (BMI) instruction set. 11595 11596 BMI instructions provide several instructions implementing individual 11597bit manipulation operations such as isolation, masking, setting, or 11598resetting. 11599 11600 11601File: as.info, Node: i386-TBM, Next: i386-16bit, Prev: i386-BMI, Up: i386-Dependent 11602 116039.15.13 AMD's Trailing Bit Manipulation Instructions 11604---------------------------------------------------- 11605 11606`as' supports AMD's Trailing Bit Manipulation (TBM) instruction set, 11607available on AMD's BDVER2 processors (Trinity and Viperfish). 11608 11609 TBM instructions provide instructions implementing individual bit 11610manipulation operations such as isolating, masking, setting, resetting, 11611complementing, and operations on trailing zeros and ones. 11612 11613 11614File: as.info, Node: i386-16bit, Next: i386-Arch, Prev: i386-TBM, Up: i386-Dependent 11615 116169.15.14 Writing 16-bit Code 11617--------------------------- 11618 11619While `as' normally writes only "pure" 32-bit i386 code or 64-bit 11620x86-64 code depending on the default configuration, it also supports 11621writing code to run in real mode or in 16-bit protected mode code 11622segments. To do this, put a `.code16' or `.code16gcc' directive before 11623the assembly language instructions to be run in 16-bit mode. You can 11624switch `as' to writing 32-bit code with the `.code32' directive or 1162564-bit code with the `.code64' directive. 11626 11627 `.code16gcc' provides experimental support for generating 16-bit 11628code from gcc, and differs from `.code16' in that `call', `ret', 11629`enter', `leave', `push', `pop', `pusha', `popa', `pushf', and `popf' 11630instructions default to 32-bit size. This is so that the stack pointer 11631is manipulated in the same way over function calls, allowing access to 11632function parameters at the same stack offsets as in 32-bit mode. 11633`.code16gcc' also automatically adds address size prefixes where 11634necessary to use the 32-bit addressing modes that gcc generates. 11635 11636 The code which `as' generates in 16-bit mode will not necessarily 11637run on a 16-bit pre-80386 processor. To write code that runs on such a 11638processor, you must refrain from using _any_ 32-bit constructs which 11639require `as' to output address or operand size prefixes. 11640 11641 Note that writing 16-bit code instructions by explicitly specifying a 11642prefix or an instruction mnemonic suffix within a 32-bit code section 11643generates different machine instructions than those generated for a 1164416-bit code segment. In a 32-bit code section, the following code 11645generates the machine opcode bytes `66 6a 04', which pushes the value 11646`4' onto the stack, decrementing `%esp' by 2. 11647 11648 pushw $4 11649 11650 The same code in a 16-bit code section would generate the machine 11651opcode bytes `6a 04' (i.e., without the operand size prefix), which is 11652correct since the processor default operand size is assumed to be 16 11653bits in a 16-bit code section. 11654 11655 11656File: as.info, Node: i386-Arch, Next: i386-Bugs, Prev: i386-16bit, Up: i386-Dependent 11657 116589.15.15 Specifying CPU Architecture 11659----------------------------------- 11660 11661`as' may be told to assemble for a particular CPU (sub-)architecture 11662with the `.arch CPU_TYPE' directive. This directive enables a warning 11663when gas detects an instruction that is not supported on the CPU 11664specified. The choices for CPU_TYPE are: 11665 11666`i8086' `i186' `i286' `i386' 11667`i486' `i586' `i686' `pentium' 11668`pentiumpro' `pentiumii' `pentiumiii' `pentium4' 11669`prescott' `nocona' `core' `core2' 11670`corei7' `l1om' `k1om' `iamcu' 11671`k6' `k6_2' `athlon' `k8' 11672`amdfam10' `bdver1' `bdver2' `bdver3' 11673`bdver4' `znver1' `btver1' `btver2' 11674`generic32' `generic64' 11675`.mmx' `.sse' `.sse2' `.sse3' 11676`.ssse3' `.sse4.1' `.sse4.2' `.sse4' 11677`.avx' `.vmx' `.smx' `.ept' 11678`.clflush' `.movbe' `.xsave' `.xsaveopt' 11679`.aes' `.pclmul' `.fma' `.fsgsbase' 11680`.rdrnd' `.f16c' `.avx2' `.bmi2' 11681`.lzcnt' `.invpcid' `.vmfunc' `.hle' 11682`.rtm' `.adx' `.rdseed' `.prfchw' 11683`.smap' `.mpx' `.sha' `.prefetchwt1' 11684`.clflushopt' `.xsavec' `.xsaves' `.se1' 11685`.avx512f' `.avx512cd' `.avx512er' `.avx512pf' 11686`.avx512vl' `.avx512bw' `.avx512dq' `.avx512ifma' 11687`.avx512vbmi' `.clwb' `.pcommit' 11688`.3dnow' `.3dnowa' `.sse4a' `.sse5' 11689`.syscall' `.rdtscp' `.svme' `.abm' 11690`.lwp' `.fma4' `.xop' `.cx16' 11691`.padlock' `.clzero' `.mwaitx' `.rdpid' 11692 11693 Apart from the warning, there are only two other effects on `as' 11694operation; Firstly, if you specify a CPU other than `i486', then shift 11695by one instructions such as `sarl $1, %eax' will automatically use a 11696two byte opcode sequence. The larger three byte opcode sequence is 11697used on the 486 (and when no architecture is specified) because it 11698executes faster on the 486. Note that you can explicitly request the 11699two byte opcode by writing `sarl %eax'. Secondly, if you specify 11700`i8086', `i186', or `i286', _and_ `.code16' or `.code16gcc' then byte 11701offset conditional jumps will be promoted when necessary to a two 11702instruction sequence consisting of a conditional jump of the opposite 11703sense around an unconditional jump to the target. 11704 11705 Following the CPU architecture (but not a sub-architecture, which 11706are those starting with a dot), you may specify `jumps' or `nojumps' to 11707control automatic promotion of conditional jumps. `jumps' is the 11708default, and enables jump promotion; All external jumps will be of the 11709long variety, and file-local jumps will be promoted as necessary. 11710(*note i386-Jumps::) `nojumps' leaves external conditional jumps as 11711byte offset jumps, and warns about file-local conditional jumps that 11712`as' promotes. Unconditional jumps are treated as for `jumps'. 11713 11714 For example 11715 11716 .arch i8086,nojumps 11717 11718 11719File: as.info, Node: i386-Bugs, Next: i386-Notes, Prev: i386-Arch, Up: i386-Dependent 11720 117219.15.16 AT&T Syntax bugs 11722------------------------ 11723 11724The UnixWare assembler, and probably other AT&T derived ix86 Unix 11725assemblers, generate floating point instructions with reversed source 11726and destination registers in certain cases. Unfortunately, gcc and 11727possibly many other programs use this reversed syntax, so we're stuck 11728with it. 11729 11730 For example 11731 11732 fsub %st,%st(3) 11733 results in `%st(3)' being updated to `%st - %st(3)' rather than the 11734expected `%st(3) - %st'. This happens with all the non-commutative 11735arithmetic floating point operations with two register operands where 11736the source register is `%st' and the destination register is `%st(i)'. 11737 11738 11739File: as.info, Node: i386-Notes, Prev: i386-Bugs, Up: i386-Dependent 11740 117419.15.17 Notes 11742------------- 11743 11744There is some trickery concerning the `mul' and `imul' instructions 11745that deserves mention. The 16-, 32-, 64- and 128-bit expanding 11746multiplies (base opcode `0xf6'; extension 4 for `mul' and 5 for `imul') 11747can be output only in the one operand form. Thus, `imul %ebx, %eax' 11748does _not_ select the expanding multiply; the expanding multiply would 11749clobber the `%edx' register, and this would confuse `gcc' output. Use 11750`imul %ebx' to get the 64-bit product in `%edx:%eax'. 11751 11752 We have added a two operand form of `imul' when the first operand is 11753an immediate mode expression and the second operand is a register. 11754This is just a shorthand, so that, multiplying `%eax' by 69, for 11755example, can be done with `imul $69, %eax' rather than `imul $69, %eax, 11756%eax'. 11757 11758 11759File: as.info, Node: i860-Dependent, Next: i960-Dependent, Prev: i386-Dependent, Up: Machine Dependencies 11760 117619.16 Intel i860 Dependent Features 11762================================== 11763 11764* Menu: 11765 11766* Notes-i860:: i860 Notes 11767* Options-i860:: i860 Command-line Options 11768* Directives-i860:: i860 Machine Directives 11769* Opcodes for i860:: i860 Opcodes 11770* Syntax of i860:: i860 Syntax 11771 11772 11773File: as.info, Node: Notes-i860, Next: Options-i860, Up: i860-Dependent 11774 117759.16.1 i860 Notes 11776----------------- 11777 11778This is a fairly complete i860 assembler which is compatible with the 11779UNIX System V/860 Release 4 assembler. However, it does not currently 11780support SVR4 PIC (i.e., `@GOT, @GOTOFF, @PLT'). 11781 11782 Like the SVR4/860 assembler, the output object format is ELF32. 11783Currently, this is the only supported object format. If there is 11784sufficient interest, other formats such as COFF may be implemented. 11785 11786 Both the Intel and AT&T/SVR4 syntaxes are supported, with the latter 11787being the default. One difference is that AT&T syntax requires the '%' 11788prefix on register names while Intel syntax does not. Another 11789difference is in the specification of relocatable expressions. The 11790Intel syntax is `ha%expression' whereas the SVR4 syntax is 11791`[expression]@ha' (and similarly for the "l" and "h" selectors). 11792 11793 11794File: as.info, Node: Options-i860, Next: Directives-i860, Prev: Notes-i860, Up: i860-Dependent 11795 117969.16.2 i860 Command-line Options 11797-------------------------------- 11798 117999.16.2.1 SVR4 compatibility options 11800................................... 11801 11802`-V' 11803 Print assembler version. 11804 11805`-Qy' 11806 Ignored. 11807 11808`-Qn' 11809 Ignored. 11810 118119.16.2.2 Other options 11812...................... 11813 11814`-EL' 11815 Select little endian output (this is the default). 11816 11817`-EB' 11818 Select big endian output. Note that the i860 always reads 11819 instructions as little endian data, so this option only effects 11820 data and not instructions. 11821 11822`-mwarn-expand' 11823 Emit a warning message if any pseudo-instruction expansions 11824 occurred. For example, a `or' instruction with an immediate 11825 larger than 16-bits will be expanded into two instructions. This 11826 is a very undesirable feature to rely on, so this flag can help 11827 detect any code where it happens. One use of it, for instance, has 11828 been to find and eliminate any place where `gcc' may emit these 11829 pseudo-instructions. 11830 11831`-mxp' 11832 Enable support for the i860XP instructions and control registers. 11833 By default, this option is disabled so that only the base 11834 instruction set (i.e., i860XR) is supported. 11835 11836`-mintel-syntax' 11837 The i860 assembler defaults to AT&T/SVR4 syntax. This option 11838 enables the Intel syntax. 11839 11840 11841File: as.info, Node: Directives-i860, Next: Opcodes for i860, Prev: Options-i860, Up: i860-Dependent 11842 118439.16.3 i860 Machine Directives 11844------------------------------ 11845 11846`.dual' 11847 Enter dual instruction mode. While this directive is supported, the 11848 preferred way to use dual instruction mode is to explicitly code 11849 the dual bit with the `d.' prefix. 11850 11851`.enddual' 11852 Exit dual instruction mode. While this directive is supported, the 11853 preferred way to use dual instruction mode is to explicitly code 11854 the dual bit with the `d.' prefix. 11855 11856`.atmp' 11857 Change the temporary register used when expanding pseudo 11858 operations. The default register is `r31'. 11859 11860 The `.dual', `.enddual', and `.atmp' directives are available only 11861in the Intel syntax mode. 11862 11863 Both syntaxes allow for the standard `.align' directive. However, 11864the Intel syntax additionally allows keywords for the alignment 11865parameter: "`.align type'", where `type' is one of `.short', `.long', 11866`.quad', `.single', `.double' representing alignments of 2, 4, 16, 4, 11867and 8, respectively. 11868 11869 11870File: as.info, Node: Opcodes for i860, Next: Syntax of i860, Prev: Directives-i860, Up: i860-Dependent 11871 118729.16.4 i860 Opcodes 11873------------------- 11874 11875All of the Intel i860XR and i860XP machine instructions are supported. 11876Please see either _i860 Microprocessor Programmer's Reference Manual_ 11877or _i860 Microprocessor Architecture_ for more information. 11878 118799.16.4.1 Other instruction support (pseudo-instructions) 11880........................................................ 11881 11882For compatibility with some other i860 assemblers, a number of 11883pseudo-instructions are supported. While these are supported, they are 11884a very undesirable feature that should be avoided - in particular, when 11885they result in an expansion to multiple actual i860 instructions. Below 11886are the pseudo-instructions that result in expansions. 11887 * Load large immediate into general register: 11888 11889 The pseudo-instruction `mov imm,%rn' (where the immediate does not 11890 fit within a signed 16-bit field) will be expanded into: 11891 orh large_imm@h,%r0,%rn 11892 or large_imm@l,%rn,%rn 11893 11894 * Load/store with relocatable address expression: 11895 11896 For example, the pseudo-instruction `ld.b addr_exp(%rx),%rn' will 11897 be expanded into: 11898 orh addr_exp@ha,%rx,%r31 11899 ld.l addr_exp@l(%r31),%rn 11900 11901 The analogous expansions apply to `ld.x, st.x, fld.x, pfld.x, 11902 fst.x', and `pst.x' as well. 11903 11904 * Signed large immediate with add/subtract: 11905 11906 If any of the arithmetic operations `adds, addu, subs, subu' are 11907 used with an immediate larger than 16-bits (signed), then they 11908 will be expanded. For instance, the pseudo-instruction `adds 11909 large_imm,%rx,%rn' expands to: 11910 orh large_imm@h,%r0,%r31 11911 or large_imm@l,%r31,%r31 11912 adds %r31,%rx,%rn 11913 11914 * Unsigned large immediate with logical operations: 11915 11916 Logical operations (`or, andnot, or, xor') also result in 11917 expansions. The pseudo-instruction `or large_imm,%rx,%rn' results 11918 in: 11919 orh large_imm@h,%rx,%r31 11920 or large_imm@l,%r31,%rn 11921 11922 Similarly for the others, except for `and' which expands to: 11923 andnot (-1 - large_imm)@h,%rx,%r31 11924 andnot (-1 - large_imm)@l,%r31,%rn 11925 11926 11927File: as.info, Node: Syntax of i860, Prev: Opcodes for i860, Up: i860-Dependent 11928 119299.16.5 i860 Syntax 11930------------------ 11931 11932* Menu: 11933 11934* i860-Chars:: Special Characters 11935 11936 11937File: as.info, Node: i860-Chars, Up: Syntax of i860 11938 119399.16.5.1 Special Characters 11940........................... 11941 11942The presence of a `#' appearing anywhere on a line indicates the start 11943of a comment that extends to the end of that line. 11944 11945 If a `#' appears as the first character of a line then the whole 11946line is treated as a comment, but in this case the line can also be a 11947logical line number directive (*note Comments::) or a preprocessor 11948control command (*note Preprocessing::). 11949 11950 The `;' character can be used to separate statements on the same 11951line. 11952 11953 11954File: as.info, Node: i960-Dependent, Next: IA-64-Dependent, Prev: i860-Dependent, Up: Machine Dependencies 11955 119569.17 Intel 80960 Dependent Features 11957=================================== 11958 11959* Menu: 11960 11961* Options-i960:: i960 Command-line Options 11962* Floating Point-i960:: Floating Point 11963* Directives-i960:: i960 Machine Directives 11964* Opcodes for i960:: i960 Opcodes 11965* Syntax of i960:: i960 Syntax 11966 11967 11968File: as.info, Node: Options-i960, Next: Floating Point-i960, Up: i960-Dependent 11969 119709.17.1 i960 Command-line Options 11971-------------------------------- 11972 11973`-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC' 11974 Select the 80960 architecture. Instructions or features not 11975 supported by the selected architecture cause fatal errors. 11976 11977 `-ACA' is equivalent to `-ACA_A'; `-AKC' is equivalent to `-AMC'. 11978 Synonyms are provided for compatibility with other tools. 11979 11980 If you do not specify any of these options, `as' generates code 11981 for any instruction or feature that is supported by _some_ version 11982 of the 960 (even if this means mixing architectures!). In 11983 principle, `as' attempts to deduce the minimal sufficient 11984 processor type if none is specified; depending on the object code 11985 format, the processor type may be recorded in the object file. If 11986 it is critical that the `as' output match a specific architecture, 11987 specify that architecture explicitly. 11988 11989`-b' 11990 Add code to collect information about conditional branches taken, 11991 for later optimization using branch prediction bits. (The 11992 conditional branch instructions have branch prediction bits in the 11993 CA, CB, and CC architectures.) If BR represents a conditional 11994 branch instruction, the following represents the code generated by 11995 the assembler when `-b' is specified: 11996 11997 call INCREMENT ROUTINE 11998 .word 0 # pre-counter 11999 Label: BR 12000 call INCREMENT ROUTINE 12001 .word 0 # post-counter 12002 12003 The counter following a branch records the number of times that 12004 branch was _not_ taken; the difference between the two counters is 12005 the number of times the branch _was_ taken. 12006 12007 A table of every such `Label' is also generated, so that the 12008 external postprocessor `gbr960' (supplied by Intel) can locate all 12009 the counters. This table is always labeled `__BRANCH_TABLE__'; 12010 this is a local symbol to permit collecting statistics for many 12011 separate object files. The table is word aligned, and begins with 12012 a two-word header. The first word, initialized to 0, is used in 12013 maintaining linked lists of branch tables. The second word is a 12014 count of the number of entries in the table, which follow 12015 immediately: each is a word, pointing to one of the labels 12016 illustrated above. 12017 12018 +------------+------------+------------+ ... +------------+ 12019 | | | | | | 12020 | *NEXT | COUNT: N | *BRLAB 1 | | *BRLAB N | 12021 | | | | | | 12022 +------------+------------+------------+ ... +------------+ 12023 12024 __BRANCH_TABLE__ layout 12025 12026 The first word of the header is used to locate multiple branch 12027 tables, since each object file may contain one. Normally the links 12028 are maintained with a call to an initialization routine, placed at 12029 the beginning of each function in the file. The GNU C compiler 12030 generates these calls automatically when you give it a `-b' option. 12031 For further details, see the documentation of `gbr960'. 12032 12033`-no-relax' 12034 Normally, Compare-and-Branch instructions with targets that require 12035 displacements greater than 13 bits (or that have external targets) 12036 are replaced with the corresponding compare (or `chkbit') and 12037 branch instructions. You can use the `-no-relax' option to 12038 specify that `as' should generate errors instead, if the target 12039 displacement is larger than 13 bits. 12040 12041 This option does not affect the Compare-and-Jump instructions; the 12042 code emitted for them is _always_ adjusted when necessary 12043 (depending on displacement size), regardless of whether you use 12044 `-no-relax'. 12045 12046 12047File: as.info, Node: Floating Point-i960, Next: Directives-i960, Prev: Options-i960, Up: i960-Dependent 12048 120499.17.2 Floating Point 12050--------------------- 12051 12052`as' generates IEEE floating-point numbers for the directives `.float', 12053`.double', `.extended', and `.single'. 12054 12055 12056File: as.info, Node: Directives-i960, Next: Opcodes for i960, Prev: Floating Point-i960, Up: i960-Dependent 12057 120589.17.3 i960 Machine Directives 12059------------------------------ 12060 12061`.bss SYMBOL, LENGTH, ALIGN' 12062 Reserve LENGTH bytes in the bss section for a local SYMBOL, 12063 aligned to the power of two specified by ALIGN. LENGTH and ALIGN 12064 must be positive absolute expressions. This directive differs 12065 from `.lcomm' only in that it permits you to specify an alignment. 12066 *Note `.lcomm': Lcomm. 12067 12068`.extended FLONUMS' 12069 `.extended' expects zero or more flonums, separated by commas; for 12070 each flonum, `.extended' emits an IEEE extended-format (80-bit) 12071 floating-point number. 12072 12073`.leafproc CALL-LAB, BAL-LAB' 12074 You can use the `.leafproc' directive in conjunction with the 12075 optimized `callj' instruction to enable faster calls of leaf 12076 procedures. If a procedure is known to call no other procedures, 12077 you may define an entry point that skips procedure prolog code 12078 (and that does not depend on system-supplied saved context), and 12079 declare it as the BAL-LAB using `.leafproc'. If the procedure 12080 also has an entry point that goes through the normal prolog, you 12081 can specify that entry point as CALL-LAB. 12082 12083 A `.leafproc' declaration is meant for use in conjunction with the 12084 optimized call instruction `callj'; the directive records the data 12085 needed later to choose between converting the `callj' into a `bal' 12086 or a `call'. 12087 12088 CALL-LAB is optional; if only one argument is present, or if the 12089 two arguments are identical, the single argument is assumed to be 12090 the `bal' entry point. 12091 12092`.sysproc NAME, INDEX' 12093 The `.sysproc' directive defines a name for a system procedure. 12094 After you define it using `.sysproc', you can use NAME to refer to 12095 the system procedure identified by INDEX when calling procedures 12096 with the optimized call instruction `callj'. 12097 12098 Both arguments are required; INDEX must be between 0 and 31 12099 (inclusive). 12100 12101 12102File: as.info, Node: Opcodes for i960, Next: Syntax of i960, Prev: Directives-i960, Up: i960-Dependent 12103 121049.17.4 i960 Opcodes 12105------------------- 12106 12107All Intel 960 machine instructions are supported; *note i960 12108Command-line Options: Options-i960. for a discussion of selecting the 12109instruction subset for a particular 960 architecture. 12110 12111 Some opcodes are processed beyond simply emitting a single 12112corresponding instruction: `callj', and Compare-and-Branch or 12113Compare-and-Jump instructions with target displacements larger than 13 12114bits. 12115 12116* Menu: 12117 12118* callj-i960:: `callj' 12119* Compare-and-branch-i960:: Compare-and-Branch 12120 12121 12122File: as.info, Node: callj-i960, Next: Compare-and-branch-i960, Up: Opcodes for i960 12123 121249.17.4.1 `callj' 12125................ 12126 12127You can write `callj' to have the assembler or the linker determine the 12128most appropriate form of subroutine call: `call', `bal', or `calls'. 12129If the assembly source contains enough information--a `.leafproc' or 12130`.sysproc' directive defining the operand--then `as' translates the 12131`callj'; if not, it simply emits the `callj', leaving it for the linker 12132to resolve. 12133 12134 12135File: as.info, Node: Compare-and-branch-i960, Prev: callj-i960, Up: Opcodes for i960 12136 121379.17.4.2 Compare-and-Branch 12138........................... 12139 12140The 960 architectures provide combined Compare-and-Branch instructions 12141that permit you to store the branch target in the lower 13 bits of the 12142instruction word itself. However, if you specify a branch target far 12143enough away that its address won't fit in 13 bits, the assembler can 12144either issue an error, or convert your Compare-and-Branch instruction 12145into separate instructions to do the compare and the branch. 12146 12147 Whether `as' gives an error or expands the instruction depends on 12148two choices you can make: whether you use the `-no-relax' option, and 12149whether you use a "Compare and Branch" instruction or a "Compare and 12150Jump" instruction. The "Jump" instructions are _always_ expanded if 12151necessary; the "Branch" instructions are expanded when necessary 12152_unless_ you specify `-no-relax'--in which case `as' gives an error 12153instead. 12154 12155 These are the Compare-and-Branch instructions, their "Jump" variants, 12156and the instruction pairs they may expand into: 12157 12158 Compare and 12159 Branch Jump Expanded to 12160 ------ ------ ------------ 12161 bbc chkbit; bno 12162 bbs chkbit; bo 12163 cmpibe cmpije cmpi; be 12164 cmpibg cmpijg cmpi; bg 12165 cmpibge cmpijge cmpi; bge 12166 cmpibl cmpijl cmpi; bl 12167 cmpible cmpijle cmpi; ble 12168 cmpibno cmpijno cmpi; bno 12169 cmpibne cmpijne cmpi; bne 12170 cmpibo cmpijo cmpi; bo 12171 cmpobe cmpoje cmpo; be 12172 cmpobg cmpojg cmpo; bg 12173 cmpobge cmpojge cmpo; bge 12174 cmpobl cmpojl cmpo; bl 12175 cmpoble cmpojle cmpo; ble 12176 cmpobne cmpojne cmpo; bne 12177 12178 12179File: as.info, Node: Syntax of i960, Prev: Opcodes for i960, Up: i960-Dependent 12180 121819.17.5 Syntax for the i960 12182-------------------------- 12183 12184* Menu: 12185 12186* i960-Chars:: Special Characters 12187 12188 12189File: as.info, Node: i960-Chars, Up: Syntax of i960 12190 121919.17.5.1 Special Characters 12192........................... 12193 12194The presence of a `#' on a line indicates the start of a comment that 12195extends to the end of the current line. 12196 12197 If a `#' appears as the first character of a line, the whole line is 12198treated as a comment, but in this case the line can also be a logical 12199line number directive (*note Comments::) or a preprocessor control 12200command (*note Preprocessing::). 12201 12202 The `;' character can be used to separate statements on the same 12203line. 12204 12205 12206File: as.info, Node: IA-64-Dependent, Next: IP2K-Dependent, Prev: i960-Dependent, Up: Machine Dependencies 12207 122089.18 IA-64 Dependent Features 12209============================= 12210 12211* Menu: 12212 12213* IA-64 Options:: Options 12214* IA-64 Syntax:: Syntax 12215* IA-64 Opcodes:: Opcodes 12216 12217 12218File: as.info, Node: IA-64 Options, Next: IA-64 Syntax, Up: IA-64-Dependent 12219 122209.18.1 Options 12221-------------- 12222 12223`-mconstant-gp' 12224 This option instructs the assembler to mark the resulting object 12225 file as using the "constant GP" model. With this model, it is 12226 assumed that the entire program uses a single global pointer (GP) 12227 value. Note that this option does not in any fashion affect the 12228 machine code emitted by the assembler. All it does is turn on the 12229 EF_IA_64_CONS_GP flag in the ELF file header. 12230 12231`-mauto-pic' 12232 This option instructs the assembler to mark the resulting object 12233 file as using the "constant GP without function descriptor" data 12234 model. This model is like the "constant GP" model, except that it 12235 additionally does away with function descriptors. What this means 12236 is that the address of a function refers directly to the 12237 function's code entry-point. Normally, such an address would 12238 refer to a function descriptor, which contains both the code 12239 entry-point and the GP-value needed by the function. Note that 12240 this option does not in any fashion affect the machine code 12241 emitted by the assembler. All it does is turn on the 12242 EF_IA_64_NOFUNCDESC_CONS_GP flag in the ELF file header. 12243 12244`-milp32' 12245`-milp64' 12246`-mlp64' 12247`-mp64' 12248 These options select the data model. The assembler defaults to 12249 `-mlp64' (LP64 data model). 12250 12251`-mle' 12252`-mbe' 12253 These options select the byte order. The `-mle' option selects 12254 little-endian byte order (default) and `-mbe' selects big-endian 12255 byte order. Note that IA-64 machine code always uses 12256 little-endian byte order. 12257 12258`-mtune=itanium1' 12259`-mtune=itanium2' 12260 Tune for a particular IA-64 CPU, ITANIUM1 or ITANIUM2. The default 12261 is ITANIUM2. 12262 12263`-munwind-check=warning' 12264`-munwind-check=error' 12265 These options control what the assembler will do when performing 12266 consistency checks on unwind directives. `-munwind-check=warning' 12267 will make the assembler issue a warning when an unwind directive 12268 check fails. This is the default. `-munwind-check=error' will 12269 make the assembler issue an error when an unwind directive check 12270 fails. 12271 12272`-mhint.b=ok' 12273`-mhint.b=warning' 12274`-mhint.b=error' 12275 These options control what the assembler will do when the `hint.b' 12276 instruction is used. `-mhint.b=ok' will make the assembler accept 12277 `hint.b'. `-mint.b=warning' will make the assembler issue a 12278 warning when `hint.b' is used. `-mhint.b=error' will make the 12279 assembler treat `hint.b' as an error, which is the default. 12280 12281`-x' 12282`-xexplicit' 12283 These options turn on dependency violation checking. 12284 12285`-xauto' 12286 This option instructs the assembler to automatically insert stop 12287 bits where necessary to remove dependency violations. This is the 12288 default mode. 12289 12290`-xnone' 12291 This option turns off dependency violation checking. 12292 12293`-xdebug' 12294 This turns on debug output intended to help tracking down bugs in 12295 the dependency violation checker. 12296 12297`-xdebugn' 12298 This is a shortcut for -xnone -xdebug. 12299 12300`-xdebugx' 12301 This is a shortcut for -xexplicit -xdebug. 12302 12303 12304 12305File: as.info, Node: IA-64 Syntax, Next: IA-64 Opcodes, Prev: IA-64 Options, Up: IA-64-Dependent 12306 123079.18.2 Syntax 12308------------- 12309 12310The assembler syntax closely follows the IA-64 Assembly Language 12311Reference Guide. 12312 12313* Menu: 12314 12315* IA-64-Chars:: Special Characters 12316* IA-64-Regs:: Register Names 12317* IA-64-Bits:: Bit Names 12318* IA-64-Relocs:: Relocations 12319 12320 12321File: as.info, Node: IA-64-Chars, Next: IA-64-Regs, Up: IA-64 Syntax 12322 123239.18.2.1 Special Characters 12324........................... 12325 12326`//' is the line comment token. 12327 12328 `;' can be used instead of a newline to separate statements. 12329 12330 12331File: as.info, Node: IA-64-Regs, Next: IA-64-Bits, Prev: IA-64-Chars, Up: IA-64 Syntax 12332 123339.18.2.2 Register Names 12334....................... 12335 12336The 128 integer registers are referred to as `rN'. The 128 12337floating-point registers are referred to as `fN'. The 128 application 12338registers are referred to as `arN'. The 128 control registers are 12339referred to as `crN'. The 64 one-bit predicate registers are referred 12340to as `pN'. The 8 branch registers are referred to as `bN'. In 12341addition, the assembler defines a number of aliases: `gp' (`r1'), `sp' 12342(`r12'), `rp' (`b0'), `ret0' (`r8'), `ret1' (`r9'), `ret2' (`r10'), 12343`ret3' (`r9'), `fargN' (`f8+N'), and `fretN' (`f8+N'). 12344 12345 For convenience, the assembler also defines aliases for all named 12346application and control registers. For example, `ar.bsp' refers to the 12347register backing store pointer (`ar17'). Similarly, `cr.eoi' refers to 12348the end-of-interrupt register (`cr67'). 12349 12350 12351File: as.info, Node: IA-64-Bits, Next: IA-64-Relocs, Prev: IA-64-Regs, Up: IA-64 Syntax 12352 123539.18.2.3 IA-64 Processor-Status-Register (PSR) Bit Names 12354........................................................ 12355 12356The assembler defines bit masks for each of the bits in the IA-64 12357processor status register. For example, `psr.ic' corresponds to a 12358value of 0x2000. These masks are primarily intended for use with the 12359`ssm'/`sum' and `rsm'/`rum' instructions, but they can be used anywhere 12360else where an integer constant is expected. 12361 12362 12363File: as.info, Node: IA-64-Relocs, Prev: IA-64-Bits, Up: IA-64 Syntax 12364 123659.18.2.4 Relocations 12366.................... 12367 12368In addition to the standard IA-64 relocations, the following 12369relocations are implemented by `as': 12370 12371`@slotcount(V)' 12372 Convert the address offset V into a slot count. This pseudo 12373 function is available only on VMS. The expression V must be known 12374 at assembly time: it can't reference undefined symbols or symbols 12375 in different sections. 12376 12377 12378File: as.info, Node: IA-64 Opcodes, Prev: IA-64 Syntax, Up: IA-64-Dependent 12379 123809.18.3 Opcodes 12381-------------- 12382 12383For detailed information on the IA-64 machine instruction set, see the 12384IA-64 Architecture Handbook 12385(http://developer.intel.com/design/itanium/arch_spec.htm). 12386 12387 12388File: as.info, Node: IP2K-Dependent, Next: LM32-Dependent, Prev: IA-64-Dependent, Up: Machine Dependencies 12389 123909.19 IP2K Dependent Features 12391============================ 12392 12393* Menu: 12394 12395* IP2K-Opts:: IP2K Options 12396* IP2K-Syntax:: IP2K Syntax 12397 12398 12399File: as.info, Node: IP2K-Opts, Next: IP2K-Syntax, Up: IP2K-Dependent 12400 124019.19.1 IP2K Options 12402------------------- 12403 12404The Ubicom IP2K version of `as' has a few machine dependent options: 12405 12406`-mip2022ext' 12407 `as' can assemble the extended IP2022 instructions, but it will 12408 only do so if this is specifically allowed via this command line 12409 option. 12410 12411`-mip2022' 12412 This option restores the assembler's default behaviour of not 12413 permitting the extended IP2022 instructions to be assembled. 12414 12415 12416 12417File: as.info, Node: IP2K-Syntax, Prev: IP2K-Opts, Up: IP2K-Dependent 12418 124199.19.2 IP2K Syntax 12420------------------ 12421 12422* Menu: 12423 12424* IP2K-Chars:: Special Characters 12425 12426 12427File: as.info, Node: IP2K-Chars, Up: IP2K-Syntax 12428 124299.19.2.1 Special Characters 12430........................... 12431 12432The presence of a `;' on a line indicates the start of a comment that 12433extends to the end of the current line. 12434 12435 If a `#' appears as the first character of a line, the whole line is 12436treated as a comment, but in this case the line can also be a logical 12437line number directive (*note Comments::) or a preprocessor control 12438command (*note Preprocessing::). 12439 12440 The IP2K assembler does not currently support a line separator 12441character. 12442 12443 12444File: as.info, Node: LM32-Dependent, Next: M32C-Dependent, Prev: IP2K-Dependent, Up: Machine Dependencies 12445 124469.20 LM32 Dependent Features 12447============================ 12448 12449* Menu: 12450 12451* LM32 Options:: Options 12452* LM32 Syntax:: Syntax 12453* LM32 Opcodes:: Opcodes 12454 12455 12456File: as.info, Node: LM32 Options, Next: LM32 Syntax, Up: LM32-Dependent 12457 124589.20.1 Options 12459-------------- 12460 12461`-mmultiply-enabled' 12462 Enable multiply instructions. 12463 12464`-mdivide-enabled' 12465 Enable divide instructions. 12466 12467`-mbarrel-shift-enabled' 12468 Enable barrel-shift instructions. 12469 12470`-msign-extend-enabled' 12471 Enable sign extend instructions. 12472 12473`-muser-enabled' 12474 Enable user defined instructions. 12475 12476`-micache-enabled' 12477 Enable instruction cache related CSRs. 12478 12479`-mdcache-enabled' 12480 Enable data cache related CSRs. 12481 12482`-mbreak-enabled' 12483 Enable break instructions. 12484 12485`-mall-enabled' 12486 Enable all instructions and CSRs. 12487 12488 12489 12490File: as.info, Node: LM32 Syntax, Next: LM32 Opcodes, Prev: LM32 Options, Up: LM32-Dependent 12491 124929.20.2 Syntax 12493------------- 12494 12495* Menu: 12496 12497* LM32-Regs:: Register Names 12498* LM32-Modifiers:: Relocatable Expression Modifiers 12499* LM32-Chars:: Special Characters 12500 12501 12502File: as.info, Node: LM32-Regs, Next: LM32-Modifiers, Up: LM32 Syntax 12503 125049.20.2.1 Register Names 12505....................... 12506 12507LM32 has 32 x 32-bit general purpose registers `r0', `r1', ... `r31'. 12508 12509 The following aliases are defined: `gp' - `r26', `fp' - `r27', `sp' 12510- `r28', `ra' - `r29', `ea' - `r30', `ba' - `r31'. 12511 12512 LM32 has the following Control and Status Registers (CSRs). 12513 12514`IE' 12515 Interrupt enable. 12516 12517`IM' 12518 Interrupt mask. 12519 12520`IP' 12521 Interrupt pending. 12522 12523`ICC' 12524 Instruction cache control. 12525 12526`DCC' 12527 Data cache control. 12528 12529`CC' 12530 Cycle counter. 12531 12532`CFG' 12533 Configuration. 12534 12535`EBA' 12536 Exception base address. 12537 12538`DC' 12539 Debug control. 12540 12541`DEBA' 12542 Debug exception base address. 12543 12544`JTX' 12545 JTAG transmit. 12546 12547`JRX' 12548 JTAG receive. 12549 12550`BP0' 12551 Breakpoint 0. 12552 12553`BP1' 12554 Breakpoint 1. 12555 12556`BP2' 12557 Breakpoint 2. 12558 12559`BP3' 12560 Breakpoint 3. 12561 12562`WP0' 12563 Watchpoint 0. 12564 12565`WP1' 12566 Watchpoint 1. 12567 12568`WP2' 12569 Watchpoint 2. 12570 12571`WP3' 12572 Watchpoint 3. 12573 12574 12575File: as.info, Node: LM32-Modifiers, Next: LM32-Chars, Prev: LM32-Regs, Up: LM32 Syntax 12576 125779.20.2.2 Relocatable Expression Modifiers 12578......................................... 12579 12580The assembler supports several modifiers when using relocatable 12581addresses in LM32 instruction operands. The general syntax is the 12582following: 12583 12584 modifier(relocatable-expression) 12585 12586`lo' 12587 This modifier allows you to use bits 0 through 15 of an address 12588 expression as 16 bit relocatable expression. 12589 12590`hi' 12591 This modifier allows you to use bits 16 through 23 of an address 12592 expression as 16 bit relocatable expression. 12593 12594 For example 12595 12596 ori r4, r4, lo(sym+10) 12597 orhi r4, r4, hi(sym+10) 12598 12599`gp' 12600 This modified creates a 16-bit relocatable expression that is the 12601 offset of the symbol from the global pointer. 12602 12603 mva r4, gp(sym) 12604 12605`got' 12606 This modifier places a symbol in the GOT and creates a 16-bit 12607 relocatable expression that is the offset into the GOT of this 12608 symbol. 12609 12610 lw r4, (gp+got(sym)) 12611 12612`gotofflo16' 12613 This modifier allows you to use the bits 0 through 15 of an 12614 address which is an offset from the GOT. 12615 12616`gotoffhi16' 12617 This modifier allows you to use the bits 16 through 31 of an 12618 address which is an offset from the GOT. 12619 12620 orhi r4, r4, gotoffhi16(lsym) 12621 addi r4, r4, gotofflo16(lsym) 12622 12623 12624 12625File: as.info, Node: LM32-Chars, Prev: LM32-Modifiers, Up: LM32 Syntax 12626 126279.20.2.3 Special Characters 12628........................... 12629 12630The presence of a `#' on a line indicates the start of a comment that 12631extends to the end of the current line. Note that if a line starts 12632with a `#' character then it can also be a logical line number 12633directive (*note Comments::) or a preprocessor control command (*note 12634Preprocessing::). 12635 12636 A semicolon (`;') can be used to separate multiple statements on the 12637same line. 12638 12639 12640File: as.info, Node: LM32 Opcodes, Prev: LM32 Syntax, Up: LM32-Dependent 12641 126429.20.3 Opcodes 12643-------------- 12644 12645For detailed information on the LM32 machine instruction set, see 12646`http://www.latticesemi.com/products/intellectualproperty/ipcores/mico32/'. 12647 12648 `as' implements all the standard LM32 opcodes. 12649 12650 12651File: as.info, Node: M32C-Dependent, Next: M32R-Dependent, Prev: LM32-Dependent, Up: Machine Dependencies 12652 126539.21 M32C Dependent Features 12654============================ 12655 12656 `as' can assemble code for several different members of the Renesas 12657M32C family. Normally the default is to assemble code for the M16C 12658microprocessor. The `-m32c' option may be used to change the default 12659to the M32C microprocessor. 12660 12661* Menu: 12662 12663* M32C-Opts:: M32C Options 12664* M32C-Syntax:: M32C Syntax 12665 12666 12667File: as.info, Node: M32C-Opts, Next: M32C-Syntax, Up: M32C-Dependent 12668 126699.21.1 M32C Options 12670------------------- 12671 12672The Renesas M32C version of `as' has these machine-dependent options: 12673 12674`-m32c' 12675 Assemble M32C instructions. 12676 12677`-m16c' 12678 Assemble M16C instructions (default). 12679 12680`-relax' 12681 Enable support for link-time relaxations. 12682 12683`-h-tick-hex' 12684 Support H'00 style hex constants in addition to 0x00 style. 12685 12686 12687 12688File: as.info, Node: M32C-Syntax, Prev: M32C-Opts, Up: M32C-Dependent 12689 126909.21.2 M32C Syntax 12691------------------ 12692 12693* Menu: 12694 12695* M32C-Modifiers:: Symbolic Operand Modifiers 12696* M32C-Chars:: Special Characters 12697 12698 12699File: as.info, Node: M32C-Modifiers, Next: M32C-Chars, Up: M32C-Syntax 12700 127019.21.2.1 Symbolic Operand Modifiers 12702................................... 12703 12704The assembler supports several modifiers when using symbol addresses in 12705M32C instruction operands. The general syntax is the following: 12706 12707 %modifier(symbol) 12708 12709`%dsp8' 12710`%dsp16' 12711 These modifiers override the assembler's assumptions about how big 12712 a symbol's address is. Normally, when it sees an operand like 12713 `sym[a0]' it assumes `sym' may require the widest displacement 12714 field (16 bits for `-m16c', 24 bits for `-m32c'). These modifiers 12715 tell it to assume the address will fit in an 8 or 16 bit 12716 (respectively) unsigned displacement. Note that, of course, if it 12717 doesn't actually fit you will get linker errors. Example: 12718 12719 mov.w %dsp8(sym)[a0],r1 12720 mov.b #0,%dsp8(sym)[a0] 12721 12722`%hi8' 12723 This modifier allows you to load bits 16 through 23 of a 24 bit 12724 address into an 8 bit register. This is useful with, for example, 12725 the M16C `smovf' instruction, which expects a 20 bit address in 12726 `r1h' and `a0'. Example: 12727 12728 mov.b #%hi8(sym),r1h 12729 mov.w #%lo16(sym),a0 12730 smovf.b 12731 12732`%lo16' 12733 Likewise, this modifier allows you to load bits 0 through 15 of a 12734 24 bit address into a 16 bit register. 12735 12736`%hi16' 12737 This modifier allows you to load bits 16 through 31 of a 32 bit 12738 address into a 16 bit register. While the M32C family only has 24 12739 bits of address space, it does support addresses in pairs of 16 bit 12740 registers (like `a1a0' for the `lde' instruction). This modifier 12741 is for loading the upper half in such cases. Example: 12742 12743 mov.w #%hi16(sym),a1 12744 mov.w #%lo16(sym),a0 12745 ... 12746 lde.w [a1a0],r1 12747 12748 12749 12750File: as.info, Node: M32C-Chars, Prev: M32C-Modifiers, Up: M32C-Syntax 12751 127529.21.2.2 Special Characters 12753........................... 12754 12755The presence of a `;' character on a line indicates the start of a 12756comment that extends to the end of that line. 12757 12758 If a `#' appears as the first character of a line, the whole line is 12759treated as a comment, but in this case the line can also be a logical 12760line number directive (*note Comments::) or a preprocessor control 12761command (*note Preprocessing::). 12762 12763 The `|' character can be used to separate statements on the same 12764line. 12765 12766 12767File: as.info, Node: M32R-Dependent, Next: M68K-Dependent, Prev: M32C-Dependent, Up: Machine Dependencies 12768 127699.22 M32R Dependent Features 12770============================ 12771 12772* Menu: 12773 12774* M32R-Opts:: M32R Options 12775* M32R-Directives:: M32R Directives 12776* M32R-Warnings:: M32R Warnings 12777 12778 12779File: as.info, Node: M32R-Opts, Next: M32R-Directives, Up: M32R-Dependent 12780 127819.22.1 M32R Options 12782------------------- 12783 12784The Renease M32R version of `as' has a few machine dependent options: 12785 12786`-m32rx' 12787 `as' can assemble code for several different members of the 12788 Renesas M32R family. Normally the default is to assemble code for 12789 the M32R microprocessor. This option may be used to change the 12790 default to the M32RX microprocessor, which adds some more 12791 instructions to the basic M32R instruction set, and some 12792 additional parameters to some of the original instructions. 12793 12794`-m32r2' 12795 This option changes the target processor to the M32R2 12796 microprocessor. 12797 12798`-m32r' 12799 This option can be used to restore the assembler's default 12800 behaviour of assembling for the M32R microprocessor. This can be 12801 useful if the default has been changed by a previous command line 12802 option. 12803 12804`-little' 12805 This option tells the assembler to produce little-endian code and 12806 data. The default is dependent upon how the toolchain was 12807 configured. 12808 12809`-EL' 12810 This is a synonym for _-little_. 12811 12812`-big' 12813 This option tells the assembler to produce big-endian code and 12814 data. 12815 12816`-EB' 12817 This is a synonum for _-big_. 12818 12819`-KPIC' 12820 This option specifies that the output of the assembler should be 12821 marked as position-independent code (PIC). 12822 12823`-parallel' 12824 This option tells the assembler to attempts to combine two 12825 sequential instructions into a single, parallel instruction, where 12826 it is legal to do so. 12827 12828`-no-parallel' 12829 This option disables a previously enabled _-parallel_ option. 12830 12831`-no-bitinst' 12832 This option disables the support for the extended bit-field 12833 instructions provided by the M32R2. If this support needs to be 12834 re-enabled the _-bitinst_ switch can be used to restore it. 12835 12836`-O' 12837 This option tells the assembler to attempt to optimize the 12838 instructions that it produces. This includes filling delay slots 12839 and converting sequential instructions into parallel ones. This 12840 option implies _-parallel_. 12841 12842`-warn-explicit-parallel-conflicts' 12843 Instructs `as' to produce warning messages when questionable 12844 parallel instructions are encountered. This option is enabled by 12845 default, but `gcc' disables it when it invokes `as' directly. 12846 Questionable instructions are those whose behaviour would be 12847 different if they were executed sequentially. For example the 12848 code fragment `mv r1, r2 || mv r3, r1' produces a different result 12849 from `mv r1, r2 \n mv r3, r1' since the former moves r1 into r3 12850 and then r2 into r1, whereas the later moves r2 into r1 and r3. 12851 12852`-Wp' 12853 This is a shorter synonym for the 12854 _-warn-explicit-parallel-conflicts_ option. 12855 12856`-no-warn-explicit-parallel-conflicts' 12857 Instructs `as' not to produce warning messages when questionable 12858 parallel instructions are encountered. 12859 12860`-Wnp' 12861 This is a shorter synonym for the 12862 _-no-warn-explicit-parallel-conflicts_ option. 12863 12864`-ignore-parallel-conflicts' 12865 This option tells the assembler's to stop checking parallel 12866 instructions for constraint violations. This ability is provided 12867 for hardware vendors testing chip designs and should not be used 12868 under normal circumstances. 12869 12870`-no-ignore-parallel-conflicts' 12871 This option restores the assembler's default behaviour of checking 12872 parallel instructions to detect constraint violations. 12873 12874`-Ip' 12875 This is a shorter synonym for the _-ignore-parallel-conflicts_ 12876 option. 12877 12878`-nIp' 12879 This is a shorter synonym for the _-no-ignore-parallel-conflicts_ 12880 option. 12881 12882`-warn-unmatched-high' 12883 This option tells the assembler to produce a warning message if a 12884 `.high' pseudo op is encountered without a matching `.low' pseudo 12885 op. The presence of such an unmatched pseudo op usually indicates 12886 a programming error. 12887 12888`-no-warn-unmatched-high' 12889 Disables a previously enabled _-warn-unmatched-high_ option. 12890 12891`-Wuh' 12892 This is a shorter synonym for the _-warn-unmatched-high_ option. 12893 12894`-Wnuh' 12895 This is a shorter synonym for the _-no-warn-unmatched-high_ option. 12896 12897 12898 12899File: as.info, Node: M32R-Directives, Next: M32R-Warnings, Prev: M32R-Opts, Up: M32R-Dependent 12900 129019.22.2 M32R Directives 12902---------------------- 12903 12904The Renease M32R version of `as' has a few architecture specific 12905directives: 12906 12907`low EXPRESSION' 12908 The `low' directive computes the value of its expression and 12909 places the lower 16-bits of the result into the immediate-field of 12910 the instruction. For example: 12911 12912 or3 r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678 12913 add3, r0, r0, #low(fred) ; compute r0 = r0 + low 16-bits of address of fred 12914 12915`high EXPRESSION' 12916 The `high' directive computes the value of its expression and 12917 places the upper 16-bits of the result into the immediate-field of 12918 the instruction. For example: 12919 12920 seth r0, #high(0x12345678) ; compute r0 = 0x12340000 12921 seth, r0, #high(fred) ; compute r0 = upper 16-bits of address of fred 12922 12923`shigh EXPRESSION' 12924 The `shigh' directive is very similar to the `high' directive. It 12925 also computes the value of its expression and places the upper 12926 16-bits of the result into the immediate-field of the instruction. 12927 The difference is that `shigh' also checks to see if the lower 12928 16-bits could be interpreted as a signed number, and if so it 12929 assumes that a borrow will occur from the upper-16 bits. To 12930 compensate for this the `shigh' directive pre-biases the upper 16 12931 bit value by adding one to it. For example: 12932 12933 For example: 12934 12935 seth r0, #shigh(0x12345678) ; compute r0 = 0x12340000 12936 seth r0, #shigh(0x00008000) ; compute r0 = 0x00010000 12937 12938 In the second example the lower 16-bits are 0x8000. If these are 12939 treated as a signed value and sign extended to 32-bits then the 12940 value becomes 0xffff8000. If this value is then added to 12941 0x00010000 then the result is 0x00008000. 12942 12943 This behaviour is to allow for the different semantics of the 12944 `or3' and `add3' instructions. The `or3' instruction treats its 12945 16-bit immediate argument as unsigned whereas the `add3' treats 12946 its 16-bit immediate as a signed value. So for example: 12947 12948 seth r0, #shigh(0x00008000) 12949 add3 r0, r0, #low(0x00008000) 12950 12951 Produces the correct result in r0, whereas: 12952 12953 seth r0, #shigh(0x00008000) 12954 or3 r0, r0, #low(0x00008000) 12955 12956 Stores 0xffff8000 into r0. 12957 12958 Note - the `shigh' directive does not know where in the assembly 12959 source code the lower 16-bits of the value are going set, so it 12960 cannot check to make sure that an `or3' instruction is being used 12961 rather than an `add3' instruction. It is up to the programmer to 12962 make sure that correct directives are used. 12963 12964`.m32r' 12965 The directive performs a similar thing as the _-m32r_ command line 12966 option. It tells the assembler to only accept M32R instructions 12967 from now on. An instructions from later M32R architectures are 12968 refused. 12969 12970`.m32rx' 12971 The directive performs a similar thing as the _-m32rx_ command 12972 line option. It tells the assembler to start accepting the extra 12973 instructions in the M32RX ISA as well as the ordinary M32R ISA. 12974 12975`.m32r2' 12976 The directive performs a similar thing as the _-m32r2_ command 12977 line option. It tells the assembler to start accepting the extra 12978 instructions in the M32R2 ISA as well as the ordinary M32R ISA. 12979 12980`.little' 12981 The directive performs a similar thing as the _-little_ command 12982 line option. It tells the assembler to start producing 12983 little-endian code and data. This option should be used with care 12984 as producing mixed-endian binary files is fraught with danger. 12985 12986`.big' 12987 The directive performs a similar thing as the _-big_ command line 12988 option. It tells the assembler to start producing big-endian code 12989 and data. This option should be used with care as producing 12990 mixed-endian binary files is fraught with danger. 12991 12992 12993 12994File: as.info, Node: M32R-Warnings, Prev: M32R-Directives, Up: M32R-Dependent 12995 129969.22.3 M32R Warnings 12997-------------------- 12998 12999There are several warning and error messages that can be produced by 13000`as' which are specific to the M32R: 13001 13002`output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?' 13003 This message is only produced if warnings for explicit parallel 13004 conflicts have been enabled. It indicates that the assembler has 13005 encountered a parallel instruction in which the destination 13006 register of the left hand instruction is used as an input register 13007 in the right hand instruction. For example in this code fragment 13008 `mv r1, r2 || neg r3, r1' register r1 is the destination of the 13009 move instruction and the input to the neg instruction. 13010 13011`output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?' 13012 This message is only produced if warnings for explicit parallel 13013 conflicts have been enabled. It indicates that the assembler has 13014 encountered a parallel instruction in which the destination 13015 register of the right hand instruction is used as an input 13016 register in the left hand instruction. For example in this code 13017 fragment `mv r1, r2 || neg r2, r3' register r2 is the destination 13018 of the neg instruction and the input to the move instruction. 13019 13020`instruction `...' is for the M32RX only' 13021 This message is produced when the assembler encounters an 13022 instruction which is only supported by the M32Rx processor, and 13023 the `-m32rx' command line flag has not been specified to allow 13024 assembly of such instructions. 13025 13026`unknown instruction `...'' 13027 This message is produced when the assembler encounters an 13028 instruction which it does not recognize. 13029 13030`only the NOP instruction can be issued in parallel on the m32r' 13031 This message is produced when the assembler encounters a parallel 13032 instruction which does not involve a NOP instruction and the 13033 `-m32rx' command line flag has not been specified. Only the M32Rx 13034 processor is able to execute two instructions in parallel. 13035 13036`instruction `...' cannot be executed in parallel.' 13037 This message is produced when the assembler encounters a parallel 13038 instruction which is made up of one or two instructions which 13039 cannot be executed in parallel. 13040 13041`Instructions share the same execution pipeline' 13042 This message is produced when the assembler encounters a parallel 13043 instruction whoes components both use the same execution pipeline. 13044 13045`Instructions write to the same destination register.' 13046 This message is produced when the assembler encounters a parallel 13047 instruction where both components attempt to modify the same 13048 register. For example these code fragments will produce this 13049 message: `mv r1, r2 || neg r1, r3' `jl r0 || mv r14, r1' `st r2, 13050 @-r1 || mv r1, r3' `mv r1, r2 || ld r0, @r1+' `cmp r1, r2 || addx 13051 r3, r4' (Both write to the condition bit) 13052 13053 13054 13055File: as.info, Node: M68K-Dependent, Next: M68HC11-Dependent, Prev: M32R-Dependent, Up: Machine Dependencies 13056 130579.23 M680x0 Dependent Features 13058============================== 13059 13060* Menu: 13061 13062* M68K-Opts:: M680x0 Options 13063* M68K-Syntax:: Syntax 13064* M68K-Moto-Syntax:: Motorola Syntax 13065* M68K-Float:: Floating Point 13066* M68K-Directives:: 680x0 Machine Directives 13067* M68K-opcodes:: Opcodes 13068 13069 13070File: as.info, Node: M68K-Opts, Next: M68K-Syntax, Up: M68K-Dependent 13071 130729.23.1 M680x0 Options 13073--------------------- 13074 13075The Motorola 680x0 version of `as' has a few machine dependent options: 13076 13077`-march=ARCHITECTURE' 13078 This option specifies a target architecture. The following 13079 architectures are recognized: `68000', `68010', `68020', `68030', 13080 `68040', `68060', `cpu32', `isaa', `isaaplus', `isab', `isac' and 13081 `cfv4e'. 13082 13083`-mcpu=CPU' 13084 This option specifies a target cpu. When used in conjunction with 13085 the `-march' option, the cpu must be within the specified 13086 architecture. Also, the generic features of the architecture are 13087 used for instruction generation, rather than those of the specific 13088 chip. 13089 13090`-m[no-]68851' 13091`-m[no-]68881' 13092`-m[no-]div' 13093`-m[no-]usp' 13094`-m[no-]float' 13095`-m[no-]mac' 13096`-m[no-]emac' 13097 Enable or disable various architecture specific features. If a 13098 chip or architecture by default supports an option (for instance 13099 `-march=isaaplus' includes the `-mdiv' option), explicitly 13100 disabling the option will override the default. 13101 13102`-l' 13103 You can use the `-l' option to shorten the size of references to 13104 undefined symbols. If you do not use the `-l' option, references 13105 to undefined symbols are wide enough for a full `long' (32 bits). 13106 (Since `as' cannot know where these symbols end up, `as' can only 13107 allocate space for the linker to fill in later. Since `as' does 13108 not know how far away these symbols are, it allocates as much 13109 space as it can.) If you use this option, the references are only 13110 one word wide (16 bits). This may be useful if you want the 13111 object file to be as small as possible, and you know that the 13112 relevant symbols are always less than 17 bits away. 13113 13114`--register-prefix-optional' 13115 For some configurations, especially those where the compiler 13116 normally does not prepend an underscore to the names of user 13117 variables, the assembler requires a `%' before any use of a 13118 register name. This is intended to let the assembler distinguish 13119 between C variables and functions named `a0' through `a7', and so 13120 on. The `%' is always accepted, but is not required for certain 13121 configurations, notably `sun3'. The `--register-prefix-optional' 13122 option may be used to permit omitting the `%' even for 13123 configurations for which it is normally required. If this is 13124 done, it will generally be impossible to refer to C variables and 13125 functions with the same names as register names. 13126 13127`--bitwise-or' 13128 Normally the character `|' is treated as a comment character, which 13129 means that it can not be used in expressions. The `--bitwise-or' 13130 option turns `|' into a normal character. In this mode, you must 13131 either use C style comments, or start comments with a `#' character 13132 at the beginning of a line. 13133 13134`--base-size-default-16 --base-size-default-32' 13135 If you use an addressing mode with a base register without 13136 specifying the size, `as' will normally use the full 32 bit value. 13137 For example, the addressing mode `%a0@(%d0)' is equivalent to 13138 `%a0@(%d0:l)'. You may use the `--base-size-default-16' option to 13139 tell `as' to default to using the 16 bit value. In this case, 13140 `%a0@(%d0)' is equivalent to `%a0@(%d0:w)'. You may use the 13141 `--base-size-default-32' option to restore the default behaviour. 13142 13143`--disp-size-default-16 --disp-size-default-32' 13144 If you use an addressing mode with a displacement, and the value 13145 of the displacement is not known, `as' will normally assume that 13146 the value is 32 bits. For example, if the symbol `disp' has not 13147 been defined, `as' will assemble the addressing mode 13148 `%a0@(disp,%d0)' as though `disp' is a 32 bit value. You may use 13149 the `--disp-size-default-16' option to tell `as' to instead assume 13150 that the displacement is 16 bits. In this case, `as' will 13151 assemble `%a0@(disp,%d0)' as though `disp' is a 16 bit value. You 13152 may use the `--disp-size-default-32' option to restore the default 13153 behaviour. 13154 13155`--pcrel' 13156 Always keep branches PC-relative. In the M680x0 architecture all 13157 branches are defined as PC-relative. However, on some processors 13158 they are limited to word displacements maximum. When `as' needs a 13159 long branch that is not available, it normally emits an absolute 13160 jump instead. This option disables this substitution. When this 13161 option is given and no long branches are available, only word 13162 branches will be emitted. An error message will be generated if a 13163 word branch cannot reach its target. This option has no effect on 13164 68020 and other processors that have long branches. *note Branch 13165 Improvement: M68K-Branch. 13166 13167`-m68000' 13168 `as' can assemble code for several different members of the 13169 Motorola 680x0 family. The default depends upon how `as' was 13170 configured when it was built; normally, the default is to assemble 13171 code for the 68020 microprocessor. The following options may be 13172 used to change the default. These options control which 13173 instructions and addressing modes are permitted. The members of 13174 the 680x0 family are very similar. For detailed information about 13175 the differences, see the Motorola manuals. 13176 13177 `-m68000' 13178 `-m68ec000' 13179 `-m68hc000' 13180 `-m68hc001' 13181 `-m68008' 13182 `-m68302' 13183 `-m68306' 13184 `-m68307' 13185 `-m68322' 13186 `-m68356' 13187 Assemble for the 68000. `-m68008', `-m68302', and so on are 13188 synonyms for `-m68000', since the chips are the same from the 13189 point of view of the assembler. 13190 13191 `-m68010' 13192 Assemble for the 68010. 13193 13194 `-m68020' 13195 `-m68ec020' 13196 Assemble for the 68020. This is normally the default. 13197 13198 `-m68030' 13199 `-m68ec030' 13200 Assemble for the 68030. 13201 13202 `-m68040' 13203 `-m68ec040' 13204 Assemble for the 68040. 13205 13206 `-m68060' 13207 `-m68ec060' 13208 Assemble for the 68060. 13209 13210 `-mcpu32' 13211 `-m68330' 13212 `-m68331' 13213 `-m68332' 13214 `-m68333' 13215 `-m68334' 13216 `-m68336' 13217 `-m68340' 13218 `-m68341' 13219 `-m68349' 13220 `-m68360' 13221 Assemble for the CPU32 family of chips. 13222 13223 `-m5200' 13224 `-m5202' 13225 `-m5204' 13226 `-m5206' 13227 `-m5206e' 13228 `-m521x' 13229 `-m5249' 13230 `-m528x' 13231 `-m5307' 13232 `-m5407' 13233 `-m547x' 13234 `-m548x' 13235 `-mcfv4' 13236 `-mcfv4e' 13237 Assemble for the ColdFire family of chips. 13238 13239 `-m68881' 13240 `-m68882' 13241 Assemble 68881 floating point instructions. This is the 13242 default for the 68020, 68030, and the CPU32. The 68040 and 13243 68060 always support floating point instructions. 13244 13245 `-mno-68881' 13246 Do not assemble 68881 floating point instructions. This is 13247 the default for 68000 and the 68010. The 68040 and 68060 13248 always support floating point instructions, even if this 13249 option is used. 13250 13251 `-m68851' 13252 Assemble 68851 MMU instructions. This is the default for the 13253 68020, 68030, and 68060. The 68040 accepts a somewhat 13254 different set of MMU instructions; `-m68851' and `-m68040' 13255 should not be used together. 13256 13257 `-mno-68851' 13258 Do not assemble 68851 MMU instructions. This is the default 13259 for the 68000, 68010, and the CPU32. The 68040 accepts a 13260 somewhat different set of MMU instructions. 13261 13262 13263File: as.info, Node: M68K-Syntax, Next: M68K-Moto-Syntax, Prev: M68K-Opts, Up: M68K-Dependent 13264 132659.23.2 Syntax 13266------------- 13267 13268This syntax for the Motorola 680x0 was developed at MIT. 13269 13270 The 680x0 version of `as' uses instructions names and syntax 13271compatible with the Sun assembler. Intervening periods are ignored; 13272for example, `movl' is equivalent to `mov.l'. 13273 13274 In the following table APC stands for any of the address registers 13275(`%a0' through `%a7'), the program counter (`%pc'), the zero-address 13276relative to the program counter (`%zpc'), a suppressed address register 13277(`%za0' through `%za7'), or it may be omitted entirely. The use of 13278SIZE means one of `w' or `l', and it may be omitted, along with the 13279leading colon, unless a scale is also specified. The use of SCALE 13280means one of `1', `2', `4', or `8', and it may always be omitted along 13281with the leading colon. 13282 13283 The following addressing modes are understood: 13284"Immediate" 13285 `#NUMBER' 13286 13287"Data Register" 13288 `%d0' through `%d7' 13289 13290"Address Register" 13291 `%a0' through `%a7' 13292 `%a7' is also known as `%sp', i.e., the Stack Pointer. `%a6' is 13293 also known as `%fp', the Frame Pointer. 13294 13295"Address Register Indirect" 13296 `%a0@' through `%a7@' 13297 13298"Address Register Postincrement" 13299 `%a0@+' through `%a7@+' 13300 13301"Address Register Predecrement" 13302 `%a0@-' through `%a7@-' 13303 13304"Indirect Plus Offset" 13305 `APC@(NUMBER)' 13306 13307"Index" 13308 `APC@(NUMBER,REGISTER:SIZE:SCALE)' 13309 13310 The NUMBER may be omitted. 13311 13312"Postindex" 13313 `APC@(NUMBER)@(ONUMBER,REGISTER:SIZE:SCALE)' 13314 13315 The ONUMBER or the REGISTER, but not both, may be omitted. 13316 13317"Preindex" 13318 `APC@(NUMBER,REGISTER:SIZE:SCALE)@(ONUMBER)' 13319 13320 The NUMBER may be omitted. Omitting the REGISTER produces the 13321 Postindex addressing mode. 13322 13323"Absolute" 13324 `SYMBOL', or `DIGITS', optionally followed by `:b', `:w', or `:l'. 13325 13326 13327File: as.info, Node: M68K-Moto-Syntax, Next: M68K-Float, Prev: M68K-Syntax, Up: M68K-Dependent 13328 133299.23.3 Motorola Syntax 13330---------------------- 13331 13332The standard Motorola syntax for this chip differs from the syntax 13333already discussed (*note Syntax: M68K-Syntax.). `as' can accept 13334Motorola syntax for operands, even if MIT syntax is used for other 13335operands in the same instruction. The two kinds of syntax are fully 13336compatible. 13337 13338 In the following table APC stands for any of the address registers 13339(`%a0' through `%a7'), the program counter (`%pc'), the zero-address 13340relative to the program counter (`%zpc'), or a suppressed address 13341register (`%za0' through `%za7'). The use of SIZE means one of `w' or 13342`l', and it may always be omitted along with the leading dot. The use 13343of SCALE means one of `1', `2', `4', or `8', and it may always be 13344omitted along with the leading asterisk. 13345 13346 The following additional addressing modes are understood: 13347 13348"Address Register Indirect" 13349 `(%a0)' through `(%a7)' 13350 `%a7' is also known as `%sp', i.e., the Stack Pointer. `%a6' is 13351 also known as `%fp', the Frame Pointer. 13352 13353"Address Register Postincrement" 13354 `(%a0)+' through `(%a7)+' 13355 13356"Address Register Predecrement" 13357 `-(%a0)' through `-(%a7)' 13358 13359"Indirect Plus Offset" 13360 `NUMBER(%A0)' through `NUMBER(%A7)', or `NUMBER(%PC)'. 13361 13362 The NUMBER may also appear within the parentheses, as in 13363 `(NUMBER,%A0)'. When used with the PC, the NUMBER may be omitted 13364 (with an address register, omitting the NUMBER produces Address 13365 Register Indirect mode). 13366 13367"Index" 13368 `NUMBER(APC,REGISTER.SIZE*SCALE)' 13369 13370 The NUMBER may be omitted, or it may appear within the 13371 parentheses. The APC may be omitted. The REGISTER and the APC 13372 may appear in either order. If both APC and REGISTER are address 13373 registers, and the SIZE and SCALE are omitted, then the first 13374 register is taken as the base register, and the second as the 13375 index register. 13376 13377"Postindex" 13378 `([NUMBER,APC],REGISTER.SIZE*SCALE,ONUMBER)' 13379 13380 The ONUMBER, or the REGISTER, or both, may be omitted. Either the 13381 NUMBER or the APC may be omitted, but not both. 13382 13383"Preindex" 13384 `([NUMBER,APC,REGISTER.SIZE*SCALE],ONUMBER)' 13385 13386 The NUMBER, or the APC, or the REGISTER, or any two of them, may 13387 be omitted. The ONUMBER may be omitted. The REGISTER and the APC 13388 may appear in either order. If both APC and REGISTER are address 13389 registers, and the SIZE and SCALE are omitted, then the first 13390 register is taken as the base register, and the second as the 13391 index register. 13392 13393 13394File: as.info, Node: M68K-Float, Next: M68K-Directives, Prev: M68K-Moto-Syntax, Up: M68K-Dependent 13395 133969.23.4 Floating Point 13397--------------------- 13398 13399Packed decimal (P) format floating literals are not supported. Feel 13400free to add the code! 13401 13402 The floating point formats generated by directives are these. 13403 13404`.float' 13405 `Single' precision floating point constants. 13406 13407`.double' 13408 `Double' precision floating point constants. 13409 13410`.extend' 13411`.ldouble' 13412 `Extended' precision (`long double') floating point constants. 13413 13414 13415File: as.info, Node: M68K-Directives, Next: M68K-opcodes, Prev: M68K-Float, Up: M68K-Dependent 13416 134179.23.5 680x0 Machine Directives 13418------------------------------- 13419 13420In order to be compatible with the Sun assembler the 680x0 assembler 13421understands the following directives. 13422 13423`.data1' 13424 This directive is identical to a `.data 1' directive. 13425 13426`.data2' 13427 This directive is identical to a `.data 2' directive. 13428 13429`.even' 13430 This directive is a special case of the `.align' directive; it 13431 aligns the output to an even byte boundary. 13432 13433`.skip' 13434 This directive is identical to a `.space' directive. 13435 13436`.arch NAME' 13437 Select the target architecture and extension features. Valid 13438 values for NAME are the same as for the `-march' command line 13439 option. This directive cannot be specified after any instructions 13440 have been assembled. If it is given multiple times, or in 13441 conjunction with the `-march' option, all uses must be for the 13442 same architecture and extension set. 13443 13444`.cpu NAME' 13445 Select the target cpu. Valid valuse for NAME are the same as for 13446 the `-mcpu' command line option. This directive cannot be 13447 specified after any instructions have been assembled. If it is 13448 given multiple times, or in conjunction with the `-mopt' option, 13449 all uses must be for the same cpu. 13450 13451 13452 13453File: as.info, Node: M68K-opcodes, Prev: M68K-Directives, Up: M68K-Dependent 13454 134559.23.6 Opcodes 13456-------------- 13457 13458* Menu: 13459 13460* M68K-Branch:: Branch Improvement 13461* M68K-Chars:: Special Characters 13462 13463 13464File: as.info, Node: M68K-Branch, Next: M68K-Chars, Up: M68K-opcodes 13465 134669.23.6.1 Branch Improvement 13467........................... 13468 13469Certain pseudo opcodes are permitted for branch instructions. They 13470expand to the shortest branch instruction that reach the target. 13471Generally these mnemonics are made by substituting `j' for `b' at the 13472start of a Motorola mnemonic. 13473 13474 The following table summarizes the pseudo-operations. A `*' flags 13475cases that are more fully described after the table: 13476 13477 Displacement 13478 +------------------------------------------------------------ 13479 | 68020 68000/10, not PC-relative OK 13480 Pseudo-Op |BYTE WORD LONG ABSOLUTE LONG JUMP ** 13481 +------------------------------------------------------------ 13482 jbsr |bsrs bsrw bsrl jsr 13483 jra |bras braw bral jmp 13484 * jXX |bXXs bXXw bXXl bNXs;jmp 13485 * dbXX | N/A dbXXw dbXX;bras;bral dbXX;bras;jmp 13486 fjXX | N/A fbXXw fbXXl N/A 13487 13488 XX: condition 13489 NX: negative of condition XX 13490 `*'--see full description below 13491 `**'--this expansion mode is disallowed by `--pcrel' 13492 13493`jbsr' 13494`jra' 13495 These are the simplest jump pseudo-operations; they always map to 13496 one particular machine instruction, depending on the displacement 13497 to the branch target. This instruction will be a byte or word 13498 branch is that is sufficient. Otherwise, a long branch will be 13499 emitted if available. If no long branches are available and the 13500 `--pcrel' option is not given, an absolute long jump will be 13501 emitted instead. If no long branches are available, the `--pcrel' 13502 option is given, and a word branch cannot reach the target, an 13503 error message is generated. 13504 13505 In addition to standard branch operands, `as' allows these 13506 pseudo-operations to have all operands that are allowed for jsr 13507 and jmp, substituting these instructions if the operand given is 13508 not valid for a branch instruction. 13509 13510`jXX' 13511 Here, `jXX' stands for an entire family of pseudo-operations, 13512 where XX is a conditional branch or condition-code test. The full 13513 list of pseudo-ops in this family is: 13514 jhi jls jcc jcs jne jeq jvc 13515 jvs jpl jmi jge jlt jgt jle 13516 13517 Usually, each of these pseudo-operations expands to a single branch 13518 instruction. However, if a word branch is not sufficient, no long 13519 branches are available, and the `--pcrel' option is not given, `as' 13520 issues a longer code fragment in terms of NX, the opposite 13521 condition to XX. For example, under these conditions: 13522 jXX foo 13523 gives 13524 bNXs oof 13525 jmp foo 13526 oof: 13527 13528`dbXX' 13529 The full family of pseudo-operations covered here is 13530 dbhi dbls dbcc dbcs dbne dbeq dbvc 13531 dbvs dbpl dbmi dbge dblt dbgt dble 13532 dbf dbra dbt 13533 13534 Motorola `dbXX' instructions allow word displacements only. When 13535 a word displacement is sufficient, each of these pseudo-operations 13536 expands to the corresponding Motorola instruction. When a word 13537 displacement is not sufficient and long branches are available, 13538 when the source reads `dbXX foo', `as' emits 13539 dbXX oo1 13540 bras oo2 13541 oo1:bral foo 13542 oo2: 13543 13544 If, however, long branches are not available and the `--pcrel' 13545 option is not given, `as' emits 13546 dbXX oo1 13547 bras oo2 13548 oo1:jmp foo 13549 oo2: 13550 13551`fjXX' 13552 This family includes 13553 fjne fjeq fjge fjlt fjgt fjle fjf 13554 fjt fjgl fjgle fjnge fjngl fjngle fjngt 13555 fjnle fjnlt fjoge fjogl fjogt fjole fjolt 13556 fjor fjseq fjsf fjsne fjst fjueq fjuge 13557 fjugt fjule fjult fjun 13558 13559 Each of these pseudo-operations always expands to a single Motorola 13560 coprocessor branch instruction, word or long. All Motorola 13561 coprocessor branch instructions allow both word and long 13562 displacements. 13563 13564 13565 13566File: as.info, Node: M68K-Chars, Prev: M68K-Branch, Up: M68K-opcodes 13567 135689.23.6.2 Special Characters 13569........................... 13570 13571Line comments are introduced by the `|' character appearing anywhere on 13572a line, unless the `--bitwise-or' command line option has been 13573specified. 13574 13575 An asterisk (`*') as the first character on a line marks the start 13576of a line comment as well. 13577 13578 A hash character (`#') as the first character on a line also marks 13579the start of a line comment, but in this case it could also be a 13580logical line number directive (*note Comments::) or a preprocessor 13581control command (*note Preprocessing::). If the hash character appears 13582elsewhere on a line it is used to introduce an immediate value. (This 13583is for compatibility with Sun's assembler). 13584 13585 Multiple statements on the same line can appear if they are separated 13586by the `;' character. 13587 13588 13589File: as.info, Node: M68HC11-Dependent, Next: Meta-Dependent, Prev: M68K-Dependent, Up: Machine Dependencies 13590 135919.24 M68HC11 and M68HC12 Dependent Features 13592=========================================== 13593 13594* Menu: 13595 13596* M68HC11-Opts:: M68HC11 and M68HC12 Options 13597* M68HC11-Syntax:: Syntax 13598* M68HC11-Modifiers:: Symbolic Operand Modifiers 13599* M68HC11-Directives:: Assembler Directives 13600* M68HC11-Float:: Floating Point 13601* M68HC11-opcodes:: Opcodes 13602 13603 13604File: as.info, Node: M68HC11-Opts, Next: M68HC11-Syntax, Up: M68HC11-Dependent 13605 136069.24.1 M68HC11 and M68HC12 Options 13607---------------------------------- 13608 13609The Motorola 68HC11 and 68HC12 version of `as' have a few machine 13610dependent options. 13611 13612`-m68hc11' 13613 This option switches the assembler into the M68HC11 mode. In this 13614 mode, the assembler only accepts 68HC11 operands and mnemonics. It 13615 produces code for the 68HC11. 13616 13617`-m68hc12' 13618 This option switches the assembler into the M68HC12 mode. In this 13619 mode, the assembler also accepts 68HC12 operands and mnemonics. It 13620 produces code for the 68HC12. A few 68HC11 instructions are 13621 replaced by some 68HC12 instructions as recommended by Motorola 13622 specifications. 13623 13624`-m68hcs12' 13625 This option switches the assembler into the M68HCS12 mode. This 13626 mode is similar to `-m68hc12' but specifies to assemble for the 13627 68HCS12 series. The only difference is on the assembling of the 13628 `movb' and `movw' instruction when a PC-relative operand is used. 13629 13630`-mm9s12x' 13631 This option switches the assembler into the M9S12X mode. This 13632 mode is similar to `-m68hc12' but specifies to assemble for the 13633 S12X series which is a superset of the HCS12. 13634 13635`-mm9s12xg' 13636 This option switches the assembler into the XGATE mode for the RISC 13637 co-processor featured on some S12X-family chips. 13638 13639`--xgate-ramoffset' 13640 This option instructs the linker to offset RAM addresses from S12X 13641 address space into XGATE address space. 13642 13643`-mshort' 13644 This option controls the ABI and indicates to use a 16-bit integer 13645 ABI. It has no effect on the assembled instructions. This is the 13646 default. 13647 13648`-mlong' 13649 This option controls the ABI and indicates to use a 32-bit integer 13650 ABI. 13651 13652`-mshort-double' 13653 This option controls the ABI and indicates to use a 32-bit float 13654 ABI. This is the default. 13655 13656`-mlong-double' 13657 This option controls the ABI and indicates to use a 64-bit float 13658 ABI. 13659 13660`--strict-direct-mode' 13661 You can use the `--strict-direct-mode' option to disable the 13662 automatic translation of direct page mode addressing into extended 13663 mode when the instruction does not support direct mode. For 13664 example, the `clr' instruction does not support direct page mode 13665 addressing. When it is used with the direct page mode, `as' will 13666 ignore it and generate an absolute addressing. This option 13667 prevents `as' from doing this, and the wrong usage of the direct 13668 page mode will raise an error. 13669 13670`--short-branches' 13671 The `--short-branches' option turns off the translation of 13672 relative branches into absolute branches when the branch offset is 13673 out of range. By default `as' transforms the relative branch 13674 (`bsr', `bgt', `bge', `beq', `bne', `ble', `blt', `bhi', `bcc', 13675 `bls', `bcs', `bmi', `bvs', `bvs', `bra') into an absolute branch 13676 when the offset is out of the -128 .. 127 range. In that case, 13677 the `bsr' instruction is translated into a `jsr', the `bra' 13678 instruction is translated into a `jmp' and the conditional 13679 branches instructions are inverted and followed by a `jmp'. This 13680 option disables these translations and `as' will generate an error 13681 if a relative branch is out of range. This option does not affect 13682 the optimization associated to the `jbra', `jbsr' and `jbXX' 13683 pseudo opcodes. 13684 13685`--force-long-branches' 13686 The `--force-long-branches' option forces the translation of 13687 relative branches into absolute branches. This option does not 13688 affect the optimization associated to the `jbra', `jbsr' and 13689 `jbXX' pseudo opcodes. 13690 13691`--print-insn-syntax' 13692 You can use the `--print-insn-syntax' option to obtain the syntax 13693 description of the instruction when an error is detected. 13694 13695`--print-opcodes' 13696 The `--print-opcodes' option prints the list of all the 13697 instructions with their syntax. The first item of each line 13698 represents the instruction name and the rest of the line indicates 13699 the possible operands for that instruction. The list is printed in 13700 alphabetical order. Once the list is printed `as' exits. 13701 13702`--generate-example' 13703 The `--generate-example' option is similar to `--print-opcodes' 13704 but it generates an example for each instruction instead. 13705 13706 13707File: as.info, Node: M68HC11-Syntax, Next: M68HC11-Modifiers, Prev: M68HC11-Opts, Up: M68HC11-Dependent 13708 137099.24.2 Syntax 13710------------- 13711 13712In the M68HC11 syntax, the instruction name comes first and it may be 13713followed by one or several operands (up to three). Operands are 13714separated by comma (`,'). In the normal mode, `as' will complain if too 13715many operands are specified for a given instruction. In the MRI mode 13716(turned on with `-M' option), it will treat them as comments. Example: 13717 13718 inx 13719 lda #23 13720 bset 2,x #4 13721 brclr *bot #8 foo 13722 13723 The presence of a `;' character or a `!' character anywhere on a 13724line indicates the start of a comment that extends to the end of that 13725line. 13726 13727 A `*' or a `#' character at the start of a line also introduces a 13728line comment, but these characters do not work elsewhere on the line. 13729If the first character of the line is a `#' then as well as starting a 13730comment, the line could also be logical line number directive (*note 13731Comments::) or a preprocessor control command (*note Preprocessing::). 13732 13733 The M68HC11 assembler does not currently support a line separator 13734character. 13735 13736 The following addressing modes are understood for 68HC11 and 68HC12: 13737"Immediate" 13738 `#NUMBER' 13739 13740"Address Register" 13741 `NUMBER,X', `NUMBER,Y' 13742 13743 The NUMBER may be omitted in which case 0 is assumed. 13744 13745"Direct Addressing mode" 13746 `*SYMBOL', or `*DIGITS' 13747 13748"Absolute" 13749 `SYMBOL', or `DIGITS' 13750 13751 The M68HC12 has other more complex addressing modes. All of them are 13752supported and they are represented below: 13753 13754"Constant Offset Indexed Addressing Mode" 13755 `NUMBER,REG' 13756 13757 The NUMBER may be omitted in which case 0 is assumed. The 13758 register can be either `X', `Y', `SP' or `PC'. The assembler will 13759 use the smaller post-byte definition according to the constant 13760 value (5-bit constant offset, 9-bit constant offset or 16-bit 13761 constant offset). If the constant is not known by the assembler 13762 it will use the 16-bit constant offset post-byte and the value 13763 will be resolved at link time. 13764 13765"Offset Indexed Indirect" 13766 `[NUMBER,REG]' 13767 13768 The register can be either `X', `Y', `SP' or `PC'. 13769 13770"Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement" 13771 `NUMBER,-REG' `NUMBER,+REG' `NUMBER,REG-' `NUMBER,REG+' 13772 13773 The number must be in the range `-8'..`+8' and must not be 0. The 13774 register can be either `X', `Y', `SP' or `PC'. 13775 13776"Accumulator Offset" 13777 `ACC,REG' 13778 13779 The accumulator register can be either `A', `B' or `D'. The 13780 register can be either `X', `Y', `SP' or `PC'. 13781 13782"Accumulator D offset indexed-indirect" 13783 `[D,REG]' 13784 13785 The register can be either `X', `Y', `SP' or `PC'. 13786 13787 13788 For example: 13789 13790 ldab 1024,sp 13791 ldd [10,x] 13792 orab 3,+x 13793 stab -2,y- 13794 ldx a,pc 13795 sty [d,sp] 13796 13797 13798File: as.info, Node: M68HC11-Modifiers, Next: M68HC11-Directives, Prev: M68HC11-Syntax, Up: M68HC11-Dependent 13799 138009.24.3 Symbolic Operand Modifiers 13801--------------------------------- 13802 13803The assembler supports several modifiers when using symbol addresses in 1380468HC11 and 68HC12 instruction operands. The general syntax is the 13805following: 13806 13807 %modifier(symbol) 13808 13809`%addr' 13810 This modifier indicates to the assembler and linker to use the 13811 16-bit physical address corresponding to the symbol. This is 13812 intended to be used on memory window systems to map a symbol in 13813 the memory bank window. If the symbol is in a memory expansion 13814 part, the physical address corresponds to the symbol address 13815 within the memory bank window. If the symbol is not in a memory 13816 expansion part, this is the symbol address (using or not using the 13817 %addr modifier has no effect in that case). 13818 13819`%page' 13820 This modifier indicates to use the memory page number corresponding 13821 to the symbol. If the symbol is in a memory expansion part, its 13822 page number is computed by the linker as a number used to map the 13823 page containing the symbol in the memory bank window. If the 13824 symbol is not in a memory expansion part, the page number is 0. 13825 13826`%hi' 13827 This modifier indicates to use the 8-bit high part of the physical 13828 address of the symbol. 13829 13830`%lo' 13831 This modifier indicates to use the 8-bit low part of the physical 13832 address of the symbol. 13833 13834 13835 For example a 68HC12 call to a function `foo_example' stored in 13836memory expansion part could be written as follows: 13837 13838 call %addr(foo_example),%page(foo_example) 13839 13840 and this is equivalent to 13841 13842 call foo_example 13843 13844 And for 68HC11 it could be written as follows: 13845 13846 ldab #%page(foo_example) 13847 stab _page_switch 13848 jsr %addr(foo_example) 13849 13850 13851File: as.info, Node: M68HC11-Directives, Next: M68HC11-Float, Prev: M68HC11-Modifiers, Up: M68HC11-Dependent 13852 138539.24.4 Assembler Directives 13854--------------------------- 13855 13856The 68HC11 and 68HC12 version of `as' have the following specific 13857assembler directives: 13858 13859`.relax' 13860 The relax directive is used by the `GNU Compiler' to emit a 13861 specific relocation to mark a group of instructions for linker 13862 relaxation. The sequence of instructions within the group must be 13863 known to the linker so that relaxation can be performed. 13864 13865`.mode [mshort|mlong|mshort-double|mlong-double]' 13866 This directive specifies the ABI. It overrides the `-mshort', 13867 `-mlong', `-mshort-double' and `-mlong-double' options. 13868 13869`.far SYMBOL' 13870 This directive marks the symbol as a `far' symbol meaning that it 13871 uses a `call/rtc' calling convention as opposed to `jsr/rts'. 13872 During a final link, the linker will identify references to the 13873 `far' symbol and will verify the proper calling convention. 13874 13875`.interrupt SYMBOL' 13876 This directive marks the symbol as an interrupt entry point. This 13877 information is then used by the debugger to correctly unwind the 13878 frame across interrupts. 13879 13880`.xrefb SYMBOL' 13881 This directive is defined for compatibility with the 13882 `Specification for Motorola 8 and 16-Bit Assembly Language Input 13883 Standard' and is ignored. 13884 13885 13886 13887File: as.info, Node: M68HC11-Float, Next: M68HC11-opcodes, Prev: M68HC11-Directives, Up: M68HC11-Dependent 13888 138899.24.5 Floating Point 13890--------------------- 13891 13892Packed decimal (P) format floating literals are not supported. Feel 13893free to add the code! 13894 13895 The floating point formats generated by directives are these. 13896 13897`.float' 13898 `Single' precision floating point constants. 13899 13900`.double' 13901 `Double' precision floating point constants. 13902 13903`.extend' 13904`.ldouble' 13905 `Extended' precision (`long double') floating point constants. 13906 13907 13908File: as.info, Node: M68HC11-opcodes, Prev: M68HC11-Float, Up: M68HC11-Dependent 13909 139109.24.6 Opcodes 13911-------------- 13912 13913* Menu: 13914 13915* M68HC11-Branch:: Branch Improvement 13916 13917 13918File: as.info, Node: M68HC11-Branch, Up: M68HC11-opcodes 13919 139209.24.6.1 Branch Improvement 13921........................... 13922 13923Certain pseudo opcodes are permitted for branch instructions. They 13924expand to the shortest branch instruction that reach the target. 13925Generally these mnemonics are made by prepending `j' to the start of 13926Motorola mnemonic. These pseudo opcodes are not affected by the 13927`--short-branches' or `--force-long-branches' options. 13928 13929 The following table summarizes the pseudo-operations. 13930 13931 Displacement Width 13932 +-------------------------------------------------------------+ 13933 | Options | 13934 | --short-branches --force-long-branches | 13935 +--------------------------+----------------------------------+ 13936 Op |BYTE WORD | BYTE WORD | 13937 +--------------------------+----------------------------------+ 13938 bsr | bsr <pc-rel> <error> | jsr <abs> | 13939 bra | bra <pc-rel> <error> | jmp <abs> | 13940 jbsr | bsr <pc-rel> jsr <abs> | bsr <pc-rel> jsr <abs> | 13941 jbra | bra <pc-rel> jmp <abs> | bra <pc-rel> jmp <abs> | 13942 bXX | bXX <pc-rel> <error> | bNX +3; jmp <abs> | 13943 jbXX | bXX <pc-rel> bNX +3; | bXX <pc-rel> bNX +3; jmp <abs> | 13944 | jmp <abs> | | 13945 +--------------------------+----------------------------------+ 13946 XX: condition 13947 NX: negative of condition XX 13948 13949`jbsr' 13950`jbra' 13951 These are the simplest jump pseudo-operations; they always map to 13952 one particular machine instruction, depending on the displacement 13953 to the branch target. 13954 13955`jbXX' 13956 Here, `jbXX' stands for an entire family of pseudo-operations, 13957 where XX is a conditional branch or condition-code test. The full 13958 list of pseudo-ops in this family is: 13959 jbcc jbeq jbge jbgt jbhi jbvs jbpl jblo 13960 jbcs jbne jblt jble jbls jbvc jbmi 13961 13962 For the cases of non-PC relative displacements and long 13963 displacements, `as' issues a longer code fragment in terms of NX, 13964 the opposite condition to XX. For example, for the non-PC 13965 relative case: 13966 jbXX foo 13967 gives 13968 bNXs oof 13969 jmp foo 13970 oof: 13971 13972 13973 13974File: as.info, Node: Meta-Dependent, Next: MicroBlaze-Dependent, Prev: M68HC11-Dependent, Up: Machine Dependencies 13975 139769.25 Meta Dependent Features 13977============================ 13978 13979* Menu: 13980 13981* Meta Options:: Options 13982* Meta Syntax:: Meta Assembler Syntax 13983 13984 13985File: as.info, Node: Meta Options, Next: Meta Syntax, Up: Meta-Dependent 13986 139879.25.1 Options 13988-------------- 13989 13990The Imagination Technologies Meta architecture is implemented in a 13991number of versions, with each new version adding new features such as 13992instructions and registers. For precise details of what instructions 13993each core supports, please see the chip's technical reference manual. 13994 13995 The following table lists all available Meta options. 13996 13997`-mcpu=metac11' 13998 Generate code for Meta 1.1. 13999 14000`-mcpu=metac12' 14001 Generate code for Meta 1.2. 14002 14003`-mcpu=metac21' 14004 Generate code for Meta 2.1. 14005 14006`-mfpu=metac21' 14007 Allow code to use FPU hardware of Meta 2.1. 14008 14009 14010 14011File: as.info, Node: Meta Syntax, Prev: Meta Options, Up: Meta-Dependent 14012 140139.25.2 Syntax 14014------------- 14015 14016* Menu: 14017 14018* Meta-Chars:: Special Characters 14019* Meta-Regs:: Register Names 14020 14021 14022File: as.info, Node: Meta-Chars, Next: Meta-Regs, Up: Meta Syntax 14023 140249.25.2.1 Special Characters 14025........................... 14026 14027`!' is the line comment character. 14028 14029 You can use `;' instead of a newline to separate statements. 14030 14031 Since `$' has no special meaning, you may use it in symbol names. 14032 14033 14034File: as.info, Node: Meta-Regs, Prev: Meta-Chars, Up: Meta Syntax 14035 140369.25.2.2 Register Names 14037....................... 14038 14039Registers can be specified either using their mnemonic names, such as 14040`D0Re0', or using the unit plus register number separated by a `.', 14041such as `D0.0'. 14042 14043 14044File: as.info, Node: MicroBlaze-Dependent, Next: MIPS-Dependent, Prev: Meta-Dependent, Up: Machine Dependencies 14045 140469.26 MicroBlaze Dependent Features 14047================================== 14048 14049 The Xilinx MicroBlaze processor family includes several variants, 14050all using the same core instruction set. This chapter covers features 14051of the GNU assembler that are specific to the MicroBlaze architecture. 14052For details about the MicroBlaze instruction set, please see the 14053`MicroBlaze Processor Reference Guide (UG081)' available at 14054www.xilinx.com. 14055 14056* Menu: 14057 14058* MicroBlaze Directives:: Directives for MicroBlaze Processors. 14059* MicroBlaze Syntax:: Syntax for the MicroBlaze 14060 14061 14062File: as.info, Node: MicroBlaze Directives, Next: MicroBlaze Syntax, Up: MicroBlaze-Dependent 14063 140649.26.1 Directives 14065----------------- 14066 14067A number of assembler directives are available for MicroBlaze. 14068 14069`.data8 EXPRESSION,...' 14070 This directive is an alias for `.byte'. Each expression is 14071 assembled into an eight-bit value. 14072 14073`.data16 EXPRESSION,...' 14074 This directive is an alias for `.hword'. Each expression is 14075 assembled into an 16-bit value. 14076 14077`.data32 EXPRESSION,...' 14078 This directive is an alias for `.word'. Each expression is 14079 assembled into an 32-bit value. 14080 14081`.ent NAME[,LABEL]' 14082 This directive is an alias for `.func' denoting the start of 14083 function NAME at (optional) LABEL. 14084 14085`.end NAME[,LABEL]' 14086 This directive is an alias for `.endfunc' denoting the end of 14087 function NAME. 14088 14089`.gpword LABEL,...' 14090 This directive is an alias for `.rva'. The resolved address of 14091 LABEL is stored in the data section. 14092 14093`.weakext LABEL' 14094 Declare that LABEL is a weak external symbol. 14095 14096`.rodata' 14097 Switch to .rodata section. Equivalent to `.section .rodata' 14098 14099`.sdata2' 14100 Switch to .sdata2 section. Equivalent to `.section .sdata2' 14101 14102`.sdata' 14103 Switch to .sdata section. Equivalent to `.section .sdata' 14104 14105`.bss' 14106 Switch to .bss section. Equivalent to `.section .bss' 14107 14108`.sbss' 14109 Switch to .sbss section. Equivalent to `.section .sbss' 14110 14111 14112File: as.info, Node: MicroBlaze Syntax, Prev: MicroBlaze Directives, Up: MicroBlaze-Dependent 14113 141149.26.2 Syntax for the MicroBlaze 14115-------------------------------- 14116 14117* Menu: 14118 14119* MicroBlaze-Chars:: Special Characters 14120 14121 14122File: as.info, Node: MicroBlaze-Chars, Up: MicroBlaze Syntax 14123 141249.26.2.1 Special Characters 14125........................... 14126 14127The presence of a `#' on a line indicates the start of a comment that 14128extends to the end of the current line. 14129 14130 If a `#' appears as the first character of a line, the whole line is 14131treated as a comment, but in this case the line can also be a logical 14132line number directive (*note Comments::) or a preprocessor control 14133command (*note Preprocessing::). 14134 14135 The `;' character can be used to separate statements on the same 14136line. 14137 14138 14139File: as.info, Node: MIPS-Dependent, Next: MMIX-Dependent, Prev: MicroBlaze-Dependent, Up: Machine Dependencies 14140 141419.27 MIPS Dependent Features 14142============================ 14143 14144 GNU `as' for MIPS architectures supports several different MIPS 14145processors, and MIPS ISA levels I through V, MIPS32, and MIPS64. For 14146information about the MIPS instruction set, see `MIPS RISC 14147Architecture', by Kane and Heindrich (Prentice-Hall). For an overview 14148of MIPS assembly conventions, see "Appendix D: Assembly Language 14149Programming" in the same work. 14150 14151* Menu: 14152 14153* MIPS Options:: Assembler options 14154* MIPS Macros:: High-level assembly macros 14155* MIPS Symbol Sizes:: Directives to override the size of symbols 14156* MIPS Small Data:: Controlling the use of small data accesses 14157* MIPS ISA:: Directives to override the ISA level 14158* MIPS assembly options:: Directives to control code generation 14159* MIPS autoextend:: Directives for extending MIPS 16 bit instructions 14160* MIPS insn:: Directive to mark data as an instruction 14161* MIPS FP ABIs:: Marking which FP ABI is in use 14162* MIPS NaN Encodings:: Directives to record which NaN encoding is being used 14163* MIPS Option Stack:: Directives to save and restore options 14164* MIPS ASE Instruction Generation Overrides:: Directives to control 14165 generation of MIPS ASE instructions 14166* MIPS Floating-Point:: Directives to override floating-point options 14167* MIPS Syntax:: MIPS specific syntactical considerations 14168 14169 14170File: as.info, Node: MIPS Options, Next: MIPS Macros, Up: MIPS-Dependent 14171 141729.27.1 Assembler options 14173------------------------ 14174 14175The MIPS configurations of GNU `as' support these special options: 14176 14177`-G NUM' 14178 Set the "small data" limit to N bytes. The default limit is 8 14179 bytes. *Note Controlling the use of small data accesses: MIPS 14180 Small Data. 14181 14182`-EB' 14183`-EL' 14184 Any MIPS configuration of `as' can select big-endian or 14185 little-endian output at run time (unlike the other GNU development 14186 tools, which must be configured for one or the other). Use `-EB' 14187 to select big-endian output, and `-EL' for little-endian. 14188 14189`-KPIC' 14190 Generate SVR4-style PIC. This option tells the assembler to 14191 generate SVR4-style position-independent macro expansions. It 14192 also tells the assembler to mark the output file as PIC. 14193 14194`-mvxworks-pic' 14195 Generate VxWorks PIC. This option tells the assembler to generate 14196 VxWorks-style position-independent macro expansions. 14197 14198`-mips1' 14199`-mips2' 14200`-mips3' 14201`-mips4' 14202`-mips5' 14203`-mips32' 14204`-mips32r2' 14205`-mips32r3' 14206`-mips32r5' 14207`-mips32r6' 14208`-mips64' 14209`-mips64r2' 14210`-mips64r3' 14211`-mips64r5' 14212`-mips64r6' 14213 Generate code for a particular MIPS Instruction Set Architecture 14214 level. `-mips1' corresponds to the R2000 and R3000 processors, 14215 `-mips2' to the R6000 processor, `-mips3' to the R4000 processor, 14216 and `-mips4' to the R8000 and R10000 processors. `-mips5', 14217 `-mips32', `-mips32r2', `-mips32r3', `-mips32r5', `-mips32r6', 14218 `-mips64', `-mips64r2', `-mips64r3', `-mips64r5', and `-mips64r6' 14219 correspond to generic MIPS V, MIPS32, MIPS32 Release 2, MIPS32 14220 Release 3, MIPS32 Release 5, MIPS32 Release 6, MIPS64, and MIPS64 14221 Release 2, MIPS64 Release 3, MIPS64 Release 5, and MIPS64 Release 14222 6 ISA processors, respectively. You can also switch instruction 14223 sets during the assembly; see *Note Directives to override the ISA 14224 level: MIPS ISA. 14225 14226`-mgp32' 14227`-mfp32' 14228 Some macros have different expansions for 32-bit and 64-bit 14229 registers. The register sizes are normally inferred from the ISA 14230 and ABI, but these flags force a certain group of registers to be 14231 treated as 32 bits wide at all times. `-mgp32' controls the size 14232 of general-purpose registers and `-mfp32' controls the size of 14233 floating-point registers. 14234 14235 The `.set gp=32' and `.set fp=32' directives allow the size of 14236 registers to be changed for parts of an object. The default value 14237 is restored by `.set gp=default' and `.set fp=default'. 14238 14239 On some MIPS variants there is a 32-bit mode flag; when this flag 14240 is set, 64-bit instructions generate a trap. Also, some 32-bit 14241 OSes only save the 32-bit registers on a context switch, so it is 14242 essential never to use the 64-bit registers. 14243 14244`-mgp64' 14245`-mfp64' 14246 Assume that 64-bit registers are available. This is provided in 14247 the interests of symmetry with `-mgp32' and `-mfp32'. 14248 14249 The `.set gp=64' and `.set fp=64' directives allow the size of 14250 registers to be changed for parts of an object. The default value 14251 is restored by `.set gp=default' and `.set fp=default'. 14252 14253`-mfpxx' 14254 Make no assumptions about whether 32-bit or 64-bit floating-point 14255 registers are available. This is provided to support having modules 14256 compatible with either `-mfp32' or `-mfp64'. This option can only 14257 be used with MIPS II and above. 14258 14259 The `.set fp=xx' directive allows a part of an object to be marked 14260 as not making assumptions about 32-bit or 64-bit FP registers. The 14261 default value is restored by `.set fp=default'. 14262 14263`-modd-spreg' 14264`-mno-odd-spreg' 14265 Enable use of floating-point operations on odd-numbered 14266 single-precision registers when supported by the ISA. `-mfpxx' 14267 implies `-mno-odd-spreg', otherwise the default is `-modd-spreg' 14268 14269`-mips16' 14270`-no-mips16' 14271 Generate code for the MIPS 16 processor. This is equivalent to 14272 putting `.set mips16' at the start of the assembly file. 14273 `-no-mips16' turns off this option. 14274 14275`-mmicromips' 14276`-mno-micromips' 14277 Generate code for the microMIPS processor. This is equivalent to 14278 putting `.set micromips' at the start of the assembly file. 14279 `-mno-micromips' turns off this option. This is equivalent to 14280 putting `.set nomicromips' at the start of the assembly file. 14281 14282`-msmartmips' 14283`-mno-smartmips' 14284 Enables the SmartMIPS extensions to the MIPS32 instruction set, 14285 which provides a number of new instructions which target smartcard 14286 and cryptographic applications. This is equivalent to putting 14287 `.set smartmips' at the start of the assembly file. 14288 `-mno-smartmips' turns off this option. 14289 14290`-mips3d' 14291`-no-mips3d' 14292 Generate code for the MIPS-3D Application Specific Extension. 14293 This tells the assembler to accept MIPS-3D instructions. 14294 `-no-mips3d' turns off this option. 14295 14296`-mdmx' 14297`-no-mdmx' 14298 Generate code for the MDMX Application Specific Extension. This 14299 tells the assembler to accept MDMX instructions. `-no-mdmx' turns 14300 off this option. 14301 14302`-mdsp' 14303`-mno-dsp' 14304 Generate code for the DSP Release 1 Application Specific Extension. 14305 This tells the assembler to accept DSP Release 1 instructions. 14306 `-mno-dsp' turns off this option. 14307 14308`-mdspr2' 14309`-mno-dspr2' 14310 Generate code for the DSP Release 2 Application Specific Extension. 14311 This option implies `-mdsp'. This tells the assembler to accept 14312 DSP Release 2 instructions. `-mno-dspr2' turns off this option. 14313 14314`-mdspr3' 14315`-mno-dspr3' 14316 Generate code for the DSP Release 3 Application Specific Extension. 14317 This option implies `-mdsp' and `-mdspr2'. This tells the 14318 assembler to accept DSP Release 3 instructions. `-mno-dspr3' 14319 turns off this option. 14320 14321`-mmt' 14322`-mno-mt' 14323 Generate code for the MT Application Specific Extension. This 14324 tells the assembler to accept MT instructions. `-mno-mt' turns 14325 off this option. 14326 14327`-mmcu' 14328`-mno-mcu' 14329 Generate code for the MCU Application Specific Extension. This 14330 tells the assembler to accept MCU instructions. `-mno-mcu' turns 14331 off this option. 14332 14333`-mmsa' 14334`-mno-msa' 14335 Generate code for the MIPS SIMD Architecture Extension. This 14336 tells the assembler to accept MSA instructions. `-mno-msa' turns 14337 off this option. 14338 14339`-mxpa' 14340`-mno-xpa' 14341 Generate code for the MIPS eXtended Physical Address (XPA) 14342 Extension. This tells the assembler to accept XPA instructions. 14343 `-mno-xpa' turns off this option. 14344 14345`-mvirt' 14346`-mno-virt' 14347 Generate code for the Virtualization Application Specific 14348 Extension. This tells the assembler to accept Virtualization 14349 instructions. `-mno-virt' turns off this option. 14350 14351`-minsn32' 14352`-mno-insn32' 14353 Only use 32-bit instruction encodings when generating code for the 14354 microMIPS processor. This option inhibits the use of any 16-bit 14355 instructions. This is equivalent to putting `.set insn32' at the 14356 start of the assembly file. `-mno-insn32' turns off this option. 14357 This is equivalent to putting `.set noinsn32' at the start of the 14358 assembly file. By default `-mno-insn32' is selected, allowing all 14359 instructions to be used. 14360 14361`-mfix7000' 14362`-mno-fix7000' 14363 Cause nops to be inserted if the read of the destination register 14364 of an mfhi or mflo instruction occurs in the following two 14365 instructions. 14366 14367`-mfix-rm7000' 14368`-mno-fix-rm7000' 14369 Cause nops to be inserted if a dmult or dmultu instruction is 14370 followed by a load instruction. 14371 14372`-mfix-loongson2f-jump' 14373`-mno-fix-loongson2f-jump' 14374 Eliminate instruction fetch from outside 256M region to work 14375 around the Loongson2F `jump' instructions. Without it, under 14376 extreme cases, the kernel may crash. The issue has been solved in 14377 latest processor batches, but this fix has no side effect to them. 14378 14379`-mfix-loongson2f-nop' 14380`-mno-fix-loongson2f-nop' 14381 Replace nops by `or at,at,zero' to work around the Loongson2F 14382 `nop' errata. Without it, under extreme cases, the CPU might 14383 deadlock. The issue has been solved in later Loongson2F batches, 14384 but this fix has no side effect to them. 14385 14386`-mfix-vr4120' 14387`-mno-fix-vr4120' 14388 Insert nops to work around certain VR4120 errata. This option is 14389 intended to be used on GCC-generated code: it is not designed to 14390 catch all problems in hand-written assembler code. 14391 14392`-mfix-vr4130' 14393`-mno-fix-vr4130' 14394 Insert nops to work around the VR4130 `mflo'/`mfhi' errata. 14395 14396`-mfix-24k' 14397`-mno-fix-24k' 14398 Insert nops to work around the 24K `eret'/`deret' errata. 14399 14400`-mfix-cn63xxp1' 14401`-mno-fix-cn63xxp1' 14402 Replace `pref' hints 0 - 4 and 6 - 24 with hint 28 to work around 14403 certain CN63XXP1 errata. 14404 14405`-m4010' 14406`-no-m4010' 14407 Generate code for the LSI R4010 chip. This tells the assembler to 14408 accept the R4010-specific instructions (`addciu', `ffc', etc.), 14409 and to not schedule `nop' instructions around accesses to the `HI' 14410 and `LO' registers. `-no-m4010' turns off this option. 14411 14412`-m4650' 14413`-no-m4650' 14414 Generate code for the MIPS R4650 chip. This tells the assembler 14415 to accept the `mad' and `madu' instruction, and to not schedule 14416 `nop' instructions around accesses to the `HI' and `LO' registers. 14417 `-no-m4650' turns off this option. 14418 14419`-m3900' 14420`-no-m3900' 14421`-m4100' 14422`-no-m4100' 14423 For each option `-mNNNN', generate code for the MIPS RNNNN chip. 14424 This tells the assembler to accept instructions specific to that 14425 chip, and to schedule for that chip's hazards. 14426 14427`-march=CPU' 14428 Generate code for a particular MIPS CPU. It is exactly equivalent 14429 to `-mCPU', except that there are more value of CPU understood. 14430 Valid CPU value are: 14431 14432 2000, 3000, 3900, 4000, 4010, 4100, 4111, vr4120, vr4130, 14433 vr4181, 4300, 4400, 4600, 4650, 5000, rm5200, rm5230, rm5231, 14434 rm5261, rm5721, vr5400, vr5500, 6000, rm7000, 8000, rm9000, 14435 10000, 12000, 14000, 16000, 4kc, 4km, 4kp, 4ksc, 4kec, 4kem, 14436 4kep, 4ksd, m4k, m4kp, m14k, m14kc, m14ke, m14kec, 24kc, 14437 24kf2_1, 24kf, 24kf1_1, 24kec, 24kef2_1, 24kef, 24kef1_1, 14438 34kc, 34kf2_1, 34kf, 34kf1_1, 34kn, 74kc, 74kf2_1, 74kf, 14439 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf, 1004kf1_1, 14440 interaptiv, m5100, m5101, p5600, 5kc, 5kf, 20kc, 25kf, sb1, 14441 sb1a, i6400, p6600, loongson2e, loongson2f, loongson3a, 14442 octeon, octeon+, octeon2, octeon3, xlr, xlp 14443 14444 For compatibility reasons, `Nx' and `Bfx' are accepted as synonyms 14445 for `Nf1_1'. These values are deprecated. 14446 14447`-mtune=CPU' 14448 Schedule and tune for a particular MIPS CPU. Valid CPU values are 14449 identical to `-march=CPU'. 14450 14451`-mabi=ABI' 14452 Record which ABI the source code uses. The recognized arguments 14453 are: `32', `n32', `o64', `64' and `eabi'. 14454 14455`-msym32' 14456`-mno-sym32' 14457 Equivalent to adding `.set sym32' or `.set nosym32' to the 14458 beginning of the assembler input. *Note MIPS Symbol Sizes::. 14459 14460`-nocpp' 14461 This option is ignored. It is accepted for command-line 14462 compatibility with other assemblers, which use it to turn off C 14463 style preprocessing. With GNU `as', there is no need for 14464 `-nocpp', because the GNU assembler itself never runs the C 14465 preprocessor. 14466 14467`-msoft-float' 14468`-mhard-float' 14469 Disable or enable floating-point instructions. Note that by 14470 default floating-point instructions are always allowed even with 14471 CPU targets that don't have support for these instructions. 14472 14473`-msingle-float' 14474`-mdouble-float' 14475 Disable or enable double-precision floating-point operations. Note 14476 that by default double-precision floating-point operations are 14477 always allowed even with CPU targets that don't have support for 14478 these operations. 14479 14480`--construct-floats' 14481`--no-construct-floats' 14482 The `--no-construct-floats' option disables the construction of 14483 double width floating point constants by loading the two halves of 14484 the value into the two single width floating point registers that 14485 make up the double width register. This feature is useful if the 14486 processor support the FR bit in its status register, and this bit 14487 is known (by the programmer) to be set. This bit prevents the 14488 aliasing of the double width register by the single width 14489 registers. 14490 14491 By default `--construct-floats' is selected, allowing construction 14492 of these floating point constants. 14493 14494`--relax-branch' 14495`--no-relax-branch' 14496 The `--relax-branch' option enables the relaxation of out-of-range 14497 branches. Any branches whose target cannot be reached directly are 14498 converted to a small instruction sequence including an 14499 inverse-condition branch to the physically next instruction, and a 14500 jump to the original target is inserted between the two 14501 instructions. In PIC code the jump will involve further 14502 instructions for address calculation. 14503 14504 The `BC1ANY2F', `BC1ANY2T', `BC1ANY4F', `BC1ANY4T', `BPOSGE32' and 14505 `BPOSGE64' instructions are excluded from relaxation, because they 14506 have no complementing counterparts. They could be relaxed with 14507 the use of a longer sequence involving another branch, however 14508 this has not been implemented and if their target turns out of 14509 reach, they produce an error even if branch relaxation is enabled. 14510 14511 Also no MIPS16 branches are ever relaxed. 14512 14513 By default `--no-relax-branch' is selected, causing any 14514 out-of-range branches to produce an error. 14515 14516`-mnan=ENCODING' 14517 This option indicates whether the source code uses the IEEE 2008 14518 NaN encoding (`-mnan=2008') or the original MIPS encoding 14519 (`-mnan=legacy'). It is equivalent to adding a `.nan' directive 14520 to the beginning of the source file. *Note MIPS NaN Encodings::. 14521 14522 `-mnan=legacy' is the default if no `-mnan' option or `.nan' 14523 directive is used. 14524 14525`--trap' 14526`--no-break' 14527 `as' automatically macro expands certain division and 14528 multiplication instructions to check for overflow and division by 14529 zero. This option causes `as' to generate code to take a trap 14530 exception rather than a break exception when an error is detected. 14531 The trap instructions are only supported at Instruction Set 14532 Architecture level 2 and higher. 14533 14534`--break' 14535`--no-trap' 14536 Generate code to take a break exception rather than a trap 14537 exception when an error is detected. This is the default. 14538 14539`-mpdr' 14540`-mno-pdr' 14541 Control generation of `.pdr' sections. Off by default on IRIX, on 14542 elsewhere. 14543 14544`-mshared' 14545`-mno-shared' 14546 When generating code using the Unix calling conventions (selected 14547 by `-KPIC' or `-mcall_shared'), gas will normally generate code 14548 which can go into a shared library. The `-mno-shared' option 14549 tells gas to generate code which uses the calling convention, but 14550 can not go into a shared library. The resulting code is slightly 14551 more efficient. This option only affects the handling of the 14552 `.cpload' and `.cpsetup' pseudo-ops. 14553 14554 14555File: as.info, Node: MIPS Macros, Next: MIPS Symbol Sizes, Prev: MIPS Options, Up: MIPS-Dependent 14556 145579.27.2 High-level assembly macros 14558--------------------------------- 14559 14560MIPS assemblers have traditionally provided a wider range of 14561instructions than the MIPS architecture itself. These extra 14562instructions are usually referred to as "macro" instructions (1). 14563 14564 Some MIPS macro instructions extend an underlying architectural 14565instruction while others are entirely new. An example of the former 14566type is `and', which allows the third operand to be either a register 14567or an arbitrary immediate value. Examples of the latter type include 14568`bgt', which branches to the third operand when the first operand is 14569greater than the second operand, and `ulh', which implements an 14570unaligned 2-byte load. 14571 14572 One of the most common extensions provided by macros is to expand 14573memory offsets to the full address range (32 or 64 bits) and to allow 14574symbolic offsets such as `my_data + 4' to be used in place of integer 14575constants. For example, the architectural instruction `lbu' allows 14576only a signed 16-bit offset, whereas the macro `lbu' allows code such 14577as `lbu $4,array+32769($5)'. The implementation of these symbolic 14578offsets depends on several factors, such as whether the assembler is 14579generating SVR4-style PIC (selected by `-KPIC', *note Assembler 14580options: MIPS Options.), the size of symbols (*note Directives to 14581override the size of symbols: MIPS Symbol Sizes.), and the small data 14582limit (*note Controlling the use of small data accesses: MIPS Small 14583Data.). 14584 14585 Sometimes it is undesirable to have one assembly instruction expand 14586to several machine instructions. The directive `.set nomacro' tells 14587the assembler to warn when this happens. `.set macro' restores the 14588default behavior. 14589 14590 Some macro instructions need a temporary register to store 14591intermediate results. This register is usually `$1', also known as 14592`$at', but it can be changed to any core register REG using `.set 14593at=REG'. Note that `$at' always refers to `$1' regardless of which 14594register is being used as the temporary register. 14595 14596 Implicit uses of the temporary register in macros could interfere 14597with explicit uses in the assembly code. The assembler therefore warns 14598whenever it sees an explicit use of the temporary register. The 14599directive `.set noat' silences this warning while `.set at' restores 14600the default behavior. It is safe to use `.set noat' while `.set 14601nomacro' is in effect since single-instruction macros never need a 14602temporary register. 14603 14604 Note that while the GNU assembler provides these macros for 14605compatibility, it does not make any attempt to optimize them with the 14606surrounding code. 14607 14608 ---------- Footnotes ---------- 14609 14610 (1) The term "macro" is somewhat overloaded here, since these macros 14611have no relation to those defined by `.macro', *note `.macro': Macro. 14612 14613 14614File: as.info, Node: MIPS Symbol Sizes, Next: MIPS Small Data, Prev: MIPS Macros, Up: MIPS-Dependent 14615 146169.27.3 Directives to override the size of symbols 14617------------------------------------------------- 14618 14619The n64 ABI allows symbols to have any 64-bit value. Although this 14620provides a great deal of flexibility, it means that some macros have 14621much longer expansions than their 32-bit counterparts. For example, 14622the non-PIC expansion of `dla $4,sym' is usually: 14623 14624 lui $4,%highest(sym) 14625 lui $1,%hi(sym) 14626 daddiu $4,$4,%higher(sym) 14627 daddiu $1,$1,%lo(sym) 14628 dsll32 $4,$4,0 14629 daddu $4,$4,$1 14630 14631 whereas the 32-bit expansion is simply: 14632 14633 lui $4,%hi(sym) 14634 daddiu $4,$4,%lo(sym) 14635 14636 n64 code is sometimes constructed in such a way that all symbolic 14637constants are known to have 32-bit values, and in such cases, it's 14638preferable to use the 32-bit expansion instead of the 64-bit expansion. 14639 14640 You can use the `.set sym32' directive to tell the assembler that, 14641from this point on, all expressions of the form `SYMBOL' or `SYMBOL + 14642OFFSET' have 32-bit values. For example: 14643 14644 .set sym32 14645 dla $4,sym 14646 lw $4,sym+16 14647 sw $4,sym+0x8000($4) 14648 14649 will cause the assembler to treat `sym', `sym+16' and `sym+0x8000' 14650as 32-bit values. The handling of non-symbolic addresses is not 14651affected. 14652 14653 The directive `.set nosym32' ends a `.set sym32' block and reverts 14654to the normal behavior. It is also possible to change the symbol size 14655using the command-line options `-msym32' and `-mno-sym32'. 14656 14657 These options and directives are always accepted, but at present, 14658they have no effect for anything other than n64. 14659 14660 14661File: as.info, Node: MIPS Small Data, Next: MIPS ISA, Prev: MIPS Symbol Sizes, Up: MIPS-Dependent 14662 146639.27.4 Controlling the use of small data accesses 14664------------------------------------------------- 14665 14666It often takes several instructions to load the address of a symbol. 14667For example, when `addr' is a 32-bit symbol, the non-PIC expansion of 14668`dla $4,addr' is usually: 14669 14670 lui $4,%hi(addr) 14671 daddiu $4,$4,%lo(addr) 14672 14673 The sequence is much longer when `addr' is a 64-bit symbol. *Note 14674Directives to override the size of symbols: MIPS Symbol Sizes. 14675 14676 In order to cut down on this overhead, most embedded MIPS systems 14677set aside a 64-kilobyte "small data" area and guarantee that all data 14678of size N and smaller will be placed in that area. The limit N is 14679passed to both the assembler and the linker using the command-line 14680option `-G N', *note Assembler options: MIPS Options. Note that the 14681same value of N must be used when linking and when assembling all input 14682files to the link; any inconsistency could cause a relocation overflow 14683error. 14684 14685 The size of an object in the `.bss' section is set by the `.comm' or 14686`.lcomm' directive that defines it. The size of an external object may 14687be set with the `.extern' directive. For example, `.extern sym,4' 14688declares that the object at `sym' is 4 bytes in length, while leaving 14689`sym' otherwise undefined. 14690 14691 When no `-G' option is given, the default limit is 8 bytes. The 14692option `-G 0' prevents any data from being automatically classified as 14693small. 14694 14695 It is also possible to mark specific objects as small by putting them 14696in the special sections `.sdata' and `.sbss', which are "small" 14697counterparts of `.data' and `.bss' respectively. The toolchain will 14698treat such data as small regardless of the `-G' setting. 14699 14700 On startup, systems that support a small data area are expected to 14701initialize register `$28', also known as `$gp', in such a way that 14702small data can be accessed using a 16-bit offset from that register. 14703For example, when `addr' is small data, the `dla $4,addr' instruction 14704above is equivalent to: 14705 14706 daddiu $4,$28,%gp_rel(addr) 14707 14708 Small data is not supported for SVR4-style PIC. 14709 14710 14711File: as.info, Node: MIPS ISA, Next: MIPS assembly options, Prev: MIPS Small Data, Up: MIPS-Dependent 14712 147139.27.5 Directives to override the ISA level 14714------------------------------------------- 14715 14716GNU `as' supports an additional directive to change the MIPS 14717Instruction Set Architecture level on the fly: `.set mipsN'. N should 14718be a number from 0 to 5, or 32, 32r2, 32r3, 32r5, 32r6, 64, 64r2, 64r3, 1471964r5 or 64r6. The values other than 0 make the assembler accept 14720instructions for the corresponding ISA level, from that point on in the 14721assembly. `.set mipsN' affects not only which instructions are 14722permitted, but also how certain macros are expanded. `.set mips0' 14723restores the ISA level to its original level: either the level you 14724selected with command line options, or the default for your 14725configuration. You can use this feature to permit specific MIPS III 14726instructions while assembling in 32 bit mode. Use this directive with 14727care! 14728 14729 The `.set arch=CPU' directive provides even finer control. It 14730changes the effective CPU target and allows the assembler to use 14731instructions specific to a particular CPU. All CPUs supported by the 14732`-march' command line option are also selectable by this directive. 14733The original value is restored by `.set arch=default'. 14734 14735 The directive `.set mips16' puts the assembler into MIPS 16 mode, in 14736which it will assemble instructions for the MIPS 16 processor. Use 14737`.set nomips16' to return to normal 32 bit mode. 14738 14739 Traditional MIPS assemblers do not support this directive. 14740 14741 The directive `.set micromips' puts the assembler into microMIPS 14742mode, in which it will assemble instructions for the microMIPS 14743processor. Use `.set nomicromips' to return to normal 32 bit mode. 14744 14745 Traditional MIPS assemblers do not support this directive. 14746 14747 14748File: as.info, Node: MIPS assembly options, Next: MIPS autoextend, Prev: MIPS ISA, Up: MIPS-Dependent 14749 147509.27.6 Directives to control code generation 14751-------------------------------------------- 14752 14753The `.module' directive allows command line options to be set directly 14754from assembly. The format of the directive matches the `.set' 14755directive but only those options which are relevant to a whole module 14756are supported. The effect of a `.module' directive is the same as the 14757corresponding command line option. Where `.set' directives support 14758returning to a default then the `.module' directives do not as they 14759define the defaults. 14760 14761 These module-level directives must appear first in assembly. 14762 14763 Traditional MIPS assemblers do not support this directive. 14764 14765 The directive `.set insn32' makes the assembler only use 32-bit 14766instruction encodings when generating code for the microMIPS processor. 14767This directive inhibits the use of any 16-bit instructions from that 14768point on in the assembly. The `.set noinsn32' directive allows 16-bit 14769instructions to be accepted. 14770 14771 Traditional MIPS assemblers do not support this directive. 14772 14773 14774File: as.info, Node: MIPS autoextend, Next: MIPS insn, Prev: MIPS assembly options, Up: MIPS-Dependent 14775 147769.27.7 Directives for extending MIPS 16 bit instructions 14777-------------------------------------------------------- 14778 14779By default, MIPS 16 instructions are automatically extended to 32 bits 14780when necessary. The directive `.set noautoextend' will turn this off. 14781When `.set noautoextend' is in effect, any 32 bit instruction must be 14782explicitly extended with the `.e' modifier (e.g., `li.e $4,1000'). The 14783directive `.set autoextend' may be used to once again automatically 14784extend instructions when necessary. 14785 14786 This directive is only meaningful when in MIPS 16 mode. Traditional 14787MIPS assemblers do not support this directive. 14788 14789 14790File: as.info, Node: MIPS insn, Next: MIPS FP ABIs, Prev: MIPS autoextend, Up: MIPS-Dependent 14791 147929.27.8 Directive to mark data as an instruction 14793----------------------------------------------- 14794 14795The `.insn' directive tells `as' that the following data is actually 14796instructions. This makes a difference in MIPS 16 and microMIPS modes: 14797when loading the address of a label which precedes instructions, `as' 14798automatically adds 1 to the value, so that jumping to the loaded 14799address will do the right thing. 14800 14801 The `.global' and `.globl' directives supported by `as' will by 14802default mark the symbol as pointing to a region of data not code. This 14803means that, for example, any instructions following such a symbol will 14804not be disassembled by `objdump' as it will regard them as data. To 14805change this behavior an optional section name can be placed after the 14806symbol name in the `.global' directive. If this section exists and is 14807known to be a code section, then the symbol will be marked as pointing 14808at code not data. Ie the syntax for the directive is: 14809 14810 `.global SYMBOL[ SECTION][, SYMBOL[ SECTION]] ...', 14811 14812 Here is a short example: 14813 14814 .global foo .text, bar, baz .data 14815 foo: 14816 nop 14817 bar: 14818 .word 0x0 14819 baz: 14820 .word 0x1 14821 14822 14823File: as.info, Node: MIPS FP ABIs, Next: MIPS NaN Encodings, Prev: MIPS insn, Up: MIPS-Dependent 14824 148259.27.9 Directives to control the FP ABI 14826--------------------------------------- 14827 14828* Menu: 14829 14830* MIPS FP ABI History:: History of FP ABIs 14831* MIPS FP ABI Variants:: Supported FP ABIs 14832* MIPS FP ABI Selection:: Automatic selection of FP ABI 14833* MIPS FP ABI Compatibility:: Linking different FP ABI variants 14834 14835 14836File: as.info, Node: MIPS FP ABI History, Next: MIPS FP ABI Variants, Up: MIPS FP ABIs 14837 148389.27.9.1 History of FP ABIs 14839........................... 14840 14841The MIPS ABIs support a variety of different floating-point extensions 14842where calling-convention and register sizes vary for floating-point 14843data. The extensions exist to support a wide variety of optional 14844architecture features. The resulting ABI variants are generally 14845incompatible with each other and must be tracked carefully. 14846 14847 Traditionally the use of an explicit `.gnu_attribute 4, N' directive 14848is used to indicate which ABI is in use by a specific module. It was 14849then left to the user to ensure that command line options and the 14850selected ABI were compatible with some potential for inconsistencies. 14851 14852 14853File: as.info, Node: MIPS FP ABI Variants, Next: MIPS FP ABI Selection, Prev: MIPS FP ABI History, Up: MIPS FP ABIs 14854 148559.27.9.2 Supported FP ABIs 14856.......................... 14857 14858The supported floating-point ABI variants are: 14859 14860`0 - No floating-point' 14861 This variant is used to indicate that floating-point is not used 14862 within the module at all and therefore has no impact on the ABI. 14863 This is the default. 14864 14865`1 - Double-precision' 14866 This variant indicates that double-precision support is used. For 14867 64-bit ABIs this means that 64-bit wide floating-point registers 14868 are required. For 32-bit ABIs this means that 32-bit wide 14869 floating-point registers are required and double-precision 14870 operations use pairs of registers. 14871 14872`2 - Single-precision' 14873 This variant indicates that single-precision support is used. 14874 Double precision operations will be supported via soft-float 14875 routines. 14876 14877`3 - Soft-float' 14878 This variant indicates that although floating-point support is 14879 used all operations are emulated in software. This means the ABI 14880 is modified to pass all floating-point data in general-purpose 14881 registers. 14882 14883`4 - Deprecated' 14884 This variant existed as an initial attempt at supporting 64-bit 14885 wide floating-point registers for O32 ABI on a MIPS32r2 CPU. This 14886 has been superseded by 5, 6 and 7. 14887 14888`5 - Double-precision 32-bit CPU, 32-bit or 64-bit FPU' 14889 This variant is used by 32-bit ABIs to indicate that the 14890 floating-point code in the module has been designed to operate 14891 correctly with either 32-bit wide or 64-bit wide floating-point 14892 registers. Double-precision support is used. Only O32 currently 14893 supports this variant and requires a minimum architecture of MIPS 14894 II. 14895 14896`6 - Double-precision 32-bit FPU, 64-bit FPU' 14897 This variant is used by 32-bit ABIs to indicate that the 14898 floating-point code in the module requires 64-bit wide 14899 floating-point registers. Double-precision support is used. Only 14900 O32 currently supports this variant and requires a minimum 14901 architecture of MIPS32r2. 14902 14903`7 - Double-precision compat 32-bit FPU, 64-bit FPU' 14904 This variant is used by 32-bit ABIs to indicate that the 14905 floating-point code in the module requires 64-bit wide 14906 floating-point registers. Double-precision support is used. This 14907 differs from the previous ABI as it restricts use of odd-numbered 14908 single-precision registers. Only O32 currently supports this 14909 variant and requires a minimum architecture of MIPS32r2. 14910 14911 14912File: as.info, Node: MIPS FP ABI Selection, Next: MIPS FP ABI Compatibility, Prev: MIPS FP ABI Variants, Up: MIPS FP ABIs 14913 149149.27.9.3 Automatic selection of FP ABI 14915...................................... 14916 14917In order to simplify and add safety to the process of selecting the 14918correct floating-point ABI, the assembler will automatically infer the 14919correct `.gnu_attribute 4, N' directive based on command line options 14920and `.module' overrides. Where an explicit `.gnu_attribute 4, N' 14921directive has been seen then a warning will be raised if it does not 14922match an inferred setting. 14923 14924 The floating-point ABI is inferred as follows. If `-msoft-float' 14925has been used the module will be marked as soft-float. If 14926`-msingle-float' has been used then the module will be marked as 14927single-precision. The remaining ABIs are then selected based on the FP 14928register width. Double-precision is selected if the width of GP and FP 14929registers match and the special double-precision variants for 32-bit 14930ABIs are then selected depending on `-mfpxx', `-mfp64' and 14931`-mno-odd-spreg'. 14932 14933 14934File: as.info, Node: MIPS FP ABI Compatibility, Prev: MIPS FP ABI Selection, Up: MIPS FP ABIs 14935 149369.27.9.4 Linking different FP ABI variants 14937.......................................... 14938 14939Modules using the default FP ABI (no floating-point) can be linked with 14940any other (singular) FP ABI variant. 14941 14942 Special compatibility support exists for O32 with the four 14943double-precision FP ABI variants. The `-mfpxx' FP ABI is specifically 14944designed to be compatible with the standard double-precision ABI and the 14945`-mfp64' FP ABIs. This makes it desirable for O32 modules to be built 14946as `-mfpxx' to ensure the maximum compatibility with other modules 14947produced for more specific needs. The only FP ABIs which cannot be 14948linked together are the standard double-precision ABI and the full 14949`-mfp64' ABI with `-modd-spreg'. 14950 14951 14952File: as.info, Node: MIPS NaN Encodings, Next: MIPS Option Stack, Prev: MIPS FP ABIs, Up: MIPS-Dependent 14953 149549.27.10 Directives to record which NaN encoding is being used 14955------------------------------------------------------------- 14956 14957The IEEE 754 floating-point standard defines two types of not-a-number 14958(NaN) data: "signalling" NaNs and "quiet" NaNs. The original version 14959of the standard did not specify how these two types should be 14960distinguished. Most implementations followed the i387 model, in which 14961the first bit of the significand is set for quiet NaNs and clear for 14962signalling NaNs. However, the original MIPS implementation assigned the 14963opposite meaning to the bit, so that it was set for signalling NaNs and 14964clear for quiet NaNs. 14965 14966 The 2008 revision of the standard formally suggested the i387 choice 14967and as from Sep 2012 the current release of the MIPS architecture 14968therefore optionally supports that form. Code that uses one NaN 14969encoding would usually be incompatible with code that uses the other 14970NaN encoding, so MIPS ELF objects have a flag (`EF_MIPS_NAN2008') to 14971record which encoding is being used. 14972 14973 Assembly files can use the `.nan' directive to select between the 14974two encodings. `.nan 2008' says that the assembly file uses the IEEE 14975754-2008 encoding while `.nan legacy' says that the file uses the 14976original MIPS encoding. If several `.nan' directives are given, the 14977final setting is the one that is used. 14978 14979 The command-line options `-mnan=legacy' and `-mnan=2008' can be used 14980instead of `.nan legacy' and `.nan 2008' respectively. However, any 14981`.nan' directive overrides the command-line setting. 14982 14983 `.nan legacy' is the default if no `.nan' directive or `-mnan' 14984option is given. 14985 14986 Note that GNU `as' does not produce NaNs itself and therefore these 14987directives do not affect code generation. They simply control the 14988setting of the `EF_MIPS_NAN2008' flag. 14989 14990 Traditional MIPS assemblers do not support these directives. 14991 14992 14993File: as.info, Node: MIPS Option Stack, Next: MIPS ASE Instruction Generation Overrides, Prev: MIPS NaN Encodings, Up: MIPS-Dependent 14994 149959.27.11 Directives to save and restore options 14996---------------------------------------------- 14997 14998The directives `.set push' and `.set pop' may be used to save and 14999restore the current settings for all the options which are controlled 15000by `.set'. The `.set push' directive saves the current settings on a 15001stack. The `.set pop' directive pops the stack and restores the 15002settings. 15003 15004 These directives can be useful inside an macro which must change an 15005option such as the ISA level or instruction reordering but does not want 15006to change the state of the code which invoked the macro. 15007 15008 Traditional MIPS assemblers do not support these directives. 15009 15010 15011File: as.info, Node: MIPS ASE Instruction Generation Overrides, Next: MIPS Floating-Point, Prev: MIPS Option Stack, Up: MIPS-Dependent 15012 150139.27.12 Directives to control generation of MIPS ASE instructions 15014----------------------------------------------------------------- 15015 15016The directive `.set mips3d' makes the assembler accept instructions 15017from the MIPS-3D Application Specific Extension from that point on in 15018the assembly. The `.set nomips3d' directive prevents MIPS-3D 15019instructions from being accepted. 15020 15021 The directive `.set smartmips' makes the assembler accept 15022instructions from the SmartMIPS Application Specific Extension to the 15023MIPS32 ISA from that point on in the assembly. The `.set nosmartmips' 15024directive prevents SmartMIPS instructions from being accepted. 15025 15026 The directive `.set mdmx' makes the assembler accept instructions 15027from the MDMX Application Specific Extension from that point on in the 15028assembly. The `.set nomdmx' directive prevents MDMX instructions from 15029being accepted. 15030 15031 The directive `.set dsp' makes the assembler accept instructions 15032from the DSP Release 1 Application Specific Extension from that point 15033on in the assembly. The `.set nodsp' directive prevents DSP Release 1 15034instructions from being accepted. 15035 15036 The directive `.set dspr2' makes the assembler accept instructions 15037from the DSP Release 2 Application Specific Extension from that point 15038on in the assembly. This directive implies `.set dsp'. The `.set 15039nodspr2' directive prevents DSP Release 2 instructions from being 15040accepted. 15041 15042 The directive `.set dspr3' makes the assembler accept instructions 15043from the DSP Release 3 Application Specific Extension from that point 15044on in the assembly. This directive implies `.set dsp' and `.set 15045dspr2'. The `.set nodspr3' directive prevents DSP Release 3 15046instructions from being accepted. 15047 15048 The directive `.set mt' makes the assembler accept instructions from 15049the MT Application Specific Extension from that point on in the 15050assembly. The `.set nomt' directive prevents MT instructions from 15051being accepted. 15052 15053 The directive `.set mcu' makes the assembler accept instructions 15054from the MCU Application Specific Extension from that point on in the 15055assembly. The `.set nomcu' directive prevents MCU instructions from 15056being accepted. 15057 15058 The directive `.set msa' makes the assembler accept instructions 15059from the MIPS SIMD Architecture Extension from that point on in the 15060assembly. The `.set nomsa' directive prevents MSA instructions from 15061being accepted. 15062 15063 The directive `.set virt' makes the assembler accept instructions 15064from the Virtualization Application Specific Extension from that point 15065on in the assembly. The `.set novirt' directive prevents Virtualization 15066instructions from being accepted. 15067 15068 The directive `.set xpa' makes the assembler accept instructions 15069from the XPA Extension from that point on in the assembly. The `.set 15070noxpa' directive prevents XPA instructions from being accepted. 15071 15072 Traditional MIPS assemblers do not support these directives. 15073 15074 15075File: as.info, Node: MIPS Floating-Point, Next: MIPS Syntax, Prev: MIPS ASE Instruction Generation Overrides, Up: MIPS-Dependent 15076 150779.27.13 Directives to override floating-point options 15078----------------------------------------------------- 15079 15080The directives `.set softfloat' and `.set hardfloat' provide finer 15081control of disabling and enabling float-point instructions. These 15082directives always override the default (that hard-float instructions 15083are accepted) or the command-line options (`-msoft-float' and 15084`-mhard-float'). 15085 15086 The directives `.set singlefloat' and `.set doublefloat' provide 15087finer control of disabling and enabling double-precision float-point 15088operations. These directives always override the default (that 15089double-precision operations are accepted) or the command-line options 15090(`-msingle-float' and `-mdouble-float'). 15091 15092 Traditional MIPS assemblers do not support these directives. 15093 15094 15095File: as.info, Node: MIPS Syntax, Prev: MIPS Floating-Point, Up: MIPS-Dependent 15096 150979.27.14 Syntactical considerations for the MIPS assembler 15098--------------------------------------------------------- 15099 15100* Menu: 15101 15102* MIPS-Chars:: Special Characters 15103 15104 15105File: as.info, Node: MIPS-Chars, Up: MIPS Syntax 15106 151079.27.14.1 Special Characters 15108............................ 15109 15110The presence of a `#' on a line indicates the start of a comment that 15111extends to the end of the current line. 15112 15113 If a `#' appears as the first character of a line, the whole line is 15114treated as a comment, but in this case the line can also be a logical 15115line number directive (*note Comments::) or a preprocessor control 15116command (*note Preprocessing::). 15117 15118 The `;' character can be used to separate statements on the same 15119line. 15120 15121 15122File: as.info, Node: MMIX-Dependent, Next: MSP430-Dependent, Prev: MIPS-Dependent, Up: Machine Dependencies 15123 151249.28 MMIX Dependent Features 15125============================ 15126 15127* Menu: 15128 15129* MMIX-Opts:: Command-line Options 15130* MMIX-Expand:: Instruction expansion 15131* MMIX-Syntax:: Syntax 15132* MMIX-mmixal:: Differences to `mmixal' syntax and semantics 15133 15134 15135File: as.info, Node: MMIX-Opts, Next: MMIX-Expand, Up: MMIX-Dependent 15136 151379.28.1 Command-line Options 15138--------------------------- 15139 15140The MMIX version of `as' has some machine-dependent options. 15141 15142 When `--fixed-special-register-names' is specified, only the register 15143names specified in *Note MMIX-Regs:: are recognized in the instructions 15144`PUT' and `GET'. 15145 15146 You can use the `--globalize-symbols' to make all symbols global. 15147This option is useful when splitting up a `mmixal' program into several 15148files. 15149 15150 The `--gnu-syntax' turns off most syntax compatibility with 15151`mmixal'. Its usability is currently doubtful. 15152 15153 The `--relax' option is not fully supported, but will eventually make 15154the object file prepared for linker relaxation. 15155 15156 If you want to avoid inadvertently calling a predefined symbol and 15157would rather get an error, for example when using `as' with a compiler 15158or other machine-generated code, specify `--no-predefined-syms'. This 15159turns off built-in predefined definitions of all such symbols, 15160including rounding-mode symbols, segment symbols, `BIT' symbols, and 15161`TRAP' symbols used in `mmix' "system calls". It also turns off 15162predefined special-register names, except when used in `PUT' and `GET' 15163instructions. 15164 15165 By default, some instructions are expanded to fit the size of the 15166operand or an external symbol (*note MMIX-Expand::). By passing 15167`--no-expand', no such expansion will be done, instead causing errors 15168at link time if the operand does not fit. 15169 15170 The `mmixal' documentation (*note mmixsite::) specifies that global 15171registers allocated with the `GREG' directive (*note MMIX-greg::) and 15172initialized to the same non-zero value, will refer to the same global 15173register. This isn't strictly enforceable in `as' since the final 15174addresses aren't known until link-time, but it will do an effort unless 15175the `--no-merge-gregs' option is specified. (Register merging isn't 15176yet implemented in `ld'.) 15177 15178 `as' will warn every time it expands an instruction to fit an 15179operand unless the option `-x' is specified. It is believed that this 15180behaviour is more useful than just mimicking `mmixal''s behaviour, in 15181which instructions are only expanded if the `-x' option is specified, 15182and assembly fails otherwise, when an instruction needs to be expanded. 15183It needs to be kept in mind that `mmixal' is both an assembler and 15184linker, while `as' will expand instructions that at link stage can be 15185contracted. (Though linker relaxation isn't yet implemented in `ld'.) 15186The option `-x' also imples `--linker-allocated-gregs'. 15187 15188 If instruction expansion is enabled, `as' can expand a `PUSHJ' 15189instruction into a series of instructions. The shortest expansion is 15190to not expand it, but just mark the call as redirectable to a stub, 15191which `ld' creates at link-time, but only if the original `PUSHJ' 15192instruction is found not to reach the target. The stub consists of the 15193necessary instructions to form a jump to the target. This happens if 15194`as' can assert that the `PUSHJ' instruction can reach such a stub. 15195The option `--no-pushj-stubs' disables this shorter expansion, and the 15196longer series of instructions is then created at assembly-time. The 15197option `--no-stubs' is a synonym, intended for compatibility with 15198future releases, where generation of stubs for other instructions may 15199be implemented. 15200 15201 Usually a two-operand-expression (*note GREG-base::) without a 15202matching `GREG' directive is treated as an error by `as'. When the 15203option `--linker-allocated-gregs' is in effect, they are instead passed 15204through to the linker, which will allocate as many global registers as 15205is needed. 15206 15207 15208File: as.info, Node: MMIX-Expand, Next: MMIX-Syntax, Prev: MMIX-Opts, Up: MMIX-Dependent 15209 152109.28.2 Instruction expansion 15211---------------------------- 15212 15213When `as' encounters an instruction with an operand that is either not 15214known or does not fit the operand size of the instruction, `as' (and 15215`ld') will expand the instruction into a sequence of instructions 15216semantically equivalent to the operand fitting the instruction. 15217Expansion will take place for the following instructions: 15218 15219`GETA' 15220 Expands to a sequence of four instructions: `SETL', `INCML', 15221 `INCMH' and `INCH'. The operand must be a multiple of four. 15222 15223Conditional branches 15224 A branch instruction is turned into a branch with the complemented 15225 condition and prediction bit over five instructions; four 15226 instructions setting `$255' to the operand value, which like with 15227 `GETA' must be a multiple of four, and a final `GO $255,$255,0'. 15228 15229`PUSHJ' 15230 Similar to expansion for conditional branches; four instructions 15231 set `$255' to the operand value, followed by a `PUSHGO 15232 $255,$255,0'. 15233 15234`JMP' 15235 Similar to conditional branches and `PUSHJ'. The final instruction 15236 is `GO $255,$255,0'. 15237 15238 The linker `ld' is expected to shrink these expansions for code 15239assembled with `--relax' (though not currently implemented). 15240 15241 15242File: as.info, Node: MMIX-Syntax, Next: MMIX-mmixal, Prev: MMIX-Expand, Up: MMIX-Dependent 15243 152449.28.3 Syntax 15245------------- 15246 15247The assembly syntax is supposed to be upward compatible with that 15248described in Sections 1.3 and 1.4 of `The Art of Computer Programming, 15249Volume 1'. Draft versions of those chapters as well as other MMIX 15250information is located at 15251`http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html'. Most code 15252examples from the mmixal package located there should work unmodified 15253when assembled and linked as single files, with a few noteworthy 15254exceptions (*note MMIX-mmixal::). 15255 15256 Before an instruction is emitted, the current location is aligned to 15257the next four-byte boundary. If a label is defined at the beginning of 15258the line, its value will be the aligned value. 15259 15260 In addition to the traditional hex-prefix `0x', a hexadecimal number 15261can also be specified by the prefix character `#'. 15262 15263 After all operands to an MMIX instruction or directive have been 15264specified, the rest of the line is ignored, treated as a comment. 15265 15266* Menu: 15267 15268* MMIX-Chars:: Special Characters 15269* MMIX-Symbols:: Symbols 15270* MMIX-Regs:: Register Names 15271* MMIX-Pseudos:: Assembler Directives 15272 15273 15274File: as.info, Node: MMIX-Chars, Next: MMIX-Symbols, Up: MMIX-Syntax 15275 152769.28.3.1 Special Characters 15277........................... 15278 15279The characters `*' and `#' are line comment characters; each start a 15280comment at the beginning of a line, but only at the beginning of a 15281line. A `#' prefixes a hexadecimal number if found elsewhere on a 15282line. If a `#' appears at the start of a line the whole line is 15283treated as a comment, but the line can also act as a logical line 15284number directive (*note Comments::) or a preprocessor control command 15285(*note Preprocessing::). 15286 15287 Two other characters, `%' and `!', each start a comment anywhere on 15288the line. Thus you can't use the `modulus' and `not' operators in 15289expressions normally associated with these two characters. 15290 15291 A `;' is a line separator, treated as a new-line, so separate 15292instructions can be specified on a single line. 15293 15294 15295File: as.info, Node: MMIX-Symbols, Next: MMIX-Regs, Prev: MMIX-Chars, Up: MMIX-Syntax 15296 152979.28.3.2 Symbols 15298................ 15299 15300The character `:' is permitted in identifiers. There are two 15301exceptions to it being treated as any other symbol character: if a 15302symbol begins with `:', it means that the symbol is in the global 15303namespace and that the current prefix should not be prepended to that 15304symbol (*note MMIX-prefix::). The `:' is then not considered part of 15305the symbol. For a symbol in the label position (first on a line), a `:' 15306at the end of a symbol is silently stripped off. A label is permitted, 15307but not required, to be followed by a `:', as with many other assembly 15308formats. 15309 15310 The character `@' in an expression, is a synonym for `.', the 15311current location. 15312 15313 In addition to the common forward and backward local symbol formats 15314(*note Symbol Names::), they can be specified with upper-case `B' and 15315`F', as in `8B' and `9F'. A local label defined for the current 15316position is written with a `H' appended to the number: 15317 3H LDB $0,$1,2 15318 This and traditional local-label formats cannot be mixed: a label 15319must be defined and referred to using the same format. 15320 15321 There's a minor caveat: just as for the ordinary local symbols, the 15322local symbols are translated into ordinary symbols using control 15323characters are to hide the ordinal number of the symbol. 15324Unfortunately, these symbols are not translated back in error messages. 15325Thus you may see confusing error messages when local symbols are used. 15326Control characters `\003' (control-C) and `\004' (control-D) are used 15327for the MMIX-specific local-symbol syntax. 15328 15329 The symbol `Main' is handled specially; it is always global. 15330 15331 By defining the symbols `__.MMIX.start..text' and 15332`__.MMIX.start..data', the address of respectively the `.text' and 15333`.data' segments of the final program can be defined, though when 15334linking more than one object file, the code or data in the object file 15335containing the symbol is not guaranteed to be start at that position; 15336just the final executable. *Note MMIX-loc::. 15337 15338 15339File: as.info, Node: MMIX-Regs, Next: MMIX-Pseudos, Prev: MMIX-Symbols, Up: MMIX-Syntax 15340 153419.28.3.3 Register names 15342....................... 15343 15344Local and global registers are specified as `$0' to `$255'. The 15345recognized special register names are `rJ', `rA', `rB', `rC', `rD', 15346`rE', `rF', `rG', `rH', `rI', `rK', `rL', `rM', `rN', `rO', `rP', `rQ', 15347`rR', `rS', `rT', `rU', `rV', `rW', `rX', `rY', `rZ', `rBB', `rTT', 15348`rWW', `rXX', `rYY' and `rZZ'. A leading `:' is optional for special 15349register names. 15350 15351 Local and global symbols can be equated to register names and used in 15352place of ordinary registers. 15353 15354 Similarly for special registers, local and global symbols can be 15355used. Also, symbols equated from numbers and constant expressions are 15356allowed in place of a special register, except when either of the 15357options `--no-predefined-syms' and `--fixed-special-register-names' are 15358specified. Then only the special register names above are allowed for 15359the instructions having a special register operand; `GET' and `PUT'. 15360 15361 15362File: as.info, Node: MMIX-Pseudos, Prev: MMIX-Regs, Up: MMIX-Syntax 15363 153649.28.3.4 Assembler Directives 15365............................. 15366 15367`LOC' 15368 The `LOC' directive sets the current location to the value of the 15369 operand field, which may include changing sections. If the 15370 operand is a constant, the section is set to either `.data' if the 15371 value is `0x2000000000000000' or larger, else it is set to `.text'. 15372 Within a section, the current location may only be changed to 15373 monotonically higher addresses. A LOC expression must be a 15374 previously defined symbol or a "pure" constant. 15375 15376 An example, which sets the label PREV to the current location, and 15377 updates the current location to eight bytes forward: 15378 prev LOC @+8 15379 15380 When a LOC has a constant as its operand, a symbol 15381 `__.MMIX.start..text' or `__.MMIX.start..data' is defined 15382 depending on the address as mentioned above. Each such symbol is 15383 interpreted as special by the linker, locating the section at that 15384 address. Note that if multiple files are linked, the first object 15385 file with that section will be mapped to that address (not 15386 necessarily the file with the LOC definition). 15387 15388`LOCAL' 15389 Example: 15390 LOCAL external_symbol 15391 LOCAL 42 15392 .local asymbol 15393 15394 This directive-operation generates a link-time assertion that the 15395 operand does not correspond to a global register. The operand is 15396 an expression that at link-time resolves to a register symbol or a 15397 number. A number is treated as the register having that number. 15398 There is one restriction on the use of this directive: the 15399 pseudo-directive must be placed in a section with contents, code 15400 or data. 15401 15402`IS' 15403 The `IS' directive: 15404 asymbol IS an_expression 15405 sets the symbol `asymbol' to `an_expression'. A symbol may not be 15406 set more than once using this directive. Local labels may be set 15407 using this directive, for example: 15408 5H IS @+4 15409 15410`GREG' 15411 This directive reserves a global register, gives it an initial 15412 value and optionally gives it a symbolic name. Some examples: 15413 15414 areg GREG 15415 breg GREG data_value 15416 GREG data_buffer 15417 .greg creg, another_data_value 15418 15419 The symbolic register name can be used in place of a (non-special) 15420 register. If a value isn't provided, it defaults to zero. Unless 15421 the option `--no-merge-gregs' is specified, non-zero registers 15422 allocated with this directive may be eliminated by `as'; another 15423 register with the same value used in its place. Any of the 15424 instructions `CSWAP', `GO', `LDA', `LDBU', `LDB', `LDHT', `LDOU', 15425 `LDO', `LDSF', `LDTU', `LDT', `LDUNC', `LDVTS', `LDWU', `LDW', 15426 `PREGO', `PRELD', `PREST', `PUSHGO', `STBU', `STB', `STCO', `STHT', 15427 `STOU', `STSF', `STTU', `STT', `STUNC', `SYNCD', `SYNCID', can 15428 have a value nearby an initial value in place of its second and 15429 third operands. Here, "nearby" is defined as within the range 15430 0...255 from the initial value of such an allocated register. 15431 15432 buffer1 BYTE 0,0,0,0,0 15433 buffer2 BYTE 0,0,0,0,0 15434 ... 15435 GREG buffer1 15436 LDOU $42,buffer2 15437 In the example above, the `Y' field of the `LDOUI' instruction 15438 (LDOU with a constant Z) will be replaced with the global register 15439 allocated for `buffer1', and the `Z' field will have the value 5, 15440 the offset from `buffer1' to `buffer2'. The result is equivalent 15441 to this code: 15442 buffer1 BYTE 0,0,0,0,0 15443 buffer2 BYTE 0,0,0,0,0 15444 ... 15445 tmpreg GREG buffer1 15446 LDOU $42,tmpreg,(buffer2-buffer1) 15447 15448 Global registers allocated with this directive are allocated in 15449 order higher-to-lower within a file. Other than that, the exact 15450 order of register allocation and elimination is undefined. For 15451 example, the order is undefined when more than one file with such 15452 directives are linked together. With the options `-x' and 15453 `--linker-allocated-gregs', `GREG' directives for two-operand 15454 cases like the one mentioned above can be omitted. Sufficient 15455 global registers will then be allocated by the linker. 15456 15457`BYTE' 15458 The `BYTE' directive takes a series of operands separated by a 15459 comma. If an operand is a string (*note Strings::), each 15460 character of that string is emitted as a byte. Other operands 15461 must be constant expressions without forward references, in the 15462 range 0...255. If you need operands having expressions with 15463 forward references, use `.byte' (*note Byte::). An operand can be 15464 omitted, defaulting to a zero value. 15465 15466`WYDE' 15467`TETRA' 15468`OCTA' 15469 The directives `WYDE', `TETRA' and `OCTA' emit constants of two, 15470 four and eight bytes size respectively. Before anything else 15471 happens for the directive, the current location is aligned to the 15472 respective constant-size boundary. If a label is defined at the 15473 beginning of the line, its value will be that after the alignment. 15474 A single operand can be omitted, defaulting to a zero value 15475 emitted for the directive. Operands can be expressed as strings 15476 (*note Strings::), in which case each character in the string is 15477 emitted as a separate constant of the size indicated by the 15478 directive. 15479 15480`PREFIX' 15481 The `PREFIX' directive sets a symbol name prefix to be prepended to 15482 all symbols (except local symbols, *note MMIX-Symbols::), that are 15483 not prefixed with `:', until the next `PREFIX' directive. Such 15484 prefixes accumulate. For example, 15485 PREFIX a 15486 PREFIX b 15487 c IS 0 15488 defines a symbol `abc' with the value 0. 15489 15490`BSPEC' 15491`ESPEC' 15492 A pair of `BSPEC' and `ESPEC' directives delimit a section of 15493 special contents (without specified semantics). Example: 15494 BSPEC 42 15495 TETRA 1,2,3 15496 ESPEC 15497 The single operand to `BSPEC' must be number in the range 0...255. 15498 The `BSPEC' number 80 is used by the GNU binutils implementation. 15499 15500 15501File: as.info, Node: MMIX-mmixal, Prev: MMIX-Syntax, Up: MMIX-Dependent 15502 155039.28.4 Differences to `mmixal' 15504------------------------------ 15505 15506The binutils `as' and `ld' combination has a few differences in 15507function compared to `mmixal' (*note mmixsite::). 15508 15509 The replacement of a symbol with a GREG-allocated register (*note 15510GREG-base::) is not handled the exactly same way in `as' as in 15511`mmixal'. This is apparent in the `mmixal' example file `inout.mms', 15512where different registers with different offsets, eventually yielding 15513the same address, are used in the first instruction. This type of 15514difference should however not affect the function of any program unless 15515it has specific assumptions about the allocated register number. 15516 15517 Line numbers (in the `mmo' object format) are currently not 15518supported. 15519 15520 Expression operator precedence is not that of mmixal: operator 15521precedence is that of the C programming language. It's recommended to 15522use parentheses to explicitly specify wanted operator precedence 15523whenever more than one type of operators are used. 15524 15525 The serialize unary operator `&', the fractional division operator 15526`//', the logical not operator `!' and the modulus operator `%' are not 15527available. 15528 15529 Symbols are not global by default, unless the option 15530`--globalize-symbols' is passed. Use the `.global' directive to 15531globalize symbols (*note Global::). 15532 15533 Operand syntax is a bit stricter with `as' than `mmixal'. For 15534example, you can't say `addu 1,2,3', instead you must write `addu 15535$1,$2,3'. 15536 15537 You can't LOC to a lower address than those already visited (i.e., 15538"backwards"). 15539 15540 A LOC directive must come before any emitted code. 15541 15542 Predefined symbols are visible as file-local symbols after use. (In 15543the ELF file, that is--the linked mmo file has no notion of a file-local 15544symbol.) 15545 15546 Some mapping of constant expressions to sections in LOC expressions 15547is attempted, but that functionality is easily confused and should be 15548avoided unless compatibility with `mmixal' is required. A LOC 15549expression to `0x2000000000000000' or higher, maps to the `.data' 15550section and lower addresses map to the `.text' section (*note 15551MMIX-loc::). 15552 15553 The code and data areas are each contiguous. Sparse programs with 15554far-away LOC directives will take up the same amount of space as a 15555contiguous program with zeros filled in the gaps between the LOC 15556directives. If you need sparse programs, you might try and get the 15557wanted effect with a linker script and splitting up the code parts into 15558sections (*note Section::). Assembly code for this, to be compatible 15559with `mmixal', would look something like: 15560 .if 0 15561 LOC away_expression 15562 .else 15563 .section away,"ax" 15564 .fi 15565 `as' will not execute the LOC directive and `mmixal' ignores the 15566lines with `.'. This construct can be used generally to help 15567compatibility. 15568 15569 Symbols can't be defined twice-not even to the same value. 15570 15571 Instruction mnemonics are recognized case-insensitive, though the 15572`IS' and `GREG' pseudo-operations must be specified in upper-case 15573characters. 15574 15575 There's no unicode support. 15576 15577 The following is a list of programs in `mmix.tar.gz', available at 15578`http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html', last 15579checked with the version dated 2001-08-25 (md5sum 15580c393470cfc86fac040487d22d2bf0172) that assemble with `mmixal' but do 15581not assemble with `as': 15582 15583`silly.mms' 15584 LOC to a previous address. 15585 15586`sim.mms' 15587 Redefines symbol `Done'. 15588 15589`test.mms' 15590 Uses the serial operator `&'. 15591 15592 15593File: as.info, Node: MSP430-Dependent, Next: NDS32-Dependent, Prev: MMIX-Dependent, Up: Machine Dependencies 15594 155959.29 MSP 430 Dependent Features 15596=============================== 15597 15598* Menu: 15599 15600* MSP430 Options:: Options 15601* MSP430 Syntax:: Syntax 15602* MSP430 Floating Point:: Floating Point 15603* MSP430 Directives:: MSP 430 Machine Directives 15604* MSP430 Opcodes:: Opcodes 15605* MSP430 Profiling Capability:: Profiling Capability 15606 15607 15608File: as.info, Node: MSP430 Options, Next: MSP430 Syntax, Up: MSP430-Dependent 15609 156109.29.1 Options 15611-------------- 15612 15613`-mmcu' 15614 selects the mcu architecture. If the architecture is 430Xv2 then 15615 this also enables NOP generation unless the `-mN' is also 15616 specified. 15617 15618`-mcpu' 15619 selects the cpu architecture. If the architecture is 430Xv2 then 15620 this also enables NOP generation unless the `-mN' is also 15621 specified. 15622 15623`-msilicon-errata=NAME[,NAME...]' 15624 Implements a fixup for named silicon errata. Multiple silicon 15625 errata can be specified by multiple uses of the `-msilicon-errata' 15626 option and/or by including the errata names, separated by commas, 15627 on an individual `-msilicon-errata' option. Errata names 15628 currently recognised by the assembler are: 15629 15630 `cpu4' 15631 `PUSH #4' and `PUSH #8' need longer encodings on the MSP430. 15632 This option is enabled by default, and cannot be disabled. 15633 15634 `cpu8' 15635 Do not set the `SP' to an odd value. 15636 15637 `cpu11' 15638 Do not update the `SR' and the `PC' in the same instruction. 15639 15640 `cpu12' 15641 Do not use the `PC' in a `CMP' or `BIT' instruction. 15642 15643 `cpu13' 15644 Do not use an arithmetic instruction to modify the `SR'. 15645 15646 `cpu19' 15647 Insert `NOP' after `CPUOFF'. 15648 15649`-msilicon-errata-warn=NAME[,NAME...]' 15650 Like the `-msilicon-errata' option except that instead of fixing 15651 the specified errata, a warning message is issued instead. This 15652 option can be used alongside `-msilicon-errata' to generate 15653 messages whenever a problem is fixed, or on its own in order to 15654 inspect code for potential problems. 15655 15656`-mP' 15657 enables polymorph instructions handler. 15658 15659`-mQ' 15660 enables relaxation at assembly time. DANGEROUS! 15661 15662`-ml' 15663 indicates that the input uses the large code model. 15664 15665`-mn' 15666 enables the generation of a NOP instruction following any 15667 instruction that might change the interrupts enabled/disabled 15668 state. The pipelined nature of the MSP430 core means that any 15669 instruction that changes the interrupt state (`EINT', `DINT', `BIC 15670 #8, SR', `BIS #8, SR' or `MOV.W <>, SR') must be followed by a NOP 15671 instruction in order to ensure the correct processing of 15672 interrupts. By default it is up to the programmer to supply these 15673 NOP instructions, but this command line option enables the 15674 automatic insertion by the assembler, if they are missing. 15675 15676`-mN' 15677 disables the generation of a NOP instruction following any 15678 instruction that might change the interrupts enabled/disabled 15679 state. This is the default behaviour. 15680 15681`-my' 15682 tells the assembler to generate a warning message if a NOP does not 15683 immediately forllow an instruction that enables or disables 15684 interrupts. This is the default. 15685 15686 Note that this option can be stacked with the `-mn' option so that 15687 the assembler will both warn about missing NOP instructions and 15688 then insert them automatically. 15689 15690`-mY' 15691 disables warnings about missing NOP instructions. 15692 15693`-md' 15694 mark the object file as one that requires data to copied from ROM 15695 to RAM at execution startup. Disabled by default. 15696 15697 15698 15699File: as.info, Node: MSP430 Syntax, Next: MSP430 Floating Point, Prev: MSP430 Options, Up: MSP430-Dependent 15700 157019.29.2 Syntax 15702------------- 15703 15704* Menu: 15705 15706* MSP430-Macros:: Macros 15707* MSP430-Chars:: Special Characters 15708* MSP430-Regs:: Register Names 15709* MSP430-Ext:: Assembler Extensions 15710 15711 15712File: as.info, Node: MSP430-Macros, Next: MSP430-Chars, Up: MSP430 Syntax 15713 157149.29.2.1 Macros 15715............... 15716 15717The macro syntax used on the MSP 430 is like that described in the MSP 15718430 Family Assembler Specification. Normal `as' macros should still 15719work. 15720 15721 Additional built-in macros are: 15722 15723`llo(exp)' 15724 Extracts least significant word from 32-bit expression 'exp'. 15725 15726`lhi(exp)' 15727 Extracts most significant word from 32-bit expression 'exp'. 15728 15729`hlo(exp)' 15730 Extracts 3rd word from 64-bit expression 'exp'. 15731 15732`hhi(exp)' 15733 Extracts 4rd word from 64-bit expression 'exp'. 15734 15735 15736 They normally being used as an immediate source operand. 15737 mov #llo(1), r10 ; == mov #1, r10 15738 mov #lhi(1), r10 ; == mov #0, r10 15739 15740 15741File: as.info, Node: MSP430-Chars, Next: MSP430-Regs, Prev: MSP430-Macros, Up: MSP430 Syntax 15742 157439.29.2.2 Special Characters 15744........................... 15745 15746A semicolon (`;') appearing anywhere on a line starts a comment that 15747extends to the end of that line. 15748 15749 If a `#' appears as the first character of a line then the whole 15750line is treated as a comment, but it can also be a logical line number 15751directive (*note Comments::) or a preprocessor control command (*note 15752Preprocessing::). 15753 15754 Multiple statements can appear on the same line provided that they 15755are separated by the `{' character. 15756 15757 The character `$' in jump instructions indicates current location and 15758implemented only for TI syntax compatibility. 15759 15760 15761File: as.info, Node: MSP430-Regs, Next: MSP430-Ext, Prev: MSP430-Chars, Up: MSP430 Syntax 15762 157639.29.2.3 Register Names 15764....................... 15765 15766General-purpose registers are represented by predefined symbols of the 15767form `rN' (for global registers), where N represents a number between 15768`0' and `15'. The leading letters may be in either upper or lower 15769case; for example, `r13' and `R7' are both valid register names. 15770 15771 Register names `PC', `SP' and `SR' cannot be used as register names 15772and will be treated as variables. Use `r0', `r1', and `r2' instead. 15773 15774 15775File: as.info, Node: MSP430-Ext, Prev: MSP430-Regs, Up: MSP430 Syntax 15776 157779.29.2.4 Assembler Extensions 15778............................. 15779 15780`@rN' 15781 As destination operand being treated as `0(rn)' 15782 15783`0(rN)' 15784 As source operand being treated as `@rn' 15785 15786`jCOND +N' 15787 Skips next N bytes followed by jump instruction and equivalent to 15788 `jCOND $+N+2' 15789 15790 15791 Also, there are some instructions, which cannot be found in other 15792assemblers. These are branch instructions, which has different opcodes 15793upon jump distance. They all got PC relative addressing mode. 15794 15795`beq label' 15796 A polymorph instruction which is `jeq label' in case if jump 15797 distance within allowed range for cpu's jump instruction. If not, 15798 this unrolls into a sequence of 15799 jne $+6 15800 br label 15801 15802`bne label' 15803 A polymorph instruction which is `jne label' or `jeq +4; br label' 15804 15805`blt label' 15806 A polymorph instruction which is `jl label' or `jge +4; br label' 15807 15808`bltn label' 15809 A polymorph instruction which is `jn label' or `jn +2; jmp +4; br 15810 label' 15811 15812`bltu label' 15813 A polymorph instruction which is `jlo label' or `jhs +2; br label' 15814 15815`bge label' 15816 A polymorph instruction which is `jge label' or `jl +4; br label' 15817 15818`bgeu label' 15819 A polymorph instruction which is `jhs label' or `jlo +4; br label' 15820 15821`bgt label' 15822 A polymorph instruction which is `jeq +2; jge label' or `jeq +6; 15823 jl +4; br label' 15824 15825`bgtu label' 15826 A polymorph instruction which is `jeq +2; jhs label' or `jeq +6; 15827 jlo +4; br label' 15828 15829`bleu label' 15830 A polymorph instruction which is `jeq label; jlo label' or `jeq 15831 +2; jhs +4; br label' 15832 15833`ble label' 15834 A polymorph instruction which is `jeq label; jl label' or `jeq 15835 +2; jge +4; br label' 15836 15837`jump label' 15838 A polymorph instruction which is `jmp label' or `br label' 15839 15840 15841File: as.info, Node: MSP430 Floating Point, Next: MSP430 Directives, Prev: MSP430 Syntax, Up: MSP430-Dependent 15842 158439.29.3 Floating Point 15844--------------------- 15845 15846The MSP 430 family uses IEEE 32-bit floating-point numbers. 15847 15848 15849File: as.info, Node: MSP430 Directives, Next: MSP430 Opcodes, Prev: MSP430 Floating Point, Up: MSP430-Dependent 15850 158519.29.4 MSP 430 Machine Directives 15852--------------------------------- 15853 15854`.file' 15855 This directive is ignored; it is accepted for compatibility with 15856 other MSP 430 assemblers. 15857 15858 _Warning:_ in other versions of the GNU assembler, `.file' is 15859 used for the directive called `.app-file' in the MSP 430 15860 support. 15861 15862`.line' 15863 This directive is ignored; it is accepted for compatibility with 15864 other MSP 430 assemblers. 15865 15866`.arch' 15867 Sets the target microcontroller in the same way as the `-mmcu' 15868 command line option. 15869 15870`.cpu' 15871 Sets the target architecture in the same way as the `-mcpu' 15872 command line option. 15873 15874`.profiler' 15875 This directive instructs assembler to add new profile entry to the 15876 object file. 15877 15878`.refsym' 15879 This directive instructs assembler to add an undefined reference to 15880 the symbol following the directive. The maximum symbol name 15881 length is 1023 characters. No relocation is created for this 15882 symbol; it will exist purely for pulling in object files from 15883 archives. Note that this reloc is not sufficient to prevent 15884 garbage collection; use a KEEP() directive in the linker file to 15885 preserve such objects. 15886 15887 15888 15889File: as.info, Node: MSP430 Opcodes, Next: MSP430 Profiling Capability, Prev: MSP430 Directives, Up: MSP430-Dependent 15890 158919.29.5 Opcodes 15892-------------- 15893 15894`as' implements all the standard MSP 430 opcodes. No additional 15895pseudo-instructions are needed on this family. 15896 15897 For information on the 430 machine instruction set, see `MSP430 15898User's Manual, document slau049d', Texas Instrument, Inc. 15899 15900 15901File: as.info, Node: MSP430 Profiling Capability, Prev: MSP430 Opcodes, Up: MSP430-Dependent 15902 159039.29.6 Profiling Capability 15904--------------------------- 15905 15906It is a performance hit to use gcc's profiling approach for this tiny 15907target. Even more - jtag hardware facility does not perform any 15908profiling functions. However we've got gdb's built-in simulator where 15909we can do anything. 15910 15911 We define new section `.profiler' which holds all profiling 15912information. We define new pseudo operation `.profiler' which will 15913instruct assembler to add new profile entry to the object file. Profile 15914should take place at the present address. 15915 15916 Pseudo operation format: 15917 15918 `.profiler flags,function_to_profile [, cycle_corrector, extra]' 15919 15920 where: 15921 15922 `flags' is a combination of the following characters: 15923 15924 `s' 15925 function entry 15926 15927 `x' 15928 function exit 15929 15930 `i' 15931 function is in init section 15932 15933 `f' 15934 function is in fini section 15935 15936 `l' 15937 library call 15938 15939 `c' 15940 libc standard call 15941 15942 `d' 15943 stack value demand 15944 15945 `I' 15946 interrupt service routine 15947 15948 `P' 15949 prologue start 15950 15951 `p' 15952 prologue end 15953 15954 `E' 15955 epilogue start 15956 15957 `e' 15958 epilogue end 15959 15960 `j' 15961 long jump / sjlj unwind 15962 15963 `a' 15964 an arbitrary code fragment 15965 15966 `t' 15967 extra parameter saved (a constant value like frame size) 15968 15969`function_to_profile' 15970 a function address 15971 15972`cycle_corrector' 15973 a value which should be added to the cycle counter, zero if 15974 omitted. 15975 15976`extra' 15977 any extra parameter, zero if omitted. 15978 15979 15980 For example: 15981 .global fxx 15982 .type fxx,@function 15983 fxx: 15984 .LFrameOffset_fxx=0x08 15985 .profiler "scdP", fxx ; function entry. 15986 ; we also demand stack value to be saved 15987 push r11 15988 push r10 15989 push r9 15990 push r8 15991 .profiler "cdpt",fxx,0, .LFrameOffset_fxx ; check stack value at this point 15992 ; (this is a prologue end) 15993 ; note, that spare var filled with 15994 ; the farme size 15995 mov r15,r8 15996 ... 15997 .profiler cdE,fxx ; check stack 15998 pop r8 15999 pop r9 16000 pop r10 16001 pop r11 16002 .profiler xcde,fxx,3 ; exit adds 3 to the cycle counter 16003 ret ; cause 'ret' insn takes 3 cycles 16004 16005 16006File: as.info, Node: NDS32-Dependent, Next: NiosII-Dependent, Prev: MSP430-Dependent, Up: Machine Dependencies 16007 160089.30 NDS32 Dependent Features 16009============================= 16010 16011 The NDS32 processors family includes high-performance and low-power 1601232-bit processors for high-end to low-end. GNU `as' for NDS32 16013architectures supports NDS32 ISA version 3. For detail about NDS32 16014instruction set, please see the AndeStar ISA User Manual which is 16015availible at http://www.andestech.com/en/index/index.htm 16016 16017* Menu: 16018 16019* NDS32 Options:: Assembler options 16020* NDS32 Syntax:: High-level assembly macros 16021 16022 16023File: as.info, Node: NDS32 Options, Next: NDS32 Syntax, Up: NDS32-Dependent 16024 160259.30.1 NDS32 Options 16026-------------------- 16027 16028The NDS32 configurations of GNU `as' support these special options: 16029 16030`-O1' 16031 Optimize for performance. 16032 16033`-Os' 16034 Optimize for space. 16035 16036`-EL' 16037 Produce little endian data output. 16038 16039`-EB' 16040 Produce little endian data output. 16041 16042`-mpic' 16043 Generate PIC. 16044 16045`-mno-fp-as-gp-relax' 16046 Suppress fp-as-gp relaxation for this file. 16047 16048`-mb2bb-relax' 16049 Back-to-back branch optimization. 16050 16051`-mno-all-relax' 16052 Suppress all relaxation for this file. 16053 16054`-march=<arch name>' 16055 Assemble for architecture <arch name> which could be v3, v3j, v3m, 16056 v3f, v3s, v2, v2j, v2f, v2s. 16057 16058`-mbaseline=<baseline>' 16059 Assemble for baseline <baseline> which could be v2, v3, v3m. 16060 16061`-mfpu-freg=FREG' 16062 Specify a FPU configuration. 16063 `0 8 SP / 4 DP registers' 16064 16065 `1 16 SP / 8 DP registers' 16066 16067 `2 32 SP / 16 DP registers' 16068 16069 `3 32 SP / 32 DP registers' 16070 16071`-mabi=ABI' 16072 Specify a abi version <abi> could be v1, v2, v2fp, v2fpp. 16073 16074`-m[no-]mac' 16075 Enable/Disable Multiply instructions support. 16076 16077`-m[no-]div' 16078 Enable/Disable Divide instructions support. 16079 16080`-m[no-]16bit-ext' 16081 Enable/Disable 16-bit extension 16082 16083`-m[no-]dx-regs' 16084 Enable/Disable d0/d1 registers 16085 16086`-m[no-]perf-ext' 16087 Enable/Disable Performance extension 16088 16089`-m[no-]perf2-ext' 16090 Enable/Disable Performance extension 2 16091 16092`-m[no-]string-ext' 16093 Enable/Disable String extension 16094 16095`-m[no-]reduced-regs' 16096 Enable/Disable Reduced Register configuration (GPR16) option 16097 16098`-m[no-]audio-isa-ext' 16099 Enable/Disable AUDIO ISA extension 16100 16101`-m[no-]fpu-sp-ext' 16102 Enable/Disable FPU SP extension 16103 16104`-m[no-]fpu-dp-ext' 16105 Enable/Disable FPU DP extension 16106 16107`-m[no-]fpu-fma' 16108 Enable/Disable FPU fused-multiply-add instructions 16109 16110`-mall-ext' 16111 Turn on all extensions and instructions support 16112 16113 16114File: as.info, Node: NDS32 Syntax, Prev: NDS32 Options, Up: NDS32-Dependent 16115 161169.30.2 Syntax 16117------------- 16118 16119* Menu: 16120 16121* NDS32-Chars:: Special Characters 16122* NDS32-Regs:: Register Names 16123* NDS32-Ops:: Pseudo Instructions 16124 16125 16126File: as.info, Node: NDS32-Chars, Next: NDS32-Regs, Up: NDS32 Syntax 16127 161289.30.2.1 Special Characters 16129........................... 16130 16131Use `#' at column 1 and `!' anywhere in the line except inside quotes. 16132 16133 Multiple instructions in a line are allowed though not recommended 16134and should be separated by `;'. 16135 16136 Assembler is not case-sensitive in general except user defined label. 16137For example, `jral F1' is different from `jral f1' while it is the same 16138as `JRAL F1'. 16139 16140 16141File: as.info, Node: NDS32-Regs, Next: NDS32-Ops, Prev: NDS32-Chars, Up: NDS32 Syntax 16142 161439.30.2.2 Register Names 16144....................... 16145 16146`General purpose registers (GPR)' 16147 There are 32 32-bit general purpose registers $r0 to $r31. 16148 16149`Accumulators d0 and d1' 16150 64-bit accumulators: $d0.hi, $d0.lo, $d1.hi, and $d1.lo. 16151 16152`Assembler reserved register $ta' 16153 Register $ta ($r15) is reserved for assembler using. 16154 16155`Operating system reserved registers $p0 and $p1' 16156 Registers $p0 ($r26) and $p1 ($r27) are used by operating system 16157 as scratch registers. 16158 16159`Frame pointer $fp' 16160 Register $r28 is regarded as the frame pointer. 16161 16162`Global pointer' 16163 Register $r29 is regarded as the global pointer. 16164 16165`Link pointer' 16166 Register $r30 is regarded as the link pointer. 16167 16168`Stack pointer' 16169 Register $r31 is regarded as the stack pointer. 16170 16171 16172File: as.info, Node: NDS32-Ops, Prev: NDS32-Regs, Up: NDS32 Syntax 16173 161749.30.2.3 Pseudo Instructions 16175............................ 16176 16177`li rt5,imm32' 16178 load 32-bit integer into register rt5. `sethi rt5,hi20(imm32)' 16179 and then `ori rt5,reg,lo12(imm32)'. 16180 16181`la rt5,var' 16182 Load 32-bit address of var into register rt5. `sethi 16183 rt5,hi20(var)' and then `ori reg,rt5,lo12(var)' 16184 16185`l.[bhw] rt5,var' 16186 Load value of var into register rt5. `sethi $ta,hi20(var)' and 16187 then `l[bhw]i rt5,[$ta+lo12(var)]' 16188 16189`l.[bh]s rt5,var' 16190 Load value of var into register rt5. `sethi $ta,hi20(var)' and 16191 then `l[bh]si rt5,[$ta+lo12(var)]' 16192 16193`l.[bhw]p rt5,var,inc' 16194 Load value of var into register rt5 and increment $ta by amount 16195 inc. `la $ta,var' and then `l[bhw]i.bi rt5,[$ta],inc' 16196 16197`l.[bhw]pc rt5,inc' 16198 Continue loading value of var into register rt5 and increment $ta 16199 by amount inc. `l[bhw]i.bi rt5,[$ta],inc.' 16200 16201`l.[bh]sp rt5,var,inc' 16202 Load value of var into register rt5 and increment $ta by amount 16203 inc. `la $ta,var' and then `l[bh]si.bi rt5,[$ta],inc' 16204 16205`l.[bh]spc rt5,inc' 16206 Continue loading value of var into register rt5 and increment $ta 16207 by amount inc. `l[bh]si.bi rt5,[$ta],inc.' 16208 16209`s.[bhw] rt5,var' 16210 Store register rt5 to var. `sethi $ta,hi20(var)' and then 16211 `s[bhw]i rt5,[$ta+lo12(var)]' 16212 16213`s.[bhw]p rt5,var,inc' 16214 Store register rt5 to var and increment $ta by amount inc. `la 16215 $ta,var' and then `s[bhw]i.bi rt5,[$ta],inc' 16216 16217`s.[bhw]pc rt5,inc' 16218 Continue storing register rt5 to var and increment $ta by amount 16219 inc. `s[bhw]i.bi rt5,[$ta],inc.' 16220 16221`not rt5,ra5' 16222 Alias of `nor rt5,ra5,ra5'. 16223 16224`neg rt5,ra5' 16225 Alias of `subri rt5,ra5,0'. 16226 16227`br rb5' 16228 Depending on how it is assembled, it is translated into `r5 rb5' 16229 or `jr rb5'. 16230 16231`b label' 16232 Branch to label depending on how it is assembled, it is translated 16233 into `j8 label', `j label', or "`la $ta,label' `br $ta'". 16234 16235`bral rb5' 16236 Alias of jral br5 depending on how it is assembled, it is 16237 translated into `jral5 rb5' or `jral rb5'. 16238 16239`bal fname' 16240 Alias of jal fname depending on how it is assembled, it is 16241 translated into `jal fname' or "`la $ta,fname' `bral $ta'". 16242 16243`call fname' 16244 Call function fname same as `jal fname'. 16245 16246`move rt5,ra5' 16247 For 16-bit, this is `mov55 rt5,ra5'. For no 16-bit, this is `ori 16248 rt5,ra5,0'. 16249 16250`move rt5,var' 16251 This is the same as `l.w rt5,var'. 16252 16253`move rt5,imm32' 16254 This is the same as `li rt5,imm32'. 16255 16256`pushm ra5,rb5' 16257 Push contents of registers from ra5 to rb5 into stack. 16258 16259`push ra5' 16260 Push content of register ra5 into stack. (same `pushm ra5,ra5'). 16261 16262`push.d var' 16263 Push value of double-word variable var into stack. 16264 16265`push.w var' 16266 Push value of word variable var into stack. 16267 16268`push.h var' 16269 Push value of half-word variable var into stack. 16270 16271`push.b var' 16272 Push value of byte variable var into stack. 16273 16274`pusha var' 16275 Push 32-bit address of variable var into stack. 16276 16277`pushi imm32' 16278 Push 32-bit immediate value into stack. 16279 16280`popm ra5,rb5' 16281 Pop top of stack values into registers ra5 to rb5. 16282 16283`pop rt5' 16284 Pop top of stack value into register. (same as `popm rt5,rt5'.) 16285 16286`pop.d var,ra5' 16287 Pop value of double-word variable var from stack using register ra5 16288 as 2nd scratch register. (1st is $ta) 16289 16290`pop.w var,ra5' 16291 Pop value of word variable var from stack using register ra5. 16292 16293`pop.h var,ra5' 16294 Pop value of half-word variable var from stack using register ra5. 16295 16296`pop.b var,ra5' 16297 Pop value of byte variable var from stack using register ra5. 16298 16299 16300 16301File: as.info, Node: NiosII-Dependent, Next: NS32K-Dependent, Prev: NDS32-Dependent, Up: Machine Dependencies 16302 163039.31 Nios II Dependent Features 16304=============================== 16305 16306* Menu: 16307 16308* Nios II Options:: Options 16309* Nios II Syntax:: Syntax 16310* Nios II Relocations:: Relocations 16311* Nios II Directives:: Nios II Machine Directives 16312* Nios II Opcodes:: Opcodes 16313 16314 16315File: as.info, Node: Nios II Options, Next: Nios II Syntax, Up: NiosII-Dependent 16316 163179.31.1 Options 16318-------------- 16319 16320`-relax-section' 16321 Replace identified out-of-range branches with PC-relative `jmp' 16322 sequences when possible. The generated code sequences are suitable 16323 for use in position-independent code, but there is a practical 16324 limit on the extended branch range because of the length of the 16325 sequences. This option is the default. 16326 16327`-relax-all' 16328 Replace branch instructions not determinable to be in range and 16329 all call instructions with `jmp' and `callr' sequences 16330 (respectively). This option generates absolute relocations 16331 against the target symbols and is not appropriate for 16332 position-independent code. 16333 16334`-no-relax' 16335 Do not replace any branches or calls. 16336 16337`-EB' 16338 Generate big-endian output. 16339 16340`-EL' 16341 Generate little-endian output. This is the default. 16342 16343`-march=ARCHITECTURE' 16344 This option specifies the target architecture. The assembler 16345 issues an error message if an attempt is made to assemble an 16346 instruction which will not execute on the target architecture. 16347 The following architecture names are recognized: `r1', `r2'. The 16348 default is `r1'. 16349 16350 16351 16352File: as.info, Node: Nios II Syntax, Next: Nios II Relocations, Prev: Nios II Options, Up: NiosII-Dependent 16353 163549.31.2 Syntax 16355------------- 16356 16357* Menu: 16358 16359* Nios II Chars:: Special Characters 16360 16361 16362File: as.info, Node: Nios II Chars, Up: Nios II Syntax 16363 163649.31.2.1 Special Characters 16365........................... 16366 16367`#' is the line comment character. `;' is the line separator character. 16368 16369 16370File: as.info, Node: Nios II Relocations, Next: Nios II Directives, Prev: Nios II Syntax, Up: NiosII-Dependent 16371 163729.31.3 Nios II Machine Relocations 16373---------------------------------- 16374 16375`%hiadj(EXPRESSION)' 16376 Extract the upper 16 bits of EXPRESSION and add one if the 15th 16377 bit is set. 16378 16379 The value of `%hiadj(EXPRESSION)' is: 16380 ((EXPRESSION >> 16) & 0xffff) + ((EXPRESSION >> 15) & 0x01) 16381 16382 The `%hiadj' relocation is intended to be used with the `addi', 16383 `ld' or `st' instructions along with a `%lo', in order to load a 16384 32-bit constant. 16385 16386 movhi r2, %hiadj(symbol) 16387 addi r2, r2, %lo(symbol) 16388 16389`%hi(EXPRESSION)' 16390 Extract the upper 16 bits of EXPRESSION. 16391 16392`%lo(EXPRESSION)' 16393 Extract the lower 16 bits of EXPRESSION. 16394 16395`%gprel(EXPRESSION)' 16396 Subtract the value of the symbol `_gp' from EXPRESSION. 16397 16398 The intention of the `%gprel' relocation is to have a fast small 16399 area of memory which only takes a 16-bit immediate to access. 16400 16401 .section .sdata 16402 fastint: 16403 .int 123 16404 .section .text 16405 ldw r4, %gprel(fastint)(gp) 16406 16407`%call(EXPRESSION)' 16408 16409`%call_lo(EXPRESSION)' 16410 16411`%call_hiadj(EXPRESSION)' 16412`%got(EXPRESSION)' 16413`%got_lo(EXPRESSION)' 16414`%got_hiadj(EXPRESSION)' 16415`%gotoff(EXPRESSION)' 16416`%gotoff_lo(EXPRESSION)' 16417`%gotoff_hiadj(EXPRESSION)' 16418`%tls_gd(EXPRESSION)' 16419`%tls_ie(EXPRESSION)' 16420`%tls_le(EXPRESSION)' 16421`%tls_ldm(EXPRESSION)' 16422`%tls_ldo(EXPRESSION)' 16423 These relocations support the ABI for Linux Systems documented in 16424 the `Nios II Processor Reference Handbook'. 16425 16426 16427File: as.info, Node: Nios II Directives, Next: Nios II Opcodes, Prev: Nios II Relocations, Up: NiosII-Dependent 16428 164299.31.4 Nios II Machine Directives 16430--------------------------------- 16431 16432`.align EXPRESSION [, EXPRESSION]' 16433 This is the generic `.align' directive, however this aligns to a 16434 power of two. 16435 16436`.half EXPRESSION' 16437 Create an aligned constant 2 bytes in size. 16438 16439`.word EXPRESSION' 16440 Create an aligned constant 4 bytes in size. 16441 16442`.dword EXPRESSION' 16443 Create an aligned constant 8 bytes in size. 16444 16445`.2byte EXPRESSION' 16446 Create an unaligned constant 2 bytes in size. 16447 16448`.4byte EXPRESSION' 16449 Create an unaligned constant 4 bytes in size. 16450 16451`.8byte EXPRESSION' 16452 Create an unaligned constant 8 bytes in size. 16453 16454`.16byte EXPRESSION' 16455 Create an unaligned constant 16 bytes in size. 16456 16457`.set noat' 16458 Allows assembly code to use `at' register without warning. Macro 16459 or relaxation expansions generate warnings. 16460 16461`.set at' 16462 Assembly code using `at' register generates warnings, and macro 16463 expansion and relaxation are enabled. 16464 16465`.set nobreak' 16466 Allows assembly code to use `ba' and `bt' registers without 16467 warning. 16468 16469`.set break' 16470 Turns warnings back on for using `ba' and `bt' registers. 16471 16472`.set norelax' 16473 Do not replace any branches or calls. 16474 16475`.set relaxsection' 16476 Replace identified out-of-range branches with `jmp' sequences 16477 (default). 16478 16479`.set relaxsection' 16480 Replace all branch and call instructions with `jmp' and `callr' 16481 sequences. 16482 16483`.set ...' 16484 All other `.set' are the normal use. 16485 16486 16487 16488File: as.info, Node: Nios II Opcodes, Prev: Nios II Directives, Up: NiosII-Dependent 16489 164909.31.5 Opcodes 16491-------------- 16492 16493`as' implements all the standard Nios II opcodes documented in the 16494`Nios II Processor Reference Handbook', including the assembler 16495pseudo-instructions. 16496 16497 16498File: as.info, Node: NS32K-Dependent, Next: PDP-11-Dependent, Prev: NiosII-Dependent, Up: Machine Dependencies 16499 165009.32 NS32K Dependent Features 16501============================= 16502 16503* Menu: 16504 16505* NS32K Syntax:: Syntax 16506 16507 16508File: as.info, Node: NS32K Syntax, Up: NS32K-Dependent 16509 165109.32.1 Syntax 16511------------- 16512 16513* Menu: 16514 16515* NS32K-Chars:: Special Characters 16516 16517 16518File: as.info, Node: NS32K-Chars, Up: NS32K Syntax 16519 165209.32.1.1 Special Characters 16521........................... 16522 16523The presence of a `#' appearing anywhere on a line indicates the start 16524of a comment that extends to the end of that line. 16525 16526 If a `#' appears as the first character of a line then the whole 16527line is treated as a comment, but in this case the line can also be a 16528logical line number directive (*note Comments::) or a preprocessor 16529control command (*note Preprocessing::). 16530 16531 If Sequent compatibility has been configured into the assembler then 16532the `|' character appearing as the first character on a line will also 16533indicate the start of a line comment. 16534 16535 The `;' character can be used to separate statements on the same 16536line. 16537 16538 16539File: as.info, Node: PDP-11-Dependent, Next: PJ-Dependent, Prev: NS32K-Dependent, Up: Machine Dependencies 16540 165419.33 PDP-11 Dependent Features 16542============================== 16543 16544* Menu: 16545 16546* PDP-11-Options:: Options 16547* PDP-11-Pseudos:: Assembler Directives 16548* PDP-11-Syntax:: DEC Syntax versus BSD Syntax 16549* PDP-11-Mnemonics:: Instruction Naming 16550* PDP-11-Synthetic:: Synthetic Instructions 16551 16552 16553File: as.info, Node: PDP-11-Options, Next: PDP-11-Pseudos, Up: PDP-11-Dependent 16554 165559.33.1 Options 16556-------------- 16557 16558The PDP-11 version of `as' has a rich set of machine dependent options. 16559 165609.33.1.1 Code Generation Options 16561................................ 16562 16563`-mpic | -mno-pic' 16564 Generate position-independent (or position-dependent) code. 16565 16566 The default is to generate position-independent code. 16567 165689.33.1.2 Instruction Set Extension Options 16569.......................................... 16570 16571These options enables or disables the use of extensions over the base 16572line instruction set as introduced by the first PDP-11 CPU: the KA11. 16573Most options come in two variants: a `-m'EXTENSION that enables 16574EXTENSION, and a `-mno-'EXTENSION that disables EXTENSION. 16575 16576 The default is to enable all extensions. 16577 16578`-mall | -mall-extensions' 16579 Enable all instruction set extensions. 16580 16581`-mno-extensions' 16582 Disable all instruction set extensions. 16583 16584`-mcis | -mno-cis' 16585 Enable (or disable) the use of the commercial instruction set, 16586 which consists of these instructions: `ADDNI', `ADDN', `ADDPI', 16587 `ADDP', `ASHNI', `ASHN', `ASHPI', `ASHP', `CMPCI', `CMPC', 16588 `CMPNI', `CMPN', `CMPPI', `CMPP', `CVTLNI', `CVTLN', `CVTLPI', 16589 `CVTLP', `CVTNLI', `CVTNL', `CVTNPI', `CVTNP', `CVTPLI', `CVTPL', 16590 `CVTPNI', `CVTPN', `DIVPI', `DIVP', `L2DR', `L3DR', `LOCCI', 16591 `LOCC', `MATCI', `MATC', `MOVCI', `MOVC', `MOVRCI', `MOVRC', 16592 `MOVTCI', `MOVTC', `MULPI', `MULP', `SCANCI', `SCANC', `SKPCI', 16593 `SKPC', `SPANCI', `SPANC', `SUBNI', `SUBN', `SUBPI', and `SUBP'. 16594 16595`-mcsm | -mno-csm' 16596 Enable (or disable) the use of the `CSM' instruction. 16597 16598`-meis | -mno-eis' 16599 Enable (or disable) the use of the extended instruction set, which 16600 consists of these instructions: `ASHC', `ASH', `DIV', `MARK', 16601 `MUL', `RTT', `SOB' `SXT', and `XOR'. 16602 16603`-mfis | -mkev11' 16604`-mno-fis | -mno-kev11' 16605 Enable (or disable) the use of the KEV11 floating-point 16606 instructions: `FADD', `FDIV', `FMUL', and `FSUB'. 16607 16608`-mfpp | -mfpu | -mfp-11' 16609`-mno-fpp | -mno-fpu | -mno-fp-11' 16610 Enable (or disable) the use of FP-11 floating-point instructions: 16611 `ABSF', `ADDF', `CFCC', `CLRF', `CMPF', `DIVF', `LDCFF', `LDCIF', 16612 `LDEXP', `LDF', `LDFPS', `MODF', `MULF', `NEGF', `SETD', `SETF', 16613 `SETI', `SETL', `STCFF', `STCFI', `STEXP', `STF', `STFPS', `STST', 16614 `SUBF', and `TSTF'. 16615 16616`-mlimited-eis | -mno-limited-eis' 16617 Enable (or disable) the use of the limited extended instruction 16618 set: `MARK', `RTT', `SOB', `SXT', and `XOR'. 16619 16620 The -mno-limited-eis options also implies -mno-eis. 16621 16622`-mmfpt | -mno-mfpt' 16623 Enable (or disable) the use of the `MFPT' instruction. 16624 16625`-mmultiproc | -mno-multiproc' 16626 Enable (or disable) the use of multiprocessor instructions: 16627 `TSTSET' and `WRTLCK'. 16628 16629`-mmxps | -mno-mxps' 16630 Enable (or disable) the use of the `MFPS' and `MTPS' instructions. 16631 16632`-mspl | -mno-spl' 16633 Enable (or disable) the use of the `SPL' instruction. 16634 16635 Enable (or disable) the use of the microcode instructions: `LDUB', 16636 `MED', and `XFC'. 16637 166389.33.1.3 CPU Model Options 16639.......................... 16640 16641These options enable the instruction set extensions supported by a 16642particular CPU, and disables all other extensions. 16643 16644`-mka11' 16645 KA11 CPU. Base line instruction set only. 16646 16647`-mkb11' 16648 KB11 CPU. Enable extended instruction set and `SPL'. 16649 16650`-mkd11a' 16651 KD11-A CPU. Enable limited extended instruction set. 16652 16653`-mkd11b' 16654 KD11-B CPU. Base line instruction set only. 16655 16656`-mkd11d' 16657 KD11-D CPU. Base line instruction set only. 16658 16659`-mkd11e' 16660 KD11-E CPU. Enable extended instruction set, `MFPS', and `MTPS'. 16661 16662`-mkd11f | -mkd11h | -mkd11q' 16663 KD11-F, KD11-H, or KD11-Q CPU. Enable limited extended 16664 instruction set, `MFPS', and `MTPS'. 16665 16666`-mkd11k' 16667 KD11-K CPU. Enable extended instruction set, `LDUB', `MED', 16668 `MFPS', `MFPT', `MTPS', and `XFC'. 16669 16670`-mkd11z' 16671 KD11-Z CPU. Enable extended instruction set, `CSM', `MFPS', 16672 `MFPT', `MTPS', and `SPL'. 16673 16674`-mf11' 16675 F11 CPU. Enable extended instruction set, `MFPS', `MFPT', and 16676 `MTPS'. 16677 16678`-mj11' 16679 J11 CPU. Enable extended instruction set, `CSM', `MFPS', `MFPT', 16680 `MTPS', `SPL', `TSTSET', and `WRTLCK'. 16681 16682`-mt11' 16683 T11 CPU. Enable limited extended instruction set, `MFPS', and 16684 `MTPS'. 16685 166869.33.1.4 Machine Model Options 16687.............................. 16688 16689These options enable the instruction set extensions supported by a 16690particular machine model, and disables all other extensions. 16691 16692`-m11/03' 16693 Same as `-mkd11f'. 16694 16695`-m11/04' 16696 Same as `-mkd11d'. 16697 16698`-m11/05 | -m11/10' 16699 Same as `-mkd11b'. 16700 16701`-m11/15 | -m11/20' 16702 Same as `-mka11'. 16703 16704`-m11/21' 16705 Same as `-mt11'. 16706 16707`-m11/23 | -m11/24' 16708 Same as `-mf11'. 16709 16710`-m11/34' 16711 Same as `-mkd11e'. 16712 16713`-m11/34a' 16714 Ame as `-mkd11e' `-mfpp'. 16715 16716`-m11/35 | -m11/40' 16717 Same as `-mkd11a'. 16718 16719`-m11/44' 16720 Same as `-mkd11z'. 16721 16722`-m11/45 | -m11/50 | -m11/55 | -m11/70' 16723 Same as `-mkb11'. 16724 16725`-m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94' 16726 Same as `-mj11'. 16727 16728`-m11/60' 16729 Same as `-mkd11k'. 16730 16731 16732File: as.info, Node: PDP-11-Pseudos, Next: PDP-11-Syntax, Prev: PDP-11-Options, Up: PDP-11-Dependent 16733 167349.33.2 Assembler Directives 16735--------------------------- 16736 16737The PDP-11 version of `as' has a few machine dependent assembler 16738directives. 16739 16740`.bss' 16741 Switch to the `bss' section. 16742 16743`.even' 16744 Align the location counter to an even number. 16745 16746 16747File: as.info, Node: PDP-11-Syntax, Next: PDP-11-Mnemonics, Prev: PDP-11-Pseudos, Up: PDP-11-Dependent 16748 167499.33.3 PDP-11 Assembly Language Syntax 16750-------------------------------------- 16751 16752`as' supports both DEC syntax and BSD syntax. The only difference is 16753that in DEC syntax, a `#' character is used to denote an immediate 16754constants, while in BSD syntax the character for this purpose is `$'. 16755 16756 general-purpose registers are named `r0' through `r7'. Mnemonic 16757alternatives for `r6' and `r7' are `sp' and `pc', respectively. 16758 16759 Floating-point registers are named `ac0' through `ac3', or 16760alternatively `fr0' through `fr3'. 16761 16762 Comments are started with a `#' or a `/' character, and extend to 16763the end of the line. (FIXME: clash with immediates?) 16764 16765 Multiple statements on the same line can be separated by the `;' 16766character. 16767 16768 16769File: as.info, Node: PDP-11-Mnemonics, Next: PDP-11-Synthetic, Prev: PDP-11-Syntax, Up: PDP-11-Dependent 16770 167719.33.4 Instruction Naming 16772------------------------- 16773 16774Some instructions have alternative names. 16775 16776`BCC' 16777 `BHIS' 16778 16779`BCS' 16780 `BLO' 16781 16782`L2DR' 16783 `L2D' 16784 16785`L3DR' 16786 `L3D' 16787 16788`SYS' 16789 `TRAP' 16790 16791 16792File: as.info, Node: PDP-11-Synthetic, Prev: PDP-11-Mnemonics, Up: PDP-11-Dependent 16793 167949.33.5 Synthetic Instructions 16795----------------------------- 16796 16797The `JBR' and `J'CC synthetic instructions are not supported yet. 16798 16799 16800File: as.info, Node: PJ-Dependent, Next: PPC-Dependent, Prev: PDP-11-Dependent, Up: Machine Dependencies 16801 168029.34 picoJava Dependent Features 16803================================ 16804 16805* Menu: 16806 16807* PJ Options:: Options 16808* PJ Syntax:: PJ Syntax 16809 16810 16811File: as.info, Node: PJ Options, Next: PJ Syntax, Up: PJ-Dependent 16812 168139.34.1 Options 16814-------------- 16815 16816`as' has two additional command-line options for the picoJava 16817architecture. 16818`-ml' 16819 This option selects little endian data output. 16820 16821`-mb' 16822 This option selects big endian data output. 16823 16824 16825File: as.info, Node: PJ Syntax, Prev: PJ Options, Up: PJ-Dependent 16826 168279.34.2 PJ Syntax 16828---------------- 16829 16830* Menu: 16831 16832* PJ-Chars:: Special Characters 16833 16834 16835File: as.info, Node: PJ-Chars, Up: PJ Syntax 16836 168379.34.2.1 Special Characters 16838........................... 16839 16840The presence of a `!' or `/' on a line indicates the start of a comment 16841that extends to the end of the current line. 16842 16843 If a `#' appears as the first character of a line then the whole 16844line is treated as a comment, but in this case the line could also be a 16845logical line number directive (*note Comments::) or a preprocessor 16846control command (*note Preprocessing::). 16847 16848 The `;' character can be used to separate statements on the same 16849line. 16850 16851 16852File: as.info, Node: PPC-Dependent, Next: RL78-Dependent, Prev: PJ-Dependent, Up: Machine Dependencies 16853 168549.35 PowerPC Dependent Features 16855=============================== 16856 16857* Menu: 16858 16859* PowerPC-Opts:: Options 16860* PowerPC-Pseudo:: PowerPC Assembler Directives 16861* PowerPC-Syntax:: PowerPC Syntax 16862 16863 16864File: as.info, Node: PowerPC-Opts, Next: PowerPC-Pseudo, Up: PPC-Dependent 16865 168669.35.1 Options 16867-------------- 16868 16869The PowerPC chip family includes several successive levels, using the 16870same core instruction set, but including a few additional instructions 16871at each level. There are exceptions to this however. For details on 16872what instructions each variant supports, please see the chip's 16873architecture reference manual. 16874 16875 The following table lists all available PowerPC options. 16876 16877`-a32' 16878 Generate ELF32 or XCOFF32. 16879 16880`-a64' 16881 Generate ELF64 or XCOFF64. 16882 16883`-K PIC' 16884 Set EF_PPC_RELOCATABLE_LIB in ELF flags. 16885 16886`-mpwrx | -mpwr2' 16887 Generate code for POWER/2 (RIOS2). 16888 16889`-mpwr' 16890 Generate code for POWER (RIOS1) 16891 16892`-m601' 16893 Generate code for PowerPC 601. 16894 16895`-mppc, -mppc32, -m603, -m604' 16896 Generate code for PowerPC 603/604. 16897 16898`-m403, -m405' 16899 Generate code for PowerPC 403/405. 16900 16901`-m440' 16902 Generate code for PowerPC 440. BookE and some 405 instructions. 16903 16904`-m464' 16905 Generate code for PowerPC 464. 16906 16907`-m476' 16908 Generate code for PowerPC 476. 16909 16910`-m7400, -m7410, -m7450, -m7455' 16911 Generate code for PowerPC 7400/7410/7450/7455. 16912 16913`-m750cl' 16914 Generate code for PowerPC 750CL. 16915 16916`-m821, -m850, -m860' 16917 Generate code for PowerPC 821/850/860. 16918 16919`-mppc64, -m620' 16920 Generate code for PowerPC 620/625/630. 16921 16922`-me500, -me500x2' 16923 Generate code for Motorola e500 core complex. 16924 16925`-me500mc' 16926 Generate code for Freescale e500mc core complex. 16927 16928`-me500mc64' 16929 Generate code for Freescale e500mc64 core complex. 16930 16931`-me5500' 16932 Generate code for Freescale e5500 core complex. 16933 16934`-me6500' 16935 Generate code for Freescale e6500 core complex. 16936 16937`-mspe' 16938 Generate code for Motorola SPE instructions. 16939 16940`-mtitan' 16941 Generate code for AppliedMicro Titan core complex. 16942 16943`-mppc64bridge' 16944 Generate code for PowerPC 64, including bridge insns. 16945 16946`-mbooke' 16947 Generate code for 32-bit BookE. 16948 16949`-ma2' 16950 Generate code for A2 architecture. 16951 16952`-me300' 16953 Generate code for PowerPC e300 family. 16954 16955`-maltivec' 16956 Generate code for processors with AltiVec instructions. 16957 16958`-mvle' 16959 Generate code for Freescale PowerPC VLE instructions. 16960 16961`-mvsx' 16962 Generate code for processors with Vector-Scalar (VSX) instructions. 16963 16964`-mhtm' 16965 Generate code for processors with Hardware Transactional Memory 16966 instructions. 16967 16968`-mpower4, -mpwr4' 16969 Generate code for Power4 architecture. 16970 16971`-mpower5, -mpwr5, -mpwr5x' 16972 Generate code for Power5 architecture. 16973 16974`-mpower6, -mpwr6' 16975 Generate code for Power6 architecture. 16976 16977`-mpower7, -mpwr7' 16978 Generate code for Power7 architecture. 16979 16980`-mpower8, -mpwr8' 16981 Generate code for Power8 architecture. 16982 16983`-mpower9, -mpwr9' 16984 Generate code for Power9 architecture. 16985 16986`-mcell' 16987 16988`-mcell' 16989 Generate code for Cell Broadband Engine architecture. 16990 16991`-mcom' 16992 Generate code Power/PowerPC common instructions. 16993 16994`-many' 16995 Generate code for any architecture (PWR/PWRX/PPC). 16996 16997`-mregnames' 16998 Allow symbolic names for registers. 16999 17000`-mno-regnames' 17001 Do not allow symbolic names for registers. 17002 17003`-mrelocatable' 17004 Support for GCC's -mrelocatable option. 17005 17006`-mrelocatable-lib' 17007 Support for GCC's -mrelocatable-lib option. 17008 17009`-memb' 17010 Set PPC_EMB bit in ELF flags. 17011 17012`-mlittle, -mlittle-endian, -le' 17013 Generate code for a little endian machine. 17014 17015`-mbig, -mbig-endian, -be' 17016 Generate code for a big endian machine. 17017 17018`-msolaris' 17019 Generate code for Solaris. 17020 17021`-mno-solaris' 17022 Do not generate code for Solaris. 17023 17024`-nops=COUNT' 17025 If an alignment directive inserts more than COUNT nops, put a 17026 branch at the beginning to skip execution of the nops. 17027 17028 17029File: as.info, Node: PowerPC-Pseudo, Next: PowerPC-Syntax, Prev: PowerPC-Opts, Up: PPC-Dependent 17030 170319.35.2 PowerPC Assembler Directives 17032----------------------------------- 17033 17034A number of assembler directives are available for PowerPC. The 17035following table is far from complete. 17036 17037`.machine "string"' 17038 This directive allows you to change the machine for which code is 17039 generated. `"string"' may be any of the -m cpu selection options 17040 (without the -m) enclosed in double quotes, `"push"', or `"pop"'. 17041 `.machine "push"' saves the currently selected cpu, which may be 17042 restored with `.machine "pop"'. 17043 17044 17045File: as.info, Node: PowerPC-Syntax, Prev: PowerPC-Pseudo, Up: PPC-Dependent 17046 170479.35.3 PowerPC Syntax 17048--------------------- 17049 17050* Menu: 17051 17052* PowerPC-Chars:: Special Characters 17053 17054 17055File: as.info, Node: PowerPC-Chars, Up: PowerPC-Syntax 17056 170579.35.3.1 Special Characters 17058........................... 17059 17060The presence of a `#' on a line indicates the start of a comment that 17061extends to the end of the current line. 17062 17063 If a `#' appears as the first character of a line then the whole 17064line is treated as a comment, but in this case the line could also be a 17065logical line number directive (*note Comments::) or a preprocessor 17066control command (*note Preprocessing::). 17067 17068 If the assembler has been configured for the ppc-*-solaris* target 17069then the `!' character also acts as a line comment character. This can 17070be disabled via the `-mno-solaris' command line option. 17071 17072 The `;' character can be used to separate statements on the same 17073line. 17074 17075 17076File: as.info, Node: RL78-Dependent, Next: RX-Dependent, Prev: PPC-Dependent, Up: Machine Dependencies 17077 170789.36 RL78 Dependent Features 17079============================ 17080 17081* Menu: 17082 17083* RL78-Opts:: RL78 Assembler Command Line Options 17084* RL78-Modifiers:: Symbolic Operand Modifiers 17085* RL78-Directives:: Assembler Directives 17086* RL78-Syntax:: Syntax 17087 17088 17089File: as.info, Node: RL78-Opts, Next: RL78-Modifiers, Up: RL78-Dependent 17090 170919.36.1 RL78 Options 17092------------------- 17093 17094`relax' 17095 Enable support for link-time relaxation. 17096 17097`norelax' 17098 Disable support for link-time relaxation (default). 17099 17100`mg10' 17101 Mark the generated binary as targeting the G10 variant of the RL78 17102 architecture. 17103 17104`mg13' 17105 Mark the generated binary as targeting the G13 variant of the RL78 17106 architecture. 17107 17108`mg14' 17109`mrl78' 17110 Mark the generated binary as targeting the G14 variant of the RL78 17111 architecture. This is the default. 17112 17113`m32bit-doubles' 17114 Mark the generated binary as one that uses 32-bits to hold the 17115 `double' floating point type. This is the default. 17116 17117`m64bit-doubles' 17118 Mark the generated binary as one that uses 64-bits to hold the 17119 `double' floating point type. 17120 17121 17122 17123File: as.info, Node: RL78-Modifiers, Next: RL78-Directives, Prev: RL78-Opts, Up: RL78-Dependent 17124 171259.36.2 Symbolic Operand Modifiers 17126--------------------------------- 17127 17128The RL78 has three modifiers that adjust the relocations used by the 17129linker: 17130 17131`%lo16()' 17132 When loading a 20-bit (or wider) address into registers, this 17133 modifier selects the 16 least significant bits. 17134 17135 movw ax,#%lo16(_sym) 17136 17137`%hi16()' 17138 When loading a 20-bit (or wider) address into registers, this 17139 modifier selects the 16 most significant bits. 17140 17141 movw ax,#%hi16(_sym) 17142 17143`%hi8()' 17144 When loading a 20-bit (or wider) address into registers, this 17145 modifier selects the 8 bits that would go into CS or ES (i.e. bits 17146 23..16). 17147 17148 mov es, #%hi8(_sym) 17149 17150 17151 17152File: as.info, Node: RL78-Directives, Next: RL78-Syntax, Prev: RL78-Modifiers, Up: RL78-Dependent 17153 171549.36.3 Assembler Directives 17155--------------------------- 17156 17157In addition to the common directives, the RL78 adds these: 17158 17159`.double' 17160 Output a constant in "double" format, which is either a 32-bit or 17161 a 64-bit floating point value, depending upon the setting of the 17162 `-m32bit-doubles'|`-m64bit-doubles' command line option. 17163 17164`.bss' 17165 Select the BSS section. 17166 17167`.3byte' 17168 Output a constant value in a three byte format. 17169 17170`.int' 17171`.word' 17172 Output a constant value in a four byte format. 17173 17174 17175 17176File: as.info, Node: RL78-Syntax, Prev: RL78-Directives, Up: RL78-Dependent 17177 171789.36.4 Syntax for the RL78 17179-------------------------- 17180 17181* Menu: 17182 17183* RL78-Chars:: Special Characters 17184 17185 17186File: as.info, Node: RL78-Chars, Up: RL78-Syntax 17187 171889.36.4.1 Special Characters 17189........................... 17190 17191The presence of a `;' appearing anywhere on a line indicates the start 17192of a comment that extends to the end of that line. 17193 17194 If a `#' appears as the first character of a line then the whole 17195line is treated as a comment, but in this case the line can also be a 17196logical line number directive (*note Comments::) or a preprocessor 17197control command (*note Preprocessing::). 17198 17199 The `|' character can be used to separate statements on the same 17200line. 17201 17202 17203File: as.info, Node: RX-Dependent, Next: S/390-Dependent, Prev: RL78-Dependent, Up: Machine Dependencies 17204 172059.37 RX Dependent Features 17206========================== 17207 17208* Menu: 17209 17210* RX-Opts:: RX Assembler Command Line Options 17211* RX-Modifiers:: Symbolic Operand Modifiers 17212* RX-Directives:: Assembler Directives 17213* RX-Float:: Floating Point 17214* RX-Syntax:: Syntax 17215 17216 17217File: as.info, Node: RX-Opts, Next: RX-Modifiers, Up: RX-Dependent 17218 172199.37.1 RX Options 17220----------------- 17221 17222The Renesas RX port of `as' has a few target specfic command line 17223options: 17224 17225`-m32bit-doubles' 17226 This option controls the ABI and indicates to use a 32-bit float 17227 ABI. It has no effect on the assembled instructions, but it does 17228 influence the behaviour of the `.double' pseudo-op. This is the 17229 default. 17230 17231`-m64bit-doubles' 17232 This option controls the ABI and indicates to use a 64-bit float 17233 ABI. It has no effect on the assembled instructions, but it does 17234 influence the behaviour of the `.double' pseudo-op. 17235 17236`-mbig-endian' 17237 This option controls the ABI and indicates to use a big-endian data 17238 ABI. It has no effect on the assembled instructions, but it does 17239 influence the behaviour of the `.short', `.hword', `.int', 17240 `.word', `.long', `.quad' and `.octa' pseudo-ops. 17241 17242`-mlittle-endian' 17243 This option controls the ABI and indicates to use a little-endian 17244 data ABI. It has no effect on the assembled instructions, but it 17245 does influence the behaviour of the `.short', `.hword', `.int', 17246 `.word', `.long', `.quad' and `.octa' pseudo-ops. This is the 17247 default. 17248 17249`-muse-conventional-section-names' 17250 This option controls the default names given to the code (.text), 17251 initialised data (.data) and uninitialised data sections (.bss). 17252 17253`-muse-renesas-section-names' 17254 This option controls the default names given to the code (.P), 17255 initialised data (.D_1) and uninitialised data sections (.B_1). 17256 This is the default. 17257 17258`-msmall-data-limit' 17259 This option tells the assembler that the small data limit feature 17260 of the RX port of GCC is being used. This results in the assembler 17261 generating an undefined reference to a symbol called `__gp' for 17262 use by the relocations that are needed to support the small data 17263 limit feature. This option is not enabled by default as it would 17264 otherwise pollute the symbol table. 17265 17266`-mpid' 17267 This option tells the assembler that the position independent data 17268 of the RX port of GCC is being used. This results in the assembler 17269 generating an undefined reference to a symbol called `__pid_base', 17270 and also setting the RX_PID flag bit in the e_flags field of the 17271 ELF header of the object file. 17272 17273`-mint-register=NUM' 17274 This option tells the assembler how many registers have been 17275 reserved for use by interrupt handlers. This is needed in order 17276 to compute the correct values for the `%gpreg' and `%pidreg' meta 17277 registers. 17278 17279`-mgcc-abi' 17280 This option tells the assembler that the old GCC ABI is being used 17281 by the assembled code. With this version of the ABI function 17282 arguments that are passed on the stack are aligned to a 32-bit 17283 boundary. 17284 17285`-mrx-abi' 17286 This option tells the assembler that the official RX ABI is being 17287 used by the assembled code. With this version of the ABI function 17288 arguments that are passed on the stack are aligned to their natural 17289 alignments. This option is the default. 17290 17291`-mcpu=NAME' 17292 This option tells the assembler the target CPU type. Currently the 17293 `rx100', `rx200', `rx600', `rx610' and `rxv2' are recognised as 17294 valid cpu names. Attempting to assemble an instruction not 17295 supported by the indicated cpu type will result in an error message 17296 being generated. 17297 17298`-mno-allow-string-insns' 17299 This option tells the assembler to mark the object file that it is 17300 building as one that does not use the string instructions `SMOVF', 17301 `SCMPU', `SMOVB', `SMOVU', `SUNTIL' `SWHILE' or the `RMPA' 17302 instruction. In addition the mark tells the linker to complain if 17303 an attempt is made to link the binary with another one that does 17304 use any of these instructions. 17305 17306 Note - the inverse of this option, `-mallow-string-insns', is not 17307 needed. The assembler automatically detects the use of the the 17308 instructions in the source code and labels the resulting object 17309 file appropriately. If no string instructions are detected then 17310 the object file is labelled as being one that can be linked with 17311 either string-using or string-banned object files. 17312 17313 17314File: as.info, Node: RX-Modifiers, Next: RX-Directives, Prev: RX-Opts, Up: RX-Dependent 17315 173169.37.2 Symbolic Operand Modifiers 17317--------------------------------- 17318 17319The assembler supports one modifier when using symbol addresses in RX 17320instruction operands. The general syntax is the following: 17321 17322 %gp(symbol) 17323 17324 The modifier returns the offset from the __GP symbol to the 17325specified symbol as a 16-bit value. The intent is that this offset 17326should be used in a register+offset move instruction when generating 17327references to small data. Ie, like this: 17328 17329 mov.W %gp(_foo)[%gpreg], r1 17330 17331 The assembler also supports two meta register names which can be used 17332to refer to registers whose values may not be known to the programmer. 17333These meta register names are: 17334 17335`%gpreg' 17336 The small data address register. 17337 17338`%pidreg' 17339 The PID base address register. 17340 17341 17342 Both registers normally have the value r13, but this can change if 17343some registers have been reserved for use by interrupt handlers or if 17344both the small data limit and position independent data features are 17345being used at the same time. 17346 17347 17348File: as.info, Node: RX-Directives, Next: RX-Float, Prev: RX-Modifiers, Up: RX-Dependent 17349 173509.37.3 Assembler Directives 17351--------------------------- 17352 17353The RX version of `as' has the following specific assembler directives: 17354 17355`.3byte' 17356 Inserts a 3-byte value into the output file at the current 17357 location. 17358 17359`.fetchalign' 17360 If the next opcode following this directive spans a fetch line 17361 boundary (8 byte boundary), the opcode is aligned to that boundary. 17362 If the next opcode does not span a fetch line, this directive has 17363 no effect. Note that one or more labels may be between this 17364 directive and the opcode; those labels are aligned as well. Any 17365 inserted bytes due to alignment will form a NOP opcode. 17366 17367 17368 17369File: as.info, Node: RX-Float, Next: RX-Syntax, Prev: RX-Directives, Up: RX-Dependent 17370 173719.37.4 Floating Point 17372--------------------- 17373 17374The floating point formats generated by directives are these. 17375 17376`.float' 17377 `Single' precision (32-bit) floating point constants. 17378 17379`.double' 17380 If the `-m64bit-doubles' command line option has been specified 17381 then then `double' directive generates `double' precision (64-bit) 17382 floating point constants, otherwise it generates `single' 17383 precision (32-bit) floating point constants. To force the 17384 generation of 64-bit floating point constants used the `dc.d' 17385 directive instead. 17386 17387 17388 17389File: as.info, Node: RX-Syntax, Prev: RX-Float, Up: RX-Dependent 17390 173919.37.5 Syntax for the RX 17392------------------------ 17393 17394* Menu: 17395 17396* RX-Chars:: Special Characters 17397 17398 17399File: as.info, Node: RX-Chars, Up: RX-Syntax 17400 174019.37.5.1 Special Characters 17402........................... 17403 17404The presence of a `;' appearing anywhere on a line indicates the start 17405of a comment that extends to the end of that line. 17406 17407 If a `#' appears as the first character of a line then the whole 17408line is treated as a comment, but in this case the line can also be a 17409logical line number directive (*note Comments::) or a preprocessor 17410control command (*note Preprocessing::). 17411 17412 The `!' character can be used to separate statements on the same 17413line. 17414 17415 17416File: as.info, Node: S/390-Dependent, Next: SCORE-Dependent, Prev: RX-Dependent, Up: Machine Dependencies 17417 174189.38 IBM S/390 Dependent Features 17419================================= 17420 17421 The s390 version of `as' supports two architectures modes and seven 17422chip levels. The architecture modes are the Enterprise System 17423Architecture (ESA) and the newer z/Architecture mode. The chip levels 17424are g5, g6, z900, z990, z9-109, z9-ec, z10, z196, zEC12, and z13. 17425 17426* Menu: 17427 17428* s390 Options:: Command-line Options. 17429* s390 Characters:: Special Characters. 17430* s390 Syntax:: Assembler Instruction syntax. 17431* s390 Directives:: Assembler Directives. 17432* s390 Floating Point:: Floating Point. 17433 17434 17435File: as.info, Node: s390 Options, Next: s390 Characters, Up: S/390-Dependent 17436 174379.38.1 Options 17438-------------- 17439 17440The following table lists all available s390 specific options: 17441 17442`-m31 | -m64' 17443 Select 31- or 64-bit ABI implying a word size of 32- or 64-bit. 17444 17445 These options are only available with the ELF object file format, 17446 and require that the necessary BFD support has been included (on a 17447 31-bit platform you must add -enable-64-bit-bfd on the call to the 17448 configure script to enable 64-bit usage and use s390x as target 17449 platform). 17450 17451`-mesa | -mzarch' 17452 Select the architecture mode, either the Enterprise System 17453 Architecture (esa) mode or the z/Architecture mode (zarch). 17454 17455 The 64-bit instructions are only available with the z/Architecture 17456 mode. The combination of `-m64' and `-mesa' results in a warning 17457 message. 17458 17459`-march=CPU' 17460 This option specifies the target processor. The following 17461 processor names are recognized: `g5', `g6', `z900', `z990', 17462 `z9-109', `z9-ec', `z10', `z196', `zEC12', and `z13'. Assembling 17463 an instruction that is not supported on the target processor 17464 results in an error message. Do not specify `g5' or `g6' with 17465 `-mzarch'. 17466 17467`-mregnames' 17468 Allow symbolic names for registers. 17469 17470`-mno-regnames' 17471 Do not allow symbolic names for registers. 17472 17473`-mwarn-areg-zero' 17474 Warn whenever the operand for a base or index register has been 17475 specified but evaluates to zero. This can indicate the misuse of 17476 general purpose register 0 as an address register. 17477 17478 17479 17480File: as.info, Node: s390 Characters, Next: s390 Syntax, Prev: s390 Options, Up: S/390-Dependent 17481 174829.38.2 Special Characters 17483------------------------- 17484 17485`#' is the line comment character. 17486 17487 If a `#' appears as the first character of a line then the whole 17488line is treated as a comment, but in this case the line could also be a 17489logical line number directive (*note Comments::) or a preprocessor 17490control command (*note Preprocessing::). 17491 17492 The `;' character can be used instead of a newline to separate 17493statements. 17494 17495 17496File: as.info, Node: s390 Syntax, Next: s390 Directives, Prev: s390 Characters, Up: S/390-Dependent 17497 174989.38.3 Instruction syntax 17499------------------------- 17500 17501The assembler syntax closely follows the syntax outlined in Enterprise 17502Systems Architecture/390 Principles of Operation (SA22-7201) and the 17503z/Architecture Principles of Operation (SA22-7832). 17504 17505 Each instruction has two major parts, the instruction mnemonic and 17506the instruction operands. The instruction format varies. 17507 17508* Menu: 17509 17510* s390 Register:: Register Naming 17511* s390 Mnemonics:: Instruction Mnemonics 17512* s390 Operands:: Instruction Operands 17513* s390 Formats:: Instruction Formats 17514* s390 Aliases:: Instruction Aliases 17515* s390 Operand Modifier:: Instruction Operand Modifier 17516* s390 Instruction Marker:: Instruction Marker 17517* s390 Literal Pool Entries:: Literal Pool Entries 17518 17519 17520File: as.info, Node: s390 Register, Next: s390 Mnemonics, Up: s390 Syntax 17521 175229.38.3.1 Register naming 17523........................ 17524 17525The `as' recognizes a number of predefined symbols for the various 17526processor registers. A register specification in one of the instruction 17527formats is an unsigned integer between 0 and 15. The specific 17528instruction and the position of the register in the instruction format 17529denotes the type of the register. The register symbols are prefixed with 17530`%': 17531 17532 %rN the 16 general purpose registers, 0 <= N <= 15 17533 %fN the 16 floating point registers, 0 <= N <= 15 17534 %aN the 16 access registers, 0 <= N <= 15 17535 %cN the 16 control registers, 0 <= N <= 15 17536 %lit an alias for the general purpose register %r13 17537 %sp an alias for the general purpose register %r15 17538 17539 17540File: as.info, Node: s390 Mnemonics, Next: s390 Operands, Prev: s390 Register, Up: s390 Syntax 17541 175429.38.3.2 Instruction Mnemonics 17543.............................. 17544 17545All instructions documented in the Principles of Operation are supported 17546with the mnemonic and order of operands as described. The instruction 17547mnemonic identifies the instruction format (*Note s390 Formats::) and 17548the specific operation code for the instruction. For example, the `lr' 17549mnemonic denotes the instruction format `RR' with the operation code 17550`0x18'. 17551 17552 The definition of the various mnemonics follows a scheme, where the 17553first character usually hint at the type of the instruction: 17554 17555 a add instruction, for example `al' for add logical 32-bit 17556 b branch instruction, for example `bc' for branch on condition 17557 c compare or convert instruction, for example `cr' for compare 17558 register 32-bit 17559 d divide instruction, for example `dlr' devide logical register 17560 64-bit to 32-bit 17561 i insert instruction, for example `ic' insert character 17562 l load instruction, for example `ltr' load and test register 17563 mv move instruction, for example `mvc' move character 17564 m multiply instruction, for example `mh' multiply halfword 17565 n and instruction, for example `ni' and immediate 17566 o or instruction, for example `oc' or character 17567 sla, sll shift left single instruction 17568 sra, srl shift right single instruction 17569 st store instruction, for example `stm' store multiple 17570 s subtract instruction, for example `slr' subtract 17571 logical 32-bit 17572 t test or translate instruction, of example `tm' test under mask 17573 x exclusive or instruction, for example `xc' exclusive or 17574 character 17575 17576 Certain characters at the end of the mnemonic may describe a property 17577of the instruction: 17578 17579 c the instruction uses a 8-bit character operand 17580 f the instruction extends a 32-bit operand to 64 bit 17581 g the operands are treated as 64-bit values 17582 h the operand uses a 16-bit halfword operand 17583 i the instruction uses an immediate operand 17584 l the instruction uses unsigned, logical operands 17585 m the instruction uses a mask or operates on multiple values 17586 r if r is the last character, the instruction operates on registers 17587 y the instruction uses 20-bit displacements 17588 17589 There are many exceptions to the scheme outlined in the above lists, 17590in particular for the priviledged instructions. For non-priviledged 17591instruction it works quite well, for example the instruction `clgfr' c: 17592compare instruction, l: unsigned operands, g: 64-bit operands, f: 32- 17593to 64-bit extension, r: register operands. The instruction compares an 1759464-bit value in a register with the zero extended 32-bit value from a 17595second register. For a complete list of all mnemonics see appendix B 17596in the Principles of Operation. 17597 17598 17599File: as.info, Node: s390 Operands, Next: s390 Formats, Prev: s390 Mnemonics, Up: s390 Syntax 17600 176019.38.3.3 Instruction Operands 17602............................. 17603 17604Instruction operands can be grouped into three classes, operands located 17605in registers, immediate operands, and operands in storage. 17606 17607 A register operand can be located in general, floating-point, access, 17608or control register. The register is identified by a four-bit field. 17609The field containing the register operand is called the R field. 17610 17611 Immediate operands are contained within the instruction and can have 176128, 16 or 32 bits. The field containing the immediate operand is called 17613the I field. Dependent on the instruction the I field is either signed 17614or unsigned. 17615 17616 A storage operand consists of an address and a length. The address 17617of a storage operands can be specified in any of these ways: 17618 17619 * The content of a single general R 17620 17621 * The sum of the content of a general register called the base 17622 register B plus the content of a displacement field D 17623 17624 * The sum of the contents of two general registers called the index 17625 register X and the base register B plus the content of a 17626 displacement field 17627 17628 * The sum of the current instruction address and a 32-bit signed 17629 immediate field multiplied by two. 17630 17631 The length of a storage operand can be: 17632 17633 * Implied by the instruction 17634 17635 * Specified by a bitmask 17636 17637 * Specified by a four-bit or eight-bit length field L 17638 17639 * Specified by the content of a general register 17640 17641 The notation for storage operand addresses formed from multiple 17642fields is as follows: 17643 17644`Dn(Bn)' 17645 the address for operand number n is formed from the content of 17646 general register Bn called the base register and the displacement 17647 field Dn. 17648 17649`Dn(Xn,Bn)' 17650 the address for operand number n is formed from the content of 17651 general register Xn called the index register, general register Bn 17652 called the base register and the displacement field Dn. 17653 17654`Dn(Ln,Bn)' 17655 the address for operand number n is formed from the content of 17656 general regiser Bn called the base register and the displacement 17657 field Dn. The length of the operand n is specified by the field 17658 Ln. 17659 17660 The base registers Bn and the index registers Xn of a storage 17661operand can be skipped. If Bn and Xn are skipped, a zero will be stored 17662to the operand field. The notation changes as follows: 17663 17664 full notation short notation 17665 ------------------------------------------ 17666 Dn(0,Bn) Dn(Bn) 17667 Dn(0,0) Dn 17668 Dn(0) Dn 17669 Dn(Ln,0) Dn(Ln) 17670 17671 17672File: as.info, Node: s390 Formats, Next: s390 Aliases, Prev: s390 Operands, Up: s390 Syntax 17673 176749.38.3.4 Instruction Formats 17675............................ 17676 17677The Principles of Operation manuals lists 26 instruction formats where 17678some of the formats have multiple variants. For the `.insn' pseudo 17679directive the assembler recognizes some of the formats. Typically, the 17680most general variant of the instruction format is used by the `.insn' 17681directive. 17682 17683 The following table lists the abbreviations used in the table of 17684instruction formats: 17685 17686 OpCode / OpCd Part of the op code. 17687 Bx Base register number for operand x. 17688 Dx Displacement for operand x. 17689 DLx Displacement lower 12 bits for operand x. 17690 DHx Displacement higher 8-bits for operand x. 17691 Rx Register number for operand x. 17692 Xx Index register number for operand x. 17693 Ix Signed immediate for operand x. 17694 Ux Unsigned immediate for operand x. 17695 17696 An instruction is two, four, or six bytes in length and must be 17697aligned on a 2 byte boundary. The first two bits of the instruction 17698specify the length of the instruction, 00 indicates a two byte 17699instruction, 01 and 10 indicates a four byte instruction, and 11 17700indicates a six byte instruction. 17701 17702 The following table lists the s390 instruction formats that are 17703available with the `.insn' pseudo directive: 17704 17705`E format' 17706 17707 +-------------+ 17708 | OpCode | 17709 +-------------+ 17710 0 15 17711 17712`RI format: <insn> R1,I2' 17713 17714 +--------+----+----+------------------+ 17715 | OpCode | R1 |OpCd| I2 | 17716 +--------+----+----+------------------+ 17717 0 8 12 16 31 17718 17719`RIE format: <insn> R1,R3,I2' 17720 17721 +--------+----+----+------------------+--------+--------+ 17722 | OpCode | R1 | R3 | I2 |////////| OpCode | 17723 +--------+----+----+------------------+--------+--------+ 17724 0 8 12 16 32 40 47 17725 17726`RIL format: <insn> R1,I2' 17727 17728 +--------+----+----+------------------------------------+ 17729 | OpCode | R1 |OpCd| I2 | 17730 +--------+----+----+------------------------------------+ 17731 0 8 12 16 47 17732 17733`RILU format: <insn> R1,U2' 17734 17735 +--------+----+----+------------------------------------+ 17736 | OpCode | R1 |OpCd| U2 | 17737 +--------+----+----+------------------------------------+ 17738 0 8 12 16 47 17739 17740`RIS format: <insn> R1,I2,M3,D4(B4)' 17741 17742 +--------+----+----+----+-------------+--------+--------+ 17743 | OpCode | R1 | M3 | B4 | D4 | I2 | Opcode | 17744 +--------+----+----+----+-------------+--------+--------+ 17745 0 8 12 16 20 32 36 47 17746 17747`RR format: <insn> R1,R2' 17748 17749 +--------+----+----+ 17750 | OpCode | R1 | R2 | 17751 +--------+----+----+ 17752 0 8 12 15 17753 17754`RRE format: <insn> R1,R2' 17755 17756 +------------------+--------+----+----+ 17757 | OpCode |////////| R1 | R2 | 17758 +------------------+--------+----+----+ 17759 0 16 24 28 31 17760 17761`RRF format: <insn> R1,R2,R3,M4' 17762 17763 +------------------+----+----+----+----+ 17764 | OpCode | R3 | M4 | R1 | R2 | 17765 +------------------+----+----+----+----+ 17766 0 16 20 24 28 31 17767 17768`RRS format: <insn> R1,R2,M3,D4(B4)' 17769 17770 +--------+----+----+----+-------------+----+----+--------+ 17771 | OpCode | R1 | R3 | B4 | D4 | M3 |////| OpCode | 17772 +--------+----+----+----+-------------+----+----+--------+ 17773 0 8 12 16 20 32 36 40 47 17774 17775`RS format: <insn> R1,R3,D2(B2)' 17776 17777 +--------+----+----+----+-------------+ 17778 | OpCode | R1 | R3 | B2 | D2 | 17779 +--------+----+----+----+-------------+ 17780 0 8 12 16 20 31 17781 17782`RSE format: <insn> R1,R3,D2(B2)' 17783 17784 +--------+----+----+----+-------------+--------+--------+ 17785 | OpCode | R1 | R3 | B2 | D2 |////////| OpCode | 17786 +--------+----+----+----+-------------+--------+--------+ 17787 0 8 12 16 20 32 40 47 17788 17789`RSI format: <insn> R1,R3,I2' 17790 17791 +--------+----+----+------------------------------------+ 17792 | OpCode | R1 | R3 | I2 | 17793 +--------+----+----+------------------------------------+ 17794 0 8 12 16 47 17795 17796`RSY format: <insn> R1,R3,D2(B2)' 17797 17798 +--------+----+----+----+-------------+--------+--------+ 17799 | OpCode | R1 | R3 | B2 | DL2 | DH2 | OpCode | 17800 +--------+----+----+----+-------------+--------+--------+ 17801 0 8 12 16 20 32 40 47 17802 17803`RX format: <insn> R1,D2(X2,B2)' 17804 17805 +--------+----+----+----+-------------+ 17806 | OpCode | R1 | X2 | B2 | D2 | 17807 +--------+----+----+----+-------------+ 17808 0 8 12 16 20 31 17809 17810`RXE format: <insn> R1,D2(X2,B2)' 17811 17812 +--------+----+----+----+-------------+--------+--------+ 17813 | OpCode | R1 | X2 | B2 | D2 |////////| OpCode | 17814 +--------+----+----+----+-------------+--------+--------+ 17815 0 8 12 16 20 32 40 47 17816 17817`RXF format: <insn> R1,R3,D2(X2,B2)' 17818 17819 +--------+----+----+----+-------------+----+---+--------+ 17820 | OpCode | R3 | X2 | B2 | D2 | R1 |///| OpCode | 17821 +--------+----+----+----+-------------+----+---+--------+ 17822 0 8 12 16 20 32 36 40 47 17823 17824`RXY format: <insn> R1,D2(X2,B2)' 17825 17826 +--------+----+----+----+-------------+--------+--------+ 17827 | OpCode | R1 | X2 | B2 | DL2 | DH2 | OpCode | 17828 +--------+----+----+----+-------------+--------+--------+ 17829 0 8 12 16 20 32 36 40 47 17830 17831`S format: <insn> D2(B2)' 17832 17833 +------------------+----+-------------+ 17834 | OpCode | B2 | D2 | 17835 +------------------+----+-------------+ 17836 0 16 20 31 17837 17838`SI format: <insn> D1(B1),I2' 17839 17840 +--------+---------+----+-------------+ 17841 | OpCode | I2 | B1 | D1 | 17842 +--------+---------+----+-------------+ 17843 0 8 16 20 31 17844 17845`SIY format: <insn> D1(B1),U2' 17846 17847 +--------+---------+----+-------------+--------+--------+ 17848 | OpCode | I2 | B1 | DL1 | DH1 | OpCode | 17849 +--------+---------+----+-------------+--------+--------+ 17850 0 8 16 20 32 36 40 47 17851 17852`SIL format: <insn> D1(B1),I2' 17853 17854 +------------------+----+-------------+-----------------+ 17855 | OpCode | B1 | D1 | I2 | 17856 +------------------+----+-------------+-----------------+ 17857 0 16 20 32 47 17858 17859`SS format: <insn> D1(R1,B1),D2(B3),R3' 17860 17861 +--------+----+----+----+-------------+----+------------+ 17862 | OpCode | R1 | R3 | B1 | D1 | B2 | D2 | 17863 +--------+----+----+----+-------------+----+------------+ 17864 0 8 12 16 20 32 36 47 17865 17866`SSE format: <insn> D1(B1),D2(B2)' 17867 17868 +------------------+----+-------------+----+------------+ 17869 | OpCode | B1 | D1 | B2 | D2 | 17870 +------------------+----+-------------+----+------------+ 17871 0 8 12 16 20 32 36 47 17872 17873`SSF format: <insn> D1(B1),D2(B2),R3' 17874 17875 +--------+----+----+----+-------------+----+------------+ 17876 | OpCode | R3 |OpCd| B1 | D1 | B2 | D2 | 17877 +--------+----+----+----+-------------+----+------------+ 17878 0 8 12 16 20 32 36 47 17879 17880 17881 For the complete list of all instruction format variants see the 17882Principles of Operation manuals. 17883 17884 17885File: as.info, Node: s390 Aliases, Next: s390 Operand Modifier, Prev: s390 Formats, Up: s390 Syntax 17886 178879.38.3.5 Instruction Aliases 17888............................ 17889 17890A specific bit pattern can have multiple mnemonics, for example the bit 17891pattern `0xa7000000' has the mnemonics `tmh' and `tmlh'. In addition, 17892there are a number of mnemonics recognized by `as' that are not present 17893in the Principles of Operation. These are the short forms of the 17894branch instructions, where the condition code mask operand is encoded 17895in the mnemonic. This is relevant for the branch instructions, the 17896compare and branch instructions, and the compare and trap instructions. 17897 17898 For the branch instructions there are 20 condition code strings that 17899can be used as part of the mnemonic in place of a mask operand in the 17900instruction format: 17901 17902 instruction short form 17903 ------------------------------------------ 17904 bcr M1,R2 b<m>r R2 17905 bc M1,D2(X2,B2) b<m> D2(X2,B2) 17906 brc M1,I2 j<m> I2 17907 brcl M1,I2 jg<m> I2 17908 17909 In the mnemonic for a branch instruction the condition code string 17910<m> can be any of the following: 17911 17912 o jump on overflow / if ones 17913 h jump on A high 17914 p jump on plus 17915 nle jump on not low or equal 17916 l jump on A low 17917 m jump on minus 17918 nhe jump on not high or equal 17919 lh jump on low or high 17920 ne jump on A not equal B 17921 nz jump on not zero / if not zeros 17922 e jump on A equal B 17923 z jump on zero / if zeroes 17924 nlh jump on not low or high 17925 he jump on high or equal 17926 nl jump on A not low 17927 nm jump on not minus / if not mixed 17928 le jump on low or equal 17929 nh jump on A not high 17930 np jump on not plus 17931 no jump on not overflow / if not ones 17932 17933 For the compare and branch, and compare and trap instructions there 17934are 12 condition code strings that can be used as part of the mnemonic 17935in place of a mask operand in the instruction format: 17936 17937 instruction short form 17938 -------------------------------------------------------- 17939 crb R1,R2,M3,D4(B4) crb<m> R1,R2,D4(B4) 17940 cgrb R1,R2,M3,D4(B4) cgrb<m> R1,R2,D4(B4) 17941 crj R1,R2,M3,I4 crj<m> R1,R2,I4 17942 cgrj R1,R2,M3,I4 cgrj<m> R1,R2,I4 17943 cib R1,I2,M3,D4(B4) cib<m> R1,I2,D4(B4) 17944 cgib R1,I2,M3,D4(B4) cgib<m> R1,I2,D4(B4) 17945 cij R1,I2,M3,I4 cij<m> R1,I2,I4 17946 cgij R1,I2,M3,I4 cgij<m> R1,I2,I4 17947 crt R1,R2,M3 crt<m> R1,R2 17948 cgrt R1,R2,M3 cgrt<m> R1,R2 17949 cit R1,I2,M3 cit<m> R1,I2 17950 cgit R1,I2,M3 cgit<m> R1,I2 17951 clrb R1,R2,M3,D4(B4) clrb<m> R1,R2,D4(B4) 17952 clgrb R1,R2,M3,D4(B4) clgrb<m> R1,R2,D4(B4) 17953 clrj R1,R2,M3,I4 clrj<m> R1,R2,I4 17954 clgrj R1,R2,M3,I4 clgrj<m> R1,R2,I4 17955 clib R1,I2,M3,D4(B4) clib<m> R1,I2,D4(B4) 17956 clgib R1,I2,M3,D4(B4) clgib<m> R1,I2,D4(B4) 17957 clij R1,I2,M3,I4 clij<m> R1,I2,I4 17958 clgij R1,I2,M3,I4 clgij<m> R1,I2,I4 17959 clrt R1,R2,M3 clrt<m> R1,R2 17960 clgrt R1,R2,M3 clgrt<m> R1,R2 17961 clfit R1,I2,M3 clfit<m> R1,I2 17962 clgit R1,I2,M3 clgit<m> R1,I2 17963 17964 In the mnemonic for a compare and branch and compare and trap 17965instruction the condition code string <m> can be any of the following: 17966 17967 h jump on A high 17968 nle jump on not low or equal 17969 l jump on A low 17970 nhe jump on not high or equal 17971 ne jump on A not equal B 17972 lh jump on low or high 17973 e jump on A equal B 17974 nlh jump on not low or high 17975 nl jump on A not low 17976 he jump on high or equal 17977 nh jump on A not high 17978 le jump on low or equal 17979 17980 17981File: as.info, Node: s390 Operand Modifier, Next: s390 Instruction Marker, Prev: s390 Aliases, Up: s390 Syntax 17982 179839.38.3.6 Instruction Operand Modifier 17984..................................... 17985 17986If a symbol modifier is attached to a symbol in an expression for an 17987instruction operand field, the symbol term is replaced with a reference 17988to an object in the global offset table (GOT) or the procedure linkage 17989table (PLT). The following expressions are allowed: `symbol@modifier + 17990constant', `symbol@modifier + label + constant', and `symbol@modifier - 17991label + constant'. The term `symbol' is the symbol that will be 17992entered into the GOT or PLT, `label' is a local label, and `constant' 17993is an arbitrary expression that the assembler can evaluate to a 17994constant value. 17995 17996 The term `(symbol + constant1)@modifier +/- label + constant2' is 17997also accepted but a warning message is printed and the term is 17998converted to `symbol@modifier +/- label + constant1 + constant2'. 17999 18000`@got' 18001`@got12' 18002 The @got modifier can be used for displacement fields, 16-bit 18003 immediate fields and 32-bit pc-relative immediate fields. The 18004 @got12 modifier is synonym to @got. The symbol is added to the 18005 GOT. For displacement fields and 16-bit immediate fields the 18006 symbol term is replaced with the offset from the start of the GOT 18007 to the GOT slot for the symbol. For a 32-bit pc-relative field 18008 the pc-relative offset to the GOT slot from the current 18009 instruction address is used. 18010 18011`@gotent' 18012 The @gotent modifier can be used for 32-bit pc-relative immediate 18013 fields. The symbol is added to the GOT and the symbol term is 18014 replaced with the pc-relative offset from the current instruction 18015 to the GOT slot for the symbol. 18016 18017`@gotoff' 18018 The @gotoff modifier can be used for 16-bit immediate fields. The 18019 symbol term is replaced with the offset from the start of the GOT 18020 to the address of the symbol. 18021 18022`@gotplt' 18023 The @gotplt modifier can be used for displacement fields, 16-bit 18024 immediate fields, and 32-bit pc-relative immediate fields. A 18025 procedure linkage table entry is generated for the symbol and a 18026 jump slot for the symbol is added to the GOT. For displacement 18027 fields and 16-bit immediate fields the symbol term is replaced 18028 with the offset from the start of the GOT to the jump slot for the 18029 symbol. For a 32-bit pc-relative field the pc-relative offset to 18030 the jump slot from the current instruction address is used. 18031 18032`@plt' 18033 The @plt modifier can be used for 16-bit and 32-bit pc-relative 18034 immediate fields. A procedure linkage table entry is generated for 18035 the symbol. The symbol term is replaced with the relative offset 18036 from the current instruction to the PLT entry for the symbol. 18037 18038`@pltoff' 18039 The @pltoff modifier can be used for 16-bit immediate fields. The 18040 symbol term is replaced with the offset from the start of the PLT 18041 to the address of the symbol. 18042 18043`@gotntpoff' 18044 The @gotntpoff modifier can be used for displacement fields. The 18045 symbol is added to the static TLS block and the negated offset to 18046 the symbol in the static TLS block is added to the GOT. The symbol 18047 term is replaced with the offset to the GOT slot from the start of 18048 the GOT. 18049 18050`@indntpoff' 18051 The @indntpoff modifier can be used for 32-bit pc-relative 18052 immediate fields. The symbol is added to the static TLS block and 18053 the negated offset to the symbol in the static TLS block is added 18054 to the GOT. The symbol term is replaced with the pc-relative 18055 offset to the GOT slot from the current instruction address. 18056 18057 For more information about the thread local storage modifiers 18058`gotntpoff' and `indntpoff' see the ELF extension documentation `ELF 18059Handling For Thread-Local Storage'. 18060 18061 18062File: as.info, Node: s390 Instruction Marker, Next: s390 Literal Pool Entries, Prev: s390 Operand Modifier, Up: s390 Syntax 18063 180649.38.3.7 Instruction Marker 18065........................... 18066 18067The thread local storage instruction markers are used by the linker to 18068perform code optimization. 18069 18070`:tls_load' 18071 The :tls_load marker is used to flag the load instruction in the 18072 initial exec TLS model that retrieves the offset from the thread 18073 pointer to a thread local storage variable from the GOT. 18074 18075`:tls_gdcall' 18076 The :tls_gdcall marker is used to flag the branch-and-save 18077 instruction to the __tls_get_offset function in the global dynamic 18078 TLS model. 18079 18080`:tls_ldcall' 18081 The :tls_ldcall marker is used to flag the branch-and-save 18082 instruction to the __tls_get_offset function in the local dynamic 18083 TLS model. 18084 18085 For more information about the thread local storage instruction 18086marker and the linker optimizations see the ELF extension documentation 18087`ELF Handling For Thread-Local Storage'. 18088 18089 18090File: as.info, Node: s390 Literal Pool Entries, Prev: s390 Instruction Marker, Up: s390 Syntax 18091 180929.38.3.8 Literal Pool Entries 18093............................. 18094 18095A literal pool is a collection of values. To access the values a pointer 18096to the literal pool is loaded to a register, the literal pool register. 18097Usually, register %r13 is used as the literal pool register (*Note s390 18098Register::). Literal pool entries are created by adding the suffix 18099:lit1, :lit2, :lit4, or :lit8 to the end of an expression for an 18100instruction operand. The expression is added to the literal pool and the 18101operand is replaced with the offset to the literal in the literal pool. 18102 18103`:lit1' 18104 The literal pool entry is created as an 8-bit value. An operand 18105 modifier must not be used for the original expression. 18106 18107`:lit2' 18108 The literal pool entry is created as a 16 bit value. The operand 18109 modifier @got may be used in the original expression. The term 18110 `x@got:lit2' will put the got offset for the global symbol x to 18111 the literal pool as 16 bit value. 18112 18113`:lit4' 18114 The literal pool entry is created as a 32-bit value. The operand 18115 modifier @got and @plt may be used in the original expression. The 18116 term `x@got:lit4' will put the got offset for the global symbol x 18117 to the literal pool as a 32-bit value. The term `x@plt:lit4' will 18118 put the plt offset for the global symbol x to the literal pool as 18119 a 32-bit value. 18120 18121`:lit8' 18122 The literal pool entry is created as a 64-bit value. The operand 18123 modifier @got and @plt may be used in the original expression. The 18124 term `x@got:lit8' will put the got offset for the global symbol x 18125 to the literal pool as a 64-bit value. The term `x@plt:lit8' will 18126 put the plt offset for the global symbol x to the literal pool as 18127 a 64-bit value. 18128 18129 The assembler directive `.ltorg' is used to emit all literal pool 18130entries to the current position. 18131 18132 18133File: as.info, Node: s390 Directives, Next: s390 Floating Point, Prev: s390 Syntax, Up: S/390-Dependent 18134 181359.38.4 Assembler Directives 18136--------------------------- 18137 18138`as' for s390 supports all of the standard ELF assembler directives as 18139outlined in the main part of this document. Some directives have been 18140extended and there are some additional directives, which are only 18141available for the s390 `as'. 18142 18143`.insn' 18144 This directive permits the numeric representation of an 18145 instructions and makes the assembler insert the operands according 18146 to one of the instructions formats for `.insn' (*Note s390 18147 Formats::). For example, the instruction `l %r1,24(%r15)' could 18148 be written as `.insn rx,0x58000000,%r1,24(%r15)'. 18149 18150`.short' 18151`.long' 18152`.quad' 18153 This directive places one or more 16-bit (.short), 32-bit (.long), 18154 or 64-bit (.quad) values into the current section. If an ELF or 18155 TLS modifier is used only the following expressions are allowed: 18156 `symbol@modifier + constant', `symbol@modifier + label + 18157 constant', and `symbol@modifier - label + constant'. The 18158 following modifiers are available: 18159 `@got' 18160 `@got12' 18161 The @got modifier can be used for .short, .long and .quad. 18162 The @got12 modifier is synonym to @got. The symbol is added 18163 to the GOT. The symbol term is replaced with offset from the 18164 start of the GOT to the GOT slot for the symbol. 18165 18166 `@gotoff' 18167 The @gotoff modifier can be used for .short, .long and .quad. 18168 The symbol term is replaced with the offset from the start of 18169 the GOT to the address of the symbol. 18170 18171 `@gotplt' 18172 The @gotplt modifier can be used for .long and .quad. A 18173 procedure linkage table entry is generated for the symbol and 18174 a jump slot for the symbol is added to the GOT. The symbol 18175 term is replaced with the offset from the start of the GOT to 18176 the jump slot for the symbol. 18177 18178 `@plt' 18179 The @plt modifier can be used for .long and .quad. A 18180 procedure linkage table entry us generated for the symbol. 18181 The symbol term is replaced with the address of the PLT entry 18182 for the symbol. 18183 18184 `@pltoff' 18185 The @pltoff modifier can be used for .short, .long and .quad. 18186 The symbol term is replaced with the offset from the start of 18187 the PLT to the address of the symbol. 18188 18189 `@tlsgd' 18190 `@tlsldm' 18191 The @tlsgd and @tlsldm modifier can be used for .long and 18192 .quad. A tls_index structure for the symbol is added to the 18193 GOT. The symbol term is replaced with the offset from the 18194 start of the GOT to the tls_index structure. 18195 18196 `@gotntpoff' 18197 `@indntpoff' 18198 The @gotntpoff and @indntpoff modifier can be used for .long 18199 and .quad. The symbol is added to the static TLS block and 18200 the negated offset to the symbol in the static TLS block is 18201 added to the GOT. For @gotntpoff the symbol term is replaced 18202 with the offset from the start of the GOT to the GOT slot, 18203 for @indntpoff the symbol term is replaced with the address 18204 of the GOT slot. 18205 18206 `@dtpoff' 18207 The @dtpoff modifier can be used for .long and .quad. The 18208 symbol term is replaced with the offset of the symbol 18209 relative to the start of the TLS block it is contained in. 18210 18211 `@ntpoff' 18212 The @ntpoff modifier can be used for .long and .quad. The 18213 symbol term is replaced with the offset of the symbol 18214 relative to the TCB pointer. 18215 18216 For more information about the thread local storage modifiers see 18217 the ELF extension documentation `ELF Handling For Thread-Local 18218 Storage'. 18219 18220`.ltorg' 18221 This directive causes the current contents of the literal pool to 18222 be dumped to the current location (*Note s390 Literal Pool 18223 Entries::). 18224 18225`.machine STRING[+EXTENSION]...' 18226 This directive allows changing the machine for which code is 18227 generated. `string' may be any of the `-march=' selection 18228 options, or `push', or `pop'. `.machine push' saves the currently 18229 selected cpu, which may be restored with `.machine pop'. Be aware 18230 that the cpu string has to be put into double quotes in case it 18231 contains characters not appropriate for identifiers. So you have 18232 to write `"z9-109"' instead of just `z9-109'. Extensions can be 18233 specified after the cpu name, separated by plus charaters. Valid 18234 extensions are: `htm', `nohtm', `vx', `novx'. They extend the 18235 basic instruction set with features from a higher cpu level, or 18236 remove support for a feature from the given cpu level. 18237 18238 Example: `z13+nohtm' allows all instructions of the z13 cpu except 18239 instructions from the HTM facility. 18240 18241`.machinemode string' 18242 This directive allows to change the architecture mode for which 18243 code is being generated. `string' may be `esa', `zarch', 18244 `zarch_nohighgprs', `push', or `pop'. `.machinemode 18245 zarch_nohighgprs' can be used to prevent the `highgprs' flag from 18246 being set in the ELF header of the output file. This is useful in 18247 situations where the code is gated with a runtime check which 18248 makes sure that the code is only executed on kernels providing the 18249 `highgprs' feature. `.machinemode push' saves the currently 18250 selected mode, which may be restored with `.machinemode pop'. 18251 18252 18253File: as.info, Node: s390 Floating Point, Prev: s390 Directives, Up: S/390-Dependent 18254 182559.38.5 Floating Point 18256--------------------- 18257 18258The assembler recognizes both the IEEE floating-point instruction and 18259the hexadecimal floating-point instructions. The floating-point 18260constructors `.float', `.single', and `.double' always emit the IEEE 18261format. To assemble hexadecimal floating-point constants the `.long' 18262and `.quad' directives must be used. 18263 18264 18265File: as.info, Node: SCORE-Dependent, Next: SH-Dependent, Prev: S/390-Dependent, Up: Machine Dependencies 18266 182679.39 SCORE Dependent Features 18268============================= 18269 18270* Menu: 18271 18272* SCORE-Opts:: Assembler options 18273* SCORE-Pseudo:: SCORE Assembler Directives 18274* SCORE-Syntax:: Syntax 18275 18276 18277File: as.info, Node: SCORE-Opts, Next: SCORE-Pseudo, Up: SCORE-Dependent 18278 182799.39.1 Options 18280-------------- 18281 18282The following table lists all available SCORE options. 18283 18284`-G NUM' 18285 This option sets the largest size of an object that can be 18286 referenced implicitly with the `gp' register. The default value is 18287 8. 18288 18289`-EB' 18290 Assemble code for a big-endian cpu 18291 18292`-EL' 18293 Assemble code for a little-endian cpu 18294 18295`-FIXDD' 18296 Assemble code for fix data dependency 18297 18298`-NWARN' 18299 Assemble code for no warning message for fix data dependency 18300 18301`-SCORE5' 18302 Assemble code for target is SCORE5 18303 18304`-SCORE5U' 18305 Assemble code for target is SCORE5U 18306 18307`-SCORE7' 18308 Assemble code for target is SCORE7, this is default setting 18309 18310`-SCORE3' 18311 Assemble code for target is SCORE3 18312 18313`-march=score7' 18314 Assemble code for target is SCORE7, this is default setting 18315 18316`-march=score3' 18317 Assemble code for target is SCORE3 18318 18319`-USE_R1' 18320 Assemble code for no warning message when using temp register r1 18321 18322`-KPIC' 18323 Generate code for PIC. This option tells the assembler to generate 18324 score position-independent macro expansions. It also tells the 18325 assembler to mark the output file as PIC. 18326 18327`-O0' 18328 Assembler will not perform any optimizations 18329 18330`-V' 18331 Sunplus release version 18332 18333 18334 18335File: as.info, Node: SCORE-Pseudo, Next: SCORE-Syntax, Prev: SCORE-Opts, Up: SCORE-Dependent 18336 183379.39.2 SCORE Assembler Directives 18338--------------------------------- 18339 18340A number of assembler directives are available for SCORE. The 18341following table is far from complete. 18342 18343`.set nwarn' 18344 Let the assembler not to generate warnings if the source machine 18345 language instructions happen data dependency. 18346 18347`.set fixdd' 18348 Let the assembler to insert bubbles (32 bit nop instruction / 16 18349 bit nop! Instruction) if the source machine language instructions 18350 happen data dependency. 18351 18352`.set nofixdd' 18353 Let the assembler to generate warnings if the source machine 18354 language instructions happen data dependency. (Default) 18355 18356`.set r1' 18357 Let the assembler not to generate warnings if the source program 18358 uses r1. allow user to use r1 18359 18360`set nor1' 18361 Let the assembler to generate warnings if the source program uses 18362 r1. (Default) 18363 18364`.sdata' 18365 Tell the assembler to add subsequent data into the sdata section 18366 18367`.rdata' 18368 Tell the assembler to add subsequent data into the rdata section 18369 18370`.frame "frame-register", "offset", "return-pc-register"' 18371 Describe a stack frame. "frame-register" is the frame register, 18372 "offset" is the distance from the frame register to the virtual 18373 frame pointer, "return-pc-register" is the return program register. 18374 You must use ".ent" before ".frame" and only one ".frame" can be 18375 used per ".ent". 18376 18377`.mask "bitmask", "frameoffset"' 18378 Indicate which of the integer registers are saved in the current 18379 function's stack frame, this is for the debugger to explain the 18380 frame chain. 18381 18382`.ent "proc-name"' 18383 Set the beginning of the procedure "proc_name". Use this directive 18384 when you want to generate information for the debugger. 18385 18386`.end proc-name' 18387 Set the end of a procedure. Use this directive to generate 18388 information for the debugger. 18389 18390`.bss' 18391 Switch the destination of following statements into the bss 18392 section, which is used for data that is uninitialized anywhere. 18393 18394 18395 18396File: as.info, Node: SCORE-Syntax, Prev: SCORE-Pseudo, Up: SCORE-Dependent 18397 183989.39.3 SCORE Syntax 18399------------------- 18400 18401* Menu: 18402 18403* SCORE-Chars:: Special Characters 18404 18405 18406File: as.info, Node: SCORE-Chars, Up: SCORE-Syntax 18407 184089.39.3.1 Special Characters 18409........................... 18410 18411The presence of a `#' appearing anywhere on a line indicates the start 18412of a comment that extends to the end of that line. 18413 18414 If a `#' appears as the first character of a line then the whole 18415line is treated as a comment, but in this case the line can also be a 18416logical line number directive (*note Comments::) or a preprocessor 18417control command (*note Preprocessing::). 18418 18419 The `;' character can be used to separate statements on the same 18420line. 18421 18422 18423File: as.info, Node: SH-Dependent, Next: SH64-Dependent, Prev: SCORE-Dependent, Up: Machine Dependencies 18424 184259.40 Renesas / SuperH SH Dependent Features 18426=========================================== 18427 18428* Menu: 18429 18430* SH Options:: Options 18431* SH Syntax:: Syntax 18432* SH Floating Point:: Floating Point 18433* SH Directives:: SH Machine Directives 18434* SH Opcodes:: Opcodes 18435 18436 18437File: as.info, Node: SH Options, Next: SH Syntax, Up: SH-Dependent 18438 184399.40.1 Options 18440-------------- 18441 18442`as' has following command-line options for the Renesas (formerly 18443Hitachi) / SuperH SH family. 18444 18445`--little' 18446 Generate little endian code. 18447 18448`--big' 18449 Generate big endian code. 18450 18451`--relax' 18452 Alter jump instructions for long displacements. 18453 18454`--small' 18455 Align sections to 4 byte boundaries, not 16. 18456 18457`--dsp' 18458 Enable sh-dsp insns, and disable sh3e / sh4 insns. 18459 18460`--renesas' 18461 Disable optimization with section symbol for compatibility with 18462 Renesas assembler. 18463 18464`--allow-reg-prefix' 18465 Allow '$' as a register name prefix. 18466 18467`--fdpic' 18468 Generate an FDPIC object file. 18469 18470`--isa=sh4 | sh4a' 18471 Specify the sh4 or sh4a instruction set. 18472 18473`--isa=dsp' 18474 Enable sh-dsp insns, and disable sh3e / sh4 insns. 18475 18476`--isa=fp' 18477 Enable sh2e, sh3e, sh4, and sh4a insn sets. 18478 18479`--isa=all' 18480 Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets. 18481 18482`-h-tick-hex' 18483 Support H'00 style hex constants in addition to 0x00 style. 18484 18485 18486 18487File: as.info, Node: SH Syntax, Next: SH Floating Point, Prev: SH Options, Up: SH-Dependent 18488 184899.40.2 Syntax 18490------------- 18491 18492* Menu: 18493 18494* SH-Chars:: Special Characters 18495* SH-Regs:: Register Names 18496* SH-Addressing:: Addressing Modes 18497 18498 18499File: as.info, Node: SH-Chars, Next: SH-Regs, Up: SH Syntax 18500 185019.40.2.1 Special Characters 18502........................... 18503 18504`!' is the line comment character. 18505 18506 You can use `;' instead of a newline to separate statements. 18507 18508 If a `#' appears as the first character of a line then the whole 18509line is treated as a comment, but in this case the line could also be a 18510logical line number directive (*note Comments::) or a preprocessor 18511control command (*note Preprocessing::). 18512 18513 Since `$' has no special meaning, you may use it in symbol names. 18514 18515 18516File: as.info, Node: SH-Regs, Next: SH-Addressing, Prev: SH-Chars, Up: SH Syntax 18517 185189.40.2.2 Register Names 18519....................... 18520 18521You can use the predefined symbols `r0', `r1', `r2', `r3', `r4', `r5', 18522`r6', `r7', `r8', `r9', `r10', `r11', `r12', `r13', `r14', and `r15' to 18523refer to the SH registers. 18524 18525 The SH also has these control registers: 18526 18527`pr' 18528 procedure register (holds return address) 18529 18530`pc' 18531 program counter 18532 18533`mach' 18534`macl' 18535 high and low multiply accumulator registers 18536 18537`sr' 18538 status register 18539 18540`gbr' 18541 global base register 18542 18543`vbr' 18544 vector base register (for interrupt vectors) 18545 18546 18547File: as.info, Node: SH-Addressing, Prev: SH-Regs, Up: SH Syntax 18548 185499.40.2.3 Addressing Modes 18550......................... 18551 18552`as' understands the following addressing modes for the SH. `RN' in 18553the following refers to any of the numbered registers, but _not_ the 18554control registers. 18555 18556`RN' 18557 Register direct 18558 18559`@RN' 18560 Register indirect 18561 18562`@-RN' 18563 Register indirect with pre-decrement 18564 18565`@RN+' 18566 Register indirect with post-increment 18567 18568`@(DISP, RN)' 18569 Register indirect with displacement 18570 18571`@(R0, RN)' 18572 Register indexed 18573 18574`@(DISP, GBR)' 18575 `GBR' offset 18576 18577`@(R0, GBR)' 18578 GBR indexed 18579 18580`ADDR' 18581`@(DISP, PC)' 18582 PC relative address (for branch or for addressing memory). The 18583 `as' implementation allows you to use the simpler form ADDR 18584 anywhere a PC relative address is called for; the alternate form 18585 is supported for compatibility with other assemblers. 18586 18587`#IMM' 18588 Immediate data 18589 18590 18591File: as.info, Node: SH Floating Point, Next: SH Directives, Prev: SH Syntax, Up: SH-Dependent 18592 185939.40.3 Floating Point 18594--------------------- 18595 18596SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other 18597SH groups can use `.float' directive to generate IEEE floating-point 18598numbers. 18599 18600 SH2E and SH3E support single-precision floating point calculations as 18601well as entirely PCAPI compatible emulation of double-precision 18602floating point calculations. SH2E and SH3E instructions are a subset of 18603the floating point calculations conforming to the IEEE754 standard. 18604 18605 In addition to single-precision and double-precision floating-point 18606operation capability, the on-chip FPU of SH4 has a 128-bit graphic 18607engine that enables 32-bit floating-point data to be processed 128 bits 18608at a time. It also supports 4 * 4 array operations and inner product 18609operations. Also, a superscalar architecture is employed that enables 18610simultaneous execution of two instructions (including FPU 18611instructions), providing performance of up to twice that of 18612conventional architectures at the same frequency. 18613 18614 18615File: as.info, Node: SH Directives, Next: SH Opcodes, Prev: SH Floating Point, Up: SH-Dependent 18616 186179.40.4 SH Machine Directives 18618---------------------------- 18619 18620`uaword' 18621`ualong' 18622`uaquad' 18623 `as' will issue a warning when a misaligned `.word', `.long', or 18624 `.quad' directive is used. You may use `.uaword', `.ualong', or 18625 `.uaquad' to indicate that the value is intentionally misaligned. 18626 18627 18628File: as.info, Node: SH Opcodes, Prev: SH Directives, Up: SH-Dependent 18629 186309.40.5 Opcodes 18631-------------- 18632 18633For detailed information on the SH machine instruction set, see 18634`SH-Microcomputer User's Manual' (Renesas) or `SH-4 32-bit CPU Core 18635Architecture' (SuperH) and `SuperH (SH) 64-Bit RISC Series' (SuperH). 18636 18637 `as' implements all the standard SH opcodes. No additional 18638pseudo-instructions are needed on this family. Note, however, that 18639because `as' supports a simpler form of PC-relative addressing, you may 18640simply write (for example) 18641 18642 mov.l bar,r0 18643 18644where other assemblers might require an explicit displacement to `bar' 18645from the program counter: 18646 18647 mov.l @(DISP, PC) 18648 18649 Here is a summary of SH opcodes: 18650 18651 Legend: 18652 Rn a numbered register 18653 Rm another numbered register 18654 #imm immediate data 18655 disp displacement 18656 disp8 8-bit displacement 18657 disp12 12-bit displacement 18658 18659 add #imm,Rn lds.l @Rn+,PR 18660 add Rm,Rn mac.w @Rm+,@Rn+ 18661 addc Rm,Rn mov #imm,Rn 18662 addv Rm,Rn mov Rm,Rn 18663 and #imm,R0 mov.b Rm,@(R0,Rn) 18664 and Rm,Rn mov.b Rm,@-Rn 18665 and.b #imm,@(R0,GBR) mov.b Rm,@Rn 18666 bf disp8 mov.b @(disp,Rm),R0 18667 bra disp12 mov.b @(disp,GBR),R0 18668 bsr disp12 mov.b @(R0,Rm),Rn 18669 bt disp8 mov.b @Rm+,Rn 18670 clrmac mov.b @Rm,Rn 18671 clrt mov.b R0,@(disp,Rm) 18672 cmp/eq #imm,R0 mov.b R0,@(disp,GBR) 18673 cmp/eq Rm,Rn mov.l Rm,@(disp,Rn) 18674 cmp/ge Rm,Rn mov.l Rm,@(R0,Rn) 18675 cmp/gt Rm,Rn mov.l Rm,@-Rn 18676 cmp/hi Rm,Rn mov.l Rm,@Rn 18677 cmp/hs Rm,Rn mov.l @(disp,Rn),Rm 18678 cmp/pl Rn mov.l @(disp,GBR),R0 18679 cmp/pz Rn mov.l @(disp,PC),Rn 18680 cmp/str Rm,Rn mov.l @(R0,Rm),Rn 18681 div0s Rm,Rn mov.l @Rm+,Rn 18682 div0u mov.l @Rm,Rn 18683 div1 Rm,Rn mov.l R0,@(disp,GBR) 18684 exts.b Rm,Rn mov.w Rm,@(R0,Rn) 18685 exts.w Rm,Rn mov.w Rm,@-Rn 18686 extu.b Rm,Rn mov.w Rm,@Rn 18687 extu.w Rm,Rn mov.w @(disp,Rm),R0 18688 jmp @Rn mov.w @(disp,GBR),R0 18689 jsr @Rn mov.w @(disp,PC),Rn 18690 ldc Rn,GBR mov.w @(R0,Rm),Rn 18691 ldc Rn,SR mov.w @Rm+,Rn 18692 ldc Rn,VBR mov.w @Rm,Rn 18693 ldc.l @Rn+,GBR mov.w R0,@(disp,Rm) 18694 ldc.l @Rn+,SR mov.w R0,@(disp,GBR) 18695 ldc.l @Rn+,VBR mova @(disp,PC),R0 18696 lds Rn,MACH movt Rn 18697 lds Rn,MACL muls Rm,Rn 18698 lds Rn,PR mulu Rm,Rn 18699 lds.l @Rn+,MACH neg Rm,Rn 18700 lds.l @Rn+,MACL negc Rm,Rn 18701 18702 nop stc VBR,Rn 18703 not Rm,Rn stc.l GBR,@-Rn 18704 or #imm,R0 stc.l SR,@-Rn 18705 or Rm,Rn stc.l VBR,@-Rn 18706 or.b #imm,@(R0,GBR) sts MACH,Rn 18707 rotcl Rn sts MACL,Rn 18708 rotcr Rn sts PR,Rn 18709 rotl Rn sts.l MACH,@-Rn 18710 rotr Rn sts.l MACL,@-Rn 18711 rte sts.l PR,@-Rn 18712 rts sub Rm,Rn 18713 sett subc Rm,Rn 18714 shal Rn subv Rm,Rn 18715 shar Rn swap.b Rm,Rn 18716 shll Rn swap.w Rm,Rn 18717 shll16 Rn tas.b @Rn 18718 shll2 Rn trapa #imm 18719 shll8 Rn tst #imm,R0 18720 shlr Rn tst Rm,Rn 18721 shlr16 Rn tst.b #imm,@(R0,GBR) 18722 shlr2 Rn xor #imm,R0 18723 shlr8 Rn xor Rm,Rn 18724 sleep xor.b #imm,@(R0,GBR) 18725 stc GBR,Rn xtrct Rm,Rn 18726 stc SR,Rn 18727 18728 18729File: as.info, Node: SH64-Dependent, Next: Sparc-Dependent, Prev: SH-Dependent, Up: Machine Dependencies 18730 187319.41 SuperH SH64 Dependent Features 18732=================================== 18733 18734* Menu: 18735 18736* SH64 Options:: Options 18737* SH64 Syntax:: Syntax 18738* SH64 Directives:: SH64 Machine Directives 18739* SH64 Opcodes:: Opcodes 18740 18741 18742File: as.info, Node: SH64 Options, Next: SH64 Syntax, Up: SH64-Dependent 18743 187449.41.1 Options 18745-------------- 18746 18747`-isa=sh4 | sh4a' 18748 Specify the sh4 or sh4a instruction set. 18749 18750`-isa=dsp' 18751 Enable sh-dsp insns, and disable sh3e / sh4 insns. 18752 18753`-isa=fp' 18754 Enable sh2e, sh3e, sh4, and sh4a insn sets. 18755 18756`-isa=all' 18757 Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets. 18758 18759`-isa=shmedia | -isa=shcompact' 18760 Specify the default instruction set. `SHmedia' specifies the 18761 32-bit opcodes, and `SHcompact' specifies the 16-bit opcodes 18762 compatible with previous SH families. The default depends on the 18763 ABI selected; the default for the 64-bit ABI is SHmedia, and the 18764 default for the 32-bit ABI is SHcompact. If neither the ABI nor 18765 the ISA is specified, the default is 32-bit SHcompact. 18766 18767 Note that the `.mode' pseudo-op is not permitted if the ISA is not 18768 specified on the command line. 18769 18770`-abi=32 | -abi=64' 18771 Specify the default ABI. If the ISA is specified and the ABI is 18772 not, the default ABI depends on the ISA, with SHmedia defaulting 18773 to 64-bit and SHcompact defaulting to 32-bit. 18774 18775 Note that the `.abi' pseudo-op is not permitted if the ABI is not 18776 specified on the command line. When the ABI is specified on the 18777 command line, any `.abi' pseudo-ops in the source must match it. 18778 18779`-shcompact-const-crange' 18780 Emit code-range descriptors for constants in SHcompact code 18781 sections. 18782 18783`-no-mix' 18784 Disallow SHmedia code in the same section as constants and 18785 SHcompact code. 18786 18787`-no-expand' 18788 Do not expand MOVI, PT, PTA or PTB instructions. 18789 18790`-expand-pt32' 18791 With -abi=64, expand PT, PTA and PTB instructions to 32 bits only. 18792 18793`-h-tick-hex' 18794 Support H'00 style hex constants in addition to 0x00 style. 18795 18796 18797 18798File: as.info, Node: SH64 Syntax, Next: SH64 Directives, Prev: SH64 Options, Up: SH64-Dependent 18799 188009.41.2 Syntax 18801------------- 18802 18803* Menu: 18804 18805* SH64-Chars:: Special Characters 18806* SH64-Regs:: Register Names 18807* SH64-Addressing:: Addressing Modes 18808 18809 18810File: as.info, Node: SH64-Chars, Next: SH64-Regs, Up: SH64 Syntax 18811 188129.41.2.1 Special Characters 18813........................... 18814 18815`!' is the line comment character. 18816 18817 If a `#' appears as the first character of a line then the whole 18818line is treated as a comment, but in this case the line could also be a 18819logical line number directive (*note Comments::) or a preprocessor 18820control command (*note Preprocessing::). 18821 18822 You can use `;' instead of a newline to separate statements. 18823 18824 Since `$' has no special meaning, you may use it in symbol names. 18825 18826 18827File: as.info, Node: SH64-Regs, Next: SH64-Addressing, Prev: SH64-Chars, Up: SH64 Syntax 18828 188299.41.2.2 Register Names 18830....................... 18831 18832You can use the predefined symbols `r0' through `r63' to refer to the 18833SH64 general registers, `cr0' through `cr63' for control registers, 18834`tr0' through `tr7' for target address registers, `fr0' through `fr63' 18835for single-precision floating point registers, `dr0' through `dr62' 18836(even numbered registers only) for double-precision floating point 18837registers, `fv0' through `fv60' (multiples of four only) for 18838single-precision floating point vectors, `fp0' through `fp62' (even 18839numbered registers only) for single-precision floating point pairs, 18840`mtrx0' through `mtrx48' (multiples of 16 only) for 4x4 matrices of 18841single-precision floating point registers, `pc' for the program 18842counter, and `fpscr' for the floating point status and control register. 18843 18844 You can also refer to the control registers by the mnemonics `sr', 18845`ssr', `pssr', `intevt', `expevt', `pexpevt', `tra', `spc', `pspc', 18846`resvec', `vbr', `tea', `dcr', `kcr0', `kcr1', `ctc', and `usr'. 18847 18848 18849File: as.info, Node: SH64-Addressing, Prev: SH64-Regs, Up: SH64 Syntax 18850 188519.41.2.3 Addressing Modes 18852......................... 18853 18854SH64 operands consist of either a register or immediate value. The 18855immediate value can be a constant or label reference (or portion of a 18856label reference), as in this example: 18857 18858 movi 4,r2 18859 pt function, tr4 18860 movi (function >> 16) & 65535,r0 18861 shori function & 65535, r0 18862 ld.l r0,4,r0 18863 18864 Instruction label references can reference labels in either SHmedia 18865or SHcompact. To differentiate between the two, labels in SHmedia 18866sections will always have the least significant bit set (i.e. they will 18867be odd), which SHcompact labels will have the least significant bit 18868reset (i.e. they will be even). If you need to reference the actual 18869address of a label, you can use the `datalabel' modifier, as in this 18870example: 18871 18872 .long function 18873 .long datalabel function 18874 18875 In that example, the first longword may or may not have the least 18876significant bit set depending on whether the label is an SHmedia label 18877or an SHcompact label. The second longword will be the actual address 18878of the label, regardless of what type of label it is. 18879 18880 18881File: as.info, Node: SH64 Directives, Next: SH64 Opcodes, Prev: SH64 Syntax, Up: SH64-Dependent 18882 188839.41.3 SH64 Machine Directives 18884------------------------------ 18885 18886In addition to the SH directives, the SH64 provides the following 18887directives: 18888 18889`.mode [shmedia|shcompact]' 18890`.isa [shmedia|shcompact]' 18891 Specify the ISA for the following instructions (the two directives 18892 are equivalent). Note that programs such as `objdump' rely on 18893 symbolic labels to determine when such mode switches occur (by 18894 checking the least significant bit of the label's address), so 18895 such mode/isa changes should always be followed by a label (in 18896 practice, this is true anyway). Note that you cannot use these 18897 directives if you didn't specify an ISA on the command line. 18898 18899`.abi [32|64]' 18900 Specify the ABI for the following instructions. Note that you 18901 cannot use this directive unless you specified an ABI on the 18902 command line, and the ABIs specified must match. 18903 18904 18905 18906File: as.info, Node: SH64 Opcodes, Prev: SH64 Directives, Up: SH64-Dependent 18907 189089.41.4 Opcodes 18909-------------- 18910 18911For detailed information on the SH64 machine instruction set, see 18912`SuperH 64 bit RISC Series Architecture Manual' (SuperH, Inc.). 18913 18914 `as' implements all the standard SH64 opcodes. In addition, the 18915following pseudo-opcodes may be expanded into one or more alternate 18916opcodes: 18917 18918`movi' 18919 If the value doesn't fit into a standard `movi' opcode, `as' will 18920 replace the `movi' with a sequence of `movi' and `shori' opcodes. 18921 18922`pt' 18923 This expands to a sequence of `movi' and `shori' opcode, followed 18924 by a `ptrel' opcode, or to a `pta' or `ptb' opcode, depending on 18925 the label referenced. 18926 18927 18928 18929File: as.info, Node: Sparc-Dependent, Next: TIC54X-Dependent, Prev: SH64-Dependent, Up: Machine Dependencies 18930 189319.42 SPARC Dependent Features 18932============================= 18933 18934* Menu: 18935 18936* Sparc-Opts:: Options 18937* Sparc-Aligned-Data:: Option to enforce aligned data 18938* Sparc-Syntax:: Syntax 18939* Sparc-Float:: Floating Point 18940* Sparc-Directives:: Sparc Machine Directives 18941 18942 18943File: as.info, Node: Sparc-Opts, Next: Sparc-Aligned-Data, Up: Sparc-Dependent 18944 189459.42.1 Options 18946-------------- 18947 18948The SPARC chip family includes several successive versions, using the 18949same core instruction set, but including a few additional instructions 18950at each version. There are exceptions to this however. For details on 18951what instructions each variant supports, please see the chip's 18952architecture reference manual. 18953 18954 By default, `as' assumes the core instruction set (SPARC v6), but 18955"bumps" the architecture level as needed: it switches to successively 18956higher architectures as it encounters instructions that only exist in 18957the higher levels. 18958 18959 If not configured for SPARC v9 (`sparc64-*-*') GAS will not bump 18960past sparclite by default, an option must be passed to enable the v9 18961instructions. 18962 18963 GAS treats sparclite as being compatible with v8, unless an 18964architecture is explicitly requested. SPARC v9 is always incompatible 18965with sparclite. 18966 18967`-Av6 | -Av7 | -Av8 | -Aleon | -Asparclet | -Asparclite' 18968`-Av8plus | -Av8plusa | -Av8plusb | -Av8plusc | -Av8plusd | -Av8plusv' 18969`-Av9 | -Av9a | -Av9b | -Av9c | -Av9d | -Av9e | -Av9v | -Av9m' 18970`-Asparc | -Asparcvis | -Asparcvis2 | -Asparcfmaf | -Asparcima' 18971`-Asparcvis3 | -Asparcvis3r' 18972 Use one of the `-A' options to select one of the SPARC 18973 architectures explicitly. If you select an architecture 18974 explicitly, `as' reports a fatal error if it encounters an 18975 instruction or feature requiring an incompatible or higher level. 18976 18977 `-Av8plus', `-Av8plusa', `-Av8plusb', `-Av8plusc', `-Av8plusd', 18978 and `-Av8plusv' select a 32 bit environment. 18979 18980 `-Av9', `-Av9a', `-Av9b', `-Av9c', `-Av9d', `-Av9e', `-Av9v' and 18981 `-Av9m' select a 64 bit environment and are not available unless 18982 GAS is explicitly configured with 64 bit environment support. 18983 18984 `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with 18985 UltraSPARC VIS 1.0 extensions. 18986 18987 `-Av8plusb' and `-Av9b' enable the UltraSPARC VIS 2.0 instructions, 18988 as well as the instructions enabled by `-Av8plusa' and `-Av9a'. 18989 18990 `-Av8plusc' and `-Av9c' enable the UltraSPARC Niagara instructions, 18991 as well as the instructions enabled by `-Av8plusb' and `-Av9b'. 18992 18993 `-Av8plusd' and `-Av9d' enable the floating point fused 18994 multiply-add, VIS 3.0, and HPC extension instructions, as well as 18995 the instructions enabled by `-Av8plusc' and `-Av9c'. 18996 18997 `-Av8pluse' and `-Av9e' enable the cryptographic instructions, as 18998 well as the instructions enabled by `-Av8plusd' and `-Av9d'. 18999 19000 `-Av8plusv' and `-Av9v' enable floating point unfused 19001 multiply-add, and integer multiply-add, as well as the instructions 19002 enabled by `-Av8pluse' and `-Av9e'. 19003 19004 `-Av8plusm' and `-Av9m' enable the VIS 4.0, subtract extended, 19005 xmpmul, xmontmul and xmontsqr instructions, as well as the 19006 instructions enabled by `-Av8plusv' and `-Av9v'. 19007 19008 `-Asparc' specifies a v9 environment. It is equivalent to `-Av9' 19009 if the word size is 64-bit, and `-Av8plus' otherwise. 19010 19011 `-Asparcvis' specifies a v9a environment. It is equivalent to 19012 `-Av9a' if the word size is 64-bit, and `-Av8plusa' otherwise. 19013 19014 `-Asparcvis2' specifies a v9b environment. It is equivalent to 19015 `-Av9b' if the word size is 64-bit, and `-Av8plusb' otherwise. 19016 19017 `-Asparcfmaf' specifies a v9b environment with the floating point 19018 fused multiply-add instructions enabled. 19019 19020 `-Asparcima' specifies a v9b environment with the integer 19021 multiply-add instructions enabled. 19022 19023 `-Asparcvis3' specifies a v9b environment with the VIS 3.0, HPC , 19024 and floating point fused multiply-add instructions enabled. 19025 19026 `-Asparcvis3r' specifies a v9b environment with the VIS 3.0, HPC, 19027 and floating point unfused multiply-add instructions enabled. 19028 19029 `-Asparc5' is equivalent to `-Av9m'. 19030 19031`-xarch=v8plus | -xarch=v8plusa | -xarch=v8plusb | -xarch=v8plusc' 19032`-xarch=v8plusd | -xarch=v8plusv | -xarch=v9 | -xarch=v9a' 19033`-xarch=v9b | -xarch=v9c | -xarch=v9d | -xarch=v9e | -xarch=v9v | -xarch=v9m' 19034`-xarch=sparc | -xarch=sparcvis | -xarch=sparcvis2' 19035`-xarch=sparcfmaf | -xarch=sparcima | -xarch=sparcvis3' 19036`-xarch=sparcvis3r | -xarch=sparc5' 19037 For compatibility with the SunOS v9 assembler. These options are 19038 equivalent to -Av8plus, -Av8plusa, -Av8plusb, -Av8plusc, -Av8plusd, 19039 -Av8plusv, -Av9, -Av9a, -Av9b, -Av9c, -Av9d, -Av9e, -Av9v, -Av9m, 19040 -Asparc, -Asparcvis, -Asparcvis2, -Asparcfmaf, -Asparcima, 19041 -Asparcvis3, and -Asparcvis3r, respectively. 19042 19043`-bump' 19044 Warn whenever it is necessary to switch to another level. If an 19045 architecture level is explicitly requested, GAS will not issue 19046 warnings until that level is reached, and will then bump the level 19047 as required (except between incompatible levels). 19048 19049`-32 | -64' 19050 Select the word size, either 32 bits or 64 bits. These options 19051 are only available with the ELF object file format, and require 19052 that the necessary BFD support has been included. 19053 19054 19055File: as.info, Node: Sparc-Aligned-Data, Next: Sparc-Syntax, Prev: Sparc-Opts, Up: Sparc-Dependent 19056 190579.42.2 Enforcing aligned data 19058----------------------------- 19059 19060SPARC GAS normally permits data to be misaligned. For example, it 19061permits the `.long' pseudo-op to be used on a byte boundary. However, 19062the native SunOS assemblers issue an error when they see misaligned 19063data. 19064 19065 You can use the `--enforce-aligned-data' option to make SPARC GAS 19066also issue an error about misaligned data, just as the SunOS assemblers 19067do. 19068 19069 The `--enforce-aligned-data' option is not the default because gcc 19070issues misaligned data pseudo-ops when it initializes certain packed 19071data structures (structures defined using the `packed' attribute). You 19072may have to assemble with GAS in order to initialize packed data 19073structures in your own code. 19074 19075 19076File: as.info, Node: Sparc-Syntax, Next: Sparc-Float, Prev: Sparc-Aligned-Data, Up: Sparc-Dependent 19077 190789.42.3 Sparc Syntax 19079------------------- 19080 19081The assembler syntax closely follows The Sparc Architecture Manual, 19082versions 8 and 9, as well as most extensions defined by Sun for their 19083UltraSPARC and Niagara line of processors. 19084 19085* Menu: 19086 19087* Sparc-Chars:: Special Characters 19088* Sparc-Regs:: Register Names 19089* Sparc-Constants:: Constant Names 19090* Sparc-Relocs:: Relocations 19091* Sparc-Size-Translations:: Size Translations 19092 19093 19094File: as.info, Node: Sparc-Chars, Next: Sparc-Regs, Up: Sparc-Syntax 19095 190969.42.3.1 Special Characters 19097........................... 19098 19099A `!' character appearing anywhere on a line indicates the start of a 19100comment that extends to the end of that line. 19101 19102 If a `#' appears as the first character of a line then the whole 19103line is treated as a comment, but in this case the line could also be a 19104logical line number directive (*note Comments::) or a preprocessor 19105control command (*note Preprocessing::). 19106 19107 `;' can be used instead of a newline to separate statements. 19108 19109 19110File: as.info, Node: Sparc-Regs, Next: Sparc-Constants, Prev: Sparc-Chars, Up: Sparc-Syntax 19111 191129.42.3.2 Register Names 19113....................... 19114 19115The Sparc integer register file is broken down into global, outgoing, 19116local, and incoming. 19117 19118 * The 8 global registers are referred to as `%gN'. 19119 19120 * The 8 outgoing registers are referred to as `%oN'. 19121 19122 * The 8 local registers are referred to as `%lN'. 19123 19124 * The 8 incoming registers are referred to as `%iN'. 19125 19126 * The frame pointer register `%i6' can be referenced using the alias 19127 `%fp'. 19128 19129 * The stack pointer register `%o6' can be referenced using the alias 19130 `%sp'. 19131 19132 Floating point registers are simply referred to as `%fN'. When 19133assembling for pre-V9, only 32 floating point registers are available. 19134For V9 and later there are 64, but there are restrictions when 19135referencing the upper 32 registers. They can only be accessed as 19136double or quad, and thus only even or quad numbered accesses are 19137allowed. For example, `%f34' is a legal floating point register, but 19138`%f35' is not. 19139 19140 Floating point registers accessed as double can also be referred 19141using the `%dN' notation, where N is even. Similarly, floating point 19142registers accessed as quad can be referred using the `%qN' notation, 19143where N is a multiple of 4. For example, `%f4' can be denoted as both 19144`%d4' and `%q4'. On the other hand, `%f2' can be denoted as `%d2' but 19145not as `%q2'. 19146 19147 Certain V9 instructions allow access to ancillary state registers. 19148Most simply they can be referred to as `%asrN' where N can be from 16 19149to 31. However, there are some aliases defined to reference ASR 19150registers defined for various UltraSPARC processors: 19151 19152 * The tick compare register is referred to as `%tick_cmpr'. 19153 19154 * The system tick register is referred to as `%stick'. An alias, 19155 `%sys_tick', exists but is deprecated and should not be used by 19156 new software. 19157 19158 * The system tick compare register is referred to as `%stick_cmpr'. 19159 An alias, `%sys_tick_cmpr', exists but is deprecated and should 19160 not be used by new software. 19161 19162 * The software interrupt register is referred to as `%softint'. 19163 19164 * The set software interrupt register is referred to as 19165 `%set_softint'. The mnemonic `%softint_set' is provided as an 19166 alias. 19167 19168 * The clear software interrupt register is referred to as 19169 `%clear_softint'. The mnemonic `%softint_clear' is provided as an 19170 alias. 19171 19172 * The performance instrumentation counters register is referred to as 19173 `%pic'. 19174 19175 * The performance control register is referred to as `%pcr'. 19176 19177 * The graphics status register is referred to as `%gsr'. 19178 19179 * The V9 dispatch control register is referred to as `%dcr'. 19180 19181 Various V9 branch and conditional move instructions allow 19182specification of which set of integer condition codes to test. These 19183are referred to as `%xcc' and `%icc'. 19184 19185 Additionally, GAS supports the so-called "natural" condition codes; 19186these are referred to as `%ncc' and reference to `%icc' if the word 19187size is 32, `%xcc' if the word size is 64. 19188 19189 In V9, there are 4 sets of floating point condition codes which are 19190referred to as `%fccN'. 19191 19192 Several special privileged and non-privileged registers exist: 19193 19194 * The V9 address space identifier register is referred to as `%asi'. 19195 19196 * The V9 restorable windows register is referred to as `%canrestore'. 19197 19198 * The V9 savable windows register is referred to as `%cansave'. 19199 19200 * The V9 clean windows register is referred to as `%cleanwin'. 19201 19202 * The V9 current window pointer register is referred to as `%cwp'. 19203 19204 * The floating-point queue register is referred to as `%fq'. 19205 19206 * The V8 co-processor queue register is referred to as `%cq'. 19207 19208 * The floating point status register is referred to as `%fsr'. 19209 19210 * The other windows register is referred to as `%otherwin'. 19211 19212 * The V9 program counter register is referred to as `%pc'. 19213 19214 * The V9 next program counter register is referred to as `%npc'. 19215 19216 * The V9 processor interrupt level register is referred to as `%pil'. 19217 19218 * The V9 processor state register is referred to as `%pstate'. 19219 19220 * The trap base address register is referred to as `%tba'. 19221 19222 * The V9 tick register is referred to as `%tick'. 19223 19224 * The V9 trap level is referred to as `%tl'. 19225 19226 * The V9 trap program counter is referred to as `%tpc'. 19227 19228 * The V9 trap next program counter is referred to as `%tnpc'. 19229 19230 * The V9 trap state is referred to as `%tstate'. 19231 19232 * The V9 trap type is referred to as `%tt'. 19233 19234 * The V9 condition codes is referred to as `%ccr'. 19235 19236 * The V9 floating-point registers state is referred to as `%fprs'. 19237 19238 * The V9 version register is referred to as `%ver'. 19239 19240 * The V9 window state register is referred to as `%wstate'. 19241 19242 * The Y register is referred to as `%y'. 19243 19244 * The V8 window invalid mask register is referred to as `%wim'. 19245 19246 * The V8 processor state register is referred to as `%psr'. 19247 19248 * The V9 global register level register is referred to as `%gl'. 19249 19250 Several special register names exist for hypervisor mode code: 19251 19252 * The hyperprivileged processor state register is referred to as 19253 `%hpstate'. 19254 19255 * The hyperprivileged trap state register is referred to as 19256 `%htstate'. 19257 19258 * The hyperprivileged interrupt pending register is referred to as 19259 `%hintp'. 19260 19261 * The hyperprivileged trap base address register is referred to as 19262 `%htba'. 19263 19264 * The hyperprivileged implementation version register is referred to 19265 as `%hver'. 19266 19267 * The hyperprivileged system tick offset register is referred to as 19268 `%hstick_offset'. Note that there is no `%hstick' register, the 19269 normal `%stick' is used. 19270 19271 * The hyperprivileged system tick enable register is referred to as 19272 `%hstick_enable'. 19273 19274 * The hyperprivileged system tick compare register is referred to as 19275 `%hstick_cmpr'. 19276 19277 19278File: as.info, Node: Sparc-Constants, Next: Sparc-Relocs, Prev: Sparc-Regs, Up: Sparc-Syntax 19279 192809.42.3.3 Constants 19281.................. 19282 19283Several Sparc instructions take an immediate operand field for which 19284mnemonic names exist. Two such examples are `membar' and `prefetch'. 19285Another example are the set of V9 memory access instruction that allow 19286specification of an address space identifier. 19287 19288 The `membar' instruction specifies a memory barrier that is the 19289defined by the operand which is a bitmask. The supported mask 19290mnemonics are: 19291 19292 * `#Sync' requests that all operations (including nonmemory 19293 reference operations) appearing prior to the `membar' must have 19294 been performed and the effects of any exceptions become visible 19295 before any instructions after the `membar' may be initiated. This 19296 corresponds to `membar' cmask field bit 2. 19297 19298 * `#MemIssue' requests that all memory reference operations 19299 appearing prior to the `membar' must have been performed before 19300 any memory operation after the `membar' may be initiated. This 19301 corresponds to `membar' cmask field bit 1. 19302 19303 * `#Lookaside' requests that a store appearing prior to the `membar' 19304 must complete before any load following the `membar' referencing 19305 the same address can be initiated. This corresponds to `membar' 19306 cmask field bit 0. 19307 19308 * `#StoreStore' defines that the effects of all stores appearing 19309 prior to the `membar' instruction must be visible to all 19310 processors before the effect of any stores following the `membar'. 19311 Equivalent to the deprecated `stbar' instruction. This 19312 corresponds to `membar' mmask field bit 3. 19313 19314 * `#LoadStore' defines all loads appearing prior to the `membar' 19315 instruction must have been performed before the effect of any 19316 stores following the `membar' is visible to any other processor. 19317 This corresponds to `membar' mmask field bit 2. 19318 19319 * `#StoreLoad' defines that the effects of all stores appearing 19320 prior to the `membar' instruction must be visible to all 19321 processors before loads following the `membar' may be performed. 19322 This corresponds to `membar' mmask field bit 1. 19323 19324 * `#LoadLoad' defines that all loads appearing prior to the `membar' 19325 instruction must have been performed before any loads following 19326 the `membar' may be performed. This corresponds to `membar' mmask 19327 field bit 0. 19328 19329 19330 These values can be ored together, for example: 19331 19332 membar #Sync 19333 membar #StoreLoad | #LoadLoad 19334 membar #StoreLoad | #StoreStore 19335 19336 The `prefetch' and `prefetcha' instructions take a prefetch function 19337code. The following prefetch function code constant mnemonics are 19338available: 19339 19340 * `#n_reads' requests a prefetch for several reads, and corresponds 19341 to a prefetch function code of 0. 19342 19343 `#one_read' requests a prefetch for one read, and corresponds to a 19344 prefetch function code of 1. 19345 19346 `#n_writes' requests a prefetch for several writes (and possibly 19347 reads), and corresponds to a prefetch function code of 2. 19348 19349 `#one_write' requests a prefetch for one write, and corresponds to 19350 a prefetch function code of 3. 19351 19352 `#page' requests a prefetch page, and corresponds to a prefetch 19353 function code of 4. 19354 19355 `#invalidate' requests a prefetch invalidate, and corresponds to a 19356 prefetch function code of 16. 19357 19358 `#unified' requests a prefetch to the nearest unified cache, and 19359 corresponds to a prefetch function code of 17. 19360 19361 `#n_reads_strong' requests a strong prefetch for several reads, 19362 and corresponds to a prefetch function code of 20. 19363 19364 `#one_read_strong' requests a strong prefetch for one read, and 19365 corresponds to a prefetch function code of 21. 19366 19367 `#n_writes_strong' requests a strong prefetch for several writes, 19368 and corresponds to a prefetch function code of 22. 19369 19370 `#one_write_strong' requests a strong prefetch for one write, and 19371 corresponds to a prefetch function code of 23. 19372 19373 Onle one prefetch code may be specified. Here are some examples: 19374 19375 prefetch [%l0 + %l2], #one_read 19376 prefetch [%g2 + 8], #n_writes 19377 prefetcha [%g1] 0x8, #unified 19378 prefetcha [%o0 + 0x10] %asi, #n_reads 19379 19380 The actual behavior of a given prefetch function code is processor 19381 specific. If a processor does not implement a given prefetch 19382 function code, it will treat the prefetch instruction as a nop. 19383 19384 For instructions that accept an immediate address space identifier, 19385 `as' provides many mnemonics corresponding to V9 defined as well 19386 as UltraSPARC and Niagara extended values. For example, `#ASI_P' 19387 and `#ASI_BLK_INIT_QUAD_LDD_AIUS'. See the V9 and processor 19388 specific manuals for details. 19389 19390 19391 19392File: as.info, Node: Sparc-Relocs, Next: Sparc-Size-Translations, Prev: Sparc-Constants, Up: Sparc-Syntax 19393 193949.42.3.4 Relocations 19395.................... 19396 19397ELF relocations are available as defined in the 32-bit and 64-bit Sparc 19398ELF specifications. 19399 19400 `R_SPARC_HI22' is obtained using `%hi' and `R_SPARC_LO10' is 19401obtained using `%lo'. Likewise `R_SPARC_HIX22' is obtained from `%hix' 19402and `R_SPARC_LOX10' is obtained using `%lox'. For example: 19403 19404 sethi %hi(symbol), %g1 19405 or %g1, %lo(symbol), %g1 19406 19407 sethi %hix(symbol), %g1 19408 xor %g1, %lox(symbol), %g1 19409 19410 These "high" mnemonics extract bits 31:10 of their operand, and the 19411"low" mnemonics extract bits 9:0 of their operand. 19412 19413 V9 code model relocations can be requested as follows: 19414 19415 * `R_SPARC_HH22' is requested using `%hh'. It can also be generated 19416 using `%uhi'. 19417 19418 * `R_SPARC_HM10' is requested using `%hm'. It can also be generated 19419 using `%ulo'. 19420 19421 * `R_SPARC_LM22' is requested using `%lm'. 19422 19423 * `R_SPARC_H44' is requested using `%h44'. 19424 19425 * `R_SPARC_M44' is requested using `%m44'. 19426 19427 * `R_SPARC_L44' is requested using `%l44' or `%l34'. 19428 19429 * `R_SPARC_H34' is requested using `%h34'. 19430 19431 The `%l34' generates a `R_SPARC_L44' relocation because it 19432calculates the necessary value, and therefore no explicit `R_SPARC_L34' 19433relocation needed to be created for this purpose. 19434 19435 The `%h34' and `%l34' relocations are used for the abs34 code model. 19436Here is an example abs34 address generation sequence: 19437 19438 sethi %h34(symbol), %g1 19439 sllx %g1, 2, %g1 19440 or %g1, %l34(symbol), %g1 19441 19442 The PC relative relocation `R_SPARC_PC22' can be obtained by 19443enclosing an operand inside of `%pc22'. Likewise, the `R_SPARC_PC10' 19444relocation can be obtained using `%pc10'. These are mostly used when 19445assembling PIC code. For example, the standard PIC sequence on Sparc 19446to get the base of the global offset table, PC relative, into a 19447register, can be performed as: 19448 19449 sethi %pc22(_GLOBAL_OFFSET_TABLE_-4), %l7 19450 add %l7, %pc10(_GLOBAL_OFFSET_TABLE_+4), %l7 19451 19452 Several relocations exist to allow the link editor to potentially 19453optimize GOT data references. The `R_SPARC_GOTDATA_OP_HIX22' 19454relocation can obtained by enclosing an operand inside of 19455`%gdop_hix22'. The `R_SPARC_GOTDATA_OP_LOX10' relocation can obtained 19456by enclosing an operand inside of `%gdop_lox10'. Likewise, 19457`R_SPARC_GOTDATA_OP' can be obtained by enclosing an operand inside of 19458`%gdop'. For example, assuming the GOT base is in register `%l7': 19459 19460 sethi %gdop_hix22(symbol), %l1 19461 xor %l1, %gdop_lox10(symbol), %l1 19462 ld [%l7 + %l1], %l2, %gdop(symbol) 19463 19464 There are many relocations that can be requested for access to 19465thread local storage variables. All of the Sparc TLS mnemonics are 19466supported: 19467 19468 * `R_SPARC_TLS_GD_HI22' is requested using `%tgd_hi22'. 19469 19470 * `R_SPARC_TLS_GD_LO10' is requested using `%tgd_lo10'. 19471 19472 * `R_SPARC_TLS_GD_ADD' is requested using `%tgd_add'. 19473 19474 * `R_SPARC_TLS_GD_CALL' is requested using `%tgd_call'. 19475 19476 * `R_SPARC_TLS_LDM_HI22' is requested using `%tldm_hi22'. 19477 19478 * `R_SPARC_TLS_LDM_LO10' is requested using `%tldm_lo10'. 19479 19480 * `R_SPARC_TLS_LDM_ADD' is requested using `%tldm_add'. 19481 19482 * `R_SPARC_TLS_LDM_CALL' is requested using `%tldm_call'. 19483 19484 * `R_SPARC_TLS_LDO_HIX22' is requested using `%tldo_hix22'. 19485 19486 * `R_SPARC_TLS_LDO_LOX10' is requested using `%tldo_lox10'. 19487 19488 * `R_SPARC_TLS_LDO_ADD' is requested using `%tldo_add'. 19489 19490 * `R_SPARC_TLS_IE_HI22' is requested using `%tie_hi22'. 19491 19492 * `R_SPARC_TLS_IE_LO10' is requested using `%tie_lo10'. 19493 19494 * `R_SPARC_TLS_IE_LD' is requested using `%tie_ld'. 19495 19496 * `R_SPARC_TLS_IE_LDX' is requested using `%tie_ldx'. 19497 19498 * `R_SPARC_TLS_IE_ADD' is requested using `%tie_add'. 19499 19500 * `R_SPARC_TLS_LE_HIX22' is requested using `%tle_hix22'. 19501 19502 * `R_SPARC_TLS_LE_LOX10' is requested using `%tle_lox10'. 19503 19504 Here are some example TLS model sequences. 19505 19506 First, General Dynamic: 19507 19508 sethi %tgd_hi22(symbol), %l1 19509 add %l1, %tgd_lo10(symbol), %l1 19510 add %l7, %l1, %o0, %tgd_add(symbol) 19511 call __tls_get_addr, %tgd_call(symbol) 19512 nop 19513 19514 Local Dynamic: 19515 19516 sethi %tldm_hi22(symbol), %l1 19517 add %l1, %tldm_lo10(symbol), %l1 19518 add %l7, %l1, %o0, %tldm_add(symbol) 19519 call __tls_get_addr, %tldm_call(symbol) 19520 nop 19521 19522 sethi %tldo_hix22(symbol), %l1 19523 xor %l1, %tldo_lox10(symbol), %l1 19524 add %o0, %l1, %l1, %tldo_add(symbol) 19525 19526 Initial Exec: 19527 19528 sethi %tie_hi22(symbol), %l1 19529 add %l1, %tie_lo10(symbol), %l1 19530 ld [%l7 + %l1], %o0, %tie_ld(symbol) 19531 add %g7, %o0, %o0, %tie_add(symbol) 19532 19533 sethi %tie_hi22(symbol), %l1 19534 add %l1, %tie_lo10(symbol), %l1 19535 ldx [%l7 + %l1], %o0, %tie_ldx(symbol) 19536 add %g7, %o0, %o0, %tie_add(symbol) 19537 19538 And finally, Local Exec: 19539 19540 sethi %tle_hix22(symbol), %l1 19541 add %l1, %tle_lox10(symbol), %l1 19542 add %g7, %l1, %l1 19543 19544 When assembling for 64-bit, and a secondary constant addend is 19545specified in an address expression that would normally generate an 19546`R_SPARC_LO10' relocation, the assembler will emit an `R_SPARC_OLO10' 19547instead. 19548 19549 19550File: as.info, Node: Sparc-Size-Translations, Prev: Sparc-Relocs, Up: Sparc-Syntax 19551 195529.42.3.5 Size Translations 19553.......................... 19554 19555Often it is desirable to write code in an operand size agnostic manner. 19556`as' provides support for this via operand size opcode translations. 19557Translations are supported for loads, stores, shifts, compare-and-swap 19558atomics, and the `clr' synthetic instruction. 19559 19560 If generating 32-bit code, `as' will generate the 32-bit opcode. 19561Whereas if 64-bit code is being generated, the 64-bit opcode will be 19562emitted. For example `ldn' will be transformed into `ld' for 32-bit 19563code and `ldx' for 64-bit code. 19564 19565 Here is an example meant to demonstrate all the supported opcode 19566translations: 19567 19568 ldn [%o0], %o1 19569 ldna [%o0] %asi, %o2 19570 stn %o1, [%o0] 19571 stna %o2, [%o0] %asi 19572 slln %o3, 3, %o3 19573 srln %o4, 8, %o4 19574 sran %o5, 12, %o5 19575 casn [%o0], %o1, %o2 19576 casna [%o0] %asi, %o1, %o2 19577 clrn %g1 19578 19579 In 32-bit mode `as' will emit: 19580 19581 ld [%o0], %o1 19582 lda [%o0] %asi, %o2 19583 st %o1, [%o0] 19584 sta %o2, [%o0] %asi 19585 sll %o3, 3, %o3 19586 srl %o4, 8, %o4 19587 sra %o5, 12, %o5 19588 cas [%o0], %o1, %o2 19589 casa [%o0] %asi, %o1, %o2 19590 clr %g1 19591 19592 And in 64-bit mode `as' will emit: 19593 19594 ldx [%o0], %o1 19595 ldxa [%o0] %asi, %o2 19596 stx %o1, [%o0] 19597 stxa %o2, [%o0] %asi 19598 sllx %o3, 3, %o3 19599 srlx %o4, 8, %o4 19600 srax %o5, 12, %o5 19601 casx [%o0], %o1, %o2 19602 casxa [%o0] %asi, %o1, %o2 19603 clrx %g1 19604 19605 Finally, the `.nword' translating directive is supported as well. 19606It is documented in the section on Sparc machine directives. 19607 19608 19609File: as.info, Node: Sparc-Float, Next: Sparc-Directives, Prev: Sparc-Syntax, Up: Sparc-Dependent 19610 196119.42.4 Floating Point 19612--------------------- 19613 19614The Sparc uses IEEE floating-point numbers. 19615 19616 19617File: as.info, Node: Sparc-Directives, Prev: Sparc-Float, Up: Sparc-Dependent 19618 196199.42.5 Sparc Machine Directives 19620------------------------------- 19621 19622The Sparc version of `as' supports the following additional machine 19623directives: 19624 19625`.align' 19626 This must be followed by the desired alignment in bytes. 19627 19628`.common' 19629 This must be followed by a symbol name, a positive number, and 19630 `"bss"'. This behaves somewhat like `.comm', but the syntax is 19631 different. 19632 19633`.half' 19634 This is functionally identical to `.short'. 19635 19636`.nword' 19637 On the Sparc, the `.nword' directive produces native word sized 19638 value, ie. if assembling with -32 it is equivalent to `.word', if 19639 assembling with -64 it is equivalent to `.xword'. 19640 19641`.proc' 19642 This directive is ignored. Any text following it on the same line 19643 is also ignored. 19644 19645`.register' 19646 This directive declares use of a global application or system 19647 register. It must be followed by a register name %g2, %g3, %g6 or 19648 %g7, comma and the symbol name for that register. If symbol name 19649 is `#scratch', it is a scratch register, if it is `#ignore', it 19650 just suppresses any errors about using undeclared global register, 19651 but does not emit any information about it into the object file. 19652 This can be useful e.g. if you save the register before use and 19653 restore it after. 19654 19655`.reserve' 19656 This must be followed by a symbol name, a positive number, and 19657 `"bss"'. This behaves somewhat like `.lcomm', but the syntax is 19658 different. 19659 19660`.seg' 19661 This must be followed by `"text"', `"data"', or `"data1"'. It 19662 behaves like `.text', `.data', or `.data 1'. 19663 19664`.skip' 19665 This is functionally identical to the `.space' directive. 19666 19667`.word' 19668 On the Sparc, the `.word' directive produces 32 bit values, 19669 instead of the 16 bit values it produces on many other machines. 19670 19671`.xword' 19672 On the Sparc V9 processor, the `.xword' directive produces 64 bit 19673 values. 19674 19675 19676File: as.info, Node: TIC54X-Dependent, Next: TIC6X-Dependent, Prev: Sparc-Dependent, Up: Machine Dependencies 19677 196789.43 TIC54X Dependent Features 19679============================== 19680 19681* Menu: 19682 19683* TIC54X-Opts:: Command-line Options 19684* TIC54X-Block:: Blocking 19685* TIC54X-Env:: Environment Settings 19686* TIC54X-Constants:: Constants Syntax 19687* TIC54X-Subsyms:: String Substitution 19688* TIC54X-Locals:: Local Label Syntax 19689* TIC54X-Builtins:: Builtin Assembler Math Functions 19690* TIC54X-Ext:: Extended Addressing Support 19691* TIC54X-Directives:: Directives 19692* TIC54X-Macros:: Macro Features 19693* TIC54X-MMRegs:: Memory-mapped Registers 19694* TIC54X-Syntax:: Syntax 19695 19696 19697File: as.info, Node: TIC54X-Opts, Next: TIC54X-Block, Up: TIC54X-Dependent 19698 196999.43.1 Options 19700-------------- 19701 19702The TMS320C54X version of `as' has a few machine-dependent options. 19703 19704 You can use the `-mfar-mode' option to enable extended addressing 19705mode. All addresses will be assumed to be > 16 bits, and the 19706appropriate relocation types will be used. This option is equivalent 19707to using the `.far_mode' directive in the assembly code. If you do not 19708use the `-mfar-mode' option, all references will be assumed to be 16 19709bits. This option may be abbreviated to `-mf'. 19710 19711 You can use the `-mcpu' option to specify a particular CPU. This 19712option is equivalent to using the `.version' directive in the assembly 19713code. For recognized CPU codes, see *Note `.version': 19714TIC54X-Directives. The default CPU version is `542'. 19715 19716 You can use the `-merrors-to-file' option to redirect error output 19717to a file (this provided for those deficient environments which don't 19718provide adequate output redirection). This option may be abbreviated to 19719`-me'. 19720 19721 19722File: as.info, Node: TIC54X-Block, Next: TIC54X-Env, Prev: TIC54X-Opts, Up: TIC54X-Dependent 19723 197249.43.2 Blocking 19725--------------- 19726 19727A blocked section or memory block is guaranteed not to cross the 19728blocking boundary (usually a page, or 128 words) if it is smaller than 19729the blocking size, or to start on a page boundary if it is larger than 19730the blocking size. 19731 19732 19733File: as.info, Node: TIC54X-Env, Next: TIC54X-Constants, Prev: TIC54X-Block, Up: TIC54X-Dependent 19734 197359.43.3 Environment Settings 19736--------------------------- 19737 19738`C54XDSP_DIR' and `A_DIR' are semicolon-separated paths which are added 19739to the list of directories normally searched for source and include 19740files. `C54XDSP_DIR' will override `A_DIR'. 19741 19742 19743File: as.info, Node: TIC54X-Constants, Next: TIC54X-Subsyms, Prev: TIC54X-Env, Up: TIC54X-Dependent 19744 197459.43.4 Constants Syntax 19746----------------------- 19747 19748The TIC54X version of `as' allows the following additional constant 19749formats, using a suffix to indicate the radix: 19750 19751 Binary `000000B, 011000b' 19752 Octal `10Q, 224q' 19753 Hexadecimal `45h, 0FH' 19754 19755 19756File: as.info, Node: TIC54X-Subsyms, Next: TIC54X-Locals, Prev: TIC54X-Constants, Up: TIC54X-Dependent 19757 197589.43.5 String Substitution 19759-------------------------- 19760 19761A subset of allowable symbols (which we'll call subsyms) may be assigned 19762arbitrary string values. This is roughly equivalent to C preprocessor 19763#define macros. When `as' encounters one of these symbols, the symbol 19764is replaced in the input stream by its string value. Subsym names 19765*must* begin with a letter. 19766 19767 Subsyms may be defined using the `.asg' and `.eval' directives 19768(*Note `.asg': TIC54X-Directives, *Note `.eval': TIC54X-Directives. 19769 19770 Expansion is recursive until a previously encountered symbol is 19771seen, at which point substitution stops. 19772 19773 In this example, x is replaced with SYM2; SYM2 is replaced with 19774SYM1, and SYM1 is replaced with x. At this point, x has already been 19775encountered and the substitution stops. 19776 19777 .asg "x",SYM1 19778 .asg "SYM1",SYM2 19779 .asg "SYM2",x 19780 add x,a ; final code assembled is "add x, a" 19781 19782 Macro parameters are converted to subsyms; a side effect of this is 19783the normal `as' '\ARG' dereferencing syntax is unnecessary. Subsyms 19784defined within a macro will have global scope, unless the `.var' 19785directive is used to identify the subsym as a local macro variable 19786*note `.var': TIC54X-Directives. 19787 19788 Substitution may be forced in situations where replacement might be 19789ambiguous by placing colons on either side of the subsym. The following 19790code: 19791 19792 .eval "10",x 19793 LAB:X: add #x, a 19794 19795 When assembled becomes: 19796 19797 LAB10 add #10, a 19798 19799 Smaller parts of the string assigned to a subsym may be accessed with 19800the following syntax: 19801 19802``:SYMBOL(CHAR_INDEX):'' 19803 Evaluates to a single-character string, the character at 19804 CHAR_INDEX. 19805 19806``:SYMBOL(START,LENGTH):'' 19807 Evaluates to a substring of SYMBOL beginning at START with length 19808 LENGTH. 19809 19810 19811File: as.info, Node: TIC54X-Locals, Next: TIC54X-Builtins, Prev: TIC54X-Subsyms, Up: TIC54X-Dependent 19812 198139.43.6 Local Labels 19814------------------- 19815 19816Local labels may be defined in two ways: 19817 19818 * $N, where N is a decimal number between 0 and 9 19819 19820 * LABEL?, where LABEL is any legal symbol name. 19821 19822 Local labels thus defined may be redefined or automatically 19823generated. The scope of a local label is based on when it may be 19824undefined or reset. This happens when one of the following situations 19825is encountered: 19826 19827 * .newblock directive *note `.newblock': TIC54X-Directives. 19828 19829 * The current section is changed (.sect, .text, or .data) 19830 19831 * Entering or leaving an included file 19832 19833 * The macro scope where the label was defined is exited 19834 19835 19836File: as.info, Node: TIC54X-Builtins, Next: TIC54X-Ext, Prev: TIC54X-Locals, Up: TIC54X-Dependent 19837 198389.43.7 Math Builtins 19839-------------------- 19840 19841The following built-in functions may be used to generate a 19842floating-point value. All return a floating-point value except `$cvi', 19843`$int', and `$sgn', which return an integer value. 19844 19845``$acos(EXPR)'' 19846 Returns the floating point arccosine of EXPR. 19847 19848``$asin(EXPR)'' 19849 Returns the floating point arcsine of EXPR. 19850 19851``$atan(EXPR)'' 19852 Returns the floating point arctangent of EXPR. 19853 19854``$atan2(EXPR1,EXPR2)'' 19855 Returns the floating point arctangent of EXPR1 / EXPR2. 19856 19857``$ceil(EXPR)'' 19858 Returns the smallest integer not less than EXPR as floating point. 19859 19860``$cosh(EXPR)'' 19861 Returns the floating point hyperbolic cosine of EXPR. 19862 19863``$cos(EXPR)'' 19864 Returns the floating point cosine of EXPR. 19865 19866``$cvf(EXPR)'' 19867 Returns the integer value EXPR converted to floating-point. 19868 19869``$cvi(EXPR)'' 19870 Returns the floating point value EXPR converted to integer. 19871 19872``$exp(EXPR)'' 19873 Returns the floating point value e ^ EXPR. 19874 19875``$fabs(EXPR)'' 19876 Returns the floating point absolute value of EXPR. 19877 19878``$floor(EXPR)'' 19879 Returns the largest integer that is not greater than EXPR as 19880 floating point. 19881 19882``$fmod(EXPR1,EXPR2)'' 19883 Returns the floating point remainder of EXPR1 / EXPR2. 19884 19885``$int(EXPR)'' 19886 Returns 1 if EXPR evaluates to an integer, zero otherwise. 19887 19888``$ldexp(EXPR1,EXPR2)'' 19889 Returns the floating point value EXPR1 * 2 ^ EXPR2. 19890 19891``$log10(EXPR)'' 19892 Returns the base 10 logarithm of EXPR. 19893 19894``$log(EXPR)'' 19895 Returns the natural logarithm of EXPR. 19896 19897``$max(EXPR1,EXPR2)'' 19898 Returns the floating point maximum of EXPR1 and EXPR2. 19899 19900``$min(EXPR1,EXPR2)'' 19901 Returns the floating point minimum of EXPR1 and EXPR2. 19902 19903``$pow(EXPR1,EXPR2)'' 19904 Returns the floating point value EXPR1 ^ EXPR2. 19905 19906``$round(EXPR)'' 19907 Returns the nearest integer to EXPR as a floating point number. 19908 19909``$sgn(EXPR)'' 19910 Returns -1, 0, or 1 based on the sign of EXPR. 19911 19912``$sin(EXPR)'' 19913 Returns the floating point sine of EXPR. 19914 19915``$sinh(EXPR)'' 19916 Returns the floating point hyperbolic sine of EXPR. 19917 19918``$sqrt(EXPR)'' 19919 Returns the floating point square root of EXPR. 19920 19921``$tan(EXPR)'' 19922 Returns the floating point tangent of EXPR. 19923 19924``$tanh(EXPR)'' 19925 Returns the floating point hyperbolic tangent of EXPR. 19926 19927``$trunc(EXPR)'' 19928 Returns the integer value of EXPR truncated towards zero as 19929 floating point. 19930 19931 19932 19933File: as.info, Node: TIC54X-Ext, Next: TIC54X-Directives, Prev: TIC54X-Builtins, Up: TIC54X-Dependent 19934 199359.43.8 Extended Addressing 19936-------------------------- 19937 19938The `LDX' pseudo-op is provided for loading the extended addressing bits 19939of a label or address. For example, if an address `_label' resides in 19940extended program memory, the value of `_label' may be loaded as follows: 19941 ldx #_label,16,a ; loads extended bits of _label 19942 or #_label,a ; loads lower 16 bits of _label 19943 bacc a ; full address is in accumulator A 19944 19945 19946File: as.info, Node: TIC54X-Directives, Next: TIC54X-Macros, Prev: TIC54X-Ext, Up: TIC54X-Dependent 19947 199489.43.9 Directives 19949----------------- 19950 19951`.align [SIZE]' 19952`.even' 19953 Align the section program counter on the next boundary, based on 19954 SIZE. SIZE may be any power of 2. `.even' is equivalent to 19955 `.align' with a SIZE of 2. 19956 `1' 19957 Align SPC to word boundary 19958 19959 `2' 19960 Align SPC to longword boundary (same as .even) 19961 19962 `128' 19963 Align SPC to page boundary 19964 19965`.asg STRING, NAME' 19966 Assign NAME the string STRING. String replacement is performed on 19967 STRING before assignment. 19968 19969`.eval STRING, NAME' 19970 Evaluate the contents of string STRING and assign the result as a 19971 string to the subsym NAME. String replacement is performed on 19972 STRING before assignment. 19973 19974`.bss SYMBOL, SIZE [, [BLOCKING_FLAG] [,ALIGNMENT_FLAG]]' 19975 Reserve space for SYMBOL in the .bss section. SIZE is in words. 19976 If present, BLOCKING_FLAG indicates the allocated space should be 19977 aligned on a page boundary if it would otherwise cross a page 19978 boundary. If present, ALIGNMENT_FLAG causes the assembler to 19979 allocate SIZE on a long word boundary. 19980 19981`.byte VALUE [,...,VALUE_N]' 19982`.ubyte VALUE [,...,VALUE_N]' 19983`.char VALUE [,...,VALUE_N]' 19984`.uchar VALUE [,...,VALUE_N]' 19985 Place one or more bytes into consecutive words of the current 19986 section. The upper 8 bits of each word is zero-filled. If a 19987 label is used, it points to the word allocated for the first byte 19988 encountered. 19989 19990`.clink ["SECTION_NAME"]' 19991 Set STYP_CLINK flag for this section, which indicates to the 19992 linker that if no symbols from this section are referenced, the 19993 section should not be included in the link. If SECTION_NAME is 19994 omitted, the current section is used. 19995 19996`.c_mode' 19997 TBD. 19998 19999`.copy "FILENAME" | FILENAME' 20000`.include "FILENAME" | FILENAME' 20001 Read source statements from FILENAME. The normal include search 20002 path is used. Normally .copy will cause statements from the 20003 included file to be printed in the assembly listing and .include 20004 will not, but this distinction is not currently implemented. 20005 20006`.data' 20007 Begin assembling code into the .data section. 20008 20009`.double VALUE [,...,VALUE_N]' 20010`.ldouble VALUE [,...,VALUE_N]' 20011`.float VALUE [,...,VALUE_N]' 20012`.xfloat VALUE [,...,VALUE_N]' 20013 Place an IEEE single-precision floating-point representation of 20014 one or more floating-point values into the current section. All 20015 but `.xfloat' align the result on a longword boundary. Values are 20016 stored most-significant word first. 20017 20018`.drlist' 20019`.drnolist' 20020 Control printing of directives to the listing file. Ignored. 20021 20022`.emsg STRING' 20023`.mmsg STRING' 20024`.wmsg STRING' 20025 Emit a user-defined error, message, or warning, respectively. 20026 20027`.far_mode' 20028 Use extended addressing when assembling statements. This should 20029 appear only once per file, and is equivalent to the -mfar-mode 20030 option *note `-mfar-mode': TIC54X-Opts. 20031 20032`.fclist' 20033`.fcnolist' 20034 Control printing of false conditional blocks to the listing file. 20035 20036`.field VALUE [,SIZE]' 20037 Initialize a bitfield of SIZE bits in the current section. If 20038 VALUE is relocatable, then SIZE must be 16. SIZE defaults to 16 20039 bits. If VALUE does not fit into SIZE bits, the value will be 20040 truncated. Successive `.field' directives will pack starting at 20041 the current word, filling the most significant bits first, and 20042 aligning to the start of the next word if the field size does not 20043 fit into the space remaining in the current word. A `.align' 20044 directive with an operand of 1 will force the next `.field' 20045 directive to begin packing into a new word. If a label is used, it 20046 points to the word that contains the specified field. 20047 20048`.global SYMBOL [,...,SYMBOL_N]' 20049`.def SYMBOL [,...,SYMBOL_N]' 20050`.ref SYMBOL [,...,SYMBOL_N]' 20051 `.def' nominally identifies a symbol defined in the current file 20052 and available to other files. `.ref' identifies a symbol used in 20053 the current file but defined elsewhere. Both map to the standard 20054 `.global' directive. 20055 20056`.half VALUE [,...,VALUE_N]' 20057`.uhalf VALUE [,...,VALUE_N]' 20058`.short VALUE [,...,VALUE_N]' 20059`.ushort VALUE [,...,VALUE_N]' 20060`.int VALUE [,...,VALUE_N]' 20061`.uint VALUE [,...,VALUE_N]' 20062`.word VALUE [,...,VALUE_N]' 20063`.uword VALUE [,...,VALUE_N]' 20064 Place one or more values into consecutive words of the current 20065 section. If a label is used, it points to the word allocated for 20066 the first value encountered. 20067 20068`.label SYMBOL' 20069 Define a special SYMBOL to refer to the load time address of the 20070 current section program counter. 20071 20072`.length' 20073`.width' 20074 Set the page length and width of the output listing file. Ignored. 20075 20076`.list' 20077`.nolist' 20078 Control whether the source listing is printed. Ignored. 20079 20080`.long VALUE [,...,VALUE_N]' 20081`.ulong VALUE [,...,VALUE_N]' 20082`.xlong VALUE [,...,VALUE_N]' 20083 Place one or more 32-bit values into consecutive words in the 20084 current section. The most significant word is stored first. 20085 `.long' and `.ulong' align the result on a longword boundary; 20086 `xlong' does not. 20087 20088`.loop [COUNT]' 20089`.break [CONDITION]' 20090`.endloop' 20091 Repeatedly assemble a block of code. `.loop' begins the block, and 20092 `.endloop' marks its termination. COUNT defaults to 1024, and 20093 indicates the number of times the block should be repeated. 20094 `.break' terminates the loop so that assembly begins after the 20095 `.endloop' directive. The optional CONDITION will cause the loop 20096 to terminate only if it evaluates to zero. 20097 20098`MACRO_NAME .macro [PARAM1][,...PARAM_N]' 20099`[.mexit]' 20100`.endm' 20101 See the section on macros for more explanation (*Note 20102 TIC54X-Macros::. 20103 20104`.mlib "FILENAME" | FILENAME' 20105 Load the macro library FILENAME. FILENAME must be an archived 20106 library (BFD ar-compatible) of text files, expected to contain 20107 only macro definitions. The standard include search path is used. 20108 20109`.mlist' 20110`.mnolist' 20111 Control whether to include macro and loop block expansions in the 20112 listing output. Ignored. 20113 20114`.mmregs' 20115 Define global symbolic names for the 'c54x registers. Supposedly 20116 equivalent to executing `.set' directives for each register with 20117 its memory-mapped value, but in reality is provided only for 20118 compatibility and does nothing. 20119 20120`.newblock' 20121 This directive resets any TIC54X local labels currently defined. 20122 Normal `as' local labels are unaffected. 20123 20124`.option OPTION_LIST' 20125 Set listing options. Ignored. 20126 20127`.sblock "SECTION_NAME" | SECTION_NAME [,"NAME_N" | NAME_N]' 20128 Designate SECTION_NAME for blocking. Blocking guarantees that a 20129 section will start on a page boundary (128 words) if it would 20130 otherwise cross a page boundary. Only initialized sections may be 20131 designated with this directive. See also *Note TIC54X-Block::. 20132 20133`.sect "SECTION_NAME"' 20134 Define a named initialized section and make it the current section. 20135 20136`SYMBOL .set "VALUE"' 20137`SYMBOL .equ "VALUE"' 20138 Equate a constant VALUE to a SYMBOL, which is placed in the symbol 20139 table. SYMBOL may not be previously defined. 20140 20141`.space SIZE_IN_BITS' 20142`.bes SIZE_IN_BITS' 20143 Reserve the given number of bits in the current section and 20144 zero-fill them. If a label is used with `.space', it points to the 20145 *first* word reserved. With `.bes', the label points to the 20146 *last* word reserved. 20147 20148`.sslist' 20149`.ssnolist' 20150 Controls the inclusion of subsym replacement in the listing 20151 output. Ignored. 20152 20153`.string "STRING" [,...,"STRING_N"]' 20154`.pstring "STRING" [,...,"STRING_N"]' 20155 Place 8-bit characters from STRING into the current section. 20156 `.string' zero-fills the upper 8 bits of each word, while 20157 `.pstring' puts two characters into each word, filling the 20158 most-significant bits first. Unused space is zero-filled. If a 20159 label is used, it points to the first word initialized. 20160 20161`[STAG] .struct [OFFSET]' 20162`[NAME_1] element [COUNT_1]' 20163`[NAME_2] element [COUNT_2]' 20164`[TNAME] .tag STAGX [TCOUNT]' 20165`...' 20166`[NAME_N] element [COUNT_N]' 20167`[SSIZE] .endstruct' 20168`LABEL .tag [STAG]' 20169 Assign symbolic offsets to the elements of a structure. STAG 20170 defines a symbol to use to reference the structure. OFFSET 20171 indicates a starting value to use for the first element 20172 encountered; otherwise it defaults to zero. Each element can have 20173 a named offset, NAME, which is a symbol assigned the value of the 20174 element's offset into the structure. If STAG is missing, these 20175 become global symbols. COUNT adjusts the offset that many times, 20176 as if `element' were an array. `element' may be one of `.byte', 20177 `.word', `.long', `.float', or any equivalent of those, and the 20178 structure offset is adjusted accordingly. `.field' and `.string' 20179 are also allowed; the size of `.field' is one bit, and `.string' 20180 is considered to be one word in size. Only element descriptors, 20181 structure/union tags, `.align' and conditional assembly directives 20182 are allowed within `.struct'/`.endstruct'. `.align' aligns member 20183 offsets to word boundaries only. SSIZE, if provided, will always 20184 be assigned the size of the structure. 20185 20186 The `.tag' directive, in addition to being used to define a 20187 structure/union element within a structure, may be used to apply a 20188 structure to a symbol. Once applied to LABEL, the individual 20189 structure elements may be applied to LABEL to produce the desired 20190 offsets using LABEL as the structure base. 20191 20192`.tab' 20193 Set the tab size in the output listing. Ignored. 20194 20195`[UTAG] .union' 20196`[NAME_1] element [COUNT_1]' 20197`[NAME_2] element [COUNT_2]' 20198`[TNAME] .tag UTAGX[,TCOUNT]' 20199`...' 20200`[NAME_N] element [COUNT_N]' 20201`[USIZE] .endstruct' 20202`LABEL .tag [UTAG]' 20203 Similar to `.struct', but the offset after each element is reset to 20204 zero, and the USIZE is set to the maximum of all defined elements. 20205 Starting offset for the union is always zero. 20206 20207`[SYMBOL] .usect "SECTION_NAME", SIZE, [,[BLOCKING_FLAG] [,ALIGNMENT_FLAG]]' 20208 Reserve space for variables in a named, uninitialized section 20209 (similar to .bss). `.usect' allows definitions sections 20210 independent of .bss. SYMBOL points to the first location reserved 20211 by this allocation. The symbol may be used as a variable name. 20212 SIZE is the allocated size in words. BLOCKING_FLAG indicates 20213 whether to block this section on a page boundary (128 words) 20214 (*note TIC54X-Block::). ALIGNMENT FLAG indicates whether the 20215 section should be longword-aligned. 20216 20217`.var SYM[,..., SYM_N]' 20218 Define a subsym to be a local variable within a macro. See *Note 20219 TIC54X-Macros::. 20220 20221`.version VERSION' 20222 Set which processor to build instructions for. Though the 20223 following values are accepted, the op is ignored. 20224 `541' 20225 `542' 20226 `543' 20227 `545' 20228 `545LP' 20229 `546LP' 20230 `548' 20231 `549' 20232 20233 20234File: as.info, Node: TIC54X-Macros, Next: TIC54X-MMRegs, Prev: TIC54X-Directives, Up: TIC54X-Dependent 20235 202369.43.10 Macros 20237-------------- 20238 20239Macros do not require explicit dereferencing of arguments (i.e., \ARG). 20240 20241 During macro expansion, the macro parameters are converted to 20242subsyms. If the number of arguments passed the macro invocation 20243exceeds the number of parameters defined, the last parameter is 20244assigned the string equivalent of all remaining arguments. If fewer 20245arguments are given than parameters, the missing parameters are 20246assigned empty strings. To include a comma in an argument, you must 20247enclose the argument in quotes. 20248 20249 The following built-in subsym functions allow examination of the 20250string value of subsyms (or ordinary strings). The arguments are 20251strings unless otherwise indicated (subsyms passed as args will be 20252replaced by the strings they represent). 20253``$symlen(STR)'' 20254 Returns the length of STR. 20255 20256``$symcmp(STR1,STR2)'' 20257 Returns 0 if STR1 == STR2, non-zero otherwise. 20258 20259``$firstch(STR,CH)'' 20260 Returns index of the first occurrence of character constant CH in 20261 STR. 20262 20263``$lastch(STR,CH)'' 20264 Returns index of the last occurrence of character constant CH in 20265 STR. 20266 20267``$isdefed(SYMBOL)'' 20268 Returns zero if the symbol SYMBOL is not in the symbol table, 20269 non-zero otherwise. 20270 20271``$ismember(SYMBOL,LIST)'' 20272 Assign the first member of comma-separated string LIST to SYMBOL; 20273 LIST is reassigned the remainder of the list. Returns zero if 20274 LIST is a null string. Both arguments must be subsyms. 20275 20276``$iscons(EXPR)'' 20277 Returns 1 if string EXPR is binary, 2 if octal, 3 if hexadecimal, 20278 4 if a character, 5 if decimal, and zero if not an integer. 20279 20280``$isname(NAME)'' 20281 Returns 1 if NAME is a valid symbol name, zero otherwise. 20282 20283``$isreg(REG)'' 20284 Returns 1 if REG is a valid predefined register name (AR0-AR7 20285 only). 20286 20287``$structsz(STAG)'' 20288 Returns the size of the structure or union represented by STAG. 20289 20290``$structacc(STAG)'' 20291 Returns the reference point of the structure or union represented 20292 by STAG. Always returns zero. 20293 20294 20295 20296File: as.info, Node: TIC54X-MMRegs, Next: TIC54X-Syntax, Prev: TIC54X-Macros, Up: TIC54X-Dependent 20297 202989.43.11 Memory-mapped Registers 20299------------------------------- 20300 20301The following symbols are recognized as memory-mapped registers: 20302 20303 20304 20305File: as.info, Node: TIC54X-Syntax, Prev: TIC54X-MMRegs, Up: TIC54X-Dependent 20306 203079.43.12 TIC54X Syntax 20308--------------------- 20309 20310* Menu: 20311 20312* TIC54X-Chars:: Special Characters 20313 20314 20315File: as.info, Node: TIC54X-Chars, Up: TIC54X-Syntax 20316 203179.43.12.1 Special Characters 20318............................ 20319 20320The presence of a `;' appearing anywhere on a line indicates the start 20321of a comment that extends to the end of that line. 20322 20323 If a `#' appears as the first character of a line then the whole 20324line is treated as a comment, but in this case the line can also be a 20325logical line number directive (*note Comments::) or a preprocessor 20326control command (*note Preprocessing::). 20327 20328 The presence of an asterisk (`*') at the start of a line also 20329indicates a comment that extends to the end of that line. 20330 20331 The TIC54X assembler does not currently support a line separator 20332character. 20333 20334 20335File: as.info, Node: TIC6X-Dependent, Next: TILE-Gx-Dependent, Prev: TIC54X-Dependent, Up: Machine Dependencies 20336 203379.44 TIC6X Dependent Features 20338============================= 20339 20340* Menu: 20341 20342* TIC6X Options:: Options 20343* TIC6X Syntax:: Syntax 20344* TIC6X Directives:: Directives 20345 20346 20347File: as.info, Node: TIC6X Options, Next: TIC6X Syntax, Up: TIC6X-Dependent 20348 203499.44.1 TIC6X Options 20350-------------------- 20351 20352`-march=ARCH' 20353 Enable (only) instructions from architecture ARCH. By default, 20354 all instructions are permitted. 20355 20356 The following values of ARCH are accepted: `c62x', `c64x', 20357 `c64x+', `c67x', `c67x+', `c674x'. 20358 20359`-mdsbt' 20360`-mno-dsbt' 20361 The `-mdsbt' option causes the assembler to generate the 20362 `Tag_ABI_DSBT' attribute with a value of 1, indicating that the 20363 code is using DSBT addressing. The `-mno-dsbt' option, the 20364 default, causes the tag to have a value of 0, indicating that the 20365 code does not use DSBT addressing. The linker will emit a warning 20366 if objects of different type (DSBT and non-DSBT) are linked 20367 together. 20368 20369`-mpid=no' 20370`-mpid=near' 20371`-mpid=far' 20372 The `-mpid=' option causes the assembler to generate the 20373 `Tag_ABI_PID' attribute with a value indicating the form of data 20374 addressing used by the code. `-mpid=no', the default, indicates 20375 position-dependent data addressing, `-mpid=near' indicates 20376 position-independent addressing with GOT accesses using near DP 20377 addressing, and `-mpid=far' indicates position-independent 20378 addressing with GOT accesses using far DP addressing. The linker 20379 will emit a warning if objects built with different settings of 20380 this option are linked together. 20381 20382`-mpic' 20383`-mno-pic' 20384 The `-mpic' option causes the assembler to generate the 20385 `Tag_ABI_PIC' attribute with a value of 1, indicating that the 20386 code is using position-independent code addressing, The 20387 `-mno-pic' option, the default, causes the tag to have a value of 20388 0, indicating position-dependent code addressing. The linker will 20389 emit a warning if objects of different type (position-dependent and 20390 position-independent) are linked together. 20391 20392`-mbig-endian' 20393`-mlittle-endian' 20394 Generate code for the specified endianness. The default is 20395 little-endian. 20396 20397 20398 20399File: as.info, Node: TIC6X Syntax, Next: TIC6X Directives, Prev: TIC6X Options, Up: TIC6X-Dependent 20400 204019.44.2 TIC6X Syntax 20402------------------- 20403 20404The presence of a `;' on a line indicates the start of a comment that 20405extends to the end of the current line. If a `#' or `*' appears as the 20406first character of a line, the whole line is treated as a comment. 20407Note that if a line starts with a `#' character then it can also be a 20408logical line number directive (*note Comments::) or a preprocessor 20409control command (*note Preprocessing::). 20410 20411 The `@' character can be used instead of a newline to separate 20412statements. 20413 20414 Instruction, register and functional unit names are case-insensitive. 20415`as' requires fully-specified functional unit names, such as `.S1', 20416`.L1X' or `.D1T2', on all instructions using a functional unit. 20417 20418 For some instructions, there may be syntactic ambiguity between 20419register or functional unit names and the names of labels or other 20420symbols. To avoid this, enclose the ambiguous symbol name in 20421parentheses; register and functional unit names may not be enclosed in 20422parentheses. 20423 20424 20425File: as.info, Node: TIC6X Directives, Prev: TIC6X Syntax, Up: TIC6X-Dependent 20426 204279.44.3 TIC6X Directives 20428----------------------- 20429 20430Directives controlling the set of instructions accepted by the 20431assembler have effect for instructions between the directive and any 20432subsequent directive overriding it. 20433 20434`.arch ARCH' 20435 This has the same effect as `-march=ARCH'. 20436 20437`.cantunwind' 20438 Prevents unwinding through the current function. No personality 20439 routine or exception table data is required or permitted. 20440 20441 If this is not specified then frame unwinding information will be 20442 constructed from CFI directives. *note CFI directives::. 20443 20444`.c6xabi_attribute TAG, VALUE' 20445 Set the C6000 EABI build attribute TAG to VALUE. 20446 20447 The TAG is either an attribute number or one of `Tag_ISA', 20448 `Tag_ABI_wchar_t', `Tag_ABI_stack_align_needed', 20449 `Tag_ABI_stack_align_preserved', `Tag_ABI_DSBT', `Tag_ABI_PID', 20450 `Tag_ABI_PIC', `TAG_ABI_array_object_alignment', 20451 `TAG_ABI_array_object_align_expected', `Tag_ABI_compatibility' and 20452 `Tag_ABI_conformance'. The VALUE is either a `number', 20453 `"string"', or `number, "string"' depending on the tag. 20454 20455`.ehtype SYMBOL' 20456 Output an exception type table reference to SYMBOL. 20457 20458`.endp' 20459 Marks the end of and exception table or function. If preceeded by 20460 a `.handlerdata' directive then this also switched back to the 20461 previous text section. 20462 20463`.handlerdata' 20464 Marks the end of the current function, and the start of the 20465 exception table entry for that function. Anything between this 20466 directive and the `.endp' directive will be added to the exception 20467 table entry. 20468 20469 Must be preceded by a CFI block containing a `.cfi_lsda' directive. 20470 20471`.nocmp' 20472 Disallow use of C64x+ compact instructions in the current text 20473 section. 20474 20475`.personalityindex INDEX' 20476 Sets the personality routine for the current function to the ABI 20477 specified compact routine number INDEX 20478 20479`.personality NAME' 20480 Sets the personality routine for the current function to NAME. 20481 20482`.scomm SYMBOL, SIZE, ALIGN' 20483 Like `.comm', creating a common symbol SYMBOL with size SIZE and 20484 alignment ALIGN, but unlike when using `.comm', this symbol will 20485 be placed into the small BSS section by the linker. 20486 20487 20488 20489File: as.info, Node: TILE-Gx-Dependent, Next: TILEPro-Dependent, Prev: TIC6X-Dependent, Up: Machine Dependencies 20490 204919.45 TILE-Gx Dependent Features 20492=============================== 20493 20494* Menu: 20495 20496* TILE-Gx Options:: TILE-Gx Options 20497* TILE-Gx Syntax:: TILE-Gx Syntax 20498* TILE-Gx Directives:: TILE-Gx Directives 20499 20500 20501File: as.info, Node: TILE-Gx Options, Next: TILE-Gx Syntax, Up: TILE-Gx-Dependent 20502 205039.45.1 Options 20504-------------- 20505 20506The following table lists all available TILE-Gx specific options: 20507 20508`-m32 | -m64' 20509 Select the word size, either 32 bits or 64 bits. 20510 20511`-EB | -EL' 20512 Select the endianness, either big-endian (-EB) or little-endian 20513 (-EL). 20514 20515 20516 20517File: as.info, Node: TILE-Gx Syntax, Next: TILE-Gx Directives, Prev: TILE-Gx Options, Up: TILE-Gx-Dependent 20518 205199.45.2 Syntax 20520------------- 20521 20522Block comments are delimited by `/*' and `*/'. End of line comments 20523may be introduced by `#'. 20524 20525 Instructions consist of a leading opcode or macro name followed by 20526whitespace and an optional comma-separated list of operands: 20527 20528 OPCODE [OPERAND, ...] 20529 20530 Instructions must be separated by a newline or semicolon. 20531 20532 There are two ways to write code: either write naked instructions, 20533which the assembler is free to combine into VLIW bundles, or specify 20534the VLIW bundles explicitly. 20535 20536 Bundles are specified using curly braces: 20537 20538 { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 } 20539 20540 A bundle can span multiple lines. If you want to put multiple 20541instructions on a line, whether in a bundle or not, you need to 20542separate them with semicolons as in this example. 20543 20544 A bundle may contain one or more instructions, up to the limit 20545specified by the ISA (currently three). If fewer instructions are 20546specified than the hardware supports in a bundle, the assembler inserts 20547`fnop' instructions automatically. 20548 20549 The assembler will prefer to preserve the ordering of instructions 20550within the bundle, putting the first instruction in a lower-numbered 20551pipeline than the next one, etc. This fact, combined with the optional 20552use of explicit `fnop' or `nop' instructions, allows precise control 20553over which pipeline executes each instruction. 20554 20555 If the instructions cannot be bundled in the listed order, the 20556assembler will automatically try to find a valid pipeline assignment. 20557If there is no way to bundle the instructions together, the assembler 20558reports an error. 20559 20560 The assembler does not yet auto-bundle (automatically combine 20561multiple instructions into one bundle), but it reserves the right to do 20562so in the future. If you want to force an instruction to run by 20563itself, put it in a bundle explicitly with curly braces and use `nop' 20564instructions (not `fnop') to fill the remaining pipeline slots in that 20565bundle. 20566 20567* Menu: 20568 20569* TILE-Gx Opcodes:: Opcode Naming Conventions. 20570* TILE-Gx Registers:: Register Naming. 20571* TILE-Gx Modifiers:: Symbolic Operand Modifiers. 20572 20573 20574File: as.info, Node: TILE-Gx Opcodes, Next: TILE-Gx Registers, Up: TILE-Gx Syntax 20575 205769.45.2.1 Opcode Names 20577..................... 20578 20579For a complete list of opcodes and descriptions of their semantics, see 20580`TILE-Gx Instruction Set Architecture', available upon request at 20581www.tilera.com. 20582 20583 20584File: as.info, Node: TILE-Gx Registers, Next: TILE-Gx Modifiers, Prev: TILE-Gx Opcodes, Up: TILE-Gx Syntax 20585 205869.45.2.2 Register Names 20587....................... 20588 20589General-purpose registers are represented by predefined symbols of the 20590form `rN', where N represents a number between `0' and `63'. However, 20591the following registers have canonical names that must be used instead: 20592 20593`r54' 20594 sp 20595 20596`r55' 20597 lr 20598 20599`r56' 20600 sn 20601 20602`r57' 20603 idn0 20604 20605`r58' 20606 idn1 20607 20608`r59' 20609 udn0 20610 20611`r60' 20612 udn1 20613 20614`r61' 20615 udn2 20616 20617`r62' 20618 udn3 20619 20620`r63' 20621 zero 20622 20623 20624 The assembler will emit a warning if a numeric name is used instead 20625of the non-numeric name. The `.no_require_canonical_reg_names' 20626assembler pseudo-op turns off this warning. 20627`.require_canonical_reg_names' turns it back on. 20628 20629 20630File: as.info, Node: TILE-Gx Modifiers, Prev: TILE-Gx Registers, Up: TILE-Gx Syntax 20631 206329.45.2.3 Symbolic Operand Modifiers 20633................................... 20634 20635The assembler supports several modifiers when using symbol addresses in 20636TILE-Gx instruction operands. The general syntax is the following: 20637 20638 modifier(symbol) 20639 20640 The following modifiers are supported: 20641 20642`hw0' 20643 This modifier is used to load bits 0-15 of the symbol's address. 20644 20645`hw1' 20646 This modifier is used to load bits 16-31 of the symbol's address. 20647 20648`hw2' 20649 This modifier is used to load bits 32-47 of the symbol's address. 20650 20651`hw3' 20652 This modifier is used to load bits 48-63 of the symbol's address. 20653 20654`hw0_last' 20655 This modifier yields the same value as `hw0', but it also checks 20656 that the value does not overflow. 20657 20658`hw1_last' 20659 This modifier yields the same value as `hw1', but it also checks 20660 that the value does not overflow. 20661 20662`hw2_last' 20663 This modifier yields the same value as `hw2', but it also checks 20664 that the value does not overflow. 20665 20666 A 48-bit symbolic value is constructed by using the following 20667 idiom: 20668 20669 moveli r0, hw2_last(sym) 20670 shl16insli r0, r0, hw1(sym) 20671 shl16insli r0, r0, hw0(sym) 20672 20673`hw0_got' 20674 This modifier is used to load bits 0-15 of the symbol's offset in 20675 the GOT entry corresponding to the symbol. 20676 20677`hw0_last_got' 20678 This modifier yields the same value as `hw0_got', but it also 20679 checks that the value does not overflow. 20680 20681`hw1_last_got' 20682 This modifier is used to load bits 16-31 of the symbol's offset in 20683 the GOT entry corresponding to the symbol, and it also checks that 20684 the value does not overflow. 20685 20686`plt' 20687 This modifier is used for function symbols. It causes a 20688 _procedure linkage table_, an array of code stubs, to be created 20689 at the time the shared object is created or linked against, 20690 together with a global offset table entry. The value is a 20691 pc-relative offset to the corresponding stub code in the procedure 20692 linkage table. This arrangement causes the run-time symbol 20693 resolver to be called to look up and set the value of the symbol 20694 the first time the function is called (at latest; depending 20695 environment variables). It is only safe to leave the symbol 20696 unresolved this way if all references are function calls. 20697 20698`hw0_plt' 20699 This modifier is used to load bits 0-15 of the pc-relative address 20700 of a plt entry. 20701 20702`hw1_plt' 20703 This modifier is used to load bits 16-31 of the pc-relative 20704 address of a plt entry. 20705 20706`hw1_last_plt' 20707 This modifier yields the same value as `hw1_plt', but it also 20708 checks that the value does not overflow. 20709 20710`hw2_last_plt' 20711 This modifier is used to load bits 32-47 of the pc-relative 20712 address of a plt entry, and it also checks that the value does not 20713 overflow. 20714 20715`hw0_tls_gd' 20716 This modifier is used to load bits 0-15 of the offset of the GOT 20717 entry of the symbol's TLS descriptor, to be used for 20718 general-dynamic TLS accesses. 20719 20720`hw0_last_tls_gd' 20721 This modifier yields the same value as `hw0_tls_gd', but it also 20722 checks that the value does not overflow. 20723 20724`hw1_last_tls_gd' 20725 This modifier is used to load bits 16-31 of the offset of the GOT 20726 entry of the symbol's TLS descriptor, to be used for 20727 general-dynamic TLS accesses. It also checks that the value does 20728 not overflow. 20729 20730`hw0_tls_ie' 20731 This modifier is used to load bits 0-15 of the offset of the GOT 20732 entry containing the offset of the symbol's address from the TCB, 20733 to be used for initial-exec TLS accesses. 20734 20735`hw0_last_tls_ie' 20736 This modifier yields the same value as `hw0_tls_ie', but it also 20737 checks that the value does not overflow. 20738 20739`hw1_last_tls_ie' 20740 This modifier is used to load bits 16-31 of the offset of the GOT 20741 entry containing the offset of the symbol's address from the TCB, 20742 to be used for initial-exec TLS accesses. It also checks that the 20743 value does not overflow. 20744 20745`hw0_tls_le' 20746 This modifier is used to load bits 0-15 of the offset of the 20747 symbol's address from the TCB, to be used for local-exec TLS 20748 accesses. 20749 20750`hw0_last_tls_le' 20751 This modifier yields the same value as `hw0_tls_le', but it also 20752 checks that the value does not overflow. 20753 20754`hw1_last_tls_le' 20755 This modifier is used to load bits 16-31 of the offset of the 20756 symbol's address from the TCB, to be used for local-exec TLS 20757 accesses. It also checks that the value does not overflow. 20758 20759`tls_gd_call' 20760 This modifier is used to tag an instrution as the "call" part of a 20761 calling sequence for a TLS GD reference of its operand. 20762 20763`tls_gd_add' 20764 This modifier is used to tag an instruction as the "add" part of a 20765 calling sequence for a TLS GD reference of its operand. 20766 20767`tls_ie_load' 20768 This modifier is used to tag an instruction as the "load" part of a 20769 calling sequence for a TLS IE reference of its operand. 20770 20771 20772 20773File: as.info, Node: TILE-Gx Directives, Prev: TILE-Gx Syntax, Up: TILE-Gx-Dependent 20774 207759.45.3 TILE-Gx Directives 20776------------------------- 20777 20778`.align EXPRESSION [, EXPRESSION]' 20779 This is the generic .ALIGN directive. The first argument is the 20780 requested alignment in bytes. 20781 20782`.allow_suspicious_bundles' 20783 Turns on error checking for combinations of instructions in a 20784 bundle that probably indicate a programming error. This is on by 20785 default. 20786 20787`.no_allow_suspicious_bundles' 20788 Turns off error checking for combinations of instructions in a 20789 bundle that probably indicate a programming error. 20790 20791`.require_canonical_reg_names' 20792 Require that canonical register names be used, and emit a warning 20793 if the numeric names are used. This is on by default. 20794 20795`.no_require_canonical_reg_names' 20796 Permit the use of numeric names for registers that have canonical 20797 names. 20798 20799 20800 20801File: as.info, Node: TILEPro-Dependent, Next: V850-Dependent, Prev: TILE-Gx-Dependent, Up: Machine Dependencies 20802 208039.46 TILEPro Dependent Features 20804=============================== 20805 20806* Menu: 20807 20808* TILEPro Options:: TILEPro Options 20809* TILEPro Syntax:: TILEPro Syntax 20810* TILEPro Directives:: TILEPro Directives 20811 20812 20813File: as.info, Node: TILEPro Options, Next: TILEPro Syntax, Up: TILEPro-Dependent 20814 208159.46.1 Options 20816-------------- 20817 20818`as' has no machine-dependent command-line options for TILEPro. 20819 20820 20821File: as.info, Node: TILEPro Syntax, Next: TILEPro Directives, Prev: TILEPro Options, Up: TILEPro-Dependent 20822 208239.46.2 Syntax 20824------------- 20825 20826Block comments are delimited by `/*' and `*/'. End of line comments 20827may be introduced by `#'. 20828 20829 Instructions consist of a leading opcode or macro name followed by 20830whitespace and an optional comma-separated list of operands: 20831 20832 OPCODE [OPERAND, ...] 20833 20834 Instructions must be separated by a newline or semicolon. 20835 20836 There are two ways to write code: either write naked instructions, 20837which the assembler is free to combine into VLIW bundles, or specify 20838the VLIW bundles explicitly. 20839 20840 Bundles are specified using curly braces: 20841 20842 { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 } 20843 20844 A bundle can span multiple lines. If you want to put multiple 20845instructions on a line, whether in a bundle or not, you need to 20846separate them with semicolons as in this example. 20847 20848 A bundle may contain one or more instructions, up to the limit 20849specified by the ISA (currently three). If fewer instructions are 20850specified than the hardware supports in a bundle, the assembler inserts 20851`fnop' instructions automatically. 20852 20853 The assembler will prefer to preserve the ordering of instructions 20854within the bundle, putting the first instruction in a lower-numbered 20855pipeline than the next one, etc. This fact, combined with the optional 20856use of explicit `fnop' or `nop' instructions, allows precise control 20857over which pipeline executes each instruction. 20858 20859 If the instructions cannot be bundled in the listed order, the 20860assembler will automatically try to find a valid pipeline assignment. 20861If there is no way to bundle the instructions together, the assembler 20862reports an error. 20863 20864 The assembler does not yet auto-bundle (automatically combine 20865multiple instructions into one bundle), but it reserves the right to do 20866so in the future. If you want to force an instruction to run by 20867itself, put it in a bundle explicitly with curly braces and use `nop' 20868instructions (not `fnop') to fill the remaining pipeline slots in that 20869bundle. 20870 20871* Menu: 20872 20873* TILEPro Opcodes:: Opcode Naming Conventions. 20874* TILEPro Registers:: Register Naming. 20875* TILEPro Modifiers:: Symbolic Operand Modifiers. 20876 20877 20878File: as.info, Node: TILEPro Opcodes, Next: TILEPro Registers, Up: TILEPro Syntax 20879 208809.46.2.1 Opcode Names 20881..................... 20882 20883For a complete list of opcodes and descriptions of their semantics, see 20884`TILE Processor User Architecture Manual', available upon request at 20885www.tilera.com. 20886 20887 20888File: as.info, Node: TILEPro Registers, Next: TILEPro Modifiers, Prev: TILEPro Opcodes, Up: TILEPro Syntax 20889 208909.46.2.2 Register Names 20891....................... 20892 20893General-purpose registers are represented by predefined symbols of the 20894form `rN', where N represents a number between `0' and `63'. However, 20895the following registers have canonical names that must be used instead: 20896 20897`r54' 20898 sp 20899 20900`r55' 20901 lr 20902 20903`r56' 20904 sn 20905 20906`r57' 20907 idn0 20908 20909`r58' 20910 idn1 20911 20912`r59' 20913 udn0 20914 20915`r60' 20916 udn1 20917 20918`r61' 20919 udn2 20920 20921`r62' 20922 udn3 20923 20924`r63' 20925 zero 20926 20927 20928 The assembler will emit a warning if a numeric name is used instead 20929of the canonical name. The `.no_require_canonical_reg_names' assembler 20930pseudo-op turns off this warning. `.require_canonical_reg_names' turns 20931it back on. 20932 20933 20934File: as.info, Node: TILEPro Modifiers, Prev: TILEPro Registers, Up: TILEPro Syntax 20935 209369.46.2.3 Symbolic Operand Modifiers 20937................................... 20938 20939The assembler supports several modifiers when using symbol addresses in 20940TILEPro instruction operands. The general syntax is the following: 20941 20942 modifier(symbol) 20943 20944 The following modifiers are supported: 20945 20946`lo16' 20947 This modifier is used to load the low 16 bits of the symbol's 20948 address, sign-extended to a 32-bit value (sign-extension allows it 20949 to be range-checked against signed 16 bit immediate operands 20950 without complaint). 20951 20952`hi16' 20953 This modifier is used to load the high 16 bits of the symbol's 20954 address, also sign-extended to a 32-bit value. 20955 20956`ha16' 20957 `ha16(N)' is identical to `hi16(N)', except if `lo16(N)' is 20958 negative it adds one to the `hi16(N)' value. This way `lo16' and 20959 `ha16' can be added to create any 32-bit value using `auli'. For 20960 example, here is how you move an arbitrary 32-bit address into r3: 20961 20962 moveli r3, lo16(sym) 20963 auli r3, r3, ha16(sym) 20964 20965`got' 20966 This modifier is used to load the offset of the GOT entry 20967 corresponding to the symbol. 20968 20969`got_lo16' 20970 This modifier is used to load the sign-extended low 16 bits of the 20971 offset of the GOT entry corresponding to the symbol. 20972 20973`got_hi16' 20974 This modifier is used to load the sign-extended high 16 bits of the 20975 offset of the GOT entry corresponding to the symbol. 20976 20977`got_ha16' 20978 This modifier is like `got_hi16', but it adds one if `got_lo16' of 20979 the input value is negative. 20980 20981`plt' 20982 This modifier is used for function symbols. It causes a 20983 _procedure linkage table_, an array of code stubs, to be created 20984 at the time the shared object is created or linked against, 20985 together with a global offset table entry. The value is a 20986 pc-relative offset to the corresponding stub code in the procedure 20987 linkage table. This arrangement causes the run-time symbol 20988 resolver to be called to look up and set the value of the symbol 20989 the first time the function is called (at latest; depending 20990 environment variables). It is only safe to leave the symbol 20991 unresolved this way if all references are function calls. 20992 20993`tls_gd' 20994 This modifier is used to load the offset of the GOT entry of the 20995 symbol's TLS descriptor, to be used for general-dynamic TLS 20996 accesses. 20997 20998`tls_gd_lo16' 20999 This modifier is used to load the sign-extended low 16 bits of the 21000 offset of the GOT entry of the symbol's TLS descriptor, to be used 21001 for general dynamic TLS accesses. 21002 21003`tls_gd_hi16' 21004 This modifier is used to load the sign-extended high 16 bits of the 21005 offset of the GOT entry of the symbol's TLS descriptor, to be used 21006 for general dynamic TLS accesses. 21007 21008`tls_gd_ha16' 21009 This modifier is like `tls_gd_hi16', but it adds one to the value 21010 if `tls_gd_lo16' of the input value is negative. 21011 21012`tls_ie' 21013 This modifier is used to load the offset of the GOT entry 21014 containing the offset of the symbol's address from the TCB, to be 21015 used for initial-exec TLS accesses. 21016 21017`tls_ie_lo16' 21018 This modifier is used to load the low 16 bits of the offset of the 21019 GOT entry containing the offset of the symbol's address from the 21020 TCB, to be used for initial-exec TLS accesses. 21021 21022`tls_ie_hi16' 21023 This modifier is used to load the high 16 bits of the offset of the 21024 GOT entry containing the offset of the symbol's address from the 21025 TCB, to be used for initial-exec TLS accesses. 21026 21027`tls_ie_ha16' 21028 This modifier is like `tls_ie_hi16', but it adds one to the value 21029 if `tls_ie_lo16' of the input value is negative. 21030 21031`tls_le' 21032 This modifier is used to load the offset of the symbol's address 21033 from the TCB, to be used for local-exec TLS accesses. 21034 21035`tls_le_lo16' 21036 This modifier is used to load the low 16 bits of the offset of the 21037 symbol's address from the TCB, to be used for local-exec TLS 21038 accesses. 21039 21040`tls_le_hi16' 21041 This modifier is used to load the high 16 bits of the offset of the 21042 symbol's address from the TCB, to be used for local-exec TLS 21043 accesses. 21044 21045`tls_le_ha16' 21046 This modifier is like `tls_le_hi16', but it adds one to the value 21047 if `tls_le_lo16' of the input value is negative. 21048 21049`tls_gd_call' 21050 This modifier is used to tag an instrution as the "call" part of a 21051 calling sequence for a TLS GD reference of its operand. 21052 21053`tls_gd_add' 21054 This modifier is used to tag an instruction as the "add" part of a 21055 calling sequence for a TLS GD reference of its operand. 21056 21057`tls_ie_load' 21058 This modifier is used to tag an instruction as the "load" part of a 21059 calling sequence for a TLS IE reference of its operand. 21060 21061 21062 21063File: as.info, Node: TILEPro Directives, Prev: TILEPro Syntax, Up: TILEPro-Dependent 21064 210659.46.3 TILEPro Directives 21066------------------------- 21067 21068`.align EXPRESSION [, EXPRESSION]' 21069 This is the generic .ALIGN directive. The first argument is the 21070 requested alignment in bytes. 21071 21072`.allow_suspicious_bundles' 21073 Turns on error checking for combinations of instructions in a 21074 bundle that probably indicate a programming error. This is on by 21075 default. 21076 21077`.no_allow_suspicious_bundles' 21078 Turns off error checking for combinations of instructions in a 21079 bundle that probably indicate a programming error. 21080 21081`.require_canonical_reg_names' 21082 Require that canonical register names be used, and emit a warning 21083 if the numeric names are used. This is on by default. 21084 21085`.no_require_canonical_reg_names' 21086 Permit the use of numeric names for registers that have canonical 21087 names. 21088 21089 21090 21091File: as.info, Node: V850-Dependent, Next: Vax-Dependent, Prev: TILEPro-Dependent, Up: Machine Dependencies 21092 210939.47 v850 Dependent Features 21094============================ 21095 21096* Menu: 21097 21098* V850 Options:: Options 21099* V850 Syntax:: Syntax 21100* V850 Floating Point:: Floating Point 21101* V850 Directives:: V850 Machine Directives 21102* V850 Opcodes:: Opcodes 21103 21104 21105File: as.info, Node: V850 Options, Next: V850 Syntax, Up: V850-Dependent 21106 211079.47.1 Options 21108-------------- 21109 21110`as' supports the following additional command-line options for the 21111V850 processor family: 21112 21113`-wsigned_overflow' 21114 Causes warnings to be produced when signed immediate values 21115 overflow the space available for then within their opcodes. By 21116 default this option is disabled as it is possible to receive 21117 spurious warnings due to using exact bit patterns as immediate 21118 constants. 21119 21120`-wunsigned_overflow' 21121 Causes warnings to be produced when unsigned immediate values 21122 overflow the space available for then within their opcodes. By 21123 default this option is disabled as it is possible to receive 21124 spurious warnings due to using exact bit patterns as immediate 21125 constants. 21126 21127`-mv850' 21128 Specifies that the assembled code should be marked as being 21129 targeted at the V850 processor. This allows the linker to detect 21130 attempts to link such code with code assembled for other 21131 processors. 21132 21133`-mv850e' 21134 Specifies that the assembled code should be marked as being 21135 targeted at the V850E processor. This allows the linker to detect 21136 attempts to link such code with code assembled for other 21137 processors. 21138 21139`-mv850e1' 21140 Specifies that the assembled code should be marked as being 21141 targeted at the V850E1 processor. This allows the linker to 21142 detect attempts to link such code with code assembled for other 21143 processors. 21144 21145`-mv850any' 21146 Specifies that the assembled code should be marked as being 21147 targeted at the V850 processor but support instructions that are 21148 specific to the extended variants of the process. This allows the 21149 production of binaries that contain target specific code, but 21150 which are also intended to be used in a generic fashion. For 21151 example libgcc.a contains generic routines used by the code 21152 produced by GCC for all versions of the v850 architecture, 21153 together with support routines only used by the V850E architecture. 21154 21155`-mv850e2' 21156 Specifies that the assembled code should be marked as being 21157 targeted at the V850E2 processor. This allows the linker to 21158 detect attempts to link such code with code assembled for other 21159 processors. 21160 21161`-mv850e2v3' 21162 Specifies that the assembled code should be marked as being 21163 targeted at the V850E2V3 processor. This allows the linker to 21164 detect attempts to link such code with code assembled for other 21165 processors. 21166 21167`-mv850e2v4' 21168 This is an alias for `-mv850e3v5'. 21169 21170`-mv850e3v5' 21171 Specifies that the assembled code should be marked as being 21172 targeted at the V850E3V5 processor. This allows the linker to 21173 detect attempts to link such code with code assembled for other 21174 processors. 21175 21176`-mrelax' 21177 Enables relaxation. This allows the .longcall and .longjump pseudo 21178 ops to be used in the assembler source code. These ops label 21179 sections of code which are either a long function call or a long 21180 branch. The assembler will then flag these sections of code and 21181 the linker will attempt to relax them. 21182 21183`-mgcc-abi' 21184 Marks the generated object file as supporting the old GCC ABI. 21185 21186`-mrh850-abi' 21187 Marks the generated object file as supporting the RH850 ABI. This 21188 is the default. 21189 21190`-m8byte-align' 21191 Marks the generated object file as supporting a maximum 64-bits of 21192 alignment for variables defined in the source code. 21193 21194`-m4byte-align' 21195 Marks the generated object file as supporting a maximum 32-bits of 21196 alignment for variables defined in the source code. This is the 21197 default. 21198 21199`-msoft-float' 21200 Marks the generated object file as not using any floating point 21201 instructions - and hence can be linked with other V850 binaries 21202 that do or do not use floating point. This is the default for 21203 binaries for architectures earlier than the `e2v3'. 21204 21205`-mhard-float' 21206 Marks the generated object file as one that uses floating point 21207 instructions - and hence can only be linked with other V850 21208 binaries that use the same kind of floating point instructions, or 21209 with binaries that do not use floating point at all. This is the 21210 default for binaries the `e2v3' and later architectures. 21211 21212 21213 21214File: as.info, Node: V850 Syntax, Next: V850 Floating Point, Prev: V850 Options, Up: V850-Dependent 21215 212169.47.2 Syntax 21217------------- 21218 21219* Menu: 21220 21221* V850-Chars:: Special Characters 21222* V850-Regs:: Register Names 21223 21224 21225File: as.info, Node: V850-Chars, Next: V850-Regs, Up: V850 Syntax 21226 212279.47.2.1 Special Characters 21228........................... 21229 21230`#' is the line comment character. If a `#' appears as the first 21231character of a line, the whole line is treated as a comment, but in 21232this case the line can also be a logical line number directive (*note 21233Comments::) or a preprocessor control command (*note Preprocessing::). 21234 21235 Two dashes (`--') can also be used to start a line comment. 21236 21237 The `;' character can be used to separate statements on the same 21238line. 21239 21240 21241File: as.info, Node: V850-Regs, Prev: V850-Chars, Up: V850 Syntax 21242 212439.47.2.2 Register Names 21244....................... 21245 21246`as' supports the following names for registers: 21247`general register 0' 21248 r0, zero 21249 21250`general register 1' 21251 r1 21252 21253`general register 2' 21254 r2, hp 21255 21256`general register 3' 21257 r3, sp 21258 21259`general register 4' 21260 r4, gp 21261 21262`general register 5' 21263 r5, tp 21264 21265`general register 6' 21266 r6 21267 21268`general register 7' 21269 r7 21270 21271`general register 8' 21272 r8 21273 21274`general register 9' 21275 r9 21276 21277`general register 10' 21278 r10 21279 21280`general register 11' 21281 r11 21282 21283`general register 12' 21284 r12 21285 21286`general register 13' 21287 r13 21288 21289`general register 14' 21290 r14 21291 21292`general register 15' 21293 r15 21294 21295`general register 16' 21296 r16 21297 21298`general register 17' 21299 r17 21300 21301`general register 18' 21302 r18 21303 21304`general register 19' 21305 r19 21306 21307`general register 20' 21308 r20 21309 21310`general register 21' 21311 r21 21312 21313`general register 22' 21314 r22 21315 21316`general register 23' 21317 r23 21318 21319`general register 24' 21320 r24 21321 21322`general register 25' 21323 r25 21324 21325`general register 26' 21326 r26 21327 21328`general register 27' 21329 r27 21330 21331`general register 28' 21332 r28 21333 21334`general register 29' 21335 r29 21336 21337`general register 30' 21338 r30, ep 21339 21340`general register 31' 21341 r31, lp 21342 21343`system register 0' 21344 eipc 21345 21346`system register 1' 21347 eipsw 21348 21349`system register 2' 21350 fepc 21351 21352`system register 3' 21353 fepsw 21354 21355`system register 4' 21356 ecr 21357 21358`system register 5' 21359 psw 21360 21361`system register 16' 21362 ctpc 21363 21364`system register 17' 21365 ctpsw 21366 21367`system register 18' 21368 dbpc 21369 21370`system register 19' 21371 dbpsw 21372 21373`system register 20' 21374 ctbp 21375 21376 21377File: as.info, Node: V850 Floating Point, Next: V850 Directives, Prev: V850 Syntax, Up: V850-Dependent 21378 213799.47.3 Floating Point 21380--------------------- 21381 21382The V850 family uses IEEE floating-point numbers. 21383 21384 21385File: as.info, Node: V850 Directives, Next: V850 Opcodes, Prev: V850 Floating Point, Up: V850-Dependent 21386 213879.47.4 V850 Machine Directives 21388------------------------------ 21389 21390`.offset <EXPRESSION>' 21391 Moves the offset into the current section to the specified amount. 21392 21393`.section "name", <type>' 21394 This is an extension to the standard .section directive. It sets 21395 the current section to be <type> and creates an alias for this 21396 section called "name". 21397 21398`.v850' 21399 Specifies that the assembled code should be marked as being 21400 targeted at the V850 processor. This allows the linker to detect 21401 attempts to link such code with code assembled for other 21402 processors. 21403 21404`.v850e' 21405 Specifies that the assembled code should be marked as being 21406 targeted at the V850E processor. This allows the linker to detect 21407 attempts to link such code with code assembled for other 21408 processors. 21409 21410`.v850e1' 21411 Specifies that the assembled code should be marked as being 21412 targeted at the V850E1 processor. This allows the linker to 21413 detect attempts to link such code with code assembled for other 21414 processors. 21415 21416`.v850e2' 21417 Specifies that the assembled code should be marked as being 21418 targeted at the V850E2 processor. This allows the linker to 21419 detect attempts to link such code with code assembled for other 21420 processors. 21421 21422`.v850e2v3' 21423 Specifies that the assembled code should be marked as being 21424 targeted at the V850E2V3 processor. This allows the linker to 21425 detect attempts to link such code with code assembled for other 21426 processors. 21427 21428`.v850e2v4' 21429 Specifies that the assembled code should be marked as being 21430 targeted at the V850E3V5 processor. This allows the linker to 21431 detect attempts to link such code with code assembled for other 21432 processors. 21433 21434`.v850e3v5' 21435 Specifies that the assembled code should be marked as being 21436 targeted at the V850E3V5 processor. This allows the linker to 21437 detect attempts to link such code with code assembled for other 21438 processors. 21439 21440 21441 21442File: as.info, Node: V850 Opcodes, Prev: V850 Directives, Up: V850-Dependent 21443 214449.47.5 Opcodes 21445-------------- 21446 21447`as' implements all the standard V850 opcodes. 21448 21449 `as' also implements the following pseudo ops: 21450 21451`hi0()' 21452 Computes the higher 16 bits of the given expression and stores it 21453 into the immediate operand field of the given instruction. For 21454 example: 21455 21456 `mulhi hi0(here - there), r5, r6' 21457 21458 computes the difference between the address of labels 'here' and 21459 'there', takes the upper 16 bits of this difference, shifts it 21460 down 16 bits and then multiplies it by the lower 16 bits in 21461 register 5, putting the result into register 6. 21462 21463`lo()' 21464 Computes the lower 16 bits of the given expression and stores it 21465 into the immediate operand field of the given instruction. For 21466 example: 21467 21468 `addi lo(here - there), r5, r6' 21469 21470 computes the difference between the address of labels 'here' and 21471 'there', takes the lower 16 bits of this difference and adds it to 21472 register 5, putting the result into register 6. 21473 21474`hi()' 21475 Computes the higher 16 bits of the given expression and then adds 21476 the value of the most significant bit of the lower 16 bits of the 21477 expression and stores the result into the immediate operand field 21478 of the given instruction. For example the following code can be 21479 used to compute the address of the label 'here' and store it into 21480 register 6: 21481 21482 `movhi hi(here), r0, r6' `movea lo(here), r6, r6' 21483 21484 The reason for this special behaviour is that movea performs a sign 21485 extension on its immediate operand. So for example if the address 21486 of 'here' was 0xFFFFFFFF then without the special behaviour of the 21487 hi() pseudo-op the movhi instruction would put 0xFFFF0000 into r6, 21488 then the movea instruction would takes its immediate operand, 21489 0xFFFF, sign extend it to 32 bits, 0xFFFFFFFF, and then add it 21490 into r6 giving 0xFFFEFFFF which is wrong (the fifth nibble is E). 21491 With the hi() pseudo op adding in the top bit of the lo() pseudo 21492 op, the movhi instruction actually stores 0 into r6 (0xFFFF + 1 = 21493 0x0000), so that the movea instruction stores 0xFFFFFFFF into r6 - 21494 the right value. 21495 21496`hilo()' 21497 Computes the 32 bit value of the given expression and stores it 21498 into the immediate operand field of the given instruction (which 21499 must be a mov instruction). For example: 21500 21501 `mov hilo(here), r6' 21502 21503 computes the absolute address of label 'here' and puts the result 21504 into register 6. 21505 21506`sdaoff()' 21507 Computes the offset of the named variable from the start of the 21508 Small Data Area (whoes address is held in register 4, the GP 21509 register) and stores the result as a 16 bit signed value in the 21510 immediate operand field of the given instruction. For example: 21511 21512 `ld.w sdaoff(_a_variable)[gp],r6' 21513 21514 loads the contents of the location pointed to by the label 21515 '_a_variable' into register 6, provided that the label is located 21516 somewhere within +/- 32K of the address held in the GP register. 21517 [Note the linker assumes that the GP register contains a fixed 21518 address set to the address of the label called '__gp'. This can 21519 either be set up automatically by the linker, or specifically set 21520 by using the `--defsym __gp=<value>' command line option]. 21521 21522`tdaoff()' 21523 Computes the offset of the named variable from the start of the 21524 Tiny Data Area (whoes address is held in register 30, the EP 21525 register) and stores the result as a 4,5, 7 or 8 bit unsigned 21526 value in the immediate operand field of the given instruction. 21527 For example: 21528 21529 `sld.w tdaoff(_a_variable)[ep],r6' 21530 21531 loads the contents of the location pointed to by the label 21532 '_a_variable' into register 6, provided that the label is located 21533 somewhere within +256 bytes of the address held in the EP 21534 register. [Note the linker assumes that the EP register contains 21535 a fixed address set to the address of the label called '__ep'. 21536 This can either be set up automatically by the linker, or 21537 specifically set by using the `--defsym __ep=<value>' command line 21538 option]. 21539 21540`zdaoff()' 21541 Computes the offset of the named variable from address 0 and 21542 stores the result as a 16 bit signed value in the immediate 21543 operand field of the given instruction. For example: 21544 21545 `movea zdaoff(_a_variable),zero,r6' 21546 21547 puts the address of the label '_a_variable' into register 6, 21548 assuming that the label is somewhere within the first 32K of 21549 memory. (Strictly speaking it also possible to access the last 21550 32K of memory as well, as the offsets are signed). 21551 21552`ctoff()' 21553 Computes the offset of the named variable from the start of the 21554 Call Table Area (whoes address is helg in system register 20, the 21555 CTBP register) and stores the result a 6 or 16 bit unsigned value 21556 in the immediate field of then given instruction or piece of data. 21557 For example: 21558 21559 `callt ctoff(table_func1)' 21560 21561 will put the call the function whoes address is held in the call 21562 table at the location labeled 'table_func1'. 21563 21564`.longcall `name'' 21565 Indicates that the following sequence of instructions is a long 21566 call to function `name'. The linker will attempt to shorten this 21567 call sequence if `name' is within a 22bit offset of the call. Only 21568 valid if the `-mrelax' command line switch has been enabled. 21569 21570`.longjump `name'' 21571 Indicates that the following sequence of instructions is a long 21572 jump to label `name'. The linker will attempt to shorten this code 21573 sequence if `name' is within a 22bit offset of the jump. Only 21574 valid if the `-mrelax' command line switch has been enabled. 21575 21576 21577 For information on the V850 instruction set, see `V850 Family 2157832-/16-Bit single-Chip Microcontroller Architecture Manual' from NEC. 21579Ltd. 21580 21581 21582File: as.info, Node: Vax-Dependent, Next: Visium-Dependent, Prev: V850-Dependent, Up: Machine Dependencies 21583 215849.48 VAX Dependent Features 21585=========================== 21586 21587* Menu: 21588 21589* VAX-Opts:: VAX Command-Line Options 21590* VAX-float:: VAX Floating Point 21591* VAX-directives:: Vax Machine Directives 21592* VAX-opcodes:: VAX Opcodes 21593* VAX-branch:: VAX Branch Improvement 21594* VAX-operands:: VAX Operands 21595* VAX-no:: Not Supported on VAX 21596* VAX-Syntax:: VAX Syntax 21597 21598 21599File: as.info, Node: VAX-Opts, Next: VAX-float, Up: Vax-Dependent 21600 216019.48.1 VAX Command-Line Options 21602------------------------------- 21603 21604The Vax version of `as' accepts any of the following options, gives a 21605warning message that the option was ignored and proceeds. These 21606options are for compatibility with scripts designed for other people's 21607assemblers. 21608 21609``-D' (Debug)' 21610``-S' (Symbol Table)' 21611``-T' (Token Trace)' 21612 These are obsolete options used to debug old assemblers. 21613 21614``-d' (Displacement size for JUMPs)' 21615 This option expects a number following the `-d'. Like options 21616 that expect filenames, the number may immediately follow the `-d' 21617 (old standard) or constitute the whole of the command line 21618 argument that follows `-d' (GNU standard). 21619 21620``-V' (Virtualize Interpass Temporary File)' 21621 Some other assemblers use a temporary file. This option commanded 21622 them to keep the information in active memory rather than in a 21623 disk file. `as' always does this, so this option is redundant. 21624 21625``-J' (JUMPify Longer Branches)' 21626 Many 32-bit computers permit a variety of branch instructions to 21627 do the same job. Some of these instructions are short (and fast) 21628 but have a limited range; others are long (and slow) but can 21629 branch anywhere in virtual memory. Often there are 3 flavors of 21630 branch: short, medium and long. Some other assemblers would emit 21631 short and medium branches, unless told by this option to emit 21632 short and long branches. 21633 21634``-t' (Temporary File Directory)' 21635 Some other assemblers may use a temporary file, and this option 21636 takes a filename being the directory to site the temporary file. 21637 Since `as' does not use a temporary disk file, this option makes 21638 no difference. `-t' needs exactly one filename. 21639 21640 The Vax version of the assembler accepts additional options when 21641compiled for VMS: 21642 21643`-h N' 21644 External symbol or section (used for global variables) names are 21645 not case sensitive on VAX/VMS and always mapped to upper case. 21646 This is contrary to the C language definition which explicitly 21647 distinguishes upper and lower case. To implement a standard 21648 conforming C compiler, names must be changed (mapped) to preserve 21649 the case information. The default mapping is to convert all lower 21650 case characters to uppercase and adding an underscore followed by 21651 a 6 digit hex value, representing a 24 digit binary value. The 21652 one digits in the binary value represent which characters are 21653 uppercase in the original symbol name. 21654 21655 The `-h N' option determines how we map names. This takes several 21656 values. No `-h' switch at all allows case hacking as described 21657 above. A value of zero (`-h0') implies names should be upper 21658 case, and inhibits the case hack. A value of 2 (`-h2') implies 21659 names should be all lower case, with no case hack. A value of 3 21660 (`-h3') implies that case should be preserved. The value 1 is 21661 unused. The `-H' option directs `as' to display every mapped 21662 symbol during assembly. 21663 21664 Symbols whose names include a dollar sign `$' are exceptions to the 21665 general name mapping. These symbols are normally only used to 21666 reference VMS library names. Such symbols are always mapped to 21667 upper case. 21668 21669`-+' 21670 The `-+' option causes `as' to truncate any symbol name larger 21671 than 31 characters. The `-+' option also prevents some code 21672 following the `_main' symbol normally added to make the object 21673 file compatible with Vax-11 "C". 21674 21675`-1' 21676 This option is ignored for backward compatibility with `as' 21677 version 1.x. 21678 21679`-H' 21680 The `-H' option causes `as' to print every symbol which was 21681 changed by case mapping. 21682 21683 21684File: as.info, Node: VAX-float, Next: VAX-directives, Prev: VAX-Opts, Up: Vax-Dependent 21685 216869.48.2 VAX Floating Point 21687------------------------- 21688 21689Conversion of flonums to floating point is correct, and compatible with 21690previous assemblers. Rounding is towards zero if the remainder is 21691exactly half the least significant bit. 21692 21693 `D', `F', `G' and `H' floating point formats are understood. 21694 21695 Immediate floating literals (_e.g._ `S`$6.9') are rendered 21696correctly. Again, rounding is towards zero in the boundary case. 21697 21698 The `.float' directive produces `f' format numbers. The `.double' 21699directive produces `d' format numbers. 21700 21701 21702File: as.info, Node: VAX-directives, Next: VAX-opcodes, Prev: VAX-float, Up: Vax-Dependent 21703 217049.48.3 Vax Machine Directives 21705----------------------------- 21706 21707The Vax version of the assembler supports four directives for 21708generating Vax floating point constants. They are described in the 21709table below. 21710 21711`.dfloat' 21712 This expects zero or more flonums, separated by commas, and 21713 assembles Vax `d' format 64-bit floating point constants. 21714 21715`.ffloat' 21716 This expects zero or more flonums, separated by commas, and 21717 assembles Vax `f' format 32-bit floating point constants. 21718 21719`.gfloat' 21720 This expects zero or more flonums, separated by commas, and 21721 assembles Vax `g' format 64-bit floating point constants. 21722 21723`.hfloat' 21724 This expects zero or more flonums, separated by commas, and 21725 assembles Vax `h' format 128-bit floating point constants. 21726 21727 21728 21729File: as.info, Node: VAX-opcodes, Next: VAX-branch, Prev: VAX-directives, Up: Vax-Dependent 21730 217319.48.4 VAX Opcodes 21732------------------ 21733 21734All DEC mnemonics are supported. Beware that `case...' instructions 21735have exactly 3 operands. The dispatch table that follows the `case...' 21736instruction should be made with `.word' statements. This is compatible 21737with all unix assemblers we know of. 21738 21739 21740File: as.info, Node: VAX-branch, Next: VAX-operands, Prev: VAX-opcodes, Up: Vax-Dependent 21741 217429.48.5 VAX Branch Improvement 21743----------------------------- 21744 21745Certain pseudo opcodes are permitted. They are for branch 21746instructions. They expand to the shortest branch instruction that 21747reaches the target. Generally these mnemonics are made by substituting 21748`j' for `b' at the start of a DEC mnemonic. This feature is included 21749both for compatibility and to help compilers. If you do not need this 21750feature, avoid these opcodes. Here are the mnemonics, and the code 21751they can expand into. 21752 21753`jbsb' 21754 `Jsb' is already an instruction mnemonic, so we chose `jbsb'. 21755 (byte displacement) 21756 `bsbb ...' 21757 21758 (word displacement) 21759 `bsbw ...' 21760 21761 (long displacement) 21762 `jsb ...' 21763 21764`jbr' 21765`jr' 21766 Unconditional branch. 21767 (byte displacement) 21768 `brb ...' 21769 21770 (word displacement) 21771 `brw ...' 21772 21773 (long displacement) 21774 `jmp ...' 21775 21776`jCOND' 21777 COND may be any one of the conditional branches `neq', `nequ', 21778 `eql', `eqlu', `gtr', `geq', `lss', `gtru', `lequ', `vc', `vs', 21779 `gequ', `cc', `lssu', `cs'. COND may also be one of the bit tests 21780 `bs', `bc', `bss', `bcs', `bsc', `bcc', `bssi', `bcci', `lbs', 21781 `lbc'. NOTCOND is the opposite condition to COND. 21782 (byte displacement) 21783 `bCOND ...' 21784 21785 (word displacement) 21786 `bNOTCOND foo ; brw ... ; foo:' 21787 21788 (long displacement) 21789 `bNOTCOND foo ; jmp ... ; foo:' 21790 21791`jacbX' 21792 X may be one of `b d f g h l w'. 21793 (word displacement) 21794 `OPCODE ...' 21795 21796 (long displacement) 21797 OPCODE ..., foo ; 21798 brb bar ; 21799 foo: jmp ... ; 21800 bar: 21801 21802`jaobYYY' 21803 YYY may be one of `lss leq'. 21804 21805`jsobZZZ' 21806 ZZZ may be one of `geq gtr'. 21807 (byte displacement) 21808 `OPCODE ...' 21809 21810 (word displacement) 21811 OPCODE ..., foo ; 21812 brb bar ; 21813 foo: brw DESTINATION ; 21814 bar: 21815 21816 (long displacement) 21817 OPCODE ..., foo ; 21818 brb bar ; 21819 foo: jmp DESTINATION ; 21820 bar: 21821 21822`aobleq' 21823`aoblss' 21824`sobgeq' 21825`sobgtr' 21826 21827 (byte displacement) 21828 `OPCODE ...' 21829 21830 (word displacement) 21831 OPCODE ..., foo ; 21832 brb bar ; 21833 foo: brw DESTINATION ; 21834 bar: 21835 21836 (long displacement) 21837 OPCODE ..., foo ; 21838 brb bar ; 21839 foo: jmp DESTINATION ; 21840 bar: 21841 21842 21843File: as.info, Node: VAX-operands, Next: VAX-no, Prev: VAX-branch, Up: Vax-Dependent 21844 218459.48.6 VAX Operands 21846------------------- 21847 21848The immediate character is `$' for Unix compatibility, not `#' as DEC 21849writes it. 21850 21851 The indirect character is `*' for Unix compatibility, not `@' as DEC 21852writes it. 21853 21854 The displacement sizing character is ``' (an accent grave) for Unix 21855compatibility, not `^' as DEC writes it. The letter preceding ``' may 21856have either case. `G' is not understood, but all other letters (`b i l 21857s w') are understood. 21858 21859 Register names understood are `r0 r1 r2 ... r15 ap fp sp pc'. Upper 21860and lower case letters are equivalent. 21861 21862 For instance 21863 tstb *w`$4(r5) 21864 21865 Any expression is permitted in an operand. Operands are comma 21866separated. 21867 21868 21869File: as.info, Node: VAX-no, Next: VAX-Syntax, Prev: VAX-operands, Up: Vax-Dependent 21870 218719.48.7 Not Supported on VAX 21872--------------------------- 21873 21874Vax bit fields can not be assembled with `as'. Someone can add the 21875required code if they really need it. 21876 21877 21878File: as.info, Node: VAX-Syntax, Prev: VAX-no, Up: Vax-Dependent 21879 218809.48.8 VAX Syntax 21881----------------- 21882 21883* Menu: 21884 21885* VAX-Chars:: Special Characters 21886 21887 21888File: as.info, Node: VAX-Chars, Up: VAX-Syntax 21889 218909.48.8.1 Special Characters 21891........................... 21892 21893The presence of a `#' appearing anywhere on a line indicates the start 21894of a comment that extends to the end of that line. 21895 21896 If a `#' appears as the first character of a line then the whole 21897line is treated as a comment, but in this case the line can also be a 21898logical line number directive (*note Comments::) or a preprocessor 21899control command (*note Preprocessing::). 21900 21901 The `;' character can be used to separate statements on the same 21902line. 21903 21904 21905File: as.info, Node: Visium-Dependent, Next: XGATE-Dependent, Prev: Vax-Dependent, Up: Machine Dependencies 21906 219079.49 Visium Dependent Features 21908============================== 21909 21910* Menu: 21911 21912* Visium Options:: Options 21913* Visium Syntax:: Syntax 21914* Visium Opcodes:: Opcodes 21915 21916 21917File: as.info, Node: Visium Options, Next: Visium Syntax, Up: Visium-Dependent 21918 219199.49.1 Options 21920-------------- 21921 21922The Visium assembler implements one machine-specific option: 21923 21924`-mtune=ARCH' 21925 This option specifies the target architecture. If an attempt is 21926 made to assemble an instruction that will not execute on the 21927 target architecture, the assembler will issue an error message. 21928 21929 The following names are recognized: `mcm24' `mcm' `gr5' `gr6' 21930 21931 21932File: as.info, Node: Visium Syntax, Next: Visium Opcodes, Prev: Visium Options, Up: Visium-Dependent 21933 219349.49.2 Syntax 21935------------- 21936 21937* Menu: 21938 21939* Visium Characters:: Special Characters 21940* Visium Registers:: Register Names 21941 21942 21943File: as.info, Node: Visium Characters, Next: Visium Registers, Up: Visium Syntax 21944 219459.49.2.1 Special Characters 21946........................... 21947 21948Line comments are introduced either by the `!' character or by the `;' 21949character appearing anywhere on a line. 21950 21951 A hash character (`#') as the first character on a line also marks 21952the start of a line comment, but in this case it could also be a 21953logical line number directive (*note Comments::) or a preprocessor 21954control command (*note Preprocessing::). 21955 21956 The Visium assembler does not currently support a line separator 21957character. 21958 21959 21960File: as.info, Node: Visium Registers, Prev: Visium Characters, Up: Visium Syntax 21961 219629.49.2.2 Register Names 21963....................... 21964 21965Registers can be specified either by using their canonical mnemonic 21966names or by using their alias if they have one, for example `sp'. 21967 21968 21969File: as.info, Node: Visium Opcodes, Prev: Visium Syntax, Up: Visium-Dependent 21970 219719.49.3 Opcodes 21972-------------- 21973 21974All the standard opcodes of the architecture are implemented, along 21975with the following three pseudo-instructions: `cmp', `cmpc', `move'. 21976 21977 In addition, the following two illegal opcodes are implemented and 21978used by the simulation: 21979 21980 stop 5-bit immediate, SourceA 21981 trace 5-bit immediate, SourceA 21982 21983 21984File: as.info, Node: XGATE-Dependent, Next: XSTORMY16-Dependent, Prev: Visium-Dependent, Up: Machine Dependencies 21985 219869.50 XGATE Dependent Features 21987============================= 21988 21989* Menu: 21990 21991* XGATE-Opts:: XGATE Options 21992* XGATE-Syntax:: Syntax 21993* XGATE-Directives:: Assembler Directives 21994* XGATE-Float:: Floating Point 21995* XGATE-opcodes:: Opcodes 21996 21997 21998File: as.info, Node: XGATE-Opts, Next: XGATE-Syntax, Up: XGATE-Dependent 21999 220009.50.1 XGATE Options 22001-------------------- 22002 22003The Freescale XGATE version of `as' has a few machine dependent options. 22004 22005`-mshort' 22006 This option controls the ABI and indicates to use a 16-bit integer 22007 ABI. It has no effect on the assembled instructions. This is the 22008 default. 22009 22010`-mlong' 22011 This option controls the ABI and indicates to use a 32-bit integer 22012 ABI. 22013 22014`-mshort-double' 22015 This option controls the ABI and indicates to use a 32-bit float 22016 ABI. This is the default. 22017 22018`-mlong-double' 22019 This option controls the ABI and indicates to use a 64-bit float 22020 ABI. 22021 22022`--print-insn-syntax' 22023 You can use the `--print-insn-syntax' option to obtain the syntax 22024 description of the instruction when an error is detected. 22025 22026`--print-opcodes' 22027 The `--print-opcodes' option prints the list of all the 22028 instructions with their syntax. Once the list is printed `as' 22029 exits. 22030 22031 22032 22033File: as.info, Node: XGATE-Syntax, Next: XGATE-Directives, Prev: XGATE-Opts, Up: XGATE-Dependent 22034 220359.50.2 Syntax 22036------------- 22037 22038In XGATE RISC syntax, the instruction name comes first and it may be 22039followed by up to three operands. Operands are separated by commas 22040(`,'). `as' will complain if too many operands are specified for a 22041given instruction. The same will happen if you specified too few 22042operands. 22043 22044 nop 22045 ldl #23 22046 CMP R1, R2 22047 22048 The presence of a `;' character or a `!' character anywhere on a 22049line indicates the start of a comment that extends to the end of that 22050line. 22051 22052 A `*' or a `#' character at the start of a line also introduces a 22053line comment, but these characters do not work elsewhere on the line. 22054If the first character of the line is a `#' then as well as starting a 22055comment, the line could also be logical line number directive (*note 22056Comments::) or a preprocessor control command (*note Preprocessing::). 22057 22058 The XGATE assembler does not currently support a line separator 22059character. 22060 22061 The following addressing modes are understood for XGATE: 22062"Inherent" 22063 `' 22064 22065"Immediate 3 Bit Wide" 22066 `#NUMBER' 22067 22068"Immediate 4 Bit Wide" 22069 `#NUMBER' 22070 22071"Immediate 8 Bit Wide" 22072 `#NUMBER' 22073 22074"Monadic Addressing" 22075 `REG' 22076 22077"Dyadic Addressing" 22078 `REG, REG' 22079 22080"Triadic Addressing" 22081 `REG, REG, REG' 22082 22083"Relative Addressing 9 Bit Wide" 22084 `*SYMBOL' 22085 22086"Relative Addressing 10 Bit Wide" 22087 `*SYMBOL' 22088 22089"Index Register plus Immediate Offset" 22090 `REG, (REG, #NUMBER)' 22091 22092"Index Register plus Register Offset" 22093 `REG, REG, REG' 22094 22095"Index Register plus Register Offset with Post-increment" 22096 `REG, REG, REG+' 22097 22098"Index Register plus Register Offset with Pre-decrement" 22099 `REG, REG, -REG' 22100 22101 The register can be either `R0', `R1', `R2', `R3', `R4', `R5', 22102 `R6' or `R7'. 22103 22104 22105 Convience macro opcodes to deal with 16-bit values have been added. 22106 22107"Immediate 16 Bit Wide" 22108 `#NUMBER', or `*SYMBOL' 22109 22110 For example: 22111 22112 ldw R1, #1024 22113 ldw R3, timer 22114 ldw R1, (R1, #0) 22115 COM R1 22116 stw R2, (R1, #0) 22117 22118 22119File: as.info, Node: XGATE-Directives, Next: XGATE-Float, Prev: XGATE-Syntax, Up: XGATE-Dependent 22120 221219.50.3 Assembler Directives 22122--------------------------- 22123 22124The XGATE version of `as' have the following specific assembler 22125directives: 22126 22127 22128File: as.info, Node: XGATE-Float, Next: XGATE-opcodes, Prev: XGATE-Directives, Up: XGATE-Dependent 22129 221309.50.4 Floating Point 22131--------------------- 22132 22133Packed decimal (P) format floating literals are not supported(yet). 22134 22135 The floating point formats generated by directives are these. 22136 22137`.float' 22138 `Single' precision floating point constants. 22139 22140`.double' 22141 `Double' precision floating point constants. 22142 22143`.extend' 22144`.ldouble' 22145 `Extended' precision (`long double') floating point constants. 22146 22147 22148File: as.info, Node: XGATE-opcodes, Prev: XGATE-Float, Up: XGATE-Dependent 22149 221509.50.5 Opcodes 22151-------------- 22152 22153 22154File: as.info, Node: XSTORMY16-Dependent, Next: Xtensa-Dependent, Prev: XGATE-Dependent, Up: Machine Dependencies 22155 221569.51 XStormy16 Dependent Features 22157================================= 22158 22159* Menu: 22160 22161* XStormy16 Syntax:: Syntax 22162* XStormy16 Directives:: Machine Directives 22163* XStormy16 Opcodes:: Pseudo-Opcodes 22164 22165 22166File: as.info, Node: XStormy16 Syntax, Next: XStormy16 Directives, Up: XSTORMY16-Dependent 22167 221689.51.1 Syntax 22169------------- 22170 22171* Menu: 22172 22173* XStormy16-Chars:: Special Characters 22174 22175 22176File: as.info, Node: XStormy16-Chars, Up: XStormy16 Syntax 22177 221789.51.1.1 Special Characters 22179........................... 22180 22181`#' is the line comment character. If a `#' appears as the first 22182character of a line, the whole line is treated as a comment, but in 22183this case the line can also be a logical line number directive (*note 22184Comments::) or a preprocessor control command (*note Preprocessing::). 22185 22186 A semicolon (`;') can be used to start a comment that extends from 22187wherever the character appears on the line up to the end of the line. 22188 22189 The `|' character can be used to separate statements on the same 22190line. 22191 22192 22193File: as.info, Node: XStormy16 Directives, Next: XStormy16 Opcodes, Prev: XStormy16 Syntax, Up: XSTORMY16-Dependent 22194 221959.51.2 XStormy16 Machine Directives 22196----------------------------------- 22197 22198`.16bit_pointers' 22199 Like the `--16bit-pointers' command line option this directive 22200 indicates that the assembly code makes use of 16-bit pointers. 22201 22202`.32bit_pointers' 22203 Like the `--32bit-pointers' command line option this directive 22204 indicates that the assembly code makes use of 32-bit pointers. 22205 22206`.no_pointers' 22207 Like the `--no-pointers' command line option this directive 22208 indicates that the assembly code does not makes use pointers. 22209 22210 22211 22212File: as.info, Node: XStormy16 Opcodes, Prev: XStormy16 Directives, Up: XSTORMY16-Dependent 22213 222149.51.3 XStormy16 Pseudo-Opcodes 22215------------------------------- 22216 22217`as' implements all the standard XStormy16 opcodes. 22218 22219 `as' also implements the following pseudo ops: 22220 22221`@lo()' 22222 Computes the lower 16 bits of the given expression and stores it 22223 into the immediate operand field of the given instruction. For 22224 example: 22225 22226 `add r6, @lo(here - there)' 22227 22228 computes the difference between the address of labels 'here' and 22229 'there', takes the lower 16 bits of this difference and adds it to 22230 register 6. 22231 22232`@hi()' 22233 Computes the higher 16 bits of the given expression and stores it 22234 into the immediate operand field of the given instruction. For 22235 example: 22236 22237 `addc r7, @hi(here - there)' 22238 22239 computes the difference between the address of labels 'here' and 22240 'there', takes the upper 16 bits of this difference, shifts it 22241 down 16 bits and then adds it, along with the carry bit, to the 22242 value in register 7. 22243 22244 22245 22246File: as.info, Node: Xtensa-Dependent, Next: Z80-Dependent, Prev: XSTORMY16-Dependent, Up: Machine Dependencies 22247 222489.52 Xtensa Dependent Features 22249============================== 22250 22251 This chapter covers features of the GNU assembler that are specific 22252to the Xtensa architecture. For details about the Xtensa instruction 22253set, please consult the `Xtensa Instruction Set Architecture (ISA) 22254Reference Manual'. 22255 22256* Menu: 22257 22258* Xtensa Options:: Command-line Options. 22259* Xtensa Syntax:: Assembler Syntax for Xtensa Processors. 22260* Xtensa Optimizations:: Assembler Optimizations. 22261* Xtensa Relaxation:: Other Automatic Transformations. 22262* Xtensa Directives:: Directives for Xtensa Processors. 22263 22264 22265File: as.info, Node: Xtensa Options, Next: Xtensa Syntax, Up: Xtensa-Dependent 22266 222679.52.1 Command Line Options 22268--------------------------- 22269 22270`--text-section-literals | --no-text-section-literals' 22271 Control the treatment of literal pools. The default is 22272 `--no-text-section-literals', which places literals in separate 22273 sections in the output file. This allows the literal pool to be 22274 placed in a data RAM/ROM. With `--text-section-literals', the 22275 literals are interspersed in the text section in order to keep 22276 them as close as possible to their references. This may be 22277 necessary for large assembly files, where the literals would 22278 otherwise be out of range of the `L32R' instructions in the text 22279 section. Literals are grouped into pools following 22280 `.literal_position' directives or preceding `ENTRY' instructions. 22281 These options only affect literals referenced via PC-relative 22282 `L32R' instructions; literals for absolute mode `L32R' 22283 instructions are handled separately. *Note literal: Literal 22284 Directive. 22285 22286`--auto-litpools | --no-auto-litpools' 22287 Control the treatment of literal pools. The default is 22288 `--no-auto-litpools', which in the absence of 22289 `--text-section-literals' places literals in separate sections in 22290 the output file. This allows the literal pool to be placed in a 22291 data RAM/ROM. With `--auto-litpools', the literals are 22292 interspersed in the text section in order to keep them as close as 22293 possible to their references, explicit `.literal_position' 22294 directives are not required. This may be necessary for very large 22295 functions, where single literal pool at the beginning of the 22296 function may not be reachable by `L32R' instructions at the end. 22297 These options only affect literals referenced via PC-relative 22298 `L32R' instructions; literals for absolute mode `L32R' 22299 instructions are handled separately. When used together with 22300 `--text-section-literals', `--auto-litpools' takes precedence. 22301 *Note literal: Literal Directive. 22302 22303`--absolute-literals | --no-absolute-literals' 22304 Indicate to the assembler whether `L32R' instructions use absolute 22305 or PC-relative addressing. If the processor includes the absolute 22306 addressing option, the default is to use absolute `L32R' 22307 relocations. Otherwise, only the PC-relative `L32R' relocations 22308 can be used. 22309 22310`--target-align | --no-target-align' 22311 Enable or disable automatic alignment to reduce branch penalties 22312 at some expense in code size. *Note Automatic Instruction 22313 Alignment: Xtensa Automatic Alignment. This optimization is 22314 enabled by default. Note that the assembler will always align 22315 instructions like `LOOP' that have fixed alignment requirements. 22316 22317`--longcalls | --no-longcalls' 22318 Enable or disable transformation of call instructions to allow 22319 calls across a greater range of addresses. *Note Function Call 22320 Relaxation: Xtensa Call Relaxation. This option should be used 22321 when call targets can potentially be out of range. It may degrade 22322 both code size and performance, but the linker can generally 22323 optimize away the unnecessary overhead when a call ends up within 22324 range. The default is `--no-longcalls'. 22325 22326`--transform | --no-transform' 22327 Enable or disable all assembler transformations of Xtensa 22328 instructions, including both relaxation and optimization. The 22329 default is `--transform'; `--no-transform' should only be used in 22330 the rare cases when the instructions must be exactly as specified 22331 in the assembly source. Using `--no-transform' causes out of range 22332 instruction operands to be errors. 22333 22334`--rename-section OLDNAME=NEWNAME' 22335 Rename the OLDNAME section to NEWNAME. This option can be used 22336 multiple times to rename multiple sections. 22337 22338`--trampolines | --no-trampolines' 22339 Enable or disable transformation of jump instructions to allow 22340 jumps across a greater range of addresses. *Note Jump 22341 Trampolines: Xtensa Jump Relaxation. This option should be used 22342 when jump targets can potentially be out of range. In the absence 22343 of such jumps this option does not affect code size or 22344 performance. The default is `--trampolines'. 22345 22346 22347File: as.info, Node: Xtensa Syntax, Next: Xtensa Optimizations, Prev: Xtensa Options, Up: Xtensa-Dependent 22348 223499.52.2 Assembler Syntax 22350----------------------- 22351 22352Block comments are delimited by `/*' and `*/'. End of line comments 22353may be introduced with either `#' or `//'. 22354 22355 If a `#' appears as the first character of a line then the whole 22356line is treated as a comment, but in this case the line could also be a 22357logical line number directive (*note Comments::) or a preprocessor 22358control command (*note Preprocessing::). 22359 22360 Instructions consist of a leading opcode or macro name followed by 22361whitespace and an optional comma-separated list of operands: 22362 22363 OPCODE [OPERAND, ...] 22364 22365 Instructions must be separated by a newline or semicolon (`;'). 22366 22367 FLIX instructions, which bundle multiple opcodes together in a single 22368instruction, are specified by enclosing the bundled opcodes inside 22369braces: 22370 22371 { 22372 [FORMAT] 22373 OPCODE0 [OPERANDS] 22374 OPCODE1 [OPERANDS] 22375 OPCODE2 [OPERANDS] 22376 ... 22377 } 22378 22379 The opcodes in a FLIX instruction are listed in the same order as the 22380corresponding instruction slots in the TIE format declaration. 22381Directives and labels are not allowed inside the braces of a FLIX 22382instruction. A particular TIE format name can optionally be specified 22383immediately after the opening brace, but this is usually unnecessary. 22384The assembler will automatically search for a format that can encode the 22385specified opcodes, so the format name need only be specified in rare 22386cases where there is more than one applicable format and where it 22387matters which of those formats is used. A FLIX instruction can also be 22388specified on a single line by separating the opcodes with semicolons: 22389 22390 { [FORMAT;] OPCODE0 [OPERANDS]; OPCODE1 [OPERANDS]; OPCODE2 [OPERANDS]; ... } 22391 22392 If an opcode can only be encoded in a FLIX instruction but is not 22393specified as part of a FLIX bundle, the assembler will choose the 22394smallest format where the opcode can be encoded and will fill unused 22395instruction slots with no-ops. 22396 22397* Menu: 22398 22399* Xtensa Opcodes:: Opcode Naming Conventions. 22400* Xtensa Registers:: Register Naming. 22401 22402 22403File: as.info, Node: Xtensa Opcodes, Next: Xtensa Registers, Up: Xtensa Syntax 22404 224059.52.2.1 Opcode Names 22406..................... 22407 22408See the `Xtensa Instruction Set Architecture (ISA) Reference Manual' 22409for a complete list of opcodes and descriptions of their semantics. 22410 22411 If an opcode name is prefixed with an underscore character (`_'), 22412`as' will not transform that instruction in any way. The underscore 22413prefix disables both optimization (*note Xtensa Optimizations: Xtensa 22414Optimizations.) and relaxation (*note Xtensa Relaxation: Xtensa 22415Relaxation.) for that particular instruction. Only use the underscore 22416prefix when it is essential to select the exact opcode produced by the 22417assembler. Using this feature unnecessarily makes the code less 22418efficient by disabling assembler optimization and less flexible by 22419disabling relaxation. 22420 22421 Note that this special handling of underscore prefixes only applies 22422to Xtensa opcodes, not to either built-in macros or user-defined macros. 22423When an underscore prefix is used with a macro (e.g., `_MOV'), it 22424refers to a different macro. The assembler generally provides built-in 22425macros both with and without the underscore prefix, where the underscore 22426versions behave as if the underscore carries through to the instructions 22427in the macros. For example, `_MOV' may expand to `_MOV.N'. 22428 22429 The underscore prefix only applies to individual instructions, not to 22430series of instructions. For example, if a series of instructions have 22431underscore prefixes, the assembler will not transform the individual 22432instructions, but it may insert other instructions between them (e.g., 22433to align a `LOOP' instruction). To prevent the assembler from 22434modifying a series of instructions as a whole, use the `no-transform' 22435directive. *Note transform: Transform Directive. 22436 22437 22438File: as.info, Node: Xtensa Registers, Prev: Xtensa Opcodes, Up: Xtensa Syntax 22439 224409.52.2.2 Register Names 22441....................... 22442 22443The assembly syntax for a register file entry is the "short" name for a 22444TIE register file followed by the index into that register file. For 22445example, the general-purpose `AR' register file has a short name of 22446`a', so these registers are named `a0'...`a15'. As a special feature, 22447`sp' is also supported as a synonym for `a1'. Additional registers may 22448be added by processor configuration options and by designer-defined TIE 22449extensions. An initial `$' character is optional in all register names. 22450 22451 22452File: as.info, Node: Xtensa Optimizations, Next: Xtensa Relaxation, Prev: Xtensa Syntax, Up: Xtensa-Dependent 22453 224549.52.3 Xtensa Optimizations 22455--------------------------- 22456 22457The optimizations currently supported by `as' are generation of density 22458instructions where appropriate and automatic branch target alignment. 22459 22460* Menu: 22461 22462* Density Instructions:: Using Density Instructions. 22463* Xtensa Automatic Alignment:: Automatic Instruction Alignment. 22464 22465 22466File: as.info, Node: Density Instructions, Next: Xtensa Automatic Alignment, Up: Xtensa Optimizations 22467 224689.52.3.1 Using Density Instructions 22469................................... 22470 22471The Xtensa instruction set has a code density option that provides 2247216-bit versions of some of the most commonly used opcodes. Use of these 22473opcodes can significantly reduce code size. When possible, the 22474assembler automatically translates instructions from the core Xtensa 22475instruction set into equivalent instructions from the Xtensa code 22476density option. This translation can be disabled by using underscore 22477prefixes (*note Opcode Names: Xtensa Opcodes.), by using the 22478`--no-transform' command-line option (*note Command Line Options: 22479Xtensa Options.), or by using the `no-transform' directive (*note 22480transform: Transform Directive.). 22481 22482 It is a good idea _not_ to use the density instructions directly. 22483The assembler will automatically select dense instructions where 22484possible. If you later need to use an Xtensa processor without the code 22485density option, the same assembly code will then work without 22486modification. 22487 22488 22489File: as.info, Node: Xtensa Automatic Alignment, Prev: Density Instructions, Up: Xtensa Optimizations 22490 224919.52.3.2 Automatic Instruction Alignment 22492........................................ 22493 22494The Xtensa assembler will automatically align certain instructions, both 22495to optimize performance and to satisfy architectural requirements. 22496 22497 As an optimization to improve performance, the assembler attempts to 22498align branch targets so they do not cross instruction fetch boundaries. 22499(Xtensa processors can be configured with either 32-bit or 64-bit 22500instruction fetch widths.) An instruction immediately following a call 22501is treated as a branch target in this context, because it will be the 22502target of a return from the call. This alignment has the potential to 22503reduce branch penalties at some expense in code size. This 22504optimization is enabled by default. You can disable it with the 22505`--no-target-align' command-line option (*note Command Line Options: 22506Xtensa Options.). 22507 22508 The target alignment optimization is done without adding instructions 22509that could increase the execution time of the program. If there are 22510density instructions in the code preceding a target, the assembler can 22511change the target alignment by widening some of those instructions to 22512the equivalent 24-bit instructions. Extra bytes of padding can be 22513inserted immediately following unconditional jump and return 22514instructions. This approach is usually successful in aligning many, 22515but not all, branch targets. 22516 22517 The `LOOP' family of instructions must be aligned such that the 22518first instruction in the loop body does not cross an instruction fetch 22519boundary (e.g., with a 32-bit fetch width, a `LOOP' instruction must be 22520on either a 1 or 2 mod 4 byte boundary). The assembler knows about 22521this restriction and inserts the minimal number of 2 or 3 byte no-op 22522instructions to satisfy it. When no-op instructions are added, any 22523label immediately preceding the original loop will be moved in order to 22524refer to the loop instruction, not the newly generated no-op 22525instruction. To preserve binary compatibility across processors with 22526different fetch widths, the assembler conservatively assumes a 32-bit 22527fetch width when aligning `LOOP' instructions (except if the first 22528instruction in the loop is a 64-bit instruction). 22529 22530 Previous versions of the assembler automatically aligned `ENTRY' 22531instructions to 4-byte boundaries, but that alignment is now the 22532programmer's responsibility. 22533 22534 22535File: as.info, Node: Xtensa Relaxation, Next: Xtensa Directives, Prev: Xtensa Optimizations, Up: Xtensa-Dependent 22536 225379.52.4 Xtensa Relaxation 22538------------------------ 22539 22540When an instruction operand is outside the range allowed for that 22541particular instruction field, `as' can transform the code to use a 22542functionally-equivalent instruction or sequence of instructions. This 22543process is known as "relaxation". This is typically done for branch 22544instructions because the distance of the branch targets is not known 22545until assembly-time. The Xtensa assembler offers branch relaxation and 22546also extends this concept to function calls, `MOVI' instructions and 22547other instructions with immediate fields. 22548 22549* Menu: 22550 22551* Xtensa Branch Relaxation:: Relaxation of Branches. 22552* Xtensa Call Relaxation:: Relaxation of Function Calls. 22553* Xtensa Jump Relaxation:: Relaxation of Jumps. 22554* Xtensa Immediate Relaxation:: Relaxation of other Immediate Fields. 22555 22556 22557File: as.info, Node: Xtensa Branch Relaxation, Next: Xtensa Call Relaxation, Up: Xtensa Relaxation 22558 225599.52.4.1 Conditional Branch Relaxation 22560...................................... 22561 22562When the target of a branch is too far away from the branch itself, 22563i.e., when the offset from the branch to the target is too large to fit 22564in the immediate field of the branch instruction, it may be necessary to 22565replace the branch with a branch around a jump. For example, 22566 22567 beqz a2, L 22568 22569 may result in: 22570 22571 bnez.n a2, M 22572 j L 22573 M: 22574 22575 (The `BNEZ.N' instruction would be used in this example only if the 22576density option is available. Otherwise, `BNEZ' would be used.) 22577 22578 This relaxation works well because the unconditional jump instruction 22579has a much larger offset range than the various conditional branches. 22580However, an error will occur if a branch target is beyond the range of a 22581jump instruction. `as' cannot relax unconditional jumps. Similarly, 22582an error will occur if the original input contains an unconditional 22583jump to a target that is out of range. 22584 22585 Branch relaxation is enabled by default. It can be disabled by using 22586underscore prefixes (*note Opcode Names: Xtensa Opcodes.), the 22587`--no-transform' command-line option (*note Command Line Options: 22588Xtensa Options.), or the `no-transform' directive (*note transform: 22589Transform Directive.). 22590 22591 22592File: as.info, Node: Xtensa Call Relaxation, Next: Xtensa Jump Relaxation, Prev: Xtensa Branch Relaxation, Up: Xtensa Relaxation 22593 225949.52.4.2 Function Call Relaxation 22595................................. 22596 22597Function calls may require relaxation because the Xtensa immediate call 22598instructions (`CALL0', `CALL4', `CALL8' and `CALL12') provide a 22599PC-relative offset of only 512 Kbytes in either direction. For larger 22600programs, it may be necessary to use indirect calls (`CALLX0', 22601`CALLX4', `CALLX8' and `CALLX12') where the target address is specified 22602in a register. The Xtensa assembler can automatically relax immediate 22603call instructions into indirect call instructions. This relaxation is 22604done by loading the address of the called function into the callee's 22605return address register and then using a `CALLX' instruction. So, for 22606example: 22607 22608 call8 func 22609 22610 might be relaxed to: 22611 22612 .literal .L1, func 22613 l32r a8, .L1 22614 callx8 a8 22615 22616 Because the addresses of targets of function calls are not generally 22617known until link-time, the assembler must assume the worst and relax all 22618the calls to functions in other source files, not just those that really 22619will be out of range. The linker can recognize calls that were 22620unnecessarily relaxed, and it will remove the overhead introduced by the 22621assembler for those cases where direct calls are sufficient. 22622 22623 Call relaxation is disabled by default because it can have a negative 22624effect on both code size and performance, although the linker can 22625usually eliminate the unnecessary overhead. If a program is too large 22626and some of the calls are out of range, function call relaxation can be 22627enabled using the `--longcalls' command-line option or the `longcalls' 22628directive (*note longcalls: Longcalls Directive.). 22629 22630 22631File: as.info, Node: Xtensa Jump Relaxation, Next: Xtensa Immediate Relaxation, Prev: Xtensa Call Relaxation, Up: Xtensa Relaxation 22632 226339.52.4.3 Jump Relaxation 22634........................ 22635 22636Jump instruction may require relaxation because the Xtensa jump 22637instruction (`J') provide a PC-relative offset of only 128 Kbytes in 22638either direction. One option is to use jump long (`J.L') instruction, 22639which depending on jump distance may be assembled as jump (`J') or 22640indirect jump (`JX'). However it needs a free register. When there's 22641no spare register it is possible to plant intermediate jump sites 22642(trampolines) between the jump instruction and its target. These sites 22643may be located in areas unreachable by normal code execution flow, in 22644that case they only contain intermediate jumps, or they may be inserted 22645in the middle of code block, in which case there's an additional jump 22646from the beginning of the trampoline to the instruction past its end. 22647So, for example: 22648 22649 j 1f 22650 ... 22651 retw 22652 ... 22653 mov a10, a2 22654 call8 func 22655 ... 22656 1: 22657 ... 22658 22659 might be relaxed to: 22660 22661 j .L0_TR_1 22662 ... 22663 retw 22664 .L0_TR_1: 22665 j 1f 22666 ... 22667 mov a10, a2 22668 call8 func 22669 ... 22670 1: 22671 ... 22672 22673 or to: 22674 22675 j .L0_TR_1 22676 ... 22677 retw 22678 ... 22679 mov a10, a2 22680 j .L0_TR_0 22681 .L0_TR_1: 22682 j 1f 22683 .L0_TR_0: 22684 call8 func 22685 ... 22686 1: 22687 ... 22688 22689 The Xtensa assempler uses trampolines with jump around only when it 22690cannot find suitable unreachable trampoline. There may be multiple 22691trampolines between the jump instruction and its target. 22692 22693 This relaxation does not apply to jumps to undefined symbols, 22694assuming they will reach their targets once resolved. 22695 22696 Jump relaxation is enabled by default because it does not affect 22697code size or performance while the code itself is small. This 22698relaxation may be disabled completely with `--no-trampolines' or 22699`--no-transform' command-line options (*note Command Line Options: 22700Xtensa Options.). 22701 22702 22703File: as.info, Node: Xtensa Immediate Relaxation, Prev: Xtensa Jump Relaxation, Up: Xtensa Relaxation 22704 227059.52.4.4 Other Immediate Field Relaxation 22706......................................... 22707 22708The assembler normally performs the following other relaxations. They 22709can be disabled by using underscore prefixes (*note Opcode Names: 22710Xtensa Opcodes.), the `--no-transform' command-line option (*note 22711Command Line Options: Xtensa Options.), or the `no-transform' directive 22712(*note transform: Transform Directive.). 22713 22714 The `MOVI' machine instruction can only materialize values in the 22715range from -2048 to 2047. Values outside this range are best 22716materialized with `L32R' instructions. Thus: 22717 22718 movi a0, 100000 22719 22720 is assembled into the following machine code: 22721 22722 .literal .L1, 100000 22723 l32r a0, .L1 22724 22725 The `L8UI' machine instruction can only be used with immediate 22726offsets in the range from 0 to 255. The `L16SI' and `L16UI' machine 22727instructions can only be used with offsets from 0 to 510. The `L32I' 22728machine instruction can only be used with offsets from 0 to 1020. A 22729load offset outside these ranges can be materialized with an `L32R' 22730instruction if the destination register of the load is different than 22731the source address register. For example: 22732 22733 l32i a1, a0, 2040 22734 22735 is translated to: 22736 22737 .literal .L1, 2040 22738 l32r a1, .L1 22739 add a1, a0, a1 22740 l32i a1, a1, 0 22741 22742If the load destination and source address register are the same, an 22743out-of-range offset causes an error. 22744 22745 The Xtensa `ADDI' instruction only allows immediate operands in the 22746range from -128 to 127. There are a number of alternate instruction 22747sequences for the `ADDI' operation. First, if the immediate is 0, the 22748`ADDI' will be turned into a `MOV.N' instruction (or the equivalent 22749`OR' instruction if the code density option is not available). If the 22750`ADDI' immediate is outside of the range -128 to 127, but inside the 22751range -32896 to 32639, an `ADDMI' instruction or `ADDMI'/`ADDI' 22752sequence will be used. Finally, if the immediate is outside of this 22753range and a free register is available, an `L32R'/`ADD' sequence will 22754be used with a literal allocated from the literal pool. 22755 22756 For example: 22757 22758 addi a5, a6, 0 22759 addi a5, a6, 512 22760 addi a5, a6, 513 22761 addi a5, a6, 50000 22762 22763 is assembled into the following: 22764 22765 .literal .L1, 50000 22766 mov.n a5, a6 22767 addmi a5, a6, 0x200 22768 addmi a5, a6, 0x200 22769 addi a5, a5, 1 22770 l32r a5, .L1 22771 add a5, a6, a5 22772 22773 22774File: as.info, Node: Xtensa Directives, Prev: Xtensa Relaxation, Up: Xtensa-Dependent 22775 227769.52.5 Directives 22777----------------- 22778 22779The Xtensa assembler supports a region-based directive syntax: 22780 22781 .begin DIRECTIVE [OPTIONS] 22782 ... 22783 .end DIRECTIVE 22784 22785 All the Xtensa-specific directives that apply to a region of code use 22786this syntax. 22787 22788 The directive applies to code between the `.begin' and the `.end'. 22789The state of the option after the `.end' reverts to what it was before 22790the `.begin'. A nested `.begin'/`.end' region can further change the 22791state of the directive without having to be aware of its outer state. 22792For example, consider: 22793 22794 .begin no-transform 22795 L: add a0, a1, a2 22796 .begin transform 22797 M: add a0, a1, a2 22798 .end transform 22799 N: add a0, a1, a2 22800 .end no-transform 22801 22802 The `ADD' opcodes at `L' and `N' in the outer `no-transform' region 22803both result in `ADD' machine instructions, but the assembler selects an 22804`ADD.N' instruction for the `ADD' at `M' in the inner `transform' 22805region. 22806 22807 The advantage of this style is that it works well inside macros 22808which can preserve the context of their callers. 22809 22810 The following directives are available: 22811 22812* Menu: 22813 22814* Schedule Directive:: Enable instruction scheduling. 22815* Longcalls Directive:: Use Indirect Calls for Greater Range. 22816* Transform Directive:: Disable All Assembler Transformations. 22817* Literal Directive:: Intermix Literals with Instructions. 22818* Literal Position Directive:: Specify Inline Literal Pool Locations. 22819* Literal Prefix Directive:: Specify Literal Section Name Prefix. 22820* Absolute Literals Directive:: Control PC-Relative vs. Absolute Literals. 22821 22822 22823File: as.info, Node: Schedule Directive, Next: Longcalls Directive, Up: Xtensa Directives 22824 228259.52.5.1 schedule 22826................. 22827 22828The `schedule' directive is recognized only for compatibility with 22829Tensilica's assembler. 22830 22831 .begin [no-]schedule 22832 .end [no-]schedule 22833 22834 This directive is ignored and has no effect on `as'. 22835 22836 22837File: as.info, Node: Longcalls Directive, Next: Transform Directive, Prev: Schedule Directive, Up: Xtensa Directives 22838 228399.52.5.2 longcalls 22840.................. 22841 22842The `longcalls' directive enables or disables function call relaxation. 22843*Note Function Call Relaxation: Xtensa Call Relaxation. 22844 22845 .begin [no-]longcalls 22846 .end [no-]longcalls 22847 22848 Call relaxation is disabled by default unless the `--longcalls' 22849command-line option is specified. The `longcalls' directive overrides 22850the default determined by the command-line options. 22851 22852 22853File: as.info, Node: Transform Directive, Next: Literal Directive, Prev: Longcalls Directive, Up: Xtensa Directives 22854 228559.52.5.3 transform 22856.................. 22857 22858This directive enables or disables all assembler transformation, 22859including relaxation (*note Xtensa Relaxation: Xtensa Relaxation.) and 22860optimization (*note Xtensa Optimizations: Xtensa Optimizations.). 22861 22862 .begin [no-]transform 22863 .end [no-]transform 22864 22865 Transformations are enabled by default unless the `--no-transform' 22866option is used. The `transform' directive overrides the default 22867determined by the command-line options. An underscore opcode prefix, 22868disabling transformation of that opcode, always takes precedence over 22869both directives and command-line flags. 22870 22871 22872File: as.info, Node: Literal Directive, Next: Literal Position Directive, Prev: Transform Directive, Up: Xtensa Directives 22873 228749.52.5.4 literal 22875................ 22876 22877The `.literal' directive is used to define literal pool data, i.e., 22878read-only 32-bit data accessed via `L32R' instructions. 22879 22880 .literal LABEL, VALUE[, VALUE...] 22881 22882 This directive is similar to the standard `.word' directive, except 22883that the actual location of the literal data is determined by the 22884assembler and linker, not by the position of the `.literal' directive. 22885Using this directive gives the assembler freedom to locate the literal 22886data in the most appropriate place and possibly to combine identical 22887literals. For example, the code: 22888 22889 entry sp, 40 22890 .literal .L1, sym 22891 l32r a4, .L1 22892 22893 can be used to load a pointer to the symbol `sym' into register 22894`a4'. The value of `sym' will not be placed between the `ENTRY' and 22895`L32R' instructions; instead, the assembler puts the data in a literal 22896pool. 22897 22898 Literal pools are placed by default in separate literal sections; 22899however, when using the `--text-section-literals' option (*note Command 22900Line Options: Xtensa Options.), the literal pools for PC-relative mode 22901`L32R' instructions are placed in the current section.(1) These text 22902section literal pools are created automatically before `ENTRY' 22903instructions and manually after `.literal_position' directives (*note 22904literal_position: Literal Position Directive.). If there are no 22905preceding `ENTRY' instructions, explicit `.literal_position' directives 22906must be used to place the text section literal pools; otherwise, `as' 22907will report an error. 22908 22909 When literals are placed in separate sections, the literal section 22910names are derived from the names of the sections where the literals are 22911defined. The base literal section names are `.literal' for PC-relative 22912mode `L32R' instructions and `.lit4' for absolute mode `L32R' 22913instructions (*note absolute-literals: Absolute Literals Directive.). 22914These base names are used for literals defined in the default `.text' 22915section. For literals defined in other sections or within the scope of 22916a `literal_prefix' directive (*note literal_prefix: Literal Prefix 22917Directive.), the following rules determine the literal section name: 22918 22919 1. If the current section is a member of a section group, the literal 22920 section name includes the group name as a suffix to the base 22921 `.literal' or `.lit4' name, with a period to separate the base 22922 name and group name. The literal section is also made a member of 22923 the group. 22924 22925 2. If the current section name (or `literal_prefix' value) begins with 22926 "`.gnu.linkonce.KIND.'", the literal section name is formed by 22927 replacing "`.KIND'" with the base `.literal' or `.lit4' name. For 22928 example, for literals defined in a section named 22929 `.gnu.linkonce.t.func', the literal section will be 22930 `.gnu.linkonce.literal.func' or `.gnu.linkonce.lit4.func'. 22931 22932 3. If the current section name (or `literal_prefix' value) ends with 22933 `.text', the literal section name is formed by replacing that 22934 suffix with the base `.literal' or `.lit4' name. For example, for 22935 literals defined in a section named `.iram0.text', the literal 22936 section will be `.iram0.literal' or `.iram0.lit4'. 22937 22938 4. If none of the preceding conditions apply, the literal section 22939 name is formed by adding the base `.literal' or `.lit4' name as a 22940 suffix to the current section name (or `literal_prefix' value). 22941 22942 ---------- Footnotes ---------- 22943 22944 (1) Literals for the `.init' and `.fini' sections are always placed 22945in separate sections, even when `--text-section-literals' is enabled. 22946 22947 22948File: as.info, Node: Literal Position Directive, Next: Literal Prefix Directive, Prev: Literal Directive, Up: Xtensa Directives 22949 229509.52.5.5 literal_position 22951......................... 22952 22953When using `--text-section-literals' to place literals inline in the 22954section being assembled, the `.literal_position' directive can be used 22955to mark a potential location for a literal pool. 22956 22957 .literal_position 22958 22959 The `.literal_position' directive is ignored when the 22960`--text-section-literals' option is not used or when `L32R' 22961instructions use the absolute addressing mode. 22962 22963 The assembler will automatically place text section literal pools 22964before `ENTRY' instructions, so the `.literal_position' directive is 22965only needed to specify some other location for a literal pool. You may 22966need to add an explicit jump instruction to skip over an inline literal 22967pool. 22968 22969 For example, an interrupt vector does not begin with an `ENTRY' 22970instruction so the assembler will be unable to automatically find a good 22971place to put a literal pool. Moreover, the code for the interrupt 22972vector must be at a specific starting address, so the literal pool 22973cannot come before the start of the code. The literal pool for the 22974vector must be explicitly positioned in the middle of the vector (before 22975any uses of the literals, due to the negative offsets used by 22976PC-relative `L32R' instructions). The `.literal_position' directive 22977can be used to do this. In the following code, the literal for `M' 22978will automatically be aligned correctly and is placed after the 22979unconditional jump. 22980 22981 .global M 22982 code_start: 22983 j continue 22984 .literal_position 22985 .align 4 22986 continue: 22987 movi a4, M 22988 22989 22990File: as.info, Node: Literal Prefix Directive, Next: Absolute Literals Directive, Prev: Literal Position Directive, Up: Xtensa Directives 22991 229929.52.5.6 literal_prefix 22993....................... 22994 22995The `literal_prefix' directive allows you to override the default 22996literal section names, which are derived from the names of the sections 22997where the literals are defined. 22998 22999 .begin literal_prefix [NAME] 23000 .end literal_prefix 23001 23002 For literals defined within the delimited region, the literal section 23003names are derived from the NAME argument instead of the name of the 23004current section. The rules used to derive the literal section names do 23005not change. *Note literal: Literal Directive. If the NAME argument is 23006omitted, the literal sections revert to the defaults. This directive 23007has no effect when using the `--text-section-literals' option (*note 23008Command Line Options: Xtensa Options.). 23009 23010 23011File: as.info, Node: Absolute Literals Directive, Prev: Literal Prefix Directive, Up: Xtensa Directives 23012 230139.52.5.7 absolute-literals 23014.......................... 23015 23016The `absolute-literals' and `no-absolute-literals' directives control 23017the absolute vs. PC-relative mode for `L32R' instructions. These are 23018relevant only for Xtensa configurations that include the absolute 23019addressing option for `L32R' instructions. 23020 23021 .begin [no-]absolute-literals 23022 .end [no-]absolute-literals 23023 23024 These directives do not change the `L32R' mode--they only cause the 23025assembler to emit the appropriate kind of relocation for `L32R' 23026instructions and to place the literal values in the appropriate section. 23027To change the `L32R' mode, the program must write the `LITBASE' special 23028register. It is the programmer's responsibility to keep track of the 23029mode and indicate to the assembler which mode is used in each region of 23030code. 23031 23032 If the Xtensa configuration includes the absolute `L32R' addressing 23033option, the default is to assume absolute `L32R' addressing unless the 23034`--no-absolute-literals' command-line option is specified. Otherwise, 23035the default is to assume PC-relative `L32R' addressing. The 23036`absolute-literals' directive can then be used to override the default 23037determined by the command-line options. 23038 23039 23040File: as.info, Node: Z80-Dependent, Next: Z8000-Dependent, Prev: Xtensa-Dependent, Up: Machine Dependencies 23041 230429.53 Z80 Dependent Features 23043=========================== 23044 23045* Menu: 23046 23047* Z80 Options:: Options 23048* Z80 Syntax:: Syntax 23049* Z80 Floating Point:: Floating Point 23050* Z80 Directives:: Z80 Machine Directives 23051* Z80 Opcodes:: Opcodes 23052 23053 23054File: as.info, Node: Z80 Options, Next: Z80 Syntax, Up: Z80-Dependent 23055 230569.53.1 Options 23057-------------- 23058 23059The Zilog Z80 and Ascii R800 version of `as' have a few machine 23060dependent options. 23061`-z80' 23062 Produce code for the Z80 processor. There are additional options to 23063 request warnings and error messages for undocumented instructions. 23064 23065`-ignore-undocumented-instructions' 23066`-Wnud' 23067 Silently assemble undocumented Z80-instructions that have been 23068 adopted as documented R800-instructions. 23069 23070`-ignore-unportable-instructions' 23071`-Wnup' 23072 Silently assemble all undocumented Z80-instructions. 23073 23074`-warn-undocumented-instructions' 23075`-Wud' 23076 Issue warnings for undocumented Z80-instructions that work on 23077 R800, do not assemble other undocumented instructions without 23078 warning. 23079 23080`-warn-unportable-instructions' 23081`-Wup' 23082 Issue warnings for other undocumented Z80-instructions, do not 23083 treat any undocumented instructions as errors. 23084 23085`-forbid-undocumented-instructions' 23086`-Fud' 23087 Treat all undocumented z80-instructions as errors. 23088 23089`-forbid-unportable-instructions' 23090`-Fup' 23091 Treat undocumented z80-instructions that do not work on R800 as 23092 errors. 23093 23094`-r800' 23095 Produce code for the R800 processor. The assembler does not support 23096 undocumented instructions for the R800. In line with common 23097 practice, `as' uses Z80 instruction names for the R800 processor, 23098 as far as they exist. 23099 23100 23101File: as.info, Node: Z80 Syntax, Next: Z80 Floating Point, Prev: Z80 Options, Up: Z80-Dependent 23102 231039.53.2 Syntax 23104------------- 23105 23106The assembler syntax closely follows the 'Z80 family CPU User Manual' by 23107Zilog. In expressions a single `=' may be used as "is equal to" 23108comparison operator. 23109 23110 Suffices can be used to indicate the radix of integer constants; `H' 23111or `h' for hexadecimal, `D' or `d' for decimal, `Q', `O', `q' or `o' 23112for octal, and `B' for binary. 23113 23114 The suffix `b' denotes a backreference to local label. 23115 23116* Menu: 23117 23118* Z80-Chars:: Special Characters 23119* Z80-Regs:: Register Names 23120* Z80-Case:: Case Sensitivity 23121 23122 23123File: as.info, Node: Z80-Chars, Next: Z80-Regs, Up: Z80 Syntax 23124 231259.53.2.1 Special Characters 23126........................... 23127 23128The semicolon `;' is the line comment character; 23129 23130 If a `#' appears as the first character of a line then the whole 23131line is treated as a comment, but in this case the line could also be a 23132logical line number directive (*note Comments::) or a preprocessor 23133control command (*note Preprocessing::). 23134 23135 The Z80 assembler does not support a line separator character. 23136 23137 The dollar sign `$' can be used as a prefix for hexadecimal numbers 23138and as a symbol denoting the current location counter. 23139 23140 A backslash `\' is an ordinary character for the Z80 assembler. 23141 23142 The single quote `'' must be followed by a closing quote. If there 23143is one character in between, it is a character constant, otherwise it is 23144a string constant. 23145 23146 23147File: as.info, Node: Z80-Regs, Next: Z80-Case, Prev: Z80-Chars, Up: Z80 Syntax 23148 231499.53.2.2 Register Names 23150....................... 23151 23152The registers are referred to with the letters assigned to them by 23153Zilog. In addition `as' recognizes `ixl' and `ixh' as the least and 23154most significant octet in `ix', and similarly `iyl' and `iyh' as parts 23155of `iy'. 23156 23157 23158File: as.info, Node: Z80-Case, Prev: Z80-Regs, Up: Z80 Syntax 23159 231609.53.2.3 Case Sensitivity 23161......................... 23162 23163Upper and lower case are equivalent in register names, opcodes, 23164condition codes and assembler directives. The case of letters is 23165significant in labels and symbol names. The case is also important to 23166distinguish the suffix `b' for a backward reference to a local label 23167from the suffix `B' for a number in binary notation. 23168 23169 23170File: as.info, Node: Z80 Floating Point, Next: Z80 Directives, Prev: Z80 Syntax, Up: Z80-Dependent 23171 231729.53.3 Floating Point 23173--------------------- 23174 23175Floating-point numbers are not supported. 23176 23177 23178File: as.info, Node: Z80 Directives, Next: Z80 Opcodes, Prev: Z80 Floating Point, Up: Z80-Dependent 23179 231809.53.4 Z80 Assembler Directives 23181------------------------------- 23182 23183`as' for the Z80 supports some additional directives for compatibility 23184with other assemblers. 23185 23186 These are the additional directives in `as' for the Z80: 23187 23188`db EXPRESSION|STRING[,EXPRESSION|STRING...]' 23189`defb EXPRESSION|STRING[,EXPRESSION|STRING...]' 23190 For each STRING the characters are copied to the object file, for 23191 each other EXPRESSION the value is stored in one byte. A warning 23192 is issued in case of an overflow. 23193 23194`dw EXPRESSION[,EXPRESSION...]' 23195`defw EXPRESSION[,EXPRESSION...]' 23196 For each EXPRESSION the value is stored in two bytes, ignoring 23197 overflow. 23198 23199`d24 EXPRESSION[,EXPRESSION...]' 23200`def24 EXPRESSION[,EXPRESSION...]' 23201 For each EXPRESSION the value is stored in three bytes, ignoring 23202 overflow. 23203 23204`d32 EXPRESSION[,EXPRESSION...]' 23205`def32 EXPRESSION[,EXPRESSION...]' 23206 For each EXPRESSION the value is stored in four bytes, ignoring 23207 overflow. 23208 23209`ds COUNT[, VALUE]' 23210`defs COUNT[, VALUE]' 23211 Fill COUNT bytes in the object file with VALUE, if VALUE is 23212 omitted it defaults to zero. 23213 23214`SYMBOL equ EXPRESSION' 23215`SYMBOL defl EXPRESSION' 23216 These directives set the value of SYMBOL to EXPRESSION. If `equ' 23217 is used, it is an error if SYMBOL is already defined. Symbols 23218 defined with `equ' are not protected from redefinition. 23219 23220`set' 23221 This is a normal instruction on Z80, and not an assembler 23222 directive. 23223 23224`psect NAME' 23225 A synonym for *Note Section::, no second argument should be given. 23226 23227 23228 23229File: as.info, Node: Z80 Opcodes, Prev: Z80 Directives, Up: Z80-Dependent 23230 232319.53.5 Opcodes 23232-------------- 23233 23234In line with common practice, Z80 mnemonics are used for both the Z80 23235and the R800. 23236 23237 In many instructions it is possible to use one of the half index 23238registers (`ixl',`ixh',`iyl',`iyh') in stead of an 8-bit general 23239purpose register. This yields instructions that are documented on the 23240R800 and undocumented on the Z80. Similarly `in f,(c)' is documented 23241on the R800 and undocumented on the Z80. 23242 23243 The assembler also supports the following undocumented 23244Z80-instructions, that have not been adopted in the R800 instruction 23245set: 23246`out (c),0' 23247 Sends zero to the port pointed to by register c. 23248 23249`sli M' 23250 Equivalent to `M = (M<<1)+1', the operand M can be any operand 23251 that is valid for `sla'. One can use `sll' as a synonym for `sli'. 23252 23253`OP (ix+D), R' 23254 This is equivalent to 23255 23256 ld R, (ix+D) 23257 OPC R 23258 ld (ix+D), R 23259 23260 The operation `OPC' may be any of `res B,', `set B,', `rl', `rlc', 23261 `rr', `rrc', `sla', `sli', `sra' and `srl', and the register `R' 23262 may be any of `a', `b', `c', `d', `e', `h' and `l'. 23263 23264`OPC (iy+D), R' 23265 As above, but with `iy' instead of `ix'. 23266 23267 The web site at `http://www.z80.info' is a good starting place to 23268find more information on programming the Z80. 23269 23270 23271File: as.info, Node: Z8000-Dependent, Prev: Z80-Dependent, Up: Machine Dependencies 23272 232739.54 Z8000 Dependent Features 23274============================= 23275 23276 The Z8000 as supports both members of the Z8000 family: the 23277unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with 2327824 bit addresses. 23279 23280 When the assembler is in unsegmented mode (specified with the 23281`unsegm' directive), an address takes up one word (16 bit) sized 23282register. When the assembler is in segmented mode (specified with the 23283`segm' directive), a 24-bit address takes up a long (32 bit) register. 23284*Note Assembler Directives for the Z8000: Z8000 Directives, for a list 23285of other Z8000 specific assembler directives. 23286 23287* Menu: 23288 23289* Z8000 Options:: Command-line options for the Z8000 23290* Z8000 Syntax:: Assembler syntax for the Z8000 23291* Z8000 Directives:: Special directives for the Z8000 23292* Z8000 Opcodes:: Opcodes 23293 23294 23295File: as.info, Node: Z8000 Options, Next: Z8000 Syntax, Up: Z8000-Dependent 23296 232979.54.1 Options 23298-------------- 23299 23300`-z8001' 23301 Generate segmented code by default. 23302 23303`-z8002' 23304 Generate unsegmented code by default. 23305 23306 23307File: as.info, Node: Z8000 Syntax, Next: Z8000 Directives, Prev: Z8000 Options, Up: Z8000-Dependent 23308 233099.54.2 Syntax 23310------------- 23311 23312* Menu: 23313 23314* Z8000-Chars:: Special Characters 23315* Z8000-Regs:: Register Names 23316* Z8000-Addressing:: Addressing Modes 23317 23318 23319File: as.info, Node: Z8000-Chars, Next: Z8000-Regs, Up: Z8000 Syntax 23320 233219.54.2.1 Special Characters 23322........................... 23323 23324`!' is the line comment character. 23325 23326 If a `#' appears as the first character of a line then the whole 23327line is treated as a comment, but in this case the line could also be a 23328logical line number directive (*note Comments::) or a preprocessor 23329control command (*note Preprocessing::). 23330 23331 You can use `;' instead of a newline to separate statements. 23332 23333 23334File: as.info, Node: Z8000-Regs, Next: Z8000-Addressing, Prev: Z8000-Chars, Up: Z8000 Syntax 23335 233369.54.2.2 Register Names 23337....................... 23338 23339The Z8000 has sixteen 16 bit registers, numbered 0 to 15. You can refer 23340to different sized groups of registers by register number, with the 23341prefix `r' for 16 bit registers, `rr' for 32 bit registers and `rq' for 2334264 bit registers. You can also refer to the contents of the first 23343eight (of the sixteen 16 bit registers) by bytes. They are named `rlN' 23344and `rhN'. 23345 23346_byte registers_ 23347 rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3 23348 rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7 23349 23350_word registers_ 23351 r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 23352 23353_long word registers_ 23354 rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14 23355 23356_quad word registers_ 23357 rq0 rq4 rq8 rq12 23358 23359 23360File: as.info, Node: Z8000-Addressing, Prev: Z8000-Regs, Up: Z8000 Syntax 23361 233629.54.2.3 Addressing Modes 23363......................... 23364 23365as understands the following addressing modes for the Z8000: 23366 23367`rlN' 23368`rhN' 23369`rN' 23370`rrN' 23371`rqN' 23372 Register direct: 8bit, 16bit, 32bit, and 64bit registers. 23373 23374`@rN' 23375`@rrN' 23376 Indirect register: @rrN in segmented mode, @rN in unsegmented 23377 mode. 23378 23379`ADDR' 23380 Direct: the 16 bit or 24 bit address (depending on whether the 23381 assembler is in segmented or unsegmented mode) of the operand is 23382 in the instruction. 23383 23384`address(rN)' 23385 Indexed: the 16 or 24 bit address is added to the 16 bit register 23386 to produce the final address in memory of the operand. 23387 23388`rN(#IMM)' 23389`rrN(#IMM)' 23390 Base Address: the 16 or 24 bit register is added to the 16 bit sign 23391 extended immediate displacement to produce the final address in 23392 memory of the operand. 23393 23394`rN(rM)' 23395`rrN(rM)' 23396 Base Index: the 16 or 24 bit register rN or rrN is added to the 23397 sign extended 16 bit index register rM to produce the final 23398 address in memory of the operand. 23399 23400`#XX' 23401 Immediate data XX. 23402 23403 23404File: as.info, Node: Z8000 Directives, Next: Z8000 Opcodes, Prev: Z8000 Syntax, Up: Z8000-Dependent 23405 234069.54.3 Assembler Directives for the Z8000 23407----------------------------------------- 23408 23409The Z8000 port of as includes additional assembler directives, for 23410compatibility with other Z8000 assemblers. These do not begin with `.' 23411(unlike the ordinary as directives). 23412 23413`segm' 23414`.z8001' 23415 Generate code for the segmented Z8001. 23416 23417`unsegm' 23418`.z8002' 23419 Generate code for the unsegmented Z8002. 23420 23421`name' 23422 Synonym for `.file' 23423 23424`global' 23425 Synonym for `.global' 23426 23427`wval' 23428 Synonym for `.word' 23429 23430`lval' 23431 Synonym for `.long' 23432 23433`bval' 23434 Synonym for `.byte' 23435 23436`sval' 23437 Assemble a string. `sval' expects one string literal, delimited by 23438 single quotes. It assembles each byte of the string into 23439 consecutive addresses. You can use the escape sequence `%XX' 23440 (where XX represents a two-digit hexadecimal number) to represent 23441 the character whose ASCII value is XX. Use this feature to 23442 describe single quote and other characters that may not appear in 23443 string literals as themselves. For example, the C statement 23444 `char *a = "he said \"it's 50% off\"";' is represented in Z8000 23445 assembly language (shown with the assembler output in hex at the 23446 left) as 23447 23448 68652073 sval 'he said %22it%27s 50%25 off%22%00' 23449 61696420 23450 22697427 23451 73203530 23452 25206F66 23453 662200 23454 23455`rsect' 23456 synonym for `.section' 23457 23458`block' 23459 synonym for `.space' 23460 23461`even' 23462 special case of `.align'; aligns output to even byte boundary. 23463 23464 23465File: as.info, Node: Z8000 Opcodes, Prev: Z8000 Directives, Up: Z8000-Dependent 23466 234679.54.4 Opcodes 23468-------------- 23469 23470For detailed information on the Z8000 machine instruction set, see 23471`Z8000 Technical Manual'. 23472 23473 The following table summarizes the opcodes and their arguments: 23474 23475 rs 16 bit source register 23476 rd 16 bit destination register 23477 rbs 8 bit source register 23478 rbd 8 bit destination register 23479 rrs 32 bit source register 23480 rrd 32 bit destination register 23481 rqs 64 bit source register 23482 rqd 64 bit destination register 23483 addr 16/24 bit address 23484 imm immediate data 23485 23486 adc rd,rs clrb addr cpsir @rd,@rs,rr,cc 23487 adcb rbd,rbs clrb addr(rd) cpsirb @rd,@rs,rr,cc 23488 add rd,@rs clrb rbd dab rbd 23489 add rd,addr com @rd dbjnz rbd,disp7 23490 add rd,addr(rs) com addr dec @rd,imm4m1 23491 add rd,imm16 com addr(rd) dec addr(rd),imm4m1 23492 add rd,rs com rd dec addr,imm4m1 23493 addb rbd,@rs comb @rd dec rd,imm4m1 23494 addb rbd,addr comb addr decb @rd,imm4m1 23495 addb rbd,addr(rs) comb addr(rd) decb addr(rd),imm4m1 23496 addb rbd,imm8 comb rbd decb addr,imm4m1 23497 addb rbd,rbs comflg flags decb rbd,imm4m1 23498 addl rrd,@rs cp @rd,imm16 di i2 23499 addl rrd,addr cp addr(rd),imm16 div rrd,@rs 23500 addl rrd,addr(rs) cp addr,imm16 div rrd,addr 23501 addl rrd,imm32 cp rd,@rs div rrd,addr(rs) 23502 addl rrd,rrs cp rd,addr div rrd,imm16 23503 and rd,@rs cp rd,addr(rs) div rrd,rs 23504 and rd,addr cp rd,imm16 divl rqd,@rs 23505 and rd,addr(rs) cp rd,rs divl rqd,addr 23506 and rd,imm16 cpb @rd,imm8 divl rqd,addr(rs) 23507 and rd,rs cpb addr(rd),imm8 divl rqd,imm32 23508 andb rbd,@rs cpb addr,imm8 divl rqd,rrs 23509 andb rbd,addr cpb rbd,@rs djnz rd,disp7 23510 andb rbd,addr(rs) cpb rbd,addr ei i2 23511 andb rbd,imm8 cpb rbd,addr(rs) ex rd,@rs 23512 andb rbd,rbs cpb rbd,imm8 ex rd,addr 23513 bit @rd,imm4 cpb rbd,rbs ex rd,addr(rs) 23514 bit addr(rd),imm4 cpd rd,@rs,rr,cc ex rd,rs 23515 bit addr,imm4 cpdb rbd,@rs,rr,cc exb rbd,@rs 23516 bit rd,imm4 cpdr rd,@rs,rr,cc exb rbd,addr 23517 bit rd,rs cpdrb rbd,@rs,rr,cc exb rbd,addr(rs) 23518 bitb @rd,imm4 cpi rd,@rs,rr,cc exb rbd,rbs 23519 bitb addr(rd),imm4 cpib rbd,@rs,rr,cc ext0e imm8 23520 bitb addr,imm4 cpir rd,@rs,rr,cc ext0f imm8 23521 bitb rbd,imm4 cpirb rbd,@rs,rr,cc ext8e imm8 23522 bitb rbd,rs cpl rrd,@rs ext8f imm8 23523 bpt cpl rrd,addr exts rrd 23524 call @rd cpl rrd,addr(rs) extsb rd 23525 call addr cpl rrd,imm32 extsl rqd 23526 call addr(rd) cpl rrd,rrs halt 23527 calr disp12 cpsd @rd,@rs,rr,cc in rd,@rs 23528 clr @rd cpsdb @rd,@rs,rr,cc in rd,imm16 23529 clr addr cpsdr @rd,@rs,rr,cc inb rbd,@rs 23530 clr addr(rd) cpsdrb @rd,@rs,rr,cc inb rbd,imm16 23531 clr rd cpsi @rd,@rs,rr,cc inc @rd,imm4m1 23532 clrb @rd cpsib @rd,@rs,rr,cc inc addr(rd),imm4m1 23533 inc addr,imm4m1 ldb rbd,rs(rx) mult rrd,addr(rs) 23534 inc rd,imm4m1 ldb rd(imm16),rbs mult rrd,imm16 23535 incb @rd,imm4m1 ldb rd(rx),rbs mult rrd,rs 23536 incb addr(rd),imm4m1 ldctl ctrl,rs multl rqd,@rs 23537 incb addr,imm4m1 ldctl rd,ctrl multl rqd,addr 23538 incb rbd,imm4m1 ldd @rs,@rd,rr multl rqd,addr(rs) 23539 ind @rd,@rs,ra lddb @rs,@rd,rr multl rqd,imm32 23540 indb @rd,@rs,rba lddr @rs,@rd,rr multl rqd,rrs 23541 inib @rd,@rs,ra lddrb @rs,@rd,rr neg @rd 23542 inibr @rd,@rs,ra ldi @rd,@rs,rr neg addr 23543 iret ldib @rd,@rs,rr neg addr(rd) 23544 jp cc,@rd ldir @rd,@rs,rr neg rd 23545 jp cc,addr ldirb @rd,@rs,rr negb @rd 23546 jp cc,addr(rd) ldk rd,imm4 negb addr 23547 jr cc,disp8 ldl @rd,rrs negb addr(rd) 23548 ld @rd,imm16 ldl addr(rd),rrs negb rbd 23549 ld @rd,rs ldl addr,rrs nop 23550 ld addr(rd),imm16 ldl rd(imm16),rrs or rd,@rs 23551 ld addr(rd),rs ldl rd(rx),rrs or rd,addr 23552 ld addr,imm16 ldl rrd,@rs or rd,addr(rs) 23553 ld addr,rs ldl rrd,addr or rd,imm16 23554 ld rd(imm16),rs ldl rrd,addr(rs) or rd,rs 23555 ld rd(rx),rs ldl rrd,imm32 orb rbd,@rs 23556 ld rd,@rs ldl rrd,rrs orb rbd,addr 23557 ld rd,addr ldl rrd,rs(imm16) orb rbd,addr(rs) 23558 ld rd,addr(rs) ldl rrd,rs(rx) orb rbd,imm8 23559 ld rd,imm16 ldm @rd,rs,n orb rbd,rbs 23560 ld rd,rs ldm addr(rd),rs,n out @rd,rs 23561 ld rd,rs(imm16) ldm addr,rs,n out imm16,rs 23562 ld rd,rs(rx) ldm rd,@rs,n outb @rd,rbs 23563 lda rd,addr ldm rd,addr(rs),n outb imm16,rbs 23564 lda rd,addr(rs) ldm rd,addr,n outd @rd,@rs,ra 23565 lda rd,rs(imm16) ldps @rs outdb @rd,@rs,rba 23566 lda rd,rs(rx) ldps addr outib @rd,@rs,ra 23567 ldar rd,disp16 ldps addr(rs) outibr @rd,@rs,ra 23568 ldb @rd,imm8 ldr disp16,rs pop @rd,@rs 23569 ldb @rd,rbs ldr rd,disp16 pop addr(rd),@rs 23570 ldb addr(rd),imm8 ldrb disp16,rbs pop addr,@rs 23571 ldb addr(rd),rbs ldrb rbd,disp16 pop rd,@rs 23572 ldb addr,imm8 ldrl disp16,rrs popl @rd,@rs 23573 ldb addr,rbs ldrl rrd,disp16 popl addr(rd),@rs 23574 ldb rbd,@rs mbit popl addr,@rs 23575 ldb rbd,addr mreq rd popl rrd,@rs 23576 ldb rbd,addr(rs) mres push @rd,@rs 23577 ldb rbd,imm8 mset push @rd,addr 23578 ldb rbd,rbs mult rrd,@rs push @rd,addr(rs) 23579 ldb rbd,rs(imm16) mult rrd,addr push @rd,imm16 23580 push @rd,rs set addr,imm4 subl rrd,imm32 23581 pushl @rd,@rs set rd,imm4 subl rrd,rrs 23582 pushl @rd,addr set rd,rs tcc cc,rd 23583 pushl @rd,addr(rs) setb @rd,imm4 tccb cc,rbd 23584 pushl @rd,rrs setb addr(rd),imm4 test @rd 23585 res @rd,imm4 setb addr,imm4 test addr 23586 res addr(rd),imm4 setb rbd,imm4 test addr(rd) 23587 res addr,imm4 setb rbd,rs test rd 23588 res rd,imm4 setflg imm4 testb @rd 23589 res rd,rs sinb rbd,imm16 testb addr 23590 resb @rd,imm4 sinb rd,imm16 testb addr(rd) 23591 resb addr(rd),imm4 sind @rd,@rs,ra testb rbd 23592 resb addr,imm4 sindb @rd,@rs,rba testl @rd 23593 resb rbd,imm4 sinib @rd,@rs,ra testl addr 23594 resb rbd,rs sinibr @rd,@rs,ra testl addr(rd) 23595 resflg imm4 sla rd,imm8 testl rrd 23596 ret cc slab rbd,imm8 trdb @rd,@rs,rba 23597 rl rd,imm1or2 slal rrd,imm8 trdrb @rd,@rs,rba 23598 rlb rbd,imm1or2 sll rd,imm8 trib @rd,@rs,rbr 23599 rlc rd,imm1or2 sllb rbd,imm8 trirb @rd,@rs,rbr 23600 rlcb rbd,imm1or2 slll rrd,imm8 trtdrb @ra,@rb,rbr 23601 rldb rbb,rba sout imm16,rs trtib @ra,@rb,rr 23602 rr rd,imm1or2 soutb imm16,rbs trtirb @ra,@rb,rbr 23603 rrb rbd,imm1or2 soutd @rd,@rs,ra trtrb @ra,@rb,rbr 23604 rrc rd,imm1or2 soutdb @rd,@rs,rba tset @rd 23605 rrcb rbd,imm1or2 soutib @rd,@rs,ra tset addr 23606 rrdb rbb,rba soutibr @rd,@rs,ra tset addr(rd) 23607 rsvd36 sra rd,imm8 tset rd 23608 rsvd38 srab rbd,imm8 tsetb @rd 23609 rsvd78 sral rrd,imm8 tsetb addr 23610 rsvd7e srl rd,imm8 tsetb addr(rd) 23611 rsvd9d srlb rbd,imm8 tsetb rbd 23612 rsvd9f srll rrd,imm8 xor rd,@rs 23613 rsvdb9 sub rd,@rs xor rd,addr 23614 rsvdbf sub rd,addr xor rd,addr(rs) 23615 sbc rd,rs sub rd,addr(rs) xor rd,imm16 23616 sbcb rbd,rbs sub rd,imm16 xor rd,rs 23617 sc imm8 sub rd,rs xorb rbd,@rs 23618 sda rd,rs subb rbd,@rs xorb rbd,addr 23619 sdab rbd,rs subb rbd,addr xorb rbd,addr(rs) 23620 sdal rrd,rs subb rbd,addr(rs) xorb rbd,imm8 23621 sdl rd,rs subb rbd,imm8 xorb rbd,rbs 23622 sdlb rbd,rs subb rbd,rbs xorb rbd,rbs 23623 sdll rrd,rs subl rrd,@rs 23624 set @rd,imm4 subl rrd,addr 23625 set addr(rd),imm4 subl rrd,addr(rs) 23626 23627 23628File: as.info, Node: Reporting Bugs, Next: Acknowledgements, Prev: Machine Dependencies, Up: Top 23629 2363010 Reporting Bugs 23631***************** 23632 23633Your bug reports play an essential role in making `as' reliable. 23634 23635 Reporting a bug may help you by bringing a solution to your problem, 23636or it may not. But in any case the principal function of a bug report 23637is to help the entire community by making the next version of `as' work 23638better. Bug reports are your contribution to the maintenance of `as'. 23639 23640 In order for a bug report to serve its purpose, you must include the 23641information that enables us to fix the bug. 23642 23643* Menu: 23644 23645* Bug Criteria:: Have you found a bug? 23646* Bug Reporting:: How to report bugs 23647 23648 23649File: as.info, Node: Bug Criteria, Next: Bug Reporting, Up: Reporting Bugs 23650 2365110.1 Have You Found a Bug? 23652========================== 23653 23654If you are not sure whether you have found a bug, here are some 23655guidelines: 23656 23657 * If the assembler gets a fatal signal, for any input whatever, that 23658 is a `as' bug. Reliable assemblers never crash. 23659 23660 * If `as' produces an error message for valid input, that is a bug. 23661 23662 * If `as' does not produce an error message for invalid input, that 23663 is a bug. However, you should note that your idea of "invalid 23664 input" might be our idea of "an extension" or "support for 23665 traditional practice". 23666 23667 * If you are an experienced user of assemblers, your suggestions for 23668 improvement of `as' are welcome in any case. 23669 23670 23671File: as.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Reporting Bugs 23672 2367310.2 How to Report Bugs 23674======================= 23675 23676A number of companies and individuals offer support for GNU products. 23677If you obtained `as' from a support organization, we recommend you 23678contact that organization first. 23679 23680 You can find contact information for many support companies and 23681individuals in the file `etc/SERVICE' in the GNU Emacs distribution. 23682 23683 In any event, we also recommend that you send bug reports for `as' 23684to `http://www.sourceware.org/bugzilla/'. 23685 23686 The fundamental principle of reporting bugs usefully is this: 23687*report all the facts*. If you are not sure whether to state a fact or 23688leave it out, state it! 23689 23690 Often people omit facts because they think they know what causes the 23691problem and assume that some details do not matter. Thus, you might 23692assume that the name of a symbol you use in an example does not matter. 23693Well, probably it does not, but one cannot be sure. Perhaps the bug 23694is a stray memory reference which happens to fetch from the location 23695where that name is stored in memory; perhaps, if the name were 23696different, the contents of that location would fool the assembler into 23697doing the right thing despite the bug. Play it safe and give a 23698specific, complete example. That is the easiest thing for you to do, 23699and the most helpful. 23700 23701 Keep in mind that the purpose of a bug report is to enable us to fix 23702the bug if it is new to us. Therefore, always write your bug reports 23703on the assumption that the bug has not been reported previously. 23704 23705 Sometimes people give a few sketchy facts and ask, "Does this ring a 23706bell?" This cannot help us fix a bug, so it is basically useless. We 23707respond by asking for enough details to enable us to investigate. You 23708might as well expedite matters by sending them to begin with. 23709 23710 To enable us to fix the bug, you should include all these things: 23711 23712 * The version of `as'. `as' announces it if you start it with the 23713 `--version' argument. 23714 23715 Without this, we will not know whether there is any point in 23716 looking for the bug in the current version of `as'. 23717 23718 * Any patches you may have applied to the `as' source. 23719 23720 * The type of machine you are using, and the operating system name 23721 and version number. 23722 23723 * What compiler (and its version) was used to compile `as'--e.g. 23724 "`gcc-2.7'". 23725 23726 * The command arguments you gave the assembler to assemble your 23727 example and observe the bug. To guarantee you will not omit 23728 something important, list them all. A copy of the Makefile (or 23729 the output from make) is sufficient. 23730 23731 If we were to try to guess the arguments, we would probably guess 23732 wrong and then we might not encounter the bug. 23733 23734 * A complete input file that will reproduce the bug. If the bug is 23735 observed when the assembler is invoked via a compiler, send the 23736 assembler source, not the high level language source. Most 23737 compilers will produce the assembler source when run with the `-S' 23738 option. If you are using `gcc', use the options `-v 23739 --save-temps'; this will save the assembler source in a file with 23740 an extension of `.s', and also show you exactly how `as' is being 23741 run. 23742 23743 * A description of what behavior you observe that you believe is 23744 incorrect. For example, "It gets a fatal signal." 23745 23746 Of course, if the bug is that `as' gets a fatal signal, then we 23747 will certainly notice it. But if the bug is incorrect output, we 23748 might not notice unless it is glaringly wrong. You might as well 23749 not give us a chance to make a mistake. 23750 23751 Even if the problem you experience is a fatal signal, you should 23752 still say so explicitly. Suppose something strange is going on, 23753 such as, your copy of `as' is out of sync, or you have encountered 23754 a bug in the C library on your system. (This has happened!) Your 23755 copy might crash and ours would not. If you told us to expect a 23756 crash, then when ours fails to crash, we would know that the bug 23757 was not happening for us. If you had not told us to expect a 23758 crash, then we would not be able to draw any conclusion from our 23759 observations. 23760 23761 * If you wish to suggest changes to the `as' source, send us context 23762 diffs, as generated by `diff' with the `-u', `-c', or `-p' option. 23763 Always send diffs from the old file to the new file. If you even 23764 discuss something in the `as' source, refer to it by context, not 23765 by line number. 23766 23767 The line numbers in our development sources will not match those 23768 in your sources. Your line numbers would convey no useful 23769 information to us. 23770 23771 Here are some things that are not necessary: 23772 23773 * A description of the envelope of the bug. 23774 23775 Often people who encounter a bug spend a lot of time investigating 23776 which changes to the input file will make the bug go away and which 23777 changes will not affect it. 23778 23779 This is often time consuming and not very useful, because the way 23780 we will find the bug is by running a single example under the 23781 debugger with breakpoints, not by pure deduction from a series of 23782 examples. We recommend that you save your time for something else. 23783 23784 Of course, if you can find a simpler example to report _instead_ 23785 of the original one, that is a convenience for us. Errors in the 23786 output will be easier to spot, running under the debugger will take 23787 less time, and so on. 23788 23789 However, simplification is not vital; if you do not want to do 23790 this, report the bug anyway and send us the entire test case you 23791 used. 23792 23793 * A patch for the bug. 23794 23795 A patch for the bug does help us if it is a good one. But do not 23796 omit the necessary information, such as the test case, on the 23797 assumption that a patch is all we need. We might see problems 23798 with your patch and decide to fix the problem another way, or we 23799 might not understand it at all. 23800 23801 Sometimes with a program as complicated as `as' it is very hard to 23802 construct an example that will make the program follow a certain 23803 path through the code. If you do not send us the example, we will 23804 not be able to construct one, so we will not be able to verify 23805 that the bug is fixed. 23806 23807 And if we cannot understand what bug you are trying to fix, or why 23808 your patch should be an improvement, we will not install it. A 23809 test case will help us to understand. 23810 23811 * A guess about what the bug is or what it depends on. 23812 23813 Such guesses are usually wrong. Even we cannot guess right about 23814 such things without first using the debugger to find the facts. 23815 23816 23817File: as.info, Node: Acknowledgements, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top 23818 2381911 Acknowledgements 23820******************* 23821 23822If you have contributed to GAS and your name isn't listed here, it is 23823not meant as a slight. We just don't know about it. Send mail to the 23824maintainer, and we'll correct the situation. Currently the maintainer 23825is Nick Clifton (email address `nickc@redhat.com'). 23826 23827 Dean Elsner wrote the original GNU assembler for the VAX.(1) 23828 23829 Jay Fenlason maintained GAS for a while, adding support for 23830GDB-specific debug information and the 68k series machines, most of the 23831preprocessing pass, and extensive changes in `messages.c', 23832`input-file.c', `write.c'. 23833 23834 K. Richard Pixley maintained GAS for a while, adding various 23835enhancements and many bug fixes, including merging support for several 23836processors, breaking GAS up to handle multiple object file format back 23837ends (including heavy rewrite, testing, an integration of the coff and 23838b.out back ends), adding configuration including heavy testing and 23839verification of cross assemblers and file splits and renaming, 23840converted GAS to strictly ANSI C including full prototypes, added 23841support for m680[34]0 and cpu32, did considerable work on i960 23842including a COFF port (including considerable amounts of reverse 23843engineering), a SPARC opcode file rewrite, DECstation, rs6000, and 23844hp300hpux host ports, updated "know" assertions and made them work, 23845much other reorganization, cleanup, and lint. 23846 23847 Ken Raeburn wrote the high-level BFD interface code to replace most 23848of the code in format-specific I/O modules. 23849 23850 The original VMS support was contributed by David L. Kashtan. Eric 23851Youngdale has done much work with it since. 23852 23853 The Intel 80386 machine description was written by Eliot Dresselhaus. 23854 23855 Minh Tran-Le at IntelliCorp contributed some AIX 386 support. 23856 23857 The Motorola 88k machine description was contributed by Devon Bowen 23858of Buffalo University and Torbjorn Granlund of the Swedish Institute of 23859Computer Science. 23860 23861 Keith Knowles at the Open Software Foundation wrote the original 23862MIPS back end (`tc-mips.c', `tc-mips.h'), and contributed Rose format 23863support (which hasn't been merged in yet). Ralph Campbell worked with 23864the MIPS code to support a.out format. 23865 23866 Support for the Zilog Z8k and Renesas H8/300 processors (tc-z8k, 23867tc-h8300), and IEEE 695 object file format (obj-ieee), was written by 23868Steve Chamberlain of Cygnus Support. Steve also modified the COFF back 23869end to use BFD for some low-level operations, for use with the H8/300 23870and AMD 29k targets. 23871 23872 John Gilmore built the AMD 29000 support, added `.include' support, 23873and simplified the configuration of which versions accept which 23874directives. He updated the 68k machine description so that Motorola's 23875opcodes always produced fixed-size instructions (e.g., `jsr'), while 23876synthetic instructions remained shrinkable (`jbsr'). John fixed many 23877bugs, including true tested cross-compilation support, and one bug in 23878relaxation that took a week and required the proverbial one-bit fix. 23879 23880 Ian Lance Taylor of Cygnus Support merged the Motorola and MIT 23881syntax for the 68k, completed support for some COFF targets (68k, i386 23882SVR3, and SCO Unix), added support for MIPS ECOFF and ELF targets, 23883wrote the initial RS/6000 and PowerPC assembler, and made a few other 23884minor patches. 23885 23886 Steve Chamberlain made GAS able to generate listings. 23887 23888 Hewlett-Packard contributed support for the HP9000/300. 23889 23890 Jeff Law wrote GAS and BFD support for the native HPPA object format 23891(SOM) along with a fairly extensive HPPA testsuite (for both SOM and 23892ELF object formats). This work was supported by both the Center for 23893Software Science at the University of Utah and Cygnus Support. 23894 23895 Support for ELF format files has been worked on by Mark Eichin of 23896Cygnus Support (original, incomplete implementation for SPARC), Pete 23897Hoogenboom and Jeff Law at the University of Utah (HPPA mainly), 23898Michael Meissner of the Open Software Foundation (i386 mainly), and Ken 23899Raeburn of Cygnus Support (sparc, and some initial 64-bit support). 23900 23901 Linas Vepstas added GAS support for the ESA/390 "IBM 370" 23902architecture. 23903 23904 Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote 23905GAS and BFD support for openVMS/Alpha. 23906 23907 Timothy Wall, Michael Hayes, and Greg Smart contributed to the 23908various tic* flavors. 23909 23910 David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from 23911Tensilica, Inc. added support for Xtensa processors. 23912 23913 Several engineers at Cygnus Support have also provided many small 23914bug fixes and configuration enhancements. 23915 23916 Jon Beniston added support for the Lattice Mico32 architecture. 23917 23918 Many others have contributed large or small bugfixes and 23919enhancements. If you have contributed significant work and are not 23920mentioned on this list, and want to be, let us know. Some of the 23921history has been lost; we are not intentionally leaving anyone out. 23922 23923 ---------- Footnotes ---------- 23924 23925 (1) Any more details? 23926 23927 23928File: as.info, Node: GNU Free Documentation License, Next: AS Index, Prev: Acknowledgements, Up: Top 23929 23930Appendix A GNU Free Documentation License 23931***************************************** 23932 23933 Version 1.3, 3 November 2008 23934 23935 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 23936 `http://fsf.org/' 23937 23938 Everyone is permitted to copy and distribute verbatim copies 23939 of this license document, but changing it is not allowed. 23940 23941 0. PREAMBLE 23942 23943 The purpose of this License is to make a manual, textbook, or other 23944 functional and useful document "free" in the sense of freedom: to 23945 assure everyone the effective freedom to copy and redistribute it, 23946 with or without modifying it, either commercially or 23947 noncommercially. Secondarily, this License preserves for the 23948 author and publisher a way to get credit for their work, while not 23949 being considered responsible for modifications made by others. 23950 23951 This License is a kind of "copyleft", which means that derivative 23952 works of the document must themselves be free in the same sense. 23953 It complements the GNU General Public License, which is a copyleft 23954 license designed for free software. 23955 23956 We have designed this License in order to use it for manuals for 23957 free software, because free software needs free documentation: a 23958 free program should come with manuals providing the same freedoms 23959 that the software does. But this License is not limited to 23960 software manuals; it can be used for any textual work, regardless 23961 of subject matter or whether it is published as a printed book. 23962 We recommend this License principally for works whose purpose is 23963 instruction or reference. 23964 23965 1. APPLICABILITY AND DEFINITIONS 23966 23967 This License applies to any manual or other work, in any medium, 23968 that contains a notice placed by the copyright holder saying it 23969 can be distributed under the terms of this License. Such a notice 23970 grants a world-wide, royalty-free license, unlimited in duration, 23971 to use that work under the conditions stated herein. The 23972 "Document", below, refers to any such manual or work. Any member 23973 of the public is a licensee, and is addressed as "you". You 23974 accept the license if you copy, modify or distribute the work in a 23975 way requiring permission under copyright law. 23976 23977 A "Modified Version" of the Document means any work containing the 23978 Document or a portion of it, either copied verbatim, or with 23979 modifications and/or translated into another language. 23980 23981 A "Secondary Section" is a named appendix or a front-matter section 23982 of the Document that deals exclusively with the relationship of the 23983 publishers or authors of the Document to the Document's overall 23984 subject (or to related matters) and contains nothing that could 23985 fall directly within that overall subject. (Thus, if the Document 23986 is in part a textbook of mathematics, a Secondary Section may not 23987 explain any mathematics.) The relationship could be a matter of 23988 historical connection with the subject or with related matters, or 23989 of legal, commercial, philosophical, ethical or political position 23990 regarding them. 23991 23992 The "Invariant Sections" are certain Secondary Sections whose 23993 titles are designated, as being those of Invariant Sections, in 23994 the notice that says that the Document is released under this 23995 License. If a section does not fit the above definition of 23996 Secondary then it is not allowed to be designated as Invariant. 23997 The Document may contain zero Invariant Sections. If the Document 23998 does not identify any Invariant Sections then there are none. 23999 24000 The "Cover Texts" are certain short passages of text that are 24001 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 24002 that says that the Document is released under this License. A 24003 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 24004 be at most 25 words. 24005 24006 A "Transparent" copy of the Document means a machine-readable copy, 24007 represented in a format whose specification is available to the 24008 general public, that is suitable for revising the document 24009 straightforwardly with generic text editors or (for images 24010 composed of pixels) generic paint programs or (for drawings) some 24011 widely available drawing editor, and that is suitable for input to 24012 text formatters or for automatic translation to a variety of 24013 formats suitable for input to text formatters. A copy made in an 24014 otherwise Transparent file format whose markup, or absence of 24015 markup, has been arranged to thwart or discourage subsequent 24016 modification by readers is not Transparent. An image format is 24017 not Transparent if used for any substantial amount of text. A 24018 copy that is not "Transparent" is called "Opaque". 24019 24020 Examples of suitable formats for Transparent copies include plain 24021 ASCII without markup, Texinfo input format, LaTeX input format, 24022 SGML or XML using a publicly available DTD, and 24023 standard-conforming simple HTML, PostScript or PDF designed for 24024 human modification. Examples of transparent image formats include 24025 PNG, XCF and JPG. Opaque formats include proprietary formats that 24026 can be read and edited only by proprietary word processors, SGML or 24027 XML for which the DTD and/or processing tools are not generally 24028 available, and the machine-generated HTML, PostScript or PDF 24029 produced by some word processors for output purposes only. 24030 24031 The "Title Page" means, for a printed book, the title page itself, 24032 plus such following pages as are needed to hold, legibly, the 24033 material this License requires to appear in the title page. For 24034 works in formats which do not have any title page as such, "Title 24035 Page" means the text near the most prominent appearance of the 24036 work's title, preceding the beginning of the body of the text. 24037 24038 The "publisher" means any person or entity that distributes copies 24039 of the Document to the public. 24040 24041 A section "Entitled XYZ" means a named subunit of the Document 24042 whose title either is precisely XYZ or contains XYZ in parentheses 24043 following text that translates XYZ in another language. (Here XYZ 24044 stands for a specific section name mentioned below, such as 24045 "Acknowledgements", "Dedications", "Endorsements", or "History".) 24046 To "Preserve the Title" of such a section when you modify the 24047 Document means that it remains a section "Entitled XYZ" according 24048 to this definition. 24049 24050 The Document may include Warranty Disclaimers next to the notice 24051 which states that this License applies to the Document. These 24052 Warranty Disclaimers are considered to be included by reference in 24053 this License, but only as regards disclaiming warranties: any other 24054 implication that these Warranty Disclaimers may have is void and 24055 has no effect on the meaning of this License. 24056 24057 2. VERBATIM COPYING 24058 24059 You may copy and distribute the Document in any medium, either 24060 commercially or noncommercially, provided that this License, the 24061 copyright notices, and the license notice saying this License 24062 applies to the Document are reproduced in all copies, and that you 24063 add no other conditions whatsoever to those of this License. You 24064 may not use technical measures to obstruct or control the reading 24065 or further copying of the copies you make or distribute. However, 24066 you may accept compensation in exchange for copies. If you 24067 distribute a large enough number of copies you must also follow 24068 the conditions in section 3. 24069 24070 You may also lend copies, under the same conditions stated above, 24071 and you may publicly display copies. 24072 24073 3. COPYING IN QUANTITY 24074 24075 If you publish printed copies (or copies in media that commonly 24076 have printed covers) of the Document, numbering more than 100, and 24077 the Document's license notice requires Cover Texts, you must 24078 enclose the copies in covers that carry, clearly and legibly, all 24079 these Cover Texts: Front-Cover Texts on the front cover, and 24080 Back-Cover Texts on the back cover. Both covers must also clearly 24081 and legibly identify you as the publisher of these copies. The 24082 front cover must present the full title with all words of the 24083 title equally prominent and visible. You may add other material 24084 on the covers in addition. Copying with changes limited to the 24085 covers, as long as they preserve the title of the Document and 24086 satisfy these conditions, can be treated as verbatim copying in 24087 other respects. 24088 24089 If the required texts for either cover are too voluminous to fit 24090 legibly, you should put the first ones listed (as many as fit 24091 reasonably) on the actual cover, and continue the rest onto 24092 adjacent pages. 24093 24094 If you publish or distribute Opaque copies of the Document 24095 numbering more than 100, you must either include a 24096 machine-readable Transparent copy along with each Opaque copy, or 24097 state in or with each Opaque copy a computer-network location from 24098 which the general network-using public has access to download 24099 using public-standard network protocols a complete Transparent 24100 copy of the Document, free of added material. If you use the 24101 latter option, you must take reasonably prudent steps, when you 24102 begin distribution of Opaque copies in quantity, to ensure that 24103 this Transparent copy will remain thus accessible at the stated 24104 location until at least one year after the last time you 24105 distribute an Opaque copy (directly or through your agents or 24106 retailers) of that edition to the public. 24107 24108 It is requested, but not required, that you contact the authors of 24109 the Document well before redistributing any large number of 24110 copies, to give them a chance to provide you with an updated 24111 version of the Document. 24112 24113 4. MODIFICATIONS 24114 24115 You may copy and distribute a Modified Version of the Document 24116 under the conditions of sections 2 and 3 above, provided that you 24117 release the Modified Version under precisely this License, with 24118 the Modified Version filling the role of the Document, thus 24119 licensing distribution and modification of the Modified Version to 24120 whoever possesses a copy of it. In addition, you must do these 24121 things in the Modified Version: 24122 24123 A. Use in the Title Page (and on the covers, if any) a title 24124 distinct from that of the Document, and from those of 24125 previous versions (which should, if there were any, be listed 24126 in the History section of the Document). You may use the 24127 same title as a previous version if the original publisher of 24128 that version gives permission. 24129 24130 B. List on the Title Page, as authors, one or more persons or 24131 entities responsible for authorship of the modifications in 24132 the Modified Version, together with at least five of the 24133 principal authors of the Document (all of its principal 24134 authors, if it has fewer than five), unless they release you 24135 from this requirement. 24136 24137 C. State on the Title page the name of the publisher of the 24138 Modified Version, as the publisher. 24139 24140 D. Preserve all the copyright notices of the Document. 24141 24142 E. Add an appropriate copyright notice for your modifications 24143 adjacent to the other copyright notices. 24144 24145 F. Include, immediately after the copyright notices, a license 24146 notice giving the public permission to use the Modified 24147 Version under the terms of this License, in the form shown in 24148 the Addendum below. 24149 24150 G. Preserve in that license notice the full lists of Invariant 24151 Sections and required Cover Texts given in the Document's 24152 license notice. 24153 24154 H. Include an unaltered copy of this License. 24155 24156 I. Preserve the section Entitled "History", Preserve its Title, 24157 and add to it an item stating at least the title, year, new 24158 authors, and publisher of the Modified Version as given on 24159 the Title Page. If there is no section Entitled "History" in 24160 the Document, create one stating the title, year, authors, 24161 and publisher of the Document as given on its Title Page, 24162 then add an item describing the Modified Version as stated in 24163 the previous sentence. 24164 24165 J. Preserve the network location, if any, given in the Document 24166 for public access to a Transparent copy of the Document, and 24167 likewise the network locations given in the Document for 24168 previous versions it was based on. These may be placed in 24169 the "History" section. You may omit a network location for a 24170 work that was published at least four years before the 24171 Document itself, or if the original publisher of the version 24172 it refers to gives permission. 24173 24174 K. For any section Entitled "Acknowledgements" or "Dedications", 24175 Preserve the Title of the section, and preserve in the 24176 section all the substance and tone of each of the contributor 24177 acknowledgements and/or dedications given therein. 24178 24179 L. Preserve all the Invariant Sections of the Document, 24180 unaltered in their text and in their titles. Section numbers 24181 or the equivalent are not considered part of the section 24182 titles. 24183 24184 M. Delete any section Entitled "Endorsements". Such a section 24185 may not be included in the Modified Version. 24186 24187 N. Do not retitle any existing section to be Entitled 24188 "Endorsements" or to conflict in title with any Invariant 24189 Section. 24190 24191 O. Preserve any Warranty Disclaimers. 24192 24193 If the Modified Version includes new front-matter sections or 24194 appendices that qualify as Secondary Sections and contain no 24195 material copied from the Document, you may at your option 24196 designate some or all of these sections as invariant. To do this, 24197 add their titles to the list of Invariant Sections in the Modified 24198 Version's license notice. These titles must be distinct from any 24199 other section titles. 24200 24201 You may add a section Entitled "Endorsements", provided it contains 24202 nothing but endorsements of your Modified Version by various 24203 parties--for example, statements of peer review or that the text 24204 has been approved by an organization as the authoritative 24205 definition of a standard. 24206 24207 You may add a passage of up to five words as a Front-Cover Text, 24208 and a passage of up to 25 words as a Back-Cover Text, to the end 24209 of the list of Cover Texts in the Modified Version. Only one 24210 passage of Front-Cover Text and one of Back-Cover Text may be 24211 added by (or through arrangements made by) any one entity. If the 24212 Document already includes a cover text for the same cover, 24213 previously added by you or by arrangement made by the same entity 24214 you are acting on behalf of, you may not add another; but you may 24215 replace the old one, on explicit permission from the previous 24216 publisher that added the old one. 24217 24218 The author(s) and publisher(s) of the Document do not by this 24219 License give permission to use their names for publicity for or to 24220 assert or imply endorsement of any Modified Version. 24221 24222 5. COMBINING DOCUMENTS 24223 24224 You may combine the Document with other documents released under 24225 this License, under the terms defined in section 4 above for 24226 modified versions, provided that you include in the combination 24227 all of the Invariant Sections of all of the original documents, 24228 unmodified, and list them all as Invariant Sections of your 24229 combined work in its license notice, and that you preserve all 24230 their Warranty Disclaimers. 24231 24232 The combined work need only contain one copy of this License, and 24233 multiple identical Invariant Sections may be replaced with a single 24234 copy. If there are multiple Invariant Sections with the same name 24235 but different contents, make the title of each such section unique 24236 by adding at the end of it, in parentheses, the name of the 24237 original author or publisher of that section if known, or else a 24238 unique number. Make the same adjustment to the section titles in 24239 the list of Invariant Sections in the license notice of the 24240 combined work. 24241 24242 In the combination, you must combine any sections Entitled 24243 "History" in the various original documents, forming one section 24244 Entitled "History"; likewise combine any sections Entitled 24245 "Acknowledgements", and any sections Entitled "Dedications". You 24246 must delete all sections Entitled "Endorsements." 24247 24248 6. COLLECTIONS OF DOCUMENTS 24249 24250 You may make a collection consisting of the Document and other 24251 documents released under this License, and replace the individual 24252 copies of this License in the various documents with a single copy 24253 that is included in the collection, provided that you follow the 24254 rules of this License for verbatim copying of each of the 24255 documents in all other respects. 24256 24257 You may extract a single document from such a collection, and 24258 distribute it individually under this License, provided you insert 24259 a copy of this License into the extracted document, and follow 24260 this License in all other respects regarding verbatim copying of 24261 that document. 24262 24263 7. AGGREGATION WITH INDEPENDENT WORKS 24264 24265 A compilation of the Document or its derivatives with other 24266 separate and independent documents or works, in or on a volume of 24267 a storage or distribution medium, is called an "aggregate" if the 24268 copyright resulting from the compilation is not used to limit the 24269 legal rights of the compilation's users beyond what the individual 24270 works permit. When the Document is included in an aggregate, this 24271 License does not apply to the other works in the aggregate which 24272 are not themselves derivative works of the Document. 24273 24274 If the Cover Text requirement of section 3 is applicable to these 24275 copies of the Document, then if the Document is less than one half 24276 of the entire aggregate, the Document's Cover Texts may be placed 24277 on covers that bracket the Document within the aggregate, or the 24278 electronic equivalent of covers if the Document is in electronic 24279 form. Otherwise they must appear on printed covers that bracket 24280 the whole aggregate. 24281 24282 8. TRANSLATION 24283 24284 Translation is considered a kind of modification, so you may 24285 distribute translations of the Document under the terms of section 24286 4. Replacing Invariant Sections with translations requires special 24287 permission from their copyright holders, but you may include 24288 translations of some or all Invariant Sections in addition to the 24289 original versions of these Invariant Sections. You may include a 24290 translation of this License, and all the license notices in the 24291 Document, and any Warranty Disclaimers, provided that you also 24292 include the original English version of this License and the 24293 original versions of those notices and disclaimers. In case of a 24294 disagreement between the translation and the original version of 24295 this License or a notice or disclaimer, the original version will 24296 prevail. 24297 24298 If a section in the Document is Entitled "Acknowledgements", 24299 "Dedications", or "History", the requirement (section 4) to 24300 Preserve its Title (section 1) will typically require changing the 24301 actual title. 24302 24303 9. TERMINATION 24304 24305 You may not copy, modify, sublicense, or distribute the Document 24306 except as expressly provided under this License. Any attempt 24307 otherwise to copy, modify, sublicense, or distribute it is void, 24308 and will automatically terminate your rights under this License. 24309 24310 However, if you cease all violation of this License, then your 24311 license from a particular copyright holder is reinstated (a) 24312 provisionally, unless and until the copyright holder explicitly 24313 and finally terminates your license, and (b) permanently, if the 24314 copyright holder fails to notify you of the violation by some 24315 reasonable means prior to 60 days after the cessation. 24316 24317 Moreover, your license from a particular copyright holder is 24318 reinstated permanently if the copyright holder notifies you of the 24319 violation by some reasonable means, this is the first time you have 24320 received notice of violation of this License (for any work) from 24321 that copyright holder, and you cure the violation prior to 30 days 24322 after your receipt of the notice. 24323 24324 Termination of your rights under this section does not terminate 24325 the licenses of parties who have received copies or rights from 24326 you under this License. If your rights have been terminated and 24327 not permanently reinstated, receipt of a copy of some or all of 24328 the same material does not give you any rights to use it. 24329 24330 10. FUTURE REVISIONS OF THIS LICENSE 24331 24332 The Free Software Foundation may publish new, revised versions of 24333 the GNU Free Documentation License from time to time. Such new 24334 versions will be similar in spirit to the present version, but may 24335 differ in detail to address new problems or concerns. See 24336 `http://www.gnu.org/copyleft/'. 24337 24338 Each version of the License is given a distinguishing version 24339 number. If the Document specifies that a particular numbered 24340 version of this License "or any later version" applies to it, you 24341 have the option of following the terms and conditions either of 24342 that specified version or of any later version that has been 24343 published (not as a draft) by the Free Software Foundation. If 24344 the Document does not specify a version number of this License, 24345 you may choose any version ever published (not as a draft) by the 24346 Free Software Foundation. If the Document specifies that a proxy 24347 can decide which future versions of this License can be used, that 24348 proxy's public statement of acceptance of a version permanently 24349 authorizes you to choose that version for the Document. 24350 24351 11. RELICENSING 24352 24353 "Massive Multiauthor Collaboration Site" (or "MMC Site") means any 24354 World Wide Web server that publishes copyrightable works and also 24355 provides prominent facilities for anybody to edit those works. A 24356 public wiki that anybody can edit is an example of such a server. 24357 A "Massive Multiauthor Collaboration" (or "MMC") contained in the 24358 site means any set of copyrightable works thus published on the MMC 24359 site. 24360 24361 "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 24362 license published by Creative Commons Corporation, a not-for-profit 24363 corporation with a principal place of business in San Francisco, 24364 California, as well as future copyleft versions of that license 24365 published by that same organization. 24366 24367 "Incorporate" means to publish or republish a Document, in whole or 24368 in part, as part of another Document. 24369 24370 An MMC is "eligible for relicensing" if it is licensed under this 24371 License, and if all works that were first published under this 24372 License somewhere other than this MMC, and subsequently 24373 incorporated in whole or in part into the MMC, (1) had no cover 24374 texts or invariant sections, and (2) were thus incorporated prior 24375 to November 1, 2008. 24376 24377 The operator of an MMC Site may republish an MMC contained in the 24378 site under CC-BY-SA on the same site at any time before August 1, 24379 2009, provided the MMC is eligible for relicensing. 24380 24381 24382ADDENDUM: How to use this License for your documents 24383==================================================== 24384 24385To use this License in a document you have written, include a copy of 24386the License in the document and put the following copyright and license 24387notices just after the title page: 24388 24389 Copyright (C) YEAR YOUR NAME. 24390 Permission is granted to copy, distribute and/or modify this document 24391 under the terms of the GNU Free Documentation License, Version 1.3 24392 or any later version published by the Free Software Foundation; 24393 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 24394 Texts. A copy of the license is included in the section entitled ``GNU 24395 Free Documentation License''. 24396 24397 If you have Invariant Sections, Front-Cover Texts and Back-Cover 24398Texts, replace the "with...Texts." line with this: 24399 24400 with the Invariant Sections being LIST THEIR TITLES, with 24401 the Front-Cover Texts being LIST, and with the Back-Cover Texts 24402 being LIST. 24403 24404 If you have Invariant Sections without Cover Texts, or some other 24405combination of the three, merge those two alternatives to suit the 24406situation. 24407 24408 If your document contains nontrivial examples of program code, we 24409recommend releasing these examples in parallel under your choice of 24410free software license, such as the GNU General Public License, to 24411permit their use in free software. 24412 24413 24414File: as.info, Node: AS Index, Prev: GNU Free Documentation License, Up: Top 24415 24416AS Index 24417******** 24418 24419[index] 24420* Menu: 24421 24422* \" (doublequote character): Strings. (line 43) 24423* \\ (\ character): Strings. (line 40) 24424* \b (backspace character): Strings. (line 15) 24425* \DDD (octal character code): Strings. (line 30) 24426* \f (formfeed character): Strings. (line 18) 24427* \n (newline character): Strings. (line 21) 24428* \r (carriage return character): Strings. (line 24) 24429* \t (tab): Strings. (line 27) 24430* \XD... (hex character code): Strings. (line 36) 24431* #: Comments. (line 33) 24432* #APP: Preprocessing. (line 27) 24433* #NO_APP: Preprocessing. (line 27) 24434* $ in symbol names <1>: D30V-Chars. (line 70) 24435* $ in symbol names <2>: D10V-Chars. (line 53) 24436* $ in symbol names <3>: SH64-Chars. (line 15) 24437* $ in symbol names <4>: SH-Chars. (line 15) 24438* $ in symbol names: Meta-Chars. (line 10) 24439* $a: ARM Mapping Symbols. 24440 (line 9) 24441* $acos math builtin, TIC54X: TIC54X-Builtins. (line 10) 24442* $asin math builtin, TIC54X: TIC54X-Builtins. (line 13) 24443* $atan math builtin, TIC54X: TIC54X-Builtins. (line 16) 24444* $atan2 math builtin, TIC54X: TIC54X-Builtins. (line 19) 24445* $ceil math builtin, TIC54X: TIC54X-Builtins. (line 22) 24446* $cos math builtin, TIC54X: TIC54X-Builtins. (line 28) 24447* $cosh math builtin, TIC54X: TIC54X-Builtins. (line 25) 24448* $cvf math builtin, TIC54X: TIC54X-Builtins. (line 31) 24449* $cvi math builtin, TIC54X: TIC54X-Builtins. (line 34) 24450* $d <1>: AArch64 Mapping Symbols. 24451 (line 12) 24452* $d: ARM Mapping Symbols. 24453 (line 15) 24454* $exp math builtin, TIC54X: TIC54X-Builtins. (line 37) 24455* $fabs math builtin, TIC54X: TIC54X-Builtins. (line 40) 24456* $firstch subsym builtin, TIC54X: TIC54X-Macros. (line 26) 24457* $floor math builtin, TIC54X: TIC54X-Builtins. (line 43) 24458* $fmod math builtin, TIC54X: TIC54X-Builtins. (line 47) 24459* $int math builtin, TIC54X: TIC54X-Builtins. (line 50) 24460* $iscons subsym builtin, TIC54X: TIC54X-Macros. (line 43) 24461* $isdefed subsym builtin, TIC54X: TIC54X-Macros. (line 34) 24462* $ismember subsym builtin, TIC54X: TIC54X-Macros. (line 38) 24463* $isname subsym builtin, TIC54X: TIC54X-Macros. (line 47) 24464* $isreg subsym builtin, TIC54X: TIC54X-Macros. (line 50) 24465* $lastch subsym builtin, TIC54X: TIC54X-Macros. (line 30) 24466* $ldexp math builtin, TIC54X: TIC54X-Builtins. (line 53) 24467* $log math builtin, TIC54X: TIC54X-Builtins. (line 59) 24468* $log10 math builtin, TIC54X: TIC54X-Builtins. (line 56) 24469* $max math builtin, TIC54X: TIC54X-Builtins. (line 62) 24470* $min math builtin, TIC54X: TIC54X-Builtins. (line 65) 24471* $pow math builtin, TIC54X: TIC54X-Builtins. (line 68) 24472* $round math builtin, TIC54X: TIC54X-Builtins. (line 71) 24473* $sgn math builtin, TIC54X: TIC54X-Builtins. (line 74) 24474* $sin math builtin, TIC54X: TIC54X-Builtins. (line 77) 24475* $sinh math builtin, TIC54X: TIC54X-Builtins. (line 80) 24476* $sqrt math builtin, TIC54X: TIC54X-Builtins. (line 83) 24477* $structacc subsym builtin, TIC54X: TIC54X-Macros. (line 57) 24478* $structsz subsym builtin, TIC54X: TIC54X-Macros. (line 54) 24479* $symcmp subsym builtin, TIC54X: TIC54X-Macros. (line 23) 24480* $symlen subsym builtin, TIC54X: TIC54X-Macros. (line 20) 24481* $t: ARM Mapping Symbols. 24482 (line 12) 24483* $tan math builtin, TIC54X: TIC54X-Builtins. (line 86) 24484* $tanh math builtin, TIC54X: TIC54X-Builtins. (line 89) 24485* $trunc math builtin, TIC54X: TIC54X-Builtins. (line 92) 24486* $x: AArch64 Mapping Symbols. 24487 (line 9) 24488* %gp: RX-Modifiers. (line 6) 24489* %gpreg: RX-Modifiers. (line 22) 24490* %pidreg: RX-Modifiers. (line 25) 24491* -+ option, VAX/VMS: VAX-Opts. (line 71) 24492* --: Command Line. (line 10) 24493* --32 option, i386: i386-Options. (line 8) 24494* --32 option, x86-64: i386-Options. (line 8) 24495* --64 option, i386: i386-Options. (line 8) 24496* --64 option, x86-64: i386-Options. (line 8) 24497* --absolute-literals: Xtensa Options. (line 40) 24498* --allow-reg-prefix: SH Options. (line 9) 24499* --alternate: alternate. (line 6) 24500* --auto-litpools: Xtensa Options. (line 23) 24501* --base-size-default-16: M68K-Opts. (line 65) 24502* --base-size-default-32: M68K-Opts. (line 65) 24503* --big: SH Options. (line 9) 24504* --bitwise-or option, M680x0: M68K-Opts. (line 58) 24505* --compress-debug-sections= option: Overview. (line 329) 24506* --disp-size-default-16: M68K-Opts. (line 74) 24507* --disp-size-default-32: M68K-Opts. (line 74) 24508* --divide option, i386: i386-Options. (line 24) 24509* --dsp: SH Options. (line 9) 24510* --emulation=crisaout command line option, CRIS: CRIS-Opts. (line 9) 24511* --emulation=criself command line option, CRIS: CRIS-Opts. (line 9) 24512* --enforce-aligned-data: Sparc-Aligned-Data. (line 11) 24513* --fatal-warnings: W. (line 16) 24514* --fdpic: SH Options. (line 31) 24515* --fix-v4bx command line option, ARM: ARM Options. (line 189) 24516* --fixed-special-register-names command line option, MMIX: MMIX-Opts. 24517 (line 8) 24518* --force-long-branches: M68HC11-Opts. (line 82) 24519* --generate-example: M68HC11-Opts. (line 99) 24520* --globalize-symbols command line option, MMIX: MMIX-Opts. (line 12) 24521* --gnu-syntax command line option, MMIX: MMIX-Opts. (line 16) 24522* --linker-allocated-gregs command line option, MMIX: MMIX-Opts. 24523 (line 67) 24524* --listing-cont-lines: listing. (line 34) 24525* --listing-lhs-width: listing. (line 16) 24526* --listing-lhs-width2: listing. (line 21) 24527* --listing-rhs-width: listing. (line 28) 24528* --little: SH Options. (line 9) 24529* --longcalls: Xtensa Options. (line 54) 24530* --march=ARCHITECTURE command line option, CRIS: CRIS-Opts. (line 34) 24531* --MD: MD. (line 6) 24532* --mul-bug-abort command line option, CRIS: CRIS-Opts. (line 62) 24533* --no-absolute-literals: Xtensa Options. (line 40) 24534* --no-auto-litpools: Xtensa Options. (line 23) 24535* --no-expand command line option, MMIX: MMIX-Opts. (line 31) 24536* --no-longcalls: Xtensa Options. (line 54) 24537* --no-merge-gregs command line option, MMIX: MMIX-Opts. (line 36) 24538* --no-mul-bug-abort command line option, CRIS: CRIS-Opts. (line 62) 24539* --no-pad-sections: no-pad-sections. (line 6) 24540* --no-predefined-syms command line option, MMIX: MMIX-Opts. (line 22) 24541* --no-pushj-stubs command line option, MMIX: MMIX-Opts. (line 54) 24542* --no-stubs command line option, MMIX: MMIX-Opts. (line 54) 24543* --no-target-align: Xtensa Options. (line 47) 24544* --no-text-section-literals: Xtensa Options. (line 7) 24545* --no-trampolines: Xtensa Options. (line 75) 24546* --no-transform: Xtensa Options. (line 63) 24547* --no-underscore command line option, CRIS: CRIS-Opts. (line 15) 24548* --no-warn: W. (line 11) 24549* --pcrel: M68K-Opts. (line 86) 24550* --pic command line option, CRIS: CRIS-Opts. (line 27) 24551* --print-insn-syntax <1>: M68HC11-Opts. (line 88) 24552* --print-insn-syntax: XGATE-Opts. (line 25) 24553* --print-opcodes <1>: XGATE-Opts. (line 29) 24554* --print-opcodes: M68HC11-Opts. (line 92) 24555* --register-prefix-optional option, M680x0: M68K-Opts. (line 45) 24556* --relax: SH Options. (line 9) 24557* --relax command line option, MMIX: MMIX-Opts. (line 19) 24558* --rename-section: Xtensa Options. (line 71) 24559* --renesas: SH Options. (line 9) 24560* --sectname-subst: Section. (line 81) 24561* --short-branches: M68HC11-Opts. (line 67) 24562* --small: SH Options. (line 9) 24563* --statistics: statistics. (line 6) 24564* --strict-direct-mode: M68HC11-Opts. (line 57) 24565* --target-align: Xtensa Options. (line 47) 24566* --text-section-literals: Xtensa Options. (line 7) 24567* --traditional-format: traditional-format. (line 6) 24568* --trampolines: Xtensa Options. (line 75) 24569* --transform: Xtensa Options. (line 63) 24570* --underscore command line option, CRIS: CRIS-Opts. (line 15) 24571* --warn: W. (line 19) 24572* --x32 option, i386: i386-Options. (line 8) 24573* --x32 option, x86-64: i386-Options. (line 8) 24574* --xgate-ramoffset: M68HC11-Opts. (line 36) 24575* -1 option, VAX/VMS: VAX-Opts. (line 77) 24576* -32addr command line option, Alpha: Alpha Options. (line 57) 24577* -a: a. (line 6) 24578* -A options, i960: Options-i960. (line 6) 24579* -ac: a. (line 6) 24580* -ad: a. (line 6) 24581* -ag: a. (line 6) 24582* -ah: a. (line 6) 24583* -al: a. (line 6) 24584* -Aleon: Sparc-Opts. (line 25) 24585* -an: a. (line 6) 24586* -as: a. (line 6) 24587* -Asparc: Sparc-Opts. (line 25) 24588* -Asparcfmaf: Sparc-Opts. (line 25) 24589* -Asparcima: Sparc-Opts. (line 25) 24590* -Asparclet: Sparc-Opts. (line 25) 24591* -Asparclite: Sparc-Opts. (line 25) 24592* -Asparcvis: Sparc-Opts. (line 25) 24593* -Asparcvis2: Sparc-Opts. (line 25) 24594* -Asparcvis3: Sparc-Opts. (line 25) 24595* -Asparcvis3r: Sparc-Opts. (line 25) 24596* -Av6: Sparc-Opts. (line 25) 24597* -Av7: Sparc-Opts. (line 25) 24598* -Av8: Sparc-Opts. (line 25) 24599* -Av9: Sparc-Opts. (line 25) 24600* -Av9a: Sparc-Opts. (line 25) 24601* -Av9b: Sparc-Opts. (line 25) 24602* -Av9c: Sparc-Opts. (line 25) 24603* -Av9d: Sparc-Opts. (line 25) 24604* -Av9e: Sparc-Opts. (line 25) 24605* -Av9m: Sparc-Opts. (line 25) 24606* -Av9v: Sparc-Opts. (line 25) 24607* -b option, i960: Options-i960. (line 22) 24608* -big option, M32R: M32R-Opts. (line 35) 24609* -D: D. (line 6) 24610* -D, ignored on VAX: VAX-Opts. (line 11) 24611* -d, VAX option: VAX-Opts. (line 16) 24612* -eabi= command line option, ARM: ARM Options. (line 165) 24613* -EB command line option, AArch64: AArch64 Options. (line 6) 24614* -EB command line option, ARC: ARC Options. (line 36) 24615* -EB command line option, ARM: ARM Options. (line 170) 24616* -EB option (MIPS): MIPS Options. (line 13) 24617* -EB option, M32R: M32R-Opts. (line 39) 24618* -EB option, TILE-Gx: TILE-Gx Options. (line 11) 24619* -EL command line option, AArch64: AArch64 Options. (line 10) 24620* -EL command line option, ARC: ARC Options. (line 40) 24621* -EL command line option, ARM: ARM Options. (line 181) 24622* -EL option (MIPS): MIPS Options. (line 13) 24623* -EL option, M32R: M32R-Opts. (line 32) 24624* -EL option, TILE-Gx: TILE-Gx Options. (line 11) 24625* -f: f. (line 6) 24626* -F command line option, Alpha: Alpha Options. (line 57) 24627* -G command line option, Alpha: Alpha Options. (line 53) 24628* -g command line option, Alpha: Alpha Options. (line 47) 24629* -G option (MIPS): MIPS Options. (line 8) 24630* -H option, VAX/VMS: VAX-Opts. (line 81) 24631* -h option, VAX/VMS: VAX-Opts. (line 45) 24632* -I PATH: I. (line 6) 24633* -ignore-parallel-conflicts option, M32RX: M32R-Opts. (line 87) 24634* -Ip option, M32RX: M32R-Opts. (line 97) 24635* -J, ignored on VAX: VAX-Opts. (line 27) 24636* -K: K. (line 6) 24637* -k command line option, ARM: ARM Options. (line 185) 24638* -KPIC option, M32R: M32R-Opts. (line 42) 24639* -KPIC option, MIPS: MIPS Options. (line 21) 24640* -L: L. (line 6) 24641* -l option, M680x0: M68K-Opts. (line 33) 24642* -little option, M32R: M32R-Opts. (line 27) 24643* -M: M. (line 6) 24644* -m11/03: PDP-11-Options. (line 140) 24645* -m11/04: PDP-11-Options. (line 143) 24646* -m11/05: PDP-11-Options. (line 146) 24647* -m11/10: PDP-11-Options. (line 146) 24648* -m11/15: PDP-11-Options. (line 149) 24649* -m11/20: PDP-11-Options. (line 149) 24650* -m11/21: PDP-11-Options. (line 152) 24651* -m11/23: PDP-11-Options. (line 155) 24652* -m11/24: PDP-11-Options. (line 155) 24653* -m11/34: PDP-11-Options. (line 158) 24654* -m11/34a: PDP-11-Options. (line 161) 24655* -m11/35: PDP-11-Options. (line 164) 24656* -m11/40: PDP-11-Options. (line 164) 24657* -m11/44: PDP-11-Options. (line 167) 24658* -m11/45: PDP-11-Options. (line 170) 24659* -m11/50: PDP-11-Options. (line 170) 24660* -m11/53: PDP-11-Options. (line 173) 24661* -m11/55: PDP-11-Options. (line 170) 24662* -m11/60: PDP-11-Options. (line 176) 24663* -m11/70: PDP-11-Options. (line 170) 24664* -m11/73: PDP-11-Options. (line 173) 24665* -m11/83: PDP-11-Options. (line 173) 24666* -m11/84: PDP-11-Options. (line 173) 24667* -m11/93: PDP-11-Options. (line 173) 24668* -m11/94: PDP-11-Options. (line 173) 24669* -m16c option, M16C: M32C-Opts. (line 12) 24670* -m31 option, s390: s390 Options. (line 8) 24671* -m32 option, TILE-Gx: TILE-Gx Options. (line 8) 24672* -m32bit-doubles: RX-Opts. (line 9) 24673* -m32c option, M32C: M32C-Opts. (line 9) 24674* -m32r option, M32R: M32R-Opts. (line 21) 24675* -m32rx option, M32R2: M32R-Opts. (line 17) 24676* -m32rx option, M32RX: M32R-Opts. (line 9) 24677* -m4byte-align command line option, V850: V850 Options. (line 90) 24678* -m64 option, s390: s390 Options. (line 8) 24679* -m64 option, TILE-Gx: TILE-Gx Options. (line 8) 24680* -m64bit-doubles: RX-Opts. (line 15) 24681* -m68000 and related options: M68K-Opts. (line 98) 24682* -m68hc11: M68HC11-Opts. (line 9) 24683* -m68hc12: M68HC11-Opts. (line 14) 24684* -m68hcs12: M68HC11-Opts. (line 21) 24685* -m8byte-align command line option, V850: V850 Options. (line 86) 24686* -m[no-]68851 command line option, M680x0: M68K-Opts. (line 21) 24687* -m[no-]68881 command line option, M680x0: M68K-Opts. (line 21) 24688* -m[no-]div command line option, M680x0: M68K-Opts. (line 21) 24689* -m[no-]emac command line option, M680x0: M68K-Opts. (line 21) 24690* -m[no-]float command line option, M680x0: M68K-Opts. (line 21) 24691* -m[no-]mac command line option, M680x0: M68K-Opts. (line 21) 24692* -m[no-]usp command line option, M680x0: M68K-Opts. (line 21) 24693* -mabi= command line option, AArch64: AArch64 Options. (line 14) 24694* -madd-bnd-prefix option, i386: i386-Options. (line 132) 24695* -madd-bnd-prefix option, x86-64: i386-Options. (line 132) 24696* -mall: PDP-11-Options. (line 26) 24697* -mall-enabled command line option, LM32: LM32 Options. (line 30) 24698* -mall-extensions: PDP-11-Options. (line 26) 24699* -mall-opcodes command line option, AVR: AVR Options. (line 109) 24700* -mamd64 option, x86-64: i386-Options. (line 188) 24701* -mapcs-26 command line option, ARM: ARM Options. (line 137) 24702* -mapcs-32 command line option, ARM: ARM Options. (line 137) 24703* -mapcs-float command line option, ARM: ARM Options. (line 151) 24704* -mapcs-reentrant command line option, ARM: ARM Options. (line 156) 24705* -march= command line option, AArch64: AArch64 Options. (line 39) 24706* -march= command line option, ARM: ARM Options. (line 73) 24707* -march= command line option, M680x0: M68K-Opts. (line 8) 24708* -march= command line option, TIC6X: TIC6X Options. (line 6) 24709* -march= option, i386: i386-Options. (line 31) 24710* -march= option, s390: s390 Options. (line 25) 24711* -march= option, x86-64: i386-Options. (line 31) 24712* -matpcs command line option, ARM: ARM Options. (line 143) 24713* -mavxscalar= option, i386: i386-Options. (line 90) 24714* -mavxscalar= option, x86-64: i386-Options. (line 90) 24715* -mbarrel-shift-enabled command line option, LM32: LM32 Options. 24716 (line 12) 24717* -mbig-endian: RX-Opts. (line 20) 24718* -mbig-obj option, x86-64: i386-Options. (line 146) 24719* -mbreak-enabled command line option, LM32: LM32 Options. (line 27) 24720* -mccs command line option, ARM: ARM Options. (line 198) 24721* -mcis: PDP-11-Options. (line 32) 24722* -mcode-density command line option, ARC: ARC Options. (line 45) 24723* -mconstant-gp command line option, IA-64: IA-64 Options. (line 6) 24724* -mCPU command line option, Alpha: Alpha Options. (line 6) 24725* -mcpu option, cpu: TIC54X-Opts. (line 15) 24726* -mcpu=: RX-Opts. (line 75) 24727* -mcpu= command line option, AArch64: AArch64 Options. (line 19) 24728* -mcpu= command line option, ARM: ARM Options. (line 6) 24729* -mcpu= command line option, Blackfin: Blackfin Options. (line 6) 24730* -mcpu= command line option, M680x0: M68K-Opts. (line 14) 24731* -mcpu=CPU command line option, ARC: ARC Options. (line 10) 24732* -mcsm: PDP-11-Options. (line 43) 24733* -mdcache-enabled command line option, LM32: LM32 Options. (line 24) 24734* -mdebug command line option, Alpha: Alpha Options. (line 25) 24735* -mdivide-enabled command line option, LM32: LM32 Options. (line 9) 24736* -mdpfp command line option, ARC: ARC Options. (line 60) 24737* -mdsbt command line option, TIC6X: TIC6X Options. (line 13) 24738* -me option, stderr redirect: TIC54X-Opts. (line 20) 24739* -meis: PDP-11-Options. (line 46) 24740* -mepiphany command line option, Epiphany: Epiphany Options. 24741 (line 9) 24742* -mepiphany16 command line option, Epiphany: Epiphany Options. 24743 (line 13) 24744* -merrors-to-file option, stderr redirect: TIC54X-Opts. (line 20) 24745* -mesa option, s390: s390 Options. (line 17) 24746* -mevexlig= option, i386: i386-Options. (line 98) 24747* -mevexlig= option, x86-64: i386-Options. (line 98) 24748* -mevexrcig= option, i386: i386-Options. (line 178) 24749* -mevexrcig= option, x86-64: i386-Options. (line 178) 24750* -mevexwig= option, i386: i386-Options. (line 108) 24751* -mevexwig= option, x86-64: i386-Options. (line 108) 24752* -mf option, far-mode: TIC54X-Opts. (line 8) 24753* -mf11: PDP-11-Options. (line 122) 24754* -mfar-mode option, far-mode: TIC54X-Opts. (line 8) 24755* -mfdpic command line option, Blackfin: Blackfin Options. (line 19) 24756* -mfence-as-lock-add= option, i386: i386-Options. (line 159) 24757* -mfence-as-lock-add= option, x86-64: i386-Options. (line 159) 24758* -mfis: PDP-11-Options. (line 51) 24759* -mfloat-abi= command line option, ARM: ARM Options. (line 160) 24760* -mfp-11: PDP-11-Options. (line 56) 24761* -mfpp: PDP-11-Options. (line 56) 24762* -mfpu: PDP-11-Options. (line 56) 24763* -mfpu= command line option, ARM: ARM Options. (line 89) 24764* -mfpuda command line option, ARC: ARC Options. (line 63) 24765* -mgcc-abi: RX-Opts. (line 63) 24766* -mgcc-abi command line option, V850: V850 Options. (line 79) 24767* -mhard-float command line option, V850: V850 Options. (line 101) 24768* -micache-enabled command line option, LM32: LM32 Options. (line 21) 24769* -mimplicit-it command line option, ARM: ARM Options. (line 121) 24770* -mint-register: RX-Opts. (line 57) 24771* -mintel64 option, x86-64: i386-Options. (line 188) 24772* -mip2022 option, IP2K: IP2K-Opts. (line 14) 24773* -mip2022ext option, IP2022: IP2K-Opts. (line 9) 24774* -mj11: PDP-11-Options. (line 126) 24775* -mka11: PDP-11-Options. (line 92) 24776* -mkb11: PDP-11-Options. (line 95) 24777* -mkd11a: PDP-11-Options. (line 98) 24778* -mkd11b: PDP-11-Options. (line 101) 24779* -mkd11d: PDP-11-Options. (line 104) 24780* -mkd11e: PDP-11-Options. (line 107) 24781* -mkd11f: PDP-11-Options. (line 110) 24782* -mkd11h: PDP-11-Options. (line 110) 24783* -mkd11k: PDP-11-Options. (line 114) 24784* -mkd11q: PDP-11-Options. (line 110) 24785* -mkd11z: PDP-11-Options. (line 118) 24786* -mkev11: PDP-11-Options. (line 51) 24787* -mlimited-eis: PDP-11-Options. (line 64) 24788* -mlink-relax command line option, AVR: AVR Options. (line 121) 24789* -mlittle-endian: RX-Opts. (line 26) 24790* -mlong <1>: M68HC11-Opts. (line 45) 24791* -mlong: XGATE-Opts. (line 13) 24792* -mlong-double <1>: XGATE-Opts. (line 21) 24793* -mlong-double: M68HC11-Opts. (line 53) 24794* -mm9s12x: M68HC11-Opts. (line 27) 24795* -mm9s12xg: M68HC11-Opts. (line 32) 24796* -mmcu= command line option, AVR: AVR Options. (line 6) 24797* -mmfpt: PDP-11-Options. (line 70) 24798* -mmicrocode: PDP-11-Options. (line 83) 24799* -mmnemonic= option, i386: i386-Options. (line 115) 24800* -mmnemonic= option, x86-64: i386-Options. (line 115) 24801* -mmultiply-enabled command line option, LM32: LM32 Options. 24802 (line 6) 24803* -mmutiproc: PDP-11-Options. (line 73) 24804* -mmxps: PDP-11-Options. (line 77) 24805* -mnaked-reg option, i386: i386-Options. (line 127) 24806* -mnaked-reg option, x86-64: i386-Options. (line 127) 24807* -mnan= command line option, MIPS: MIPS Options. (line 347) 24808* -mno-allow-string-insns: RX-Opts. (line 82) 24809* -mno-cis: PDP-11-Options. (line 32) 24810* -mno-csm: PDP-11-Options. (line 43) 24811* -mno-dsbt command line option, TIC6X: TIC6X Options. (line 13) 24812* -mno-eis: PDP-11-Options. (line 46) 24813* -mno-extensions: PDP-11-Options. (line 29) 24814* -mno-fdpic command line option, Blackfin: Blackfin Options. 24815 (line 22) 24816* -mno-fis: PDP-11-Options. (line 51) 24817* -mno-fp-11: PDP-11-Options. (line 56) 24818* -mno-fpp: PDP-11-Options. (line 56) 24819* -mno-fpu: PDP-11-Options. (line 56) 24820* -mno-kev11: PDP-11-Options. (line 51) 24821* -mno-limited-eis: PDP-11-Options. (line 64) 24822* -mno-link-relax command line option, AVR: AVR Options. (line 125) 24823* -mno-mfpt: PDP-11-Options. (line 70) 24824* -mno-microcode: PDP-11-Options. (line 83) 24825* -mno-mutiproc: PDP-11-Options. (line 73) 24826* -mno-mxps: PDP-11-Options. (line 77) 24827* -mno-pic: PDP-11-Options. (line 11) 24828* -mno-pic command line option, TIC6X: TIC6X Options. (line 36) 24829* -mno-regnames option, s390: s390 Options. (line 36) 24830* -mno-skip-bug command line option, AVR: AVR Options. (line 112) 24831* -mno-spl: PDP-11-Options. (line 80) 24832* -mno-sym32: MIPS Options. (line 288) 24833* -mno-verbose-error command line option, AArch64: AArch64 Options. 24834 (line 59) 24835* -mno-wrap command line option, AVR: AVR Options. (line 115) 24836* -mnopic command line option, Blackfin: Blackfin Options. (line 22) 24837* -mnps400 command line option, ARC: ARC Options. (line 54) 24838* -momit-lock-prefix= option, i386: i386-Options. (line 150) 24839* -momit-lock-prefix= option, x86-64: i386-Options. (line 150) 24840* -mpic: PDP-11-Options. (line 11) 24841* -mpic command line option, TIC6X: TIC6X Options. (line 36) 24842* -mpid: RX-Opts. (line 50) 24843* -mpid= command line option, TIC6X: TIC6X Options. (line 23) 24844* -mregnames option, s390: s390 Options. (line 33) 24845* -mrelax command line option, ARC: ARC Options. (line 49) 24846* -mrelax command line option, V850: V850 Options. (line 72) 24847* -mrelax-relocations= option, i386: i386-Options. (line 168) 24848* -mrelax-relocations= option, x86-64: i386-Options. (line 168) 24849* -mrh850-abi command line option, V850: V850 Options. (line 82) 24850* -mrmw command line option, AVR: AVR Options. (line 118) 24851* -mrx-abi: RX-Opts. (line 69) 24852* -mshared option, i386: i386-Options. (line 137) 24853* -mshared option, x86-64: i386-Options. (line 137) 24854* -mshort <1>: XGATE-Opts. (line 8) 24855* -mshort: M68HC11-Opts. (line 40) 24856* -mshort-double <1>: M68HC11-Opts. (line 49) 24857* -mshort-double: XGATE-Opts. (line 17) 24858* -msign-extend-enabled command line option, LM32: LM32 Options. 24859 (line 15) 24860* -msmall-data-limit: RX-Opts. (line 42) 24861* -msoft-float command line option, V850: V850 Options. (line 95) 24862* -mspfp command line option, ARC: ARC Options. (line 57) 24863* -mspl: PDP-11-Options. (line 80) 24864* -msse-check= option, i386: i386-Options. (line 80) 24865* -msse-check= option, x86-64: i386-Options. (line 80) 24866* -msse2avx option, i386: i386-Options. (line 76) 24867* -msse2avx option, x86-64: i386-Options. (line 76) 24868* -msym32: MIPS Options. (line 288) 24869* -msyntax= option, i386: i386-Options. (line 121) 24870* -msyntax= option, x86-64: i386-Options. (line 121) 24871* -mt11: PDP-11-Options. (line 130) 24872* -mthumb command line option, ARM: ARM Options. (line 112) 24873* -mthumb-interwork command line option, ARM: ARM Options. (line 117) 24874* -mtune= option, i386: i386-Options. (line 68) 24875* -mtune= option, x86-64: i386-Options. (line 68) 24876* -mtune=ARCH command line option, Visium: Visium Options. (line 8) 24877* -muse-conventional-section-names: RX-Opts. (line 33) 24878* -muse-renesas-section-names: RX-Opts. (line 37) 24879* -muser-enabled command line option, LM32: LM32 Options. (line 18) 24880* -mv850 command line option, V850: V850 Options. (line 23) 24881* -mv850any command line option, V850: V850 Options. (line 41) 24882* -mv850e command line option, V850: V850 Options. (line 29) 24883* -mv850e1 command line option, V850: V850 Options. (line 35) 24884* -mv850e2 command line option, V850: V850 Options. (line 51) 24885* -mv850e2v3 command line option, V850: V850 Options. (line 57) 24886* -mv850e2v4 command line option, V850: V850 Options. (line 63) 24887* -mv850e3v5 command line option, V850: V850 Options. (line 66) 24888* -mverbose-error command line option, AArch64: AArch64 Options. 24889 (line 55) 24890* -mvxworks-pic option, MIPS: MIPS Options. (line 26) 24891* -mwarn-areg-zero option, s390: s390 Options. (line 39) 24892* -mwarn-deprecated command line option, ARM: ARM Options. (line 193) 24893* -mwarn-syms command line option, ARM: ARM Options. (line 201) 24894* -mzarch option, s390: s390 Options. (line 17) 24895* -N command line option, CRIS: CRIS-Opts. (line 58) 24896* -nIp option, M32RX: M32R-Opts. (line 101) 24897* -no-bitinst, M32R2: M32R-Opts. (line 54) 24898* -no-ignore-parallel-conflicts option, M32RX: M32R-Opts. (line 93) 24899* -no-mdebug command line option, Alpha: Alpha Options. (line 25) 24900* -no-parallel option, M32RX: M32R-Opts. (line 51) 24901* -no-relax option, i960: Options-i960. (line 66) 24902* -no-warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. 24903 (line 79) 24904* -no-warn-unmatched-high option, M32R: M32R-Opts. (line 111) 24905* -nocpp ignored (MIPS): MIPS Options. (line 291) 24906* -noreplace command line option, Alpha: Alpha Options. (line 40) 24907* -o: o. (line 6) 24908* -O option, M32RX: M32R-Opts. (line 59) 24909* -parallel option, M32RX: M32R-Opts. (line 46) 24910* -R: R. (line 6) 24911* -r800 command line option, Z80: Z80 Options. (line 41) 24912* -relax command line option, Alpha: Alpha Options. (line 32) 24913* -replace command line option, Alpha: Alpha Options. (line 40) 24914* -S, ignored on VAX: VAX-Opts. (line 11) 24915* -t, ignored on VAX: VAX-Opts. (line 36) 24916* -T, ignored on VAX: VAX-Opts. (line 11) 24917* -v: v. (line 6) 24918* -V, redundant on VAX: VAX-Opts. (line 22) 24919* -version: v. (line 6) 24920* -W: W. (line 11) 24921* -warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. 24922 (line 65) 24923* -warn-unmatched-high option, M32R: M32R-Opts. (line 105) 24924* -Wnp option, M32RX: M32R-Opts. (line 83) 24925* -Wnuh option, M32RX: M32R-Opts. (line 117) 24926* -Wp option, M32RX: M32R-Opts. (line 75) 24927* -wsigned_overflow command line option, V850: V850 Options. (line 9) 24928* -Wuh option, M32RX: M32R-Opts. (line 114) 24929* -wunsigned_overflow command line option, V850: V850 Options. 24930 (line 16) 24931* -x command line option, MMIX: MMIX-Opts. (line 44) 24932* -z80 command line option, Z80: Z80 Options. (line 8) 24933* -z8001 command line option, Z8000: Z8000 Options. (line 6) 24934* -z8002 command line option, Z8000: Z8000 Options. (line 9) 24935* . (symbol): Dot. (line 6) 24936* .2byte directive, ARM: ARM Directives. (line 6) 24937* .4byte directive, ARM: ARM Directives. (line 6) 24938* .8byte directive, ARM: ARM Directives. (line 6) 24939* .align directive, ARM: ARM Directives. (line 11) 24940* .align directive, TILE-Gx: TILE-Gx Directives. (line 6) 24941* .align directive, TILEPro: TILEPro Directives. (line 6) 24942* .allow_suspicious_bundles directive, TILE-Gx: TILE-Gx Directives. 24943 (line 10) 24944* .allow_suspicious_bundles directive, TILEPro: TILEPro Directives. 24945 (line 10) 24946* .arch directive, AArch64: AArch64 Directives. (line 6) 24947* .arch directive, ARM: ARM Directives. (line 18) 24948* .arch directive, TIC6X: TIC6X Directives. (line 10) 24949* .arch_extension directive, AArch64: AArch64 Directives. (line 13) 24950* .arch_extension directive, ARM: ARM Directives. (line 25) 24951* .arm directive, ARM: ARM Directives. (line 34) 24952* .big directive, M32RX: M32R-Directives. (line 88) 24953* .bss directive, AArch64: AArch64 Directives. (line 22) 24954* .bss directive, ARM: ARM Directives. (line 37) 24955* .c6xabi_attribute directive, TIC6X: TIC6X Directives. (line 20) 24956* .cantunwind directive, ARM: ARM Directives. (line 40) 24957* .cantunwind directive, TIC6X: TIC6X Directives. (line 13) 24958* .code directive, ARM: ARM Directives. (line 44) 24959* .cpu directive, AArch64: AArch64 Directives. (line 25) 24960* .cpu directive, ARM: ARM Directives. (line 48) 24961* .dn and .qn directives, ARM: ARM Directives. (line 55) 24962* .dword directive, AArch64: AArch64 Directives. (line 29) 24963* .eabi_attribute directive, ARM: ARM Directives. (line 78) 24964* .ehtype directive, TIC6X: TIC6X Directives. (line 31) 24965* .endp directive, TIC6X: TIC6X Directives. (line 34) 24966* .even directive, AArch64: AArch64 Directives. (line 32) 24967* .even directive, ARM: ARM Directives. (line 106) 24968* .extend directive, ARM: ARM Directives. (line 109) 24969* .fnend directive, ARM: ARM Directives. (line 115) 24970* .fnstart directive, ARM: ARM Directives. (line 124) 24971* .force_thumb directive, ARM: ARM Directives. (line 127) 24972* .fpu directive, ARM: ARM Directives. (line 131) 24973* .global: MIPS insn. (line 12) 24974* .gnu_attribute 4, N directive, MIPS: MIPS FP ABI History. 24975 (line 6) 24976* .gnu_attribute Tag_GNU_MIPS_ABI_FP, N directive, MIPS: MIPS FP ABI History. 24977 (line 6) 24978* .handlerdata directive, ARM: ARM Directives. (line 135) 24979* .handlerdata directive, TIC6X: TIC6X Directives. (line 39) 24980* .insn: MIPS insn. (line 6) 24981* .insn directive, s390: s390 Directives. (line 11) 24982* .inst directive, AArch64: AArch64 Directives. (line 36) 24983* .inst directive, ARM: ARM Directives. (line 144) 24984* .ldouble directive, ARM: ARM Directives. (line 109) 24985* .little directive, M32RX: M32R-Directives. (line 82) 24986* .long directive, s390: s390 Directives. (line 16) 24987* .ltorg directive, AArch64: AArch64 Directives. (line 40) 24988* .ltorg directive, ARM: ARM Directives. (line 154) 24989* .ltorg directive, s390: s390 Directives. (line 88) 24990* .m32r directive, M32R: M32R-Directives. (line 66) 24991* .m32r2 directive, M32R2: M32R-Directives. (line 77) 24992* .m32rx directive, M32RX: M32R-Directives. (line 72) 24993* .machine directive, s390: s390 Directives. (line 93) 24994* .machinemode directive, s390: s390 Directives. (line 109) 24995* .module: MIPS assembly options. 24996 (line 6) 24997* .module fp=NN directive, MIPS: MIPS FP ABI Selection. 24998 (line 6) 24999* .movsp directive, ARM: ARM Directives. (line 168) 25000* .nan directive, MIPS: MIPS NaN Encodings. (line 6) 25001* .no_pointers directive, XStormy16: XStormy16 Directives. 25002 (line 14) 25003* .nocmp directive, TIC6X: TIC6X Directives. (line 47) 25004* .o: Object. (line 6) 25005* .object_arch directive, ARM: ARM Directives. (line 173) 25006* .packed directive, ARM: ARM Directives. (line 179) 25007* .pad directive, ARM: ARM Directives. (line 184) 25008* .param on HPPA: HPPA Directives. (line 19) 25009* .personality directive, ARM: ARM Directives. (line 189) 25010* .personality directive, TIC6X: TIC6X Directives. (line 55) 25011* .personalityindex directive, ARM: ARM Directives. (line 192) 25012* .personalityindex directive, TIC6X: TIC6X Directives. (line 51) 25013* .pool directive, AArch64: AArch64 Directives. (line 54) 25014* .pool directive, ARM: ARM Directives. (line 196) 25015* .quad directive, s390: s390 Directives. (line 16) 25016* .req directive, AArch64: AArch64 Directives. (line 57) 25017* .req directive, ARM: ARM Directives. (line 199) 25018* .require_canonical_reg_names directive, TILE-Gx: TILE-Gx Directives. 25019 (line 19) 25020* .require_canonical_reg_names directive, TILEPro: TILEPro Directives. 25021 (line 19) 25022* .save directive, ARM: ARM Directives. (line 204) 25023* .scomm directive, TIC6X: TIC6X Directives. (line 58) 25024* .secrel32 directive, ARM: ARM Directives. (line 242) 25025* .set arch=CPU: MIPS ISA. (line 19) 25026* .set at: MIPS Macros. (line 42) 25027* .set at=REG: MIPS Macros. (line 36) 25028* .set autoextend: MIPS autoextend. (line 6) 25029* .set doublefloat: MIPS Floating-Point. 25030 (line 12) 25031* .set dsp: MIPS ASE Instruction Generation Overrides. 25032 (line 21) 25033* .set dspr2: MIPS ASE Instruction Generation Overrides. 25034 (line 26) 25035* .set dspr3: MIPS ASE Instruction Generation Overrides. 25036 (line 32) 25037* .set hardfloat: MIPS Floating-Point. 25038 (line 6) 25039* .set insn32: MIPS assembly options. 25040 (line 18) 25041* .set macro: MIPS Macros. (line 31) 25042* .set mcu: MIPS ASE Instruction Generation Overrides. 25043 (line 43) 25044* .set mdmx: MIPS ASE Instruction Generation Overrides. 25045 (line 16) 25046* .set mips3d: MIPS ASE Instruction Generation Overrides. 25047 (line 6) 25048* .set mipsN: MIPS ISA. (line 6) 25049* .set msa: MIPS ASE Instruction Generation Overrides. 25050 (line 48) 25051* .set mt: MIPS ASE Instruction Generation Overrides. 25052 (line 38) 25053* .set noat: MIPS Macros. (line 42) 25054* .set noautoextend: MIPS autoextend. (line 6) 25055* .set nodsp: MIPS ASE Instruction Generation Overrides. 25056 (line 21) 25057* .set nodspr2: MIPS ASE Instruction Generation Overrides. 25058 (line 26) 25059* .set nodspr3: MIPS ASE Instruction Generation Overrides. 25060 (line 32) 25061* .set noinsn32: MIPS assembly options. 25062 (line 18) 25063* .set nomacro: MIPS Macros. (line 31) 25064* .set nomcu: MIPS ASE Instruction Generation Overrides. 25065 (line 43) 25066* .set nomdmx: MIPS ASE Instruction Generation Overrides. 25067 (line 16) 25068* .set nomips3d: MIPS ASE Instruction Generation Overrides. 25069 (line 6) 25070* .set nomsa: MIPS ASE Instruction Generation Overrides. 25071 (line 48) 25072* .set nomt: MIPS ASE Instruction Generation Overrides. 25073 (line 38) 25074* .set nosmartmips: MIPS ASE Instruction Generation Overrides. 25075 (line 11) 25076* .set nosym32: MIPS Symbol Sizes. (line 6) 25077* .set novirt: MIPS ASE Instruction Generation Overrides. 25078 (line 53) 25079* .set noxpa: MIPS ASE Instruction Generation Overrides. 25080 (line 58) 25081* .set pop: MIPS Option Stack. (line 6) 25082* .set push: MIPS Option Stack. (line 6) 25083* .set singlefloat: MIPS Floating-Point. 25084 (line 12) 25085* .set smartmips: MIPS ASE Instruction Generation Overrides. 25086 (line 11) 25087* .set softfloat: MIPS Floating-Point. 25088 (line 6) 25089* .set sym32: MIPS Symbol Sizes. (line 6) 25090* .set virt: MIPS ASE Instruction Generation Overrides. 25091 (line 53) 25092* .set xpa: MIPS ASE Instruction Generation Overrides. 25093 (line 58) 25094* .setfp directive, ARM: ARM Directives. (line 228) 25095* .short directive, s390: s390 Directives. (line 16) 25096* .syntax directive, ARM: ARM Directives. (line 247) 25097* .thumb directive, ARM: ARM Directives. (line 251) 25098* .thumb_func directive, ARM: ARM Directives. (line 254) 25099* .thumb_set directive, ARM: ARM Directives. (line 265) 25100* .tlsdescadd directive, AArch64: AArch64 Directives. (line 62) 25101* .tlsdesccall directive, AArch64: AArch64 Directives. (line 65) 25102* .tlsdescldr directive, AArch64: AArch64 Directives. (line 68) 25103* .tlsdescseq directive, ARM: ARM Directives. (line 272) 25104* .unreq directive, AArch64: AArch64 Directives. (line 71) 25105* .unreq directive, ARM: ARM Directives. (line 277) 25106* .unwind_raw directive, ARM: ARM Directives. (line 288) 25107* .v850 directive, V850: V850 Directives. (line 14) 25108* .v850e directive, V850: V850 Directives. (line 20) 25109* .v850e1 directive, V850: V850 Directives. (line 26) 25110* .v850e2 directive, V850: V850 Directives. (line 32) 25111* .v850e2v3 directive, V850: V850 Directives. (line 38) 25112* .v850e2v4 directive, V850: V850 Directives. (line 44) 25113* .v850e3v5 directive, V850: V850 Directives. (line 50) 25114* .vsave directive, ARM: ARM Directives. (line 295) 25115* .xword directive, AArch64: AArch64 Directives. (line 82) 25116* .z8001: Z8000 Directives. (line 11) 25117* .z8002: Z8000 Directives. (line 15) 25118* 16-bit code, i386: i386-16bit. (line 6) 25119* 16bit_pointers directive, XStormy16: XStormy16 Directives. 25120 (line 6) 25121* 16byte directive, Nios II: Nios II Directives. (line 28) 25122* 2byte directive, Nios II: Nios II Directives. (line 19) 25123* 32bit_pointers directive, XStormy16: XStormy16 Directives. 25124 (line 10) 25125* 3DNow!, i386: i386-SIMD. (line 6) 25126* 3DNow!, x86-64: i386-SIMD. (line 6) 25127* 430 support: MSP430-Dependent. (line 6) 25128* 4byte directive, Nios II: Nios II Directives. (line 22) 25129* 8byte directive, Nios II: Nios II Directives. (line 25) 25130* : (label): Statements. (line 31) 25131* @gotoff(SYMBOL), ARC modifier: ARC Modifiers. (line 20) 25132* @gotpc(SYMBOL), ARC modifier: ARC Modifiers. (line 16) 25133* @hi pseudo-op, XStormy16: XStormy16 Opcodes. (line 21) 25134* @lo pseudo-op, XStormy16: XStormy16 Opcodes. (line 10) 25135* @pcl(SYMBOL), ARC modifier: ARC Modifiers. (line 12) 25136* @plt(SYMBOL), ARC modifier: ARC Modifiers. (line 23) 25137* @sda(SYMBOL), ARC modifier: ARC Modifiers. (line 28) 25138* @word modifier, D10V: D10V-Word. (line 6) 25139* _ opcode prefix: Xtensa Opcodes. (line 9) 25140* __DYNAMIC__, ARC pre-defined symbol: ARC Symbols. (line 14) 25141* __GLOBAL_OFFSET_TABLE__, ARC pre-defined symbol: ARC Symbols. 25142 (line 11) 25143* a.out: Object. (line 6) 25144* a.out symbol attributes: a.out Symbols. (line 6) 25145* A_DIR environment variable, TIC54X: TIC54X-Env. (line 6) 25146* AArch64 floating point (IEEE): AArch64 Floating Point. 25147 (line 6) 25148* AArch64 immediate character: AArch64-Chars. (line 13) 25149* AArch64 line comment character: AArch64-Chars. (line 6) 25150* AArch64 line separator: AArch64-Chars. (line 10) 25151* AArch64 machine directives: AArch64 Directives. (line 6) 25152* AArch64 opcodes: AArch64 Opcodes. (line 6) 25153* AArch64 options (none): AArch64 Options. (line 6) 25154* AArch64 register names: AArch64-Regs. (line 6) 25155* AArch64 relocations: AArch64-Relocations. 25156 (line 6) 25157* AArch64 support: AArch64-Dependent. (line 6) 25158* ABI options, SH64: SH64 Options. (line 29) 25159* ABORT directive: ABORT (COFF). (line 6) 25160* abort directive: Abort. (line 6) 25161* absolute section: Ld Sections. (line 29) 25162* absolute-literals directive: Absolute Literals Directive. 25163 (line 6) 25164* ADDI instructions, relaxation: Xtensa Immediate Relaxation. 25165 (line 43) 25166* addition, permitted arguments: Infix Ops. (line 44) 25167* addresses: Expressions. (line 6) 25168* addresses, format of: Secs Background. (line 68) 25169* addressing modes, D10V: D10V-Addressing. (line 6) 25170* addressing modes, D30V: D30V-Addressing. (line 6) 25171* addressing modes, H8/300: H8/300-Addressing. (line 6) 25172* addressing modes, M680x0: M68K-Syntax. (line 21) 25173* addressing modes, M68HC11: M68HC11-Syntax. (line 30) 25174* addressing modes, SH: SH-Addressing. (line 6) 25175* addressing modes, SH64: SH64-Addressing. (line 6) 25176* addressing modes, XGATE: XGATE-Syntax. (line 29) 25177* addressing modes, Z8000: Z8000-Addressing. (line 6) 25178* ADR reg,<label> pseudo op, ARM: ARM Opcodes. (line 25) 25179* ADRL reg,<label> pseudo op, ARM: ARM Opcodes. (line 35) 25180* ADRP, ADD, LDR/STR group relocations, AArch64: AArch64-Relocations. 25181 (line 14) 25182* advancing location counter: Org. (line 6) 25183* align directive: Align. (line 6) 25184* align directive, Nios II: Nios II Directives. (line 6) 25185* align directive, SPARC: Sparc-Directives. (line 9) 25186* align directive, TIC54X: TIC54X-Directives. (line 6) 25187* aligned instruction bundle: Bundle directives. (line 9) 25188* alignment for NEON instructions: ARM-Neon-Alignment. (line 6) 25189* alignment of branch targets: Xtensa Automatic Alignment. 25190 (line 6) 25191* alignment of LOOP instructions: Xtensa Automatic Alignment. 25192 (line 6) 25193* Alpha floating point (IEEE): Alpha Floating Point. 25194 (line 6) 25195* Alpha line comment character: Alpha-Chars. (line 6) 25196* Alpha line separator: Alpha-Chars. (line 11) 25197* Alpha notes: Alpha Notes. (line 6) 25198* Alpha options: Alpha Options. (line 6) 25199* Alpha registers: Alpha-Regs. (line 6) 25200* Alpha relocations: Alpha-Relocs. (line 6) 25201* Alpha support: Alpha-Dependent. (line 6) 25202* Alpha Syntax: Alpha Options. (line 61) 25203* Alpha-only directives: Alpha Directives. (line 10) 25204* Altera Nios II support: NiosII-Dependent. (line 6) 25205* altered difference tables: Word. (line 12) 25206* alternate syntax for the 680x0: M68K-Moto-Syntax. (line 6) 25207* ARC Branch Target Address: ARC-Regs. (line 61) 25208* ARC BTA saved on exception entry: ARC-Regs. (line 80) 25209* ARC Build configuration for: BTA Registers: ARC-Regs. (line 90) 25210* ARC Build configuration for: Core Registers: ARC-Regs. (line 98) 25211* ARC Build configuration for: Interrupts: ARC-Regs. (line 94) 25212* ARC Build Configuration Registers Version: ARC-Regs. (line 86) 25213* ARC C preprocessor macro separator: ARC-Chars. (line 31) 25214* ARC core general registers: ARC-Regs. (line 10) 25215* ARC DCCM RAM Configuration Register: ARC-Regs. (line 102) 25216* ARC Exception Cause Register: ARC-Regs. (line 64) 25217* ARC Exception Return Address: ARC-Regs. (line 77) 25218* ARC extension core registers: ARC-Regs. (line 38) 25219* ARC frame pointer: ARC-Regs. (line 17) 25220* ARC global pointer: ARC-Regs. (line 14) 25221* ARC interrupt link register: ARC-Regs. (line 27) 25222* ARC Interrupt Vector Base address: ARC-Regs. (line 67) 25223* ARC level 1 interrupt link register: ARC-Regs. (line 23) 25224* ARC level 2 interrupt link register: ARC-Regs. (line 31) 25225* ARC line comment character: ARC-Chars. (line 11) 25226* ARC line separator: ARC-Chars. (line 27) 25227* ARC link register: ARC-Regs. (line 35) 25228* ARC loop counter: ARC-Regs. (line 41) 25229* ARC machine directives: ARC Directives. (line 6) 25230* ARC opcodes: ARC Opcodes. (line 6) 25231* ARC options: ARC Options. (line 6) 25232* ARC Processor Identification register: ARC-Regs. (line 52) 25233* ARC Program Counter: ARC-Regs. (line 55) 25234* ARC register name prefix character: ARC-Chars. (line 7) 25235* ARC register names: ARC-Regs. (line 6) 25236* ARC Saved User Stack Pointer: ARC-Regs. (line 74) 25237* ARC stack pointer: ARC-Regs. (line 20) 25238* ARC Status register: ARC-Regs. (line 58) 25239* ARC STATUS32 saved on exception: ARC-Regs. (line 83) 25240* ARC Stored STATUS32 register on entry to level P0 interrupts: ARC-Regs. 25241 (line 70) 25242* ARC support: ARC-Dependent. (line 6) 25243* ARC symbol prefix character: ARC-Chars. (line 20) 25244* ARC word aligned program counter: ARC-Regs. (line 44) 25245* arch directive, i386: i386-Arch. (line 6) 25246* arch directive, M680x0: M68K-Directives. (line 22) 25247* arch directive, MSP 430: MSP430 Directives. (line 18) 25248* arch directive, x86-64: i386-Arch. (line 6) 25249* architecture options, i960: Options-i960. (line 6) 25250* architecture options, IP2022: IP2K-Opts. (line 9) 25251* architecture options, IP2K: IP2K-Opts. (line 14) 25252* architecture options, M16C: M32C-Opts. (line 12) 25253* architecture options, M32C: M32C-Opts. (line 9) 25254* architecture options, M32R: M32R-Opts. (line 21) 25255* architecture options, M32R2: M32R-Opts. (line 17) 25256* architecture options, M32RX: M32R-Opts. (line 9) 25257* architecture options, M680x0: M68K-Opts. (line 98) 25258* Architecture variant option, CRIS: CRIS-Opts. (line 34) 25259* architectures, Meta: Meta Options. (line 6) 25260* architectures, PowerPC: PowerPC-Opts. (line 6) 25261* architectures, SCORE: SCORE-Opts. (line 6) 25262* architectures, SPARC: Sparc-Opts. (line 6) 25263* arguments for addition: Infix Ops. (line 44) 25264* arguments for subtraction: Infix Ops. (line 49) 25265* arguments in expressions: Arguments. (line 6) 25266* arithmetic functions: Operators. (line 6) 25267* arithmetic operands: Arguments. (line 6) 25268* ARM data relocations: ARM-Relocations. (line 6) 25269* ARM floating point (IEEE): ARM Floating Point. (line 6) 25270* ARM identifiers: ARM-Chars. (line 19) 25271* ARM immediate character: ARM-Chars. (line 17) 25272* ARM line comment character: ARM-Chars. (line 6) 25273* ARM line separator: ARM-Chars. (line 14) 25274* ARM machine directives: ARM Directives. (line 6) 25275* ARM opcodes: ARM Opcodes. (line 6) 25276* ARM options (none): ARM Options. (line 6) 25277* ARM register names: ARM-Regs. (line 6) 25278* ARM support: ARM-Dependent. (line 6) 25279* ascii directive: Ascii. (line 6) 25280* asciz directive: Asciz. (line 6) 25281* asg directive, TIC54X: TIC54X-Directives. (line 20) 25282* assembler bugs, reporting: Bug Reporting. (line 6) 25283* assembler crash: Bug Criteria. (line 9) 25284* assembler directive .3byte, RX: RX-Directives. (line 9) 25285* assembler directive .arch, CRIS: CRIS-Pseudos. (line 45) 25286* assembler directive .dword, CRIS: CRIS-Pseudos. (line 12) 25287* assembler directive .far, M68HC11: M68HC11-Directives. (line 20) 25288* assembler directive .fetchalign, RX: RX-Directives. (line 13) 25289* assembler directive .interrupt, M68HC11: M68HC11-Directives. 25290 (line 26) 25291* assembler directive .mode, M68HC11: M68HC11-Directives. (line 16) 25292* assembler directive .relax, M68HC11: M68HC11-Directives. (line 10) 25293* assembler directive .syntax, CRIS: CRIS-Pseudos. (line 17) 25294* assembler directive .xrefb, M68HC11: M68HC11-Directives. (line 31) 25295* assembler directive BSPEC, MMIX: MMIX-Pseudos. (line 131) 25296* assembler directive BYTE, MMIX: MMIX-Pseudos. (line 97) 25297* assembler directive ESPEC, MMIX: MMIX-Pseudos. (line 131) 25298* assembler directive GREG, MMIX: MMIX-Pseudos. (line 50) 25299* assembler directive IS, MMIX: MMIX-Pseudos. (line 42) 25300* assembler directive LOC, MMIX: MMIX-Pseudos. (line 7) 25301* assembler directive LOCAL, MMIX: MMIX-Pseudos. (line 28) 25302* assembler directive OCTA, MMIX: MMIX-Pseudos. (line 108) 25303* assembler directive PREFIX, MMIX: MMIX-Pseudos. (line 120) 25304* assembler directive TETRA, MMIX: MMIX-Pseudos. (line 108) 25305* assembler directive WYDE, MMIX: MMIX-Pseudos. (line 108) 25306* assembler directives, CRIS: CRIS-Pseudos. (line 6) 25307* assembler directives, M68HC11: M68HC11-Directives. (line 6) 25308* assembler directives, M68HC12: M68HC11-Directives. (line 6) 25309* assembler directives, MMIX: MMIX-Pseudos. (line 6) 25310* assembler directives, RL78: RL78-Directives. (line 6) 25311* assembler directives, RX: RX-Directives. (line 6) 25312* assembler directives, XGATE: XGATE-Directives. (line 6) 25313* assembler internal logic error: As Sections. (line 13) 25314* assembler version: v. (line 6) 25315* assembler, and linker: Secs Background. (line 10) 25316* assembly listings, enabling: a. (line 6) 25317* assigning values to symbols <1>: Equ. (line 6) 25318* assigning values to symbols: Setting Symbols. (line 6) 25319* at register, MIPS: MIPS Macros. (line 36) 25320* atmp directive, i860: Directives-i860. (line 16) 25321* att_syntax pseudo op, i386: i386-Variations. (line 6) 25322* att_syntax pseudo op, x86-64: i386-Variations. (line 6) 25323* attributes, symbol: Symbol Attributes. (line 6) 25324* auxiliary attributes, COFF symbols: COFF Symbols. (line 19) 25325* auxiliary symbol information, COFF: Dim. (line 6) 25326* AVR line comment character: AVR-Chars. (line 6) 25327* AVR line separator: AVR-Chars. (line 14) 25328* AVR modifiers: AVR-Modifiers. (line 6) 25329* AVR opcode summary: AVR Opcodes. (line 6) 25330* AVR options (none): AVR Options. (line 6) 25331* AVR register names: AVR-Regs. (line 6) 25332* AVR support: AVR-Dependent. (line 6) 25333* backslash (\\): Strings. (line 40) 25334* backspace (\b): Strings. (line 15) 25335* balign directive: Balign. (line 6) 25336* balignl directive: Balign. (line 27) 25337* balignw directive: Balign. (line 27) 25338* bes directive, TIC54X: TIC54X-Directives. (line 196) 25339* big endian output, MIPS: Overview. (line 812) 25340* big endian output, PJ: Overview. (line 715) 25341* big-endian output, MIPS: MIPS Options. (line 13) 25342* big-endian output, TIC6X: TIC6X Options. (line 46) 25343* bignums: Bignums. (line 6) 25344* binary constants, TIC54X: TIC54X-Constants. (line 8) 25345* binary files, including: Incbin. (line 6) 25346* binary integers: Integers. (line 6) 25347* bit names, IA-64: IA-64-Bits. (line 6) 25348* bitfields, not supported on VAX: VAX-no. (line 6) 25349* Blackfin directives: Blackfin Directives. 25350 (line 6) 25351* Blackfin options (none): Blackfin Options. (line 6) 25352* Blackfin support: Blackfin-Dependent. (line 6) 25353* Blackfin syntax: Blackfin Syntax. (line 6) 25354* block: Z8000 Directives. (line 55) 25355* BMI, i386: i386-BMI. (line 6) 25356* BMI, x86-64: i386-BMI. (line 6) 25357* branch improvement, M680x0: M68K-Branch. (line 6) 25358* branch improvement, M68HC11: M68HC11-Branch. (line 6) 25359* branch improvement, VAX: VAX-branch. (line 6) 25360* branch instructions, relaxation: Xtensa Branch Relaxation. 25361 (line 6) 25362* branch recording, i960: Options-i960. (line 22) 25363* branch statistics table, i960: Options-i960. (line 40) 25364* Branch Target Address, ARC: ARC-Regs. (line 61) 25365* branch target alignment: Xtensa Automatic Alignment. 25366 (line 6) 25367* break directive, TIC54X: TIC54X-Directives. (line 143) 25368* BSD syntax: PDP-11-Syntax. (line 6) 25369* bss directive, i960: Directives-i960. (line 6) 25370* bss directive, TIC54X: TIC54X-Directives. (line 29) 25371* bss section <1>: bss. (line 6) 25372* bss section: Ld Sections. (line 20) 25373* BTA saved on exception entry, ARC: ARC-Regs. (line 80) 25374* bug criteria: Bug Criteria. (line 6) 25375* bug reports: Bug Reporting. (line 6) 25376* bugs in assembler: Reporting Bugs. (line 6) 25377* Build configuration for: BTA Registers, ARC: ARC-Regs. (line 90) 25378* Build configuration for: Core Registers, ARC: ARC-Regs. (line 98) 25379* Build configuration for: Interrupts, ARC: ARC-Regs. (line 94) 25380* Build Configuration Registers Version, ARC: ARC-Regs. (line 86) 25381* Built-in symbols, CRIS: CRIS-Symbols. (line 6) 25382* builtin math functions, TIC54X: TIC54X-Builtins. (line 6) 25383* builtin subsym functions, TIC54X: TIC54X-Macros. (line 16) 25384* bundle: Bundle directives. (line 9) 25385* bundle-locked: Bundle directives. (line 38) 25386* bundle_align_mode directive: Bundle directives. (line 9) 25387* bundle_lock directive: Bundle directives. (line 31) 25388* bundle_unlock directive: Bundle directives. (line 31) 25389* bus lock prefixes, i386: i386-Prefixes. (line 36) 25390* bval: Z8000 Directives. (line 30) 25391* byte directive: Byte. (line 6) 25392* byte directive, TIC54X: TIC54X-Directives. (line 36) 25393* C preprocessor macro separator, ARC: ARC-Chars. (line 31) 25394* C54XDSP_DIR environment variable, TIC54X: TIC54X-Env. (line 6) 25395* c_mode directive, TIC54X: TIC54X-Directives. (line 51) 25396* call directive, Nios II: Nios II Relocations. 25397 (line 38) 25398* call instructions, i386: i386-Mnemonics. (line 59) 25399* call instructions, relaxation: Xtensa Call Relaxation. 25400 (line 6) 25401* call instructions, x86-64: i386-Mnemonics. (line 59) 25402* call_hiadj directive, Nios II: Nios II Relocations. 25403 (line 38) 25404* call_lo directive, Nios II: Nios II Relocations. 25405 (line 38) 25406* callj, i960 pseudo-opcode: callj-i960. (line 6) 25407* carriage return (backslash-r): Strings. (line 24) 25408* case sensitivity, Z80: Z80-Case. (line 6) 25409* cfi_endproc directive: CFI directives. (line 40) 25410* cfi_fde_data directive: CFI directives. (line 66) 25411* cfi_personality directive: CFI directives. (line 47) 25412* cfi_personality_id directive: CFI directives. (line 59) 25413* cfi_sections directive: CFI directives. (line 9) 25414* cfi_startproc directive: CFI directives. (line 30) 25415* char directive, TIC54X: TIC54X-Directives. (line 36) 25416* character constant, Z80: Z80-Chars. (line 20) 25417* character constants: Characters. (line 6) 25418* character escape codes: Strings. (line 15) 25419* character escapes, Z80: Z80-Chars. (line 18) 25420* character, single: Chars. (line 6) 25421* characters used in symbols: Symbol Intro. (line 6) 25422* clink directive, TIC54X: TIC54X-Directives. (line 45) 25423* code16 directive, i386: i386-16bit. (line 6) 25424* code16gcc directive, i386: i386-16bit. (line 6) 25425* code32 directive, i386: i386-16bit. (line 6) 25426* code64 directive, i386: i386-16bit. (line 6) 25427* code64 directive, x86-64: i386-16bit. (line 6) 25428* COFF auxiliary symbol information: Dim. (line 6) 25429* COFF structure debugging: Tag. (line 6) 25430* COFF symbol attributes: COFF Symbols. (line 6) 25431* COFF symbol descriptor: Desc. (line 6) 25432* COFF symbol storage class: Scl. (line 6) 25433* COFF symbol type: Type. (line 11) 25434* COFF symbols, debugging: Def. (line 6) 25435* COFF value attribute: Val. (line 6) 25436* COMDAT: Linkonce. (line 6) 25437* comm directive: Comm. (line 6) 25438* command line conventions: Command Line. (line 6) 25439* command line options, V850: V850 Options. (line 9) 25440* command-line options ignored, VAX: VAX-Opts. (line 6) 25441* comment character, XStormy16: XStormy16-Chars. (line 11) 25442* comments: Comments. (line 6) 25443* comments, M680x0: M68K-Chars. (line 6) 25444* comments, removed by preprocessor: Preprocessing. (line 11) 25445* common directive, SPARC: Sparc-Directives. (line 12) 25446* common sections: Linkonce. (line 6) 25447* common variable storage: bss. (line 6) 25448* compare and jump expansions, i960: Compare-and-branch-i960. 25449 (line 13) 25450* compare/branch instructions, i960: Compare-and-branch-i960. 25451 (line 6) 25452* comparison expressions: Infix Ops. (line 55) 25453* conditional assembly: If. (line 6) 25454* constant, single character: Chars. (line 6) 25455* constants: Constants. (line 6) 25456* constants, bignum: Bignums. (line 6) 25457* constants, character: Characters. (line 6) 25458* constants, converted by preprocessor: Preprocessing. (line 14) 25459* constants, floating point: Flonums. (line 6) 25460* constants, integer: Integers. (line 6) 25461* constants, number: Numbers. (line 6) 25462* constants, Sparc: Sparc-Constants. (line 6) 25463* constants, string: Strings. (line 6) 25464* constants, TIC54X: TIC54X-Constants. (line 6) 25465* conversion instructions, i386: i386-Mnemonics. (line 40) 25466* conversion instructions, x86-64: i386-Mnemonics. (line 40) 25467* coprocessor wait, i386: i386-Prefixes. (line 40) 25468* copy directive, TIC54X: TIC54X-Directives. (line 54) 25469* core general registers, ARC: ARC-Regs. (line 10) 25470* cpu directive, ARC: ARC Directives. (line 27) 25471* cpu directive, M680x0: M68K-Directives. (line 30) 25472* cpu directive, MSP 430: MSP430 Directives. (line 22) 25473* CR16 line comment character: CR16-Chars. (line 6) 25474* CR16 line separator: CR16-Chars. (line 13) 25475* CR16 Operand Qualifiers: CR16 Operand Qualifiers. 25476 (line 6) 25477* CR16 support: CR16-Dependent. (line 6) 25478* crash of assembler: Bug Criteria. (line 9) 25479* CRIS --emulation=crisaout command line option: CRIS-Opts. (line 9) 25480* CRIS --emulation=criself command line option: CRIS-Opts. (line 9) 25481* CRIS --march=ARCHITECTURE command line option: CRIS-Opts. (line 34) 25482* CRIS --mul-bug-abort command line option: CRIS-Opts. (line 62) 25483* CRIS --no-mul-bug-abort command line option: CRIS-Opts. (line 62) 25484* CRIS --no-underscore command line option: CRIS-Opts. (line 15) 25485* CRIS --pic command line option: CRIS-Opts. (line 27) 25486* CRIS --underscore command line option: CRIS-Opts. (line 15) 25487* CRIS -N command line option: CRIS-Opts. (line 58) 25488* CRIS architecture variant option: CRIS-Opts. (line 34) 25489* CRIS assembler directive .arch: CRIS-Pseudos. (line 45) 25490* CRIS assembler directive .dword: CRIS-Pseudos. (line 12) 25491* CRIS assembler directive .syntax: CRIS-Pseudos. (line 17) 25492* CRIS assembler directives: CRIS-Pseudos. (line 6) 25493* CRIS built-in symbols: CRIS-Symbols. (line 6) 25494* CRIS instruction expansion: CRIS-Expand. (line 6) 25495* CRIS line comment characters: CRIS-Chars. (line 6) 25496* CRIS options: CRIS-Opts. (line 6) 25497* CRIS position-independent code: CRIS-Opts. (line 27) 25498* CRIS pseudo-op .arch: CRIS-Pseudos. (line 45) 25499* CRIS pseudo-op .dword: CRIS-Pseudos. (line 12) 25500* CRIS pseudo-op .syntax: CRIS-Pseudos. (line 17) 25501* CRIS pseudo-ops: CRIS-Pseudos. (line 6) 25502* CRIS register names: CRIS-Regs. (line 6) 25503* CRIS support: CRIS-Dependent. (line 6) 25504* CRIS symbols in position-independent code: CRIS-Pic. (line 6) 25505* ctbp register, V850: V850-Regs. (line 131) 25506* ctoff pseudo-op, V850: V850 Opcodes. (line 111) 25507* ctpc register, V850: V850-Regs. (line 119) 25508* ctpsw register, V850: V850-Regs. (line 122) 25509* current address: Dot. (line 6) 25510* current address, advancing: Org. (line 6) 25511* D10V @word modifier: D10V-Word. (line 6) 25512* D10V addressing modes: D10V-Addressing. (line 6) 25513* D10V floating point: D10V-Float. (line 6) 25514* D10V line comment character: D10V-Chars. (line 6) 25515* D10V opcode summary: D10V-Opcodes. (line 6) 25516* D10V optimization: Overview. (line 575) 25517* D10V options: D10V-Opts. (line 6) 25518* D10V registers: D10V-Regs. (line 6) 25519* D10V size modifiers: D10V-Size. (line 6) 25520* D10V sub-instruction ordering: D10V-Chars. (line 14) 25521* D10V sub-instructions: D10V-Subs. (line 6) 25522* D10V support: D10V-Dependent. (line 6) 25523* D10V syntax: D10V-Syntax. (line 6) 25524* D30V addressing modes: D30V-Addressing. (line 6) 25525* D30V floating point: D30V-Float. (line 6) 25526* D30V Guarded Execution: D30V-Guarded. (line 6) 25527* D30V line comment character: D30V-Chars. (line 6) 25528* D30V nops: Overview. (line 583) 25529* D30V nops after 32-bit multiply: Overview. (line 586) 25530* D30V opcode summary: D30V-Opcodes. (line 6) 25531* D30V optimization: Overview. (line 580) 25532* D30V options: D30V-Opts. (line 6) 25533* D30V registers: D30V-Regs. (line 6) 25534* D30V size modifiers: D30V-Size. (line 6) 25535* D30V sub-instruction ordering: D30V-Chars. (line 14) 25536* D30V sub-instructions: D30V-Subs. (line 6) 25537* D30V support: D30V-Dependent. (line 6) 25538* D30V syntax: D30V-Syntax. (line 6) 25539* data alignment on SPARC: Sparc-Aligned-Data. (line 6) 25540* data and text sections, joining: R. (line 6) 25541* data directive: Data. (line 6) 25542* data directive, TIC54X: TIC54X-Directives. (line 61) 25543* data relocations, ARM: ARM-Relocations. (line 6) 25544* data section: Ld Sections. (line 9) 25545* data1 directive, M680x0: M68K-Directives. (line 9) 25546* data2 directive, M680x0: M68K-Directives. (line 12) 25547* datalabel, SH64: SH64-Addressing. (line 16) 25548* dbpc register, V850: V850-Regs. (line 125) 25549* dbpsw register, V850: V850-Regs. (line 128) 25550* DCCM RAM Configuration Register, ARC: ARC-Regs. (line 102) 25551* debuggers, and symbol order: Symbols. (line 10) 25552* debugging COFF symbols: Def. (line 6) 25553* DEC syntax: PDP-11-Syntax. (line 6) 25554* decimal integers: Integers. (line 12) 25555* def directive: Def. (line 6) 25556* def directive, TIC54X: TIC54X-Directives. (line 103) 25557* density instructions: Density Instructions. 25558 (line 6) 25559* dependency tracking: MD. (line 6) 25560* deprecated directives: Deprecated. (line 6) 25561* desc directive: Desc. (line 6) 25562* descriptor, of a.out symbol: Symbol Desc. (line 6) 25563* dfloat directive, VAX: VAX-directives. (line 10) 25564* difference tables altered: Word. (line 12) 25565* difference tables, warning: K. (line 6) 25566* differences, mmixal: MMIX-mmixal. (line 6) 25567* dim directive: Dim. (line 6) 25568* directives and instructions: Statements. (line 20) 25569* directives for PowerPC: PowerPC-Pseudo. (line 6) 25570* directives for SCORE: SCORE-Pseudo. (line 6) 25571* directives, Blackfin: Blackfin Directives. 25572 (line 6) 25573* directives, M32R: M32R-Directives. (line 6) 25574* directives, M680x0: M68K-Directives. (line 6) 25575* directives, machine independent: Pseudo Ops. (line 6) 25576* directives, Xtensa: Xtensa Directives. (line 6) 25577* directives, Z8000: Z8000 Directives. (line 6) 25578* Disable floating-point instructions: MIPS Floating-Point. 25579 (line 6) 25580* Disable single-precision floating-point operations: MIPS Floating-Point. 25581 (line 12) 25582* displacement sizing character, VAX: VAX-operands. (line 12) 25583* dollar local symbols: Symbol Names. (line 114) 25584* dot (symbol): Dot. (line 6) 25585* double directive: Double. (line 6) 25586* double directive, i386: i386-Float. (line 14) 25587* double directive, M680x0: M68K-Float. (line 14) 25588* double directive, M68HC11: M68HC11-Float. (line 14) 25589* double directive, RX: RX-Float. (line 11) 25590* double directive, TIC54X: TIC54X-Directives. (line 64) 25591* double directive, VAX: VAX-float. (line 15) 25592* double directive, x86-64: i386-Float. (line 14) 25593* double directive, XGATE: XGATE-Float. (line 13) 25594* doublequote (\"): Strings. (line 43) 25595* drlist directive, TIC54X: TIC54X-Directives. (line 73) 25596* drnolist directive, TIC54X: TIC54X-Directives. (line 73) 25597* dual directive, i860: Directives-i860. (line 6) 25598* dword directive, Nios II: Nios II Directives. (line 16) 25599* EB command line option, Nios II: Nios II Options. (line 23) 25600* ecr register, V850: V850-Regs. (line 113) 25601* eight-byte integer: Quad. (line 9) 25602* eipc register, V850: V850-Regs. (line 101) 25603* eipsw register, V850: V850-Regs. (line 104) 25604* eject directive: Eject. (line 6) 25605* EL command line option, Nios II: Nios II Options. (line 26) 25606* ELF symbol type: Type. (line 22) 25607* else directive: Else. (line 6) 25608* elseif directive: Elseif. (line 6) 25609* empty expressions: Empty Exprs. (line 6) 25610* emsg directive, TIC54X: TIC54X-Directives. (line 77) 25611* emulation: Overview. (line 1001) 25612* encoding options, i386: i386-Mnemonics. (line 35) 25613* encoding options, x86-64: i386-Mnemonics. (line 35) 25614* end directive: End. (line 6) 25615* enddual directive, i860: Directives-i860. (line 11) 25616* endef directive: Endef. (line 6) 25617* endfunc directive: Endfunc. (line 6) 25618* endianness, MIPS: Overview. (line 812) 25619* endianness, PJ: Overview. (line 715) 25620* endif directive: Endif. (line 6) 25621* endloop directive, TIC54X: TIC54X-Directives. (line 143) 25622* endm directive: Macro. (line 138) 25623* endm directive, TIC54X: TIC54X-Directives. (line 153) 25624* endstruct directive, TIC54X: TIC54X-Directives. (line 216) 25625* endunion directive, TIC54X: TIC54X-Directives. (line 250) 25626* environment settings, TIC54X: TIC54X-Env. (line 6) 25627* EOF, newline must precede: Statements. (line 14) 25628* ep register, V850: V850-Regs. (line 95) 25629* Epiphany line comment character: Epiphany-Chars. (line 6) 25630* Epiphany line separator: Epiphany-Chars. (line 14) 25631* Epiphany options: Epiphany Options. (line 6) 25632* Epiphany support: Epiphany-Dependent. (line 6) 25633* equ directive: Equ. (line 6) 25634* equ directive, TIC54X: TIC54X-Directives. (line 191) 25635* equiv directive: Equiv. (line 6) 25636* eqv directive: Eqv. (line 6) 25637* err directive: Err. (line 6) 25638* error directive: Error. (line 6) 25639* error messages: Errors. (line 6) 25640* error on valid input: Bug Criteria. (line 12) 25641* errors, caused by warnings: W. (line 16) 25642* errors, continuing after: Z. (line 6) 25643* ESA/390 floating point (IEEE): ESA/390 Floating Point. 25644 (line 6) 25645* ESA/390 support: ESA/390-Dependent. (line 6) 25646* ESA/390 Syntax: ESA/390 Options. (line 8) 25647* ESA/390-only directives: ESA/390 Directives. (line 12) 25648* escape codes, character: Strings. (line 15) 25649* eval directive, TIC54X: TIC54X-Directives. (line 24) 25650* even: Z8000 Directives. (line 58) 25651* even directive, M680x0: M68K-Directives. (line 15) 25652* even directive, TIC54X: TIC54X-Directives. (line 6) 25653* Exception Cause Register, ARC: ARC-Regs. (line 64) 25654* Exception Return Address, ARC: ARC-Regs. (line 77) 25655* exitm directive: Macro. (line 141) 25656* expr (internal section): As Sections. (line 17) 25657* expression arguments: Arguments. (line 6) 25658* expressions: Expressions. (line 6) 25659* expressions, comparison: Infix Ops. (line 55) 25660* expressions, empty: Empty Exprs. (line 6) 25661* expressions, integer: Integer Exprs. (line 6) 25662* extAuxRegister directive, ARC: ARC Directives. (line 51) 25663* extCondCode directive, ARC: ARC Directives. (line 73) 25664* extCoreRegister directive, ARC: ARC Directives. (line 84) 25665* extend directive M680x0: M68K-Float. (line 17) 25666* extend directive M68HC11: M68HC11-Float. (line 17) 25667* extend directive XGATE: XGATE-Float. (line 16) 25668* extended directive, i960: Directives-i960. (line 13) 25669* extension core registers, ARC: ARC-Regs. (line 38) 25670* extern directive: Extern. (line 6) 25671* extInstruction directive, ARC: ARC Directives. (line 112) 25672* fail directive: Fail. (line 6) 25673* far_mode directive, TIC54X: TIC54X-Directives. (line 82) 25674* faster processing (-f): f. (line 6) 25675* fatal signal: Bug Criteria. (line 9) 25676* fclist directive, TIC54X: TIC54X-Directives. (line 87) 25677* fcnolist directive, TIC54X: TIC54X-Directives. (line 87) 25678* fepc register, V850: V850-Regs. (line 107) 25679* fepsw register, V850: V850-Regs. (line 110) 25680* ffloat directive, VAX: VAX-directives. (line 14) 25681* field directive, TIC54X: TIC54X-Directives. (line 91) 25682* file directive: File. (line 6) 25683* file directive, MSP 430: MSP430 Directives. (line 6) 25684* file name, logical: File. (line 13) 25685* file names and line numbers, in warnings/errors: Errors. (line 16) 25686* files, including: Include. (line 6) 25687* files, input: Input Files. (line 6) 25688* fill directive: Fill. (line 6) 25689* filling memory <1>: Skip. (line 6) 25690* filling memory: Space. (line 6) 25691* filling memory with zero bytes: Zero. (line 6) 25692* FLIX syntax: Xtensa Syntax. (line 6) 25693* float directive: Float. (line 6) 25694* float directive, i386: i386-Float. (line 14) 25695* float directive, M680x0: M68K-Float. (line 11) 25696* float directive, M68HC11: M68HC11-Float. (line 11) 25697* float directive, RX: RX-Float. (line 8) 25698* float directive, TIC54X: TIC54X-Directives. (line 64) 25699* float directive, VAX: VAX-float. (line 15) 25700* float directive, x86-64: i386-Float. (line 14) 25701* float directive, XGATE: XGATE-Float. (line 10) 25702* floating point numbers: Flonums. (line 6) 25703* floating point numbers (double): Double. (line 6) 25704* floating point numbers (single) <1>: Float. (line 6) 25705* floating point numbers (single): Single. (line 6) 25706* floating point, AArch64 (IEEE): AArch64 Floating Point. 25707 (line 6) 25708* floating point, Alpha (IEEE): Alpha Floating Point. 25709 (line 6) 25710* floating point, ARM (IEEE): ARM Floating Point. (line 6) 25711* floating point, D10V: D10V-Float. (line 6) 25712* floating point, D30V: D30V-Float. (line 6) 25713* floating point, ESA/390 (IEEE): ESA/390 Floating Point. 25714 (line 6) 25715* floating point, H8/300 (IEEE): H8/300 Floating Point. 25716 (line 6) 25717* floating point, HPPA (IEEE): HPPA Floating Point. 25718 (line 6) 25719* floating point, i386: i386-Float. (line 6) 25720* floating point, i960 (IEEE): Floating Point-i960. 25721 (line 6) 25722* floating point, M680x0: M68K-Float. (line 6) 25723* floating point, M68HC11: M68HC11-Float. (line 6) 25724* floating point, MSP 430 (IEEE): MSP430 Floating Point. 25725 (line 6) 25726* floating point, RX: RX-Float. (line 6) 25727* floating point, s390: s390 Floating Point. 25728 (line 6) 25729* floating point, SH (IEEE): SH Floating Point. (line 6) 25730* floating point, SPARC (IEEE): Sparc-Float. (line 6) 25731* floating point, V850 (IEEE): V850 Floating Point. 25732 (line 6) 25733* floating point, VAX: VAX-float. (line 6) 25734* floating point, x86-64: i386-Float. (line 6) 25735* floating point, XGATE: XGATE-Float. (line 6) 25736* floating point, Z80: Z80 Floating Point. (line 6) 25737* flonums: Flonums. (line 6) 25738* format of error messages: Errors. (line 38) 25739* format of warning messages: Errors. (line 12) 25740* formfeed (\f): Strings. (line 18) 25741* frame pointer, ARC: ARC-Regs. (line 17) 25742* func directive: Func. (line 6) 25743* functions, in expressions: Operators. (line 6) 25744* gbr960, i960 postprocessor: Options-i960. (line 40) 25745* gfloat directive, VAX: VAX-directives. (line 18) 25746* global: Z8000 Directives. (line 21) 25747* global directive: Global. (line 6) 25748* global directive, TIC54X: TIC54X-Directives. (line 103) 25749* global pointer, ARC: ARC-Regs. (line 14) 25750* got directive, Nios II: Nios II Relocations. 25751 (line 38) 25752* got_hiadj directive, Nios II: Nios II Relocations. 25753 (line 38) 25754* got_lo directive, Nios II: Nios II Relocations. 25755 (line 38) 25756* gotoff directive, Nios II: Nios II Relocations. 25757 (line 38) 25758* gotoff_hiadj directive, Nios II: Nios II Relocations. 25759 (line 38) 25760* gotoff_lo directive, Nios II: Nios II Relocations. 25761 (line 38) 25762* gp register, MIPS: MIPS Small Data. (line 6) 25763* gp register, V850: V850-Regs. (line 17) 25764* gprel directive, Nios II: Nios II Relocations. 25765 (line 26) 25766* grouping data: Sub-Sections. (line 6) 25767* H8/300 addressing modes: H8/300-Addressing. (line 6) 25768* H8/300 floating point (IEEE): H8/300 Floating Point. 25769 (line 6) 25770* H8/300 line comment character: H8/300-Chars. (line 6) 25771* H8/300 line separator: H8/300-Chars. (line 8) 25772* H8/300 machine directives (none): H8/300 Directives. (line 6) 25773* H8/300 opcode summary: H8/300 Opcodes. (line 6) 25774* H8/300 options: H8/300 Options. (line 6) 25775* H8/300 registers: H8/300-Regs. (line 6) 25776* H8/300 size suffixes: H8/300 Opcodes. (line 163) 25777* H8/300 support: H8/300-Dependent. (line 6) 25778* H8/300H, assembling for: H8/300 Directives. (line 8) 25779* half directive, Nios II: Nios II Directives. (line 10) 25780* half directive, SPARC: Sparc-Directives. (line 17) 25781* half directive, TIC54X: TIC54X-Directives. (line 111) 25782* hex character code (\XD...): Strings. (line 36) 25783* hexadecimal integers: Integers. (line 15) 25784* hexadecimal prefix, Z80: Z80-Chars. (line 15) 25785* hfloat directive, VAX: VAX-directives. (line 22) 25786* hi directive, Nios II: Nios II Relocations. 25787 (line 20) 25788* hi pseudo-op, V850: V850 Opcodes. (line 33) 25789* hi0 pseudo-op, V850: V850 Opcodes. (line 10) 25790* hiadj directive, Nios II: Nios II Relocations. 25791 (line 6) 25792* hidden directive: Hidden. (line 6) 25793* high directive, M32R: M32R-Directives. (line 18) 25794* hilo pseudo-op, V850: V850 Opcodes. (line 55) 25795* HPPA directives not supported: HPPA Directives. (line 11) 25796* HPPA floating point (IEEE): HPPA Floating Point. 25797 (line 6) 25798* HPPA Syntax: HPPA Options. (line 8) 25799* HPPA-only directives: HPPA Directives. (line 24) 25800* hword directive: hword. (line 6) 25801* i370 support: ESA/390-Dependent. (line 6) 25802* i386 16-bit code: i386-16bit. (line 6) 25803* i386 arch directive: i386-Arch. (line 6) 25804* i386 att_syntax pseudo op: i386-Variations. (line 6) 25805* i386 conversion instructions: i386-Mnemonics. (line 40) 25806* i386 floating point: i386-Float. (line 6) 25807* i386 immediate operands: i386-Variations. (line 15) 25808* i386 instruction naming: i386-Mnemonics. (line 9) 25809* i386 instruction prefixes: i386-Prefixes. (line 6) 25810* i386 intel_syntax pseudo op: i386-Variations. (line 6) 25811* i386 jump optimization: i386-Jumps. (line 6) 25812* i386 jump, call, return: i386-Variations. (line 41) 25813* i386 jump/call operands: i386-Variations. (line 15) 25814* i386 line comment character: i386-Chars. (line 6) 25815* i386 line separator: i386-Chars. (line 18) 25816* i386 memory references: i386-Memory. (line 6) 25817* i386 mnemonic compatibility: i386-Mnemonics. (line 65) 25818* i386 mul, imul instructions: i386-Notes. (line 6) 25819* i386 options: i386-Options. (line 6) 25820* i386 register operands: i386-Variations. (line 15) 25821* i386 registers: i386-Regs. (line 6) 25822* i386 sections: i386-Variations. (line 47) 25823* i386 size suffixes: i386-Variations. (line 29) 25824* i386 source, destination operands: i386-Variations. (line 22) 25825* i386 support: i386-Dependent. (line 6) 25826* i386 syntax compatibility: i386-Variations. (line 6) 25827* i80386 support: i386-Dependent. (line 6) 25828* i860 line comment character: i860-Chars. (line 6) 25829* i860 line separator: i860-Chars. (line 14) 25830* i860 machine directives: Directives-i860. (line 6) 25831* i860 opcodes: Opcodes for i860. (line 6) 25832* i860 support: i860-Dependent. (line 6) 25833* i960 architecture options: Options-i960. (line 6) 25834* i960 branch recording: Options-i960. (line 22) 25835* i960 callj pseudo-opcode: callj-i960. (line 6) 25836* i960 compare and jump expansions: Compare-and-branch-i960. 25837 (line 13) 25838* i960 compare/branch instructions: Compare-and-branch-i960. 25839 (line 6) 25840* i960 floating point (IEEE): Floating Point-i960. 25841 (line 6) 25842* i960 line comment character: i960-Chars. (line 6) 25843* i960 line separator: i960-Chars. (line 14) 25844* i960 machine directives: Directives-i960. (line 6) 25845* i960 opcodes: Opcodes for i960. (line 6) 25846* i960 options: Options-i960. (line 6) 25847* i960 support: i960-Dependent. (line 6) 25848* IA-64 line comment character: IA-64-Chars. (line 6) 25849* IA-64 line separator: IA-64-Chars. (line 8) 25850* IA-64 options: IA-64 Options. (line 6) 25851* IA-64 Processor-status-Register bit names: IA-64-Bits. (line 6) 25852* IA-64 registers: IA-64-Regs. (line 6) 25853* IA-64 relocations: IA-64-Relocs. (line 6) 25854* IA-64 support: IA-64-Dependent. (line 6) 25855* IA-64 Syntax: IA-64 Options. (line 87) 25856* ident directive: Ident. (line 6) 25857* identifiers, ARM: ARM-Chars. (line 19) 25858* identifiers, MSP 430: MSP430-Chars. (line 17) 25859* if directive: If. (line 6) 25860* ifb directive: If. (line 21) 25861* ifc directive: If. (line 25) 25862* ifdef directive: If. (line 16) 25863* ifeq directive: If. (line 33) 25864* ifeqs directive: If. (line 36) 25865* ifge directive: If. (line 40) 25866* ifgt directive: If. (line 44) 25867* ifle directive: If. (line 48) 25868* iflt directive: If. (line 52) 25869* ifnb directive: If. (line 56) 25870* ifnc directive: If. (line 61) 25871* ifndef directive: If. (line 65) 25872* ifne directive: If. (line 72) 25873* ifnes directive: If. (line 76) 25874* ifnotdef directive: If. (line 65) 25875* immediate character, AArch64: AArch64-Chars. (line 13) 25876* immediate character, ARM: ARM-Chars. (line 17) 25877* immediate character, M680x0: M68K-Chars. (line 13) 25878* immediate character, VAX: VAX-operands. (line 6) 25879* immediate fields, relaxation: Xtensa Immediate Relaxation. 25880 (line 6) 25881* immediate operands, i386: i386-Variations. (line 15) 25882* immediate operands, x86-64: i386-Variations. (line 15) 25883* imul instruction, i386: i386-Notes. (line 6) 25884* imul instruction, x86-64: i386-Notes. (line 6) 25885* incbin directive: Incbin. (line 6) 25886* include directive: Include. (line 6) 25887* include directive search path: I. (line 6) 25888* indirect character, VAX: VAX-operands. (line 9) 25889* infix operators: Infix Ops. (line 6) 25890* inhibiting interrupts, i386: i386-Prefixes. (line 36) 25891* input: Input Files. (line 6) 25892* input file linenumbers: Input Files. (line 35) 25893* instruction aliases, s390: s390 Aliases. (line 6) 25894* instruction bundle: Bundle directives. (line 9) 25895* instruction expansion, CRIS: CRIS-Expand. (line 6) 25896* instruction expansion, MMIX: MMIX-Expand. (line 6) 25897* instruction formats, s390: s390 Formats. (line 6) 25898* instruction marker, s390: s390 Instruction Marker. 25899 (line 6) 25900* instruction mnemonics, s390: s390 Mnemonics. (line 6) 25901* instruction naming, i386: i386-Mnemonics. (line 9) 25902* instruction naming, x86-64: i386-Mnemonics. (line 9) 25903* instruction operand modifier, s390: s390 Operand Modifier. 25904 (line 6) 25905* instruction operands, s390: s390 Operands. (line 6) 25906* instruction prefixes, i386: i386-Prefixes. (line 6) 25907* instruction set, M680x0: M68K-opcodes. (line 6) 25908* instruction set, M68HC11: M68HC11-opcodes. (line 6) 25909* instruction set, XGATE: XGATE-opcodes. (line 6) 25910* instruction summary, AVR: AVR Opcodes. (line 6) 25911* instruction summary, D10V: D10V-Opcodes. (line 6) 25912* instruction summary, D30V: D30V-Opcodes. (line 6) 25913* instruction summary, H8/300: H8/300 Opcodes. (line 6) 25914* instruction summary, LM32: LM32 Opcodes. (line 6) 25915* instruction summary, SH: SH Opcodes. (line 6) 25916* instruction summary, SH64: SH64 Opcodes. (line 6) 25917* instruction summary, Z8000: Z8000 Opcodes. (line 6) 25918* instruction syntax, s390: s390 Syntax. (line 6) 25919* instructions and directives: Statements. (line 20) 25920* int directive: Int. (line 6) 25921* int directive, H8/300: H8/300 Directives. (line 6) 25922* int directive, i386: i386-Float. (line 21) 25923* int directive, TIC54X: TIC54X-Directives. (line 111) 25924* int directive, x86-64: i386-Float. (line 21) 25925* integer expressions: Integer Exprs. (line 6) 25926* integer, 16-byte: Octa. (line 6) 25927* integer, 8-byte: Quad. (line 9) 25928* integers: Integers. (line 6) 25929* integers, 16-bit: hword. (line 6) 25930* integers, 32-bit: Int. (line 6) 25931* integers, binary: Integers. (line 6) 25932* integers, decimal: Integers. (line 12) 25933* integers, hexadecimal: Integers. (line 15) 25934* integers, octal: Integers. (line 9) 25935* integers, one byte: Byte. (line 6) 25936* intel_syntax pseudo op, i386: i386-Variations. (line 6) 25937* intel_syntax pseudo op, x86-64: i386-Variations. (line 6) 25938* internal assembler sections: As Sections. (line 6) 25939* internal directive: Internal. (line 6) 25940* interrupt link register, ARC: ARC-Regs. (line 27) 25941* Interrupt Vector Base address, ARC: ARC-Regs. (line 67) 25942* invalid input: Bug Criteria. (line 14) 25943* invocation summary: Overview. (line 6) 25944* IP2K architecture options: IP2K-Opts. (line 9) 25945* IP2K line comment character: IP2K-Chars. (line 6) 25946* IP2K line separator: IP2K-Chars. (line 14) 25947* IP2K options: IP2K-Opts. (line 6) 25948* IP2K support: IP2K-Dependent. (line 6) 25949* irp directive: Irp. (line 6) 25950* irpc directive: Irpc. (line 6) 25951* ISA options, SH64: SH64 Options. (line 6) 25952* joining text and data sections: R. (line 6) 25953* jump instructions, i386: i386-Mnemonics. (line 59) 25954* jump instructions, relaxation: Xtensa Jump Relaxation. 25955 (line 6) 25956* jump instructions, x86-64: i386-Mnemonics. (line 59) 25957* jump optimization, i386: i386-Jumps. (line 6) 25958* jump optimization, x86-64: i386-Jumps. (line 6) 25959* jump/call operands, i386: i386-Variations. (line 15) 25960* jump/call operands, x86-64: i386-Variations. (line 15) 25961* L16SI instructions, relaxation: Xtensa Immediate Relaxation. 25962 (line 23) 25963* L16UI instructions, relaxation: Xtensa Immediate Relaxation. 25964 (line 23) 25965* L32I instructions, relaxation: Xtensa Immediate Relaxation. 25966 (line 23) 25967* L8UI instructions, relaxation: Xtensa Immediate Relaxation. 25968 (line 23) 25969* label (:): Statements. (line 31) 25970* label directive, TIC54X: TIC54X-Directives. (line 123) 25971* labels: Labels. (line 6) 25972* lcomm directive <1>: Lcomm. (line 6) 25973* lcomm directive: ARC Directives. (line 9) 25974* lcomm directive, COFF: i386-Directives. (line 6) 25975* lcommon directive, ARC: ARC Directives. (line 24) 25976* ld: Object. (line 15) 25977* ldouble directive M680x0: M68K-Float. (line 17) 25978* ldouble directive M68HC11: M68HC11-Float. (line 17) 25979* ldouble directive XGATE: XGATE-Float. (line 16) 25980* ldouble directive, TIC54X: TIC54X-Directives. (line 64) 25981* LDR reg,=<expr> pseudo op, AArch64: AArch64 Opcodes. (line 9) 25982* LDR reg,=<label> pseudo op, ARM: ARM Opcodes. (line 15) 25983* leafproc directive, i960: Directives-i960. (line 18) 25984* length directive, TIC54X: TIC54X-Directives. (line 127) 25985* length of symbols: Symbol Intro. (line 19) 25986* level 1 interrupt link register, ARC: ARC-Regs. (line 23) 25987* level 2 interrupt link register, ARC: ARC-Regs. (line 31) 25988* lflags directive (ignored): Lflags. (line 6) 25989* line: ARC-Chars. (line 30) 25990* line comment character: Comments. (line 19) 25991* line comment character, AArch64: AArch64-Chars. (line 6) 25992* line comment character, Alpha: Alpha-Chars. (line 6) 25993* line comment character, ARC: ARC-Chars. (line 11) 25994* line comment character, ARM: ARM-Chars. (line 6) 25995* line comment character, AVR: AVR-Chars. (line 6) 25996* line comment character, CR16: CR16-Chars. (line 6) 25997* line comment character, D10V: D10V-Chars. (line 6) 25998* line comment character, D30V: D30V-Chars. (line 6) 25999* line comment character, Epiphany: Epiphany-Chars. (line 6) 26000* line comment character, H8/300: H8/300-Chars. (line 6) 26001* line comment character, i386: i386-Chars. (line 6) 26002* line comment character, i860: i860-Chars. (line 6) 26003* line comment character, i960: i960-Chars. (line 6) 26004* line comment character, IA-64: IA-64-Chars. (line 6) 26005* line comment character, IP2K: IP2K-Chars. (line 6) 26006* line comment character, LM32: LM32-Chars. (line 6) 26007* line comment character, M32C: M32C-Chars. (line 6) 26008* line comment character, M680x0: M68K-Chars. (line 6) 26009* line comment character, M68HC11: M68HC11-Syntax. (line 17) 26010* line comment character, Meta: Meta-Chars. (line 6) 26011* line comment character, MicroBlaze: MicroBlaze-Chars. (line 6) 26012* line comment character, MIPS: MIPS-Chars. (line 6) 26013* line comment character, MSP 430: MSP430-Chars. (line 6) 26014* line comment character, Nios II: Nios II Chars. (line 6) 26015* line comment character, NS32K: NS32K-Chars. (line 6) 26016* line comment character, PJ: PJ-Chars. (line 6) 26017* line comment character, PowerPC: PowerPC-Chars. (line 6) 26018* line comment character, RL78: RL78-Chars. (line 6) 26019* line comment character, RX: RX-Chars. (line 6) 26020* line comment character, s390: s390 Characters. (line 6) 26021* line comment character, SCORE: SCORE-Chars. (line 6) 26022* line comment character, SH: SH-Chars. (line 6) 26023* line comment character, SH64: SH64-Chars. (line 6) 26024* line comment character, Sparc: Sparc-Chars. (line 6) 26025* line comment character, TIC54X: TIC54X-Chars. (line 6) 26026* line comment character, TIC6X: TIC6X Syntax. (line 6) 26027* line comment character, V850: V850-Chars. (line 6) 26028* line comment character, VAX: VAX-Chars. (line 6) 26029* line comment character, Visium: Visium Characters. (line 6) 26030* line comment character, XGATE: XGATE-Syntax. (line 16) 26031* line comment character, XStormy16: XStormy16-Chars. (line 6) 26032* line comment character, Z80: Z80-Chars. (line 6) 26033* line comment character, Z8000: Z8000-Chars. (line 6) 26034* line comment characters, CRIS: CRIS-Chars. (line 6) 26035* line comment characters, MMIX: MMIX-Chars. (line 6) 26036* line directive: Line. (line 6) 26037* line directive, MSP 430: MSP430 Directives. (line 14) 26038* line numbers, in input files: Input Files. (line 35) 26039* line separator character: Statements. (line 6) 26040* line separator character, Nios II: Nios II Chars. (line 6) 26041* line separator, AArch64: AArch64-Chars. (line 10) 26042* line separator, Alpha: Alpha-Chars. (line 11) 26043* line separator, ARC: ARC-Chars. (line 27) 26044* line separator, ARM: ARM-Chars. (line 14) 26045* line separator, AVR: AVR-Chars. (line 14) 26046* line separator, CR16: CR16-Chars. (line 13) 26047* line separator, Epiphany: Epiphany-Chars. (line 14) 26048* line separator, H8/300: H8/300-Chars. (line 8) 26049* line separator, i386: i386-Chars. (line 18) 26050* line separator, i860: i860-Chars. (line 14) 26051* line separator, i960: i960-Chars. (line 14) 26052* line separator, IA-64: IA-64-Chars. (line 8) 26053* line separator, IP2K: IP2K-Chars. (line 14) 26054* line separator, LM32: LM32-Chars. (line 12) 26055* line separator, M32C: M32C-Chars. (line 14) 26056* line separator, M680x0: M68K-Chars. (line 20) 26057* line separator, M68HC11: M68HC11-Syntax. (line 27) 26058* line separator, Meta: Meta-Chars. (line 8) 26059* line separator, MicroBlaze: MicroBlaze-Chars. (line 14) 26060* line separator, MIPS: MIPS-Chars. (line 14) 26061* line separator, MSP 430: MSP430-Chars. (line 14) 26062* line separator, NS32K: NS32K-Chars. (line 18) 26063* line separator, PJ: PJ-Chars. (line 14) 26064* line separator, PowerPC: PowerPC-Chars. (line 18) 26065* line separator, RL78: RL78-Chars. (line 14) 26066* line separator, RX: RX-Chars. (line 14) 26067* line separator, s390: s390 Characters. (line 13) 26068* line separator, SCORE: SCORE-Chars. (line 14) 26069* line separator, SH: SH-Chars. (line 8) 26070* line separator, SH64: SH64-Chars. (line 13) 26071* line separator, Sparc: Sparc-Chars. (line 14) 26072* line separator, TIC54X: TIC54X-Chars. (line 17) 26073* line separator, TIC6X: TIC6X Syntax. (line 13) 26074* line separator, V850: V850-Chars. (line 13) 26075* line separator, VAX: VAX-Chars. (line 14) 26076* line separator, Visium: Visium Characters. (line 14) 26077* line separator, XGATE: XGATE-Syntax. (line 26) 26078* line separator, XStormy16: XStormy16-Chars. (line 14) 26079* line separator, Z80: Z80-Chars. (line 13) 26080* line separator, Z8000: Z8000-Chars. (line 13) 26081* lines starting with #: Comments. (line 33) 26082* link register, ARC: ARC-Regs. (line 35) 26083* linker: Object. (line 15) 26084* linker, and assembler: Secs Background. (line 10) 26085* linkonce directive: Linkonce. (line 6) 26086* list directive: List. (line 6) 26087* list directive, TIC54X: TIC54X-Directives. (line 131) 26088* listing control, turning off: Nolist. (line 6) 26089* listing control, turning on: List. (line 6) 26090* listing control: new page: Eject. (line 6) 26091* listing control: paper size: Psize. (line 6) 26092* listing control: subtitle: Sbttl. (line 6) 26093* listing control: title line: Title. (line 6) 26094* listings, enabling: a. (line 6) 26095* literal directive: Literal Directive. (line 6) 26096* literal pool entries, s390: s390 Literal Pool Entries. 26097 (line 6) 26098* literal_position directive: Literal Position Directive. 26099 (line 6) 26100* literal_prefix directive: Literal Prefix Directive. 26101 (line 6) 26102* little endian output, MIPS: Overview. (line 815) 26103* little endian output, PJ: Overview. (line 718) 26104* little-endian output, MIPS: MIPS Options. (line 13) 26105* little-endian output, TIC6X: TIC6X Options. (line 46) 26106* LM32 line comment character: LM32-Chars. (line 6) 26107* LM32 line separator: LM32-Chars. (line 12) 26108* LM32 modifiers: LM32-Modifiers. (line 6) 26109* LM32 opcode summary: LM32 Opcodes. (line 6) 26110* LM32 options (none): LM32 Options. (line 6) 26111* LM32 register names: LM32-Regs. (line 6) 26112* LM32 support: LM32-Dependent. (line 6) 26113* ln directive: Ln. (line 6) 26114* lo directive, Nios II: Nios II Relocations. 26115 (line 23) 26116* lo pseudo-op, V850: V850 Opcodes. (line 22) 26117* loc directive: Loc. (line 6) 26118* loc_mark_labels directive: Loc_mark_labels. (line 6) 26119* local common symbols: Lcomm. (line 6) 26120* local directive: Local. (line 6) 26121* local labels: Symbol Names. (line 43) 26122* local symbol names: Symbol Names. (line 30) 26123* local symbols, retaining in output: L. (line 6) 26124* location counter: Dot. (line 6) 26125* location counter, advancing: Org. (line 6) 26126* location counter, Z80: Z80-Chars. (line 15) 26127* logical file name: File. (line 13) 26128* logical line number: Line. (line 6) 26129* logical line numbers: Comments. (line 33) 26130* long directive: Long. (line 6) 26131* long directive, i386: i386-Float. (line 21) 26132* long directive, TIC54X: TIC54X-Directives. (line 135) 26133* long directive, x86-64: i386-Float. (line 21) 26134* longcall pseudo-op, V850: V850 Opcodes. (line 123) 26135* longcalls directive: Longcalls Directive. 26136 (line 6) 26137* longjump pseudo-op, V850: V850 Opcodes. (line 129) 26138* loop counter, ARC: ARC-Regs. (line 41) 26139* loop directive, TIC54X: TIC54X-Directives. (line 143) 26140* LOOP instructions, alignment: Xtensa Automatic Alignment. 26141 (line 6) 26142* low directive, M32R: M32R-Directives. (line 9) 26143* lp register, V850: V850-Regs. (line 98) 26144* lval: Z8000 Directives. (line 27) 26145* LWP, i386: i386-LWP. (line 6) 26146* LWP, x86-64: i386-LWP. (line 6) 26147* M16C architecture option: M32C-Opts. (line 12) 26148* M32C architecture option: M32C-Opts. (line 9) 26149* M32C line comment character: M32C-Chars. (line 6) 26150* M32C line separator: M32C-Chars. (line 14) 26151* M32C modifiers: M32C-Modifiers. (line 6) 26152* M32C options: M32C-Opts. (line 6) 26153* M32C support: M32C-Dependent. (line 6) 26154* M32R architecture options: M32R-Opts. (line 9) 26155* M32R directives: M32R-Directives. (line 6) 26156* M32R options: M32R-Opts. (line 6) 26157* M32R support: M32R-Dependent. (line 6) 26158* M32R warnings: M32R-Warnings. (line 6) 26159* M680x0 addressing modes: M68K-Syntax. (line 21) 26160* M680x0 architecture options: M68K-Opts. (line 98) 26161* M680x0 branch improvement: M68K-Branch. (line 6) 26162* M680x0 directives: M68K-Directives. (line 6) 26163* M680x0 floating point: M68K-Float. (line 6) 26164* M680x0 immediate character: M68K-Chars. (line 13) 26165* M680x0 line comment character: M68K-Chars. (line 6) 26166* M680x0 line separator: M68K-Chars. (line 20) 26167* M680x0 opcodes: M68K-opcodes. (line 6) 26168* M680x0 options: M68K-Opts. (line 6) 26169* M680x0 pseudo-opcodes: M68K-Branch. (line 6) 26170* M680x0 size modifiers: M68K-Syntax. (line 8) 26171* M680x0 support: M68K-Dependent. (line 6) 26172* M680x0 syntax: M68K-Syntax. (line 8) 26173* M68HC11 addressing modes: M68HC11-Syntax. (line 30) 26174* M68HC11 and M68HC12 support: M68HC11-Dependent. (line 6) 26175* M68HC11 assembler directive .far: M68HC11-Directives. (line 20) 26176* M68HC11 assembler directive .interrupt: M68HC11-Directives. 26177 (line 26) 26178* M68HC11 assembler directive .mode: M68HC11-Directives. (line 16) 26179* M68HC11 assembler directive .relax: M68HC11-Directives. (line 10) 26180* M68HC11 assembler directive .xrefb: M68HC11-Directives. (line 31) 26181* M68HC11 assembler directives: M68HC11-Directives. (line 6) 26182* M68HC11 branch improvement: M68HC11-Branch. (line 6) 26183* M68HC11 floating point: M68HC11-Float. (line 6) 26184* M68HC11 line comment character: M68HC11-Syntax. (line 17) 26185* M68HC11 line separator: M68HC11-Syntax. (line 27) 26186* M68HC11 modifiers: M68HC11-Modifiers. (line 6) 26187* M68HC11 opcodes: M68HC11-opcodes. (line 6) 26188* M68HC11 options: M68HC11-Opts. (line 6) 26189* M68HC11 pseudo-opcodes: M68HC11-Branch. (line 6) 26190* M68HC11 syntax: M68HC11-Syntax. (line 6) 26191* M68HC12 assembler directives: M68HC11-Directives. (line 6) 26192* mA6 command line option, ARC: ARC Options. (line 14) 26193* mA7 command line option, ARC: ARC Options. (line 21) 26194* machine dependencies: Machine Dependencies. 26195 (line 6) 26196* machine directives, AArch64: AArch64 Directives. (line 6) 26197* machine directives, ARC: ARC Directives. (line 6) 26198* machine directives, ARM: ARM Directives. (line 6) 26199* machine directives, H8/300 (none): H8/300 Directives. (line 6) 26200* machine directives, i860: Directives-i860. (line 6) 26201* machine directives, i960: Directives-i960. (line 6) 26202* machine directives, MSP 430: MSP430 Directives. (line 6) 26203* machine directives, Nios II: Nios II Directives. (line 6) 26204* machine directives, SH: SH Directives. (line 6) 26205* machine directives, SH64: SH64 Directives. (line 9) 26206* machine directives, SPARC: Sparc-Directives. (line 6) 26207* machine directives, TIC54X: TIC54X-Directives. (line 6) 26208* machine directives, TIC6X: TIC6X Directives. (line 6) 26209* machine directives, TILE-Gx: TILE-Gx Directives. (line 6) 26210* machine directives, TILEPro: TILEPro Directives. (line 6) 26211* machine directives, V850: V850 Directives. (line 6) 26212* machine directives, VAX: VAX-directives. (line 6) 26213* machine directives, x86: i386-Directives. (line 6) 26214* machine directives, XStormy16: XStormy16 Directives. 26215 (line 6) 26216* machine independent directives: Pseudo Ops. (line 6) 26217* machine instructions (not covered): Manual. (line 14) 26218* machine relocations, Nios II: Nios II Relocations. 26219 (line 6) 26220* machine-independent syntax: Syntax. (line 6) 26221* macro directive: Macro. (line 28) 26222* macro directive, TIC54X: TIC54X-Directives. (line 153) 26223* macros: Macro. (line 6) 26224* macros, count executed: Macro. (line 143) 26225* Macros, MSP 430: MSP430-Macros. (line 6) 26226* macros, TIC54X: TIC54X-Macros. (line 6) 26227* make rules: MD. (line 6) 26228* manual, structure and purpose: Manual. (line 6) 26229* marc600 command line option, ARC: ARC Options. (line 14) 26230* mARC601 command line option, ARC: ARC Options. (line 18) 26231* mARC700 command line option, ARC: ARC Options. (line 21) 26232* march command line option, Nios II: Nios II Options. (line 29) 26233* math builtins, TIC54X: TIC54X-Builtins. (line 6) 26234* Maximum number of continuation lines: listing. (line 34) 26235* mEM command line option, ARC: ARC Options. (line 24) 26236* memory references, i386: i386-Memory. (line 6) 26237* memory references, x86-64: i386-Memory. (line 6) 26238* memory-mapped registers, TIC54X: TIC54X-MMRegs. (line 6) 26239* merging text and data sections: R. (line 6) 26240* messages from assembler: Errors. (line 6) 26241* Meta architectures: Meta Options. (line 6) 26242* Meta line comment character: Meta-Chars. (line 6) 26243* Meta line separator: Meta-Chars. (line 8) 26244* Meta options: Meta Options. (line 6) 26245* Meta registers: Meta-Regs. (line 6) 26246* Meta support: Meta-Dependent. (line 6) 26247* mHS command line option, ARC: ARC Options. (line 27) 26248* MicroBlaze architectures: MicroBlaze-Dependent. 26249 (line 6) 26250* MicroBlaze directives: MicroBlaze Directives. 26251 (line 6) 26252* MicroBlaze line comment character: MicroBlaze-Chars. (line 6) 26253* MicroBlaze line separator: MicroBlaze-Chars. (line 14) 26254* MicroBlaze support: MicroBlaze-Dependent. 26255 (line 13) 26256* minus, permitted arguments: Infix Ops. (line 49) 26257* MIPS 32-bit microMIPS instruction generation override: MIPS assembly options. 26258 (line 18) 26259* MIPS architecture options: MIPS Options. (line 29) 26260* MIPS big-endian output: MIPS Options. (line 13) 26261* MIPS CPU override: MIPS ISA. (line 19) 26262* MIPS directives to override command line options: MIPS assembly options. 26263 (line 6) 26264* MIPS DSP Release 1 instruction generation override: MIPS ASE Instruction Generation Overrides. 26265 (line 21) 26266* MIPS DSP Release 2 instruction generation override: MIPS ASE Instruction Generation Overrides. 26267 (line 26) 26268* MIPS DSP Release 3 instruction generation override: MIPS ASE Instruction Generation Overrides. 26269 (line 32) 26270* MIPS endianness: Overview. (line 812) 26271* MIPS eXtended Physical Address (XPA) instruction generation override: MIPS ASE Instruction Generation Overrides. 26272 (line 58) 26273* MIPS IEEE 754 NaN data encoding selection: MIPS NaN Encodings. 26274 (line 6) 26275* MIPS ISA: Overview. (line 818) 26276* MIPS ISA override: MIPS ISA. (line 6) 26277* MIPS line comment character: MIPS-Chars. (line 6) 26278* MIPS line separator: MIPS-Chars. (line 14) 26279* MIPS little-endian output: MIPS Options. (line 13) 26280* MIPS MCU instruction generation override: MIPS ASE Instruction Generation Overrides. 26281 (line 43) 26282* MIPS MDMX instruction generation override: MIPS ASE Instruction Generation Overrides. 26283 (line 16) 26284* MIPS MIPS-3D instruction generation override: MIPS ASE Instruction Generation Overrides. 26285 (line 6) 26286* MIPS MT instruction generation override: MIPS ASE Instruction Generation Overrides. 26287 (line 38) 26288* MIPS option stack: MIPS Option Stack. (line 6) 26289* MIPS processor: MIPS-Dependent. (line 6) 26290* MIPS SIMD Architecture instruction generation override: MIPS ASE Instruction Generation Overrides. 26291 (line 48) 26292* MIT: M68K-Syntax. (line 6) 26293* mlib directive, TIC54X: TIC54X-Directives. (line 159) 26294* mlist directive, TIC54X: TIC54X-Directives. (line 164) 26295* MMIX assembler directive BSPEC: MMIX-Pseudos. (line 131) 26296* MMIX assembler directive BYTE: MMIX-Pseudos. (line 97) 26297* MMIX assembler directive ESPEC: MMIX-Pseudos. (line 131) 26298* MMIX assembler directive GREG: MMIX-Pseudos. (line 50) 26299* MMIX assembler directive IS: MMIX-Pseudos. (line 42) 26300* MMIX assembler directive LOC: MMIX-Pseudos. (line 7) 26301* MMIX assembler directive LOCAL: MMIX-Pseudos. (line 28) 26302* MMIX assembler directive OCTA: MMIX-Pseudos. (line 108) 26303* MMIX assembler directive PREFIX: MMIX-Pseudos. (line 120) 26304* MMIX assembler directive TETRA: MMIX-Pseudos. (line 108) 26305* MMIX assembler directive WYDE: MMIX-Pseudos. (line 108) 26306* MMIX assembler directives: MMIX-Pseudos. (line 6) 26307* MMIX line comment characters: MMIX-Chars. (line 6) 26308* MMIX options: MMIX-Opts. (line 6) 26309* MMIX pseudo-op BSPEC: MMIX-Pseudos. (line 131) 26310* MMIX pseudo-op BYTE: MMIX-Pseudos. (line 97) 26311* MMIX pseudo-op ESPEC: MMIX-Pseudos. (line 131) 26312* MMIX pseudo-op GREG: MMIX-Pseudos. (line 50) 26313* MMIX pseudo-op IS: MMIX-Pseudos. (line 42) 26314* MMIX pseudo-op LOC: MMIX-Pseudos. (line 7) 26315* MMIX pseudo-op LOCAL: MMIX-Pseudos. (line 28) 26316* MMIX pseudo-op OCTA: MMIX-Pseudos. (line 108) 26317* MMIX pseudo-op PREFIX: MMIX-Pseudos. (line 120) 26318* MMIX pseudo-op TETRA: MMIX-Pseudos. (line 108) 26319* MMIX pseudo-op WYDE: MMIX-Pseudos. (line 108) 26320* MMIX pseudo-ops: MMIX-Pseudos. (line 6) 26321* MMIX register names: MMIX-Regs. (line 6) 26322* MMIX support: MMIX-Dependent. (line 6) 26323* mmixal differences: MMIX-mmixal. (line 6) 26324* mmregs directive, TIC54X: TIC54X-Directives. (line 169) 26325* mmsg directive, TIC54X: TIC54X-Directives. (line 77) 26326* MMX, i386: i386-SIMD. (line 6) 26327* MMX, x86-64: i386-SIMD. (line 6) 26328* mnemonic compatibility, i386: i386-Mnemonics. (line 65) 26329* mnemonic suffixes, i386: i386-Variations. (line 29) 26330* mnemonic suffixes, x86-64: i386-Variations. (line 29) 26331* mnemonics for opcodes, VAX: VAX-opcodes. (line 6) 26332* mnemonics, AVR: AVR Opcodes. (line 6) 26333* mnemonics, D10V: D10V-Opcodes. (line 6) 26334* mnemonics, D30V: D30V-Opcodes. (line 6) 26335* mnemonics, H8/300: H8/300 Opcodes. (line 6) 26336* mnemonics, LM32: LM32 Opcodes. (line 6) 26337* mnemonics, SH: SH Opcodes. (line 6) 26338* mnemonics, SH64: SH64 Opcodes. (line 6) 26339* mnemonics, Z8000: Z8000 Opcodes. (line 6) 26340* mnolist directive, TIC54X: TIC54X-Directives. (line 164) 26341* mnps400 command line option, ARC: ARC Options. (line 30) 26342* modifiers, M32C: M32C-Modifiers. (line 6) 26343* Motorola syntax for the 680x0: M68K-Moto-Syntax. (line 6) 26344* MOVI instructions, relaxation: Xtensa Immediate Relaxation. 26345 (line 12) 26346* MOVN, MOVZ and MOVK group relocations, AArch64: AArch64-Relocations. 26347 (line 6) 26348* MOVW and MOVT relocations, ARM: ARM-Relocations. (line 21) 26349* MRI compatibility mode: M. (line 6) 26350* mri directive: MRI. (line 6) 26351* MRI mode, temporarily: MRI. (line 6) 26352* MSP 430 floating point (IEEE): MSP430 Floating Point. 26353 (line 6) 26354* MSP 430 identifiers: MSP430-Chars. (line 17) 26355* MSP 430 line comment character: MSP430-Chars. (line 6) 26356* MSP 430 line separator: MSP430-Chars. (line 14) 26357* MSP 430 machine directives: MSP430 Directives. (line 6) 26358* MSP 430 macros: MSP430-Macros. (line 6) 26359* MSP 430 opcodes: MSP430 Opcodes. (line 6) 26360* MSP 430 options (none): MSP430 Options. (line 6) 26361* MSP 430 profiling capability: MSP430 Profiling Capability. 26362 (line 6) 26363* MSP 430 register names: MSP430-Regs. (line 6) 26364* MSP 430 support: MSP430-Dependent. (line 6) 26365* MSP430 Assembler Extensions: MSP430-Ext. (line 6) 26366* mul instruction, i386: i386-Notes. (line 6) 26367* mul instruction, x86-64: i386-Notes. (line 6) 26368* N32K support: NS32K-Dependent. (line 6) 26369* name: Z8000 Directives. (line 18) 26370* named section: Section. (line 6) 26371* named sections: Ld Sections. (line 8) 26372* names, symbol: Symbol Names. (line 6) 26373* naming object file: o. (line 6) 26374* NDS32 options: NDS32 Options. (line 6) 26375* NDS32 processor: NDS32-Dependent. (line 6) 26376* new page, in listings: Eject. (line 6) 26377* newblock directive, TIC54X: TIC54X-Directives. (line 175) 26378* newline (\n): Strings. (line 21) 26379* newline, required at file end: Statements. (line 14) 26380* Nios II line comment character: Nios II Chars. (line 6) 26381* Nios II line separator character: Nios II Chars. (line 6) 26382* Nios II machine directives: Nios II Directives. (line 6) 26383* Nios II machine relocations: Nios II Relocations. 26384 (line 6) 26385* Nios II opcodes: Nios II Opcodes. (line 6) 26386* Nios II options: Nios II Options. (line 6) 26387* Nios II support: NiosII-Dependent. (line 6) 26388* Nios support: NiosII-Dependent. (line 6) 26389* no-absolute-literals directive: Absolute Literals Directive. 26390 (line 6) 26391* no-longcalls directive: Longcalls Directive. 26392 (line 6) 26393* no-relax command line option, Nios II: Nios II Options. (line 20) 26394* no-schedule directive: Schedule Directive. (line 6) 26395* no-transform directive: Transform Directive. 26396 (line 6) 26397* nolist directive: Nolist. (line 6) 26398* nolist directive, TIC54X: TIC54X-Directives. (line 131) 26399* NOP pseudo op, ARM: ARM Opcodes. (line 9) 26400* notes for Alpha: Alpha Notes. (line 6) 26401* NS32K line comment character: NS32K-Chars. (line 6) 26402* NS32K line separator: NS32K-Chars. (line 18) 26403* null-terminated strings: Asciz. (line 6) 26404* number constants: Numbers. (line 6) 26405* number of macros executed: Macro. (line 143) 26406* numbered subsections: Sub-Sections. (line 6) 26407* numbers, 16-bit: hword. (line 6) 26408* numeric values: Expressions. (line 6) 26409* nword directive, SPARC: Sparc-Directives. (line 20) 26410* object attributes: Object Attributes. (line 6) 26411* object file: Object. (line 6) 26412* object file format: Object Formats. (line 6) 26413* object file name: o. (line 6) 26414* object file, after errors: Z. (line 6) 26415* obsolescent directives: Deprecated. (line 6) 26416* octa directive: Octa. (line 6) 26417* octal character code (\DDD): Strings. (line 30) 26418* octal integers: Integers. (line 9) 26419* offset directive: Offset. (line 6) 26420* offset directive, V850: V850 Directives. (line 6) 26421* opcode mnemonics, VAX: VAX-opcodes. (line 6) 26422* opcode names, TILE-Gx: TILE-Gx Opcodes. (line 6) 26423* opcode names, TILEPro: TILEPro Opcodes. (line 6) 26424* opcode names, Xtensa: Xtensa Opcodes. (line 6) 26425* opcode summary, AVR: AVR Opcodes. (line 6) 26426* opcode summary, D10V: D10V-Opcodes. (line 6) 26427* opcode summary, D30V: D30V-Opcodes. (line 6) 26428* opcode summary, H8/300: H8/300 Opcodes. (line 6) 26429* opcode summary, LM32: LM32 Opcodes. (line 6) 26430* opcode summary, SH: SH Opcodes. (line 6) 26431* opcode summary, SH64: SH64 Opcodes. (line 6) 26432* opcode summary, Z8000: Z8000 Opcodes. (line 6) 26433* opcodes for AArch64: AArch64 Opcodes. (line 6) 26434* opcodes for ARC: ARC Opcodes. (line 6) 26435* opcodes for ARM: ARM Opcodes. (line 6) 26436* opcodes for MSP 430: MSP430 Opcodes. (line 6) 26437* opcodes for Nios II: Nios II Opcodes. (line 6) 26438* opcodes for V850: V850 Opcodes. (line 6) 26439* opcodes, i860: Opcodes for i860. (line 6) 26440* opcodes, i960: Opcodes for i960. (line 6) 26441* opcodes, M680x0: M68K-opcodes. (line 6) 26442* opcodes, M68HC11: M68HC11-opcodes. (line 6) 26443* operand delimiters, i386: i386-Variations. (line 15) 26444* operand delimiters, x86-64: i386-Variations. (line 15) 26445* operand notation, VAX: VAX-operands. (line 6) 26446* operands in expressions: Arguments. (line 6) 26447* operator precedence: Infix Ops. (line 11) 26448* operators, in expressions: Operators. (line 6) 26449* operators, permitted arguments: Infix Ops. (line 6) 26450* optimization, D10V: Overview. (line 575) 26451* optimization, D30V: Overview. (line 580) 26452* optimizations: Xtensa Optimizations. 26453 (line 6) 26454* option directive, TIC54X: TIC54X-Directives. (line 179) 26455* option summary: Overview. (line 6) 26456* options for AArch64 (none): AArch64 Options. (line 6) 26457* options for Alpha: Alpha Options. (line 6) 26458* options for ARC: ARC Options. (line 6) 26459* options for ARM (none): ARM Options. (line 6) 26460* options for AVR (none): AVR Options. (line 6) 26461* options for Blackfin (none): Blackfin Options. (line 6) 26462* options for i386: i386-Options. (line 6) 26463* options for IA-64: IA-64 Options. (line 6) 26464* options for LM32 (none): LM32 Options. (line 6) 26465* options for Meta: Meta Options. (line 6) 26466* options for MSP430 (none): MSP430 Options. (line 6) 26467* options for NDS32: NDS32 Options. (line 6) 26468* options for Nios II: Nios II Options. (line 6) 26469* options for PDP-11: PDP-11-Options. (line 6) 26470* options for PowerPC: PowerPC-Opts. (line 6) 26471* options for s390: s390 Options. (line 6) 26472* options for SCORE: SCORE-Opts. (line 6) 26473* options for SPARC: Sparc-Opts. (line 6) 26474* options for TIC6X: TIC6X Options. (line 6) 26475* options for V850 (none): V850 Options. (line 6) 26476* options for VAX/VMS: VAX-Opts. (line 42) 26477* options for Visium: Visium Options. (line 6) 26478* options for x86-64: i386-Options. (line 6) 26479* options for Z80: Z80 Options. (line 6) 26480* options, all versions of assembler: Invoking. (line 6) 26481* options, command line: Command Line. (line 13) 26482* options, CRIS: CRIS-Opts. (line 6) 26483* options, D10V: D10V-Opts. (line 6) 26484* options, D30V: D30V-Opts. (line 6) 26485* options, Epiphany: Epiphany Options. (line 6) 26486* options, H8/300: H8/300 Options. (line 6) 26487* options, i960: Options-i960. (line 6) 26488* options, IP2K: IP2K-Opts. (line 6) 26489* options, M32C: M32C-Opts. (line 6) 26490* options, M32R: M32R-Opts. (line 6) 26491* options, M680x0: M68K-Opts. (line 6) 26492* options, M68HC11: M68HC11-Opts. (line 6) 26493* options, MMIX: MMIX-Opts. (line 6) 26494* options, PJ: PJ Options. (line 6) 26495* options, RL78: RL78-Opts. (line 6) 26496* options, RX: RX-Opts. (line 6) 26497* options, SH: SH Options. (line 6) 26498* options, SH64: SH64 Options. (line 6) 26499* options, TIC54X: TIC54X-Opts. (line 6) 26500* options, XGATE: XGATE-Opts. (line 6) 26501* options, Z8000: Z8000 Options. (line 6) 26502* org directive: Org. (line 6) 26503* other attribute, of a.out symbol: Symbol Other. (line 6) 26504* output file: Object. (line 6) 26505* output section padding: no-pad-sections. (line 6) 26506* p2align directive: P2align. (line 6) 26507* p2alignl directive: P2align. (line 28) 26508* p2alignw directive: P2align. (line 28) 26509* padding the location counter: Align. (line 6) 26510* padding the location counter given a power of two: P2align. 26511 (line 6) 26512* padding the location counter given number of bytes: Balign. 26513 (line 6) 26514* page, in listings: Eject. (line 6) 26515* paper size, for listings: Psize. (line 6) 26516* paths for .include: I. (line 6) 26517* patterns, writing in memory: Fill. (line 6) 26518* PDP-11 comments: PDP-11-Syntax. (line 16) 26519* PDP-11 floating-point register syntax: PDP-11-Syntax. (line 13) 26520* PDP-11 general-purpose register syntax: PDP-11-Syntax. (line 10) 26521* PDP-11 instruction naming: PDP-11-Mnemonics. (line 6) 26522* PDP-11 line separator: PDP-11-Syntax. (line 19) 26523* PDP-11 support: PDP-11-Dependent. (line 6) 26524* PDP-11 syntax: PDP-11-Syntax. (line 6) 26525* PIC code generation for ARM: ARM Options. (line 185) 26526* PIC code generation for M32R: M32R-Opts. (line 42) 26527* PIC selection, MIPS: MIPS Options. (line 21) 26528* PJ endianness: Overview. (line 715) 26529* PJ line comment character: PJ-Chars. (line 6) 26530* PJ line separator: PJ-Chars. (line 14) 26531* PJ options: PJ Options. (line 6) 26532* PJ support: PJ-Dependent. (line 6) 26533* plus, permitted arguments: Infix Ops. (line 44) 26534* popsection directive: PopSection. (line 6) 26535* Position-independent code, CRIS: CRIS-Opts. (line 27) 26536* Position-independent code, symbols in, CRIS: CRIS-Pic. (line 6) 26537* PowerPC architectures: PowerPC-Opts. (line 6) 26538* PowerPC directives: PowerPC-Pseudo. (line 6) 26539* PowerPC line comment character: PowerPC-Chars. (line 6) 26540* PowerPC line separator: PowerPC-Chars. (line 18) 26541* PowerPC options: PowerPC-Opts. (line 6) 26542* PowerPC support: PPC-Dependent. (line 6) 26543* precedence of operators: Infix Ops. (line 11) 26544* precision, floating point: Flonums. (line 6) 26545* prefix operators: Prefix Ops. (line 6) 26546* prefixes, i386: i386-Prefixes. (line 6) 26547* preprocessing: Preprocessing. (line 6) 26548* preprocessing, turning on and off: Preprocessing. (line 27) 26549* previous directive: Previous. (line 6) 26550* primary attributes, COFF symbols: COFF Symbols. (line 13) 26551* print directive: Print. (line 6) 26552* proc directive, SPARC: Sparc-Directives. (line 25) 26553* Processor Identification register, ARC: ARC-Regs. (line 52) 26554* profiler directive, MSP 430: MSP430 Directives. (line 26) 26555* profiling capability for MSP 430: MSP430 Profiling Capability. 26556 (line 6) 26557* Program Counter, ARC: ARC-Regs. (line 55) 26558* protected directive: Protected. (line 6) 26559* pseudo-op .arch, CRIS: CRIS-Pseudos. (line 45) 26560* pseudo-op .dword, CRIS: CRIS-Pseudos. (line 12) 26561* pseudo-op .syntax, CRIS: CRIS-Pseudos. (line 17) 26562* pseudo-op BSPEC, MMIX: MMIX-Pseudos. (line 131) 26563* pseudo-op BYTE, MMIX: MMIX-Pseudos. (line 97) 26564* pseudo-op ESPEC, MMIX: MMIX-Pseudos. (line 131) 26565* pseudo-op GREG, MMIX: MMIX-Pseudos. (line 50) 26566* pseudo-op IS, MMIX: MMIX-Pseudos. (line 42) 26567* pseudo-op LOC, MMIX: MMIX-Pseudos. (line 7) 26568* pseudo-op LOCAL, MMIX: MMIX-Pseudos. (line 28) 26569* pseudo-op OCTA, MMIX: MMIX-Pseudos. (line 108) 26570* pseudo-op PREFIX, MMIX: MMIX-Pseudos. (line 120) 26571* pseudo-op TETRA, MMIX: MMIX-Pseudos. (line 108) 26572* pseudo-op WYDE, MMIX: MMIX-Pseudos. (line 108) 26573* pseudo-opcodes for XStormy16: XStormy16 Opcodes. (line 6) 26574* pseudo-opcodes, M680x0: M68K-Branch. (line 6) 26575* pseudo-opcodes, M68HC11: M68HC11-Branch. (line 6) 26576* pseudo-ops for branch, VAX: VAX-branch. (line 6) 26577* pseudo-ops, CRIS: CRIS-Pseudos. (line 6) 26578* pseudo-ops, machine independent: Pseudo Ops. (line 6) 26579* pseudo-ops, MMIX: MMIX-Pseudos. (line 6) 26580* psize directive: Psize. (line 6) 26581* PSR bits: IA-64-Bits. (line 6) 26582* pstring directive, TIC54X: TIC54X-Directives. (line 208) 26583* psw register, V850: V850-Regs. (line 116) 26584* purgem directive: Purgem. (line 6) 26585* purpose of GNU assembler: GNU Assembler. (line 12) 26586* pushsection directive: PushSection. (line 6) 26587* quad directive: Quad. (line 6) 26588* quad directive, i386: i386-Float. (line 21) 26589* quad directive, x86-64: i386-Float. (line 21) 26590* real-mode code, i386: i386-16bit. (line 6) 26591* ref directive, TIC54X: TIC54X-Directives. (line 103) 26592* refsym directive, MSP 430: MSP430 Directives. (line 30) 26593* register directive, SPARC: Sparc-Directives. (line 29) 26594* register name prefix character, ARC: ARC-Chars. (line 7) 26595* register names, AArch64: AArch64-Regs. (line 6) 26596* register names, Alpha: Alpha-Regs. (line 6) 26597* register names, ARC: ARC-Regs. (line 6) 26598* register names, ARM: ARM-Regs. (line 6) 26599* register names, AVR: AVR-Regs. (line 6) 26600* register names, CRIS: CRIS-Regs. (line 6) 26601* register names, H8/300: H8/300-Regs. (line 6) 26602* register names, IA-64: IA-64-Regs. (line 6) 26603* register names, LM32: LM32-Regs. (line 6) 26604* register names, MMIX: MMIX-Regs. (line 6) 26605* register names, MSP 430: MSP430-Regs. (line 6) 26606* register names, Sparc: Sparc-Regs. (line 6) 26607* register names, TILE-Gx: TILE-Gx Registers. (line 6) 26608* register names, TILEPro: TILEPro Registers. (line 6) 26609* register names, V850: V850-Regs. (line 6) 26610* register names, VAX: VAX-operands. (line 17) 26611* register names, Visium: Visium Registers. (line 6) 26612* register names, Xtensa: Xtensa Registers. (line 6) 26613* register names, Z80: Z80-Regs. (line 6) 26614* register naming, s390: s390 Register. (line 6) 26615* register operands, i386: i386-Variations. (line 15) 26616* register operands, x86-64: i386-Variations. (line 15) 26617* registers, D10V: D10V-Regs. (line 6) 26618* registers, D30V: D30V-Regs. (line 6) 26619* registers, i386: i386-Regs. (line 6) 26620* registers, Meta: Meta-Regs. (line 6) 26621* registers, SH: SH-Regs. (line 6) 26622* registers, SH64: SH64-Regs. (line 6) 26623* registers, TIC54X memory-mapped: TIC54X-MMRegs. (line 6) 26624* registers, x86-64: i386-Regs. (line 6) 26625* registers, Z8000: Z8000-Regs. (line 6) 26626* relax-all command line option, Nios II: Nios II Options. (line 13) 26627* relax-section command line option, Nios II: Nios II Options. 26628 (line 6) 26629* relaxation: Xtensa Relaxation. (line 6) 26630* relaxation of ADDI instructions: Xtensa Immediate Relaxation. 26631 (line 43) 26632* relaxation of branch instructions: Xtensa Branch Relaxation. 26633 (line 6) 26634* relaxation of call instructions: Xtensa Call Relaxation. 26635 (line 6) 26636* relaxation of immediate fields: Xtensa Immediate Relaxation. 26637 (line 6) 26638* relaxation of jump instructions: Xtensa Jump Relaxation. 26639 (line 6) 26640* relaxation of L16SI instructions: Xtensa Immediate Relaxation. 26641 (line 23) 26642* relaxation of L16UI instructions: Xtensa Immediate Relaxation. 26643 (line 23) 26644* relaxation of L32I instructions: Xtensa Immediate Relaxation. 26645 (line 23) 26646* relaxation of L8UI instructions: Xtensa Immediate Relaxation. 26647 (line 23) 26648* relaxation of MOVI instructions: Xtensa Immediate Relaxation. 26649 (line 12) 26650* reloc directive: Reloc. (line 6) 26651* relocation: Sections. (line 6) 26652* relocation example: Ld Sections. (line 40) 26653* relocations, AArch64: AArch64-Relocations. 26654 (line 6) 26655* relocations, Alpha: Alpha-Relocs. (line 6) 26656* relocations, Sparc: Sparc-Relocs. (line 6) 26657* repeat prefixes, i386: i386-Prefixes. (line 44) 26658* reporting bugs in assembler: Reporting Bugs. (line 6) 26659* rept directive: Rept. (line 6) 26660* reserve directive, SPARC: Sparc-Directives. (line 39) 26661* return instructions, i386: i386-Variations. (line 41) 26662* return instructions, x86-64: i386-Variations. (line 41) 26663* REX prefixes, i386: i386-Prefixes. (line 46) 26664* RL78 assembler directives: RL78-Directives. (line 6) 26665* RL78 line comment character: RL78-Chars. (line 6) 26666* RL78 line separator: RL78-Chars. (line 14) 26667* RL78 modifiers: RL78-Modifiers. (line 6) 26668* RL78 options: RL78-Opts. (line 6) 26669* RL78 support: RL78-Dependent. (line 6) 26670* rsect: Z8000 Directives. (line 52) 26671* RX assembler directive .3byte: RX-Directives. (line 9) 26672* RX assembler directive .fetchalign: RX-Directives. (line 13) 26673* RX assembler directives: RX-Directives. (line 6) 26674* RX floating point: RX-Float. (line 6) 26675* RX line comment character: RX-Chars. (line 6) 26676* RX line separator: RX-Chars. (line 14) 26677* RX modifiers: RX-Modifiers. (line 6) 26678* RX options: RX-Opts. (line 6) 26679* RX support: RX-Dependent. (line 6) 26680* s390 floating point: s390 Floating Point. 26681 (line 6) 26682* s390 instruction aliases: s390 Aliases. (line 6) 26683* s390 instruction formats: s390 Formats. (line 6) 26684* s390 instruction marker: s390 Instruction Marker. 26685 (line 6) 26686* s390 instruction mnemonics: s390 Mnemonics. (line 6) 26687* s390 instruction operand modifier: s390 Operand Modifier. 26688 (line 6) 26689* s390 instruction operands: s390 Operands. (line 6) 26690* s390 instruction syntax: s390 Syntax. (line 6) 26691* s390 line comment character: s390 Characters. (line 6) 26692* s390 line separator: s390 Characters. (line 13) 26693* s390 literal pool entries: s390 Literal Pool Entries. 26694 (line 6) 26695* s390 options: s390 Options. (line 6) 26696* s390 register naming: s390 Register. (line 6) 26697* s390 support: S/390-Dependent. (line 6) 26698* Saved User Stack Pointer, ARC: ARC-Regs. (line 74) 26699* sblock directive, TIC54X: TIC54X-Directives. (line 182) 26700* sbttl directive: Sbttl. (line 6) 26701* schedule directive: Schedule Directive. (line 6) 26702* scl directive: Scl. (line 6) 26703* SCORE architectures: SCORE-Opts. (line 6) 26704* SCORE directives: SCORE-Pseudo. (line 6) 26705* SCORE line comment character: SCORE-Chars. (line 6) 26706* SCORE line separator: SCORE-Chars. (line 14) 26707* SCORE options: SCORE-Opts. (line 6) 26708* SCORE processor: SCORE-Dependent. (line 6) 26709* sdaoff pseudo-op, V850: V850 Opcodes. (line 65) 26710* search path for .include: I. (line 6) 26711* sect directive, TIC54X: TIC54X-Directives. (line 188) 26712* section directive (COFF version): Section. (line 16) 26713* section directive (ELF version): Section. (line 77) 26714* section directive, V850: V850 Directives. (line 9) 26715* section name substitution: Section. (line 81) 26716* section override prefixes, i386: i386-Prefixes. (line 23) 26717* Section Stack <1>: PushSection. (line 6) 26718* Section Stack <2>: Section. (line 72) 26719* Section Stack <3>: Previous. (line 6) 26720* Section Stack <4>: PopSection. (line 6) 26721* Section Stack: SubSection. (line 6) 26722* section-relative addressing: Secs Background. (line 68) 26723* sections: Sections. (line 6) 26724* sections in messages, internal: As Sections. (line 6) 26725* sections, i386: i386-Variations. (line 47) 26726* sections, named: Ld Sections. (line 8) 26727* sections, x86-64: i386-Variations. (line 47) 26728* seg directive, SPARC: Sparc-Directives. (line 44) 26729* segm: Z8000 Directives. (line 10) 26730* set at directive, Nios II: Nios II Directives. (line 35) 26731* set break directive, Nios II: Nios II Directives. (line 43) 26732* set directive: Set. (line 6) 26733* set directive, Nios II: Nios II Directives. (line 57) 26734* set directive, TIC54X: TIC54X-Directives. (line 191) 26735* set noat directive, Nios II: Nios II Directives. (line 31) 26736* set nobreak directive, Nios II: Nios II Directives. (line 39) 26737* set norelax directive, Nios II: Nios II Directives. (line 46) 26738* set relaxall directive, Nios II: Nios II Directives. (line 53) 26739* set relaxsection directive, Nios II: Nios II Directives. (line 49) 26740* SH addressing modes: SH-Addressing. (line 6) 26741* SH floating point (IEEE): SH Floating Point. (line 6) 26742* SH line comment character: SH-Chars. (line 6) 26743* SH line separator: SH-Chars. (line 8) 26744* SH machine directives: SH Directives. (line 6) 26745* SH opcode summary: SH Opcodes. (line 6) 26746* SH options: SH Options. (line 6) 26747* SH registers: SH-Regs. (line 6) 26748* SH support: SH-Dependent. (line 6) 26749* SH64 ABI options: SH64 Options. (line 29) 26750* SH64 addressing modes: SH64-Addressing. (line 6) 26751* SH64 ISA options: SH64 Options. (line 6) 26752* SH64 line comment character: SH64-Chars. (line 6) 26753* SH64 line separator: SH64-Chars. (line 13) 26754* SH64 machine directives: SH64 Directives. (line 9) 26755* SH64 opcode summary: SH64 Opcodes. (line 6) 26756* SH64 options: SH64 Options. (line 6) 26757* SH64 registers: SH64-Regs. (line 6) 26758* SH64 support: SH64-Dependent. (line 6) 26759* shigh directive, M32R: M32R-Directives. (line 26) 26760* short directive: Short. (line 6) 26761* short directive, TIC54X: TIC54X-Directives. (line 111) 26762* SIMD, i386: i386-SIMD. (line 6) 26763* SIMD, x86-64: i386-SIMD. (line 6) 26764* single character constant: Chars. (line 6) 26765* single directive: Single. (line 6) 26766* single directive, i386: i386-Float. (line 14) 26767* single directive, x86-64: i386-Float. (line 14) 26768* single quote, Z80: Z80-Chars. (line 20) 26769* sixteen bit integers: hword. (line 6) 26770* sixteen byte integer: Octa. (line 6) 26771* size directive (COFF version): Size. (line 11) 26772* size directive (ELF version): Size. (line 19) 26773* size modifiers, D10V: D10V-Size. (line 6) 26774* size modifiers, D30V: D30V-Size. (line 6) 26775* size modifiers, M680x0: M68K-Syntax. (line 8) 26776* size prefixes, i386: i386-Prefixes. (line 27) 26777* size suffixes, H8/300: H8/300 Opcodes. (line 163) 26778* size, translations, Sparc: Sparc-Size-Translations. 26779 (line 6) 26780* sizes operands, i386: i386-Variations. (line 29) 26781* sizes operands, x86-64: i386-Variations. (line 29) 26782* skip directive: Skip. (line 6) 26783* skip directive, M680x0: M68K-Directives. (line 19) 26784* skip directive, SPARC: Sparc-Directives. (line 48) 26785* sleb128 directive: Sleb128. (line 6) 26786* small data, MIPS: MIPS Small Data. (line 6) 26787* SmartMIPS instruction generation override: MIPS ASE Instruction Generation Overrides. 26788 (line 11) 26789* SOM symbol attributes: SOM Symbols. (line 6) 26790* source program: Input Files. (line 6) 26791* source, destination operands; i386: i386-Variations. (line 22) 26792* source, destination operands; x86-64: i386-Variations. (line 22) 26793* sp register: Xtensa Registers. (line 6) 26794* sp register, V850: V850-Regs. (line 14) 26795* space directive: Space. (line 6) 26796* space directive, TIC54X: TIC54X-Directives. (line 196) 26797* space used, maximum for assembly: statistics. (line 6) 26798* SPARC architectures: Sparc-Opts. (line 6) 26799* Sparc constants: Sparc-Constants. (line 6) 26800* SPARC data alignment: Sparc-Aligned-Data. (line 6) 26801* SPARC floating point (IEEE): Sparc-Float. (line 6) 26802* Sparc line comment character: Sparc-Chars. (line 6) 26803* Sparc line separator: Sparc-Chars. (line 14) 26804* SPARC machine directives: Sparc-Directives. (line 6) 26805* SPARC options: Sparc-Opts. (line 6) 26806* Sparc registers: Sparc-Regs. (line 6) 26807* Sparc relocations: Sparc-Relocs. (line 6) 26808* Sparc size translations: Sparc-Size-Translations. 26809 (line 6) 26810* SPARC support: Sparc-Dependent. (line 6) 26811* SPARC syntax: Sparc-Aligned-Data. (line 21) 26812* special characters, M680x0: M68K-Chars. (line 6) 26813* special purpose registers, MSP 430: MSP430-Regs. (line 11) 26814* sslist directive, TIC54X: TIC54X-Directives. (line 203) 26815* ssnolist directive, TIC54X: TIC54X-Directives. (line 203) 26816* stabd directive: Stab. (line 38) 26817* stabn directive: Stab. (line 48) 26818* stabs directive: Stab. (line 51) 26819* stabX directives: Stab. (line 6) 26820* stack pointer, ARC: ARC-Regs. (line 20) 26821* standard assembler sections: Secs Background. (line 27) 26822* standard input, as input file: Command Line. (line 10) 26823* statement separator character: Statements. (line 6) 26824* statement separator, AArch64: AArch64-Chars. (line 10) 26825* statement separator, Alpha: Alpha-Chars. (line 11) 26826* statement separator, ARC: ARC-Chars. (line 27) 26827* statement separator, ARM: ARM-Chars. (line 14) 26828* statement separator, AVR: AVR-Chars. (line 14) 26829* statement separator, CR16: CR16-Chars. (line 13) 26830* statement separator, Epiphany: Epiphany-Chars. (line 14) 26831* statement separator, H8/300: H8/300-Chars. (line 8) 26832* statement separator, i386: i386-Chars. (line 18) 26833* statement separator, i860: i860-Chars. (line 14) 26834* statement separator, i960: i960-Chars. (line 14) 26835* statement separator, IA-64: IA-64-Chars. (line 8) 26836* statement separator, IP2K: IP2K-Chars. (line 14) 26837* statement separator, LM32: LM32-Chars. (line 12) 26838* statement separator, M32C: M32C-Chars. (line 14) 26839* statement separator, M68HC11: M68HC11-Syntax. (line 27) 26840* statement separator, Meta: Meta-Chars. (line 8) 26841* statement separator, MicroBlaze: MicroBlaze-Chars. (line 14) 26842* statement separator, MIPS: MIPS-Chars. (line 14) 26843* statement separator, MSP 430: MSP430-Chars. (line 14) 26844* statement separator, NS32K: NS32K-Chars. (line 18) 26845* statement separator, PJ: PJ-Chars. (line 14) 26846* statement separator, PowerPC: PowerPC-Chars. (line 18) 26847* statement separator, RL78: RL78-Chars. (line 14) 26848* statement separator, RX: RX-Chars. (line 14) 26849* statement separator, s390: s390 Characters. (line 13) 26850* statement separator, SCORE: SCORE-Chars. (line 14) 26851* statement separator, SH: SH-Chars. (line 8) 26852* statement separator, SH64: SH64-Chars. (line 13) 26853* statement separator, Sparc: Sparc-Chars. (line 14) 26854* statement separator, TIC54X: TIC54X-Chars. (line 17) 26855* statement separator, TIC6X: TIC6X Syntax. (line 13) 26856* statement separator, V850: V850-Chars. (line 13) 26857* statement separator, VAX: VAX-Chars. (line 14) 26858* statement separator, Visium: Visium Characters. (line 14) 26859* statement separator, XGATE: XGATE-Syntax. (line 26) 26860* statement separator, XStormy16: XStormy16-Chars. (line 14) 26861* statement separator, Z80: Z80-Chars. (line 13) 26862* statement separator, Z8000: Z8000-Chars. (line 13) 26863* statements, structure of: Statements. (line 6) 26864* statistics, about assembly: statistics. (line 6) 26865* Status register, ARC: ARC-Regs. (line 58) 26866* STATUS32 saved on exception, ARC: ARC-Regs. (line 83) 26867* stopping the assembly: Abort. (line 6) 26868* Stored STATUS32 register on entry to level P0 interrupts, ARC: ARC-Regs. 26869 (line 70) 26870* string constants: Strings. (line 6) 26871* string directive: String. (line 8) 26872* string directive on HPPA: HPPA Directives. (line 137) 26873* string directive, TIC54X: TIC54X-Directives. (line 208) 26874* string literals: Ascii. (line 6) 26875* string, copying to object file: String. (line 8) 26876* string16 directive: String. (line 8) 26877* string16, copying to object file: String. (line 8) 26878* string32 directive: String. (line 8) 26879* string32, copying to object file: String. (line 8) 26880* string64 directive: String. (line 8) 26881* string64, copying to object file: String. (line 8) 26882* string8 directive: String. (line 8) 26883* string8, copying to object file: String. (line 8) 26884* struct directive: Struct. (line 6) 26885* struct directive, TIC54X: TIC54X-Directives. (line 216) 26886* structure debugging, COFF: Tag. (line 6) 26887* sub-instruction ordering, D10V: D10V-Chars. (line 14) 26888* sub-instruction ordering, D30V: D30V-Chars. (line 14) 26889* sub-instructions, D10V: D10V-Subs. (line 6) 26890* sub-instructions, D30V: D30V-Subs. (line 6) 26891* subexpressions: Arguments. (line 24) 26892* subsection directive: SubSection. (line 6) 26893* subsym builtins, TIC54X: TIC54X-Macros. (line 16) 26894* subtitles for listings: Sbttl. (line 6) 26895* subtraction, permitted arguments: Infix Ops. (line 49) 26896* summary of options: Overview. (line 6) 26897* support: HPPA-Dependent. (line 6) 26898* supporting files, including: Include. (line 6) 26899* suppressing warnings: W. (line 11) 26900* sval: Z8000 Directives. (line 33) 26901* symbol attributes: Symbol Attributes. (line 6) 26902* symbol attributes, a.out: a.out Symbols. (line 6) 26903* symbol attributes, COFF: COFF Symbols. (line 6) 26904* symbol attributes, SOM: SOM Symbols. (line 6) 26905* symbol descriptor, COFF: Desc. (line 6) 26906* symbol modifiers <1>: M68HC11-Modifiers. (line 12) 26907* symbol modifiers <2>: AVR-Modifiers. (line 12) 26908* symbol modifiers <3>: LM32-Modifiers. (line 12) 26909* symbol modifiers: M32C-Modifiers. (line 11) 26910* symbol modifiers, TILE-Gx: TILE-Gx Modifiers. (line 6) 26911* symbol modifiers, TILEPro: TILEPro Modifiers. (line 6) 26912* symbol names: Symbol Names. (line 6) 26913* symbol names, $ in <1>: SH-Chars. (line 15) 26914* symbol names, $ in <2>: D30V-Chars. (line 70) 26915* symbol names, $ in <3>: Meta-Chars. (line 10) 26916* symbol names, $ in <4>: D10V-Chars. (line 53) 26917* symbol names, $ in: SH64-Chars. (line 15) 26918* symbol names, local: Symbol Names. (line 30) 26919* symbol names, temporary: Symbol Names. (line 43) 26920* symbol prefix character, ARC: ARC-Chars. (line 20) 26921* symbol storage class (COFF): Scl. (line 6) 26922* symbol type: Symbol Type. (line 6) 26923* symbol type, COFF: Type. (line 11) 26924* symbol type, ELF: Type. (line 22) 26925* symbol value: Symbol Value. (line 6) 26926* symbol value, setting: Set. (line 6) 26927* symbol values, assigning: Setting Symbols. (line 6) 26928* symbol versioning: Symver. (line 6) 26929* symbol, common: Comm. (line 6) 26930* symbol, making visible to linker: Global. (line 6) 26931* symbolic debuggers, information for: Stab. (line 6) 26932* symbols: Symbols. (line 6) 26933* Symbols in position-independent code, CRIS: CRIS-Pic. (line 6) 26934* symbols with uppercase, VAX/VMS: VAX-Opts. (line 42) 26935* symbols, assigning values to: Equ. (line 6) 26936* Symbols, built-in, CRIS: CRIS-Symbols. (line 6) 26937* Symbols, CRIS, built-in: CRIS-Symbols. (line 6) 26938* symbols, local common: Lcomm. (line 6) 26939* symver directive: Symver. (line 6) 26940* syntax compatibility, i386: i386-Variations. (line 6) 26941* syntax compatibility, x86-64: i386-Variations. (line 6) 26942* syntax, AVR: AVR-Modifiers. (line 6) 26943* syntax, Blackfin: Blackfin Syntax. (line 6) 26944* syntax, D10V: D10V-Syntax. (line 6) 26945* syntax, D30V: D30V-Syntax. (line 6) 26946* syntax, LM32: LM32-Modifiers. (line 6) 26947* syntax, M680x0: M68K-Syntax. (line 8) 26948* syntax, M68HC11 <1>: M68HC11-Modifiers. (line 6) 26949* syntax, M68HC11: M68HC11-Syntax. (line 6) 26950* syntax, machine-independent: Syntax. (line 6) 26951* syntax, RL78: RL78-Modifiers. (line 6) 26952* syntax, RX: RX-Modifiers. (line 6) 26953* syntax, SPARC: Sparc-Aligned-Data. (line 21) 26954* syntax, TILE-Gx: TILE-Gx Syntax. (line 6) 26955* syntax, TILEPro: TILEPro Syntax. (line 6) 26956* syntax, XGATE: XGATE-Syntax. (line 6) 26957* syntax, Xtensa assembler: Xtensa Syntax. (line 6) 26958* sysproc directive, i960: Directives-i960. (line 37) 26959* tab (\t): Strings. (line 27) 26960* tab directive, TIC54X: TIC54X-Directives. (line 247) 26961* tag directive: Tag. (line 6) 26962* tag directive, TIC54X: TIC54X-Directives. (line 250) 26963* TBM, i386: i386-TBM. (line 6) 26964* TBM, x86-64: i386-TBM. (line 6) 26965* tdaoff pseudo-op, V850: V850 Opcodes. (line 81) 26966* temporary symbol names: Symbol Names. (line 43) 26967* text and data sections, joining: R. (line 6) 26968* text directive: Text. (line 6) 26969* text section: Ld Sections. (line 9) 26970* tfloat directive, i386: i386-Float. (line 14) 26971* tfloat directive, x86-64: i386-Float. (line 14) 26972* Thumb support: ARM-Dependent. (line 6) 26973* TIC54X builtin math functions: TIC54X-Builtins. (line 6) 26974* TIC54X line comment character: TIC54X-Chars. (line 6) 26975* TIC54X line separator: TIC54X-Chars. (line 17) 26976* TIC54X machine directives: TIC54X-Directives. (line 6) 26977* TIC54X memory-mapped registers: TIC54X-MMRegs. (line 6) 26978* TIC54X options: TIC54X-Opts. (line 6) 26979* TIC54X subsym builtins: TIC54X-Macros. (line 16) 26980* TIC54X support: TIC54X-Dependent. (line 6) 26981* TIC54X-specific macros: TIC54X-Macros. (line 6) 26982* TIC6X big-endian output: TIC6X Options. (line 46) 26983* TIC6X line comment character: TIC6X Syntax. (line 6) 26984* TIC6X line separator: TIC6X Syntax. (line 13) 26985* TIC6X little-endian output: TIC6X Options. (line 46) 26986* TIC6X machine directives: TIC6X Directives. (line 6) 26987* TIC6X options: TIC6X Options. (line 6) 26988* TIC6X support: TIC6X-Dependent. (line 6) 26989* TILE-Gx machine directives: TILE-Gx Directives. (line 6) 26990* TILE-Gx modifiers: TILE-Gx Modifiers. (line 6) 26991* TILE-Gx opcode names: TILE-Gx Opcodes. (line 6) 26992* TILE-Gx register names: TILE-Gx Registers. (line 6) 26993* TILE-Gx support: TILE-Gx-Dependent. (line 6) 26994* TILE-Gx syntax: TILE-Gx Syntax. (line 6) 26995* TILEPro machine directives: TILEPro Directives. (line 6) 26996* TILEPro modifiers: TILEPro Modifiers. (line 6) 26997* TILEPro opcode names: TILEPro Opcodes. (line 6) 26998* TILEPro register names: TILEPro Registers. (line 6) 26999* TILEPro support: TILEPro-Dependent. (line 6) 27000* TILEPro syntax: TILEPro Syntax. (line 6) 27001* time, total for assembly: statistics. (line 6) 27002* title directive: Title. (line 6) 27003* tls_gd directive, Nios II: Nios II Relocations. 27004 (line 38) 27005* tls_ie directive, Nios II: Nios II Relocations. 27006 (line 38) 27007* tls_ldm directive, Nios II: Nios II Relocations. 27008 (line 38) 27009* tls_ldo directive, Nios II: Nios II Relocations. 27010 (line 38) 27011* tls_le directive, Nios II: Nios II Relocations. 27012 (line 38) 27013* TMS320C6X support: TIC6X-Dependent. (line 6) 27014* tp register, V850: V850-Regs. (line 20) 27015* transform directive: Transform Directive. 27016 (line 6) 27017* trusted compiler: f. (line 6) 27018* turning preprocessing on and off: Preprocessing. (line 27) 27019* type directive (COFF version): Type. (line 11) 27020* type directive (ELF version): Type. (line 22) 27021* type of a symbol: Symbol Type. (line 6) 27022* ualong directive, SH: SH Directives. (line 6) 27023* uaquad directive, SH: SH Directives. (line 6) 27024* uaword directive, SH: SH Directives. (line 6) 27025* ubyte directive, TIC54X: TIC54X-Directives. (line 36) 27026* uchar directive, TIC54X: TIC54X-Directives. (line 36) 27027* uhalf directive, TIC54X: TIC54X-Directives. (line 111) 27028* uint directive, TIC54X: TIC54X-Directives. (line 111) 27029* uleb128 directive: Uleb128. (line 6) 27030* ulong directive, TIC54X: TIC54X-Directives. (line 135) 27031* undefined section: Ld Sections. (line 36) 27032* union directive, TIC54X: TIC54X-Directives. (line 250) 27033* unsegm: Z8000 Directives. (line 14) 27034* usect directive, TIC54X: TIC54X-Directives. (line 262) 27035* ushort directive, TIC54X: TIC54X-Directives. (line 111) 27036* uword directive, TIC54X: TIC54X-Directives. (line 111) 27037* V850 command line options: V850 Options. (line 9) 27038* V850 floating point (IEEE): V850 Floating Point. 27039 (line 6) 27040* V850 line comment character: V850-Chars. (line 6) 27041* V850 line separator: V850-Chars. (line 13) 27042* V850 machine directives: V850 Directives. (line 6) 27043* V850 opcodes: V850 Opcodes. (line 6) 27044* V850 options (none): V850 Options. (line 6) 27045* V850 register names: V850-Regs. (line 6) 27046* V850 support: V850-Dependent. (line 6) 27047* val directive: Val. (line 6) 27048* value attribute, COFF: Val. (line 6) 27049* value of a symbol: Symbol Value. (line 6) 27050* var directive, TIC54X: TIC54X-Directives. (line 272) 27051* VAX bitfields not supported: VAX-no. (line 6) 27052* VAX branch improvement: VAX-branch. (line 6) 27053* VAX command-line options ignored: VAX-Opts. (line 6) 27054* VAX displacement sizing character: VAX-operands. (line 12) 27055* VAX floating point: VAX-float. (line 6) 27056* VAX immediate character: VAX-operands. (line 6) 27057* VAX indirect character: VAX-operands. (line 9) 27058* VAX line comment character: VAX-Chars. (line 6) 27059* VAX line separator: VAX-Chars. (line 14) 27060* VAX machine directives: VAX-directives. (line 6) 27061* VAX opcode mnemonics: VAX-opcodes. (line 6) 27062* VAX operand notation: VAX-operands. (line 6) 27063* VAX register names: VAX-operands. (line 17) 27064* VAX support: Vax-Dependent. (line 6) 27065* Vax-11 C compatibility: VAX-Opts. (line 42) 27066* VAX/VMS options: VAX-Opts. (line 42) 27067* version directive: Version. (line 6) 27068* version directive, TIC54X: TIC54X-Directives. (line 276) 27069* version of assembler: v. (line 6) 27070* versions of symbols: Symver. (line 6) 27071* Virtualization instruction generation override: MIPS ASE Instruction Generation Overrides. 27072 (line 53) 27073* visibility <1>: Protected. (line 6) 27074* visibility <2>: Hidden. (line 6) 27075* visibility: Internal. (line 6) 27076* Visium line comment character: Visium Characters. (line 6) 27077* Visium line separator: Visium Characters. (line 14) 27078* Visium options: Visium Options. (line 6) 27079* Visium registers: Visium Registers. (line 6) 27080* Visium support: Visium-Dependent. (line 6) 27081* VMS (VAX) options: VAX-Opts. (line 42) 27082* vtable_entry directive: VTableEntry. (line 6) 27083* vtable_inherit directive: VTableInherit. (line 6) 27084* warning directive: Warning. (line 6) 27085* warning for altered difference tables: K. (line 6) 27086* warning messages: Errors. (line 6) 27087* warnings, causing error: W. (line 16) 27088* warnings, M32R: M32R-Warnings. (line 6) 27089* warnings, suppressing: W. (line 11) 27090* warnings, switching on: W. (line 19) 27091* weak directive: Weak. (line 6) 27092* weakref directive: Weakref. (line 6) 27093* whitespace: Whitespace. (line 6) 27094* whitespace, removed by preprocessor: Preprocessing. (line 7) 27095* wide floating point directives, VAX: VAX-directives. (line 10) 27096* width directive, TIC54X: TIC54X-Directives. (line 127) 27097* Width of continuation lines of disassembly output: listing. 27098 (line 21) 27099* Width of first line disassembly output: listing. (line 16) 27100* Width of source line output: listing. (line 28) 27101* wmsg directive, TIC54X: TIC54X-Directives. (line 77) 27102* word aligned program counter, ARC: ARC-Regs. (line 44) 27103* word directive: Word. (line 6) 27104* word directive, H8/300: H8/300 Directives. (line 6) 27105* word directive, i386: i386-Float. (line 21) 27106* word directive, Nios II: Nios II Directives. (line 13) 27107* word directive, SPARC: Sparc-Directives. (line 51) 27108* word directive, TIC54X: TIC54X-Directives. (line 111) 27109* word directive, x86-64: i386-Float. (line 21) 27110* writing patterns in memory: Fill. (line 6) 27111* wval: Z8000 Directives. (line 24) 27112* x86 machine directives: i386-Directives. (line 6) 27113* x86-64 arch directive: i386-Arch. (line 6) 27114* x86-64 att_syntax pseudo op: i386-Variations. (line 6) 27115* x86-64 conversion instructions: i386-Mnemonics. (line 40) 27116* x86-64 floating point: i386-Float. (line 6) 27117* x86-64 immediate operands: i386-Variations. (line 15) 27118* x86-64 instruction naming: i386-Mnemonics. (line 9) 27119* x86-64 intel_syntax pseudo op: i386-Variations. (line 6) 27120* x86-64 jump optimization: i386-Jumps. (line 6) 27121* x86-64 jump, call, return: i386-Variations. (line 41) 27122* x86-64 jump/call operands: i386-Variations. (line 15) 27123* x86-64 memory references: i386-Memory. (line 6) 27124* x86-64 options: i386-Options. (line 6) 27125* x86-64 register operands: i386-Variations. (line 15) 27126* x86-64 registers: i386-Regs. (line 6) 27127* x86-64 sections: i386-Variations. (line 47) 27128* x86-64 size suffixes: i386-Variations. (line 29) 27129* x86-64 source, destination operands: i386-Variations. (line 22) 27130* x86-64 support: i386-Dependent. (line 6) 27131* x86-64 syntax compatibility: i386-Variations. (line 6) 27132* xfloat directive, TIC54X: TIC54X-Directives. (line 64) 27133* XGATE addressing modes: XGATE-Syntax. (line 29) 27134* XGATE assembler directives: XGATE-Directives. (line 6) 27135* XGATE floating point: XGATE-Float. (line 6) 27136* XGATE line comment character: XGATE-Syntax. (line 16) 27137* XGATE line separator: XGATE-Syntax. (line 26) 27138* XGATE opcodes: XGATE-opcodes. (line 6) 27139* XGATE options: XGATE-Opts. (line 6) 27140* XGATE support: XGATE-Dependent. (line 6) 27141* XGATE syntax: XGATE-Syntax. (line 6) 27142* xlong directive, TIC54X: TIC54X-Directives. (line 135) 27143* XStormy16 comment character: XStormy16-Chars. (line 11) 27144* XStormy16 line comment character: XStormy16-Chars. (line 6) 27145* XStormy16 line separator: XStormy16-Chars. (line 14) 27146* XStormy16 machine directives: XStormy16 Directives. 27147 (line 6) 27148* XStormy16 pseudo-opcodes: XStormy16 Opcodes. (line 6) 27149* XStormy16 support: XSTORMY16-Dependent. 27150 (line 6) 27151* Xtensa architecture: Xtensa-Dependent. (line 6) 27152* Xtensa assembler syntax: Xtensa Syntax. (line 6) 27153* Xtensa directives: Xtensa Directives. (line 6) 27154* Xtensa opcode names: Xtensa Opcodes. (line 6) 27155* Xtensa register names: Xtensa Registers. (line 6) 27156* xword directive, SPARC: Sparc-Directives. (line 55) 27157* Z80 $: Z80-Chars. (line 15) 27158* Z80 ': Z80-Chars. (line 20) 27159* Z80 floating point: Z80 Floating Point. (line 6) 27160* Z80 line comment character: Z80-Chars. (line 6) 27161* Z80 line separator: Z80-Chars. (line 13) 27162* Z80 options: Z80 Options. (line 6) 27163* Z80 registers: Z80-Regs. (line 6) 27164* Z80 support: Z80-Dependent. (line 6) 27165* Z80 Syntax: Z80 Options. (line 47) 27166* Z80, \: Z80-Chars. (line 18) 27167* Z80, case sensitivity: Z80-Case. (line 6) 27168* Z80-only directives: Z80 Directives. (line 9) 27169* Z800 addressing modes: Z8000-Addressing. (line 6) 27170* Z8000 directives: Z8000 Directives. (line 6) 27171* Z8000 line comment character: Z8000-Chars. (line 6) 27172* Z8000 line separator: Z8000-Chars. (line 13) 27173* Z8000 opcode summary: Z8000 Opcodes. (line 6) 27174* Z8000 options: Z8000 Options. (line 6) 27175* Z8000 registers: Z8000-Regs. (line 6) 27176* Z8000 support: Z8000-Dependent. (line 6) 27177* zdaoff pseudo-op, V850: V850 Opcodes. (line 99) 27178* zero directive: Zero. (line 6) 27179* zero register, V850: V850-Regs. (line 7) 27180* zero-terminated strings: Asciz. (line 6) 27181 27182 27183 27184Tag Table: 27185Node: Top739 27186Node: Overview1725 27187Node: Manual38532 27188Node: GNU Assembler39476 27189Node: Object Formats40647 27190Node: Command Line41099 27191Node: Input Files42186 27192Node: Object44167 27193Node: Errors45063 27194Node: Invoking46627 27195Node: a48644 27196Node: alternate50555 27197Node: D50727 27198Node: f50960 27199Node: I51468 27200Node: K52012 27201Node: L52316 27202Node: listing53055 27203Node: M54714 27204Node: MD59115 27205Node: no-pad-sections59555 27206Node: o59930 27207Node: R60398 27208Node: statistics61428 27209Node: traditional-format61835 27210Node: v62308 27211Node: W62583 27212Node: Z63490 27213Node: Syntax64012 27214Node: Preprocessing64604 27215Node: Whitespace66167 27216Node: Comments66563 27217Node: Symbol Intro68574 27218Node: Statements69557 27219Node: Constants71546 27220Node: Characters72177 27221Node: Strings72679 27222Node: Chars74854 27223Node: Numbers75608 27224Node: Integers76148 27225Node: Bignums76804 27226Node: Flonums77160 27227Node: Sections78907 27228Node: Secs Background79285 27229Node: Ld Sections84324 27230Node: As Sections86708 27231Node: Sub-Sections87618 27232Node: bss90763 27233Node: Symbols91713 27234Node: Labels92361 27235Node: Setting Symbols93092 27236Node: Symbol Names93646 27237Node: Dot99111 27238Node: Symbol Attributes99558 27239Node: Symbol Value100295 27240Node: Symbol Type101340 27241Node: a.out Symbols101728 27242Node: Symbol Desc101990 27243Node: Symbol Other102285 27244Node: COFF Symbols102454 27245Node: SOM Symbols103127 27246Node: Expressions103569 27247Node: Empty Exprs104318 27248Node: Integer Exprs104665 27249Node: Arguments105060 27250Node: Operators106166 27251Node: Prefix Ops106501 27252Node: Infix Ops106829 27253Node: Pseudo Ops109219 27254Node: Abort114888 27255Node: ABORT (COFF)115300 27256Node: Align115508 27257Node: Altmacro117790 27258Node: Ascii119119 27259Node: Asciz119428 27260Node: Balign119673 27261Node: Bundle directives121549 27262Node: Byte124531 27263Node: CFI directives124790 27264Node: Comm133967 27265Ref: Comm-Footnote-1135568 27266Node: Data135930 27267Node: Def136247 27268Node: Desc136479 27269Node: Dim136979 27270Node: Double137236 27271Node: Eject137574 27272Node: Else137749 27273Node: Elseif138049 27274Node: End138343 27275Node: Endef138558 27276Node: Endfunc138735 27277Node: Endif138910 27278Node: Equ139171 27279Node: Equiv139685 27280Node: Eqv140241 27281Node: Err140605 27282Node: Error140916 27283Node: Exitm141361 27284Node: Extern141530 27285Node: Fail141791 27286Node: File142236 27287Node: Fill143565 27288Node: Float144529 27289Node: Func144871 27290Node: Global145461 27291Node: Gnu_attribute146218 27292Node: Hidden146443 27293Node: hword147029 27294Node: Ident147357 27295Node: If147931 27296Node: Incbin150990 27297Node: Include151685 27298Node: Int152236 27299Node: Internal152617 27300Node: Irp153265 27301Node: Irpc154144 27302Node: Lcomm155061 27303Node: Lflags155809 27304Node: Line156003 27305Node: Linkonce156916 27306Node: List158145 27307Node: Ln158753 27308Node: Loc158903 27309Node: Loc_mark_labels160289 27310Node: Local160773 27311Node: Long161385 27312Node: Macro161563 27313Node: MRI167485 27314Node: Noaltmacro167823 27315Node: Nolist167992 27316Node: Octa168422 27317Node: Offset168759 27318Node: Org169086 27319Node: P2align170371 27320Node: PopSection172299 27321Node: Previous172807 27322Node: Print174220 27323Node: Protected174449 27324Node: Psize175096 27325Node: Purgem175780 27326Node: PushSection176001 27327Node: Quad176744 27328Node: Reloc177200 27329Node: Rept177961 27330Node: Sbttl178375 27331Node: Scl178740 27332Node: Section179081 27333Ref: Section Name Substitutions181155 27334Node: Set187250 27335Node: Short188332 27336Node: Single188653 27337Node: Size188998 27338Node: Skip189670 27339Node: Sleb128189992 27340Node: Space190314 27341Node: Stab190953 27342Node: String192955 27343Node: Struct193947 27344Node: SubSection194670 27345Node: Symver195231 27346Node: Tag197622 27347Node: Text198002 27348Node: Title198321 27349Node: Type198700 27350Node: Uleb128201011 27351Node: Val201333 27352Node: Version201581 27353Node: VTableEntry201854 27354Node: VTableInherit202142 27355Node: Warning202590 27356Node: Weak202824 27357Node: Weakref203493 27358Node: Word204458 27359Node: Zero206298 27360Node: Deprecated206710 27361Node: Object Attributes206945 27362Node: GNU Object Attributes208665 27363Node: Defining New Object Attributes212205 27364Node: Machine Dependencies213002 27365Node: AArch64-Dependent216954 27366Node: AArch64 Options217436 27367Node: AArch64 Extensions220048 27368Node: AArch64 Syntax222414 27369Node: AArch64-Chars222714 27370Node: AArch64-Regs223200 27371Node: AArch64-Relocations223494 27372Node: AArch64 Floating Point224568 27373Node: AArch64 Directives224793 27374Node: AArch64 Opcodes227692 27375Node: AArch64 Mapping Symbols228370 27376Node: Alpha-Dependent228752 27377Node: Alpha Notes229192 27378Node: Alpha Options229473 27379Node: Alpha Syntax231948 27380Node: Alpha-Chars232417 27381Node: Alpha-Regs232829 27382Node: Alpha-Relocs233216 27383Node: Alpha Floating Point239474 27384Node: Alpha Directives239696 27385Node: Alpha Opcodes245219 27386Node: ARC-Dependent245514 27387Node: ARC Options245959 27388Node: ARC Syntax247916 27389Node: ARC-Chars248144 27390Node: ARC-Regs249267 27391Node: ARC Directives252037 27392Node: ARC Modifiers258727 27393Node: ARC Symbols259738 27394Node: ARC Opcodes260299 27395Node: ARM-Dependent260545 27396Node: ARM Options261010 27397Node: ARM Syntax271047 27398Node: ARM-Instruction-Set271415 27399Node: ARM-Chars272635 27400Node: ARM-Regs273346 27401Node: ARM-Relocations273555 27402Node: ARM-Neon-Alignment275240 27403Node: ARM Floating Point275704 27404Node: ARM Directives275903 27405Ref: arm_fnend280351 27406Ref: arm_fnstart280675 27407Ref: arm_pad283083 27408Ref: arm_save283685 27409Ref: arm_setfp284386 27410Node: ARM Opcodes287678 27411Node: ARM Mapping Symbols289766 27412Node: ARM Unwinding Tutorial290576 27413Node: AVR-Dependent296778 27414Node: AVR Options297068 27415Node: AVR Syntax303111 27416Node: AVR-Chars303398 27417Node: AVR-Regs303957 27418Node: AVR-Modifiers304536 27419Node: AVR Opcodes306596 27420Node: Blackfin-Dependent311842 27421Node: Blackfin Options312154 27422Node: Blackfin Syntax313128 27423Node: Blackfin Directives319335 27424Node: CR16-Dependent320081 27425Node: CR16 Operand Qualifiers320381 27426Node: CR16 Syntax323110 27427Node: CR16-Chars323296 27428Node: CRIS-Dependent323833 27429Node: CRIS-Opts324179 27430Ref: march-option325865 27431Node: CRIS-Expand327682 27432Node: CRIS-Symbols328865 27433Node: CRIS-Syntax330034 27434Node: CRIS-Chars330370 27435Node: CRIS-Pic330921 27436Ref: crispic331117 27437Node: CRIS-Regs334657 27438Node: CRIS-Pseudos335074 27439Ref: crisnous335850 27440Node: D10V-Dependent337132 27441Node: D10V-Opts337483 27442Node: D10V-Syntax338445 27443Node: D10V-Size338974 27444Node: D10V-Subs339947 27445Node: D10V-Chars340982 27446Node: D10V-Regs342894 27447Node: D10V-Addressing343939 27448Node: D10V-Word344625 27449Node: D10V-Float345140 27450Node: D10V-Opcodes345451 27451Node: D30V-Dependent345844 27452Node: D30V-Opts346201 27453Node: D30V-Syntax346878 27454Node: D30V-Size347412 27455Node: D30V-Subs348385 27456Node: D30V-Chars349422 27457Node: D30V-Guarded352030 27458Node: D30V-Regs352712 27459Node: D30V-Addressing353853 27460Node: D30V-Float354523 27461Node: D30V-Opcodes354836 27462Node: Epiphany-Dependent355231 27463Node: Epiphany Options355519 27464Node: Epiphany Syntax355918 27465Node: Epiphany-Chars356119 27466Node: H8/300-Dependent356673 27467Node: H8/300 Options357089 27468Node: H8/300 Syntax357530 27469Node: H8/300-Chars357831 27470Node: H8/300-Regs358130 27471Node: H8/300-Addressing359049 27472Node: H8/300 Floating Point360090 27473Node: H8/300 Directives360417 27474Node: H8/300 Opcodes361545 27475Node: HPPA-Dependent369867 27476Node: HPPA Notes370302 27477Node: HPPA Options371060 27478Node: HPPA Syntax371255 27479Node: HPPA Floating Point372525 27480Node: HPPA Directives372731 27481Node: HPPA Opcodes381417 27482Node: ESA/390-Dependent381676 27483Node: ESA/390 Notes382136 27484Node: ESA/390 Options382927 27485Node: ESA/390 Syntax383137 27486Node: ESA/390 Floating Point385310 27487Node: ESA/390 Directives385589 27488Node: ESA/390 Opcodes388878 27489Node: i386-Dependent389140 27490Node: i386-Options390470 27491Node: i386-Directives398955 27492Node: i386-Syntax399693 27493Node: i386-Variations399998 27494Node: i386-Chars402539 27495Node: i386-Mnemonics403268 27496Node: i386-Regs406632 27497Node: i386-Prefixes409470 27498Node: i386-Memory412230 27499Node: i386-Jumps415167 27500Node: i386-Float416288 27501Node: i386-SIMD418117 27502Node: i386-LWP419226 27503Node: i386-BMI420060 27504Node: i386-TBM420438 27505Node: i386-16bit420968 27506Node: i386-Arch423039 27507Node: i386-Bugs426165 27508Node: i386-Notes426919 27509Node: i860-Dependent427777 27510Node: Notes-i860428217 27511Node: Options-i860429122 27512Node: Directives-i860430485 27513Node: Opcodes for i860431554 27514Node: Syntax of i860433744 27515Node: i860-Chars433928 27516Node: i960-Dependent434487 27517Node: Options-i960434934 27518Node: Floating Point-i960438819 27519Node: Directives-i960439087 27520Node: Opcodes for i960441121 27521Node: callj-i960441761 27522Node: Compare-and-branch-i960442250 27523Node: Syntax of i960444154 27524Node: i960-Chars444354 27525Node: IA-64-Dependent444897 27526Node: IA-64 Options445198 27527Node: IA-64 Syntax448349 27528Node: IA-64-Chars448755 27529Node: IA-64-Regs448985 27530Node: IA-64-Bits449911 27531Node: IA-64-Relocs450441 27532Node: IA-64 Opcodes450913 27533Node: IP2K-Dependent451185 27534Node: IP2K-Opts451457 27535Node: IP2K-Syntax451957 27536Node: IP2K-Chars452131 27537Node: LM32-Dependent452674 27538Node: LM32 Options452969 27539Node: LM32 Syntax453603 27540Node: LM32-Regs453899 27541Node: LM32-Modifiers454858 27542Node: LM32-Chars456233 27543Node: LM32 Opcodes456741 27544Node: M32C-Dependent457045 27545Node: M32C-Opts457554 27546Node: M32C-Syntax457974 27547Node: M32C-Modifiers458209 27548Node: M32C-Chars459998 27549Node: M32R-Dependent460564 27550Node: M32R-Opts460885 27551Node: M32R-Directives465048 27552Node: M32R-Warnings469023 27553Node: M68K-Dependent472029 27554Node: M68K-Opts472496 27555Node: M68K-Syntax479869 27556Node: M68K-Moto-Syntax481709 27557Node: M68K-Float484299 27558Node: M68K-Directives484819 27559Node: M68K-opcodes486147 27560Node: M68K-Branch486373 27561Node: M68K-Chars490571 27562Node: M68HC11-Dependent491434 27563Node: M68HC11-Opts491965 27564Node: M68HC11-Syntax496270 27565Node: M68HC11-Modifiers499061 27566Node: M68HC11-Directives500889 27567Node: M68HC11-Float502265 27568Node: M68HC11-opcodes502793 27569Node: M68HC11-Branch502975 27570Node: Meta-Dependent505424 27571Node: Meta Options505709 27572Node: Meta Syntax506371 27573Node: Meta-Chars506583 27574Node: Meta-Regs506883 27575Node: MicroBlaze-Dependent507159 27576Node: MicroBlaze Directives507848 27577Node: MicroBlaze Syntax509231 27578Node: MicroBlaze-Chars509463 27579Node: MIPS-Dependent510015 27580Node: MIPS Options511452 27581Node: MIPS Macros526423 27582Ref: MIPS Macros-Footnote-1529137 27583Node: MIPS Symbol Sizes529280 27584Node: MIPS Small Data530952 27585Node: MIPS ISA533115 27586Node: MIPS assembly options534900 27587Node: MIPS autoextend536033 27588Node: MIPS insn536767 27589Node: MIPS FP ABIs538047 27590Node: MIPS FP ABI History538499 27591Node: MIPS FP ABI Variants539259 27592Node: MIPS FP ABI Selection541813 27593Node: MIPS FP ABI Compatibility542877 27594Node: MIPS NaN Encodings543687 27595Node: MIPS Option Stack545650 27596Node: MIPS ASE Instruction Generation Overrides546435 27597Node: MIPS Floating-Point549450 27598Node: MIPS Syntax550356 27599Node: MIPS-Chars550618 27600Node: MMIX-Dependent551160 27601Node: MMIX-Opts551540 27602Node: MMIX-Expand555144 27603Node: MMIX-Syntax556459 27604Ref: mmixsite556816 27605Node: MMIX-Chars557657 27606Node: MMIX-Symbols558531 27607Node: MMIX-Regs560599 27608Node: MMIX-Pseudos561624 27609Ref: MMIX-loc561765 27610Ref: MMIX-local562845 27611Ref: MMIX-is563377 27612Ref: MMIX-greg563648 27613Ref: GREG-base564567 27614Ref: MMIX-byte565884 27615Ref: MMIX-constants566355 27616Ref: MMIX-prefix567001 27617Ref: MMIX-spec567375 27618Node: MMIX-mmixal567709 27619Node: MSP430-Dependent571207 27620Node: MSP430 Options571676 27621Node: MSP430 Syntax574855 27622Node: MSP430-Macros575171 27623Node: MSP430-Chars575902 27624Node: MSP430-Regs576617 27625Node: MSP430-Ext577177 27626Node: MSP430 Floating Point578998 27627Node: MSP430 Directives579222 27628Node: MSP430 Opcodes580543 27629Node: MSP430 Profiling Capability580938 27630Node: NDS32-Dependent583267 27631Node: NDS32 Options583879 27632Node: NDS32 Syntax585780 27633Node: NDS32-Chars586048 27634Node: NDS32-Regs586515 27635Node: NDS32-Ops587369 27636Node: NiosII-Dependent590964 27637Node: Nios II Options591383 27638Node: Nios II Syntax592621 27639Node: Nios II Chars592827 27640Node: Nios II Relocations593018 27641Node: Nios II Directives594590 27642Node: Nios II Opcodes596153 27643Node: NS32K-Dependent596428 27644Node: NS32K Syntax596655 27645Node: NS32K-Chars596804 27646Node: PDP-11-Dependent597544 27647Node: PDP-11-Options597934 27648Node: PDP-11-Pseudos603005 27649Node: PDP-11-Syntax603350 27650Node: PDP-11-Mnemonics604182 27651Node: PDP-11-Synthetic604484 27652Node: PJ-Dependent604702 27653Node: PJ Options604965 27654Node: PJ Syntax605260 27655Node: PJ-Chars605425 27656Node: PPC-Dependent605974 27657Node: PowerPC-Opts606307 27658Node: PowerPC-Pseudo609934 27659Node: PowerPC-Syntax610556 27660Node: PowerPC-Chars610746 27661Node: RL78-Dependent611497 27662Node: RL78-Opts611895 27663Node: RL78-Modifiers612730 27664Node: RL78-Directives613506 27665Node: RL78-Syntax614111 27666Node: RL78-Chars614307 27667Node: RX-Dependent614863 27668Node: RX-Opts615294 27669Node: RX-Modifiers619542 27670Node: RX-Directives620646 27671Node: RX-Float621386 27672Node: RX-Syntax622027 27673Node: RX-Chars622206 27674Node: S/390-Dependent622758 27675Node: s390 Options623479 27676Node: s390 Characters625047 27677Node: s390 Syntax625568 27678Node: s390 Register626469 27679Node: s390 Mnemonics627282 27680Node: s390 Operands630302 27681Node: s390 Formats632921 27682Node: s390 Aliases640792 27683Node: s390 Operand Modifier644689 27684Node: s390 Instruction Marker648490 27685Node: s390 Literal Pool Entries649506 27686Node: s390 Directives651429 27687Node: s390 Floating Point656872 27688Node: SCORE-Dependent657318 27689Node: SCORE-Opts657620 27690Node: SCORE-Pseudo658908 27691Node: SCORE-Syntax660985 27692Node: SCORE-Chars661167 27693Node: SH-Dependent661725 27694Node: SH Options662136 27695Node: SH Syntax663191 27696Node: SH-Chars663464 27697Node: SH-Regs664007 27698Node: SH-Addressing664621 27699Node: SH Floating Point665530 27700Node: SH Directives666624 27701Node: SH Opcodes667025 27702Node: SH64-Dependent671347 27703Node: SH64 Options671709 27704Node: SH64 Syntax673506 27705Node: SH64-Chars673789 27706Node: SH64-Regs674338 27707Node: SH64-Addressing675434 27708Node: SH64 Directives676617 27709Node: SH64 Opcodes677602 27710Node: Sparc-Dependent678318 27711Node: Sparc-Opts678729 27712Node: Sparc-Aligned-Data683743 27713Node: Sparc-Syntax684575 27714Node: Sparc-Chars685149 27715Node: Sparc-Regs685712 27716Node: Sparc-Constants691560 27717Node: Sparc-Relocs696320 27718Node: Sparc-Size-Translations701456 27719Node: Sparc-Float703105 27720Node: Sparc-Directives703300 27721Node: TIC54X-Dependent705260 27722Node: TIC54X-Opts706023 27723Node: TIC54X-Block707066 27724Node: TIC54X-Env707426 27725Node: TIC54X-Constants707774 27726Node: TIC54X-Subsyms708176 27727Node: TIC54X-Locals710085 27728Node: TIC54X-Builtins710829 27729Node: TIC54X-Ext713300 27730Node: TIC54X-Directives713871 27731Node: TIC54X-Macros724772 27732Node: TIC54X-MMRegs726883 27733Node: TIC54X-Syntax727121 27734Node: TIC54X-Chars727311 27735Node: TIC6X-Dependent728002 27736Node: TIC6X Options728305 27737Node: TIC6X Syntax730306 27738Node: TIC6X Directives731408 27739Node: TILE-Gx-Dependent733693 27740Node: TILE-Gx Options734003 27741Node: TILE-Gx Syntax734353 27742Node: TILE-Gx Opcodes736587 27743Node: TILE-Gx Registers736875 27744Node: TILE-Gx Modifiers737647 27745Node: TILE-Gx Directives742619 27746Node: TILEPro-Dependent743523 27747Node: TILEPro Options743832 27748Node: TILEPro Syntax744016 27749Node: TILEPro Opcodes746250 27750Node: TILEPro Registers746541 27751Node: TILEPro Modifiers747311 27752Node: TILEPro Directives752076 27753Node: V850-Dependent752980 27754Node: V850 Options753376 27755Node: V850 Syntax757656 27756Node: V850-Chars757896 27757Node: V850-Regs758440 27758Node: V850 Floating Point760008 27759Node: V850 Directives760214 27760Node: V850 Opcodes762281 27761Node: Vax-Dependent768173 27762Node: VAX-Opts768757 27763Node: VAX-float772492 27764Node: VAX-directives773124 27765Node: VAX-opcodes773985 27766Node: VAX-branch774374 27767Node: VAX-operands776881 27768Node: VAX-no777644 27769Node: VAX-Syntax777900 27770Node: VAX-Chars778066 27771Node: Visium-Dependent778620 27772Node: Visium Options778927 27773Node: Visium Syntax779393 27774Node: Visium Characters779638 27775Node: Visium Registers780219 27776Node: Visium Opcodes780491 27777Node: XGATE-Dependent780917 27778Node: XGATE-Opts781339 27779Node: XGATE-Syntax782330 27780Node: XGATE-Directives784409 27781Node: XGATE-Float784648 27782Node: XGATE-opcodes785145 27783Node: XSTORMY16-Dependent785257 27784Node: XStormy16 Syntax785603 27785Node: XStormy16-Chars785793 27786Node: XStormy16 Directives786406 27787Node: XStormy16 Opcodes787061 27788Node: Xtensa-Dependent788117 27789Node: Xtensa Options788851 27790Node: Xtensa Syntax793122 27791Node: Xtensa Opcodes795266 27792Node: Xtensa Registers797060 27793Node: Xtensa Optimizations797693 27794Node: Density Instructions798145 27795Node: Xtensa Automatic Alignment799247 27796Node: Xtensa Relaxation801694 27797Node: Xtensa Branch Relaxation802659 27798Node: Xtensa Call Relaxation804031 27799Node: Xtensa Jump Relaxation805812 27800Node: Xtensa Immediate Relaxation807912 27801Node: Xtensa Directives810486 27802Node: Schedule Directive812195 27803Node: Longcalls Directive812535 27804Node: Transform Directive813079 27805Node: Literal Directive813821 27806Ref: Literal Directive-Footnote-1817360 27807Node: Literal Position Directive817502 27808Node: Literal Prefix Directive819201 27809Node: Absolute Literals Directive820099 27810Node: Z80-Dependent821406 27811Node: Z80 Options821794 27812Node: Z80 Syntax823217 27813Node: Z80-Chars823889 27814Node: Z80-Regs824739 27815Node: Z80-Case825091 27816Node: Z80 Floating Point825536 27817Node: Z80 Directives825730 27818Node: Z80 Opcodes827355 27819Node: Z8000-Dependent828699 27820Node: Z8000 Options829638 27821Node: Z8000 Syntax829855 27822Node: Z8000-Chars830145 27823Node: Z8000-Regs830627 27824Node: Z8000-Addressing831417 27825Node: Z8000 Directives832534 27826Node: Z8000 Opcodes834143 27827Node: Reporting Bugs844085 27828Node: Bug Criteria844811 27829Node: Bug Reporting845578 27830Node: Acknowledgements852227 27831Ref: Acknowledgements-Footnote-1857192 27832Node: GNU Free Documentation License857218 27833Node: AS Index882387 27834 27835End Tag Table 27836