1This is 2/usr/src/tools/binutils/../../external/gpl3/binutils/dist/gas/doc/as.info, 3produced by makeinfo version 4.8 from 4/usr/src/tools/binutils/../../external/gpl3/binutils/dist/gas/doc/as.texi. 5 6INFO-DIR-SECTION Software development 7START-INFO-DIR-ENTRY 8* As: (as). The GNU assembler. 9* Gas: (as). The GNU assembler. 10END-INFO-DIR-ENTRY 11 12 This file documents the GNU Assembler "as". 13 14 Copyright (C) 1991-2022 Free Software Foundation, Inc. 15 16 Permission is granted to copy, distribute and/or modify this document 17under the terms of the GNU Free Documentation License, Version 1.3 or 18any later version published by the Free Software Foundation; with no 19Invariant Sections, with no Front-Cover Texts, and with no Back-Cover 20Texts. A copy of the license is included in the section entitled "GNU 21Free Documentation License". 22 23 24File: as.info, Node: Top, Next: Overview, Up: (dir) 25 26Using as 27******** 28 29This file is a user guide to the GNU assembler `as' (NetBSD Binutils 30nb1) version 2.39. 31 32 This document is distributed under the terms of the GNU Free 33Documentation License. A copy of the license is included in the 34section entitled "GNU Free Documentation License". 35 36* Menu: 37 38* Overview:: Overview 39* Invoking:: Command-Line Options 40* Syntax:: Syntax 41* Sections:: Sections and Relocation 42* Symbols:: Symbols 43* Expressions:: Expressions 44* Pseudo Ops:: Assembler Directives 45 46* Object Attributes:: Object Attributes 47* Machine Dependencies:: Machine Dependent Features 48* Reporting Bugs:: Reporting Bugs 49* Acknowledgements:: Who Did What 50* GNU Free Documentation License:: GNU Free Documentation License 51* AS Index:: AS Index 52 53 54File: as.info, Node: Overview, Next: Invoking, Prev: Top, Up: Top 55 561 Overview 57********** 58 59Here is a brief summary of how to invoke `as'. For details, see *Note 60Command-Line Options: Invoking. 61 62 as [-a[cdghlns][=FILE]] [-alternate] [-D] 63 [-compress-debug-sections] [-nocompress-debug-sections] 64 [-debug-prefix-map OLD=NEW] 65 [-defsym SYM=VAL] [-f] [-g] [-gstabs] 66 [-gstabs+] [-gdwarf-<N>] [-gdwarf-sections] 67 [-gdwarf-cie-version=VERSION] 68 [-help] [-I DIR] [-J] 69 [-K] [-L] [-listing-lhs-width=NUM] 70 [-listing-lhs-width2=NUM] [-listing-rhs-width=NUM] 71 [-listing-cont-lines=NUM] [-keep-locals] 72 [-no-pad-sections] 73 [-o OBJFILE] [-R] 74 [-statistics] 75 [-v] [-version] [-version] 76 [-W] [-warn] [-fatal-warnings] [-w] [-x] 77 [-Z] [@FILE] 78 [-sectname-subst] [-size-check=[error|warning]] 79 [-elf-stt-common=[no|yes]] 80 [-generate-missing-build-notes=[no|yes]] 81 [-multibyte-handling=[allow|warn|warn-sym-only]] 82 [-target-help] [TARGET-OPTIONS] 83 [-|FILES ...] 84 85 _Target AArch64 options:_ 86 [-EB|-EL] 87 [-mabi=ABI] 88 89 _Target Alpha options:_ 90 [-mCPU] 91 [-mdebug | -no-mdebug] 92 [-replace | -noreplace] 93 [-relax] [-g] [-GSIZE] 94 [-F] [-32addr] 95 96 _Target ARC options:_ 97 [-mcpu=CPU] 98 [-mA6|-mARC600|-mARC601|-mA7|-mARC700|-mEM|-mHS] 99 [-mcode-density] 100 [-mrelax] 101 [-EB|-EL] 102 103 _Target ARM options:_ 104 [-mcpu=PROCESSOR[+EXTENSION...]] 105 [-march=ARCHITECTURE[+EXTENSION...]] 106 [-mfpu=FLOATING-POINT-FORMAT] 107 [-mfloat-abi=ABI] 108 [-meabi=VER] 109 [-mthumb] 110 [-EB|-EL] 111 [-mapcs-32|-mapcs-26|-mapcs-float| 112 -mapcs-reentrant] 113 [-mthumb-interwork] [-k] 114 115 _Target Blackfin options:_ 116 [-mcpu=PROCESSOR[-SIREVISION]] 117 [-mfdpic] 118 [-mno-fdpic] 119 [-mnopic] 120 121 _Target BPF options:_ 122 [-EL] [-EB] 123 124 _Target CRIS options:_ 125 [-underscore | -no-underscore] 126 [-pic] [-N] 127 [-emulation=criself | -emulation=crisaout] 128 [-march=v0_v10 | -march=v10 | -march=v32 | -march=common_v10_v32] 129 130 _Target C-SKY options:_ 131 [-march=ARCH] [-mcpu=CPU] 132 [-EL] [-mlittle-endian] [-EB] [-mbig-endian] 133 [-fpic] [-pic] 134 [-mljump] [-mno-ljump] 135 [-force2bsr] [-mforce2bsr] [-no-force2bsr] [-mno-force2bsr] 136 [-jsri2bsr] [-mjsri2bsr] [-no-jsri2bsr ] [-mno-jsri2bsr] 137 [-mnolrw ] [-mno-lrw] 138 [-melrw] [-mno-elrw] 139 [-mlaf ] [-mliterals-after-func] 140 [-mno-laf] [-mno-literals-after-func] 141 [-mlabr] [-mliterals-after-br] 142 [-mno-labr] [-mnoliterals-after-br] 143 [-mistack] [-mno-istack] 144 [-mhard-float] [-mmp] [-mcp] [-mcache] 145 [-msecurity] [-mtrust] 146 [-mdsp] [-medsp] [-mvdsp] 147 148 _Target D10V options:_ 149 [-O] 150 151 _Target D30V options:_ 152 [-O|-n|-N] 153 154 _Target EPIPHANY options:_ 155 [-mepiphany|-mepiphany16] 156 157 _Target H8/300 options:_ 158 [-h-tick-hex] 159 160 _Target i386 options:_ 161 [-32|-x32|-64] [-n] 162 [-march=CPU[+EXTENSION...]] [-mtune=CPU] 163 164 _Target IA-64 options:_ 165 [-mconstant-gp|-mauto-pic] 166 [-milp32|-milp64|-mlp64|-mp64] 167 [-mle|mbe] 168 [-mtune=itanium1|-mtune=itanium2] 169 [-munwind-check=warning|-munwind-check=error] 170 [-mhint.b=ok|-mhint.b=warning|-mhint.b=error] 171 [-x|-xexplicit] [-xauto] [-xdebug] 172 173 _Target IP2K options:_ 174 [-mip2022|-mip2022ext] 175 176 _Target M32C options:_ 177 [-m32c|-m16c] [-relax] [-h-tick-hex] 178 179 _Target M32R options:_ 180 [-m32rx|-[no-]warn-explicit-parallel-conflicts| 181 -W[n]p] 182 183 _Target M680X0 options:_ 184 [-l] [-m68000|-m68010|-m68020|...] 185 186 _Target M68HC11 options:_ 187 [-m68hc11|-m68hc12|-m68hcs12|-mm9s12x|-mm9s12xg] 188 [-mshort|-mlong] 189 [-mshort-double|-mlong-double] 190 [-force-long-branches] [-short-branches] 191 [-strict-direct-mode] [-print-insn-syntax] 192 [-print-opcodes] [-generate-example] 193 194 _Target MCORE options:_ 195 [-jsri2bsr] [-sifilter] [-relax] 196 [-mcpu=[210|340]] 197 198 _Target Meta options:_ 199 [-mcpu=CPU] [-mfpu=CPU] [-mdsp=CPU] 200 _Target MICROBLAZE options:_ 201 202 _Target MIPS options:_ 203 [-nocpp] [-EL] [-EB] [-O[OPTIMIZATION LEVEL]] 204 [-g[DEBUG LEVEL]] [-G NUM] [-KPIC] [-call_shared] 205 [-non_shared] [-xgot [-mvxworks-pic] 206 [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32] 207 [-mfp64] [-mgp64] [-mfpxx] 208 [-modd-spreg] [-mno-odd-spreg] 209 [-march=CPU] [-mtune=CPU] [-mips1] [-mips2] 210 [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2] 211 [-mips32r3] [-mips32r5] [-mips32r6] [-mips64] [-mips64r2] 212 [-mips64r3] [-mips64r5] [-mips64r6] 213 [-construct-floats] [-no-construct-floats] 214 [-mignore-branch-isa] [-mno-ignore-branch-isa] 215 [-mnan=ENCODING] 216 [-trap] [-no-break] [-break] [-no-trap] 217 [-mips16] [-no-mips16] 218 [-mmips16e2] [-mno-mips16e2] 219 [-mmicromips] [-mno-micromips] 220 [-msmartmips] [-mno-smartmips] 221 [-mips3d] [-no-mips3d] 222 [-mdmx] [-no-mdmx] 223 [-mdsp] [-mno-dsp] 224 [-mdspr2] [-mno-dspr2] 225 [-mdspr3] [-mno-dspr3] 226 [-mmsa] [-mno-msa] 227 [-mxpa] [-mno-xpa] 228 [-mmt] [-mno-mt] 229 [-mmcu] [-mno-mcu] 230 [-mcrc] [-mno-crc] 231 [-mginv] [-mno-ginv] 232 [-mloongson-mmi] [-mno-loongson-mmi] 233 [-mloongson-cam] [-mno-loongson-cam] 234 [-mloongson-ext] [-mno-loongson-ext] 235 [-mloongson-ext2] [-mno-loongson-ext2] 236 [-minsn32] [-mno-insn32] 237 [-mfix7000] [-mno-fix7000] 238 [-mfix-rm7000] [-mno-fix-rm7000] 239 [-mfix-vr4120] [-mno-fix-vr4120] 240 [-mfix-vr4130] [-mno-fix-vr4130] 241 [-mfix-r5900] [-mno-fix-r5900] 242 [-mdebug] [-no-mdebug] 243 [-mpdr] [-mno-pdr] 244 245 _Target MMIX options:_ 246 [-fixed-special-register-names] [-globalize-symbols] 247 [-gnu-syntax] [-relax] [-no-predefined-symbols] 248 [-no-expand] [-no-merge-gregs] [-x] 249 [-linker-allocated-gregs] 250 251 _Target Nios II options:_ 252 [-relax-all] [-relax-section] [-no-relax] 253 [-EB] [-EL] 254 255 _Target NDS32 options:_ 256 [-EL] [-EB] [-O] [-Os] [-mcpu=CPU] 257 [-misa=ISA] [-mabi=ABI] [-mall-ext] 258 [-m[no-]16-bit] [-m[no-]perf-ext] [-m[no-]perf2-ext] 259 [-m[no-]string-ext] [-m[no-]dsp-ext] [-m[no-]mac] [-m[no-]div] 260 [-m[no-]audio-isa-ext] [-m[no-]fpu-sp-ext] [-m[no-]fpu-dp-ext] 261 [-m[no-]fpu-fma] [-mfpu-freg=FREG] [-mreduced-regs] 262 [-mfull-regs] [-m[no-]dx-regs] [-mpic] [-mno-relax] 263 [-mb2bb] 264 265 _Target PDP11 options:_ 266 [-mpic|-mno-pic] [-mall] [-mno-extensions] 267 [-mEXTENSION|-mno-EXTENSION] 268 [-mCPU] [-mMACHINE] 269 270 _Target picoJava options:_ 271 [-mb|-me] 272 273 _Target PowerPC options:_ 274 [-a32|-a64] 275 [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604|-m403|-m405| 276 -m440|-m464|-m476|-m7400|-m7410|-m7450|-m7455|-m750cl|-mgekko| 277 -mbroadway|-mppc64|-m620|-me500|-e500x2|-me500mc|-me500mc64|-me5500| 278 -me6500|-mppc64bridge|-mbooke|-mpower4|-mpwr4|-mpower5|-mpwr5|-mpwr5x| 279 -mpower6|-mpwr6|-mpower7|-mpwr7|-mpower8|-mpwr8|-mpower9|-mpwr9-ma2| 280 -mcell|-mspe|-mspe2|-mtitan|-me300|-mcom] 281 [-many] [-maltivec|-mvsx|-mhtm|-mvle] 282 [-mregnames|-mno-regnames] 283 [-mrelocatable|-mrelocatable-lib|-K PIC] [-memb] 284 [-mlittle|-mlittle-endian|-le|-mbig|-mbig-endian|-be] 285 [-msolaris|-mno-solaris] 286 [-nops=COUNT] 287 288 _Target PRU options:_ 289 [-link-relax] 290 [-mnolink-relax] 291 [-mno-warn-regname-label] 292 293 _Target RISC-V options:_ 294 [-fpic|-fPIC|-fno-pic] 295 [-march=ISA] 296 [-mabi=ABI] 297 [-mlittle-endian|-mbig-endian] 298 299 _Target RL78 options:_ 300 [-mg10] 301 [-m32bit-doubles|-m64bit-doubles] 302 303 _Target RX options:_ 304 [-mlittle-endian|-mbig-endian] 305 [-m32bit-doubles|-m64bit-doubles] 306 [-muse-conventional-section-names] 307 [-msmall-data-limit] 308 [-mpid] 309 [-mrelax] 310 [-mint-register=NUMBER] 311 [-mgcc-abi|-mrx-abi] 312 313 _Target s390 options:_ 314 [-m31|-m64] [-mesa|-mzarch] [-march=CPU] 315 [-mregnames|-mno-regnames] 316 [-mwarn-areg-zero] 317 318 _Target SCORE options:_ 319 [-EB][-EL][-FIXDD][-NWARN] 320 [-SCORE5][-SCORE5U][-SCORE7][-SCORE3] 321 [-march=score7][-march=score3] 322 [-USE_R1][-KPIC][-O0][-G NUM][-V] 323 324 _Target SPARC options:_ 325 [-Av6|-Av7|-Av8|-Aleon|-Asparclet|-Asparclite 326 -Av8plus|-Av8plusa|-Av8plusb|-Av8plusc|-Av8plusd 327 -Av8plusv|-Av8plusm|-Av9|-Av9a|-Av9b|-Av9c 328 -Av9d|-Av9e|-Av9v|-Av9m|-Asparc|-Asparcvis 329 -Asparcvis2|-Asparcfmaf|-Asparcima|-Asparcvis3 330 -Asparcvisr|-Asparc5] 331 [-xarch=v8plus|-xarch=v8plusa]|-xarch=v8plusb|-xarch=v8plusc 332 -xarch=v8plusd|-xarch=v8plusv|-xarch=v8plusm|-xarch=v9 333 -xarch=v9a|-xarch=v9b|-xarch=v9c|-xarch=v9d|-xarch=v9e 334 -xarch=v9v|-xarch=v9m|-xarch=sparc|-xarch=sparcvis 335 -xarch=sparcvis2|-xarch=sparcfmaf|-xarch=sparcima 336 -xarch=sparcvis3|-xarch=sparcvisr|-xarch=sparc5 337 -bump] 338 [-32|-64] 339 [-enforce-aligned-data][-dcti-couples-detect] 340 341 _Target TIC54X options:_ 342 [-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf] 343 [-merrors-to-file <FILENAME>|-me <FILENAME>] 344 345 _Target TIC6X options:_ 346 [-march=ARCH] [-mbig-endian|-mlittle-endian] 347 [-mdsbt|-mno-dsbt] [-mpid=no|-mpid=near|-mpid=far] 348 [-mpic|-mno-pic] 349 350 _Target TILE-Gx options:_ 351 [-m32|-m64][-EB][-EL] 352 353 _Target Visium options:_ 354 [-mtune=ARCH] 355 356 _Target Xtensa options:_ 357 [-[no-]text-section-literals] [-[no-]auto-litpools] 358 [-[no-]absolute-literals] 359 [-[no-]target-align] [-[no-]longcalls] 360 [-[no-]transform] 361 [-rename-section OLDNAME=NEWNAME] 362 [-[no-]trampolines] 363 [-abi-windowed|-abi-call0] 364 365 _Target Z80 options:_ 366 [-march=CPU[-EXT][+EXT]] 367 [-local-prefix=PREFIX] 368 [-colonless] 369 [-sdcc] 370 [-fp-s=FORMAT] 371 [-fp-d=FORMAT] 372 373`@FILE' 374 Read command-line options from FILE. The options read are 375 inserted in place of the original @FILE option. If FILE does not 376 exist, or cannot be read, then the option will be treated 377 literally, and not removed. 378 379 Options in FILE are separated by whitespace. A whitespace 380 character may be included in an option by surrounding the entire 381 option in either single or double quotes. Any character 382 (including a backslash) may be included by prefixing the character 383 to be included with a backslash. The FILE may itself contain 384 additional @FILE options; any such options will be processed 385 recursively. 386 387`-a[cdghlmns]' 388 Turn on listings, in any of a variety of ways: 389 390 `-ac' 391 omit false conditionals 392 393 `-ad' 394 omit debugging directives 395 396 `-ag' 397 include general information, like as version and options 398 passed 399 400 `-ah' 401 include high-level source 402 403 `-al' 404 include assembly 405 406 `-am' 407 include macro expansions 408 409 `-an' 410 omit forms processing 411 412 `-as' 413 include symbols 414 415 `=file' 416 set the name of the listing file 417 418 You may combine these options; for example, use `-aln' for assembly 419 listing without forms processing. The `=file' option, if used, 420 must be the last one. By itself, `-a' defaults to `-ahls'. 421 422`--alternate' 423 Begin in alternate macro mode. *Note `.altmacro': Altmacro. 424 425`--compress-debug-sections' 426 Compress DWARF debug sections using zlib with SHF_COMPRESSED from 427 the ELF ABI. The resulting object file may not be compatible with 428 older linkers and object file utilities. Note if compression 429 would make a given section _larger_ then it is not compressed. 430 431`--compress-debug-sections=none' 432`--compress-debug-sections=zlib' 433`--compress-debug-sections=zlib-gnu' 434`--compress-debug-sections=zlib-gabi' 435 These options control how DWARF debug sections are compressed. 436 `--compress-debug-sections=none' is equivalent to 437 `--nocompress-debug-sections'. `--compress-debug-sections=zlib' 438 and `--compress-debug-sections=zlib-gabi' are equivalent to 439 `--compress-debug-sections'. `--compress-debug-sections=zlib-gnu' 440 compresses DWARF debug sections using zlib. The debug sections 441 are renamed to begin with `.zdebug'. Note if compression would 442 make a given section _larger_ then it is not compressed nor 443 renamed. 444 445`--nocompress-debug-sections' 446 Do not compress DWARF debug sections. This is usually the default 447 for all targets except the x86/x86_64, but a configure time option 448 can be used to override this. 449 450`-D' 451 Ignored. This option is accepted for script compatibility with 452 calls to other assemblers. 453 454`--debug-prefix-map OLD=NEW' 455 When assembling files in directory `OLD', record debugging 456 information describing them as in `NEW' instead. 457 458`--defsym SYM=VALUE' 459 Define the symbol SYM to be VALUE before assembling the input file. 460 VALUE must be an integer constant. As in C, a leading `0x' 461 indicates a hexadecimal value, and a leading `0' indicates an octal 462 value. The value of the symbol can be overridden inside a source 463 file via the use of a `.set' pseudo-op. 464 465`-f' 466 "fast"--skip whitespace and comment preprocessing (assume source is 467 compiler output). 468 469`-g' 470`--gen-debug' 471 Generate debugging information for each assembler source line 472 using whichever debug format is preferred by the target. This 473 currently means either STABS, ECOFF or DWARF2. When the debug 474 format is DWARF then a `.debug_info' and `.debug_line' section is 475 only emitted when the assembly file doesn't generate one itself. 476 477`--gstabs' 478 Generate stabs debugging information for each assembler line. This 479 may help debugging assembler code, if the debugger can handle it. 480 481`--gstabs+' 482 Generate stabs debugging information for each assembler line, with 483 GNU extensions that probably only gdb can handle, and that could 484 make other debuggers crash or refuse to read your program. This 485 may help debugging assembler code. Currently the only GNU 486 extension is the location of the current working directory at 487 assembling time. 488 489`--gdwarf-2' 490 Generate DWARF2 debugging information for each assembler line. 491 This may help debugging assembler code, if the debugger can handle 492 it. Note--this option is only supported by some targets, not all 493 of them. 494 495`--gdwarf-3' 496 This option is the same as the `--gdwarf-2' option, except that it 497 allows for the possibility of the generation of extra debug 498 information as per version 3 of the DWARF specification. Note - 499 enabling this option does not guarantee the generation of any 500 extra information, the choice to do so is on a per target basis. 501 502`--gdwarf-4' 503 This option is the same as the `--gdwarf-2' option, except that it 504 allows for the possibility of the generation of extra debug 505 information as per version 4 of the DWARF specification. Note - 506 enabling this option does not guarantee the generation of any 507 extra information, the choice to do so is on a per target basis. 508 509`--gdwarf-5' 510 This option is the same as the `--gdwarf-2' option, except that it 511 allows for the possibility of the generation of extra debug 512 information as per version 5 of the DWARF specification. Note - 513 enabling this option does not guarantee the generation of any 514 extra information, the choice to do so is on a per target basis. 515 516`--gdwarf-sections' 517 Instead of creating a .debug_line section, create a series of 518 .debug_line.FOO sections where FOO is the name of the 519 corresponding code section. For example a code section called 520 .TEXT.FUNC will have its dwarf line number information placed into 521 a section called .DEBUG_LINE.TEXT.FUNC. If the code section is 522 just called .TEXT then debug line section will still be called 523 just .DEBUG_LINE without any suffix. 524 525`--gdwarf-cie-version=VERSION' 526 Control which version of DWARF Common Information Entries (CIEs) 527 are produced. When this flag is not specificed the default is 528 version 1, though some targets can modify this default. Other 529 possible values for VERSION are 3 or 4. 530 531`--size-check=error' 532`--size-check=warning' 533 Issue an error or warning for invalid ELF .size directive. 534 535`--elf-stt-common=no' 536`--elf-stt-common=yes' 537 These options control whether the ELF assembler should generate 538 common symbols with the `STT_COMMON' type. The default can be 539 controlled by a configure option `--enable-elf-stt-common'. 540 541`--generate-missing-build-notes=yes' 542`--generate-missing-build-notes=no' 543 These options control whether the ELF assembler should generate 544 GNU Build attribute notes if none are present in the input sources. 545 The default can be controlled by the 546 `--enable-generate-build-notes' configure option. 547 548`--help' 549 Print a summary of the command-line options and exit. 550 551`--target-help' 552 Print a summary of all target specific options and exit. 553 554`-I DIR' 555 Add directory DIR to the search list for `.include' directives. 556 557`-J' 558 Don't warn about signed overflow. 559 560`-K' 561 Issue warnings when difference tables altered for long 562 displacements. 563 564`-L' 565`--keep-locals' 566 Keep (in the symbol table) local symbols. These symbols start with 567 system-specific local label prefixes, typically `.L' for ELF 568 systems or `L' for traditional a.out systems. *Note Symbol 569 Names::. 570 571`--listing-lhs-width=NUMBER' 572 Set the maximum width, in words, of the output data column for an 573 assembler listing to NUMBER. 574 575`--listing-lhs-width2=NUMBER' 576 Set the maximum width, in words, of the output data column for 577 continuation lines in an assembler listing to NUMBER. 578 579`--listing-rhs-width=NUMBER' 580 Set the maximum width of an input source line, as displayed in a 581 listing, to NUMBER bytes. 582 583`--listing-cont-lines=NUMBER' 584 Set the maximum number of lines printed in a listing for a single 585 line of input to NUMBER + 1. 586 587`--multibyte-handling=allow' 588`--multibyte-handling=warn' 589`--multibyte-handling=warn-sym-only' 590 Controls how the assembler handles multibyte characters in the 591 input. The default (which can be restored by using the `allow' 592 argument) is to allow such characters without complaint. Using 593 the `warn' argument will make the assembler generate a warning 594 message whenever any multibyte character is encountered. Using 595 the `warn-sym-only' argument will only cause a warning to be 596 generated when a symbol is defined with a name that contains 597 multibyte characters. (References to undefined symbols will not 598 generate a warning). 599 600`--no-pad-sections' 601 Stop the assembler for padding the ends of output sections to the 602 alignment of that section. The default is to pad the sections, 603 but this can waste space which might be needed on targets which 604 have tight memory constraints. 605 606`-o OBJFILE' 607 Name the object-file output from `as' OBJFILE. 608 609`-R' 610 Fold the data section into the text section. 611 612`--sectname-subst' 613 Honor substitution sequences in section names. *Note `.section 614 NAME': Section Name Substitutions. 615 616`--statistics' 617 Print the maximum space (in bytes) and total time (in seconds) 618 used by assembly. 619 620`--strip-local-absolute' 621 Remove local absolute symbols from the outgoing symbol table. 622 623`-v' 624`-version' 625 Print the `as' version. 626 627`--version' 628 Print the `as' version and exit. 629 630`-W' 631`--no-warn' 632 Suppress warning messages. 633 634`--fatal-warnings' 635 Treat warnings as errors. 636 637`--warn' 638 Don't suppress warning messages or treat them as errors. 639 640`-w' 641 Ignored. 642 643`-x' 644 Ignored. 645 646`-Z' 647 Generate an object file even after errors. 648 649`-- | FILES ...' 650 Standard input, or source files to assemble. 651 652 653 *Note AArch64 Options::, for the options available when as is 654configured for the 64-bit mode of the ARM Architecture (AArch64). 655 656 *Note Alpha Options::, for the options available when as is 657configured for an Alpha processor. 658 659 The following options are available when as is configured for an ARC 660processor. 661 662`-mcpu=CPU' 663 This option selects the core processor variant. 664 665`-EB | -EL' 666 Select either big-endian (-EB) or little-endian (-EL) output. 667 668`-mcode-density' 669 Enable Code Density extension instructions. 670 671 The following options are available when as is configured for the ARM 672processor family. 673 674`-mcpu=PROCESSOR[+EXTENSION...]' 675 Specify which ARM processor variant is the target. 676 677`-march=ARCHITECTURE[+EXTENSION...]' 678 Specify which ARM architecture variant is used by the target. 679 680`-mfpu=FLOATING-POINT-FORMAT' 681 Select which Floating Point architecture is the target. 682 683`-mfloat-abi=ABI' 684 Select which floating point ABI is in use. 685 686`-mthumb' 687 Enable Thumb only instruction decoding. 688 689`-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant' 690 Select which procedure calling convention is in use. 691 692`-EB | -EL' 693 Select either big-endian (-EB) or little-endian (-EL) output. 694 695`-mthumb-interwork' 696 Specify that the code has been generated with interworking between 697 Thumb and ARM code in mind. 698 699`-mccs' 700 Turns on CodeComposer Studio assembly syntax compatibility mode. 701 702`-k' 703 Specify that PIC code has been generated. 704 705 *Note Blackfin Options::, for the options available when as is 706configured for the Blackfin processor family. 707 708 *Note BPF Options::, for the options available when as is configured 709for the Linux kernel BPF processor family. 710 711 See the info pages for documentation of the CRIS-specific options. 712 713 *Note C-SKY Options::, for the options available when as is 714configured for the C-SKY processor family. 715 716 The following options are available when as is configured for a D10V 717processor. 718`-O' 719 Optimize output by parallelizing instructions. 720 721 The following options are available when as is configured for a D30V 722processor. 723`-O' 724 Optimize output by parallelizing instructions. 725 726`-n' 727 Warn when nops are generated. 728 729`-N' 730 Warn when a nop after a 32-bit multiply instruction is generated. 731 732 The following options are available when as is configured for the 733Adapteva EPIPHANY series. 734 735 *Note Epiphany Options::, for the options available when as is 736configured for an Epiphany processor. 737 738 *Note i386-Options::, for the options available when as is 739configured for an i386 processor. 740 741 The following options are available when as is configured for the 742Ubicom IP2K series. 743 744`-mip2022ext' 745 Specifies that the extended IP2022 instructions are allowed. 746 747`-mip2022' 748 Restores the default behaviour, which restricts the permitted 749 instructions to just the basic IP2022 ones. 750 751 752 The following options are available when as is configured for the 753Renesas M32C and M16C processors. 754 755`-m32c' 756 Assemble M32C instructions. 757 758`-m16c' 759 Assemble M16C instructions (the default). 760 761`-relax' 762 Enable support for link-time relaxations. 763 764`-h-tick-hex' 765 Support H'00 style hex constants in addition to 0x00 style. 766 767 768 The following options are available when as is configured for the 769Renesas M32R (formerly Mitsubishi M32R) series. 770 771`--m32rx' 772 Specify which processor in the M32R family is the target. The 773 default is normally the M32R, but this option changes it to the 774 M32RX. 775 776`--warn-explicit-parallel-conflicts or --Wp' 777 Produce warning messages when questionable parallel constructs are 778 encountered. 779 780`--no-warn-explicit-parallel-conflicts or --Wnp' 781 Do not produce warning messages when questionable parallel 782 constructs are encountered. 783 784 785 The following options are available when as is configured for the 786Motorola 68000 series. 787 788`-l' 789 Shorten references to undefined symbols, to one word instead of 790 two. 791 792`-m68000 | -m68008 | -m68010 | -m68020 | -m68030' 793`| -m68040 | -m68060 | -m68302 | -m68331 | -m68332' 794`| -m68333 | -m68340 | -mcpu32 | -m5200' 795 Specify what processor in the 68000 family is the target. The 796 default is normally the 68020, but this can be changed at 797 configuration time. 798 799`-m68881 | -m68882 | -mno-68881 | -mno-68882' 800 The target machine does (or does not) have a floating-point 801 coprocessor. The default is to assume a coprocessor for 68020, 802 68030, and cpu32. Although the basic 68000 is not compatible with 803 the 68881, a combination of the two can be specified, since it's 804 possible to do emulation of the coprocessor instructions with the 805 main processor. 806 807`-m68851 | -mno-68851' 808 The target machine does (or does not) have a memory-management 809 unit coprocessor. The default is to assume an MMU for 68020 and 810 up. 811 812 813 *Note Nios II Options::, for the options available when as is 814configured for an Altera Nios II processor. 815 816 For details about the PDP-11 machine dependent features options, see 817*Note PDP-11-Options::. 818 819`-mpic | -mno-pic' 820 Generate position-independent (or position-dependent) code. The 821 default is `-mpic'. 822 823`-mall' 824`-mall-extensions' 825 Enable all instruction set extensions. This is the default. 826 827`-mno-extensions' 828 Disable all instruction set extensions. 829 830`-mEXTENSION | -mno-EXTENSION' 831 Enable (or disable) a particular instruction set extension. 832 833`-mCPU' 834 Enable the instruction set extensions supported by a particular 835 CPU, and disable all other extensions. 836 837`-mMACHINE' 838 Enable the instruction set extensions supported by a particular 839 machine model, and disable all other extensions. 840 841 The following options are available when as is configured for a 842picoJava processor. 843 844`-mb' 845 Generate "big endian" format output. 846 847`-ml' 848 Generate "little endian" format output. 849 850 851 *Note PRU Options::, for the options available when as is configured 852for a PRU processor. 853 854 The following options are available when as is configured for the 855Motorola 68HC11 or 68HC12 series. 856 857`-m68hc11 | -m68hc12 | -m68hcs12 | -mm9s12x | -mm9s12xg' 858 Specify what processor is the target. The default is defined by 859 the configuration option when building the assembler. 860 861`--xgate-ramoffset' 862 Instruct the linker to offset RAM addresses from S12X address 863 space into XGATE address space. 864 865`-mshort' 866 Specify to use the 16-bit integer ABI. 867 868`-mlong' 869 Specify to use the 32-bit integer ABI. 870 871`-mshort-double' 872 Specify to use the 32-bit double ABI. 873 874`-mlong-double' 875 Specify to use the 64-bit double ABI. 876 877`--force-long-branches' 878 Relative branches are turned into absolute ones. This concerns 879 conditional branches, unconditional branches and branches to a sub 880 routine. 881 882`-S | --short-branches' 883 Do not turn relative branches into absolute ones when the offset 884 is out of range. 885 886`--strict-direct-mode' 887 Do not turn the direct addressing mode into extended addressing 888 mode when the instruction does not support direct addressing mode. 889 890`--print-insn-syntax' 891 Print the syntax of instruction in case of error. 892 893`--print-opcodes' 894 Print the list of instructions with syntax and then exit. 895 896`--generate-example' 897 Print an example of instruction for each possible instruction and 898 then exit. This option is only useful for testing `as'. 899 900 901 The following options are available when `as' is configured for the 902SPARC architecture: 903 904`-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite' 905`-Av8plus | -Av8plusa | -Av9 | -Av9a' 906 Explicitly select a variant of the SPARC architecture. 907 908 `-Av8plus' and `-Av8plusa' select a 32 bit environment. `-Av9' 909 and `-Av9a' select a 64 bit environment. 910 911 `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with 912 UltraSPARC extensions. 913 914`-xarch=v8plus | -xarch=v8plusa' 915 For compatibility with the Solaris v9 assembler. These options are 916 equivalent to -Av8plus and -Av8plusa, respectively. 917 918`-bump' 919 Warn when the assembler switches to another architecture. 920 921 The following options are available when as is configured for the 922'c54x architecture. 923 924`-mfar-mode' 925 Enable extended addressing mode. All addresses and relocations 926 will assume extended addressing (usually 23 bits). 927 928`-mcpu=CPU_VERSION' 929 Sets the CPU version being compiled for. 930 931`-merrors-to-file FILENAME' 932 Redirect error output to a file, for broken systems which don't 933 support such behaviour in the shell. 934 935 The following options are available when as is configured for a MIPS 936processor. 937 938`-G NUM' 939 This option sets the largest size of an object that can be 940 referenced implicitly with the `gp' register. It is only accepted 941 for targets that use ECOFF format, such as a DECstation running 942 Ultrix. The default value is 8. 943 944`-EB' 945 Generate "big endian" format output. 946 947`-EL' 948 Generate "little endian" format output. 949 950`-mips1' 951`-mips2' 952`-mips3' 953`-mips4' 954`-mips5' 955`-mips32' 956`-mips32r2' 957`-mips32r3' 958`-mips32r5' 959`-mips32r6' 960`-mips64' 961`-mips64r2' 962`-mips64r3' 963`-mips64r5' 964`-mips64r6' 965 Generate code for a particular MIPS Instruction Set Architecture 966 level. `-mips1' is an alias for `-march=r3000', `-mips2' is an 967 alias for `-march=r6000', `-mips3' is an alias for `-march=r4000' 968 and `-mips4' is an alias for `-march=r8000'. `-mips5', `-mips32', 969 `-mips32r2', `-mips32r3', `-mips32r5', `-mips32r6', `-mips64', 970 `-mips64r2', `-mips64r3', `-mips64r5', and `-mips64r6' correspond 971 to generic MIPS V, MIPS32, MIPS32 Release 2, MIPS32 Release 3, 972 MIPS32 Release 5, MIPS32 Release 6, MIPS64, MIPS64 Release 2, 973 MIPS64 Release 3, MIPS64 Release 5, and MIPS64 Release 6 ISA 974 processors, respectively. 975 976`-march=CPU' 977 Generate code for a particular MIPS CPU. 978 979`-mtune=CPU' 980 Schedule and tune for a particular MIPS CPU. 981 982`-mfix7000' 983`-mno-fix7000' 984 Cause nops to be inserted if the read of the destination register 985 of an mfhi or mflo instruction occurs in the following two 986 instructions. 987 988`-mfix-rm7000' 989`-mno-fix-rm7000' 990 Cause nops to be inserted if a dmult or dmultu instruction is 991 followed by a load instruction. 992 993`-mfix-r5900' 994`-mno-fix-r5900' 995 Do not attempt to schedule the preceding instruction into the 996 delay slot of a branch instruction placed at the end of a short 997 loop of six instructions or fewer and always schedule a `nop' 998 instruction there instead. The short loop bug under certain 999 conditions causes loops to execute only once or twice, due to a 1000 hardware bug in the R5900 chip. 1001 1002`-mdebug' 1003`-no-mdebug' 1004 Cause stabs-style debugging output to go into an ECOFF-style 1005 .mdebug section instead of the standard ELF .stabs sections. 1006 1007`-mpdr' 1008`-mno-pdr' 1009 Control generation of `.pdr' sections. 1010 1011`-mgp32' 1012`-mfp32' 1013 The register sizes are normally inferred from the ISA and ABI, but 1014 these flags force a certain group of registers to be treated as 32 1015 bits wide at all times. `-mgp32' controls the size of 1016 general-purpose registers and `-mfp32' controls the size of 1017 floating-point registers. 1018 1019`-mgp64' 1020`-mfp64' 1021 The register sizes are normally inferred from the ISA and ABI, but 1022 these flags force a certain group of registers to be treated as 64 1023 bits wide at all times. `-mgp64' controls the size of 1024 general-purpose registers and `-mfp64' controls the size of 1025 floating-point registers. 1026 1027`-mfpxx' 1028 The register sizes are normally inferred from the ISA and ABI, but 1029 using this flag in combination with `-mabi=32' enables an ABI 1030 variant which will operate correctly with floating-point registers 1031 which are 32 or 64 bits wide. 1032 1033`-modd-spreg' 1034`-mno-odd-spreg' 1035 Enable use of floating-point operations on odd-numbered 1036 single-precision registers when supported by the ISA. `-mfpxx' 1037 implies `-mno-odd-spreg', otherwise the default is `-modd-spreg'. 1038 1039`-mips16' 1040`-no-mips16' 1041 Generate code for the MIPS 16 processor. This is equivalent to 1042 putting `.module mips16' at the start of the assembly file. 1043 `-no-mips16' turns off this option. 1044 1045`-mmips16e2' 1046`-mno-mips16e2' 1047 Enable the use of MIPS16e2 instructions in MIPS16 mode. This is 1048 equivalent to putting `.module mips16e2' at the start of the 1049 assembly file. `-mno-mips16e2' turns off this option. 1050 1051`-mmicromips' 1052`-mno-micromips' 1053 Generate code for the microMIPS processor. This is equivalent to 1054 putting `.module micromips' at the start of the assembly file. 1055 `-mno-micromips' turns off this option. This is equivalent to 1056 putting `.module nomicromips' at the start of the assembly file. 1057 1058`-msmartmips' 1059`-mno-smartmips' 1060 Enables the SmartMIPS extension to the MIPS32 instruction set. 1061 This is equivalent to putting `.module smartmips' at the start of 1062 the assembly file. `-mno-smartmips' turns off this option. 1063 1064`-mips3d' 1065`-no-mips3d' 1066 Generate code for the MIPS-3D Application Specific Extension. 1067 This tells the assembler to accept MIPS-3D instructions. 1068 `-no-mips3d' turns off this option. 1069 1070`-mdmx' 1071`-no-mdmx' 1072 Generate code for the MDMX Application Specific Extension. This 1073 tells the assembler to accept MDMX instructions. `-no-mdmx' turns 1074 off this option. 1075 1076`-mdsp' 1077`-mno-dsp' 1078 Generate code for the DSP Release 1 Application Specific Extension. 1079 This tells the assembler to accept DSP Release 1 instructions. 1080 `-mno-dsp' turns off this option. 1081 1082`-mdspr2' 1083`-mno-dspr2' 1084 Generate code for the DSP Release 2 Application Specific Extension. 1085 This option implies `-mdsp'. This tells the assembler to accept 1086 DSP Release 2 instructions. `-mno-dspr2' turns off this option. 1087 1088`-mdspr3' 1089`-mno-dspr3' 1090 Generate code for the DSP Release 3 Application Specific Extension. 1091 This option implies `-mdsp' and `-mdspr2'. This tells the 1092 assembler to accept DSP Release 3 instructions. `-mno-dspr3' 1093 turns off this option. 1094 1095`-mmsa' 1096`-mno-msa' 1097 Generate code for the MIPS SIMD Architecture Extension. This 1098 tells the assembler to accept MSA instructions. `-mno-msa' turns 1099 off this option. 1100 1101`-mxpa' 1102`-mno-xpa' 1103 Generate code for the MIPS eXtended Physical Address (XPA) 1104 Extension. This tells the assembler to accept XPA instructions. 1105 `-mno-xpa' turns off this option. 1106 1107`-mmt' 1108`-mno-mt' 1109 Generate code for the MT Application Specific Extension. This 1110 tells the assembler to accept MT instructions. `-mno-mt' turns 1111 off this option. 1112 1113`-mmcu' 1114`-mno-mcu' 1115 Generate code for the MCU Application Specific Extension. This 1116 tells the assembler to accept MCU instructions. `-mno-mcu' turns 1117 off this option. 1118 1119`-mcrc' 1120`-mno-crc' 1121 Generate code for the MIPS cyclic redundancy check (CRC) 1122 Application Specific Extension. This tells the assembler to 1123 accept CRC instructions. `-mno-crc' turns off this option. 1124 1125`-mginv' 1126`-mno-ginv' 1127 Generate code for the Global INValidate (GINV) Application Specific 1128 Extension. This tells the assembler to accept GINV instructions. 1129 `-mno-ginv' turns off this option. 1130 1131`-mloongson-mmi' 1132`-mno-loongson-mmi' 1133 Generate code for the Loongson MultiMedia extensions Instructions 1134 (MMI) Application Specific Extension. This tells the assembler to 1135 accept MMI instructions. `-mno-loongson-mmi' turns off this 1136 option. 1137 1138`-mloongson-cam' 1139`-mno-loongson-cam' 1140 Generate code for the Loongson Content Address Memory (CAM) 1141 instructions. This tells the assembler to accept Loongson CAM 1142 instructions. `-mno-loongson-cam' turns off this option. 1143 1144`-mloongson-ext' 1145`-mno-loongson-ext' 1146 Generate code for the Loongson EXTensions (EXT) instructions. 1147 This tells the assembler to accept Loongson EXT instructions. 1148 `-mno-loongson-ext' turns off this option. 1149 1150`-mloongson-ext2' 1151`-mno-loongson-ext2' 1152 Generate code for the Loongson EXTensions R2 (EXT2) instructions. 1153 This option implies `-mloongson-ext'. This tells the assembler to 1154 accept Loongson EXT2 instructions. `-mno-loongson-ext2' turns off 1155 this option. 1156 1157`-minsn32' 1158`-mno-insn32' 1159 Only use 32-bit instruction encodings when generating code for the 1160 microMIPS processor. This option inhibits the use of any 16-bit 1161 instructions. This is equivalent to putting `.set insn32' at the 1162 start of the assembly file. `-mno-insn32' turns off this option. 1163 This is equivalent to putting `.set noinsn32' at the start of the 1164 assembly file. By default `-mno-insn32' is selected, allowing all 1165 instructions to be used. 1166 1167`--construct-floats' 1168`--no-construct-floats' 1169 The `--no-construct-floats' option disables the construction of 1170 double width floating point constants by loading the two halves of 1171 the value into the two single width floating point registers that 1172 make up the double width register. By default 1173 `--construct-floats' is selected, allowing construction of these 1174 floating point constants. 1175 1176`--relax-branch' 1177`--no-relax-branch' 1178 The `--relax-branch' option enables the relaxation of out-of-range 1179 branches. By default `--no-relax-branch' is selected, causing any 1180 out-of-range branches to produce an error. 1181 1182`-mignore-branch-isa' 1183`-mno-ignore-branch-isa' 1184 Ignore branch checks for invalid transitions between ISA modes. 1185 The semantics of branches does not provide for an ISA mode switch, 1186 so in most cases the ISA mode a branch has been encoded for has to 1187 be the same as the ISA mode of the branch's target label. 1188 Therefore GAS has checks implemented that verify in branch 1189 assembly that the two ISA modes match. `-mignore-branch-isa' 1190 disables these checks. By default `-mno-ignore-branch-isa' is 1191 selected, causing any invalid branch requiring a transition 1192 between ISA modes to produce an error. 1193 1194`-mnan=ENCODING' 1195 Select between the IEEE 754-2008 (`-mnan=2008') or the legacy 1196 (`-mnan=legacy') NaN encoding format. The latter is the default. 1197 1198`--emulation=NAME' 1199 This option was formerly used to switch between ELF and ECOFF 1200 output on targets like IRIX 5 that supported both. MIPS ECOFF 1201 support was removed in GAS 2.24, so the option now serves little 1202 purpose. It is retained for backwards compatibility. 1203 1204 The available configuration names are: `mipself', `mipslelf' and 1205 `mipsbelf'. Choosing `mipself' now has no effect, since the output 1206 is always ELF. `mipslelf' and `mipsbelf' select little- and 1207 big-endian output respectively, but `-EL' and `-EB' are now the 1208 preferred options instead. 1209 1210`-nocpp' 1211 `as' ignores this option. It is accepted for compatibility with 1212 the native tools. 1213 1214`--trap' 1215`--no-trap' 1216`--break' 1217`--no-break' 1218 Control how to deal with multiplication overflow and division by 1219 zero. `--trap' or `--no-break' (which are synonyms) take a trap 1220 exception (and only work for Instruction Set Architecture level 2 1221 and higher); `--break' or `--no-trap' (also synonyms, and the 1222 default) take a break exception. 1223 1224`-n' 1225 When this option is used, `as' will issue a warning every time it 1226 generates a nop instruction from a macro. 1227 1228 The following options are available when as is configured for an 1229MCore processor. 1230 1231`-jsri2bsr' 1232`-nojsri2bsr' 1233 Enable or disable the JSRI to BSR transformation. By default this 1234 is enabled. The command-line option `-nojsri2bsr' can be used to 1235 disable it. 1236 1237`-sifilter' 1238`-nosifilter' 1239 Enable or disable the silicon filter behaviour. By default this 1240 is disabled. The default can be overridden by the `-sifilter' 1241 command-line option. 1242 1243`-relax' 1244 Alter jump instructions for long displacements. 1245 1246`-mcpu=[210|340]' 1247 Select the cpu type on the target hardware. This controls which 1248 instructions can be assembled. 1249 1250`-EB' 1251 Assemble for a big endian target. 1252 1253`-EL' 1254 Assemble for a little endian target. 1255 1256 1257 *Note Meta Options::, for the options available when as is configured 1258for a Meta processor. 1259 1260 See the info pages for documentation of the MMIX-specific options. 1261 1262 *Note NDS32 Options::, for the options available when as is 1263configured for a NDS32 processor. 1264 1265 *Note PowerPC-Opts::, for the options available when as is configured 1266for a PowerPC processor. 1267 1268 *Note RISC-V-Options::, for the options available when as is 1269configured for a RISC-V processor. 1270 1271 See the info pages for documentation of the RX-specific options. 1272 1273 The following options are available when as is configured for the 1274s390 processor family. 1275 1276`-m31' 1277`-m64' 1278 Select the word size, either 31/32 bits or 64 bits. 1279 1280`-mesa' 1281 1282`-mzarch' 1283 Select the architecture mode, either the Enterprise System 1284 Architecture (esa) or the z/Architecture mode (zarch). 1285 1286`-march=PROCESSOR' 1287 Specify which s390 processor variant is the target, `g5' (or 1288 `arch3'), `g6', `z900' (or `arch5'), `z990' (or `arch6'), 1289 `z9-109', `z9-ec' (or `arch7'), `z10' (or `arch8'), `z196' (or 1290 `arch9'), `zEC12' (or `arch10'), `z13' (or `arch11'), `z14' (or 1291 `arch12'), `z15' (or `arch13'), or `z16' (or `arch14'). 1292 1293`-mregnames' 1294`-mno-regnames' 1295 Allow or disallow symbolic names for registers. 1296 1297`-mwarn-areg-zero' 1298 Warn whenever the operand for a base or index register has been 1299 specified but evaluates to zero. 1300 1301 *Note TIC6X Options::, for the options available when as is 1302configured for a TMS320C6000 processor. 1303 1304 *Note TILE-Gx Options::, for the options available when as is 1305configured for a TILE-Gx processor. 1306 1307 *Note Visium Options::, for the options available when as is 1308configured for a Visium processor. 1309 1310 *Note Xtensa Options::, for the options available when as is 1311configured for an Xtensa processor. 1312 1313 *Note Z80 Options::, for the options available when as is configured 1314for an Z80 processor. 1315 1316* Menu: 1317 1318* Manual:: Structure of this Manual 1319* GNU Assembler:: The GNU Assembler 1320* Object Formats:: Object File Formats 1321* Command Line:: Command Line 1322* Input Files:: Input Files 1323* Object:: Output (Object) File 1324* Errors:: Error and Warning Messages 1325 1326 1327File: as.info, Node: Manual, Next: GNU Assembler, Up: Overview 1328 13291.1 Structure of this Manual 1330============================ 1331 1332This manual is intended to describe what you need to know to use GNU 1333`as'. We cover the syntax expected in source files, including notation 1334for symbols, constants, and expressions; the directives that `as' 1335understands; and of course how to invoke `as'. 1336 1337 This manual also describes some of the machine-dependent features of 1338various flavors of the assembler. 1339 1340 On the other hand, this manual is _not_ intended as an introduction 1341to programming in assembly language--let alone programming in general! 1342In a similar vein, we make no attempt to introduce the machine 1343architecture; we do _not_ describe the instruction set, standard 1344mnemonics, registers or addressing modes that are standard to a 1345particular architecture. You may want to consult the manufacturer's 1346machine architecture manual for this information. 1347 1348 1349File: as.info, Node: GNU Assembler, Next: Object Formats, Prev: Manual, Up: Overview 1350 13511.2 The GNU Assembler 1352===================== 1353 1354GNU `as' is really a family of assemblers. If you use (or have used) 1355the GNU assembler on one architecture, you should find a fairly similar 1356environment when you use it on another architecture. Each version has 1357much in common with the others, including object file formats, most 1358assembler directives (often called "pseudo-ops") and assembler syntax. 1359 1360 `as' is primarily intended to assemble the output of the GNU C 1361compiler `gcc' for use by the linker `ld'. Nevertheless, we've tried 1362to make `as' assemble correctly everything that other assemblers for 1363the same machine would assemble. Any exceptions are documented 1364explicitly (*note Machine Dependencies::). This doesn't mean `as' 1365always uses the same syntax as another assembler for the same 1366architecture; for example, we know of several incompatible versions of 1367680x0 assembly language syntax. 1368 1369 Unlike older assemblers, `as' is designed to assemble a source 1370program in one pass of the source file. This has a subtle impact on the 1371`.org' directive (*note `.org': Org.). 1372 1373 1374File: as.info, Node: Object Formats, Next: Command Line, Prev: GNU Assembler, Up: Overview 1375 13761.3 Object File Formats 1377======================= 1378 1379The GNU assembler can be configured to produce several alternative 1380object file formats. For the most part, this does not affect how you 1381write assembly language programs; but directives for debugging symbols 1382are typically different in different file formats. *Note Symbol 1383Attributes: Symbol Attributes. 1384 1385 1386File: as.info, Node: Command Line, Next: Input Files, Prev: Object Formats, Up: Overview 1387 13881.4 Command Line 1389================ 1390 1391After the program name `as', the command line may contain options and 1392file names. Options may appear in any order, and may be before, after, 1393or between file names. The order of file names is significant. 1394 1395 `--' (two hyphens) by itself names the standard input file 1396explicitly, as one of the files for `as' to assemble. 1397 1398 Except for `--' any command-line argument that begins with a hyphen 1399(`-') is an option. Each option changes the behavior of `as'. No 1400option changes the way another option works. An option is a `-' 1401followed by one or more letters; the case of the letter is important. 1402All options are optional. 1403 1404 Some options expect exactly one file name to follow them. The file 1405name may either immediately follow the option's letter (compatible with 1406older assemblers) or it may be the next command argument (GNU 1407standard). These two command lines are equivalent: 1408 1409 as -o my-object-file.o mumble.s 1410 as -omy-object-file.o mumble.s 1411 1412 1413File: as.info, Node: Input Files, Next: Object, Prev: Command Line, Up: Overview 1414 14151.5 Input Files 1416=============== 1417 1418We use the phrase "source program", abbreviated "source", to describe 1419the program input to one run of `as'. The program may be in one or 1420more files; how the source is partitioned into files doesn't change the 1421meaning of the source. 1422 1423 The source program is a concatenation of the text in all the files, 1424in the order specified. 1425 1426 Each time you run `as' it assembles exactly one source program. The 1427source program is made up of one or more files. (The standard input is 1428also a file.) 1429 1430 You give `as' a command line that has zero or more input file names. 1431The input files are read (from left file name to right). A 1432command-line argument (in any position) that has no special meaning is 1433taken to be an input file name. 1434 1435 If you give `as' no file names it attempts to read one input file 1436from the `as' standard input, which is normally your terminal. You may 1437have to type <ctl-D> to tell `as' there is no more program to assemble. 1438 1439 Use `--' if you need to explicitly name the standard input file in 1440your command line. 1441 1442 If the source is empty, `as' produces a small, empty object file. 1443 1444Filenames and Line-numbers 1445-------------------------- 1446 1447There are two ways of locating a line in the input file (or files) and 1448either may be used in reporting error messages. One way refers to a 1449line number in a physical file; the other refers to a line number in a 1450"logical" file. *Note Error and Warning Messages: Errors. 1451 1452 "Physical files" are those files named in the command line given to 1453`as'. 1454 1455 "Logical files" are simply names declared explicitly by assembler 1456directives; they bear no relation to physical files. Logical file 1457names help error messages reflect the original source file, when `as' 1458source is itself synthesized from other files. `as' understands the 1459`#' directives emitted by the `gcc' preprocessor. See also *Note 1460`.file': File. 1461 1462 1463File: as.info, Node: Object, Next: Errors, Prev: Input Files, Up: Overview 1464 14651.6 Output (Object) File 1466======================== 1467 1468Every time you run `as' it produces an output file, which is your 1469assembly language program translated into numbers. This file is the 1470object file. Its default name is `a.out'. You can give it another 1471name by using the `-o' option. Conventionally, object file names end 1472with `.o'. The default name is used for historical reasons: older 1473assemblers were capable of assembling self-contained programs directly 1474into a runnable program. (For some formats, this isn't currently 1475possible, but it can be done for the `a.out' format.) 1476 1477 The object file is meant for input to the linker `ld'. It contains 1478assembled program code, information to help `ld' integrate the 1479assembled program into a runnable file, and (optionally) symbolic 1480information for the debugger. 1481 1482 1483File: as.info, Node: Errors, Prev: Object, Up: Overview 1484 14851.7 Error and Warning Messages 1486============================== 1487 1488`as' may write warnings and error messages to the standard error file 1489(usually your terminal). This should not happen when a compiler runs 1490`as' automatically. Warnings report an assumption made so that `as' 1491could keep assembling a flawed program; errors report a grave problem 1492that stops the assembly. 1493 1494 Warning messages have the format 1495 1496 file_name:NNN:Warning Message Text 1497 1498(where NNN is a line number). If both a logical file name (*note 1499`.file': File.) and a logical line number (*note `.line': Line.) have 1500been given then they will be used, otherwise the file name and line 1501number in the current assembler source file will be used. The message 1502text is intended to be self explanatory (in the grand Unix tradition). 1503 1504 Note the file name must be set via the logical version of the `.file' 1505directive, not the DWARF2 version of the `.file' directive. For 1506example: 1507 1508 .file 2 "bar.c" 1509 error_assembler_source 1510 .file "foo.c" 1511 .line 30 1512 error_c_source 1513 1514 produces this output: 1515 1516 Assembler messages: 1517 asm.s:2: Error: no such instruction: `error_assembler_source' 1518 foo.c:31: Error: no such instruction: `error_c_source' 1519 1520 Error messages have the format 1521 1522 file_name:NNN:FATAL:Error Message Text 1523 1524 The file name and line number are derived as for warning messages. 1525The actual message text may be rather less explanatory because many of 1526them aren't supposed to happen. 1527 1528 1529File: as.info, Node: Invoking, Next: Syntax, Prev: Overview, Up: Top 1530 15312 Command-Line Options 1532********************** 1533 1534This chapter describes command-line options available in _all_ versions 1535of the GNU assembler; see *Note Machine Dependencies::, for options 1536specific to particular machine architectures. 1537 1538 If you are invoking `as' via the GNU C compiler, you can use the 1539`-Wa' option to pass arguments through to the assembler. The assembler 1540arguments must be separated from each other (and the `-Wa') by commas. 1541For example: 1542 1543 gcc -c -g -O -Wa,-alh,-L file.c 1544 1545This passes two options to the assembler: `-alh' (emit a listing to 1546standard output with high-level and assembly source) and `-L' (retain 1547local symbols in the symbol table). 1548 1549 Usually you do not need to use this `-Wa' mechanism, since many 1550compiler command-line options are automatically passed to the assembler 1551by the compiler. (You can call the GNU compiler driver with the `-v' 1552option to see precisely what options it passes to each compilation 1553pass, including the assembler.) 1554 1555* Menu: 1556 1557* a:: -a[cdghlns] enable listings 1558* alternate:: --alternate enable alternate macro syntax 1559* D:: -D for compatibility 1560* f:: -f to work faster 1561* I:: -I for .include search path 1562 1563* K:: -K for difference tables 1564 1565* L:: -L to retain local symbols 1566* listing:: --listing-XXX to configure listing output 1567* M:: -M or --mri to assemble in MRI compatibility mode 1568* MD:: --MD for dependency tracking 1569* no-pad-sections:: --no-pad-sections to stop section padding 1570* o:: -o to name the object file 1571* R:: -R to join data and text sections 1572* statistics:: --statistics to see statistics about assembly 1573* traditional-format:: --traditional-format for compatible output 1574* v:: -v to announce version 1575* W:: -W, --no-warn, --warn, --fatal-warnings to control warnings 1576* Z:: -Z to make object file even after errors 1577 1578 1579File: as.info, Node: a, Next: alternate, Up: Invoking 1580 15812.1 Enable Listings: `-a[cdghlns]' 1582================================== 1583 1584These options enable listing output from the assembler. By itself, 1585`-a' requests high-level, assembly, and symbols listing. You can use 1586other letters to select specific options for the list: `-ah' requests a 1587high-level language listing, `-al' requests an output-program assembly 1588listing, and `-as' requests a symbol table listing. High-level 1589listings require that a compiler debugging option like `-g' be used, 1590and that assembly listings (`-al') be requested also. 1591 1592 Use the `-ag' option to print a first section with general assembly 1593information, like as version, switches passed, or time stamp. 1594 1595 Use the `-ac' option to omit false conditionals from a listing. Any 1596lines which are not assembled because of a false `.if' (or `.ifdef', or 1597any other conditional), or a true `.if' followed by an `.else', will be 1598omitted from the listing. 1599 1600 Use the `-ad' option to omit debugging directives from the listing. 1601 1602 Once you have specified one of these options, you can further control 1603listing output and its appearance using the directives `.list', 1604`.nolist', `.psize', `.eject', `.title', and `.sbttl'. The `-an' 1605option turns off all forms processing. If you do not request listing 1606output with one of the `-a' options, the listing-control directives 1607have no effect. 1608 1609 The letters after `-a' may be combined into one option, _e.g._, 1610`-aln'. 1611 1612 Note if the assembler source is coming from the standard input (e.g., 1613because it is being created by `gcc' and the `-pipe' command-line switch 1614is being used) then the listing will not contain any comments or 1615preprocessor directives. This is because the listing code buffers 1616input source lines from stdin only after they have been preprocessed by 1617the assembler. This reduces memory usage and makes the code more 1618efficient. 1619 1620 1621File: as.info, Node: alternate, Next: D, Prev: a, Up: Invoking 1622 16232.2 `--alternate' 1624================= 1625 1626Begin in alternate macro mode, see *Note `.altmacro': Altmacro. 1627 1628 1629File: as.info, Node: D, Next: f, Prev: alternate, Up: Invoking 1630 16312.3 `-D' 1632======== 1633 1634This option has no effect whatsoever, but it is accepted to make it more 1635likely that scripts written for other assemblers also work with `as'. 1636 1637 1638File: as.info, Node: f, Next: I, Prev: D, Up: Invoking 1639 16402.4 Work Faster: `-f' 1641===================== 1642 1643`-f' should only be used when assembling programs written by a 1644(trusted) compiler. `-f' stops the assembler from doing whitespace and 1645comment preprocessing on the input file(s) before assembling them. 1646*Note Preprocessing: Preprocessing. 1647 1648 _Warning:_ if you use `-f' when the files actually need to be 1649 preprocessed (if they contain comments, for example), `as' does 1650 not work correctly. 1651 1652 1653File: as.info, Node: I, Next: K, Prev: f, Up: Invoking 1654 16552.5 `.include' Search Path: `-I' PATH 1656===================================== 1657 1658Use this option to add a PATH to the list of directories `as' searches 1659for files specified in `.include' directives (*note `.include': 1660Include.). You may use `-I' as many times as necessary to include a 1661variety of paths. The current working directory is always searched 1662first; after that, `as' searches any `-I' directories in the same order 1663as they were specified (left to right) on the command line. 1664 1665 1666File: as.info, Node: K, Next: L, Prev: I, Up: Invoking 1667 16682.6 Difference Tables: `-K' 1669=========================== 1670 1671`as' sometimes alters the code emitted for directives of the form 1672`.word SYM1-SYM2'. *Note `.word': Word. You can use the `-K' option 1673if you want a warning issued when this is done. 1674 1675 1676File: as.info, Node: L, Next: listing, Prev: K, Up: Invoking 1677 16782.7 Include Local Symbols: `-L' 1679=============================== 1680 1681Symbols beginning with system-specific local label prefixes, typically 1682`.L' for ELF systems or `L' for traditional a.out systems, are called 1683"local symbols". *Note Symbol Names::. Normally you do not see such 1684symbols when debugging, because they are intended for the use of 1685programs (like compilers) that compose assembler programs, not for your 1686notice. Normally both `as' and `ld' discard such symbols, so you do 1687not normally debug with them. 1688 1689 This option tells `as' to retain those local symbols in the object 1690file. Usually if you do this you also tell the linker `ld' to preserve 1691those symbols. 1692 1693 1694File: as.info, Node: listing, Next: M, Prev: L, Up: Invoking 1695 16962.8 Configuring listing output: `--listing' 1697=========================================== 1698 1699The listing feature of the assembler can be enabled via the 1700command-line switch `-a' (*note a::). This feature combines the input 1701source file(s) with a hex dump of the corresponding locations in the 1702output object file, and displays them as a listing file. The format of 1703this listing can be controlled by directives inside the assembler 1704source (i.e., `.list' (*note List::), `.title' (*note Title::), 1705`.sbttl' (*note Sbttl::), `.psize' (*note Psize::), and `.eject' (*note 1706Eject::) and also by the following switches: 1707 1708`--listing-lhs-width=`number'' 1709 Sets the maximum width, in words, of the first line of the hex 1710 byte dump. This dump appears on the left hand side of the listing 1711 output. 1712 1713`--listing-lhs-width2=`number'' 1714 Sets the maximum width, in words, of any further lines of the hex 1715 byte dump for a given input source line. If this value is not 1716 specified, it defaults to being the same as the value specified 1717 for `--listing-lhs-width'. If neither switch is used the default 1718 is to one. 1719 1720`--listing-rhs-width=`number'' 1721 Sets the maximum width, in characters, of the source line that is 1722 displayed alongside the hex dump. The default value for this 1723 parameter is 100. The source line is displayed on the right hand 1724 side of the listing output. 1725 1726`--listing-cont-lines=`number'' 1727 Sets the maximum number of continuation lines of hex dump that 1728 will be displayed for a given single line of source input. The 1729 default value is 4. 1730 1731 1732File: as.info, Node: M, Next: MD, Prev: listing, Up: Invoking 1733 17342.9 Assemble in MRI Compatibility Mode: `-M' 1735============================================ 1736 1737The `-M' or `--mri' option selects MRI compatibility mode. This 1738changes the syntax and pseudo-op handling of `as' to make it compatible 1739with the `ASM68K' assembler from Microtec Research. The exact nature 1740of the MRI syntax will not be documented here; see the MRI manuals for 1741more information. Note in particular that the handling of macros and 1742macro arguments is somewhat different. The purpose of this option is 1743to permit assembling existing MRI assembler code using `as'. 1744 1745 The MRI compatibility is not complete. Certain operations of the 1746MRI assembler depend upon its object file format, and can not be 1747supported using other object file formats. Supporting these would 1748require enhancing each object file format individually. These are: 1749 1750 * global symbols in common section 1751 1752 The m68k MRI assembler supports common sections which are merged 1753 by the linker. Other object file formats do not support this. 1754 `as' handles common sections by treating them as a single common 1755 symbol. It permits local symbols to be defined within a common 1756 section, but it can not support global symbols, since it has no 1757 way to describe them. 1758 1759 * complex relocations 1760 1761 The MRI assemblers support relocations against a negated section 1762 address, and relocations which combine the start addresses of two 1763 or more sections. These are not support by other object file 1764 formats. 1765 1766 * `END' pseudo-op specifying start address 1767 1768 The MRI `END' pseudo-op permits the specification of a start 1769 address. This is not supported by other object file formats. The 1770 start address may instead be specified using the `-e' option to 1771 the linker, or in a linker script. 1772 1773 * `IDNT', `.ident' and `NAME' pseudo-ops 1774 1775 The MRI `IDNT', `.ident' and `NAME' pseudo-ops assign a module 1776 name to the output file. This is not supported by other object 1777 file formats. 1778 1779 * `ORG' pseudo-op 1780 1781 The m68k MRI `ORG' pseudo-op begins an absolute section at a given 1782 address. This differs from the usual `as' `.org' pseudo-op, which 1783 changes the location within the current section. Absolute 1784 sections are not supported by other object file formats. The 1785 address of a section may be assigned within a linker script. 1786 1787 There are some other features of the MRI assembler which are not 1788supported by `as', typically either because they are difficult or 1789because they seem of little consequence. Some of these may be 1790supported in future releases. 1791 1792 * EBCDIC strings 1793 1794 EBCDIC strings are not supported. 1795 1796 * packed binary coded decimal 1797 1798 Packed binary coded decimal is not supported. This means that the 1799 `DC.P' and `DCB.P' pseudo-ops are not supported. 1800 1801 * `FEQU' pseudo-op 1802 1803 The m68k `FEQU' pseudo-op is not supported. 1804 1805 * `NOOBJ' pseudo-op 1806 1807 The m68k `NOOBJ' pseudo-op is not supported. 1808 1809 * `OPT' branch control options 1810 1811 The m68k `OPT' branch control options--`B', `BRS', `BRB', `BRL', 1812 and `BRW'--are ignored. `as' automatically relaxes all branches, 1813 whether forward or backward, to an appropriate size, so these 1814 options serve no purpose. 1815 1816 * `OPT' list control options 1817 1818 The following m68k `OPT' list control options are ignored: `C', 1819 `CEX', `CL', `CRE', `E', `G', `I', `M', `MEX', `MC', `MD', `X'. 1820 1821 * other `OPT' options 1822 1823 The following m68k `OPT' options are ignored: `NEST', `O', `OLD', 1824 `OP', `P', `PCO', `PCR', `PCS', `R'. 1825 1826 * `OPT' `D' option is default 1827 1828 The m68k `OPT' `D' option is the default, unlike the MRI assembler. 1829 `OPT NOD' may be used to turn it off. 1830 1831 * `XREF' pseudo-op. 1832 1833 The m68k `XREF' pseudo-op is ignored. 1834 1835 1836 1837File: as.info, Node: MD, Next: no-pad-sections, Prev: M, Up: Invoking 1838 18392.10 Dependency Tracking: `--MD' 1840================================ 1841 1842`as' can generate a dependency file for the file it creates. This file 1843consists of a single rule suitable for `make' describing the 1844dependencies of the main source file. 1845 1846 The rule is written to the file named in its argument. 1847 1848 This feature is used in the automatic updating of makefiles. 1849 1850 1851File: as.info, Node: no-pad-sections, Next: o, Prev: MD, Up: Invoking 1852 18532.11 Output Section Padding 1854=========================== 1855 1856Normally the assembler will pad the end of each output section up to its 1857alignment boundary. But this can waste space, which can be significant 1858on memory constrained targets. So the `--no-pad-sections' option will 1859disable this behaviour. 1860 1861 1862File: as.info, Node: o, Next: R, Prev: no-pad-sections, Up: Invoking 1863 18642.12 Name the Object File: `-o' 1865=============================== 1866 1867There is always one object file output when you run `as'. By default 1868it has the name `a.out'. You use this option (which takes exactly one 1869filename) to give the object file a different name. 1870 1871 Whatever the object file is called, `as' overwrites any existing 1872file of the same name. 1873 1874 1875File: as.info, Node: R, Next: statistics, Prev: o, Up: Invoking 1876 18772.13 Join Data and Text Sections: `-R' 1878====================================== 1879 1880`-R' tells `as' to write the object file as if all data-section data 1881lives in the text section. This is only done at the very last moment: 1882your binary data are the same, but data section parts are relocated 1883differently. The data section part of your object file is zero bytes 1884long because all its bytes are appended to the text section. (*Note 1885Sections and Relocation: Sections.) 1886 1887 When you specify `-R' it would be possible to generate shorter 1888address displacements (because we do not have to cross between text and 1889data section). We refrain from doing this simply for compatibility with 1890older versions of `as'. In future, `-R' may work this way. 1891 1892 When `as' is configured for COFF or ELF output, this option is only 1893useful if you use sections named `.text' and `.data'. 1894 1895 `-R' is not supported for any of the HPPA targets. Using `-R' 1896generates a warning from `as'. 1897 1898 1899File: as.info, Node: statistics, Next: traditional-format, Prev: R, Up: Invoking 1900 19012.14 Display Assembly Statistics: `--statistics' 1902================================================ 1903 1904Use `--statistics' to display two statistics about the resources used by 1905`as': the maximum amount of space allocated during the assembly (in 1906bytes), and the total execution time taken for the assembly (in CPU 1907seconds). 1908 1909 1910File: as.info, Node: traditional-format, Next: v, Prev: statistics, Up: Invoking 1911 19122.15 Compatible Output: `--traditional-format' 1913============================================== 1914 1915For some targets, the output of `as' is different in some ways from the 1916output of some existing assembler. This switch requests `as' to use 1917the traditional format instead. 1918 1919 For example, it disables the exception frame optimizations which 1920`as' normally does by default on `gcc' output. 1921 1922 1923File: as.info, Node: v, Next: W, Prev: traditional-format, Up: Invoking 1924 19252.16 Announce Version: `-v' 1926=========================== 1927 1928You can find out what version of as is running by including the option 1929`-v' (which you can also spell as `-version') on the command line. 1930 1931 1932File: as.info, Node: W, Next: Z, Prev: v, Up: Invoking 1933 19342.17 Control Warnings: `-W', `--warn', `--no-warn', `--fatal-warnings' 1935====================================================================== 1936 1937`as' should never give a warning or error message when assembling 1938compiler output. But programs written by people often cause `as' to 1939give a warning that a particular assumption was made. All such 1940warnings are directed to the standard error file. 1941 1942 If you use the `-W' and `--no-warn' options, no warnings are issued. 1943This only affects the warning messages: it does not change any 1944particular of how `as' assembles your file. Errors, which stop the 1945assembly, are still reported. 1946 1947 If you use the `--fatal-warnings' option, `as' considers files that 1948generate warnings to be in error. 1949 1950 You can switch these options off again by specifying `--warn', which 1951causes warnings to be output as usual. 1952 1953 1954File: as.info, Node: Z, Prev: W, Up: Invoking 1955 19562.18 Generate Object File in Spite of Errors: `-Z' 1957================================================== 1958 1959After an error message, `as' normally produces no output. If for some 1960reason you are interested in object file output even after `as' gives 1961an error message on your program, use the `-Z' option. If there are 1962any errors, `as' continues anyways, and writes an object file after a 1963final warning message of the form `N errors, M warnings, generating bad 1964object file.' 1965 1966 1967File: as.info, Node: Syntax, Next: Sections, Prev: Invoking, Up: Top 1968 19693 Syntax 1970******** 1971 1972This chapter describes the machine-independent syntax allowed in a 1973source file. `as' syntax is similar to what many other assemblers use; 1974it is inspired by the BSD 4.2 assembler, except that `as' does not 1975assemble Vax bit-fields. 1976 1977* Menu: 1978 1979* Preprocessing:: Preprocessing 1980* Whitespace:: Whitespace 1981* Comments:: Comments 1982* Symbol Intro:: Symbols 1983* Statements:: Statements 1984* Constants:: Constants 1985 1986 1987File: as.info, Node: Preprocessing, Next: Whitespace, Up: Syntax 1988 19893.1 Preprocessing 1990================= 1991 1992The `as' internal preprocessor: 1993 * adjusts and removes extra whitespace. It leaves one space or tab 1994 before the keywords on a line, and turns any other whitespace on 1995 the line into a single space. 1996 1997 * removes all comments, replacing them with a single space, or an 1998 appropriate number of newlines. 1999 2000 * converts character constants into the appropriate numeric values. 2001 2002 It does not do macro processing, include file handling, or anything 2003else you may get from your C compiler's preprocessor. You can do 2004include file processing with the `.include' directive (*note 2005`.include': Include.). You can use the GNU C compiler driver to get 2006other "CPP" style preprocessing by giving the input file a `.S' suffix. 2007See the 'Options Controlling the Kind of Output' section of the GCC 2008manual for more details 2009(https://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html#Overall-Options) 2010 2011 Excess whitespace, comments, and character constants cannot be used 2012in the portions of the input text that are not preprocessed. 2013 2014 If the first line of an input file is `#NO_APP' or if you use the 2015`-f' option, whitespace and comments are not removed from the input 2016file. Within an input file, you can ask for whitespace and comment 2017removal in specific portions of the by putting a line that says `#APP' 2018before the text that may contain whitespace or comments, and putting a 2019line that says `#NO_APP' after this text. This feature is mainly 2020intend to support `asm' statements in compilers whose output is 2021otherwise free of comments and whitespace. 2022 2023 2024File: as.info, Node: Whitespace, Next: Comments, Prev: Preprocessing, Up: Syntax 2025 20263.2 Whitespace 2027============== 2028 2029"Whitespace" is one or more blanks or tabs, in any order. Whitespace 2030is used to separate symbols, and to make programs neater for people to 2031read. Unless within character constants (*note Character Constants: 2032Characters.), any whitespace means the same as exactly one space. 2033 2034 2035File: as.info, Node: Comments, Next: Symbol Intro, Prev: Whitespace, Up: Syntax 2036 20373.3 Comments 2038============ 2039 2040There are two ways of rendering comments to `as'. In both cases the 2041comment is equivalent to one space. 2042 2043 Anything from `/*' through the next `*/' is a comment. This means 2044you may not nest these comments. 2045 2046 /* 2047 The only way to include a newline ('\n') in a comment 2048 is to use this sort of comment. 2049 */ 2050 2051 /* This sort of comment does not nest. */ 2052 2053 Anything from a "line comment" character up to the next newline is 2054considered a comment and is ignored. The line comment character is 2055target specific, and some targets multiple comment characters. Some 2056targets also have line comment characters that only work if they are 2057the first character on a line. Some targets use a sequence of two 2058characters to introduce a line comment. Some targets can also change 2059their line comment characters depending upon command-line options that 2060have been used. For more details see the _Syntax_ section in the 2061documentation for individual targets. 2062 2063 If the line comment character is the hash sign (`#') then it still 2064has the special ability to enable and disable preprocessing (*note 2065Preprocessing::) and to specify logical line numbers: 2066 2067 To be compatible with past assemblers, lines that begin with `#' 2068have a special interpretation. Following the `#' should be an absolute 2069expression (*note Expressions::): the logical line number of the _next_ 2070line. Then a string (*note Strings: Strings.) is allowed: if present 2071it is a new logical file name. The rest of the line, if any, should be 2072whitespace. 2073 2074 If the first non-whitespace characters on the line are not numeric, 2075the line is ignored. (Just like a comment.) 2076 2077 # This is an ordinary comment. 2078 # 42-6 "new_file_name" # New logical file name 2079 # This is logical line # 36. 2080 This feature is deprecated, and may disappear from future versions 2081of `as'. 2082 2083 2084File: as.info, Node: Symbol Intro, Next: Statements, Prev: Comments, Up: Syntax 2085 20863.4 Symbols 2087=========== 2088 2089A "symbol" is one or more characters chosen from the set of all letters 2090(both upper and lower case), digits and the three characters `_.$'. On 2091most machines, you can also use `$' in symbol names; exceptions are 2092noted in *Note Machine Dependencies::. No symbol may begin with a 2093digit. Case is significant. There is no length limit; all characters 2094are significant. Multibyte characters are supported, but note that the 2095setting of the `--multibyte-handling' option might prevent their use. 2096Symbols are delimited by characters not in that set, or by the 2097beginning of a file (since the source program must end with a newline, 2098the end of a file is not a possible symbol delimiter). *Note Symbols::. 2099 2100Symbol names may also be enclosed in double quote `"' characters. In 2101such cases any characters are allowed, except for the NUL character. 2102If a double quote character is to be included in the symbol name it 2103must be preceded by a backslash `\' character. 2104 2105 2106File: as.info, Node: Statements, Next: Constants, Prev: Symbol Intro, Up: Syntax 2107 21083.5 Statements 2109============== 2110 2111A "statement" ends at a newline character (`\n') or a "line separator 2112character". The line separator character is target specific and 2113described in the _Syntax_ section of each target's documentation. Not 2114all targets support a line separator character. The newline or line 2115separator character is considered to be part of the preceding 2116statement. Newlines and separators within character constants are an 2117exception: they do not end statements. 2118 2119 It is an error to end any statement with end-of-file: the last 2120character of any input file should be a newline. 2121 2122 An empty statement is allowed, and may include whitespace. It is 2123ignored. 2124 2125 A statement begins with zero or more labels, optionally followed by a 2126key symbol which determines what kind of statement it is. The key 2127symbol determines the syntax of the rest of the statement. If the 2128symbol begins with a dot `.' then the statement is an assembler 2129directive: typically valid for any computer. If the symbol begins with 2130a letter the statement is an assembly language "instruction": it 2131assembles into a machine language instruction. Different versions of 2132`as' for different computers recognize different instructions. In 2133fact, the same symbol may represent a different instruction in a 2134different computer's assembly language. 2135 2136 A label is a symbol immediately followed by a colon (`:'). 2137Whitespace before a label or after a colon is permitted, but you may not 2138have whitespace between a label's symbol and its colon. *Note Labels::. 2139 2140 For HPPA targets, labels need not be immediately followed by a 2141colon, but the definition of a label must begin in column zero. This 2142also implies that only one label may be defined on each line. 2143 2144 label: .directive followed by something 2145 another_label: # This is an empty statement. 2146 instruction operand_1, operand_2, ... 2147 2148 2149File: as.info, Node: Constants, Prev: Statements, Up: Syntax 2150 21513.6 Constants 2152============= 2153 2154A constant is a number, written so that its value is known by 2155inspection, without knowing any context. Like this: 2156 .byte 74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value. 2157 .ascii "Ring the bell\7" # A string constant. 2158 .octa 0x123456789abcdef0123456789ABCDEF0 # A bignum. 2159 .float 0f-314159265358979323846264338327\ 2160 95028841971.693993751E-40 # - pi, a flonum. 2161 2162* Menu: 2163 2164* Characters:: Character Constants 2165* Numbers:: Number Constants 2166 2167 2168File: as.info, Node: Characters, Next: Numbers, Up: Constants 2169 21703.6.1 Character Constants 2171------------------------- 2172 2173There are two kinds of character constants. A "character" stands for 2174one character in one byte and its value may be used in numeric 2175expressions. String constants (properly called string _literals_) are 2176potentially many bytes and their values may not be used in arithmetic 2177expressions. 2178 2179* Menu: 2180 2181* Strings:: Strings 2182* Chars:: Characters 2183 2184 2185File: as.info, Node: Strings, Next: Chars, Up: Characters 2186 21873.6.1.1 Strings 2188............... 2189 2190A "string" is written between double-quotes. It may contain 2191double-quotes or null characters. The way to get special characters 2192into a string is to "escape" these characters: precede them with a 2193backslash `\' character. For example `\\' represents one backslash: 2194the first `\' is an escape which tells `as' to interpret the second 2195character literally as a backslash (which prevents `as' from 2196recognizing the second `\' as an escape character). The complete list 2197of escapes follows. 2198 2199`\b' 2200 Mnemonic for backspace; for ASCII this is octal code 010. 2201 2202`backslash-f' 2203 Mnemonic for FormFeed; for ASCII this is octal code 014. 2204 2205`\n' 2206 Mnemonic for newline; for ASCII this is octal code 012. 2207 2208`\r' 2209 Mnemonic for carriage-Return; for ASCII this is octal code 015. 2210 2211`\t' 2212 Mnemonic for horizontal Tab; for ASCII this is octal code 011. 2213 2214`\ DIGIT DIGIT DIGIT' 2215 An octal character code. The numeric code is 3 octal digits. For 2216 compatibility with other Unix systems, 8 and 9 are accepted as 2217 digits: for example, `\008' has the value 010, and `\009' the 2218 value 011. 2219 2220`\`x' HEX-DIGITS...' 2221 A hex character code. All trailing hex digits are combined. 2222 Either upper or lower case `x' works. 2223 2224`\\' 2225 Represents one `\' character. 2226 2227`\"' 2228 Represents one `"' character. Needed in strings to represent this 2229 character, because an unescaped `"' would end the string. 2230 2231`\ ANYTHING-ELSE' 2232 Any other character when escaped by `\' gives a warning, but 2233 assembles as if the `\' was not present. The idea is that if you 2234 used an escape sequence you clearly didn't want the literal 2235 interpretation of the following character. However `as' has no 2236 other interpretation, so `as' knows it is giving you the wrong 2237 code and warns you of the fact. 2238 2239 Which characters are escapable, and what those escapes represent, 2240varies widely among assemblers. The current set is what we think the 2241BSD 4.2 assembler recognizes, and is a subset of what most C compilers 2242recognize. If you are in doubt, do not use an escape sequence. 2243 2244 2245File: as.info, Node: Chars, Prev: Strings, Up: Characters 2246 22473.6.1.2 Characters 2248.................. 2249 2250A single character may be written as a single quote immediately 2251followed by that character. Some backslash escapes apply to 2252characters, `\b', `\f', `\n', `\r', `\t', and `\"' with the same meaning 2253as for strings, plus `\'' for a single quote. So if you want to write 2254the character backslash, you must write `'\\' where the first `\' 2255escapes the second `\'. As you can see, the quote is an acute accent, 2256not a grave accent. A newline immediately following an acute accent is 2257taken as a literal character and does not count as the end of a 2258statement. The value of a character constant in a numeric expression 2259is the machine's byte-wide code for that character. `as' assumes your 2260character code is ASCII: `'A' means 65, `'B' means 66, and so on. 2261 2262 2263File: as.info, Node: Numbers, Prev: Characters, Up: Constants 2264 22653.6.2 Number Constants 2266---------------------- 2267 2268`as' distinguishes three kinds of numbers according to how they are 2269stored in the target machine. _Integers_ are numbers that would fit 2270into an `int' in the C language. _Bignums_ are integers, but they are 2271stored in more than 32 bits. _Flonums_ are floating point numbers, 2272described below. 2273 2274* Menu: 2275 2276* Integers:: Integers 2277* Bignums:: Bignums 2278* Flonums:: Flonums 2279 2280 2281File: as.info, Node: Integers, Next: Bignums, Up: Numbers 2282 22833.6.2.1 Integers 2284................ 2285 2286A binary integer is `0b' or `0B' followed by zero or more of the binary 2287digits `01'. 2288 2289 An octal integer is `0' followed by zero or more of the octal digits 2290(`01234567'). 2291 2292 A decimal integer starts with a non-zero digit followed by zero or 2293more digits (`0123456789'). 2294 2295 A hexadecimal integer is `0x' or `0X' followed by one or more 2296hexadecimal digits chosen from `0123456789abcdefABCDEF'. 2297 2298 Integers have the usual values. To denote a negative integer, use 2299the prefix operator `-' discussed under expressions (*note Prefix 2300Operators: Prefix Ops.). 2301 2302 2303File: as.info, Node: Bignums, Next: Flonums, Prev: Integers, Up: Numbers 2304 23053.6.2.2 Bignums 2306............... 2307 2308A "bignum" has the same syntax and semantics as an integer except that 2309the number (or its negative) takes more than 32 bits to represent in 2310binary. The distinction is made because in some places integers are 2311permitted while bignums are not. 2312 2313 2314File: as.info, Node: Flonums, Prev: Bignums, Up: Numbers 2315 23163.6.2.3 Flonums 2317............... 2318 2319A "flonum" represents a floating point number. The translation is 2320indirect: a decimal floating point number from the text is converted by 2321`as' to a generic binary floating point number of more than sufficient 2322precision. This generic floating point number is converted to a 2323particular computer's floating point format (or formats) by a portion 2324of `as' specialized to that computer. 2325 2326 A flonum is written by writing (in order) 2327 * The digit `0'. (`0' is optional on the HPPA.) 2328 2329 * A letter, to tell `as' the rest of the number is a flonum. `e' is 2330 recommended. Case is not important. 2331 2332 On the H8/300 and Renesas / SuperH SH architectures, the letter 2333 must be one of the letters `DFPRSX' (in upper or lower case). 2334 2335 On the ARC, the letter must be one of the letters `DFRS' (in upper 2336 or lower case). 2337 2338 On the HPPA architecture, the letter must be `E' (upper case only). 2339 2340 * An optional sign: either `+' or `-'. 2341 2342 * An optional "integer part": zero or more decimal digits. 2343 2344 * An optional "fractional part": `.' followed by zero or more 2345 decimal digits. 2346 2347 * An optional exponent, consisting of: 2348 2349 * An `E' or `e'. 2350 2351 * Optional sign: either `+' or `-'. 2352 2353 * One or more decimal digits. 2354 2355 2356 At least one of the integer part or the fractional part must be 2357present. The floating point number has the usual base-10 value. 2358 2359 `as' does all processing using integers. Flonums are computed 2360independently of any floating point hardware in the computer running 2361`as'. 2362 2363 2364File: as.info, Node: Sections, Next: Symbols, Prev: Syntax, Up: Top 2365 23664 Sections and Relocation 2367************************* 2368 2369* Menu: 2370 2371* Secs Background:: Background 2372* Ld Sections:: Linker Sections 2373* As Sections:: Assembler Internal Sections 2374* Sub-Sections:: Sub-Sections 2375* bss:: bss Section 2376 2377 2378File: as.info, Node: Secs Background, Next: Ld Sections, Up: Sections 2379 23804.1 Background 2381============== 2382 2383Roughly, a section is a range of addresses, with no gaps; all data "in" 2384those addresses is treated the same for some particular purpose. For 2385example there may be a "read only" section. 2386 2387 The linker `ld' reads many object files (partial programs) and 2388combines their contents to form a runnable program. When `as' emits an 2389object file, the partial program is assumed to start at address 0. 2390`ld' assigns the final addresses for the partial program, so that 2391different partial programs do not overlap. This is actually an 2392oversimplification, but it suffices to explain how `as' uses sections. 2393 2394 `ld' moves blocks of bytes of your program to their run-time 2395addresses. These blocks slide to their run-time addresses as rigid 2396units; their length does not change and neither does the order of bytes 2397within them. Such a rigid unit is called a _section_. Assigning 2398run-time addresses to sections is called "relocation". It includes the 2399task of adjusting mentions of object-file addresses so they refer to 2400the proper run-time addresses. For the H8/300, and for the Renesas / 2401SuperH SH, `as' pads sections if needed to ensure they end on a word 2402(sixteen bit) boundary. 2403 2404 An object file written by `as' has at least three sections, any of 2405which may be empty. These are named "text", "data" and "bss" sections. 2406 2407 When it generates COFF or ELF output, `as' can also generate 2408whatever other named sections you specify using the `.section' 2409directive (*note `.section': Section.). If you do not use any 2410directives that place output in the `.text' or `.data' sections, these 2411sections still exist, but are empty. 2412 2413 When `as' generates SOM or ELF output for the HPPA, `as' can also 2414generate whatever other named sections you specify using the `.space' 2415and `.subspace' directives. See `HP9000 Series 800 Assembly Language 2416Reference Manual' (HP 92432-90001) for details on the `.space' and 2417`.subspace' assembler directives. 2418 2419 Additionally, `as' uses different names for the standard text, data, 2420and bss sections when generating SOM output. Program text is placed 2421into the `$CODE$' section, data into `$DATA$', and BSS into `$BSS$'. 2422 2423 Within the object file, the text section starts at address `0', the 2424data section follows, and the bss section follows the data section. 2425 2426 When generating either SOM or ELF output files on the HPPA, the text 2427section starts at address `0', the data section at address `0x4000000', 2428and the bss section follows the data section. 2429 2430 To let `ld' know which data changes when the sections are relocated, 2431and how to change that data, `as' also writes to the object file 2432details of the relocation needed. To perform relocation `ld' must 2433know, each time an address in the object file is mentioned: 2434 * Where in the object file is the beginning of this reference to an 2435 address? 2436 2437 * How long (in bytes) is this reference? 2438 2439 * Which section does the address refer to? What is the numeric 2440 value of 2441 (ADDRESS) - (START-ADDRESS OF SECTION)? 2442 2443 * Is the reference to an address "Program-Counter relative"? 2444 2445 In fact, every address `as' ever uses is expressed as 2446 (SECTION) + (OFFSET INTO SECTION) 2447 Further, most expressions `as' computes have this section-relative 2448nature. (For some object formats, such as SOM for the HPPA, some 2449expressions are symbol-relative instead.) 2450 2451 In this manual we use the notation {SECNAME N} to mean "offset N 2452into section SECNAME." 2453 2454 Apart from text, data and bss sections you need to know about the 2455"absolute" section. When `ld' mixes partial programs, addresses in the 2456absolute section remain unchanged. For example, address `{absolute 0}' 2457is "relocated" to run-time address 0 by `ld'. Although the linker 2458never arranges two partial programs' data sections with overlapping 2459addresses after linking, _by definition_ their absolute sections must 2460overlap. Address `{absolute 239}' in one part of a program is always 2461the same address when the program is running as address `{absolute 2462239}' in any other part of the program. 2463 2464 The idea of sections is extended to the "undefined" section. Any 2465address whose section is unknown at assembly time is by definition 2466rendered {undefined U}--where U is filled in later. Since numbers are 2467always defined, the only way to generate an undefined address is to 2468mention an undefined symbol. A reference to a named common block would 2469be such a symbol: its value is unknown at assembly time so it has 2470section _undefined_. 2471 2472 By analogy the word _section_ is used to describe groups of sections 2473in the linked program. `ld' puts all partial programs' text sections 2474in contiguous addresses in the linked program. It is customary to 2475refer to the _text section_ of a program, meaning all the addresses of 2476all partial programs' text sections. Likewise for data and bss 2477sections. 2478 2479 Some sections are manipulated by `ld'; others are invented for use 2480of `as' and have no meaning except during assembly. 2481 2482 2483File: as.info, Node: Ld Sections, Next: As Sections, Prev: Secs Background, Up: Sections 2484 24854.2 Linker Sections 2486=================== 2487 2488`ld' deals with just four kinds of sections, summarized below. 2489 2490*named sections* 2491*text section* 2492*data section* 2493 These sections hold your program. `as' and `ld' treat them as 2494 separate but equal sections. Anything you can say of one section 2495 is true of another. When the program is running, however, it is 2496 customary for the text section to be unalterable. The text 2497 section is often shared among processes: it contains instructions, 2498 constants and the like. The data section of a running program is 2499 usually alterable: for example, C variables would be stored in the 2500 data section. 2501 2502*bss section* 2503 This section contains zeroed bytes when your program begins 2504 running. It is used to hold uninitialized variables or common 2505 storage. The length of each partial program's bss section is 2506 important, but because it starts out containing zeroed bytes there 2507 is no need to store explicit zero bytes in the object file. The 2508 bss section was invented to eliminate those explicit zeros from 2509 object files. 2510 2511*absolute section* 2512 Address 0 of this section is always "relocated" to runtime address 2513 0. This is useful if you want to refer to an address that `ld' 2514 must not change when relocating. In this sense we speak of 2515 absolute addresses being "unrelocatable": they do not change 2516 during relocation. 2517 2518*undefined section* 2519 This "section" is a catch-all for address references to objects 2520 not in the preceding sections. 2521 2522 An idealized example of three relocatable sections follows. The 2523example uses the traditional section names `.text' and `.data'. Memory 2524addresses are on the horizontal axis. 2525 2526 +-----+----+--+ 2527 partial program # 1: |ttttt|dddd|00| 2528 +-----+----+--+ 2529 2530 text data bss 2531 seg. seg. seg. 2532 2533 +---+---+---+ 2534 partial program # 2: |TTT|DDD|000| 2535 +---+---+---+ 2536 2537 +--+---+-----+--+----+---+-----+~~ 2538 linked program: | |TTT|ttttt| |dddd|DDD|00000| 2539 +--+---+-----+--+----+---+-----+~~ 2540 2541 addresses: 0 ... 2542 2543 2544File: as.info, Node: As Sections, Next: Sub-Sections, Prev: Ld Sections, Up: Sections 2545 25464.3 Assembler Internal Sections 2547=============================== 2548 2549These sections are meant only for the internal use of `as'. They have 2550no meaning at run-time. You do not really need to know about these 2551sections for most purposes; but they can be mentioned in `as' warning 2552messages, so it might be helpful to have an idea of their meanings to 2553`as'. These sections are used to permit the value of every expression 2554in your assembly language program to be a section-relative address. 2555 2556ASSEMBLER-INTERNAL-LOGIC-ERROR! 2557 An internal assembler logic error has been found. This means 2558 there is a bug in the assembler. 2559 2560expr section 2561 The assembler stores complex expression internally as combinations 2562 of symbols. When it needs to represent an expression as a symbol, 2563 it puts it in the expr section. 2564 2565 2566File: as.info, Node: Sub-Sections, Next: bss, Prev: As Sections, Up: Sections 2567 25684.4 Sub-Sections 2569================ 2570 2571Assembled bytes conventionally fall into two sections: text and data. 2572You may have separate groups of data in named sections that you want to 2573end up near to each other in the object file, even though they are not 2574contiguous in the assembler source. `as' allows you to use 2575"subsections" for this purpose. Within each section, there can be 2576numbered subsections with values from 0 to 8192. Objects assembled 2577into the same subsection go into the object file together with other 2578objects in the same subsection. For example, a compiler might want to 2579store constants in the text section, but might not want to have them 2580interspersed with the program being assembled. In this case, the 2581compiler could issue a `.text 0' before each section of code being 2582output, and a `.text 1' before each group of constants being output. 2583 2584Subsections are optional. If you do not use subsections, everything 2585goes in subsection number zero. 2586 2587 Each subsection is zero-padded up to a multiple of four bytes. 2588(Subsections may be padded a different amount on different flavors of 2589`as'.) 2590 2591 Subsections appear in your object file in numeric order, lowest 2592numbered to highest. (All this to be compatible with other people's 2593assemblers.) The object file contains no representation of 2594subsections; `ld' and other programs that manipulate object files see 2595no trace of them. They just see all your text subsections as a text 2596section, and all your data subsections as a data section. 2597 2598 To specify which subsection you want subsequent statements assembled 2599into, use a numeric argument to specify it, in a `.text EXPRESSION' or 2600a `.data EXPRESSION' statement. When generating COFF output, you can 2601also use an extra subsection argument with arbitrary named sections: 2602`.section NAME, EXPRESSION'. When generating ELF output, you can also 2603use the `.subsection' directive (*note SubSection::) to specify a 2604subsection: `.subsection EXPRESSION'. EXPRESSION should be an absolute 2605expression (*note Expressions::). If you just say `.text' then `.text 26060' is assumed. Likewise `.data' means `.data 0'. Assembly begins in 2607`text 0'. For instance: 2608 .text 0 # The default subsection is text 0 anyway. 2609 .ascii "This lives in the first text subsection. *" 2610 .text 1 2611 .ascii "But this lives in the second text subsection." 2612 .data 0 2613 .ascii "This lives in the data section," 2614 .ascii "in the first data subsection." 2615 .text 0 2616 .ascii "This lives in the first text section," 2617 .ascii "immediately following the asterisk (*)." 2618 2619 Each section has a "location counter" incremented by one for every 2620byte assembled into that section. Because subsections are merely a 2621convenience restricted to `as' there is no concept of a subsection 2622location counter. There is no way to directly manipulate a location 2623counter--but the `.align' directive changes it, and any label 2624definition captures its current value. The location counter of the 2625section where statements are being assembled is said to be the "active" 2626location counter. 2627 2628 2629File: as.info, Node: bss, Prev: Sub-Sections, Up: Sections 2630 26314.5 bss Section 2632=============== 2633 2634The bss section is used for local common variable storage. You may 2635allocate address space in the bss section, but you may not dictate data 2636to load into it before your program executes. When your program starts 2637running, all the contents of the bss section are zeroed bytes. 2638 2639 The `.lcomm' pseudo-op defines a symbol in the bss section; see 2640*Note `.lcomm': Lcomm. 2641 2642 The `.comm' pseudo-op may be used to declare a common symbol, which 2643is another form of uninitialized symbol; see *Note `.comm': Comm. 2644 2645 When assembling for a target which supports multiple sections, such 2646as ELF or COFF, you may switch into the `.bss' section and define 2647symbols as usual; see *Note `.section': Section. You may only assemble 2648zero values into the section. Typically the section will only contain 2649symbol definitions and `.skip' directives (*note `.skip': Skip.). 2650 2651 2652File: as.info, Node: Symbols, Next: Expressions, Prev: Sections, Up: Top 2653 26545 Symbols 2655********* 2656 2657Symbols are a central concept: the programmer uses symbols to name 2658things, the linker uses symbols to link, and the debugger uses symbols 2659to debug. 2660 2661 _Warning:_ `as' does not place symbols in the object file in the 2662 same order they were declared. This may break some debuggers. 2663 2664* Menu: 2665 2666* Labels:: Labels 2667* Setting Symbols:: Giving Symbols Other Values 2668* Symbol Names:: Symbol Names 2669* Dot:: The Special Dot Symbol 2670* Symbol Attributes:: Symbol Attributes 2671 2672 2673File: as.info, Node: Labels, Next: Setting Symbols, Up: Symbols 2674 26755.1 Labels 2676========== 2677 2678A "label" is written as a symbol immediately followed by a colon `:'. 2679The symbol then represents the current value of the active location 2680counter, and is, for example, a suitable instruction operand. You are 2681warned if you use the same symbol to represent two different locations: 2682the first definition overrides any other definitions. 2683 2684 On the HPPA, the usual form for a label need not be immediately 2685followed by a colon, but instead must start in column zero. Only one 2686label may be defined on a single line. To work around this, the HPPA 2687version of `as' also provides a special directive `.label' for defining 2688labels more flexibly. 2689 2690 2691File: as.info, Node: Setting Symbols, Next: Symbol Names, Prev: Labels, Up: Symbols 2692 26935.2 Giving Symbols Other Values 2694=============================== 2695 2696A symbol can be given an arbitrary value by writing a symbol, followed 2697by an equals sign `=', followed by an expression (*note Expressions::). 2698This is equivalent to using the `.set' directive. *Note `.set': Set. 2699In the same way, using a double equals sign `='`=' here represents an 2700equivalent of the `.eqv' directive. *Note `.eqv': Eqv. 2701 2702 Blackfin does not support symbol assignment with `='. 2703 2704 2705File: as.info, Node: Symbol Names, Next: Dot, Prev: Setting Symbols, Up: Symbols 2706 27075.3 Symbol Names 2708================ 2709 2710Symbol names begin with a letter or with one of `._'. On most 2711machines, you can also use `$' in symbol names; exceptions are noted in 2712*Note Machine Dependencies::. That character may be followed by any 2713string of digits, letters, dollar signs (unless otherwise noted for a 2714particular target machine), and underscores. These restrictions do not 2715apply when quoting symbol names by `"', which is permitted for most 2716targets. Escaping characters in quoted symbol names with `\' generally 2717extends only to `\' itself and `"', at the time of writing. 2718 2719Case of letters is significant: `foo' is a different symbol name than 2720`Foo'. 2721 2722 Symbol names do not start with a digit. An exception to this rule 2723is made for Local Labels. See below. 2724 2725 Multibyte characters are supported, but note that the setting of the 2726`multibyte-handling' option might prevent their use. To generate a 2727symbol name containing multibyte characters enclose it within double 2728quotes and use escape codes. cf *Note Strings::. Generating a 2729multibyte symbol name from a label is not currently supported. 2730 2731 Since multibyte symbol names are unusual, and could possibly be used 2732maliciously, `as' provides a command line option 2733(`--multibyte-handling=warn-sym-only') which can be used to generate a 2734warning message whenever a symbol name containing multibyte characters 2735is defined. 2736 2737 Each symbol has exactly one name. Each name in an assembly language 2738program refers to exactly one symbol. You may use that symbol name any 2739number of times in a program. 2740 2741Local Symbol Names 2742------------------ 2743 2744A local symbol is any symbol beginning with certain local label 2745prefixes. By default, the local label prefix is `.L' for ELF systems or 2746`L' for traditional a.out systems, but each target may have its own set 2747of local label prefixes. On the HPPA local symbols begin with `L$'. 2748 2749 Local symbols are defined and used within the assembler, but they are 2750normally not saved in object files. Thus, they are not visible when 2751debugging. You may use the `-L' option (*note Include Local Symbols: 2752L.) to retain the local symbols in the object files. 2753 2754Local Labels 2755------------ 2756 2757Local labels are different from local symbols. Local labels help 2758compilers and programmers use names temporarily. They create symbols 2759which are guaranteed to be unique over the entire scope of the input 2760source code and which can be referred to by a simple notation. To 2761define a local label, write a label of the form `N:' (where N 2762represents any non-negative integer). To refer to the most recent 2763previous definition of that label write `Nb', using the same number as 2764when you defined the label. To refer to the next definition of a local 2765label, write `Nf'. The `b' stands for "backwards" and the `f' stands 2766for "forwards". 2767 2768 There is no restriction on how you can use these labels, and you can 2769reuse them too. So that it is possible to repeatedly define the same 2770local label (using the same number `N'), although you can only refer to 2771the most recently defined local label of that number (for a backwards 2772reference) or the next definition of a specific local label for a 2773forward reference. It is also worth noting that the first 10 local 2774labels (`0:'...`9:') are implemented in a slightly more efficient 2775manner than the others. 2776 2777 Here is an example: 2778 2779 1: branch 1f 2780 2: branch 1b 2781 1: branch 2f 2782 2: branch 1b 2783 2784 Which is the equivalent of: 2785 2786 label_1: branch label_3 2787 label_2: branch label_1 2788 label_3: branch label_4 2789 label_4: branch label_3 2790 2791 Local label names are only a notational device. They are immediately 2792transformed into more conventional symbol names before the assembler 2793uses them. The symbol names are stored in the symbol table, appear in 2794error messages, and are optionally emitted to the object file. The 2795names are constructed using these parts: 2796 2797`_local label prefix_' 2798 All local symbols begin with the system-specific local label 2799 prefix. Normally both `as' and `ld' forget symbols that start 2800 with the local label prefix. These labels are used for symbols 2801 you are never intended to see. If you use the `-L' option then 2802 `as' retains these symbols in the object file. If you also 2803 instruct `ld' to retain these symbols, you may use them in 2804 debugging. 2805 2806`NUMBER' 2807 This is the number that was used in the local label definition. 2808 So if the label is written `55:' then the number is `55'. 2809 2810`C-B' 2811 This unusual character is included so you do not accidentally 2812 invent a symbol of the same name. The character has ASCII value 2813 of `\002' (control-B). 2814 2815`_ordinal number_' 2816 This is a serial number to keep the labels distinct. The first 2817 definition of `0:' gets the number `1'. The 15th definition of 2818 `0:' gets the number `15', and so on. Likewise the first 2819 definition of `1:' gets the number `1' and its 15th definition 2820 gets `15' as well. 2821 2822 So for example, the first `1:' may be named `.L1C-B1', and the 44th 2823`3:' may be named `.L3C-B44'. 2824 2825Dollar Local Labels 2826------------------- 2827 2828On some targets `as' also supports an even more local form of local 2829labels called dollar labels. These labels go out of scope (i.e., they 2830become undefined) as soon as a non-local label is defined. Thus they 2831remain valid for only a small region of the input source code. Normal 2832local labels, by contrast, remain in scope for the entire file, or 2833until they are redefined by another occurrence of the same local label. 2834 2835 Dollar labels are defined in exactly the same way as ordinary local 2836labels, except that they have a dollar sign suffix to their numeric 2837value, e.g., `55$:'. 2838 2839 They can also be distinguished from ordinary local labels by their 2840transformed names which use ASCII character `\001' (control-A) as the 2841magic character to distinguish them from ordinary labels. For example, 2842the fifth definition of `6$' may be named `.L6C-A5'. 2843 2844 2845File: as.info, Node: Dot, Next: Symbol Attributes, Prev: Symbol Names, Up: Symbols 2846 28475.4 The Special Dot Symbol 2848========================== 2849 2850The special symbol `.' refers to the current address that `as' is 2851assembling into. Thus, the expression `melvin: .long .' defines 2852`melvin' to contain its own address. Assigning a value to `.' is 2853treated the same as a `.org' directive. Thus, the expression `.=.+4' 2854is the same as saying `.space 4'. 2855 2856 2857File: as.info, Node: Symbol Attributes, Prev: Dot, Up: Symbols 2858 28595.5 Symbol Attributes 2860===================== 2861 2862Every symbol has, as well as its name, the attributes "Value" and 2863"Type". Depending on output format, symbols can also have auxiliary 2864attributes. 2865 2866 If you use a symbol without defining it, `as' assumes zero for all 2867these attributes, and probably won't warn you. This makes the symbol 2868an externally defined symbol, which is generally what you would want. 2869 2870* Menu: 2871 2872* Symbol Value:: Value 2873* Symbol Type:: Type 2874 2875* a.out Symbols:: Symbol Attributes: `a.out' 2876 2877* COFF Symbols:: Symbol Attributes for COFF 2878 2879* SOM Symbols:: Symbol Attributes for SOM 2880 2881 2882File: as.info, Node: Symbol Value, Next: Symbol Type, Up: Symbol Attributes 2883 28845.5.1 Value 2885----------- 2886 2887The value of a symbol is (usually) 32 bits. For a symbol which labels a 2888location in the text, data, bss or absolute sections the value is the 2889number of addresses from the start of that section to the label. 2890Naturally for text, data and bss sections the value of a symbol changes 2891as `ld' changes section base addresses during linking. Absolute 2892symbols' values do not change during linking: that is why they are 2893called absolute. 2894 2895 The value of an undefined symbol is treated in a special way. If it 2896is 0 then the symbol is not defined in this assembler source file, and 2897`ld' tries to determine its value from other files linked into the same 2898program. You make this kind of symbol simply by mentioning a symbol 2899name without defining it. A non-zero value represents a `.comm' common 2900declaration. The value is how much common storage to reserve, in bytes 2901(addresses). The symbol refers to the first address of the allocated 2902storage. 2903 2904 2905File: as.info, Node: Symbol Type, Next: a.out Symbols, Prev: Symbol Value, Up: Symbol Attributes 2906 29075.5.2 Type 2908---------- 2909 2910The type attribute of a symbol contains relocation (section) 2911information, any flag settings indicating that a symbol is external, and 2912(optionally), other information for linkers and debuggers. The exact 2913format depends on the object-code output format in use. 2914 2915 2916File: as.info, Node: a.out Symbols, Next: COFF Symbols, Prev: Symbol Type, Up: Symbol Attributes 2917 29185.5.3 Symbol Attributes: `a.out' 2919-------------------------------- 2920 2921* Menu: 2922 2923* Symbol Desc:: Descriptor 2924* Symbol Other:: Other 2925 2926 2927File: as.info, Node: Symbol Desc, Next: Symbol Other, Up: a.out Symbols 2928 29295.5.3.1 Descriptor 2930.................. 2931 2932This is an arbitrary 16-bit value. You may establish a symbol's 2933descriptor value by using a `.desc' statement (*note `.desc': Desc.). 2934A descriptor value means nothing to `as'. 2935 2936 2937File: as.info, Node: Symbol Other, Prev: Symbol Desc, Up: a.out Symbols 2938 29395.5.3.2 Other 2940............. 2941 2942This is an arbitrary 8-bit value. It means nothing to `as'. 2943 2944 2945File: as.info, Node: COFF Symbols, Next: SOM Symbols, Prev: a.out Symbols, Up: Symbol Attributes 2946 29475.5.4 Symbol Attributes for COFF 2948-------------------------------- 2949 2950The COFF format supports a multitude of auxiliary symbol attributes; 2951like the primary symbol attributes, they are set between `.def' and 2952`.endef' directives. 2953 29545.5.4.1 Primary Attributes 2955.......................... 2956 2957The symbol name is set with `.def'; the value and type, respectively, 2958with `.val' and `.type'. 2959 29605.5.4.2 Auxiliary Attributes 2961............................ 2962 2963The `as' directives `.dim', `.line', `.scl', `.size', `.tag', and 2964`.weak' can generate auxiliary symbol table information for COFF. 2965 2966 2967File: as.info, Node: SOM Symbols, Prev: COFF Symbols, Up: Symbol Attributes 2968 29695.5.5 Symbol Attributes for SOM 2970------------------------------- 2971 2972The SOM format for the HPPA supports a multitude of symbol attributes 2973set with the `.EXPORT' and `.IMPORT' directives. 2974 2975 The attributes are described in `HP9000 Series 800 Assembly Language 2976Reference Manual' (HP 92432-90001) under the `IMPORT' and `EXPORT' 2977assembler directive documentation. 2978 2979 2980File: as.info, Node: Expressions, Next: Pseudo Ops, Prev: Symbols, Up: Top 2981 29826 Expressions 2983************* 2984 2985An "expression" specifies an address or numeric value. Whitespace may 2986precede and/or follow an expression. 2987 2988 The result of an expression must be an absolute number, or else an 2989offset into a particular section. If an expression is not absolute, 2990and there is not enough information when `as' sees the expression to 2991know its section, a second pass over the source program might be 2992necessary to interpret the expression--but the second pass is currently 2993not implemented. `as' aborts with an error message in this situation. 2994 2995* Menu: 2996 2997* Empty Exprs:: Empty Expressions 2998* Integer Exprs:: Integer Expressions 2999 3000 3001File: as.info, Node: Empty Exprs, Next: Integer Exprs, Up: Expressions 3002 30036.1 Empty Expressions 3004===================== 3005 3006An empty expression has no value: it is just whitespace or null. 3007Wherever an absolute expression is required, you may omit the 3008expression, and `as' assumes a value of (absolute) 0. This is 3009compatible with other assemblers. 3010 3011 3012File: as.info, Node: Integer Exprs, Prev: Empty Exprs, Up: Expressions 3013 30146.2 Integer Expressions 3015======================= 3016 3017An "integer expression" is one or more _arguments_ delimited by 3018_operators_. 3019 3020* Menu: 3021 3022* Arguments:: Arguments 3023* Operators:: Operators 3024* Prefix Ops:: Prefix Operators 3025* Infix Ops:: Infix Operators 3026 3027 3028File: as.info, Node: Arguments, Next: Operators, Up: Integer Exprs 3029 30306.2.1 Arguments 3031--------------- 3032 3033"Arguments" are symbols, numbers or subexpressions. In other contexts 3034arguments are sometimes called "arithmetic operands". In this manual, 3035to avoid confusing them with the "instruction operands" of the machine 3036language, we use the term "argument" to refer to parts of expressions 3037only, reserving the word "operand" to refer only to machine instruction 3038operands. 3039 3040 Symbols are evaluated to yield {SECTION NNN} where SECTION is one of 3041text, data, bss, absolute, or undefined. NNN is a signed, 2's 3042complement 32 bit integer. 3043 3044 Numbers are usually integers. 3045 3046 A number can be a flonum or bignum. In this case, you are warned 3047that only the low order 32 bits are used, and `as' pretends these 32 3048bits are an integer. You may write integer-manipulating instructions 3049that act on exotic constants, compatible with other assemblers. 3050 3051 Subexpressions are a left parenthesis `(' followed by an integer 3052expression, followed by a right parenthesis `)'; or a prefix operator 3053followed by an argument. 3054 3055 3056File: as.info, Node: Operators, Next: Prefix Ops, Prev: Arguments, Up: Integer Exprs 3057 30586.2.2 Operators 3059--------------- 3060 3061"Operators" are arithmetic functions, like `+' or `%'. Prefix 3062operators are followed by an argument. Infix operators appear between 3063their arguments. Operators may be preceded and/or followed by 3064whitespace. 3065 3066 3067File: as.info, Node: Prefix Ops, Next: Infix Ops, Prev: Operators, Up: Integer Exprs 3068 30696.2.3 Prefix Operator 3070--------------------- 3071 3072`as' has the following "prefix operators". They each take one 3073argument, which must be absolute. 3074 3075`-' 3076 "Negation". Two's complement negation. 3077 3078`~' 3079 "Complementation". Bitwise not. 3080 3081 3082File: as.info, Node: Infix Ops, Prev: Prefix Ops, Up: Integer Exprs 3083 30846.2.4 Infix Operators 3085--------------------- 3086 3087"Infix operators" take two arguments, one on either side. Operators 3088have precedence, but operations with equal precedence are performed left 3089to right. Apart from `+' or `-', both arguments must be absolute, and 3090the result is absolute. 3091 3092 1. Highest Precedence 3093 3094 `*' 3095 "Multiplication". 3096 3097 `/' 3098 "Division". Truncation is the same as the C operator `/' 3099 3100 `%' 3101 "Remainder". 3102 3103 `<<' 3104 "Shift Left". Same as the C operator `<<'. 3105 3106 `>>' 3107 "Shift Right". Same as the C operator `>>'. 3108 3109 2. Intermediate precedence 3110 3111 `|' 3112 "Bitwise Inclusive Or". 3113 3114 `&' 3115 "Bitwise And". 3116 3117 `^' 3118 "Bitwise Exclusive Or". 3119 3120 `!' 3121 "Bitwise Or Not". 3122 3123 3. Low Precedence 3124 3125 `+' 3126 "Addition". If either argument is absolute, the result has 3127 the section of the other argument. You may not add together 3128 arguments from different sections. 3129 3130 `-' 3131 "Subtraction". If the right argument is absolute, the result 3132 has the section of the left argument. If both arguments are 3133 in the same section, the result is absolute. You may not 3134 subtract arguments from different sections. 3135 3136 `==' 3137 "Is Equal To" 3138 3139 `<>' 3140 `!=' 3141 "Is Not Equal To" 3142 3143 `<' 3144 "Is Less Than" 3145 3146 `>' 3147 "Is Greater Than" 3148 3149 `>=' 3150 "Is Greater Than Or Equal To" 3151 3152 `<=' 3153 "Is Less Than Or Equal To" 3154 3155 The comparison operators can be used as infix operators. A 3156 true result has a value of -1 whereas a false result has a 3157 value of 0. Note, these operators perform signed 3158 comparisons. 3159 3160 4. Lowest Precedence 3161 3162 `&&' 3163 "Logical And". 3164 3165 `||' 3166 "Logical Or". 3167 3168 These two logical operations can be used to combine the 3169 results of sub expressions. Note, unlike the comparison 3170 operators a true result returns a value of 1 but a false 3171 results does still return 0. Also note that the logical or 3172 operator has a slightly lower precedence than logical and. 3173 3174 3175 In short, it's only meaningful to add or subtract the _offsets_ in an 3176address; you can only have a defined section in one of the two 3177arguments. 3178 3179 3180File: as.info, Node: Pseudo Ops, Next: Object Attributes, Prev: Expressions, Up: Top 3181 31827 Assembler Directives 3183********************** 3184 3185All assembler directives have names that begin with a period (`.'). 3186The names are case insensitive for most targets, and usually written in 3187lower case. 3188 3189 This chapter discusses directives that are available regardless of 3190the target machine configuration for the GNU assembler. Some machine 3191configurations provide additional directives. *Note Machine 3192Dependencies::. 3193 3194* Menu: 3195 3196* Abort:: `.abort' 3197 3198* ABORT (COFF):: `.ABORT' 3199 3200* Align:: `.align [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]' 3201* Altmacro:: `.altmacro' 3202* Ascii:: `.ascii "STRING"'... 3203* Asciz:: `.asciz "STRING"'... 3204* Attach_to_group:: `.attach_to_group NAME' 3205* Balign:: `.balign [ABS-EXPR[, ABS-EXPR]]' 3206* Bss:: `.bss SUBSECTION' 3207* Bundle directives:: `.bundle_align_mode ABS-EXPR', etc 3208* Byte:: `.byte EXPRESSIONS' 3209* CFI directives:: `.cfi_startproc [simple]', `.cfi_endproc', etc. 3210* Comm:: `.comm SYMBOL , LENGTH ' 3211* Data:: `.data SUBSECTION' 3212* Dc:: `.dc[SIZE] EXPRESSIONS' 3213* Dcb:: `.dcb[SIZE] NUMBER [,FILL]' 3214* Ds:: `.ds[SIZE] NUMBER [,FILL]' 3215 3216* Def:: `.def NAME' 3217 3218* Desc:: `.desc SYMBOL, ABS-EXPRESSION' 3219 3220* Dim:: `.dim' 3221 3222* Double:: `.double FLONUMS' 3223* Eject:: `.eject' 3224* Else:: `.else' 3225* Elseif:: `.elseif' 3226* End:: `.end' 3227 3228* Endef:: `.endef' 3229 3230* Endfunc:: `.endfunc' 3231* Endif:: `.endif' 3232* Equ:: `.equ SYMBOL, EXPRESSION' 3233* Equiv:: `.equiv SYMBOL, EXPRESSION' 3234* Eqv:: `.eqv SYMBOL, EXPRESSION' 3235* Err:: `.err' 3236* Error:: `.error STRING' 3237* Exitm:: `.exitm' 3238* Extern:: `.extern' 3239* Fail:: `.fail' 3240* File:: `.file' 3241* Fill:: `.fill REPEAT , SIZE , VALUE' 3242* Float:: `.float FLONUMS' 3243* Func:: `.func' 3244* Global:: `.global SYMBOL', `.globl SYMBOL' 3245 3246* Gnu_attribute:: `.gnu_attribute TAG,VALUE' 3247* Hidden:: `.hidden NAMES' 3248 3249* hword:: `.hword EXPRESSIONS' 3250* Ident:: `.ident' 3251* If:: `.if ABSOLUTE EXPRESSION' 3252* Incbin:: `.incbin "FILE"[,SKIP[,COUNT]]' 3253* Include:: `.include "FILE"' 3254* Int:: `.int EXPRESSIONS' 3255 3256* Internal:: `.internal NAMES' 3257 3258* Irp:: `.irp SYMBOL,VALUES'... 3259* Irpc:: `.irpc SYMBOL,VALUES'... 3260* Lcomm:: `.lcomm SYMBOL , LENGTH' 3261* Lflags:: `.lflags' 3262 3263* Line:: `.line LINE-NUMBER' 3264 3265* Linkonce:: `.linkonce [TYPE]' 3266* List:: `.list' 3267* Ln:: `.ln LINE-NUMBER' 3268* Loc:: `.loc FILENO LINENO' 3269* Loc_mark_labels:: `.loc_mark_labels ENABLE' 3270 3271* Local:: `.local NAMES' 3272 3273* Long:: `.long EXPRESSIONS' 3274 3275* Macro:: `.macro NAME ARGS'... 3276* MRI:: `.mri VAL' 3277* Noaltmacro:: `.noaltmacro' 3278* Nolist:: `.nolist' 3279* Nop:: `.nop' 3280* Nops:: `.nops SIZE[, CONTROL]' 3281* Octa:: `.octa BIGNUMS' 3282* Offset:: `.offset LOC' 3283* Org:: `.org NEW-LC, FILL' 3284* P2align:: `.p2align [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]' 3285 3286* PopSection:: `.popsection' 3287* Previous:: `.previous' 3288 3289* Print:: `.print STRING' 3290 3291* Protected:: `.protected NAMES' 3292 3293* Psize:: `.psize LINES, COLUMNS' 3294* Purgem:: `.purgem NAME' 3295 3296* PushSection:: `.pushsection NAME' 3297 3298* Quad:: `.quad BIGNUMS' 3299* Reloc:: `.reloc OFFSET, RELOC_NAME[, EXPRESSION]' 3300* Rept:: `.rept COUNT' 3301* Sbttl:: `.sbttl "SUBHEADING"' 3302 3303* Scl:: `.scl CLASS' 3304 3305* Section:: `.section NAME[, FLAGS]' 3306 3307* Set:: `.set SYMBOL, EXPRESSION' 3308* Short:: `.short EXPRESSIONS' 3309* Single:: `.single FLONUMS' 3310 3311* Size:: `.size [NAME , EXPRESSION]' 3312 3313* Skip:: `.skip SIZE [,FILL]' 3314 3315* Sleb128:: `.sleb128 EXPRESSIONS' 3316 3317* Space:: `.space SIZE [,FILL]' 3318 3319* Stab:: `.stabd, .stabn, .stabs' 3320 3321* String:: `.string "STR"', `.string8 "STR"', `.string16 "STR"', `.string32 "STR"', `.string64 "STR"' 3322* Struct:: `.struct EXPRESSION' 3323 3324* SubSection:: `.subsection' 3325* Symver:: `.symver NAME,NAME2@NODENAME[,VISIBILITY]' 3326 3327 3328* Tag:: `.tag STRUCTNAME' 3329 3330* Text:: `.text SUBSECTION' 3331* Title:: `.title "HEADING"' 3332 3333* Tls_common:: `.tls_common SYMBOL, LENGTH[, ALIGNMENT]' 3334 3335* Type:: `.type <INT | NAME , TYPE DESCRIPTION>' 3336 3337* Uleb128:: `.uleb128 EXPRESSIONS' 3338 3339* Val:: `.val ADDR' 3340 3341 3342* Version:: `.version "STRING"' 3343* VTableEntry:: `.vtable_entry TABLE, OFFSET' 3344* VTableInherit:: `.vtable_inherit CHILD, PARENT' 3345 3346* Warning:: `.warning STRING' 3347* Weak:: `.weak NAMES' 3348* Weakref:: `.weakref ALIAS, SYMBOL' 3349* Word:: `.word EXPRESSIONS' 3350 3351* Zero:: `.zero SIZE' 3352* 2byte:: `.2byte EXPRESSIONS' 3353* 4byte:: `.4byte EXPRESSIONS' 3354* 8byte:: `.8byte BIGNUMS' 3355* Deprecated:: Deprecated Directives 3356 3357 3358File: as.info, Node: Abort, Next: ABORT (COFF), Up: Pseudo Ops 3359 33607.1 `.abort' 3361============ 3362 3363This directive stops the assembly immediately. It is for compatibility 3364with other assemblers. The original idea was that the assembly 3365language source would be piped into the assembler. If the sender of 3366the source quit, it could use this directive tells `as' to quit also. 3367One day `.abort' will not be supported. 3368 3369 3370File: as.info, Node: ABORT (COFF), Next: Align, Prev: Abort, Up: Pseudo Ops 3371 33727.2 `.ABORT' (COFF) 3373=================== 3374 3375When producing COFF output, `as' accepts this directive as a synonym 3376for `.abort'. 3377 3378 3379File: as.info, Node: Align, Next: Altmacro, Prev: ABORT (COFF), Up: Pseudo Ops 3380 33817.3 `.align [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]' 3382=============================================== 3383 3384Pad the location counter (in the current subsection) to a particular 3385storage boundary. The first expression (which must be absolute) is the 3386alignment required, as described below. If this expression is omitted 3387then a default value of 0 is used, effectively disabling alignment 3388requirements. 3389 3390 The second expression (also absolute) gives the fill value to be 3391stored in the padding bytes. It (and the comma) may be omitted. If it 3392is omitted, the padding bytes are normally zero. However, on most 3393systems, if the section is marked as containing code and the fill value 3394is omitted, the space is filled with no-op instructions. 3395 3396 The third expression is also absolute, and is also optional. If it 3397is present, it is the maximum number of bytes that should be skipped by 3398this alignment directive. If doing the alignment would require 3399skipping more bytes than the specified maximum, then the alignment is 3400not done at all. You can omit the fill value (the second argument) 3401entirely by simply using two commas after the required alignment; this 3402can be useful if you want the alignment to be filled with no-op 3403instructions when appropriate. 3404 3405 The way the required alignment is specified varies from system to 3406system. For the arc, hppa, i386 using ELF, iq2000, m68k, or1k, s390, 3407sparc, tic4x and xtensa, the first expression is the alignment request 3408in bytes. For example `.align 8' advances the location counter until 3409it is a multiple of 8. If the location counter is already a multiple 3410of 8, no change is needed. For the tic54x, the first expression is the 3411alignment request in words. 3412 3413 For other systems, including ppc, i386 using a.out format, arm and 3414strongarm, it is the number of low-order zero bits the location counter 3415must have after advancement. For example `.align 3' advances the 3416location counter until it is a multiple of 8. If the location counter 3417is already a multiple of 8, no change is needed. 3418 3419 This inconsistency is due to the different behaviors of the various 3420native assemblers for these systems which GAS must emulate. GAS also 3421provides `.balign' and `.p2align' directives, described later, which 3422have a consistent behavior across all architectures (but are specific 3423to GAS). 3424 3425 3426File: as.info, Node: Altmacro, Next: Ascii, Prev: Align, Up: Pseudo Ops 3427 34287.4 `.altmacro' 3429=============== 3430 3431Enable alternate macro mode, enabling: 3432 3433`LOCAL NAME [ , ... ]' 3434 One additional directive, `LOCAL', is available. It is used to 3435 generate a string replacement for each of the NAME arguments, and 3436 replace any instances of NAME in each macro expansion. The 3437 replacement string is unique in the assembly, and different for 3438 each separate macro expansion. `LOCAL' allows you to write macros 3439 that define symbols, without fear of conflict between separate 3440 macro expansions. 3441 3442`String delimiters' 3443 You can write strings delimited in these other ways besides 3444 `"STRING"': 3445 3446 `'STRING'' 3447 You can delimit strings with single-quote characters. 3448 3449 `<STRING>' 3450 You can delimit strings with matching angle brackets. 3451 3452`single-character string escape' 3453 To include any single character literally in a string (even if the 3454 character would otherwise have some special meaning), you can 3455 prefix the character with `!' (an exclamation mark). For example, 3456 you can write `<4.3 !> 5.4!!>' to get the literal text `4.3 > 3457 5.4!'. 3458 3459`Expression results as strings' 3460 You can write `%EXPR' to evaluate the expression EXPR and use the 3461 result as a string. 3462 3463 3464File: as.info, Node: Ascii, Next: Asciz, Prev: Altmacro, Up: Pseudo Ops 3465 34667.5 `.ascii "STRING"'... 3467======================== 3468 3469`.ascii' expects zero or more string literals (*note Strings::) 3470separated by commas. It assembles each string (with no automatic 3471trailing zero byte) into consecutive addresses. 3472 3473 3474File: as.info, Node: Asciz, Next: Attach_to_group, Prev: Ascii, Up: Pseudo Ops 3475 34767.6 `.asciz "STRING"'... 3477======================== 3478 3479`.asciz' is just like `.ascii', but each string is followed by a zero 3480byte. The "z" in `.asciz' stands for "zero". Note that multiple 3481string arguments not separated by commas will be concatenated together 3482and only one final zero byte will be stored. 3483 3484 3485File: as.info, Node: Attach_to_group, Next: Balign, Prev: Asciz, Up: Pseudo Ops 3486 34877.7 `.attach_to_group NAME' 3488=========================== 3489 3490Attaches the current section to the named group. This is like declaring 3491the section with the `G' attribute, but can be done after the section 3492has been created. Note if the group section does not exist at the 3493point that this directive is used then it will be created. 3494 3495 3496File: as.info, Node: Balign, Next: Bss, Prev: Attach_to_group, Up: Pseudo Ops 3497 34987.8 `.balign[wl] [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]' 3499==================================================== 3500 3501Pad the location counter (in the current subsection) to a particular 3502storage boundary. The first expression (which must be absolute) is the 3503alignment request in bytes. For example `.balign 8' advances the 3504location counter until it is a multiple of 8. If the location counter 3505is already a multiple of 8, no change is needed. If the expression is 3506omitted then a default value of 0 is used, effectively disabling 3507alignment requirements. 3508 3509 The second expression (also absolute) gives the fill value to be 3510stored in the padding bytes. It (and the comma) may be omitted. If it 3511is omitted, the padding bytes are normally zero. However, on most 3512systems, if the section is marked as containing code and the fill value 3513is omitted, the space is filled with no-op instructions. 3514 3515 The third expression is also absolute, and is also optional. If it 3516is present, it is the maximum number of bytes that should be skipped by 3517this alignment directive. If doing the alignment would require 3518skipping more bytes than the specified maximum, then the alignment is 3519not done at all. You can omit the fill value (the second argument) 3520entirely by simply using two commas after the required alignment; this 3521can be useful if you want the alignment to be filled with no-op 3522instructions when appropriate. 3523 3524 The `.balignw' and `.balignl' directives are variants of the 3525`.balign' directive. The `.balignw' directive treats the fill pattern 3526as a two byte word value. The `.balignl' directives treats the fill 3527pattern as a four byte longword value. For example, `.balignw 35284,0x368d' will align to a multiple of 4. If it skips two bytes, they 3529will be filled in with the value 0x368d (the exact placement of the 3530bytes depends upon the endianness of the processor). If it skips 1 or 35313 bytes, the fill value is undefined. 3532 3533 3534File: as.info, Node: Bss, Next: Bundle directives, Prev: Balign, Up: Pseudo Ops 3535 35367.9 `.bss SUBSECTION' 3537===================== 3538 3539`.bss' tells `as' to assemble the following statements onto the end of 3540the bss section. For ELF based targets an optional SUBSECTION 3541expression (which must evaluate to a positive integer) can be provided. 3542In this case the statements are appended to the end of the indicated 3543bss subsection. 3544 3545 3546File: as.info, Node: Bundle directives, Next: Byte, Prev: Bss, Up: Pseudo Ops 3547 35487.10 Bundle directives 3549====================== 3550 35517.10.1 `.bundle_align_mode ABS-EXPR' 3552------------------------------------ 3553 3554`.bundle_align_mode' enables or disables "aligned instruction bundle" 3555mode. In this mode, sequences of adjacent instructions are grouped 3556into fixed-sized "bundles". If the argument is zero, this mode is 3557disabled (which is the default state). If the argument it not zero, it 3558gives the size of an instruction bundle as a power of two (as for the 3559`.p2align' directive, *note P2align::). 3560 3561 For some targets, it's an ABI requirement that no instruction may 3562span a certain aligned boundary. A "bundle" is simply a sequence of 3563instructions that starts on an aligned boundary. For example, if 3564ABS-EXPR is `5' then the bundle size is 32, so each aligned chunk of 32 3565bytes is a bundle. When aligned instruction bundle mode is in effect, 3566no single instruction may span a boundary between bundles. If an 3567instruction would start too close to the end of a bundle for the length 3568of that particular instruction to fit within the bundle, then the space 3569at the end of that bundle is filled with no-op instructions so the 3570instruction starts in the next bundle. As a corollary, it's an error 3571if any single instruction's encoding is longer than the bundle size. 3572 35737.10.2 `.bundle_lock' and `.bundle_unlock' 3574------------------------------------------ 3575 3576The `.bundle_lock' and directive `.bundle_unlock' directives allow 3577explicit control over instruction bundle padding. These directives are 3578only valid when `.bundle_align_mode' has been used to enable aligned 3579instruction bundle mode. It's an error if they appear when 3580`.bundle_align_mode' has not been used at all, or when the last 3581directive was `.bundle_align_mode 0'. 3582 3583 For some targets, it's an ABI requirement that certain instructions 3584may appear only as part of specified permissible sequences of multiple 3585instructions, all within the same bundle. A pair of `.bundle_lock' and 3586`.bundle_unlock' directives define a "bundle-locked" instruction 3587sequence. For purposes of aligned instruction bundle mode, a sequence 3588starting with `.bundle_lock' and ending with `.bundle_unlock' is 3589treated as a single instruction. That is, the entire sequence must fit 3590into a single bundle and may not span a bundle boundary. If necessary, 3591no-op instructions will be inserted before the first instruction of the 3592sequence so that the whole sequence starts on an aligned bundle 3593boundary. It's an error if the sequence is longer than the bundle size. 3594 3595 For convenience when using `.bundle_lock' and `.bundle_unlock' 3596inside assembler macros (*note Macro::), bundle-locked sequences may be 3597nested. That is, a second `.bundle_lock' directive before the next 3598`.bundle_unlock' directive has no effect except that it must be matched 3599by another closing `.bundle_unlock' so that there is the same number of 3600`.bundle_lock' and `.bundle_unlock' directives. 3601 3602 3603File: as.info, Node: Byte, Next: CFI directives, Prev: Bundle directives, Up: Pseudo Ops 3604 36057.11 `.byte EXPRESSIONS' 3606======================== 3607 3608`.byte' expects zero or more expressions, separated by commas. Each 3609expression is assembled into the next byte. 3610 3611 3612File: as.info, Node: CFI directives, Next: Comm, Prev: Byte, Up: Pseudo Ops 3613 36147.12 CFI directives 3615=================== 3616 36177.12.1 `.cfi_sections SECTION_LIST' 3618----------------------------------- 3619 3620`.cfi_sections' may be used to specify whether CFI directives should 3621emit `.eh_frame' section and/or `.debug_frame' section. If 3622SECTION_LIST is `.eh_frame', `.eh_frame' is emitted, if SECTION_LIST is 3623`.debug_frame', `.debug_frame' is emitted. To emit both use 3624`.eh_frame, .debug_frame'. The default if this directive is not used 3625is `.cfi_sections .eh_frame'. 3626 3627 On targets that support compact unwinding tables these can be 3628generated by specifying `.eh_frame_entry' instead of `.eh_frame'. 3629 3630 Some targets may support an additional name, such as `.c6xabi.exidx' 3631which is used by the target. 3632 3633 The `.cfi_sections' directive can be repeated, with the same or 3634different arguments, provided that CFI generation has not yet started. 3635Once CFI generation has started however the section list is fixed and 3636any attempts to redefine it will result in an error. 3637 36387.12.2 `.cfi_startproc [simple]' 3639-------------------------------- 3640 3641`.cfi_startproc' is used at the beginning of each function that should 3642have an entry in `.eh_frame'. It initializes some internal data 3643structures. Don't forget to close the function by `.cfi_endproc'. 3644 3645 Unless `.cfi_startproc' is used along with parameter `simple' it 3646also emits some architecture dependent initial CFI instructions. 3647 36487.12.3 `.cfi_endproc' 3649--------------------- 3650 3651`.cfi_endproc' is used at the end of a function where it closes its 3652unwind entry previously opened by `.cfi_startproc', and emits it to 3653`.eh_frame'. 3654 36557.12.4 `.cfi_personality ENCODING [, EXP]' 3656------------------------------------------ 3657 3658`.cfi_personality' defines personality routine and its encoding. 3659ENCODING must be a constant determining how the personality should be 3660encoded. If it is 255 (`DW_EH_PE_omit'), second argument is not 3661present, otherwise second argument should be a constant or a symbol 3662name. When using indirect encodings, the symbol provided should be the 3663location where personality can be loaded from, not the personality 3664routine itself. The default after `.cfi_startproc' is 3665`.cfi_personality 0xff', no personality routine. 3666 36677.12.5 `.cfi_personality_id ID' 3668------------------------------- 3669 3670`cfi_personality_id' defines a personality routine by its index as 3671defined in a compact unwinding format. Only valid when generating 3672compact EH frames (i.e. with `.cfi_sections eh_frame_entry'. 3673 36747.12.6 `.cfi_fde_data [OPCODE1 [, ...]]' 3675---------------------------------------- 3676 3677`cfi_fde_data' is used to describe the compact unwind opcodes to be 3678used for the current function. These are emitted inline in the 3679`.eh_frame_entry' section if small enough and there is no LSDA, or in 3680the `.gnu.extab' section otherwise. Only valid when generating compact 3681EH frames (i.e. with `.cfi_sections eh_frame_entry'. 3682 36837.12.7 `.cfi_lsda ENCODING [, EXP]' 3684----------------------------------- 3685 3686`.cfi_lsda' defines LSDA and its encoding. ENCODING must be a constant 3687determining how the LSDA should be encoded. If it is 255 3688(`DW_EH_PE_omit'), the second argument is not present, otherwise the 3689second argument should be a constant or a symbol name. The default 3690after `.cfi_startproc' is `.cfi_lsda 0xff', meaning that no LSDA is 3691present. 3692 36937.12.8 `.cfi_inline_lsda' [ALIGN] 3694--------------------------------- 3695 3696`.cfi_inline_lsda' marks the start of a LSDA data section and switches 3697to the corresponding `.gnu.extab' section. Must be preceded by a CFI 3698block containing a `.cfi_lsda' directive. Only valid when generating 3699compact EH frames (i.e. with `.cfi_sections eh_frame_entry'. 3700 3701 The table header and unwinding opcodes will be generated at this 3702point, so that they are immediately followed by the LSDA data. The 3703symbol referenced by the `.cfi_lsda' directive should still be defined 3704in case a fallback FDE based encoding is used. The LSDA data is 3705terminated by a section directive. 3706 3707 The optional ALIGN argument specifies the alignment required. The 3708alignment is specified as a power of two, as with the `.p2align' 3709directive. 3710 37117.12.9 `.cfi_def_cfa REGISTER, OFFSET' 3712-------------------------------------- 3713 3714`.cfi_def_cfa' defines a rule for computing CFA as: take address from 3715REGISTER and add OFFSET to it. 3716 37177.12.10 `.cfi_def_cfa_register REGISTER' 3718---------------------------------------- 3719 3720`.cfi_def_cfa_register' modifies a rule for computing CFA. From now on 3721REGISTER will be used instead of the old one. Offset remains the same. 3722 37237.12.11 `.cfi_def_cfa_offset OFFSET' 3724------------------------------------ 3725 3726`.cfi_def_cfa_offset' modifies a rule for computing CFA. Register 3727remains the same, but OFFSET is new. Note that it is the absolute 3728offset that will be added to a defined register to compute CFA address. 3729 37307.12.12 `.cfi_adjust_cfa_offset OFFSET' 3731--------------------------------------- 3732 3733Same as `.cfi_def_cfa_offset' but OFFSET is a relative value that is 3734added/subtracted from the previous offset. 3735 37367.12.13 `.cfi_offset REGISTER, OFFSET' 3737-------------------------------------- 3738 3739Previous value of REGISTER is saved at offset OFFSET from CFA. 3740 37417.12.14 `.cfi_val_offset REGISTER, OFFSET' 3742------------------------------------------ 3743 3744Previous value of REGISTER is CFA + OFFSET. 3745 37467.12.15 `.cfi_rel_offset REGISTER, OFFSET' 3747------------------------------------------ 3748 3749Previous value of REGISTER is saved at offset OFFSET from the current 3750CFA register. This is transformed to `.cfi_offset' using the known 3751displacement of the CFA register from the CFA. This is often easier to 3752use, because the number will match the code it's annotating. 3753 37547.12.16 `.cfi_register REGISTER1, REGISTER2' 3755-------------------------------------------- 3756 3757Previous value of REGISTER1 is saved in register REGISTER2. 3758 37597.12.17 `.cfi_restore REGISTER' 3760------------------------------- 3761 3762`.cfi_restore' says that the rule for REGISTER is now the same as it 3763was at the beginning of the function, after all initial instruction 3764added by `.cfi_startproc' were executed. 3765 37667.12.18 `.cfi_undefined REGISTER' 3767--------------------------------- 3768 3769From now on the previous value of REGISTER can't be restored anymore. 3770 37717.12.19 `.cfi_same_value REGISTER' 3772---------------------------------- 3773 3774Current value of REGISTER is the same like in the previous frame, i.e. 3775no restoration needed. 3776 37777.12.20 `.cfi_remember_state' and `.cfi_restore_state' 3778------------------------------------------------------ 3779 3780`.cfi_remember_state' pushes the set of rules for every register onto an 3781implicit stack, while `.cfi_restore_state' pops them off the stack and 3782places them in the current row. This is useful for situations where 3783you have multiple `.cfi_*' directives that need to be undone due to the 3784control flow of the program. For example, we could have something like 3785this (assuming the CFA is the value of `rbp'): 3786 3787 je label 3788 popq %rbx 3789 .cfi_restore %rbx 3790 popq %r12 3791 .cfi_restore %r12 3792 popq %rbp 3793 .cfi_restore %rbp 3794 .cfi_def_cfa %rsp, 8 3795 ret 3796 label: 3797 /* Do something else */ 3798 3799 Here, we want the `.cfi' directives to affect only the rows 3800corresponding to the instructions before `label'. This means we'd have 3801to add multiple `.cfi' directives after `label' to recreate the 3802original save locations of the registers, as well as setting the CFA 3803back to the value of `rbp'. This would be clumsy, and result in a 3804larger binary size. Instead, we can write: 3805 3806 je label 3807 popq %rbx 3808 .cfi_remember_state 3809 .cfi_restore %rbx 3810 popq %r12 3811 .cfi_restore %r12 3812 popq %rbp 3813 .cfi_restore %rbp 3814 .cfi_def_cfa %rsp, 8 3815 ret 3816 label: 3817 .cfi_restore_state 3818 /* Do something else */ 3819 3820 That way, the rules for the instructions after `label' will be the 3821same as before the first `.cfi_restore' without having to use multiple 3822`.cfi' directives. 3823 38247.12.21 `.cfi_return_column REGISTER' 3825------------------------------------- 3826 3827Change return column REGISTER, i.e. the return address is either 3828directly in REGISTER or can be accessed by rules for REGISTER. 3829 38307.12.22 `.cfi_signal_frame' 3831--------------------------- 3832 3833Mark current function as signal trampoline. 3834 38357.12.23 `.cfi_window_save' 3836-------------------------- 3837 3838SPARC register window has been saved. 3839 38407.12.24 `.cfi_escape' EXPRESSION[, ...] 3841--------------------------------------- 3842 3843Allows the user to add arbitrary bytes to the unwind info. One might 3844use this to add OS-specific CFI opcodes, or generic CFI opcodes that 3845GAS does not yet support. 3846 38477.12.25 `.cfi_val_encoded_addr REGISTER, ENCODING, LABEL' 3848--------------------------------------------------------- 3849 3850The current value of REGISTER is LABEL. The value of LABEL will be 3851encoded in the output file according to ENCODING; see the description 3852of `.cfi_personality' for details on this encoding. 3853 3854 The usefulness of equating a register to a fixed label is probably 3855limited to the return address register. Here, it can be useful to mark 3856a code segment that has only one return address which is reached by a 3857direct branch and no copy of the return address exists in memory or 3858another register. 3859 3860 3861File: as.info, Node: Comm, Next: Data, Prev: CFI directives, Up: Pseudo Ops 3862 38637.13 `.comm SYMBOL , LENGTH ' 3864============================= 3865 3866`.comm' declares a common symbol named SYMBOL. When linking, a common 3867symbol in one object file may be merged with a defined or common symbol 3868of the same name in another object file. If `ld' does not see a 3869definition for the symbol-just one or more common symbols-then it will 3870allocate LENGTH bytes of uninitialized memory. LENGTH must be an 3871absolute expression. If `ld' sees multiple common symbols with the 3872same name, and they do not all have the same size, it will allocate 3873space using the largest size. 3874 3875 When using ELF or (as a GNU extension) PE, the `.comm' directive 3876takes an optional third argument. This is the desired alignment of the 3877symbol, specified for ELF as a byte boundary (for example, an alignment 3878of 16 means that the least significant 4 bits of the address should be 3879zero), and for PE as a power of two (for example, an alignment of 5 3880means aligned to a 32-byte boundary). The alignment must be an 3881absolute expression, and it must be a power of two. If `ld' allocates 3882uninitialized memory for the common symbol, it will use the alignment 3883when placing the symbol. If no alignment is specified, `as' will set 3884the alignment to the largest power of two less than or equal to the 3885size of the symbol, up to a maximum of 16 on ELF, or the default 3886section alignment of 4 on PE(1). 3887 3888 The syntax for `.comm' differs slightly on the HPPA. The syntax is 3889`SYMBOL .comm, LENGTH'; SYMBOL is optional. 3890 3891 ---------- Footnotes ---------- 3892 3893 (1) This is not the same as the executable image file alignment 3894controlled by `ld''s `--section-alignment' option; image file sections 3895in PE are aligned to multiples of 4096, which is far too large an 3896alignment for ordinary variables. It is rather the default alignment 3897for (non-debug) sections within object (`*.o') files, which are less 3898strictly aligned. 3899 3900 3901File: as.info, Node: Data, Next: Dc, Prev: Comm, Up: Pseudo Ops 3902 39037.14 `.data SUBSECTION' 3904======================= 3905 3906`.data' tells `as' to assemble the following statements onto the end of 3907the data subsection numbered SUBSECTION (which is an absolute 3908expression). If SUBSECTION is omitted, it defaults to zero. 3909 3910 3911File: as.info, Node: Dc, Next: Dcb, Prev: Data, Up: Pseudo Ops 3912 39137.15 `.dc[SIZE] EXPRESSIONS' 3914============================ 3915 3916The `.dc' directive expects zero or more EXPRESSIONS separated by 3917commas. These expressions are evaluated and their values inserted into 3918the current section. The size of the emitted value depends upon the 3919suffix to the `.dc' directive: 3920 3921``.a'' 3922 Emits N-bit values, where N is the size of an address on the 3923 target system. 3924 3925``.b'' 3926 Emits 8-bit values. 3927 3928``.d'' 3929 Emits double precision floating-point values. 3930 3931``.l'' 3932 Emits 32-bit values. 3933 3934``.s'' 3935 Emits single precision floating-point values. 3936 3937``.w'' 3938 Emits 16-bit values. Note - this is true even on targets where 3939 the `.word' directive would emit 32-bit values. 3940 3941``.x'' 3942 Emits long double precision floating-point values. 3943 3944 If no suffix is used then `.w' is assumed. 3945 3946 The byte ordering is target dependent, as is the size and format of 3947floating point values. 3948 3949 3950File: as.info, Node: Dcb, Next: Ds, Prev: Dc, Up: Pseudo Ops 3951 39527.16 `.dcb[SIZE] NUMBER [,FILL]' 3953================================ 3954 3955This directive emits NUMBER copies of FILL, each of SIZE bytes. Both 3956NUMBER and FILL are absolute expressions. If the comma and FILL are 3957omitted, FILL is assumed to be zero. The SIZE suffix, if present, must 3958be one of: 3959 3960``.b'' 3961 Emits single byte values. 3962 3963``.d'' 3964 Emits double-precision floating point values. 3965 3966``.l'' 3967 Emits 4-byte values. 3968 3969``.s'' 3970 Emits single-precision floating point values. 3971 3972``.w'' 3973 Emits 2-byte values. 3974 3975``.x'' 3976 Emits long double-precision floating point values. 3977 3978 If the SIZE suffix is omitted then `.w' is assumed. 3979 3980 The byte ordering is target dependent, as is the size and format of 3981floating point values. 3982 3983 3984File: as.info, Node: Ds, Next: Def, Prev: Dcb, Up: Pseudo Ops 3985 39867.17 `.ds[SIZE] NUMBER [,FILL]' 3987=============================== 3988 3989This directive emits NUMBER copies of FILL, each of SIZE bytes. Both 3990NUMBER and FILL are absolute expressions. If the comma and FILL are 3991omitted, FILL is assumed to be zero. The SIZE suffix, if present, must 3992be one of: 3993 3994``.b'' 3995 Emits single byte values. 3996 3997``.d'' 3998 Emits 8-byte values. 3999 4000``.l'' 4001 Emits 4-byte values. 4002 4003``.p'' 4004 Emits values with size matching packed-decimal floating-point ones. 4005 4006``.s'' 4007 Emits 4-byte values. 4008 4009``.w'' 4010 Emits 2-byte values. 4011 4012``.x'' 4013 Emits values with size matching long double precision 4014 floating-point ones. 4015 4016 Note - unlike the `.dcb' directive the `.d', `.s' and `.x' suffixes 4017do not indicate that floating-point values are to be inserted. 4018 4019 If the SIZE suffix is omitted then `.w' is assumed. 4020 4021 The byte ordering is target dependent. 4022 4023 4024File: as.info, Node: Def, Next: Desc, Prev: Ds, Up: Pseudo Ops 4025 40267.18 `.def NAME' 4027================ 4028 4029Begin defining debugging information for a symbol NAME; the definition 4030extends until the `.endef' directive is encountered. 4031 4032 4033File: as.info, Node: Desc, Next: Dim, Prev: Def, Up: Pseudo Ops 4034 40357.19 `.desc SYMBOL, ABS-EXPRESSION' 4036=================================== 4037 4038This directive sets the descriptor of the symbol (*note Symbol 4039Attributes::) to the low 16 bits of an absolute expression. 4040 4041 The `.desc' directive is not available when `as' is configured for 4042COFF output; it is only for `a.out' or `b.out' object format. For the 4043sake of compatibility, `as' accepts it, but produces no output, when 4044configured for COFF. 4045 4046 4047File: as.info, Node: Dim, Next: Double, Prev: Desc, Up: Pseudo Ops 4048 40497.20 `.dim' 4050=========== 4051 4052This directive is generated by compilers to include auxiliary debugging 4053information in the symbol table. It is only permitted inside 4054`.def'/`.endef' pairs. 4055 4056 4057File: as.info, Node: Double, Next: Eject, Prev: Dim, Up: Pseudo Ops 4058 40597.21 `.double FLONUMS' 4060====================== 4061 4062`.double' expects zero or more flonums, separated by commas. It 4063assembles floating point numbers. The exact kind of floating point 4064numbers emitted depends on how `as' is configured. *Note Machine 4065Dependencies::. 4066 4067 4068File: as.info, Node: Eject, Next: Else, Prev: Double, Up: Pseudo Ops 4069 40707.22 `.eject' 4071============= 4072 4073Force a page break at this point, when generating assembly listings. 4074 4075 4076File: as.info, Node: Else, Next: Elseif, Prev: Eject, Up: Pseudo Ops 4077 40787.23 `.else' 4079============ 4080 4081`.else' is part of the `as' support for conditional assembly; see *Note 4082`.if': If. It marks the beginning of a section of code to be assembled 4083if the condition for the preceding `.if' was false. 4084 4085 4086File: as.info, Node: Elseif, Next: End, Prev: Else, Up: Pseudo Ops 4087 40887.24 `.elseif' 4089============== 4090 4091`.elseif' is part of the `as' support for conditional assembly; see 4092*Note `.if': If. It is shorthand for beginning a new `.if' block that 4093would otherwise fill the entire `.else' section. 4094 4095 4096File: as.info, Node: End, Next: Endef, Prev: Elseif, Up: Pseudo Ops 4097 40987.25 `.end' 4099=========== 4100 4101`.end' marks the end of the assembly file. `as' does not process 4102anything in the file past the `.end' directive. 4103 4104 4105File: as.info, Node: Endef, Next: Endfunc, Prev: End, Up: Pseudo Ops 4106 41077.26 `.endef' 4108============= 4109 4110This directive flags the end of a symbol definition begun with `.def'. 4111 4112 4113File: as.info, Node: Endfunc, Next: Endif, Prev: Endef, Up: Pseudo Ops 4114 41157.27 `.endfunc' 4116=============== 4117 4118`.endfunc' marks the end of a function specified with `.func'. 4119 4120 4121File: as.info, Node: Endif, Next: Equ, Prev: Endfunc, Up: Pseudo Ops 4122 41237.28 `.endif' 4124============= 4125 4126`.endif' is part of the `as' support for conditional assembly; it marks 4127the end of a block of code that is only assembled conditionally. *Note 4128`.if': If. 4129 4130 4131File: as.info, Node: Equ, Next: Equiv, Prev: Endif, Up: Pseudo Ops 4132 41337.29 `.equ SYMBOL, EXPRESSION' 4134============================== 4135 4136This directive sets the value of SYMBOL to EXPRESSION. It is 4137synonymous with `.set'; see *Note `.set': Set. 4138 4139 The syntax for `equ' on the HPPA is `SYMBOL .equ EXPRESSION'. 4140 4141 The syntax for `equ' on the Z80 is `SYMBOL equ EXPRESSION'. On the 4142Z80 it is an error if SYMBOL is already defined, but the symbol is not 4143protected from later redefinition. Compare *Note Equiv::. 4144 4145 4146File: as.info, Node: Equiv, Next: Eqv, Prev: Equ, Up: Pseudo Ops 4147 41487.30 `.equiv SYMBOL, EXPRESSION' 4149================================ 4150 4151The `.equiv' directive is like `.equ' and `.set', except that the 4152assembler will signal an error if SYMBOL is already defined. Note a 4153symbol which has been referenced but not actually defined is considered 4154to be undefined. 4155 4156 Except for the contents of the error message, this is roughly 4157equivalent to 4158 .ifdef SYM 4159 .err 4160 .endif 4161 .equ SYM,VAL 4162 plus it protects the symbol from later redefinition. 4163 4164 4165File: as.info, Node: Eqv, Next: Err, Prev: Equiv, Up: Pseudo Ops 4166 41677.31 `.eqv SYMBOL, EXPRESSION' 4168============================== 4169 4170The `.eqv' directive is like `.equiv', but no attempt is made to 4171evaluate the expression or any part of it immediately. Instead each 4172time the resulting symbol is used in an expression, a snapshot of its 4173current value is taken. 4174 4175 4176File: as.info, Node: Err, Next: Error, Prev: Eqv, Up: Pseudo Ops 4177 41787.32 `.err' 4179=========== 4180 4181If `as' assembles a `.err' directive, it will print an error message 4182and, unless the `-Z' option was used, it will not generate an object 4183file. This can be used to signal an error in conditionally compiled 4184code. 4185 4186 4187File: as.info, Node: Error, Next: Exitm, Prev: Err, Up: Pseudo Ops 4188 41897.33 `.error "STRING"' 4190====================== 4191 4192Similarly to `.err', this directive emits an error, but you can specify 4193a string that will be emitted as the error message. If you don't 4194specify the message, it defaults to `".error directive invoked in 4195source file"'. *Note Error and Warning Messages: Errors. 4196 4197 .error "This code has not been assembled and tested." 4198 4199 4200File: as.info, Node: Exitm, Next: Extern, Prev: Error, Up: Pseudo Ops 4201 42027.34 `.exitm' 4203============= 4204 4205Exit early from the current macro definition. *Note Macro::. 4206 4207 4208File: as.info, Node: Extern, Next: Fail, Prev: Exitm, Up: Pseudo Ops 4209 42107.35 `.extern' 4211============== 4212 4213`.extern' is accepted in the source program--for compatibility with 4214other assemblers--but it is ignored. `as' treats all undefined symbols 4215as external. 4216 4217 4218File: as.info, Node: Fail, Next: File, Prev: Extern, Up: Pseudo Ops 4219 42207.36 `.fail EXPRESSION' 4221======================= 4222 4223Generates an error or a warning. If the value of the EXPRESSION is 500 4224or more, `as' will print a warning message. If the value is less than 4225500, `as' will print an error message. The message will include the 4226value of EXPRESSION. This can occasionally be useful inside complex 4227nested macros or conditional assembly. 4228 4229 4230File: as.info, Node: File, Next: Fill, Prev: Fail, Up: Pseudo Ops 4231 42327.37 `.file' 4233============ 4234 4235There are two different versions of the `.file' directive. Targets 4236that support DWARF2 line number information use the DWARF2 version of 4237`.file'. Other targets use the default version. 4238 4239Default Version 4240--------------- 4241 4242This version of the `.file' directive tells `as' that we are about to 4243start a new logical file. The syntax is: 4244 4245 .file STRING 4246 4247 STRING is the new file name. In general, the filename is recognized 4248whether or not it is surrounded by quotes `"'; but if you wish to 4249specify an empty file name, you must give the quotes-`""'. This 4250statement may go away in future: it is only recognized to be compatible 4251with old `as' programs. 4252 4253DWARF2 Version 4254-------------- 4255 4256When emitting DWARF2 line number information, `.file' assigns filenames 4257to the `.debug_line' file name table. The syntax is: 4258 4259 .file FILENO FILENAME 4260 4261 The FILENO operand should be a unique positive integer to use as the 4262index of the entry in the table. The FILENAME operand is a C string 4263literal enclosed in double quotes. The FILENAME can include directory 4264elements. If it does, then the directory will be added to the 4265directory table and the basename will be added to the file table. 4266 4267 The detail of filename indices is exposed to the user because the 4268filename table is shared with the `.debug_info' section of the DWARF2 4269debugging information, and thus the user must know the exact indices 4270that table entries will have. 4271 4272 If DWARF5 support has been enabled via the `-gdwarf-5' option then 4273an extended version of `.file' is also allowed: 4274 4275 .file FILENO [DIRNAME] FILENAME [md5 VALUE] 4276 4277 With this version a separate directory name is allowed, although if 4278this is used then FILENAME should not contain any directory component, 4279except for FILENO equal to 0: in this case, DIRNAME is expected to be 4280the current directory and FILENAME the currently processed file, and 4281the latter need not be located in the former. In addtion an MD5 hash 4282value of the contents of FILENAME can be provided. This will be stored 4283in the the file table as well, and can be used by tools reading the 4284debug information to verify that the contents of the source file match 4285the contents of the compiled file. 4286 4287 4288File: as.info, Node: Fill, Next: Float, Prev: File, Up: Pseudo Ops 4289 42907.38 `.fill REPEAT , SIZE , VALUE' 4291================================== 4292 4293REPEAT, SIZE and VALUE are absolute expressions. This emits REPEAT 4294copies of SIZE bytes. REPEAT may be zero or more. SIZE may be zero or 4295more, but if it is more than 8, then it is deemed to have the value 8, 4296compatible with other people's assemblers. The contents of each REPEAT 4297bytes is taken from an 8-byte number. The highest order 4 bytes are 4298zero. The lowest order 4 bytes are VALUE rendered in the byte-order of 4299an integer on the computer `as' is assembling for. Each SIZE bytes in 4300a repetition is taken from the lowest order SIZE bytes of this number. 4301Again, this bizarre behavior is compatible with other people's 4302assemblers. 4303 4304 SIZE and VALUE are optional. If the second comma and VALUE are 4305absent, VALUE is assumed zero. If the first comma and following tokens 4306are absent, SIZE is assumed to be 1. 4307 4308 4309File: as.info, Node: Float, Next: Func, Prev: Fill, Up: Pseudo Ops 4310 43117.39 `.float FLONUMS' 4312===================== 4313 4314This directive assembles zero or more flonums, separated by commas. It 4315has the same effect as `.single'. The exact kind of floating point 4316numbers emitted depends on how `as' is configured. *Note Machine 4317Dependencies::. 4318 4319 4320File: as.info, Node: Func, Next: Global, Prev: Float, Up: Pseudo Ops 4321 43227.40 `.func NAME[,LABEL]' 4323========================= 4324 4325`.func' emits debugging information to denote function NAME, and is 4326ignored unless the file is assembled with debugging enabled. Only 4327`--gstabs[+]' is currently supported. LABEL is the entry point of the 4328function and if omitted NAME prepended with the `leading char' is used. 4329`leading char' is usually `_' or nothing, depending on the target. All 4330functions are currently defined to have `void' return type. The 4331function must be terminated with `.endfunc'. 4332 4333 4334File: as.info, Node: Global, Next: Gnu_attribute, Prev: Func, Up: Pseudo Ops 4335 43367.41 `.global SYMBOL', `.globl SYMBOL' 4337====================================== 4338 4339`.global' makes the symbol visible to `ld'. If you define SYMBOL in 4340your partial program, its value is made available to other partial 4341programs that are linked with it. Otherwise, SYMBOL takes its 4342attributes from a symbol of the same name from another file linked into 4343the same program. 4344 4345 Both spellings (`.globl' and `.global') are accepted, for 4346compatibility with other assemblers. 4347 4348 On the HPPA, `.global' is not always enough to make it accessible to 4349other partial programs. You may need the HPPA-only `.EXPORT' directive 4350as well. *Note HPPA Assembler Directives: HPPA Directives. 4351 4352 4353File: as.info, Node: Gnu_attribute, Next: Hidden, Prev: Global, Up: Pseudo Ops 4354 43557.42 `.gnu_attribute TAG,VALUE' 4356=============================== 4357 4358Record a GNU object attribute for this file. *Note Object Attributes::. 4359 4360 4361File: as.info, Node: Hidden, Next: hword, Prev: Gnu_attribute, Up: Pseudo Ops 4362 43637.43 `.hidden NAMES' 4364==================== 4365 4366This is one of the ELF visibility directives. The other two are 4367`.internal' (*note `.internal': Internal.) and `.protected' (*note 4368`.protected': Protected.). 4369 4370 This directive overrides the named symbols default visibility (which 4371is set by their binding: local, global or weak). The directive sets 4372the visibility to `hidden' which means that the symbols are not visible 4373to other components. Such symbols are always considered to be 4374`protected' as well. 4375 4376 4377File: as.info, Node: hword, Next: Ident, Prev: Hidden, Up: Pseudo Ops 4378 43797.44 `.hword EXPRESSIONS' 4380========================= 4381 4382This expects zero or more EXPRESSIONS, and emits a 16 bit number for 4383each. 4384 4385 This directive is a synonym for `.short'; depending on the target 4386architecture, it may also be a synonym for `.word'. 4387 4388 4389File: as.info, Node: Ident, Next: If, Prev: hword, Up: Pseudo Ops 4390 43917.45 `.ident' 4392============= 4393 4394This directive is used by some assemblers to place tags in object 4395files. The behavior of this directive varies depending on the target. 4396When using the a.out object file format, `as' simply accepts the 4397directive for source-file compatibility with existing assemblers, but 4398does not emit anything for it. When using COFF, comments are emitted 4399to the `.comment' or `.rdata' section, depending on the target. When 4400using ELF, comments are emitted to the `.comment' section. 4401 4402 4403File: as.info, Node: If, Next: Incbin, Prev: Ident, Up: Pseudo Ops 4404 44057.46 `.if ABSOLUTE EXPRESSION' 4406============================== 4407 4408`.if' marks the beginning of a section of code which is only considered 4409part of the source program being assembled if the argument (which must 4410be an ABSOLUTE EXPRESSION) is non-zero. The end of the conditional 4411section of code must be marked by `.endif' (*note `.endif': Endif.); 4412optionally, you may include code for the alternative condition, flagged 4413by `.else' (*note `.else': Else.). If you have several conditions to 4414check, `.elseif' may be used to avoid nesting blocks if/else within 4415each subsequent `.else' block. 4416 4417 The following variants of `.if' are also supported: 4418`.ifdef SYMBOL' 4419 Assembles the following section of code if the specified SYMBOL 4420 has been defined. Note a symbol which has been referenced but not 4421 yet defined is considered to be undefined. 4422 4423`.ifb TEXT' 4424 Assembles the following section of code if the operand is blank 4425 (empty). 4426 4427`.ifc STRING1,STRING2' 4428 Assembles the following section of code if the two strings are the 4429 same. The strings may be optionally quoted with single quotes. 4430 If they are not quoted, the first string stops at the first comma, 4431 and the second string stops at the end of the line. Strings which 4432 contain whitespace should be quoted. The string comparison is 4433 case sensitive. 4434 4435`.ifeq ABSOLUTE EXPRESSION' 4436 Assembles the following section of code if the argument is zero. 4437 4438`.ifeqs STRING1,STRING2' 4439 Another form of `.ifc'. The strings must be quoted using double 4440 quotes. 4441 4442`.ifge ABSOLUTE EXPRESSION' 4443 Assembles the following section of code if the argument is greater 4444 than or equal to zero. 4445 4446`.ifgt ABSOLUTE EXPRESSION' 4447 Assembles the following section of code if the argument is greater 4448 than zero. 4449 4450`.ifle ABSOLUTE EXPRESSION' 4451 Assembles the following section of code if the argument is less 4452 than or equal to zero. 4453 4454`.iflt ABSOLUTE EXPRESSION' 4455 Assembles the following section of code if the argument is less 4456 than zero. 4457 4458`.ifnb TEXT' 4459 Like `.ifb', but the sense of the test is reversed: this assembles 4460 the following section of code if the operand is non-blank 4461 (non-empty). 4462 4463`.ifnc STRING1,STRING2.' 4464 Like `.ifc', but the sense of the test is reversed: this assembles 4465 the following section of code if the two strings are not the same. 4466 4467`.ifndef SYMBOL' 4468`.ifnotdef SYMBOL' 4469 Assembles the following section of code if the specified SYMBOL 4470 has not been defined. Both spelling variants are equivalent. 4471 Note a symbol which has been referenced but not yet defined is 4472 considered to be undefined. 4473 4474`.ifne ABSOLUTE EXPRESSION' 4475 Assembles the following section of code if the argument is not 4476 equal to zero (in other words, this is equivalent to `.if'). 4477 4478`.ifnes STRING1,STRING2' 4479 Like `.ifeqs', but the sense of the test is reversed: this 4480 assembles the following section of code if the two strings are not 4481 the same. 4482 4483 4484File: as.info, Node: Incbin, Next: Include, Prev: If, Up: Pseudo Ops 4485 44867.47 `.incbin "FILE"[,SKIP[,COUNT]]' 4487==================================== 4488 4489The `incbin' directive includes FILE verbatim at the current location. 4490You can control the search paths used with the `-I' command-line option 4491(*note Command-Line Options: Invoking.). Quotation marks are required 4492around FILE. 4493 4494 The SKIP argument skips a number of bytes from the start of the 4495FILE. The COUNT argument indicates the maximum number of bytes to 4496read. Note that the data is not aligned in any way, so it is the user's 4497responsibility to make sure that proper alignment is provided both 4498before and after the `incbin' directive. 4499 4500 4501File: as.info, Node: Include, Next: Int, Prev: Incbin, Up: Pseudo Ops 4502 45037.48 `.include "FILE"' 4504====================== 4505 4506This directive provides a way to include supporting files at specified 4507points in your source program. The code from FILE is assembled as if 4508it followed the point of the `.include'; when the end of the included 4509file is reached, assembly of the original file continues. You can 4510control the search paths used with the `-I' command-line option (*note 4511Command-Line Options: Invoking.). Quotation marks are required around 4512FILE. 4513 4514 4515File: as.info, Node: Int, Next: Internal, Prev: Include, Up: Pseudo Ops 4516 45177.49 `.int EXPRESSIONS' 4518======================= 4519 4520Expect zero or more EXPRESSIONS, of any section, separated by commas. 4521For each expression, emit a number that, at run time, is the value of 4522that expression. The byte order and bit size of the number depends on 4523what kind of target the assembly is for. 4524 4525 4526File: as.info, Node: Internal, Next: Irp, Prev: Int, Up: Pseudo Ops 4527 45287.50 `.internal NAMES' 4529====================== 4530 4531This is one of the ELF visibility directives. The other two are 4532`.hidden' (*note `.hidden': Hidden.) and `.protected' (*note 4533`.protected': Protected.). 4534 4535 This directive overrides the named symbols default visibility (which 4536is set by their binding: local, global or weak). The directive sets 4537the visibility to `internal' which means that the symbols are 4538considered to be `hidden' (i.e., not visible to other components), and 4539that some extra, processor specific processing must also be performed 4540upon the symbols as well. 4541 4542 4543File: as.info, Node: Irp, Next: Irpc, Prev: Internal, Up: Pseudo Ops 4544 45457.51 `.irp SYMBOL,VALUES'... 4546============================ 4547 4548Evaluate a sequence of statements assigning different values to SYMBOL. 4549The sequence of statements starts at the `.irp' directive, and is 4550terminated by an `.endr' directive. For each VALUE, SYMBOL is set to 4551VALUE, and the sequence of statements is assembled. If no VALUE is 4552listed, the sequence of statements is assembled once, with SYMBOL set 4553to the null string. To refer to SYMBOL within the sequence of 4554statements, use \SYMBOL. 4555 4556 For example, assembling 4557 4558 .irp param,1,2,3 4559 move d\param,sp@- 4560 .endr 4561 4562 is equivalent to assembling 4563 4564 move d1,sp@- 4565 move d2,sp@- 4566 move d3,sp@- 4567 4568 For some caveats with the spelling of SYMBOL, see also *Note Macro::. 4569 4570 4571File: as.info, Node: Irpc, Next: Lcomm, Prev: Irp, Up: Pseudo Ops 4572 45737.52 `.irpc SYMBOL,VALUES'... 4574============================= 4575 4576Evaluate a sequence of statements assigning different values to SYMBOL. 4577The sequence of statements starts at the `.irpc' directive, and is 4578terminated by an `.endr' directive. For each character in VALUE, 4579SYMBOL is set to the character, and the sequence of statements is 4580assembled. If no VALUE is listed, the sequence of statements is 4581assembled once, with SYMBOL set to the null string. To refer to SYMBOL 4582within the sequence of statements, use \SYMBOL. 4583 4584 For example, assembling 4585 4586 .irpc param,123 4587 move d\param,sp@- 4588 .endr 4589 4590 is equivalent to assembling 4591 4592 move d1,sp@- 4593 move d2,sp@- 4594 move d3,sp@- 4595 4596 For some caveats with the spelling of SYMBOL, see also the discussion 4597at *Note Macro::. 4598 4599 4600File: as.info, Node: Lcomm, Next: Lflags, Prev: Irpc, Up: Pseudo Ops 4601 46027.53 `.lcomm SYMBOL , LENGTH' 4603============================= 4604 4605Reserve LENGTH (an absolute expression) bytes for a local common 4606denoted by SYMBOL. The section and value of SYMBOL are those of the 4607new local common. The addresses are allocated in the bss section, so 4608that at run-time the bytes start off zeroed. SYMBOL is not declared 4609global (*note `.global': Global.), so is normally not visible to `ld'. 4610 4611 Some targets permit a third argument to be used with `.lcomm'. This 4612argument specifies the desired alignment of the symbol in the bss 4613section. 4614 4615 The syntax for `.lcomm' differs slightly on the HPPA. The syntax is 4616`SYMBOL .lcomm, LENGTH'; SYMBOL is optional. 4617 4618 4619File: as.info, Node: Lflags, Next: Line, Prev: Lcomm, Up: Pseudo Ops 4620 46217.54 `.lflags' 4622============== 4623 4624`as' accepts this directive, for compatibility with other assemblers, 4625but ignores it. 4626 4627 4628File: as.info, Node: Line, Next: Linkonce, Prev: Lflags, Up: Pseudo Ops 4629 46307.55 `.line LINE-NUMBER' 4631======================== 4632 4633Change the logical line number. LINE-NUMBER must be an absolute 4634expression. The next line has that logical line number. Therefore any 4635other statements on the current line (after a statement separator 4636character) are reported as on logical line number LINE-NUMBER - 1. One 4637day `as' will no longer support this directive: it is recognized only 4638for compatibility with existing assembler programs. 4639 4640Even though this is a directive associated with the `a.out' or `b.out' 4641object-code formats, `as' still recognizes it when producing COFF 4642output, and treats `.line' as though it were the COFF `.ln' _if_ it is 4643found outside a `.def'/`.endef' pair. 4644 4645 Inside a `.def', `.line' is, instead, one of the directives used by 4646compilers to generate auxiliary symbol information for debugging. 4647 4648 4649File: as.info, Node: Linkonce, Next: List, Prev: Line, Up: Pseudo Ops 4650 46517.56 `.linkonce [TYPE]' 4652======================= 4653 4654Mark the current section so that the linker only includes a single copy 4655of it. This may be used to include the same section in several 4656different object files, but ensure that the linker will only include it 4657once in the final output file. The `.linkonce' pseudo-op must be used 4658for each instance of the section. Duplicate sections are detected 4659based on the section name, so it should be unique. 4660 4661 This directive is only supported by a few object file formats; as of 4662this writing, the only object file format which supports it is the 4663Portable Executable format used on Windows NT. 4664 4665 The TYPE argument is optional. If specified, it must be one of the 4666following strings. For example: 4667 .linkonce same_size 4668 Not all types may be supported on all object file formats. 4669 4670`discard' 4671 Silently discard duplicate sections. This is the default. 4672 4673`one_only' 4674 Warn if there are duplicate sections, but still keep only one copy. 4675 4676`same_size' 4677 Warn if any of the duplicates have different sizes. 4678 4679`same_contents' 4680 Warn if any of the duplicates do not have exactly the same 4681 contents. 4682 4683 4684File: as.info, Node: List, Next: Ln, Prev: Linkonce, Up: Pseudo Ops 4685 46867.57 `.list' 4687============ 4688 4689Control (in conjunction with the `.nolist' directive) whether or not 4690assembly listings are generated. These two directives maintain an 4691internal counter (which is zero initially). `.list' increments the 4692counter, and `.nolist' decrements it. Assembly listings are generated 4693whenever the counter is greater than zero. 4694 4695 By default, listings are disabled. When you enable them (with the 4696`-a' command-line option; *note Command-Line Options: Invoking.), the 4697initial value of the listing counter is one. 4698 4699 4700File: as.info, Node: Ln, Next: Loc, Prev: List, Up: Pseudo Ops 4701 47027.58 `.ln LINE-NUMBER' 4703====================== 4704 4705`.ln' is a synonym for `.line'. 4706 4707 4708File: as.info, Node: Loc, Next: Loc_mark_labels, Prev: Ln, Up: Pseudo Ops 4709 47107.59 `.loc FILENO LINENO [COLUMN] [OPTIONS]' 4711============================================ 4712 4713When emitting DWARF2 line number information, the `.loc' directive will 4714add a row to the `.debug_line' line number matrix corresponding to the 4715immediately following assembly instruction. The FILENO, LINENO, and 4716optional COLUMN arguments will be applied to the `.debug_line' state 4717machine before the row is added. It is an error for the input assembly 4718file to generate a non-empty `.debug_line' and also use `loc' 4719directives. 4720 4721 The OPTIONS are a sequence of the following tokens in any order: 4722 4723`basic_block' 4724 This option will set the `basic_block' register in the 4725 `.debug_line' state machine to `true'. 4726 4727`prologue_end' 4728 This option will set the `prologue_end' register in the 4729 `.debug_line' state machine to `true'. 4730 4731`epilogue_begin' 4732 This option will set the `epilogue_begin' register in the 4733 `.debug_line' state machine to `true'. 4734 4735`is_stmt VALUE' 4736 This option will set the `is_stmt' register in the `.debug_line' 4737 state machine to `value', which must be either 0 or 1. 4738 4739`isa VALUE' 4740 This directive will set the `isa' register in the `.debug_line' 4741 state machine to VALUE, which must be an unsigned integer. 4742 4743`discriminator VALUE' 4744 This directive will set the `discriminator' register in the 4745 `.debug_line' state machine to VALUE, which must be an unsigned 4746 integer. 4747 4748`view VALUE' 4749 This option causes a row to be added to `.debug_line' in reference 4750 to the current address (which might not be the same as that of the 4751 following assembly instruction), and to associate VALUE with the 4752 `view' register in the `.debug_line' state machine. If VALUE is a 4753 label, both the `view' register and the label are set to the 4754 number of prior `.loc' directives at the same program location. 4755 If VALUE is the literal `0', the `view' register is set to zero, 4756 and the assembler asserts that there aren't any prior `.loc' 4757 directives at the same program location. If VALUE is the literal 4758 `-0', the assembler arrange for the `view' register to be reset in 4759 this row, even if there are prior `.loc' directives at the same 4760 program location. 4761 4762 4763 4764File: as.info, Node: Loc_mark_labels, Next: Local, Prev: Loc, Up: Pseudo Ops 4765 47667.60 `.loc_mark_labels ENABLE' 4767============================== 4768 4769When emitting DWARF2 line number information, the `.loc_mark_labels' 4770directive makes the assembler emit an entry to the `.debug_line' line 4771number matrix with the `basic_block' register in the state machine set 4772whenever a code label is seen. The ENABLE argument should be either 1 4773or 0, to enable or disable this function respectively. 4774 4775 4776File: as.info, Node: Local, Next: Long, Prev: Loc_mark_labels, Up: Pseudo Ops 4777 47787.61 `.local NAMES' 4779=================== 4780 4781This directive, which is available for ELF targets, marks each symbol in 4782the comma-separated list of `names' as a local symbol so that it will 4783not be externally visible. If the symbols do not already exist, they 4784will be created. 4785 4786 For targets where the `.lcomm' directive (*note Lcomm::) does not 4787accept an alignment argument, which is the case for most ELF targets, 4788the `.local' directive can be used in combination with `.comm' (*note 4789Comm::) to define aligned local common data. 4790 4791 4792File: as.info, Node: Long, Next: Macro, Prev: Local, Up: Pseudo Ops 4793 47947.62 `.long EXPRESSIONS' 4795======================== 4796 4797`.long' is the same as `.int'. *Note `.int': Int. 4798 4799 4800File: as.info, Node: Macro, Next: MRI, Prev: Long, Up: Pseudo Ops 4801 48027.63 `.macro' 4803============= 4804 4805The commands `.macro' and `.endm' allow you to define macros that 4806generate assembly output. For example, this definition specifies a 4807macro `sum' that puts a sequence of numbers into memory: 4808 4809 .macro sum from=0, to=5 4810 .long \from 4811 .if \to-\from 4812 sum "(\from+1)",\to 4813 .endif 4814 .endm 4815 4816With that definition, `SUM 0,5' is equivalent to this assembly input: 4817 4818 .long 0 4819 .long 1 4820 .long 2 4821 .long 3 4822 .long 4 4823 .long 5 4824 4825`.macro MACNAME' 4826`.macro MACNAME MACARGS ...' 4827 Begin the definition of a macro called MACNAME. If your macro 4828 definition requires arguments, specify their names after the macro 4829 name, separated by commas or spaces. You can qualify the macro 4830 argument to indicate whether all invocations must specify a 4831 non-blank value (through `:`req''), or whether it takes all of the 4832 remaining arguments (through `:`vararg''). You can supply a 4833 default value for any macro argument by following the name with 4834 `=DEFLT'. You cannot define two macros with the same MACNAME 4835 unless it has been subject to the `.purgem' directive (*note 4836 Purgem::) between the two definitions. For example, these are all 4837 valid `.macro' statements: 4838 4839 `.macro comm' 4840 Begin the definition of a macro called `comm', which takes no 4841 arguments. 4842 4843 `.macro plus1 p, p1' 4844 `.macro plus1 p p1' 4845 Either statement begins the definition of a macro called 4846 `plus1', which takes two arguments; within the macro 4847 definition, write `\p' or `\p1' to evaluate the arguments. 4848 4849 `.macro reserve_str p1=0 p2' 4850 Begin the definition of a macro called `reserve_str', with two 4851 arguments. The first argument has a default value, but not 4852 the second. After the definition is complete, you can call 4853 the macro either as `reserve_str A,B' (with `\p1' evaluating 4854 to A and `\p2' evaluating to B), or as `reserve_str ,B' (with 4855 `\p1' evaluating as the default, in this case `0', and `\p2' 4856 evaluating to B). 4857 4858 `.macro m p1:req, p2=0, p3:vararg' 4859 Begin the definition of a macro called `m', with at least 4860 three arguments. The first argument must always have a value 4861 specified, but not the second, which instead has a default 4862 value. The third formal will get assigned all remaining 4863 arguments specified at invocation time. 4864 4865 When you call a macro, you can specify the argument values 4866 either by position, or by keyword. For example, `sum 9,17' 4867 is equivalent to `sum to=17, from=9'. 4868 4869 4870 Note that since each of the MACARGS can be an identifier exactly 4871 as any other one permitted by the target architecture, there may be 4872 occasional problems if the target hand-crafts special meanings to 4873 certain characters when they occur in a special position. For 4874 example, if the colon (`:') is generally permitted to be part of a 4875 symbol name, but the architecture specific code special-cases it 4876 when occurring as the final character of a symbol (to denote a 4877 label), then the macro parameter replacement code will have no way 4878 of knowing that and consider the whole construct (including the 4879 colon) an identifier, and check only this identifier for being the 4880 subject to parameter substitution. So for example this macro 4881 definition: 4882 4883 .macro label l 4884 \l: 4885 .endm 4886 4887 might not work as expected. Invoking `label foo' might not create 4888 a label called `foo' but instead just insert the text `\l:' into 4889 the assembler source, probably generating an error about an 4890 unrecognised identifier. 4891 4892 Similarly problems might occur with the period character (`.') 4893 which is often allowed inside opcode names (and hence identifier 4894 names). So for example constructing a macro to build an opcode 4895 from a base name and a length specifier like this: 4896 4897 .macro opcode base length 4898 \base.\length 4899 .endm 4900 4901 and invoking it as `opcode store l' will not create a `store.l' 4902 instruction but instead generate some kind of error as the 4903 assembler tries to interpret the text `\base.\length'. 4904 4905 There are several possible ways around this problem: 4906 4907 `Insert white space' 4908 If it is possible to use white space characters then this is 4909 the simplest solution. eg: 4910 4911 .macro label l 4912 \l : 4913 .endm 4914 4915 `Use `\()'' 4916 The string `\()' can be used to separate the end of a macro 4917 argument from the following text. eg: 4918 4919 .macro opcode base length 4920 \base\().\length 4921 .endm 4922 4923 `Use the alternate macro syntax mode' 4924 In the alternative macro syntax mode the ampersand character 4925 (`&') can be used as a separator. eg: 4926 4927 .altmacro 4928 .macro label l 4929 l&: 4930 .endm 4931 4932 Note: this problem of correctly identifying string parameters to 4933 pseudo ops also applies to the identifiers used in `.irp' (*note 4934 Irp::) and `.irpc' (*note Irpc::) as well. 4935 4936 Another issue can occur with the actual arguments passed during 4937 macro invocation: Multiple arguments can be separated by blanks or 4938 commas. To have arguments actually contain blanks or commas (or 4939 potentially other non-alpha- numeric characters), individual 4940 arguments will need to be enclosed in either parentheses `()', 4941 square brackets `[]', or double quote `"' characters. The latter 4942 may be the only viable option in certain situations, as only 4943 double quotes are actually stripped while establishing arguments. 4944 It may be important to be aware of two escaping models used when 4945 processing such quoted argument strings: For one two adjacent 4946 double quotes represent a single double quote in the resulting 4947 argument, going along the lines of the stripping of the enclosing 4948 quotes. But then double quotes can also be escaped by a backslash 4949 `\', but this backslash will not be retained in the resulting 4950 actual argument as then seen / used while expanding the macro. 4951 4952 As a consequence to the first of these escaping mechanisms two 4953 string literals intended to be representing separate macro 4954 arguments need to be separated by white space (or, better yet, by 4955 a comma). To state it differently, such adjacent string literals 4956 - even if separated only by a blank - will not be concatenated 4957 when determining macro arguments, even if they're only separated 4958 by white space. This is unlike certain other pseudo ops, e.g. 4959 `.ascii'. 4960 4961`.endm' 4962 Mark the end of a macro definition. 4963 4964`.exitm' 4965 Exit early from the current macro definition. 4966 4967`\@' 4968 `as' maintains a counter of how many macros it has executed in 4969 this pseudo-variable; you can copy that number to your output with 4970 `\@', but _only within a macro definition_. 4971 4972`LOCAL NAME [ , ... ]' 4973 _Warning: `LOCAL' is only available if you select "alternate macro 4974 syntax" with `--alternate' or `.altmacro'._ *Note `.altmacro': 4975 Altmacro. 4976 4977 4978File: as.info, Node: MRI, Next: Noaltmacro, Prev: Macro, Up: Pseudo Ops 4979 49807.64 `.mri VAL' 4981=============== 4982 4983If VAL is non-zero, this tells `as' to enter MRI mode. If VAL is zero, 4984this tells `as' to exit MRI mode. This change affects code assembled 4985until the next `.mri' directive, or until the end of the file. *Note 4986MRI mode: M. 4987 4988 4989File: as.info, Node: Noaltmacro, Next: Nolist, Prev: MRI, Up: Pseudo Ops 4990 49917.65 `.noaltmacro' 4992================== 4993 4994Disable alternate macro mode. *Note Altmacro::. 4995 4996 4997File: as.info, Node: Nolist, Next: Nop, Prev: Noaltmacro, Up: Pseudo Ops 4998 49997.66 `.nolist' 5000============== 5001 5002Control (in conjunction with the `.list' directive) whether or not 5003assembly listings are generated. These two directives maintain an 5004internal counter (which is zero initially). `.list' increments the 5005counter, and `.nolist' decrements it. Assembly listings are generated 5006whenever the counter is greater than zero. 5007 5008 5009File: as.info, Node: Nop, Next: Nops, Prev: Nolist, Up: Pseudo Ops 5010 50117.67 `.nop [SIZE]' 5012================== 5013 5014This directive emits no-op instructions. It is provided on all 5015architectures, allowing the creation of architecture neutral tests 5016involving actual code. The size of the generated instruction is target 5017specific, but if the optional SIZE argument is given and resolves to an 5018absolute positive value at that point in assembly (no forward 5019expressions allowed) then the fewest no-op instructions are emitted 5020that equal or exceed a total SIZE in bytes. `.nop' does affect the 5021generation of DWARF debug line information. Some targets do not 5022support using `.nop' with SIZE. 5023 5024 5025File: as.info, Node: Nops, Next: Octa, Prev: Nop, Up: Pseudo Ops 5026 50277.68 `.nops SIZE[, CONTROL]' 5028============================ 5029 5030This directive emits no-op instructions. It is specific to the Intel 503180386 and AMD x86-64 targets. It takes a SIZE argument and generates 5032SIZE bytes of no-op instructions. SIZE must be absolute and positive. 5033These bytes do not affect the generation of DWARF debug line 5034information. 5035 5036 The optional CONTROL argument specifies a size limit for a single 5037no-op instruction. If not provided then a value of 0 is assumed. The 5038valid values of CONTROL are between 0 and 4 in 16-bit mode, between 0 5039and 7 when tuning for older processors in 32-bit mode, between 0 and 11 5040in 64-bit mode or when tuning for newer processors in 32-bit mode. 5041When 0 is used, the no-op instruction size limit is set to the maximum 5042supported size. 5043 5044 5045File: as.info, Node: Octa, Next: Offset, Prev: Nops, Up: Pseudo Ops 5046 50477.69 `.octa BIGNUMS' 5048==================== 5049 5050This directive expects zero or more bignums, separated by commas. For 5051each bignum, it emits a 16-byte integer. 5052 5053 The term "octa" comes from contexts in which a "word" is two bytes; 5054hence _octa_-word for 16 bytes. 5055 5056 5057File: as.info, Node: Offset, Next: Org, Prev: Octa, Up: Pseudo Ops 5058 50597.70 `.offset LOC' 5060================== 5061 5062Set the location counter to LOC in the absolute section. LOC must be 5063an absolute expression. This directive may be useful for defining 5064symbols with absolute values. Do not confuse it with the `.org' 5065directive. 5066 5067 5068File: as.info, Node: Org, Next: P2align, Prev: Offset, Up: Pseudo Ops 5069 50707.71 `.org NEW-LC , FILL' 5071========================= 5072 5073Advance the location counter of the current section to NEW-LC. NEW-LC 5074is either an absolute expression or an expression with the same section 5075as the current subsection. That is, you can't use `.org' to cross 5076sections: if NEW-LC has the wrong section, the `.org' directive is 5077ignored. To be compatible with former assemblers, if the section of 5078NEW-LC is absolute, `as' issues a warning, then pretends the section of 5079NEW-LC is the same as the current subsection. 5080 5081 `.org' may only increase the location counter, or leave it 5082unchanged; you cannot use `.org' to move the location counter backwards. 5083 5084 Because `as' tries to assemble programs in one pass, NEW-LC may not 5085be undefined. If you really detest this restriction we eagerly await a 5086chance to share your improved assembler. 5087 5088 Beware that the origin is relative to the start of the section, not 5089to the start of the subsection. This is compatible with other people's 5090assemblers. 5091 5092 When the location counter (of the current subsection) is advanced, 5093the intervening bytes are filled with FILL which should be an absolute 5094expression. If the comma and FILL are omitted, FILL defaults to zero. 5095 5096 5097File: as.info, Node: P2align, Next: PopSection, Prev: Org, Up: Pseudo Ops 5098 50997.72 `.p2align[wl] [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]' 5100====================================================== 5101 5102Pad the location counter (in the current subsection) to a particular 5103storage boundary. The first expression (which must be absolute) is the 5104number of low-order zero bits the location counter must have after 5105advancement. For example `.p2align 3' advances the location counter 5106until it is a multiple of 8. If the location counter is already a 5107multiple of 8, no change is needed. If the expression is omitted then a 5108default value of 0 is used, effectively disabling alignment 5109requirements. 5110 5111 The second expression (also absolute) gives the fill value to be 5112stored in the padding bytes. It (and the comma) may be omitted. If it 5113is omitted, the padding bytes are normally zero. However, on most 5114systems, if the section is marked as containing code and the fill value 5115is omitted, the space is filled with no-op instructions. 5116 5117 The third expression is also absolute, and is also optional. If it 5118is present, it is the maximum number of bytes that should be skipped by 5119this alignment directive. If doing the alignment would require 5120skipping more bytes than the specified maximum, then the alignment is 5121not done at all. You can omit the fill value (the second argument) 5122entirely by simply using two commas after the required alignment; this 5123can be useful if you want the alignment to be filled with no-op 5124instructions when appropriate. 5125 5126 The `.p2alignw' and `.p2alignl' directives are variants of the 5127`.p2align' directive. The `.p2alignw' directive treats the fill 5128pattern as a two byte word value. The `.p2alignl' directives treats the 5129fill pattern as a four byte longword value. For example, `.p2alignw 51302,0x368d' will align to a multiple of 4. If it skips two bytes, they 5131will be filled in with the value 0x368d (the exact placement of the 5132bytes depends upon the endianness of the processor). If it skips 1 or 51333 bytes, the fill value is undefined. 5134 5135 5136File: as.info, Node: PopSection, Next: Previous, Prev: P2align, Up: Pseudo Ops 5137 51387.73 `.popsection' 5139================== 5140 5141This is one of the ELF section stack manipulation directives. The 5142others are `.section' (*note Section::), `.subsection' (*note 5143SubSection::), `.pushsection' (*note PushSection::), and `.previous' 5144(*note Previous::). 5145 5146 This directive replaces the current section (and subsection) with 5147the top section (and subsection) on the section stack. This section is 5148popped off the stack. 5149 5150 5151File: as.info, Node: Previous, Next: Print, Prev: PopSection, Up: Pseudo Ops 5152 51537.74 `.previous' 5154================ 5155 5156This is one of the ELF section stack manipulation directives. The 5157others are `.section' (*note Section::), `.subsection' (*note 5158SubSection::), `.pushsection' (*note PushSection::), and `.popsection' 5159(*note PopSection::). 5160 5161 This directive swaps the current section (and subsection) with most 5162recently referenced section/subsection pair prior to this one. Multiple 5163`.previous' directives in a row will flip between two sections (and 5164their subsections). For example: 5165 5166 .section A 5167 .subsection 1 5168 .word 0x1234 5169 .subsection 2 5170 .word 0x5678 5171 .previous 5172 .word 0x9abc 5173 5174 Will place 0x1234 and 0x9abc into subsection 1 and 0x5678 into 5175subsection 2 of section A. Whilst: 5176 5177 .section A 5178 .subsection 1 5179 # Now in section A subsection 1 5180 .word 0x1234 5181 .section B 5182 .subsection 0 5183 # Now in section B subsection 0 5184 .word 0x5678 5185 .subsection 1 5186 # Now in section B subsection 1 5187 .word 0x9abc 5188 .previous 5189 # Now in section B subsection 0 5190 .word 0xdef0 5191 5192 Will place 0x1234 into section A, 0x5678 and 0xdef0 into subsection 51930 of section B and 0x9abc into subsection 1 of section B. 5194 5195 In terms of the section stack, this directive swaps the current 5196section with the top section on the section stack. 5197 5198 5199File: as.info, Node: Print, Next: Protected, Prev: Previous, Up: Pseudo Ops 5200 52017.75 `.print STRING' 5202==================== 5203 5204`as' will print STRING on the standard output during assembly. You 5205must put STRING in double quotes. 5206 5207 5208File: as.info, Node: Protected, Next: Psize, Prev: Print, Up: Pseudo Ops 5209 52107.76 `.protected NAMES' 5211======================= 5212 5213This is one of the ELF visibility directives. The other two are 5214`.hidden' (*note Hidden::) and `.internal' (*note Internal::). 5215 5216 This directive overrides the named symbols default visibility (which 5217is set by their binding: local, global or weak). The directive sets 5218the visibility to `protected' which means that any references to the 5219symbols from within the components that defines them must be resolved 5220to the definition in that component, even if a definition in another 5221component would normally preempt this. 5222 5223 5224File: as.info, Node: Psize, Next: Purgem, Prev: Protected, Up: Pseudo Ops 5225 52267.77 `.psize LINES , COLUMNS' 5227============================= 5228 5229Use this directive to declare the number of lines--and, optionally, the 5230number of columns--to use for each page, when generating listings. 5231 5232 If you do not use `.psize', listings use a default line-count of 60. 5233You may omit the comma and COLUMNS specification; the default width is 5234200 columns. 5235 5236 `as' generates formfeeds whenever the specified number of lines is 5237exceeded (or whenever you explicitly request one, using `.eject'). 5238 5239 If you specify LINES as `0', no formfeeds are generated save those 5240explicitly specified with `.eject'. 5241 5242 5243File: as.info, Node: Purgem, Next: PushSection, Prev: Psize, Up: Pseudo Ops 5244 52457.78 `.purgem NAME' 5246=================== 5247 5248Undefine the macro NAME, so that later uses of the string will not be 5249expanded. *Note Macro::. 5250 5251 5252File: as.info, Node: PushSection, Next: Quad, Prev: Purgem, Up: Pseudo Ops 5253 52547.79 `.pushsection NAME [, SUBSECTION] [, "FLAGS"[, @TYPE[,ARGUMENTS]]]' 5255======================================================================== 5256 5257This is one of the ELF section stack manipulation directives. The 5258others are `.section' (*note Section::), `.subsection' (*note 5259SubSection::), `.popsection' (*note PopSection::), and `.previous' 5260(*note Previous::). 5261 5262 This directive pushes the current section (and subsection) onto the 5263top of the section stack, and then replaces the current section and 5264subsection with `name' and `subsection'. The optional `flags', `type' 5265and `arguments' are treated the same as in the `.section' (*note 5266Section::) directive. 5267 5268 5269File: as.info, Node: Quad, Next: Reloc, Prev: PushSection, Up: Pseudo Ops 5270 52717.80 `.quad BIGNUMS' 5272==================== 5273 5274`.quad' expects zero or more bignums, separated by commas. For each 5275bignum, it emits an 8-byte integer. If the bignum won't fit in 8 5276bytes, it prints a warning message; and just takes the lowest order 8 5277bytes of the bignum. 5278 5279 The term "quad" comes from contexts in which a "word" is two bytes; 5280hence _quad_-word for 8 bytes. 5281 5282 5283File: as.info, Node: Reloc, Next: Rept, Prev: Quad, Up: Pseudo Ops 5284 52857.81 `.reloc OFFSET, RELOC_NAME[, EXPRESSION]' 5286============================================== 5287 5288Generate a relocation at OFFSET of type RELOC_NAME with value 5289EXPRESSION. If OFFSET is a number, the relocation is generated in the 5290current section. If OFFSET is an expression that resolves to a symbol 5291plus offset, the relocation is generated in the given symbol's section. 5292EXPRESSION, if present, must resolve to a symbol plus addend or to an 5293absolute value, but note that not all targets support an addend. e.g. 5294ELF REL targets such as i386 store an addend in the section contents 5295rather than in the relocation. This low level interface does not 5296support addends stored in the section. 5297 5298 5299File: as.info, Node: Rept, Next: Sbttl, Prev: Reloc, Up: Pseudo Ops 5300 53017.82 `.rept COUNT' 5302================== 5303 5304Repeat the sequence of lines between the `.rept' directive and the next 5305`.endr' directive COUNT times. 5306 5307 For example, assembling 5308 5309 .rept 3 5310 .long 0 5311 .endr 5312 5313 is equivalent to assembling 5314 5315 .long 0 5316 .long 0 5317 .long 0 5318 5319 A count of zero is allowed, but nothing is generated. Negative 5320counts are not allowed and if encountered will be treated as if they 5321were zero. 5322 5323 5324File: as.info, Node: Sbttl, Next: Scl, Prev: Rept, Up: Pseudo Ops 5325 53267.83 `.sbttl "SUBHEADING"' 5327========================== 5328 5329Use SUBHEADING as the title (third line, immediately after the title 5330line) when generating assembly listings. 5331 5332 This directive affects subsequent pages, as well as the current page 5333if it appears within ten lines of the top of a page. 5334 5335 5336File: as.info, Node: Scl, Next: Section, Prev: Sbttl, Up: Pseudo Ops 5337 53387.84 `.scl CLASS' 5339================= 5340 5341Set the storage-class value for a symbol. This directive may only be 5342used inside a `.def'/`.endef' pair. Storage class may flag whether a 5343symbol is static or external, or it may record further symbolic 5344debugging information. 5345 5346 5347File: as.info, Node: Section, Next: Set, Prev: Scl, Up: Pseudo Ops 5348 53497.85 `.section NAME' 5350==================== 5351 5352Use the `.section' directive to assemble the following code into a 5353section named NAME. 5354 5355 This directive is only supported for targets that actually support 5356arbitrarily named sections; on `a.out' targets, for example, it is not 5357accepted, even with a standard `a.out' section name. 5358 5359COFF Version 5360------------ 5361 5362 For COFF targets, the `.section' directive is used in one of the 5363following ways: 5364 5365 .section NAME[, "FLAGS"] 5366 .section NAME[, SUBSECTION] 5367 5368 If the optional argument is quoted, it is taken as flags to use for 5369the section. Each flag is a single character. The following flags are 5370recognized: 5371 5372`b' 5373 bss section (uninitialized data) 5374 5375`n' 5376 section is not loaded 5377 5378`w' 5379 writable section 5380 5381`d' 5382 data section 5383 5384`e' 5385 exclude section from linking 5386 5387`r' 5388 read-only section 5389 5390`x' 5391 executable section 5392 5393`s' 5394 shared section (meaningful for PE targets) 5395 5396`a' 5397 ignored. (For compatibility with the ELF version) 5398 5399`y' 5400 section is not readable (meaningful for PE targets) 5401 5402`0-9' 5403 single-digit power-of-two section alignment (GNU extension) 5404 5405 If no flags are specified, the default flags depend upon the section 5406name. If the section name is not recognized, the default will be for 5407the section to be loaded and writable. Note the `n' and `w' flags 5408remove attributes from the section, rather than adding them, so if they 5409are used on their own it will be as if no flags had been specified at 5410all. 5411 5412 If the optional argument to the `.section' directive is not quoted, 5413it is taken as a subsection number (*note Sub-Sections::). 5414 5415ELF Version 5416----------- 5417 5418 This is one of the ELF section stack manipulation directives. The 5419others are `.subsection' (*note SubSection::), `.pushsection' (*note 5420PushSection::), `.popsection' (*note PopSection::), and `.previous' 5421(*note Previous::). 5422 5423 For ELF targets, the `.section' directive is used like this: 5424 5425 .section NAME [, "FLAGS"[, @TYPE[,FLAG_SPECIFIC_ARGUMENTS]]] 5426 5427 If the `--sectname-subst' command-line option is provided, the NAME 5428argument may contain a substitution sequence. Only `%S' is supported at 5429the moment, and substitutes the current section name. For example: 5430 5431 .macro exception_code 5432 .section %S.exception 5433 [exception code here] 5434 .previous 5435 .endm 5436 5437 .text 5438 [code] 5439 exception_code 5440 [...] 5441 5442 .section .init 5443 [init code] 5444 exception_code 5445 [...] 5446 5447 The two `exception_code' invocations above would create the 5448`.text.exception' and `.init.exception' sections respectively. This is 5449useful e.g. to discriminate between ancillary sections that are tied to 5450setup code to be discarded after use from ancillary sections that need 5451to stay resident without having to define multiple `exception_code' 5452macros just for that purpose. 5453 5454 The optional FLAGS argument is a quoted string which may contain any 5455combination of the following characters: 5456 5457`a' 5458 section is allocatable 5459 5460`d' 5461 section is a GNU_MBIND section 5462 5463`e' 5464 section is excluded from executable and shared library. 5465 5466`o' 5467 section references a symbol defined in another section (the 5468 linked-to section) in the same file. 5469 5470`w' 5471 section is writable 5472 5473`x' 5474 section is executable 5475 5476`M' 5477 section is mergeable 5478 5479`S' 5480 section contains zero terminated strings 5481 5482`G' 5483 section is a member of a section group 5484 5485`T' 5486 section is used for thread-local-storage 5487 5488`?' 5489 section is a member of the previously-current section's group, if 5490 any 5491 5492`R' 5493 retained section (apply SHF_GNU_RETAIN to prevent linker garbage 5494 collection, GNU ELF extension) 5495 5496``<number>'' 5497 a numeric value indicating the bits to be set in the ELF section 5498 header's flags field. Note - if one or more of the alphabetic 5499 characters described above is also included in the flags field, 5500 their bit values will be ORed into the resulting value. 5501 5502``<target specific>'' 5503 some targets extend this list with their own flag characters 5504 5505 Note - once a section's flags have been set they cannot be changed. 5506There are a few exceptions to this rule however. Processor and 5507application specific flags can be added to an already defined section. 5508The `.interp', `.strtab' and `.symtab' sections can have the allocate 5509flag (`a') set after they are initially defined, and the 5510`.note-GNU-stack' section may have the executable (`x') flag added. 5511Also note that the `.attach_to_group' directive can be used to add a 5512section to a group even if the section was not originally declared to 5513be part of that group. 5514 5515 The optional TYPE argument may contain one of the following 5516constants: 5517 5518`@progbits' 5519 section contains data 5520 5521`@nobits' 5522 section does not contain data (i.e., section only occupies space) 5523 5524`@note' 5525 section contains data which is used by things other than the 5526 program 5527 5528`@init_array' 5529 section contains an array of pointers to init functions 5530 5531`@fini_array' 5532 section contains an array of pointers to finish functions 5533 5534`@preinit_array' 5535 section contains an array of pointers to pre-init functions 5536 5537`@`<number>'' 5538 a numeric value to be set as the ELF section header's type field. 5539 5540`@`<target specific>'' 5541 some targets extend this list with their own types 5542 5543 Many targets only support the first three section types. The type 5544may be enclosed in double quotes if necessary. 5545 5546 Note on targets where the `@' character is the start of a comment (eg 5547ARM) then another character is used instead. For example the ARM port 5548uses the `%' character. 5549 5550 Note - some sections, eg `.text' and `.data' are considered to be 5551special and have fixed types. Any attempt to declare them with a 5552different type will generate an error from the assembler. 5553 5554 If FLAGS contains the `M' symbol then the TYPE argument must be 5555specified as well as an extra argument--ENTSIZE--like this: 5556 5557 .section NAME , "FLAGS"M, @TYPE, ENTSIZE 5558 5559 Sections with the `M' flag but not `S' flag must contain fixed size 5560constants, each ENTSIZE octets long. Sections with both `M' and `S' 5561must contain zero terminated strings where each character is ENTSIZE 5562bytes long. The linker may remove duplicates within sections with the 5563same name, same entity size and same flags. ENTSIZE must be an 5564absolute expression. For sections with both `M' and `S', a string 5565which is a suffix of a larger string is considered a duplicate. Thus 5566`"def"' will be merged with `"abcdef"'; A reference to the first 5567`"def"' will be changed to a reference to `"abcdef"+3'. 5568 5569 If FLAGS contains the `o' flag, then the TYPE argument must be 5570present along with an additional field like this: 5571 5572 .section NAME,"FLAGS"o,@TYPE,SYMBOLNAME|SECTIONINDEX 5573 5574 The SYMBOLNAME field specifies the symbol name which the section 5575references. Alternatively a numeric SECTIONINDEX can be provided. This 5576is not generally a good idea as section indicies are rarely known at 5577assembly time, but the facility is provided for testing purposes. An 5578index of zero is allowed. It indicates that the linked-to section has 5579already been discarded. 5580 5581 Note: If both the M and O flags are present, then the fields for the 5582Merge flag should come first, like this: 5583 5584 .section NAME,"FLAGS"Mo,@TYPE,ENTSIZE,SYMBOLNAME 5585 5586 If FLAGS contains the `G' symbol then the TYPE argument must be 5587present along with an additional field like this: 5588 5589 .section NAME , "FLAGS"G, @TYPE, GROUPNAME[, LINKAGE] 5590 5591 The GROUPNAME field specifies the name of the section group to which 5592this particular section belongs. The optional linkage field can 5593contain: 5594 5595`comdat' 5596 indicates that only one copy of this section should be retained 5597 5598`.gnu.linkonce' 5599 an alias for comdat 5600 5601 Note: if both the M and G flags are present then the fields for the 5602Merge flag should come first, like this: 5603 5604 .section NAME , "FLAGS"MG, @TYPE, ENTSIZE, GROUPNAME[, LINKAGE] 5605 5606 If both `o' flag and `G' flag are present, then the SYMBOLNAME field 5607for `o' comes first, like this: 5608 5609 .section NAME,"FLAGS"oG,@TYPE,SYMBOLNAME,GROUPNAME[,LINKAGE] 5610 5611 If FLAGS contains the `?' symbol then it may not also contain the 5612`G' symbol and the GROUPNAME or LINKAGE fields should not be present. 5613Instead, `?' says to consider the section that's current before this 5614directive. If that section used `G', then the new section will use `G' 5615with those same GROUPNAME and LINKAGE fields implicitly. If not, then 5616the `?' symbol has no effect. 5617 5618 The optional UNIQUE,`<NUMBER>' argument must come last. It assigns 5619`<NUMBER>' as a unique section ID to distinguish different sections 5620with the same section name like these: 5621 5622 .section NAME,"FLAGS",@TYPE,UNIQUE,`<NUMBER>' 5623 .section NAME,"FLAGS"G,@TYPE,GROUPNAME,[LINKAGE],UNIQUE,`<NUMBER>' 5624 .section NAME,"FLAGS"MG,@TYPE,ENTSIZE,GROUPNAME[,LINKAGE],UNIQUE,`<NUMBER>' 5625 5626 The valid values of `<NUMBER>' are between 0 and 4294967295. 5627 5628 If no flags are specified, the default flags depend upon the section 5629name. If the section name is not recognized, the default will be for 5630the section to have none of the above flags: it will not be allocated 5631in memory, nor writable, nor executable. The section will contain data. 5632 5633 For ELF targets, the assembler supports another type of `.section' 5634directive for compatibility with the Solaris assembler: 5635 5636 .section "NAME"[, FLAGS...] 5637 5638 Note that the section name is quoted. There may be a sequence of 5639comma separated flags: 5640 5641`#alloc' 5642 section is allocatable 5643 5644`#write' 5645 section is writable 5646 5647`#execinstr' 5648 section is executable 5649 5650`#exclude' 5651 section is excluded from executable and shared library. 5652 5653`#tls' 5654 section is used for thread local storage 5655 5656 This directive replaces the current section and subsection. See the 5657contents of the gas testsuite directory `gas/testsuite/gas/elf' for 5658some examples of how this directive and the other section stack 5659directives work. 5660 5661 5662File: as.info, Node: Set, Next: Short, Prev: Section, Up: Pseudo Ops 5663 56647.86 `.set SYMBOL, EXPRESSION' 5665============================== 5666 5667Set the value of SYMBOL to EXPRESSION. This changes SYMBOL's value and 5668type to conform to EXPRESSION. If SYMBOL was flagged as external, it 5669remains flagged (*note Symbol Attributes::). 5670 5671 You may `.set' a symbol many times in the same assembly provided 5672that the values given to the symbol are constants. Values that are 5673based on expressions involving other symbols are allowed, but some 5674targets may restrict this to only being done once per assembly. This 5675is because those targets do not set the addresses of symbols at 5676assembly time, but rather delay the assignment until a final link is 5677performed. This allows the linker a chance to change the code in the 5678files, changing the location of, and the relative distance between, 5679various different symbols. 5680 5681 If you `.set' a global symbol, the value stored in the object file 5682is the last value stored into it. 5683 5684 On Z80 `set' is a real instruction, use `.set' or `SYMBOL defl 5685EXPRESSION' instead. 5686 5687 5688File: as.info, Node: Short, Next: Single, Prev: Set, Up: Pseudo Ops 5689 56907.87 `.short EXPRESSIONS' 5691========================= 5692 5693`.short' is normally the same as `.word'. *Note `.word': Word. 5694 5695 In some configurations, however, `.short' and `.word' generate 5696numbers of different lengths. *Note Machine Dependencies::. 5697 5698 5699File: as.info, Node: Single, Next: Size, Prev: Short, Up: Pseudo Ops 5700 57017.88 `.single FLONUMS' 5702====================== 5703 5704This directive assembles zero or more flonums, separated by commas. It 5705has the same effect as `.float'. The exact kind of floating point 5706numbers emitted depends on how `as' is configured. *Note Machine 5707Dependencies::. 5708 5709 5710File: as.info, Node: Size, Next: Skip, Prev: Single, Up: Pseudo Ops 5711 57127.89 `.size' 5713============ 5714 5715This directive is used to set the size associated with a symbol. 5716 5717COFF Version 5718------------ 5719 5720 For COFF targets, the `.size' directive is only permitted inside 5721`.def'/`.endef' pairs. It is used like this: 5722 5723 .size EXPRESSION 5724 5725ELF Version 5726----------- 5727 5728 For ELF targets, the `.size' directive is used like this: 5729 5730 .size NAME , EXPRESSION 5731 5732 This directive sets the size associated with a symbol NAME. The 5733size in bytes is computed from EXPRESSION which can make use of label 5734arithmetic. This directive is typically used to set the size of 5735function symbols. 5736 5737 5738File: as.info, Node: Skip, Next: Sleb128, Prev: Size, Up: Pseudo Ops 5739 57407.90 `.skip SIZE [,FILL]' 5741========================= 5742 5743This directive emits SIZE bytes, each of value FILL. Both SIZE and 5744FILL are absolute expressions. If the comma and FILL are omitted, FILL 5745is assumed to be zero. This is the same as `.space'. 5746 5747 5748File: as.info, Node: Sleb128, Next: Space, Prev: Skip, Up: Pseudo Ops 5749 57507.91 `.sleb128 EXPRESSIONS' 5751=========================== 5752 5753SLEB128 stands for "signed little endian base 128." This is a compact, 5754variable length representation of numbers used by the DWARF symbolic 5755debugging format. *Note `.uleb128': Uleb128. 5756 5757 5758File: as.info, Node: Space, Next: Stab, Prev: Sleb128, Up: Pseudo Ops 5759 57607.92 `.space SIZE [,FILL]' 5761========================== 5762 5763This directive emits SIZE bytes, each of value FILL. Both SIZE and 5764FILL are absolute expressions. If the comma and FILL are omitted, FILL 5765is assumed to be zero. This is the same as `.skip'. 5766 5767 _Warning:_ `.space' has a completely different meaning for HPPA 5768 targets; use `.block' as a substitute. See `HP9000 Series 800 5769 Assembly Language Reference Manual' (HP 92432-90001) for the 5770 meaning of the `.space' directive. *Note HPPA Assembler 5771 Directives: HPPA Directives, for a summary. 5772 5773 5774File: as.info, Node: Stab, Next: String, Prev: Space, Up: Pseudo Ops 5775 57767.93 `.stabd, .stabn, .stabs' 5777============================= 5778 5779There are three directives that begin `.stab'. All emit symbols (*note 5780Symbols::), for use by symbolic debuggers. The symbols are not entered 5781in the `as' hash table: they cannot be referenced elsewhere in the 5782source file. Up to five fields are required: 5783 5784STRING 5785 This is the symbol's name. It may contain any character except 5786 `\000', so is more general than ordinary symbol names. Some 5787 debuggers used to code arbitrarily complex structures into symbol 5788 names using this field. 5789 5790TYPE 5791 An absolute expression. The symbol's type is set to the low 8 5792 bits of this expression. Any bit pattern is permitted, but `ld' 5793 and debuggers choke on silly bit patterns. 5794 5795OTHER 5796 An absolute expression. The symbol's "other" attribute is set to 5797 the low 8 bits of this expression. 5798 5799DESC 5800 An absolute expression. The symbol's descriptor is set to the low 5801 16 bits of this expression. 5802 5803VALUE 5804 An absolute expression which becomes the symbol's value. 5805 5806 If a warning is detected while reading a `.stabd', `.stabn', or 5807`.stabs' statement, the symbol has probably already been created; you 5808get a half-formed symbol in your object file. This is compatible with 5809earlier assemblers! 5810 5811`.stabd TYPE , OTHER , DESC' 5812 The "name" of the symbol generated is not even an empty string. 5813 It is a null pointer, for compatibility. Older assemblers used a 5814 null pointer so they didn't waste space in object files with empty 5815 strings. 5816 5817 The symbol's value is set to the location counter, relocatably. 5818 When your program is linked, the value of this symbol is the 5819 address of the location counter when the `.stabd' was assembled. 5820 5821`.stabn TYPE , OTHER , DESC , VALUE' 5822 The name of the symbol is set to the empty string `""'. 5823 5824`.stabs STRING , TYPE , OTHER , DESC , VALUE' 5825 All five fields are specified. 5826 5827 5828File: as.info, Node: String, Next: Struct, Prev: Stab, Up: Pseudo Ops 5829 58307.94 `.string' "STR", `.string8' "STR", `.string16' 5831=================================================== 5832 5833"STR", `.string32' "STR", `.string64' "STR" 5834 5835 Copy the characters in STR to the object file. You may specify more 5836than one string to copy, separated by commas. Unless otherwise 5837specified for a particular machine, the assembler marks the end of each 5838string with a 0 byte. You can use any of the escape sequences 5839described in *Note Strings: Strings. 5840 5841 The variants `string16', `string32' and `string64' differ from the 5842`string' pseudo opcode in that each 8-bit character from STR is copied 5843and expanded to 16, 32 or 64 bits respectively. The expanded characters 5844are stored in target endianness byte order. 5845 5846 Example: 5847 .string32 "BYE" 5848 expands to: 5849 .string "B\0\0\0Y\0\0\0E\0\0\0" /* On little endian targets. */ 5850 .string "\0\0\0B\0\0\0Y\0\0\0E" /* On big endian targets. */ 5851 5852 5853File: as.info, Node: Struct, Next: SubSection, Prev: String, Up: Pseudo Ops 5854 58557.95 `.struct EXPRESSION' 5856========================= 5857 5858Switch to the absolute section, and set the section offset to 5859EXPRESSION, which must be an absolute expression. You might use this 5860as follows: 5861 .struct 0 5862 field1: 5863 .struct field1 + 4 5864 field2: 5865 .struct field2 + 4 5866 field3: 5867 This would define the symbol `field1' to have the value 0, the symbol 5868`field2' to have the value 4, and the symbol `field3' to have the value 58698. Assembly would be left in the absolute section, and you would need 5870to use a `.section' directive of some sort to change to some other 5871section before further assembly. 5872 5873 5874File: as.info, Node: SubSection, Next: Symver, Prev: Struct, Up: Pseudo Ops 5875 58767.96 `.subsection NAME' 5877======================= 5878 5879This is one of the ELF section stack manipulation directives. The 5880others are `.section' (*note Section::), `.pushsection' (*note 5881PushSection::), `.popsection' (*note PopSection::), and `.previous' 5882(*note Previous::). 5883 5884 This directive replaces the current subsection with `name'. The 5885current section is not changed. The replaced subsection is put onto 5886the section stack in place of the then current top of stack subsection. 5887 5888 5889File: as.info, Node: Symver, Next: Tag, Prev: SubSection, Up: Pseudo Ops 5890 58917.97 `.symver' 5892============== 5893 5894Use the `.symver' directive to bind symbols to specific version nodes 5895within a source file. This is only supported on ELF platforms, and is 5896typically used when assembling files to be linked into a shared library. 5897There are cases where it may make sense to use this in objects to be 5898bound into an application itself so as to override a versioned symbol 5899from a shared library. 5900 5901 For ELF targets, the `.symver' directive can be used like this: 5902 .symver NAME, NAME2@NODENAME[ ,VISIBILITY] 5903 If the original symbol NAME is defined within the file being 5904assembled, the `.symver' directive effectively creates a symbol alias 5905with the name NAME2@NODENAME, and in fact the main reason that we just 5906don't try and create a regular alias is that the @ character isn't 5907permitted in symbol names. The NAME2 part of the name is the actual 5908name of the symbol by which it will be externally referenced. The name 5909NAME itself is merely a name of convenience that is used so that it is 5910possible to have definitions for multiple versions of a function within 5911a single source file, and so that the compiler can unambiguously know 5912which version of a function is being mentioned. The NODENAME portion 5913of the alias should be the name of a node specified in the version 5914script supplied to the linker when building a shared library. If you 5915are attempting to override a versioned symbol from a shared library, 5916then NODENAME should correspond to the nodename of the symbol you are 5917trying to override. The optional argument VISIBILITY updates the 5918visibility of the original symbol. The valid visibilities are `local', 5919`hidden', and `remove'. The `local' visibility makes the original 5920symbol a local symbol (*note Local::). The `hidden' visibility sets 5921the visibility of the original symbol to `hidden' (*note Hidden::). 5922The `remove' visibility removes the original symbol from the symbol 5923table. If visibility isn't specified, the original symbol is unchanged. 5924 5925 If the symbol NAME is not defined within the file being assembled, 5926all references to NAME will be changed to NAME2@NODENAME. If no 5927reference to NAME is made, NAME2@NODENAME will be removed from the 5928symbol table. 5929 5930 Another usage of the `.symver' directive is: 5931 .symver NAME, NAME2@@NODENAME 5932 In this case, the symbol NAME must exist and be defined within the 5933file being assembled. It is similar to NAME2@NODENAME. The difference 5934is NAME2@@NODENAME will also be used to resolve references to NAME2 by 5935the linker. 5936 5937 The third usage of the `.symver' directive is: 5938 .symver NAME, NAME2@@@NODENAME 5939 When NAME is not defined within the file being assembled, it is 5940treated as NAME2@NODENAME. When NAME is defined within the file being 5941assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME. 5942 5943 5944File: as.info, Node: Tag, Next: Text, Prev: Symver, Up: Pseudo Ops 5945 59467.98 `.tag STRUCTNAME' 5947====================== 5948 5949This directive is generated by compilers to include auxiliary debugging 5950information in the symbol table. It is only permitted inside 5951`.def'/`.endef' pairs. Tags are used to link structure definitions in 5952the symbol table with instances of those structures. 5953 5954 5955File: as.info, Node: Text, Next: Title, Prev: Tag, Up: Pseudo Ops 5956 59577.99 `.text SUBSECTION' 5958======================= 5959 5960Tells `as' to assemble the following statements onto the end of the 5961text subsection numbered SUBSECTION, which is an absolute expression. 5962If SUBSECTION is omitted, subsection number zero is used. 5963 5964 5965File: as.info, Node: Title, Next: Tls_common, Prev: Text, Up: Pseudo Ops 5966 59677.100 `.title "HEADING"' 5968======================== 5969 5970Use HEADING as the title (second line, immediately after the source 5971file name and pagenumber) when generating assembly listings. 5972 5973 This directive affects subsequent pages, as well as the current page 5974if it appears within ten lines of the top of a page. 5975 5976 5977File: as.info, Node: Tls_common, Next: Type, Prev: Title, Up: Pseudo Ops 5978 59797.101 `.tls_common SYMBOL, LENGTH[, ALIGNMENT]' 5980=============================================== 5981 5982This directive behaves in the same way as the `.comm' directive (*note 5983Comm::) except that SYMBOL has type of STT_TLS instead of STT_OBJECT. 5984 5985 5986File: as.info, Node: Type, Next: Uleb128, Prev: Tls_common, Up: Pseudo Ops 5987 59887.102 `.type' 5989============= 5990 5991This directive is used to set the type of a symbol. 5992 5993COFF Version 5994------------ 5995 5996 For COFF targets, this directive is permitted only within 5997`.def'/`.endef' pairs. It is used like this: 5998 5999 .type INT 6000 6001 This records the integer INT as the type attribute of a symbol table 6002entry. 6003 6004ELF Version 6005----------- 6006 6007 For ELF targets, the `.type' directive is used like this: 6008 6009 .type NAME , TYPE DESCRIPTION 6010 6011 This sets the type of symbol NAME to be either a function symbol or 6012an object symbol. There are five different syntaxes supported for the 6013TYPE DESCRIPTION field, in order to provide compatibility with various 6014other assemblers. 6015 6016 Because some of the characters used in these syntaxes (such as `@' 6017and `#') are comment characters for some architectures, some of the 6018syntaxes below do not work on all architectures. The first variant 6019will be accepted by the GNU assembler on all architectures so that 6020variant should be used for maximum portability, if you do not need to 6021assemble your code with other assemblers. 6022 6023 The syntaxes supported are: 6024 6025 .type <name> STT_<TYPE_IN_UPPER_CASE> 6026 .type <name>,#<type> 6027 .type <name>,@<type> 6028 .type <name>,%<type> 6029 .type <name>,"<type>" 6030 6031 The types supported are: 6032 6033`STT_FUNC' 6034`function' 6035 Mark the symbol as being a function name. 6036 6037`STT_GNU_IFUNC' 6038`gnu_indirect_function' 6039 Mark the symbol as an indirect function when evaluated during reloc 6040 processing. (This is only supported on assemblers targeting GNU 6041 systems). 6042 6043`STT_OBJECT' 6044`object' 6045 Mark the symbol as being a data object. 6046 6047`STT_TLS' 6048`tls_object' 6049 Mark the symbol as being a thread-local data object. 6050 6051`STT_COMMON' 6052`common' 6053 Mark the symbol as being a common data object. 6054 6055`STT_NOTYPE' 6056`notype' 6057 Does not mark the symbol in any way. It is supported just for 6058 completeness. 6059 6060`gnu_unique_object' 6061 Marks the symbol as being a globally unique data object. The 6062 dynamic linker will make sure that in the entire process there is 6063 just one symbol with this name and type in use. (This is only 6064 supported on assemblers targeting GNU systems). 6065 6066 6067 Changing between incompatible types other than from/to STT_NOTYPE 6068will result in a diagnostic. An intermediate change to STT_NOTYPE will 6069silence this. 6070 6071 Note: Some targets support extra types in addition to those listed 6072above. 6073 6074 6075File: as.info, Node: Uleb128, Next: Val, Prev: Type, Up: Pseudo Ops 6076 60777.103 `.uleb128 EXPRESSIONS' 6078============================ 6079 6080ULEB128 stands for "unsigned little endian base 128." This is a 6081compact, variable length representation of numbers used by the DWARF 6082symbolic debugging format. *Note `.sleb128': Sleb128. 6083 6084 6085File: as.info, Node: Val, Next: Version, Prev: Uleb128, Up: Pseudo Ops 6086 60877.104 `.val ADDR' 6088================= 6089 6090This directive, permitted only within `.def'/`.endef' pairs, records 6091the address ADDR as the value attribute of a symbol table entry. 6092 6093 6094File: as.info, Node: Version, Next: VTableEntry, Prev: Val, Up: Pseudo Ops 6095 60967.105 `.version "STRING"' 6097========================= 6098 6099This directive creates a `.note' section and places into it an ELF 6100formatted note of type NT_VERSION. The note's name is set to `string'. 6101 6102 6103File: as.info, Node: VTableEntry, Next: VTableInherit, Prev: Version, Up: Pseudo Ops 6104 61057.106 `.vtable_entry TABLE, OFFSET' 6106=================================== 6107 6108This directive finds or creates a symbol `table' and creates a 6109`VTABLE_ENTRY' relocation for it with an addend of `offset'. 6110 6111 6112File: as.info, Node: VTableInherit, Next: Warning, Prev: VTableEntry, Up: Pseudo Ops 6113 61147.107 `.vtable_inherit CHILD, PARENT' 6115===================================== 6116 6117This directive finds the symbol `child' and finds or creates the symbol 6118`parent' and then creates a `VTABLE_INHERIT' relocation for the parent 6119whose addend is the value of the child symbol. As a special case the 6120parent name of `0' is treated as referring to the `*ABS*' section. 6121 6122 6123File: as.info, Node: Warning, Next: Weak, Prev: VTableInherit, Up: Pseudo Ops 6124 61257.108 `.warning "STRING"' 6126========================= 6127 6128Similar to the directive `.error' (*note `.error "STRING"': Error.), 6129but just emits a warning. 6130 6131 6132File: as.info, Node: Weak, Next: Weakref, Prev: Warning, Up: Pseudo Ops 6133 61347.109 `.weak NAMES' 6135=================== 6136 6137This directive sets the weak attribute on the comma separated list of 6138symbol `names'. If the symbols do not already exist, they will be 6139created. 6140 6141 On COFF targets other than PE, weak symbols are a GNU extension. 6142This directive sets the weak attribute on the comma separated list of 6143symbol `names'. If the symbols do not already exist, they will be 6144created. 6145 6146 On the PE target, weak symbols are supported natively as weak 6147aliases. When a weak symbol is created that is not an alias, GAS 6148creates an alternate symbol to hold the default value. 6149 6150 6151File: as.info, Node: Weakref, Next: Word, Prev: Weak, Up: Pseudo Ops 6152 61537.110 `.weakref ALIAS, TARGET' 6154============================== 6155 6156This directive creates an alias to the target symbol that enables the 6157symbol to be referenced with weak-symbol semantics, but without 6158actually making it weak. If direct references or definitions of the 6159symbol are present, then the symbol will not be weak, but if all 6160references to it are through weak references, the symbol will be marked 6161as weak in the symbol table. 6162 6163 The effect is equivalent to moving all references to the alias to a 6164separate assembly source file, renaming the alias to the symbol in it, 6165declaring the symbol as weak there, and running a reloadable link to 6166merge the object files resulting from the assembly of the new source 6167file and the old source file that had the references to the alias 6168removed. 6169 6170 The alias itself never makes to the symbol table, and is entirely 6171handled within the assembler. 6172 6173 6174File: as.info, Node: Word, Next: Zero, Prev: Weakref, Up: Pseudo Ops 6175 61767.111 `.word EXPRESSIONS' 6177========================= 6178 6179This directive expects zero or more EXPRESSIONS, of any section, 6180separated by commas. 6181 6182 The size of the number emitted, and its byte order, depend on what 6183target computer the assembly is for. 6184 6185 _Warning: Special Treatment to support Compilers_ 6186 6187 Machines with a 32-bit address space, but that do less than 32-bit 6188addressing, require the following special treatment. If the machine of 6189interest to you does 32-bit addressing (or doesn't require it; *note 6190Machine Dependencies::), you can ignore this issue. 6191 6192 In order to assemble compiler output into something that works, `as' 6193occasionally does strange things to `.word' directives. Directives of 6194the form `.word sym1-sym2' are often emitted by compilers as part of 6195jump tables. Therefore, when `as' assembles a directive of the form 6196`.word sym1-sym2', and the difference between `sym1' and `sym2' does 6197not fit in 16 bits, `as' creates a "secondary jump table", immediately 6198before the next label. This secondary jump table is preceded by a 6199short-jump to the first byte after the secondary table. This 6200short-jump prevents the flow of control from accidentally falling into 6201the new table. Inside the table is a long-jump to `sym2'. The 6202original `.word' contains `sym1' minus the address of the long-jump to 6203`sym2'. 6204 6205 If there were several occurrences of `.word sym1-sym2' before the 6206secondary jump table, all of them are adjusted. If there was a `.word 6207sym3-sym4', that also did not fit in sixteen bits, a long-jump to 6208`sym4' is included in the secondary jump table, and the `.word' 6209directives are adjusted to contain `sym3' minus the address of the 6210long-jump to `sym4'; and so on, for as many entries in the original 6211jump table as necessary. 6212 6213 6214File: as.info, Node: Zero, Next: 2byte, Prev: Word, Up: Pseudo Ops 6215 62167.112 `.zero SIZE' 6217================== 6218 6219This directive emits SIZE 0-valued bytes. SIZE must be an absolute 6220expression. This directive is actually an alias for the `.skip' 6221directive so it can take an optional second argument of the value to 6222store in the bytes instead of zero. Using `.zero' in this way would be 6223confusing however. 6224 6225 6226File: as.info, Node: 2byte, Next: 4byte, Prev: Zero, Up: Pseudo Ops 6227 62287.113 `.2byte EXPRESSION [, EXPRESSION]*' 6229========================================= 6230 6231This directive expects zero or more expressions, separated by commas. 6232If there are no expressions then the directive does nothing. Otherwise 6233each expression is evaluated in turn and placed in the next two bytes 6234of the current output section, using the endian model of the target. 6235If an expression will not fit in two bytes, a warning message is 6236displayed and the least significant two bytes of the expression's value 6237are used. If an expression cannot be evaluated at assembly time then 6238relocations will be generated in order to compute the value at link 6239time. 6240 6241 This directive does not apply any alignment before or after 6242inserting the values. As a result of this, if relocations are 6243generated, they may be different from those used for inserting values 6244with a guaranteed alignment. 6245 6246 6247File: as.info, Node: 4byte, Next: 8byte, Prev: 2byte, Up: Pseudo Ops 6248 62497.114 `.4byte EXPRESSION [, EXPRESSION]*' 6250========================================= 6251 6252Like the `.2byte' directive, except that it inserts unaligned, four byte 6253long values into the output. 6254 6255 6256File: as.info, Node: 8byte, Next: Deprecated, Prev: 4byte, Up: Pseudo Ops 6257 62587.115 `.8byte EXPRESSION [, EXPRESSION]*' 6259========================================= 6260 6261Like the `.2byte' directive, except that it inserts unaligned, eight 6262byte long bignum values into the output. 6263 6264 6265File: as.info, Node: Deprecated, Prev: 8byte, Up: Pseudo Ops 6266 62677.116 Deprecated Directives 6268=========================== 6269 6270One day these directives won't work. They are included for 6271compatibility with older assemblers. 6272.abort 6273 6274.line 6275 6276 6277File: as.info, Node: Object Attributes, Next: Machine Dependencies, Prev: Pseudo Ops, Up: Top 6278 62798 Object Attributes 6280******************* 6281 6282`as' assembles source files written for a specific architecture into 6283object files for that architecture. But not all object files are alike. 6284Many architectures support incompatible variations. For instance, 6285floating point arguments might be passed in floating point registers if 6286the object file requires hardware floating point support--or floating 6287point arguments might be passed in integer registers if the object file 6288supports processors with no hardware floating point unit. Or, if two 6289objects are built for different generations of the same architecture, 6290the combination may require the newer generation at run-time. 6291 6292 This information is useful during and after linking. At link time, 6293`ld' can warn about incompatible object files. After link time, tools 6294like `gdb' can use it to process the linked file correctly. 6295 6296 Compatibility information is recorded as a series of object 6297attributes. Each attribute has a "vendor", "tag", and "value". The 6298vendor is a string, and indicates who sets the meaning of the tag. The 6299tag is an integer, and indicates what property the attribute describes. 6300The value may be a string or an integer, and indicates how the 6301property affects this object. Missing attributes are the same as 6302attributes with a zero value or empty string value. 6303 6304 Object attributes were developed as part of the ABI for the ARM 6305Architecture. The file format is documented in `ELF for the ARM 6306Architecture'. 6307 6308* Menu: 6309 6310* GNU Object Attributes:: GNU Object Attributes 6311* Defining New Object Attributes:: Defining New Object Attributes 6312 6313 6314File: as.info, Node: GNU Object Attributes, Next: Defining New Object Attributes, Up: Object Attributes 6315 63168.1 GNU Object Attributes 6317========================= 6318 6319The `.gnu_attribute' directive records an object attribute with vendor 6320`gnu'. 6321 6322 Except for `Tag_compatibility', which has both an integer and a 6323string for its value, GNU attributes have a string value if the tag 6324number is odd and an integer value if the tag number is even. The 6325second bit (`TAG & 2' is set for architecture-independent attributes 6326and clear for architecture-dependent ones. 6327 63288.1.1 Common GNU attributes 6329--------------------------- 6330 6331These attributes are valid on all architectures. 6332 6333Tag_compatibility (32) 6334 The compatibility attribute takes an integer flag value and a 6335 vendor name. If the flag value is 0, the file is compatible with 6336 other toolchains. If it is 1, then the file is only compatible 6337 with the named toolchain. If it is greater than 1, the file can 6338 only be processed by other toolchains under some private 6339 arrangement indicated by the flag value and the vendor name. 6340 63418.1.2 M680x0 Attributes 6342----------------------- 6343 6344Tag_GNU_M68K_ABI_FP (4) 6345 The floating-point ABI used by this object file. The value will 6346 be: 6347 6348 * 0 for files not affected by the floating-point ABI. 6349 6350 * 1 for files using double-precision hardware floating-point 6351 ABI. 6352 6353 * 2 for files using the software floating-point ABI. 6354 63558.1.3 MIPS Attributes 6356--------------------- 6357 6358Tag_GNU_MIPS_ABI_FP (4) 6359 The floating-point ABI used by this object file. The value will 6360 be: 6361 6362 * 0 for files not affected by the floating-point ABI. 6363 6364 * 1 for files using the hardware floating-point ABI with a 6365 standard double-precision FPU. 6366 6367 * 2 for files using the hardware floating-point ABI with a 6368 single-precision FPU. 6369 6370 * 3 for files using the software floating-point ABI. 6371 6372 * 4 for files using the deprecated hardware floating-point ABI 6373 which used 64-bit floating-point registers, 32-bit 6374 general-purpose registers and increased the number of 6375 callee-saved floating-point registers. 6376 6377 * 5 for files using the hardware floating-point ABI with a 6378 double-precision FPU with either 32-bit or 64-bit 6379 floating-point registers and 32-bit general-purpose registers. 6380 6381 * 6 for files using the hardware floating-point ABI with 64-bit 6382 floating-point registers and 32-bit general-purpose registers. 6383 6384 * 7 for files using the hardware floating-point ABI with 64-bit 6385 floating-point registers, 32-bit general-purpose registers 6386 and a rule that forbids the direct use of odd-numbered 6387 single-precision floating-point registers. 6388 63898.1.4 PowerPC Attributes 6390------------------------ 6391 6392Tag_GNU_Power_ABI_FP (4) 6393 The floating-point ABI used by this object file. The value will 6394 be: 6395 6396 * 0 for files not affected by the floating-point ABI. 6397 6398 * 1 for files using double-precision hardware floating-point 6399 ABI. 6400 6401 * 2 for files using the software floating-point ABI. 6402 6403 * 3 for files using single-precision hardware floating-point 6404 ABI. 6405 6406Tag_GNU_Power_ABI_Vector (8) 6407 The vector ABI used by this object file. The value will be: 6408 6409 * 0 for files not affected by the vector ABI. 6410 6411 * 1 for files using general purpose registers to pass vectors. 6412 6413 * 2 for files using AltiVec registers to pass vectors. 6414 6415 * 3 for files using SPE registers to pass vectors. 6416 64178.1.5 IBM z Systems Attributes 6418------------------------------ 6419 6420Tag_GNU_S390_ABI_Vector (8) 6421 The vector ABI used by this object file. The value will be: 6422 6423 * 0 for files not affected by the vector ABI. 6424 6425 * 1 for files using software vector ABI. 6426 6427 * 2 for files using hardware vector ABI. 6428 64298.1.6 MSP430 Attributes 6430----------------------- 6431 6432Tag_GNU_MSP430_Data_Region (4) 6433 The data region used by this object file. The value will be: 6434 6435 * 0 for files not using the large memory model. 6436 6437 * 1 for files which have been compiled with the condition that 6438 all data is in the lower memory region, i.e. below address 6439 0x10000. 6440 6441 * 2 for files which allow data to be placed in the full 20-bit 6442 memory range. 6443 6444 6445File: as.info, Node: Defining New Object Attributes, Prev: GNU Object Attributes, Up: Object Attributes 6446 64478.2 Defining New Object Attributes 6448================================== 6449 6450If you want to define a new GNU object attribute, here are the places 6451you will need to modify. New attributes should be discussed on the 6452`binutils' mailing list. 6453 6454 * This manual, which is the official register of attributes. 6455 6456 * The header for your architecture `include/elf', to define the tag. 6457 6458 * The `bfd' support file for your architecture, to merge the 6459 attribute and issue any appropriate link warnings. 6460 6461 * Test cases in `ld/testsuite' for merging and link warnings. 6462 6463 * `binutils/readelf.c' to display your attribute. 6464 6465 * GCC, if you want the compiler to mark the attribute automatically. 6466 6467 6468File: as.info, Node: Machine Dependencies, Next: Reporting Bugs, Prev: Object Attributes, Up: Top 6469 64709 Machine Dependent Features 6471**************************** 6472 6473The machine instruction sets are (almost by definition) different on 6474each machine where `as' runs. Floating point representations vary as 6475well, and `as' often supports a few additional directives or 6476command-line options for compatibility with other assemblers on a 6477particular platform. Finally, some versions of `as' support special 6478pseudo-instructions for branch optimization. 6479 6480 This chapter discusses most of these differences, though it does not 6481include details on any machine's instruction set. For details on that 6482subject, see the hardware manufacturer's manual. 6483 6484* Menu: 6485 6486 6487* AArch64-Dependent:: AArch64 Dependent Features 6488 6489* Alpha-Dependent:: Alpha Dependent Features 6490 6491* ARC-Dependent:: ARC Dependent Features 6492 6493* ARM-Dependent:: ARM Dependent Features 6494 6495* AVR-Dependent:: AVR Dependent Features 6496 6497* Blackfin-Dependent:: Blackfin Dependent Features 6498 6499* BPF-Dependent:: BPF Dependent Features 6500 6501* CR16-Dependent:: CR16 Dependent Features 6502 6503* CRIS-Dependent:: CRIS Dependent Features 6504 6505* C-SKY-Dependent:: C-SKY Dependent Features 6506 6507* D10V-Dependent:: D10V Dependent Features 6508 6509* D30V-Dependent:: D30V Dependent Features 6510 6511* Epiphany-Dependent:: EPIPHANY Dependent Features 6512 6513* H8/300-Dependent:: Renesas H8/300 Dependent Features 6514 6515* HPPA-Dependent:: HPPA Dependent Features 6516 6517* i386-Dependent:: Intel 80386 and AMD x86-64 Dependent Features 6518 6519* IA-64-Dependent:: Intel IA-64 Dependent Features 6520 6521* IP2K-Dependent:: IP2K Dependent Features 6522 6523* LM32-Dependent:: LM32 Dependent Features 6524 6525* M32C-Dependent:: M32C Dependent Features 6526 6527* M32R-Dependent:: M32R Dependent Features 6528 6529* M68K-Dependent:: M680x0 Dependent Features 6530 6531* M68HC11-Dependent:: M68HC11 and 68HC12 Dependent Features 6532 6533* S12Z-Dependent:: S12Z Dependent Features 6534 6535* Meta-Dependent :: Meta Dependent Features 6536 6537* MicroBlaze-Dependent:: MICROBLAZE Dependent Features 6538 6539* MIPS-Dependent:: MIPS Dependent Features 6540 6541* MMIX-Dependent:: MMIX Dependent Features 6542 6543* MSP430-Dependent:: MSP430 Dependent Features 6544 6545* NDS32-Dependent:: Andes NDS32 Dependent Features 6546 6547* NiosII-Dependent:: Altera Nios II Dependent Features 6548 6549* NS32K-Dependent:: NS32K Dependent Features 6550 6551* OpenRISC-Dependent:: OpenRISC 1000 Features 6552 6553* PDP-11-Dependent:: PDP-11 Dependent Features 6554 6555* PJ-Dependent:: picoJava Dependent Features 6556 6557* PPC-Dependent:: PowerPC Dependent Features 6558 6559* PRU-Dependent:: PRU Dependent Features 6560 6561* RISC-V-Dependent:: RISC-V Dependent Features 6562 6563* RL78-Dependent:: RL78 Dependent Features 6564 6565* RX-Dependent:: RX Dependent Features 6566 6567* S/390-Dependent:: IBM S/390 Dependent Features 6568 6569* SCORE-Dependent:: SCORE Dependent Features 6570 6571* SH-Dependent:: Renesas / SuperH SH Dependent Features 6572 6573* Sparc-Dependent:: SPARC Dependent Features 6574 6575* TIC54X-Dependent:: TI TMS320C54x Dependent Features 6576 6577* TIC6X-Dependent :: TI TMS320C6x Dependent Features 6578 6579* TILE-Gx-Dependent :: Tilera TILE-Gx Dependent Features 6580 6581* TILEPro-Dependent :: Tilera TILEPro Dependent Features 6582 6583* V850-Dependent:: V850 Dependent Features 6584 6585* Vax-Dependent:: VAX Dependent Features 6586 6587* Visium-Dependent:: Visium Dependent Features 6588 6589* WebAssembly-Dependent:: WebAssembly Dependent Features 6590 6591* XGATE-Dependent:: XGATE Dependent Features 6592 6593* XSTORMY16-Dependent:: XStormy16 Dependent Features 6594 6595* Xtensa-Dependent:: Xtensa Dependent Features 6596 6597* Z80-Dependent:: Z80 Dependent Features 6598 6599* Z8000-Dependent:: Z8000 Dependent Features 6600 6601 6602File: as.info, Node: AArch64-Dependent, Next: Alpha-Dependent, Up: Machine Dependencies 6603 66049.1 AArch64 Dependent Features 6605============================== 6606 6607* Menu: 6608 6609* AArch64 Options:: Options 6610* AArch64 Extensions:: Extensions 6611* AArch64 Syntax:: Syntax 6612* AArch64 Floating Point:: Floating Point 6613* AArch64 Directives:: AArch64 Machine Directives 6614* AArch64 Opcodes:: Opcodes 6615* AArch64 Mapping Symbols:: Mapping Symbols 6616 6617 6618File: as.info, Node: AArch64 Options, Next: AArch64 Extensions, Up: AArch64-Dependent 6619 66209.1.1 Options 6621------------- 6622 6623`-EB' 6624 This option specifies that the output generated by the assembler 6625 should be marked as being encoded for a big-endian processor. 6626 6627`-EL' 6628 This option specifies that the output generated by the assembler 6629 should be marked as being encoded for a little-endian processor. 6630 6631`-mabi=ABI' 6632 Specify which ABI the source code uses. The recognized arguments 6633 are: `ilp32' and `lp64', which decides the generated object file 6634 in ELF32 and ELF64 format respectively. The default is `lp64'. 6635 6636`-mcpu=PROCESSOR[+EXTENSION...]' 6637 This option specifies the target processor. The assembler will 6638 issue an error message if an attempt is made to assemble an 6639 instruction which will not execute on the target processor. The 6640 following processor names are recognized: `cortex-a34', 6641 `cortex-a35', `cortex-a53', `cortex-a55', `cortex-a57', 6642 `cortex-a65', `cortex-a65ae', `cortex-a72', `cortex-a73', 6643 `cortex-a75', `cortex-a76', `cortex-a76ae', `cortex-a77', 6644 `cortex-a78', `cortex-a78ae', `cortex-a78c', `cortex-a510', 6645 `cortex-a710', `ares', `exynos-m1', `falkor', `neoverse-n1', 6646 `neoverse-n2', `neoverse-e1', `neoverse-v1', `qdf24xx', `saphira', 6647 `thunderx', `vulcan', `xgene1' `xgene2', `cortex-r82', `cortex-x1', 6648 and `cortex-x2'. The special name `all' may be used to allow the 6649 assembler to accept instructions valid for any supported 6650 processor, including all optional extensions. 6651 6652 In addition to the basic instruction set, the assembler can be 6653 told to accept, or restrict, various extension mnemonics that 6654 extend the processor. *Note AArch64 Extensions::. 6655 6656 If some implementations of a particular processor can have an 6657 extension, then then those extensions are automatically enabled. 6658 Consequently, you will not normally have to specify any additional 6659 extensions. 6660 6661`-march=ARCHITECTURE[+EXTENSION...]' 6662 This option specifies the target architecture. The assembler will 6663 issue an error message if an attempt is made to assemble an 6664 instruction which will not execute on the target architecture. The 6665 following architecture names are recognized: `armv8-a', 6666 `armv8.1-a', `armv8.2-a', `armv8.3-a', `armv8.4-a' `armv8.5-a', 6667 `armv8.6-a', `armv8.7-a', `armv8.8-a', `armv8-r', `armv9-a', 6668 `armv9.1-a', `armv9.2-a', and `armv9.3-a'. 6669 6670 If both `-mcpu' and `-march' are specified, the assembler will use 6671 the setting for `-mcpu'. If neither are specified, the assembler 6672 will default to `-mcpu=all'. 6673 6674 The architecture option can be extended with the same instruction 6675 set extension options as the `-mcpu' option. Unlike `-mcpu', 6676 extensions are not always enabled by default, *Note AArch64 6677 Extensions::. 6678 6679`-mverbose-error' 6680 This option enables verbose error messages for AArch64 gas. This 6681 option is enabled by default. 6682 6683`-mno-verbose-error' 6684 This option disables verbose error messages in AArch64 gas. 6685 6686 6687 6688File: as.info, Node: AArch64 Extensions, Next: AArch64 Syntax, Prev: AArch64 Options, Up: AArch64-Dependent 6689 66909.1.2 Architecture Extensions 6691----------------------------- 6692 6693The table below lists the permitted architecture extensions that are 6694supported by the assembler and the conditions under which they are 6695automatically enabled. 6696 6697 Multiple extensions may be specified, separated by a `+'. Extension 6698mnemonics may also be removed from those the assembler accepts. This 6699is done by prepending `no' to the option that adds the extension. 6700Extensions that are removed must be listed after all extensions that 6701have been added. 6702 6703 Enabling an extension that requires other extensions will 6704automatically cause those extensions to be enabled. Similarly, 6705disabling an extension that is required by other extensions will 6706automatically cause those extensions to be disabled. 6707 6708Extension Minimum Enabled by Description 6709 Architecture default 6710---------------------------------------------------------------------------- 6711`aes' ARMv8-A No Enable the AES cryptographic 6712 extensions. This implies `fp' and 6713 `simd'. 6714`bf16' ARMv8.2-A ARMv8.6-A Enable BFloat16 extension. 6715 or later 6716`compnum' ARMv8.2-A ARMv8.3-A Enable the complex number SIMD 6717 or later extensions. This implies `fp16' and 6718 `simd'. 6719`crc' ARMv8-A ARMv8.1-A Enable CRC instructions. 6720 or later 6721`crypto' ARMv8-A No Enable cryptographic extensions. This 6722 implies `fp', `simd', `aes' and 6723 `sha2'. 6724`dotprod' ARMv8.2-A ARMv8.4-A Enable the Dot Product extension. 6725 or later This implies `simd'. 6726`f32mm' ARMv8.2-A No Enable F32 Matrix Multiply extension. 6727 This implies `sve'. 6728`f64mm' ARMv8.2-A No Enable F64 Matrix Multiply extension. 6729 This implies `sve'. 6730`flagm' ARMv8-A ARMv8.4-A Enable Flag Manipulation instructions. 6731 or later 6732`fp16fml' ARMv8.2-A ARMv8.4-A Enable ARMv8.2 16-bit floating-point 6733 or later multiplication variant support. This 6734 implies `fp' and `fp16'. 6735`fp16' ARMv8.2-A ARMv8.2-A Enable ARMv8.2 16-bit floating-point 6736 or later support. This implies `fp'. 6737`fp' ARMv8-A ARMv8-A or Enable floating-point extensions. 6738 later 6739`hbc' Armv8.8-A Enable Armv8.8-A hinted conditional 6740 or later branch instructions 6741`i8mm' ARMv8.2-A ARMv8.6-A Enable Int8 Matrix Multiply extension. 6742 or later 6743`lor' ARMv8-A ARMv8.1-A Enable Limited Ordering Regions 6744 or later extensions. 6745`ls64' ARMv8.6-A ARMv8.7-A Enable 64 Byte Loads/Stores. 6746 or later 6747`lse' ARMv8-A ARMv8.1-A Enable Large System extensions. 6748 or later 6749`memtag' ARMv8.5-A No Enable ARMv8.5-A Memory Tagging 6750 Extensions. 6751`mops' Armv8.8-A Enable Armv8.8-A memcpy and memset 6752 or later acceleration instructions 6753`pan' ARMv8-A ARMv8.1-A Enable Privileged Access Never support. 6754 or later 6755`pauth' ARMv8-A No Enable Pointer Authentication. 6756`predres' ARMv8-A ARMv8.5-A Enable the Execution and Data and 6757 or later Prediction instructions. 6758`profile' ARMv8.2-A No Enable statistical profiling 6759 extensions. 6760`ras' ARMv8-A ARMv8.2-A Enable the Reliability, Availability 6761 or later and Serviceability extension. 6762`rcpc' ARMv8.2-A ARMv8.3-A Enable the weak release consistency 6763 or later extension. 6764`rdma' ARMv8-A ARMv8.1-A Enable ARMv8.1 Advanced SIMD 6765 or later extensions. This implies `simd'. 6766`rng' ARMv8.5-A No Enable ARMv8.5-A random number 6767 instructions. 6768`sb' ARMv8-A ARMv8.5-A Enable the speculation barrier 6769 or later instruction sb. 6770`sha2' ARMv8-A No Enable the SHA2 cryptographic 6771 extensions. This implies `fp' and 6772 `simd'. 6773`sha3' ARMv8.2-A No Enable the ARMv8.2-A SHA2 and SHA3 6774 cryptographic extensions. This implies 6775 `fp', `simd' and `sha2'. 6776`simd' ARMv8-A ARMv8-A or Enable Advanced SIMD extensions. This 6777 later implies `fp'. 6778`sm4' ARMv8.2-A No Enable the ARMv8.2-A SM3 and SM4 6779 cryptographic extensions. This implies 6780 `fp' and `simd'. 6781`sme' Armv9-A No Enable SME Extension. 6782`sme-f64' Armv9-A No Enable SME F64 Extension. 6783`sme-i64' Armv9-A No Enable SME I64 Extension. 6784`ssbs' ARMv8-A ARMv8.5-A Enable Speculative Store Bypassing 6785 or later Safe state read and write. 6786`sve' ARMv8.2-A Armv9-A or Enable the Scalable Vector Extensions. 6787 later This implies `fp16', `simd' and 6788 `compnum'. 6789`sve2' ARMv8-A Armv9-A or Enable the SVE2 Extension. This 6790 later implies `sve'. 6791`sve2-aes'ARMv8-A No Enable SVE2 AES Extension. This also 6792 enables the .Q->.B form of the 6793 `pmullt' and `pmullb' instructions. 6794 This implies `aes' and `sve2'. 6795`sve2-bitperm'ARMv8-A No Enable SVE2 BITPERM Extension. 6796`sve2-sha3'ARMv8-A No Enable SVE2 SHA3 Extension. This 6797 implies `sha3' and `sve2'. 6798`sve2-sm4'ARMv8-A No Enable SVE2 SM4 Extension. This 6799 implies `sm4' and `sve2'. 6800`tme' ARMv8-A No Enable Transactional Memory Extensions. 6801 6802 6803File: as.info, Node: AArch64 Syntax, Next: AArch64 Floating Point, Prev: AArch64 Extensions, Up: AArch64-Dependent 6804 68059.1.3 Syntax 6806------------ 6807 6808* Menu: 6809 6810* AArch64-Chars:: Special Characters 6811* AArch64-Regs:: Register Names 6812* AArch64-Relocations:: Relocations 6813 6814 6815File: as.info, Node: AArch64-Chars, Next: AArch64-Regs, Up: AArch64 Syntax 6816 68179.1.3.1 Special Characters 6818.......................... 6819 6820The presence of a `//' on a line indicates the start of a comment that 6821extends to the end of the current line. If a `#' appears as the first 6822character of a line, the whole line is treated as a comment. 6823 6824 The `;' character can be used instead of a newline to separate 6825statements. 6826 6827 The `#' can be optionally used to indicate immediate operands. 6828 6829 6830File: as.info, Node: AArch64-Regs, Next: AArch64-Relocations, Prev: AArch64-Chars, Up: AArch64 Syntax 6831 68329.1.3.2 Register Names 6833...................... 6834 6835Please refer to the section `4.4 Register Names' of `ARMv8 Instruction 6836Set Overview', which is available at `http://infocenter.arm.com'. 6837 6838 6839File: as.info, Node: AArch64-Relocations, Prev: AArch64-Regs, Up: AArch64 Syntax 6840 68419.1.3.3 Relocations 6842................... 6843 6844Relocations for `MOVZ' and `MOVK' instructions can be generated by 6845prefixing the label with `#:abs_g2:' etc. For example to load the 684648-bit absolute address of FOO into x0: 6847 6848 movz x0, #:abs_g2:foo // bits 32-47, overflow check 6849 movk x0, #:abs_g1_nc:foo // bits 16-31, no overflow check 6850 movk x0, #:abs_g0_nc:foo // bits 0-15, no overflow check 6851 6852 Relocations for `ADRP', and `ADD', `LDR' or `STR' instructions can 6853be generated by prefixing the label with `:pg_hi21:' and `#:lo12:' 6854respectively. 6855 6856 For example to use 33-bit (+/-4GB) pc-relative addressing to load 6857the address of FOO into x0: 6858 6859 adrp x0, :pg_hi21:foo 6860 add x0, x0, #:lo12:foo 6861 6862 Or to load the value of FOO into x0: 6863 6864 adrp x0, :pg_hi21:foo 6865 ldr x0, [x0, #:lo12:foo] 6866 6867 Note that `:pg_hi21:' is optional. 6868 6869 adrp x0, foo 6870 6871 is equivalent to 6872 6873 adrp x0, :pg_hi21:foo 6874 6875 6876File: as.info, Node: AArch64 Floating Point, Next: AArch64 Directives, Prev: AArch64 Syntax, Up: AArch64-Dependent 6877 68789.1.4 Floating Point 6879-------------------- 6880 6881The AArch64 architecture uses IEEE floating-point numbers. 6882 6883 6884File: as.info, Node: AArch64 Directives, Next: AArch64 Opcodes, Prev: AArch64 Floating Point, Up: AArch64-Dependent 6885 68869.1.5 AArch64 Machine Directives 6887-------------------------------- 6888 6889`.arch NAME' 6890 Select the target architecture. Valid values for NAME are the 6891 same as for the `-march' command-line option. 6892 6893 Specifying `.arch' clears any previously selected architecture 6894 extensions. 6895 6896`.arch_extension NAME' 6897 Add or remove an architecture extension to the target 6898 architecture. Valid values for NAME are the same as those 6899 accepted as architectural extensions by the `-mcpu' command-line 6900 option. 6901 6902 `.arch_extension' may be used multiple times to add or remove 6903 extensions incrementally to the architecture being compiled for. 6904 6905`.bss' 6906 This directive switches to the `.bss' section. 6907 6908`.cpu NAME' 6909 Set the target processor. Valid values for NAME are the same as 6910 those accepted by the `-mcpu=' command-line option. 6911 6912`.dword EXPRESSIONS' 6913 The `.dword' directive produces 64 bit values. 6914 6915`.even' 6916 The `.even' directive aligns the output on the next even byte 6917 boundary. 6918 6919`.float16 VALUE [,...,VALUE_N]' 6920 Place the half precision floating point representation of one or 6921 more floating-point values into the current section. The format 6922 used to encode the floating point values is always the IEEE 6923 754-2008 half precision floating point format. 6924 6925`.inst EXPRESSIONS' 6926 Inserts the expressions into the output as if they were 6927 instructions, rather than data. 6928 6929`.ltorg' 6930 This directive causes the current contents of the literal pool to 6931 be dumped into the current section (which is assumed to be the 6932 .text section) at the current location (aligned to a word 6933 boundary). GAS maintains a separate literal pool for each section 6934 and each sub-section. The `.ltorg' directive will only affect the 6935 literal pool of the current section and sub-section. At the end 6936 of assembly all remaining, un-empty literal pools will 6937 automatically be dumped. 6938 6939 Note - older versions of GAS would dump the current literal pool 6940 any time a section change occurred. This is no longer done, since 6941 it prevents accurate control of the placement of literal pools. 6942 6943`.pool' 6944 This is a synonym for .ltorg. 6945 6946`NAME .req REGISTER NAME' 6947 This creates an alias for REGISTER NAME called NAME. For example: 6948 6949 foo .req w0 6950 6951 ip0, ip1, lr and fp are automatically defined to alias to X16, 6952 X17, X30 and X29 respectively. 6953 6954``.tlsdescadd'' 6955 Emits a TLSDESC_ADD reloc on the next instruction. 6956 6957``.tlsdesccall'' 6958 Emits a TLSDESC_CALL reloc on the next instruction. 6959 6960``.tlsdescldr'' 6961 Emits a TLSDESC_LDR reloc on the next instruction. 6962 6963`.unreq ALIAS-NAME' 6964 This undefines a register alias which was previously defined using 6965 the `req' directive. For example: 6966 6967 foo .req w0 6968 .unreq foo 6969 6970 An error occurs if the name is undefined. Note - this pseudo op 6971 can be used to delete builtin in register name aliases (eg 'w0'). 6972 This should only be done if it is really necessary. 6973 6974`.variant_pcs SYMBOL' 6975 This directive marks SYMBOL referencing a function that may follow 6976 a variant procedure call standard with different register usage 6977 convention from the base procedure call standard. 6978 6979`.xword EXPRESSIONS' 6980 The `.xword' directive produces 64 bit values. This is the same 6981 as the `.dword' directive. 6982 6983``.cfi_b_key_frame'' 6984 The `.cfi_b_key_frame' directive inserts a 'B' character into the 6985 CIE corresponding to the current frame's FDE, meaning that its 6986 return address has been signed with the B-key. If two frames are 6987 signed with differing keys then they will not share the same CIE. 6988 This information is intended to be used by the stack unwinder in 6989 order to properly authenticate return addresses. 6990 6991 6992 6993File: as.info, Node: AArch64 Opcodes, Next: AArch64 Mapping Symbols, Prev: AArch64 Directives, Up: AArch64-Dependent 6994 69959.1.6 Opcodes 6996------------- 6997 6998GAS implements all the standard AArch64 opcodes. It also implements 6999several pseudo opcodes, including several synthetic load instructions. 7000 7001`LDR =' 7002 ldr <register> , =<expression> 7003 7004 The constant expression will be placed into the nearest literal 7005 pool (if it not already there) and a PC-relative LDR instruction 7006 will be generated. 7007 7008 7009 For more information on the AArch64 instruction set and assembly 7010language notation, see `ARMv8 Instruction Set Overview' available at 7011`http://infocenter.arm.com'. 7012 7013 7014File: as.info, Node: AArch64 Mapping Symbols, Prev: AArch64 Opcodes, Up: AArch64-Dependent 7015 70169.1.7 Mapping Symbols 7017--------------------- 7018 7019The AArch64 ELF specification requires that special symbols be inserted 7020into object files to mark certain features: 7021 7022`$x' 7023 At the start of a region of code containing AArch64 instructions. 7024 7025`$d' 7026 At the start of a region of data. 7027 7028 7029 7030File: as.info, Node: Alpha-Dependent, Next: ARC-Dependent, Prev: AArch64-Dependent, Up: Machine Dependencies 7031 70329.2 Alpha Dependent Features 7033============================ 7034 7035* Menu: 7036 7037* Alpha Notes:: Notes 7038* Alpha Options:: Options 7039* Alpha Syntax:: Syntax 7040* Alpha Floating Point:: Floating Point 7041* Alpha Directives:: Alpha Machine Directives 7042* Alpha Opcodes:: Opcodes 7043 7044 7045File: as.info, Node: Alpha Notes, Next: Alpha Options, Up: Alpha-Dependent 7046 70479.2.1 Notes 7048----------- 7049 7050The documentation here is primarily for the ELF object format. `as' 7051also supports the ECOFF and EVAX formats, but features specific to 7052these formats are not yet documented. 7053 7054 7055File: as.info, Node: Alpha Options, Next: Alpha Syntax, Prev: Alpha Notes, Up: Alpha-Dependent 7056 70579.2.2 Options 7058------------- 7059 7060`-mCPU' 7061 This option specifies the target processor. If an attempt is made 7062 to assemble an instruction which will not execute on the target 7063 processor, the assembler may either expand the instruction as a 7064 macro or issue an error message. This option is equivalent to the 7065 `.arch' directive. 7066 7067 The following processor names are recognized: `21064', `21064a', 7068 `21066', `21068', `21164', `21164a', `21164pc', `21264', `21264a', 7069 `21264b', `ev4', `ev5', `lca45', `ev5', `ev56', `pca56', `ev6', 7070 `ev67', `ev68'. The special name `all' may be used to allow the 7071 assembler to accept instructions valid for any Alpha processor. 7072 7073 In order to support existing practice in OSF/1 with respect to 7074 `.arch', and existing practice within `MILO' (the Linux ARC 7075 bootloader), the numbered processor names (e.g. 21064) enable the 7076 processor-specific PALcode instructions, while the 7077 "electro-vlasic" names (e.g. `ev4') do not. 7078 7079`-mdebug' 7080`-no-mdebug' 7081 Enables or disables the generation of `.mdebug' encapsulation for 7082 stabs directives and procedure descriptors. The default is to 7083 automatically enable `.mdebug' when the first stabs directive is 7084 seen. 7085 7086`-relax' 7087 This option forces all relocations to be put into the object file, 7088 instead of saving space and resolving some relocations at assembly 7089 time. Note that this option does not propagate all symbol 7090 arithmetic into the object file, because not all symbol arithmetic 7091 can be represented. However, the option can still be useful in 7092 specific applications. 7093 7094`-replace' 7095`-noreplace' 7096 Enables or disables the optimization of procedure calls, both at 7097 assemblage and at link time. These options are only available for 7098 VMS targets and `-replace' is the default. See section 1.4.1 of 7099 the OpenVMS Linker Utility Manual. 7100 7101`-g' 7102 This option is used when the compiler generates debug information. 7103 When `gcc' is using `mips-tfile' to generate debug information 7104 for ECOFF, local labels must be passed through to the object file. 7105 Otherwise this option has no effect. 7106 7107`-GSIZE' 7108 A local common symbol larger than SIZE is placed in `.bss', while 7109 smaller symbols are placed in `.sbss'. 7110 7111`-F' 7112`-32addr' 7113 These options are ignored for backward compatibility. 7114 7115 7116File: as.info, Node: Alpha Syntax, Next: Alpha Floating Point, Prev: Alpha Options, Up: Alpha-Dependent 7117 71189.2.3 Syntax 7119------------ 7120 7121The assembler syntax closely follow the Alpha Reference Manual; 7122assembler directives and general syntax closely follow the OSF/1 and 7123OpenVMS syntax, with a few differences for ELF. 7124 7125* Menu: 7126 7127* Alpha-Chars:: Special Characters 7128* Alpha-Regs:: Register Names 7129* Alpha-Relocs:: Relocations 7130 7131 7132File: as.info, Node: Alpha-Chars, Next: Alpha-Regs, Up: Alpha Syntax 7133 71349.2.3.1 Special Characters 7135.......................... 7136 7137`#' is the line comment character. Note that if `#' is the first 7138character on a line then it can also be a logical line number directive 7139(*note Comments::) or a preprocessor control command (*note 7140Preprocessing::). 7141 7142 `;' can be used instead of a newline to separate statements. 7143 7144 7145File: as.info, Node: Alpha-Regs, Next: Alpha-Relocs, Prev: Alpha-Chars, Up: Alpha Syntax 7146 71479.2.3.2 Register Names 7148...................... 7149 7150The 32 integer registers are referred to as `$N' or `$rN'. In 7151addition, registers 15, 28, 29, and 30 may be referred to by the 7152symbols `$fp', `$at', `$gp', and `$sp' respectively. 7153 7154 The 32 floating-point registers are referred to as `$fN'. 7155 7156 7157File: as.info, Node: Alpha-Relocs, Prev: Alpha-Regs, Up: Alpha Syntax 7158 71599.2.3.3 Relocations 7160................... 7161 7162Some of these relocations are available for ECOFF, but mostly only for 7163ELF. They are modeled after the relocation format introduced in 7164Digital Unix 4.0, but there are additions. 7165 7166 The format is `!TAG' or `!TAG!NUMBER' where TAG is the name of the 7167relocation. In some cases NUMBER is used to relate specific 7168instructions. 7169 7170 The relocation is placed at the end of the instruction like so: 7171 7172 ldah $0,a($29) !gprelhigh 7173 lda $0,a($0) !gprellow 7174 ldq $1,b($29) !literal!100 7175 ldl $2,0($1) !lituse_base!100 7176 7177`!literal' 7178`!literal!N' 7179 Used with an `ldq' instruction to load the address of a symbol 7180 from the GOT. 7181 7182 A sequence number N is optional, and if present is used to pair 7183 `lituse' relocations with this `literal' relocation. The `lituse' 7184 relocations are used by the linker to optimize the code based on 7185 the final location of the symbol. 7186 7187 Note that these optimizations are dependent on the data flow of the 7188 program. Therefore, if _any_ `lituse' is paired with a `literal' 7189 relocation, then _all_ uses of the register set by the `literal' 7190 instruction must also be marked with `lituse' relocations. This 7191 is because the original `literal' instruction may be deleted or 7192 transformed into another instruction. 7193 7194 Also note that there may be a one-to-many relationship between 7195 `literal' and `lituse', but not a many-to-one. That is, if there 7196 are two code paths that load up the same address and feed the 7197 value to a single use, then the use may not use a `lituse' 7198 relocation. 7199 7200`!lituse_base!N' 7201 Used with any memory format instruction (e.g. `ldl') to indicate 7202 that the literal is used for an address load. The offset field of 7203 the instruction must be zero. During relaxation, the code may be 7204 altered to use a gp-relative load. 7205 7206`!lituse_jsr!N' 7207 Used with a register branch format instruction (e.g. `jsr') to 7208 indicate that the literal is used for a call. During relaxation, 7209 the code may be altered to use a direct branch (e.g. `bsr'). 7210 7211`!lituse_jsrdirect!N' 7212 Similar to `lituse_jsr', but also that this call cannot be vectored 7213 through a PLT entry. This is useful for functions with special 7214 calling conventions which do not allow the normal call-clobbered 7215 registers to be clobbered. 7216 7217`!lituse_bytoff!N' 7218 Used with a byte mask instruction (e.g. `extbl') to indicate that 7219 only the low 3 bits of the address are relevant. During 7220 relaxation, the code may be altered to use an immediate instead of 7221 a register shift. 7222 7223`!lituse_addr!N' 7224 Used with any other instruction to indicate that the original 7225 address is in fact used, and the original `ldq' instruction may 7226 not be altered or deleted. This is useful in conjunction with 7227 `lituse_jsr' to test whether a weak symbol is defined. 7228 7229 ldq $27,foo($29) !literal!1 7230 beq $27,is_undef !lituse_addr!1 7231 jsr $26,($27),foo !lituse_jsr!1 7232 7233`!lituse_tlsgd!N' 7234 Used with a register branch format instruction to indicate that the 7235 literal is the call to `__tls_get_addr' used to compute the 7236 address of the thread-local storage variable whose descriptor was 7237 loaded with `!tlsgd!N'. 7238 7239`!lituse_tlsldm!N' 7240 Used with a register branch format instruction to indicate that the 7241 literal is the call to `__tls_get_addr' used to compute the 7242 address of the base of the thread-local storage block for the 7243 current module. The descriptor for the module must have been 7244 loaded with `!tlsldm!N'. 7245 7246`!gpdisp!N' 7247 Used with `ldah' and `lda' to load the GP from the current 7248 address, a-la the `ldgp' macro. The source register for the 7249 `ldah' instruction must contain the address of the `ldah' 7250 instruction. There must be exactly one `lda' instruction paired 7251 with the `ldah' instruction, though it may appear anywhere in the 7252 instruction stream. The immediate operands must be zero. 7253 7254 bsr $26,foo 7255 ldah $29,0($26) !gpdisp!1 7256 lda $29,0($29) !gpdisp!1 7257 7258`!gprelhigh' 7259 Used with an `ldah' instruction to add the high 16 bits of a 7260 32-bit displacement from the GP. 7261 7262`!gprellow' 7263 Used with any memory format instruction to add the low 16 bits of a 7264 32-bit displacement from the GP. 7265 7266`!gprel' 7267 Used with any memory format instruction to add a 16-bit 7268 displacement from the GP. 7269 7270`!samegp' 7271 Used with any branch format instruction to skip the GP load at the 7272 target address. The referenced symbol must have the same GP as the 7273 source object file, and it must be declared to either not use `$27' 7274 or perform a standard GP load in the first two instructions via the 7275 `.prologue' directive. 7276 7277`!tlsgd' 7278`!tlsgd!N' 7279 Used with an `lda' instruction to load the address of a TLS 7280 descriptor for a symbol in the GOT. 7281 7282 The sequence number N is optional, and if present it used to pair 7283 the descriptor load with both the `literal' loading the address of 7284 the `__tls_get_addr' function and the `lituse_tlsgd' marking the 7285 call to that function. 7286 7287 For proper relaxation, both the `tlsgd', `literal' and `lituse' 7288 relocations must be in the same extended basic block. That is, 7289 the relocation with the lowest address must be executed first at 7290 runtime. 7291 7292`!tlsldm' 7293`!tlsldm!N' 7294 Used with an `lda' instruction to load the address of a TLS 7295 descriptor for the current module in the GOT. 7296 7297 Similar in other respects to `tlsgd'. 7298 7299`!gotdtprel' 7300 Used with an `ldq' instruction to load the offset of the TLS 7301 symbol within its module's thread-local storage block. Also known 7302 as the dynamic thread pointer offset or dtp-relative offset. 7303 7304`!dtprelhi' 7305`!dtprello' 7306`!dtprel' 7307 Like `gprel' relocations except they compute dtp-relative offsets. 7308 7309`!gottprel' 7310 Used with an `ldq' instruction to load the offset of the TLS 7311 symbol from the thread pointer. Also known as the tp-relative 7312 offset. 7313 7314`!tprelhi' 7315`!tprello' 7316`!tprel' 7317 Like `gprel' relocations except they compute tp-relative offsets. 7318 7319 7320File: as.info, Node: Alpha Floating Point, Next: Alpha Directives, Prev: Alpha Syntax, Up: Alpha-Dependent 7321 73229.2.4 Floating Point 7323-------------------- 7324 7325The Alpha family uses both IEEE and VAX floating-point numbers. 7326 7327 7328File: as.info, Node: Alpha Directives, Next: Alpha Opcodes, Prev: Alpha Floating Point, Up: Alpha-Dependent 7329 73309.2.5 Alpha Assembler Directives 7331-------------------------------- 7332 7333`as' for the Alpha supports many additional directives for 7334compatibility with the native assembler. This section describes them 7335only briefly. 7336 7337 These are the additional directives in `as' for the Alpha: 7338 7339`.arch CPU' 7340 Specifies the target processor. This is equivalent to the `-mCPU' 7341 command-line option. *Note Options: Alpha Options, for a list of 7342 values for CPU. 7343 7344`.ent FUNCTION[, N]' 7345 Mark the beginning of FUNCTION. An optional number may follow for 7346 compatibility with the OSF/1 assembler, but is ignored. When 7347 generating `.mdebug' information, this will create a procedure 7348 descriptor for the function. In ELF, it will mark the symbol as a 7349 function a-la the generic `.type' directive. 7350 7351`.end FUNCTION' 7352 Mark the end of FUNCTION. In ELF, it will set the size of the 7353 symbol a-la the generic `.size' directive. 7354 7355`.mask MASK, OFFSET' 7356 Indicate which of the integer registers are saved in the current 7357 function's stack frame. MASK is interpreted a bit mask in which 7358 bit N set indicates that register N is saved. The registers are 7359 saved in a block located OFFSET bytes from the "canonical frame 7360 address" (CFA) which is the value of the stack pointer on entry to 7361 the function. The registers are saved sequentially, except that 7362 the return address register (normally `$26') is saved first. 7363 7364 This and the other directives that describe the stack frame are 7365 currently only used when generating `.mdebug' information. They 7366 may in the future be used to generate DWARF2 `.debug_frame' unwind 7367 information for hand written assembly. 7368 7369`.fmask MASK, OFFSET' 7370 Indicate which of the floating-point registers are saved in the 7371 current stack frame. The MASK and OFFSET parameters are 7372 interpreted as with `.mask'. 7373 7374`.frame FRAMEREG, FRAMEOFFSET, RETREG[, ARGOFFSET]' 7375 Describes the shape of the stack frame. The frame pointer in use 7376 is FRAMEREG; normally this is either `$fp' or `$sp'. The frame 7377 pointer is FRAMEOFFSET bytes below the CFA. The return address is 7378 initially located in RETREG until it is saved as indicated in 7379 `.mask'. For compatibility with OSF/1 an optional ARGOFFSET 7380 parameter is accepted and ignored. It is believed to indicate the 7381 offset from the CFA to the saved argument registers. 7382 7383`.prologue N' 7384 Indicate that the stack frame is set up and all registers have been 7385 spilled. The argument N indicates whether and how the function 7386 uses the incoming "procedure vector" (the address of the called 7387 function) in `$27'. 0 indicates that `$27' is not used; 1 7388 indicates that the first two instructions of the function use `$27' 7389 to perform a load of the GP register; 2 indicates that `$27' is 7390 used in some non-standard way and so the linker cannot elide the 7391 load of the procedure vector during relaxation. 7392 7393`.usepv FUNCTION, WHICH' 7394 Used to indicate the use of the `$27' register, similar to 7395 `.prologue', but without the other semantics of needing to be 7396 inside an open `.ent'/`.end' block. 7397 7398 The WHICH argument should be either `no', indicating that `$27' is 7399 not used, or `std', indicating that the first two instructions of 7400 the function perform a GP load. 7401 7402 One might use this directive instead of `.prologue' if you are 7403 also using dwarf2 CFI directives. 7404 7405`.gprel32 EXPRESSION' 7406 Computes the difference between the address in EXPRESSION and the 7407 GP for the current object file, and stores it in 4 bytes. In 7408 addition to being smaller than a full 8 byte address, this also 7409 does not require a dynamic relocation when used in a shared 7410 library. 7411 7412`.t_floating EXPRESSION' 7413 Stores EXPRESSION as an IEEE double precision value. 7414 7415`.s_floating EXPRESSION' 7416 Stores EXPRESSION as an IEEE single precision value. 7417 7418`.f_floating EXPRESSION' 7419 Stores EXPRESSION as a VAX F format value. 7420 7421`.g_floating EXPRESSION' 7422 Stores EXPRESSION as a VAX G format value. 7423 7424`.d_floating EXPRESSION' 7425 Stores EXPRESSION as a VAX D format value. 7426 7427`.set FEATURE' 7428 Enables or disables various assembler features. Using the positive 7429 name of the feature enables while using `noFEATURE' disables. 7430 7431 `at' 7432 Indicates that macro expansions may clobber the "assembler 7433 temporary" (`$at' or `$28') register. Some macros may not be 7434 expanded without this and will generate an error message if 7435 `noat' is in effect. When `at' is in effect, a warning will 7436 be generated if `$at' is used by the programmer. 7437 7438 `macro' 7439 Enables the expansion of macro instructions. Note that 7440 variants of real instructions, such as `br label' vs `br 7441 $31,label' are considered alternate forms and not macros. 7442 7443 `move' 7444 `reorder' 7445 `volatile' 7446 These control whether and how the assembler may re-order 7447 instructions. Accepted for compatibility with the OSF/1 7448 assembler, but `as' does not do instruction scheduling, so 7449 these features are ignored. 7450 7451 The following directives are recognized for compatibility with the 7452OSF/1 assembler but are ignored. 7453 7454 .proc .aproc 7455 .reguse .livereg 7456 .option .aent 7457 .ugen .eflag 7458 .alias .noalias 7459 7460 7461File: as.info, Node: Alpha Opcodes, Prev: Alpha Directives, Up: Alpha-Dependent 7462 74639.2.6 Opcodes 7464------------- 7465 7466For detailed information on the Alpha machine instruction set, see the 7467Alpha Architecture Handbook 7468(ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf). 7469 7470 7471File: as.info, Node: ARC-Dependent, Next: ARM-Dependent, Prev: Alpha-Dependent, Up: Machine Dependencies 7472 74739.3 ARC Dependent Features 7474========================== 7475 7476* Menu: 7477 7478* ARC Options:: Options 7479* ARC Syntax:: Syntax 7480* ARC Directives:: ARC Machine Directives 7481* ARC Modifiers:: ARC Assembler Modifiers 7482* ARC Symbols:: ARC Pre-defined Symbols 7483* ARC Opcodes:: Opcodes 7484 7485 7486File: as.info, Node: ARC Options, Next: ARC Syntax, Up: ARC-Dependent 7487 74889.3.1 Options 7489------------- 7490 7491The following options control the type of CPU for which code is 7492assembled, and generic constraints on the code generated: 7493 7494`-mcpu=CPU' 7495 Set architecture type and register usage for CPU. There are also 7496 shortcut alias options available for backward compatibility and 7497 convenience. Supported values for CPU are 7498 7499 `arc600' 7500 Assemble for ARC 600. Aliases: `-mA6', `-mARC600'. 7501 7502 `arc600_norm' 7503 Assemble for ARC 600 with norm instructions. 7504 7505 `arc600_mul64' 7506 Assemble for ARC 600 with mul64 instructions. 7507 7508 `arc600_mul32x16' 7509 Assemble for ARC 600 with mul32x16 instructions. 7510 7511 `arc601' 7512 Assemble for ARC 601. Alias: `-mARC601'. 7513 7514 `arc601_norm' 7515 Assemble for ARC 601 with norm instructions. 7516 7517 `arc601_mul64' 7518 Assemble for ARC 601 with mul64 instructions. 7519 7520 `arc601_mul32x16' 7521 Assemble for ARC 601 with mul32x16 instructions. 7522 7523 `arc700' 7524 Assemble for ARC 700. Aliases: `-mA7', `-mARC700'. 7525 7526 `arcem' 7527 Assemble for ARC EM. Aliases: `-mEM' 7528 7529 `em' 7530 Assemble for ARC EM, identical as arcem variant. 7531 7532 `em4' 7533 Assemble for ARC EM with code-density instructions. 7534 7535 `em4_dmips' 7536 Assemble for ARC EM with code-density instructions. 7537 7538 `em4_fpus' 7539 Assemble for ARC EM with code-density instructions. 7540 7541 `em4_fpuda' 7542 Assemble for ARC EM with code-density, and double-precision 7543 assist instructions. 7544 7545 `quarkse_em' 7546 Assemble for QuarkSE-EM cpu. 7547 7548 `archs' 7549 Assemble for ARC HS. Aliases: `-mHS', `-mav2hs'. 7550 7551 `hs' 7552 Assemble for ARC HS. 7553 7554 `hs34' 7555 Assemble for ARC HS34. 7556 7557 `hs38' 7558 Assemble for ARC HS38. 7559 7560 `hs38_linux' 7561 Assemble for ARC HS38 with floating point support on. 7562 7563 `nps400' 7564 Assemble for ARC 700 with NPS-400 extended instructions. 7565 7566 7567 Note: the `.cpu' directive (*note ARC Directives::) can to be used 7568 to select a core variant from within assembly code. 7569 7570`-EB' 7571 This option specifies that the output generated by the assembler 7572 should be marked as being encoded for a big-endian processor. 7573 7574`-EL' 7575 This option specifies that the output generated by the assembler 7576 should be marked as being encoded for a little-endian processor - 7577 this is the default. 7578 7579`-mcode-density' 7580 This option turns on Code Density instructions. Only valid for 7581 ARC EM processors. 7582 7583`-mrelax' 7584 Enable support for assembly-time relaxation. The assembler will 7585 replace a longer version of an instruction with a shorter one, 7586 whenever it is possible. 7587 7588`-mnps400' 7589 Enable support for NPS-400 extended instructions. 7590 7591`-mspfp' 7592 Enable support for single-precision floating point instructions. 7593 7594`-mdpfp' 7595 Enable support for double-precision floating point instructions. 7596 7597`-mfpuda' 7598 Enable support for double-precision assist floating point 7599 instructions. Only valid for ARC EM processors. 7600 7601 7602 7603File: as.info, Node: ARC Syntax, Next: ARC Directives, Prev: ARC Options, Up: ARC-Dependent 7604 76059.3.2 Syntax 7606------------ 7607 7608* Menu: 7609 7610* ARC-Chars:: Special Characters 7611* ARC-Regs:: Register Names 7612 7613 7614File: as.info, Node: ARC-Chars, Next: ARC-Regs, Up: ARC Syntax 7615 76169.3.2.1 Special Characters 7617.......................... 7618 7619`%' 7620 A register name can optionally be prefixed by a `%' character. So 7621 register `%r0' is equivalent to `r0' in the assembly code. 7622 7623`#' 7624 The presence of a `#' character within a line (but not at the 7625 start of a line) indicates the start of a comment that extends to 7626 the end of the current line. 7627 7628 _Note:_ if a line starts with a `#' character then it can also be 7629 a logical line number directive (*note Comments::) or a 7630 preprocessor control command (*note Preprocessing::). 7631 7632`@' 7633 Prefixing an operand with an `@' specifies that the operand is a 7634 symbol and not a register. This is how the assembler disambiguates 7635 the use of an ARC register name as a symbol. So the instruction 7636 mov r0, @r0 7637 moves the address of symbol `r0' into register `r0'. 7638 7639``' 7640 The ``' (backtick) character is used to separate statements on a 7641 single line. 7642 7643`-' 7644 Used as a separator to obtain a sequence of commands from a C 7645 preprocessor macro. 7646 7647 7648 7649File: as.info, Node: ARC-Regs, Prev: ARC-Chars, Up: ARC Syntax 7650 76519.3.2.2 Register Names 7652...................... 7653 7654The ARC assembler uses the following register names for its core 7655registers: 7656 7657`r0-r31' 7658 The core general registers. Registers `r26' through `r31' have 7659 special functions, and are usually referred to by those synonyms. 7660 7661`gp' 7662 The global pointer and a synonym for `r26'. 7663 7664`fp' 7665 The frame pointer and a synonym for `r27'. 7666 7667`sp' 7668 The stack pointer and a synonym for `r28'. 7669 7670`ilink1' 7671 For ARC 600 and ARC 700, the level 1 interrupt link register and a 7672 synonym for `r29'. Not supported for ARCv2. 7673 7674`ilink' 7675 For ARCv2, the interrupt link register and a synonym for `r29'. 7676 Not supported for ARC 600 and ARC 700. 7677 7678`ilink2' 7679 For ARC 600 and ARC 700, the level 2 interrupt link register and a 7680 synonym for `r30'. Not supported for ARC v2. 7681 7682`blink' 7683 The link register and a synonym for `r31'. 7684 7685`r32-r59' 7686 The extension core registers. 7687 7688`lp_count' 7689 The loop count register. 7690 7691`pcl' 7692 The word aligned program counter. 7693 7694 7695 In addition the ARC processor has a large number of _auxiliary 7696registers_. The precise set depends on the extensions being supported, 7697but the following baseline set are always defined: 7698 7699`identity' 7700 Processor Identification register. Auxiliary register address 0x4. 7701 7702`pc' 7703 Program Counter. Auxiliary register address 0x6. 7704 7705`status32' 7706 Status register. Auxiliary register address 0x0a. 7707 7708`bta' 7709 Branch Target Address. Auxiliary register address 0x412. 7710 7711`ecr' 7712 Exception Cause Register. Auxiliary register address 0x403. 7713 7714`int_vector_base' 7715 Interrupt Vector Base address. Auxiliary register address 0x25. 7716 7717`status32_p0' 7718 Stored STATUS32 register on entry to level P0 interrupts. 7719 Auxiliary register address 0xb. 7720 7721`aux_user_sp' 7722 Saved User Stack Pointer. Auxiliary register address 0xd. 7723 7724`eret' 7725 Exception Return Address. Auxiliary register address 0x400. 7726 7727`erbta' 7728 BTA saved on exception entry. Auxiliary register address 0x401. 7729 7730`erstatus' 7731 STATUS32 saved on exception. Auxiliary register address 0x402. 7732 7733`bcr_ver' 7734 Build Configuration Registers Version. Auxiliary register address 7735 0x60. 7736 7737`bta_link_build' 7738 Build configuration for: BTA Registers. Auxiliary register 7739 address 0x63. 7740 7741`vecbase_ac_build' 7742 Build configuration for: Interrupts. Auxiliary register address 7743 0x68. 7744 7745`rf_build' 7746 Build configuration for: Core Registers. Auxiliary register 7747 address 0x6e. 7748 7749`dccm_build' 7750 DCCM RAM Configuration Register. Auxiliary register address 0xc1. 7751 7752 7753 Additional auxiliary register names are defined according to the 7754processor architecture version and extensions selected by the options. 7755 7756 7757File: as.info, Node: ARC Directives, Next: ARC Modifiers, Prev: ARC Syntax, Up: ARC-Dependent 7758 77599.3.3 ARC Machine Directives 7760---------------------------- 7761 7762The ARC version of `as' supports the following additional machine 7763directives: 7764 7765`.lcomm SYMBOL, LENGTH[, ALIGNMENT]' 7766 Reserve LENGTH (an absolute expression) bytes for a local common 7767 denoted by SYMBOL. The section and value of SYMBOL are those of 7768 the new local common. The addresses are allocated in the bss 7769 section, so that at run-time the bytes start off zeroed. Since 7770 SYMBOL is not declared global, it is normally not visible to `ld'. 7771 The optional third parameter, ALIGNMENT, specifies the desired 7772 alignment of the symbol in the bss section, specified as a byte 7773 boundary (for example, an alignment of 16 means that the least 7774 significant 4 bits of the address should be zero). The alignment 7775 must be an absolute expression, and it must be a power of two. If 7776 no alignment is specified, as will set the alignment to the 7777 largest power of two less than or equal to the size of the symbol, 7778 up to a maximum of 16. 7779 7780`.lcommon SYMBOL, LENGTH[, ALIGNMENT]' 7781 The same as `lcomm' directive. 7782 7783`.cpu CPU' 7784 The `.cpu' directive must be followed by the desired core version. 7785 Permitted values for CPU are: 7786 `ARC600' 7787 Assemble for the ARC600 instruction set. 7788 7789 `arc600_norm' 7790 Assemble for ARC 600 with norm instructions. 7791 7792 `arc600_mul64' 7793 Assemble for ARC 600 with mul64 instructions. 7794 7795 `arc600_mul32x16' 7796 Assemble for ARC 600 with mul32x16 instructions. 7797 7798 `arc601' 7799 Assemble for ARC 601 instruction set. 7800 7801 `arc601_norm' 7802 Assemble for ARC 601 with norm instructions. 7803 7804 `arc601_mul64' 7805 Assemble for ARC 601 with mul64 instructions. 7806 7807 `arc601_mul32x16' 7808 Assemble for ARC 601 with mul32x16 instructions. 7809 7810 `ARC700' 7811 Assemble for the ARC700 instruction set. 7812 7813 `NPS400' 7814 Assemble for the NPS400 instruction set. 7815 7816 `EM' 7817 Assemble for the ARC EM instruction set. 7818 7819 `arcem' 7820 Assemble for ARC EM instruction set 7821 7822 `em4' 7823 Assemble for ARC EM with code-density instructions. 7824 7825 `em4_dmips' 7826 Assemble for ARC EM with code-density instructions. 7827 7828 `em4_fpus' 7829 Assemble for ARC EM with code-density instructions. 7830 7831 `em4_fpuda' 7832 Assemble for ARC EM with code-density, and double-precision 7833 assist instructions. 7834 7835 `quarkse_em' 7836 Assemble for QuarkSE-EM instruction set. 7837 7838 `HS' 7839 Assemble for the ARC HS instruction set. 7840 7841 `archs' 7842 Assemble for ARC HS instruction set. 7843 7844 `hs' 7845 Assemble for ARC HS instruction set. 7846 7847 `hs34' 7848 Assemble for ARC HS34 instruction set. 7849 7850 `hs38' 7851 Assemble for ARC HS38 instruction set. 7852 7853 `hs38_linux' 7854 Assemble for ARC HS38 with floating point support on. 7855 7856 7857 Note: the `.cpu' directive overrides the command-line option 7858 `-mcpu=CPU'; a warning is emitted when the version is not 7859 consistent between the two. 7860 7861`.extAuxRegister NAME, ADDR, MODE' 7862 Auxiliary registers can be defined in the assembler source code by 7863 using this directive. The first parameter, NAME, is the name of 7864 the new auxiliary register. The second parameter, ADDR, is 7865 address the of the auxiliary register. The third parameter, MODE, 7866 specifies whether the register is readable and/or writable and is 7867 one of: 7868 `r' 7869 Read only; 7870 7871 `w' 7872 Write only; 7873 7874 `r|w' 7875 Read and write. 7876 7877 7878 For example: 7879 .extAuxRegister mulhi, 0x12, w 7880 specifies a write only extension auxiliary register, MULHI at 7881 address 0x12. 7882 7883`.extCondCode SUFFIX, VAL' 7884 ARC supports extensible condition codes. This directive defines a 7885 new condition code, to be known by the suffix, SUFFIX and will 7886 depend on the value, VAL in the condition code. 7887 7888 For example: 7889 .extCondCode is_busy,0x14 7890 add.is_busy r1,r2,r3 7891 will only execute the `add' instruction if the condition code 7892 value is 0x14. 7893 7894`.extCoreRegister NAME, REGNUM, MODE, SHORTCUT' 7895 Specifies an extension core register named NAME as a synonym for 7896 the register numbered REGNUM. The register number must be between 7897 32 and 59. The third argument, MODE, indicates whether the 7898 register is readable and/or writable and is one of: 7899 `r' 7900 Read only; 7901 7902 `w' 7903 Write only; 7904 7905 `r|w' 7906 Read and write. 7907 7908 7909 The final parameter, SHORTCUT indicates whether the register has a 7910 short cut in the pipeline. The valid values are: 7911 `can_shortcut' 7912 The register has a short cut in the pipeline; 7913 7914 `cannot_shortcut' 7915 The register does not have a short cut in the pipeline. 7916 7917 For example: 7918 .extCoreRegister mlo, 57, r , can_shortcut 7919 defines a read only extension core register, `mlo', which is 7920 register 57, and can short cut the pipeline. 7921 7922`.extInstruction NAME, OPCODE, SUBOPCODE, SUFFIXCLASS, SYNTAXCLASS' 7923 ARC allows the user to specify extension instructions. These 7924 extension instructions are not macros; the assembler creates 7925 encodings for use of these instructions according to the 7926 specification by the user. 7927 7928 The first argument, NAME, gives the name of the instruction. 7929 7930 The second argument, OPCODE, is the opcode to be used (bits 31:27 7931 in the encoding). 7932 7933 The third argument, SUBOPCODE, is the sub-opcode to be used, but 7934 the correct value also depends on the fifth argument, SYNTAXCLASS 7935 7936 The fourth argument, SUFFIXCLASS, determines the kinds of suffixes 7937 to be allowed. Valid values are: 7938 `SUFFIX_NONE' 7939 No suffixes are permitted; 7940 7941 `SUFFIX_COND' 7942 Conditional suffixes are permitted; 7943 7944 `SUFFIX_FLAG' 7945 Flag setting suffixes are permitted. 7946 7947 `SUFFIX_COND|SUFFIX_FLAG' 7948 Both conditional and flag setting suffices are permitted. 7949 7950 7951 The fifth and final argument, SYNTAXCLASS, determines the syntax 7952 class for the instruction. It can have the following values: 7953 `SYNTAX_2OP' 7954 Two Operand Instruction; 7955 7956 `SYNTAX_3OP' 7957 Three Operand Instruction. 7958 7959 `SYNTAX_1OP' 7960 One Operand Instruction. 7961 7962 `SYNTAX_NOP' 7963 No Operand Instruction. 7964 7965 The syntax class may be followed by `|' and one of the following 7966 modifiers. 7967 `OP1_MUST_BE_IMM' 7968 Modifies syntax class `SYNTAX_3OP', specifying that the first 7969 operand of a three-operand instruction must be an immediate 7970 (i.e., the result is discarded). This is usually used to set 7971 the flags using specific instructions and not retain results. 7972 7973 `OP1_IMM_IMPLIED' 7974 Modifies syntax class `SYNTAX_20P', specifying that there is 7975 an implied immediate destination operand which does not 7976 appear in the syntax. 7977 7978 For example, if the source code contains an instruction like: 7979 inst r1,r2 7980 the first argument is an implied immediate (that is, the 7981 result is discarded). This is the same as though the source 7982 code were: inst 0,r1,r2. 7983 7984 7985 For example, defining a 64-bit multiplier with immediate operands: 7986 .extInstruction mp64, 0x07, 0x2d, SUFFIX_COND|SUFFIX_FLAG, 7987 SYNTAX_3OP|OP1_MUST_BE_IMM 7988 which specifies an extension instruction named `mp64' with 3 7989 operands. It sets the flags and can be used with a condition code, 7990 for which the first operand is an immediate, i.e. equivalent to 7991 discarding the result of the operation. 7992 7993 A two operands instruction variant would be: 7994 .extInstruction mul64, 0x07, 0x2d, SUFFIX_COND, 7995 SYNTAX_2OP|OP1_IMM_IMPLIED 7996 which describes a two operand instruction with an implicit first 7997 immediate operand. The result of this operation would be 7998 discarded. 7999 8000`.arc_attribute TAG, VALUE' 8001 Set the ARC object attribute TAG to VALUE. 8002 8003 The TAG is either an attribute number, or one of the following: 8004 `Tag_ARC_PCS_config', `Tag_ARC_CPU_base', `Tag_ARC_CPU_variation', 8005 `Tag_ARC_CPU_name', `Tag_ARC_ABI_rf16', `Tag_ARC_ABI_osver', 8006 `Tag_ARC_ABI_sda', `Tag_ARC_ABI_pic', `Tag_ARC_ABI_tls', 8007 `Tag_ARC_ABI_enumsize', `Tag_ARC_ABI_exceptions', 8008 `Tag_ARC_ABI_double_size', `Tag_ARC_ISA_config', 8009 `Tag_ARC_ISA_apex', `Tag_ARC_ISA_mpy_option' 8010 8011 The VALUE is either a `number', `"string"', or `number, "string"' 8012 depending on the tag. 8013 8014 8015 8016File: as.info, Node: ARC Modifiers, Next: ARC Symbols, Prev: ARC Directives, Up: ARC-Dependent 8017 80189.3.4 ARC Assembler Modifiers 8019----------------------------- 8020 8021The following additional assembler modifiers have been added for 8022position-independent code. These modifiers are available only with the 8023ARC 700 and above processors and generate relocation entries, which are 8024interpreted by the linker as follows: 8025 8026`@pcl(SYMBOL)' 8027 Relative distance of SYMBOL's from the current program counter 8028 location. 8029 8030`@gotpc(SYMBOL)' 8031 Relative distance of SYMBOL's Global Offset Table entry from the 8032 current program counter location. 8033 8034`@gotoff(SYMBOL)' 8035 Distance of SYMBOL from the base of the Global Offset Table. 8036 8037`@plt(SYMBOL)' 8038 Distance of SYMBOL's Procedure Linkage Table entry from the 8039 current program counter. This is valid only with branch and link 8040 instructions and PC-relative calls. 8041 8042`@sda(SYMBOL)' 8043 Relative distance of SYMBOL from the base of the Small Data 8044 Pointer. 8045 8046 8047 8048File: as.info, Node: ARC Symbols, Next: ARC Opcodes, Prev: ARC Modifiers, Up: ARC-Dependent 8049 80509.3.5 ARC Pre-defined Symbols 8051----------------------------- 8052 8053The following assembler symbols will prove useful when developing 8054position-independent code. These symbols are available only with the 8055ARC 700 and above processors. 8056 8057`__GLOBAL_OFFSET_TABLE__' 8058 Symbol referring to the base of the Global Offset Table. 8059 8060`__DYNAMIC__' 8061 An alias for the Global Offset Table 8062 `Base__GLOBAL_OFFSET_TABLE__'. It can be used only with `@gotpc' 8063 modifiers. 8064 8065 8066 8067File: as.info, Node: ARC Opcodes, Prev: ARC Symbols, Up: ARC-Dependent 8068 80699.3.6 Opcodes 8070------------- 8071 8072For information on the ARC instruction set, see `ARC Programmers 8073Reference Manual', available where you download the processor IP 8074library. 8075 8076 8077File: as.info, Node: ARM-Dependent, Next: AVR-Dependent, Prev: ARC-Dependent, Up: Machine Dependencies 8078 80799.4 ARM Dependent Features 8080========================== 8081 8082* Menu: 8083 8084* ARM Options:: Options 8085* ARM Syntax:: Syntax 8086* ARM Floating Point:: Floating Point 8087* ARM Directives:: ARM Machine Directives 8088* ARM Opcodes:: Opcodes 8089* ARM Mapping Symbols:: Mapping Symbols 8090* ARM Unwinding Tutorial:: Unwinding 8091 8092 8093File: as.info, Node: ARM Options, Next: ARM Syntax, Up: ARM-Dependent 8094 80959.4.1 Options 8096------------- 8097 8098`-mcpu=PROCESSOR[+EXTENSION...]' 8099 This option specifies the target processor. The assembler will 8100 issue an error message if an attempt is made to assemble an 8101 instruction which will not execute on the target processor. The 8102 following processor names are recognized: `arm1', `arm2', `arm250', 8103 `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', 8104 `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', 8105 `arm700i', `arm710', `arm710t', `arm720', `arm720t', `arm740t', 8106 `arm710c', `arm7100', `arm7500', `arm7500fe', `arm7t', `arm7tdmi', 8107 `arm7tdmi-s', `arm8', `arm810', `strongarm', `strongarm1', 8108 `strongarm110', `strongarm1100', `strongarm1110', `arm9', `arm920', 8109 `arm920t', `arm922t', `arm940t', `arm9tdmi', `fa526' (Faraday 8110 FA526 processor), `fa626' (Faraday FA626 processor), `arm9e', 8111 `arm926e', `arm926ej-s', `arm946e-r0', `arm946e', `arm946e-s', 8112 `arm966e-r0', `arm966e', `arm966e-s', `arm968e-s', `arm10t', 8113 `arm10tdmi', `arm10e', `arm1020', `arm1020t', `arm1020e', 8114 `arm1022e', `arm1026ej-s', `fa606te' (Faraday FA606TE processor), 8115 `fa616te' (Faraday FA616TE processor), `fa626te' (Faraday FA626TE 8116 processor), `fmp626' (Faraday FMP626 processor), `fa726te' 8117 (Faraday FA726TE processor), `arm1136j-s', `arm1136jf-s', 8118 `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s', 8119 `mpcore', `mpcorenovfp', `cortex-a5', `cortex-a7', `cortex-a8', 8120 `cortex-a9', `cortex-a15', `cortex-a17', `cortex-a32', 8121 `cortex-a35', `cortex-a53', `cortex-a55', `cortex-a57', 8122 `cortex-a72', `cortex-a73', `cortex-a75', `cortex-a76', 8123 `cortex-a76ae', `cortex-a77', `cortex-a78', `cortex-a78ae', 8124 `cortex-a78c', `cortex-a710', `ares', `cortex-r4', `cortex-r4f', 8125 `cortex-r5', `cortex-r7', `cortex-r8', `cortex-r52', 8126 `cortex-r52plus', `cortex-m35p', `cortex-m33', `cortex-m23', 8127 `cortex-m7', `cortex-m4', `cortex-m3', `cortex-m1', `cortex-m0', 8128 `cortex-m0plus', `cortex-x1', `exynos-m1', `marvell-pj4', 8129 `marvell-whitney', `neoverse-n1', `neoverse-n2', `neoverse-v1', 8130 `xgene1', `xgene2', `ep9312' (ARM920 with Cirrus Maverick 8131 coprocessor), `i80200' (Intel XScale processor) `iwmmxt' (Intel 8132 XScale processor with Wireless MMX technology coprocessor) and 8133 `xscale'. The special name `all' may be used to allow the 8134 assembler to accept instructions valid for any ARM processor. 8135 8136 In addition to the basic instruction set, the assembler can be 8137 told to accept various extension mnemonics that extend the 8138 processor using the co-processor instruction space. For example, 8139 `-mcpu=arm920+maverick' is equivalent to specifying `-mcpu=ep9312'. 8140 8141 Multiple extensions may be specified, separated by a `+'. The 8142 extensions should be specified in ascending alphabetical order. 8143 8144 Some extensions may be restricted to particular architectures; 8145 this is documented in the list of extensions below. 8146 8147 Extension mnemonics may also be removed from those the assembler 8148 accepts. This is done be prepending `no' to the option that adds 8149 the extension. Extensions that are removed should be listed after 8150 all extensions which have been added, again in ascending 8151 alphabetical order. For example, `-mcpu=ep9312+nomaverick' is 8152 equivalent to specifying `-mcpu=arm920'. 8153 8154 The following extensions are currently supported: `bf16' (BFloat16 8155 extensions for v8.6-A architecture), `i8mm' (Int8 Matrix Multiply 8156 extensions for v8.6-A architecture), `crc' `crypto' (Cryptography 8157 Extensions for v8-A architecture, implies `fp+simd'), `dotprod' 8158 (Dot Product Extensions for v8.2-A architecture, implies 8159 `fp+simd'), `fp' (Floating Point Extensions for v8-A architecture), 8160 `fp16' (FP16 Extensions for v8.2-A architecture, implies `fp'), 8161 `fp16fml' (FP16 Floating Point Multiplication Variant Extensions 8162 for v8.2-A architecture, implies `fp16'), `idiv' (Integer Divide 8163 Extensions for v7-A and v7-R architectures), `iwmmxt', `iwmmxt2', 8164 `xscale', `maverick', `mp' (Multiprocessing Extensions for v7-A 8165 and v7-R architectures), `os' (Operating System for v6M 8166 architecture), `predres' (Execution and Data Prediction 8167 Restriction Instruction for v8-A architectures, added by default 8168 from v8.5-A), `sb' (Speculation Barrier Instruction for v8-A 8169 architectures, added by default from v8.5-A), `sec' (Security 8170 Extensions for v6K and v7-A architectures), `simd' (Advanced SIMD 8171 Extensions for v8-A architecture, implies `fp'), `virt' 8172 (Virtualization Extensions for v7-A architecture, implies `idiv'), 8173 `pan' (Privileged Access Never Extensions for v8-A architecture), 8174 `ras' (Reliability, Availability and Serviceability extensions for 8175 v8-A architecture), `rdma' (ARMv8.1 Advanced SIMD extensions for 8176 v8-A architecture, implies `simd') and `xscale'. 8177 8178`-march=ARCHITECTURE[+EXTENSION...]' 8179 This option specifies the target architecture. The assembler will 8180 issue an error message if an attempt is made to assemble an 8181 instruction which will not execute on the target architecture. 8182 The following architecture names are recognized: `armv1', `armv2', 8183 `armv2a', `armv2s', `armv3', `armv3m', `armv4', `armv4xm', 8184 `armv4t', `armv4txm', `armv5', `armv5t', `armv5txm', `armv5te', 8185 `armv5texp', `armv6', `armv6j', `armv6k', `armv6z', `armv6kz', 8186 `armv6-m', `armv6s-m', `armv7', `armv7-a', `armv7ve', `armv7-r', 8187 `armv7-m', `armv7e-m', `armv8-a', `armv8.1-a', `armv8.2-a', 8188 `armv8.3-a', `armv8-r', `armv8.4-a', `armv8.5-a', `armv8-m.base', 8189 `armv8-m.main', `armv8.1-m.main', `armv8.6-a', `armv8.7-a', 8190 `armv8.8-a', `armv9-a', `iwmmxt', `iwmmxt2' and `xscale'. If both 8191 `-mcpu' and `-march' are specified, the assembler will use the 8192 setting for `-mcpu'. 8193 8194 The architecture option can be extended with a set extension 8195 options. These extensions are context sensitive, i.e. the same 8196 extension may mean different things when used with different 8197 architectures. When used together with a `-mfpu' option, the 8198 union of both feature enablement is taken. See their availability 8199 and meaning below: 8200 8201 For `armv5te', `armv5texp', `armv5tej', `armv6', `armv6j', 8202 `armv6k', `armv6z', `armv6kz', `armv6zk', `armv6t2', `armv6kt2' 8203 and `armv6zt2': 8204 8205 `+fp': Enables VFPv2 instructions. `+nofp': Disables all FPU 8206 instrunctions. 8207 8208 For `armv7': 8209 8210 `+fp': Enables VFPv3 instructions with 16 double-word registers. 8211 `+nofp': Disables all FPU instructions. 8212 8213 For `armv7-a': 8214 8215 `+fp': Enables VFPv3 instructions with 16 double-word registers. 8216 `+vfpv3-d16': Alias for `+fp'. `+vfpv3': Enables VFPv3 8217 instructions with 32 double-word registers. `+vfpv3-d16-fp16': 8218 Enables VFPv3 with half precision floating-point conversion 8219 instructions and 16 double-word registers. `+vfpv3-fp16': Enables 8220 VFPv3 with half precision floating-point conversion instructions 8221 and 32 double-word registers. `+vfpv4-d16': Enables VFPv4 8222 instructions with 16 double-word registers. `+vfpv4': Enables 8223 VFPv4 instructions with 32 double-word registers. `+simd': 8224 Enables VFPv3 and NEONv1 instructions with 32 double-word 8225 registers. `+neon': Alias for `+simd'. `+neon-vfpv3': Alias for 8226 `+simd'. `+neon-fp16': Enables VFPv3, half precision 8227 floating-point conversion and NEONv1 instructions with 32 8228 double-word registers. `+neon-vfpv4': Enables VFPv4 and NEONv1 8229 with Fused-MAC instructions and 32 double-word registers. `+mp': 8230 Enables Multiprocessing Extensions. `+sec': Enables Security 8231 Extensions. `+nofp': Disables all FPU and NEON instructions. 8232 `+nosimd': Disables all NEON instructions. 8233 8234 For `armv7ve': 8235 8236 `+fp': Enables VFPv4 instructions with 16 double-word registers. 8237 `+vfpv4-d16': Alias for `+fp'. `+vfpv3-d16': Enables VFPv3 8238 instructions with 16 double-word registers. `+vfpv3': Enables 8239 VFPv3 instructions with 32 double-word registers. 8240 `+vfpv3-d16-fp16': Enables VFPv3 with half precision floating-point 8241 conversion instructions and 16 double-word registers. 8242 `+vfpv3-fp16': Enables VFPv3 with half precision floating-point 8243 conversion instructions and 32 double-word registers. `+vfpv4': 8244 Enables VFPv4 instructions with 32 double-word registers. 8245 `+simd': Enables VFPv4 and NEONv1 with Fused-MAC instructions and 8246 32 double-word registers. `+neon-vfpv4': Alias for `+simd'. 8247 `+neon': Enables VFPv3 and NEONv1 instructions with 32 double-word 8248 registers. `+neon-vfpv3': Alias for `+neon'. `+neon-fp16': 8249 Enables VFPv3, half precision floating-point conversion and NEONv1 8250 instructions with 32 double-word registers. double-word registers. 8251 `+nofp': Disables all FPU and NEON instructions. `+nosimd': 8252 Disables all NEON instructions. 8253 8254 For `armv7-r': 8255 8256 `+fp.sp': Enables single-precision only VFPv3 instructions with 16 8257 double-word registers. `+vfpv3xd': Alias for `+fp.sp'. `+fp': 8258 Enables VFPv3 instructions with 16 double-word registers. 8259 `+vfpv3-d16': Alias for `+fp'. `+vfpv3xd-fp16': Enables 8260 single-precision only VFPv3 and half floating-point conversion 8261 instructions with 16 double-word registers. `+vfpv3-d16-fp16': 8262 Enables VFPv3 and half precision floating-point conversion 8263 instructions with 16 double-word registers. `+idiv': Enables 8264 integer division instructions in ARM mode. `+nofp': Disables all 8265 FPU instructions. 8266 8267 For `armv7e-m': 8268 8269 `+fp': Enables single-precision only VFPv4 instructions with 16 8270 double-word registers. `+vfpvf4-sp-d16': Alias for `+fp'. 8271 `+fpv5': Enables single-precision only VFPv5 instructions with 16 8272 double-word registers. `+fp.dp': Enables VFPv5 instructions with 8273 16 double-word registers. `+fpv5-d16"': Alias for `+fp.dp'. 8274 `+nofp': Disables all FPU instructions. 8275 8276 For `armv8-m.main': 8277 8278 `+dsp': Enables DSP Extension. `+fp': Enables single-precision 8279 only VFPv5 instructions with 16 double-word registers. `+fp.dp': 8280 Enables VFPv5 instructions with 16 double-word registers. 8281 `+cdecp0' (CDE extensions for v8-m architecture with coprocessor 8282 0), `+cdecp1' (CDE extensions for v8-m architecture with 8283 coprocessor 1), `+cdecp2' (CDE extensions for v8-m architecture 8284 with coprocessor 2), `+cdecp3' (CDE extensions for v8-m 8285 architecture with coprocessor 3), `+cdecp4' (CDE extensions for 8286 v8-m architecture with coprocessor 4), `+cdecp5' (CDE extensions 8287 for v8-m architecture with coprocessor 5), `+cdecp6' (CDE 8288 extensions for v8-m architecture with coprocessor 6), `+cdecp7' 8289 (CDE extensions for v8-m architecture with coprocessor 7), 8290 `+nofp': Disables all FPU instructions. `+nodsp': Disables DSP 8291 Extension. 8292 8293 For `armv8.1-m.main': 8294 8295 `+dsp': Enables DSP Extension. `+fp': Enables single and half 8296 precision scalar Floating Point Extensions for Armv8.1-M Mainline 8297 with 16 double-word registers. `+fp.dp': Enables double precision 8298 scalar Floating Point Extensions for Armv8.1-M Mainline, implies 8299 `+fp'. `+mve': Enables integer only M-profile Vector Extension for 8300 Armv8.1-M Mainline, implies `+dsp'. `+mve.fp': Enables Floating 8301 Point M-profile Vector Extension for Armv8.1-M Mainline, implies 8302 `+mve' and `+fp'. `+nofp': Disables all FPU instructions. 8303 `+nodsp': Disables DSP Extension. `+nomve': Disables all 8304 M-profile Vector Extensions. 8305 8306 For `armv8-a': 8307 8308 `+crc': Enables CRC32 Extension. `+simd': Enables VFP and NEON 8309 for Armv8-A. `+crypto': Enables Cryptography Extensions for 8310 Armv8-A, implies `+simd'. `+sb': Enables Speculation Barrier 8311 Instruction for Armv8-A. `+predres': Enables Execution and Data 8312 Prediction Restriction Instruction for Armv8-A. `+nofp': Disables 8313 all FPU, NEON and Cryptography Extensions. `+nocrypto': Disables 8314 Cryptography Extensions. 8315 8316 For `armv8.1-a': 8317 8318 `+simd': Enables VFP and NEON for Armv8.1-A. `+crypto': Enables 8319 Cryptography Extensions for Armv8-A, implies `+simd'. `+sb': 8320 Enables Speculation Barrier Instruction for Armv8-A. `+predres': 8321 Enables Execution and Data Prediction Restriction Instruction for 8322 Armv8-A. `+nofp': Disables all FPU, NEON and Cryptography 8323 Extensions. `+nocrypto': Disables Cryptography Extensions. 8324 8325 For `armv8.2-a' and `armv8.3-a': 8326 8327 `+simd': Enables VFP and NEON for Armv8.1-A. `+fp16': Enables 8328 FP16 Extension for Armv8.2-A, implies `+simd'. `+fp16fml': 8329 Enables FP16 Floating Point Multiplication Variant Extensions for 8330 Armv8.2-A, implies `+fp16'. `+crypto': Enables Cryptography 8331 Extensions for Armv8-A, implies `+simd'. `+dotprod': Enables Dot 8332 Product Extensions for Armv8.2-A, implies `+simd'. `+sb': Enables 8333 Speculation Barrier Instruction for Armv8-A. `+predres': Enables 8334 Execution and Data Prediction Restriction Instruction for Armv8-A. 8335 `+nofp': Disables all FPU, NEON, Cryptography and Dot Product 8336 Extensions. `+nocrypto': Disables Cryptography Extensions. 8337 8338 For `armv8.4-a': 8339 8340 `+simd': Enables VFP and NEON for Armv8.1-A and Dot Product 8341 Extensions for Armv8.2-A. `+fp16': Enables FP16 Floating Point 8342 and Floating Point Multiplication Variant Extensions for 8343 Armv8.2-A, implies `+simd'. `+crypto': Enables Cryptography 8344 Extensions for Armv8-A, implies `+simd'. `+sb': Enables 8345 Speculation Barrier Instruction for Armv8-A. `+predres': Enables 8346 Execution and Data Prediction Restriction Instruction for Armv8-A. 8347 `+nofp': Disables all FPU, NEON, Cryptography and Dot Product 8348 Extensions. `+nocryptp': Disables Cryptography Extensions. 8349 8350 For `armv8.5-a': 8351 8352 `+simd': Enables VFP and NEON for Armv8.1-A and Dot Product 8353 Extensions for Armv8.2-A. `+fp16': Enables FP16 Floating Point 8354 and Floating Point Multiplication Variant Extensions for 8355 Armv8.2-A, implies `+simd'. `+crypto': Enables Cryptography 8356 Extensions for Armv8-A, implies `+simd'. `+nofp': Disables all 8357 FPU, NEON, Cryptography and Dot Product Extensions. `+nocryptp': 8358 Disables Cryptography Extensions. 8359 8360`-mfpu=FLOATING-POINT-FORMAT' 8361 This option specifies the floating point format to assemble for. 8362 The assembler will issue an error message if an attempt is made to 8363 assemble an instruction which will not execute on the target 8364 floating point unit. The following format options are recognized: 8365 `softfpa', `fpe', `fpe2', `fpe3', `fpa', `fpa10', `fpa11', 8366 `arm7500fe', `softvfp', `softvfp+vfp', `vfp', `vfp10', `vfp10-r0', 8367 `vfp9', `vfpxd', `vfpv2', `vfpv3', `vfpv3-fp16', `vfpv3-d16', 8368 `vfpv3-d16-fp16', `vfpv3xd', `vfpv3xd-d16', `vfpv4', `vfpv4-d16', 8369 `fpv4-sp-d16', `fpv5-sp-d16', `fpv5-d16', `fp-armv8', `arm1020t', 8370 `arm1020e', `arm1136jf-s', `maverick', `neon', `neon-vfpv3', 8371 `neon-fp16', `neon-vfpv4', `neon-fp-armv8', `crypto-neon-fp-armv8', 8372 `neon-fp-armv8.1' and `crypto-neon-fp-armv8.1'. 8373 8374 In addition to determining which instructions are assembled, this 8375 option also affects the way in which the `.double' assembler 8376 directive behaves when assembling little-endian code. 8377 8378 The default is dependent on the processor selected. For 8379 Architecture 5 or later, the default is to assemble for VFP 8380 instructions; for earlier architectures the default is to assemble 8381 for FPA instructions. 8382 8383`-mfp16-format=FORMAT' 8384 This option specifies the half-precision floating point format to 8385 use when assembling floating point numbers emitted by the 8386 `.float16' directive. The following format options are recognized: 8387 `ieee', `alternative'. If `ieee' is specified then the IEEE 8388 754-2008 half-precision floating point format is used, if 8389 `alternative' is specified then the Arm alternative half-precision 8390 format is used. If this option is set on the command line then the 8391 format is fixed and cannot be changed with the `float16_format' 8392 directive. If this value is not set then the IEEE 754-2008 format 8393 is used until the format is explicitly set with the 8394 `float16_format' directive. 8395 8396`-mthumb' 8397 This option specifies that the assembler should start assembling 8398 Thumb instructions; that is, it should behave as though the file 8399 starts with a `.code 16' directive. 8400 8401`-mthumb-interwork' 8402 This option specifies that the output generated by the assembler 8403 should be marked as supporting interworking. It also affects the 8404 behaviour of the `ADR' and `ADRL' pseudo opcodes. 8405 8406`-mimplicit-it=never' 8407`-mimplicit-it=always' 8408`-mimplicit-it=arm' 8409`-mimplicit-it=thumb' 8410 The `-mimplicit-it' option controls the behavior of the assembler 8411 when conditional instructions are not enclosed in IT blocks. 8412 There are four possible behaviors. If `never' is specified, such 8413 constructs cause a warning in ARM code and an error in Thumb-2 8414 code. If `always' is specified, such constructs are accepted in 8415 both ARM and Thumb-2 code, where the IT instruction is added 8416 implicitly. If `arm' is specified, such constructs are accepted 8417 in ARM code and cause an error in Thumb-2 code. If `thumb' is 8418 specified, such constructs cause a warning in ARM code and are 8419 accepted in Thumb-2 code. If you omit this option, the behavior 8420 is equivalent to `-mimplicit-it=arm'. 8421 8422`-mapcs-26' 8423`-mapcs-32' 8424 These options specify that the output generated by the assembler 8425 should be marked as supporting the indicated version of the Arm 8426 Procedure. Calling Standard. 8427 8428`-matpcs' 8429 This option specifies that the output generated by the assembler 8430 should be marked as supporting the Arm/Thumb Procedure Calling 8431 Standard. If enabled this option will cause the assembler to 8432 create an empty debugging section in the object file called 8433 .arm.atpcs. Debuggers can use this to determine the ABI being 8434 used by. 8435 8436`-mapcs-float' 8437 This indicates the floating point variant of the APCS should be 8438 used. In this variant floating point arguments are passed in FP 8439 registers rather than integer registers. 8440 8441`-mapcs-reentrant' 8442 This indicates that the reentrant variant of the APCS should be 8443 used. This variant supports position independent code. 8444 8445`-mfloat-abi=ABI' 8446 This option specifies that the output generated by the assembler 8447 should be marked as using specified floating point ABI. The 8448 following values are recognized: `soft', `softfp' and `hard'. 8449 8450`-meabi=VER' 8451 This option specifies which EABI version the produced object files 8452 should conform to. The following values are recognized: `gnu', `4' 8453 and `5'. 8454 8455`-EB' 8456 This option specifies that the output generated by the assembler 8457 should be marked as being encoded for a big-endian processor. 8458 8459 Note: If a program is being built for a system with big-endian data 8460 and little-endian instructions then it should be assembled with the 8461 `-EB' option, (all of it, code and data) and then linked with the 8462 `--be8' option. This will reverse the endianness of the 8463 instructions back to little-endian, but leave the data as 8464 big-endian. 8465 8466`-EL' 8467 This option specifies that the output generated by the assembler 8468 should be marked as being encoded for a little-endian processor. 8469 8470`-k' 8471 This option specifies that the output of the assembler should be 8472 marked as position-independent code (PIC). 8473 8474`--fix-v4bx' 8475 Allow `BX' instructions in ARMv4 code. This is intended for use 8476 with the linker option of the same name. 8477 8478`-mwarn-deprecated' 8479`-mno-warn-deprecated' 8480 Enable or disable warnings about using deprecated options or 8481 features. The default is to warn. 8482 8483`-mccs' 8484 Turns on CodeComposer Studio assembly syntax compatibility mode. 8485 8486`-mwarn-syms' 8487`-mno-warn-syms' 8488 Enable or disable warnings about symbols that match the names of 8489 ARM instructions. The default is to warn. 8490 8491 8492 8493File: as.info, Node: ARM Syntax, Next: ARM Floating Point, Prev: ARM Options, Up: ARM-Dependent 8494 84959.4.2 Syntax 8496------------ 8497 8498* Menu: 8499 8500* ARM-Instruction-Set:: Instruction Set 8501* ARM-Chars:: Special Characters 8502* ARM-Regs:: Register Names 8503* ARM-Relocations:: Relocations 8504* ARM-Neon-Alignment:: NEON Alignment Specifiers 8505 8506 8507File: as.info, Node: ARM-Instruction-Set, Next: ARM-Chars, Up: ARM Syntax 8508 85099.4.2.1 Instruction Set Syntax 8510.............................. 8511 8512Two slightly different syntaxes are support for ARM and THUMB 8513instructions. The default, `divided', uses the old style where ARM and 8514THUMB instructions had their own, separate syntaxes. The new, 8515`unified' syntax, which can be selected via the `.syntax' directive, 8516and has the following main features: 8517 8518 * Immediate operands do not require a `#' prefix. 8519 8520 * The `IT' instruction may appear, and if it does it is validated 8521 against subsequent conditional affixes. In ARM mode it does not 8522 generate machine code, in THUMB mode it does. 8523 8524 * For ARM instructions the conditional affixes always appear at the 8525 end of the instruction. For THUMB instructions conditional 8526 affixes can be used, but only inside the scope of an `IT' 8527 instruction. 8528 8529 * All of the instructions new to the V6T2 architecture (and later) 8530 are available. (Only a few such instructions can be written in the 8531 `divided' syntax). 8532 8533 * The `.N' and `.W' suffixes are recognized and honored. 8534 8535 * All instructions set the flags if and only if they have an `s' 8536 affix. 8537 8538 8539File: as.info, Node: ARM-Chars, Next: ARM-Regs, Prev: ARM-Instruction-Set, Up: ARM Syntax 8540 85419.4.2.2 Special Characters 8542.......................... 8543 8544The presence of a `@' anywhere on a line indicates the start of a 8545comment that extends to the end of that line. 8546 8547 If a `#' appears as the first character of a line then the whole 8548line is treated as a comment, but in this case the line could also be a 8549logical line number directive (*note Comments::) or a preprocessor 8550control command (*note Preprocessing::). 8551 8552 The `;' character can be used instead of a newline to separate 8553statements. 8554 8555 Either `#' or `$' can be used to indicate immediate operands. 8556 8557 *TODO* Explain about /data modifier on symbols. 8558 8559 8560File: as.info, Node: ARM-Regs, Next: ARM-Relocations, Prev: ARM-Chars, Up: ARM Syntax 8561 85629.4.2.3 Register Names 8563...................... 8564 8565*TODO* Explain about ARM register naming, and the predefined names. 8566 8567 8568File: as.info, Node: ARM-Relocations, Next: ARM-Neon-Alignment, Prev: ARM-Regs, Up: ARM Syntax 8569 85709.4.2.4 ARM relocation generation 8571................................. 8572 8573Specific data relocations can be generated by putting the relocation 8574name in parentheses after the symbol name. For example: 8575 8576 .word foo(TARGET1) 8577 8578 This will generate an `R_ARM_TARGET1' relocation against the symbol 8579FOO. The following relocations are supported: `GOT', `GOTOFF', 8580`TARGET1', `TARGET2', `SBREL', `TLSGD', `TLSLDM', `TLSLDO', `TLSDESC', 8581`TLSCALL', `GOTTPOFF', `GOT_PREL' and `TPOFF'. 8582 8583 For compatibility with older toolchains the assembler also accepts 8584`(PLT)' after branch targets. On legacy targets this will generate the 8585deprecated `R_ARM_PLT32' relocation. On EABI targets it will encode 8586either the `R_ARM_CALL' or `R_ARM_JUMP24' relocation, as appropriate. 8587 8588 Relocations for `MOVW' and `MOVT' instructions can be generated by 8589prefixing the value with `#:lower16:' and `#:upper16' respectively. 8590For example to load the 32-bit address of foo into r0: 8591 8592 MOVW r0, #:lower16:foo 8593 MOVT r0, #:upper16:foo 8594 8595 Relocations `R_ARM_THM_ALU_ABS_G0_NC', `R_ARM_THM_ALU_ABS_G1_NC', 8596`R_ARM_THM_ALU_ABS_G2_NC' and `R_ARM_THM_ALU_ABS_G3_NC' can be 8597generated by prefixing the value with `#:lower0_7:#', `#:lower8_15:#', 8598`#:upper0_7:#' and `#:upper8_15:#' respectively. For example to load 8599the 32-bit address of foo into r0: 8600 8601 MOVS r0, #:upper8_15:#foo 8602 LSLS r0, r0, #8 8603 ADDS r0, #:upper0_7:#foo 8604 LSLS r0, r0, #8 8605 ADDS r0, #:lower8_15:#foo 8606 LSLS r0, r0, #8 8607 ADDS r0, #:lower0_7:#foo 8608 8609 8610File: as.info, Node: ARM-Neon-Alignment, Prev: ARM-Relocations, Up: ARM Syntax 8611 86129.4.2.5 NEON Alignment Specifiers 8613................................. 8614 8615Some NEON load/store instructions allow an optional address alignment 8616qualifier. The ARM documentation specifies that this is indicated by 8617`@ ALIGN'. However GAS already interprets the `@' character as a "line 8618comment" start, so `: ALIGN' is used instead. For example: 8619 8620 vld1.8 {q0}, [r0, :128] 8621 8622 8623File: as.info, Node: ARM Floating Point, Next: ARM Directives, Prev: ARM Syntax, Up: ARM-Dependent 8624 86259.4.3 Floating Point 8626-------------------- 8627 8628The ARM family uses IEEE floating-point numbers. 8629 8630 8631File: as.info, Node: ARM Directives, Next: ARM Opcodes, Prev: ARM Floating Point, Up: ARM-Dependent 8632 86339.4.4 ARM Machine Directives 8634---------------------------- 8635 8636`.align EXPRESSION [, EXPRESSION]' 8637 This is the generic .ALIGN directive. For the ARM however if the 8638 first argument is zero (ie no alignment is needed) the assembler 8639 will behave as if the argument had been 2 (ie pad to the next four 8640 byte boundary). This is for compatibility with ARM's own 8641 assembler. 8642 8643`.arch NAME' 8644 Select the target architecture. Valid values for NAME are the 8645 same as for the `-march' command-line option without the 8646 instruction set extension. 8647 8648 Specifying `.arch' clears any previously selected architecture 8649 extensions. 8650 8651`.arch_extension NAME' 8652 Add or remove an architecture extension to the target 8653 architecture. Valid values for NAME are the same as those 8654 accepted as architectural extensions by the `-mcpu' and `-march' 8655 command-line options. 8656 8657 `.arch_extension' may be used multiple times to add or remove 8658 extensions incrementally to the architecture being compiled for. 8659 8660`.arm' 8661 This performs the same action as .CODE 32. 8662 8663`.bss' 8664 This directive switches to the `.bss' section. 8665 8666`.cantunwind' 8667 Prevents unwinding through the current function. No personality 8668 routine or exception table data is required or permitted. 8669 8670`.code `[16|32]'' 8671 This directive selects the instruction set being generated. The 8672 value 16 selects Thumb, with the value 32 selecting ARM. 8673 8674`.cpu NAME' 8675 Select the target processor. Valid values for NAME are the same as 8676 for the `-mcpu' command-line option without the instruction set 8677 extension. 8678 8679 Specifying `.cpu' clears any previously selected architecture 8680 extensions. 8681 8682`NAME .dn REGISTER NAME [.TYPE] [[INDEX]]' 8683`NAME .qn REGISTER NAME [.TYPE] [[INDEX]]' 8684 The `dn' and `qn' directives are used to create typed and/or 8685 indexed register aliases for use in Advanced SIMD Extension (Neon) 8686 instructions. The former should be used to create aliases of 8687 double-precision registers, and the latter to create aliases of 8688 quad-precision registers. 8689 8690 If these directives are used to create typed aliases, those 8691 aliases can be used in Neon instructions instead of writing types 8692 after the mnemonic or after each operand. For example: 8693 8694 x .dn d2.f32 8695 y .dn d3.f32 8696 z .dn d4.f32[1] 8697 vmul x,y,z 8698 8699 This is equivalent to writing the following: 8700 8701 vmul.f32 d2,d3,d4[1] 8702 8703 Aliases created using `dn' or `qn' can be destroyed using `unreq'. 8704 8705`.eabi_attribute TAG, VALUE' 8706 Set the EABI object attribute TAG to VALUE. 8707 8708 The TAG is either an attribute number, or one of the following: 8709 `Tag_CPU_raw_name', `Tag_CPU_name', `Tag_CPU_arch', 8710 `Tag_CPU_arch_profile', `Tag_ARM_ISA_use', `Tag_THUMB_ISA_use', 8711 `Tag_FP_arch', `Tag_WMMX_arch', `Tag_Advanced_SIMD_arch', 8712 `Tag_MVE_arch', `Tag_PCS_config', `Tag_ABI_PCS_R9_use', 8713 `Tag_ABI_PCS_RW_data', `Tag_ABI_PCS_RO_data', 8714 `Tag_ABI_PCS_GOT_use', `Tag_ABI_PCS_wchar_t', 8715 `Tag_ABI_FP_rounding', `Tag_ABI_FP_denormal', 8716 `Tag_ABI_FP_exceptions', `Tag_ABI_FP_user_exceptions', 8717 `Tag_ABI_FP_number_model', `Tag_ABI_align_needed', 8718 `Tag_ABI_align_preserved', `Tag_ABI_enum_size', 8719 `Tag_ABI_HardFP_use', `Tag_ABI_VFP_args', `Tag_ABI_WMMX_args', 8720 `Tag_ABI_optimization_goals', `Tag_ABI_FP_optimization_goals', 8721 `Tag_compatibility', `Tag_CPU_unaligned_access', 8722 `Tag_FP_HP_extension', `Tag_ABI_FP_16bit_format', 8723 `Tag_MPextension_use', `Tag_DIV_use', `Tag_nodefaults', 8724 `Tag_also_compatible_with', `Tag_conformance', `Tag_T2EE_use', 8725 `Tag_Virtualization_use' 8726 8727 The VALUE is either a `number', `"string"', or `number, "string"' 8728 depending on the tag. 8729 8730 Note - the following legacy values are also accepted by TAG: 8731 `Tag_VFP_arch', `Tag_ABI_align8_needed', 8732 `Tag_ABI_align8_preserved', `Tag_VFP_HP_extension', 8733 8734`.even' 8735 This directive aligns to an even-numbered address. 8736 8737`.extend EXPRESSION [, EXPRESSION]*' 8738`.ldouble EXPRESSION [, EXPRESSION]*' 8739 These directives write 12byte long double floating-point values to 8740 the output section. These are not compatible with current ARM 8741 processors or ABIs. 8742 8743`.float16 VALUE [,...,VALUE_N]' 8744 Place the half precision floating point representation of one or 8745 more floating-point values into the current section. The exact 8746 format of the encoding is specified by `.float16_format'. If the 8747 format has not been explicitly set yet (either via the 8748 `.float16_format' directive or the command line option) then the 8749 IEEE 754-2008 format is used. 8750 8751`.float16_format FORMAT' 8752 Set the format to use when encoding float16 values emitted by the 8753 `.float16' directive. Once the format has been set it cannot be 8754 changed. `format' should be one of the following: `ieee' (encode 8755 in the IEEE 754-2008 half precision format) or `alternative' 8756 (encode in the Arm alternative half precision format). 8757 8758`.fnend' 8759 Marks the end of a function with an unwind table entry. The 8760 unwind index table entry is created when this directive is 8761 processed. 8762 8763 If no personality routine has been specified then standard 8764 personality routine 0 or 1 will be used, depending on the number 8765 of unwind opcodes required. 8766 8767`.fnstart' 8768 Marks the start of a function with an unwind table entry. 8769 8770`.force_thumb' 8771 This directive forces the selection of Thumb instructions, even if 8772 the target processor does not support those instructions 8773 8774`.fpu NAME' 8775 Select the floating-point unit to assemble for. Valid values for 8776 NAME are the same as for the `-mfpu' command-line option. 8777 8778`.handlerdata' 8779 Marks the end of the current function, and the start of the 8780 exception table entry for that function. Anything between this 8781 directive and the `.fnend' directive will be added to the 8782 exception table entry. 8783 8784 Must be preceded by a `.personality' or `.personalityindex' 8785 directive. 8786 8787`.inst OPCODE [ , ... ]' 8788`.inst.n OPCODE [ , ... ]' 8789`.inst.w OPCODE [ , ... ]' 8790 Generates the instruction corresponding to the numerical value 8791 OPCODE. `.inst.n' and `.inst.w' allow the Thumb instruction size 8792 to be specified explicitly, overriding the normal encoding rules. 8793 8794`.ldouble EXPRESSION [, EXPRESSION]*' 8795 See `.extend'. 8796 8797`.ltorg' 8798 This directive causes the current contents of the literal pool to 8799 be dumped into the current section (which is assumed to be the 8800 .text section) at the current location (aligned to a word 8801 boundary). `GAS' maintains a separate literal pool for each 8802 section and each sub-section. The `.ltorg' directive will only 8803 affect the literal pool of the current section and sub-section. 8804 At the end of assembly all remaining, un-empty literal pools will 8805 automatically be dumped. 8806 8807 Note - older versions of `GAS' would dump the current literal pool 8808 any time a section change occurred. This is no longer done, since 8809 it prevents accurate control of the placement of literal pools. 8810 8811`.movsp REG [, #OFFSET]' 8812 Tell the unwinder that REG contains an offset from the current 8813 stack pointer. If OFFSET is not specified then it is assumed to be 8814 zero. 8815 8816`.object_arch NAME' 8817 Override the architecture recorded in the EABI object attribute 8818 section. Valid values for NAME are the same as for the `.arch' 8819 directive. Typically this is useful when code uses runtime 8820 detection of CPU features. 8821 8822`.packed EXPRESSION [, EXPRESSION]*' 8823 This directive writes 12-byte packed floating-point values to the 8824 output section. These are not compatible with current ARM 8825 processors or ABIs. 8826 8827`.pad #COUNT' 8828 Generate unwinder annotations for a stack adjustment of COUNT 8829 bytes. A positive value indicates the function prologue allocated 8830 stack space by decrementing the stack pointer. 8831 8832`.personality NAME' 8833 Sets the personality routine for the current function to NAME. 8834 8835`.personalityindex INDEX' 8836 Sets the personality routine for the current function to the EABI 8837 standard routine number INDEX 8838 8839`.pool' 8840 This is a synonym for .ltorg. 8841 8842`NAME .req REGISTER NAME' 8843 This creates an alias for REGISTER NAME called NAME. For example: 8844 8845 foo .req r0 8846 8847`.save REGLIST' 8848 Generate unwinder annotations to restore the registers in REGLIST. 8849 The format of REGLIST is the same as the corresponding 8850 store-multiple instruction. 8851 8852 _core registers_ 8853 .save {r4, r5, r6, lr} 8854 stmfd sp!, {r4, r5, r6, lr} 8855 _FPA registers_ 8856 .save f4, 2 8857 sfmfd f4, 2, [sp]! 8858 _VFP registers_ 8859 .save {d8, d9, d10} 8860 fstmdx sp!, {d8, d9, d10} 8861 _iWMMXt registers_ 8862 .save {wr10, wr11} 8863 wstrd wr11, [sp, #-8]! 8864 wstrd wr10, [sp, #-8]! 8865 or 8866 .save wr11 8867 wstrd wr11, [sp, #-8]! 8868 .save wr10 8869 wstrd wr10, [sp, #-8]! 8870 8871`.setfp FPREG, SPREG [, #OFFSET]' 8872 Make all unwinder annotations relative to a frame pointer. 8873 Without this the unwinder will use offsets from the stack pointer. 8874 8875 The syntax of this directive is the same as the `add' or `mov' 8876 instruction used to set the frame pointer. SPREG must be either 8877 `sp' or mentioned in a previous `.movsp' directive. 8878 8879 .movsp ip 8880 mov ip, sp 8881 ... 8882 .setfp fp, ip, #4 8883 add fp, ip, #4 8884 8885`.secrel32 EXPRESSION [, EXPRESSION]*' 8886 This directive emits relocations that evaluate to the 8887 section-relative offset of each expression's symbol. This 8888 directive is only supported for PE targets. 8889 8890`.syntax [`unified' | `divided']' 8891 This directive sets the Instruction Set Syntax as described in the 8892 *Note ARM-Instruction-Set:: section. 8893 8894`.thumb' 8895 This performs the same action as .CODE 16. 8896 8897`.thumb_func' 8898 This directive specifies that the following symbol is the name of a 8899 Thumb encoded function. This information is necessary in order to 8900 allow the assembler and linker to generate correct code for 8901 interworking between Arm and Thumb instructions and should be used 8902 even if interworking is not going to be performed. The presence 8903 of this directive also implies `.thumb' 8904 8905 This directive is not necessary when generating EABI objects. On 8906 these targets the encoding is implicit when generating Thumb code. 8907 8908`.thumb_set' 8909 This performs the equivalent of a `.set' directive in that it 8910 creates a symbol which is an alias for another symbol (possibly 8911 not yet defined). This directive also has the added property in 8912 that it marks the aliased symbol as being a thumb function entry 8913 point, in the same way that the `.thumb_func' directive does. 8914 8915`.tlsdescseq TLS-VARIABLE' 8916 This directive is used to annotate parts of an inlined TLS 8917 descriptor trampoline. Normally the trampoline is provided by the 8918 linker, and this directive is not needed. 8919 8920`.unreq ALIAS-NAME' 8921 This undefines a register alias which was previously defined using 8922 the `req', `dn' or `qn' directives. For example: 8923 8924 foo .req r0 8925 .unreq foo 8926 8927 An error occurs if the name is undefined. Note - this pseudo op 8928 can be used to delete builtin in register name aliases (eg 'r0'). 8929 This should only be done if it is really necessary. 8930 8931`.unwind_raw OFFSET, BYTE1, ...' 8932 Insert one of more arbitrary unwind opcode bytes, which are known 8933 to adjust the stack pointer by OFFSET bytes. 8934 8935 For example `.unwind_raw 4, 0xb1, 0x01' is equivalent to `.save 8936 {r0}' 8937 8938`.vsave VFP-REGLIST' 8939 Generate unwinder annotations to restore the VFP registers in 8940 VFP-REGLIST using FLDMD. Also works for VFPv3 registers that are 8941 to be restored using VLDM. The format of VFP-REGLIST is the same 8942 as the corresponding store-multiple instruction. 8943 8944 _VFP registers_ 8945 .vsave {d8, d9, d10} 8946 fstmdd sp!, {d8, d9, d10} 8947 _VFPv3 registers_ 8948 .vsave {d15, d16, d17} 8949 vstm sp!, {d15, d16, d17} 8950 8951 Since FLDMX and FSTMX are now deprecated, this directive should be 8952 used in favour of `.save' for saving VFP registers for ARMv6 and 8953 above. 8954 8955 8956 8957File: as.info, Node: ARM Opcodes, Next: ARM Mapping Symbols, Prev: ARM Directives, Up: ARM-Dependent 8958 89599.4.5 Opcodes 8960------------- 8961 8962`as' implements all the standard ARM opcodes. It also implements 8963several pseudo opcodes, including several synthetic load instructions. 8964 8965`NOP' 8966 nop 8967 8968 This pseudo op will always evaluate to a legal ARM instruction 8969 that does nothing. Currently it will evaluate to MOV r0, r0. 8970 8971`LDR' 8972 ldr <register> , = <expression> 8973 8974 If expression evaluates to a numeric constant then a MOV or MVN 8975 instruction will be used in place of the LDR instruction, if the 8976 constant can be generated by either of these instructions. 8977 Otherwise the constant will be placed into the nearest literal 8978 pool (if it not already there) and a PC relative LDR instruction 8979 will be generated. 8980 8981`ADR' 8982 adr <register> <label> 8983 8984 This instruction will load the address of LABEL into the indicated 8985 register. The instruction will evaluate to a PC relative ADD or 8986 SUB instruction depending upon where the label is located. If the 8987 label is out of range, or if it is not defined in the same file 8988 (and section) as the ADR instruction, then an error will be 8989 generated. This instruction will not make use of the literal pool. 8990 8991 If LABEL is a thumb function symbol, and thumb interworking has 8992 been enabled via the `-mthumb-interwork' option then the bottom 8993 bit of the value stored into REGISTER will be set. This allows 8994 the following sequence to work as expected: 8995 8996 adr r0, thumb_function 8997 blx r0 8998 8999`ADRL' 9000 adrl <register> <label> 9001 9002 This instruction will load the address of LABEL into the indicated 9003 register. The instruction will evaluate to one or two PC relative 9004 ADD or SUB instructions depending upon where the label is located. 9005 If a second instruction is not needed a NOP instruction will be 9006 generated in its place, so that this instruction is always 8 bytes 9007 long. 9008 9009 If the label is out of range, or if it is not defined in the same 9010 file (and section) as the ADRL instruction, then an error will be 9011 generated. This instruction will not make use of the literal pool. 9012 9013 If LABEL is a thumb function symbol, and thumb interworking has 9014 been enabled via the `-mthumb-interwork' option then the bottom 9015 bit of the value stored into REGISTER will be set. 9016 9017 9018 For information on the ARM or Thumb instruction sets, see `ARM 9019Software Development Toolkit Reference Manual', Advanced RISC Machines 9020Ltd. 9021 9022 9023File: as.info, Node: ARM Mapping Symbols, Next: ARM Unwinding Tutorial, Prev: ARM Opcodes, Up: ARM-Dependent 9024 90259.4.6 Mapping Symbols 9026--------------------- 9027 9028The ARM ELF specification requires that special symbols be inserted 9029into object files to mark certain features: 9030 9031`$a' 9032 At the start of a region of code containing ARM instructions. 9033 9034`$t' 9035 At the start of a region of code containing THUMB instructions. 9036 9037`$d' 9038 At the start of a region of data. 9039 9040 9041 The assembler will automatically insert these symbols for you - there 9042is no need to code them yourself. Support for tagging symbols ($b, $f, 9043$p and $m) which is also mentioned in the current ARM ELF specification 9044is not implemented. This is because they have been dropped from the 9045new EABI and so tools cannot rely upon their presence. 9046 9047 9048File: as.info, Node: ARM Unwinding Tutorial, Prev: ARM Mapping Symbols, Up: ARM-Dependent 9049 90509.4.7 Unwinding 9051--------------- 9052 9053The ABI for the ARM Architecture specifies a standard format for 9054exception unwind information. This information is used when an 9055exception is thrown to determine where control should be transferred. 9056In particular, the unwind information is used to determine which 9057function called the function that threw the exception, and which 9058function called that one, and so forth. This information is also used 9059to restore the values of callee-saved registers in the function 9060catching the exception. 9061 9062 If you are writing functions in assembly code, and those functions 9063call other functions that throw exceptions, you must use assembly 9064pseudo ops to ensure that appropriate exception unwind information is 9065generated. Otherwise, if one of the functions called by your assembly 9066code throws an exception, the run-time library will be unable to unwind 9067the stack through your assembly code and your program will not behave 9068correctly. 9069 9070 To illustrate the use of these pseudo ops, we will examine the code 9071that G++ generates for the following C++ input: 9072 9073 9074void callee (int *); 9075 9076int 9077caller () 9078{ 9079 int i; 9080 callee (&i); 9081 return i; 9082} 9083 9084 This example does not show how to throw or catch an exception from 9085assembly code. That is a much more complex operation and should always 9086be done in a high-level language, such as C++, that directly supports 9087exceptions. 9088 9089 The code generated by one particular version of G++ when compiling 9090the example above is: 9091 9092 9093_Z6callerv: 9094 .fnstart 9095.LFB2: 9096 @ Function supports interworking. 9097 @ args = 0, pretend = 0, frame = 8 9098 @ frame_needed = 1, uses_anonymous_args = 0 9099 stmfd sp!, {fp, lr} 9100 .save {fp, lr} 9101.LCFI0: 9102 .setfp fp, sp, #4 9103 add fp, sp, #4 9104.LCFI1: 9105 .pad #8 9106 sub sp, sp, #8 9107.LCFI2: 9108 sub r3, fp, #8 9109 mov r0, r3 9110 bl _Z6calleePi 9111 ldr r3, [fp, #-8] 9112 mov r0, r3 9113 sub sp, fp, #4 9114 ldmfd sp!, {fp, lr} 9115 bx lr 9116.LFE2: 9117 .fnend 9118 9119 Of course, the sequence of instructions varies based on the options 9120you pass to GCC and on the version of GCC in use. The exact 9121instructions are not important since we are focusing on the pseudo ops 9122that are used to generate unwind information. 9123 9124 An important assumption made by the unwinder is that the stack frame 9125does not change during the body of the function. In particular, since 9126we assume that the assembly code does not itself throw an exception, 9127the only point where an exception can be thrown is from a call, such as 9128the `bl' instruction above. At each call site, the same saved 9129registers (including `lr', which indicates the return address) must be 9130located in the same locations relative to the frame pointer. 9131 9132 The `.fnstart' (*note .fnstart pseudo op: arm_fnstart.) pseudo op 9133appears immediately before the first instruction of the function while 9134the `.fnend' (*note .fnend pseudo op: arm_fnend.) pseudo op appears 9135immediately after the last instruction of the function. These pseudo 9136ops specify the range of the function. 9137 9138 Only the order of the other pseudos ops (e.g., `.setfp' or `.pad') 9139matters; their exact locations are irrelevant. In the example above, 9140the compiler emits the pseudo ops with particular instructions. That 9141makes it easier to understand the code, but it is not required for 9142correctness. It would work just as well to emit all of the pseudo ops 9143other than `.fnend' in the same order, but immediately after `.fnstart'. 9144 9145 The `.save' (*note .save pseudo op: arm_save.) pseudo op indicates 9146registers that have been saved to the stack so that they can be 9147restored before the function returns. The argument to the `.save' 9148pseudo op is a list of registers to save. If a register is 9149"callee-saved" (as specified by the ABI) and is modified by the 9150function you are writing, then your code must save the value before it 9151is modified and restore the original value before the function returns. 9152If an exception is thrown, the run-time library restores the values of 9153these registers from their locations on the stack before returning 9154control to the exception handler. (Of course, if an exception is not 9155thrown, the function that contains the `.save' pseudo op restores these 9156registers in the function epilogue, as is done with the `ldmfd' 9157instruction above.) 9158 9159 You do not have to save callee-saved registers at the very beginning 9160of the function and you do not need to use the `.save' pseudo op 9161immediately following the point at which the registers are saved. 9162However, if you modify a callee-saved register, you must save it on the 9163stack before modifying it and before calling any functions which might 9164throw an exception. And, you must use the `.save' pseudo op to 9165indicate that you have done so. 9166 9167 The `.pad' (*note .pad: arm_pad.) pseudo op indicates a modification 9168of the stack pointer that does not save any registers. The argument is 9169the number of bytes (in decimal) that are subtracted from the stack 9170pointer. (On ARM CPUs, the stack grows downwards, so subtracting from 9171the stack pointer increases the size of the stack.) 9172 9173 The `.setfp' (*note .setfp pseudo op: arm_setfp.) pseudo op 9174indicates the register that contains the frame pointer. The first 9175argument is the register that is set, which is typically `fp'. The 9176second argument indicates the register from which the frame pointer 9177takes its value. The third argument, if present, is the value (in 9178decimal) added to the register specified by the second argument to 9179compute the value of the frame pointer. You should not modify the 9180frame pointer in the body of the function. 9181 9182 If you do not use a frame pointer, then you should not use the 9183`.setfp' pseudo op. If you do not use a frame pointer, then you should 9184avoid modifying the stack pointer outside of the function prologue. 9185Otherwise, the run-time library will be unable to find saved registers 9186when it is unwinding the stack. 9187 9188 The pseudo ops described above are sufficient for writing assembly 9189code that calls functions which may throw exceptions. If you need to 9190know more about the object-file format used to represent unwind 9191information, you may consult the `Exception Handling ABI for the ARM 9192Architecture' available from `http://infocenter.arm.com'. 9193 9194 9195File: as.info, Node: AVR-Dependent, Next: Blackfin-Dependent, Prev: ARM-Dependent, Up: Machine Dependencies 9196 91979.5 AVR Dependent Features 9198========================== 9199 9200* Menu: 9201 9202* AVR Options:: Options 9203* AVR Syntax:: Syntax 9204* AVR Opcodes:: Opcodes 9205* AVR Pseudo Instructions:: Pseudo Instructions 9206 9207 9208File: as.info, Node: AVR Options, Next: AVR Syntax, Up: AVR-Dependent 9209 92109.5.1 Options 9211------------- 9212 9213`-mmcu=MCU' 9214 Specify ATMEL AVR instruction set or MCU type. 9215 9216 Instruction set avr1 is for the minimal AVR core, not supported by 9217 the C compiler, only for assembler programs (MCU types: at90s1200, 9218 attiny11, attiny12, attiny15, attiny28). 9219 9220 Instruction set avr2 (default) is for the classic AVR core with up 9221 to 8K program memory space (MCU types: at90s2313, at90s2323, 9222 at90s2333, at90s2343, attiny22, attiny26, at90s4414, at90s4433, 9223 at90s4434, at90s8515, at90c8534, at90s8535). 9224 9225 Instruction set avr25 is for the classic AVR core with up to 8K 9226 program memory space plus the MOVW instruction (MCU types: 9227 attiny13, attiny13a, attiny2313, attiny2313a, attiny24, attiny24a, 9228 attiny4313, attiny44, attiny44a, attiny84, attiny84a, attiny25, 9229 attiny45, attiny85, attiny261, attiny261a, attiny461, attiny461a, 9230 attiny861, attiny861a, attiny87, attiny43u, attiny48, attiny88, 9231 attiny828, at86rf401, ata6289, ata5272). 9232 9233 Instruction set avr3 is for the classic AVR core with up to 128K 9234 program memory space (MCU types: at43usb355, at76c711). 9235 9236 Instruction set avr31 is for the classic AVR core with exactly 9237 128K program memory space (MCU types: atmega103, at43usb320). 9238 9239 Instruction set avr35 is for classic AVR core plus MOVW, CALL, and 9240 JMP instructions (MCU types: attiny167, attiny1634, at90usb82, 9241 at90usb162, atmega8u2, atmega16u2, atmega32u2, ata5505). 9242 9243 Instruction set avr4 is for the enhanced AVR core with up to 8K 9244 program memory space (MCU types: atmega48, atmega48a, atmega48pa, 9245 atmega48p, atmega8, atmega8a, atmega88, atmega88a, atmega88p, 9246 atmega88pa, atmega8515, atmega8535, atmega8hva, at90pwm1, 9247 at90pwm2, at90pwm2b, at90pwm3, at90pwm3b, at90pwm81, ata6285, 9248 ata6286). 9249 9250 Instruction set avr5 is for the enhanced AVR core with up to 128K 9251 program memory space (MCU types: at90pwm161, atmega16, atmega16a, 9252 atmega161, atmega162, atmega163, atmega164a, atmega164p, 9253 atmega164pa, atmega165, atmega165a, atmega165p, atmega165pa, 9254 atmega168, atmega168a, atmega168p, atmega168pa, atmega169, 9255 atmega169a, atmega169p, atmega169pa, atmega32, atmega323, 9256 atmega324a, atmega324p, atmega324pa, atmega325, atmega325a, 9257 atmega32, atmega32a, atmega323, atmega324a, atmega324p, 9258 atmega324pa, atmega325, atmega325a, atmega325p, atmega325p, 9259 atmega325pa, atmega3250, atmega3250a, atmega3250p, atmega3250pa, 9260 atmega328, atmega328p, atmega329, atmega329a, atmega329p, 9261 atmega329pa, atmega3290a, atmega3290p, atmega3290pa, atmega406, 9262 atmega64, atmega64a, atmega64rfr2, atmega644rfr2, atmega640, 9263 atmega644, atmega644a, atmega644p, atmega644pa, atmega645, 9264 atmega645a, atmega645p, atmega6450, atmega6450a, atmega6450p, 9265 atmega649, atmega649a, atmega649p, atmega6490, atmega6490a, 9266 atmega6490p, atmega16hva, atmega16hva2, atmega16hvb, 9267 atmega16hvbrevb, atmega32hvb, atmega32hvbrevb, atmega64hve, 9268 at90can32, at90can64, at90pwm161, at90pwm216, at90pwm316, 9269 atmega32c1, atmega64c1, atmega16m1, atmega32m1, atmega64m1, 9270 atmega16u4, atmega32u4, atmega32u6, at90usb646, at90usb647, at94k, 9271 at90scr100, ata5790, ata5795). 9272 9273 Instruction set avr51 is for the enhanced AVR core with exactly 9274 128K program memory space (MCU types: atmega128, atmega128a, 9275 atmega1280, atmega1281, atmega1284, atmega1284p, atmega128rfa1, 9276 atmega128rfr2, atmega1284rfr2, at90can128, at90usb1286, 9277 at90usb1287, m3000). 9278 9279 Instruction set avr6 is for the enhanced AVR core with a 3-byte PC 9280 (MCU types: atmega2560, atmega2561, atmega256rfr2, atmega2564rfr2). 9281 9282 Instruction set avrxmega2 is for the XMEGA AVR core with 8K to 64K 9283 program memory space and less than 64K data space (MCU types: 9284 atxmega16a4, atxmega16a4u, atxmega16c4, atxmega16d4, atxmega16x1, 9285 atxmega32a4, atxmega32a4u, atxmega32c4, atxmega32d4, atxmega16e5, 9286 atxmega8e5, atxmega32e5, atxmega32x1). 9287 9288 Instruction set avrxmega3 is for the XMEGA AVR core with up to 64K 9289 of combined program memory and RAM, and with program memory 9290 visible in the RAM address space (MCU types: attiny212, attiny214, 9291 attiny412, attiny414, attiny416, attiny417, attiny814, attiny816, 9292 attiny817, attiny1614, attiny1616, attiny1617, attiny3214, 9293 attiny3216, attiny3217). 9294 9295 Instruction set avrxmega4 is for the XMEGA AVR core with up to 64K 9296 program memory space and less than 64K data space (MCU types: 9297 atxmega64a3, atxmega64a3u, atxmega64a4u, atxmega64b1, atxmega64b3, 9298 atxmega64c3, atxmega64d3, atxmega64d4). 9299 9300 Instruction set avrxmega5 is for the XMEGA AVR core with up to 64K 9301 program memory space and greater than 64K data space (MCU types: 9302 atxmega64a1, atxmega64a1u). 9303 9304 Instruction set avrxmega6 is for the XMEGA AVR core with larger 9305 than 64K program memory space and less than 64K data space (MCU 9306 types: atxmega128a3, atxmega128a3u, atxmega128c3, atxmega128d3, 9307 atxmega128d4, atxmega192a3, atxmega192a3u, atxmega128b1, 9308 atxmega128b3, atxmega192c3, atxmega192d3, atxmega256a3, 9309 atxmega256a3u, atxmega256a3b, atxmega256a3bu, atxmega256c3, 9310 atxmega256d3, atxmega384c3, atxmega256d3). 9311 9312 Instruction set avrxmega7 is for the XMEGA AVR core with larger 9313 than 64K program memory space and greater than 64K data space (MCU 9314 types: atxmega128a1, atxmega128a1u, atxmega128a4u). 9315 9316 Instruction set avrtiny is for the ATtiny4/5/9/10/20/40 9317 microcontrollers. 9318 9319`-mall-opcodes' 9320 Accept all AVR opcodes, even if not supported by `-mmcu'. 9321 9322`-mno-skip-bug' 9323 This option disable warnings for skipping two-word instructions. 9324 9325`-mno-wrap' 9326 This option reject `rjmp/rcall' instructions with 8K wrap-around. 9327 9328`-mrmw' 9329 Accept Read-Modify-Write (`XCH,LAC,LAS,LAT') instructions. 9330 9331`-mlink-relax' 9332 Enable support for link-time relaxation. This is now on by default 9333 and this flag no longer has any effect. 9334 9335`-mno-link-relax' 9336 Disable support for link-time relaxation. The assembler will 9337 resolve relocations when it can, and may be able to better 9338 compress some debug information. 9339 9340`-mgcc-isr' 9341 Enable the `__gcc_isr' pseudo instruction. 9342 9343`-mno-dollar-line-separator' 9344 Do not treat the `$' character as a line separator character. 9345 This is for languages where `$' is valid character inside symbol 9346 names. 9347 9348 9349 9350File: as.info, Node: AVR Syntax, Next: AVR Opcodes, Prev: AVR Options, Up: AVR-Dependent 9351 93529.5.2 Syntax 9353------------ 9354 9355* Menu: 9356 9357* AVR-Chars:: Special Characters 9358* AVR-Regs:: Register Names 9359* AVR-Modifiers:: Relocatable Expression Modifiers 9360 9361 9362File: as.info, Node: AVR-Chars, Next: AVR-Regs, Up: AVR Syntax 9363 93649.5.2.1 Special Characters 9365.......................... 9366 9367The presence of a `;' anywhere on a line indicates the start of a 9368comment that extends to the end of that line. 9369 9370 If a `#' appears as the first character of a line, the whole line is 9371treated as a comment, but in this case the line can also be a logical 9372line number directive (*note Comments::) or a preprocessor control 9373command (*note Preprocessing::). 9374 9375 The `$' character can be used instead of a newline to separate 9376statements. Note: the `-mno-dollar-line-separator' option disables 9377this behaviour. 9378 9379 9380File: as.info, Node: AVR-Regs, Next: AVR-Modifiers, Prev: AVR-Chars, Up: AVR Syntax 9381 93829.5.2.2 Register Names 9383...................... 9384 9385The AVR has 32 x 8-bit general purpose working registers `r0', `r1', 9386... `r31'. Six of the 32 registers can be used as three 16-bit 9387indirect address register pointers for Data Space addressing. One of 9388the these address pointers can also be used as an address pointer for 9389look up tables in Flash program memory. These added function registers 9390are the 16-bit `X', `Y' and `Z' - registers. 9391 9392 X = r26:r27 9393 Y = r28:r29 9394 Z = r30:r31 9395 9396 9397File: as.info, Node: AVR-Modifiers, Prev: AVR-Regs, Up: AVR Syntax 9398 93999.5.2.3 Relocatable Expression Modifiers 9400........................................ 9401 9402The assembler supports several modifiers when using relocatable 9403addresses in AVR instruction operands. The general syntax is the 9404following: 9405 9406 modifier(relocatable-expression) 9407 9408`lo8' 9409 This modifier allows you to use bits 0 through 7 of an address 9410 expression as an 8 bit relocatable expression. 9411 9412`hi8' 9413 This modifier allows you to use bits 7 through 15 of an address 9414 expression as an 8 bit relocatable expression. This is useful 9415 with, for example, the AVR `ldi' instruction and `lo8' modifier. 9416 9417 For example 9418 9419 ldi r26, lo8(sym+10) 9420 ldi r27, hi8(sym+10) 9421 9422`hh8' 9423 This modifier allows you to use bits 16 through 23 of an address 9424 expression as an 8 bit relocatable expression. Also, can be 9425 useful for loading 32 bit constants. 9426 9427`hlo8' 9428 Synonym of `hh8'. 9429 9430`hhi8' 9431 This modifier allows you to use bits 24 through 31 of an 9432 expression as an 8 bit expression. This is useful with, for 9433 example, the AVR `ldi' instruction and `lo8', `hi8', `hlo8', 9434 `hhi8', modifier. 9435 9436 For example 9437 9438 ldi r26, lo8(285774925) 9439 ldi r27, hi8(285774925) 9440 ldi r28, hlo8(285774925) 9441 ldi r29, hhi8(285774925) 9442 ; r29,r28,r27,r26 = 285774925 9443 9444`pm_lo8' 9445 This modifier allows you to use bits 0 through 7 of an address 9446 expression as an 8 bit relocatable expression. This modifier is 9447 useful for addressing data or code from Flash/Program memory by 9448 two-byte words. The use of `pm_lo8' is similar to `lo8'. 9449 9450`pm_hi8' 9451 This modifier allows you to use bits 8 through 15 of an address 9452 expression as an 8 bit relocatable expression. This modifier is 9453 useful for addressing data or code from Flash/Program memory by 9454 two-byte words. 9455 9456 For example, when setting the AVR `Z' register with the `ldi' 9457 instruction for subsequent use by the `ijmp' instruction: 9458 9459 ldi r30, pm_lo8(sym) 9460 ldi r31, pm_hi8(sym) 9461 ijmp 9462 9463`pm_hh8' 9464 This modifier allows you to use bits 15 through 23 of an address 9465 expression as an 8 bit relocatable expression. This modifier is 9466 useful for addressing data or code from Flash/Program memory by 9467 two-byte words. 9468 9469 9470 9471File: as.info, Node: AVR Opcodes, Next: AVR Pseudo Instructions, Prev: AVR Syntax, Up: AVR-Dependent 9472 94739.5.3 Opcodes 9474------------- 9475 9476For detailed information on the AVR machine instruction set, see 9477`www.atmel.com/products/AVR'. 9478 9479 `as' implements all the standard AVR opcodes. The following table 9480summarizes the AVR opcodes, and their arguments. 9481 9482 Legend: 9483 r any register 9484 d `ldi' register (r16-r31) 9485 v `movw' even register (r0, r2, ..., r28, r30) 9486 a `fmul' register (r16-r23) 9487 w `adiw' register (r24,r26,r28,r30) 9488 e pointer registers (X,Y,Z) 9489 b base pointer register and displacement ([YZ]+disp) 9490 z Z pointer register (for [e]lpm Rd,Z[+]) 9491 M immediate value from 0 to 255 9492 n immediate value from 0 to 255 ( n = ~M ). Relocation impossible 9493 s immediate value from 0 to 7 9494 P Port address value from 0 to 63. (in, out) 9495 p Port address value from 0 to 31. (cbi, sbi, sbic, sbis) 9496 K immediate value from 0 to 63 (used in `adiw', `sbiw') 9497 i immediate value 9498 l signed pc relative offset from -64 to 63 9499 L signed pc relative offset from -2048 to 2047 9500 h absolute code address (call, jmp) 9501 S immediate value from 0 to 7 (S = s << 4) 9502 ? use this opcode entry if no parameters, else use next opcode entry 9503 9504 1001010010001000 clc 9505 1001010011011000 clh 9506 1001010011111000 cli 9507 1001010010101000 cln 9508 1001010011001000 cls 9509 1001010011101000 clt 9510 1001010010111000 clv 9511 1001010010011000 clz 9512 1001010000001000 sec 9513 1001010001011000 seh 9514 1001010001111000 sei 9515 1001010000101000 sen 9516 1001010001001000 ses 9517 1001010001101000 set 9518 1001010000111000 sev 9519 1001010000011000 sez 9520 100101001SSS1000 bclr S 9521 100101000SSS1000 bset S 9522 1001010100001001 icall 9523 1001010000001001 ijmp 9524 1001010111001000 lpm ? 9525 1001000ddddd010+ lpm r,z 9526 1001010111011000 elpm ? 9527 1001000ddddd011+ elpm r,z 9528 0000000000000000 nop 9529 1001010100001000 ret 9530 1001010100011000 reti 9531 1001010110001000 sleep 9532 1001010110011000 break 9533 1001010110101000 wdr 9534 1001010111101000 spm 9535 000111rdddddrrrr adc r,r 9536 000011rdddddrrrr add r,r 9537 001000rdddddrrrr and r,r 9538 000101rdddddrrrr cp r,r 9539 000001rdddddrrrr cpc r,r 9540 000100rdddddrrrr cpse r,r 9541 001001rdddddrrrr eor r,r 9542 001011rdddddrrrr mov r,r 9543 100111rdddddrrrr mul r,r 9544 001010rdddddrrrr or r,r 9545 000010rdddddrrrr sbc r,r 9546 000110rdddddrrrr sub r,r 9547 001001rdddddrrrr clr r 9548 000011rdddddrrrr lsl r 9549 000111rdddddrrrr rol r 9550 001000rdddddrrrr tst r 9551 0111KKKKddddKKKK andi d,M 9552 0111KKKKddddKKKK cbr d,n 9553 1110KKKKddddKKKK ldi d,M 9554 11101111dddd1111 ser d 9555 0110KKKKddddKKKK ori d,M 9556 0110KKKKddddKKKK sbr d,M 9557 0011KKKKddddKKKK cpi d,M 9558 0100KKKKddddKKKK sbci d,M 9559 0101KKKKddddKKKK subi d,M 9560 1111110rrrrr0sss sbrc r,s 9561 1111111rrrrr0sss sbrs r,s 9562 1111100ddddd0sss bld r,s 9563 1111101ddddd0sss bst r,s 9564 10110PPdddddPPPP in r,P 9565 10111PPrrrrrPPPP out P,r 9566 10010110KKddKKKK adiw w,K 9567 10010111KKddKKKK sbiw w,K 9568 10011000pppppsss cbi p,s 9569 10011010pppppsss sbi p,s 9570 10011001pppppsss sbic p,s 9571 10011011pppppsss sbis p,s 9572 111101lllllll000 brcc l 9573 111100lllllll000 brcs l 9574 111100lllllll001 breq l 9575 111101lllllll100 brge l 9576 111101lllllll101 brhc l 9577 111100lllllll101 brhs l 9578 111101lllllll111 brid l 9579 111100lllllll111 brie l 9580 111100lllllll000 brlo l 9581 111100lllllll100 brlt l 9582 111100lllllll010 brmi l 9583 111101lllllll001 brne l 9584 111101lllllll010 brpl l 9585 111101lllllll000 brsh l 9586 111101lllllll110 brtc l 9587 111100lllllll110 brts l 9588 111101lllllll011 brvc l 9589 111100lllllll011 brvs l 9590 111101lllllllsss brbc s,l 9591 111100lllllllsss brbs s,l 9592 1101LLLLLLLLLLLL rcall L 9593 1100LLLLLLLLLLLL rjmp L 9594 1001010hhhhh111h call h 9595 1001010hhhhh110h jmp h 9596 1001010rrrrr0101 asr r 9597 1001010rrrrr0000 com r 9598 1001010rrrrr1010 dec r 9599 1001010rrrrr0011 inc r 9600 1001010rrrrr0110 lsr r 9601 1001010rrrrr0001 neg r 9602 1001000rrrrr1111 pop r 9603 1001001rrrrr1111 push r 9604 1001010rrrrr0111 ror r 9605 1001010rrrrr0010 swap r 9606 00000001ddddrrrr movw v,v 9607 00000010ddddrrrr muls d,d 9608 000000110ddd0rrr mulsu a,a 9609 000000110ddd1rrr fmul a,a 9610 000000111ddd0rrr fmuls a,a 9611 000000111ddd1rrr fmulsu a,a 9612 1001001ddddd0000 sts i,r 9613 1001000ddddd0000 lds r,i 9614 10o0oo0dddddbooo ldd r,b 9615 100!000dddddee-+ ld r,e 9616 10o0oo1rrrrrbooo std b,r 9617 100!001rrrrree-+ st e,r 9618 1001010100011001 eicall 9619 1001010000011001 eijmp 9620 9621 9622File: as.info, Node: AVR Pseudo Instructions, Prev: AVR Opcodes, Up: AVR-Dependent 9623 96249.5.4 Pseudo Instructions 9625------------------------- 9626 9627The only available pseudo-instruction `__gcc_isr' can be activated by 9628option `-mgcc-isr'. 9629 9630`__gcc_isr 1' 9631 Emit code chunk to be used in avr-gcc ISR prologue. It will 9632 expand to at most six 1-word instructions, all optional: push of 9633 `tmp_reg', push of `SREG', push and clear of `zero_reg', push of 9634 REG. 9635 9636`__gcc_isr 2' 9637 Emit code chunk to be used in an avr-gcc ISR epilogue. It will 9638 expand to at most five 1-word instructions, all optional: pop of 9639 REG, pop of `zero_reg', pop of `SREG', pop of `tmp_reg'. 9640 9641`__gcc_isr 0, REG' 9642 Finish avr-gcc ISR function. Scan code since the last prologue 9643 for usage of: `SREG', `tmp_reg', `zero_reg'. Prologue chunk and 9644 epilogue chunks will be replaced by appropriate code to save / 9645 restore `SREG', `tmp_reg', `zero_reg' and REG. 9646 9647 9648 Example input: 9649 9650 __vector1: 9651 __gcc_isr 1 9652 lds r24, var 9653 inc r24 9654 sts var, r24 9655 __gcc_isr 2 9656 reti 9657 __gcc_isr 0, r24 9658 9659 Example output: 9660 9661 00000000 <__vector1>: 9662 0: 8f 93 push r24 9663 2: 8f b7 in r24, 0x3f 9664 4: 8f 93 push r24 9665 6: 80 91 60 00 lds r24, 0x0060 ; 0x800060 <var> 9666 a: 83 95 inc r24 9667 c: 80 93 60 00 sts 0x0060, r24 ; 0x800060 <var> 9668 10: 8f 91 pop r24 9669 12: 8f bf out 0x3f, r24 9670 14: 8f 91 pop r24 9671 16: 18 95 reti 9672 9673 9674File: as.info, Node: Blackfin-Dependent, Next: BPF-Dependent, Prev: AVR-Dependent, Up: Machine Dependencies 9675 96769.6 Blackfin Dependent Features 9677=============================== 9678 9679* Menu: 9680 9681* Blackfin Options:: Blackfin Options 9682* Blackfin Syntax:: Blackfin Syntax 9683* Blackfin Directives:: Blackfin Directives 9684 9685 9686File: as.info, Node: Blackfin Options, Next: Blackfin Syntax, Up: Blackfin-Dependent 9687 96889.6.1 Options 9689------------- 9690 9691`-mcpu=PROCESSOR[-SIREVISION]' 9692 This option specifies the target processor. The optional 9693 SIREVISION is not used in assembler. It's here such that GCC can 9694 easily pass down its `-mcpu=' option. The assembler will issue an 9695 error message if an attempt is made to assemble an instruction 9696 which will not execute on the target processor. The following 9697 processor names are recognized: `bf504', `bf506', `bf512', `bf514', 9698 `bf516', `bf518', `bf522', `bf523', `bf524', `bf525', `bf526', 9699 `bf527', `bf531', `bf532', `bf533', `bf534', `bf535' (not 9700 implemented yet), `bf536', `bf537', `bf538', `bf539', `bf542', 9701 `bf542m', `bf544', `bf544m', `bf547', `bf547m', `bf548', `bf548m', 9702 `bf549', `bf549m', `bf561', and `bf592'. 9703 9704`-mfdpic' 9705 Assemble for the FDPIC ABI. 9706 9707`-mno-fdpic' 9708`-mnopic' 9709 Disable -mfdpic. 9710 9711 9712File: as.info, Node: Blackfin Syntax, Next: Blackfin Directives, Prev: Blackfin Options, Up: Blackfin-Dependent 9713 97149.6.2 Syntax 9715------------ 9716 9717`Special Characters' 9718 Assembler input is free format and may appear anywhere on the line. 9719 One instruction may extend across multiple lines or more than one 9720 instruction may appear on the same line. White space (space, tab, 9721 comments or newline) may appear anywhere between tokens. A token 9722 must not have embedded spaces. Tokens include numbers, register 9723 names, keywords, user identifiers, and also some multicharacter 9724 special symbols like "+=", "/*" or "||". 9725 9726 Comments are introduced by the `#' character and extend to the end 9727 of the current line. If the `#' appears as the first character of 9728 a line, the whole line is treated as a comment, but in this case 9729 the line can also be a logical line number directive (*note 9730 Comments::) or a preprocessor control command (*note 9731 Preprocessing::). 9732 9733`Instruction Delimiting' 9734 A semicolon must terminate every instruction. Sometimes a complete 9735 instruction will consist of more than one operation. There are two 9736 cases where this occurs. The first is when two general operations 9737 are combined. Normally a comma separates the different parts, as 9738 in 9739 9740 a0= r3.h * r2.l, a1 = r3.l * r2.h ; 9741 9742 The second case occurs when a general instruction is combined with 9743 one or two memory references for joint issue. The latter portions 9744 are set off by a "||" token. 9745 9746 a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++]; 9747 9748 Multiple instructions can occur on the same line. Each must be 9749 terminated by a semicolon character. 9750 9751`Register Names' 9752 The assembler treats register names and instruction keywords in a 9753 case insensitive manner. User identifiers are case sensitive. 9754 Thus, R3.l, R3.L, r3.l and r3.L are all equivalent input to the 9755 assembler. 9756 9757 Register names are reserved and may not be used as program 9758 identifiers. 9759 9760 Some operations (such as "Move Register") require a register pair. 9761 Register pairs are always data registers and are denoted using a 9762 colon, eg., R3:2. The larger number must be written firsts. Note 9763 that the hardware only supports odd-even pairs, eg., R7:6, R5:4, 9764 R3:2, and R1:0. 9765 9766 Some instructions (such as -SP (Push Multiple)) require a group of 9767 adjacent registers. Adjacent registers are denoted in the syntax 9768 by the range enclosed in parentheses and separated by a colon, 9769 eg., (R7:3). Again, the larger number appears first. 9770 9771 Portions of a particular register may be individually specified. 9772 This is written with a dot (".") following the register name and 9773 then a letter denoting the desired portion. For 32-bit registers, 9774 ".H" denotes the most significant ("High") portion. ".L" denotes 9775 the least-significant portion. The subdivisions of the 40-bit 9776 registers are described later. 9777 9778`Accumulators' 9779 The set of 40-bit registers A1 and A0 that normally contain data 9780 that is being manipulated. Each accumulator can be accessed in 9781 four ways. 9782 9783 `one 40-bit register' 9784 The register will be referred to as A1 or A0. 9785 9786 `one 32-bit register' 9787 The registers are designated as A1.W or A0.W. 9788 9789 `two 16-bit registers' 9790 The registers are designated as A1.H, A1.L, A0.H or A0.L. 9791 9792 `one 8-bit register' 9793 The registers are designated as A1.X or A0.X for the bits that 9794 extend beyond bit 31. 9795 9796`Data Registers' 9797 The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7) 9798 that normally contain data for manipulation. These are 9799 abbreviated as D-register or Dreg. Data registers can be accessed 9800 as 32-bit registers or as two independent 16-bit registers. The 9801 least significant 16 bits of each register is called the "low" 9802 half and is designated with ".L" following the register name. The 9803 most significant 16 bits are called the "high" half and is 9804 designated with ".H" following the name. 9805 9806 R7.L, r2.h, r4.L, R0.H 9807 9808`Pointer Registers' 9809 The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP) 9810 that normally contain byte addresses of data structures. These are 9811 abbreviated as P-register or Preg. 9812 9813 p2, p5, fp, sp 9814 9815`Stack Pointer SP' 9816 The stack pointer contains the 32-bit address of the last occupied 9817 byte location in the stack. The stack grows by decrementing the 9818 stack pointer. 9819 9820`Frame Pointer FP' 9821 The frame pointer contains the 32-bit address of the previous frame 9822 pointer in the stack. It is located at the top of a frame. 9823 9824`Loop Top' 9825 LT0 and LT1. These registers contain the 32-bit address of the 9826 top of a zero overhead loop. 9827 9828`Loop Count' 9829 LC0 and LC1. These registers contain the 32-bit counter of the 9830 zero overhead loop executions. 9831 9832`Loop Bottom' 9833 LB0 and LB1. These registers contain the 32-bit address of the 9834 bottom of a zero overhead loop. 9835 9836`Index Registers' 9837 The set of 32-bit registers (I0, I1, I2, I3) that normally contain 9838 byte addresses of data structures. Abbreviated I-register or Ireg. 9839 9840`Modify Registers' 9841 The set of 32-bit registers (M0, M1, M2, M3) that normally contain 9842 offset values that are added and subtracted to one of the index 9843 registers. Abbreviated as Mreg. 9844 9845`Length Registers' 9846 The set of 32-bit registers (L0, L1, L2, L3) that normally contain 9847 the length in bytes of the circular buffer. Abbreviated as Lreg. 9848 Clear the Lreg to disable circular addressing for the 9849 corresponding Ireg. 9850 9851`Base Registers' 9852 The set of 32-bit registers (B0, B1, B2, B3) that normally contain 9853 the base address in bytes of the circular buffer. Abbreviated as 9854 Breg. 9855 9856`Floating Point' 9857 The Blackfin family has no hardware floating point but the .float 9858 directive generates ieee floating point numbers for use with 9859 software floating point libraries. 9860 9861`Blackfin Opcodes' 9862 For detailed information on the Blackfin machine instruction set, 9863 see the Blackfin Processor Instruction Set Reference. 9864 9865 9866 9867File: as.info, Node: Blackfin Directives, Prev: Blackfin Syntax, Up: Blackfin-Dependent 9868 98699.6.3 Directives 9870---------------- 9871 9872The following directives are provided for compatibility with the VDSP 9873assembler. 9874 9875`.byte2' 9876 Initializes a two byte data object. 9877 9878 This maps to the `.short' directive. 9879 9880`.byte4' 9881 Initializes a four byte data object. 9882 9883 This maps to the `.int' directive. 9884 9885`.db' 9886 Initializes a single byte data object. 9887 9888 This directive is a synonym for `.byte'. 9889 9890`.dw' 9891 Initializes a two byte data object. 9892 9893 This directive is a synonym for `.byte2'. 9894 9895`.dd' 9896 Initializes a four byte data object. 9897 9898 This directive is a synonym for `.byte4'. 9899 9900`.var' 9901 Define and initialize a 32 bit data object. 9902 9903 9904File: as.info, Node: BPF-Dependent, Next: CR16-Dependent, Prev: Blackfin-Dependent, Up: Machine Dependencies 9905 99069.7 BPF Dependent Features 9907========================== 9908 9909* Menu: 9910 9911* BPF Options:: Options 9912* BPF Syntax:: Syntax 9913* BPF Directives:: Machine Directives 9914* BPF Opcodes:: Opcodes 9915 9916 9917File: as.info, Node: BPF Options, Next: BPF Syntax, Up: BPF-Dependent 9918 99199.7.1 Options 9920------------- 9921 9922`-EB' 9923 This option specifies that the assembler should emit big-endian 9924 eBPF. 9925 9926`-EL' 9927 This option specifies that the assembler should emit little-endian 9928 eBPF. 9929 9930 Note that if no endianness option is specified in the command line, 9931the host endianness is used. 9932 9933 9934File: as.info, Node: BPF Syntax, Next: BPF Directives, Prev: BPF Options, Up: BPF-Dependent 9935 99369.7.2 Syntax 9937------------ 9938 9939* Menu: 9940 9941* BPF-Chars:: Special Characters 9942* BPF-Regs:: Register Names 9943* BPF-Pseudo-Maps:: Pseudo map fds 9944 9945 9946File: as.info, Node: BPF-Chars, Next: BPF-Regs, Up: BPF Syntax 9947 99489.7.2.1 Special Characters 9949.......................... 9950 9951The presence of a `;' on a line indicates the start of a comment that 9952extends to the end of the current line. If a `#' appears as the first 9953character of a line, the whole line is treated as a comment. 9954 9955 Statements and assembly directives are separated by newlines. 9956 9957 9958File: as.info, Node: BPF-Regs, Next: BPF-Pseudo-Maps, Prev: BPF-Chars, Up: BPF Syntax 9959 99609.7.2.2 Register Names 9961...................... 9962 9963The eBPF processor provides ten general-purpose 64-bit registers, which 9964are read-write, and a read-only frame pointer register: 9965 9966`%r0 .. %r9' 9967 General-purpose registers. 9968 9969`%r10' 9970 Frame pointer register. 9971 9972 Some registers have additional names, to reflect their role in the 9973eBPF ABI: 9974 9975`%a' 9976 This is `%r0'. 9977 9978`%ctx' 9979 This is `%r6'. 9980 9981`%fp' 9982 This is `%r10'. 9983 9984 9985File: as.info, Node: BPF-Pseudo-Maps, Prev: BPF-Regs, Up: BPF Syntax 9986 99879.7.2.3 Pseudo Maps 9988................... 9989 9990The `LDDW' instruction can take a literal pseudo map file descriptor as 9991its second argument. This uses the syntax `%map_fd(N)' where `N' is a 9992signed number. 9993 9994 For example, to load the address of the pseudo map with file 9995descriptor `2' in register `r1' we would do: 9996 9997 lddw %r1, %map_fd(2) 9998 9999 10000File: as.info, Node: BPF Directives, Next: BPF Opcodes, Prev: BPF Syntax, Up: BPF-Dependent 10001 100029.7.3 Machine Directives 10003------------------------ 10004 10005The BPF version of `as' supports the following additional machine 10006directives: 10007 10008`.word' 10009 The `.half' directive produces a 16 bit value. 10010 10011`.word' 10012 The `.word' directive produces a 32 bit value. 10013 10014`.dword' 10015 The `.dword' directive produces a 64 bit value. 10016 10017 10018File: as.info, Node: BPF Opcodes, Prev: BPF Directives, Up: BPF-Dependent 10019 100209.7.4 Opcodes 10021------------- 10022 10023In the instruction descriptions below the following field descriptors 10024are used: 10025 10026`%d' 10027 Destination general-purpose register whose role is to be 10028 destination of an operation. 10029 10030`%s' 10031 Source general-purpose register whose role is to be the source of 10032 an operation. 10033 10034`disp16' 10035 16-bit signed PC-relative offset, measured in number of 64-bit 10036 words, minus one. 10037 10038`disp32' 10039 32-bit signed PC-relative offset, measured in number of 64-bit 10040 words, minus one. 10041 10042`offset16' 10043 Signed 16-bit immediate. 10044 10045`imm32' 10046 Signed 32-bit immediate. 10047 10048`imm64' 10049 Signed 64-bit immediate. 10050 100519.7.4.1 Arithmetic instructions 10052............................... 10053 10054The destination register in these instructions act like an accumulator. 10055 10056`add %d, (%s|imm32)' 10057 64-bit arithmetic addition. 10058 10059`sub %d, (%s|imm32)' 10060 64-bit arithmetic subtraction. 10061 10062`mul %d, (%s|imm32)' 10063 64-bit arithmetic multiplication. 10064 10065`div %d, (%s|imm32)' 10066 64-bit arithmetic integer division. 10067 10068`mod %d, (%s|imm32)' 10069 64-bit integer remainder. 10070 10071`and %d, (%s|imm32)' 10072 64-bit bit-wise "and" operation. 10073 10074`or %d, (%s|imm32)' 10075 64-bit bit-wise "or" operation. 10076 10077`xor %d, (%s|imm32)' 10078 64-bit bit-wise exclusive-or operation. 10079 10080`lsh %d, (%s|imm32)' 10081 64-bit left shift, by `%s' or `imm32' bits. 10082 10083`rsh %d, (%s|imm32)' 10084 64-bit right logical shift, by `%s' or `imm32' bits. 10085 10086`arsh %d, (%s|imm32)' 10087 64-bit right arithmetic shift, by `%s' or `imm32' bits. 10088 10089`neg %d' 10090 64-bit arithmetic negation. 10091 10092`mov %d, (%s|imm32)' 10093 Move the 64-bit value of `%s' in `%d', or load `imm32' in `%d'. 10094 100959.7.4.2 32-bit arithmetic instructions 10096...................................... 10097 10098The destination register in these instructions act as an accumulator. 10099 10100`add32 %d, (%s|imm32)' 10101 32-bit arithmetic addition. 10102 10103`sub32 %d, (%s|imm32)' 10104 32-bit arithmetic subtraction. 10105 10106`mul32 %d, (%s|imm32)' 10107 32-bit arithmetic multiplication. 10108 10109`div32 %d, (%s|imm32)' 10110 32-bit arithmetic integer division. 10111 10112`mod32 %d, (%s|imm32)' 10113 32-bit integer remainder. 10114 10115`and32 %d, (%s|imm32)' 10116 32-bit bit-wise "and" operation. 10117 10118`or32 %d, (%s|imm32)' 10119 32-bit bit-wise "or" operation. 10120 10121`xor32 %d, (%s|imm32)' 10122 32-bit bit-wise exclusive-or operation. 10123 10124`lsh32 %d, (%s|imm32)' 10125 32-bit left shift, by `%s' or `imm32' bits. 10126 10127`rsh32 %d, (%s|imm32)' 10128 32-bit right logical shift, by `%s' or `imm32' bits. 10129 10130`arsh32 %d, (%s|imm32)' 10131 32-bit right arithmetic shift, by `%s' or `imm32' bits. 10132 10133`neg32 %d' 10134 32-bit arithmetic negation. 10135 10136`mov32 %d, (%s|imm32)' 10137 Move the 32-bit value of `%s' in `%d', or load `imm32' in `%d'. 10138 101399.7.4.3 Endianness conversion instructions 10140.......................................... 10141 10142`endle %d, (8|16|32)' 10143 Convert the 8-bit, 16-bit or 32-bit value in `%d' to little-endian. 10144 10145`endbe %d, (8|16|32)' 10146 Convert the 8-bit, 16-bit or 32-bit value in `%d' to big-endian. 10147 101489.7.4.4 64-bit load and pseudo maps 10149................................... 10150 10151`lddw %d, imm64' 10152 Load the given signed 64-bit immediate, or pseudo map descriptor, 10153 to the destination register `%d'. 10154 10155`lddw %d, %map_fd(N)' 10156 Load the address of the given pseudo map fd _N_ to the destination 10157 register `%d'. 10158 101599.7.4.5 Load instructions for socket filters 10160............................................ 10161 10162The following instructions are intended to be used in socket filters, 10163and are therefore not general-purpose: they make assumptions on the 10164contents of several registers. See the file 10165`Documentation/networking/filter.txt' in the Linux kernel source tree 10166for more information. 10167 10168 Absolute loads: 10169 10170`ldabsdw imm32' 10171 Absolute 64-bit load. 10172 10173`ldabsw imm32' 10174 Absolute 32-bit load. 10175 10176`ldabsh imm32' 10177 Absolute 16-bit load. 10178 10179`ldabsb imm32' 10180 Absolute 8-bit load. 10181 10182 Indirect loads: 10183 10184`ldinddw %s, imm32' 10185 Indirect 64-bit load. 10186 10187`ldindw %s, imm32' 10188 Indirect 32-bit load. 10189 10190`ldindh %s, imm32' 10191 Indirect 16-bit load. 10192 10193`ldindb %s, imm32' 10194 Indirect 8-bit load. 10195 101969.7.4.6 Generic load/store instructions 10197....................................... 10198 10199General-purpose load and store instructions are provided for several 10200word sizes. 10201 10202 Load to register instructions: 10203 10204`ldxdw %d, [%s+offset16]' 10205 Generic 64-bit load. 10206 10207`ldxw %d, [%s+offset16]' 10208 Generic 32-bit load. 10209 10210`ldxh %d, [%s+offset16]' 10211 Generic 16-bit load. 10212 10213`ldxb %d, [%s+offset16]' 10214 Generic 8-bit load. 10215 10216 Store from register instructions: 10217 10218`stxdw [%d+offset16], %s' 10219 Generic 64-bit store. 10220 10221`stxw [%d+offset16], %s' 10222 Generic 32-bit store. 10223 10224`stxh [%d+offset16], %s' 10225 Generic 16-bit store. 10226 10227`stxb [%d+offset16], %s' 10228 Generic 8-bit store. 10229 10230 Store from immediates instructions: 10231 10232`stddw [%d+offset16], imm32' 10233 Store immediate as 64-bit. 10234 10235`stdw [%d+offset16], imm32' 10236 Store immediate as 32-bit. 10237 10238`stdh [%d+offset16], imm32' 10239 Store immediate as 16-bit. 10240 10241`stdb [%d+offset16], imm32' 10242 Store immediate as 8-bit. 10243 102449.7.4.7 Jump instructions 10245......................... 10246 10247eBPF provides the following compare-and-jump instructions, which 10248compare the values of the two given registers, or the values of a 10249register and an immediate, and perform a branch in case the comparison 10250holds true. 10251 10252`ja %d,(%s|imm32),disp16' 10253 Jump-always. 10254 10255`jeq %d,(%s|imm32),disp16' 10256 Jump if equal. 10257 10258`jgt %d,(%s|imm32),disp16' 10259 Jump if greater. 10260 10261`jge %d,(%s|imm32),disp16' 10262 Jump if greater or equal. 10263 10264`jlt %d,(%s|imm32),disp16' 10265 Jump if lesser. 10266 10267`jle %d,(%s|imm32),disp16' 10268 Jump if lesser or equal. 10269 10270`jset %d,(%s|imm32),disp16' 10271 Jump if signed equal. 10272 10273`jne %d,(%s|imm32),disp16' 10274 Jump if not equal. 10275 10276`jsgt %d,(%s|imm32),disp16' 10277 Jump if signed greater. 10278 10279`jsge %d,(%s|imm32),disp16' 10280 Jump if signed greater or equal. 10281 10282`jslt %d,(%s|imm32),disp16' 10283 Jump if signed lesser. 10284 10285`jsle %d,(%s|imm32),disp16' 10286 Jump if signed lesser or equal. 10287 10288 A call instruction is provided in order to perform calls to other 10289eBPF functions, or to external kernel helpers: 10290 10291`call (disp32|imm32)' 10292 Jump and link to the offset _disp32_, or to the kernel helper 10293 function identified by _imm32_. 10294 10295 Finally: 10296 10297`exit' 10298 Terminate the eBPF program. 10299 103009.7.4.8 Atomic instructions 10301........................... 10302 10303Atomic exchange-and-add instructions are provided in two flavors: one 10304for swapping 64-bit quantities and another for 32-bit quantities. 10305 10306`xadddw [%d+offset16],%s' 10307 Exchange-and-add a 64-bit value at the specified location. 10308 10309`xaddw [%d+offset16],%s' 10310 Exchange-and-add a 32-bit value at the specified location. 10311 10312 10313File: as.info, Node: CR16-Dependent, Next: CRIS-Dependent, Prev: BPF-Dependent, Up: Machine Dependencies 10314 103159.8 CR16 Dependent Features 10316=========================== 10317 10318* Menu: 10319 10320* CR16 Operand Qualifiers:: CR16 Machine Operand Qualifiers 10321* CR16 Syntax:: Syntax for the CR16 10322 10323 10324File: as.info, Node: CR16 Operand Qualifiers, Next: CR16 Syntax, Up: CR16-Dependent 10325 103269.8.1 CR16 Operand Qualifiers 10327----------------------------- 10328 10329The National Semiconductor CR16 target of `as' has a few machine 10330dependent operand qualifiers. 10331 10332 Operand expression type qualifier is an optional field in the 10333instruction operand, to determines the type of the expression field of 10334an operand. The `@' is required. CR16 architecture uses one of the 10335following expression qualifiers: 10336 10337`s' 10338 - `Specifies expression operand type as small' 10339 10340`m' 10341 - `Specifies expression operand type as medium' 10342 10343`l' 10344 - `Specifies expression operand type as large' 10345 10346`c' 10347 - `Specifies the CR16 Assembler generates a relocation entry for 10348 the operand, where pc has implied bit, the expression is adjusted 10349 accordingly. The linker uses the relocation entry to update the 10350 operand address at link time.' 10351 10352`got/GOT' 10353 - `Specifies the CR16 Assembler generates a relocation entry for 10354 the operand, offset from Global Offset Table. The linker uses this 10355 relocation entry to update the operand address at link time' 10356 10357`cgot/cGOT' 10358 - `Specifies the CompactRISC Assembler generates a relocation 10359 entry for the operand, where pc has implied bit, the expression is 10360 adjusted accordingly. The linker uses the relocation entry to 10361 update the operand address at link time.' 10362 10363 CR16 target operand qualifiers and its size (in bits): 10364 10365`Immediate Operand: s' 10366 4 bits. 10367 10368`Immediate Operand: m' 10369 16 bits, for movb and movw instructions. 10370 10371`Immediate Operand: m' 10372 20 bits, movd instructions. 10373 10374`Immediate Operand: l' 10375 32 bits. 10376 10377`Absolute Operand: s' 10378 Illegal specifier for this operand. 10379 10380`Absolute Operand: m' 10381 20 bits, movd instructions. 10382 10383`Displacement Operand: s' 10384 8 bits. 10385 10386`Displacement Operand: m' 10387 16 bits. 10388 10389`Displacement Operand: l' 10390 24 bits. 10391 10392 10393 For example: 10394 1 `movw $_myfun@c,r1' 10395 10396 This loads the address of _myfun, shifted right by 1, into r1. 10397 10398 2 `movd $_myfun@c,(r2,r1)' 10399 10400 This loads the address of _myfun, shifted right by 1, into register-pair r2-r1. 10401 10402 3 `_myfun_ptr:' 10403 `.long _myfun@c' 10404 `loadd _myfun_ptr, (r1,r0)' 10405 `jal (r1,r0)' 10406 10407 This .long directive, the address of _myfunc, shifted right by 1 at link time. 10408 10409 4 `loadd _data1@GOT(r12), (r1,r0)' 10410 10411 This loads the address of _data1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r2-r1. 10412 10413 5 `loadd _myfunc@cGOT(r12), (r1,r0)' 10414 10415 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. 10416 10417 10418File: as.info, Node: CR16 Syntax, Prev: CR16 Operand Qualifiers, Up: CR16-Dependent 10419 104209.8.2 CR16 Syntax 10421----------------- 10422 10423* Menu: 10424 10425* CR16-Chars:: Special Characters 10426 10427 10428File: as.info, Node: CR16-Chars, Up: CR16 Syntax 10429 104309.8.2.1 Special Characters 10431.......................... 10432 10433The presence of a `#' on a line indicates the start of a comment that 10434extends to the end of the current line. If the `#' appears as the 10435first character of a line, the whole line is treated as a comment, but 10436in this case the line can also be a logical line number directive 10437(*note Comments::) or a preprocessor control command (*note 10438Preprocessing::). 10439 10440 The `;' character can be used to separate statements on the same 10441line. 10442 10443 10444File: as.info, Node: CRIS-Dependent, Next: C-SKY-Dependent, Prev: CR16-Dependent, Up: Machine Dependencies 10445 104469.9 CRIS Dependent Features 10447=========================== 10448 10449* Menu: 10450 10451* CRIS-Opts:: Command-line Options 10452* CRIS-Expand:: Instruction expansion 10453* CRIS-Symbols:: Symbols 10454* CRIS-Syntax:: Syntax 10455 10456 10457File: as.info, Node: CRIS-Opts, Next: CRIS-Expand, Up: CRIS-Dependent 10458 104599.9.1 Command-line Options 10460-------------------------- 10461 10462The CRIS version of `as' has these machine-dependent command-line 10463options. 10464 10465 The format of the generated object files can be either ELF or a.out, 10466specified by the command-line options `--emulation=crisaout' and 10467`--emulation=criself'. The default is ELF (criself), unless `as' has 10468been configured specifically for a.out by using the configuration name 10469`cris-axis-aout'. 10470 10471 There are two different link-incompatible ELF object file variants 10472for CRIS, for use in environments where symbols are expected to be 10473prefixed by a leading `_' character and for environments without such a 10474symbol prefix. The variant used for GNU/Linux port has no symbol 10475prefix. Which variant to produce is specified by either of the options 10476`--underscore' and `--no-underscore'. The default is `--underscore'. 10477Since symbols in CRIS a.out objects are expected to have a `_' prefix, 10478specifying `--no-underscore' when generating a.out objects is an error. 10479Besides the object format difference, the effect of this option is to 10480parse register names differently (*note crisnous::). The 10481`--no-underscore' option makes a `$' register prefix mandatory. 10482 10483 The option `--pic' must be passed to `as' in order to recognize the 10484symbol syntax used for ELF (SVR4 PIC) position-independent-code (*note 10485crispic::). This will also affect expansion of instructions. The 10486expansion with `--pic' will use PC-relative rather than (slightly 10487faster) absolute addresses in those expansions. This option is only 10488valid when generating ELF format object files. 10489 10490 The option `--march=ARCHITECTURE' specifies the recognized 10491instruction set and recognized register names. It also controls the 10492architecture type of the object file. Valid values for ARCHITECTURE 10493are: 10494`v0_v10' 10495 All instructions and register names for any architecture variant 10496 in the set v0...v10 are recognized. This is the default if the 10497 target is configured as cris-*. 10498 10499`v10' 10500 Only instructions and register names for CRIS v10 (as found in 10501 ETRAX 100 LX) are recognized. This is the default if the target 10502 is configured as crisv10-*. 10503 10504`v32' 10505 Only instructions and register names for CRIS v32 (code name 10506 Guinness) are recognized. This is the default if the target is 10507 configured as crisv32-*. This value implies `--no-mul-bug-abort'. 10508 (A subsequent `--mul-bug-abort' will turn it back on.) 10509 10510`common_v10_v32' 10511 Only instructions with register names and addressing modes with 10512 opcodes common to the v10 and v32 are recognized. 10513 10514 When `-N' is specified, `as' will emit a warning when a 16-bit 10515branch instruction is expanded into a 32-bit multiple-instruction 10516construct (*note CRIS-Expand::). 10517 10518 Some versions of the CRIS v10, for example in the Etrax 100 LX, 10519contain a bug that causes destabilizing memory accesses when a multiply 10520instruction is executed with certain values in the first operand just 10521before a cache-miss. When the `--mul-bug-abort' command-line option is 10522active (the default value), `as' will refuse to assemble a file 10523containing a multiply instruction at a dangerous offset, one that could 10524be the last on a cache-line, or is in a section with insufficient 10525alignment. This placement checking does not catch any case where the 10526multiply instruction is dangerously placed because it is located in a 10527delay-slot. The `--mul-bug-abort' command-line option turns off the 10528checking. 10529 10530 10531File: as.info, Node: CRIS-Expand, Next: CRIS-Symbols, Prev: CRIS-Opts, Up: CRIS-Dependent 10532 105339.9.2 Instruction expansion 10534--------------------------- 10535 10536`as' will silently choose an instruction that fits the operand size for 10537`[register+constant]' operands. For example, the offset `127' in 10538`move.d [r3+127],r4' fits in an instruction using a signed-byte offset. 10539Similarly, `move.d [r2+32767],r1' will generate an instruction using a 1054016-bit offset. For symbolic expressions and constants that do not fit 10541in 16 bits including the sign bit, a 32-bit offset is generated. 10542 10543 For branches, `as' will expand from a 16-bit branch instruction into 10544a sequence of instructions that can reach a full 32-bit address. Since 10545this does not correspond to a single instruction, such expansions can 10546optionally be warned about. *Note CRIS-Opts::. 10547 10548 If the operand is found to fit the range, a `lapc' mnemonic will 10549translate to a `lapcq' instruction. Use `lapc.d' to force the 32-bit 10550`lapc' instruction. 10551 10552 Similarly, the `addo' mnemonic will translate to the shortest 10553fitting instruction of `addoq', `addo.w' and `addo.d', when used with a 10554operand that is a constant known at assembly time. 10555 10556 10557File: as.info, Node: CRIS-Symbols, Next: CRIS-Syntax, Prev: CRIS-Expand, Up: CRIS-Dependent 10558 105599.9.3 Symbols 10560------------- 10561 10562Some symbols are defined by the assembler. They're intended to be used 10563in conditional assembly, for example: 10564 .if ..asm.arch.cris.v32 10565 CODE FOR CRIS V32 10566 .elseif ..asm.arch.cris.common_v10_v32 10567 CODE COMMON TO CRIS V32 AND CRIS V10 10568 .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10 10569 CODE FOR V10 10570 .else 10571 .error "Code needs to be added here." 10572 .endif 10573 10574 These symbols are defined in the assembler, reflecting command-line 10575options, either when specified or the default. They are always 10576defined, to 0 or 1. 10577`..asm.arch.cris.any_v0_v10' 10578 This symbol is non-zero when `--march=v0_v10' is specified or the 10579 default. 10580 10581`..asm.arch.cris.common_v10_v32' 10582 Set according to the option `--march=common_v10_v32'. 10583 10584`..asm.arch.cris.v10' 10585 Reflects the option `--march=v10'. 10586 10587`..asm.arch.cris.v32' 10588 Corresponds to `--march=v10'. 10589 10590 Speaking of symbols, when a symbol is used in code, it can have a 10591suffix modifying its value for use in position-independent code. *Note 10592CRIS-Pic::. 10593 10594 10595File: as.info, Node: CRIS-Syntax, Prev: CRIS-Symbols, Up: CRIS-Dependent 10596 105979.9.4 Syntax 10598------------ 10599 10600There are different aspects of the CRIS assembly syntax. 10601 10602* Menu: 10603 10604* CRIS-Chars:: Special Characters 10605* CRIS-Pic:: Position-Independent Code Symbols 10606* CRIS-Regs:: Register Names 10607* CRIS-Pseudos:: Assembler Directives 10608 10609 10610File: as.info, Node: CRIS-Chars, Next: CRIS-Pic, Up: CRIS-Syntax 10611 106129.9.4.1 Special Characters 10613.......................... 10614 10615The character `#' is a line comment character. It starts a comment if 10616and only if it is placed at the beginning of a line. 10617 10618 A `;' character starts a comment anywhere on the line, causing all 10619characters up to the end of the line to be ignored. 10620 10621 A `@' character is handled as a line separator equivalent to a 10622logical new-line character (except in a comment), so separate 10623instructions can be specified on a single line. 10624 10625 10626File: as.info, Node: CRIS-Pic, Next: CRIS-Regs, Prev: CRIS-Chars, Up: CRIS-Syntax 10627 106289.9.4.2 Symbols in position-independent code 10629............................................ 10630 10631When generating position-independent code (SVR4 PIC) for use in 10632cris-axis-linux-gnu or crisv32-axis-linux-gnu shared libraries, symbol 10633suffixes are used to specify what kind of run-time symbol lookup will 10634be used, expressed in the object as different _relocation types_. 10635Usually, all absolute symbol values must be located in a table, the 10636_global offset table_, leaving the code position-independent; 10637independent of values of global symbols and independent of the address 10638of the code. The suffix modifies the value of the symbol, into for 10639example an index into the global offset table where the real symbol 10640value is entered, or a PC-relative value, or a value relative to the 10641start of the global offset table. All symbol suffixes start with the 10642character `:' (omitted in the list below). Every symbol use in code or 10643a read-only section must therefore have a PIC suffix to enable a useful 10644shared library to be created. Usually, these constructs must not be 10645used with an additive constant offset as is usually allowed, i.e. no 4 10646as in `symbol + 4' is allowed. This restriction is checked at 10647link-time, not at assembly-time. 10648 10649`GOT' 10650 Attaching this suffix to a symbol in an instruction causes the 10651 symbol to be entered into the global offset table. The value is a 10652 32-bit index for that symbol into the global offset table. The 10653 name of the corresponding relocation is `R_CRIS_32_GOT'. Example: 10654 `move.d [$r0+extsym:GOT],$r9' 10655 10656`GOT16' 10657 Same as for `GOT', but the value is a 16-bit index into the global 10658 offset table. The corresponding relocation is `R_CRIS_16_GOT'. 10659 Example: `move.d [$r0+asymbol:GOT16],$r10' 10660 10661`PLT' 10662 This suffix is used for function symbols. It causes a _procedure 10663 linkage table_, an array of code stubs, to be created at the time 10664 the shared object is created or linked against, together with a 10665 global offset table entry. The value is a pc-relative offset to 10666 the corresponding stub code in the procedure linkage table. This 10667 arrangement causes the run-time symbol resolver to be called to 10668 look up and set the value of the symbol the first time the 10669 function is called (at latest; depending environment variables). 10670 It is only safe to leave the symbol unresolved this way if all 10671 references are function calls. The name of the relocation is 10672 `R_CRIS_32_PLT_PCREL'. Example: `add.d fnname:PLT,$pc' 10673 10674`PLTG' 10675 Like PLT, but the value is relative to the beginning of the global 10676 offset table. The relocation is `R_CRIS_32_PLT_GOTREL'. Example: 10677 `move.d fnname:PLTG,$r3' 10678 10679`GOTPLT' 10680 Similar to `PLT', but the value of the symbol is a 32-bit index 10681 into the global offset table. This is somewhat of a mix between 10682 the effect of the `GOT' and the `PLT' suffix; the difference to 10683 `GOT' is that there will be a procedure linkage table entry 10684 created, and that the symbol is assumed to be a function entry and 10685 will be resolved by the run-time resolver as with `PLT'. The 10686 relocation is `R_CRIS_32_GOTPLT'. Example: `jsr 10687 [$r0+fnname:GOTPLT]' 10688 10689`GOTPLT16' 10690 A variant of `GOTPLT' giving a 16-bit value. Its relocation name 10691 is `R_CRIS_16_GOTPLT'. Example: `jsr [$r0+fnname:GOTPLT16]' 10692 10693`GOTOFF' 10694 This suffix must only be attached to a local symbol, but may be 10695 used in an expression adding an offset. The value is the address 10696 of the symbol relative to the start of the global offset table. 10697 The relocation name is `R_CRIS_32_GOTREL'. Example: `move.d 10698 [$r0+localsym:GOTOFF],r3' 10699 10700 10701File: as.info, Node: CRIS-Regs, Next: CRIS-Pseudos, Prev: CRIS-Pic, Up: CRIS-Syntax 10702 107039.9.4.3 Register names 10704...................... 10705 10706A `$' character may always prefix a general or special register name in 10707an instruction operand but is mandatory when the option 10708`--no-underscore' is specified or when the `.syntax register_prefix' 10709directive is in effect (*note crisnous::). Register names are 10710case-insensitive. 10711 10712 10713File: as.info, Node: CRIS-Pseudos, Prev: CRIS-Regs, Up: CRIS-Syntax 10714 107159.9.4.4 Assembler Directives 10716............................ 10717 10718There are a few CRIS-specific pseudo-directives in addition to the 10719generic ones. *Note Pseudo Ops::. Constants emitted by 10720pseudo-directives are in little-endian order for CRIS. There is no 10721support for floating-point-specific directives for CRIS. 10722 10723`.dword EXPRESSIONS' 10724 The `.dword' directive is a synonym for `.int', expecting zero or 10725 more EXPRESSIONS, separated by commas. For each expression, a 10726 32-bit little-endian constant is emitted. 10727 10728`.syntax ARGUMENT' 10729 The `.syntax' directive takes as ARGUMENT one of the following 10730 case-sensitive choices. 10731 10732 `no_register_prefix' 10733 The `.syntax no_register_prefix' directive makes a `$' 10734 character prefix on all registers optional. It overrides a 10735 previous setting, including the corresponding effect of the 10736 option `--no-underscore'. If this directive is used when 10737 ordinary symbols do not have a `_' character prefix, care 10738 must be taken to avoid ambiguities whether an operand is a 10739 register or a symbol; using symbols with names the same as 10740 general or special registers then invoke undefined behavior. 10741 10742 `register_prefix' 10743 This directive makes a `$' character prefix on all registers 10744 mandatory. It overrides a previous setting, including the 10745 corresponding effect of the option `--underscore'. 10746 10747 `leading_underscore' 10748 This is an assertion directive, emitting an error if the 10749 `--no-underscore' option is in effect. 10750 10751 `no_leading_underscore' 10752 This is the opposite of the `.syntax leading_underscore' 10753 directive and emits an error if the option `--underscore' is 10754 in effect. 10755 10756`.arch ARGUMENT' 10757 This is an assertion directive, giving an error if the specified 10758 ARGUMENT is not the same as the specified or default value for the 10759 `--march=ARCHITECTURE' option (*note march-option::). 10760 10761 10762 10763File: as.info, Node: C-SKY-Dependent, Next: D10V-Dependent, Prev: CRIS-Dependent, Up: Machine Dependencies 10764 107659.10 C-SKY Dependent Features 10766============================= 10767 10768* Menu: 10769 10770* C-SKY Options:: Options 10771* C-SKY Syntax:: Syntax 10772 10773 10774File: as.info, Node: C-SKY Options, Next: C-SKY Syntax, Up: C-SKY-Dependent 10775 107769.10.1 Options 10777-------------- 10778 10779`-march=ARCHNAME' 10780 Assemble for architecture ARCHNAME. The `--help' option lists 10781 valid values for ARCHNAME. 10782 10783`-mcpu=CPUNAME' 10784 Assemble for architecture CPUNAME. The `--help' option lists 10785 valid values for CPUNAME. 10786 10787`-EL' 10788`-mlittle-endian' 10789 Generate little-endian output. 10790 10791`-EB' 10792`-mbig-endian' 10793 Generate big-endian output. 10794 10795`-fpic' 10796`-pic' 10797 Generate position-independent code. 10798 10799`-mljump' 10800`-mno-ljump' 10801 Enable/disable transformation of the short branch instructions 10802 `jbf', `jbt', and `jbr' to `jmpi'. This option is for V2 10803 processors only. It is ignored on CK801 and CK802 targets, which 10804 do not support the `jmpi' instruction, and is enabled by default 10805 for other processors. 10806 10807`-mbranch-stub' 10808`-mno-branch-stub' 10809 Pass through `R_CKCORE_PCREL_IMM26BY2' relocations for `bsr' 10810 instructions to the linker. 10811 10812 This option is only available for bare-metal C-SKY V2 ELF targets, 10813 where it is enabled by default. It cannot be used in code that 10814 will be dynamically linked against shared libraries. 10815 10816`-force2bsr' 10817`-mforce2bsr' 10818`-no-force2bsr' 10819`-mno-force2bsr' 10820 Enable/disable transformation of `jbsr' instructions to `bsr'. 10821 This option is always enabled (and `-mno-force2bsr' is ignored) 10822 for CK801/CK802 targets. It is also always enabled when 10823 `-mbranch-stub' is in effect. 10824 10825`-jsri2bsr' 10826`-mjsri2bsr' 10827`-no-jsri2bsr' 10828`-mno-jsri2bsr' 10829 Enable/disable transformation of `jsri' instructions to `bsr'. 10830 This option is enabled by default. 10831 10832`-mnolrw' 10833`-mno-lrw' 10834 Enable/disable transformation of `lrw' instructions into a 10835 `movih'/`ori' pair. 10836 10837`-melrw' 10838`-mno-elrw' 10839 Enable/disable extended `lrw' instructions. This option is 10840 enabled by default for CK800-series processors. 10841 10842`-mlaf' 10843`-mliterals-after-func' 10844`-mno-laf' 10845`-mno-literals-after-func' 10846 Enable/disable placement of literal pools after each function. 10847 10848`-mlabr' 10849`-mliterals-after-br' 10850`-mno-labr' 10851`-mnoliterals-after-br' 10852 Enable/disable placement of literal pools after unconditional 10853 branches. This option is enabled by default. 10854 10855`-mistack' 10856`-mno-istack' 10857 Enable/disable interrupt stack instructions. This option is 10858 enabled by default on CK801, CK802, and CK802 processors. 10859 10860 10861 The following options explicitly enable certain optional 10862instructions. These features are also enabled implicitly by using 10863`-mcpu=' to specify a processor that supports it. 10864 10865`-mhard-float' 10866 Enable hard float instructions. 10867 10868`-mmp' 10869 Enable multiprocessor instructions. 10870 10871`-mcp' 10872 Enable coprocessor instructions. 10873 10874`-mcache' 10875 Enable cache prefetch instruction. 10876 10877`-msecurity' 10878 Enable C-SKY security instructions. 10879 10880`-mtrust' 10881 Enable C-SKY trust instructions. 10882 10883`-mdsp' 10884 Enable DSP instructions. 10885 10886`-medsp' 10887 Enable enhanced DSP instructions. 10888 10889`-mvdsp' 10890 Enable vector DSP instructions. 10891 10892 10893 10894File: as.info, Node: C-SKY Syntax, Prev: C-SKY Options, Up: C-SKY-Dependent 10895 108969.10.2 Syntax 10897------------- 10898 10899`as' implements the standard C-SKY assembler syntax documented in the 10900`C-SKY V2 CPU Applications Binary Interface Standards Manual'. 10901 10902 10903File: as.info, Node: D10V-Dependent, Next: D30V-Dependent, Prev: C-SKY-Dependent, Up: Machine Dependencies 10904 109059.11 D10V Dependent Features 10906============================ 10907 10908* Menu: 10909 10910* D10V-Opts:: D10V Options 10911* D10V-Syntax:: Syntax 10912* D10V-Float:: Floating Point 10913* D10V-Opcodes:: Opcodes 10914 10915 10916File: as.info, Node: D10V-Opts, Next: D10V-Syntax, Up: D10V-Dependent 10917 109189.11.1 D10V Options 10919------------------- 10920 10921The Mitsubishi D10V version of `as' has a few machine dependent options. 10922 10923`-O' 10924 The D10V can often execute two sub-instructions in parallel. When 10925 this option is used, `as' will attempt to optimize its output by 10926 detecting when instructions can be executed in parallel. 10927 10928`--nowarnswap' 10929 To optimize execution performance, `as' will sometimes swap the 10930 order of instructions. Normally this generates a warning. When 10931 this option is used, no warning will be generated when 10932 instructions are swapped. 10933 10934`--gstabs-packing' 10935`--no-gstabs-packing' 10936 `as' packs adjacent short instructions into a single packed 10937 instruction. `--no-gstabs-packing' turns instruction packing off if 10938 `--gstabs' is specified as well; `--gstabs-packing' (the default) 10939 turns instruction packing on even when `--gstabs' is specified. 10940 10941 10942File: as.info, Node: D10V-Syntax, Next: D10V-Float, Prev: D10V-Opts, Up: D10V-Dependent 10943 109449.11.2 Syntax 10945------------- 10946 10947The D10V syntax is based on the syntax in Mitsubishi's D10V 10948architecture manual. The differences are detailed below. 10949 10950* Menu: 10951 10952* D10V-Size:: Size Modifiers 10953* D10V-Subs:: Sub-Instructions 10954* D10V-Chars:: Special Characters 10955* D10V-Regs:: Register Names 10956* D10V-Addressing:: Addressing Modes 10957* D10V-Word:: @WORD Modifier 10958 10959 10960File: as.info, Node: D10V-Size, Next: D10V-Subs, Up: D10V-Syntax 10961 109629.11.2.1 Size Modifiers 10963....................... 10964 10965The D10V version of `as' uses the instruction names in the D10V 10966Architecture Manual. However, the names in the manual are sometimes 10967ambiguous. There are instruction names that can assemble to a short or 10968long form opcode. How does the assembler pick the correct form? `as' 10969will always pick the smallest form if it can. When dealing with a 10970symbol that is not defined yet when a line is being assembled, it will 10971always use the long form. If you need to force the assembler to use 10972either the short or long form of the instruction, you can append either 10973`.s' (short) or `.l' (long) to it. For example, if you are writing an 10974assembly program and you want to do a branch to a symbol that is 10975defined later in your program, you can write `bra.s foo'. Objdump 10976and GDB will always append `.s' or `.l' to instructions which have both 10977short and long forms. 10978 10979 10980File: as.info, Node: D10V-Subs, Next: D10V-Chars, Prev: D10V-Size, Up: D10V-Syntax 10981 109829.11.2.2 Sub-Instructions 10983......................... 10984 10985The D10V assembler takes as input a series of instructions, either 10986one-per-line, or in the special two-per-line format described in the 10987next section. Some of these instructions will be short-form or 10988sub-instructions. These sub-instructions can be packed into a single 10989instruction. The assembler will do this automatically. It will also 10990detect when it should not pack instructions. For example, when a label 10991is defined, the next instruction will never be packaged with the 10992previous one. Whenever a branch and link instruction is called, it 10993will not be packaged with the next instruction so the return address 10994will be valid. Nops are automatically inserted when necessary. 10995 10996 If you do not want the assembler automatically making these 10997decisions, you can control the packaging and execution type (parallel 10998or sequential) with the special execution symbols described in the next 10999section. 11000 11001 11002File: as.info, Node: D10V-Chars, Next: D10V-Regs, Prev: D10V-Subs, Up: D10V-Syntax 11003 110049.11.2.3 Special Characters 11005........................... 11006 11007A semicolon (`;') can be used anywhere on a line to start a comment 11008that extends to the end of the line. 11009 11010 If a `#' appears as the first character of a line, the whole line is 11011treated as a comment, but in this case the line could also be a logical 11012line number directive (*note Comments::) or a preprocessor control 11013command (*note Preprocessing::). 11014 11015 Sub-instructions may be executed in order, in reverse-order, or in 11016parallel. Instructions listed in the standard one-per-line format will 11017be executed sequentially. To specify the executing order, use the 11018following symbols: 11019`->' 11020 Sequential with instruction on the left first. 11021 11022`<-' 11023 Sequential with instruction on the right first. 11024 11025`||' 11026 Parallel 11027 The D10V syntax allows either one instruction per line, one 11028instruction per line with the execution symbol, or two instructions per 11029line. For example 11030`abs a1 -> abs r0' 11031 Execute these sequentially. The instruction on the right is in 11032 the right container and is executed second. 11033 11034`abs r0 <- abs a1' 11035 Execute these reverse-sequentially. The instruction on the right 11036 is in the right container, and is executed first. 11037 11038`ld2w r2,@r8+ || mac a0,r0,r7' 11039 Execute these in parallel. 11040 11041`ld2w r2,@r8+ ||' 11042`mac a0,r0,r7' 11043 Two-line format. Execute these in parallel. 11044 11045`ld2w r2,@r8+' 11046`mac a0,r0,r7' 11047 Two-line format. Execute these sequentially. Assembler will put 11048 them in the proper containers. 11049 11050`ld2w r2,@r8+ ->' 11051`mac a0,r0,r7' 11052 Two-line format. Execute these sequentially. Same as above but 11053 second instruction will always go into right container. 11054 Since `$' has no special meaning, you may use it in symbol names. 11055 11056 11057File: as.info, Node: D10V-Regs, Next: D10V-Addressing, Prev: D10V-Chars, Up: D10V-Syntax 11058 110599.11.2.4 Register Names 11060....................... 11061 11062You can use the predefined symbols `r0' through `r15' to refer to the 11063D10V registers. You can also use `sp' as an alias for `r15'. The 11064accumulators are `a0' and `a1'. There are special register-pair names 11065that may optionally be used in opcodes that require even-numbered 11066registers. Register names are not case sensitive. 11067 11068 Register Pairs 11069`r0-r1' 11070 11071`r2-r3' 11072 11073`r4-r5' 11074 11075`r6-r7' 11076 11077`r8-r9' 11078 11079`r10-r11' 11080 11081`r12-r13' 11082 11083`r14-r15' 11084 11085 The D10V also has predefined symbols for these control registers and 11086status bits: 11087`psw' 11088 Processor Status Word 11089 11090`bpsw' 11091 Backup Processor Status Word 11092 11093`pc' 11094 Program Counter 11095 11096`bpc' 11097 Backup Program Counter 11098 11099`rpt_c' 11100 Repeat Count 11101 11102`rpt_s' 11103 Repeat Start address 11104 11105`rpt_e' 11106 Repeat End address 11107 11108`mod_s' 11109 Modulo Start address 11110 11111`mod_e' 11112 Modulo End address 11113 11114`iba' 11115 Instruction Break Address 11116 11117`f0' 11118 Flag 0 11119 11120`f1' 11121 Flag 1 11122 11123`c' 11124 Carry flag 11125 11126 11127File: as.info, Node: D10V-Addressing, Next: D10V-Word, Prev: D10V-Regs, Up: D10V-Syntax 11128 111299.11.2.5 Addressing Modes 11130......................... 11131 11132`as' understands the following addressing modes for the D10V. `RN' in 11133the following refers to any of the numbered registers, but _not_ the 11134control registers. 11135`RN' 11136 Register direct 11137 11138`@RN' 11139 Register indirect 11140 11141`@RN+' 11142 Register indirect with post-increment 11143 11144`@RN-' 11145 Register indirect with post-decrement 11146 11147`@-SP' 11148 Register indirect with pre-decrement 11149 11150`@(DISP, RN)' 11151 Register indirect with displacement 11152 11153`ADDR' 11154 PC relative address (for branch or rep). 11155 11156`#IMM' 11157 Immediate data (the `#' is optional and ignored) 11158 11159 11160File: as.info, Node: D10V-Word, Prev: D10V-Addressing, Up: D10V-Syntax 11161 111629.11.2.6 @WORD Modifier 11163....................... 11164 11165Any symbol followed by `@word' will be replaced by the symbol's value 11166shifted right by 2. This is used in situations such as loading a 11167register with the address of a function (or any other code fragment). 11168For example, if you want to load a register with the location of the 11169function `main' then jump to that function, you could do it as follows: 11170 ldi r2, main@word 11171 jmp r2 11172 11173 11174File: as.info, Node: D10V-Float, Next: D10V-Opcodes, Prev: D10V-Syntax, Up: D10V-Dependent 11175 111769.11.3 Floating Point 11177--------------------- 11178 11179The D10V has no hardware floating point, but the `.float' and `.double' 11180directives generates IEEE floating-point numbers for compatibility with 11181other development tools. 11182 11183 11184File: as.info, Node: D10V-Opcodes, Prev: D10V-Float, Up: D10V-Dependent 11185 111869.11.4 Opcodes 11187-------------- 11188 11189For detailed information on the D10V machine instruction set, see `D10V 11190Architecture: A VLIW Microprocessor for Multimedia Applications' 11191(Mitsubishi Electric Corp.). `as' implements all the standard D10V 11192opcodes. The only changes are those described in the section on size 11193modifiers 11194 11195 11196File: as.info, Node: D30V-Dependent, Next: Epiphany-Dependent, Prev: D10V-Dependent, Up: Machine Dependencies 11197 111989.12 D30V Dependent Features 11199============================ 11200 11201* Menu: 11202 11203* D30V-Opts:: D30V Options 11204* D30V-Syntax:: Syntax 11205* D30V-Float:: Floating Point 11206* D30V-Opcodes:: Opcodes 11207 11208 11209File: as.info, Node: D30V-Opts, Next: D30V-Syntax, Up: D30V-Dependent 11210 112119.12.1 D30V Options 11212------------------- 11213 11214The Mitsubishi D30V version of `as' has a few machine dependent options. 11215 11216`-O' 11217 The D30V can often execute two sub-instructions in parallel. When 11218 this option is used, `as' will attempt to optimize its output by 11219 detecting when instructions can be executed in parallel. 11220 11221`-n' 11222 When this option is used, `as' will issue a warning every time it 11223 adds a nop instruction. 11224 11225`-N' 11226 When this option is used, `as' will issue a warning if it needs to 11227 insert a nop after a 32-bit multiply before a load or 16-bit 11228 multiply instruction. 11229 11230 11231File: as.info, Node: D30V-Syntax, Next: D30V-Float, Prev: D30V-Opts, Up: D30V-Dependent 11232 112339.12.2 Syntax 11234------------- 11235 11236The D30V syntax is based on the syntax in Mitsubishi's D30V 11237architecture manual. The differences are detailed below. 11238 11239* Menu: 11240 11241* D30V-Size:: Size Modifiers 11242* D30V-Subs:: Sub-Instructions 11243* D30V-Chars:: Special Characters 11244* D30V-Guarded:: Guarded Execution 11245* D30V-Regs:: Register Names 11246* D30V-Addressing:: Addressing Modes 11247 11248 11249File: as.info, Node: D30V-Size, Next: D30V-Subs, Up: D30V-Syntax 11250 112519.12.2.1 Size Modifiers 11252....................... 11253 11254The D30V version of `as' uses the instruction names in the D30V 11255Architecture Manual. However, the names in the manual are sometimes 11256ambiguous. There are instruction names that can assemble to a short or 11257long form opcode. How does the assembler pick the correct form? `as' 11258will always pick the smallest form if it can. When dealing with a 11259symbol that is not defined yet when a line is being assembled, it will 11260always use the long form. If you need to force the assembler to use 11261either the short or long form of the instruction, you can append either 11262`.s' (short) or `.l' (long) to it. For example, if you are writing an 11263assembly program and you want to do a branch to a symbol that is 11264defined later in your program, you can write `bra.s foo'. Objdump and 11265GDB will always append `.s' or `.l' to instructions which have both 11266short and long forms. 11267 11268 11269File: as.info, Node: D30V-Subs, Next: D30V-Chars, Prev: D30V-Size, Up: D30V-Syntax 11270 112719.12.2.2 Sub-Instructions 11272......................... 11273 11274The D30V assembler takes as input a series of instructions, either 11275one-per-line, or in the special two-per-line format described in the 11276next section. Some of these instructions will be short-form or 11277sub-instructions. These sub-instructions can be packed into a single 11278instruction. The assembler will do this automatically. It will also 11279detect when it should not pack instructions. For example, when a label 11280is defined, the next instruction will never be packaged with the 11281previous one. Whenever a branch and link instruction is called, it 11282will not be packaged with the next instruction so the return address 11283will be valid. Nops are automatically inserted when necessary. 11284 11285 If you do not want the assembler automatically making these 11286decisions, you can control the packaging and execution type (parallel 11287or sequential) with the special execution symbols described in the next 11288section. 11289 11290 11291File: as.info, Node: D30V-Chars, Next: D30V-Guarded, Prev: D30V-Subs, Up: D30V-Syntax 11292 112939.12.2.3 Special Characters 11294........................... 11295 11296A semicolon (`;') can be used anywhere on a line to start a comment 11297that extends to the end of the line. 11298 11299 If a `#' appears as the first character of a line, the whole line is 11300treated as a comment, but in this case the line could also be a logical 11301line number directive (*note Comments::) or a preprocessor control 11302command (*note Preprocessing::). 11303 11304 Sub-instructions may be executed in order, in reverse-order, or in 11305parallel. Instructions listed in the standard one-per-line format will 11306be executed sequentially unless you use the `-O' option. 11307 11308 To specify the executing order, use the following symbols: 11309`->' 11310 Sequential with instruction on the left first. 11311 11312`<-' 11313 Sequential with instruction on the right first. 11314 11315`||' 11316 Parallel 11317 11318 The D30V syntax allows either one instruction per line, one 11319instruction per line with the execution symbol, or two instructions per 11320line. For example 11321`abs r2,r3 -> abs r4,r5' 11322 Execute these sequentially. The instruction on the right is in 11323 the right container and is executed second. 11324 11325`abs r2,r3 <- abs r4,r5' 11326 Execute these reverse-sequentially. The instruction on the right 11327 is in the right container, and is executed first. 11328 11329`abs r2,r3 || abs r4,r5' 11330 Execute these in parallel. 11331 11332`ldw r2,@(r3,r4) ||' 11333`mulx r6,r8,r9' 11334 Two-line format. Execute these in parallel. 11335 11336`mulx a0,r8,r9' 11337`stw r2,@(r3,r4)' 11338 Two-line format. Execute these sequentially unless `-O' option is 11339 used. If the `-O' option is used, the assembler will determine if 11340 the instructions could be done in parallel (the above two 11341 instructions can be done in parallel), and if so, emit them as 11342 parallel instructions. The assembler will put them in the proper 11343 containers. In the above example, the assembler will put the 11344 `stw' instruction in left container and the `mulx' instruction in 11345 the right container. 11346 11347`stw r2,@(r3,r4) ->' 11348`mulx a0,r8,r9' 11349 Two-line format. Execute the `stw' instruction followed by the 11350 `mulx' instruction sequentially. The first instruction goes in the 11351 left container and the second instruction goes into right 11352 container. The assembler will give an error if the machine 11353 ordering constraints are violated. 11354 11355`stw r2,@(r3,r4) <-' 11356`mulx a0,r8,r9' 11357 Same as previous example, except that the `mulx' instruction is 11358 executed before the `stw' instruction. 11359 11360 Since `$' has no special meaning, you may use it in symbol names. 11361 11362 11363File: as.info, Node: D30V-Guarded, Next: D30V-Regs, Prev: D30V-Chars, Up: D30V-Syntax 11364 113659.12.2.4 Guarded Execution 11366.......................... 11367 11368`as' supports the full range of guarded execution directives for each 11369instruction. Just append the directive after the instruction proper. 11370The directives are: 11371 11372`/tx' 11373 Execute the instruction if flag f0 is true. 11374 11375`/fx' 11376 Execute the instruction if flag f0 is false. 11377 11378`/xt' 11379 Execute the instruction if flag f1 is true. 11380 11381`/xf' 11382 Execute the instruction if flag f1 is false. 11383 11384`/tt' 11385 Execute the instruction if both flags f0 and f1 are true. 11386 11387`/tf' 11388 Execute the instruction if flag f0 is true and flag f1 is false. 11389 11390 11391File: as.info, Node: D30V-Regs, Next: D30V-Addressing, Prev: D30V-Guarded, Up: D30V-Syntax 11392 113939.12.2.5 Register Names 11394....................... 11395 11396You can use the predefined symbols `r0' through `r63' to refer to the 11397D30V registers. You can also use `sp' as an alias for `r63' and `link' 11398as an alias for `r62'. The accumulators are `a0' and `a1'. 11399 11400 The D30V also has predefined symbols for these control registers and 11401status bits: 11402`psw' 11403 Processor Status Word 11404 11405`bpsw' 11406 Backup Processor Status Word 11407 11408`pc' 11409 Program Counter 11410 11411`bpc' 11412 Backup Program Counter 11413 11414`rpt_c' 11415 Repeat Count 11416 11417`rpt_s' 11418 Repeat Start address 11419 11420`rpt_e' 11421 Repeat End address 11422 11423`mod_s' 11424 Modulo Start address 11425 11426`mod_e' 11427 Modulo End address 11428 11429`iba' 11430 Instruction Break Address 11431 11432`f0' 11433 Flag 0 11434 11435`f1' 11436 Flag 1 11437 11438`f2' 11439 Flag 2 11440 11441`f3' 11442 Flag 3 11443 11444`f4' 11445 Flag 4 11446 11447`f5' 11448 Flag 5 11449 11450`f6' 11451 Flag 6 11452 11453`f7' 11454 Flag 7 11455 11456`s' 11457 Same as flag 4 (saturation flag) 11458 11459`v' 11460 Same as flag 5 (overflow flag) 11461 11462`va' 11463 Same as flag 6 (sticky overflow flag) 11464 11465`c' 11466 Same as flag 7 (carry/borrow flag) 11467 11468`b' 11469 Same as flag 7 (carry/borrow flag) 11470 11471 11472File: as.info, Node: D30V-Addressing, Prev: D30V-Regs, Up: D30V-Syntax 11473 114749.12.2.6 Addressing Modes 11475......................... 11476 11477`as' understands the following addressing modes for the D30V. `RN' in 11478the following refers to any of the numbered registers, but _not_ the 11479control registers. 11480`RN' 11481 Register direct 11482 11483`@RN' 11484 Register indirect 11485 11486`@RN+' 11487 Register indirect with post-increment 11488 11489`@RN-' 11490 Register indirect with post-decrement 11491 11492`@-SP' 11493 Register indirect with pre-decrement 11494 11495`@(DISP, RN)' 11496 Register indirect with displacement 11497 11498`ADDR' 11499 PC relative address (for branch or rep). 11500 11501`#IMM' 11502 Immediate data (the `#' is optional and ignored) 11503 11504 11505File: as.info, Node: D30V-Float, Next: D30V-Opcodes, Prev: D30V-Syntax, Up: D30V-Dependent 11506 115079.12.3 Floating Point 11508--------------------- 11509 11510The D30V has no hardware floating point, but the `.float' and `.double' 11511directives generates IEEE floating-point numbers for compatibility with 11512other development tools. 11513 11514 11515File: as.info, Node: D30V-Opcodes, Prev: D30V-Float, Up: D30V-Dependent 11516 115179.12.4 Opcodes 11518-------------- 11519 11520For detailed information on the D30V machine instruction set, see `D30V 11521Architecture: A VLIW Microprocessor for Multimedia Applications' 11522(Mitsubishi Electric Corp.). `as' implements all the standard D30V 11523opcodes. The only changes are those described in the section on size 11524modifiers 11525 11526 11527File: as.info, Node: Epiphany-Dependent, Next: H8/300-Dependent, Prev: D30V-Dependent, Up: Machine Dependencies 11528 115299.13 Epiphany Dependent Features 11530================================ 11531 11532* Menu: 11533 11534* Epiphany Options:: Options 11535* Epiphany Syntax:: Epiphany Syntax 11536 11537 11538File: as.info, Node: Epiphany Options, Next: Epiphany Syntax, Up: Epiphany-Dependent 11539 115409.13.1 Options 11541-------------- 11542 11543`as' has two additional command-line options for the Epiphany 11544architecture. 11545 11546`-mepiphany' 11547 Specifies that the both 32 and 16 bit instructions are allowed. 11548 This is the default behavior. 11549 11550`-mepiphany16' 11551 Restricts the permitted instructions to just the 16 bit set. 11552 11553 11554File: as.info, Node: Epiphany Syntax, Prev: Epiphany Options, Up: Epiphany-Dependent 11555 115569.13.2 Epiphany Syntax 11557---------------------- 11558 11559* Menu: 11560 11561* Epiphany-Chars:: Special Characters 11562 11563 11564File: as.info, Node: Epiphany-Chars, Up: Epiphany Syntax 11565 115669.13.2.1 Special Characters 11567........................... 11568 11569The presence of a `;' on a line indicates the start of a comment that 11570extends to the end of the current line. 11571 11572 If a `#' appears as the first character of a line then the whole 11573line is treated as a comment, but in this case the line could also be a 11574logical line number directive (*note Comments::) or a preprocessor 11575control command (*note Preprocessing::). 11576 11577 The ``' character can be used to separate statements on the same 11578line. 11579 11580 11581File: as.info, Node: H8/300-Dependent, Next: HPPA-Dependent, Prev: Epiphany-Dependent, Up: Machine Dependencies 11582 115839.14 H8/300 Dependent Features 11584============================== 11585 11586* Menu: 11587 11588* H8/300 Options:: Options 11589* H8/300 Syntax:: Syntax 11590* H8/300 Floating Point:: Floating Point 11591* H8/300 Directives:: H8/300 Machine Directives 11592* H8/300 Opcodes:: Opcodes 11593 11594 11595File: as.info, Node: H8/300 Options, Next: H8/300 Syntax, Up: H8/300-Dependent 11596 115979.14.1 Options 11598-------------- 11599 11600The Renesas H8/300 version of `as' has one machine-dependent option: 11601 11602`-h-tick-hex' 11603 Support H'00 style hex constants in addition to 0x00 style. 11604 11605`-mach=NAME' 11606 Sets the H8300 machine variant. The following machine names are 11607 recognised: `h8300h', `h8300hn', `h8300s', `h8300sn', `h8300sx' and 11608 `h8300sxn'. 11609 11610 11611 11612File: as.info, Node: H8/300 Syntax, Next: H8/300 Floating Point, Prev: H8/300 Options, Up: H8/300-Dependent 11613 116149.14.2 Syntax 11615------------- 11616 11617* Menu: 11618 11619* H8/300-Chars:: Special Characters 11620* H8/300-Regs:: Register Names 11621* H8/300-Addressing:: Addressing Modes 11622 11623 11624File: as.info, Node: H8/300-Chars, Next: H8/300-Regs, Up: H8/300 Syntax 11625 116269.14.2.1 Special Characters 11627........................... 11628 11629`;' is the line comment character. 11630 11631 `$' can be used instead of a newline to separate statements. 11632Therefore _you may not use `$' in symbol names_ on the H8/300. 11633 11634 11635File: as.info, Node: H8/300-Regs, Next: H8/300-Addressing, Prev: H8/300-Chars, Up: H8/300 Syntax 11636 116379.14.2.2 Register Names 11638....................... 11639 11640You can use predefined symbols of the form `rNh' and `rNl' to refer to 11641the H8/300 registers as sixteen 8-bit general-purpose registers. N is 11642a digit from `0' to `7'); for instance, both `r0h' and `r7l' are valid 11643register names. 11644 11645 You can also use the eight predefined symbols `rN' to refer to the 11646H8/300 registers as 16-bit registers (you must use this form for 11647addressing). 11648 11649 On the H8/300H, you can also use the eight predefined symbols `erN' 11650(`er0' ... `er7') to refer to the 32-bit general purpose registers. 11651 11652 The two control registers are called `pc' (program counter; a 16-bit 11653register, except on the H8/300H where it is 24 bits) and `ccr' 11654(condition code register; an 8-bit register). `r7' is used as the 11655stack pointer, and can also be called `sp'. 11656 11657 11658File: as.info, Node: H8/300-Addressing, Prev: H8/300-Regs, Up: H8/300 Syntax 11659 116609.14.2.3 Addressing Modes 11661......................... 11662 11663as understands the following addressing modes for the H8/300: 11664`rN' 11665 Register direct 11666 11667`@rN' 11668 Register indirect 11669 11670`@(D, rN)' 11671`@(D:16, rN)' 11672`@(D:24, rN)' 11673 Register indirect: 16-bit or 24-bit displacement D from register 11674 N. (24-bit displacements are only meaningful on the H8/300H.) 11675 11676`@rN+' 11677 Register indirect with post-increment 11678 11679`@-rN' 11680 Register indirect with pre-decrement 11681 11682``@'AA' 11683``@'AA:8' 11684``@'AA:16' 11685``@'AA:24' 11686 Absolute address `aa'. (The address size `:24' only makes sense 11687 on the H8/300H.) 11688 11689`#XX' 11690`#XX:8' 11691`#XX:16' 11692`#XX:32' 11693 Immediate data XX. You may specify the `:8', `:16', or `:32' for 11694 clarity, if you wish; but `as' neither requires this nor uses 11695 it--the data size required is taken from context. 11696 11697``@'`@'AA' 11698``@'`@'AA:8' 11699 Memory indirect. You may specify the `:8' for clarity, if you 11700 wish; but `as' neither requires this nor uses it. 11701 11702 11703File: as.info, Node: H8/300 Floating Point, Next: H8/300 Directives, Prev: H8/300 Syntax, Up: H8/300-Dependent 11704 117059.14.3 Floating Point 11706--------------------- 11707 11708The H8/300 family has no hardware floating point, but the `.float' 11709directive generates IEEE floating-point numbers for compatibility with 11710other development tools. 11711 11712 11713File: as.info, Node: H8/300 Directives, Next: H8/300 Opcodes, Prev: H8/300 Floating Point, Up: H8/300-Dependent 11714 117159.14.4 H8/300 Machine Directives 11716-------------------------------- 11717 11718`as' has the following machine-dependent directives for the H8/300: 11719 11720`.h8300h' 11721 Recognize and emit additional instructions for the H8/300H 11722 variant, and also make `.int' emit 32-bit numbers rather than the 11723 usual (16-bit) for the H8/300 family. 11724 11725`.h8300s' 11726 Recognize and emit additional instructions for the H8S variant, and 11727 also make `.int' emit 32-bit numbers rather than the usual (16-bit) 11728 for the H8/300 family. 11729 11730`.h8300hn' 11731 Recognize and emit additional instructions for the H8/300H variant 11732 in normal mode, and also make `.int' emit 32-bit numbers rather 11733 than the usual (16-bit) for the H8/300 family. 11734 11735`.h8300sn' 11736 Recognize and emit additional instructions for the H8S variant in 11737 normal mode, and also make `.int' emit 32-bit numbers rather than 11738 the usual (16-bit) for the H8/300 family. 11739 11740 On the H8/300 family (including the H8/300H) `.word' directives 11741generate 16-bit numbers. 11742 11743 11744File: as.info, Node: H8/300 Opcodes, Prev: H8/300 Directives, Up: H8/300-Dependent 11745 117469.14.5 Opcodes 11747-------------- 11748 11749For detailed information on the H8/300 machine instruction set, see 11750`H8/300 Series Programming Manual'. For information specific to the 11751H8/300H, see `H8/300H Series Programming Manual' (Renesas). 11752 11753 `as' implements all the standard H8/300 opcodes. No additional 11754pseudo-instructions are needed on this family. 11755 11756 The following table summarizes the H8/300 opcodes, and their 11757arguments. Entries marked `*' are opcodes used only on the H8/300H. 11758 11759 Legend: 11760 Rs source register 11761 Rd destination register 11762 abs absolute address 11763 imm immediate data 11764 disp:N N-bit displacement from a register 11765 pcrel:N N-bit displacement relative to program counter 11766 11767 add.b #imm,rd * andc #imm,ccr 11768 add.b rs,rd band #imm,rd 11769 add.w rs,rd band #imm,@rd 11770 * add.w #imm,rd band #imm,@abs:8 11771 * add.l rs,rd bra pcrel:8 11772 * add.l #imm,rd * bra pcrel:16 11773 adds #imm,rd bt pcrel:8 11774 addx #imm,rd * bt pcrel:16 11775 addx rs,rd brn pcrel:8 11776 and.b #imm,rd * brn pcrel:16 11777 and.b rs,rd bf pcrel:8 11778 * and.w rs,rd * bf pcrel:16 11779 * and.w #imm,rd bhi pcrel:8 11780 * and.l #imm,rd * bhi pcrel:16 11781 * and.l rs,rd bls pcrel:8 11782 11783 * bls pcrel:16 bld #imm,rd 11784 bcc pcrel:8 bld #imm,@rd 11785 * bcc pcrel:16 bld #imm,@abs:8 11786 bhs pcrel:8 bnot #imm,rd 11787 * bhs pcrel:16 bnot #imm,@rd 11788 bcs pcrel:8 bnot #imm,@abs:8 11789 * bcs pcrel:16 bnot rs,rd 11790 blo pcrel:8 bnot rs,@rd 11791 * blo pcrel:16 bnot rs,@abs:8 11792 bne pcrel:8 bor #imm,rd 11793 * bne pcrel:16 bor #imm,@rd 11794 beq pcrel:8 bor #imm,@abs:8 11795 * beq pcrel:16 bset #imm,rd 11796 bvc pcrel:8 bset #imm,@rd 11797 * bvc pcrel:16 bset #imm,@abs:8 11798 bvs pcrel:8 bset rs,rd 11799 * bvs pcrel:16 bset rs,@rd 11800 bpl pcrel:8 bset rs,@abs:8 11801 * bpl pcrel:16 bsr pcrel:8 11802 bmi pcrel:8 bsr pcrel:16 11803 * bmi pcrel:16 bst #imm,rd 11804 bge pcrel:8 bst #imm,@rd 11805 * bge pcrel:16 bst #imm,@abs:8 11806 blt pcrel:8 btst #imm,rd 11807 * blt pcrel:16 btst #imm,@rd 11808 bgt pcrel:8 btst #imm,@abs:8 11809 * bgt pcrel:16 btst rs,rd 11810 ble pcrel:8 btst rs,@rd 11811 * ble pcrel:16 btst rs,@abs:8 11812 bclr #imm,rd bxor #imm,rd 11813 bclr #imm,@rd bxor #imm,@rd 11814 bclr #imm,@abs:8 bxor #imm,@abs:8 11815 bclr rs,rd cmp.b #imm,rd 11816 bclr rs,@rd cmp.b rs,rd 11817 bclr rs,@abs:8 cmp.w rs,rd 11818 biand #imm,rd cmp.w rs,rd 11819 biand #imm,@rd * cmp.w #imm,rd 11820 biand #imm,@abs:8 * cmp.l #imm,rd 11821 bild #imm,rd * cmp.l rs,rd 11822 bild #imm,@rd daa rs 11823 bild #imm,@abs:8 das rs 11824 bior #imm,rd dec.b rs 11825 bior #imm,@rd * dec.w #imm,rd 11826 bior #imm,@abs:8 * dec.l #imm,rd 11827 bist #imm,rd divxu.b rs,rd 11828 bist #imm,@rd * divxu.w rs,rd 11829 bist #imm,@abs:8 * divxs.b rs,rd 11830 bixor #imm,rd * divxs.w rs,rd 11831 bixor #imm,@rd eepmov 11832 bixor #imm,@abs:8 * eepmovw 11833 11834 * exts.w rd mov.w rs,@abs:16 11835 * exts.l rd * mov.l #imm,rd 11836 * extu.w rd * mov.l rs,rd 11837 * extu.l rd * mov.l @rs,rd 11838 inc rs * mov.l @(disp:16,rs),rd 11839 * inc.w #imm,rd * mov.l @(disp:24,rs),rd 11840 * inc.l #imm,rd * mov.l @rs+,rd 11841 jmp @rs * mov.l @abs:16,rd 11842 jmp abs * mov.l @abs:24,rd 11843 jmp @@abs:8 * mov.l rs,@rd 11844 jsr @rs * mov.l rs,@(disp:16,rd) 11845 jsr abs * mov.l rs,@(disp:24,rd) 11846 jsr @@abs:8 * mov.l rs,@-rd 11847 ldc #imm,ccr * mov.l rs,@abs:16 11848 ldc rs,ccr * mov.l rs,@abs:24 11849 * ldc @abs:16,ccr movfpe @abs:16,rd 11850 * ldc @abs:24,ccr movtpe rs,@abs:16 11851 * ldc @(disp:16,rs),ccr mulxu.b rs,rd 11852 * ldc @(disp:24,rs),ccr * mulxu.w rs,rd 11853 * ldc @rs+,ccr * mulxs.b rs,rd 11854 * ldc @rs,ccr * mulxs.w rs,rd 11855 * mov.b @(disp:24,rs),rd neg.b rs 11856 * mov.b rs,@(disp:24,rd) * neg.w rs 11857 mov.b @abs:16,rd * neg.l rs 11858 mov.b rs,rd nop 11859 mov.b @abs:8,rd not.b rs 11860 mov.b rs,@abs:8 * not.w rs 11861 mov.b rs,rd * not.l rs 11862 mov.b #imm,rd or.b #imm,rd 11863 mov.b @rs,rd or.b rs,rd 11864 mov.b @(disp:16,rs),rd * or.w #imm,rd 11865 mov.b @rs+,rd * or.w rs,rd 11866 mov.b @abs:8,rd * or.l #imm,rd 11867 mov.b rs,@rd * or.l rs,rd 11868 mov.b rs,@(disp:16,rd) orc #imm,ccr 11869 mov.b rs,@-rd pop.w rs 11870 mov.b rs,@abs:8 * pop.l rs 11871 mov.w rs,@rd push.w rs 11872 * mov.w @(disp:24,rs),rd * push.l rs 11873 * mov.w rs,@(disp:24,rd) rotl.b rs 11874 * mov.w @abs:24,rd * rotl.w rs 11875 * mov.w rs,@abs:24 * rotl.l rs 11876 mov.w rs,rd rotr.b rs 11877 mov.w #imm,rd * rotr.w rs 11878 mov.w @rs,rd * rotr.l rs 11879 mov.w @(disp:16,rs),rd rotxl.b rs 11880 mov.w @rs+,rd * rotxl.w rs 11881 mov.w @abs:16,rd * rotxl.l rs 11882 mov.w rs,@(disp:16,rd) rotxr.b rs 11883 mov.w rs,@-rd * rotxr.w rs 11884 11885 * rotxr.l rs * stc ccr,@(disp:24,rd) 11886 bpt * stc ccr,@-rd 11887 rte * stc ccr,@abs:16 11888 rts * stc ccr,@abs:24 11889 shal.b rs sub.b rs,rd 11890 * shal.w rs sub.w rs,rd 11891 * shal.l rs * sub.w #imm,rd 11892 shar.b rs * sub.l rs,rd 11893 * shar.w rs * sub.l #imm,rd 11894 * shar.l rs subs #imm,rd 11895 shll.b rs subx #imm,rd 11896 * shll.w rs subx rs,rd 11897 * shll.l rs * trapa #imm 11898 shlr.b rs xor #imm,rd 11899 * shlr.w rs xor rs,rd 11900 * shlr.l rs * xor.w #imm,rd 11901 sleep * xor.w rs,rd 11902 stc ccr,rd * xor.l #imm,rd 11903 * stc ccr,@rs * xor.l rs,rd 11904 * stc ccr,@(disp:16,rd) xorc #imm,ccr 11905 11906 Four H8/300 instructions (`add', `cmp', `mov', `sub') are defined 11907with variants using the suffixes `.b', `.w', and `.l' to specify the 11908size of a memory operand. `as' supports these suffixes, but does not 11909require them; since one of the operands is always a register, `as' can 11910deduce the correct size. 11911 11912 For example, since `r0' refers to a 16-bit register, 11913 mov r0,@foo 11914is equivalent to 11915 mov.w r0,@foo 11916 11917 If you use the size suffixes, `as' issues a warning when the suffix 11918and the register size do not match. 11919 11920 11921File: as.info, Node: HPPA-Dependent, Next: i386-Dependent, Prev: H8/300-Dependent, Up: Machine Dependencies 11922 119239.15 HPPA Dependent Features 11924============================ 11925 11926* Menu: 11927 11928* HPPA Notes:: Notes 11929* HPPA Options:: Options 11930* HPPA Syntax:: Syntax 11931* HPPA Floating Point:: Floating Point 11932* HPPA Directives:: HPPA Machine Directives 11933* HPPA Opcodes:: Opcodes 11934 11935 11936File: as.info, Node: HPPA Notes, Next: HPPA Options, Up: HPPA-Dependent 11937 119389.15.1 Notes 11939------------ 11940 11941As a back end for GNU CC `as' has been thoroughly tested and should 11942work extremely well. We have tested it only minimally on hand written 11943assembly code and no one has tested it much on the assembly output from 11944the HP compilers. 11945 11946 The format of the debugging sections has changed since the original 11947`as' port (version 1.3X) was released; therefore, you must rebuild all 11948HPPA objects and libraries with the new assembler so that you can debug 11949the final executable. 11950 11951 The HPPA `as' port generates a small subset of the relocations 11952available in the SOM and ELF object file formats. Additional relocation 11953support will be added as it becomes necessary. 11954 11955 11956File: as.info, Node: HPPA Options, Next: HPPA Syntax, Prev: HPPA Notes, Up: HPPA-Dependent 11957 119589.15.2 Options 11959-------------- 11960 11961`as' has no machine-dependent command-line options for the HPPA. 11962 11963 11964File: as.info, Node: HPPA Syntax, Next: HPPA Floating Point, Prev: HPPA Options, Up: HPPA-Dependent 11965 119669.15.3 Syntax 11967------------- 11968 11969The assembler syntax closely follows the HPPA instruction set reference 11970manual; assembler directives and general syntax closely follow the HPPA 11971assembly language reference manual, with a few noteworthy differences. 11972 11973 First, a colon may immediately follow a label definition. This is 11974simply for compatibility with how most assembly language programmers 11975write code. 11976 11977 Some obscure expression parsing problems may affect hand written 11978code which uses the `spop' instructions, or code which makes significant 11979use of the `!' line separator. 11980 11981 `as' is much less forgiving about missing arguments and other 11982similar oversights than the HP assembler. `as' notifies you of missing 11983arguments as syntax errors; this is regarded as a feature, not a bug. 11984 11985 Finally, `as' allows you to use an external symbol without 11986explicitly importing the symbol. _Warning:_ in the future this will be 11987an error for HPPA targets. 11988 11989 Special characters for HPPA targets include: 11990 11991 `;' is the line comment character. 11992 11993 `!' can be used instead of a newline to separate statements. 11994 11995 Since `$' has no special meaning, you may use it in symbol names. 11996 11997 11998File: as.info, Node: HPPA Floating Point, Next: HPPA Directives, Prev: HPPA Syntax, Up: HPPA-Dependent 11999 120009.15.4 Floating Point 12001--------------------- 12002 12003The HPPA family uses IEEE floating-point numbers. 12004 12005 12006File: as.info, Node: HPPA Directives, Next: HPPA Opcodes, Prev: HPPA Floating Point, Up: HPPA-Dependent 12007 120089.15.5 HPPA Assembler Directives 12009-------------------------------- 12010 12011`as' for the HPPA supports many additional directives for compatibility 12012with the native assembler. This section describes them only briefly. 12013For detailed information on HPPA-specific assembler directives, see 12014`HP9000 Series 800 Assembly Language Reference Manual' (HP 92432-90001). 12015 12016 `as' does _not_ support the following assembler directives described 12017in the HP manual: 12018 12019 .endm .liston 12020 .enter .locct 12021 .leave .macro 12022 .listoff 12023 12024 Beyond those implemented for compatibility, `as' supports one 12025additional assembler directive for the HPPA: `.param'. It conveys 12026register argument locations for static functions. Its syntax closely 12027follows the `.export' directive. 12028 12029 These are the additional directives in `as' for the HPPA: 12030 12031`.block N' 12032`.blockz N' 12033 Reserve N bytes of storage, and initialize them to zero. 12034 12035`.call' 12036 Mark the beginning of a procedure call. Only the special case 12037 with _no arguments_ is allowed. 12038 12039`.callinfo [ PARAM=VALUE, ... ] [ FLAG, ... ]' 12040 Specify a number of parameters and flags that define the 12041 environment for a procedure. 12042 12043 PARAM may be any of `frame' (frame size), `entry_gr' (end of 12044 general register range), `entry_fr' (end of float register range), 12045 `entry_sr' (end of space register range). 12046 12047 The values for FLAG are `calls' or `caller' (proc has 12048 subroutines), `no_calls' (proc does not call subroutines), 12049 `save_rp' (preserve return pointer), `save_sp' (proc preserves 12050 stack pointer), `no_unwind' (do not unwind this proc), `hpux_int' 12051 (proc is interrupt routine). 12052 12053`.code' 12054 Assemble into the standard section called `$TEXT$', subsection 12055 `$CODE$'. 12056 12057`.copyright "STRING"' 12058 In the SOM object format, insert STRING into the object code, 12059 marked as a copyright string. 12060 12061`.copyright "STRING"' 12062 In the ELF object format, insert STRING into the object code, 12063 marked as a version string. 12064 12065`.enter' 12066 Not yet supported; the assembler rejects programs containing this 12067 directive. 12068 12069`.entry' 12070 Mark the beginning of a procedure. 12071 12072`.exit' 12073 Mark the end of a procedure. 12074 12075`.export NAME [ ,TYP ] [ ,PARAM=R ]' 12076 Make a procedure NAME available to callers. TYP, if present, must 12077 be one of `absolute', `code' (ELF only, not SOM), `data', `entry', 12078 `data', `entry', `millicode', `plabel', `pri_prog', or `sec_prog'. 12079 12080 PARAM, if present, provides either relocation information for the 12081 procedure arguments and result, or a privilege level. PARAM may be 12082 `argwN' (where N ranges from `0' to `3', and indicates one of four 12083 one-word arguments); `rtnval' (the procedure's result); or 12084 `priv_lev' (privilege level). For arguments or the result, R 12085 specifies how to relocate, and must be one of `no' (not 12086 relocatable), `gr' (argument is in general register), `fr' (in 12087 floating point register), or `fu' (upper half of float register). 12088 For `priv_lev', R is an integer. 12089 12090`.half N' 12091 Define a two-byte integer constant N; synonym for the portable 12092 `as' directive `.short'. 12093 12094`.import NAME [ ,TYP ]' 12095 Converse of `.export'; make a procedure available to call. The 12096 arguments use the same conventions as the first two arguments for 12097 `.export'. 12098 12099`.label NAME' 12100 Define NAME as a label for the current assembly location. 12101 12102`.leave' 12103 Not yet supported; the assembler rejects programs containing this 12104 directive. 12105 12106`.origin LC' 12107 Advance location counter to LC. Synonym for the `as' portable 12108 directive `.org'. 12109 12110`.param NAME [ ,TYP ] [ ,PARAM=R ]' 12111 Similar to `.export', but used for static procedures. 12112 12113`.proc' 12114 Use preceding the first statement of a procedure. 12115 12116`.procend' 12117 Use following the last statement of a procedure. 12118 12119`LABEL .reg EXPR' 12120 Synonym for `.equ'; define LABEL with the absolute expression EXPR 12121 as its value. 12122 12123`.space SECNAME [ ,PARAMS ]' 12124 Switch to section SECNAME, creating a new section by that name if 12125 necessary. You may only use PARAMS when creating a new section, 12126 not when switching to an existing one. SECNAME may identify a 12127 section by number rather than by name. 12128 12129 If specified, the list PARAMS declares attributes of the section, 12130 identified by keywords. The keywords recognized are `spnum=EXP' 12131 (identify this section by the number EXP, an absolute expression), 12132 `sort=EXP' (order sections according to this sort key when linking; 12133 EXP is an absolute expression), `unloadable' (section contains no 12134 loadable data), `notdefined' (this section defined elsewhere), and 12135 `private' (data in this section not available to other programs). 12136 12137`.spnum SECNAM' 12138 Allocate four bytes of storage, and initialize them with the 12139 section number of the section named SECNAM. (You can define the 12140 section number with the HPPA `.space' directive.) 12141 12142`.string "STR"' 12143 Copy the characters in the string STR to the object file. *Note 12144 Strings: Strings, for information on escape sequences you can use 12145 in `as' strings. 12146 12147 _Warning!_ The HPPA version of `.string' differs from the usual 12148 `as' definition: it does _not_ write a zero byte after copying STR. 12149 12150`.stringz "STR"' 12151 Like `.string', but appends a zero byte after copying STR to object 12152 file. 12153 12154`.subspa NAME [ ,PARAMS ]' 12155`.nsubspa NAME [ ,PARAMS ]' 12156 Similar to `.space', but selects a subsection NAME within the 12157 current section. You may only specify PARAMS when you create a 12158 subsection (in the first instance of `.subspa' for this NAME). 12159 12160 If specified, the list PARAMS declares attributes of the 12161 subsection, identified by keywords. The keywords recognized are 12162 `quad=EXPR' ("quadrant" for this subsection), `align=EXPR' 12163 (alignment for beginning of this subsection; a power of two), 12164 `access=EXPR' (value for "access rights" field), `sort=EXPR' 12165 (sorting order for this subspace in link), `code_only' (subsection 12166 contains only code), `unloadable' (subsection cannot be loaded 12167 into memory), `comdat' (subsection is comdat), `common' 12168 (subsection is common block), `dup_comm' (subsection may have 12169 duplicate names), or `zero' (subsection is all zeros, do not write 12170 in object file). 12171 12172 `.nsubspa' always creates a new subspace with the given name, even 12173 if one with the same name already exists. 12174 12175 `comdat', `common' and `dup_comm' can be used to implement various 12176 flavors of one-only support when using the SOM linker. The SOM 12177 linker only supports specific combinations of these flags. The 12178 details are not documented. A brief description is provided here. 12179 12180 `comdat' provides a form of linkonce support. It is useful for 12181 both code and data subspaces. A `comdat' subspace has a key symbol 12182 marked by the `is_comdat' flag or `ST_COMDAT'. Only the first 12183 subspace for any given key is selected. The key symbol becomes 12184 universal in shared links. This is similar to the behavior of 12185 `secondary_def' symbols. 12186 12187 `common' provides Fortran named common support. It is only useful 12188 for data subspaces. Symbols with the flag `is_common' retain this 12189 flag in shared links. Referencing a `is_common' symbol in a shared 12190 library from outside the library doesn't work. Thus, `is_common' 12191 symbols must be output whenever they are needed. 12192 12193 `common' and `dup_comm' together provide Cobol common support. 12194 The subspaces in this case must all be the same length. 12195 Otherwise, this support is similar to the Fortran common support. 12196 12197 `dup_comm' by itself provides a type of one-only support for code. 12198 Only the first `dup_comm' subspace is selected. There is a rather 12199 complex algorithm to compare subspaces. Code symbols marked with 12200 the `dup_common' flag are hidden. This support was intended for 12201 "C++ duplicate inlines". 12202 12203 A simplified technique is used to mark the flags of symbols based 12204 on the flags of their subspace. A symbol with the scope 12205 SS_UNIVERSAL and type ST_ENTRY, ST_CODE or ST_DATA is marked with 12206 the corresponding settings of `comdat', `common' and `dup_comm' 12207 from the subspace, respectively. This avoids having to introduce 12208 additional directives to mark these symbols. The HP assembler 12209 sets `is_common' from `common'. However, it doesn't set the 12210 `dup_common' from `dup_comm'. It doesn't have `comdat' support. 12211 12212`.version "STR"' 12213 Write STR as version identifier in object code. 12214 12215 12216File: as.info, Node: HPPA Opcodes, Prev: HPPA Directives, Up: HPPA-Dependent 12217 122189.15.6 Opcodes 12219-------------- 12220 12221For detailed information on the HPPA machine instruction set, see 12222`PA-RISC Architecture and Instruction Set Reference Manual' (HP 1222309740-90039). 12224 12225 12226File: as.info, Node: i386-Dependent, Next: IA-64-Dependent, Prev: HPPA-Dependent, Up: Machine Dependencies 12227 122289.16 80386 Dependent Features 12229============================= 12230 12231 The i386 version `as' supports both the original Intel 386 12232architecture in both 16 and 32-bit mode as well as AMD x86-64 12233architecture extending the Intel architecture to 64-bits. 12234 12235* Menu: 12236 12237* i386-Options:: Options 12238* i386-Directives:: X86 specific directives 12239* i386-Syntax:: Syntactical considerations 12240* i386-Mnemonics:: Instruction Naming 12241* i386-Regs:: Register Naming 12242* i386-Prefixes:: Instruction Prefixes 12243* i386-Memory:: Memory References 12244* i386-Jumps:: Handling of Jump Instructions 12245* i386-Float:: Floating Point 12246* i386-SIMD:: Intel's MMX and AMD's 3DNow! SIMD Operations 12247* i386-LWP:: AMD's Lightweight Profiling Instructions 12248* i386-BMI:: Bit Manipulation Instruction 12249* i386-TBM:: AMD's Trailing Bit Manipulation Instructions 12250* i386-16bit:: Writing 16-bit Code 12251* i386-Arch:: Specifying an x86 CPU architecture 12252* i386-ISA:: AMD64 ISA vs. Intel64 ISA 12253* i386-Bugs:: AT&T Syntax bugs 12254* i386-Notes:: Notes 12255 12256 12257File: as.info, Node: i386-Options, Next: i386-Directives, Up: i386-Dependent 12258 122599.16.1 Options 12260-------------- 12261 12262The i386 version of `as' has a few machine dependent options: 12263 12264`--32 | --x32 | --64' 12265 Select the word size, either 32 bits or 64 bits. `--32' implies 12266 Intel i386 architecture, while `--x32' and `--64' imply AMD x86-64 12267 architecture with 32-bit or 64-bit word-size respectively. 12268 12269 These options are only available with the ELF object file format, 12270 and require that the necessary BFD support has been included (on a 12271 32-bit platform you have to add -enable-64-bit-bfd to configure 12272 enable 64-bit usage and use x86-64 as target platform). 12273 12274`-n' 12275 By default, x86 GAS replaces multiple nop instructions used for 12276 alignment within code sections with multi-byte nop instructions 12277 such as leal 0(%esi,1),%esi. This switch disables the 12278 optimization if a single byte nop (0x90) is explicitly specified 12279 as the fill byte for alignment. 12280 12281`--divide' 12282 On SVR4-derived platforms, the character `/' is treated as a 12283 comment character, which means that it cannot be used in 12284 expressions. The `--divide' option turns `/' into a normal 12285 character. This does not disable `/' at the beginning of a line 12286 starting a comment, or affect using `#' for starting a comment. 12287 12288`-march=CPU[+EXTENSION...]' 12289 This option specifies the target processor. The assembler will 12290 issue an error message if an attempt is made to assemble an 12291 instruction which will not execute on the target processor. The 12292 following processor names are recognized: `i8086', `i186', `i286', 12293 `i386', `i486', `i586', `i686', `pentium', `pentiumpro', 12294 `pentiumii', `pentiumiii', `pentium4', `prescott', `nocona', 12295 `core', `core2', `corei7', `iamcu', `k6', `k6_2', `athlon', 12296 `opteron', `k8', `amdfam10', `bdver1', `bdver2', `bdver3', 12297 `bdver4', `znver1', `znver2', `znver3', `btver1', `btver2', 12298 `generic32' and `generic64'. 12299 12300 In addition to the basic instruction set, the assembler can be 12301 told to accept various extension mnemonics. For example, 12302 `-march=i686+sse4+vmx' extends I686 with SSE4 and VMX. The 12303 following extensions are currently supported: `8087', `287', `387', 12304 `687', `no87', `no287', `no387', `no687', `cmov', `nocmov', `fxsr', 12305 `nofxsr', `mmx', `nommx', `sse', `sse2', `sse3', `sse4a', `ssse3', 12306 `sse4.1', `sse4.2', `sse4', `nosse', `nosse2', `nosse3', `nosse4a', 12307 `nossse3', `nosse4.1', `nosse4.2', `nosse4', `avx', `avx2', 12308 `noavx', `noavx2', `adx', `rdseed', `prfchw', `smap', `mpx', `sha', 12309 `rdpid', `ptwrite', `cet', `gfni', `vaes', `vpclmulqdq', 12310 `prefetchwt1', `clflushopt', `se1', `clwb', `movdiri', `movdir64b', 12311 `enqcmd', `serialize', `tsxldtrk', `kl', `nokl', `widekl', 12312 `nowidekl', `hreset', `avx512f', `avx512cd', `avx512er', 12313 `avx512pf', `avx512vl', `avx512bw', `avx512dq', `avx512ifma', 12314 `avx512vbmi', `avx512_4fmaps', `avx512_4vnniw', `avx512_vpopcntdq', 12315 `avx512_vbmi2', `avx512_vnni', `avx512_bitalg', 12316 `avx512_vp2intersect', `tdx', `avx512_bf16', `avx_vnni', 12317 `avx512_fp16', `noavx512f', `noavx512cd', `noavx512er', 12318 `noavx512pf', `noavx512vl', `noavx512bw', `noavx512dq', 12319 `noavx512ifma', `noavx512vbmi', `noavx512_4fmaps', 12320 `noavx512_4vnniw', `noavx512_vpopcntdq', `noavx512_vbmi2', 12321 `noavx512_vnni', `noavx512_bitalg', `noavx512_vp2intersect', 12322 `notdx', `noavx512_bf16', `noavx_vnni', `noavx512_fp16', 12323 `noenqcmd', `noserialize', `notsxldtrk', `amx_int8', `noamx_int8', 12324 `amx_bf16', `noamx_bf16', `amx_tile', `noamx_tile', `nouintr', 12325 `nohreset', `vmx', `vmfunc', `smx', `xsave', `xsaveopt', `xsavec', 12326 `xsaves', `aes', `pclmul', `fsgsbase', `rdrnd', `f16c', `bmi2', 12327 `fma', `movbe', `ept', `lzcnt', `popcnt', `hle', `rtm', `invpcid', 12328 `clflush', `mwaitx', `clzero', `wbnoinvd', `pconfig', `waitpkg', 12329 `uintr', `cldemote', `rdpru', `mcommit', `sev_es', `lwp', `fma4', 12330 `xop', `cx16', `syscall', `rdtscp', `3dnow', `3dnowa', `sse4a', 12331 `sse5', `snp', `invlpgb', `tlbsync', `svme' and `padlock'. Note 12332 that rather than extending a basic instruction set, the extension 12333 mnemonics starting with `no' revoke the respective functionality. 12334 12335 When the `.arch' directive is used with `-march', the `.arch' 12336 directive will take precedent. 12337 12338`-mtune=CPU' 12339 This option specifies a processor to optimize for. When used in 12340 conjunction with the `-march' option, only instructions of the 12341 processor specified by the `-march' option will be generated. 12342 12343 Valid CPU values are identical to the processor list of 12344 `-march=CPU'. 12345 12346`-msse2avx' 12347 This option specifies that the assembler should encode SSE 12348 instructions with VEX prefix. 12349 12350`-muse-unaligned-vector-move' 12351 This option specifies that the assembler should encode aligned 12352 vector move as unaligned vector move. 12353 12354`-msse-check=NONE' 12355`-msse-check=WARNING' 12356`-msse-check=ERROR' 12357 These options control if the assembler should check SSE 12358 instructions. `-msse-check=NONE' will make the assembler not to 12359 check SSE instructions, which is the default. 12360 `-msse-check=WARNING' will make the assembler issue a warning for 12361 any SSE instruction. `-msse-check=ERROR' will make the assembler 12362 issue an error for any SSE instruction. 12363 12364`-mavxscalar=128' 12365`-mavxscalar=256' 12366 These options control how the assembler should encode scalar AVX 12367 instructions. `-mavxscalar=128' will encode scalar AVX 12368 instructions with 128bit vector length, which is the default. 12369 `-mavxscalar=256' will encode scalar AVX instructions with 256bit 12370 vector length. 12371 12372 WARNING: Don't use this for production code - due to CPU errata the 12373 resulting code may not work on certain models. 12374 12375`-mvexwig=0' 12376`-mvexwig=1' 12377 These options control how the assembler should encode 12378 VEX.W-ignored (WIG) VEX instructions. `-mvexwig=0' will encode 12379 WIG VEX instructions with vex.w = 0, which is the default. 12380 `-mvexwig=1' will encode WIG EVEX instructions with vex.w = 1. 12381 12382 WARNING: Don't use this for production code - due to CPU errata the 12383 resulting code may not work on certain models. 12384 12385`-mevexlig=128' 12386`-mevexlig=256' 12387`-mevexlig=512' 12388 These options control how the assembler should encode 12389 length-ignored (LIG) EVEX instructions. `-mevexlig=128' will 12390 encode LIG EVEX instructions with 128bit vector length, which is 12391 the default. `-mevexlig=256' and `-mevexlig=512' will encode LIG 12392 EVEX instructions with 256bit and 512bit vector length, 12393 respectively. 12394 12395`-mevexwig=0' 12396`-mevexwig=1' 12397 These options control how the assembler should encode w-ignored 12398 (WIG) EVEX instructions. `-mevexwig=0' will encode WIG EVEX 12399 instructions with evex.w = 0, which is the default. `-mevexwig=1' 12400 will encode WIG EVEX instructions with evex.w = 1. 12401 12402`-mmnemonic=ATT' 12403`-mmnemonic=INTEL' 12404 This option specifies instruction mnemonic for matching 12405 instructions. The `.att_mnemonic' and `.intel_mnemonic' 12406 directives will take precedent. 12407 12408`-msyntax=ATT' 12409`-msyntax=INTEL' 12410 This option specifies instruction syntax when processing 12411 instructions. The `.att_syntax' and `.intel_syntax' directives 12412 will take precedent. 12413 12414`-mnaked-reg' 12415 This option specifies that registers don't require a `%' prefix. 12416 The `.att_syntax' and `.intel_syntax' directives will take 12417 precedent. 12418 12419`-madd-bnd-prefix' 12420 This option forces the assembler to add BND prefix to all 12421 branches, even if such prefix was not explicitly specified in the 12422 source code. 12423 12424`-mno-shared' 12425 On ELF target, the assembler normally optimizes out non-PLT 12426 relocations against defined non-weak global branch targets with 12427 default visibility. The `-mshared' option tells the assembler to 12428 generate code which may go into a shared library where all 12429 non-weak global branch targets with default visibility can be 12430 preempted. The resulting code is slightly bigger. This option 12431 only affects the handling of branch instructions. 12432 12433`-mbig-obj' 12434 On PE/COFF target this option forces the use of big object file 12435 format, which allows more than 32768 sections. 12436 12437`-momit-lock-prefix=NO' 12438`-momit-lock-prefix=YES' 12439 These options control how the assembler should encode lock prefix. 12440 This option is intended as a workaround for processors, that fail 12441 on lock prefix. This option can only be safely used with 12442 single-core, single-thread computers `-momit-lock-prefix=YES' will 12443 omit all lock prefixes. `-momit-lock-prefix=NO' will encode lock 12444 prefix as usual, which is the default. 12445 12446`-mfence-as-lock-add=NO' 12447`-mfence-as-lock-add=YES' 12448 These options control how the assembler should encode lfence, 12449 mfence and sfence. `-mfence-as-lock-add=YES' will encode lfence, 12450 mfence and sfence as `lock addl $0x0, (%rsp)' in 64-bit mode and 12451 `lock addl $0x0, (%esp)' in 32-bit mode. `-mfence-as-lock-add=NO' 12452 will encode lfence, mfence and sfence as usual, which is the 12453 default. 12454 12455`-mrelax-relocations=NO' 12456`-mrelax-relocations=YES' 12457 These options control whether the assembler should generate relax 12458 relocations, R_386_GOT32X, in 32-bit mode, or R_X86_64_GOTPCRELX 12459 and R_X86_64_REX_GOTPCRELX, in 64-bit mode. 12460 `-mrelax-relocations=YES' will generate relax relocations. 12461 `-mrelax-relocations=NO' will not generate relax relocations. The 12462 default can be controlled by a configure option 12463 `--enable-x86-relax-relocations'. 12464 12465`-malign-branch-boundary=NUM' 12466 This option controls how the assembler should align branches with 12467 segment prefixes or NOP. NUM must be a power of 2. It should be 12468 0 or no less than 16. Branches will be aligned within NUM byte 12469 boundary. `-malign-branch-boundary=0', which is the default, 12470 doesn't align branches. 12471 12472`-malign-branch=TYPE[+TYPE...]' 12473 This option specifies types of branches to align. TYPE is 12474 combination of `jcc', which aligns conditional jumps, `fused', 12475 which aligns fused conditional jumps, `jmp', which aligns 12476 unconditional jumps, `call' which aligns calls, `ret', which 12477 aligns rets, `indirect', which aligns indirect jumps and calls. 12478 The default is `-malign-branch=jcc+fused+jmp'. 12479 12480`-malign-branch-prefix-size=NUM' 12481 This option specifies the maximum number of prefixes on an 12482 instruction to align branches. NUM should be between 0 and 5. 12483 The default NUM is 5. 12484 12485`-mbranches-within-32B-boundaries' 12486 This option aligns conditional jumps, fused conditional jumps and 12487 unconditional jumps within 32 byte boundary with up to 5 segment 12488 prefixes on an instruction. It is equivalent to 12489 `-malign-branch-boundary=32' `-malign-branch=jcc+fused+jmp' 12490 `-malign-branch-prefix-size=5'. The default doesn't align 12491 branches. 12492 12493`-mlfence-after-load=NO' 12494`-mlfence-after-load=YES' 12495 These options control whether the assembler should generate lfence 12496 after load instructions. `-mlfence-after-load=YES' will generate 12497 lfence. `-mlfence-after-load=NO' will not generate lfence, which 12498 is the default. 12499 12500`-mlfence-before-indirect-branch=NONE' 12501 12502`-mlfence-before-indirect-branch=ALL' 12503 12504`-mlfence-before-indirect-branch=REGISTER' 12505`-mlfence-before-indirect-branch=MEMORY' 12506 These options control whether the assembler should generate lfence 12507 before indirect near branch instructions. 12508 `-mlfence-before-indirect-branch=ALL' will generate lfence before 12509 indirect near branch via register and issue a warning before 12510 indirect near branch via memory. It also implicitly sets 12511 `-mlfence-before-ret=SHL' when there's no explicit 12512 `-mlfence-before-ret='. 12513 `-mlfence-before-indirect-branch=REGISTER' will generate lfence 12514 before indirect near branch via register. 12515 `-mlfence-before-indirect-branch=MEMORY' will issue a warning 12516 before indirect near branch via memory. 12517 `-mlfence-before-indirect-branch=NONE' will not generate lfence 12518 nor issue warning, which is the default. Note that lfence won't 12519 be generated before indirect near branch via register with 12520 `-mlfence-after-load=YES' since lfence will be generated after 12521 loading branch target register. 12522 12523`-mlfence-before-ret=NONE' 12524 12525`-mlfence-before-ret=SHL' 12526 12527`-mlfence-before-ret=OR' 12528 12529`-mlfence-before-ret=YES' 12530`-mlfence-before-ret=NOT' 12531 These options control whether the assembler should generate lfence 12532 before ret. `-mlfence-before-ret=OR' will generate generate or 12533 instruction with lfence. `-mlfence-before-ret=SHL/YES' will 12534 generate shl instruction with lfence. `-mlfence-before-ret=NOT' 12535 will generate not instruction with lfence. 12536 `-mlfence-before-ret=NONE' will not generate lfence, which is the 12537 default. 12538 12539`-mx86-used-note=NO' 12540`-mx86-used-note=YES' 12541 These options control whether the assembler should generate 12542 GNU_PROPERTY_X86_ISA_1_USED and GNU_PROPERTY_X86_FEATURE_2_USED 12543 GNU property notes. The default can be controlled by the 12544 `--enable-x86-used-note' configure option. 12545 12546`-mevexrcig=RNE' 12547`-mevexrcig=RD' 12548`-mevexrcig=RU' 12549`-mevexrcig=RZ' 12550 These options control how the assembler should encode SAE-only 12551 EVEX instructions. `-mevexrcig=RNE' will encode RC bits of EVEX 12552 instruction with 00, which is the default. `-mevexrcig=RD', 12553 `-mevexrcig=RU' and `-mevexrcig=RZ' will encode SAE-only EVEX 12554 instructions with 01, 10 and 11 RC bits, respectively. 12555 12556`-mamd64' 12557`-mintel64' 12558 This option specifies that the assembler should accept only AMD64 12559 or Intel64 ISA in 64-bit mode. The default is to accept common, 12560 Intel64 only and AMD64 ISAs. 12561 12562`-O0 | -O | -O1 | -O2 | -Os' 12563 Optimize instruction encoding with smaller instruction size. `-O' 12564 and `-O1' encode 64-bit register load instructions with 64-bit 12565 immediate as 32-bit register load instructions with 31-bit or 12566 32-bits immediates, encode 64-bit register clearing instructions 12567 with 32-bit register clearing instructions, encode 256-bit/512-bit 12568 VEX/EVEX vector register clearing instructions with 128-bit VEX 12569 vector register clearing instructions, encode 128-bit/256-bit EVEX 12570 vector register load/store instructions with VEX vector register 12571 load/store instructions, and encode 128-bit/256-bit EVEX packed 12572 integer logical instructions with 128-bit/256-bit VEX packed 12573 integer logical. 12574 12575 `-O2' includes `-O1' optimization plus encodes 256-bit/512-bit 12576 EVEX vector register clearing instructions with 128-bit EVEX 12577 vector register clearing instructions. In 64-bit mode VEX encoded 12578 instructions with commutative source operands will also have their 12579 source operands swapped if this allows using the 2-byte VEX prefix 12580 form instead of the 3-byte one. Certain forms of AND as well as 12581 OR with the same (register) operand specified twice will also be 12582 changed to TEST. 12583 12584 `-Os' includes `-O2' optimization plus encodes 16-bit, 32-bit and 12585 64-bit register tests with immediate as 8-bit register test with 12586 immediate. `-O0' turns off this optimization. 12587 12588 12589 12590File: as.info, Node: i386-Directives, Next: i386-Syntax, Prev: i386-Options, Up: i386-Dependent 12591 125929.16.2 x86 specific Directives 12593------------------------------ 12594 12595`.lcomm SYMBOL , LENGTH[, ALIGNMENT]' 12596 Reserve LENGTH (an absolute expression) bytes for a local common 12597 denoted by SYMBOL. The section and value of SYMBOL are those of 12598 the new local common. The addresses are allocated in the bss 12599 section, so that at run-time the bytes start off zeroed. Since 12600 SYMBOL is not declared global, it is normally not visible to `ld'. 12601 The optional third parameter, ALIGNMENT, specifies the desired 12602 alignment of the symbol in the bss section. 12603 12604 This directive is only available for COFF based x86 targets. 12605 12606`.largecomm SYMBOL , LENGTH[, ALIGNMENT]' 12607 This directive behaves in the same way as the `comm' directive 12608 except that the data is placed into the .LBSS section instead of 12609 the .BSS section *Note Comm::. 12610 12611 The directive is intended to be used for data which requires a 12612 large amount of space, and it is only available for ELF based 12613 x86_64 targets. 12614 12615`.value EXPRESSION [, EXPRESSION]' 12616 This directive behaves in the same way as the `.short' directive, 12617 taking a series of comma separated expressions and storing them as 12618 two-byte wide values into the current section. 12619 12620 12621 12622File: as.info, Node: i386-Syntax, Next: i386-Mnemonics, Prev: i386-Directives, Up: i386-Dependent 12623 126249.16.3 i386 Syntactical Considerations 12625-------------------------------------- 12626 12627* Menu: 12628 12629* i386-Variations:: AT&T Syntax versus Intel Syntax 12630* i386-Chars:: Special Characters 12631 12632 12633File: as.info, Node: i386-Variations, Next: i386-Chars, Up: i386-Syntax 12634 126359.16.3.1 AT&T Syntax versus Intel Syntax 12636........................................ 12637 12638`as' now supports assembly using Intel assembler syntax. 12639`.intel_syntax' selects Intel mode, and `.att_syntax' switches back to 12640the usual AT&T mode for compatibility with the output of `gcc'. Either 12641of these directives may have an optional argument, `prefix', or 12642`noprefix' specifying whether registers require a `%' prefix. AT&T 12643System V/386 assembler syntax is quite different from Intel syntax. We 12644mention these differences because almost all 80386 documents use Intel 12645syntax. Notable differences between the two syntaxes are: 12646 12647 * AT&T immediate operands are preceded by `$'; Intel immediate 12648 operands are undelimited (Intel `push 4' is AT&T `pushl $4'). 12649 AT&T register operands are preceded by `%'; Intel register operands 12650 are undelimited. AT&T absolute (as opposed to PC relative) 12651 jump/call operands are prefixed by `*'; they are undelimited in 12652 Intel syntax. 12653 12654 * AT&T and Intel syntax use the opposite order for source and 12655 destination operands. Intel `add eax, 4' is `addl $4, %eax'. The 12656 `source, dest' convention is maintained for compatibility with 12657 previous Unix assemblers. Note that `bound', `invlpga', and 12658 instructions with 2 immediate operands, such as the `enter' 12659 instruction, do _not_ have reversed order. *Note i386-Bugs::. 12660 12661 * In AT&T syntax the size of memory operands is determined from the 12662 last character of the instruction mnemonic. Mnemonic suffixes of 12663 `b', `w', `l' and `q' specify byte (8-bit), word (16-bit), long 12664 (32-bit) and quadruple word (64-bit) memory references. Mnemonic 12665 suffixes of `x', `y' and `z' specify xmm (128-bit vector), ymm 12666 (256-bit vector) and zmm (512-bit vector) memory references, only 12667 when there's no other way to disambiguate an instruction. Intel 12668 syntax accomplishes this by prefixing memory operands (_not_ the 12669 instruction mnemonics) with `byte ptr', `word ptr', `dword ptr', 12670 `qword ptr', `xmmword ptr', `ymmword ptr' and `zmmword ptr'. 12671 Thus, Intel syntax `mov al, byte ptr FOO' is `movb FOO, %al' in 12672 AT&T syntax. In Intel syntax, `fword ptr', `tbyte ptr' and `oword 12673 ptr' specify 48-bit, 80-bit and 128-bit memory references. 12674 12675 In 64-bit code, `movabs' can be used to encode the `mov' 12676 instruction with the 64-bit displacement or immediate operand. 12677 12678 * Immediate form long jumps and calls are `lcall/ljmp $SECTION, 12679 $OFFSET' in AT&T syntax; the Intel syntax is `call/jmp far 12680 SECTION:OFFSET'. Also, the far return instruction is `lret 12681 $STACK-ADJUST' in AT&T syntax; Intel syntax is `ret far 12682 STACK-ADJUST'. 12683 12684 * The AT&T assembler does not provide support for multiple section 12685 programs. Unix style systems expect all programs to be single 12686 sections. 12687 12688 12689File: as.info, Node: i386-Chars, Prev: i386-Variations, Up: i386-Syntax 12690 126919.16.3.2 Special Characters 12692........................... 12693 12694The presence of a `#' appearing anywhere on a line indicates the start 12695of a comment that extends to the end of that line. 12696 12697 If a `#' appears as the first character of a line then the whole 12698line is treated as a comment, but in this case the line can also be a 12699logical line number directive (*note Comments::) or a preprocessor 12700control command (*note Preprocessing::). 12701 12702 If the `--divide' command-line option has not been specified then 12703the `/' character appearing anywhere on a line also introduces a line 12704comment. 12705 12706 The `;' character can be used to separate statements on the same 12707line. 12708 12709 12710File: as.info, Node: i386-Mnemonics, Next: i386-Regs, Prev: i386-Syntax, Up: i386-Dependent 12711 127129.16.4 i386-Mnemonics 12713--------------------- 12714 127159.16.4.1 Instruction Naming 12716........................... 12717 12718Instruction mnemonics are suffixed with one character modifiers which 12719specify the size of operands. The letters `b', `w', `l' and `q' 12720specify byte, word, long and quadruple word operands. If no suffix is 12721specified by an instruction then `as' tries to fill in the missing 12722suffix based on the destination register operand (the last one by 12723convention). Thus, `mov %ax, %bx' is equivalent to `movw %ax, %bx'; 12724also, `mov $1, %bx' is equivalent to `movw $1, bx'. Note that this is 12725incompatible with the AT&T Unix assembler which assumes that a missing 12726mnemonic suffix implies long operand size. (This incompatibility does 12727not affect compiler output since compilers always explicitly specify 12728the mnemonic suffix.) 12729 12730 When there is no sizing suffix and no (suitable) register operands to 12731deduce the size of memory operands, with a few exceptions and where long 12732operand size is possible in the first place, operand size will default 12733to long in 32- and 64-bit modes. Similarly it will default to short in 1273416-bit mode. Noteworthy exceptions are 12735 12736 * Instructions with an implicit on-stack operand as well as branches, 12737 which default to quad in 64-bit mode. 12738 12739 * Sign- and zero-extending moves, which default to byte size source 12740 operands. 12741 12742 * Floating point insns with integer operands, which default to short 12743 (for perhaps historical reasons). 12744 12745 * CRC32 with a 64-bit destination, which defaults to a quad source 12746 operand. 12747 12748 12749 Different encoding options can be specified via pseudo prefixes: 12750 12751 * `{disp8}' - prefer 8-bit displacement. 12752 12753 * `{disp32}' - prefer 32-bit displacement. 12754 12755 * `{disp16}' - prefer 16-bit displacement. 12756 12757 * `{load}' - prefer load-form instruction. 12758 12759 * `{store}' - prefer store-form instruction. 12760 12761 * `{vex}' - encode with VEX prefix. 12762 12763 * `{vex3}' - encode with 3-byte VEX prefix. 12764 12765 * `{evex}' - encode with EVEX prefix. 12766 12767 * `{rex}' - prefer REX prefix for integer and legacy vector 12768 instructions (x86-64 only). Note that this differs from the `rex' 12769 prefix which generates REX prefix unconditionally. 12770 12771 * `{nooptimize}' - disable instruction size optimization. 12772 12773 Mnemonics of Intel VNNI instructions are encoded with the EVEX prefix 12774by default. The pseudo `{vex}' prefix can be used to encode mnemonics 12775of Intel VNNI instructions with the VEX prefix. 12776 12777 The Intel-syntax conversion instructions 12778 12779 * `cbw' -- sign-extend byte in `%al' to word in `%ax', 12780 12781 * `cwde' -- sign-extend word in `%ax' to long in `%eax', 12782 12783 * `cwd' -- sign-extend word in `%ax' to long in `%dx:%ax', 12784 12785 * `cdq' -- sign-extend dword in `%eax' to quad in `%edx:%eax', 12786 12787 * `cdqe' -- sign-extend dword in `%eax' to quad in `%rax' (x86-64 12788 only), 12789 12790 * `cqo' -- sign-extend quad in `%rax' to octuple in `%rdx:%rax' 12791 (x86-64 only), 12792 12793are called `cbtw', `cwtl', `cwtd', `cltd', `cltq', and `cqto' in AT&T 12794naming. `as' accepts either naming for these instructions. 12795 12796 The Intel-syntax extension instructions 12797 12798 * `movsx' -- sign-extend `reg8/mem8' to `reg16'. 12799 12800 * `movsx' -- sign-extend `reg8/mem8' to `reg32'. 12801 12802 * `movsx' -- sign-extend `reg8/mem8' to `reg64' (x86-64 only). 12803 12804 * `movsx' -- sign-extend `reg16/mem16' to `reg32' 12805 12806 * `movsx' -- sign-extend `reg16/mem16' to `reg64' (x86-64 only). 12807 12808 * `movsxd' -- sign-extend `reg32/mem32' to `reg64' (x86-64 only). 12809 12810 * `movzx' -- zero-extend `reg8/mem8' to `reg16'. 12811 12812 * `movzx' -- zero-extend `reg8/mem8' to `reg32'. 12813 12814 * `movzx' -- zero-extend `reg8/mem8' to `reg64' (x86-64 only). 12815 12816 * `movzx' -- zero-extend `reg16/mem16' to `reg32' 12817 12818 * `movzx' -- zero-extend `reg16/mem16' to `reg64' (x86-64 only). 12819 12820are called `movsbw/movsxb/movsx', `movsbl/movsxb/movsx', 12821`movsbq/movsxb/movsx', `movswl/movsxw', `movswq/movsxw', 12822`movslq/movsxl', `movzbw/movzxb/movzx', `movzbl/movzxb/movzx', 12823`movzbq/movzxb/movzx', `movzwl/movzxw' and `movzwq/movzxw' in AT&T 12824syntax. 12825 12826 Far call/jump instructions are `lcall' and `ljmp' in AT&T syntax, 12827but are `call far' and `jump far' in Intel convention. 12828 128299.16.4.2 AT&T Mnemonic versus Intel Mnemonic 12830............................................ 12831 12832`as' supports assembly using Intel mnemonic. `.intel_mnemonic' selects 12833Intel mnemonic with Intel syntax, and `.att_mnemonic' switches back to 12834the usual AT&T mnemonic with AT&T syntax for compatibility with the 12835output of `gcc'. Several x87 instructions, `fadd', `fdiv', `fdivp', 12836`fdivr', `fdivrp', `fmul', `fsub', `fsubp', `fsubr' and `fsubrp', are 12837implemented in AT&T System V/386 assembler with different mnemonics 12838from those in Intel IA32 specification. `gcc' generates those 12839instructions with AT&T mnemonic. 12840 12841 * `movslq' with AT&T mnemonic only accepts 64-bit destination 12842 register. `movsxd' should be used to encode 16-bit or 32-bit 12843 destination register with both AT&T and Intel mnemonics. 12844 12845 12846File: as.info, Node: i386-Regs, Next: i386-Prefixes, Prev: i386-Mnemonics, Up: i386-Dependent 12847 128489.16.5 Register Naming 12849---------------------- 12850 12851Register operands are always prefixed with `%'. The 80386 registers 12852consist of 12853 12854 * the 8 32-bit registers `%eax' (the accumulator), `%ebx', `%ecx', 12855 `%edx', `%edi', `%esi', `%ebp' (the frame pointer), and `%esp' 12856 (the stack pointer). 12857 12858 * the 8 16-bit low-ends of these: `%ax', `%bx', `%cx', `%dx', `%di', 12859 `%si', `%bp', and `%sp'. 12860 12861 * the 8 8-bit registers: `%ah', `%al', `%bh', `%bl', `%ch', `%cl', 12862 `%dh', and `%dl' (These are the high-bytes and low-bytes of `%ax', 12863 `%bx', `%cx', and `%dx') 12864 12865 * the 6 section registers `%cs' (code section), `%ds' (data 12866 section), `%ss' (stack section), `%es', `%fs', and `%gs'. 12867 12868 * the 5 processor control registers `%cr0', `%cr2', `%cr3', `%cr4', 12869 and `%cr8'. 12870 12871 * the 6 debug registers `%db0', `%db1', `%db2', `%db3', `%db6', and 12872 `%db7'. 12873 12874 * the 2 test registers `%tr6' and `%tr7'. 12875 12876 * the 8 floating point register stack `%st' or equivalently 12877 `%st(0)', `%st(1)', `%st(2)', `%st(3)', `%st(4)', `%st(5)', 12878 `%st(6)', and `%st(7)'. These registers are overloaded by 8 MMX 12879 registers `%mm0', `%mm1', `%mm2', `%mm3', `%mm4', `%mm5', `%mm6' 12880 and `%mm7'. 12881 12882 * the 8 128-bit SSE registers registers `%xmm0', `%xmm1', `%xmm2', 12883 `%xmm3', `%xmm4', `%xmm5', `%xmm6' and `%xmm7'. 12884 12885 The AMD x86-64 architecture extends the register set by: 12886 12887 * enhancing the 8 32-bit registers to 64-bit: `%rax' (the 12888 accumulator), `%rbx', `%rcx', `%rdx', `%rdi', `%rsi', `%rbp' (the 12889 frame pointer), `%rsp' (the stack pointer) 12890 12891 * the 8 extended registers `%r8'-`%r15'. 12892 12893 * the 8 32-bit low ends of the extended registers: `%r8d'-`%r15d'. 12894 12895 * the 8 16-bit low ends of the extended registers: `%r8w'-`%r15w'. 12896 12897 * the 8 8-bit low ends of the extended registers: `%r8b'-`%r15b'. 12898 12899 * the 4 8-bit registers: `%sil', `%dil', `%bpl', `%spl'. 12900 12901 * the 8 debug registers: `%db8'-`%db15'. 12902 12903 * the 8 128-bit SSE registers: `%xmm8'-`%xmm15'. 12904 12905 With the AVX extensions more registers were made available: 12906 12907 * the 16 256-bit SSE `%ymm0'-`%ymm15' (only the first 8 available in 12908 32-bit mode). The bottom 128 bits are overlaid with the 12909 `xmm0'-`xmm15' registers. 12910 12911 12912 The AVX512 extensions added the following registers: 12913 12914 * the 32 512-bit registers `%zmm0'-`%zmm31' (only the first 8 12915 available in 32-bit mode). The bottom 128 bits are overlaid with 12916 the `%xmm0'-`%xmm31' registers and the first 256 bits are overlaid 12917 with the `%ymm0'-`%ymm31' registers. 12918 12919 * the 8 mask registers `%k0'-`%k7'. 12920 12921 12922 12923File: as.info, Node: i386-Prefixes, Next: i386-Memory, Prev: i386-Regs, Up: i386-Dependent 12924 129259.16.6 Instruction Prefixes 12926--------------------------- 12927 12928Instruction prefixes are used to modify the following instruction. They 12929are used to repeat string instructions, to provide section overrides, to 12930perform bus lock operations, and to change operand and address sizes. 12931(Most instructions that normally operate on 32-bit operands will use 1293216-bit operands if the instruction has an "operand size" prefix.) 12933Instruction prefixes are best written on the same line as the 12934instruction they act upon. For example, the `scas' (scan string) 12935instruction is repeated with: 12936 12937 repne scas %es:(%edi),%al 12938 12939 You may also place prefixes on the lines immediately preceding the 12940instruction, but this circumvents checks that `as' does with prefixes, 12941and will not work with all prefixes. 12942 12943 Here is a list of instruction prefixes: 12944 12945 * Section override prefixes `cs', `ds', `ss', `es', `fs', `gs'. 12946 These are automatically added by specifying using the 12947 SECTION:MEMORY-OPERAND form for memory references. 12948 12949 * Operand/Address size prefixes `data16' and `addr16' change 32-bit 12950 operands/addresses into 16-bit operands/addresses, while `data32' 12951 and `addr32' change 16-bit ones (in a `.code16' section) into 12952 32-bit operands/addresses. These prefixes _must_ appear on the 12953 same line of code as the instruction they modify. For example, in 12954 a 16-bit `.code16' section, you might write: 12955 12956 addr32 jmpl *(%ebx) 12957 12958 * The bus lock prefix `lock' inhibits interrupts during execution of 12959 the instruction it precedes. (This is only valid with certain 12960 instructions; see a 80386 manual for details). 12961 12962 * The wait for coprocessor prefix `wait' waits for the coprocessor to 12963 complete the current instruction. This should never be needed for 12964 the 80386/80387 combination. 12965 12966 * The `rep', `repe', and `repne' prefixes are added to string 12967 instructions to make them repeat `%ecx' times (`%cx' times if the 12968 current address size is 16-bits). 12969 12970 * The `rex' family of prefixes is used by x86-64 to encode 12971 extensions to i386 instruction set. The `rex' prefix has four 12972 bits -- an operand size overwrite (`64') used to change operand 12973 size from 32-bit to 64-bit and X, Y and Z extensions bits used to 12974 extend the register set. 12975 12976 You may write the `rex' prefixes directly. The `rex64xyz' 12977 instruction emits `rex' prefix with all the bits set. By omitting 12978 the `64', `x', `y' or `z' you may write other prefixes as well. 12979 Normally, there is no need to write the prefixes explicitly, since 12980 gas will automatically generate them based on the instruction 12981 operands. 12982 12983 12984File: as.info, Node: i386-Memory, Next: i386-Jumps, Prev: i386-Prefixes, Up: i386-Dependent 12985 129869.16.7 Memory References 12987------------------------ 12988 12989An Intel syntax indirect memory reference of the form 12990 12991 SECTION:[BASE + INDEX*SCALE + DISP] 12992 12993is translated into the AT&T syntax 12994 12995 SECTION:DISP(BASE, INDEX, SCALE) 12996 12997where BASE and INDEX are the optional 32-bit base and index registers, 12998DISP is the optional displacement, and SCALE, taking the values 1, 2, 129994, and 8, multiplies INDEX to calculate the address of the operand. If 13000no SCALE is specified, SCALE is taken to be 1. SECTION specifies the 13001optional section register for the memory operand, and may override the 13002default section register (see a 80386 manual for section register 13003defaults). Note that section overrides in AT&T syntax _must_ be 13004preceded by a `%'. If you specify a section override which coincides 13005with the default section register, `as' does _not_ output any section 13006register override prefixes to assemble the given instruction. Thus, 13007section overrides can be specified to emphasize which section register 13008is used for a given memory operand. 13009 13010 Here are some examples of Intel and AT&T style memory references: 13011 13012AT&T: `-4(%ebp)', Intel: `[ebp - 4]' 13013 BASE is `%ebp'; DISP is `-4'. SECTION is missing, and the default 13014 section is used (`%ss' for addressing with `%ebp' as the base 13015 register). INDEX, SCALE are both missing. 13016 13017AT&T: `foo(,%eax,4)', Intel: `[foo + eax*4]' 13018 INDEX is `%eax' (scaled by a SCALE 4); DISP is `foo'. All other 13019 fields are missing. The section register here defaults to `%ds'. 13020 13021AT&T: `foo(,1)'; Intel `[foo]' 13022 This uses the value pointed to by `foo' as a memory operand. Note 13023 that BASE and INDEX are both missing, but there is only _one_ `,'. 13024 This is a syntactic exception. 13025 13026AT&T: `%gs:foo'; Intel `gs:foo' 13027 This selects the contents of the variable `foo' with section 13028 register SECTION being `%gs'. 13029 13030 Absolute (as opposed to PC relative) call and jump operands must be 13031prefixed with `*'. If no `*' is specified, `as' always chooses PC 13032relative addressing for jump/call labels. 13033 13034 Any instruction that has a memory operand, but no register operand, 13035_must_ specify its size (byte, word, long, or quadruple) with an 13036instruction mnemonic suffix (`b', `w', `l' or `q', respectively). 13037 13038 The x86-64 architecture adds an RIP (instruction pointer relative) 13039addressing. This addressing mode is specified by using `rip' as a base 13040register. Only constant offsets are valid. For example: 13041 13042AT&T: `1234(%rip)', Intel: `[rip + 1234]' 13043 Points to the address 1234 bytes past the end of the current 13044 instruction. 13045 13046AT&T: `symbol(%rip)', Intel: `[rip + symbol]' 13047 Points to the `symbol' in RIP relative way, this is shorter than 13048 the default absolute addressing. 13049 13050 Other addressing modes remain unchanged in x86-64 architecture, 13051except registers used are 64-bit instead of 32-bit. 13052 13053 13054File: as.info, Node: i386-Jumps, Next: i386-Float, Prev: i386-Memory, Up: i386-Dependent 13055 130569.16.8 Handling of Jump Instructions 13057------------------------------------ 13058 13059Jump instructions are always optimized to use the smallest possible 13060displacements. This is accomplished by using byte (8-bit) displacement 13061jumps whenever the target is sufficiently close. If a byte displacement 13062is insufficient a long displacement is used. We do not support word 13063(16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump 13064instruction with the `data16' instruction prefix), since the 80386 13065insists upon masking `%eip' to 16 bits after the word displacement is 13066added. (See also *note i386-Arch::) 13067 13068 Note that the `jcxz', `jecxz', `loop', `loopz', `loope', `loopnz' 13069and `loopne' instructions only come in byte displacements, so that if 13070you use these instructions (`gcc' does not use them) you may get an 13071error message (and incorrect code). The AT&T 80386 assembler tries to 13072get around this problem by expanding `jcxz foo' to 13073 13074 jcxz cx_zero 13075 jmp cx_nonzero 13076 cx_zero: jmp foo 13077 cx_nonzero: 13078 13079 13080File: as.info, Node: i386-Float, Next: i386-SIMD, Prev: i386-Jumps, Up: i386-Dependent 13081 130829.16.9 Floating Point 13083--------------------- 13084 13085All 80387 floating point types except packed BCD are supported. (BCD 13086support may be added without much difficulty). These data types are 1308716-, 32-, and 64- bit integers, and single (32-bit), double (64-bit), 13088and extended (80-bit) precision floating point. Each supported type 13089has an instruction mnemonic suffix and a constructor associated with 13090it. Instruction mnemonic suffixes specify the operand's data type. 13091Constructors build these data types into memory. 13092 13093 * Floating point constructors are `.float' or `.single', `.double', 13094 `.tfloat', `.hfloat', and `.bfloat16' for 32-, 64-, 80-, and 13095 16-bit (two flavors) formats respectively. The former three 13096 correspond to instruction mnemonic suffixes `s', `l', and `t'. 13097 `t' stands for 80-bit (ten byte) real. The 80387 only supports 13098 this format via the `fldt' (load 80-bit real to stack top) and 13099 `fstpt' (store 80-bit real and pop stack) instructions. 13100 13101 * Integer constructors are `.word', `.long' or `.int', and `.quad' 13102 for the 16-, 32-, and 64-bit integer formats. The corresponding 13103 instruction mnemonic suffixes are `s' (short), `l' (long), and `q' 13104 (quad). As with the 80-bit real format, the 64-bit `q' format is 13105 only present in the `fildq' (load quad integer to stack top) and 13106 `fistpq' (store quad integer and pop stack) instructions. 13107 13108 Register to register operations should not use instruction mnemonic 13109suffixes. `fstl %st, %st(1)' will give a warning, and be assembled as 13110if you wrote `fst %st, %st(1)', since all register to register 13111operations use 80-bit floating point operands. (Contrast this with 13112`fstl %st, mem', which converts `%st' from 80-bit to 64-bit floating 13113point format, then stores the result in the 4 byte location `mem') 13114 13115 13116File: as.info, Node: i386-SIMD, Next: i386-LWP, Prev: i386-Float, Up: i386-Dependent 13117 131189.16.10 Intel's MMX and AMD's 3DNow! SIMD Operations 13119---------------------------------------------------- 13120 13121`as' supports Intel's MMX instruction set (SIMD instructions for 13122integer data), available on Intel's Pentium MMX processors and Pentium 13123II processors, AMD's K6 and K6-2 processors, Cyrix' M2 processor, and 13124probably others. It also supports AMD's 3DNow! instruction set (SIMD 13125instructions for 32-bit floating point data) available on AMD's K6-2 13126processor and possibly others in the future. 13127 13128 Currently, `as' does not support Intel's floating point SIMD, Katmai 13129(KNI). 13130 13131 The eight 64-bit MMX operands, also used by 3DNow!, are called 13132`%mm0', `%mm1', ... `%mm7'. They contain eight 8-bit integers, four 1313316-bit integers, two 32-bit integers, one 64-bit integer, or two 32-bit 13134floating point values. The MMX registers cannot be used at the same 13135time as the floating point stack. 13136 13137 See Intel and AMD documentation, keeping in mind that the operand 13138order in instructions is reversed from the Intel syntax. 13139 13140 13141File: as.info, Node: i386-LWP, Next: i386-BMI, Prev: i386-SIMD, Up: i386-Dependent 13142 131439.16.11 AMD's Lightweight Profiling Instructions 13144------------------------------------------------ 13145 13146`as' supports AMD's Lightweight Profiling (LWP) instruction set, 13147available on AMD's Family 15h (Orochi) processors. 13148 13149 LWP enables applications to collect and manage performance data, and 13150react to performance events. The collection of performance data 13151requires no context switches. LWP runs in the context of a thread and 13152so several counters can be used independently across multiple threads. 13153LWP can be used in both 64-bit and legacy 32-bit modes. 13154 13155 For detailed information on the LWP instruction set, see the `AMD 13156Lightweight Profiling Specification' available at Lightweight Profiling 13157Specification (http://developer.amd.com/cpu/LWP). 13158 13159 13160File: as.info, Node: i386-BMI, Next: i386-TBM, Prev: i386-LWP, Up: i386-Dependent 13161 131629.16.12 Bit Manipulation Instructions 13163------------------------------------- 13164 13165`as' supports the Bit Manipulation (BMI) instruction set. 13166 13167 BMI instructions provide several instructions implementing individual 13168bit manipulation operations such as isolation, masking, setting, or 13169resetting. 13170 13171 13172File: as.info, Node: i386-TBM, Next: i386-16bit, Prev: i386-BMI, Up: i386-Dependent 13173 131749.16.13 AMD's Trailing Bit Manipulation Instructions 13175---------------------------------------------------- 13176 13177`as' supports AMD's Trailing Bit Manipulation (TBM) instruction set, 13178available on AMD's BDVER2 processors (Trinity and Viperfish). 13179 13180 TBM instructions provide instructions implementing individual bit 13181manipulation operations such as isolating, masking, setting, resetting, 13182complementing, and operations on trailing zeros and ones. 13183 13184 13185File: as.info, Node: i386-16bit, Next: i386-Arch, Prev: i386-TBM, Up: i386-Dependent 13186 131879.16.14 Writing 16-bit Code 13188--------------------------- 13189 13190While `as' normally writes only "pure" 32-bit i386 code or 64-bit 13191x86-64 code depending on the default configuration, it also supports 13192writing code to run in real mode or in 16-bit protected mode code 13193segments. To do this, put a `.code16' or `.code16gcc' directive before 13194the assembly language instructions to be run in 16-bit mode. You can 13195switch `as' to writing 32-bit code with the `.code32' directive or 1319664-bit code with the `.code64' directive. 13197 13198 `.code16gcc' provides experimental support for generating 16-bit 13199code from gcc, and differs from `.code16' in that `call', `ret', 13200`enter', `leave', `push', `pop', `pusha', `popa', `pushf', and `popf' 13201instructions default to 32-bit size. This is so that the stack pointer 13202is manipulated in the same way over function calls, allowing access to 13203function parameters at the same stack offsets as in 32-bit mode. 13204`.code16gcc' also automatically adds address size prefixes where 13205necessary to use the 32-bit addressing modes that gcc generates. 13206 13207 The code which `as' generates in 16-bit mode will not necessarily 13208run on a 16-bit pre-80386 processor. To write code that runs on such a 13209processor, you must refrain from using _any_ 32-bit constructs which 13210require `as' to output address or operand size prefixes. 13211 13212 Note that writing 16-bit code instructions by explicitly specifying a 13213prefix or an instruction mnemonic suffix within a 32-bit code section 13214generates different machine instructions than those generated for a 1321516-bit code segment. In a 32-bit code section, the following code 13216generates the machine opcode bytes `66 6a 04', which pushes the value 13217`4' onto the stack, decrementing `%esp' by 2. 13218 13219 pushw $4 13220 13221 The same code in a 16-bit code section would generate the machine 13222opcode bytes `6a 04' (i.e., without the operand size prefix), which is 13223correct since the processor default operand size is assumed to be 16 13224bits in a 16-bit code section. 13225 13226 13227File: as.info, Node: i386-Arch, Next: i386-ISA, Prev: i386-16bit, Up: i386-Dependent 13228 132299.16.15 Specifying CPU Architecture 13230----------------------------------- 13231 13232`as' may be told to assemble for a particular CPU (sub-)architecture 13233with the `.arch CPU_TYPE' directive. This directive enables a warning 13234when gas detects an instruction that is not supported on the CPU 13235specified. The choices for CPU_TYPE are: 13236 13237`default' `push' `pop' 13238`i8086' `i186' `i286' `i386' 13239`i486' `i586' `i686' `pentium' 13240`pentiumpro' `pentiumii' `pentiumiii' `pentium4' 13241`prescott' `nocona' `core' `core2' 13242`corei7' `iamcu' 13243`k6' `k6_2' `athlon' `k8' 13244`amdfam10' `bdver1' `bdver2' `bdver3' 13245`bdver4' `znver1' `znver2' `znver3' 13246`btver1' `btver2' `generic32' `generic64' 13247`.cmov' `.fxsr' `.mmx' 13248`.sse' `.sse2' `.sse3' `.sse4a' 13249`.ssse3' `.sse4.1' `.sse4.2' `.sse4' 13250`.avx' `.vmx' `.smx' `.ept' 13251`.clflush' `.movbe' `.xsave' `.xsaveopt' 13252`.aes' `.pclmul' `.fma' `.fsgsbase' 13253`.rdrnd' `.f16c' `.avx2' `.bmi2' 13254`.lzcnt' `.popcnt' `.invpcid' `.vmfunc' 13255`.hle' 13256`.rtm' `.adx' `.rdseed' `.prfchw' 13257`.smap' `.mpx' `.sha' `.prefetchwt1' 13258`.clflushopt' `.xsavec' `.xsaves' `.se1' 13259`.avx512f' `.avx512cd' `.avx512er' `.avx512pf' 13260`.avx512vl' `.avx512bw' `.avx512dq' `.avx512ifma' 13261`.avx512vbmi' `.avx512_4fmaps'`.avx512_4vnniw' 13262`.avx512_vpopcntdq'`.avx512_vbmi2'`.avx512_vnni' 13263`.avx512_bitalg'`.avx512_bf16' `.avx512_vp2intersect' 13264`.tdx' `.avx_vnni' `.avx512_fp16' 13265`.clwb' `.rdpid' `.ptwrite' `.ibt' 13266`.wbnoinvd' `.pconfig' `.waitpkg' `.cldemote' 13267`.shstk' `.gfni' `.vaes' `.vpclmulqdq' 13268`.movdiri' `.movdir64b' `.enqcmd' `.tsxldtrk' 13269`.amx_int8' `.amx_bf16' `.amx_tile' 13270`.kl' `.widekl' `.uintr' `.hreset' 13271`.3dnow' `.3dnowa' `.sse4a' `.sse5' 13272`.syscall' `.rdtscp' `.svme' 13273`.lwp' `.fma4' `.xop' `.cx16' 13274`.padlock' `.clzero' `.mwaitx' `.rdpru' 13275`.mcommit' `.sev_es' `.snp' `.invlpgb' 13276`.tlbsync' 13277 13278 Apart from the warning, there are only two other effects on `as' 13279operation; Firstly, if you specify a CPU other than `i486', then shift 13280by one instructions such as `sarl $1, %eax' will automatically use a 13281two byte opcode sequence. The larger three byte opcode sequence is 13282used on the 486 (and when no architecture is specified) because it 13283executes faster on the 486. Note that you can explicitly request the 13284two byte opcode by writing `sarl %eax'. Secondly, if you specify 13285`i8086', `i186', or `i286', _and_ `.code16' or `.code16gcc' then byte 13286offset conditional jumps will be promoted when necessary to a two 13287instruction sequence consisting of a conditional jump of the opposite 13288sense around an unconditional jump to the target. 13289 13290 Following the CPU architecture (but not a sub-architecture, which 13291are those starting with a dot), you may specify `jumps' or `nojumps' to 13292control automatic promotion of conditional jumps. `jumps' is the 13293default, and enables jump promotion; All external jumps will be of the 13294long variety, and file-local jumps will be promoted as necessary. 13295(*note i386-Jumps::) `nojumps' leaves external conditional jumps as 13296byte offset jumps, and warns about file-local conditional jumps that 13297`as' promotes. Unconditional jumps are treated as for `jumps'. 13298 13299 For example 13300 13301 .arch i8086,nojumps 13302 13303 13304File: as.info, Node: i386-ISA, Next: i386-Bugs, Prev: i386-Arch, Up: i386-Dependent 13305 133069.16.16 AMD64 ISA vs. Intel64 ISA 13307--------------------------------- 13308 13309There are some discrepancies between AMD64 and Intel64 ISAs. 13310 13311 * For `movsxd' with 16-bit destination register, AMD64 supports 13312 32-bit source operand and Intel64 supports 16-bit source operand. 13313 13314 * For far branches (with explicit memory operand), both ISAs support 13315 32- and 16-bit operand size. Intel64 additionally supports 64-bit 13316 operand size, encoded as `ljmpq' and `lcallq' in AT&T syntax and 13317 with an explicit `tbyte ptr' operand size specifier in Intel 13318 syntax. 13319 13320 * `lfs', `lgs', and `lss' similarly allow for 16- and 32-bit operand 13321 size (32- and 48-bit memory operand) in both ISAs, while Intel64 13322 additionally supports 64-bit operand sise (80-bit memory operands). 13323 13324 13325 13326File: as.info, Node: i386-Bugs, Next: i386-Notes, Prev: i386-ISA, Up: i386-Dependent 13327 133289.16.17 AT&T Syntax bugs 13329------------------------ 13330 13331The UnixWare assembler, and probably other AT&T derived ix86 Unix 13332assemblers, generate floating point instructions with reversed source 13333and destination registers in certain cases. Unfortunately, gcc and 13334possibly many other programs use this reversed syntax, so we're stuck 13335with it. 13336 13337 For example 13338 13339 fsub %st,%st(3) 13340 results in `%st(3)' being updated to `%st - %st(3)' rather than the 13341expected `%st(3) - %st'. This happens with all the non-commutative 13342arithmetic floating point operations with two register operands where 13343the source register is `%st' and the destination register is `%st(i)'. 13344 13345 13346File: as.info, Node: i386-Notes, Prev: i386-Bugs, Up: i386-Dependent 13347 133489.16.18 Notes 13349------------- 13350 13351There is some trickery concerning the `mul' and `imul' instructions 13352that deserves mention. The 16-, 32-, 64- and 128-bit expanding 13353multiplies (base opcode `0xf6'; extension 4 for `mul' and 5 for `imul') 13354can be output only in the one operand form. Thus, `imul %ebx, %eax' 13355does _not_ select the expanding multiply; the expanding multiply would 13356clobber the `%edx' register, and this would confuse `gcc' output. Use 13357`imul %ebx' to get the 64-bit product in `%edx:%eax'. 13358 13359 We have added a two operand form of `imul' when the first operand is 13360an immediate mode expression and the second operand is a register. 13361This is just a shorthand, so that, multiplying `%eax' by 69, for 13362example, can be done with `imul $69, %eax' rather than `imul $69, %eax, 13363%eax'. 13364 13365 13366File: as.info, Node: IA-64-Dependent, Next: IP2K-Dependent, Prev: i386-Dependent, Up: Machine Dependencies 13367 133689.17 IA-64 Dependent Features 13369============================= 13370 13371* Menu: 13372 13373* IA-64 Options:: Options 13374* IA-64 Syntax:: Syntax 13375* IA-64 Opcodes:: Opcodes 13376 13377 13378File: as.info, Node: IA-64 Options, Next: IA-64 Syntax, Up: IA-64-Dependent 13379 133809.17.1 Options 13381-------------- 13382 13383`-mconstant-gp' 13384 This option instructs the assembler to mark the resulting object 13385 file as using the "constant GP" model. With this model, it is 13386 assumed that the entire program uses a single global pointer (GP) 13387 value. Note that this option does not in any fashion affect the 13388 machine code emitted by the assembler. All it does is turn on the 13389 EF_IA_64_CONS_GP flag in the ELF file header. 13390 13391`-mauto-pic' 13392 This option instructs the assembler to mark the resulting object 13393 file as using the "constant GP without function descriptor" data 13394 model. This model is like the "constant GP" model, except that it 13395 additionally does away with function descriptors. What this means 13396 is that the address of a function refers directly to the 13397 function's code entry-point. Normally, such an address would 13398 refer to a function descriptor, which contains both the code 13399 entry-point and the GP-value needed by the function. Note that 13400 this option does not in any fashion affect the machine code 13401 emitted by the assembler. All it does is turn on the 13402 EF_IA_64_NOFUNCDESC_CONS_GP flag in the ELF file header. 13403 13404`-milp32' 13405`-milp64' 13406`-mlp64' 13407`-mp64' 13408 These options select the data model. The assembler defaults to 13409 `-mlp64' (LP64 data model). 13410 13411`-mle' 13412`-mbe' 13413 These options select the byte order. The `-mle' option selects 13414 little-endian byte order (default) and `-mbe' selects big-endian 13415 byte order. Note that IA-64 machine code always uses 13416 little-endian byte order. 13417 13418`-mtune=itanium1' 13419`-mtune=itanium2' 13420 Tune for a particular IA-64 CPU, ITANIUM1 or ITANIUM2. The default 13421 is ITANIUM2. 13422 13423`-munwind-check=warning' 13424`-munwind-check=error' 13425 These options control what the assembler will do when performing 13426 consistency checks on unwind directives. `-munwind-check=warning' 13427 will make the assembler issue a warning when an unwind directive 13428 check fails. This is the default. `-munwind-check=error' will 13429 make the assembler issue an error when an unwind directive check 13430 fails. 13431 13432`-mhint.b=ok' 13433`-mhint.b=warning' 13434`-mhint.b=error' 13435 These options control what the assembler will do when the `hint.b' 13436 instruction is used. `-mhint.b=ok' will make the assembler accept 13437 `hint.b'. `-mint.b=warning' will make the assembler issue a 13438 warning when `hint.b' is used. `-mhint.b=error' will make the 13439 assembler treat `hint.b' as an error, which is the default. 13440 13441`-x' 13442`-xexplicit' 13443 These options turn on dependency violation checking. 13444 13445`-xauto' 13446 This option instructs the assembler to automatically insert stop 13447 bits where necessary to remove dependency violations. This is the 13448 default mode. 13449 13450`-xnone' 13451 This option turns off dependency violation checking. 13452 13453`-xdebug' 13454 This turns on debug output intended to help tracking down bugs in 13455 the dependency violation checker. 13456 13457`-xdebugn' 13458 This is a shortcut for -xnone -xdebug. 13459 13460`-xdebugx' 13461 This is a shortcut for -xexplicit -xdebug. 13462 13463 13464 13465File: as.info, Node: IA-64 Syntax, Next: IA-64 Opcodes, Prev: IA-64 Options, Up: IA-64-Dependent 13466 134679.17.2 Syntax 13468------------- 13469 13470The assembler syntax closely follows the IA-64 Assembly Language 13471Reference Guide. 13472 13473* Menu: 13474 13475* IA-64-Chars:: Special Characters 13476* IA-64-Regs:: Register Names 13477* IA-64-Bits:: Bit Names 13478* IA-64-Relocs:: Relocations 13479 13480 13481File: as.info, Node: IA-64-Chars, Next: IA-64-Regs, Up: IA-64 Syntax 13482 134839.17.2.1 Special Characters 13484........................... 13485 13486`//' is the line comment token. 13487 13488 `;' can be used instead of a newline to separate statements. 13489 13490 13491File: as.info, Node: IA-64-Regs, Next: IA-64-Bits, Prev: IA-64-Chars, Up: IA-64 Syntax 13492 134939.17.2.2 Register Names 13494....................... 13495 13496The 128 integer registers are referred to as `rN'. The 128 13497floating-point registers are referred to as `fN'. The 128 application 13498registers are referred to as `arN'. The 128 control registers are 13499referred to as `crN'. The 64 one-bit predicate registers are referred 13500to as `pN'. The 8 branch registers are referred to as `bN'. In 13501addition, the assembler defines a number of aliases: `gp' (`r1'), `sp' 13502(`r12'), `rp' (`b0'), `ret0' (`r8'), `ret1' (`r9'), `ret2' (`r10'), 13503`ret3' (`r9'), `fargN' (`f8+N'), and `fretN' (`f8+N'). 13504 13505 For convenience, the assembler also defines aliases for all named 13506application and control registers. For example, `ar.bsp' refers to the 13507register backing store pointer (`ar17'). Similarly, `cr.eoi' refers to 13508the end-of-interrupt register (`cr67'). 13509 13510 13511File: as.info, Node: IA-64-Bits, Next: IA-64-Relocs, Prev: IA-64-Regs, Up: IA-64 Syntax 13512 135139.17.2.3 IA-64 Processor-Status-Register (PSR) Bit Names 13514........................................................ 13515 13516The assembler defines bit masks for each of the bits in the IA-64 13517processor status register. For example, `psr.ic' corresponds to a 13518value of 0x2000. These masks are primarily intended for use with the 13519`ssm'/`sum' and `rsm'/`rum' instructions, but they can be used anywhere 13520else where an integer constant is expected. 13521 13522 13523File: as.info, Node: IA-64-Relocs, Prev: IA-64-Bits, Up: IA-64 Syntax 13524 135259.17.2.4 Relocations 13526.................... 13527 13528In addition to the standard IA-64 relocations, the following 13529relocations are implemented by `as': 13530 13531`@slotcount(V)' 13532 Convert the address offset V into a slot count. This pseudo 13533 function is available only on VMS. The expression V must be known 13534 at assembly time: it can't reference undefined symbols or symbols 13535 in different sections. 13536 13537 13538File: as.info, Node: IA-64 Opcodes, Prev: IA-64 Syntax, Up: IA-64-Dependent 13539 135409.17.3 Opcodes 13541-------------- 13542 13543For detailed information on the IA-64 machine instruction set, see the 13544IA-64 Architecture Handbook 13545(http://developer.intel.com/design/itanium/arch_spec.htm). 13546 13547 13548File: as.info, Node: IP2K-Dependent, Next: LM32-Dependent, Prev: IA-64-Dependent, Up: Machine Dependencies 13549 135509.18 IP2K Dependent Features 13551============================ 13552 13553* Menu: 13554 13555* IP2K-Opts:: IP2K Options 13556* IP2K-Syntax:: IP2K Syntax 13557 13558 13559File: as.info, Node: IP2K-Opts, Next: IP2K-Syntax, Up: IP2K-Dependent 13560 135619.18.1 IP2K Options 13562------------------- 13563 13564The Ubicom IP2K version of `as' has a few machine dependent options: 13565 13566`-mip2022ext' 13567 `as' can assemble the extended IP2022 instructions, but it will 13568 only do so if this is specifically allowed via this command line 13569 option. 13570 13571`-mip2022' 13572 This option restores the assembler's default behaviour of not 13573 permitting the extended IP2022 instructions to be assembled. 13574 13575 13576 13577File: as.info, Node: IP2K-Syntax, Prev: IP2K-Opts, Up: IP2K-Dependent 13578 135799.18.2 IP2K Syntax 13580------------------ 13581 13582* Menu: 13583 13584* IP2K-Chars:: Special Characters 13585 13586 13587File: as.info, Node: IP2K-Chars, Up: IP2K-Syntax 13588 135899.18.2.1 Special Characters 13590........................... 13591 13592The presence of a `;' on a line indicates the start of a comment that 13593extends to the end of the current line. 13594 13595 If a `#' appears as the first character of a line, the whole line is 13596treated as a comment, but in this case the line can also be a logical 13597line number directive (*note Comments::) or a preprocessor control 13598command (*note Preprocessing::). 13599 13600 The IP2K assembler does not currently support a line separator 13601character. 13602 13603 13604File: as.info, Node: LM32-Dependent, Next: M32C-Dependent, Prev: IP2K-Dependent, Up: Machine Dependencies 13605 136069.19 LM32 Dependent Features 13607============================ 13608 13609* Menu: 13610 13611* LM32 Options:: Options 13612* LM32 Syntax:: Syntax 13613* LM32 Opcodes:: Opcodes 13614 13615 13616File: as.info, Node: LM32 Options, Next: LM32 Syntax, Up: LM32-Dependent 13617 136189.19.1 Options 13619-------------- 13620 13621`-mmultiply-enabled' 13622 Enable multiply instructions. 13623 13624`-mdivide-enabled' 13625 Enable divide instructions. 13626 13627`-mbarrel-shift-enabled' 13628 Enable barrel-shift instructions. 13629 13630`-msign-extend-enabled' 13631 Enable sign extend instructions. 13632 13633`-muser-enabled' 13634 Enable user defined instructions. 13635 13636`-micache-enabled' 13637 Enable instruction cache related CSRs. 13638 13639`-mdcache-enabled' 13640 Enable data cache related CSRs. 13641 13642`-mbreak-enabled' 13643 Enable break instructions. 13644 13645`-mall-enabled' 13646 Enable all instructions and CSRs. 13647 13648 13649 13650File: as.info, Node: LM32 Syntax, Next: LM32 Opcodes, Prev: LM32 Options, Up: LM32-Dependent 13651 136529.19.2 Syntax 13653------------- 13654 13655* Menu: 13656 13657* LM32-Regs:: Register Names 13658* LM32-Modifiers:: Relocatable Expression Modifiers 13659* LM32-Chars:: Special Characters 13660 13661 13662File: as.info, Node: LM32-Regs, Next: LM32-Modifiers, Up: LM32 Syntax 13663 136649.19.2.1 Register Names 13665....................... 13666 13667LM32 has 32 x 32-bit general purpose registers `r0', `r1', ... `r31'. 13668 13669 The following aliases are defined: `gp' - `r26', `fp' - `r27', `sp' 13670- `r28', `ra' - `r29', `ea' - `r30', `ba' - `r31'. 13671 13672 LM32 has the following Control and Status Registers (CSRs). 13673 13674`IE' 13675 Interrupt enable. 13676 13677`IM' 13678 Interrupt mask. 13679 13680`IP' 13681 Interrupt pending. 13682 13683`ICC' 13684 Instruction cache control. 13685 13686`DCC' 13687 Data cache control. 13688 13689`CC' 13690 Cycle counter. 13691 13692`CFG' 13693 Configuration. 13694 13695`EBA' 13696 Exception base address. 13697 13698`DC' 13699 Debug control. 13700 13701`DEBA' 13702 Debug exception base address. 13703 13704`JTX' 13705 JTAG transmit. 13706 13707`JRX' 13708 JTAG receive. 13709 13710`BP0' 13711 Breakpoint 0. 13712 13713`BP1' 13714 Breakpoint 1. 13715 13716`BP2' 13717 Breakpoint 2. 13718 13719`BP3' 13720 Breakpoint 3. 13721 13722`WP0' 13723 Watchpoint 0. 13724 13725`WP1' 13726 Watchpoint 1. 13727 13728`WP2' 13729 Watchpoint 2. 13730 13731`WP3' 13732 Watchpoint 3. 13733 13734 13735File: as.info, Node: LM32-Modifiers, Next: LM32-Chars, Prev: LM32-Regs, Up: LM32 Syntax 13736 137379.19.2.2 Relocatable Expression Modifiers 13738......................................... 13739 13740The assembler supports several modifiers when using relocatable 13741addresses in LM32 instruction operands. The general syntax is the 13742following: 13743 13744 modifier(relocatable-expression) 13745 13746`lo' 13747 This modifier allows you to use bits 0 through 15 of an address 13748 expression as 16 bit relocatable expression. 13749 13750`hi' 13751 This modifier allows you to use bits 16 through 23 of an address 13752 expression as 16 bit relocatable expression. 13753 13754 For example 13755 13756 ori r4, r4, lo(sym+10) 13757 orhi r4, r4, hi(sym+10) 13758 13759`gp' 13760 This modified creates a 16-bit relocatable expression that is the 13761 offset of the symbol from the global pointer. 13762 13763 mva r4, gp(sym) 13764 13765`got' 13766 This modifier places a symbol in the GOT and creates a 16-bit 13767 relocatable expression that is the offset into the GOT of this 13768 symbol. 13769 13770 lw r4, (gp+got(sym)) 13771 13772`gotofflo16' 13773 This modifier allows you to use the bits 0 through 15 of an 13774 address which is an offset from the GOT. 13775 13776`gotoffhi16' 13777 This modifier allows you to use the bits 16 through 31 of an 13778 address which is an offset from the GOT. 13779 13780 orhi r4, r4, gotoffhi16(lsym) 13781 addi r4, r4, gotofflo16(lsym) 13782 13783 13784 13785File: as.info, Node: LM32-Chars, Prev: LM32-Modifiers, Up: LM32 Syntax 13786 137879.19.2.3 Special Characters 13788........................... 13789 13790The presence of a `#' on a line indicates the start of a comment that 13791extends to the end of the current line. Note that if a line starts 13792with a `#' character then it can also be a logical line number 13793directive (*note Comments::) or a preprocessor control command (*note 13794Preprocessing::). 13795 13796 A semicolon (`;') can be used to separate multiple statements on the 13797same line. 13798 13799 13800File: as.info, Node: LM32 Opcodes, Prev: LM32 Syntax, Up: LM32-Dependent 13801 138029.19.3 Opcodes 13803-------------- 13804 13805For detailed information on the LM32 machine instruction set, see 13806`http://www.latticesemi.com/products/intellectualproperty/ipcores/mico32/'. 13807 13808 `as' implements all the standard LM32 opcodes. 13809 13810 13811File: as.info, Node: M32C-Dependent, Next: M32R-Dependent, Prev: LM32-Dependent, Up: Machine Dependencies 13812 138139.20 M32C Dependent Features 13814============================ 13815 13816 `as' can assemble code for several different members of the Renesas 13817M32C family. Normally the default is to assemble code for the M16C 13818microprocessor. The `-m32c' option may be used to change the default 13819to the M32C microprocessor. 13820 13821* Menu: 13822 13823* M32C-Opts:: M32C Options 13824* M32C-Syntax:: M32C Syntax 13825 13826 13827File: as.info, Node: M32C-Opts, Next: M32C-Syntax, Up: M32C-Dependent 13828 138299.20.1 M32C Options 13830------------------- 13831 13832The Renesas M32C version of `as' has these machine-dependent options: 13833 13834`-m32c' 13835 Assemble M32C instructions. 13836 13837`-m16c' 13838 Assemble M16C instructions (default). 13839 13840`-relax' 13841 Enable support for link-time relaxations. 13842 13843`-h-tick-hex' 13844 Support H'00 style hex constants in addition to 0x00 style. 13845 13846 13847 13848File: as.info, Node: M32C-Syntax, Prev: M32C-Opts, Up: M32C-Dependent 13849 138509.20.2 M32C Syntax 13851------------------ 13852 13853* Menu: 13854 13855* M32C-Modifiers:: Symbolic Operand Modifiers 13856* M32C-Chars:: Special Characters 13857 13858 13859File: as.info, Node: M32C-Modifiers, Next: M32C-Chars, Up: M32C-Syntax 13860 138619.20.2.1 Symbolic Operand Modifiers 13862................................... 13863 13864The assembler supports several modifiers when using symbol addresses in 13865M32C instruction operands. The general syntax is the following: 13866 13867 %modifier(symbol) 13868 13869`%dsp8' 13870`%dsp16' 13871 These modifiers override the assembler's assumptions about how big 13872 a symbol's address is. Normally, when it sees an operand like 13873 `sym[a0]' it assumes `sym' may require the widest displacement 13874 field (16 bits for `-m16c', 24 bits for `-m32c'). These modifiers 13875 tell it to assume the address will fit in an 8 or 16 bit 13876 (respectively) unsigned displacement. Note that, of course, if it 13877 doesn't actually fit you will get linker errors. Example: 13878 13879 mov.w %dsp8(sym)[a0],r1 13880 mov.b #0,%dsp8(sym)[a0] 13881 13882`%hi8' 13883 This modifier allows you to load bits 16 through 23 of a 24 bit 13884 address into an 8 bit register. This is useful with, for example, 13885 the M16C `smovf' instruction, which expects a 20 bit address in 13886 `r1h' and `a0'. Example: 13887 13888 mov.b #%hi8(sym),r1h 13889 mov.w #%lo16(sym),a0 13890 smovf.b 13891 13892`%lo16' 13893 Likewise, this modifier allows you to load bits 0 through 15 of a 13894 24 bit address into a 16 bit register. 13895 13896`%hi16' 13897 This modifier allows you to load bits 16 through 31 of a 32 bit 13898 address into a 16 bit register. While the M32C family only has 24 13899 bits of address space, it does support addresses in pairs of 16 bit 13900 registers (like `a1a0' for the `lde' instruction). This modifier 13901 is for loading the upper half in such cases. Example: 13902 13903 mov.w #%hi16(sym),a1 13904 mov.w #%lo16(sym),a0 13905 ... 13906 lde.w [a1a0],r1 13907 13908 13909 13910File: as.info, Node: M32C-Chars, Prev: M32C-Modifiers, Up: M32C-Syntax 13911 139129.20.2.2 Special Characters 13913........................... 13914 13915The presence of a `;' character on a line indicates the start of a 13916comment that extends to the end of that line. 13917 13918 If a `#' appears as the first character of a line, the whole line is 13919treated as a comment, but in this case the line can also be a logical 13920line number directive (*note Comments::) or a preprocessor control 13921command (*note Preprocessing::). 13922 13923 The `|' character can be used to separate statements on the same 13924line. 13925 13926 13927File: as.info, Node: M32R-Dependent, Next: M68K-Dependent, Prev: M32C-Dependent, Up: Machine Dependencies 13928 139299.21 M32R Dependent Features 13930============================ 13931 13932* Menu: 13933 13934* M32R-Opts:: M32R Options 13935* M32R-Directives:: M32R Directives 13936* M32R-Warnings:: M32R Warnings 13937 13938 13939File: as.info, Node: M32R-Opts, Next: M32R-Directives, Up: M32R-Dependent 13940 139419.21.1 M32R Options 13942------------------- 13943 13944The Renesas M32R version of `as' has a few machine dependent options: 13945 13946`-m32rx' 13947 `as' can assemble code for several different members of the 13948 Renesas M32R family. Normally the default is to assemble code for 13949 the M32R microprocessor. This option may be used to change the 13950 default to the M32RX microprocessor, which adds some more 13951 instructions to the basic M32R instruction set, and some 13952 additional parameters to some of the original instructions. 13953 13954`-m32r2' 13955 This option changes the target processor to the M32R2 13956 microprocessor. 13957 13958`-m32r' 13959 This option can be used to restore the assembler's default 13960 behaviour of assembling for the M32R microprocessor. This can be 13961 useful if the default has been changed by a previous command-line 13962 option. 13963 13964`-little' 13965 This option tells the assembler to produce little-endian code and 13966 data. The default is dependent upon how the toolchain was 13967 configured. 13968 13969`-EL' 13970 This is a synonym for _-little_. 13971 13972`-big' 13973 This option tells the assembler to produce big-endian code and 13974 data. 13975 13976`-EB' 13977 This is a synonym for _-big_. 13978 13979`-KPIC' 13980 This option specifies that the output of the assembler should be 13981 marked as position-independent code (PIC). 13982 13983`-parallel' 13984 This option tells the assembler to attempts to combine two 13985 sequential instructions into a single, parallel instruction, where 13986 it is legal to do so. 13987 13988`-no-parallel' 13989 This option disables a previously enabled _-parallel_ option. 13990 13991`-no-bitinst' 13992 This option disables the support for the extended bit-field 13993 instructions provided by the M32R2. If this support needs to be 13994 re-enabled the _-bitinst_ switch can be used to restore it. 13995 13996`-O' 13997 This option tells the assembler to attempt to optimize the 13998 instructions that it produces. This includes filling delay slots 13999 and converting sequential instructions into parallel ones. This 14000 option implies _-parallel_. 14001 14002`-warn-explicit-parallel-conflicts' 14003 Instructs `as' to produce warning messages when questionable 14004 parallel instructions are encountered. This option is enabled by 14005 default, but `gcc' disables it when it invokes `as' directly. 14006 Questionable instructions are those whose behaviour would be 14007 different if they were executed sequentially. For example the 14008 code fragment `mv r1, r2 || mv r3, r1' produces a different result 14009 from `mv r1, r2 \n mv r3, r1' since the former moves r1 into r3 14010 and then r2 into r1, whereas the later moves r2 into r1 and r3. 14011 14012`-Wp' 14013 This is a shorter synonym for the 14014 _-warn-explicit-parallel-conflicts_ option. 14015 14016`-no-warn-explicit-parallel-conflicts' 14017 Instructs `as' not to produce warning messages when questionable 14018 parallel instructions are encountered. 14019 14020`-Wnp' 14021 This is a shorter synonym for the 14022 _-no-warn-explicit-parallel-conflicts_ option. 14023 14024`-ignore-parallel-conflicts' 14025 This option tells the assembler's to stop checking parallel 14026 instructions for constraint violations. This ability is provided 14027 for hardware vendors testing chip designs and should not be used 14028 under normal circumstances. 14029 14030`-no-ignore-parallel-conflicts' 14031 This option restores the assembler's default behaviour of checking 14032 parallel instructions to detect constraint violations. 14033 14034`-Ip' 14035 This is a shorter synonym for the _-ignore-parallel-conflicts_ 14036 option. 14037 14038`-nIp' 14039 This is a shorter synonym for the _-no-ignore-parallel-conflicts_ 14040 option. 14041 14042`-warn-unmatched-high' 14043 This option tells the assembler to produce a warning message if a 14044 `.high' pseudo op is encountered without a matching `.low' pseudo 14045 op. The presence of such an unmatched pseudo op usually indicates 14046 a programming error. 14047 14048`-no-warn-unmatched-high' 14049 Disables a previously enabled _-warn-unmatched-high_ option. 14050 14051`-Wuh' 14052 This is a shorter synonym for the _-warn-unmatched-high_ option. 14053 14054`-Wnuh' 14055 This is a shorter synonym for the _-no-warn-unmatched-high_ option. 14056 14057 14058 14059File: as.info, Node: M32R-Directives, Next: M32R-Warnings, Prev: M32R-Opts, Up: M32R-Dependent 14060 140619.21.2 M32R Directives 14062---------------------- 14063 14064The Renesas M32R version of `as' has a few architecture specific 14065directives: 14066 14067`low EXPRESSION' 14068 The `low' directive computes the value of its expression and 14069 places the lower 16-bits of the result into the immediate-field of 14070 the instruction. For example: 14071 14072 or3 r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678 14073 add3, r0, r0, #low(fred) ; compute r0 = r0 + low 16-bits of address of fred 14074 14075`high EXPRESSION' 14076 The `high' directive computes the value of its expression and 14077 places the upper 16-bits of the result into the immediate-field of 14078 the instruction. For example: 14079 14080 seth r0, #high(0x12345678) ; compute r0 = 0x12340000 14081 seth, r0, #high(fred) ; compute r0 = upper 16-bits of address of fred 14082 14083`shigh EXPRESSION' 14084 The `shigh' directive is very similar to the `high' directive. It 14085 also computes the value of its expression and places the upper 14086 16-bits of the result into the immediate-field of the instruction. 14087 The difference is that `shigh' also checks to see if the lower 14088 16-bits could be interpreted as a signed number, and if so it 14089 assumes that a borrow will occur from the upper-16 bits. To 14090 compensate for this the `shigh' directive pre-biases the upper 16 14091 bit value by adding one to it. For example: 14092 14093 For example: 14094 14095 seth r0, #shigh(0x12345678) ; compute r0 = 0x12340000 14096 seth r0, #shigh(0x00008000) ; compute r0 = 0x00010000 14097 14098 In the second example the lower 16-bits are 0x8000. If these are 14099 treated as a signed value and sign extended to 32-bits then the 14100 value becomes 0xffff8000. If this value is then added to 14101 0x00010000 then the result is 0x00008000. 14102 14103 This behaviour is to allow for the different semantics of the 14104 `or3' and `add3' instructions. The `or3' instruction treats its 14105 16-bit immediate argument as unsigned whereas the `add3' treats 14106 its 16-bit immediate as a signed value. So for example: 14107 14108 seth r0, #shigh(0x00008000) 14109 add3 r0, r0, #low(0x00008000) 14110 14111 Produces the correct result in r0, whereas: 14112 14113 seth r0, #shigh(0x00008000) 14114 or3 r0, r0, #low(0x00008000) 14115 14116 Stores 0xffff8000 into r0. 14117 14118 Note - the `shigh' directive does not know where in the assembly 14119 source code the lower 16-bits of the value are going set, so it 14120 cannot check to make sure that an `or3' instruction is being used 14121 rather than an `add3' instruction. It is up to the programmer to 14122 make sure that correct directives are used. 14123 14124`.m32r' 14125 The directive performs a similar thing as the _-m32r_ command line 14126 option. It tells the assembler to only accept M32R instructions 14127 from now on. An instructions from later M32R architectures are 14128 refused. 14129 14130`.m32rx' 14131 The directive performs a similar thing as the _-m32rx_ command 14132 line option. It tells the assembler to start accepting the extra 14133 instructions in the M32RX ISA as well as the ordinary M32R ISA. 14134 14135`.m32r2' 14136 The directive performs a similar thing as the _-m32r2_ command 14137 line option. It tells the assembler to start accepting the extra 14138 instructions in the M32R2 ISA as well as the ordinary M32R ISA. 14139 14140`.little' 14141 The directive performs a similar thing as the _-little_ command 14142 line option. It tells the assembler to start producing 14143 little-endian code and data. This option should be used with care 14144 as producing mixed-endian binary files is fraught with danger. 14145 14146`.big' 14147 The directive performs a similar thing as the _-big_ command line 14148 option. It tells the assembler to start producing big-endian code 14149 and data. This option should be used with care as producing 14150 mixed-endian binary files is fraught with danger. 14151 14152 14153 14154File: as.info, Node: M32R-Warnings, Prev: M32R-Directives, Up: M32R-Dependent 14155 141569.21.3 M32R Warnings 14157-------------------- 14158 14159There are several warning and error messages that can be produced by 14160`as' which are specific to the M32R: 14161 14162`output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?' 14163 This message is only produced if warnings for explicit parallel 14164 conflicts have been enabled. It indicates that the assembler has 14165 encountered a parallel instruction in which the destination 14166 register of the left hand instruction is used as an input register 14167 in the right hand instruction. For example in this code fragment 14168 `mv r1, r2 || neg r3, r1' register r1 is the destination of the 14169 move instruction and the input to the neg instruction. 14170 14171`output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?' 14172 This message is only produced if warnings for explicit parallel 14173 conflicts have been enabled. It indicates that the assembler has 14174 encountered a parallel instruction in which the destination 14175 register of the right hand instruction is used as an input 14176 register in the left hand instruction. For example in this code 14177 fragment `mv r1, r2 || neg r2, r3' register r2 is the destination 14178 of the neg instruction and the input to the move instruction. 14179 14180`instruction `...' is for the M32RX only' 14181 This message is produced when the assembler encounters an 14182 instruction which is only supported by the M32Rx processor, and 14183 the `-m32rx' command-line flag has not been specified to allow 14184 assembly of such instructions. 14185 14186`unknown instruction `...'' 14187 This message is produced when the assembler encounters an 14188 instruction which it does not recognize. 14189 14190`only the NOP instruction can be issued in parallel on the m32r' 14191 This message is produced when the assembler encounters a parallel 14192 instruction which does not involve a NOP instruction and the 14193 `-m32rx' command-line flag has not been specified. Only the M32Rx 14194 processor is able to execute two instructions in parallel. 14195 14196`instruction `...' cannot be executed in parallel.' 14197 This message is produced when the assembler encounters a parallel 14198 instruction which is made up of one or two instructions which 14199 cannot be executed in parallel. 14200 14201`Instructions share the same execution pipeline' 14202 This message is produced when the assembler encounters a parallel 14203 instruction whose components both use the same execution pipeline. 14204 14205`Instructions write to the same destination register.' 14206 This message is produced when the assembler encounters a parallel 14207 instruction where both components attempt to modify the same 14208 register. For example these code fragments will produce this 14209 message: `mv r1, r2 || neg r1, r3' `jl r0 || mv r14, r1' `st r2, 14210 @-r1 || mv r1, r3' `mv r1, r2 || ld r0, @r1+' `cmp r1, r2 || addx 14211 r3, r4' (Both write to the condition bit) 14212 14213 14214 14215File: as.info, Node: M68K-Dependent, Next: M68HC11-Dependent, Prev: M32R-Dependent, Up: Machine Dependencies 14216 142179.22 M680x0 Dependent Features 14218============================== 14219 14220* Menu: 14221 14222* M68K-Opts:: M680x0 Options 14223* M68K-Syntax:: Syntax 14224* M68K-Moto-Syntax:: Motorola Syntax 14225* M68K-Float:: Floating Point 14226* M68K-Directives:: 680x0 Machine Directives 14227* M68K-opcodes:: Opcodes 14228 14229 14230File: as.info, Node: M68K-Opts, Next: M68K-Syntax, Up: M68K-Dependent 14231 142329.22.1 M680x0 Options 14233--------------------- 14234 14235The Motorola 680x0 version of `as' has a few machine dependent options: 14236 14237`-march=ARCHITECTURE' 14238 This option specifies a target architecture. The following 14239 architectures are recognized: `68000', `68010', `68020', `68030', 14240 `68040', `68060', `cpu32', `isaa', `isaaplus', `isab', `isac' and 14241 `cfv4e'. 14242 14243`-mcpu=CPU' 14244 This option specifies a target cpu. When used in conjunction with 14245 the `-march' option, the cpu must be within the specified 14246 architecture. Also, the generic features of the architecture are 14247 used for instruction generation, rather than those of the specific 14248 chip. 14249 14250`-m[no-]68851' 14251`-m[no-]68881' 14252`-m[no-]div' 14253`-m[no-]usp' 14254`-m[no-]float' 14255`-m[no-]mac' 14256`-m[no-]emac' 14257 Enable or disable various architecture specific features. If a 14258 chip or architecture by default supports an option (for instance 14259 `-march=isaaplus' includes the `-mdiv' option), explicitly 14260 disabling the option will override the default. 14261 14262`-l' 14263 You can use the `-l' option to shorten the size of references to 14264 undefined symbols. If you do not use the `-l' option, references 14265 to undefined symbols are wide enough for a full `long' (32 bits). 14266 (Since `as' cannot know where these symbols end up, `as' can only 14267 allocate space for the linker to fill in later. Since `as' does 14268 not know how far away these symbols are, it allocates as much 14269 space as it can.) If you use this option, the references are only 14270 one word wide (16 bits). This may be useful if you want the 14271 object file to be as small as possible, and you know that the 14272 relevant symbols are always less than 17 bits away. 14273 14274`--register-prefix-optional' 14275 For some configurations, especially those where the compiler 14276 normally does not prepend an underscore to the names of user 14277 variables, the assembler requires a `%' before any use of a 14278 register name. This is intended to let the assembler distinguish 14279 between C variables and functions named `a0' through `a7', and so 14280 on. The `%' is always accepted, but is not required for certain 14281 configurations, notably `sun3'. The `--register-prefix-optional' 14282 option may be used to permit omitting the `%' even for 14283 configurations for which it is normally required. If this is 14284 done, it will generally be impossible to refer to C variables and 14285 functions with the same names as register names. 14286 14287`--bitwise-or' 14288 Normally the character `|' is treated as a comment character, which 14289 means that it can not be used in expressions. The `--bitwise-or' 14290 option turns `|' into a normal character. In this mode, you must 14291 either use C style comments, or start comments with a `#' character 14292 at the beginning of a line. 14293 14294`--base-size-default-16 --base-size-default-32' 14295 If you use an addressing mode with a base register without 14296 specifying the size, `as' will normally use the full 32 bit value. 14297 For example, the addressing mode `%a0@(%d0)' is equivalent to 14298 `%a0@(%d0:l)'. You may use the `--base-size-default-16' option to 14299 tell `as' to default to using the 16 bit value. In this case, 14300 `%a0@(%d0)' is equivalent to `%a0@(%d0:w)'. You may use the 14301 `--base-size-default-32' option to restore the default behaviour. 14302 14303`--disp-size-default-16 --disp-size-default-32' 14304 If you use an addressing mode with a displacement, and the value 14305 of the displacement is not known, `as' will normally assume that 14306 the value is 32 bits. For example, if the symbol `disp' has not 14307 been defined, `as' will assemble the addressing mode 14308 `%a0@(disp,%d0)' as though `disp' is a 32 bit value. You may use 14309 the `--disp-size-default-16' option to tell `as' to instead assume 14310 that the displacement is 16 bits. In this case, `as' will 14311 assemble `%a0@(disp,%d0)' as though `disp' is a 16 bit value. You 14312 may use the `--disp-size-default-32' option to restore the default 14313 behaviour. 14314 14315`--pcrel' 14316 Always keep branches PC-relative. In the M680x0 architecture all 14317 branches are defined as PC-relative. However, on some processors 14318 they are limited to word displacements maximum. When `as' needs a 14319 long branch that is not available, it normally emits an absolute 14320 jump instead. This option disables this substitution. When this 14321 option is given and no long branches are available, only word 14322 branches will be emitted. An error message will be generated if a 14323 word branch cannot reach its target. This option has no effect on 14324 68020 and other processors that have long branches. *note Branch 14325 Improvement: M68K-Branch. 14326 14327`-m68000' 14328 `as' can assemble code for several different members of the 14329 Motorola 680x0 family. The default depends upon how `as' was 14330 configured when it was built; normally, the default is to assemble 14331 code for the 68020 microprocessor. The following options may be 14332 used to change the default. These options control which 14333 instructions and addressing modes are permitted. The members of 14334 the 680x0 family are very similar. For detailed information about 14335 the differences, see the Motorola manuals. 14336 14337 `-m68000' 14338 `-m68ec000' 14339 `-m68hc000' 14340 `-m68hc001' 14341 `-m68008' 14342 `-m68302' 14343 `-m68306' 14344 `-m68307' 14345 `-m68322' 14346 `-m68356' 14347 Assemble for the 68000. `-m68008', `-m68302', and so on are 14348 synonyms for `-m68000', since the chips are the same from the 14349 point of view of the assembler. 14350 14351 `-m68010' 14352 Assemble for the 68010. 14353 14354 `-m68020' 14355 `-m68ec020' 14356 Assemble for the 68020. This is normally the default. 14357 14358 `-m68030' 14359 `-m68ec030' 14360 Assemble for the 68030. 14361 14362 `-m68040' 14363 `-m68ec040' 14364 Assemble for the 68040. 14365 14366 `-m68060' 14367 `-m68ec060' 14368 Assemble for the 68060. 14369 14370 `-mcpu32' 14371 `-m68330' 14372 `-m68331' 14373 `-m68332' 14374 `-m68333' 14375 `-m68334' 14376 `-m68336' 14377 `-m68340' 14378 `-m68341' 14379 `-m68349' 14380 `-m68360' 14381 Assemble for the CPU32 family of chips. 14382 14383 `-m5200' 14384 `-m5202' 14385 `-m5204' 14386 `-m5206' 14387 `-m5206e' 14388 `-m521x' 14389 `-m5249' 14390 `-m528x' 14391 `-m5307' 14392 `-m5407' 14393 `-m547x' 14394 `-m548x' 14395 `-mcfv4' 14396 `-mcfv4e' 14397 Assemble for the ColdFire family of chips. 14398 14399 `-m68881' 14400 `-m68882' 14401 Assemble 68881 floating point instructions. This is the 14402 default for the 68020, 68030, and the CPU32. The 68040 and 14403 68060 always support floating point instructions. 14404 14405 `-mno-68881' 14406 Do not assemble 68881 floating point instructions. This is 14407 the default for 68000 and the 68010. The 68040 and 68060 14408 always support floating point instructions, even if this 14409 option is used. 14410 14411 `-m68851' 14412 Assemble 68851 MMU instructions. This is the default for the 14413 68020, 68030, and 68060. The 68040 accepts a somewhat 14414 different set of MMU instructions; `-m68851' and `-m68040' 14415 should not be used together. 14416 14417 `-mno-68851' 14418 Do not assemble 68851 MMU instructions. This is the default 14419 for the 68000, 68010, and the CPU32. The 68040 accepts a 14420 somewhat different set of MMU instructions. 14421 14422 14423File: as.info, Node: M68K-Syntax, Next: M68K-Moto-Syntax, Prev: M68K-Opts, Up: M68K-Dependent 14424 144259.22.2 Syntax 14426------------- 14427 14428This syntax for the Motorola 680x0 was developed at MIT. 14429 14430 The 680x0 version of `as' uses instructions names and syntax 14431compatible with the Sun assembler. Intervening periods are ignored; 14432for example, `movl' is equivalent to `mov.l'. 14433 14434 In the following table APC stands for any of the address registers 14435(`%a0' through `%a7'), the program counter (`%pc'), the zero-address 14436relative to the program counter (`%zpc'), a suppressed address register 14437(`%za0' through `%za7'), or it may be omitted entirely. The use of 14438SIZE means one of `w' or `l', and it may be omitted, along with the 14439leading colon, unless a scale is also specified. The use of SCALE 14440means one of `1', `2', `4', or `8', and it may always be omitted along 14441with the leading colon. 14442 14443 The following addressing modes are understood: 14444"Immediate" 14445 `#NUMBER' 14446 14447"Data Register" 14448 `%d0' through `%d7' 14449 14450"Address Register" 14451 `%a0' through `%a7' 14452 `%a7' is also known as `%sp', i.e., the Stack Pointer. `%a6' is 14453 also known as `%fp', the Frame Pointer. 14454 14455"Address Register Indirect" 14456 `%a0@' through `%a7@' 14457 14458"Address Register Postincrement" 14459 `%a0@+' through `%a7@+' 14460 14461"Address Register Predecrement" 14462 `%a0@-' through `%a7@-' 14463 14464"Indirect Plus Offset" 14465 `APC@(NUMBER)' 14466 14467"Index" 14468 `APC@(NUMBER,REGISTER:SIZE:SCALE)' 14469 14470 The NUMBER may be omitted. 14471 14472"Postindex" 14473 `APC@(NUMBER)@(ONUMBER,REGISTER:SIZE:SCALE)' 14474 14475 The ONUMBER or the REGISTER, but not both, may be omitted. 14476 14477"Preindex" 14478 `APC@(NUMBER,REGISTER:SIZE:SCALE)@(ONUMBER)' 14479 14480 The NUMBER may be omitted. Omitting the REGISTER produces the 14481 Postindex addressing mode. 14482 14483"Absolute" 14484 `SYMBOL', or `DIGITS', optionally followed by `:b', `:w', or `:l'. 14485 14486 14487File: as.info, Node: M68K-Moto-Syntax, Next: M68K-Float, Prev: M68K-Syntax, Up: M68K-Dependent 14488 144899.22.3 Motorola Syntax 14490---------------------- 14491 14492The standard Motorola syntax for this chip differs from the syntax 14493already discussed (*note Syntax: M68K-Syntax.). `as' can accept 14494Motorola syntax for operands, even if MIT syntax is used for other 14495operands in the same instruction. The two kinds of syntax are fully 14496compatible. 14497 14498 In the following table APC stands for any of the address registers 14499(`%a0' through `%a7'), the program counter (`%pc'), the zero-address 14500relative to the program counter (`%zpc'), or a suppressed address 14501register (`%za0' through `%za7'). The use of SIZE means one of `w' or 14502`l', and it may always be omitted along with the leading dot. The use 14503of SCALE means one of `1', `2', `4', or `8', and it may always be 14504omitted along with the leading asterisk. 14505 14506 The following additional addressing modes are understood: 14507 14508"Address Register Indirect" 14509 `(%a0)' through `(%a7)' 14510 `%a7' is also known as `%sp', i.e., the Stack Pointer. `%a6' is 14511 also known as `%fp', the Frame Pointer. 14512 14513"Address Register Postincrement" 14514 `(%a0)+' through `(%a7)+' 14515 14516"Address Register Predecrement" 14517 `-(%a0)' through `-(%a7)' 14518 14519"Indirect Plus Offset" 14520 `NUMBER(%A0)' through `NUMBER(%A7)', or `NUMBER(%PC)'. 14521 14522 The NUMBER may also appear within the parentheses, as in 14523 `(NUMBER,%A0)'. When used with the PC, the NUMBER may be omitted 14524 (with an address register, omitting the NUMBER produces Address 14525 Register Indirect mode). 14526 14527"Index" 14528 `NUMBER(APC,REGISTER.SIZE*SCALE)' 14529 14530 The NUMBER may be omitted, or it may appear within the 14531 parentheses. The APC may be omitted. The REGISTER and the APC 14532 may appear in either order. If both APC and REGISTER are address 14533 registers, and the SIZE and SCALE are omitted, then the first 14534 register is taken as the base register, and the second as the 14535 index register. 14536 14537"Postindex" 14538 `([NUMBER,APC],REGISTER.SIZE*SCALE,ONUMBER)' 14539 14540 The ONUMBER, or the REGISTER, or both, may be omitted. Either the 14541 NUMBER or the APC may be omitted, but not both. 14542 14543"Preindex" 14544 `([NUMBER,APC,REGISTER.SIZE*SCALE],ONUMBER)' 14545 14546 The NUMBER, or the APC, or the REGISTER, or any two of them, may 14547 be omitted. The ONUMBER may be omitted. The REGISTER and the APC 14548 may appear in either order. If both APC and REGISTER are address 14549 registers, and the SIZE and SCALE are omitted, then the first 14550 register is taken as the base register, and the second as the 14551 index register. 14552 14553 14554File: as.info, Node: M68K-Float, Next: M68K-Directives, Prev: M68K-Moto-Syntax, Up: M68K-Dependent 14555 145569.22.4 Floating Point 14557--------------------- 14558 14559Packed decimal (P) format floating literals are not supported. Feel 14560free to add the code! 14561 14562 The floating point formats generated by directives are these. 14563 14564`.float' 14565 `Single' precision floating point constants. 14566 14567`.double' 14568 `Double' precision floating point constants. 14569 14570`.extend' 14571`.ldouble' 14572 `Extended' precision (`long double') floating point constants. 14573 14574 14575File: as.info, Node: M68K-Directives, Next: M68K-opcodes, Prev: M68K-Float, Up: M68K-Dependent 14576 145779.22.5 680x0 Machine Directives 14578------------------------------- 14579 14580In order to be compatible with the Sun assembler the 680x0 assembler 14581understands the following directives. 14582 14583`.data1' 14584 This directive is identical to a `.data 1' directive. 14585 14586`.data2' 14587 This directive is identical to a `.data 2' directive. 14588 14589`.even' 14590 This directive is a special case of the `.align' directive; it 14591 aligns the output to an even byte boundary. 14592 14593`.skip' 14594 This directive is identical to a `.space' directive. 14595 14596`.arch NAME' 14597 Select the target architecture and extension features. Valid 14598 values for NAME are the same as for the `-march' command-line 14599 option. This directive cannot be specified after any instructions 14600 have been assembled. If it is given multiple times, or in 14601 conjunction with the `-march' option, all uses must be for the 14602 same architecture and extension set. 14603 14604`.cpu NAME' 14605 Select the target cpu. Valid values for NAME are the same as for 14606 the `-mcpu' command-line option. This directive cannot be 14607 specified after any instructions have been assembled. If it is 14608 given multiple times, or in conjunction with the `-mopt' option, 14609 all uses must be for the same cpu. 14610 14611 14612 14613File: as.info, Node: M68K-opcodes, Prev: M68K-Directives, Up: M68K-Dependent 14614 146159.22.6 Opcodes 14616-------------- 14617 14618* Menu: 14619 14620* M68K-Branch:: Branch Improvement 14621* M68K-Chars:: Special Characters 14622 14623 14624File: as.info, Node: M68K-Branch, Next: M68K-Chars, Up: M68K-opcodes 14625 146269.22.6.1 Branch Improvement 14627........................... 14628 14629Certain pseudo opcodes are permitted for branch instructions. They 14630expand to the shortest branch instruction that reach the target. 14631Generally these mnemonics are made by substituting `j' for `b' at the 14632start of a Motorola mnemonic. 14633 14634 The following table summarizes the pseudo-operations. A `*' flags 14635cases that are more fully described after the table: 14636 14637 Displacement 14638 +------------------------------------------------------------ 14639 | 68020 68000/10, not PC-relative OK 14640 Pseudo-Op |BYTE WORD LONG ABSOLUTE LONG JUMP ** 14641 +------------------------------------------------------------ 14642 jbsr |bsrs bsrw bsrl jsr 14643 jra |bras braw bral jmp 14644 * jXX |bXXs bXXw bXXl bNXs;jmp 14645 * dbXX | N/A dbXXw dbXX;bras;bral dbXX;bras;jmp 14646 fjXX | N/A fbXXw fbXXl N/A 14647 14648 XX: condition 14649 NX: negative of condition XX 14650 `*'--see full description below 14651 `**'--this expansion mode is disallowed by `--pcrel' 14652 14653`jbsr' 14654`jra' 14655 These are the simplest jump pseudo-operations; they always map to 14656 one particular machine instruction, depending on the displacement 14657 to the branch target. This instruction will be a byte or word 14658 branch is that is sufficient. Otherwise, a long branch will be 14659 emitted if available. If no long branches are available and the 14660 `--pcrel' option is not given, an absolute long jump will be 14661 emitted instead. If no long branches are available, the `--pcrel' 14662 option is given, and a word branch cannot reach the target, an 14663 error message is generated. 14664 14665 In addition to standard branch operands, `as' allows these 14666 pseudo-operations to have all operands that are allowed for jsr 14667 and jmp, substituting these instructions if the operand given is 14668 not valid for a branch instruction. 14669 14670`jXX' 14671 Here, `jXX' stands for an entire family of pseudo-operations, 14672 where XX is a conditional branch or condition-code test. The full 14673 list of pseudo-ops in this family is: 14674 jhi jls jcc jcs jne jeq jvc 14675 jvs jpl jmi jge jlt jgt jle 14676 14677 Usually, each of these pseudo-operations expands to a single branch 14678 instruction. However, if a word branch is not sufficient, no long 14679 branches are available, and the `--pcrel' option is not given, `as' 14680 issues a longer code fragment in terms of NX, the opposite 14681 condition to XX. For example, under these conditions: 14682 jXX foo 14683 gives 14684 bNXs oof 14685 jmp foo 14686 oof: 14687 14688`dbXX' 14689 The full family of pseudo-operations covered here is 14690 dbhi dbls dbcc dbcs dbne dbeq dbvc 14691 dbvs dbpl dbmi dbge dblt dbgt dble 14692 dbf dbra dbt 14693 14694 Motorola `dbXX' instructions allow word displacements only. When 14695 a word displacement is sufficient, each of these pseudo-operations 14696 expands to the corresponding Motorola instruction. When a word 14697 displacement is not sufficient and long branches are available, 14698 when the source reads `dbXX foo', `as' emits 14699 dbXX oo1 14700 bras oo2 14701 oo1:bral foo 14702 oo2: 14703 14704 If, however, long branches are not available and the `--pcrel' 14705 option is not given, `as' emits 14706 dbXX oo1 14707 bras oo2 14708 oo1:jmp foo 14709 oo2: 14710 14711`fjXX' 14712 This family includes 14713 fjne fjeq fjge fjlt fjgt fjle fjf 14714 fjt fjgl fjgle fjnge fjngl fjngle fjngt 14715 fjnle fjnlt fjoge fjogl fjogt fjole fjolt 14716 fjor fjseq fjsf fjsne fjst fjueq fjuge 14717 fjugt fjule fjult fjun 14718 14719 Each of these pseudo-operations always expands to a single Motorola 14720 coprocessor branch instruction, word or long. All Motorola 14721 coprocessor branch instructions allow both word and long 14722 displacements. 14723 14724 14725 14726File: as.info, Node: M68K-Chars, Prev: M68K-Branch, Up: M68K-opcodes 14727 147289.22.6.2 Special Characters 14729........................... 14730 14731Line comments are introduced by the `|' character appearing anywhere on 14732a line, unless the `--bitwise-or' command-line option has been 14733specified. 14734 14735 An asterisk (`*') as the first character on a line marks the start 14736of a line comment as well. 14737 14738 A hash character (`#') as the first character on a line also marks 14739the start of a line comment, but in this case it could also be a 14740logical line number directive (*note Comments::) or a preprocessor 14741control command (*note Preprocessing::). If the hash character appears 14742elsewhere on a line it is used to introduce an immediate value. (This 14743is for compatibility with Sun's assembler). 14744 14745 Multiple statements on the same line can appear if they are separated 14746by the `;' character. 14747 14748 14749File: as.info, Node: M68HC11-Dependent, Next: S12Z-Dependent, Prev: M68K-Dependent, Up: Machine Dependencies 14750 147519.23 M68HC11 and M68HC12 Dependent Features 14752=========================================== 14753 14754* Menu: 14755 14756* M68HC11-Opts:: M68HC11 and M68HC12 Options 14757* M68HC11-Syntax:: Syntax 14758* M68HC11-Modifiers:: Symbolic Operand Modifiers 14759* M68HC11-Directives:: Assembler Directives 14760* M68HC11-Float:: Floating Point 14761* M68HC11-opcodes:: Opcodes 14762 14763 14764File: as.info, Node: M68HC11-Opts, Next: M68HC11-Syntax, Up: M68HC11-Dependent 14765 147669.23.1 M68HC11 and M68HC12 Options 14767---------------------------------- 14768 14769The Motorola 68HC11 and 68HC12 version of `as' have a few machine 14770dependent options. 14771 14772`-m68hc11' 14773 This option switches the assembler into the M68HC11 mode. In this 14774 mode, the assembler only accepts 68HC11 operands and mnemonics. It 14775 produces code for the 68HC11. 14776 14777`-m68hc12' 14778 This option switches the assembler into the M68HC12 mode. In this 14779 mode, the assembler also accepts 68HC12 operands and mnemonics. It 14780 produces code for the 68HC12. A few 68HC11 instructions are 14781 replaced by some 68HC12 instructions as recommended by Motorola 14782 specifications. 14783 14784`-m68hcs12' 14785 This option switches the assembler into the M68HCS12 mode. This 14786 mode is similar to `-m68hc12' but specifies to assemble for the 14787 68HCS12 series. The only difference is on the assembling of the 14788 `movb' and `movw' instruction when a PC-relative operand is used. 14789 14790`-mm9s12x' 14791 This option switches the assembler into the M9S12X mode. This 14792 mode is similar to `-m68hc12' but specifies to assemble for the 14793 S12X series which is a superset of the HCS12. 14794 14795`-mm9s12xg' 14796 This option switches the assembler into the XGATE mode for the RISC 14797 co-processor featured on some S12X-family chips. 14798 14799`--xgate-ramoffset' 14800 This option instructs the linker to offset RAM addresses from S12X 14801 address space into XGATE address space. 14802 14803`-mshort' 14804 This option controls the ABI and indicates to use a 16-bit integer 14805 ABI. It has no effect on the assembled instructions. This is the 14806 default. 14807 14808`-mlong' 14809 This option controls the ABI and indicates to use a 32-bit integer 14810 ABI. 14811 14812`-mshort-double' 14813 This option controls the ABI and indicates to use a 32-bit float 14814 ABI. This is the default. 14815 14816`-mlong-double' 14817 This option controls the ABI and indicates to use a 64-bit float 14818 ABI. 14819 14820`--strict-direct-mode' 14821 You can use the `--strict-direct-mode' option to disable the 14822 automatic translation of direct page mode addressing into extended 14823 mode when the instruction does not support direct mode. For 14824 example, the `clr' instruction does not support direct page mode 14825 addressing. When it is used with the direct page mode, `as' will 14826 ignore it and generate an absolute addressing. This option 14827 prevents `as' from doing this, and the wrong usage of the direct 14828 page mode will raise an error. 14829 14830`--short-branches' 14831 The `--short-branches' option turns off the translation of 14832 relative branches into absolute branches when the branch offset is 14833 out of range. By default `as' transforms the relative branch 14834 (`bsr', `bgt', `bge', `beq', `bne', `ble', `blt', `bhi', `bcc', 14835 `bls', `bcs', `bmi', `bvs', `bvs', `bra') into an absolute branch 14836 when the offset is out of the -128 .. 127 range. In that case, 14837 the `bsr' instruction is translated into a `jsr', the `bra' 14838 instruction is translated into a `jmp' and the conditional 14839 branches instructions are inverted and followed by a `jmp'. This 14840 option disables these translations and `as' will generate an error 14841 if a relative branch is out of range. This option does not affect 14842 the optimization associated to the `jbra', `jbsr' and `jbXX' 14843 pseudo opcodes. 14844 14845`--force-long-branches' 14846 The `--force-long-branches' option forces the translation of 14847 relative branches into absolute branches. This option does not 14848 affect the optimization associated to the `jbra', `jbsr' and 14849 `jbXX' pseudo opcodes. 14850 14851`--print-insn-syntax' 14852 You can use the `--print-insn-syntax' option to obtain the syntax 14853 description of the instruction when an error is detected. 14854 14855`--print-opcodes' 14856 The `--print-opcodes' option prints the list of all the 14857 instructions with their syntax. The first item of each line 14858 represents the instruction name and the rest of the line indicates 14859 the possible operands for that instruction. The list is printed in 14860 alphabetical order. Once the list is printed `as' exits. 14861 14862`--generate-example' 14863 The `--generate-example' option is similar to `--print-opcodes' 14864 but it generates an example for each instruction instead. 14865 14866 14867File: as.info, Node: M68HC11-Syntax, Next: M68HC11-Modifiers, Prev: M68HC11-Opts, Up: M68HC11-Dependent 14868 148699.23.2 Syntax 14870------------- 14871 14872In the M68HC11 syntax, the instruction name comes first and it may be 14873followed by one or several operands (up to three). Operands are 14874separated by comma (`,'). In the normal mode, `as' will complain if too 14875many operands are specified for a given instruction. In the MRI mode 14876(turned on with `-M' option), it will treat them as comments. Example: 14877 14878 inx 14879 lda #23 14880 bset 2,x #4 14881 brclr *bot #8 foo 14882 14883 The presence of a `;' character or a `!' character anywhere on a 14884line indicates the start of a comment that extends to the end of that 14885line. 14886 14887 A `*' or a `#' character at the start of a line also introduces a 14888line comment, but these characters do not work elsewhere on the line. 14889If the first character of the line is a `#' then as well as starting a 14890comment, the line could also be logical line number directive (*note 14891Comments::) or a preprocessor control command (*note Preprocessing::). 14892 14893 The M68HC11 assembler does not currently support a line separator 14894character. 14895 14896 The following addressing modes are understood for 68HC11 and 68HC12: 14897"Immediate" 14898 `#NUMBER' 14899 14900"Address Register" 14901 `NUMBER,X', `NUMBER,Y' 14902 14903 The NUMBER may be omitted in which case 0 is assumed. 14904 14905"Direct Addressing mode" 14906 `*SYMBOL', or `*DIGITS' 14907 14908"Absolute" 14909 `SYMBOL', or `DIGITS' 14910 14911 The M68HC12 has other more complex addressing modes. All of them are 14912supported and they are represented below: 14913 14914"Constant Offset Indexed Addressing Mode" 14915 `NUMBER,REG' 14916 14917 The NUMBER may be omitted in which case 0 is assumed. The 14918 register can be either `X', `Y', `SP' or `PC'. The assembler will 14919 use the smaller post-byte definition according to the constant 14920 value (5-bit constant offset, 9-bit constant offset or 16-bit 14921 constant offset). If the constant is not known by the assembler 14922 it will use the 16-bit constant offset post-byte and the value 14923 will be resolved at link time. 14924 14925"Offset Indexed Indirect" 14926 `[NUMBER,REG]' 14927 14928 The register can be either `X', `Y', `SP' or `PC'. 14929 14930"Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement" 14931 `NUMBER,-REG' `NUMBER,+REG' `NUMBER,REG-' `NUMBER,REG+' 14932 14933 The number must be in the range `-8'..`+8' and must not be 0. The 14934 register can be either `X', `Y', `SP' or `PC'. 14935 14936"Accumulator Offset" 14937 `ACC,REG' 14938 14939 The accumulator register can be either `A', `B' or `D'. The 14940 register can be either `X', `Y', `SP' or `PC'. 14941 14942"Accumulator D offset indexed-indirect" 14943 `[D,REG]' 14944 14945 The register can be either `X', `Y', `SP' or `PC'. 14946 14947 14948 For example: 14949 14950 ldab 1024,sp 14951 ldd [10,x] 14952 orab 3,+x 14953 stab -2,y- 14954 ldx a,pc 14955 sty [d,sp] 14956 14957 14958File: as.info, Node: M68HC11-Modifiers, Next: M68HC11-Directives, Prev: M68HC11-Syntax, Up: M68HC11-Dependent 14959 149609.23.3 Symbolic Operand Modifiers 14961--------------------------------- 14962 14963The assembler supports several modifiers when using symbol addresses in 1496468HC11 and 68HC12 instruction operands. The general syntax is the 14965following: 14966 14967 %modifier(symbol) 14968 14969`%addr' 14970 This modifier indicates to the assembler and linker to use the 14971 16-bit physical address corresponding to the symbol. This is 14972 intended to be used on memory window systems to map a symbol in 14973 the memory bank window. If the symbol is in a memory expansion 14974 part, the physical address corresponds to the symbol address 14975 within the memory bank window. If the symbol is not in a memory 14976 expansion part, this is the symbol address (using or not using the 14977 %addr modifier has no effect in that case). 14978 14979`%page' 14980 This modifier indicates to use the memory page number corresponding 14981 to the symbol. If the symbol is in a memory expansion part, its 14982 page number is computed by the linker as a number used to map the 14983 page containing the symbol in the memory bank window. If the 14984 symbol is not in a memory expansion part, the page number is 0. 14985 14986`%hi' 14987 This modifier indicates to use the 8-bit high part of the physical 14988 address of the symbol. 14989 14990`%lo' 14991 This modifier indicates to use the 8-bit low part of the physical 14992 address of the symbol. 14993 14994 14995 For example a 68HC12 call to a function `foo_example' stored in 14996memory expansion part could be written as follows: 14997 14998 call %addr(foo_example),%page(foo_example) 14999 15000 and this is equivalent to 15001 15002 call foo_example 15003 15004 And for 68HC11 it could be written as follows: 15005 15006 ldab #%page(foo_example) 15007 stab _page_switch 15008 jsr %addr(foo_example) 15009 15010 15011File: as.info, Node: M68HC11-Directives, Next: M68HC11-Float, Prev: M68HC11-Modifiers, Up: M68HC11-Dependent 15012 150139.23.4 Assembler Directives 15014--------------------------- 15015 15016The 68HC11 and 68HC12 version of `as' have the following specific 15017assembler directives: 15018 15019`.relax' 15020 The relax directive is used by the `GNU Compiler' to emit a 15021 specific relocation to mark a group of instructions for linker 15022 relaxation. The sequence of instructions within the group must be 15023 known to the linker so that relaxation can be performed. 15024 15025`.mode [mshort|mlong|mshort-double|mlong-double]' 15026 This directive specifies the ABI. It overrides the `-mshort', 15027 `-mlong', `-mshort-double' and `-mlong-double' options. 15028 15029`.far SYMBOL' 15030 This directive marks the symbol as a `far' symbol meaning that it 15031 uses a `call/rtc' calling convention as opposed to `jsr/rts'. 15032 During a final link, the linker will identify references to the 15033 `far' symbol and will verify the proper calling convention. 15034 15035`.interrupt SYMBOL' 15036 This directive marks the symbol as an interrupt entry point. This 15037 information is then used by the debugger to correctly unwind the 15038 frame across interrupts. 15039 15040`.xrefb SYMBOL' 15041 This directive is defined for compatibility with the 15042 `Specification for Motorola 8 and 16-Bit Assembly Language Input 15043 Standard' and is ignored. 15044 15045 15046 15047File: as.info, Node: M68HC11-Float, Next: M68HC11-opcodes, Prev: M68HC11-Directives, Up: M68HC11-Dependent 15048 150499.23.5 Floating Point 15050--------------------- 15051 15052Packed decimal (P) format floating literals are not supported. Feel 15053free to add the code! 15054 15055 The floating point formats generated by directives are these. 15056 15057`.float' 15058 `Single' precision floating point constants. 15059 15060`.double' 15061 `Double' precision floating point constants. 15062 15063`.extend' 15064`.ldouble' 15065 `Extended' precision (`long double') floating point constants. 15066 15067 15068File: as.info, Node: M68HC11-opcodes, Prev: M68HC11-Float, Up: M68HC11-Dependent 15069 150709.23.6 Opcodes 15071-------------- 15072 15073* Menu: 15074 15075* M68HC11-Branch:: Branch Improvement 15076 15077 15078File: as.info, Node: M68HC11-Branch, Up: M68HC11-opcodes 15079 150809.23.6.1 Branch Improvement 15081........................... 15082 15083Certain pseudo opcodes are permitted for branch instructions. They 15084expand to the shortest branch instruction that reach the target. 15085Generally these mnemonics are made by prepending `j' to the start of 15086Motorola mnemonic. These pseudo opcodes are not affected by the 15087`--short-branches' or `--force-long-branches' options. 15088 15089 The following table summarizes the pseudo-operations. 15090 15091 Displacement Width 15092 +-------------------------------------------------------------+ 15093 | Options | 15094 | --short-branches --force-long-branches | 15095 +--------------------------+----------------------------------+ 15096 Op |BYTE WORD | BYTE WORD | 15097 +--------------------------+----------------------------------+ 15098 bsr | bsr <pc-rel> <error> | jsr <abs> | 15099 bra | bra <pc-rel> <error> | jmp <abs> | 15100 jbsr | bsr <pc-rel> jsr <abs> | bsr <pc-rel> jsr <abs> | 15101 jbra | bra <pc-rel> jmp <abs> | bra <pc-rel> jmp <abs> | 15102 bXX | bXX <pc-rel> <error> | bNX +3; jmp <abs> | 15103 jbXX | bXX <pc-rel> bNX +3; | bXX <pc-rel> bNX +3; jmp <abs> | 15104 | jmp <abs> | | 15105 +--------------------------+----------------------------------+ 15106 XX: condition 15107 NX: negative of condition XX 15108 15109`jbsr' 15110`jbra' 15111 These are the simplest jump pseudo-operations; they always map to 15112 one particular machine instruction, depending on the displacement 15113 to the branch target. 15114 15115`jbXX' 15116 Here, `jbXX' stands for an entire family of pseudo-operations, 15117 where XX is a conditional branch or condition-code test. The full 15118 list of pseudo-ops in this family is: 15119 jbcc jbeq jbge jbgt jbhi jbvs jbpl jblo 15120 jbcs jbne jblt jble jbls jbvc jbmi 15121 15122 For the cases of non-PC relative displacements and long 15123 displacements, `as' issues a longer code fragment in terms of NX, 15124 the opposite condition to XX. For example, for the non-PC 15125 relative case: 15126 jbXX foo 15127 gives 15128 bNXs oof 15129 jmp foo 15130 oof: 15131 15132 15133 15134File: as.info, Node: S12Z-Dependent, Next: Meta-Dependent, Prev: M68HC11-Dependent, Up: Machine Dependencies 15135 151369.24 S12Z Dependent Features 15137============================ 15138 15139 The Freescale S12Z version of `as' has a few machine dependent 15140features. 15141 15142* Menu: 15143 15144* S12Z Options:: S12Z Options 15145* S12Z Syntax:: Syntax 15146 15147 15148File: as.info, Node: S12Z Options, Next: S12Z Syntax, Up: S12Z-Dependent 15149 151509.24.1 S12Z Options 15151------------------- 15152 15153The S12Z version of `as' recognizes the following options: 15154 15155`-mreg-prefix=PREFIX' 15156 You can use the `-mreg-prefix=PFX' option to indicate that the 15157 assembler should expect all register names to be prefixed with the 15158 string PFX. 15159 15160 For an explanation of what this means and why it might be needed, 15161 see *Note S12Z Register Notation::. 15162 15163`-mdollar-hex' 15164 The `-mdollar-hex' option affects the way that literal hexadecimal 15165 constants are represented. When this option is specified, the 15166 assembler will consider the `$' character as the start of a 15167 hexadecimal integer constant. Without this option, the standard 15168 value of `0x' is expected. 15169 15170 If you use this option, then you cannot have symbol names starting 15171 with `$'. `-mdollar-hex' is implied if the `--traditional-format' 15172 (*note traditional-format::) is used. 15173 15174 15175File: as.info, Node: S12Z Syntax, Prev: S12Z Options, Up: S12Z-Dependent 15176 151779.24.2 Syntax 15178------------- 15179 15180* Menu: 15181 15182* S12Z Syntax Overview:: General description 15183* S12Z Addressing Modes:: Operands and their semantics 15184* S12Z Register Notation:: How to refer to registers 15185 15186 15187File: as.info, Node: S12Z Syntax Overview, Next: S12Z Addressing Modes, Up: S12Z Syntax 15188 151899.24.2.1 Overview 15190................. 15191 15192In the S12Z syntax, the instruction name comes first and it may be 15193followed by one, or by several operands. In most cases the maximum 15194number of operands is three. Operands are separated by a comma (`,'). 15195A comma however does not act as a separator if it appears within 15196parentheses (`()') or within square brackets (`[]'). `as' will 15197complain if too many, too few or inappropriate operands are specified 15198for a given instruction. 15199 15200 Some instructions accept and (in certain situations require) a suffix 15201indicating the size of the operand. The suffix is separated from the 15202instruction name by a period (`.') and may be one of `b', `w', `p' or 15203`l' indicating `byte' (a single byte), `word' (2 bytes), `pointer' (3 15204bytes) or `long' (4 bytes) respectively. 15205 15206 Example: 15207 15208 bset.b 0xA98, #5 15209 mov.b #6, 0x2409 15210 ld d0, #4 15211 mov.l (d0, x), 0x2409 15212 inc d0 15213 cmp d0, #12 15214 blt *-4 15215 lea x, 0x2409 15216 st y, (1, x) 15217 15218 The presence of a `;' character anywhere on a line indicates the 15219start of a comment that extends to the end of that line. 15220 15221 A `*' or a `#' character at the start of a line also introduces a 15222line comment, but these characters do not work elsewhere on the line. 15223If the first character of the line is a `#' then as well as starting a 15224comment, the line could also be logical line number directive (*note 15225Comments::) or a preprocessor control command (*note Preprocessing::). 15226 15227 The S12Z assembler does not currently support a line separator 15228character. 15229 15230 15231File: as.info, Node: S12Z Addressing Modes, Next: S12Z Register Notation, Prev: S12Z Syntax Overview, Up: S12Z Syntax 15232 152339.24.2.2 Addressing Modes 15234......................... 15235 15236The following addressing modes are understood for the S12Z. 15237"Immediate" 15238 `#NUMBER' 15239 15240"Immediate Bit Field" 15241 `#WIDTH:OFFSET' 15242 15243 Bit field instructions in the immediate mode require the width and 15244 offset to be specified. The WIDTH parameter specifies the number 15245 of bits in the field. It should be a number in the range [1,32]. 15246 OFFSET determines the position within the field where the operation 15247 should start. It should be a number in the range [0,31]. 15248 15249"Relative" 15250 `*SYMBOL', or `*[+-]DIGITS' 15251 15252 Program counter relative addresses have a width of 15 bits. Thus, 15253 they must be within the range [-32768, 32767]. 15254 15255"Register" 15256 `REG' 15257 15258 Some instructions accept a register as an operand. In general, 15259 REG may be a data register (`D0', `D1' ... `D7'), the `X' register 15260 or the `Y' register. 15261 15262 A few instructions accept as an argument the stack pointer 15263 register (`S'), and/or the program counter (`P'). 15264 15265 Some very special instructions accept arguments which refer to the 15266 condition code register. For these arguments the syntax is 15267 `CCR', `CCH' or `CCL' which refer to the complete condition code 15268 register, the condition code register high byte and the condition 15269 code register low byte respectively. 15270 15271"Absolute Direct" 15272 `SYMBOL', or `DIGITS' 15273 15274"Absolute Indirect" 15275 `[SYMBOL', or `DIGITS]' 15276 15277"Constant Offset Indexed" 15278 `(NUMBER,REG)' 15279 15280 REG may be either `X', `Y', `S' or `P' or one of the data 15281 registers `D0', `D1' ... `D7'. If any of the registers `D2' ... 15282 `D5' are specified, then the register value is treated as a signed 15283 value. Otherwise it is treated as unsigned. NUMBER may be any 15284 integer in the range [-8388608,8388607]. 15285 15286"Offset Indexed Indirect" 15287 `[NUMBER,REG]' 15288 15289 REG may be either `X', `Y', `S' or `P'. NUMBER may be any integer 15290 in the range [-8388608,8388607]. 15291 15292"Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement" 15293 `-REG', `+REG', `REG-' or `REG+' 15294 15295 This addressing mode is typically used to access a value at an 15296 address, and simultaneously to increment/decrement the register 15297 pointing to that address. Thus REG may be any of the 24 bit 15298 registers `X', `Y', or `S'. Pre-increment and post-decrement are 15299 not available for register `S' (only post-increment and 15300 pre-decrement are available). 15301 15302"Register Offset Direct" 15303 `(DATA-REG,REG)' 15304 15305 REG can be either `X', `Y', or `S'. DATA-REG must be one of the 15306 data registers `D0', `D1' ... `D7'. If any of the registers `D2' 15307 ... `D5' are specified, then the register value is treated as a 15308 signed value. Otherwise it is treated as unsigned. 15309 15310"Register Offset Indirect" 15311 `[DATA-REG,REG]' 15312 15313 REG can be either `X' or `Y'. DATA-REG must be one of the data 15314 registers `D0', `D1' ... `D7'. If any of the registers `D2' ... 15315 `D5' are specified, then the register value is treated as a signed 15316 value. Otherwise it is treated as unsigned. 15317 15318 For example: 15319 15320 trap #197 ;; Immediate mode 15321 bra *+49 ;; Relative mode 15322 bra .L0 ;; ditto 15323 jmp 0xFE0034 ;; Absolute direct mode 15324 jmp [0xFD0012] ;; Absolute indirect mode 15325 inc.b (4,x) ;; Constant offset indexed mode 15326 jsr (45, d0) ;; ditto 15327 dec.w [4,y] ;; Constant offset indexed indirect mode 15328 clr.p (-s) ;; Pre-decrement mode 15329 neg.l (d0, s) ;; Register offset direct mode 15330 com.b [d1, x] ;; Register offset indirect mode 15331 psh cch ;; Register mode 15332 15333 15334File: as.info, Node: S12Z Register Notation, Prev: S12Z Addressing Modes, Up: S12Z Syntax 15335 153369.24.2.3 Register Notation 15337.......................... 15338 15339Without a register prefix (*note S12Z Options::), S12Z assembler code 15340is expected in the traditional format like this: 15341 lea s, (-2,s) 15342 st d2, (0,s) 15343 ld x, symbol 15344 tfr d2, d6 15345 cmp d6, #1532 15346 15347However, if `as' is started with (for example) `-mreg-prefix=%' then 15348all register names must be prefixed with `%' as follows: 15349 lea %s, (-2,%s) 15350 st %d2, (0,%s) 15351 ld %x, symbol 15352 tfr %d2, %d6 15353 cmp %d6, #1532 15354 15355 The register prefix feature is intended to be used by compilers to 15356avoid ambiguity between symbols and register names. Consider the 15357following assembler instruction: 15358 st d0, d1 15359 The destination operand of this instruction could either refer to 15360the register `D1', or it could refer to the symbol named "d1". If the 15361latter is intended then `as' must be invoked with `-mreg-prefix=PFX' 15362and the code written as 15363 st PFXd0, d1 15364 where PFX is the chosen register prefix. For this reason, compiler 15365back-ends should choose a register prefix which cannot be confused with 15366a symbol name. 15367 15368 15369File: as.info, Node: Meta-Dependent, Next: MicroBlaze-Dependent, Prev: S12Z-Dependent, Up: Machine Dependencies 15370 153719.25 Meta Dependent Features 15372============================ 15373 15374* Menu: 15375 15376* Meta Options:: Options 15377* Meta Syntax:: Meta Assembler Syntax 15378 15379 15380File: as.info, Node: Meta Options, Next: Meta Syntax, Up: Meta-Dependent 15381 153829.25.1 Options 15383-------------- 15384 15385The Imagination Technologies Meta architecture is implemented in a 15386number of versions, with each new version adding new features such as 15387instructions and registers. For precise details of what instructions 15388each core supports, please see the chip's technical reference manual. 15389 15390 The following table lists all available Meta options. 15391 15392`-mcpu=metac11' 15393 Generate code for Meta 1.1. 15394 15395`-mcpu=metac12' 15396 Generate code for Meta 1.2. 15397 15398`-mcpu=metac21' 15399 Generate code for Meta 2.1. 15400 15401`-mfpu=metac21' 15402 Allow code to use FPU hardware of Meta 2.1. 15403 15404 15405 15406File: as.info, Node: Meta Syntax, Prev: Meta Options, Up: Meta-Dependent 15407 154089.25.2 Syntax 15409------------- 15410 15411* Menu: 15412 15413* Meta-Chars:: Special Characters 15414* Meta-Regs:: Register Names 15415 15416 15417File: as.info, Node: Meta-Chars, Next: Meta-Regs, Up: Meta Syntax 15418 154199.25.2.1 Special Characters 15420........................... 15421 15422`!' is the line comment character. 15423 15424 You can use `;' instead of a newline to separate statements. 15425 15426 Since `$' has no special meaning, you may use it in symbol names. 15427 15428 15429File: as.info, Node: Meta-Regs, Prev: Meta-Chars, Up: Meta Syntax 15430 154319.25.2.2 Register Names 15432....................... 15433 15434Registers can be specified either using their mnemonic names, such as 15435`D0Re0', or using the unit plus register number separated by a `.', 15436such as `D0.0'. 15437 15438 15439File: as.info, Node: MicroBlaze-Dependent, Next: MIPS-Dependent, Prev: Meta-Dependent, Up: Machine Dependencies 15440 154419.26 MicroBlaze Dependent Features 15442================================== 15443 15444 The Xilinx MicroBlaze processor family includes several variants, 15445all using the same core instruction set. This chapter covers features 15446of the GNU assembler that are specific to the MicroBlaze architecture. 15447For details about the MicroBlaze instruction set, please see the 15448`MicroBlaze Processor Reference Guide (UG081)' available at 15449www.xilinx.com. 15450 15451* Menu: 15452 15453* MicroBlaze Directives:: Directives for MicroBlaze Processors. 15454* MicroBlaze Syntax:: Syntax for the MicroBlaze 15455 15456 15457File: as.info, Node: MicroBlaze Directives, Next: MicroBlaze Syntax, Up: MicroBlaze-Dependent 15458 154599.26.1 Directives 15460----------------- 15461 15462A number of assembler directives are available for MicroBlaze. 15463 15464`.data8 EXPRESSION,...' 15465 This directive is an alias for `.byte'. Each expression is 15466 assembled into an eight-bit value. 15467 15468`.data16 EXPRESSION,...' 15469 This directive is an alias for `.hword'. Each expression is 15470 assembled into an 16-bit value. 15471 15472`.data32 EXPRESSION,...' 15473 This directive is an alias for `.word'. Each expression is 15474 assembled into an 32-bit value. 15475 15476`.ent NAME[,LABEL]' 15477 This directive is an alias for `.func' denoting the start of 15478 function NAME at (optional) LABEL. 15479 15480`.end NAME[,LABEL]' 15481 This directive is an alias for `.endfunc' denoting the end of 15482 function NAME. 15483 15484`.gpword LABEL,...' 15485 This directive is an alias for `.rva'. The resolved address of 15486 LABEL is stored in the data section. 15487 15488`.weakext LABEL' 15489 Declare that LABEL is a weak external symbol. 15490 15491`.rodata' 15492 Switch to .rodata section. Equivalent to `.section .rodata' 15493 15494`.sdata2' 15495 Switch to .sdata2 section. Equivalent to `.section .sdata2' 15496 15497`.sdata' 15498 Switch to .sdata section. Equivalent to `.section .sdata' 15499 15500`.bss' 15501 Switch to .bss section. Equivalent to `.section .bss' 15502 15503`.sbss' 15504 Switch to .sbss section. Equivalent to `.section .sbss' 15505 15506 15507File: as.info, Node: MicroBlaze Syntax, Prev: MicroBlaze Directives, Up: MicroBlaze-Dependent 15508 155099.26.2 Syntax for the MicroBlaze 15510-------------------------------- 15511 15512* Menu: 15513 15514* MicroBlaze-Chars:: Special Characters 15515 15516 15517File: as.info, Node: MicroBlaze-Chars, Up: MicroBlaze Syntax 15518 155199.26.2.1 Special Characters 15520........................... 15521 15522The presence of a `#' on a line indicates the start of a comment that 15523extends to the end of the current line. 15524 15525 If a `#' appears as the first character of a line, the whole line is 15526treated as a comment, but in this case the line can also be a logical 15527line number directive (*note Comments::) or a preprocessor control 15528command (*note Preprocessing::). 15529 15530 The `;' character can be used to separate statements on the same 15531line. 15532 15533 15534File: as.info, Node: MIPS-Dependent, Next: MMIX-Dependent, Prev: MicroBlaze-Dependent, Up: Machine Dependencies 15535 155369.27 MIPS Dependent Features 15537============================ 15538 15539 GNU `as' for MIPS architectures supports several different MIPS 15540processors, and MIPS ISA levels I through V, MIPS32, and MIPS64. For 15541information about the MIPS instruction set, see `MIPS RISC 15542Architecture', by Kane and Heindrich (Prentice-Hall). For an overview 15543of MIPS assembly conventions, see "Appendix D: Assembly Language 15544Programming" in the same work. 15545 15546* Menu: 15547 15548* MIPS Options:: Assembler options 15549* MIPS Macros:: High-level assembly macros 15550* MIPS Symbol Sizes:: Directives to override the size of symbols 15551* MIPS Small Data:: Controlling the use of small data accesses 15552* MIPS ISA:: Directives to override the ISA level 15553* MIPS assembly options:: Directives to control code generation 15554* MIPS autoextend:: Directives for extending MIPS 16 bit instructions 15555* MIPS insn:: Directive to mark data as an instruction 15556* MIPS FP ABIs:: Marking which FP ABI is in use 15557* MIPS NaN Encodings:: Directives to record which NaN encoding is being used 15558* MIPS Option Stack:: Directives to save and restore options 15559* MIPS ASE Instruction Generation Overrides:: Directives to control 15560 generation of MIPS ASE instructions 15561* MIPS Floating-Point:: Directives to override floating-point options 15562* MIPS Syntax:: MIPS specific syntactical considerations 15563 15564 15565File: as.info, Node: MIPS Options, Next: MIPS Macros, Up: MIPS-Dependent 15566 155679.27.1 Assembler options 15568------------------------ 15569 15570The MIPS configurations of GNU `as' support these special options: 15571 15572`-G NUM' 15573 Set the "small data" limit to N bytes. The default limit is 8 15574 bytes. *Note Controlling the use of small data accesses: MIPS 15575 Small Data. 15576 15577`-EB' 15578`-EL' 15579 Any MIPS configuration of `as' can select big-endian or 15580 little-endian output at run time (unlike the other GNU development 15581 tools, which must be configured for one or the other). Use `-EB' 15582 to select big-endian output, and `-EL' for little-endian. 15583 15584`-KPIC' 15585 Generate SVR4-style PIC. This option tells the assembler to 15586 generate SVR4-style position-independent macro expansions. It 15587 also tells the assembler to mark the output file as PIC. 15588 15589`-mvxworks-pic' 15590 Generate VxWorks PIC. This option tells the assembler to generate 15591 VxWorks-style position-independent macro expansions. 15592 15593`-mips1' 15594`-mips2' 15595`-mips3' 15596`-mips4' 15597`-mips5' 15598`-mips32' 15599`-mips32r2' 15600`-mips32r3' 15601`-mips32r5' 15602`-mips32r6' 15603`-mips64' 15604`-mips64r2' 15605`-mips64r3' 15606`-mips64r5' 15607`-mips64r6' 15608 Generate code for a particular MIPS Instruction Set Architecture 15609 level. `-mips1' corresponds to the R2000 and R3000 processors, 15610 `-mips2' to the R6000 processor, `-mips3' to the R4000 processor, 15611 and `-mips4' to the R8000 and R10000 processors. `-mips5', 15612 `-mips32', `-mips32r2', `-mips32r3', `-mips32r5', `-mips32r6', 15613 `-mips64', `-mips64r2', `-mips64r3', `-mips64r5', and `-mips64r6' 15614 correspond to generic MIPS V, MIPS32, MIPS32 Release 2, MIPS32 15615 Release 3, MIPS32 Release 5, MIPS32 Release 6, MIPS64, and MIPS64 15616 Release 2, MIPS64 Release 3, MIPS64 Release 5, and MIPS64 Release 15617 6 ISA processors, respectively. You can also switch instruction 15618 sets during the assembly; see *Note Directives to override the ISA 15619 level: MIPS ISA. 15620 15621`-mgp32' 15622`-mfp32' 15623 Some macros have different expansions for 32-bit and 64-bit 15624 registers. The register sizes are normally inferred from the ISA 15625 and ABI, but these flags force a certain group of registers to be 15626 treated as 32 bits wide at all times. `-mgp32' controls the size 15627 of general-purpose registers and `-mfp32' controls the size of 15628 floating-point registers. 15629 15630 The `.set gp=32' and `.set fp=32' directives allow the size of 15631 registers to be changed for parts of an object. The default value 15632 is restored by `.set gp=default' and `.set fp=default'. 15633 15634 On some MIPS variants there is a 32-bit mode flag; when this flag 15635 is set, 64-bit instructions generate a trap. Also, some 32-bit 15636 OSes only save the 32-bit registers on a context switch, so it is 15637 essential never to use the 64-bit registers. 15638 15639`-mgp64' 15640`-mfp64' 15641 Assume that 64-bit registers are available. This is provided in 15642 the interests of symmetry with `-mgp32' and `-mfp32'. 15643 15644 The `.set gp=64' and `.set fp=64' directives allow the size of 15645 registers to be changed for parts of an object. The default value 15646 is restored by `.set gp=default' and `.set fp=default'. 15647 15648`-mfpxx' 15649 Make no assumptions about whether 32-bit or 64-bit floating-point 15650 registers are available. This is provided to support having modules 15651 compatible with either `-mfp32' or `-mfp64'. This option can only 15652 be used with MIPS II and above. 15653 15654 The `.set fp=xx' directive allows a part of an object to be marked 15655 as not making assumptions about 32-bit or 64-bit FP registers. The 15656 default value is restored by `.set fp=default'. 15657 15658`-modd-spreg' 15659`-mno-odd-spreg' 15660 Enable use of floating-point operations on odd-numbered 15661 single-precision registers when supported by the ISA. `-mfpxx' 15662 implies `-mno-odd-spreg', otherwise the default is `-modd-spreg' 15663 15664`-mips16' 15665`-no-mips16' 15666 Generate code for the MIPS 16 processor. This is equivalent to 15667 putting `.module mips16' at the start of the assembly file. 15668 `-no-mips16' turns off this option. 15669 15670`-mmips16e2' 15671`-mno-mips16e2' 15672 Enable the use of MIPS16e2 instructions in MIPS16 mode. This is 15673 equivalent to putting `.module mips16e2' at the start of the 15674 assembly file. `-mno-mips16e2' turns off this option. 15675 15676`-mmicromips' 15677`-mno-micromips' 15678 Generate code for the microMIPS processor. This is equivalent to 15679 putting `.module micromips' at the start of the assembly file. 15680 `-mno-micromips' turns off this option. This is equivalent to 15681 putting `.module nomicromips' at the start of the assembly file. 15682 15683`-msmartmips' 15684`-mno-smartmips' 15685 Enables the SmartMIPS extensions to the MIPS32 instruction set, 15686 which provides a number of new instructions which target smartcard 15687 and cryptographic applications. This is equivalent to putting 15688 `.module smartmips' at the start of the assembly file. 15689 `-mno-smartmips' turns off this option. 15690 15691`-mips3d' 15692`-no-mips3d' 15693 Generate code for the MIPS-3D Application Specific Extension. 15694 This tells the assembler to accept MIPS-3D instructions. 15695 `-no-mips3d' turns off this option. 15696 15697`-mdmx' 15698`-no-mdmx' 15699 Generate code for the MDMX Application Specific Extension. This 15700 tells the assembler to accept MDMX instructions. `-no-mdmx' turns 15701 off this option. 15702 15703`-mdsp' 15704`-mno-dsp' 15705 Generate code for the DSP Release 1 Application Specific Extension. 15706 This tells the assembler to accept DSP Release 1 instructions. 15707 `-mno-dsp' turns off this option. 15708 15709`-mdspr2' 15710`-mno-dspr2' 15711 Generate code for the DSP Release 2 Application Specific Extension. 15712 This option implies `-mdsp'. This tells the assembler to accept 15713 DSP Release 2 instructions. `-mno-dspr2' turns off this option. 15714 15715`-mdspr3' 15716`-mno-dspr3' 15717 Generate code for the DSP Release 3 Application Specific Extension. 15718 This option implies `-mdsp' and `-mdspr2'. This tells the 15719 assembler to accept DSP Release 3 instructions. `-mno-dspr3' 15720 turns off this option. 15721 15722`-mmt' 15723`-mno-mt' 15724 Generate code for the MT Application Specific Extension. This 15725 tells the assembler to accept MT instructions. `-mno-mt' turns 15726 off this option. 15727 15728`-mmcu' 15729`-mno-mcu' 15730 Generate code for the MCU Application Specific Extension. This 15731 tells the assembler to accept MCU instructions. `-mno-mcu' turns 15732 off this option. 15733 15734`-mmsa' 15735`-mno-msa' 15736 Generate code for the MIPS SIMD Architecture Extension. This 15737 tells the assembler to accept MSA instructions. `-mno-msa' turns 15738 off this option. 15739 15740`-mxpa' 15741`-mno-xpa' 15742 Generate code for the MIPS eXtended Physical Address (XPA) 15743 Extension. This tells the assembler to accept XPA instructions. 15744 `-mno-xpa' turns off this option. 15745 15746`-mvirt' 15747`-mno-virt' 15748 Generate code for the Virtualization Application Specific 15749 Extension. This tells the assembler to accept Virtualization 15750 instructions. `-mno-virt' turns off this option. 15751 15752`-mcrc' 15753`-mno-crc' 15754 Generate code for the cyclic redundancy check (CRC) Application 15755 Specific Extension. This tells the assembler to accept CRC 15756 instructions. `-mno-crc' turns off this option. 15757 15758`-mginv' 15759`-mno-ginv' 15760 Generate code for the Global INValidate (GINV) Application Specific 15761 Extension. This tells the assembler to accept GINV instructions. 15762 `-mno-ginv' turns off this option. 15763 15764`-mloongson-mmi' 15765`-mno-loongson-mmi' 15766 Generate code for the Loongson MultiMedia extensions Instructions 15767 (MMI) Application Specific Extension. This tells the assembler to 15768 accept MMI instructions. `-mno-loongson-mmi' turns off this 15769 option. 15770 15771`-mloongson-cam' 15772`-mno-loongson-cam' 15773 Generate code for the Loongson Content Address Memory (CAM) 15774 Application Specific Extension. This tells the assembler to 15775 accept CAM instructions. `-mno-loongson-cam' turns off this 15776 option. 15777 15778`-mloongson-ext' 15779`-mno-loongson-ext' 15780 Generate code for the Loongson EXTensions (EXT) instructions 15781 Application Specific Extension. This tells the assembler to 15782 accept EXT instructions. `-mno-loongson-ext' turns off this 15783 option. 15784 15785`-mloongson-ext2' 15786`-mno-loongson-ext2' 15787 Generate code for the Loongson EXTensions R2 (EXT2) instructions 15788 Application Specific Extension. This tells the assembler to 15789 accept EXT2 instructions. `-mno-loongson-ext2' turns off this 15790 option. 15791 15792`-minsn32' 15793`-mno-insn32' 15794 Only use 32-bit instruction encodings when generating code for the 15795 microMIPS processor. This option inhibits the use of any 16-bit 15796 instructions. This is equivalent to putting `.set insn32' at the 15797 start of the assembly file. `-mno-insn32' turns off this option. 15798 This is equivalent to putting `.set noinsn32' at the start of the 15799 assembly file. By default `-mno-insn32' is selected, allowing all 15800 instructions to be used. 15801 15802`-mfix7000' 15803`-mno-fix7000' 15804 Cause nops to be inserted if the read of the destination register 15805 of an mfhi or mflo instruction occurs in the following two 15806 instructions. 15807 15808`-mfix-rm7000' 15809`-mno-fix-rm7000' 15810 Cause nops to be inserted if a dmult or dmultu instruction is 15811 followed by a load instruction. 15812 15813`-mfix-loongson2f-jump' 15814`-mno-fix-loongson2f-jump' 15815 Eliminate instruction fetch from outside 256M region to work 15816 around the Loongson2F `jump' instructions. Without it, under 15817 extreme cases, the kernel may crash. The issue has been solved in 15818 latest processor batches, but this fix has no side effect to them. 15819 15820`-mfix-loongson2f-nop' 15821`-mno-fix-loongson2f-nop' 15822 Replace nops by `or at,at,zero' to work around the Loongson2F 15823 `nop' errata. Without it, under extreme cases, the CPU might 15824 deadlock. The issue has been solved in later Loongson2F batches, 15825 but this fix has no side effect to them. 15826 15827`-mfix-loongson3-llsc' 15828`-mno-fix-loongson3-llsc' 15829 Insert `sync' before `ll' and `lld' to work around Loongson3 LLSC 15830 errata. Without it, under extrame cases, the CPU might deadlock. 15831 The default can be controlled by the 15832 `--enable-mips-fix-loongson3-llsc=[yes|no]' configure option. 15833 15834`-mfix-vr4120' 15835`-mno-fix-vr4120' 15836 Insert nops to work around certain VR4120 errata. This option is 15837 intended to be used on GCC-generated code: it is not designed to 15838 catch all problems in hand-written assembler code. 15839 15840`-mfix-vr4130' 15841`-mno-fix-vr4130' 15842 Insert nops to work around the VR4130 `mflo'/`mfhi' errata. 15843 15844`-mfix-loongson2f-btb' 15845`-mno-fix-loongson2f-btb' 15846 Clear the Branch Target Buffer before any jump through a register. 15847 This option is intended to be used on kernel code for the 15848 Loongson 2F processor only; userland code compiled with this 15849 option will fault, and kernel code compiled with this option run 15850 on another processor than Loongson 2F will yield unpredictable 15851 results. 15852 15853`-mfix-24k' 15854`-mno-fix-24k' 15855 Insert nops to work around the 24K `eret'/`deret' errata. 15856 15857`-mfix-cn63xxp1' 15858`-mno-fix-cn63xxp1' 15859 Replace `pref' hints 0 - 4 and 6 - 24 with hint 28 to work around 15860 certain CN63XXP1 errata. 15861 15862`-mfix-r5900' 15863`-mno-fix-r5900' 15864 Do not attempt to schedule the preceding instruction into the 15865 delay slot of a branch instruction placed at the end of a short 15866 loop of six instructions or fewer and always schedule a `nop' 15867 instruction there instead. The short loop bug under certain 15868 conditions causes loops to execute only once or twice, due to a 15869 hardware bug in the R5900 chip. 15870 15871`-m4010' 15872`-no-m4010' 15873 Generate code for the LSI R4010 chip. This tells the assembler to 15874 accept the R4010-specific instructions (`addciu', `ffc', etc.), 15875 and to not schedule `nop' instructions around accesses to the `HI' 15876 and `LO' registers. `-no-m4010' turns off this option. 15877 15878`-m4650' 15879`-no-m4650' 15880 Generate code for the MIPS R4650 chip. This tells the assembler 15881 to accept the `mad' and `madu' instruction, and to not schedule 15882 `nop' instructions around accesses to the `HI' and `LO' registers. 15883 `-no-m4650' turns off this option. 15884 15885`-m3900' 15886`-no-m3900' 15887`-m4100' 15888`-no-m4100' 15889 For each option `-mNNNN', generate code for the MIPS RNNNN chip. 15890 This tells the assembler to accept instructions specific to that 15891 chip, and to schedule for that chip's hazards. 15892 15893`-march=CPU' 15894 Generate code for a particular MIPS CPU. It is exactly equivalent 15895 to `-mCPU', except that there are more value of CPU understood. 15896 Valid CPU value are: 15897 15898 2000, 3000, 3900, 4000, 4010, 4100, 4111, vr4120, vr4130, 15899 vr4181, 4300, 4400, 4600, 4650, 5000, rm5200, rm5230, rm5231, 15900 rm5261, rm5721, vr5400, vr5500, 6000, rm7000, 8000, rm9000, 15901 10000, 12000, 14000, 16000, 4kc, 4km, 4kp, 4ksc, 4kec, 4kem, 15902 4kep, 4ksd, m4k, m4kp, m14k, m14kc, m14ke, m14kec, 24kc, 15903 24kf2_1, 24kf, 24kf1_1, 24kec, 24kef2_1, 24kef, 24kef1_1, 15904 34kc, 34kf2_1, 34kf, 34kf1_1, 34kn, 74kc, 74kf2_1, 74kf, 15905 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf, 1004kf1_1, 15906 interaptiv, interaptiv-mr2, m5100, m5101, p5600, 5kc, 5kf, 15907 20kc, 25kf, sb1, sb1a, i6400, i6500, p6600, loongson2e, 15908 loongson2f, gs464, gs464e, gs264e, octeon, octeon+, octeon2, 15909 octeon3, xlr, xlp 15910 15911 For compatibility reasons, `Nx' and `Bfx' are accepted as synonyms 15912 for `Nf1_1'. These values are deprecated. 15913 15914`-mtune=CPU' 15915 Schedule and tune for a particular MIPS CPU. Valid CPU values are 15916 identical to `-march=CPU'. 15917 15918`-mabi=ABI' 15919 Record which ABI the source code uses. The recognized arguments 15920 are: `32', `n32', `o64', `64' and `eabi'. 15921 15922`-msym32' 15923`-mno-sym32' 15924 Equivalent to adding `.set sym32' or `.set nosym32' to the 15925 beginning of the assembler input. *Note MIPS Symbol Sizes::. 15926 15927`-nocpp' 15928 This option is ignored. It is accepted for command-line 15929 compatibility with other assemblers, which use it to turn off C 15930 style preprocessing. With GNU `as', there is no need for 15931 `-nocpp', because the GNU assembler itself never runs the C 15932 preprocessor. 15933 15934`-msoft-float' 15935`-mhard-float' 15936 Disable or enable floating-point instructions. Note that by 15937 default floating-point instructions are always allowed even with 15938 CPU targets that don't have support for these instructions. 15939 15940`-msingle-float' 15941`-mdouble-float' 15942 Disable or enable double-precision floating-point operations. Note 15943 that by default double-precision floating-point operations are 15944 always allowed even with CPU targets that don't have support for 15945 these operations. 15946 15947`--construct-floats' 15948`--no-construct-floats' 15949 The `--no-construct-floats' option disables the construction of 15950 double width floating point constants by loading the two halves of 15951 the value into the two single width floating point registers that 15952 make up the double width register. This feature is useful if the 15953 processor support the FR bit in its status register, and this bit 15954 is known (by the programmer) to be set. This bit prevents the 15955 aliasing of the double width register by the single width 15956 registers. 15957 15958 By default `--construct-floats' is selected, allowing construction 15959 of these floating point constants. 15960 15961`--relax-branch' 15962`--no-relax-branch' 15963 The `--relax-branch' option enables the relaxation of out-of-range 15964 branches. Any branches whose target cannot be reached directly are 15965 converted to a small instruction sequence including an 15966 inverse-condition branch to the physically next instruction, and a 15967 jump to the original target is inserted between the two 15968 instructions. In PIC code the jump will involve further 15969 instructions for address calculation. 15970 15971 The `BC1ANY2F', `BC1ANY2T', `BC1ANY4F', `BC1ANY4T', `BPOSGE32' and 15972 `BPOSGE64' instructions are excluded from relaxation, because they 15973 have no complementing counterparts. They could be relaxed with 15974 the use of a longer sequence involving another branch, however 15975 this has not been implemented and if their target turns out of 15976 reach, they produce an error even if branch relaxation is enabled. 15977 15978 Also no MIPS16 branches are ever relaxed. 15979 15980 By default `--no-relax-branch' is selected, causing any 15981 out-of-range branches to produce an error. 15982 15983`-mignore-branch-isa' 15984`-mno-ignore-branch-isa' 15985 Ignore branch checks for invalid transitions between ISA modes. 15986 15987 The semantics of branches does not provide for an ISA mode switch, 15988 so in most cases the ISA mode a branch has been encoded for has to 15989 be the same as the ISA mode of the branch's target label. If the 15990 ISA modes do not match, then such a branch, if taken, will cause 15991 the ISA mode to remain unchanged and instructions that follow will 15992 be executed in the wrong ISA mode causing the program to misbehave 15993 or crash. 15994 15995 In the case of the `BAL' instruction it may be possible to relax 15996 it to an equivalent `JALX' instruction so that the ISA mode is 15997 switched at the run time as required. For other branches no 15998 relaxation is possible and therefore GAS has checks implemented 15999 that verify in branch assembly that the two ISA modes match, and 16000 report an error otherwise so that the problem with code can be 16001 diagnosed at the assembly time rather than at the run time. 16002 16003 However some assembly code, including generated code produced by 16004 some versions of GCC, may incorrectly include branches to data 16005 labels, which appear to require a mode switch but are either dead 16006 or immediately followed by valid instructions encoded for the same 16007 ISA the branch has been encoded for. While not strictly correct 16008 at the source level such code will execute as intended, so to help 16009 with these cases `-mignore-branch-isa' is supported which disables 16010 ISA mode checks for branches. 16011 16012 By default `-mno-ignore-branch-isa' is selected, causing any 16013 invalid branch requiring a transition between ISA modes to produce 16014 an error. 16015 16016`-mnan=ENCODING' 16017 This option indicates whether the source code uses the IEEE 2008 16018 NaN encoding (`-mnan=2008') or the original MIPS encoding 16019 (`-mnan=legacy'). It is equivalent to adding a `.nan' directive 16020 to the beginning of the source file. *Note MIPS NaN Encodings::. 16021 16022 `-mnan=legacy' is the default if no `-mnan' option or `.nan' 16023 directive is used. 16024 16025`--trap' 16026`--no-break' 16027 `as' automatically macro expands certain division and 16028 multiplication instructions to check for overflow and division by 16029 zero. This option causes `as' to generate code to take a trap 16030 exception rather than a break exception when an error is detected. 16031 The trap instructions are only supported at Instruction Set 16032 Architecture level 2 and higher. 16033 16034`--break' 16035`--no-trap' 16036 Generate code to take a break exception rather than a trap 16037 exception when an error is detected. This is the default. 16038 16039`-mpdr' 16040`-mno-pdr' 16041 Control generation of `.pdr' sections. Off by default on IRIX, on 16042 elsewhere. 16043 16044`-mshared' 16045`-mno-shared' 16046 When generating code using the Unix calling conventions (selected 16047 by `-KPIC' or `-mcall_shared'), gas will normally generate code 16048 which can go into a shared library. The `-mno-shared' option 16049 tells gas to generate code which uses the calling convention, but 16050 can not go into a shared library. The resulting code is slightly 16051 more efficient. This option only affects the handling of the 16052 `.cpload' and `.cpsetup' pseudo-ops. 16053 16054 16055File: as.info, Node: MIPS Macros, Next: MIPS Symbol Sizes, Prev: MIPS Options, Up: MIPS-Dependent 16056 160579.27.2 High-level assembly macros 16058--------------------------------- 16059 16060MIPS assemblers have traditionally provided a wider range of 16061instructions than the MIPS architecture itself. These extra 16062instructions are usually referred to as "macro" instructions (1). 16063 16064 Some MIPS macro instructions extend an underlying architectural 16065instruction while others are entirely new. An example of the former 16066type is `and', which allows the third operand to be either a register 16067or an arbitrary immediate value. Examples of the latter type include 16068`bgt', which branches to the third operand when the first operand is 16069greater than the second operand, and `ulh', which implements an 16070unaligned 2-byte load. 16071 16072 One of the most common extensions provided by macros is to expand 16073memory offsets to the full address range (32 or 64 bits) and to allow 16074symbolic offsets such as `my_data + 4' to be used in place of integer 16075constants. For example, the architectural instruction `lbu' allows 16076only a signed 16-bit offset, whereas the macro `lbu' allows code such 16077as `lbu $4,array+32769($5)'. The implementation of these symbolic 16078offsets depends on several factors, such as whether the assembler is 16079generating SVR4-style PIC (selected by `-KPIC', *note Assembler 16080options: MIPS Options.), the size of symbols (*note Directives to 16081override the size of symbols: MIPS Symbol Sizes.), and the small data 16082limit (*note Controlling the use of small data accesses: MIPS Small 16083Data.). 16084 16085 Sometimes it is undesirable to have one assembly instruction expand 16086to several machine instructions. The directive `.set nomacro' tells 16087the assembler to warn when this happens. `.set macro' restores the 16088default behavior. 16089 16090 Some macro instructions need a temporary register to store 16091intermediate results. This register is usually `$1', also known as 16092`$at', but it can be changed to any core register REG using `.set 16093at=REG'. Note that `$at' always refers to `$1' regardless of which 16094register is being used as the temporary register. 16095 16096 Implicit uses of the temporary register in macros could interfere 16097with explicit uses in the assembly code. The assembler therefore warns 16098whenever it sees an explicit use of the temporary register. The 16099directive `.set noat' silences this warning while `.set at' restores 16100the default behavior. It is safe to use `.set noat' while `.set 16101nomacro' is in effect since single-instruction macros never need a 16102temporary register. 16103 16104 Note that while the GNU assembler provides these macros for 16105compatibility, it does not make any attempt to optimize them with the 16106surrounding code. 16107 16108 ---------- Footnotes ---------- 16109 16110 (1) The term "macro" is somewhat overloaded here, since these macros 16111have no relation to those defined by `.macro', *note `.macro': Macro. 16112 16113 16114File: as.info, Node: MIPS Symbol Sizes, Next: MIPS Small Data, Prev: MIPS Macros, Up: MIPS-Dependent 16115 161169.27.3 Directives to override the size of symbols 16117------------------------------------------------- 16118 16119The n64 ABI allows symbols to have any 64-bit value. Although this 16120provides a great deal of flexibility, it means that some macros have 16121much longer expansions than their 32-bit counterparts. For example, 16122the non-PIC expansion of `dla $4,sym' is usually: 16123 16124 lui $4,%highest(sym) 16125 lui $1,%hi(sym) 16126 daddiu $4,$4,%higher(sym) 16127 daddiu $1,$1,%lo(sym) 16128 dsll32 $4,$4,0 16129 daddu $4,$4,$1 16130 16131 whereas the 32-bit expansion is simply: 16132 16133 lui $4,%hi(sym) 16134 daddiu $4,$4,%lo(sym) 16135 16136 n64 code is sometimes constructed in such a way that all symbolic 16137constants are known to have 32-bit values, and in such cases, it's 16138preferable to use the 32-bit expansion instead of the 64-bit expansion. 16139 16140 You can use the `.set sym32' directive to tell the assembler that, 16141from this point on, all expressions of the form `SYMBOL' or `SYMBOL + 16142OFFSET' have 32-bit values. For example: 16143 16144 .set sym32 16145 dla $4,sym 16146 lw $4,sym+16 16147 sw $4,sym+0x8000($4) 16148 16149 will cause the assembler to treat `sym', `sym+16' and `sym+0x8000' 16150as 32-bit values. The handling of non-symbolic addresses is not 16151affected. 16152 16153 The directive `.set nosym32' ends a `.set sym32' block and reverts 16154to the normal behavior. It is also possible to change the symbol size 16155using the command-line options `-msym32' and `-mno-sym32'. 16156 16157 These options and directives are always accepted, but at present, 16158they have no effect for anything other than n64. 16159 16160 16161File: as.info, Node: MIPS Small Data, Next: MIPS ISA, Prev: MIPS Symbol Sizes, Up: MIPS-Dependent 16162 161639.27.4 Controlling the use of small data accesses 16164------------------------------------------------- 16165 16166It often takes several instructions to load the address of a symbol. 16167For example, when `addr' is a 32-bit symbol, the non-PIC expansion of 16168`dla $4,addr' is usually: 16169 16170 lui $4,%hi(addr) 16171 daddiu $4,$4,%lo(addr) 16172 16173 The sequence is much longer when `addr' is a 64-bit symbol. *Note 16174Directives to override the size of symbols: MIPS Symbol Sizes. 16175 16176 In order to cut down on this overhead, most embedded MIPS systems 16177set aside a 64-kilobyte "small data" area and guarantee that all data 16178of size N and smaller will be placed in that area. The limit N is 16179passed to both the assembler and the linker using the command-line 16180option `-G N', *note Assembler options: MIPS Options. Note that the 16181same value of N must be used when linking and when assembling all input 16182files to the link; any inconsistency could cause a relocation overflow 16183error. 16184 16185 The size of an object in the `.bss' section is set by the `.comm' or 16186`.lcomm' directive that defines it. The size of an external object may 16187be set with the `.extern' directive. For example, `.extern sym,4' 16188declares that the object at `sym' is 4 bytes in length, while leaving 16189`sym' otherwise undefined. 16190 16191 When no `-G' option is given, the default limit is 8 bytes. The 16192option `-G 0' prevents any data from being automatically classified as 16193small. 16194 16195 It is also possible to mark specific objects as small by putting them 16196in the special sections `.sdata' and `.sbss', which are "small" 16197counterparts of `.data' and `.bss' respectively. The toolchain will 16198treat such data as small regardless of the `-G' setting. 16199 16200 On startup, systems that support a small data area are expected to 16201initialize register `$28', also known as `$gp', in such a way that 16202small data can be accessed using a 16-bit offset from that register. 16203For example, when `addr' is small data, the `dla $4,addr' instruction 16204above is equivalent to: 16205 16206 daddiu $4,$28,%gp_rel(addr) 16207 16208 Small data is not supported for SVR4-style PIC. 16209 16210 16211File: as.info, Node: MIPS ISA, Next: MIPS assembly options, Prev: MIPS Small Data, Up: MIPS-Dependent 16212 162139.27.5 Directives to override the ISA level 16214------------------------------------------- 16215 16216GNU `as' supports an additional directive to change the MIPS 16217Instruction Set Architecture level on the fly: `.set mipsN'. N should 16218be a number from 0 to 5, or 32, 32r2, 32r3, 32r5, 32r6, 64, 64r2, 64r3, 1621964r5 or 64r6. The values other than 0 make the assembler accept 16220instructions for the corresponding ISA level, from that point on in the 16221assembly. `.set mipsN' affects not only which instructions are 16222permitted, but also how certain macros are expanded. `.set mips0' 16223restores the ISA level to its original level: either the level you 16224selected with command-line options, or the default for your 16225configuration. You can use this feature to permit specific MIPS III 16226instructions while assembling in 32 bit mode. Use this directive with 16227care! 16228 16229 The `.set arch=CPU' directive provides even finer control. It 16230changes the effective CPU target and allows the assembler to use 16231instructions specific to a particular CPU. All CPUs supported by the 16232`-march' command-line option are also selectable by this directive. 16233The original value is restored by `.set arch=default'. 16234 16235 The directive `.set mips16' puts the assembler into MIPS 16 mode, in 16236which it will assemble instructions for the MIPS 16 processor. Use 16237`.set nomips16' to return to normal 32 bit mode. 16238 16239 Traditional MIPS assemblers do not support this directive. 16240 16241 The directive `.set micromips' puts the assembler into microMIPS 16242mode, in which it will assemble instructions for the microMIPS 16243processor. Use `.set nomicromips' to return to normal 32 bit mode. 16244 16245 Traditional MIPS assemblers do not support this directive. 16246 16247 16248File: as.info, Node: MIPS assembly options, Next: MIPS autoextend, Prev: MIPS ISA, Up: MIPS-Dependent 16249 162509.27.6 Directives to control code generation 16251-------------------------------------------- 16252 16253The `.module' directive allows command-line options to be set directly 16254from assembly. The format of the directive matches the `.set' 16255directive but only those options which are relevant to a whole module 16256are supported. The effect of a `.module' directive is the same as the 16257corresponding command-line option. Where `.set' directives support 16258returning to a default then the `.module' directives do not as they 16259define the defaults. 16260 16261 These module-level directives must appear first in assembly. 16262 16263 Traditional MIPS assemblers do not support this directive. 16264 16265 The directive `.set insn32' makes the assembler only use 32-bit 16266instruction encodings when generating code for the microMIPS processor. 16267This directive inhibits the use of any 16-bit instructions from that 16268point on in the assembly. The `.set noinsn32' directive allows 16-bit 16269instructions to be accepted. 16270 16271 Traditional MIPS assemblers do not support this directive. 16272 16273 16274File: as.info, Node: MIPS autoextend, Next: MIPS insn, Prev: MIPS assembly options, Up: MIPS-Dependent 16275 162769.27.7 Directives for extending MIPS 16 bit instructions 16277-------------------------------------------------------- 16278 16279By default, MIPS 16 instructions are automatically extended to 32 bits 16280when necessary. The directive `.set noautoextend' will turn this off. 16281When `.set noautoextend' is in effect, any 32 bit instruction must be 16282explicitly extended with the `.e' modifier (e.g., `li.e $4,1000'). The 16283directive `.set autoextend' may be used to once again automatically 16284extend instructions when necessary. 16285 16286 This directive is only meaningful when in MIPS 16 mode. Traditional 16287MIPS assemblers do not support this directive. 16288 16289 16290File: as.info, Node: MIPS insn, Next: MIPS FP ABIs, Prev: MIPS autoextend, Up: MIPS-Dependent 16291 162929.27.8 Directive to mark data as an instruction 16293----------------------------------------------- 16294 16295The `.insn' directive tells `as' that the following data is actually 16296instructions. This makes a difference in MIPS 16 and microMIPS modes: 16297when loading the address of a label which precedes instructions, `as' 16298automatically adds 1 to the value, so that jumping to the loaded 16299address will do the right thing. 16300 16301 The `.global' and `.globl' directives supported by `as' will by 16302default mark the symbol as pointing to a region of data not code. This 16303means that, for example, any instructions following such a symbol will 16304not be disassembled by `objdump' as it will regard them as data. To 16305change this behavior an optional section name can be placed after the 16306symbol name in the `.global' directive. If this section exists and is 16307known to be a code section, then the symbol will be marked as pointing 16308at code not data. Ie the syntax for the directive is: 16309 16310 `.global SYMBOL[ SECTION][, SYMBOL[ SECTION]] ...', 16311 16312 Here is a short example: 16313 16314 .global foo .text, bar, baz .data 16315 foo: 16316 nop 16317 bar: 16318 .word 0x0 16319 baz: 16320 .word 0x1 16321 16322 16323File: as.info, Node: MIPS FP ABIs, Next: MIPS NaN Encodings, Prev: MIPS insn, Up: MIPS-Dependent 16324 163259.27.9 Directives to control the FP ABI 16326--------------------------------------- 16327 16328* Menu: 16329 16330* MIPS FP ABI History:: History of FP ABIs 16331* MIPS FP ABI Variants:: Supported FP ABIs 16332* MIPS FP ABI Selection:: Automatic selection of FP ABI 16333* MIPS FP ABI Compatibility:: Linking different FP ABI variants 16334 16335 16336File: as.info, Node: MIPS FP ABI History, Next: MIPS FP ABI Variants, Up: MIPS FP ABIs 16337 163389.27.9.1 History of FP ABIs 16339........................... 16340 16341The MIPS ABIs support a variety of different floating-point extensions 16342where calling-convention and register sizes vary for floating-point 16343data. The extensions exist to support a wide variety of optional 16344architecture features. The resulting ABI variants are generally 16345incompatible with each other and must be tracked carefully. 16346 16347 Traditionally the use of an explicit `.gnu_attribute 4, N' directive 16348is used to indicate which ABI is in use by a specific module. It was 16349then left to the user to ensure that command-line options and the 16350selected ABI were compatible with some potential for inconsistencies. 16351 16352 16353File: as.info, Node: MIPS FP ABI Variants, Next: MIPS FP ABI Selection, Prev: MIPS FP ABI History, Up: MIPS FP ABIs 16354 163559.27.9.2 Supported FP ABIs 16356.......................... 16357 16358The supported floating-point ABI variants are: 16359 16360`0 - No floating-point' 16361 This variant is used to indicate that floating-point is not used 16362 within the module at all and therefore has no impact on the ABI. 16363 This is the default. 16364 16365`1 - Double-precision' 16366 This variant indicates that double-precision support is used. For 16367 64-bit ABIs this means that 64-bit wide floating-point registers 16368 are required. For 32-bit ABIs this means that 32-bit wide 16369 floating-point registers are required and double-precision 16370 operations use pairs of registers. 16371 16372`2 - Single-precision' 16373 This variant indicates that single-precision support is used. 16374 Double precision operations will be supported via soft-float 16375 routines. 16376 16377`3 - Soft-float' 16378 This variant indicates that although floating-point support is 16379 used all operations are emulated in software. This means the ABI 16380 is modified to pass all floating-point data in general-purpose 16381 registers. 16382 16383`4 - Deprecated' 16384 This variant existed as an initial attempt at supporting 64-bit 16385 wide floating-point registers for O32 ABI on a MIPS32r2 CPU. This 16386 has been superseded by 5, 6 and 7. 16387 16388`5 - Double-precision 32-bit CPU, 32-bit or 64-bit FPU' 16389 This variant is used by 32-bit ABIs to indicate that the 16390 floating-point code in the module has been designed to operate 16391 correctly with either 32-bit wide or 64-bit wide floating-point 16392 registers. Double-precision support is used. Only O32 currently 16393 supports this variant and requires a minimum architecture of MIPS 16394 II. 16395 16396`6 - Double-precision 32-bit FPU, 64-bit FPU' 16397 This variant is used by 32-bit ABIs to indicate that the 16398 floating-point code in the module requires 64-bit wide 16399 floating-point registers. Double-precision support is used. Only 16400 O32 currently supports this variant and requires a minimum 16401 architecture of MIPS32r2. 16402 16403`7 - Double-precision compat 32-bit FPU, 64-bit FPU' 16404 This variant is used by 32-bit ABIs to indicate that the 16405 floating-point code in the module requires 64-bit wide 16406 floating-point registers. Double-precision support is used. This 16407 differs from the previous ABI as it restricts use of odd-numbered 16408 single-precision registers. Only O32 currently supports this 16409 variant and requires a minimum architecture of MIPS32r2. 16410 16411 16412File: as.info, Node: MIPS FP ABI Selection, Next: MIPS FP ABI Compatibility, Prev: MIPS FP ABI Variants, Up: MIPS FP ABIs 16413 164149.27.9.3 Automatic selection of FP ABI 16415...................................... 16416 16417In order to simplify and add safety to the process of selecting the 16418correct floating-point ABI, the assembler will automatically infer the 16419correct `.gnu_attribute 4, N' directive based on command-line options 16420and `.module' overrides. Where an explicit `.gnu_attribute 4, N' 16421directive has been seen then a warning will be raised if it does not 16422match an inferred setting. 16423 16424 The floating-point ABI is inferred as follows. If `-msoft-float' 16425has been used the module will be marked as soft-float. If 16426`-msingle-float' has been used then the module will be marked as 16427single-precision. The remaining ABIs are then selected based on the FP 16428register width. Double-precision is selected if the width of GP and FP 16429registers match and the special double-precision variants for 32-bit 16430ABIs are then selected depending on `-mfpxx', `-mfp64' and 16431`-mno-odd-spreg'. 16432 16433 16434File: as.info, Node: MIPS FP ABI Compatibility, Prev: MIPS FP ABI Selection, Up: MIPS FP ABIs 16435 164369.27.9.4 Linking different FP ABI variants 16437.......................................... 16438 16439Modules using the default FP ABI (no floating-point) can be linked with 16440any other (singular) FP ABI variant. 16441 16442 Special compatibility support exists for O32 with the four 16443double-precision FP ABI variants. The `-mfpxx' FP ABI is specifically 16444designed to be compatible with the standard double-precision ABI and the 16445`-mfp64' FP ABIs. This makes it desirable for O32 modules to be built 16446as `-mfpxx' to ensure the maximum compatibility with other modules 16447produced for more specific needs. The only FP ABIs which cannot be 16448linked together are the standard double-precision ABI and the full 16449`-mfp64' ABI with `-modd-spreg'. 16450 16451 16452File: as.info, Node: MIPS NaN Encodings, Next: MIPS Option Stack, Prev: MIPS FP ABIs, Up: MIPS-Dependent 16453 164549.27.10 Directives to record which NaN encoding is being used 16455------------------------------------------------------------- 16456 16457The IEEE 754 floating-point standard defines two types of not-a-number 16458(NaN) data: "signalling" NaNs and "quiet" NaNs. The original version 16459of the standard did not specify how these two types should be 16460distinguished. Most implementations followed the i387 model, in which 16461the first bit of the significand is set for quiet NaNs and clear for 16462signalling NaNs. However, the original MIPS implementation assigned the 16463opposite meaning to the bit, so that it was set for signalling NaNs and 16464clear for quiet NaNs. 16465 16466 The 2008 revision of the standard formally suggested the i387 choice 16467and as from Sep 2012 the current release of the MIPS architecture 16468therefore optionally supports that form. Code that uses one NaN 16469encoding would usually be incompatible with code that uses the other 16470NaN encoding, so MIPS ELF objects have a flag (`EF_MIPS_NAN2008') to 16471record which encoding is being used. 16472 16473 Assembly files can use the `.nan' directive to select between the 16474two encodings. `.nan 2008' says that the assembly file uses the IEEE 16475754-2008 encoding while `.nan legacy' says that the file uses the 16476original MIPS encoding. If several `.nan' directives are given, the 16477final setting is the one that is used. 16478 16479 The command-line options `-mnan=legacy' and `-mnan=2008' can be used 16480instead of `.nan legacy' and `.nan 2008' respectively. However, any 16481`.nan' directive overrides the command-line setting. 16482 16483 `.nan legacy' is the default if no `.nan' directive or `-mnan' 16484option is given. 16485 16486 Note that GNU `as' does not produce NaNs itself and therefore these 16487directives do not affect code generation. They simply control the 16488setting of the `EF_MIPS_NAN2008' flag. 16489 16490 Traditional MIPS assemblers do not support these directives. 16491 16492 16493File: as.info, Node: MIPS Option Stack, Next: MIPS ASE Instruction Generation Overrides, Prev: MIPS NaN Encodings, Up: MIPS-Dependent 16494 164959.27.11 Directives to save and restore options 16496---------------------------------------------- 16497 16498The directives `.set push' and `.set pop' may be used to save and 16499restore the current settings for all the options which are controlled 16500by `.set'. The `.set push' directive saves the current settings on a 16501stack. The `.set pop' directive pops the stack and restores the 16502settings. 16503 16504 These directives can be useful inside an macro which must change an 16505option such as the ISA level or instruction reordering but does not want 16506to change the state of the code which invoked the macro. 16507 16508 Traditional MIPS assemblers do not support these directives. 16509 16510 16511File: as.info, Node: MIPS ASE Instruction Generation Overrides, Next: MIPS Floating-Point, Prev: MIPS Option Stack, Up: MIPS-Dependent 16512 165139.27.12 Directives to control generation of MIPS ASE instructions 16514----------------------------------------------------------------- 16515 16516The directive `.set mips3d' makes the assembler accept instructions 16517from the MIPS-3D Application Specific Extension from that point on in 16518the assembly. The `.set nomips3d' directive prevents MIPS-3D 16519instructions from being accepted. 16520 16521 The directive `.set smartmips' makes the assembler accept 16522instructions from the SmartMIPS Application Specific Extension to the 16523MIPS32 ISA from that point on in the assembly. The `.set nosmartmips' 16524directive prevents SmartMIPS instructions from being accepted. 16525 16526 The directive `.set mdmx' makes the assembler accept instructions 16527from the MDMX Application Specific Extension from that point on in the 16528assembly. The `.set nomdmx' directive prevents MDMX instructions from 16529being accepted. 16530 16531 The directive `.set dsp' makes the assembler accept instructions 16532from the DSP Release 1 Application Specific Extension from that point 16533on in the assembly. The `.set nodsp' directive prevents DSP Release 1 16534instructions from being accepted. 16535 16536 The directive `.set dspr2' makes the assembler accept instructions 16537from the DSP Release 2 Application Specific Extension from that point 16538on in the assembly. This directive implies `.set dsp'. The `.set 16539nodspr2' directive prevents DSP Release 2 instructions from being 16540accepted. 16541 16542 The directive `.set dspr3' makes the assembler accept instructions 16543from the DSP Release 3 Application Specific Extension from that point 16544on in the assembly. This directive implies `.set dsp' and `.set 16545dspr2'. The `.set nodspr3' directive prevents DSP Release 3 16546instructions from being accepted. 16547 16548 The directive `.set mt' makes the assembler accept instructions from 16549the MT Application Specific Extension from that point on in the 16550assembly. The `.set nomt' directive prevents MT instructions from 16551being accepted. 16552 16553 The directive `.set mcu' makes the assembler accept instructions 16554from the MCU Application Specific Extension from that point on in the 16555assembly. The `.set nomcu' directive prevents MCU instructions from 16556being accepted. 16557 16558 The directive `.set msa' makes the assembler accept instructions 16559from the MIPS SIMD Architecture Extension from that point on in the 16560assembly. The `.set nomsa' directive prevents MSA instructions from 16561being accepted. 16562 16563 The directive `.set virt' makes the assembler accept instructions 16564from the Virtualization Application Specific Extension from that point 16565on in the assembly. The `.set novirt' directive prevents Virtualization 16566instructions from being accepted. 16567 16568 The directive `.set xpa' makes the assembler accept instructions 16569from the XPA Extension from that point on in the assembly. The `.set 16570noxpa' directive prevents XPA instructions from being accepted. 16571 16572 The directive `.set mips16e2' makes the assembler accept instructions 16573from the MIPS16e2 Application Specific Extension from that point on in 16574the assembly, whenever in MIPS16 mode. The `.set nomips16e2' directive 16575prevents MIPS16e2 instructions from being accepted, in MIPS16 mode. 16576Neither directive affects the state of MIPS16 mode being active itself 16577which has separate controls. 16578 16579 The directive `.set crc' makes the assembler accept instructions 16580from the CRC Extension from that point on in the assembly. The `.set 16581nocrc' directive prevents CRC instructions from being accepted. 16582 16583 The directive `.set ginv' makes the assembler accept instructions 16584from the GINV Extension from that point on in the assembly. The `.set 16585noginv' directive prevents GINV instructions from being accepted. 16586 16587 The directive `.set loongson-mmi' makes the assembler accept 16588instructions from the MMI Extension from that point on in the assembly. 16589The `.set noloongson-mmi' directive prevents MMI instructions from 16590being accepted. 16591 16592 The directive `.set loongson-cam' makes the assembler accept 16593instructions from the Loongson CAM from that point on in the assembly. 16594The `.set noloongson-cam' directive prevents Loongson CAM instructions 16595from being accepted. 16596 16597 The directive `.set loongson-ext' makes the assembler accept 16598instructions from the Loongson EXT from that point on in the assembly. 16599The `.set noloongson-ext' directive prevents Loongson EXT instructions 16600from being accepted. 16601 16602 The directive `.set loongson-ext2' makes the assembler accept 16603instructions from the Loongson EXT2 from that point on in the assembly. 16604This directive implies `.set loognson-ext'. The `.set noloongson-ext2' 16605directive prevents Loongson EXT2 instructions from being accepted. 16606 16607 Traditional MIPS assemblers do not support these directives. 16608 16609 16610File: as.info, Node: MIPS Floating-Point, Next: MIPS Syntax, Prev: MIPS ASE Instruction Generation Overrides, Up: MIPS-Dependent 16611 166129.27.13 Directives to override floating-point options 16613----------------------------------------------------- 16614 16615The directives `.set softfloat' and `.set hardfloat' provide finer 16616control of disabling and enabling float-point instructions. These 16617directives always override the default (that hard-float instructions 16618are accepted) or the command-line options (`-msoft-float' and 16619`-mhard-float'). 16620 16621 The directives `.set singlefloat' and `.set doublefloat' provide 16622finer control of disabling and enabling double-precision float-point 16623operations. These directives always override the default (that 16624double-precision operations are accepted) or the command-line options 16625(`-msingle-float' and `-mdouble-float'). 16626 16627 Traditional MIPS assemblers do not support these directives. 16628 16629 16630File: as.info, Node: MIPS Syntax, Prev: MIPS Floating-Point, Up: MIPS-Dependent 16631 166329.27.14 Syntactical considerations for the MIPS assembler 16633--------------------------------------------------------- 16634 16635* Menu: 16636 16637* MIPS-Chars:: Special Characters 16638 16639 16640File: as.info, Node: MIPS-Chars, Up: MIPS Syntax 16641 166429.27.14.1 Special Characters 16643............................ 16644 16645The presence of a `#' on a line indicates the start of a comment that 16646extends to the end of the current line. 16647 16648 If a `#' appears as the first character of a line, the whole line is 16649treated as a comment, but in this case the line can also be a logical 16650line number directive (*note Comments::) or a preprocessor control 16651command (*note Preprocessing::). 16652 16653 The `;' character can be used to separate statements on the same 16654line. 16655 16656 16657File: as.info, Node: MMIX-Dependent, Next: MSP430-Dependent, Prev: MIPS-Dependent, Up: Machine Dependencies 16658 166599.28 MMIX Dependent Features 16660============================ 16661 16662* Menu: 16663 16664* MMIX-Opts:: Command-line Options 16665* MMIX-Expand:: Instruction expansion 16666* MMIX-Syntax:: Syntax 16667* MMIX-mmixal:: Differences to `mmixal' syntax and semantics 16668 16669 16670File: as.info, Node: MMIX-Opts, Next: MMIX-Expand, Up: MMIX-Dependent 16671 166729.28.1 Command-line Options 16673--------------------------- 16674 16675The MMIX version of `as' has some machine-dependent options. 16676 16677 When `--fixed-special-register-names' is specified, only the register 16678names specified in *Note MMIX-Regs:: are recognized in the instructions 16679`PUT' and `GET'. 16680 16681 You can use the `--globalize-symbols' to make all symbols global. 16682This option is useful when splitting up a `mmixal' program into several 16683files. 16684 16685 The `--gnu-syntax' turns off most syntax compatibility with 16686`mmixal'. Its usability is currently doubtful. 16687 16688 The `--relax' option is not fully supported, but will eventually make 16689the object file prepared for linker relaxation. 16690 16691 If you want to avoid inadvertently calling a predefined symbol and 16692would rather get an error, for example when using `as' with a compiler 16693or other machine-generated code, specify `--no-predefined-syms'. This 16694turns off built-in predefined definitions of all such symbols, 16695including rounding-mode symbols, segment symbols, `BIT' symbols, and 16696`TRAP' symbols used in `mmix' "system calls". It also turns off 16697predefined special-register names, except when used in `PUT' and `GET' 16698instructions. 16699 16700 By default, some instructions are expanded to fit the size of the 16701operand or an external symbol (*note MMIX-Expand::). By passing 16702`--no-expand', no such expansion will be done, instead causing errors 16703at link time if the operand does not fit. 16704 16705 The `mmixal' documentation (*note mmixsite::) specifies that global 16706registers allocated with the `GREG' directive (*note MMIX-greg::) and 16707initialized to the same non-zero value, will refer to the same global 16708register. This isn't strictly enforceable in `as' since the final 16709addresses aren't known until link-time, but it will do an effort unless 16710the `--no-merge-gregs' option is specified. (Register merging isn't 16711yet implemented in `ld'.) 16712 16713 `as' will warn every time it expands an instruction to fit an 16714operand unless the option `-x' is specified. It is believed that this 16715behaviour is more useful than just mimicking `mmixal''s behaviour, in 16716which instructions are only expanded if the `-x' option is specified, 16717and assembly fails otherwise, when an instruction needs to be expanded. 16718It needs to be kept in mind that `mmixal' is both an assembler and 16719linker, while `as' will expand instructions that at link stage can be 16720contracted. (Though linker relaxation isn't yet implemented in `ld'.) 16721The option `-x' also implies `--linker-allocated-gregs'. 16722 16723 If instruction expansion is enabled, `as' can expand a `PUSHJ' 16724instruction into a series of instructions. The shortest expansion is 16725to not expand it, but just mark the call as redirectable to a stub, 16726which `ld' creates at link-time, but only if the original `PUSHJ' 16727instruction is found not to reach the target. The stub consists of the 16728necessary instructions to form a jump to the target. This happens if 16729`as' can assert that the `PUSHJ' instruction can reach such a stub. 16730The option `--no-pushj-stubs' disables this shorter expansion, and the 16731longer series of instructions is then created at assembly-time. The 16732option `--no-stubs' is a synonym, intended for compatibility with 16733future releases, where generation of stubs for other instructions may 16734be implemented. 16735 16736 Usually a two-operand-expression (*note GREG-base::) without a 16737matching `GREG' directive is treated as an error by `as'. When the 16738option `--linker-allocated-gregs' is in effect, they are instead passed 16739through to the linker, which will allocate as many global registers as 16740is needed. 16741 16742 16743File: as.info, Node: MMIX-Expand, Next: MMIX-Syntax, Prev: MMIX-Opts, Up: MMIX-Dependent 16744 167459.28.2 Instruction expansion 16746---------------------------- 16747 16748When `as' encounters an instruction with an operand that is either not 16749known or does not fit the operand size of the instruction, `as' (and 16750`ld') will expand the instruction into a sequence of instructions 16751semantically equivalent to the operand fitting the instruction. 16752Expansion will take place for the following instructions: 16753 16754`GETA' 16755 Expands to a sequence of four instructions: `SETL', `INCML', 16756 `INCMH' and `INCH'. The operand must be a multiple of four. 16757 16758Conditional branches 16759 A branch instruction is turned into a branch with the complemented 16760 condition and prediction bit over five instructions; four 16761 instructions setting `$255' to the operand value, which like with 16762 `GETA' must be a multiple of four, and a final `GO $255,$255,0'. 16763 16764`PUSHJ' 16765 Similar to expansion for conditional branches; four instructions 16766 set `$255' to the operand value, followed by a `PUSHGO 16767 $255,$255,0'. 16768 16769`JMP' 16770 Similar to conditional branches and `PUSHJ'. The final instruction 16771 is `GO $255,$255,0'. 16772 16773 The linker `ld' is expected to shrink these expansions for code 16774assembled with `--relax' (though not currently implemented). 16775 16776 16777File: as.info, Node: MMIX-Syntax, Next: MMIX-mmixal, Prev: MMIX-Expand, Up: MMIX-Dependent 16778 167799.28.3 Syntax 16780------------- 16781 16782The assembly syntax is supposed to be upward compatible with that 16783described in Sections 1.3 and 1.4 of `The Art of Computer Programming, 16784Volume 1'. Draft versions of those chapters as well as other MMIX 16785information is located at 16786`http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html'. Most code 16787examples from the mmixal package located there should work unmodified 16788when assembled and linked as single files, with a few noteworthy 16789exceptions (*note MMIX-mmixal::). 16790 16791 Before an instruction is emitted, the current location is aligned to 16792the next four-byte boundary. If a label is defined at the beginning of 16793the line, its value will be the aligned value. 16794 16795 In addition to the traditional hex-prefix `0x', a hexadecimal number 16796can also be specified by the prefix character `#'. 16797 16798 After all operands to an MMIX instruction or directive have been 16799specified, the rest of the line is ignored, treated as a comment. 16800 16801* Menu: 16802 16803* MMIX-Chars:: Special Characters 16804* MMIX-Symbols:: Symbols 16805* MMIX-Regs:: Register Names 16806* MMIX-Pseudos:: Assembler Directives 16807 16808 16809File: as.info, Node: MMIX-Chars, Next: MMIX-Symbols, Up: MMIX-Syntax 16810 168119.28.3.1 Special Characters 16812........................... 16813 16814The characters `*' and `#' are line comment characters; each start a 16815comment at the beginning of a line, but only at the beginning of a 16816line. A `#' prefixes a hexadecimal number if found elsewhere on a 16817line. If a `#' appears at the start of a line the whole line is 16818treated as a comment, but the line can also act as a logical line 16819number directive (*note Comments::) or a preprocessor control command 16820(*note Preprocessing::). 16821 16822 Two other characters, `%' and `!', each start a comment anywhere on 16823the line. Thus you can't use the `modulus' and `not' operators in 16824expressions normally associated with these two characters. 16825 16826 A `;' is a line separator, treated as a new-line, so separate 16827instructions can be specified on a single line. 16828 16829 16830File: as.info, Node: MMIX-Symbols, Next: MMIX-Regs, Prev: MMIX-Chars, Up: MMIX-Syntax 16831 168329.28.3.2 Symbols 16833................ 16834 16835The character `:' is permitted in identifiers. There are two 16836exceptions to it being treated as any other symbol character: if a 16837symbol begins with `:', it means that the symbol is in the global 16838namespace and that the current prefix should not be prepended to that 16839symbol (*note MMIX-prefix::). The `:' is then not considered part of 16840the symbol. For a symbol in the label position (first on a line), a `:' 16841at the end of a symbol is silently stripped off. A label is permitted, 16842but not required, to be followed by a `:', as with many other assembly 16843formats. 16844 16845 The character `@' in an expression, is a synonym for `.', the 16846current location. 16847 16848 In addition to the common forward and backward local symbol formats 16849(*note Symbol Names::), they can be specified with upper-case `B' and 16850`F', as in `8B' and `9F'. A local label defined for the current 16851position is written with a `H' appended to the number: 16852 3H LDB $0,$1,2 16853 This and traditional local-label formats cannot be mixed: a label 16854must be defined and referred to using the same format. 16855 16856 There's a minor caveat: just as for the ordinary local symbols, the 16857local symbols are translated into ordinary symbols using control 16858characters are to hide the ordinal number of the symbol. 16859Unfortunately, these symbols are not translated back in error messages. 16860Thus you may see confusing error messages when local symbols are used. 16861Control characters `\003' (control-C) and `\004' (control-D) are used 16862for the MMIX-specific local-symbol syntax. 16863 16864 The symbol `Main' is handled specially; it is always global. 16865 16866 By defining the symbols `__.MMIX.start..text' and 16867`__.MMIX.start..data', the address of respectively the `.text' and 16868`.data' segments of the final program can be defined, though when 16869linking more than one object file, the code or data in the object file 16870containing the symbol is not guaranteed to be start at that position; 16871just the final executable. *Note MMIX-loc::. 16872 16873 16874File: as.info, Node: MMIX-Regs, Next: MMIX-Pseudos, Prev: MMIX-Symbols, Up: MMIX-Syntax 16875 168769.28.3.3 Register names 16877....................... 16878 16879Local and global registers are specified as `$0' to `$255'. The 16880recognized special register names are `rJ', `rA', `rB', `rC', `rD', 16881`rE', `rF', `rG', `rH', `rI', `rK', `rL', `rM', `rN', `rO', `rP', `rQ', 16882`rR', `rS', `rT', `rU', `rV', `rW', `rX', `rY', `rZ', `rBB', `rTT', 16883`rWW', `rXX', `rYY' and `rZZ'. A leading `:' is optional for special 16884register names. 16885 16886 Local and global symbols can be equated to register names and used in 16887place of ordinary registers. 16888 16889 Similarly for special registers, local and global symbols can be 16890used. Also, symbols equated from numbers and constant expressions are 16891allowed in place of a special register, except when either of the 16892options `--no-predefined-syms' and `--fixed-special-register-names' are 16893specified. Then only the special register names above are allowed for 16894the instructions having a special register operand; `GET' and `PUT'. 16895 16896 16897File: as.info, Node: MMIX-Pseudos, Prev: MMIX-Regs, Up: MMIX-Syntax 16898 168999.28.3.4 Assembler Directives 16900............................. 16901 16902`LOC' 16903 The `LOC' directive sets the current location to the value of the 16904 operand field, which may include changing sections. If the 16905 operand is a constant, the section is set to either `.data' if the 16906 value is `0x2000000000000000' or larger, else it is set to `.text'. 16907 Within a section, the current location may only be changed to 16908 monotonically higher addresses. A LOC expression must be a 16909 previously defined symbol or a "pure" constant. 16910 16911 An example, which sets the label PREV to the current location, and 16912 updates the current location to eight bytes forward: 16913 prev LOC @+8 16914 16915 When a LOC has a constant as its operand, a symbol 16916 `__.MMIX.start..text' or `__.MMIX.start..data' is defined 16917 depending on the address as mentioned above. Each such symbol is 16918 interpreted as special by the linker, locating the section at that 16919 address. Note that if multiple files are linked, the first object 16920 file with that section will be mapped to that address (not 16921 necessarily the file with the LOC definition). 16922 16923`LOCAL' 16924 Example: 16925 LOCAL external_symbol 16926 LOCAL 42 16927 .local asymbol 16928 16929 This directive-operation generates a link-time assertion that the 16930 operand does not correspond to a global register. The operand is 16931 an expression that at link-time resolves to a register symbol or a 16932 number. A number is treated as the register having that number. 16933 There is one restriction on the use of this directive: the 16934 pseudo-directive must be placed in a section with contents, code 16935 or data. 16936 16937`IS' 16938 The `IS' directive: 16939 asymbol IS an_expression 16940 sets the symbol `asymbol' to `an_expression'. A symbol may not be 16941 set more than once using this directive. Local labels may be set 16942 using this directive, for example: 16943 5H IS @+4 16944 16945`GREG' 16946 This directive reserves a global register, gives it an initial 16947 value and optionally gives it a symbolic name. Some examples: 16948 16949 areg GREG 16950 breg GREG data_value 16951 GREG data_buffer 16952 .greg creg, another_data_value 16953 16954 The symbolic register name can be used in place of a (non-special) 16955 register. If a value isn't provided, it defaults to zero. Unless 16956 the option `--no-merge-gregs' is specified, non-zero registers 16957 allocated with this directive may be eliminated by `as'; another 16958 register with the same value used in its place. Any of the 16959 instructions `CSWAP', `GO', `LDA', `LDBU', `LDB', `LDHT', `LDOU', 16960 `LDO', `LDSF', `LDTU', `LDT', `LDUNC', `LDVTS', `LDWU', `LDW', 16961 `PREGO', `PRELD', `PREST', `PUSHGO', `STBU', `STB', `STCO', `STHT', 16962 `STOU', `STSF', `STTU', `STT', `STUNC', `SYNCD', `SYNCID', can 16963 have a value nearby an initial value in place of its second and 16964 third operands. Here, "nearby" is defined as within the range 16965 0...255 from the initial value of such an allocated register. 16966 16967 buffer1 BYTE 0,0,0,0,0 16968 buffer2 BYTE 0,0,0,0,0 16969 ... 16970 GREG buffer1 16971 LDOU $42,buffer2 16972 In the example above, the `Y' field of the `LDOUI' instruction 16973 (LDOU with a constant Z) will be replaced with the global register 16974 allocated for `buffer1', and the `Z' field will have the value 5, 16975 the offset from `buffer1' to `buffer2'. The result is equivalent 16976 to this code: 16977 buffer1 BYTE 0,0,0,0,0 16978 buffer2 BYTE 0,0,0,0,0 16979 ... 16980 tmpreg GREG buffer1 16981 LDOU $42,tmpreg,(buffer2-buffer1) 16982 16983 Global registers allocated with this directive are allocated in 16984 order higher-to-lower within a file. Other than that, the exact 16985 order of register allocation and elimination is undefined. For 16986 example, the order is undefined when more than one file with such 16987 directives are linked together. With the options `-x' and 16988 `--linker-allocated-gregs', `GREG' directives for two-operand 16989 cases like the one mentioned above can be omitted. Sufficient 16990 global registers will then be allocated by the linker. 16991 16992`BYTE' 16993 The `BYTE' directive takes a series of operands separated by a 16994 comma. If an operand is a string (*note Strings::), each 16995 character of that string is emitted as a byte. Other operands 16996 must be constant expressions without forward references, in the 16997 range 0...255. If you need operands having expressions with 16998 forward references, use `.byte' (*note Byte::). An operand can be 16999 omitted, defaulting to a zero value. 17000 17001`WYDE' 17002`TETRA' 17003`OCTA' 17004 The directives `WYDE', `TETRA' and `OCTA' emit constants of two, 17005 four and eight bytes size respectively. Before anything else 17006 happens for the directive, the current location is aligned to the 17007 respective constant-size boundary. If a label is defined at the 17008 beginning of the line, its value will be that after the alignment. 17009 A single operand can be omitted, defaulting to a zero value 17010 emitted for the directive. Operands can be expressed as strings 17011 (*note Strings::), in which case each character in the string is 17012 emitted as a separate constant of the size indicated by the 17013 directive. 17014 17015`PREFIX' 17016 The `PREFIX' directive sets a symbol name prefix to be prepended to 17017 all symbols (except local symbols, *note MMIX-Symbols::), that are 17018 not prefixed with `:', until the next `PREFIX' directive. Such 17019 prefixes accumulate. For example, 17020 PREFIX a 17021 PREFIX b 17022 c IS 0 17023 defines a symbol `abc' with the value 0. 17024 17025`BSPEC' 17026`ESPEC' 17027 A pair of `BSPEC' and `ESPEC' directives delimit a section of 17028 special contents (without specified semantics). Example: 17029 BSPEC 42 17030 TETRA 1,2,3 17031 ESPEC 17032 The single operand to `BSPEC' must be number in the range 0...255. 17033 The `BSPEC' number 80 is used by the GNU binutils implementation. 17034 17035 17036File: as.info, Node: MMIX-mmixal, Prev: MMIX-Syntax, Up: MMIX-Dependent 17037 170389.28.4 Differences to `mmixal' 17039------------------------------ 17040 17041The binutils `as' and `ld' combination has a few differences in 17042function compared to `mmixal' (*note mmixsite::). 17043 17044 The replacement of a symbol with a GREG-allocated register (*note 17045GREG-base::) is not handled the exactly same way in `as' as in 17046`mmixal'. This is apparent in the `mmixal' example file `inout.mms', 17047where different registers with different offsets, eventually yielding 17048the same address, are used in the first instruction. This type of 17049difference should however not affect the function of any program unless 17050it has specific assumptions about the allocated register number. 17051 17052 Line numbers (in the `mmo' object format) are currently not 17053supported. 17054 17055 Expression operator precedence is not that of mmixal: operator 17056precedence is that of the C programming language. It's recommended to 17057use parentheses to explicitly specify wanted operator precedence 17058whenever more than one type of operators are used. 17059 17060 The serialize unary operator `&', the fractional division operator 17061`//', the logical not operator `!' and the modulus operator `%' are not 17062available. 17063 17064 Symbols are not global by default, unless the option 17065`--globalize-symbols' is passed. Use the `.global' directive to 17066globalize symbols (*note Global::). 17067 17068 Operand syntax is a bit stricter with `as' than `mmixal'. For 17069example, you can't say `addu 1,2,3', instead you must write `addu 17070$1,$2,3'. 17071 17072 You can't LOC to a lower address than those already visited (i.e., 17073"backwards"). 17074 17075 A LOC directive must come before any emitted code. 17076 17077 Predefined symbols are visible as file-local symbols after use. (In 17078the ELF file, that is--the linked mmo file has no notion of a file-local 17079symbol.) 17080 17081 Some mapping of constant expressions to sections in LOC expressions 17082is attempted, but that functionality is easily confused and should be 17083avoided unless compatibility with `mmixal' is required. A LOC 17084expression to `0x2000000000000000' or higher, maps to the `.data' 17085section and lower addresses map to the `.text' section (*note 17086MMIX-loc::). 17087 17088 The code and data areas are each contiguous. Sparse programs with 17089far-away LOC directives will take up the same amount of space as a 17090contiguous program with zeros filled in the gaps between the LOC 17091directives. If you need sparse programs, you might try and get the 17092wanted effect with a linker script and splitting up the code parts into 17093sections (*note Section::). Assembly code for this, to be compatible 17094with `mmixal', would look something like: 17095 .if 0 17096 LOC away_expression 17097 .else 17098 .section away,"ax" 17099 .fi 17100 `as' will not execute the LOC directive and `mmixal' ignores the 17101lines with `.'. This construct can be used generally to help 17102compatibility. 17103 17104 Symbols can't be defined twice-not even to the same value. 17105 17106 Instruction mnemonics are recognized case-insensitive, though the 17107`IS' and `GREG' pseudo-operations must be specified in upper-case 17108characters. 17109 17110 There's no unicode support. 17111 17112 The following is a list of programs in `mmix.tar.gz', available at 17113`http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html', last 17114checked with the version dated 2001-08-25 (md5sum 17115c393470cfc86fac040487d22d2bf0172) that assemble with `mmixal' but do 17116not assemble with `as': 17117 17118`silly.mms' 17119 LOC to a previous address. 17120 17121`sim.mms' 17122 Redefines symbol `Done'. 17123 17124`test.mms' 17125 Uses the serial operator `&'. 17126 17127 17128File: as.info, Node: MSP430-Dependent, Next: NDS32-Dependent, Prev: MMIX-Dependent, Up: Machine Dependencies 17129 171309.29 MSP 430 Dependent Features 17131=============================== 17132 17133* Menu: 17134 17135* MSP430 Options:: Options 17136* MSP430 Syntax:: Syntax 17137* MSP430 Floating Point:: Floating Point 17138* MSP430 Directives:: MSP 430 Machine Directives 17139* MSP430 Opcodes:: Opcodes 17140* MSP430 Profiling Capability:: Profiling Capability 17141 17142 17143File: as.info, Node: MSP430 Options, Next: MSP430 Syntax, Up: MSP430-Dependent 17144 171459.29.1 Options 17146-------------- 17147 17148`-mmcu' 17149 selects the mcu architecture. If the architecture is 430Xv2 then 17150 this also enables NOP generation unless the `-mN' is also 17151 specified. 17152 17153`-mcpu' 17154 selects the cpu architecture. If the architecture is 430Xv2 then 17155 this also enables NOP generation unless the `-mN' is also 17156 specified. 17157 17158`-msilicon-errata=NAME[,NAME...]' 17159 Implements a fixup for named silicon errata. Multiple silicon 17160 errata can be specified by multiple uses of the `-msilicon-errata' 17161 option and/or by including the errata names, separated by commas, 17162 on an individual `-msilicon-errata' option. Errata names 17163 currently recognised by the assembler are: 17164 17165 `cpu4' 17166 `PUSH #4' and `PUSH #8' need longer encodings on the MSP430. 17167 This option is enabled by default, and cannot be disabled. 17168 17169 `cpu8' 17170 Do not set the `SP' to an odd value. 17171 17172 `cpu11' 17173 Do not update the `SR' and the `PC' in the same instruction. 17174 17175 `cpu12' 17176 Do not use the `PC' in a `CMP' or `BIT' instruction. 17177 17178 `cpu13' 17179 Do not use an arithmetic instruction to modify the `SR'. 17180 17181 `cpu19' 17182 Insert `NOP' after `CPUOFF'. 17183 17184`-msilicon-errata-warn=NAME[,NAME...]' 17185 Like the `-msilicon-errata' option except that instead of fixing 17186 the specified errata, a warning message is issued instead. This 17187 option can be used alongside `-msilicon-errata' to generate 17188 messages whenever a problem is fixed, or on its own in order to 17189 inspect code for potential problems. 17190 17191`-mP' 17192 enables polymorph instructions handler. 17193 17194`-mQ' 17195 enables relaxation at assembly time. DANGEROUS! 17196 17197`-ml' 17198 indicates that the input uses the large code model. 17199 17200`-mn' 17201 enables the generation of a NOP instruction following any 17202 instruction that might change the interrupts enabled/disabled 17203 state. The pipelined nature of the MSP430 core means that any 17204 instruction that changes the interrupt state (`EINT', `DINT', `BIC 17205 #8, SR', `BIS #8, SR' or `MOV.W <>, SR') must be followed by a NOP 17206 instruction in order to ensure the correct processing of 17207 interrupts. By default it is up to the programmer to supply these 17208 NOP instructions, but this command-line option enables the 17209 automatic insertion by the assembler, if they are missing. 17210 17211`-mN' 17212 disables the generation of a NOP instruction following any 17213 instruction that might change the interrupts enabled/disabled 17214 state. This is the default behaviour. 17215 17216`-my' 17217 tells the assembler to generate a warning message if a NOP does not 17218 immediately follow an instruction that enables or disables 17219 interrupts. This is the default. 17220 17221 Note that this option can be stacked with the `-mn' option so that 17222 the assembler will both warn about missing NOP instructions and 17223 then insert them automatically. 17224 17225`-mY' 17226 disables warnings about missing NOP instructions. 17227 17228`-md' 17229 mark the object file as one that requires data to copied from ROM 17230 to RAM at execution startup. Disabled by default. 17231 17232`-mdata-region=REGION' 17233 Select the region data will be placed in. Region placement is 17234 performed by the compiler and linker. The only effect this option 17235 will have on the assembler is that if UPPER or EITHER is selected, 17236 then the symbols to initialise high data and bss will be defined. 17237 Valid REGION values are: 17238 `none' 17239 17240 `lower' 17241 17242 `upper' 17243 17244 `either' 17245 17246 17247 17248File: as.info, Node: MSP430 Syntax, Next: MSP430 Floating Point, Prev: MSP430 Options, Up: MSP430-Dependent 17249 172509.29.2 Syntax 17251------------- 17252 17253* Menu: 17254 17255* MSP430-Macros:: Macros 17256* MSP430-Chars:: Special Characters 17257* MSP430-Regs:: Register Names 17258* MSP430-Ext:: Assembler Extensions 17259 17260 17261File: as.info, Node: MSP430-Macros, Next: MSP430-Chars, Up: MSP430 Syntax 17262 172639.29.2.1 Macros 17264............... 17265 17266The macro syntax used on the MSP 430 is like that described in the MSP 17267430 Family Assembler Specification. Normal `as' macros should still 17268work. 17269 17270 Additional built-in macros are: 17271 17272`llo(exp)' 17273 Extracts least significant word from 32-bit expression 'exp'. 17274 17275`lhi(exp)' 17276 Extracts most significant word from 32-bit expression 'exp'. 17277 17278`hlo(exp)' 17279 Extracts 3rd word from 64-bit expression 'exp'. 17280 17281`hhi(exp)' 17282 Extracts 4rd word from 64-bit expression 'exp'. 17283 17284 17285 They normally being used as an immediate source operand. 17286 mov #llo(1), r10 ; == mov #1, r10 17287 mov #lhi(1), r10 ; == mov #0, r10 17288 17289 17290File: as.info, Node: MSP430-Chars, Next: MSP430-Regs, Prev: MSP430-Macros, Up: MSP430 Syntax 17291 172929.29.2.2 Special Characters 17293........................... 17294 17295A semicolon (`;') appearing anywhere on a line starts a comment that 17296extends to the end of that line. 17297 17298 If a `#' appears as the first character of a line then the whole 17299line is treated as a comment, but it can also be a logical line number 17300directive (*note Comments::) or a preprocessor control command (*note 17301Preprocessing::). 17302 17303 Multiple statements can appear on the same line provided that they 17304are separated by the `{' character. 17305 17306 The character `$' in jump instructions indicates current location and 17307implemented only for TI syntax compatibility. 17308 17309 17310File: as.info, Node: MSP430-Regs, Next: MSP430-Ext, Prev: MSP430-Chars, Up: MSP430 Syntax 17311 173129.29.2.3 Register Names 17313....................... 17314 17315General-purpose registers are represented by predefined symbols of the 17316form `rN' (for global registers), where N represents a number between 17317`0' and `15'. The leading letters may be in either upper or lower 17318case; for example, `r13' and `R7' are both valid register names. 17319 17320 Register names `PC', `SP' and `SR' cannot be used as register names 17321and will be treated as variables. Use `r0', `r1', and `r2' instead. 17322 17323 17324File: as.info, Node: MSP430-Ext, Prev: MSP430-Regs, Up: MSP430 Syntax 17325 173269.29.2.4 Assembler Extensions 17327............................. 17328 17329`@rN' 17330 As destination operand being treated as `0(rn)' 17331 17332`0(rN)' 17333 As source operand being treated as `@rn' 17334 17335`jCOND +N' 17336 Skips next N bytes followed by jump instruction and equivalent to 17337 `jCOND $+N+2' 17338 17339 17340 Also, there are some instructions, which cannot be found in other 17341assemblers. These are branch instructions, which has different opcodes 17342upon jump distance. They all got PC relative addressing mode. 17343 17344`beq label' 17345 A polymorph instruction which is `jeq label' in case if jump 17346 distance within allowed range for cpu's jump instruction. If not, 17347 this unrolls into a sequence of 17348 jne $+6 17349 br label 17350 17351`bne label' 17352 A polymorph instruction which is `jne label' or `jeq +4; br label' 17353 17354`blt label' 17355 A polymorph instruction which is `jl label' or `jge +4; br label' 17356 17357`bltn label' 17358 A polymorph instruction which is `jn label' or `jn +2; jmp +4; br 17359 label' 17360 17361`bltu label' 17362 A polymorph instruction which is `jlo label' or `jhs +2; br label' 17363 17364`bge label' 17365 A polymorph instruction which is `jge label' or `jl +4; br label' 17366 17367`bgeu label' 17368 A polymorph instruction which is `jhs label' or `jlo +4; br label' 17369 17370`bgt label' 17371 A polymorph instruction which is `jeq +2; jge label' or `jeq +6; 17372 jl +4; br label' 17373 17374`bgtu label' 17375 A polymorph instruction which is `jeq +2; jhs label' or `jeq +6; 17376 jlo +4; br label' 17377 17378`bleu label' 17379 A polymorph instruction which is `jeq label; jlo label' or `jeq 17380 +2; jhs +4; br label' 17381 17382`ble label' 17383 A polymorph instruction which is `jeq label; jl label' or `jeq 17384 +2; jge +4; br label' 17385 17386`jump label' 17387 A polymorph instruction which is `jmp label' or `br label' 17388 17389 17390File: as.info, Node: MSP430 Floating Point, Next: MSP430 Directives, Prev: MSP430 Syntax, Up: MSP430-Dependent 17391 173929.29.3 Floating Point 17393--------------------- 17394 17395The MSP 430 family uses IEEE 32-bit floating-point numbers. 17396 17397 17398File: as.info, Node: MSP430 Directives, Next: MSP430 Opcodes, Prev: MSP430 Floating Point, Up: MSP430-Dependent 17399 174009.29.4 MSP 430 Machine Directives 17401--------------------------------- 17402 17403`.file' 17404 This directive is ignored; it is accepted for compatibility with 17405 other MSP 430 assemblers. 17406 17407 _Warning:_ in other versions of the GNU assembler, `.file' is 17408 used for the directive called `.app-file' in the MSP 430 17409 support. 17410 17411`.line' 17412 This directive is ignored; it is accepted for compatibility with 17413 other MSP 430 assemblers. 17414 17415`.arch' 17416 Sets the target microcontroller in the same way as the `-mmcu' 17417 command-line option. 17418 17419`.cpu' 17420 Sets the target architecture in the same way as the `-mcpu' 17421 command-line option. 17422 17423`.profiler' 17424 This directive instructs assembler to add new profile entry to the 17425 object file. 17426 17427`.refsym' 17428 This directive instructs assembler to add an undefined reference to 17429 the symbol following the directive. The maximum symbol name 17430 length is 1023 characters. No relocation is created for this 17431 symbol; it will exist purely for pulling in object files from 17432 archives. Note that this reloc is not sufficient to prevent 17433 garbage collection; use a KEEP() directive in the linker file to 17434 preserve such objects. 17435 17436`.mspabi_attribute' 17437 This directive tells the assembler what the MSPABI build 17438 attributes for this file are. This is used for validating the 17439 command line options passed to the assembler against the options 17440 the original source file was compiled with. The expected format 17441 is: `.mspabi_attribute tag_name, tag_value' For example, to set 17442 the tag `OFBA_MSPABI_Tag_ISA' to `MSP430X': `.mspabi_attribute 4, 17443 2' 17444 17445 See the `MSP430 EABI, document slaa534' for the details on tag 17446 names and values. 17447 17448 17449File: as.info, Node: MSP430 Opcodes, Next: MSP430 Profiling Capability, Prev: MSP430 Directives, Up: MSP430-Dependent 17450 174519.29.5 Opcodes 17452-------------- 17453 17454`as' implements all the standard MSP 430 opcodes. No additional 17455pseudo-instructions are needed on this family. 17456 17457 For information on the 430 machine instruction set, see `MSP430 17458User's Manual, document slau049d', Texas Instrument, Inc. 17459 17460 17461File: as.info, Node: MSP430 Profiling Capability, Prev: MSP430 Opcodes, Up: MSP430-Dependent 17462 174639.29.6 Profiling Capability 17464--------------------------- 17465 17466It is a performance hit to use gcc's profiling approach for this tiny 17467target. Even more - jtag hardware facility does not perform any 17468profiling functions. However we've got gdb's built-in simulator where 17469we can do anything. 17470 17471 We define new section `.profiler' which holds all profiling 17472information. We define new pseudo operation `.profiler' which will 17473instruct assembler to add new profile entry to the object file. Profile 17474should take place at the present address. 17475 17476 Pseudo operation format: 17477 17478 `.profiler flags,function_to_profile [, cycle_corrector, extra]' 17479 17480 where: 17481 17482 `flags' is a combination of the following characters: 17483 17484 `s' 17485 function entry 17486 17487 `x' 17488 function exit 17489 17490 `i' 17491 function is in init section 17492 17493 `f' 17494 function is in fini section 17495 17496 `l' 17497 library call 17498 17499 `c' 17500 libc standard call 17501 17502 `d' 17503 stack value demand 17504 17505 `I' 17506 interrupt service routine 17507 17508 `P' 17509 prologue start 17510 17511 `p' 17512 prologue end 17513 17514 `E' 17515 epilogue start 17516 17517 `e' 17518 epilogue end 17519 17520 `j' 17521 long jump / sjlj unwind 17522 17523 `a' 17524 an arbitrary code fragment 17525 17526 `t' 17527 extra parameter saved (a constant value like frame size) 17528 17529`function_to_profile' 17530 a function address 17531 17532`cycle_corrector' 17533 a value which should be added to the cycle counter, zero if 17534 omitted. 17535 17536`extra' 17537 any extra parameter, zero if omitted. 17538 17539 17540 For example: 17541 .global fxx 17542 .type fxx,@function 17543 fxx: 17544 .LFrameOffset_fxx=0x08 17545 .profiler "scdP", fxx ; function entry. 17546 ; we also demand stack value to be saved 17547 push r11 17548 push r10 17549 push r9 17550 push r8 17551 .profiler "cdpt",fxx,0, .LFrameOffset_fxx ; check stack value at this point 17552 ; (this is a prologue end) 17553 ; note, that spare var filled with 17554 ; the farme size 17555 mov r15,r8 17556 ... 17557 .profiler cdE,fxx ; check stack 17558 pop r8 17559 pop r9 17560 pop r10 17561 pop r11 17562 .profiler xcde,fxx,3 ; exit adds 3 to the cycle counter 17563 ret ; cause 'ret' insn takes 3 cycles 17564 17565 17566File: as.info, Node: NDS32-Dependent, Next: NiosII-Dependent, Prev: MSP430-Dependent, Up: Machine Dependencies 17567 175689.30 NDS32 Dependent Features 17569============================= 17570 17571 The NDS32 processors family includes high-performance and low-power 1757232-bit processors for high-end to low-end. GNU `as' for NDS32 17573architectures supports NDS32 ISA version 3. For detail about NDS32 17574instruction set, please see the AndeStar ISA User Manual which is 17575available at http://www.andestech.com/en/index/index.htm 17576 17577* Menu: 17578 17579* NDS32 Options:: Assembler options 17580* NDS32 Syntax:: High-level assembly macros 17581 17582 17583File: as.info, Node: NDS32 Options, Next: NDS32 Syntax, Up: NDS32-Dependent 17584 175859.30.1 NDS32 Options 17586-------------------- 17587 17588The NDS32 configurations of GNU `as' support these special options: 17589 17590`-O1' 17591 Optimize for performance. 17592 17593`-Os' 17594 Optimize for space. 17595 17596`-EL' 17597 Produce little endian data output. 17598 17599`-EB' 17600 Produce little endian data output. 17601 17602`-mpic' 17603 Generate PIC. 17604 17605`-mno-fp-as-gp-relax' 17606 Suppress fp-as-gp relaxation for this file. 17607 17608`-mb2bb-relax' 17609 Back-to-back branch optimization. 17610 17611`-mno-all-relax' 17612 Suppress all relaxation for this file. 17613 17614`-march=<arch name>' 17615 Assemble for architecture <arch name> which could be v3, v3j, v3m, 17616 v3f, v3s, v2, v2j, v2f, v2s. 17617 17618`-mbaseline=<baseline>' 17619 Assemble for baseline <baseline> which could be v2, v3, v3m. 17620 17621`-mfpu-freg=FREG' 17622 Specify a FPU configuration. 17623 `0 8 SP / 4 DP registers' 17624 17625 `1 16 SP / 8 DP registers' 17626 17627 `2 32 SP / 16 DP registers' 17628 17629 `3 32 SP / 32 DP registers' 17630 17631`-mabi=ABI' 17632 Specify a abi version <abi> could be v1, v2, v2fp, v2fpp. 17633 17634`-m[no-]mac' 17635 Enable/Disable Multiply instructions support. 17636 17637`-m[no-]div' 17638 Enable/Disable Divide instructions support. 17639 17640`-m[no-]16bit-ext' 17641 Enable/Disable 16-bit extension 17642 17643`-m[no-]dx-regs' 17644 Enable/Disable d0/d1 registers 17645 17646`-m[no-]perf-ext' 17647 Enable/Disable Performance extension 17648 17649`-m[no-]perf2-ext' 17650 Enable/Disable Performance extension 2 17651 17652`-m[no-]string-ext' 17653 Enable/Disable String extension 17654 17655`-m[no-]reduced-regs' 17656 Enable/Disable Reduced Register configuration (GPR16) option 17657 17658`-m[no-]audio-isa-ext' 17659 Enable/Disable AUDIO ISA extension 17660 17661`-m[no-]fpu-sp-ext' 17662 Enable/Disable FPU SP extension 17663 17664`-m[no-]fpu-dp-ext' 17665 Enable/Disable FPU DP extension 17666 17667`-m[no-]fpu-fma' 17668 Enable/Disable FPU fused-multiply-add instructions 17669 17670`-mall-ext' 17671 Turn on all extensions and instructions support 17672 17673 17674File: as.info, Node: NDS32 Syntax, Prev: NDS32 Options, Up: NDS32-Dependent 17675 176769.30.2 Syntax 17677------------- 17678 17679* Menu: 17680 17681* NDS32-Chars:: Special Characters 17682* NDS32-Regs:: Register Names 17683* NDS32-Ops:: Pseudo Instructions 17684 17685 17686File: as.info, Node: NDS32-Chars, Next: NDS32-Regs, Up: NDS32 Syntax 17687 176889.30.2.1 Special Characters 17689........................... 17690 17691Use `#' at column 1 and `!' anywhere in the line except inside quotes. 17692 17693 Multiple instructions in a line are allowed though not recommended 17694and should be separated by `;'. 17695 17696 Assembler is not case-sensitive in general except user defined label. 17697For example, `jral F1' is different from `jral f1' while it is the same 17698as `JRAL F1'. 17699 17700 17701File: as.info, Node: NDS32-Regs, Next: NDS32-Ops, Prev: NDS32-Chars, Up: NDS32 Syntax 17702 177039.30.2.2 Register Names 17704....................... 17705 17706`General purpose registers (GPR)' 17707 There are 32 32-bit general purpose registers $r0 to $r31. 17708 17709`Accumulators d0 and d1' 17710 64-bit accumulators: $d0.hi, $d0.lo, $d1.hi, and $d1.lo. 17711 17712`Assembler reserved register $ta' 17713 Register $ta ($r15) is reserved for assembler using. 17714 17715`Operating system reserved registers $p0 and $p1' 17716 Registers $p0 ($r26) and $p1 ($r27) are used by operating system 17717 as scratch registers. 17718 17719`Frame pointer $fp' 17720 Register $r28 is regarded as the frame pointer. 17721 17722`Global pointer' 17723 Register $r29 is regarded as the global pointer. 17724 17725`Link pointer' 17726 Register $r30 is regarded as the link pointer. 17727 17728`Stack pointer' 17729 Register $r31 is regarded as the stack pointer. 17730 17731 17732File: as.info, Node: NDS32-Ops, Prev: NDS32-Regs, Up: NDS32 Syntax 17733 177349.30.2.3 Pseudo Instructions 17735............................ 17736 17737`li rt5,imm32' 17738 load 32-bit integer into register rt5. `sethi rt5,hi20(imm32)' 17739 and then `ori rt5,reg,lo12(imm32)'. 17740 17741`la rt5,var' 17742 Load 32-bit address of var into register rt5. `sethi 17743 rt5,hi20(var)' and then `ori reg,rt5,lo12(var)' 17744 17745`l.[bhw] rt5,var' 17746 Load value of var into register rt5. `sethi $ta,hi20(var)' and 17747 then `l[bhw]i rt5,[$ta+lo12(var)]' 17748 17749`l.[bh]s rt5,var' 17750 Load value of var into register rt5. `sethi $ta,hi20(var)' and 17751 then `l[bh]si rt5,[$ta+lo12(var)]' 17752 17753`l.[bhw]p rt5,var,inc' 17754 Load value of var into register rt5 and increment $ta by amount 17755 inc. `la $ta,var' and then `l[bhw]i.bi rt5,[$ta],inc' 17756 17757`l.[bhw]pc rt5,inc' 17758 Continue loading value of var into register rt5 and increment $ta 17759 by amount inc. `l[bhw]i.bi rt5,[$ta],inc.' 17760 17761`l.[bh]sp rt5,var,inc' 17762 Load value of var into register rt5 and increment $ta by amount 17763 inc. `la $ta,var' and then `l[bh]si.bi rt5,[$ta],inc' 17764 17765`l.[bh]spc rt5,inc' 17766 Continue loading value of var into register rt5 and increment $ta 17767 by amount inc. `l[bh]si.bi rt5,[$ta],inc.' 17768 17769`s.[bhw] rt5,var' 17770 Store register rt5 to var. `sethi $ta,hi20(var)' and then 17771 `s[bhw]i rt5,[$ta+lo12(var)]' 17772 17773`s.[bhw]p rt5,var,inc' 17774 Store register rt5 to var and increment $ta by amount inc. `la 17775 $ta,var' and then `s[bhw]i.bi rt5,[$ta],inc' 17776 17777`s.[bhw]pc rt5,inc' 17778 Continue storing register rt5 to var and increment $ta by amount 17779 inc. `s[bhw]i.bi rt5,[$ta],inc.' 17780 17781`not rt5,ra5' 17782 Alias of `nor rt5,ra5,ra5'. 17783 17784`neg rt5,ra5' 17785 Alias of `subri rt5,ra5,0'. 17786 17787`br rb5' 17788 Depending on how it is assembled, it is translated into `r5 rb5' 17789 or `jr rb5'. 17790 17791`b label' 17792 Branch to label depending on how it is assembled, it is translated 17793 into `j8 label', `j label', or "`la $ta,label' `br $ta'". 17794 17795`bral rb5' 17796 Alias of jral br5 depending on how it is assembled, it is 17797 translated into `jral5 rb5' or `jral rb5'. 17798 17799`bal fname' 17800 Alias of jal fname depending on how it is assembled, it is 17801 translated into `jal fname' or "`la $ta,fname' `bral $ta'". 17802 17803`call fname' 17804 Call function fname same as `jal fname'. 17805 17806`move rt5,ra5' 17807 For 16-bit, this is `mov55 rt5,ra5'. For no 16-bit, this is `ori 17808 rt5,ra5,0'. 17809 17810`move rt5,var' 17811 This is the same as `l.w rt5,var'. 17812 17813`move rt5,imm32' 17814 This is the same as `li rt5,imm32'. 17815 17816`pushm ra5,rb5' 17817 Push contents of registers from ra5 to rb5 into stack. 17818 17819`push ra5' 17820 Push content of register ra5 into stack. (same `pushm ra5,ra5'). 17821 17822`push.d var' 17823 Push value of double-word variable var into stack. 17824 17825`push.w var' 17826 Push value of word variable var into stack. 17827 17828`push.h var' 17829 Push value of half-word variable var into stack. 17830 17831`push.b var' 17832 Push value of byte variable var into stack. 17833 17834`pusha var' 17835 Push 32-bit address of variable var into stack. 17836 17837`pushi imm32' 17838 Push 32-bit immediate value into stack. 17839 17840`popm ra5,rb5' 17841 Pop top of stack values into registers ra5 to rb5. 17842 17843`pop rt5' 17844 Pop top of stack value into register. (same as `popm rt5,rt5'.) 17845 17846`pop.d var,ra5' 17847 Pop value of double-word variable var from stack using register ra5 17848 as 2nd scratch register. (1st is $ta) 17849 17850`pop.w var,ra5' 17851 Pop value of word variable var from stack using register ra5. 17852 17853`pop.h var,ra5' 17854 Pop value of half-word variable var from stack using register ra5. 17855 17856`pop.b var,ra5' 17857 Pop value of byte variable var from stack using register ra5. 17858 17859 17860 17861File: as.info, Node: NiosII-Dependent, Next: NS32K-Dependent, Prev: NDS32-Dependent, Up: Machine Dependencies 17862 178639.31 Nios II Dependent Features 17864=============================== 17865 17866* Menu: 17867 17868* Nios II Options:: Options 17869* Nios II Syntax:: Syntax 17870* Nios II Relocations:: Relocations 17871* Nios II Directives:: Nios II Machine Directives 17872* Nios II Opcodes:: Opcodes 17873 17874 17875File: as.info, Node: Nios II Options, Next: Nios II Syntax, Up: NiosII-Dependent 17876 178779.31.1 Options 17878-------------- 17879 17880`-relax-section' 17881 Replace identified out-of-range branches with PC-relative `jmp' 17882 sequences when possible. The generated code sequences are suitable 17883 for use in position-independent code, but there is a practical 17884 limit on the extended branch range because of the length of the 17885 sequences. This option is the default. 17886 17887`-relax-all' 17888 Replace branch instructions not determinable to be in range and 17889 all call instructions with `jmp' and `callr' sequences 17890 (respectively). This option generates absolute relocations 17891 against the target symbols and is not appropriate for 17892 position-independent code. 17893 17894`-no-relax' 17895 Do not replace any branches or calls. 17896 17897`-EB' 17898 Generate big-endian output. 17899 17900`-EL' 17901 Generate little-endian output. This is the default. 17902 17903`-march=ARCHITECTURE' 17904 This option specifies the target architecture. The assembler 17905 issues an error message if an attempt is made to assemble an 17906 instruction which will not execute on the target architecture. 17907 The following architecture names are recognized: `r1', `r2'. The 17908 default is `r1'. 17909 17910 17911 17912File: as.info, Node: Nios II Syntax, Next: Nios II Relocations, Prev: Nios II Options, Up: NiosII-Dependent 17913 179149.31.2 Syntax 17915------------- 17916 17917* Menu: 17918 17919* Nios II Chars:: Special Characters 17920 17921 17922File: as.info, Node: Nios II Chars, Up: Nios II Syntax 17923 179249.31.2.1 Special Characters 17925........................... 17926 17927`#' is the line comment character. `;' is the line separator character. 17928 17929 17930File: as.info, Node: Nios II Relocations, Next: Nios II Directives, Prev: Nios II Syntax, Up: NiosII-Dependent 17931 179329.31.3 Nios II Machine Relocations 17933---------------------------------- 17934 17935`%hiadj(EXPRESSION)' 17936 Extract the upper 16 bits of EXPRESSION and add one if the 15th 17937 bit is set. 17938 17939 The value of `%hiadj(EXPRESSION)' is: 17940 ((EXPRESSION >> 16) & 0xffff) + ((EXPRESSION >> 15) & 0x01) 17941 17942 The `%hiadj' relocation is intended to be used with the `addi', 17943 `ld' or `st' instructions along with a `%lo', in order to load a 17944 32-bit constant. 17945 17946 movhi r2, %hiadj(symbol) 17947 addi r2, r2, %lo(symbol) 17948 17949`%hi(EXPRESSION)' 17950 Extract the upper 16 bits of EXPRESSION. 17951 17952`%lo(EXPRESSION)' 17953 Extract the lower 16 bits of EXPRESSION. 17954 17955`%gprel(EXPRESSION)' 17956 Subtract the value of the symbol `_gp' from EXPRESSION. 17957 17958 The intention of the `%gprel' relocation is to have a fast small 17959 area of memory which only takes a 16-bit immediate to access. 17960 17961 .section .sdata 17962 fastint: 17963 .int 123 17964 .section .text 17965 ldw r4, %gprel(fastint)(gp) 17966 17967`%call(EXPRESSION)' 17968 17969`%call_lo(EXPRESSION)' 17970 17971`%call_hiadj(EXPRESSION)' 17972`%got(EXPRESSION)' 17973`%got_lo(EXPRESSION)' 17974`%got_hiadj(EXPRESSION)' 17975`%gotoff(EXPRESSION)' 17976`%gotoff_lo(EXPRESSION)' 17977`%gotoff_hiadj(EXPRESSION)' 17978`%tls_gd(EXPRESSION)' 17979`%tls_ie(EXPRESSION)' 17980`%tls_le(EXPRESSION)' 17981`%tls_ldm(EXPRESSION)' 17982`%tls_ldo(EXPRESSION)' 17983 These relocations support the ABI for Linux Systems documented in 17984 the `Nios II Processor Reference Handbook'. 17985 17986 17987File: as.info, Node: Nios II Directives, Next: Nios II Opcodes, Prev: Nios II Relocations, Up: NiosII-Dependent 17988 179899.31.4 Nios II Machine Directives 17990--------------------------------- 17991 17992`.align EXPRESSION [, EXPRESSION]' 17993 This is the generic `.align' directive, however this aligns to a 17994 power of two. 17995 17996`.half EXPRESSION' 17997 Create an aligned constant 2 bytes in size. 17998 17999`.word EXPRESSION' 18000 Create an aligned constant 4 bytes in size. 18001 18002`.dword EXPRESSION' 18003 Create an aligned constant 8 bytes in size. 18004 18005`.2byte EXPRESSION' 18006 Create an unaligned constant 2 bytes in size. 18007 18008`.4byte EXPRESSION' 18009 Create an unaligned constant 4 bytes in size. 18010 18011`.8byte EXPRESSION' 18012 Create an unaligned constant 8 bytes in size. 18013 18014`.16byte EXPRESSION' 18015 Create an unaligned constant 16 bytes in size. 18016 18017`.set noat' 18018 Allows assembly code to use `at' register without warning. Macro 18019 or relaxation expansions generate warnings. 18020 18021`.set at' 18022 Assembly code using `at' register generates warnings, and macro 18023 expansion and relaxation are enabled. 18024 18025`.set nobreak' 18026 Allows assembly code to use `ba' and `bt' registers without 18027 warning. 18028 18029`.set break' 18030 Turns warnings back on for using `ba' and `bt' registers. 18031 18032`.set norelax' 18033 Do not replace any branches or calls. 18034 18035`.set relaxsection' 18036 Replace identified out-of-range branches with `jmp' sequences 18037 (default). 18038 18039`.set relaxsection' 18040 Replace all branch and call instructions with `jmp' and `callr' 18041 sequences. 18042 18043`.set ...' 18044 All other `.set' are the normal use. 18045 18046 18047 18048File: as.info, Node: Nios II Opcodes, Prev: Nios II Directives, Up: NiosII-Dependent 18049 180509.31.5 Opcodes 18051-------------- 18052 18053`as' implements all the standard Nios II opcodes documented in the 18054`Nios II Processor Reference Handbook', including the assembler 18055pseudo-instructions. 18056 18057 18058File: as.info, Node: NS32K-Dependent, Next: OpenRISC-Dependent, Prev: NiosII-Dependent, Up: Machine Dependencies 18059 180609.32 NS32K Dependent Features 18061============================= 18062 18063* Menu: 18064 18065* NS32K Syntax:: Syntax 18066 18067 18068File: as.info, Node: NS32K Syntax, Up: NS32K-Dependent 18069 180709.32.1 Syntax 18071------------- 18072 18073* Menu: 18074 18075* NS32K-Chars:: Special Characters 18076 18077 18078File: as.info, Node: NS32K-Chars, Up: NS32K Syntax 18079 180809.32.1.1 Special Characters 18081........................... 18082 18083The presence of a `#' appearing anywhere on a line indicates the start 18084of a comment that extends to the end of that line. 18085 18086 If a `#' appears as the first character of a line then the whole 18087line is treated as a comment, but in this case the line can also be a 18088logical line number directive (*note Comments::) or a preprocessor 18089control command (*note Preprocessing::). 18090 18091 If Sequent compatibility has been configured into the assembler then 18092the `|' character appearing as the first character on a line will also 18093indicate the start of a line comment. 18094 18095 The `;' character can be used to separate statements on the same 18096line. 18097 18098 18099File: as.info, Node: OpenRISC-Dependent, Next: PDP-11-Dependent, Prev: NS32K-Dependent, Up: Machine Dependencies 18100 181019.33 OPENRISC Dependent Features 18102================================ 18103 18104* Menu: 18105 18106* OpenRISC-Syntax:: Syntax 18107* OpenRISC-Float:: Floating Point 18108* OpenRISC-Directives:: OpenRISC Machine Directives 18109* OpenRISC-Opcodes:: Opcodes 18110 18111 18112File: as.info, Node: OpenRISC-Syntax, Next: OpenRISC-Float, Up: OpenRISC-Dependent 18113 181149.33.1 OpenRISC Syntax 18115---------------------- 18116 18117The assembler syntax follows the OpenRISC 1000 Architecture Manual. 18118 18119* Menu: 18120 18121* OpenRISC-Chars:: Special Characters 18122* OpenRISC-Regs:: Register Names 18123* OpenRISC-Relocs:: Relocations 18124 18125 18126File: as.info, Node: OpenRISC-Chars, Next: OpenRISC-Regs, Up: OpenRISC-Syntax 18127 181289.33.1.1 Special Characters 18129........................... 18130 18131A `#' character appearing anywhere on a line indicates the start of a 18132comment that extends to the end of that line. 18133 18134 `;' can be used instead of a newline to separate statements. 18135 18136 18137File: as.info, Node: OpenRISC-Regs, Next: OpenRISC-Relocs, Prev: OpenRISC-Chars, Up: OpenRISC-Syntax 18138 181399.33.1.2 Register Names 18140....................... 18141 18142The OpenRISC register file contains 32 general pupose registers. 18143 18144 * The 32 general purpose registers are referred to as `rN'. 18145 18146 * The stack pointer register `r1' can be referenced using the alias 18147 `sp'. 18148 18149 * The frame pointer register `r2' can be referenced using the alias 18150 `fp'. 18151 18152 * The link register `r9' can be referenced using the alias `lr'. 18153 18154 Floating point operations use the same general purpose registers. 18155The instructions `lf.itof.s' (single precision) and `lf.itof.d' (double 18156precision) can be used to convert integer values to floating point. 18157Likewise, instructions `lf.ftoi.s' (single precision) and `lf.ftoi.d' 18158(double precision) can be used to convert floating point to integer. 18159 18160 OpenRISC also contains privileged special purpose registers (SPRs). 18161The SPRs are accessed using the `l.mfspr' and `l.mtspr' instructions. 18162 18163 18164File: as.info, Node: OpenRISC-Relocs, Prev: OpenRISC-Regs, Up: OpenRISC-Syntax 18165 181669.33.1.3 Relocations 18167.................... 18168 18169ELF relocations are available as defined in the OpenRISC architecture 18170specification. 18171 18172 `R_OR1K_HI_16_IN_INSN' is obtained using `hi' and 18173`R_OR1K_LO_16_IN_INSN' and `R_OR1K_SLO16' are obtained using `lo'. For 18174signed offsets `R_OR1K_AHI16' is obtained from `ha'. For example: 18175 18176 l.movhi r5, hi(symbol) 18177 l.ori r5, r5, lo(symbol) 18178 18179 l.movhi r5, ha(symbol) 18180 l.addi r5, r5, lo(symbol) 18181 18182 These "high" mnemonics extract bits 31:16 of their operand, and the 18183"low" mnemonics extract bits 15:0 of their operand. 18184 18185 The PC relative relocation `R_OR1K_GOTPC_HI16' can be obtained by 18186enclosing an operand inside of `gotpchi'. Likewise, the 18187`R_OR1K_GOTPC_LO16' relocation can be obtained using `gotpclo'. These 18188are mostly used when assembling PIC code. For example, the standard 18189PIC sequence on OpenRISC to get the base of the global offset table, PC 18190relative, into a register, can be performed as: 18191 18192 l.jal 0x8 18193 l.movhi r17, gotpchi(_GLOBAL_OFFSET_TABLE_-4) 18194 l.ori r17, r17, gotpclo(_GLOBAL_OFFSET_TABLE_+0) 18195 l.add r17, r17, r9 18196 18197 Several relocations exist to allow the link editor to perform GOT 18198data references. The `R_OR1K_GOT16' relocation can obtained by 18199enclosing an operand inside of `got'. For example, assuming the GOT 18200base is in register `r17'. 18201 18202 l.lwz r19, got(a)(r17) 18203 l.lwz r21, 0(r19) 18204 18205 Also, several relocations exist for local GOT references. The 18206`R_OR1K_GOTOFF_AHI16' relocation can obtained by enclosing an operand 18207inside of `gotoffha'. Likewise, `R_OR1K_GOTOFF_LO16' and 18208`R_OR1K_GOTOFF_SLO16' can be obtained by enclosing an operand inside of 18209`gotofflo'. For example, assuming the GOT base is in register `rl7': 18210 18211 l.movhi r19, gotoffha(symbol) 18212 l.add r19, r19, r17 18213 l.lwz r19, gotofflo(symbol)(r19) 18214 18215 The above PC relative relocations use a `l.jal' (jump) instruction 18216and reading of the link register to load the PC. OpenRISC also supports 18217page offset PC relative locations without a jump instruction using the 18218`l.adrp' instruction. By default the `l.adrp' instruction will create 18219an `R_OR1K_PCREL_PG21' relocation. Likewise, `BFD_RELOC_OR1K_LO13' and 18220`BFD_RELOC_OR1K_SLO13' can be obtained by enclosing an operand inside 18221of `po'. For example: 18222 18223 l.adrp r3, symbol 18224 l.ori r4, r3, po(symbol) 18225 l.lbz r5, po(symbol)(r3) 18226 l.sb po(symbol)(r3), r6 18227 18228 Likewise the page offset relocations can be used with GOT 18229references. The relocation `R_OR1K_GOT_PG21' can be obtained by 18230enclosing an `l.adrp' immediate operand inside of `got'. Likewise, 18231`R_OR1K_GOT_LO13' can be obtained by enclosing an operand inside of 18232`gotpo'. For example to load the value of a GOT symbol into register 18233`r5' we can do: 18234 18235 l.adrp r17, got(_GLOBAL_OFFSET_TABLE_) 18236 l.lwz r5, gotpo(symbol)(r17) 18237 18238 There are many relocations that can be requested for access to 18239thread local storage variables. All of the OpenRISC TLS mnemonics are 18240supported: 18241 18242 * `R_OR1K_TLS_GD_HI16' is requested using `tlsgdhi'. 18243 18244 * `R_OR1K_TLS_GD_LO16' is requested using `tlsgdlo'. 18245 18246 * `R_OR1K_TLS_GD_PG21' is requested using `tldgd'. 18247 18248 * `R_OR1K_TLS_GD_LO13' is requested using `tlsgdpo'. 18249 18250 * `R_OR1K_TLS_LDM_HI16' is requested using `tlsldmhi'. 18251 18252 * `R_OR1K_TLS_LDM_LO16' is requested using `tlsldmlo'. 18253 18254 * `R_OR1K_TLS_LDM_PG21' is requested using `tldldm'. 18255 18256 * `R_OR1K_TLS_LDM_LO13' is requested using `tlsldmpo'. 18257 18258 * `R_OR1K_TLS_LDO_HI16' is requested using `dtpoffhi'. 18259 18260 * `R_OR1K_TLS_LDO_LO16' is requested using `dtpofflo'. 18261 18262 * `R_OR1K_TLS_IE_HI16' is requested using `gottpoffhi'. 18263 18264 * `R_OR1K_TLS_IE_AHI16' is requested using `gottpoffha'. 18265 18266 * `R_OR1K_TLS_IE_LO16' is requested using `gottpofflo'. 18267 18268 * `R_OR1K_TLS_IE_PG21' is requested using `gottp'. 18269 18270 * `R_OR1K_TLS_IE_LO13' is requested using `gottppo'. 18271 18272 * `R_OR1K_TLS_LE_HI16' is requested using `tpoffhi'. 18273 18274 * `R_OR1K_TLS_LE_AHI16' is requested using `tpoffha'. 18275 18276 * `R_OR1K_TLS_LE_LO16' is requested using `tpofflo'. 18277 18278 * `R_OR1K_TLS_LE_SLO16' also is requested using `tpofflo' depending 18279 on the instruction format. 18280 18281 Here are some example TLS model sequences. 18282 18283 First, General Dynamic: 18284 18285 l.movhi r17, tlsgdhi(symbol) 18286 l.ori r17, r17, tlsgdlo(symbol) 18287 l.add r17, r17, r16 18288 l.or r3, r17, r17 18289 l.jal plt(__tls_get_addr) 18290 l.nop 18291 18292 Initial Exec: 18293 18294 l.movhi r17, gottpoffhi(symbol) 18295 l.add r17, r17, r16 18296 l.lwz r17, gottpofflo(symbol)(r17) 18297 l.add r17, r17, r10 18298 l.lbs r17, 0(r17) 18299 18300 And finally, Local Exec: 18301 18302 l.movhi r17, tpoffha(symbol) 18303 l.add r17, r17, r10 18304 l.addi r17, r17, tpofflo(symbol) 18305 l.lbs r17, 0(r17) 18306 18307 18308File: as.info, Node: OpenRISC-Float, Next: OpenRISC-Directives, Prev: OpenRISC-Syntax, Up: OpenRISC-Dependent 18309 183109.33.2 Floating Point 18311--------------------- 18312 18313OpenRISC uses IEEE floating-point numbers. 18314 18315 18316File: as.info, Node: OpenRISC-Directives, Next: OpenRISC-Opcodes, Prev: OpenRISC-Float, Up: OpenRISC-Dependent 18317 183189.33.3 OpenRISC Machine Directives 18319---------------------------------- 18320 18321The OpenRISC version of `as' supports the following additional machine 18322directives: 18323 18324`.align' 18325 This must be followed by the desired alignment in bytes. 18326 18327`.word' 18328 On the OpenRISC, the `.word' directive produces a 32 bit value. 18329 18330`.nodelay' 18331 On the OpenRISC, the `.nodelay' directive sets a flag in elf 18332 binaries indicating that the binary is generated catering for no 18333 delay slots. 18334 18335`.proc' 18336 This directive is ignored. Any text following it on the same line 18337 is also ignored. 18338 18339`.endproc' 18340 This directive is ignored. Any text following it on the same line 18341 is also ignored. 18342 18343 18344File: as.info, Node: OpenRISC-Opcodes, Prev: OpenRISC-Directives, Up: OpenRISC-Dependent 18345 183469.33.4 Opcodes 18347-------------- 18348 18349For detailed information on the OpenRISC machine instruction set, see 18350`http://www.openrisc.io/architecture/'. 18351 18352 `as' implements all the standard OpenRISC opcodes. 18353 18354 18355File: as.info, Node: PDP-11-Dependent, Next: PJ-Dependent, Prev: OpenRISC-Dependent, Up: Machine Dependencies 18356 183579.34 PDP-11 Dependent Features 18358============================== 18359 18360* Menu: 18361 18362* PDP-11-Options:: Options 18363* PDP-11-Pseudos:: Assembler Directives 18364* PDP-11-Syntax:: DEC Syntax versus BSD Syntax 18365* PDP-11-Mnemonics:: Instruction Naming 18366* PDP-11-Synthetic:: Synthetic Instructions 18367 18368 18369File: as.info, Node: PDP-11-Options, Next: PDP-11-Pseudos, Up: PDP-11-Dependent 18370 183719.34.1 Options 18372-------------- 18373 18374The PDP-11 version of `as' has a rich set of machine dependent options. 18375 183769.34.1.1 Code Generation Options 18377................................ 18378 18379`-mpic | -mno-pic' 18380 Generate position-independent (or position-dependent) code. 18381 18382 The default is to generate position-independent code. 18383 183849.34.1.2 Instruction Set Extension Options 18385.......................................... 18386 18387These options enables or disables the use of extensions over the base 18388line instruction set as introduced by the first PDP-11 CPU: the KA11. 18389Most options come in two variants: a `-m'EXTENSION that enables 18390EXTENSION, and a `-mno-'EXTENSION that disables EXTENSION. 18391 18392 The default is to enable all extensions. 18393 18394`-mall | -mall-extensions' 18395 Enable all instruction set extensions. 18396 18397`-mno-extensions' 18398 Disable all instruction set extensions. 18399 18400`-mcis | -mno-cis' 18401 Enable (or disable) the use of the commercial instruction set, 18402 which consists of these instructions: `ADDNI', `ADDN', `ADDPI', 18403 `ADDP', `ASHNI', `ASHN', `ASHPI', `ASHP', `CMPCI', `CMPC', 18404 `CMPNI', `CMPN', `CMPPI', `CMPP', `CVTLNI', `CVTLN', `CVTLPI', 18405 `CVTLP', `CVTNLI', `CVTNL', `CVTNPI', `CVTNP', `CVTPLI', `CVTPL', 18406 `CVTPNI', `CVTPN', `DIVPI', `DIVP', `L2DR', `L3DR', `LOCCI', 18407 `LOCC', `MATCI', `MATC', `MOVCI', `MOVC', `MOVRCI', `MOVRC', 18408 `MOVTCI', `MOVTC', `MULPI', `MULP', `SCANCI', `SCANC', `SKPCI', 18409 `SKPC', `SPANCI', `SPANC', `SUBNI', `SUBN', `SUBPI', and `SUBP'. 18410 18411`-mcsm | -mno-csm' 18412 Enable (or disable) the use of the `CSM' instruction. 18413 18414`-meis | -mno-eis' 18415 Enable (or disable) the use of the extended instruction set, which 18416 consists of these instructions: `ASHC', `ASH', `DIV', `MARK', 18417 `MUL', `RTT', `SOB' `SXT', and `XOR'. 18418 18419`-mfis | -mkev11' 18420`-mno-fis | -mno-kev11' 18421 Enable (or disable) the use of the KEV11 floating-point 18422 instructions: `FADD', `FDIV', `FMUL', and `FSUB'. 18423 18424`-mfpp | -mfpu | -mfp-11' 18425`-mno-fpp | -mno-fpu | -mno-fp-11' 18426 Enable (or disable) the use of FP-11 floating-point instructions: 18427 `ABSF', `ADDF', `CFCC', `CLRF', `CMPF', `DIVF', `LDCFF', `LDCIF', 18428 `LDEXP', `LDF', `LDFPS', `MODF', `MULF', `NEGF', `SETD', `SETF', 18429 `SETI', `SETL', `STCFF', `STCFI', `STEXP', `STF', `STFPS', `STST', 18430 `SUBF', and `TSTF'. 18431 18432`-mlimited-eis | -mno-limited-eis' 18433 Enable (or disable) the use of the limited extended instruction 18434 set: `MARK', `RTT', `SOB', `SXT', and `XOR'. 18435 18436 The -mno-limited-eis options also implies -mno-eis. 18437 18438`-mmfpt | -mno-mfpt' 18439 Enable (or disable) the use of the `MFPT' instruction. 18440 18441`-mmultiproc | -mno-multiproc' 18442 Enable (or disable) the use of multiprocessor instructions: 18443 `TSTSET' and `WRTLCK'. 18444 18445`-mmxps | -mno-mxps' 18446 Enable (or disable) the use of the `MFPS' and `MTPS' instructions. 18447 18448`-mspl | -mno-spl' 18449 Enable (or disable) the use of the `SPL' instruction. 18450 18451 Enable (or disable) the use of the microcode instructions: `LDUB', 18452 `MED', and `XFC'. 18453 184549.34.1.3 CPU Model Options 18455.......................... 18456 18457These options enable the instruction set extensions supported by a 18458particular CPU, and disables all other extensions. 18459 18460`-mka11' 18461 KA11 CPU. Base line instruction set only. 18462 18463`-mkb11' 18464 KB11 CPU. Enable extended instruction set and `SPL'. 18465 18466`-mkd11a' 18467 KD11-A CPU. Enable limited extended instruction set. 18468 18469`-mkd11b' 18470 KD11-B CPU. Base line instruction set only. 18471 18472`-mkd11d' 18473 KD11-D CPU. Base line instruction set only. 18474 18475`-mkd11e' 18476 KD11-E CPU. Enable extended instruction set, `MFPS', and `MTPS'. 18477 18478`-mkd11f | -mkd11h | -mkd11q' 18479 KD11-F, KD11-H, or KD11-Q CPU. Enable limited extended 18480 instruction set, `MFPS', and `MTPS'. 18481 18482`-mkd11k' 18483 KD11-K CPU. Enable extended instruction set, `LDUB', `MED', 18484 `MFPS', `MFPT', `MTPS', and `XFC'. 18485 18486`-mkd11z' 18487 KD11-Z CPU. Enable extended instruction set, `CSM', `MFPS', 18488 `MFPT', `MTPS', and `SPL'. 18489 18490`-mf11' 18491 F11 CPU. Enable extended instruction set, `MFPS', `MFPT', and 18492 `MTPS'. 18493 18494`-mj11' 18495 J11 CPU. Enable extended instruction set, `CSM', `MFPS', `MFPT', 18496 `MTPS', `SPL', `TSTSET', and `WRTLCK'. 18497 18498`-mt11' 18499 T11 CPU. Enable limited extended instruction set, `MFPS', and 18500 `MTPS'. 18501 185029.34.1.4 Machine Model Options 18503.............................. 18504 18505These options enable the instruction set extensions supported by a 18506particular machine model, and disables all other extensions. 18507 18508`-m11/03' 18509 Same as `-mkd11f'. 18510 18511`-m11/04' 18512 Same as `-mkd11d'. 18513 18514`-m11/05 | -m11/10' 18515 Same as `-mkd11b'. 18516 18517`-m11/15 | -m11/20' 18518 Same as `-mka11'. 18519 18520`-m11/21' 18521 Same as `-mt11'. 18522 18523`-m11/23 | -m11/24' 18524 Same as `-mf11'. 18525 18526`-m11/34' 18527 Same as `-mkd11e'. 18528 18529`-m11/34a' 18530 Ame as `-mkd11e' `-mfpp'. 18531 18532`-m11/35 | -m11/40' 18533 Same as `-mkd11a'. 18534 18535`-m11/44' 18536 Same as `-mkd11z'. 18537 18538`-m11/45 | -m11/50 | -m11/55 | -m11/70' 18539 Same as `-mkb11'. 18540 18541`-m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94' 18542 Same as `-mj11'. 18543 18544`-m11/60' 18545 Same as `-mkd11k'. 18546 18547 18548File: as.info, Node: PDP-11-Pseudos, Next: PDP-11-Syntax, Prev: PDP-11-Options, Up: PDP-11-Dependent 18549 185509.34.2 Assembler Directives 18551--------------------------- 18552 18553The PDP-11 version of `as' has a few machine dependent assembler 18554directives. 18555 18556`.bss' 18557 Switch to the `bss' section. 18558 18559`.even' 18560 Align the location counter to an even number. 18561 18562 18563File: as.info, Node: PDP-11-Syntax, Next: PDP-11-Mnemonics, Prev: PDP-11-Pseudos, Up: PDP-11-Dependent 18564 185659.34.3 PDP-11 Assembly Language Syntax 18566-------------------------------------- 18567 18568`as' supports both DEC syntax and BSD syntax. The only difference is 18569that in DEC syntax, a `#' character is used to denote an immediate 18570constants, while in BSD syntax the character for this purpose is `$'. 18571 18572 general-purpose registers are named `r0' through `r7'. Mnemonic 18573alternatives for `r6' and `r7' are `sp' and `pc', respectively. 18574 18575 Floating-point registers are named `ac0' through `ac3', or 18576alternatively `fr0' through `fr3'. 18577 18578 Comments are started with a `#' or a `/' character, and extend to 18579the end of the line. (FIXME: clash with immediates?) 18580 18581 Multiple statements on the same line can be separated by the `;' 18582character. 18583 18584 18585File: as.info, Node: PDP-11-Mnemonics, Next: PDP-11-Synthetic, Prev: PDP-11-Syntax, Up: PDP-11-Dependent 18586 185879.34.4 Instruction Naming 18588------------------------- 18589 18590Some instructions have alternative names. 18591 18592`BCC' 18593 `BHIS' 18594 18595`BCS' 18596 `BLO' 18597 18598`L2DR' 18599 `L2D' 18600 18601`L3DR' 18602 `L3D' 18603 18604`SYS' 18605 `TRAP' 18606 18607 18608File: as.info, Node: PDP-11-Synthetic, Prev: PDP-11-Mnemonics, Up: PDP-11-Dependent 18609 186109.34.5 Synthetic Instructions 18611----------------------------- 18612 18613The `JBR' and `J'CC synthetic instructions are not supported yet. 18614 18615 18616File: as.info, Node: PJ-Dependent, Next: PPC-Dependent, Prev: PDP-11-Dependent, Up: Machine Dependencies 18617 186189.35 picoJava Dependent Features 18619================================ 18620 18621* Menu: 18622 18623* PJ Options:: Options 18624* PJ Syntax:: PJ Syntax 18625 18626 18627File: as.info, Node: PJ Options, Next: PJ Syntax, Up: PJ-Dependent 18628 186299.35.1 Options 18630-------------- 18631 18632`as' has two additional command-line options for the picoJava 18633architecture. 18634`-ml' 18635 This option selects little endian data output. 18636 18637`-mb' 18638 This option selects big endian data output. 18639 18640 18641File: as.info, Node: PJ Syntax, Prev: PJ Options, Up: PJ-Dependent 18642 186439.35.2 PJ Syntax 18644---------------- 18645 18646* Menu: 18647 18648* PJ-Chars:: Special Characters 18649 18650 18651File: as.info, Node: PJ-Chars, Up: PJ Syntax 18652 186539.35.2.1 Special Characters 18654........................... 18655 18656The presence of a `!' or `/' on a line indicates the start of a comment 18657that extends to the end of the current line. 18658 18659 If a `#' appears as the first character of a line then the whole 18660line is treated as a comment, but in this case the line could also be a 18661logical line number directive (*note Comments::) or a preprocessor 18662control command (*note Preprocessing::). 18663 18664 The `;' character can be used to separate statements on the same 18665line. 18666 18667 18668File: as.info, Node: PPC-Dependent, Next: PRU-Dependent, Prev: PJ-Dependent, Up: Machine Dependencies 18669 186709.36 PowerPC Dependent Features 18671=============================== 18672 18673* Menu: 18674 18675* PowerPC-Opts:: Options 18676* PowerPC-Pseudo:: PowerPC Assembler Directives 18677* PowerPC-Syntax:: PowerPC Syntax 18678 18679 18680File: as.info, Node: PowerPC-Opts, Next: PowerPC-Pseudo, Up: PPC-Dependent 18681 186829.36.1 Options 18683-------------- 18684 18685The PowerPC chip family includes several successive levels, using the 18686same core instruction set, but including a few additional instructions 18687at each level. There are exceptions to this however. For details on 18688what instructions each variant supports, please see the chip's 18689architecture reference manual. 18690 18691 The following table lists all available PowerPC options. 18692 18693`-a32' 18694 Generate ELF32 or XCOFF32. 18695 18696`-a64' 18697 Generate ELF64 or XCOFF64. 18698 18699`-K PIC' 18700 Set EF_PPC_RELOCATABLE_LIB in ELF flags. 18701 18702`-mpwrx | -mpwr2' 18703 Generate code for POWER/2 (RIOS2). 18704 18705`-mpwr' 18706 Generate code for POWER (RIOS1) 18707 18708`-m601' 18709 Generate code for PowerPC 601. 18710 18711`-mppc, -mppc32, -m603, -m604' 18712 Generate code for PowerPC 603/604. 18713 18714`-m403, -m405' 18715 Generate code for PowerPC 403/405. 18716 18717`-m440' 18718 Generate code for PowerPC 440. BookE and some 405 instructions. 18719 18720`-m464' 18721 Generate code for PowerPC 464. 18722 18723`-m476' 18724 Generate code for PowerPC 476. 18725 18726`-m7400, -m7410, -m7450, -m7455' 18727 Generate code for PowerPC 7400/7410/7450/7455. 18728 18729`-m750cl, -mgekko, -mbroadway' 18730 Generate code for PowerPC 750CL/Gekko/Broadway. 18731 18732`-m821, -m850, -m860' 18733 Generate code for PowerPC 821/850/860. 18734 18735`-mppc64, -m620' 18736 Generate code for PowerPC 620/625/630. 18737 18738`-me500, -me500x2' 18739 Generate code for Motorola e500 core complex. 18740 18741`-me500mc' 18742 Generate code for Freescale e500mc core complex. 18743 18744`-me500mc64' 18745 Generate code for Freescale e500mc64 core complex. 18746 18747`-me5500' 18748 Generate code for Freescale e5500 core complex. 18749 18750`-me6500' 18751 Generate code for Freescale e6500 core complex. 18752 18753`-mspe' 18754 Generate code for Motorola SPE instructions. 18755 18756`-mspe2' 18757 Generate code for Freescale SPE2 instructions. 18758 18759`-mtitan' 18760 Generate code for AppliedMicro Titan core complex. 18761 18762`-mppc64bridge' 18763 Generate code for PowerPC 64, including bridge insns. 18764 18765`-mbooke' 18766 Generate code for 32-bit BookE. 18767 18768`-ma2' 18769 Generate code for A2 architecture. 18770 18771`-me300' 18772 Generate code for PowerPC e300 family. 18773 18774`-maltivec' 18775 Generate code for processors with AltiVec instructions. 18776 18777`-mvle' 18778 Generate code for Freescale PowerPC VLE instructions. 18779 18780`-mvsx' 18781 Generate code for processors with Vector-Scalar (VSX) instructions. 18782 18783`-mhtm' 18784 Generate code for processors with Hardware Transactional Memory 18785 instructions. 18786 18787`-mpower4, -mpwr4' 18788 Generate code for Power4 architecture. 18789 18790`-mpower5, -mpwr5, -mpwr5x' 18791 Generate code for Power5 architecture. 18792 18793`-mpower6, -mpwr6' 18794 Generate code for Power6 architecture. 18795 18796`-mpower7, -mpwr7' 18797 Generate code for Power7 architecture. 18798 18799`-mpower8, -mpwr8' 18800 Generate code for Power8 architecture. 18801 18802`-mpower9, -mpwr9' 18803 Generate code for Power9 architecture. 18804 18805`-mpower10, -mpwr10' 18806 Generate code for Power10 architecture. 18807 18808`-mcell' 18809 18810`-mcell' 18811 Generate code for Cell Broadband Engine architecture. 18812 18813`-mcom' 18814 Generate code Power/PowerPC common instructions. 18815 18816`-many' 18817 Generate code for any architecture (PWR/PWRX/PPC). 18818 18819`-mregnames' 18820 Allow symbolic names for registers. 18821 18822`-mno-regnames' 18823 Do not allow symbolic names for registers. 18824 18825`-mrelocatable' 18826 Support for GCC's -mrelocatable option. 18827 18828`-mrelocatable-lib' 18829 Support for GCC's -mrelocatable-lib option. 18830 18831`-memb' 18832 Set PPC_EMB bit in ELF flags. 18833 18834`-mlittle, -mlittle-endian, -le' 18835 Generate code for a little endian machine. 18836 18837`-mbig, -mbig-endian, -be' 18838 Generate code for a big endian machine. 18839 18840`-msolaris' 18841 Generate code for Solaris. 18842 18843`-mno-solaris' 18844 Do not generate code for Solaris. 18845 18846`-nops=COUNT' 18847 If an alignment directive inserts more than COUNT nops, put a 18848 branch at the beginning to skip execution of the nops. 18849 18850 18851File: as.info, Node: PowerPC-Pseudo, Next: PowerPC-Syntax, Prev: PowerPC-Opts, Up: PPC-Dependent 18852 188539.36.2 PowerPC Assembler Directives 18854----------------------------------- 18855 18856A number of assembler directives are available for PowerPC. The 18857following table is far from complete. 18858 18859`.machine "string"' 18860 This directive allows you to change the machine for which code is 18861 generated. `"string"' may be any of the -m cpu selection options 18862 (without the -m) enclosed in double quotes, `"push"', or `"pop"'. 18863 `.machine "push"' saves the currently selected cpu, which may be 18864 restored with `.machine "pop"'. 18865 18866 18867File: as.info, Node: PowerPC-Syntax, Prev: PowerPC-Pseudo, Up: PPC-Dependent 18868 188699.36.3 PowerPC Syntax 18870--------------------- 18871 18872* Menu: 18873 18874* PowerPC-Chars:: Special Characters 18875 18876 18877File: as.info, Node: PowerPC-Chars, Up: PowerPC-Syntax 18878 188799.36.3.1 Special Characters 18880........................... 18881 18882The presence of a `#' on a line indicates the start of a comment that 18883extends to the end of the current line. 18884 18885 If a `#' appears as the first character of a line then the whole 18886line is treated as a comment, but in this case the line could also be a 18887logical line number directive (*note Comments::) or a preprocessor 18888control command (*note Preprocessing::). 18889 18890 If the assembler has been configured for the ppc-*-solaris* target 18891then the `!' character also acts as a line comment character. This can 18892be disabled via the `-mno-solaris' command-line option. 18893 18894 The `;' character can be used to separate statements on the same 18895line. 18896 18897 18898File: as.info, Node: PRU-Dependent, Next: RISC-V-Dependent, Prev: PPC-Dependent, Up: Machine Dependencies 18899 189009.37 PRU Dependent Features 18901=========================== 18902 18903* Menu: 18904 18905* PRU Options:: Options 18906* PRU Syntax:: Syntax 18907* PRU Relocations:: Relocations 18908* PRU Directives:: PRU Machine Directives 18909* PRU Opcodes:: Opcodes 18910 18911 18912File: as.info, Node: PRU Options, Next: PRU Syntax, Up: PRU-Dependent 18913 189149.37.1 Options 18915-------------- 18916 18917`-mlink-relax' 18918 Assume that LD would optimize LDI32 instructions by checking the 18919 upper 16 bits of the EXPRESSION. If they are all zeros, then LD 18920 would shorten the LDI32 instruction to a single LDI. In such case 18921 `as' will output DIFF relocations for diff expressions. 18922 18923`-mno-link-relax' 18924 Assume that LD would not optimize LDI32 instructions. As a 18925 consequence, DIFF relocations will not be emitted. 18926 18927`-mno-warn-regname-label' 18928 Do not warn if a label name matches a register name. Usually 18929 assembler programmers will want this warning to be emitted. C 18930 compilers may want to turn this off. 18931 18932 18933 18934File: as.info, Node: PRU Syntax, Next: PRU Relocations, Prev: PRU Options, Up: PRU-Dependent 18935 189369.37.2 Syntax 18937------------- 18938 18939* Menu: 18940 18941* PRU Chars:: Special Characters 18942 18943 18944File: as.info, Node: PRU Chars, Up: PRU Syntax 18945 189469.37.2.1 Special Characters 18947........................... 18948 18949`#' and `;' are the line comment characters. 18950 18951 18952File: as.info, Node: PRU Relocations, Next: PRU Directives, Prev: PRU Syntax, Up: PRU-Dependent 18953 189549.37.3 PRU Machine Relocations 18955------------------------------ 18956 18957`%pmem(EXPRESSION)' 18958 Convert EXPRESSION from byte-address to a word-address. In other 18959 words, shift right by two. 18960 18961`%label(EXPRESSION)' 18962 Mark the given operand as a label. This is useful if you need to 18963 jump to a label that matches a register name. 18964 18965 r1: 18966 jmp r1 ; Will jump to register R1 18967 jmp %label(r1) ; Will jump to label r1 18968 18969 18970 18971File: as.info, Node: PRU Directives, Next: PRU Opcodes, Prev: PRU Relocations, Up: PRU-Dependent 18972 189739.37.4 PRU Machine Directives 18974----------------------------- 18975 18976`.align EXPRESSION [, EXPRESSION]' 18977 This is the generic `.align' directive, however this aligns to a 18978 power of two. 18979 18980`.word EXPRESSION' 18981 Create an aligned constant 4 bytes in size. 18982 18983`.dword EXPRESSION' 18984 Create an aligned constant 8 bytes in size. 18985 18986`.2byte EXPRESSION' 18987 Create an unaligned constant 2 bytes in size. 18988 18989`.4byte EXPRESSION' 18990 Create an unaligned constant 4 bytes in size. 18991 18992`.8byte EXPRESSION' 18993 Create an unaligned constant 8 bytes in size. 18994 18995`.16byte EXPRESSION' 18996 Create an unaligned constant 16 bytes in size. 18997 18998`.set no_warn_regname_label' 18999 Do not output warnings when a label name matches a register name. 19000 Equivalent to passing the `-mno-warn-regname-label' command-line 19001 option. 19002 19003 19004 19005File: as.info, Node: PRU Opcodes, Prev: PRU Directives, Up: PRU-Dependent 19006 190079.37.5 Opcodes 19008-------------- 19009 19010`as' implements all the standard PRU core V3 opcodes in the original 19011pasm assembler. Older cores are not supported by `as'. 19012 19013 GAS also implements the LDI32 pseudo instruction for loading a 32-bit 19014immediate value into a register. 19015 19016 ldi32 sp, __stack_top 19017 ldi32 r14, 0x12345678 19018 19019 19020File: as.info, Node: RISC-V-Dependent, Next: RL78-Dependent, Prev: PRU-Dependent, Up: Machine Dependencies 19021 190229.38 RISC-V Dependent Features 19023============================== 19024 19025* Menu: 19026 19027* RISC-V-Options:: RISC-V Options 19028* RISC-V-Directives:: RISC-V Directives 19029* RISC-V-Modifiers:: RISC-V Assembler Modifiers 19030* RISC-V-Formats:: RISC-V Instruction Formats 19031* RISC-V-ATTRIBUTE:: RISC-V Object Attribute 19032 19033 19034File: as.info, Node: RISC-V-Options, Next: RISC-V-Directives, Up: RISC-V-Dependent 19035 190369.38.1 RISC-V Options 19037--------------------- 19038 19039The following table lists all available RISC-V specific options. 19040 19041`-fpic' 19042`-fPIC' 19043 Generate position-independent code 19044 19045`-fno-pic' 19046 Don't generate position-independent code (default) 19047 19048`-march=ISA' 19049 Select the base isa, as specified by ISA. For example 19050 -march=rv32ima. If this option and the architecture attributes 19051 aren't set, then assembler will check the default configure 19052 setting -with-arch=ISA. 19053 19054`-misa-spec=ISAspec' 19055 Select the default isa spec version. If the version of ISA isn't 19056 set by -march, then assembler helps to set the version according to 19057 the default chosen spec. If this option isn't set, then assembler 19058 will check the default configure setting -with-isa-spec=ISAspec. 19059 19060`-mpriv-spec=PRIVspec' 19061 Select the privileged spec version. We can decide whether the CSR 19062 is valid or not according to the chosen spec. If this option and 19063 the privilege attributes aren't set, then assembler will check the 19064 default configure setting -with-priv-spec=PRIVspec. 19065 19066`-mabi=ABI' 19067 Selects the ABI, which is either "ilp32" or "lp64", optionally 19068 followed by "f", "d", or "q" to indicate single-precision, 19069 double-precision, or quad-precision floating-point calling 19070 convention, or none to indicate the soft-float calling convention. 19071 Also, "ilp32" can optionally be followed by "e" to indicate the 19072 RVE ABI, which is always soft-float. 19073 19074`-mrelax' 19075 Take advantage of linker relaxations to reduce the number of 19076 instructions required to materialize symbol addresses. (default) 19077 19078`-mno-relax' 19079 Don't do linker relaxations. 19080 19081`-march-attr' 19082 Generate the default contents for the riscv elf attribute section 19083 if the .attribute directives are not set. This section is used to 19084 record the information that a linker or runtime loader needs to 19085 check compatibility. This information includes ISA string, stack 19086 alignment requirement, unaligned memory accesses, and the major, 19087 minor and revision version of privileged specification. 19088 19089`-mno-arch-attr' 19090 Don't generate the default riscv elf attribute section if the 19091 .attribute directives are not set. 19092 19093`-mcsr-check' 19094 Enable the CSR checking for the ISA-dependent CRS and the 19095 read-only CSR. The ISA-dependent CSR are only valid when the 19096 specific ISA is set. The read-only CSR can not be written by the 19097 CSR instructions. 19098 19099`-mno-csr-check' 19100 Don't do CSR checking. 19101 19102`-mlittle-endian' 19103 Generate code for a little endian machine. 19104 19105`-mbig-endian' 19106 Generate code for a big endian machine. 19107 19108 19109File: as.info, Node: RISC-V-Directives, Next: RISC-V-Modifiers, Prev: RISC-V-Options, Up: RISC-V-Dependent 19110 191119.38.2 RISC-V Directives 19112------------------------ 19113 19114The following table lists all available RISC-V specific directives. 19115 19116`.align SIZE-LOG-2' 19117 Align to the given boundary, with the size given as log2 the 19118 number of bytes to align to. 19119 19120`.half VALUE' 19121`.word VALUE' 19122`.dword VALUE' 19123 Emits a half-word, word, or double-word value at the current 19124 position. 19125 19126`.dtprelword VALUE' 19127`.dtpreldword VALUE' 19128 Emits a DTP-relative word (or double-word) at the current 19129 position. This is meant to be used by the compiler in shared 19130 libraries for DWARF debug info for thread local variables. 19131 19132`.bss' 19133 Sets the current section to the BSS section. 19134 19135`.uleb128 VALUE' 19136`.sleb128 VALUE' 19137 Emits a signed or unsigned LEB128 value at the current position. 19138 This only accepts constant expressions, because symbol addresses 19139 can change with relaxation, and we don't support relocations to 19140 modify LEB128 values at link time. 19141 19142`.option ARGUMENT' 19143 Modifies RISC-V specific assembler options inline with the 19144 assembly code. This is used when particular instruction sequences 19145 must be assembled with a specific set of options. For example, 19146 since we relax addressing sequences to shorter GP-relative 19147 sequences when possible the initial load of GP must not be relaxed 19148 and should be emitted as something like 19149 19150 .option push 19151 .option norelax 19152 la gp, __global_pointer$ 19153 .option pop 19154 19155 in order to produce after linker relaxation the expected 19156 19157 auipc gp, %pcrel_hi(__global_pointer$) 19158 addi gp, gp, %pcrel_lo(__global_pointer$) 19159 19160 instead of just 19161 19162 addi gp, gp, 0 19163 19164 It's not expected that options are changed in this manner during 19165 regular use, but there are a handful of esoteric cases like the 19166 one above where users need to disable particular features of the 19167 assembler for particular code sequences. The complete list of 19168 option arguments is shown below: 19169 19170 `push' 19171 `pop' 19172 Pushes or pops the current option stack. These should be 19173 used whenever changing an option in line with assembly code 19174 in order to ensure the user's command-line options are 19175 respected for the bulk of the file being assembled. 19176 19177 `rvc' 19178 `norvc' 19179 Enables or disables the generation of compressed 19180 instructions. Instructions are opportunistically compressed 19181 by the RISC-V assembler when possible, but sometimes this 19182 behavior is not desirable, especially when handling 19183 alignments. 19184 19185 `pic' 19186 `nopic' 19187 Enables or disables position-independent code generation. 19188 Unless you really know what you're doing, this should only be 19189 at the top of a file. 19190 19191 `relax' 19192 `norelax' 19193 Enables or disables relaxation. The RISC-V assembler and 19194 linker opportunistically relax some code sequences, but 19195 sometimes this behavior is not desirable. 19196 19197 `csr-check' 19198 `no-csr-check' 19199 Enables or disables the CSR checking. 19200 19201 `arch, +EXTENSION[VERSION] [,...,+EXTENSION_N[VERSION_N]]' 19202 `arch, -EXTENSION [,...,-EXTENSION_N]' 19203 `arch, =ISA' 19204 Enables or disables the extensions for specific code region. 19205 For example, `.option arch, +m2p0' means add m extension with 19206 version 2.0, and `.option arch, -f, -d' means remove 19207 extensions, f and d, from the architecture string. Note 19208 that, `.option arch, +c, -c' have the same behavior as 19209 `.option rvc, norvc'. However, they are also undesirable 19210 sometimes. Besides, `.option arch, -i' is illegal, since we 19211 cannot remove the base i extension anytime. If you want to 19212 reset the whole ISA string, you can also use `.option arch, 19213 =rv32imac' to overwrite the previous settings. 19214 19215`.insn TYPE, OPERAND [,...,OPERAND_N]' 19216`.insn INSN_LENGTH, VALUE' 19217`.insn VALUE' 19218 This directive permits the numeric representation of an 19219 instructions and makes the assembler insert the operands according 19220 to one of the instruction formats for `.insn' (*Note 19221 RISC-V-Formats::). For example, the instruction `add a0, a1, a2' 19222 could be written as `.insn r 0x33, 0, 0, a0, a1, a2'. But in 19223 fact, the instruction formats are difficult to use for some users, 19224 so most of them are using `.word' to encode the instruction 19225 directly, rather than using `.insn'. It is fine for now, but will 19226 be wrong when the mapping symbols are supported, since `.word' 19227 will not be shown as an instruction, it should be shown as data. 19228 Therefore, we also support two more formats of the `.insn', the 19229 instruction `add a0, a1, a2' could also be written as `.insn 0x4, 19230 0xc58533' or `.insn 0xc58533'. When the INSN_LENGTH is set, then 19231 assembler will check if the VALUE is a valid INSN_LENGTH bytes 19232 instruction. 19233 19234`.attribute TAG, VALUE' 19235 Set the object attribute TAG to VALUE. 19236 19237 The TAG is either an attribute number, or one of the following: 19238 `Tag_RISCV_arch', `Tag_RISCV_stack_align', 19239 `Tag_RISCV_unaligned_access', `Tag_RISCV_priv_spec', 19240 `Tag_RISCV_priv_spec_minor', `Tag_RISCV_priv_spec_revision'. 19241 19242 19243 19244File: as.info, Node: RISC-V-Modifiers, Next: RISC-V-Formats, Prev: RISC-V-Directives, Up: RISC-V-Dependent 19245 192469.38.3 RISC-V Assembler Modifiers 19247--------------------------------- 19248 19249The RISC-V assembler supports following modifiers for relocatable 19250addresses used in RISC-V instruction operands. However, we also 19251support some pseudo instructions that are easier to use than these 19252modifiers. 19253 19254`%lo(SYMBOL)' 19255 The low 12 bits of absolute address for SYMBOL. 19256 19257`%hi(SYMBOL)' 19258 The high 20 bits of absolute address for SYMBOL. This is usually 19259 used with the %lo modifier to represent a 32-bit absolute address. 19260 19261 lui a0, %hi(SYMBOL) // R_RISCV_HI20 19262 addi a0, a0, %lo(SYMBOL) // R_RISCV_LO12_I 19263 19264 lui a0, %hi(SYMBOL) // R_RISCV_HI20 19265 load/store a0, %lo(SYMBOL)(a0) // R_RISCV_LO12_I/S 19266 19267`%pcrel_lo(LABEL)' 19268 The low 12 bits of relative address between pc and SYMBOL. The 19269 SYMBOL is related to the high part instruction which is marked by 19270 LABEL. 19271 19272`%pcrel_hi(SYMBOL)' 19273 The high 20 bits of relative address between pc and SYMBOL. This 19274 is usually used with the %pcrel_lo modifier to represent a +/-2GB 19275 pc-relative range. 19276 19277 LABEL: 19278 auipc a0, %pcrel_hi(SYMBOL) // R_RISCV_PCREL_HI20 19279 addi a0, a0, %pcrel_lo(LABEL) // R_RISCV_PCREL_LO12_I 19280 19281 LABEL: 19282 auipc a0, %pcrel_hi(SYMBOL) // R_RISCV_PCREL_HI20 19283 load/store a0, %pcrel_lo(LABEL)(a0) // R_RISCV_PCREL_LO12_I/S 19284 19285 Or you can use the pseudo lla/lw/sw/... instruction to do this. 19286 19287 lla a0, SYMBOL 19288 19289`%got_pcrel_hi(SYMBOL)' 19290 The high 20 bits of relative address between pc and the GOT entry 19291 of SYMBOL. This is usually used with the %pcrel_lo modifier to 19292 access the GOT entry. 19293 19294 LABEL: 19295 auipc a0, %got_pcrel_hi(SYMBOL) // R_RISCV_GOT_HI20 19296 addi a0, a0, %pcrel_lo(LABEL) // R_RISCV_PCREL_LO12_I 19297 19298 LABEL: 19299 auipc a0, %got_pcrel_hi(SYMBOL) // R_RISCV_GOT_HI20 19300 load/store a0, %pcrel_lo(LABEL)(a0) // R_RISCV_PCREL_LO12_I/S 19301 19302 Also, the pseudo la instruction with PIC has similar behavior. 19303 19304`%tprel_add(SYMBOL)' 19305 This is used purely to associate the R_RISCV_TPREL_ADD relocation 19306 for TLS relaxation. This one is only valid as the fourth operand 19307 to the normally 3 operand add instruction. 19308 19309`%tprel_lo(SYMBOL)' 19310 The low 12 bits of relative address between tp and SYMBOL. 19311 19312`%tprel_hi(SYMBOL)' 19313 The high 20 bits of relative address between tp and SYMBOL. This 19314 is usually used with the %tprel_lo and %tprel_add modifiers to 19315 access the thread local variable SYMBOL in TLS Local Exec. 19316 19317 lui a5, %tprel_hi(SYMBOL) // R_RISCV_TPREL_HI20 19318 add a5, a5, tp, %tprel_add(SYMBOL) // R_RISCV_TPREL_ADD 19319 load/store t0, %tprel_lo(SYMBOL)(a5) // R_RISCV_TPREL_LO12_I/S 19320 19321`%tls_ie_pcrel_hi(SYMBOL)' 19322 The high 20 bits of relative address between pc and GOT entry. It 19323 is usually used with the %pcrel_lo modifier to access the thread 19324 local variable SYMBOL in TLS Initial Exec. 19325 19326 la.tls.ie a5, SYMBOL 19327 add a5, a5, tp 19328 load/store t0, 0(a5) 19329 19330 The pseudo la.tls.ie instruction can be expended to 19331 19332 LABEL: 19333 auipc a5, %tls_ie_pcrel_hi(SYMBOL) // R_RISCV_TLS_GOT_HI20 19334 load a5, %pcrel_lo(LABEL)(a5) // R_RISCV_PCREL_LO12_I 19335 19336`%tls_gd_pcrel_hi(SYMBOL)' 19337 The high 20 bits of relative address between pc and GOT entry. It 19338 is usually used with the %pcrel_lo modifier to access the thread 19339 local variable SYMBOL in TLS Global Dynamic. 19340 19341 la.tls.gd a0, SYMBOL 19342 call __tls_get_addr@plt 19343 mv a5, a0 19344 load/store t0, 0(a5) 19345 19346 The pseudo la.tls.gd instruction can be expended to 19347 19348 LABEL: 19349 auipc a0, %tls_gd_pcrel_hi(SYMBOL) // R_RISCV_TLS_GD_HI20 19350 addi a0, a0, %pcrel_lo(LABEL) // R_RISCV_PCREL_LO12_I 19351 19352 19353 19354File: as.info, Node: RISC-V-Formats, Next: RISC-V-ATTRIBUTE, Prev: RISC-V-Modifiers, Up: RISC-V-Dependent 19355 193569.38.4 RISC-V Instruction Formats 19357--------------------------------- 19358 19359The RISC-V Instruction Set Manual Volume I: User-Level ISA lists 15 19360instruction formats where some of the formats have multiple variants. 19361For the `.insn' pseudo directive the assembler recognizes some of the 19362formats. Typically, the most general variant of the instruction format 19363is used by the `.insn' directive. 19364 19365 The following table lists the abbreviations used in the table of 19366instruction formats: 19367 19368 opcode Unsigned immediate or opcode name for 7-bits opcode. 19369 opcode2 Unsigned immediate or opcode name for 2-bits opcode. 19370 func7 Unsigned immediate for 7-bits function code. 19371 func6 Unsigned immediate for 6-bits function code. 19372 func4 Unsigned immediate for 4-bits function code. 19373 func3 Unsigned immediate for 3-bits function code. 19374 func2 Unsigned immediate for 2-bits function code. 19375 rd Destination register number for operand x, can be GPR or FPR. 19376 rd' Destination register number for operand x, 19377 only accept s0-s1, a0-a5, fs0-fs1 and fa0-fa5. 19378 rs1 First source register number for operand x, can be GPR or FPR. 19379 rs1' First source register number for operand x, 19380 only accept s0-s1, a0-a5, fs0-fs1 and fa0-fa5. 19381 rs2 Second source register number for operand x, can be GPR or FPR. 19382 rs2' Second source register number for operand x, 19383 only accept s0-s1, a0-a5, fs0-fs1 and fa0-fa5. 19384 simm12 Sign-extended 12-bit immediate for operand x. 19385 simm20 Sign-extended 20-bit immediate for operand x. 19386 simm6 Sign-extended 6-bit immediate for operand x. 19387 uimm5 Unsigned 5-bit immediate for operand x. 19388 uimm6 Unsigned 6-bit immediate for operand x. 19389 uimm8 Unsigned 8-bit immediate for operand x. 19390 symbol Symbol or lable reference for operand x. 19391 19392 The following table lists all available opcode name: 19393 19394`C0' 19395 19396`C1' 19397 19398`C2' 19399 Opcode space for compressed instructions. 19400 19401`LOAD' 19402 Opcode space for load instructions. 19403 19404`LOAD_FP' 19405 Opcode space for floating-point load instructions. 19406 19407`STORE' 19408 Opcode space for store instructions. 19409 19410`STORE_FP' 19411 Opcode space for floating-point store instructions. 19412 19413`AUIPC' 19414 Opcode space for auipc instruction. 19415 19416`LUI' 19417 Opcode space for lui instruction. 19418 19419`BRANCH' 19420 Opcode space for branch instructions. 19421 19422`JAL' 19423 Opcode space for jal instruction. 19424 19425`JALR' 19426 Opcode space for jalr instruction. 19427 19428`OP' 19429 Opcode space for ALU instructions. 19430 19431`OP_32' 19432 Opcode space for 32-bits ALU instructions. 19433 19434`OP_IMM' 19435 Opcode space for ALU with immediate instructions. 19436 19437`OP_IMM_32' 19438 Opcode space for 32-bits ALU with immediate instructions. 19439 19440`OP_FP' 19441 Opcode space for floating-point operation instructions. 19442 19443`MADD' 19444 Opcode space for madd instruction. 19445 19446`MSUB' 19447 Opcode space for msub instruction. 19448 19449`NMADD' 19450 Opcode space for nmadd instruction. 19451 19452`NMSUB' 19453 Opcode space for msub instruction. 19454 19455`AMO' 19456 Opcode space for atomic memory operation instructions. 19457 19458`MISC_MEM' 19459 Opcode space for misc instructions. 19460 19461`SYSTEM' 19462 Opcode space for system instructions. 19463 19464`CUSTOM_0' 19465 19466`CUSTOM_1' 19467 19468`CUSTOM_2' 19469 19470`CUSTOM_3' 19471 Opcode space for customize instructions. 19472 19473 19474 An instruction is two or four bytes in length and must be aligned on 19475a 2 byte boundary. The first two bits of the instruction specify the 19476length of the instruction, 00, 01 and 10 indicates a two byte 19477instruction, 11 indicates a four byte instruction. 19478 19479 The following table lists the RISC-V instruction formats that are 19480available with the `.insn' pseudo directive: 19481 19482`R type: .insn r opcode6, func3, func7, rd, rs1, rs2' 19483 19484 +-------+-----+-----+-------+----+---------+ 19485 | func7 | rs2 | rs1 | func3 | rd | opcode6 | 19486 +-------+-----+-----+-------+----+---------+ 19487 31 25 20 15 12 7 0 19488 19489`R type with 4 register operands: .insn r opcode6, func3, func2, rd, rs1, rs2, rs3' 19490`R4 type: .insn r4 opcode6, func3, func2, rd, rs1, rs2, rs3' 19491 19492 +-----+-------+-----+-----+-------+----+---------+ 19493 | rs3 | func2 | rs2 | rs1 | func3 | rd | opcode6 | 19494 +-----+-------+-----+-----+-------+----+---------+ 19495 31 27 25 20 15 12 7 0 19496 19497`I type: .insn i opcode6, func3, rd, rs1, simm12' 19498`I type: .insn i opcode6, func3, rd, simm12(rs1)' 19499 19500 +--------------+-----+-------+----+---------+ 19501 | simm12[11:0] | rs1 | func3 | rd | opcode6 | 19502 +--------------+-----+-------+----+---------+ 19503 31 20 15 12 7 0 19504 19505`S type: .insn s opcode6, func3, rs2, simm12(rs1)' 19506 19507 +--------------+-----+-----+-------+-------------+---------+ 19508 | simm12[11:5] | rs2 | rs1 | func3 | simm12[4:0] | opcode6 | 19509 +--------------+-----+-----+-------+-------------+---------+ 19510 31 25 20 15 12 7 0 19511 19512`B type: .insn s opcode6, func3, rs1, rs2, symbol' 19513`SB type: .insn sb opcode6, func3, rs1, rs2, symbol' 19514 19515 +-----------------+-----+-----+-------+----------------+---------+ 19516 | simm12[12|10:5] | rs2 | rs1 | func3 | simm12[4:1|11] | opcode6 | 19517 +-----------------+-----+-----+-------+----------------+---------+ 19518 31 25 20 15 12 7 0 19519 19520`U type: .insn u opcode6, rd, simm20' 19521 19522 +--------------------------+----+---------+ 19523 | simm20[20|10:1|11|19:12] | rd | opcode6 | 19524 +--------------------------+----+---------+ 19525 31 12 7 0 19526 19527`J type: .insn j opcode6, rd, symbol' 19528`UJ type: .insn uj opcode6, rd, symbol' 19529 19530 +------------+--------------+------------+---------------+----+---------+ 19531 | simm20[20] | simm20[10:1] | simm20[11] | simm20[19:12] | rd | opcode6 | 19532 +------------+--------------+------------+---------------+----+---------+ 19533 31 30 21 20 12 7 0 19534 19535`CR type: .insn cr opcode2, func4, rd, rs2' 19536 19537 +-------+--------+-----+---------+ 19538 | func4 | rd/rs1 | rs2 | opcode2 | 19539 +-------+--------+-----+---------+ 19540 15 12 7 2 0 19541 19542`CI type: .insn ci opcode2, func3, rd, simm6' 19543 19544 +-------+----------+--------+------------+---------+ 19545 | func3 | simm6[5] | rd/rs1 | simm6[4:0] | opcode2 | 19546 +-------+----------+--------+------------+---------+ 19547 15 13 12 7 2 0 19548 19549`CIW type: .insn ciw opcode2, func3, rd', uimm8' 19550 19551 +-------+------------+-----+---------+ 19552 | func3 | uimm8[7:0] | rd' | opcode2 | 19553 +-------+-------- ---+-----+---------+ 19554 15 13 5 2 0 19555 19556`CSS type: .insn css opcode2, func3, rd, uimm6' 19557 19558 +-------+------------+----+---------+ 19559 | func3 | uimm6[5:0] | rd | opcode2 | 19560 +-------+------------+----+---------+ 19561 15 13 7 2 0 19562 19563`CL type: .insn cl opcode2, func3, rd', uimm5(rs1')' 19564 19565 +-------+------------+------+------------+------+---------+ 19566 | func3 | uimm5[4:2] | rs1' | uimm5[1:0] | rd' | opcode2 | 19567 +-------+------------+------+------------+------+---------+ 19568 15 13 10 7 5 2 0 19569 19570`CS type: .insn cs opcode2, func3, rs2', uimm5(rs1')' 19571 19572 +-------+------------+------+------------+------+---------+ 19573 | func3 | uimm5[4:2] | rs1' | uimm5[1:0] | rs2' | opcode2 | 19574 +-------+------------+------+------------+------+---------+ 19575 15 13 10 7 5 2 0 19576 19577`CA type: .insn ca opcode2, func6, func2, rd', rs2'' 19578 19579 +-- ----+----------+-------+------+---------+ 19580 | func6 | rd'/rs1' | func2 | rs2' | opcode2 | 19581 +-------+----------+-------+------+---------+ 19582 15 10 7 5 2 0 19583 19584`CB type: .insn cb opcode2, func3, rs1', symbol' 19585 19586 +-------+--------------+------+------------------+---------+ 19587 | func3 | simm8[8|4:3] | rs1' | simm8[7:6|2:1|5] | opcode2 | 19588 +-------+--------------+------+------------------+---------+ 19589 15 13 10 7 2 0 19590 19591`CJ type: .insn cj opcode2, symbol' 19592 19593 +-------+-------------------------------+---------+ 19594 | func3 | simm11[11|4|9:8|10|6|7|3:1|5] | opcode2 | 19595 +-------+-------------------------------+---------+ 19596 15 13 2 0 19597 19598 19599 For the complete list of all instruction format variants see The 19600RISC-V Instruction Set Manual Volume I: User-Level ISA. 19601 19602 19603File: as.info, Node: RISC-V-ATTRIBUTE, Prev: RISC-V-Formats, Up: RISC-V-Dependent 19604 196059.38.5 RISC-V Object Attribute 19606------------------------------ 19607 19608RISC-V attributes have a string value if the tag number is odd and an 19609integer value if the tag number is even. 19610 19611Tag_RISCV_stack_align (4) 19612 Tag_RISCV_strict_align records the N-byte stack alignment for this 19613 object. The default value is 16 for RV32I or RV64I, and 4 for 19614 RV32E. 19615 19616 The smallest value will be used if object files with different 19617 Tag_RISCV_stack_align values are merged. 19618 19619Tag_RISCV_arch (5) 19620 Tag_RISCV_arch contains a string for the target architecture taken 19621 from the option `-march'. Different architectures will be 19622 integrated into a superset when object files are merged. 19623 19624 Note that the version information of the target architecture must 19625 be presented explicitly in the attribute and abbreviations must be 19626 expanded. The version information, if not given by `-march', must 19627 be in accordance with the default specified by the tool. For 19628 example, the architecture `RV32I' has to be recorded in the 19629 attribute as `RV32I2P0' in which `2P0' stands for the default 19630 version of its base ISA. On the other hand, the architecture 19631 `RV32G' has to be presented as `RV32I2P0_M2P0_A2P0_F2P0_D2P0' in 19632 which the abbreviation `G' is expanded to the `IMAFD' combination 19633 with default versions of the standard extensions. 19634 19635Tag_RISCV_unaligned_access (6) 19636 Tag_RISCV_unaligned_access is 0 for files that do not allow any 19637 unaligned memory accesses, and 1 for files that do allow unaligned 19638 memory accesses. 19639 19640Tag_RISCV_priv_spec (8) 19641 19642Tag_RISCV_priv_spec_minor (10) 19643 19644Tag_RISCV_priv_spec_revision (12) 19645 Tag_RISCV_priv_spec contains the major/minor/revision version 19646 information of the privileged specification. It will report 19647 errors if object files of different privileged specification 19648 versions are merged. 19649 19650 19651 19652File: as.info, Node: RL78-Dependent, Next: RX-Dependent, Prev: RISC-V-Dependent, Up: Machine Dependencies 19653 196549.39 RL78 Dependent Features 19655============================ 19656 19657* Menu: 19658 19659* RL78-Opts:: RL78 Assembler Command-line Options 19660* RL78-Modifiers:: Symbolic Operand Modifiers 19661* RL78-Directives:: Assembler Directives 19662* RL78-Syntax:: Syntax 19663 19664 19665File: as.info, Node: RL78-Opts, Next: RL78-Modifiers, Up: RL78-Dependent 19666 196679.39.1 RL78 Options 19668------------------- 19669 19670`relax' 19671 Enable support for link-time relaxation. 19672 19673`norelax' 19674 Disable support for link-time relaxation (default). 19675 19676`mg10' 19677 Mark the generated binary as targeting the G10 variant of the RL78 19678 architecture. 19679 19680`mg13' 19681 Mark the generated binary as targeting the G13 variant of the RL78 19682 architecture. 19683 19684`mg14' 19685`mrl78' 19686 Mark the generated binary as targeting the G14 variant of the RL78 19687 architecture. This is the default. 19688 19689`m32bit-doubles' 19690 Mark the generated binary as one that uses 32-bits to hold the 19691 `double' floating point type. This is the default. 19692 19693`m64bit-doubles' 19694 Mark the generated binary as one that uses 64-bits to hold the 19695 `double' floating point type. 19696 19697 19698 19699File: as.info, Node: RL78-Modifiers, Next: RL78-Directives, Prev: RL78-Opts, Up: RL78-Dependent 19700 197019.39.2 Symbolic Operand Modifiers 19702--------------------------------- 19703 19704The RL78 has three modifiers that adjust the relocations used by the 19705linker: 19706 19707`%lo16()' 19708 When loading a 20-bit (or wider) address into registers, this 19709 modifier selects the 16 least significant bits. 19710 19711 movw ax,#%lo16(_sym) 19712 19713`%hi16()' 19714 When loading a 20-bit (or wider) address into registers, this 19715 modifier selects the 16 most significant bits. 19716 19717 movw ax,#%hi16(_sym) 19718 19719`%hi8()' 19720 When loading a 20-bit (or wider) address into registers, this 19721 modifier selects the 8 bits that would go into CS or ES (i.e. bits 19722 23..16). 19723 19724 mov es, #%hi8(_sym) 19725 19726 19727 19728File: as.info, Node: RL78-Directives, Next: RL78-Syntax, Prev: RL78-Modifiers, Up: RL78-Dependent 19729 197309.39.3 Assembler Directives 19731--------------------------- 19732 19733In addition to the common directives, the RL78 adds these: 19734 19735`.double' 19736 Output a constant in "double" format, which is either a 32-bit or 19737 a 64-bit floating point value, depending upon the setting of the 19738 `-m32bit-doubles'|`-m64bit-doubles' command-line option. 19739 19740`.bss' 19741 Select the BSS section. 19742 19743`.3byte' 19744 Output a constant value in a three byte format. 19745 19746`.int' 19747`.word' 19748 Output a constant value in a four byte format. 19749 19750 19751 19752File: as.info, Node: RL78-Syntax, Prev: RL78-Directives, Up: RL78-Dependent 19753 197549.39.4 Syntax for the RL78 19755-------------------------- 19756 19757* Menu: 19758 19759* RL78-Chars:: Special Characters 19760 19761 19762File: as.info, Node: RL78-Chars, Up: RL78-Syntax 19763 197649.39.4.1 Special Characters 19765........................... 19766 19767The presence of a `;' appearing anywhere on a line indicates the start 19768of a comment that extends to the end of that line. 19769 19770 If a `#' appears as the first character of a line then the whole 19771line is treated as a comment, but in this case the line can also be a 19772logical line number directive (*note Comments::) or a preprocessor 19773control command (*note Preprocessing::). 19774 19775 The `|' character can be used to separate statements on the same 19776line. 19777 19778 19779File: as.info, Node: RX-Dependent, Next: S/390-Dependent, Prev: RL78-Dependent, Up: Machine Dependencies 19780 197819.40 RX Dependent Features 19782========================== 19783 19784* Menu: 19785 19786* RX-Opts:: RX Assembler Command-line Options 19787* RX-Modifiers:: Symbolic Operand Modifiers 19788* RX-Directives:: Assembler Directives 19789* RX-Float:: Floating Point 19790* RX-Syntax:: Syntax 19791 19792 19793File: as.info, Node: RX-Opts, Next: RX-Modifiers, Up: RX-Dependent 19794 197959.40.1 RX Options 19796----------------- 19797 19798The Renesas RX port of `as' has a few target specific command-line 19799options: 19800 19801`-m32bit-doubles' 19802 This option controls the ABI and indicates to use a 32-bit float 19803 ABI. It has no effect on the assembled instructions, but it does 19804 influence the behaviour of the `.double' pseudo-op. This is the 19805 default. 19806 19807`-m64bit-doubles' 19808 This option controls the ABI and indicates to use a 64-bit float 19809 ABI. It has no effect on the assembled instructions, but it does 19810 influence the behaviour of the `.double' pseudo-op. 19811 19812`-mbig-endian' 19813 This option controls the ABI and indicates to use a big-endian data 19814 ABI. It has no effect on the assembled instructions, but it does 19815 influence the behaviour of the `.short', `.hword', `.int', 19816 `.word', `.long', `.quad' and `.octa' pseudo-ops. 19817 19818`-mlittle-endian' 19819 This option controls the ABI and indicates to use a little-endian 19820 data ABI. It has no effect on the assembled instructions, but it 19821 does influence the behaviour of the `.short', `.hword', `.int', 19822 `.word', `.long', `.quad' and `.octa' pseudo-ops. This is the 19823 default. 19824 19825`-muse-conventional-section-names' 19826 This option controls the default names given to the code (.text), 19827 initialised data (.data) and uninitialised data sections (.bss). 19828 19829`-muse-renesas-section-names' 19830 This option controls the default names given to the code (P), 19831 initialised data (D_1) and uninitialised data sections (B_1). 19832 This is the default. 19833 19834`-msmall-data-limit' 19835 This option tells the assembler that the small data limit feature 19836 of the RX port of GCC is being used. This results in the assembler 19837 generating an undefined reference to a symbol called `__gp' for 19838 use by the relocations that are needed to support the small data 19839 limit feature. This option is not enabled by default as it would 19840 otherwise pollute the symbol table. 19841 19842`-mpid' 19843 This option tells the assembler that the position independent data 19844 of the RX port of GCC is being used. This results in the assembler 19845 generating an undefined reference to a symbol called `__pid_base', 19846 and also setting the RX_PID flag bit in the e_flags field of the 19847 ELF header of the object file. 19848 19849`-mint-register=NUM' 19850 This option tells the assembler how many registers have been 19851 reserved for use by interrupt handlers. This is needed in order 19852 to compute the correct values for the `%gpreg' and `%pidreg' meta 19853 registers. 19854 19855`-mgcc-abi' 19856 This option tells the assembler that the old GCC ABI is being used 19857 by the assembled code. With this version of the ABI function 19858 arguments that are passed on the stack are aligned to a 32-bit 19859 boundary. 19860 19861`-mrx-abi' 19862 This option tells the assembler that the official RX ABI is being 19863 used by the assembled code. With this version of the ABI function 19864 arguments that are passed on the stack are aligned to their natural 19865 alignments. This option is the default. 19866 19867`-mcpu=NAME' 19868 This option tells the assembler the target CPU type. Currently the 19869 `rx100', `rx200', `rx600', `rx610', `rxv2', `rxv3' and `rxv3-dfpu' 19870 are recognised as valid cpu names. Attempting to assemble an 19871 instructionnot supported by the indicated cpu type will result in 19872 an error message being generated. 19873 19874`-mno-allow-string-insns' 19875 This option tells the assembler to mark the object file that it is 19876 building as one that does not use the string instructions `SMOVF', 19877 `SCMPU', `SMOVB', `SMOVU', `SUNTIL' `SWHILE' or the `RMPA' 19878 instruction. In addition the mark tells the linker to complain if 19879 an attempt is made to link the binary with another one that does 19880 use any of these instructions. 19881 19882 Note - the inverse of this option, `-mallow-string-insns', is not 19883 needed. The assembler automatically detects the use of the the 19884 instructions in the source code and labels the resulting object 19885 file appropriately. If no string instructions are detected then 19886 the object file is labelled as being one that can be linked with 19887 either string-using or string-banned object files. 19888 19889 19890File: as.info, Node: RX-Modifiers, Next: RX-Directives, Prev: RX-Opts, Up: RX-Dependent 19891 198929.40.2 Symbolic Operand Modifiers 19893--------------------------------- 19894 19895The assembler supports one modifier when using symbol addresses in RX 19896instruction operands. The general syntax is the following: 19897 19898 %gp(symbol) 19899 19900 The modifier returns the offset from the __GP symbol to the 19901specified symbol as a 16-bit value. The intent is that this offset 19902should be used in a register+offset move instruction when generating 19903references to small data. Ie, like this: 19904 19905 mov.W %gp(_foo)[%gpreg], r1 19906 19907 The assembler also supports two meta register names which can be used 19908to refer to registers whose values may not be known to the programmer. 19909These meta register names are: 19910 19911`%gpreg' 19912 The small data address register. 19913 19914`%pidreg' 19915 The PID base address register. 19916 19917 19918 Both registers normally have the value r13, but this can change if 19919some registers have been reserved for use by interrupt handlers or if 19920both the small data limit and position independent data features are 19921being used at the same time. 19922 19923 19924File: as.info, Node: RX-Directives, Next: RX-Float, Prev: RX-Modifiers, Up: RX-Dependent 19925 199269.40.3 Assembler Directives 19927--------------------------- 19928 19929The RX version of `as' has the following specific assembler directives: 19930 19931`.3byte' 19932 Inserts a 3-byte value into the output file at the current 19933 location. 19934 19935`.fetchalign' 19936 If the next opcode following this directive spans a fetch line 19937 boundary (8 byte boundary), the opcode is aligned to that boundary. 19938 If the next opcode does not span a fetch line, this directive has 19939 no effect. Note that one or more labels may be between this 19940 directive and the opcode; those labels are aligned as well. Any 19941 inserted bytes due to alignment will form a NOP opcode. 19942 19943 19944 19945File: as.info, Node: RX-Float, Next: RX-Syntax, Prev: RX-Directives, Up: RX-Dependent 19946 199479.40.4 Floating Point 19948--------------------- 19949 19950The floating point formats generated by directives are these. 19951 19952`.float' 19953 `Single' precision (32-bit) floating point constants. 19954 19955`.double' 19956 If the `-m64bit-doubles' command-line option has been specified 19957 then then `double' directive generates `double' precision (64-bit) 19958 floating point constants, otherwise it generates `single' 19959 precision (32-bit) floating point constants. To force the 19960 generation of 64-bit floating point constants used the `dc.d' 19961 directive instead. 19962 19963 19964 19965File: as.info, Node: RX-Syntax, Prev: RX-Float, Up: RX-Dependent 19966 199679.40.5 Syntax for the RX 19968------------------------ 19969 19970* Menu: 19971 19972* RX-Chars:: Special Characters 19973 19974 19975File: as.info, Node: RX-Chars, Up: RX-Syntax 19976 199779.40.5.1 Special Characters 19978........................... 19979 19980The presence of a `;' appearing anywhere on a line indicates the start 19981of a comment that extends to the end of that line. 19982 19983 If a `#' appears as the first character of a line then the whole 19984line is treated as a comment, but in this case the line can also be a 19985logical line number directive (*note Comments::) or a preprocessor 19986control command (*note Preprocessing::). 19987 19988 The `!' character can be used to separate statements on the same 19989line. 19990 19991 19992File: as.info, Node: S/390-Dependent, Next: SCORE-Dependent, Prev: RX-Dependent, Up: Machine Dependencies 19993 199949.41 IBM S/390 Dependent Features 19995================================= 19996 19997 The s390 version of `as' supports two architectures modes and eleven 19998chip levels. The architecture modes are the Enterprise System 19999Architecture (ESA) and the newer z/Architecture mode. The chip levels 20000are g5 (or arch3), g6, z900 (or arch5), z990 (or arch6), z9-109, z9-ec 20001(or arch7), z10 (or arch8), z196 (or arch9), zEC12 (or arch10), z13 (or 20002arch11), z14 (or arch12), z15 (or arch13), or z16 (or arch14). 20003 20004* Menu: 20005 20006* s390 Options:: Command-line Options. 20007* s390 Characters:: Special Characters. 20008* s390 Syntax:: Assembler Instruction syntax. 20009* s390 Directives:: Assembler Directives. 20010* s390 Floating Point:: Floating Point. 20011 20012 20013File: as.info, Node: s390 Options, Next: s390 Characters, Up: S/390-Dependent 20014 200159.41.1 Options 20016-------------- 20017 20018The following table lists all available s390 specific options: 20019 20020`-m31 | -m64' 20021 Select 31- or 64-bit ABI implying a word size of 32- or 64-bit. 20022 20023 These options are only available with the ELF object file format, 20024 and require that the necessary BFD support has been included (on a 20025 31-bit platform you must add -enable-64-bit-bfd on the call to the 20026 configure script to enable 64-bit usage and use s390x as target 20027 platform). 20028 20029`-mesa | -mzarch' 20030 Select the architecture mode, either the Enterprise System 20031 Architecture (esa) mode or the z/Architecture mode (zarch). 20032 20033 The 64-bit instructions are only available with the z/Architecture 20034 mode. The combination of `-m64' and `-mesa' results in a warning 20035 message. 20036 20037`-march=CPU' 20038 This option specifies the target processor. The following 20039 processor names are recognized: `g5' (or `arch3'), `g6', `z900' 20040 (or `arch5'), `z990' (or `arch6'), `z9-109', `z9-ec' (or `arch7'), 20041 `z10' (or `arch8'), `z196' (or `arch9'), `zEC12' (or `arch10'), 20042 `z13' (or `arch11'), `z14' (or `arch12'), `z15' (or `arch13'), and 20043 `z16' (or `arch14'). 20044 20045 Assembling an instruction that is not supported on the target 20046 processor results in an error message. 20047 20048 The processor names starting with `arch' refer to the edition 20049 number in the Principle of Operations manual. They can be used as 20050 alternate processor names and have been added for compatibility 20051 with the IBM XL compiler. 20052 20053 `arch3', `g5' and `g6' cannot be used with the `-mzarch' option 20054 since the z/Architecture mode is not supported on these processor 20055 levels. 20056 20057 There is no `arch4' option supported. `arch4' matches 20058 `-march=arch5 -mesa'. 20059 20060`-mregnames' 20061 Allow symbolic names for registers. 20062 20063`-mno-regnames' 20064 Do not allow symbolic names for registers. 20065 20066`-mwarn-areg-zero' 20067 Warn whenever the operand for a base or index register has been 20068 specified but evaluates to zero. This can indicate the misuse of 20069 general purpose register 0 as an address register. 20070 20071 20072 20073File: as.info, Node: s390 Characters, Next: s390 Syntax, Prev: s390 Options, Up: S/390-Dependent 20074 200759.41.2 Special Characters 20076------------------------- 20077 20078`#' is the line comment character. 20079 20080 If a `#' appears as the first character of a line then the whole 20081line is treated as a comment, but in this case the line could also be a 20082logical line number directive (*note Comments::) or a preprocessor 20083control command (*note Preprocessing::). 20084 20085 The `;' character can be used instead of a newline to separate 20086statements. 20087 20088 20089File: as.info, Node: s390 Syntax, Next: s390 Directives, Prev: s390 Characters, Up: S/390-Dependent 20090 200919.41.3 Instruction syntax 20092------------------------- 20093 20094The assembler syntax closely follows the syntax outlined in Enterprise 20095Systems Architecture/390 Principles of Operation (SA22-7201) and the 20096z/Architecture Principles of Operation (SA22-7832). 20097 20098 Each instruction has two major parts, the instruction mnemonic and 20099the instruction operands. The instruction format varies. 20100 20101* Menu: 20102 20103* s390 Register:: Register Naming 20104* s390 Mnemonics:: Instruction Mnemonics 20105* s390 Operands:: Instruction Operands 20106* s390 Formats:: Instruction Formats 20107* s390 Aliases:: Instruction Aliases 20108* s390 Operand Modifier:: Instruction Operand Modifier 20109* s390 Instruction Marker:: Instruction Marker 20110* s390 Literal Pool Entries:: Literal Pool Entries 20111 20112 20113File: as.info, Node: s390 Register, Next: s390 Mnemonics, Up: s390 Syntax 20114 201159.41.3.1 Register naming 20116........................ 20117 20118The `as' recognizes a number of predefined symbols for the various 20119processor registers. A register specification in one of the instruction 20120formats is an unsigned integer between 0 and 15. The specific 20121instruction and the position of the register in the instruction format 20122denotes the type of the register. The register symbols are prefixed with 20123`%': 20124 20125 %rN the 16 general purpose registers, 0 <= N <= 15 20126 %fN the 16 floating point registers, 0 <= N <= 15 20127 %aN the 16 access registers, 0 <= N <= 15 20128 %cN the 16 control registers, 0 <= N <= 15 20129 %lit an alias for the general purpose register %r13 20130 %sp an alias for the general purpose register %r15 20131 20132 20133File: as.info, Node: s390 Mnemonics, Next: s390 Operands, Prev: s390 Register, Up: s390 Syntax 20134 201359.41.3.2 Instruction Mnemonics 20136.............................. 20137 20138All instructions documented in the Principles of Operation are supported 20139with the mnemonic and order of operands as described. The instruction 20140mnemonic identifies the instruction format (*Note s390 Formats::) and 20141the specific operation code for the instruction. For example, the `lr' 20142mnemonic denotes the instruction format `RR' with the operation code 20143`0x18'. 20144 20145 The definition of the various mnemonics follows a scheme, where the 20146first character usually hint at the type of the instruction: 20147 20148 a add instruction, for example `al' for add logical 32-bit 20149 b branch instruction, for example `bc' for branch on condition 20150 c compare or convert instruction, for example `cr' for compare 20151 register 32-bit 20152 d divide instruction, for example `dlr' devide logical register 20153 64-bit to 32-bit 20154 i insert instruction, for example `ic' insert character 20155 l load instruction, for example `ltr' load and test register 20156 mv move instruction, for example `mvc' move character 20157 m multiply instruction, for example `mh' multiply halfword 20158 n and instruction, for example `ni' and immediate 20159 o or instruction, for example `oc' or character 20160 sla, sll shift left single instruction 20161 sra, srl shift right single instruction 20162 st store instruction, for example `stm' store multiple 20163 s subtract instruction, for example `slr' subtract 20164 logical 32-bit 20165 t test or translate instruction, of example `tm' test under mask 20166 x exclusive or instruction, for example `xc' exclusive or 20167 character 20168 20169 Certain characters at the end of the mnemonic may describe a property 20170of the instruction: 20171 20172 c the instruction uses a 8-bit character operand 20173 f the instruction extends a 32-bit operand to 64 bit 20174 g the operands are treated as 64-bit values 20175 h the operand uses a 16-bit halfword operand 20176 i the instruction uses an immediate operand 20177 l the instruction uses unsigned, logical operands 20178 m the instruction uses a mask or operates on multiple values 20179 r if r is the last character, the instruction operates on registers 20180 y the instruction uses 20-bit displacements 20181 20182 There are many exceptions to the scheme outlined in the above lists, 20183in particular for the privileged instructions. For non-privileged 20184instruction it works quite well, for example the instruction `clgfr' c: 20185compare instruction, l: unsigned operands, g: 64-bit operands, f: 32- 20186to 64-bit extension, r: register operands. The instruction compares an 2018764-bit value in a register with the zero extended 32-bit value from a 20188second register. For a complete list of all mnemonics see appendix B 20189in the Principles of Operation. 20190 20191 20192File: as.info, Node: s390 Operands, Next: s390 Formats, Prev: s390 Mnemonics, Up: s390 Syntax 20193 201949.41.3.3 Instruction Operands 20195............................. 20196 20197Instruction operands can be grouped into three classes, operands located 20198in registers, immediate operands, and operands in storage. 20199 20200 A register operand can be located in general, floating-point, access, 20201or control register. The register is identified by a four-bit field. 20202The field containing the register operand is called the R field. 20203 20204 Immediate operands are contained within the instruction and can have 202058, 16 or 32 bits. The field containing the immediate operand is called 20206the I field. Dependent on the instruction the I field is either signed 20207or unsigned. 20208 20209 A storage operand consists of an address and a length. The address 20210of a storage operands can be specified in any of these ways: 20211 20212 * The content of a single general R 20213 20214 * The sum of the content of a general register called the base 20215 register B plus the content of a displacement field D 20216 20217 * The sum of the contents of two general registers called the index 20218 register X and the base register B plus the content of a 20219 displacement field 20220 20221 * The sum of the current instruction address and a 32-bit signed 20222 immediate field multiplied by two. 20223 20224 The length of a storage operand can be: 20225 20226 * Implied by the instruction 20227 20228 * Specified by a bitmask 20229 20230 * Specified by a four-bit or eight-bit length field L 20231 20232 * Specified by the content of a general register 20233 20234 The notation for storage operand addresses formed from multiple 20235fields is as follows: 20236 20237`Dn(Bn)' 20238 the address for operand number n is formed from the content of 20239 general register Bn called the base register and the displacement 20240 field Dn. 20241 20242`Dn(Xn,Bn)' 20243 the address for operand number n is formed from the content of 20244 general register Xn called the index register, general register Bn 20245 called the base register and the displacement field Dn. 20246 20247`Dn(Ln,Bn)' 20248 the address for operand number n is formed from the content of 20249 general register Bn called the base register and the displacement 20250 field Dn. The length of the operand n is specified by the field 20251 Ln. 20252 20253 The base registers Bn and the index registers Xn of a storage 20254operand can be skipped. If Bn and Xn are skipped, a zero will be stored 20255to the operand field. The notation changes as follows: 20256 20257 full notation short notation 20258 ------------------------------------------ 20259 Dn(0,Bn) Dn(Bn) 20260 Dn(0,0) Dn 20261 Dn(0) Dn 20262 Dn(Ln,0) Dn(Ln) 20263 20264 20265File: as.info, Node: s390 Formats, Next: s390 Aliases, Prev: s390 Operands, Up: s390 Syntax 20266 202679.41.3.4 Instruction Formats 20268............................ 20269 20270The Principles of Operation manuals lists 35 instruction formats where 20271some of the formats have multiple variants. For the `.insn' pseudo 20272directive the assembler recognizes some of the formats. Typically, the 20273most general variant of the instruction format is used by the `.insn' 20274directive. 20275 20276 The following table lists the abbreviations used in the table of 20277instruction formats: 20278 20279 OpCode / OpCd Part of the op code. 20280 Bx Base register number for operand x. 20281 Dx Displacement for operand x. 20282 DLx Displacement lower 12 bits for operand x. 20283 DHx Displacement higher 8-bits for operand x. 20284 Rx Register number for operand x. 20285 Xx Index register number for operand x. 20286 Ix Signed immediate for operand x. 20287 Ux Unsigned immediate for operand x. 20288 20289 An instruction is two, four, or six bytes in length and must be 20290aligned on a 2 byte boundary. The first two bits of the instruction 20291specify the length of the instruction, 00 indicates a two byte 20292instruction, 01 and 10 indicates a four byte instruction, and 11 20293indicates a six byte instruction. 20294 20295 The following table lists the s390 instruction formats that are 20296available with the `.insn' pseudo directive: 20297 20298`E format' 20299 20300 +-------------+ 20301 | OpCode | 20302 +-------------+ 20303 0 15 20304 20305`RI format: <insn> R1,I2' 20306 20307 +--------+----+----+------------------+ 20308 | OpCode | R1 |OpCd| I2 | 20309 +--------+----+----+------------------+ 20310 0 8 12 16 31 20311 20312`RIE format: <insn> R1,R3,I2' 20313 20314 +--------+----+----+------------------+--------+--------+ 20315 | OpCode | R1 | R3 | I2 |////////| OpCode | 20316 +--------+----+----+------------------+--------+--------+ 20317 0 8 12 16 32 40 47 20318 20319`RIL format: <insn> R1,I2' 20320 20321 +--------+----+----+------------------------------------+ 20322 | OpCode | R1 |OpCd| I2 | 20323 +--------+----+----+------------------------------------+ 20324 0 8 12 16 47 20325 20326`RILU format: <insn> R1,U2' 20327 20328 +--------+----+----+------------------------------------+ 20329 | OpCode | R1 |OpCd| U2 | 20330 +--------+----+----+------------------------------------+ 20331 0 8 12 16 47 20332 20333`RIS format: <insn> R1,I2,M3,D4(B4)' 20334 20335 +--------+----+----+----+-------------+--------+--------+ 20336 | OpCode | R1 | M3 | B4 | D4 | I2 | Opcode | 20337 +--------+----+----+----+-------------+--------+--------+ 20338 0 8 12 16 20 32 36 47 20339 20340`RR format: <insn> R1,R2' 20341 20342 +--------+----+----+ 20343 | OpCode | R1 | R2 | 20344 +--------+----+----+ 20345 0 8 12 15 20346 20347`RRE format: <insn> R1,R2' 20348 20349 +------------------+--------+----+----+ 20350 | OpCode |////////| R1 | R2 | 20351 +------------------+--------+----+----+ 20352 0 16 24 28 31 20353 20354`RRF format: <insn> R1,R2,R3,M4' 20355 20356 +------------------+----+----+----+----+ 20357 | OpCode | R3 | M4 | R1 | R2 | 20358 +------------------+----+----+----+----+ 20359 0 16 20 24 28 31 20360 20361`RRS format: <insn> R1,R2,M3,D4(B4)' 20362 20363 +--------+----+----+----+-------------+----+----+--------+ 20364 | OpCode | R1 | R3 | B4 | D4 | M3 |////| OpCode | 20365 +--------+----+----+----+-------------+----+----+--------+ 20366 0 8 12 16 20 32 36 40 47 20367 20368`RS format: <insn> R1,R3,D2(B2)' 20369 20370 +--------+----+----+----+-------------+ 20371 | OpCode | R1 | R3 | B2 | D2 | 20372 +--------+----+----+----+-------------+ 20373 0 8 12 16 20 31 20374 20375`RSE format: <insn> R1,R3,D2(B2)' 20376 20377 +--------+----+----+----+-------------+--------+--------+ 20378 | OpCode | R1 | R3 | B2 | D2 |////////| OpCode | 20379 +--------+----+----+----+-------------+--------+--------+ 20380 0 8 12 16 20 32 40 47 20381 20382`RSI format: <insn> R1,R3,I2' 20383 20384 +--------+----+----+------------------------------------+ 20385 | OpCode | R1 | R3 | I2 | 20386 +--------+----+----+------------------------------------+ 20387 0 8 12 16 47 20388 20389`RSY format: <insn> R1,R3,D2(B2)' 20390 20391 +--------+----+----+----+-------------+--------+--------+ 20392 | OpCode | R1 | R3 | B2 | DL2 | DH2 | OpCode | 20393 +--------+----+----+----+-------------+--------+--------+ 20394 0 8 12 16 20 32 40 47 20395 20396`RX format: <insn> R1,D2(X2,B2)' 20397 20398 +--------+----+----+----+-------------+ 20399 | OpCode | R1 | X2 | B2 | D2 | 20400 +--------+----+----+----+-------------+ 20401 0 8 12 16 20 31 20402 20403`RXE format: <insn> R1,D2(X2,B2)' 20404 20405 +--------+----+----+----+-------------+--------+--------+ 20406 | OpCode | R1 | X2 | B2 | D2 |////////| OpCode | 20407 +--------+----+----+----+-------------+--------+--------+ 20408 0 8 12 16 20 32 40 47 20409 20410`RXF format: <insn> R1,R3,D2(X2,B2)' 20411 20412 +--------+----+----+----+-------------+----+---+--------+ 20413 | OpCode | R3 | X2 | B2 | D2 | R1 |///| OpCode | 20414 +--------+----+----+----+-------------+----+---+--------+ 20415 0 8 12 16 20 32 36 40 47 20416 20417`RXY format: <insn> R1,D2(X2,B2)' 20418 20419 +--------+----+----+----+-------------+--------+--------+ 20420 | OpCode | R1 | X2 | B2 | DL2 | DH2 | OpCode | 20421 +--------+----+----+----+-------------+--------+--------+ 20422 0 8 12 16 20 32 36 40 47 20423 20424`S format: <insn> D2(B2)' 20425 20426 +------------------+----+-------------+ 20427 | OpCode | B2 | D2 | 20428 +------------------+----+-------------+ 20429 0 16 20 31 20430 20431`SI format: <insn> D1(B1),I2' 20432 20433 +--------+---------+----+-------------+ 20434 | OpCode | I2 | B1 | D1 | 20435 +--------+---------+----+-------------+ 20436 0 8 16 20 31 20437 20438`SIY format: <insn> D1(B1),U2' 20439 20440 +--------+---------+----+-------------+--------+--------+ 20441 | OpCode | I2 | B1 | DL1 | DH1 | OpCode | 20442 +--------+---------+----+-------------+--------+--------+ 20443 0 8 16 20 32 36 40 47 20444 20445`SIL format: <insn> D1(B1),I2' 20446 20447 +------------------+----+-------------+-----------------+ 20448 | OpCode | B1 | D1 | I2 | 20449 +------------------+----+-------------+-----------------+ 20450 0 16 20 32 47 20451 20452`SS format: <insn> D1(R1,B1),D2(B3),R3' 20453 20454 +--------+----+----+----+-------------+----+------------+ 20455 | OpCode | R1 | R3 | B1 | D1 | B2 | D2 | 20456 +--------+----+----+----+-------------+----+------------+ 20457 0 8 12 16 20 32 36 47 20458 20459`SSE format: <insn> D1(B1),D2(B2)' 20460 20461 +------------------+----+-------------+----+------------+ 20462 | OpCode | B1 | D1 | B2 | D2 | 20463 +------------------+----+-------------+----+------------+ 20464 0 8 12 16 20 32 36 47 20465 20466`SSF format: <insn> D1(B1),D2(B2),R3' 20467 20468 +--------+----+----+----+-------------+----+------------+ 20469 | OpCode | R3 |OpCd| B1 | D1 | B2 | D2 | 20470 +--------+----+----+----+-------------+----+------------+ 20471 0 8 12 16 20 32 36 47 20472 20473`VRV format: <insn> V1,D2(V2,B2),M3' 20474 20475 +--------+----+----+----+-------------+----+------------+ 20476 | OpCode | V1 | V2 | B2 | D2 | M3 | Opcode | 20477 +--------+----+----+----+-------------+----+------------+ 20478 0 8 12 16 20 32 36 47 20479 20480`VRI format: <insn> V1,V2,I3,M4,M5' 20481 20482 +--------+----+----+-------------+----+----+------------+ 20483 | OpCode | V1 | V2 | I3 | M5 | M4 | Opcode | 20484 +--------+----+----+-------------+----+----+------------+ 20485 0 8 12 16 28 32 36 47 20486 20487`VRX format: <insn> V1,D2(R2,B2),M3' 20488 20489 +--------+----+----+----+-------------+----+------------+ 20490 | OpCode | V1 | R2 | B2 | D2 | M3 | Opcode | 20491 +--------+----+----+----+-------------+----+------------+ 20492 0 8 12 16 20 32 36 47 20493 20494`VRS format: <insn> R1,V3,D2(B2),M4' 20495 20496 +--------+----+----+----+-------------+----+------------+ 20497 | OpCode | R1 | V3 | B2 | D2 | M4 | Opcode | 20498 +--------+----+----+----+-------------+----+------------+ 20499 0 8 12 16 20 32 36 47 20500 20501`VRR format: <insn> V1,V2,V3,M4,M5,M6' 20502 20503 +--------+----+----+----+---+----+----+----+------------+ 20504 | OpCode | V1 | V2 | V3 |///| M6 | M5 | M4 | Opcode | 20505 +--------+----+----+----+---+----+----+----+------------+ 20506 0 8 12 16 24 28 32 36 47 20507 20508`VSI format: <insn> V1,D2(B2),I3' 20509 20510 +--------+---------+----+-------------+----+------------+ 20511 | OpCode | I3 | B2 | D2 | V1 | Opcode | 20512 +--------+---------+----+-------------+----+------------+ 20513 0 8 16 20 32 36 47 20514 20515 20516 For the complete list of all instruction format variants see the 20517Principles of Operation manuals. 20518 20519 20520File: as.info, Node: s390 Aliases, Next: s390 Operand Modifier, Prev: s390 Formats, Up: s390 Syntax 20521 205229.41.3.5 Instruction Aliases 20523............................ 20524 20525A specific bit pattern can have multiple mnemonics, for example the bit 20526pattern `0xa7000000' has the mnemonics `tmh' and `tmlh'. In addition, 20527there are a number of mnemonics recognized by `as' that are not present 20528in the Principles of Operation. These are the short forms of the 20529branch instructions, where the condition code mask operand is encoded 20530in the mnemonic. This is relevant for the branch instructions, the 20531compare and branch instructions, and the compare and trap instructions. 20532 20533 For the branch instructions there are 20 condition code strings that 20534can be used as part of the mnemonic in place of a mask operand in the 20535instruction format: 20536 20537 instruction short form 20538 ------------------------------------------ 20539 bcr M1,R2 b<m>r R2 20540 bc M1,D2(X2,B2) b<m> D2(X2,B2) 20541 brc M1,I2 j<m> I2 20542 brcl M1,I2 jg<m> I2 20543 20544 In the mnemonic for a branch instruction the condition code string 20545<m> can be any of the following: 20546 20547 o jump on overflow / if ones 20548 h jump on A high 20549 p jump on plus 20550 nle jump on not low or equal 20551 l jump on A low 20552 m jump on minus 20553 nhe jump on not high or equal 20554 lh jump on low or high 20555 ne jump on A not equal B 20556 nz jump on not zero / if not zeros 20557 e jump on A equal B 20558 z jump on zero / if zeroes 20559 nlh jump on not low or high 20560 he jump on high or equal 20561 nl jump on A not low 20562 nm jump on not minus / if not mixed 20563 le jump on low or equal 20564 nh jump on A not high 20565 np jump on not plus 20566 no jump on not overflow / if not ones 20567 20568 For the compare and branch, and compare and trap instructions there 20569are 12 condition code strings that can be used as part of the mnemonic 20570in place of a mask operand in the instruction format: 20571 20572 instruction short form 20573 -------------------------------------------------------- 20574 crb R1,R2,M3,D4(B4) crb<m> R1,R2,D4(B4) 20575 cgrb R1,R2,M3,D4(B4) cgrb<m> R1,R2,D4(B4) 20576 crj R1,R2,M3,I4 crj<m> R1,R2,I4 20577 cgrj R1,R2,M3,I4 cgrj<m> R1,R2,I4 20578 cib R1,I2,M3,D4(B4) cib<m> R1,I2,D4(B4) 20579 cgib R1,I2,M3,D4(B4) cgib<m> R1,I2,D4(B4) 20580 cij R1,I2,M3,I4 cij<m> R1,I2,I4 20581 cgij R1,I2,M3,I4 cgij<m> R1,I2,I4 20582 crt R1,R2,M3 crt<m> R1,R2 20583 cgrt R1,R2,M3 cgrt<m> R1,R2 20584 cit R1,I2,M3 cit<m> R1,I2 20585 cgit R1,I2,M3 cgit<m> R1,I2 20586 clrb R1,R2,M3,D4(B4) clrb<m> R1,R2,D4(B4) 20587 clgrb R1,R2,M3,D4(B4) clgrb<m> R1,R2,D4(B4) 20588 clrj R1,R2,M3,I4 clrj<m> R1,R2,I4 20589 clgrj R1,R2,M3,I4 clgrj<m> R1,R2,I4 20590 clib R1,I2,M3,D4(B4) clib<m> R1,I2,D4(B4) 20591 clgib R1,I2,M3,D4(B4) clgib<m> R1,I2,D4(B4) 20592 clij R1,I2,M3,I4 clij<m> R1,I2,I4 20593 clgij R1,I2,M3,I4 clgij<m> R1,I2,I4 20594 clrt R1,R2,M3 clrt<m> R1,R2 20595 clgrt R1,R2,M3 clgrt<m> R1,R2 20596 clfit R1,I2,M3 clfit<m> R1,I2 20597 clgit R1,I2,M3 clgit<m> R1,I2 20598 20599 In the mnemonic for a compare and branch and compare and trap 20600instruction the condition code string <m> can be any of the following: 20601 20602 h jump on A high 20603 nle jump on not low or equal 20604 l jump on A low 20605 nhe jump on not high or equal 20606 ne jump on A not equal B 20607 lh jump on low or high 20608 e jump on A equal B 20609 nlh jump on not low or high 20610 nl jump on A not low 20611 he jump on high or equal 20612 nh jump on A not high 20613 le jump on low or equal 20614 20615 20616File: as.info, Node: s390 Operand Modifier, Next: s390 Instruction Marker, Prev: s390 Aliases, Up: s390 Syntax 20617 206189.41.3.6 Instruction Operand Modifier 20619..................................... 20620 20621If a symbol modifier is attached to a symbol in an expression for an 20622instruction operand field, the symbol term is replaced with a reference 20623to an object in the global offset table (GOT) or the procedure linkage 20624table (PLT). The following expressions are allowed: `symbol@modifier + 20625constant', `symbol@modifier + label + constant', and `symbol@modifier - 20626label + constant'. The term `symbol' is the symbol that will be 20627entered into the GOT or PLT, `label' is a local label, and `constant' 20628is an arbitrary expression that the assembler can evaluate to a 20629constant value. 20630 20631 The term `(symbol + constant1)@modifier +/- label + constant2' is 20632also accepted but a warning message is printed and the term is 20633converted to `symbol@modifier +/- label + constant1 + constant2'. 20634 20635`@got' 20636`@got12' 20637 The @got modifier can be used for displacement fields, 16-bit 20638 immediate fields and 32-bit pc-relative immediate fields. The 20639 @got12 modifier is synonym to @got. The symbol is added to the 20640 GOT. For displacement fields and 16-bit immediate fields the 20641 symbol term is replaced with the offset from the start of the GOT 20642 to the GOT slot for the symbol. For a 32-bit pc-relative field 20643 the pc-relative offset to the GOT slot from the current 20644 instruction address is used. 20645 20646`@gotent' 20647 The @gotent modifier can be used for 32-bit pc-relative immediate 20648 fields. The symbol is added to the GOT and the symbol term is 20649 replaced with the pc-relative offset from the current instruction 20650 to the GOT slot for the symbol. 20651 20652`@gotoff' 20653 The @gotoff modifier can be used for 16-bit immediate fields. The 20654 symbol term is replaced with the offset from the start of the GOT 20655 to the address of the symbol. 20656 20657`@gotplt' 20658 The @gotplt modifier can be used for displacement fields, 16-bit 20659 immediate fields, and 32-bit pc-relative immediate fields. A 20660 procedure linkage table entry is generated for the symbol and a 20661 jump slot for the symbol is added to the GOT. For displacement 20662 fields and 16-bit immediate fields the symbol term is replaced 20663 with the offset from the start of the GOT to the jump slot for the 20664 symbol. For a 32-bit pc-relative field the pc-relative offset to 20665 the jump slot from the current instruction address is used. 20666 20667`@plt' 20668 The @plt modifier can be used for 16-bit and 32-bit pc-relative 20669 immediate fields. A procedure linkage table entry is generated for 20670 the symbol. The symbol term is replaced with the relative offset 20671 from the current instruction to the PLT entry for the symbol. 20672 20673`@pltoff' 20674 The @pltoff modifier can be used for 16-bit immediate fields. The 20675 symbol term is replaced with the offset from the start of the PLT 20676 to the address of the symbol. 20677 20678`@gotntpoff' 20679 The @gotntpoff modifier can be used for displacement fields. The 20680 symbol is added to the static TLS block and the negated offset to 20681 the symbol in the static TLS block is added to the GOT. The symbol 20682 term is replaced with the offset to the GOT slot from the start of 20683 the GOT. 20684 20685`@indntpoff' 20686 The @indntpoff modifier can be used for 32-bit pc-relative 20687 immediate fields. The symbol is added to the static TLS block and 20688 the negated offset to the symbol in the static TLS block is added 20689 to the GOT. The symbol term is replaced with the pc-relative 20690 offset to the GOT slot from the current instruction address. 20691 20692 For more information about the thread local storage modifiers 20693`gotntpoff' and `indntpoff' see the ELF extension documentation `ELF 20694Handling For Thread-Local Storage'. 20695 20696 20697File: as.info, Node: s390 Instruction Marker, Next: s390 Literal Pool Entries, Prev: s390 Operand Modifier, Up: s390 Syntax 20698 206999.41.3.7 Instruction Marker 20700........................... 20701 20702The thread local storage instruction markers are used by the linker to 20703perform code optimization. 20704 20705`:tls_load' 20706 The :tls_load marker is used to flag the load instruction in the 20707 initial exec TLS model that retrieves the offset from the thread 20708 pointer to a thread local storage variable from the GOT. 20709 20710`:tls_gdcall' 20711 The :tls_gdcall marker is used to flag the branch-and-save 20712 instruction to the __tls_get_offset function in the global dynamic 20713 TLS model. 20714 20715`:tls_ldcall' 20716 The :tls_ldcall marker is used to flag the branch-and-save 20717 instruction to the __tls_get_offset function in the local dynamic 20718 TLS model. 20719 20720 For more information about the thread local storage instruction 20721marker and the linker optimizations see the ELF extension documentation 20722`ELF Handling For Thread-Local Storage'. 20723 20724 20725File: as.info, Node: s390 Literal Pool Entries, Prev: s390 Instruction Marker, Up: s390 Syntax 20726 207279.41.3.8 Literal Pool Entries 20728............................. 20729 20730A literal pool is a collection of values. To access the values a pointer 20731to the literal pool is loaded to a register, the literal pool register. 20732Usually, register %r13 is used as the literal pool register (*Note s390 20733Register::). Literal pool entries are created by adding the suffix 20734:lit1, :lit2, :lit4, or :lit8 to the end of an expression for an 20735instruction operand. The expression is added to the literal pool and the 20736operand is replaced with the offset to the literal in the literal pool. 20737 20738`:lit1' 20739 The literal pool entry is created as an 8-bit value. An operand 20740 modifier must not be used for the original expression. 20741 20742`:lit2' 20743 The literal pool entry is created as a 16 bit value. The operand 20744 modifier @got may be used in the original expression. The term 20745 `x@got:lit2' will put the got offset for the global symbol x to 20746 the literal pool as 16 bit value. 20747 20748`:lit4' 20749 The literal pool entry is created as a 32-bit value. The operand 20750 modifier @got and @plt may be used in the original expression. The 20751 term `x@got:lit4' will put the got offset for the global symbol x 20752 to the literal pool as a 32-bit value. The term `x@plt:lit4' will 20753 put the plt offset for the global symbol x to the literal pool as 20754 a 32-bit value. 20755 20756`:lit8' 20757 The literal pool entry is created as a 64-bit value. The operand 20758 modifier @got and @plt may be used in the original expression. The 20759 term `x@got:lit8' will put the got offset for the global symbol x 20760 to the literal pool as a 64-bit value. The term `x@plt:lit8' will 20761 put the plt offset for the global symbol x to the literal pool as 20762 a 64-bit value. 20763 20764 The assembler directive `.ltorg' is used to emit all literal pool 20765entries to the current position. 20766 20767 20768File: as.info, Node: s390 Directives, Next: s390 Floating Point, Prev: s390 Syntax, Up: S/390-Dependent 20769 207709.41.4 Assembler Directives 20771--------------------------- 20772 20773`as' for s390 supports all of the standard ELF assembler directives as 20774outlined in the main part of this document. Some directives have been 20775extended and there are some additional directives, which are only 20776available for the s390 `as'. 20777 20778`.insn' 20779 This directive permits the numeric representation of an 20780 instructions and makes the assembler insert the operands according 20781 to one of the instructions formats for `.insn' (*Note s390 20782 Formats::). For example, the instruction `l %r1,24(%r15)' could 20783 be written as `.insn rx,0x58000000,%r1,24(%r15)'. 20784 20785`.short' 20786`.long' 20787`.quad' 20788 This directive places one or more 16-bit (.short), 32-bit (.long), 20789 or 64-bit (.quad) values into the current section. If an ELF or 20790 TLS modifier is used only the following expressions are allowed: 20791 `symbol@modifier + constant', `symbol@modifier + label + 20792 constant', and `symbol@modifier - label + constant'. The 20793 following modifiers are available: 20794 `@got' 20795 `@got12' 20796 The @got modifier can be used for .short, .long and .quad. 20797 The @got12 modifier is synonym to @got. The symbol is added 20798 to the GOT. The symbol term is replaced with offset from the 20799 start of the GOT to the GOT slot for the symbol. 20800 20801 `@gotoff' 20802 The @gotoff modifier can be used for .short, .long and .quad. 20803 The symbol term is replaced with the offset from the start of 20804 the GOT to the address of the symbol. 20805 20806 `@gotplt' 20807 The @gotplt modifier can be used for .long and .quad. A 20808 procedure linkage table entry is generated for the symbol and 20809 a jump slot for the symbol is added to the GOT. The symbol 20810 term is replaced with the offset from the start of the GOT to 20811 the jump slot for the symbol. 20812 20813 `@plt' 20814 The @plt modifier can be used for .long and .quad. A 20815 procedure linkage table entry us generated for the symbol. 20816 The symbol term is replaced with the address of the PLT entry 20817 for the symbol. 20818 20819 `@pltoff' 20820 The @pltoff modifier can be used for .short, .long and .quad. 20821 The symbol term is replaced with the offset from the start of 20822 the PLT to the address of the symbol. 20823 20824 `@tlsgd' 20825 `@tlsldm' 20826 The @tlsgd and @tlsldm modifier can be used for .long and 20827 .quad. A tls_index structure for the symbol is added to the 20828 GOT. The symbol term is replaced with the offset from the 20829 start of the GOT to the tls_index structure. 20830 20831 `@gotntpoff' 20832 `@indntpoff' 20833 The @gotntpoff and @indntpoff modifier can be used for .long 20834 and .quad. The symbol is added to the static TLS block and 20835 the negated offset to the symbol in the static TLS block is 20836 added to the GOT. For @gotntpoff the symbol term is replaced 20837 with the offset from the start of the GOT to the GOT slot, 20838 for @indntpoff the symbol term is replaced with the address 20839 of the GOT slot. 20840 20841 `@dtpoff' 20842 The @dtpoff modifier can be used for .long and .quad. The 20843 symbol term is replaced with the offset of the symbol 20844 relative to the start of the TLS block it is contained in. 20845 20846 `@ntpoff' 20847 The @ntpoff modifier can be used for .long and .quad. The 20848 symbol term is replaced with the offset of the symbol 20849 relative to the TCB pointer. 20850 20851 For more information about the thread local storage modifiers see 20852 the ELF extension documentation `ELF Handling For Thread-Local 20853 Storage'. 20854 20855`.ltorg' 20856 This directive causes the current contents of the literal pool to 20857 be dumped to the current location (*Note s390 Literal Pool 20858 Entries::). 20859 20860`.machine STRING[+EXTENSION]...' 20861 This directive allows changing the machine for which code is 20862 generated. `string' may be any of the `-march=' selection 20863 options, or `push', or `pop'. `.machine push' saves the currently 20864 selected cpu, which may be restored with `.machine pop'. Be aware 20865 that the cpu string has to be put into double quotes in case it 20866 contains characters not appropriate for identifiers. So you have 20867 to write `"z9-109"' instead of just `z9-109'. Extensions can be 20868 specified after the cpu name, separated by plus characters. Valid 20869 extensions are: `htm', `nohtm', `vx', `novx'. They extend the 20870 basic instruction set with features from a higher cpu level, or 20871 remove support for a feature from the given cpu level. 20872 20873 Example: `z13+nohtm' allows all instructions of the z13 cpu except 20874 instructions from the HTM facility. 20875 20876`.machinemode string' 20877 This directive allows one to change the architecture mode for 20878 which code is being generated. `string' may be `esa', `zarch', 20879 `zarch_nohighgprs', `push', or `pop'. `.machinemode 20880 zarch_nohighgprs' can be used to prevent the `highgprs' flag from 20881 being set in the ELF header of the output file. This is useful in 20882 situations where the code is gated with a runtime check which 20883 makes sure that the code is only executed on kernels providing the 20884 `highgprs' feature. `.machinemode push' saves the currently 20885 selected mode, which may be restored with `.machinemode pop'. 20886 20887 20888File: as.info, Node: s390 Floating Point, Prev: s390 Directives, Up: S/390-Dependent 20889 208909.41.5 Floating Point 20891--------------------- 20892 20893The assembler recognizes both the IEEE floating-point instruction and 20894the hexadecimal floating-point instructions. The floating-point 20895constructors `.float', `.single', and `.double' always emit the IEEE 20896format. To assemble hexadecimal floating-point constants the `.long' 20897and `.quad' directives must be used. 20898 20899 20900File: as.info, Node: SCORE-Dependent, Next: SH-Dependent, Prev: S/390-Dependent, Up: Machine Dependencies 20901 209029.42 SCORE Dependent Features 20903============================= 20904 20905* Menu: 20906 20907* SCORE-Opts:: Assembler options 20908* SCORE-Pseudo:: SCORE Assembler Directives 20909* SCORE-Syntax:: Syntax 20910 20911 20912File: as.info, Node: SCORE-Opts, Next: SCORE-Pseudo, Up: SCORE-Dependent 20913 209149.42.1 Options 20915-------------- 20916 20917The following table lists all available SCORE options. 20918 20919`-G NUM' 20920 This option sets the largest size of an object that can be 20921 referenced implicitly with the `gp' register. The default value is 20922 8. 20923 20924`-EB' 20925 Assemble code for a big-endian cpu 20926 20927`-EL' 20928 Assemble code for a little-endian cpu 20929 20930`-FIXDD' 20931 Assemble code for fix data dependency 20932 20933`-NWARN' 20934 Assemble code for no warning message for fix data dependency 20935 20936`-SCORE5' 20937 Assemble code for target is SCORE5 20938 20939`-SCORE5U' 20940 Assemble code for target is SCORE5U 20941 20942`-SCORE7' 20943 Assemble code for target is SCORE7, this is default setting 20944 20945`-SCORE3' 20946 Assemble code for target is SCORE3 20947 20948`-march=score7' 20949 Assemble code for target is SCORE7, this is default setting 20950 20951`-march=score3' 20952 Assemble code for target is SCORE3 20953 20954`-USE_R1' 20955 Assemble code for no warning message when using temp register r1 20956 20957`-KPIC' 20958 Generate code for PIC. This option tells the assembler to generate 20959 score position-independent macro expansions. It also tells the 20960 assembler to mark the output file as PIC. 20961 20962`-O0' 20963 Assembler will not perform any optimizations 20964 20965`-V' 20966 Sunplus release version 20967 20968 20969 20970File: as.info, Node: SCORE-Pseudo, Next: SCORE-Syntax, Prev: SCORE-Opts, Up: SCORE-Dependent 20971 209729.42.2 SCORE Assembler Directives 20973--------------------------------- 20974 20975A number of assembler directives are available for SCORE. The 20976following table is far from complete. 20977 20978`.set nwarn' 20979 Let the assembler not to generate warnings if the source machine 20980 language instructions happen data dependency. 20981 20982`.set fixdd' 20983 Let the assembler to insert bubbles (32 bit nop instruction / 16 20984 bit nop! Instruction) if the source machine language instructions 20985 happen data dependency. 20986 20987`.set nofixdd' 20988 Let the assembler to generate warnings if the source machine 20989 language instructions happen data dependency. (Default) 20990 20991`.set r1' 20992 Let the assembler not to generate warnings if the source program 20993 uses r1. allow user to use r1 20994 20995`set nor1' 20996 Let the assembler to generate warnings if the source program uses 20997 r1. (Default) 20998 20999`.sdata' 21000 Tell the assembler to add subsequent data into the sdata section 21001 21002`.rdata' 21003 Tell the assembler to add subsequent data into the rdata section 21004 21005`.frame "frame-register", "offset", "return-pc-register"' 21006 Describe a stack frame. "frame-register" is the frame register, 21007 "offset" is the distance from the frame register to the virtual 21008 frame pointer, "return-pc-register" is the return program register. 21009 You must use ".ent" before ".frame" and only one ".frame" can be 21010 used per ".ent". 21011 21012`.mask "bitmask", "frameoffset"' 21013 Indicate which of the integer registers are saved in the current 21014 function's stack frame, this is for the debugger to explain the 21015 frame chain. 21016 21017`.ent "proc-name"' 21018 Set the beginning of the procedure "proc_name". Use this directive 21019 when you want to generate information for the debugger. 21020 21021`.end proc-name' 21022 Set the end of a procedure. Use this directive to generate 21023 information for the debugger. 21024 21025`.bss' 21026 Switch the destination of following statements into the bss 21027 section, which is used for data that is uninitialized anywhere. 21028 21029 21030 21031File: as.info, Node: SCORE-Syntax, Prev: SCORE-Pseudo, Up: SCORE-Dependent 21032 210339.42.3 SCORE Syntax 21034------------------- 21035 21036* Menu: 21037 21038* SCORE-Chars:: Special Characters 21039 21040 21041File: as.info, Node: SCORE-Chars, Up: SCORE-Syntax 21042 210439.42.3.1 Special Characters 21044........................... 21045 21046The presence of a `#' appearing anywhere on a line indicates the start 21047of a comment that extends to the end of that line. 21048 21049 If a `#' appears as the first character of a line then the whole 21050line is treated as a comment, but in this case the line can also be a 21051logical line number directive (*note Comments::) or a preprocessor 21052control command (*note Preprocessing::). 21053 21054 The `;' character can be used to separate statements on the same 21055line. 21056 21057 21058File: as.info, Node: SH-Dependent, Next: Sparc-Dependent, Prev: SCORE-Dependent, Up: Machine Dependencies 21059 210609.43 Renesas / SuperH SH Dependent Features 21061=========================================== 21062 21063* Menu: 21064 21065* SH Options:: Options 21066* SH Syntax:: Syntax 21067* SH Floating Point:: Floating Point 21068* SH Directives:: SH Machine Directives 21069* SH Opcodes:: Opcodes 21070 21071 21072File: as.info, Node: SH Options, Next: SH Syntax, Up: SH-Dependent 21073 210749.43.1 Options 21075-------------- 21076 21077`as' has following command-line options for the Renesas (formerly 21078Hitachi) / SuperH SH family. 21079 21080`--little' 21081 Generate little endian code. 21082 21083`--big' 21084 Generate big endian code. 21085 21086`--relax' 21087 Alter jump instructions for long displacements. 21088 21089`--small' 21090 Align sections to 4 byte boundaries, not 16. 21091 21092`--dsp' 21093 Enable sh-dsp insns, and disable sh3e / sh4 insns. 21094 21095`--renesas' 21096 Disable optimization with section symbol for compatibility with 21097 Renesas assembler. 21098 21099`--allow-reg-prefix' 21100 Allow '$' as a register name prefix. 21101 21102`--fdpic' 21103 Generate an FDPIC object file. 21104 21105`--isa=sh4 | sh4a' 21106 Specify the sh4 or sh4a instruction set. 21107 21108`--isa=dsp' 21109 Enable sh-dsp insns, and disable sh3e / sh4 insns. 21110 21111`--isa=fp' 21112 Enable sh2e, sh3e, sh4, and sh4a insn sets. 21113 21114`--isa=all' 21115 Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets. 21116 21117`-h-tick-hex' 21118 Support H'00 style hex constants in addition to 0x00 style. 21119 21120 21121 21122File: as.info, Node: SH Syntax, Next: SH Floating Point, Prev: SH Options, Up: SH-Dependent 21123 211249.43.2 Syntax 21125------------- 21126 21127* Menu: 21128 21129* SH-Chars:: Special Characters 21130* SH-Regs:: Register Names 21131* SH-Addressing:: Addressing Modes 21132 21133 21134File: as.info, Node: SH-Chars, Next: SH-Regs, Up: SH Syntax 21135 211369.43.2.1 Special Characters 21137........................... 21138 21139`!' is the line comment character. 21140 21141 You can use `;' instead of a newline to separate statements. 21142 21143 If a `#' appears as the first character of a line then the whole 21144line is treated as a comment, but in this case the line could also be a 21145logical line number directive (*note Comments::) or a preprocessor 21146control command (*note Preprocessing::). 21147 21148 Since `$' has no special meaning, you may use it in symbol names. 21149 21150 21151File: as.info, Node: SH-Regs, Next: SH-Addressing, Prev: SH-Chars, Up: SH Syntax 21152 211539.43.2.2 Register Names 21154....................... 21155 21156You can use the predefined symbols `r0', `r1', `r2', `r3', `r4', `r5', 21157`r6', `r7', `r8', `r9', `r10', `r11', `r12', `r13', `r14', and `r15' to 21158refer to the SH registers. 21159 21160 The SH also has these control registers: 21161 21162`pr' 21163 procedure register (holds return address) 21164 21165`pc' 21166 program counter 21167 21168`mach' 21169`macl' 21170 high and low multiply accumulator registers 21171 21172`sr' 21173 status register 21174 21175`gbr' 21176 global base register 21177 21178`vbr' 21179 vector base register (for interrupt vectors) 21180 21181 21182File: as.info, Node: SH-Addressing, Prev: SH-Regs, Up: SH Syntax 21183 211849.43.2.3 Addressing Modes 21185......................... 21186 21187`as' understands the following addressing modes for the SH. `RN' in 21188the following refers to any of the numbered registers, but _not_ the 21189control registers. 21190 21191`RN' 21192 Register direct 21193 21194`@RN' 21195 Register indirect 21196 21197`@-RN' 21198 Register indirect with pre-decrement 21199 21200`@RN+' 21201 Register indirect with post-increment 21202 21203`@(DISP, RN)' 21204 Register indirect with displacement 21205 21206`@(R0, RN)' 21207 Register indexed 21208 21209`@(DISP, GBR)' 21210 `GBR' offset 21211 21212`@(R0, GBR)' 21213 GBR indexed 21214 21215`ADDR' 21216`@(DISP, PC)' 21217 PC relative address (for branch or for addressing memory). The 21218 `as' implementation allows you to use the simpler form ADDR 21219 anywhere a PC relative address is called for; the alternate form 21220 is supported for compatibility with other assemblers. 21221 21222`#IMM' 21223 Immediate data 21224 21225 21226File: as.info, Node: SH Floating Point, Next: SH Directives, Prev: SH Syntax, Up: SH-Dependent 21227 212289.43.3 Floating Point 21229--------------------- 21230 21231SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other 21232SH groups can use `.float' directive to generate IEEE floating-point 21233numbers. 21234 21235 SH2E and SH3E support single-precision floating point calculations as 21236well as entirely PCAPI compatible emulation of double-precision 21237floating point calculations. SH2E and SH3E instructions are a subset of 21238the floating point calculations conforming to the IEEE754 standard. 21239 21240 In addition to single-precision and double-precision floating-point 21241operation capability, the on-chip FPU of SH4 has a 128-bit graphic 21242engine that enables 32-bit floating-point data to be processed 128 bits 21243at a time. It also supports 4 * 4 array operations and inner product 21244operations. Also, a superscalar architecture is employed that enables 21245simultaneous execution of two instructions (including FPU 21246instructions), providing performance of up to twice that of 21247conventional architectures at the same frequency. 21248 21249 21250File: as.info, Node: SH Directives, Next: SH Opcodes, Prev: SH Floating Point, Up: SH-Dependent 21251 212529.43.4 SH Machine Directives 21253---------------------------- 21254 21255`uaword' 21256`ualong' 21257`uaquad' 21258 `as' will issue a warning when a misaligned `.word', `.long', or 21259 `.quad' directive is used. You may use `.uaword', `.ualong', or 21260 `.uaquad' to indicate that the value is intentionally misaligned. 21261 21262 21263File: as.info, Node: SH Opcodes, Prev: SH Directives, Up: SH-Dependent 21264 212659.43.5 Opcodes 21266-------------- 21267 21268For detailed information on the SH machine instruction set, see 21269`SH-Microcomputer User's Manual' (Renesas) or `SH-4 32-bit CPU Core 21270Architecture' (SuperH) and `SuperH (SH) 64-Bit RISC Series' (SuperH). 21271 21272 `as' implements all the standard SH opcodes. No additional 21273pseudo-instructions are needed on this family. Note, however, that 21274because `as' supports a simpler form of PC-relative addressing, you may 21275simply write (for example) 21276 21277 mov.l bar,r0 21278 21279where other assemblers might require an explicit displacement to `bar' 21280from the program counter: 21281 21282 mov.l @(DISP, PC) 21283 21284 Here is a summary of SH opcodes: 21285 21286 Legend: 21287 Rn a numbered register 21288 Rm another numbered register 21289 #imm immediate data 21290 disp displacement 21291 disp8 8-bit displacement 21292 disp12 12-bit displacement 21293 21294 add #imm,Rn lds.l @Rn+,PR 21295 add Rm,Rn mac.w @Rm+,@Rn+ 21296 addc Rm,Rn mov #imm,Rn 21297 addv Rm,Rn mov Rm,Rn 21298 and #imm,R0 mov.b Rm,@(R0,Rn) 21299 and Rm,Rn mov.b Rm,@-Rn 21300 and.b #imm,@(R0,GBR) mov.b Rm,@Rn 21301 bf disp8 mov.b @(disp,Rm),R0 21302 bra disp12 mov.b @(disp,GBR),R0 21303 bsr disp12 mov.b @(R0,Rm),Rn 21304 bt disp8 mov.b @Rm+,Rn 21305 clrmac mov.b @Rm,Rn 21306 clrt mov.b R0,@(disp,Rm) 21307 cmp/eq #imm,R0 mov.b R0,@(disp,GBR) 21308 cmp/eq Rm,Rn mov.l Rm,@(disp,Rn) 21309 cmp/ge Rm,Rn mov.l Rm,@(R0,Rn) 21310 cmp/gt Rm,Rn mov.l Rm,@-Rn 21311 cmp/hi Rm,Rn mov.l Rm,@Rn 21312 cmp/hs Rm,Rn mov.l @(disp,Rn),Rm 21313 cmp/pl Rn mov.l @(disp,GBR),R0 21314 cmp/pz Rn mov.l @(disp,PC),Rn 21315 cmp/str Rm,Rn mov.l @(R0,Rm),Rn 21316 div0s Rm,Rn mov.l @Rm+,Rn 21317 div0u mov.l @Rm,Rn 21318 div1 Rm,Rn mov.l R0,@(disp,GBR) 21319 exts.b Rm,Rn mov.w Rm,@(R0,Rn) 21320 exts.w Rm,Rn mov.w Rm,@-Rn 21321 extu.b Rm,Rn mov.w Rm,@Rn 21322 extu.w Rm,Rn mov.w @(disp,Rm),R0 21323 jmp @Rn mov.w @(disp,GBR),R0 21324 jsr @Rn mov.w @(disp,PC),Rn 21325 ldc Rn,GBR mov.w @(R0,Rm),Rn 21326 ldc Rn,SR mov.w @Rm+,Rn 21327 ldc Rn,VBR mov.w @Rm,Rn 21328 ldc.l @Rn+,GBR mov.w R0,@(disp,Rm) 21329 ldc.l @Rn+,SR mov.w R0,@(disp,GBR) 21330 ldc.l @Rn+,VBR mova @(disp,PC),R0 21331 lds Rn,MACH movt Rn 21332 lds Rn,MACL muls Rm,Rn 21333 lds Rn,PR mulu Rm,Rn 21334 lds.l @Rn+,MACH neg Rm,Rn 21335 lds.l @Rn+,MACL negc Rm,Rn 21336 21337 nop stc VBR,Rn 21338 not Rm,Rn stc.l GBR,@-Rn 21339 or #imm,R0 stc.l SR,@-Rn 21340 or Rm,Rn stc.l VBR,@-Rn 21341 or.b #imm,@(R0,GBR) sts MACH,Rn 21342 rotcl Rn sts MACL,Rn 21343 rotcr Rn sts PR,Rn 21344 rotl Rn sts.l MACH,@-Rn 21345 rotr Rn sts.l MACL,@-Rn 21346 rte sts.l PR,@-Rn 21347 rts sub Rm,Rn 21348 sett subc Rm,Rn 21349 shal Rn subv Rm,Rn 21350 shar Rn swap.b Rm,Rn 21351 shll Rn swap.w Rm,Rn 21352 shll16 Rn tas.b @Rn 21353 shll2 Rn trapa #imm 21354 shll8 Rn tst #imm,R0 21355 shlr Rn tst Rm,Rn 21356 shlr16 Rn tst.b #imm,@(R0,GBR) 21357 shlr2 Rn xor #imm,R0 21358 shlr8 Rn xor Rm,Rn 21359 sleep xor.b #imm,@(R0,GBR) 21360 stc GBR,Rn xtrct Rm,Rn 21361 stc SR,Rn 21362 21363 21364File: as.info, Node: Sparc-Dependent, Next: TIC54X-Dependent, Prev: SH-Dependent, Up: Machine Dependencies 21365 213669.44 SPARC Dependent Features 21367============================= 21368 21369* Menu: 21370 21371* Sparc-Opts:: Options 21372* Sparc-Aligned-Data:: Option to enforce aligned data 21373* Sparc-Syntax:: Syntax 21374* Sparc-Float:: Floating Point 21375* Sparc-Directives:: Sparc Machine Directives 21376 21377 21378File: as.info, Node: Sparc-Opts, Next: Sparc-Aligned-Data, Up: Sparc-Dependent 21379 213809.44.1 Options 21381-------------- 21382 21383The SPARC chip family includes several successive versions, using the 21384same core instruction set, but including a few additional instructions 21385at each version. There are exceptions to this however. For details on 21386what instructions each variant supports, please see the chip's 21387architecture reference manual. 21388 21389 By default, `as' assumes the core instruction set (SPARC v6), but 21390"bumps" the architecture level as needed: it switches to successively 21391higher architectures as it encounters instructions that only exist in 21392the higher levels. 21393 21394 If not configured for SPARC v9 (`sparc64-*-*') GAS will not bump 21395past sparclite by default, an option must be passed to enable the v9 21396instructions. 21397 21398 GAS treats sparclite as being compatible with v8, unless an 21399architecture is explicitly requested. SPARC v9 is always incompatible 21400with sparclite. 21401 21402`-Av6 | -Av7 | -Av8 | -Aleon | -Asparclet | -Asparclite' 21403`-Av8plus | -Av8plusa | -Av8plusb | -Av8plusc | -Av8plusd |' 21404`-Av8plusv | -Av8plusm | -Av8plusm8' 21405`-Av9 | -Av9a | -Av9b | -Av9c | -Av9d | -Av9e | -Av9v | -Av9m | -Av9m8' 21406`-Asparc | -Asparcvis | -Asparcvis2 | -Asparcfmaf | -Asparcima' 21407`-Asparcvis3 | -Asparcvis3r | -Asparc5 | -Asparc6' 21408 Use one of the `-A' options to select one of the SPARC 21409 architectures explicitly. If you select an architecture 21410 explicitly, `as' reports a fatal error if it encounters an 21411 instruction or feature requiring an incompatible or higher level. 21412 21413 `-Av8plus', `-Av8plusa', `-Av8plusb', `-Av8plusc', `-Av8plusd', 21414 and `-Av8plusv' select a 32 bit environment. 21415 21416 `-Av9', `-Av9a', `-Av9b', `-Av9c', `-Av9d', `-Av9e', `-Av9v' and 21417 `-Av9m' select a 64 bit environment and are not available unless 21418 GAS is explicitly configured with 64 bit environment support. 21419 21420 `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with 21421 UltraSPARC VIS 1.0 extensions. 21422 21423 `-Av8plusb' and `-Av9b' enable the UltraSPARC VIS 2.0 instructions, 21424 as well as the instructions enabled by `-Av8plusa' and `-Av9a'. 21425 21426 `-Av8plusc' and `-Av9c' enable the UltraSPARC Niagara instructions, 21427 as well as the instructions enabled by `-Av8plusb' and `-Av9b'. 21428 21429 `-Av8plusd' and `-Av9d' enable the floating point fused 21430 multiply-add, VIS 3.0, and HPC extension instructions, as well as 21431 the instructions enabled by `-Av8plusc' and `-Av9c'. 21432 21433 `-Av8pluse' and `-Av9e' enable the cryptographic instructions, as 21434 well as the instructions enabled by `-Av8plusd' and `-Av9d'. 21435 21436 `-Av8plusv' and `-Av9v' enable floating point unfused 21437 multiply-add, and integer multiply-add, as well as the instructions 21438 enabled by `-Av8pluse' and `-Av9e'. 21439 21440 `-Av8plusm' and `-Av9m' enable the VIS 4.0, subtract extended, 21441 xmpmul, xmontmul and xmontsqr instructions, as well as the 21442 instructions enabled by `-Av8plusv' and `-Av9v'. 21443 21444 `-Av8plusm8' and `-Av9m8' enable the instructions introduced in 21445 the Oracle SPARC Architecture 2017 and the M8 processor, as well 21446 as the instructions enabled by `-Av8plusm' and `-Av9m'. 21447 21448 `-Asparc' specifies a v9 environment. It is equivalent to `-Av9' 21449 if the word size is 64-bit, and `-Av8plus' otherwise. 21450 21451 `-Asparcvis' specifies a v9a environment. It is equivalent to 21452 `-Av9a' if the word size is 64-bit, and `-Av8plusa' otherwise. 21453 21454 `-Asparcvis2' specifies a v9b environment. It is equivalent to 21455 `-Av9b' if the word size is 64-bit, and `-Av8plusb' otherwise. 21456 21457 `-Asparcfmaf' specifies a v9b environment with the floating point 21458 fused multiply-add instructions enabled. 21459 21460 `-Asparcima' specifies a v9b environment with the integer 21461 multiply-add instructions enabled. 21462 21463 `-Asparcvis3' specifies a v9b environment with the VIS 3.0, HPC , 21464 and floating point fused multiply-add instructions enabled. 21465 21466 `-Asparcvis3r' specifies a v9b environment with the VIS 3.0, HPC, 21467 and floating point unfused multiply-add instructions enabled. 21468 21469 `-Asparc5' is equivalent to `-Av9m'. 21470 21471 `-Asparc6' is equivalent to `-Av9m8'. 21472 21473`-xarch=v8plus | -xarch=v8plusa | -xarch=v8plusb | -xarch=v8plusc' 21474`-xarch=v8plusd | -xarch=v8plusv | -xarch=v8plusm |' 21475`-xarch=v8plusm8 | -xarch=v9 | -xarch=v9a | -xarch=v9b' 21476`-xarch=v9c | -xarch=v9d | -xarch=v9e | -xarch=v9v' 21477`-xarch=v9m | -xarch=v9m8' 21478`-xarch=sparc | -xarch=sparcvis | -xarch=sparcvis2' 21479`-xarch=sparcfmaf | -xarch=sparcima | -xarch=sparcvis3' 21480`-xarch=sparcvis3r | -xarch=sparc5 | -xarch=sparc6' 21481 For compatibility with the SunOS v9 assembler. These options are 21482 equivalent to -Av8plus, -Av8plusa, -Av8plusb, -Av8plusc, -Av8plusd, 21483 -Av8plusv, -Av8plusm, -Av8plusm8, -Av9, -Av9a, -Av9b, -Av9c, -Av9d, 21484 -Av9e, -Av9v, -Av9m, -Av9m8, -Asparc, -Asparcvis, -Asparcvis2, 21485 -Asparcfmaf, -Asparcima, -Asparcvis3, -Asparcvis3r, -Asparc5 and 21486 -Asparc6 respectively. 21487 21488`-bump' 21489 Warn whenever it is necessary to switch to another level. If an 21490 architecture level is explicitly requested, GAS will not issue 21491 warnings until that level is reached, and will then bump the level 21492 as required (except between incompatible levels). 21493 21494`-32 | -64' 21495 Select the word size, either 32 bits or 64 bits. These options 21496 are only available with the ELF object file format, and require 21497 that the necessary BFD support has been included. 21498 21499`--dcti-couples-detect' 21500 Warn if a DCTI (delayed control transfer instruction) couple is 21501 found when generating code for a variant of the SPARC architecture 21502 in which the execution of the couple is unpredictable, or very 21503 slow. This is disabled by default. 21504 21505 21506File: as.info, Node: Sparc-Aligned-Data, Next: Sparc-Syntax, Prev: Sparc-Opts, Up: Sparc-Dependent 21507 215089.44.2 Enforcing aligned data 21509----------------------------- 21510 21511SPARC GAS normally permits data to be misaligned. For example, it 21512permits the `.long' pseudo-op to be used on a byte boundary. However, 21513the native SunOS assemblers issue an error when they see misaligned 21514data. 21515 21516 You can use the `--enforce-aligned-data' option to make SPARC GAS 21517also issue an error about misaligned data, just as the SunOS assemblers 21518do. 21519 21520 The `--enforce-aligned-data' option is not the default because gcc 21521issues misaligned data pseudo-ops when it initializes certain packed 21522data structures (structures defined using the `packed' attribute). You 21523may have to assemble with GAS in order to initialize packed data 21524structures in your own code. 21525 21526 21527File: as.info, Node: Sparc-Syntax, Next: Sparc-Float, Prev: Sparc-Aligned-Data, Up: Sparc-Dependent 21528 215299.44.3 Sparc Syntax 21530------------------- 21531 21532The assembler syntax closely follows The Sparc Architecture Manual, 21533versions 8 and 9, as well as most extensions defined by Sun for their 21534UltraSPARC and Niagara line of processors. 21535 21536* Menu: 21537 21538* Sparc-Chars:: Special Characters 21539* Sparc-Regs:: Register Names 21540* Sparc-Constants:: Constant Names 21541* Sparc-Relocs:: Relocations 21542* Sparc-Size-Translations:: Size Translations 21543 21544 21545File: as.info, Node: Sparc-Chars, Next: Sparc-Regs, Up: Sparc-Syntax 21546 215479.44.3.1 Special Characters 21548........................... 21549 21550A `!' character appearing anywhere on a line indicates the start of a 21551comment that extends to the end of that line. 21552 21553 If a `#' appears as the first character of a line then the whole 21554line is treated as a comment, but in this case the line could also be a 21555logical line number directive (*note Comments::) or a preprocessor 21556control command (*note Preprocessing::). 21557 21558 `;' can be used instead of a newline to separate statements. 21559 21560 21561File: as.info, Node: Sparc-Regs, Next: Sparc-Constants, Prev: Sparc-Chars, Up: Sparc-Syntax 21562 215639.44.3.2 Register Names 21564....................... 21565 21566The Sparc integer register file is broken down into global, outgoing, 21567local, and incoming. 21568 21569 * The 8 global registers are referred to as `%gN'. 21570 21571 * The 8 outgoing registers are referred to as `%oN'. 21572 21573 * The 8 local registers are referred to as `%lN'. 21574 21575 * The 8 incoming registers are referred to as `%iN'. 21576 21577 * The frame pointer register `%i6' can be referenced using the alias 21578 `%fp'. 21579 21580 * The stack pointer register `%o6' can be referenced using the alias 21581 `%sp'. 21582 21583 Floating point registers are simply referred to as `%fN'. When 21584assembling for pre-V9, only 32 floating point registers are available. 21585For V9 and later there are 64, but there are restrictions when 21586referencing the upper 32 registers. They can only be accessed as 21587double or quad, and thus only even or quad numbered accesses are 21588allowed. For example, `%f34' is a legal floating point register, but 21589`%f35' is not. 21590 21591 Floating point registers accessed as double can also be referred 21592using the `%dN' notation, where N is even. Similarly, floating point 21593registers accessed as quad can be referred using the `%qN' notation, 21594where N is a multiple of 4. For example, `%f4' can be denoted as both 21595`%d4' and `%q4'. On the other hand, `%f2' can be denoted as `%d2' but 21596not as `%q2'. 21597 21598 Certain V9 instructions allow access to ancillary state registers. 21599Most simply they can be referred to as `%asrN' where N can be from 16 21600to 31. However, there are some aliases defined to reference ASR 21601registers defined for various UltraSPARC processors: 21602 21603 * The tick compare register is referred to as `%tick_cmpr'. 21604 21605 * The system tick register is referred to as `%stick'. An alias, 21606 `%sys_tick', exists but is deprecated and should not be used by 21607 new software. 21608 21609 * The system tick compare register is referred to as `%stick_cmpr'. 21610 An alias, `%sys_tick_cmpr', exists but is deprecated and should 21611 not be used by new software. 21612 21613 * The software interrupt register is referred to as `%softint'. 21614 21615 * The set software interrupt register is referred to as 21616 `%set_softint'. The mnemonic `%softint_set' is provided as an 21617 alias. 21618 21619 * The clear software interrupt register is referred to as 21620 `%clear_softint'. The mnemonic `%softint_clear' is provided as an 21621 alias. 21622 21623 * The performance instrumentation counters register is referred to as 21624 `%pic'. 21625 21626 * The performance control register is referred to as `%pcr'. 21627 21628 * The graphics status register is referred to as `%gsr'. 21629 21630 * The V9 dispatch control register is referred to as `%dcr'. 21631 21632 Various V9 branch and conditional move instructions allow 21633specification of which set of integer condition codes to test. These 21634are referred to as `%xcc' and `%icc'. 21635 21636 Additionally, GAS supports the so-called "natural" condition codes; 21637these are referred to as `%ncc' and reference to `%icc' if the word 21638size is 32, `%xcc' if the word size is 64. 21639 21640 In V9, there are 4 sets of floating point condition codes which are 21641referred to as `%fccN'. 21642 21643 Several special privileged and non-privileged registers exist: 21644 21645 * The V9 address space identifier register is referred to as `%asi'. 21646 21647 * The V9 restorable windows register is referred to as `%canrestore'. 21648 21649 * The V9 savable windows register is referred to as `%cansave'. 21650 21651 * The V9 clean windows register is referred to as `%cleanwin'. 21652 21653 * The V9 current window pointer register is referred to as `%cwp'. 21654 21655 * The floating-point queue register is referred to as `%fq'. 21656 21657 * The V8 co-processor queue register is referred to as `%cq'. 21658 21659 * The floating point status register is referred to as `%fsr'. 21660 21661 * The other windows register is referred to as `%otherwin'. 21662 21663 * The V9 program counter register is referred to as `%pc'. 21664 21665 * The V9 next program counter register is referred to as `%npc'. 21666 21667 * The V9 processor interrupt level register is referred to as `%pil'. 21668 21669 * The V9 processor state register is referred to as `%pstate'. 21670 21671 * The trap base address register is referred to as `%tba'. 21672 21673 * The V9 tick register is referred to as `%tick'. 21674 21675 * The V9 trap level is referred to as `%tl'. 21676 21677 * The V9 trap program counter is referred to as `%tpc'. 21678 21679 * The V9 trap next program counter is referred to as `%tnpc'. 21680 21681 * The V9 trap state is referred to as `%tstate'. 21682 21683 * The V9 trap type is referred to as `%tt'. 21684 21685 * The V9 condition codes is referred to as `%ccr'. 21686 21687 * The V9 floating-point registers state is referred to as `%fprs'. 21688 21689 * The V9 version register is referred to as `%ver'. 21690 21691 * The V9 window state register is referred to as `%wstate'. 21692 21693 * The Y register is referred to as `%y'. 21694 21695 * The V8 window invalid mask register is referred to as `%wim'. 21696 21697 * The V8 processor state register is referred to as `%psr'. 21698 21699 * The V9 global register level register is referred to as `%gl'. 21700 21701 Several special register names exist for hypervisor mode code: 21702 21703 * The hyperprivileged processor state register is referred to as 21704 `%hpstate'. 21705 21706 * The hyperprivileged trap state register is referred to as 21707 `%htstate'. 21708 21709 * The hyperprivileged interrupt pending register is referred to as 21710 `%hintp'. 21711 21712 * The hyperprivileged trap base address register is referred to as 21713 `%htba'. 21714 21715 * The hyperprivileged implementation version register is referred to 21716 as `%hver'. 21717 21718 * The hyperprivileged system tick offset register is referred to as 21719 `%hstick_offset'. Note that there is no `%hstick' register, the 21720 normal `%stick' is used. 21721 21722 * The hyperprivileged system tick enable register is referred to as 21723 `%hstick_enable'. 21724 21725 * The hyperprivileged system tick compare register is referred to as 21726 `%hstick_cmpr'. 21727 21728 21729File: as.info, Node: Sparc-Constants, Next: Sparc-Relocs, Prev: Sparc-Regs, Up: Sparc-Syntax 21730 217319.44.3.3 Constants 21732.................. 21733 21734Several Sparc instructions take an immediate operand field for which 21735mnemonic names exist. Two such examples are `membar' and `prefetch'. 21736Another example are the set of V9 memory access instruction that allow 21737specification of an address space identifier. 21738 21739 The `membar' instruction specifies a memory barrier that is the 21740defined by the operand which is a bitmask. The supported mask 21741mnemonics are: 21742 21743 * `#Sync' requests that all operations (including nonmemory 21744 reference operations) appearing prior to the `membar' must have 21745 been performed and the effects of any exceptions become visible 21746 before any instructions after the `membar' may be initiated. This 21747 corresponds to `membar' cmask field bit 2. 21748 21749 * `#MemIssue' requests that all memory reference operations 21750 appearing prior to the `membar' must have been performed before 21751 any memory operation after the `membar' may be initiated. This 21752 corresponds to `membar' cmask field bit 1. 21753 21754 * `#Lookaside' requests that a store appearing prior to the `membar' 21755 must complete before any load following the `membar' referencing 21756 the same address can be initiated. This corresponds to `membar' 21757 cmask field bit 0. 21758 21759 * `#StoreStore' defines that the effects of all stores appearing 21760 prior to the `membar' instruction must be visible to all 21761 processors before the effect of any stores following the `membar'. 21762 Equivalent to the deprecated `stbar' instruction. This 21763 corresponds to `membar' mmask field bit 3. 21764 21765 * `#LoadStore' defines all loads appearing prior to the `membar' 21766 instruction must have been performed before the effect of any 21767 stores following the `membar' is visible to any other processor. 21768 This corresponds to `membar' mmask field bit 2. 21769 21770 * `#StoreLoad' defines that the effects of all stores appearing 21771 prior to the `membar' instruction must be visible to all 21772 processors before loads following the `membar' may be performed. 21773 This corresponds to `membar' mmask field bit 1. 21774 21775 * `#LoadLoad' defines that all loads appearing prior to the `membar' 21776 instruction must have been performed before any loads following 21777 the `membar' may be performed. This corresponds to `membar' mmask 21778 field bit 0. 21779 21780 21781 These values can be ored together, for example: 21782 21783 membar #Sync 21784 membar #StoreLoad | #LoadLoad 21785 membar #StoreLoad | #StoreStore 21786 21787 The `prefetch' and `prefetcha' instructions take a prefetch function 21788code. The following prefetch function code constant mnemonics are 21789available: 21790 21791 * `#n_reads' requests a prefetch for several reads, and corresponds 21792 to a prefetch function code of 0. 21793 21794 `#one_read' requests a prefetch for one read, and corresponds to a 21795 prefetch function code of 1. 21796 21797 `#n_writes' requests a prefetch for several writes (and possibly 21798 reads), and corresponds to a prefetch function code of 2. 21799 21800 `#one_write' requests a prefetch for one write, and corresponds to 21801 a prefetch function code of 3. 21802 21803 `#page' requests a prefetch page, and corresponds to a prefetch 21804 function code of 4. 21805 21806 `#invalidate' requests a prefetch invalidate, and corresponds to a 21807 prefetch function code of 16. 21808 21809 `#unified' requests a prefetch to the nearest unified cache, and 21810 corresponds to a prefetch function code of 17. 21811 21812 `#n_reads_strong' requests a strong prefetch for several reads, 21813 and corresponds to a prefetch function code of 20. 21814 21815 `#one_read_strong' requests a strong prefetch for one read, and 21816 corresponds to a prefetch function code of 21. 21817 21818 `#n_writes_strong' requests a strong prefetch for several writes, 21819 and corresponds to a prefetch function code of 22. 21820 21821 `#one_write_strong' requests a strong prefetch for one write, and 21822 corresponds to a prefetch function code of 23. 21823 21824 Onle one prefetch code may be specified. Here are some examples: 21825 21826 prefetch [%l0 + %l2], #one_read 21827 prefetch [%g2 + 8], #n_writes 21828 prefetcha [%g1] 0x8, #unified 21829 prefetcha [%o0 + 0x10] %asi, #n_reads 21830 21831 The actual behavior of a given prefetch function code is processor 21832 specific. If a processor does not implement a given prefetch 21833 function code, it will treat the prefetch instruction as a nop. 21834 21835 For instructions that accept an immediate address space identifier, 21836 `as' provides many mnemonics corresponding to V9 defined as well 21837 as UltraSPARC and Niagara extended values. For example, `#ASI_P' 21838 and `#ASI_BLK_INIT_QUAD_LDD_AIUS'. See the V9 and processor 21839 specific manuals for details. 21840 21841 21842 21843File: as.info, Node: Sparc-Relocs, Next: Sparc-Size-Translations, Prev: Sparc-Constants, Up: Sparc-Syntax 21844 218459.44.3.4 Relocations 21846.................... 21847 21848ELF relocations are available as defined in the 32-bit and 64-bit Sparc 21849ELF specifications. 21850 21851 `R_SPARC_HI22' is obtained using `%hi' and `R_SPARC_LO10' is 21852obtained using `%lo'. Likewise `R_SPARC_HIX22' is obtained from `%hix' 21853and `R_SPARC_LOX10' is obtained using `%lox'. For example: 21854 21855 sethi %hi(symbol), %g1 21856 or %g1, %lo(symbol), %g1 21857 21858 sethi %hix(symbol), %g1 21859 xor %g1, %lox(symbol), %g1 21860 21861 These "high" mnemonics extract bits 31:10 of their operand, and the 21862"low" mnemonics extract bits 9:0 of their operand. 21863 21864 V9 code model relocations can be requested as follows: 21865 21866 * `R_SPARC_HH22' is requested using `%hh'. It can also be generated 21867 using `%uhi'. 21868 21869 * `R_SPARC_HM10' is requested using `%hm'. It can also be generated 21870 using `%ulo'. 21871 21872 * `R_SPARC_LM22' is requested using `%lm'. 21873 21874 * `R_SPARC_H44' is requested using `%h44'. 21875 21876 * `R_SPARC_M44' is requested using `%m44'. 21877 21878 * `R_SPARC_L44' is requested using `%l44' or `%l34'. 21879 21880 * `R_SPARC_H34' is requested using `%h34'. 21881 21882 The `%l34' generates a `R_SPARC_L44' relocation because it 21883calculates the necessary value, and therefore no explicit `R_SPARC_L34' 21884relocation needed to be created for this purpose. 21885 21886 The `%h34' and `%l34' relocations are used for the abs34 code model. 21887Here is an example abs34 address generation sequence: 21888 21889 sethi %h34(symbol), %g1 21890 sllx %g1, 2, %g1 21891 or %g1, %l34(symbol), %g1 21892 21893 The PC relative relocation `R_SPARC_PC22' can be obtained by 21894enclosing an operand inside of `%pc22'. Likewise, the `R_SPARC_PC10' 21895relocation can be obtained using `%pc10'. These are mostly used when 21896assembling PIC code. For example, the standard PIC sequence on Sparc 21897to get the base of the global offset table, PC relative, into a 21898register, can be performed as: 21899 21900 sethi %pc22(_GLOBAL_OFFSET_TABLE_-4), %l7 21901 add %l7, %pc10(_GLOBAL_OFFSET_TABLE_+4), %l7 21902 21903 Several relocations exist to allow the link editor to potentially 21904optimize GOT data references. The `R_SPARC_GOTDATA_OP_HIX22' 21905relocation can obtained by enclosing an operand inside of 21906`%gdop_hix22'. The `R_SPARC_GOTDATA_OP_LOX10' relocation can obtained 21907by enclosing an operand inside of `%gdop_lox10'. Likewise, 21908`R_SPARC_GOTDATA_OP' can be obtained by enclosing an operand inside of 21909`%gdop'. For example, assuming the GOT base is in register `%l7': 21910 21911 sethi %gdop_hix22(symbol), %l1 21912 xor %l1, %gdop_lox10(symbol), %l1 21913 ld [%l7 + %l1], %l2, %gdop(symbol) 21914 21915 There are many relocations that can be requested for access to 21916thread local storage variables. All of the Sparc TLS mnemonics are 21917supported: 21918 21919 * `R_SPARC_TLS_GD_HI22' is requested using `%tgd_hi22'. 21920 21921 * `R_SPARC_TLS_GD_LO10' is requested using `%tgd_lo10'. 21922 21923 * `R_SPARC_TLS_GD_ADD' is requested using `%tgd_add'. 21924 21925 * `R_SPARC_TLS_GD_CALL' is requested using `%tgd_call'. 21926 21927 * `R_SPARC_TLS_LDM_HI22' is requested using `%tldm_hi22'. 21928 21929 * `R_SPARC_TLS_LDM_LO10' is requested using `%tldm_lo10'. 21930 21931 * `R_SPARC_TLS_LDM_ADD' is requested using `%tldm_add'. 21932 21933 * `R_SPARC_TLS_LDM_CALL' is requested using `%tldm_call'. 21934 21935 * `R_SPARC_TLS_LDO_HIX22' is requested using `%tldo_hix22'. 21936 21937 * `R_SPARC_TLS_LDO_LOX10' is requested using `%tldo_lox10'. 21938 21939 * `R_SPARC_TLS_LDO_ADD' is requested using `%tldo_add'. 21940 21941 * `R_SPARC_TLS_IE_HI22' is requested using `%tie_hi22'. 21942 21943 * `R_SPARC_TLS_IE_LO10' is requested using `%tie_lo10'. 21944 21945 * `R_SPARC_TLS_IE_LD' is requested using `%tie_ld'. 21946 21947 * `R_SPARC_TLS_IE_LDX' is requested using `%tie_ldx'. 21948 21949 * `R_SPARC_TLS_IE_ADD' is requested using `%tie_add'. 21950 21951 * `R_SPARC_TLS_LE_HIX22' is requested using `%tle_hix22'. 21952 21953 * `R_SPARC_TLS_LE_LOX10' is requested using `%tle_lox10'. 21954 21955 Here are some example TLS model sequences. 21956 21957 First, General Dynamic: 21958 21959 sethi %tgd_hi22(symbol), %l1 21960 add %l1, %tgd_lo10(symbol), %l1 21961 add %l7, %l1, %o0, %tgd_add(symbol) 21962 call __tls_get_addr, %tgd_call(symbol) 21963 nop 21964 21965 Local Dynamic: 21966 21967 sethi %tldm_hi22(symbol), %l1 21968 add %l1, %tldm_lo10(symbol), %l1 21969 add %l7, %l1, %o0, %tldm_add(symbol) 21970 call __tls_get_addr, %tldm_call(symbol) 21971 nop 21972 21973 sethi %tldo_hix22(symbol), %l1 21974 xor %l1, %tldo_lox10(symbol), %l1 21975 add %o0, %l1, %l1, %tldo_add(symbol) 21976 21977 Initial Exec: 21978 21979 sethi %tie_hi22(symbol), %l1 21980 add %l1, %tie_lo10(symbol), %l1 21981 ld [%l7 + %l1], %o0, %tie_ld(symbol) 21982 add %g7, %o0, %o0, %tie_add(symbol) 21983 21984 sethi %tie_hi22(symbol), %l1 21985 add %l1, %tie_lo10(symbol), %l1 21986 ldx [%l7 + %l1], %o0, %tie_ldx(symbol) 21987 add %g7, %o0, %o0, %tie_add(symbol) 21988 21989 And finally, Local Exec: 21990 21991 sethi %tle_hix22(symbol), %l1 21992 add %l1, %tle_lox10(symbol), %l1 21993 add %g7, %l1, %l1 21994 21995 When assembling for 64-bit, and a secondary constant addend is 21996specified in an address expression that would normally generate an 21997`R_SPARC_LO10' relocation, the assembler will emit an `R_SPARC_OLO10' 21998instead. 21999 22000 22001File: as.info, Node: Sparc-Size-Translations, Prev: Sparc-Relocs, Up: Sparc-Syntax 22002 220039.44.3.5 Size Translations 22004.......................... 22005 22006Often it is desirable to write code in an operand size agnostic manner. 22007`as' provides support for this via operand size opcode translations. 22008Translations are supported for loads, stores, shifts, compare-and-swap 22009atomics, and the `clr' synthetic instruction. 22010 22011 If generating 32-bit code, `as' will generate the 32-bit opcode. 22012Whereas if 64-bit code is being generated, the 64-bit opcode will be 22013emitted. For example `ldn' will be transformed into `ld' for 32-bit 22014code and `ldx' for 64-bit code. 22015 22016 Here is an example meant to demonstrate all the supported opcode 22017translations: 22018 22019 ldn [%o0], %o1 22020 ldna [%o0] %asi, %o2 22021 stn %o1, [%o0] 22022 stna %o2, [%o0] %asi 22023 slln %o3, 3, %o3 22024 srln %o4, 8, %o4 22025 sran %o5, 12, %o5 22026 casn [%o0], %o1, %o2 22027 casna [%o0] %asi, %o1, %o2 22028 clrn %g1 22029 22030 In 32-bit mode `as' will emit: 22031 22032 ld [%o0], %o1 22033 lda [%o0] %asi, %o2 22034 st %o1, [%o0] 22035 sta %o2, [%o0] %asi 22036 sll %o3, 3, %o3 22037 srl %o4, 8, %o4 22038 sra %o5, 12, %o5 22039 cas [%o0], %o1, %o2 22040 casa [%o0] %asi, %o1, %o2 22041 clr %g1 22042 22043 And in 64-bit mode `as' will emit: 22044 22045 ldx [%o0], %o1 22046 ldxa [%o0] %asi, %o2 22047 stx %o1, [%o0] 22048 stxa %o2, [%o0] %asi 22049 sllx %o3, 3, %o3 22050 srlx %o4, 8, %o4 22051 srax %o5, 12, %o5 22052 casx [%o0], %o1, %o2 22053 casxa [%o0] %asi, %o1, %o2 22054 clrx %g1 22055 22056 Finally, the `.nword' translating directive is supported as well. 22057It is documented in the section on Sparc machine directives. 22058 22059 22060File: as.info, Node: Sparc-Float, Next: Sparc-Directives, Prev: Sparc-Syntax, Up: Sparc-Dependent 22061 220629.44.4 Floating Point 22063--------------------- 22064 22065The Sparc uses IEEE floating-point numbers. 22066 22067 22068File: as.info, Node: Sparc-Directives, Prev: Sparc-Float, Up: Sparc-Dependent 22069 220709.44.5 Sparc Machine Directives 22071------------------------------- 22072 22073The Sparc version of `as' supports the following additional machine 22074directives: 22075 22076`.align' 22077 This must be followed by the desired alignment in bytes. 22078 22079`.common' 22080 This must be followed by a symbol name, a positive number, and 22081 `"bss"'. This behaves somewhat like `.comm', but the syntax is 22082 different. 22083 22084`.half' 22085 This is functionally identical to `.short'. 22086 22087`.nword' 22088 On the Sparc, the `.nword' directive produces native word sized 22089 value, ie. if assembling with -32 it is equivalent to `.word', if 22090 assembling with -64 it is equivalent to `.xword'. 22091 22092`.proc' 22093 This directive is ignored. Any text following it on the same line 22094 is also ignored. 22095 22096`.register' 22097 This directive declares use of a global application or system 22098 register. It must be followed by a register name %g2, %g3, %g6 or 22099 %g7, comma and the symbol name for that register. If symbol name 22100 is `#scratch', it is a scratch register, if it is `#ignore', it 22101 just suppresses any errors about using undeclared global register, 22102 but does not emit any information about it into the object file. 22103 This can be useful e.g. if you save the register before use and 22104 restore it after. 22105 22106`.reserve' 22107 This must be followed by a symbol name, a positive number, and 22108 `"bss"'. This behaves somewhat like `.lcomm', but the syntax is 22109 different. 22110 22111`.seg' 22112 This must be followed by `"text"', `"data"', or `"data1"'. It 22113 behaves like `.text', `.data', or `.data 1'. 22114 22115`.skip' 22116 This is functionally identical to the `.space' directive. 22117 22118`.word' 22119 On the Sparc, the `.word' directive produces 32 bit values, 22120 instead of the 16 bit values it produces on many other machines. 22121 22122`.xword' 22123 On the Sparc V9 processor, the `.xword' directive produces 64 bit 22124 values. 22125 22126 22127File: as.info, Node: TIC54X-Dependent, Next: TIC6X-Dependent, Prev: Sparc-Dependent, Up: Machine Dependencies 22128 221299.45 TIC54X Dependent Features 22130============================== 22131 22132* Menu: 22133 22134* TIC54X-Opts:: Command-line Options 22135* TIC54X-Block:: Blocking 22136* TIC54X-Env:: Environment Settings 22137* TIC54X-Constants:: Constants Syntax 22138* TIC54X-Subsyms:: String Substitution 22139* TIC54X-Locals:: Local Label Syntax 22140* TIC54X-Builtins:: Builtin Assembler Math Functions 22141* TIC54X-Ext:: Extended Addressing Support 22142* TIC54X-Directives:: Directives 22143* TIC54X-Macros:: Macro Features 22144* TIC54X-MMRegs:: Memory-mapped Registers 22145* TIC54X-Syntax:: Syntax 22146 22147 22148File: as.info, Node: TIC54X-Opts, Next: TIC54X-Block, Up: TIC54X-Dependent 22149 221509.45.1 Options 22151-------------- 22152 22153The TMS320C54X version of `as' has a few machine-dependent options. 22154 22155 You can use the `-mfar-mode' option to enable extended addressing 22156mode. All addresses will be assumed to be > 16 bits, and the 22157appropriate relocation types will be used. This option is equivalent 22158to using the `.far_mode' directive in the assembly code. If you do not 22159use the `-mfar-mode' option, all references will be assumed to be 16 22160bits. This option may be abbreviated to `-mf'. 22161 22162 You can use the `-mcpu' option to specify a particular CPU. This 22163option is equivalent to using the `.version' directive in the assembly 22164code. For recognized CPU codes, see *Note `.version': 22165TIC54X-Directives. The default CPU version is `542'. 22166 22167 You can use the `-merrors-to-file' option to redirect error output 22168to a file (this provided for those deficient environments which don't 22169provide adequate output redirection). This option may be abbreviated to 22170`-me'. 22171 22172 22173File: as.info, Node: TIC54X-Block, Next: TIC54X-Env, Prev: TIC54X-Opts, Up: TIC54X-Dependent 22174 221759.45.2 Blocking 22176--------------- 22177 22178A blocked section or memory block is guaranteed not to cross the 22179blocking boundary (usually a page, or 128 words) if it is smaller than 22180the blocking size, or to start on a page boundary if it is larger than 22181the blocking size. 22182 22183 22184File: as.info, Node: TIC54X-Env, Next: TIC54X-Constants, Prev: TIC54X-Block, Up: TIC54X-Dependent 22185 221869.45.3 Environment Settings 22187--------------------------- 22188 22189`C54XDSP_DIR' and `A_DIR' are semicolon-separated paths which are added 22190to the list of directories normally searched for source and include 22191files. `C54XDSP_DIR' will override `A_DIR'. 22192 22193 22194File: as.info, Node: TIC54X-Constants, Next: TIC54X-Subsyms, Prev: TIC54X-Env, Up: TIC54X-Dependent 22195 221969.45.4 Constants Syntax 22197----------------------- 22198 22199The TIC54X version of `as' allows the following additional constant 22200formats, using a suffix to indicate the radix: 22201 22202 Binary `000000B, 011000b' 22203 Octal `10Q, 224q' 22204 Hexadecimal `45h, 0FH' 22205 22206 22207File: as.info, Node: TIC54X-Subsyms, Next: TIC54X-Locals, Prev: TIC54X-Constants, Up: TIC54X-Dependent 22208 222099.45.5 String Substitution 22210-------------------------- 22211 22212A subset of allowable symbols (which we'll call subsyms) may be assigned 22213arbitrary string values. This is roughly equivalent to C preprocessor 22214#define macros. When `as' encounters one of these symbols, the symbol 22215is replaced in the input stream by its string value. Subsym names 22216*must* begin with a letter. 22217 22218 Subsyms may be defined using the `.asg' and `.eval' directives 22219(*Note `.asg': TIC54X-Directives, *Note `.eval': TIC54X-Directives. 22220 22221 Expansion is recursive until a previously encountered symbol is 22222seen, at which point substitution stops. 22223 22224 In this example, x is replaced with SYM2; SYM2 is replaced with 22225SYM1, and SYM1 is replaced with x. At this point, x has already been 22226encountered and the substitution stops. 22227 22228 .asg "x",SYM1 22229 .asg "SYM1",SYM2 22230 .asg "SYM2",x 22231 add x,a ; final code assembled is "add x, a" 22232 22233 Macro parameters are converted to subsyms; a side effect of this is 22234the normal `as' '\ARG' dereferencing syntax is unnecessary. Subsyms 22235defined within a macro will have global scope, unless the `.var' 22236directive is used to identify the subsym as a local macro variable 22237*note `.var': TIC54X-Directives. 22238 22239 Substitution may be forced in situations where replacement might be 22240ambiguous by placing colons on either side of the subsym. The following 22241code: 22242 22243 .eval "10",x 22244 LAB:X: add #x, a 22245 22246 When assembled becomes: 22247 22248 LAB10 add #10, a 22249 22250 Smaller parts of the string assigned to a subsym may be accessed with 22251the following syntax: 22252 22253``:SYMBOL(CHAR_INDEX):'' 22254 Evaluates to a single-character string, the character at 22255 CHAR_INDEX. 22256 22257``:SYMBOL(START,LENGTH):'' 22258 Evaluates to a substring of SYMBOL beginning at START with length 22259 LENGTH. 22260 22261 22262File: as.info, Node: TIC54X-Locals, Next: TIC54X-Builtins, Prev: TIC54X-Subsyms, Up: TIC54X-Dependent 22263 222649.45.6 Local Labels 22265------------------- 22266 22267Local labels may be defined in two ways: 22268 22269 * $N, where N is a decimal number between 0 and 9 22270 22271 * LABEL?, where LABEL is any legal symbol name. 22272 22273 Local labels thus defined may be redefined or automatically 22274generated. The scope of a local label is based on when it may be 22275undefined or reset. This happens when one of the following situations 22276is encountered: 22277 22278 * .newblock directive *note `.newblock': TIC54X-Directives. 22279 22280 * The current section is changed (.sect, .text, or .data) 22281 22282 * Entering or leaving an included file 22283 22284 * The macro scope where the label was defined is exited 22285 22286 22287File: as.info, Node: TIC54X-Builtins, Next: TIC54X-Ext, Prev: TIC54X-Locals, Up: TIC54X-Dependent 22288 222899.45.7 Math Builtins 22290-------------------- 22291 22292The following built-in functions may be used to generate a 22293floating-point value. All return a floating-point value except `$cvi', 22294`$int', and `$sgn', which return an integer value. 22295 22296``$acos(EXPR)'' 22297 Returns the floating point arccosine of EXPR. 22298 22299``$asin(EXPR)'' 22300 Returns the floating point arcsine of EXPR. 22301 22302``$atan(EXPR)'' 22303 Returns the floating point arctangent of EXPR. 22304 22305``$atan2(EXPR1,EXPR2)'' 22306 Returns the floating point arctangent of EXPR1 / EXPR2. 22307 22308``$ceil(EXPR)'' 22309 Returns the smallest integer not less than EXPR as floating point. 22310 22311``$cosh(EXPR)'' 22312 Returns the floating point hyperbolic cosine of EXPR. 22313 22314``$cos(EXPR)'' 22315 Returns the floating point cosine of EXPR. 22316 22317``$cvf(EXPR)'' 22318 Returns the integer value EXPR converted to floating-point. 22319 22320``$cvi(EXPR)'' 22321 Returns the floating point value EXPR converted to integer. 22322 22323``$exp(EXPR)'' 22324 Returns the floating point value e ^ EXPR. 22325 22326``$fabs(EXPR)'' 22327 Returns the floating point absolute value of EXPR. 22328 22329``$floor(EXPR)'' 22330 Returns the largest integer that is not greater than EXPR as 22331 floating point. 22332 22333``$fmod(EXPR1,EXPR2)'' 22334 Returns the floating point remainder of EXPR1 / EXPR2. 22335 22336``$int(EXPR)'' 22337 Returns 1 if EXPR evaluates to an integer, zero otherwise. 22338 22339``$ldexp(EXPR1,EXPR2)'' 22340 Returns the floating point value EXPR1 * 2 ^ EXPR2. 22341 22342``$log10(EXPR)'' 22343 Returns the base 10 logarithm of EXPR. 22344 22345``$log(EXPR)'' 22346 Returns the natural logarithm of EXPR. 22347 22348``$max(EXPR1,EXPR2)'' 22349 Returns the floating point maximum of EXPR1 and EXPR2. 22350 22351``$min(EXPR1,EXPR2)'' 22352 Returns the floating point minimum of EXPR1 and EXPR2. 22353 22354``$pow(EXPR1,EXPR2)'' 22355 Returns the floating point value EXPR1 ^ EXPR2. 22356 22357``$round(EXPR)'' 22358 Returns the nearest integer to EXPR as a floating point number. 22359 22360``$sgn(EXPR)'' 22361 Returns -1, 0, or 1 based on the sign of EXPR. 22362 22363``$sin(EXPR)'' 22364 Returns the floating point sine of EXPR. 22365 22366``$sinh(EXPR)'' 22367 Returns the floating point hyperbolic sine of EXPR. 22368 22369``$sqrt(EXPR)'' 22370 Returns the floating point square root of EXPR. 22371 22372``$tan(EXPR)'' 22373 Returns the floating point tangent of EXPR. 22374 22375``$tanh(EXPR)'' 22376 Returns the floating point hyperbolic tangent of EXPR. 22377 22378``$trunc(EXPR)'' 22379 Returns the integer value of EXPR truncated towards zero as 22380 floating point. 22381 22382 22383 22384File: as.info, Node: TIC54X-Ext, Next: TIC54X-Directives, Prev: TIC54X-Builtins, Up: TIC54X-Dependent 22385 223869.45.8 Extended Addressing 22387-------------------------- 22388 22389The `LDX' pseudo-op is provided for loading the extended addressing bits 22390of a label or address. For example, if an address `_label' resides in 22391extended program memory, the value of `_label' may be loaded as follows: 22392 ldx #_label,16,a ; loads extended bits of _label 22393 or #_label,a ; loads lower 16 bits of _label 22394 bacc a ; full address is in accumulator A 22395 22396 22397File: as.info, Node: TIC54X-Directives, Next: TIC54X-Macros, Prev: TIC54X-Ext, Up: TIC54X-Dependent 22398 223999.45.9 Directives 22400----------------- 22401 22402`.align [SIZE]' 22403`.even' 22404 Align the section program counter on the next boundary, based on 22405 SIZE. SIZE may be any power of 2. `.even' is equivalent to 22406 `.align' with a SIZE of 2. 22407 `1' 22408 Align SPC to word boundary 22409 22410 `2' 22411 Align SPC to longword boundary (same as .even) 22412 22413 `128' 22414 Align SPC to page boundary 22415 22416`.asg STRING, NAME' 22417 Assign NAME the string STRING. String replacement is performed on 22418 STRING before assignment. 22419 22420`.eval STRING, NAME' 22421 Evaluate the contents of string STRING and assign the result as a 22422 string to the subsym NAME. String replacement is performed on 22423 STRING before assignment. 22424 22425`.bss SYMBOL, SIZE [, [BLOCKING_FLAG] [,ALIGNMENT_FLAG]]' 22426 Reserve space for SYMBOL in the .bss section. SIZE is in words. 22427 If present, BLOCKING_FLAG indicates the allocated space should be 22428 aligned on a page boundary if it would otherwise cross a page 22429 boundary. If present, ALIGNMENT_FLAG causes the assembler to 22430 allocate SIZE on a long word boundary. 22431 22432`.byte VALUE [,...,VALUE_N]' 22433`.ubyte VALUE [,...,VALUE_N]' 22434`.char VALUE [,...,VALUE_N]' 22435`.uchar VALUE [,...,VALUE_N]' 22436 Place one or more bytes into consecutive words of the current 22437 section. The upper 8 bits of each word is zero-filled. If a 22438 label is used, it points to the word allocated for the first byte 22439 encountered. 22440 22441`.clink ["SECTION_NAME"]' 22442 Set STYP_CLINK flag for this section, which indicates to the 22443 linker that if no symbols from this section are referenced, the 22444 section should not be included in the link. If SECTION_NAME is 22445 omitted, the current section is used. 22446 22447`.c_mode' 22448 TBD. 22449 22450`.copy "FILENAME" | FILENAME' 22451`.include "FILENAME" | FILENAME' 22452 Read source statements from FILENAME. The normal include search 22453 path is used. Normally .copy will cause statements from the 22454 included file to be printed in the assembly listing and .include 22455 will not, but this distinction is not currently implemented. 22456 22457`.data' 22458 Begin assembling code into the .data section. 22459 22460`.double VALUE [,...,VALUE_N]' 22461`.ldouble VALUE [,...,VALUE_N]' 22462`.float VALUE [,...,VALUE_N]' 22463`.xfloat VALUE [,...,VALUE_N]' 22464 Place an IEEE single-precision floating-point representation of 22465 one or more floating-point values into the current section. All 22466 but `.xfloat' align the result on a longword boundary. Values are 22467 stored most-significant word first. 22468 22469`.drlist' 22470`.drnolist' 22471 Control printing of directives to the listing file. Ignored. 22472 22473`.emsg STRING' 22474`.mmsg STRING' 22475`.wmsg STRING' 22476 Emit a user-defined error, message, or warning, respectively. 22477 22478`.far_mode' 22479 Use extended addressing when assembling statements. This should 22480 appear only once per file, and is equivalent to the -mfar-mode 22481 option *note `-mfar-mode': TIC54X-Opts. 22482 22483`.fclist' 22484`.fcnolist' 22485 Control printing of false conditional blocks to the listing file. 22486 22487`.field VALUE [,SIZE]' 22488 Initialize a bitfield of SIZE bits in the current section. If 22489 VALUE is relocatable, then SIZE must be 16. SIZE defaults to 16 22490 bits. If VALUE does not fit into SIZE bits, the value will be 22491 truncated. Successive `.field' directives will pack starting at 22492 the current word, filling the most significant bits first, and 22493 aligning to the start of the next word if the field size does not 22494 fit into the space remaining in the current word. A `.align' 22495 directive with an operand of 1 will force the next `.field' 22496 directive to begin packing into a new word. If a label is used, it 22497 points to the word that contains the specified field. 22498 22499`.global SYMBOL [,...,SYMBOL_N]' 22500`.def SYMBOL [,...,SYMBOL_N]' 22501`.ref SYMBOL [,...,SYMBOL_N]' 22502 `.def' nominally identifies a symbol defined in the current file 22503 and available to other files. `.ref' identifies a symbol used in 22504 the current file but defined elsewhere. Both map to the standard 22505 `.global' directive. 22506 22507`.half VALUE [,...,VALUE_N]' 22508`.uhalf VALUE [,...,VALUE_N]' 22509`.short VALUE [,...,VALUE_N]' 22510`.ushort VALUE [,...,VALUE_N]' 22511`.int VALUE [,...,VALUE_N]' 22512`.uint VALUE [,...,VALUE_N]' 22513`.word VALUE [,...,VALUE_N]' 22514`.uword VALUE [,...,VALUE_N]' 22515 Place one or more values into consecutive words of the current 22516 section. If a label is used, it points to the word allocated for 22517 the first value encountered. 22518 22519`.label SYMBOL' 22520 Define a special SYMBOL to refer to the load time address of the 22521 current section program counter. 22522 22523`.length' 22524`.width' 22525 Set the page length and width of the output listing file. Ignored. 22526 22527`.list' 22528`.nolist' 22529 Control whether the source listing is printed. Ignored. 22530 22531`.long VALUE [,...,VALUE_N]' 22532`.ulong VALUE [,...,VALUE_N]' 22533`.xlong VALUE [,...,VALUE_N]' 22534 Place one or more 32-bit values into consecutive words in the 22535 current section. The most significant word is stored first. 22536 `.long' and `.ulong' align the result on a longword boundary; 22537 `xlong' does not. 22538 22539`.loop [COUNT]' 22540`.break [CONDITION]' 22541`.endloop' 22542 Repeatedly assemble a block of code. `.loop' begins the block, and 22543 `.endloop' marks its termination. COUNT defaults to 1024, and 22544 indicates the number of times the block should be repeated. 22545 `.break' terminates the loop so that assembly begins after the 22546 `.endloop' directive. The optional CONDITION will cause the loop 22547 to terminate only if it evaluates to zero. 22548 22549`MACRO_NAME .macro [PARAM1][,...PARAM_N]' 22550`[.mexit]' 22551`.endm' 22552 See the section on macros for more explanation (*Note 22553 TIC54X-Macros::. 22554 22555`.mlib "FILENAME" | FILENAME' 22556 Load the macro library FILENAME. FILENAME must be an archived 22557 library (BFD ar-compatible) of text files, expected to contain 22558 only macro definitions. The standard include search path is used. 22559 22560`.mlist' 22561`.mnolist' 22562 Control whether to include macro and loop block expansions in the 22563 listing output. Ignored. 22564 22565`.mmregs' 22566 Define global symbolic names for the 'c54x registers. Supposedly 22567 equivalent to executing `.set' directives for each register with 22568 its memory-mapped value, but in reality is provided only for 22569 compatibility and does nothing. 22570 22571`.newblock' 22572 This directive resets any TIC54X local labels currently defined. 22573 Normal `as' local labels are unaffected. 22574 22575`.option OPTION_LIST' 22576 Set listing options. Ignored. 22577 22578`.sblock "SECTION_NAME" | SECTION_NAME [,"NAME_N" | NAME_N]' 22579 Designate SECTION_NAME for blocking. Blocking guarantees that a 22580 section will start on a page boundary (128 words) if it would 22581 otherwise cross a page boundary. Only initialized sections may be 22582 designated with this directive. See also *Note TIC54X-Block::. 22583 22584`.sect "SECTION_NAME"' 22585 Define a named initialized section and make it the current section. 22586 22587`SYMBOL .set "VALUE"' 22588`SYMBOL .equ "VALUE"' 22589 Equate a constant VALUE to a SYMBOL, which is placed in the symbol 22590 table. SYMBOL may not be previously defined. 22591 22592`.space SIZE_IN_BITS' 22593`.bes SIZE_IN_BITS' 22594 Reserve the given number of bits in the current section and 22595 zero-fill them. If a label is used with `.space', it points to the 22596 *first* word reserved. With `.bes', the label points to the 22597 *last* word reserved. 22598 22599`.sslist' 22600`.ssnolist' 22601 Controls the inclusion of subsym replacement in the listing 22602 output. Ignored. 22603 22604`.string "STRING" [,...,"STRING_N"]' 22605`.pstring "STRING" [,...,"STRING_N"]' 22606 Place 8-bit characters from STRING into the current section. 22607 `.string' zero-fills the upper 8 bits of each word, while 22608 `.pstring' puts two characters into each word, filling the 22609 most-significant bits first. Unused space is zero-filled. If a 22610 label is used, it points to the first word initialized. 22611 22612`[STAG] .struct [OFFSET]' 22613`[NAME_1] element [COUNT_1]' 22614`[NAME_2] element [COUNT_2]' 22615`[TNAME] .tag STAGX [TCOUNT]' 22616`...' 22617`[NAME_N] element [COUNT_N]' 22618`[SSIZE] .endstruct' 22619`LABEL .tag [STAG]' 22620 Assign symbolic offsets to the elements of a structure. STAG 22621 defines a symbol to use to reference the structure. OFFSET 22622 indicates a starting value to use for the first element 22623 encountered; otherwise it defaults to zero. Each element can have 22624 a named offset, NAME, which is a symbol assigned the value of the 22625 element's offset into the structure. If STAG is missing, these 22626 become global symbols. COUNT adjusts the offset that many times, 22627 as if `element' were an array. `element' may be one of `.byte', 22628 `.word', `.long', `.float', or any equivalent of those, and the 22629 structure offset is adjusted accordingly. `.field' and `.string' 22630 are also allowed; the size of `.field' is one bit, and `.string' 22631 is considered to be one word in size. Only element descriptors, 22632 structure/union tags, `.align' and conditional assembly directives 22633 are allowed within `.struct'/`.endstruct'. `.align' aligns member 22634 offsets to word boundaries only. SSIZE, if provided, will always 22635 be assigned the size of the structure. 22636 22637 The `.tag' directive, in addition to being used to define a 22638 structure/union element within a structure, may be used to apply a 22639 structure to a symbol. Once applied to LABEL, the individual 22640 structure elements may be applied to LABEL to produce the desired 22641 offsets using LABEL as the structure base. 22642 22643`.tab' 22644 Set the tab size in the output listing. Ignored. 22645 22646`[UTAG] .union' 22647`[NAME_1] element [COUNT_1]' 22648`[NAME_2] element [COUNT_2]' 22649`[TNAME] .tag UTAGX[,TCOUNT]' 22650`...' 22651`[NAME_N] element [COUNT_N]' 22652`[USIZE] .endstruct' 22653`LABEL .tag [UTAG]' 22654 Similar to `.struct', but the offset after each element is reset to 22655 zero, and the USIZE is set to the maximum of all defined elements. 22656 Starting offset for the union is always zero. 22657 22658`[SYMBOL] .usect "SECTION_NAME", SIZE, [,[BLOCKING_FLAG] [,ALIGNMENT_FLAG]]' 22659 Reserve space for variables in a named, uninitialized section 22660 (similar to .bss). `.usect' allows definitions sections 22661 independent of .bss. SYMBOL points to the first location reserved 22662 by this allocation. The symbol may be used as a variable name. 22663 SIZE is the allocated size in words. BLOCKING_FLAG indicates 22664 whether to block this section on a page boundary (128 words) 22665 (*note TIC54X-Block::). ALIGNMENT FLAG indicates whether the 22666 section should be longword-aligned. 22667 22668`.var SYM[,..., SYM_N]' 22669 Define a subsym to be a local variable within a macro. See *Note 22670 TIC54X-Macros::. 22671 22672`.version VERSION' 22673 Set which processor to build instructions for. Though the 22674 following values are accepted, the op is ignored. 22675 `541' 22676 `542' 22677 `543' 22678 `545' 22679 `545LP' 22680 `546LP' 22681 `548' 22682 `549' 22683 22684 22685File: as.info, Node: TIC54X-Macros, Next: TIC54X-MMRegs, Prev: TIC54X-Directives, Up: TIC54X-Dependent 22686 226879.45.10 Macros 22688-------------- 22689 22690Macros do not require explicit dereferencing of arguments (i.e., \ARG). 22691 22692 During macro expansion, the macro parameters are converted to 22693subsyms. If the number of arguments passed the macro invocation 22694exceeds the number of parameters defined, the last parameter is 22695assigned the string equivalent of all remaining arguments. If fewer 22696arguments are given than parameters, the missing parameters are 22697assigned empty strings. To include a comma in an argument, you must 22698enclose the argument in quotes. 22699 22700 The following built-in subsym functions allow examination of the 22701string value of subsyms (or ordinary strings). The arguments are 22702strings unless otherwise indicated (subsyms passed as args will be 22703replaced by the strings they represent). 22704``$symlen(STR)'' 22705 Returns the length of STR. 22706 22707``$symcmp(STR1,STR2)'' 22708 Returns 0 if STR1 == STR2, non-zero otherwise. 22709 22710``$firstch(STR,CH)'' 22711 Returns index of the first occurrence of character constant CH in 22712 STR. 22713 22714``$lastch(STR,CH)'' 22715 Returns index of the last occurrence of character constant CH in 22716 STR. 22717 22718``$isdefed(SYMBOL)'' 22719 Returns zero if the symbol SYMBOL is not in the symbol table, 22720 non-zero otherwise. 22721 22722``$ismember(SYMBOL,LIST)'' 22723 Assign the first member of comma-separated string LIST to SYMBOL; 22724 LIST is reassigned the remainder of the list. Returns zero if 22725 LIST is a null string. Both arguments must be subsyms. 22726 22727``$iscons(EXPR)'' 22728 Returns 1 if string EXPR is binary, 2 if octal, 3 if hexadecimal, 22729 4 if a character, 5 if decimal, and zero if not an integer. 22730 22731``$isname(NAME)'' 22732 Returns 1 if NAME is a valid symbol name, zero otherwise. 22733 22734``$isreg(REG)'' 22735 Returns 1 if REG is a valid predefined register name (AR0-AR7 22736 only). 22737 22738``$structsz(STAG)'' 22739 Returns the size of the structure or union represented by STAG. 22740 22741``$structacc(STAG)'' 22742 Returns the reference point of the structure or union represented 22743 by STAG. Always returns zero. 22744 22745 22746 22747File: as.info, Node: TIC54X-MMRegs, Next: TIC54X-Syntax, Prev: TIC54X-Macros, Up: TIC54X-Dependent 22748 227499.45.11 Memory-mapped Registers 22750------------------------------- 22751 22752The following symbols are recognized as memory-mapped registers: 22753 22754 22755 22756File: as.info, Node: TIC54X-Syntax, Prev: TIC54X-MMRegs, Up: TIC54X-Dependent 22757 227589.45.12 TIC54X Syntax 22759--------------------- 22760 22761* Menu: 22762 22763* TIC54X-Chars:: Special Characters 22764 22765 22766File: as.info, Node: TIC54X-Chars, Up: TIC54X-Syntax 22767 227689.45.12.1 Special Characters 22769............................ 22770 22771The presence of a `;' appearing anywhere on a line indicates the start 22772of a comment that extends to the end of that line. 22773 22774 If a `#' appears as the first character of a line then the whole 22775line is treated as a comment, but in this case the line can also be a 22776logical line number directive (*note Comments::) or a preprocessor 22777control command (*note Preprocessing::). 22778 22779 The presence of an asterisk (`*') at the start of a line also 22780indicates a comment that extends to the end of that line. 22781 22782 The TIC54X assembler does not currently support a line separator 22783character. 22784 22785 22786File: as.info, Node: TIC6X-Dependent, Next: TILE-Gx-Dependent, Prev: TIC54X-Dependent, Up: Machine Dependencies 22787 227889.46 TIC6X Dependent Features 22789============================= 22790 22791* Menu: 22792 22793* TIC6X Options:: Options 22794* TIC6X Syntax:: Syntax 22795* TIC6X Directives:: Directives 22796 22797 22798File: as.info, Node: TIC6X Options, Next: TIC6X Syntax, Up: TIC6X-Dependent 22799 228009.46.1 TIC6X Options 22801-------------------- 22802 22803`-march=ARCH' 22804 Enable (only) instructions from architecture ARCH. By default, 22805 all instructions are permitted. 22806 22807 The following values of ARCH are accepted: `c62x', `c64x', 22808 `c64x+', `c67x', `c67x+', `c674x'. 22809 22810`-mdsbt' 22811`-mno-dsbt' 22812 The `-mdsbt' option causes the assembler to generate the 22813 `Tag_ABI_DSBT' attribute with a value of 1, indicating that the 22814 code is using DSBT addressing. The `-mno-dsbt' option, the 22815 default, causes the tag to have a value of 0, indicating that the 22816 code does not use DSBT addressing. The linker will emit a warning 22817 if objects of different type (DSBT and non-DSBT) are linked 22818 together. 22819 22820`-mpid=no' 22821`-mpid=near' 22822`-mpid=far' 22823 The `-mpid=' option causes the assembler to generate the 22824 `Tag_ABI_PID' attribute with a value indicating the form of data 22825 addressing used by the code. `-mpid=no', the default, indicates 22826 position-dependent data addressing, `-mpid=near' indicates 22827 position-independent addressing with GOT accesses using near DP 22828 addressing, and `-mpid=far' indicates position-independent 22829 addressing with GOT accesses using far DP addressing. The linker 22830 will emit a warning if objects built with different settings of 22831 this option are linked together. 22832 22833`-mpic' 22834`-mno-pic' 22835 The `-mpic' option causes the assembler to generate the 22836 `Tag_ABI_PIC' attribute with a value of 1, indicating that the 22837 code is using position-independent code addressing, The 22838 `-mno-pic' option, the default, causes the tag to have a value of 22839 0, indicating position-dependent code addressing. The linker will 22840 emit a warning if objects of different type (position-dependent and 22841 position-independent) are linked together. 22842 22843`-mbig-endian' 22844`-mlittle-endian' 22845 Generate code for the specified endianness. The default is 22846 little-endian. 22847 22848 22849 22850File: as.info, Node: TIC6X Syntax, Next: TIC6X Directives, Prev: TIC6X Options, Up: TIC6X-Dependent 22851 228529.46.2 TIC6X Syntax 22853------------------- 22854 22855The presence of a `;' on a line indicates the start of a comment that 22856extends to the end of the current line. If a `#' or `*' appears as the 22857first character of a line, the whole line is treated as a comment. 22858Note that if a line starts with a `#' character then it can also be a 22859logical line number directive (*note Comments::) or a preprocessor 22860control command (*note Preprocessing::). 22861 22862 The `@' character can be used instead of a newline to separate 22863statements. 22864 22865 Instruction, register and functional unit names are case-insensitive. 22866`as' requires fully-specified functional unit names, such as `.S1', 22867`.L1X' or `.D1T2', on all instructions using a functional unit. 22868 22869 For some instructions, there may be syntactic ambiguity between 22870register or functional unit names and the names of labels or other 22871symbols. To avoid this, enclose the ambiguous symbol name in 22872parentheses; register and functional unit names may not be enclosed in 22873parentheses. 22874 22875 22876File: as.info, Node: TIC6X Directives, Prev: TIC6X Syntax, Up: TIC6X-Dependent 22877 228789.46.3 TIC6X Directives 22879----------------------- 22880 22881Directives controlling the set of instructions accepted by the 22882assembler have effect for instructions between the directive and any 22883subsequent directive overriding it. 22884 22885`.arch ARCH' 22886 This has the same effect as `-march=ARCH'. 22887 22888`.cantunwind' 22889 Prevents unwinding through the current function. No personality 22890 routine or exception table data is required or permitted. 22891 22892 If this is not specified then frame unwinding information will be 22893 constructed from CFI directives. *note CFI directives::. 22894 22895`.c6xabi_attribute TAG, VALUE' 22896 Set the C6000 EABI build attribute TAG to VALUE. 22897 22898 The TAG is either an attribute number or one of `Tag_ISA', 22899 `Tag_ABI_wchar_t', `Tag_ABI_stack_align_needed', 22900 `Tag_ABI_stack_align_preserved', `Tag_ABI_DSBT', `Tag_ABI_PID', 22901 `Tag_ABI_PIC', `TAG_ABI_array_object_alignment', 22902 `TAG_ABI_array_object_align_expected', `Tag_ABI_compatibility' and 22903 `Tag_ABI_conformance'. The VALUE is either a `number', 22904 `"string"', or `number, "string"' depending on the tag. 22905 22906`.ehtype SYMBOL' 22907 Output an exception type table reference to SYMBOL. 22908 22909`.endp' 22910 Marks the end of and exception table or function. If preceded by a 22911 `.handlerdata' directive then this also switched back to the 22912 previous text section. 22913 22914`.handlerdata' 22915 Marks the end of the current function, and the start of the 22916 exception table entry for that function. Anything between this 22917 directive and the `.endp' directive will be added to the exception 22918 table entry. 22919 22920 Must be preceded by a CFI block containing a `.cfi_lsda' directive. 22921 22922`.nocmp' 22923 Disallow use of C64x+ compact instructions in the current text 22924 section. 22925 22926`.personalityindex INDEX' 22927 Sets the personality routine for the current function to the ABI 22928 specified compact routine number INDEX 22929 22930`.personality NAME' 22931 Sets the personality routine for the current function to NAME. 22932 22933`.scomm SYMBOL, SIZE, ALIGN' 22934 Like `.comm', creating a common symbol SYMBOL with size SIZE and 22935 alignment ALIGN, but unlike when using `.comm', this symbol will 22936 be placed into the small BSS section by the linker. 22937 22938 22939 22940File: as.info, Node: TILE-Gx-Dependent, Next: TILEPro-Dependent, Prev: TIC6X-Dependent, Up: Machine Dependencies 22941 229429.47 TILE-Gx Dependent Features 22943=============================== 22944 22945* Menu: 22946 22947* TILE-Gx Options:: TILE-Gx Options 22948* TILE-Gx Syntax:: TILE-Gx Syntax 22949* TILE-Gx Directives:: TILE-Gx Directives 22950 22951 22952File: as.info, Node: TILE-Gx Options, Next: TILE-Gx Syntax, Up: TILE-Gx-Dependent 22953 229549.47.1 Options 22955-------------- 22956 22957The following table lists all available TILE-Gx specific options: 22958 22959`-m32 | -m64' 22960 Select the word size, either 32 bits or 64 bits. 22961 22962`-EB | -EL' 22963 Select the endianness, either big-endian (-EB) or little-endian 22964 (-EL). 22965 22966 22967 22968File: as.info, Node: TILE-Gx Syntax, Next: TILE-Gx Directives, Prev: TILE-Gx Options, Up: TILE-Gx-Dependent 22969 229709.47.2 Syntax 22971------------- 22972 22973Block comments are delimited by `/*' and `*/'. End of line comments 22974may be introduced by `#'. 22975 22976 Instructions consist of a leading opcode or macro name followed by 22977whitespace and an optional comma-separated list of operands: 22978 22979 OPCODE [OPERAND, ...] 22980 22981 Instructions must be separated by a newline or semicolon. 22982 22983 There are two ways to write code: either write naked instructions, 22984which the assembler is free to combine into VLIW bundles, or specify 22985the VLIW bundles explicitly. 22986 22987 Bundles are specified using curly braces: 22988 22989 { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 } 22990 22991 A bundle can span multiple lines. If you want to put multiple 22992instructions on a line, whether in a bundle or not, you need to 22993separate them with semicolons as in this example. 22994 22995 A bundle may contain one or more instructions, up to the limit 22996specified by the ISA (currently three). If fewer instructions are 22997specified than the hardware supports in a bundle, the assembler inserts 22998`fnop' instructions automatically. 22999 23000 The assembler will prefer to preserve the ordering of instructions 23001within the bundle, putting the first instruction in a lower-numbered 23002pipeline than the next one, etc. This fact, combined with the optional 23003use of explicit `fnop' or `nop' instructions, allows precise control 23004over which pipeline executes each instruction. 23005 23006 If the instructions cannot be bundled in the listed order, the 23007assembler will automatically try to find a valid pipeline assignment. 23008If there is no way to bundle the instructions together, the assembler 23009reports an error. 23010 23011 The assembler does not yet auto-bundle (automatically combine 23012multiple instructions into one bundle), but it reserves the right to do 23013so in the future. If you want to force an instruction to run by 23014itself, put it in a bundle explicitly with curly braces and use `nop' 23015instructions (not `fnop') to fill the remaining pipeline slots in that 23016bundle. 23017 23018* Menu: 23019 23020* TILE-Gx Opcodes:: Opcode Naming Conventions. 23021* TILE-Gx Registers:: Register Naming. 23022* TILE-Gx Modifiers:: Symbolic Operand Modifiers. 23023 23024 23025File: as.info, Node: TILE-Gx Opcodes, Next: TILE-Gx Registers, Up: TILE-Gx Syntax 23026 230279.47.2.1 Opcode Names 23028..................... 23029 23030For a complete list of opcodes and descriptions of their semantics, see 23031`TILE-Gx Instruction Set Architecture', available upon request at 23032www.tilera.com. 23033 23034 23035File: as.info, Node: TILE-Gx Registers, Next: TILE-Gx Modifiers, Prev: TILE-Gx Opcodes, Up: TILE-Gx Syntax 23036 230379.47.2.2 Register Names 23038....................... 23039 23040General-purpose registers are represented by predefined symbols of the 23041form `rN', where N represents a number between `0' and `63'. However, 23042the following registers have canonical names that must be used instead: 23043 23044`r54' 23045 sp 23046 23047`r55' 23048 lr 23049 23050`r56' 23051 sn 23052 23053`r57' 23054 idn0 23055 23056`r58' 23057 idn1 23058 23059`r59' 23060 udn0 23061 23062`r60' 23063 udn1 23064 23065`r61' 23066 udn2 23067 23068`r62' 23069 udn3 23070 23071`r63' 23072 zero 23073 23074 23075 The assembler will emit a warning if a numeric name is used instead 23076of the non-numeric name. The `.no_require_canonical_reg_names' 23077assembler pseudo-op turns off this warning. 23078`.require_canonical_reg_names' turns it back on. 23079 23080 23081File: as.info, Node: TILE-Gx Modifiers, Prev: TILE-Gx Registers, Up: TILE-Gx Syntax 23082 230839.47.2.3 Symbolic Operand Modifiers 23084................................... 23085 23086The assembler supports several modifiers when using symbol addresses in 23087TILE-Gx instruction operands. The general syntax is the following: 23088 23089 modifier(symbol) 23090 23091 The following modifiers are supported: 23092 23093`hw0' 23094 This modifier is used to load bits 0-15 of the symbol's address. 23095 23096`hw1' 23097 This modifier is used to load bits 16-31 of the symbol's address. 23098 23099`hw2' 23100 This modifier is used to load bits 32-47 of the symbol's address. 23101 23102`hw3' 23103 This modifier is used to load bits 48-63 of the symbol's address. 23104 23105`hw0_last' 23106 This modifier yields the same value as `hw0', but it also checks 23107 that the value does not overflow. 23108 23109`hw1_last' 23110 This modifier yields the same value as `hw1', but it also checks 23111 that the value does not overflow. 23112 23113`hw2_last' 23114 This modifier yields the same value as `hw2', but it also checks 23115 that the value does not overflow. 23116 23117 A 48-bit symbolic value is constructed by using the following 23118 idiom: 23119 23120 moveli r0, hw2_last(sym) 23121 shl16insli r0, r0, hw1(sym) 23122 shl16insli r0, r0, hw0(sym) 23123 23124`hw0_got' 23125 This modifier is used to load bits 0-15 of the symbol's offset in 23126 the GOT entry corresponding to the symbol. 23127 23128`hw0_last_got' 23129 This modifier yields the same value as `hw0_got', but it also 23130 checks that the value does not overflow. 23131 23132`hw1_last_got' 23133 This modifier is used to load bits 16-31 of the symbol's offset in 23134 the GOT entry corresponding to the symbol, and it also checks that 23135 the value does not overflow. 23136 23137`plt' 23138 This modifier is used for function symbols. It causes a 23139 _procedure linkage table_, an array of code stubs, to be created 23140 at the time the shared object is created or linked against, 23141 together with a global offset table entry. The value is a 23142 pc-relative offset to the corresponding stub code in the procedure 23143 linkage table. This arrangement causes the run-time symbol 23144 resolver to be called to look up and set the value of the symbol 23145 the first time the function is called (at latest; depending 23146 environment variables). It is only safe to leave the symbol 23147 unresolved this way if all references are function calls. 23148 23149`hw0_plt' 23150 This modifier is used to load bits 0-15 of the pc-relative address 23151 of a plt entry. 23152 23153`hw1_plt' 23154 This modifier is used to load bits 16-31 of the pc-relative 23155 address of a plt entry. 23156 23157`hw1_last_plt' 23158 This modifier yields the same value as `hw1_plt', but it also 23159 checks that the value does not overflow. 23160 23161`hw2_last_plt' 23162 This modifier is used to load bits 32-47 of the pc-relative 23163 address of a plt entry, and it also checks that the value does not 23164 overflow. 23165 23166`hw0_tls_gd' 23167 This modifier is used to load bits 0-15 of the offset of the GOT 23168 entry of the symbol's TLS descriptor, to be used for 23169 general-dynamic TLS accesses. 23170 23171`hw0_last_tls_gd' 23172 This modifier yields the same value as `hw0_tls_gd', but it also 23173 checks that the value does not overflow. 23174 23175`hw1_last_tls_gd' 23176 This modifier is used to load bits 16-31 of the offset of the GOT 23177 entry of the symbol's TLS descriptor, to be used for 23178 general-dynamic TLS accesses. It also checks that the value does 23179 not overflow. 23180 23181`hw0_tls_ie' 23182 This modifier is used to load bits 0-15 of the offset of the GOT 23183 entry containing the offset of the symbol's address from the TCB, 23184 to be used for initial-exec TLS accesses. 23185 23186`hw0_last_tls_ie' 23187 This modifier yields the same value as `hw0_tls_ie', but it also 23188 checks that the value does not overflow. 23189 23190`hw1_last_tls_ie' 23191 This modifier is used to load bits 16-31 of the offset of the GOT 23192 entry containing the offset of the symbol's address from the TCB, 23193 to be used for initial-exec TLS accesses. It also checks that the 23194 value does not overflow. 23195 23196`hw0_tls_le' 23197 This modifier is used to load bits 0-15 of the offset of the 23198 symbol's address from the TCB, to be used for local-exec TLS 23199 accesses. 23200 23201`hw0_last_tls_le' 23202 This modifier yields the same value as `hw0_tls_le', but it also 23203 checks that the value does not overflow. 23204 23205`hw1_last_tls_le' 23206 This modifier is used to load bits 16-31 of the offset of the 23207 symbol's address from the TCB, to be used for local-exec TLS 23208 accesses. It also checks that the value does not overflow. 23209 23210`tls_gd_call' 23211 This modifier is used to tag an instruction as the "call" part of a 23212 calling sequence for a TLS GD reference of its operand. 23213 23214`tls_gd_add' 23215 This modifier is used to tag an instruction as the "add" part of a 23216 calling sequence for a TLS GD reference of its operand. 23217 23218`tls_ie_load' 23219 This modifier is used to tag an instruction as the "load" part of a 23220 calling sequence for a TLS IE reference of its operand. 23221 23222 23223 23224File: as.info, Node: TILE-Gx Directives, Prev: TILE-Gx Syntax, Up: TILE-Gx-Dependent 23225 232269.47.3 TILE-Gx Directives 23227------------------------- 23228 23229`.align EXPRESSION [, EXPRESSION]' 23230 This is the generic .ALIGN directive. The first argument is the 23231 requested alignment in bytes. 23232 23233`.allow_suspicious_bundles' 23234 Turns on error checking for combinations of instructions in a 23235 bundle that probably indicate a programming error. This is on by 23236 default. 23237 23238`.no_allow_suspicious_bundles' 23239 Turns off error checking for combinations of instructions in a 23240 bundle that probably indicate a programming error. 23241 23242`.require_canonical_reg_names' 23243 Require that canonical register names be used, and emit a warning 23244 if the numeric names are used. This is on by default. 23245 23246`.no_require_canonical_reg_names' 23247 Permit the use of numeric names for registers that have canonical 23248 names. 23249 23250 23251 23252File: as.info, Node: TILEPro-Dependent, Next: V850-Dependent, Prev: TILE-Gx-Dependent, Up: Machine Dependencies 23253 232549.48 TILEPro Dependent Features 23255=============================== 23256 23257* Menu: 23258 23259* TILEPro Options:: TILEPro Options 23260* TILEPro Syntax:: TILEPro Syntax 23261* TILEPro Directives:: TILEPro Directives 23262 23263 23264File: as.info, Node: TILEPro Options, Next: TILEPro Syntax, Up: TILEPro-Dependent 23265 232669.48.1 Options 23267-------------- 23268 23269`as' has no machine-dependent command-line options for TILEPro. 23270 23271 23272File: as.info, Node: TILEPro Syntax, Next: TILEPro Directives, Prev: TILEPro Options, Up: TILEPro-Dependent 23273 232749.48.2 Syntax 23275------------- 23276 23277Block comments are delimited by `/*' and `*/'. End of line comments 23278may be introduced by `#'. 23279 23280 Instructions consist of a leading opcode or macro name followed by 23281whitespace and an optional comma-separated list of operands: 23282 23283 OPCODE [OPERAND, ...] 23284 23285 Instructions must be separated by a newline or semicolon. 23286 23287 There are two ways to write code: either write naked instructions, 23288which the assembler is free to combine into VLIW bundles, or specify 23289the VLIW bundles explicitly. 23290 23291 Bundles are specified using curly braces: 23292 23293 { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 } 23294 23295 A bundle can span multiple lines. If you want to put multiple 23296instructions on a line, whether in a bundle or not, you need to 23297separate them with semicolons as in this example. 23298 23299 A bundle may contain one or more instructions, up to the limit 23300specified by the ISA (currently three). If fewer instructions are 23301specified than the hardware supports in a bundle, the assembler inserts 23302`fnop' instructions automatically. 23303 23304 The assembler will prefer to preserve the ordering of instructions 23305within the bundle, putting the first instruction in a lower-numbered 23306pipeline than the next one, etc. This fact, combined with the optional 23307use of explicit `fnop' or `nop' instructions, allows precise control 23308over which pipeline executes each instruction. 23309 23310 If the instructions cannot be bundled in the listed order, the 23311assembler will automatically try to find a valid pipeline assignment. 23312If there is no way to bundle the instructions together, the assembler 23313reports an error. 23314 23315 The assembler does not yet auto-bundle (automatically combine 23316multiple instructions into one bundle), but it reserves the right to do 23317so in the future. If you want to force an instruction to run by 23318itself, put it in a bundle explicitly with curly braces and use `nop' 23319instructions (not `fnop') to fill the remaining pipeline slots in that 23320bundle. 23321 23322* Menu: 23323 23324* TILEPro Opcodes:: Opcode Naming Conventions. 23325* TILEPro Registers:: Register Naming. 23326* TILEPro Modifiers:: Symbolic Operand Modifiers. 23327 23328 23329File: as.info, Node: TILEPro Opcodes, Next: TILEPro Registers, Up: TILEPro Syntax 23330 233319.48.2.1 Opcode Names 23332..................... 23333 23334For a complete list of opcodes and descriptions of their semantics, see 23335`TILE Processor User Architecture Manual', available upon request at 23336www.tilera.com. 23337 23338 23339File: as.info, Node: TILEPro Registers, Next: TILEPro Modifiers, Prev: TILEPro Opcodes, Up: TILEPro Syntax 23340 233419.48.2.2 Register Names 23342....................... 23343 23344General-purpose registers are represented by predefined symbols of the 23345form `rN', where N represents a number between `0' and `63'. However, 23346the following registers have canonical names that must be used instead: 23347 23348`r54' 23349 sp 23350 23351`r55' 23352 lr 23353 23354`r56' 23355 sn 23356 23357`r57' 23358 idn0 23359 23360`r58' 23361 idn1 23362 23363`r59' 23364 udn0 23365 23366`r60' 23367 udn1 23368 23369`r61' 23370 udn2 23371 23372`r62' 23373 udn3 23374 23375`r63' 23376 zero 23377 23378 23379 The assembler will emit a warning if a numeric name is used instead 23380of the canonical name. The `.no_require_canonical_reg_names' assembler 23381pseudo-op turns off this warning. `.require_canonical_reg_names' turns 23382it back on. 23383 23384 23385File: as.info, Node: TILEPro Modifiers, Prev: TILEPro Registers, Up: TILEPro Syntax 23386 233879.48.2.3 Symbolic Operand Modifiers 23388................................... 23389 23390The assembler supports several modifiers when using symbol addresses in 23391TILEPro instruction operands. The general syntax is the following: 23392 23393 modifier(symbol) 23394 23395 The following modifiers are supported: 23396 23397`lo16' 23398 This modifier is used to load the low 16 bits of the symbol's 23399 address, sign-extended to a 32-bit value (sign-extension allows it 23400 to be range-checked against signed 16 bit immediate operands 23401 without complaint). 23402 23403`hi16' 23404 This modifier is used to load the high 16 bits of the symbol's 23405 address, also sign-extended to a 32-bit value. 23406 23407`ha16' 23408 `ha16(N)' is identical to `hi16(N)', except if `lo16(N)' is 23409 negative it adds one to the `hi16(N)' value. This way `lo16' and 23410 `ha16' can be added to create any 32-bit value using `auli'. For 23411 example, here is how you move an arbitrary 32-bit address into r3: 23412 23413 moveli r3, lo16(sym) 23414 auli r3, r3, ha16(sym) 23415 23416`got' 23417 This modifier is used to load the offset of the GOT entry 23418 corresponding to the symbol. 23419 23420`got_lo16' 23421 This modifier is used to load the sign-extended low 16 bits of the 23422 offset of the GOT entry corresponding to the symbol. 23423 23424`got_hi16' 23425 This modifier is used to load the sign-extended high 16 bits of the 23426 offset of the GOT entry corresponding to the symbol. 23427 23428`got_ha16' 23429 This modifier is like `got_hi16', but it adds one if `got_lo16' of 23430 the input value is negative. 23431 23432`plt' 23433 This modifier is used for function symbols. It causes a 23434 _procedure linkage table_, an array of code stubs, to be created 23435 at the time the shared object is created or linked against, 23436 together with a global offset table entry. The value is a 23437 pc-relative offset to the corresponding stub code in the procedure 23438 linkage table. This arrangement causes the run-time symbol 23439 resolver to be called to look up and set the value of the symbol 23440 the first time the function is called (at latest; depending 23441 environment variables). It is only safe to leave the symbol 23442 unresolved this way if all references are function calls. 23443 23444`tls_gd' 23445 This modifier is used to load the offset of the GOT entry of the 23446 symbol's TLS descriptor, to be used for general-dynamic TLS 23447 accesses. 23448 23449`tls_gd_lo16' 23450 This modifier is used to load the sign-extended low 16 bits of the 23451 offset of the GOT entry of the symbol's TLS descriptor, to be used 23452 for general dynamic TLS accesses. 23453 23454`tls_gd_hi16' 23455 This modifier is used to load the sign-extended high 16 bits of the 23456 offset of the GOT entry of the symbol's TLS descriptor, to be used 23457 for general dynamic TLS accesses. 23458 23459`tls_gd_ha16' 23460 This modifier is like `tls_gd_hi16', but it adds one to the value 23461 if `tls_gd_lo16' of the input value is negative. 23462 23463`tls_ie' 23464 This modifier is used to load the offset of the GOT entry 23465 containing the offset of the symbol's address from the TCB, to be 23466 used for initial-exec TLS accesses. 23467 23468`tls_ie_lo16' 23469 This modifier is used to load the low 16 bits of the offset of the 23470 GOT entry containing the offset of the symbol's address from the 23471 TCB, to be used for initial-exec TLS accesses. 23472 23473`tls_ie_hi16' 23474 This modifier is used to load the high 16 bits of the offset of the 23475 GOT entry containing the offset of the symbol's address from the 23476 TCB, to be used for initial-exec TLS accesses. 23477 23478`tls_ie_ha16' 23479 This modifier is like `tls_ie_hi16', but it adds one to the value 23480 if `tls_ie_lo16' of the input value is negative. 23481 23482`tls_le' 23483 This modifier is used to load the offset of the symbol's address 23484 from the TCB, to be used for local-exec TLS accesses. 23485 23486`tls_le_lo16' 23487 This modifier is used to load the low 16 bits of the offset of the 23488 symbol's address from the TCB, to be used for local-exec TLS 23489 accesses. 23490 23491`tls_le_hi16' 23492 This modifier is used to load the high 16 bits of the offset of the 23493 symbol's address from the TCB, to be used for local-exec TLS 23494 accesses. 23495 23496`tls_le_ha16' 23497 This modifier is like `tls_le_hi16', but it adds one to the value 23498 if `tls_le_lo16' of the input value is negative. 23499 23500`tls_gd_call' 23501 This modifier is used to tag an instruction as the "call" part of a 23502 calling sequence for a TLS GD reference of its operand. 23503 23504`tls_gd_add' 23505 This modifier is used to tag an instruction as the "add" part of a 23506 calling sequence for a TLS GD reference of its operand. 23507 23508`tls_ie_load' 23509 This modifier is used to tag an instruction as the "load" part of a 23510 calling sequence for a TLS IE reference of its operand. 23511 23512 23513 23514File: as.info, Node: TILEPro Directives, Prev: TILEPro Syntax, Up: TILEPro-Dependent 23515 235169.48.3 TILEPro Directives 23517------------------------- 23518 23519`.align EXPRESSION [, EXPRESSION]' 23520 This is the generic .ALIGN directive. The first argument is the 23521 requested alignment in bytes. 23522 23523`.allow_suspicious_bundles' 23524 Turns on error checking for combinations of instructions in a 23525 bundle that probably indicate a programming error. This is on by 23526 default. 23527 23528`.no_allow_suspicious_bundles' 23529 Turns off error checking for combinations of instructions in a 23530 bundle that probably indicate a programming error. 23531 23532`.require_canonical_reg_names' 23533 Require that canonical register names be used, and emit a warning 23534 if the numeric names are used. This is on by default. 23535 23536`.no_require_canonical_reg_names' 23537 Permit the use of numeric names for registers that have canonical 23538 names. 23539 23540 23541 23542File: as.info, Node: V850-Dependent, Next: Vax-Dependent, Prev: TILEPro-Dependent, Up: Machine Dependencies 23543 235449.49 v850 Dependent Features 23545============================ 23546 23547* Menu: 23548 23549* V850 Options:: Options 23550* V850 Syntax:: Syntax 23551* V850 Floating Point:: Floating Point 23552* V850 Directives:: V850 Machine Directives 23553* V850 Opcodes:: Opcodes 23554 23555 23556File: as.info, Node: V850 Options, Next: V850 Syntax, Up: V850-Dependent 23557 235589.49.1 Options 23559-------------- 23560 23561`as' supports the following additional command-line options for the 23562V850 processor family: 23563 23564`-wsigned_overflow' 23565 Causes warnings to be produced when signed immediate values 23566 overflow the space available for then within their opcodes. By 23567 default this option is disabled as it is possible to receive 23568 spurious warnings due to using exact bit patterns as immediate 23569 constants. 23570 23571`-wunsigned_overflow' 23572 Causes warnings to be produced when unsigned immediate values 23573 overflow the space available for then within their opcodes. By 23574 default this option is disabled as it is possible to receive 23575 spurious warnings due to using exact bit patterns as immediate 23576 constants. 23577 23578`-mv850' 23579 Specifies that the assembled code should be marked as being 23580 targeted at the V850 processor. This allows the linker to detect 23581 attempts to link such code with code assembled for other 23582 processors. 23583 23584`-mv850e' 23585 Specifies that the assembled code should be marked as being 23586 targeted at the V850E processor. This allows the linker to detect 23587 attempts to link such code with code assembled for other 23588 processors. 23589 23590`-mv850e1' 23591 Specifies that the assembled code should be marked as being 23592 targeted at the V850E1 processor. This allows the linker to 23593 detect attempts to link such code with code assembled for other 23594 processors. 23595 23596`-mv850any' 23597 Specifies that the assembled code should be marked as being 23598 targeted at the V850 processor but support instructions that are 23599 specific to the extended variants of the process. This allows the 23600 production of binaries that contain target specific code, but 23601 which are also intended to be used in a generic fashion. For 23602 example libgcc.a contains generic routines used by the code 23603 produced by GCC for all versions of the v850 architecture, 23604 together with support routines only used by the V850E architecture. 23605 23606`-mv850e2' 23607 Specifies that the assembled code should be marked as being 23608 targeted at the V850E2 processor. This allows the linker to 23609 detect attempts to link such code with code assembled for other 23610 processors. 23611 23612`-mv850e2v3' 23613 Specifies that the assembled code should be marked as being 23614 targeted at the V850E2V3 processor. This allows the linker to 23615 detect attempts to link such code with code assembled for other 23616 processors. 23617 23618`-mv850e2v4' 23619 This is an alias for `-mv850e3v5'. 23620 23621`-mv850e3v5' 23622 Specifies that the assembled code should be marked as being 23623 targeted at the V850E3V5 processor. This allows the linker to 23624 detect attempts to link such code with code assembled for other 23625 processors. 23626 23627`-mrelax' 23628 Enables relaxation. This allows the .longcall and .longjump pseudo 23629 ops to be used in the assembler source code. These ops label 23630 sections of code which are either a long function call or a long 23631 branch. The assembler will then flag these sections of code and 23632 the linker will attempt to relax them. 23633 23634`-mgcc-abi' 23635 Marks the generated object file as supporting the old GCC ABI. 23636 23637`-mrh850-abi' 23638 Marks the generated object file as supporting the RH850 ABI. This 23639 is the default. 23640 23641`-m8byte-align' 23642 Marks the generated object file as supporting a maximum 64-bits of 23643 alignment for variables defined in the source code. 23644 23645`-m4byte-align' 23646 Marks the generated object file as supporting a maximum 32-bits of 23647 alignment for variables defined in the source code. This is the 23648 default. 23649 23650`-msoft-float' 23651 Marks the generated object file as not using any floating point 23652 instructions - and hence can be linked with other V850 binaries 23653 that do or do not use floating point. This is the default for 23654 binaries for architectures earlier than the `e2v3'. 23655 23656`-mhard-float' 23657 Marks the generated object file as one that uses floating point 23658 instructions - and hence can only be linked with other V850 23659 binaries that use the same kind of floating point instructions, or 23660 with binaries that do not use floating point at all. This is the 23661 default for binaries the `e2v3' and later architectures. 23662 23663 23664 23665File: as.info, Node: V850 Syntax, Next: V850 Floating Point, Prev: V850 Options, Up: V850-Dependent 23666 236679.49.2 Syntax 23668------------- 23669 23670* Menu: 23671 23672* V850-Chars:: Special Characters 23673* V850-Regs:: Register Names 23674 23675 23676File: as.info, Node: V850-Chars, Next: V850-Regs, Up: V850 Syntax 23677 236789.49.2.1 Special Characters 23679........................... 23680 23681`#' is the line comment character. If a `#' appears as the first 23682character of a line, the whole line is treated as a comment, but in 23683this case the line can also be a logical line number directive (*note 23684Comments::) or a preprocessor control command (*note Preprocessing::). 23685 23686 Two dashes (`--') can also be used to start a line comment. 23687 23688 The `;' character can be used to separate statements on the same 23689line. 23690 23691 23692File: as.info, Node: V850-Regs, Prev: V850-Chars, Up: V850 Syntax 23693 236949.49.2.2 Register Names 23695....................... 23696 23697`as' supports the following names for registers: 23698`general register 0' 23699 r0, zero 23700 23701`general register 1' 23702 r1 23703 23704`general register 2' 23705 r2, hp 23706 23707`general register 3' 23708 r3, sp 23709 23710`general register 4' 23711 r4, gp 23712 23713`general register 5' 23714 r5, tp 23715 23716`general register 6' 23717 r6 23718 23719`general register 7' 23720 r7 23721 23722`general register 8' 23723 r8 23724 23725`general register 9' 23726 r9 23727 23728`general register 10' 23729 r10 23730 23731`general register 11' 23732 r11 23733 23734`general register 12' 23735 r12 23736 23737`general register 13' 23738 r13 23739 23740`general register 14' 23741 r14 23742 23743`general register 15' 23744 r15 23745 23746`general register 16' 23747 r16 23748 23749`general register 17' 23750 r17 23751 23752`general register 18' 23753 r18 23754 23755`general register 19' 23756 r19 23757 23758`general register 20' 23759 r20 23760 23761`general register 21' 23762 r21 23763 23764`general register 22' 23765 r22 23766 23767`general register 23' 23768 r23 23769 23770`general register 24' 23771 r24 23772 23773`general register 25' 23774 r25 23775 23776`general register 26' 23777 r26 23778 23779`general register 27' 23780 r27 23781 23782`general register 28' 23783 r28 23784 23785`general register 29' 23786 r29 23787 23788`general register 30' 23789 r30, ep 23790 23791`general register 31' 23792 r31, lp 23793 23794`system register 0' 23795 eipc 23796 23797`system register 1' 23798 eipsw 23799 23800`system register 2' 23801 fepc 23802 23803`system register 3' 23804 fepsw 23805 23806`system register 4' 23807 ecr 23808 23809`system register 5' 23810 psw 23811 23812`system register 16' 23813 ctpc 23814 23815`system register 17' 23816 ctpsw 23817 23818`system register 18' 23819 dbpc 23820 23821`system register 19' 23822 dbpsw 23823 23824`system register 20' 23825 ctbp 23826 23827 23828File: as.info, Node: V850 Floating Point, Next: V850 Directives, Prev: V850 Syntax, Up: V850-Dependent 23829 238309.49.3 Floating Point 23831--------------------- 23832 23833The V850 family uses IEEE floating-point numbers. 23834 23835 23836File: as.info, Node: V850 Directives, Next: V850 Opcodes, Prev: V850 Floating Point, Up: V850-Dependent 23837 238389.49.4 V850 Machine Directives 23839------------------------------ 23840 23841`.offset <EXPRESSION>' 23842 Moves the offset into the current section to the specified amount. 23843 23844`.section "name", <type>' 23845 This is an extension to the standard .section directive. It sets 23846 the current section to be <type> and creates an alias for this 23847 section called "name". 23848 23849`.v850' 23850 Specifies that the assembled code should be marked as being 23851 targeted at the V850 processor. This allows the linker to detect 23852 attempts to link such code with code assembled for other 23853 processors. 23854 23855`.v850e' 23856 Specifies that the assembled code should be marked as being 23857 targeted at the V850E processor. This allows the linker to detect 23858 attempts to link such code with code assembled for other 23859 processors. 23860 23861`.v850e1' 23862 Specifies that the assembled code should be marked as being 23863 targeted at the V850E1 processor. This allows the linker to 23864 detect attempts to link such code with code assembled for other 23865 processors. 23866 23867`.v850e2' 23868 Specifies that the assembled code should be marked as being 23869 targeted at the V850E2 processor. This allows the linker to 23870 detect attempts to link such code with code assembled for other 23871 processors. 23872 23873`.v850e2v3' 23874 Specifies that the assembled code should be marked as being 23875 targeted at the V850E2V3 processor. This allows the linker to 23876 detect attempts to link such code with code assembled for other 23877 processors. 23878 23879`.v850e2v4' 23880 Specifies that the assembled code should be marked as being 23881 targeted at the V850E3V5 processor. This allows the linker to 23882 detect attempts to link such code with code assembled for other 23883 processors. 23884 23885`.v850e3v5' 23886 Specifies that the assembled code should be marked as being 23887 targeted at the V850E3V5 processor. This allows the linker to 23888 detect attempts to link such code with code assembled for other 23889 processors. 23890 23891 23892 23893File: as.info, Node: V850 Opcodes, Prev: V850 Directives, Up: V850-Dependent 23894 238959.49.5 Opcodes 23896-------------- 23897 23898`as' implements all the standard V850 opcodes. 23899 23900 `as' also implements the following pseudo ops: 23901 23902`hi0()' 23903 Computes the higher 16 bits of the given expression and stores it 23904 into the immediate operand field of the given instruction. For 23905 example: 23906 23907 `mulhi hi0(here - there), r5, r6' 23908 23909 computes the difference between the address of labels 'here' and 23910 'there', takes the upper 16 bits of this difference, shifts it 23911 down 16 bits and then multiplies it by the lower 16 bits in 23912 register 5, putting the result into register 6. 23913 23914`lo()' 23915 Computes the lower 16 bits of the given expression and stores it 23916 into the immediate operand field of the given instruction. For 23917 example: 23918 23919 `addi lo(here - there), r5, r6' 23920 23921 computes the difference between the address of labels 'here' and 23922 'there', takes the lower 16 bits of this difference and adds it to 23923 register 5, putting the result into register 6. 23924 23925`hi()' 23926 Computes the higher 16 bits of the given expression and then adds 23927 the value of the most significant bit of the lower 16 bits of the 23928 expression and stores the result into the immediate operand field 23929 of the given instruction. For example the following code can be 23930 used to compute the address of the label 'here' and store it into 23931 register 6: 23932 23933 `movhi hi(here), r0, r6' `movea lo(here), r6, r6' 23934 23935 The reason for this special behaviour is that movea performs a sign 23936 extension on its immediate operand. So for example if the address 23937 of 'here' was 0xFFFFFFFF then without the special behaviour of the 23938 hi() pseudo-op the movhi instruction would put 0xFFFF0000 into r6, 23939 then the movea instruction would takes its immediate operand, 23940 0xFFFF, sign extend it to 32 bits, 0xFFFFFFFF, and then add it 23941 into r6 giving 0xFFFEFFFF which is wrong (the fifth nibble is E). 23942 With the hi() pseudo op adding in the top bit of the lo() pseudo 23943 op, the movhi instruction actually stores 0 into r6 (0xFFFF + 1 = 23944 0x0000), so that the movea instruction stores 0xFFFFFFFF into r6 - 23945 the right value. 23946 23947`hilo()' 23948 Computes the 32 bit value of the given expression and stores it 23949 into the immediate operand field of the given instruction (which 23950 must be a mov instruction). For example: 23951 23952 `mov hilo(here), r6' 23953 23954 computes the absolute address of label 'here' and puts the result 23955 into register 6. 23956 23957`sdaoff()' 23958 Computes the offset of the named variable from the start of the 23959 Small Data Area (whose address is held in register 4, the GP 23960 register) and stores the result as a 16 bit signed value in the 23961 immediate operand field of the given instruction. For example: 23962 23963 `ld.w sdaoff(_a_variable)[gp],r6' 23964 23965 loads the contents of the location pointed to by the label 23966 '_a_variable' into register 6, provided that the label is located 23967 somewhere within +/- 32K of the address held in the GP register. 23968 [Note the linker assumes that the GP register contains a fixed 23969 address set to the address of the label called '__gp'. This can 23970 either be set up automatically by the linker, or specifically set 23971 by using the `--defsym __gp=<value>' command-line option]. 23972 23973`tdaoff()' 23974 Computes the offset of the named variable from the start of the 23975 Tiny Data Area (whose address is held in register 30, the EP 23976 register) and stores the result as a 4,5, 7 or 8 bit unsigned 23977 value in the immediate operand field of the given instruction. 23978 For example: 23979 23980 `sld.w tdaoff(_a_variable)[ep],r6' 23981 23982 loads the contents of the location pointed to by the label 23983 '_a_variable' into register 6, provided that the label is located 23984 somewhere within +256 bytes of the address held in the EP 23985 register. [Note the linker assumes that the EP register contains 23986 a fixed address set to the address of the label called '__ep'. 23987 This can either be set up automatically by the linker, or 23988 specifically set by using the `--defsym __ep=<value>' command-line 23989 option]. 23990 23991`zdaoff()' 23992 Computes the offset of the named variable from address 0 and 23993 stores the result as a 16 bit signed value in the immediate 23994 operand field of the given instruction. For example: 23995 23996 `movea zdaoff(_a_variable),zero,r6' 23997 23998 puts the address of the label '_a_variable' into register 6, 23999 assuming that the label is somewhere within the first 32K of 24000 memory. (Strictly speaking it also possible to access the last 24001 32K of memory as well, as the offsets are signed). 24002 24003`ctoff()' 24004 Computes the offset of the named variable from the start of the 24005 Call Table Area (whose address is held in system register 20, the 24006 CTBP register) and stores the result a 6 or 16 bit unsigned value 24007 in the immediate field of then given instruction or piece of data. 24008 For example: 24009 24010 `callt ctoff(table_func1)' 24011 24012 will put the call the function whose address is held in the call 24013 table at the location labeled 'table_func1'. 24014 24015`.longcall `name'' 24016 Indicates that the following sequence of instructions is a long 24017 call to function `name'. The linker will attempt to shorten this 24018 call sequence if `name' is within a 22bit offset of the call. Only 24019 valid if the `-mrelax' command-line switch has been enabled. 24020 24021`.longjump `name'' 24022 Indicates that the following sequence of instructions is a long 24023 jump to label `name'. The linker will attempt to shorten this code 24024 sequence if `name' is within a 22bit offset of the jump. Only 24025 valid if the `-mrelax' command-line switch has been enabled. 24026 24027 24028 For information on the V850 instruction set, see `V850 Family 2402932-/16-Bit single-Chip Microcontroller Architecture Manual' from NEC. 24030Ltd. 24031 24032 24033File: as.info, Node: Vax-Dependent, Next: Visium-Dependent, Prev: V850-Dependent, Up: Machine Dependencies 24034 240359.50 VAX Dependent Features 24036=========================== 24037 24038* Menu: 24039 24040* VAX-Opts:: VAX Command-Line Options 24041* VAX-float:: VAX Floating Point 24042* VAX-directives:: Vax Machine Directives 24043* VAX-opcodes:: VAX Opcodes 24044* VAX-branch:: VAX Branch Improvement 24045* VAX-operands:: VAX Operands 24046* VAX-no:: Not Supported on VAX 24047* VAX-Syntax:: VAX Syntax 24048 24049 24050File: as.info, Node: VAX-Opts, Next: VAX-float, Up: Vax-Dependent 24051 240529.50.1 VAX Command-Line Options 24053------------------------------- 24054 24055The Vax version of `as' accepts any of the following options, gives a 24056warning message that the option was ignored and proceeds. These 24057options are for compatibility with scripts designed for other people's 24058assemblers. 24059 24060``-D' (Debug)' 24061``-S' (Symbol Table)' 24062``-T' (Token Trace)' 24063 These are obsolete options used to debug old assemblers. 24064 24065``-d' (Displacement size for JUMPs)' 24066 This option expects a number following the `-d'. Like options 24067 that expect filenames, the number may immediately follow the `-d' 24068 (old standard) or constitute the whole of the command-line 24069 argument that follows `-d' (GNU standard). 24070 24071``-V' (Virtualize Interpass Temporary File)' 24072 Some other assemblers use a temporary file. This option commanded 24073 them to keep the information in active memory rather than in a 24074 disk file. `as' always does this, so this option is redundant. 24075 24076``-J' (JUMPify Longer Branches)' 24077 Many 32-bit computers permit a variety of branch instructions to 24078 do the same job. Some of these instructions are short (and fast) 24079 but have a limited range; others are long (and slow) but can 24080 branch anywhere in virtual memory. Often there are 3 flavors of 24081 branch: short, medium and long. Some other assemblers would emit 24082 short and medium branches, unless told by this option to emit 24083 short and long branches. 24084 24085``-t' (Temporary File Directory)' 24086 Some other assemblers may use a temporary file, and this option 24087 takes a filename being the directory to site the temporary file. 24088 Since `as' does not use a temporary disk file, this option makes 24089 no difference. `-t' needs exactly one filename. 24090 24091 The Vax version of the assembler accepts additional options when 24092compiled for VMS: 24093 24094`-h N' 24095 External symbol or section (used for global variables) names are 24096 not case sensitive on VAX/VMS and always mapped to upper case. 24097 This is contrary to the C language definition which explicitly 24098 distinguishes upper and lower case. To implement a standard 24099 conforming C compiler, names must be changed (mapped) to preserve 24100 the case information. The default mapping is to convert all lower 24101 case characters to uppercase and adding an underscore followed by 24102 a 6 digit hex value, representing a 24 digit binary value. The 24103 one digits in the binary value represent which characters are 24104 uppercase in the original symbol name. 24105 24106 The `-h N' option determines how we map names. This takes several 24107 values. No `-h' switch at all allows case hacking as described 24108 above. A value of zero (`-h0') implies names should be upper 24109 case, and inhibits the case hack. A value of 2 (`-h2') implies 24110 names should be all lower case, with no case hack. A value of 3 24111 (`-h3') implies that case should be preserved. The value 1 is 24112 unused. The `-H' option directs `as' to display every mapped 24113 symbol during assembly. 24114 24115 Symbols whose names include a dollar sign `$' are exceptions to the 24116 general name mapping. These symbols are normally only used to 24117 reference VMS library names. Such symbols are always mapped to 24118 upper case. 24119 24120`-+' 24121 The `-+' option causes `as' to truncate any symbol name larger 24122 than 31 characters. The `-+' option also prevents some code 24123 following the `_main' symbol normally added to make the object 24124 file compatible with Vax-11 "C". 24125 24126`-1' 24127 This option is ignored for backward compatibility with `as' 24128 version 1.x. 24129 24130`-H' 24131 The `-H' option causes `as' to print every symbol which was 24132 changed by case mapping. 24133 24134 24135File: as.info, Node: VAX-float, Next: VAX-directives, Prev: VAX-Opts, Up: Vax-Dependent 24136 241379.50.2 VAX Floating Point 24138------------------------- 24139 24140Conversion of flonums to floating point is correct, and compatible with 24141previous assemblers. Rounding is towards zero if the remainder is 24142exactly half the least significant bit. 24143 24144 `D', `F', `G' and `H' floating point formats are understood. 24145 24146 Immediate floating literals (_e.g._ `S`$6.9') are rendered 24147correctly. Again, rounding is towards zero in the boundary case. 24148 24149 The `.float' directive produces `f' format numbers. The `.double' 24150directive produces `d' format numbers. 24151 24152 24153File: as.info, Node: VAX-directives, Next: VAX-opcodes, Prev: VAX-float, Up: Vax-Dependent 24154 241559.50.3 Vax Machine Directives 24156----------------------------- 24157 24158The Vax version of the assembler supports four directives for 24159generating Vax floating point constants. They are described in the 24160table below. 24161 24162`.dfloat' 24163 This expects zero or more flonums, separated by commas, and 24164 assembles Vax `d' format 64-bit floating point constants. 24165 24166`.ffloat' 24167 This expects zero or more flonums, separated by commas, and 24168 assembles Vax `f' format 32-bit floating point constants. 24169 24170`.gfloat' 24171 This expects zero or more flonums, separated by commas, and 24172 assembles Vax `g' format 64-bit floating point constants. 24173 24174`.hfloat' 24175 This expects zero or more flonums, separated by commas, and 24176 assembles Vax `h' format 128-bit floating point constants. 24177 24178 24179 24180File: as.info, Node: VAX-opcodes, Next: VAX-branch, Prev: VAX-directives, Up: Vax-Dependent 24181 241829.50.4 VAX Opcodes 24183------------------ 24184 24185All DEC mnemonics are supported. Beware that `case...' instructions 24186have exactly 3 operands. The dispatch table that follows the `case...' 24187instruction should be made with `.word' statements. This is compatible 24188with all unix assemblers we know of. 24189 24190 24191File: as.info, Node: VAX-branch, Next: VAX-operands, Prev: VAX-opcodes, Up: Vax-Dependent 24192 241939.50.5 VAX Branch Improvement 24194----------------------------- 24195 24196Certain pseudo opcodes are permitted. They are for branch 24197instructions. They expand to the shortest branch instruction that 24198reaches the target. Generally these mnemonics are made by substituting 24199`j' for `b' at the start of a DEC mnemonic. This feature is included 24200both for compatibility and to help compilers. If you do not need this 24201feature, avoid these opcodes. Here are the mnemonics, and the code 24202they can expand into. 24203 24204`jbsb' 24205 `Jsb' is already an instruction mnemonic, so we chose `jbsb'. 24206 (byte displacement) 24207 `bsbb ...' 24208 24209 (word displacement) 24210 `bsbw ...' 24211 24212 (long displacement) 24213 `jsb ...' 24214 24215`jbr' 24216`jr' 24217 Unconditional branch. 24218 (byte displacement) 24219 `brb ...' 24220 24221 (word displacement) 24222 `brw ...' 24223 24224 (long displacement) 24225 `jmp ...' 24226 24227`jCOND' 24228 COND may be any one of the conditional branches `neq', `nequ', 24229 `eql', `eqlu', `gtr', `geq', `lss', `gtru', `lequ', `vc', `vs', 24230 `gequ', `cc', `lssu', `cs'. COND may also be one of the bit tests 24231 `bs', `bc', `bss', `bcs', `bsc', `bcc', `bssi', `bcci', `lbs', 24232 `lbc'. NOTCOND is the opposite condition to COND. 24233 (byte displacement) 24234 `bCOND ...' 24235 24236 (word displacement) 24237 `bNOTCOND foo ; brw ... ; foo:' 24238 24239 (long displacement) 24240 `bNOTCOND foo ; jmp ... ; foo:' 24241 24242`jacbX' 24243 X may be one of `b d f g h l w'. 24244 (word displacement) 24245 `OPCODE ...' 24246 24247 (long displacement) 24248 OPCODE ..., foo ; 24249 brb bar ; 24250 foo: jmp ... ; 24251 bar: 24252 24253`jaobYYY' 24254 YYY may be one of `lss leq'. 24255 24256`jsobZZZ' 24257 ZZZ may be one of `geq gtr'. 24258 (byte displacement) 24259 `OPCODE ...' 24260 24261 (word displacement) 24262 OPCODE ..., foo ; 24263 brb bar ; 24264 foo: brw DESTINATION ; 24265 bar: 24266 24267 (long displacement) 24268 OPCODE ..., foo ; 24269 brb bar ; 24270 foo: jmp DESTINATION ; 24271 bar: 24272 24273`aobleq' 24274`aoblss' 24275`sobgeq' 24276`sobgtr' 24277 24278 (byte displacement) 24279 `OPCODE ...' 24280 24281 (word displacement) 24282 OPCODE ..., foo ; 24283 brb bar ; 24284 foo: brw DESTINATION ; 24285 bar: 24286 24287 (long displacement) 24288 OPCODE ..., foo ; 24289 brb bar ; 24290 foo: jmp DESTINATION ; 24291 bar: 24292 24293 24294File: as.info, Node: VAX-operands, Next: VAX-no, Prev: VAX-branch, Up: Vax-Dependent 24295 242969.50.6 VAX Operands 24297------------------- 24298 24299The immediate character is `$' for Unix compatibility, not `#' as DEC 24300writes it. 24301 24302 The indirect character is `*' for Unix compatibility, not `@' as DEC 24303writes it. 24304 24305 The displacement sizing character is ``' (an accent grave) for Unix 24306compatibility, not `^' as DEC writes it. The letter preceding ``' may 24307have either case. `G' is not understood, but all other letters (`b i l 24308s w') are understood. 24309 24310 Register names understood are `r0 r1 r2 ... r15 ap fp sp pc'. Upper 24311and lower case letters are equivalent. 24312 24313 For instance 24314 tstb *w`$4(r5) 24315 24316 Any expression is permitted in an operand. Operands are comma 24317separated. 24318 24319 24320File: as.info, Node: VAX-no, Next: VAX-Syntax, Prev: VAX-operands, Up: Vax-Dependent 24321 243229.50.7 Not Supported on VAX 24323--------------------------- 24324 24325Vax bit fields can not be assembled with `as'. Someone can add the 24326required code if they really need it. 24327 24328 24329File: as.info, Node: VAX-Syntax, Prev: VAX-no, Up: Vax-Dependent 24330 243319.50.8 VAX Syntax 24332----------------- 24333 24334* Menu: 24335 24336* VAX-Chars:: Special Characters 24337 24338 24339File: as.info, Node: VAX-Chars, Up: VAX-Syntax 24340 243419.50.8.1 Special Characters 24342........................... 24343 24344The presence of a `#' appearing anywhere on a line indicates the start 24345of a comment that extends to the end of that line. 24346 24347 If a `#' appears as the first character of a line then the whole 24348line is treated as a comment, but in this case the line can also be a 24349logical line number directive (*note Comments::) or a preprocessor 24350control command (*note Preprocessing::). 24351 24352 The `;' character can be used to separate statements on the same 24353line. 24354 24355 24356File: as.info, Node: Visium-Dependent, Next: WebAssembly-Dependent, Prev: Vax-Dependent, Up: Machine Dependencies 24357 243589.51 Visium Dependent Features 24359============================== 24360 24361* Menu: 24362 24363* Visium Options:: Options 24364* Visium Syntax:: Syntax 24365* Visium Opcodes:: Opcodes 24366 24367 24368File: as.info, Node: Visium Options, Next: Visium Syntax, Up: Visium-Dependent 24369 243709.51.1 Options 24371-------------- 24372 24373The Visium assembler implements one machine-specific option: 24374 24375`-mtune=ARCH' 24376 This option specifies the target architecture. If an attempt is 24377 made to assemble an instruction that will not execute on the 24378 target architecture, the assembler will issue an error message. 24379 24380 The following names are recognized: `mcm24' `mcm' `gr5' `gr6' 24381 24382 24383File: as.info, Node: Visium Syntax, Next: Visium Opcodes, Prev: Visium Options, Up: Visium-Dependent 24384 243859.51.2 Syntax 24386------------- 24387 24388* Menu: 24389 24390* Visium Characters:: Special Characters 24391* Visium Registers:: Register Names 24392 24393 24394File: as.info, Node: Visium Characters, Next: Visium Registers, Up: Visium Syntax 24395 243969.51.2.1 Special Characters 24397........................... 24398 24399Line comments are introduced either by the `!' character or by the `;' 24400character appearing anywhere on a line. 24401 24402 A hash character (`#') as the first character on a line also marks 24403the start of a line comment, but in this case it could also be a 24404logical line number directive (*note Comments::) or a preprocessor 24405control command (*note Preprocessing::). 24406 24407 The Visium assembler does not currently support a line separator 24408character. 24409 24410 24411File: as.info, Node: Visium Registers, Prev: Visium Characters, Up: Visium Syntax 24412 244139.51.2.2 Register Names 24414....................... 24415 24416Registers can be specified either by using their canonical mnemonic 24417names or by using their alias if they have one, for example `sp'. 24418 24419 24420File: as.info, Node: Visium Opcodes, Prev: Visium Syntax, Up: Visium-Dependent 24421 244229.51.3 Opcodes 24423-------------- 24424 24425All the standard opcodes of the architecture are implemented, along 24426with the following three pseudo-instructions: `cmp', `cmpc', `move'. 24427 24428 In addition, the following two illegal opcodes are implemented and 24429used by the simulation: 24430 24431 stop 5-bit immediate, SourceA 24432 trace 5-bit immediate, SourceA 24433 24434 24435File: as.info, Node: WebAssembly-Dependent, Next: XGATE-Dependent, Prev: Visium-Dependent, Up: Machine Dependencies 24436 244379.52 WebAssembly Dependent Features 24438=================================== 24439 24440* Menu: 24441 24442* WebAssembly-Notes:: Notes 24443* WebAssembly-Syntax:: Syntax 24444* WebAssembly-Floating-Point:: Floating Point 24445* WebAssembly-Opcodes:: Opcodes 24446* WebAssembly-module-layout:: Module Layout 24447 24448 24449File: as.info, Node: WebAssembly-Notes, Next: WebAssembly-Syntax, Up: WebAssembly-Dependent 24450 244519.52.1 Notes 24452------------ 24453 24454While WebAssembly provides its own module format for executables, this 24455documentation describes how to use `as' to produce intermediate ELF 24456object format files. 24457 24458 24459File: as.info, Node: WebAssembly-Syntax, Next: WebAssembly-Floating-Point, Prev: WebAssembly-Notes, Up: WebAssembly-Dependent 24460 244619.52.2 Syntax 24462------------- 24463 24464The assembler syntax directly encodes sequences of opcodes as defined 24465in the WebAssembly binary encoding specification at 24466https://github.com/webassembly/spec/BinaryEncoding.md. Structured 24467sexp-style expressions are not supported as input. 24468 24469* Menu: 24470 24471* WebAssembly-Chars:: Special Characters 24472* WebAssembly-Relocs:: Relocations 24473* WebAssembly-Signatures:: Signatures 24474 24475 24476File: as.info, Node: WebAssembly-Chars, Next: WebAssembly-Relocs, Up: WebAssembly-Syntax 24477 244789.52.2.1 Special Characters 24479........................... 24480 24481`#' and `;' are the line comment characters. Note that if `#' is the 24482first character on a line then it can also be a logical line number 24483directive (*note Comments::) or a preprocessor control command (*note 24484Preprocessing::). 24485 24486 24487File: as.info, Node: WebAssembly-Relocs, Next: WebAssembly-Signatures, Prev: WebAssembly-Chars, Up: WebAssembly-Syntax 24488 244899.52.2.2 Relocations 24490.................... 24491 24492Special relocations are available by using the `@PLT', `@GOT', or 24493`@GOT' suffixes after a constant expression, which correspond to the 24494R_ASMJS_LEB128_PLT, R_ASMJS_LEB128_GOT, and R_ASMJS_LEB128_GOT_CODE 24495relocations, respectively. 24496 24497 The `@PLT' suffix is followed by a symbol name in braces; the symbol 24498value is used to determine the function signature for which a PLT stub 24499is generated. Currently, the symbol _name_ is parsed from its last `F' 24500character to determine the argument count of the function, which is 24501also necessary for generating a PLT stub. 24502 24503 24504File: as.info, Node: WebAssembly-Signatures, Prev: WebAssembly-Relocs, Up: WebAssembly-Syntax 24505 245069.52.2.3 Signatures 24507................... 24508 24509Function signatures are specified with the `signature' pseudo-opcode, 24510followed by a simple function signature imitating a C++-mangled 24511function type: `F' followed by an optional `v', then a sequence of `i', 24512`l', `f', and `d' characters to mark i32, i64, f32, and f64 parameters, 24513respectively; followed by a final `E' to mark the end of the function 24514signature. 24515 24516 24517File: as.info, Node: WebAssembly-Floating-Point, Next: WebAssembly-Opcodes, Prev: WebAssembly-Syntax, Up: WebAssembly-Dependent 24518 245199.52.3 Floating Point 24520--------------------- 24521 24522WebAssembly uses little-endian IEEE floating-point numbers. 24523 24524 24525File: as.info, Node: WebAssembly-Opcodes, Next: WebAssembly-module-layout, Prev: WebAssembly-Floating-Point, Up: WebAssembly-Dependent 24526 245279.52.4 Regular Opcodes 24528---------------------- 24529 24530Ordinary instructions are encoded with the WebAssembly mnemonics as 24531listed at: 24532`https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md'. 24533 24534 Opcodes are written directly in the order in which they are encoded, 24535without going through an intermediate sexp-style expression as in the 24536`was' format. 24537 24538 For "typed" opcodes (block, if, etc.), the type of the block is 24539specified in square brackets following the opcode: `if[i]', `if[]'. 24540 24541 24542File: as.info, Node: WebAssembly-module-layout, Prev: WebAssembly-Opcodes, Up: WebAssembly-Dependent 24543 245449.52.5 WebAssembly Module Layout 24545-------------------------------- 24546 24547`as' will only produce ELF output, not a valid WebAssembly module. It 24548is possible to make `as' produce output in a single ELF section which 24549becomes a valid WebAssembly module, but a linker script to do so may be 24550preferable, as it doesn't require running the entire module through the 24551assembler at once. 24552 24553 24554File: as.info, Node: XGATE-Dependent, Next: XSTORMY16-Dependent, Prev: WebAssembly-Dependent, Up: Machine Dependencies 24555 245569.53 XGATE Dependent Features 24557============================= 24558 24559* Menu: 24560 24561* XGATE-Opts:: XGATE Options 24562* XGATE-Syntax:: Syntax 24563* XGATE-Directives:: Assembler Directives 24564* XGATE-Float:: Floating Point 24565* XGATE-opcodes:: Opcodes 24566 24567 24568File: as.info, Node: XGATE-Opts, Next: XGATE-Syntax, Up: XGATE-Dependent 24569 245709.53.1 XGATE Options 24571-------------------- 24572 24573The Freescale XGATE version of `as' has a few machine dependent options. 24574 24575`-mshort' 24576 This option controls the ABI and indicates to use a 16-bit integer 24577 ABI. It has no effect on the assembled instructions. This is the 24578 default. 24579 24580`-mlong' 24581 This option controls the ABI and indicates to use a 32-bit integer 24582 ABI. 24583 24584`-mshort-double' 24585 This option controls the ABI and indicates to use a 32-bit float 24586 ABI. This is the default. 24587 24588`-mlong-double' 24589 This option controls the ABI and indicates to use a 64-bit float 24590 ABI. 24591 24592`--print-insn-syntax' 24593 You can use the `--print-insn-syntax' option to obtain the syntax 24594 description of the instruction when an error is detected. 24595 24596`--print-opcodes' 24597 The `--print-opcodes' option prints the list of all the 24598 instructions with their syntax. Once the list is printed `as' 24599 exits. 24600 24601 24602 24603File: as.info, Node: XGATE-Syntax, Next: XGATE-Directives, Prev: XGATE-Opts, Up: XGATE-Dependent 24604 246059.53.2 Syntax 24606------------- 24607 24608In XGATE RISC syntax, the instruction name comes first and it may be 24609followed by up to three operands. Operands are separated by commas 24610(`,'). `as' will complain if too many operands are specified for a 24611given instruction. The same will happen if you specified too few 24612operands. 24613 24614 nop 24615 ldl #23 24616 CMP R1, R2 24617 24618 The presence of a `;' character or a `!' character anywhere on a 24619line indicates the start of a comment that extends to the end of that 24620line. 24621 24622 A `*' or a `#' character at the start of a line also introduces a 24623line comment, but these characters do not work elsewhere on the line. 24624If the first character of the line is a `#' then as well as starting a 24625comment, the line could also be logical line number directive (*note 24626Comments::) or a preprocessor control command (*note Preprocessing::). 24627 24628 The XGATE assembler does not currently support a line separator 24629character. 24630 24631 The following addressing modes are understood for XGATE: 24632"Inherent" 24633 `' 24634 24635"Immediate 3 Bit Wide" 24636 `#NUMBER' 24637 24638"Immediate 4 Bit Wide" 24639 `#NUMBER' 24640 24641"Immediate 8 Bit Wide" 24642 `#NUMBER' 24643 24644"Monadic Addressing" 24645 `REG' 24646 24647"Dyadic Addressing" 24648 `REG, REG' 24649 24650"Triadic Addressing" 24651 `REG, REG, REG' 24652 24653"Relative Addressing 9 Bit Wide" 24654 `*SYMBOL' 24655 24656"Relative Addressing 10 Bit Wide" 24657 `*SYMBOL' 24658 24659"Index Register plus Immediate Offset" 24660 `REG, (REG, #NUMBER)' 24661 24662"Index Register plus Register Offset" 24663 `REG, REG, REG' 24664 24665"Index Register plus Register Offset with Post-increment" 24666 `REG, REG, REG+' 24667 24668"Index Register plus Register Offset with Pre-decrement" 24669 `REG, REG, -REG' 24670 24671 The register can be either `R0', `R1', `R2', `R3', `R4', `R5', 24672 `R6' or `R7'. 24673 24674 24675 Convene macro opcodes to deal with 16-bit values have been added. 24676 24677"Immediate 16 Bit Wide" 24678 `#NUMBER', or `*SYMBOL' 24679 24680 For example: 24681 24682 ldw R1, #1024 24683 ldw R3, timer 24684 ldw R1, (R1, #0) 24685 COM R1 24686 stw R2, (R1, #0) 24687 24688 24689File: as.info, Node: XGATE-Directives, Next: XGATE-Float, Prev: XGATE-Syntax, Up: XGATE-Dependent 24690 246919.53.3 Assembler Directives 24692--------------------------- 24693 24694The XGATE version of `as' have the following specific assembler 24695directives: 24696 24697 24698File: as.info, Node: XGATE-Float, Next: XGATE-opcodes, Prev: XGATE-Directives, Up: XGATE-Dependent 24699 247009.53.4 Floating Point 24701--------------------- 24702 24703Packed decimal (P) format floating literals are not supported(yet). 24704 24705 The floating point formats generated by directives are these. 24706 24707`.float' 24708 `Single' precision floating point constants. 24709 24710`.double' 24711 `Double' precision floating point constants. 24712 24713`.extend' 24714`.ldouble' 24715 `Extended' precision (`long double') floating point constants. 24716 24717 24718File: as.info, Node: XGATE-opcodes, Prev: XGATE-Float, Up: XGATE-Dependent 24719 247209.53.5 Opcodes 24721-------------- 24722 24723 24724File: as.info, Node: XSTORMY16-Dependent, Next: Xtensa-Dependent, Prev: XGATE-Dependent, Up: Machine Dependencies 24725 247269.54 XStormy16 Dependent Features 24727================================= 24728 24729* Menu: 24730 24731* XStormy16 Syntax:: Syntax 24732* XStormy16 Directives:: Machine Directives 24733* XStormy16 Opcodes:: Pseudo-Opcodes 24734 24735 24736File: as.info, Node: XStormy16 Syntax, Next: XStormy16 Directives, Up: XSTORMY16-Dependent 24737 247389.54.1 Syntax 24739------------- 24740 24741* Menu: 24742 24743* XStormy16-Chars:: Special Characters 24744 24745 24746File: as.info, Node: XStormy16-Chars, Up: XStormy16 Syntax 24747 247489.54.1.1 Special Characters 24749........................... 24750 24751`#' is the line comment character. If a `#' appears as the first 24752character of a line, the whole line is treated as a comment, but in 24753this case the line can also be a logical line number directive (*note 24754Comments::) or a preprocessor control command (*note Preprocessing::). 24755 24756 A semicolon (`;') can be used to start a comment that extends from 24757wherever the character appears on the line up to the end of the line. 24758 24759 The `|' character can be used to separate statements on the same 24760line. 24761 24762 24763File: as.info, Node: XStormy16 Directives, Next: XStormy16 Opcodes, Prev: XStormy16 Syntax, Up: XSTORMY16-Dependent 24764 247659.54.2 XStormy16 Machine Directives 24766----------------------------------- 24767 24768`.16bit_pointers' 24769 Like the `--16bit-pointers' command-line option this directive 24770 indicates that the assembly code makes use of 16-bit pointers. 24771 24772`.32bit_pointers' 24773 Like the `--32bit-pointers' command-line option this directive 24774 indicates that the assembly code makes use of 32-bit pointers. 24775 24776`.no_pointers' 24777 Like the `--no-pointers' command-line option this directive 24778 indicates that the assembly code does not makes use pointers. 24779 24780 24781 24782File: as.info, Node: XStormy16 Opcodes, Prev: XStormy16 Directives, Up: XSTORMY16-Dependent 24783 247849.54.3 XStormy16 Pseudo-Opcodes 24785------------------------------- 24786 24787`as' implements all the standard XStormy16 opcodes. 24788 24789 `as' also implements the following pseudo ops: 24790 24791`@lo()' 24792 Computes the lower 16 bits of the given expression and stores it 24793 into the immediate operand field of the given instruction. For 24794 example: 24795 24796 `add r6, @lo(here - there)' 24797 24798 computes the difference between the address of labels 'here' and 24799 'there', takes the lower 16 bits of this difference and adds it to 24800 register 6. 24801 24802`@hi()' 24803 Computes the higher 16 bits of the given expression and stores it 24804 into the immediate operand field of the given instruction. For 24805 example: 24806 24807 `addc r7, @hi(here - there)' 24808 24809 computes the difference between the address of labels 'here' and 24810 'there', takes the upper 16 bits of this difference, shifts it 24811 down 16 bits and then adds it, along with the carry bit, to the 24812 value in register 7. 24813 24814 24815 24816File: as.info, Node: Xtensa-Dependent, Next: Z80-Dependent, Prev: XSTORMY16-Dependent, Up: Machine Dependencies 24817 248189.55 Xtensa Dependent Features 24819============================== 24820 24821 This chapter covers features of the GNU assembler that are specific 24822to the Xtensa architecture. For details about the Xtensa instruction 24823set, please consult the `Xtensa Instruction Set Architecture (ISA) 24824Reference Manual'. 24825 24826* Menu: 24827 24828* Xtensa Options:: Command-line Options. 24829* Xtensa Syntax:: Assembler Syntax for Xtensa Processors. 24830* Xtensa Optimizations:: Assembler Optimizations. 24831* Xtensa Relaxation:: Other Automatic Transformations. 24832* Xtensa Directives:: Directives for Xtensa Processors. 24833 24834 24835File: as.info, Node: Xtensa Options, Next: Xtensa Syntax, Up: Xtensa-Dependent 24836 248379.55.1 Command-line Options 24838--------------------------- 24839 24840`--text-section-literals | --no-text-section-literals' 24841 Control the treatment of literal pools. The default is 24842 `--no-text-section-literals', which places literals in separate 24843 sections in the output file. This allows the literal pool to be 24844 placed in a data RAM/ROM. With `--text-section-literals', the 24845 literals are interspersed in the text section in order to keep 24846 them as close as possible to their references. This may be 24847 necessary for large assembly files, where the literals would 24848 otherwise be out of range of the `L32R' instructions in the text 24849 section. Literals are grouped into pools following 24850 `.literal_position' directives or preceding `ENTRY' instructions. 24851 These options only affect literals referenced via PC-relative 24852 `L32R' instructions; literals for absolute mode `L32R' 24853 instructions are handled separately. *Note literal: Literal 24854 Directive. 24855 24856`--auto-litpools | --no-auto-litpools' 24857 Control the treatment of literal pools. The default is 24858 `--no-auto-litpools', which in the absence of 24859 `--text-section-literals' places literals in separate sections in 24860 the output file. This allows the literal pool to be placed in a 24861 data RAM/ROM. With `--auto-litpools', the literals are 24862 interspersed in the text section in order to keep them as close as 24863 possible to their references, explicit `.literal_position' 24864 directives are not required. This may be necessary for very large 24865 functions, where single literal pool at the beginning of the 24866 function may not be reachable by `L32R' instructions at the end. 24867 These options only affect literals referenced via PC-relative 24868 `L32R' instructions; literals for absolute mode `L32R' 24869 instructions are handled separately. When used together with 24870 `--text-section-literals', `--auto-litpools' takes precedence. 24871 *Note literal: Literal Directive. 24872 24873`--absolute-literals | --no-absolute-literals' 24874 Indicate to the assembler whether `L32R' instructions use absolute 24875 or PC-relative addressing. If the processor includes the absolute 24876 addressing option, the default is to use absolute `L32R' 24877 relocations. Otherwise, only the PC-relative `L32R' relocations 24878 can be used. 24879 24880`--target-align | --no-target-align' 24881 Enable or disable automatic alignment to reduce branch penalties 24882 at some expense in code size. *Note Automatic Instruction 24883 Alignment: Xtensa Automatic Alignment. This optimization is 24884 enabled by default. Note that the assembler will always align 24885 instructions like `LOOP' that have fixed alignment requirements. 24886 24887`--longcalls | --no-longcalls' 24888 Enable or disable transformation of call instructions to allow 24889 calls across a greater range of addresses. *Note Function Call 24890 Relaxation: Xtensa Call Relaxation. This option should be used 24891 when call targets can potentially be out of range. It may degrade 24892 both code size and performance, but the linker can generally 24893 optimize away the unnecessary overhead when a call ends up within 24894 range. The default is `--no-longcalls'. 24895 24896`--transform | --no-transform' 24897 Enable or disable all assembler transformations of Xtensa 24898 instructions, including both relaxation and optimization. The 24899 default is `--transform'; `--no-transform' should only be used in 24900 the rare cases when the instructions must be exactly as specified 24901 in the assembly source. Using `--no-transform' causes out of range 24902 instruction operands to be errors. 24903 24904`--rename-section OLDNAME=NEWNAME' 24905 Rename the OLDNAME section to NEWNAME. This option can be used 24906 multiple times to rename multiple sections. 24907 24908`--trampolines | --no-trampolines' 24909 Enable or disable transformation of jump instructions to allow 24910 jumps across a greater range of addresses. *Note Jump 24911 Trampolines: Xtensa Jump Relaxation. This option should be used 24912 when jump targets can potentially be out of range. In the absence 24913 of such jumps this option does not affect code size or 24914 performance. The default is `--trampolines'. 24915 24916`--abi-windowed | --abi-call0' 24917 Choose ABI tag written to the `.xtensa.info' section. ABI tag 24918 indicates ABI of the assembly code. A warning is issued by the 24919 linker on an attempt to link object files with inconsistent ABI 24920 tags. Default ABI is chosen by the Xtensa core configuration. 24921 24922 24923File: as.info, Node: Xtensa Syntax, Next: Xtensa Optimizations, Prev: Xtensa Options, Up: Xtensa-Dependent 24924 249259.55.2 Assembler Syntax 24926----------------------- 24927 24928Block comments are delimited by `/*' and `*/'. End of line comments 24929may be introduced with either `#' or `//'. 24930 24931 If a `#' appears as the first character of a line then the whole 24932line is treated as a comment, but in this case the line could also be a 24933logical line number directive (*note Comments::) or a preprocessor 24934control command (*note Preprocessing::). 24935 24936 Instructions consist of a leading opcode or macro name followed by 24937whitespace and an optional comma-separated list of operands: 24938 24939 OPCODE [OPERAND, ...] 24940 24941 Instructions must be separated by a newline or semicolon (`;'). 24942 24943 FLIX instructions, which bundle multiple opcodes together in a single 24944instruction, are specified by enclosing the bundled opcodes inside 24945braces: 24946 24947 { 24948 [FORMAT] 24949 OPCODE0 [OPERANDS] 24950 OPCODE1 [OPERANDS] 24951 OPCODE2 [OPERANDS] 24952 ... 24953 } 24954 24955 The opcodes in a FLIX instruction are listed in the same order as the 24956corresponding instruction slots in the TIE format declaration. 24957Directives and labels are not allowed inside the braces of a FLIX 24958instruction. A particular TIE format name can optionally be specified 24959immediately after the opening brace, but this is usually unnecessary. 24960The assembler will automatically search for a format that can encode the 24961specified opcodes, so the format name need only be specified in rare 24962cases where there is more than one applicable format and where it 24963matters which of those formats is used. A FLIX instruction can also be 24964specified on a single line by separating the opcodes with semicolons: 24965 24966 { [FORMAT;] OPCODE0 [OPERANDS]; OPCODE1 [OPERANDS]; OPCODE2 [OPERANDS]; ... } 24967 24968 If an opcode can only be encoded in a FLIX instruction but is not 24969specified as part of a FLIX bundle, the assembler will choose the 24970smallest format where the opcode can be encoded and will fill unused 24971instruction slots with no-ops. 24972 24973* Menu: 24974 24975* Xtensa Opcodes:: Opcode Naming Conventions. 24976* Xtensa Registers:: Register Naming. 24977 24978 24979File: as.info, Node: Xtensa Opcodes, Next: Xtensa Registers, Up: Xtensa Syntax 24980 249819.55.2.1 Opcode Names 24982..................... 24983 24984See the `Xtensa Instruction Set Architecture (ISA) Reference Manual' 24985for a complete list of opcodes and descriptions of their semantics. 24986 24987 If an opcode name is prefixed with an underscore character (`_'), 24988`as' will not transform that instruction in any way. The underscore 24989prefix disables both optimization (*note Xtensa Optimizations: Xtensa 24990Optimizations.) and relaxation (*note Xtensa Relaxation: Xtensa 24991Relaxation.) for that particular instruction. Only use the underscore 24992prefix when it is essential to select the exact opcode produced by the 24993assembler. Using this feature unnecessarily makes the code less 24994efficient by disabling assembler optimization and less flexible by 24995disabling relaxation. 24996 24997 Note that this special handling of underscore prefixes only applies 24998to Xtensa opcodes, not to either built-in macros or user-defined macros. 24999When an underscore prefix is used with a macro (e.g., `_MOV'), it 25000refers to a different macro. The assembler generally provides built-in 25001macros both with and without the underscore prefix, where the underscore 25002versions behave as if the underscore carries through to the instructions 25003in the macros. For example, `_MOV' may expand to `_MOV.N'. 25004 25005 The underscore prefix only applies to individual instructions, not to 25006series of instructions. For example, if a series of instructions have 25007underscore prefixes, the assembler will not transform the individual 25008instructions, but it may insert other instructions between them (e.g., 25009to align a `LOOP' instruction). To prevent the assembler from 25010modifying a series of instructions as a whole, use the `no-transform' 25011directive. *Note transform: Transform Directive. 25012 25013 25014File: as.info, Node: Xtensa Registers, Prev: Xtensa Opcodes, Up: Xtensa Syntax 25015 250169.55.2.2 Register Names 25017....................... 25018 25019The assembly syntax for a register file entry is the "short" name for a 25020TIE register file followed by the index into that register file. For 25021example, the general-purpose `AR' register file has a short name of 25022`a', so these registers are named `a0'...`a15'. As a special feature, 25023`sp' is also supported as a synonym for `a1'. Additional registers may 25024be added by processor configuration options and by designer-defined TIE 25025extensions. An initial `$' character is optional in all register names. 25026 25027 25028File: as.info, Node: Xtensa Optimizations, Next: Xtensa Relaxation, Prev: Xtensa Syntax, Up: Xtensa-Dependent 25029 250309.55.3 Xtensa Optimizations 25031--------------------------- 25032 25033The optimizations currently supported by `as' are generation of density 25034instructions where appropriate and automatic branch target alignment. 25035 25036* Menu: 25037 25038* Density Instructions:: Using Density Instructions. 25039* Xtensa Automatic Alignment:: Automatic Instruction Alignment. 25040 25041 25042File: as.info, Node: Density Instructions, Next: Xtensa Automatic Alignment, Up: Xtensa Optimizations 25043 250449.55.3.1 Using Density Instructions 25045................................... 25046 25047The Xtensa instruction set has a code density option that provides 2504816-bit versions of some of the most commonly used opcodes. Use of these 25049opcodes can significantly reduce code size. When possible, the 25050assembler automatically translates instructions from the core Xtensa 25051instruction set into equivalent instructions from the Xtensa code 25052density option. This translation can be disabled by using underscore 25053prefixes (*note Opcode Names: Xtensa Opcodes.), by using the 25054`--no-transform' command-line option (*note Command Line Options: 25055Xtensa Options.), or by using the `no-transform' directive (*note 25056transform: Transform Directive.). 25057 25058 It is a good idea _not_ to use the density instructions directly. 25059The assembler will automatically select dense instructions where 25060possible. If you later need to use an Xtensa processor without the code 25061density option, the same assembly code will then work without 25062modification. 25063 25064 25065File: as.info, Node: Xtensa Automatic Alignment, Prev: Density Instructions, Up: Xtensa Optimizations 25066 250679.55.3.2 Automatic Instruction Alignment 25068........................................ 25069 25070The Xtensa assembler will automatically align certain instructions, both 25071to optimize performance and to satisfy architectural requirements. 25072 25073 As an optimization to improve performance, the assembler attempts to 25074align branch targets so they do not cross instruction fetch boundaries. 25075(Xtensa processors can be configured with either 32-bit or 64-bit 25076instruction fetch widths.) An instruction immediately following a call 25077is treated as a branch target in this context, because it will be the 25078target of a return from the call. This alignment has the potential to 25079reduce branch penalties at some expense in code size. This 25080optimization is enabled by default. You can disable it with the 25081`--no-target-align' command-line option (*note Command-line Options: 25082Xtensa Options.). 25083 25084 The target alignment optimization is done without adding instructions 25085that could increase the execution time of the program. If there are 25086density instructions in the code preceding a target, the assembler can 25087change the target alignment by widening some of those instructions to 25088the equivalent 24-bit instructions. Extra bytes of padding can be 25089inserted immediately following unconditional jump and return 25090instructions. This approach is usually successful in aligning many, 25091but not all, branch targets. 25092 25093 The `LOOP' family of instructions must be aligned such that the 25094first instruction in the loop body does not cross an instruction fetch 25095boundary (e.g., with a 32-bit fetch width, a `LOOP' instruction must be 25096on either a 1 or 2 mod 4 byte boundary). The assembler knows about 25097this restriction and inserts the minimal number of 2 or 3 byte no-op 25098instructions to satisfy it. When no-op instructions are added, any 25099label immediately preceding the original loop will be moved in order to 25100refer to the loop instruction, not the newly generated no-op 25101instruction. To preserve binary compatibility across processors with 25102different fetch widths, the assembler conservatively assumes a 32-bit 25103fetch width when aligning `LOOP' instructions (except if the first 25104instruction in the loop is a 64-bit instruction). 25105 25106 Previous versions of the assembler automatically aligned `ENTRY' 25107instructions to 4-byte boundaries, but that alignment is now the 25108programmer's responsibility. 25109 25110 25111File: as.info, Node: Xtensa Relaxation, Next: Xtensa Directives, Prev: Xtensa Optimizations, Up: Xtensa-Dependent 25112 251139.55.4 Xtensa Relaxation 25114------------------------ 25115 25116When an instruction operand is outside the range allowed for that 25117particular instruction field, `as' can transform the code to use a 25118functionally-equivalent instruction or sequence of instructions. This 25119process is known as "relaxation". This is typically done for branch 25120instructions because the distance of the branch targets is not known 25121until assembly-time. The Xtensa assembler offers branch relaxation and 25122also extends this concept to function calls, `MOVI' instructions and 25123other instructions with immediate fields. 25124 25125* Menu: 25126 25127* Xtensa Branch Relaxation:: Relaxation of Branches. 25128* Xtensa Call Relaxation:: Relaxation of Function Calls. 25129* Xtensa Jump Relaxation:: Relaxation of Jumps. 25130* Xtensa Immediate Relaxation:: Relaxation of other Immediate Fields. 25131 25132 25133File: as.info, Node: Xtensa Branch Relaxation, Next: Xtensa Call Relaxation, Up: Xtensa Relaxation 25134 251359.55.4.1 Conditional Branch Relaxation 25136...................................... 25137 25138When the target of a branch is too far away from the branch itself, 25139i.e., when the offset from the branch to the target is too large to fit 25140in the immediate field of the branch instruction, it may be necessary to 25141replace the branch with a branch around a jump. For example, 25142 25143 beqz a2, L 25144 25145 may result in: 25146 25147 bnez.n a2, M 25148 j L 25149 M: 25150 25151 (The `BNEZ.N' instruction would be used in this example only if the 25152density option is available. Otherwise, `BNEZ' would be used.) 25153 25154 This relaxation works well because the unconditional jump instruction 25155has a much larger offset range than the various conditional branches. 25156However, an error will occur if a branch target is beyond the range of a 25157jump instruction. `as' cannot relax unconditional jumps. Similarly, 25158an error will occur if the original input contains an unconditional 25159jump to a target that is out of range. 25160 25161 Branch relaxation is enabled by default. It can be disabled by using 25162underscore prefixes (*note Opcode Names: Xtensa Opcodes.), the 25163`--no-transform' command-line option (*note Command-line Options: 25164Xtensa Options.), or the `no-transform' directive (*note transform: 25165Transform Directive.). 25166 25167 25168File: as.info, Node: Xtensa Call Relaxation, Next: Xtensa Jump Relaxation, Prev: Xtensa Branch Relaxation, Up: Xtensa Relaxation 25169 251709.55.4.2 Function Call Relaxation 25171................................. 25172 25173Function calls may require relaxation because the Xtensa immediate call 25174instructions (`CALL0', `CALL4', `CALL8' and `CALL12') provide a 25175PC-relative offset of only 512 Kbytes in either direction. For larger 25176programs, it may be necessary to use indirect calls (`CALLX0', 25177`CALLX4', `CALLX8' and `CALLX12') where the target address is specified 25178in a register. The Xtensa assembler can automatically relax immediate 25179call instructions into indirect call instructions. This relaxation is 25180done by loading the address of the called function into the callee's 25181return address register and then using a `CALLX' instruction. So, for 25182example: 25183 25184 call8 func 25185 25186 might be relaxed to: 25187 25188 .literal .L1, func 25189 l32r a8, .L1 25190 callx8 a8 25191 25192 Because the addresses of targets of function calls are not generally 25193known until link-time, the assembler must assume the worst and relax all 25194the calls to functions in other source files, not just those that really 25195will be out of range. The linker can recognize calls that were 25196unnecessarily relaxed, and it will remove the overhead introduced by the 25197assembler for those cases where direct calls are sufficient. 25198 25199 Call relaxation is disabled by default because it can have a negative 25200effect on both code size and performance, although the linker can 25201usually eliminate the unnecessary overhead. If a program is too large 25202and some of the calls are out of range, function call relaxation can be 25203enabled using the `--longcalls' command-line option or the `longcalls' 25204directive (*note longcalls: Longcalls Directive.). 25205 25206 25207File: as.info, Node: Xtensa Jump Relaxation, Next: Xtensa Immediate Relaxation, Prev: Xtensa Call Relaxation, Up: Xtensa Relaxation 25208 252099.55.4.3 Jump Relaxation 25210........................ 25211 25212Jump instruction may require relaxation because the Xtensa jump 25213instruction (`J') provide a PC-relative offset of only 128 Kbytes in 25214either direction. One option is to use jump long (`J.L') instruction, 25215which depending on jump distance may be assembled as jump (`J') or 25216indirect jump (`JX'). However it needs a free register. When there's 25217no spare register it is possible to plant intermediate jump sites 25218(trampolines) between the jump instruction and its target. These sites 25219may be located in areas unreachable by normal code execution flow, in 25220that case they only contain intermediate jumps, or they may be inserted 25221in the middle of code block, in which case there's an additional jump 25222from the beginning of the trampoline to the instruction past its end. 25223So, for example: 25224 25225 j 1f 25226 ... 25227 retw 25228 ... 25229 mov a10, a2 25230 call8 func 25231 ... 25232 1: 25233 ... 25234 25235 might be relaxed to: 25236 25237 j .L0_TR_1 25238 ... 25239 retw 25240 .L0_TR_1: 25241 j 1f 25242 ... 25243 mov a10, a2 25244 call8 func 25245 ... 25246 1: 25247 ... 25248 25249 or to: 25250 25251 j .L0_TR_1 25252 ... 25253 retw 25254 ... 25255 mov a10, a2 25256 j .L0_TR_0 25257 .L0_TR_1: 25258 j 1f 25259 .L0_TR_0: 25260 call8 func 25261 ... 25262 1: 25263 ... 25264 25265 The Xtensa assembler uses trampolines with jump around only when it 25266cannot find suitable unreachable trampoline. There may be multiple 25267trampolines between the jump instruction and its target. 25268 25269 This relaxation does not apply to jumps to undefined symbols, 25270assuming they will reach their targets once resolved. 25271 25272 Jump relaxation is enabled by default because it does not affect 25273code size or performance while the code itself is small. This 25274relaxation may be disabled completely with `--no-trampolines' or 25275`--no-transform' command-line options (*note Command-line Options: 25276Xtensa Options.). 25277 25278 25279File: as.info, Node: Xtensa Immediate Relaxation, Prev: Xtensa Jump Relaxation, Up: Xtensa Relaxation 25280 252819.55.4.4 Other Immediate Field Relaxation 25282......................................... 25283 25284The assembler normally performs the following other relaxations. They 25285can be disabled by using underscore prefixes (*note Opcode Names: 25286Xtensa Opcodes.), the `--no-transform' command-line option (*note 25287Command-line Options: Xtensa Options.), or the `no-transform' directive 25288(*note transform: Transform Directive.). 25289 25290 The `MOVI' machine instruction can only materialize values in the 25291range from -2048 to 2047. Values outside this range are best 25292materialized with `L32R' instructions. Thus: 25293 25294 movi a0, 100000 25295 25296 is assembled into the following machine code: 25297 25298 .literal .L1, 100000 25299 l32r a0, .L1 25300 25301 The `L8UI' machine instruction can only be used with immediate 25302offsets in the range from 0 to 255. The `L16SI' and `L16UI' machine 25303instructions can only be used with offsets from 0 to 510. The `L32I' 25304machine instruction can only be used with offsets from 0 to 1020. A 25305load offset outside these ranges can be materialized with an `L32R' 25306instruction if the destination register of the load is different than 25307the source address register. For example: 25308 25309 l32i a1, a0, 2040 25310 25311 is translated to: 25312 25313 .literal .L1, 2040 25314 l32r a1, .L1 25315 add a1, a0, a1 25316 l32i a1, a1, 0 25317 25318If the load destination and source address register are the same, an 25319out-of-range offset causes an error. 25320 25321 The Xtensa `ADDI' instruction only allows immediate operands in the 25322range from -128 to 127. There are a number of alternate instruction 25323sequences for the `ADDI' operation. First, if the immediate is 0, the 25324`ADDI' will be turned into a `MOV.N' instruction (or the equivalent 25325`OR' instruction if the code density option is not available). If the 25326`ADDI' immediate is outside of the range -128 to 127, but inside the 25327range -32896 to 32639, an `ADDMI' instruction or `ADDMI'/`ADDI' 25328sequence will be used. Finally, if the immediate is outside of this 25329range and a free register is available, an `L32R'/`ADD' sequence will 25330be used with a literal allocated from the literal pool. 25331 25332 For example: 25333 25334 addi a5, a6, 0 25335 addi a5, a6, 512 25336 addi a5, a6, 513 25337 addi a5, a6, 50000 25338 25339 is assembled into the following: 25340 25341 .literal .L1, 50000 25342 mov.n a5, a6 25343 addmi a5, a6, 0x200 25344 addmi a5, a6, 0x200 25345 addi a5, a5, 1 25346 l32r a5, .L1 25347 add a5, a6, a5 25348 25349 25350File: as.info, Node: Xtensa Directives, Prev: Xtensa Relaxation, Up: Xtensa-Dependent 25351 253529.55.5 Directives 25353----------------- 25354 25355The Xtensa assembler supports a region-based directive syntax: 25356 25357 .begin DIRECTIVE [OPTIONS] 25358 ... 25359 .end DIRECTIVE 25360 25361 All the Xtensa-specific directives that apply to a region of code use 25362this syntax. 25363 25364 The directive applies to code between the `.begin' and the `.end'. 25365The state of the option after the `.end' reverts to what it was before 25366the `.begin'. A nested `.begin'/`.end' region can further change the 25367state of the directive without having to be aware of its outer state. 25368For example, consider: 25369 25370 .begin no-transform 25371 L: add a0, a1, a2 25372 .begin transform 25373 M: add a0, a1, a2 25374 .end transform 25375 N: add a0, a1, a2 25376 .end no-transform 25377 25378 The `ADD' opcodes at `L' and `N' in the outer `no-transform' region 25379both result in `ADD' machine instructions, but the assembler selects an 25380`ADD.N' instruction for the `ADD' at `M' in the inner `transform' 25381region. 25382 25383 The advantage of this style is that it works well inside macros 25384which can preserve the context of their callers. 25385 25386 The following directives are available: 25387 25388* Menu: 25389 25390* Schedule Directive:: Enable instruction scheduling. 25391* Longcalls Directive:: Use Indirect Calls for Greater Range. 25392* Transform Directive:: Disable All Assembler Transformations. 25393* Literal Directive:: Intermix Literals with Instructions. 25394* Literal Position Directive:: Specify Inline Literal Pool Locations. 25395* Literal Prefix Directive:: Specify Literal Section Name Prefix. 25396* Absolute Literals Directive:: Control PC-Relative vs. Absolute Literals. 25397 25398 25399File: as.info, Node: Schedule Directive, Next: Longcalls Directive, Up: Xtensa Directives 25400 254019.55.5.1 schedule 25402................. 25403 25404The `schedule' directive is recognized only for compatibility with 25405Tensilica's assembler. 25406 25407 .begin [no-]schedule 25408 .end [no-]schedule 25409 25410 This directive is ignored and has no effect on `as'. 25411 25412 25413File: as.info, Node: Longcalls Directive, Next: Transform Directive, Prev: Schedule Directive, Up: Xtensa Directives 25414 254159.55.5.2 longcalls 25416.................. 25417 25418The `longcalls' directive enables or disables function call relaxation. 25419*Note Function Call Relaxation: Xtensa Call Relaxation. 25420 25421 .begin [no-]longcalls 25422 .end [no-]longcalls 25423 25424 Call relaxation is disabled by default unless the `--longcalls' 25425command-line option is specified. The `longcalls' directive overrides 25426the default determined by the command-line options. 25427 25428 25429File: as.info, Node: Transform Directive, Next: Literal Directive, Prev: Longcalls Directive, Up: Xtensa Directives 25430 254319.55.5.3 transform 25432.................. 25433 25434This directive enables or disables all assembler transformation, 25435including relaxation (*note Xtensa Relaxation: Xtensa Relaxation.) and 25436optimization (*note Xtensa Optimizations: Xtensa Optimizations.). 25437 25438 .begin [no-]transform 25439 .end [no-]transform 25440 25441 Transformations are enabled by default unless the `--no-transform' 25442option is used. The `transform' directive overrides the default 25443determined by the command-line options. An underscore opcode prefix, 25444disabling transformation of that opcode, always takes precedence over 25445both directives and command-line flags. 25446 25447 25448File: as.info, Node: Literal Directive, Next: Literal Position Directive, Prev: Transform Directive, Up: Xtensa Directives 25449 254509.55.5.4 literal 25451................ 25452 25453The `.literal' directive is used to define literal pool data, i.e., 25454read-only 32-bit data accessed via `L32R' instructions. 25455 25456 .literal LABEL, VALUE[, VALUE...] 25457 25458 This directive is similar to the standard `.word' directive, except 25459that the actual location of the literal data is determined by the 25460assembler and linker, not by the position of the `.literal' directive. 25461Using this directive gives the assembler freedom to locate the literal 25462data in the most appropriate place and possibly to combine identical 25463literals. For example, the code: 25464 25465 entry sp, 40 25466 .literal .L1, sym 25467 l32r a4, .L1 25468 25469 can be used to load a pointer to the symbol `sym' into register 25470`a4'. The value of `sym' will not be placed between the `ENTRY' and 25471`L32R' instructions; instead, the assembler puts the data in a literal 25472pool. 25473 25474 Literal pools are placed by default in separate literal sections; 25475however, when using the `--text-section-literals' option (*note 25476Command-line Options: Xtensa Options.), the literal pools for 25477PC-relative mode `L32R' instructions are placed in the current 25478section.(1) These text section literal pools are created automatically 25479before `ENTRY' instructions and manually after `.literal_position' 25480directives (*note literal_position: Literal Position Directive.). If 25481there are no preceding `ENTRY' instructions, explicit 25482`.literal_position' directives must be used to place the text section 25483literal pools; otherwise, `as' will report an error. 25484 25485 When literals are placed in separate sections, the literal section 25486names are derived from the names of the sections where the literals are 25487defined. The base literal section names are `.literal' for PC-relative 25488mode `L32R' instructions and `.lit4' for absolute mode `L32R' 25489instructions (*note absolute-literals: Absolute Literals Directive.). 25490These base names are used for literals defined in the default `.text' 25491section. For literals defined in other sections or within the scope of 25492a `literal_prefix' directive (*note literal_prefix: Literal Prefix 25493Directive.), the following rules determine the literal section name: 25494 25495 1. If the current section is a member of a section group, the literal 25496 section name includes the group name as a suffix to the base 25497 `.literal' or `.lit4' name, with a period to separate the base 25498 name and group name. The literal section is also made a member of 25499 the group. 25500 25501 2. If the current section name (or `literal_prefix' value) begins with 25502 "`.gnu.linkonce.KIND.'", the literal section name is formed by 25503 replacing "`.KIND'" with the base `.literal' or `.lit4' name. For 25504 example, for literals defined in a section named 25505 `.gnu.linkonce.t.func', the literal section will be 25506 `.gnu.linkonce.literal.func' or `.gnu.linkonce.lit4.func'. 25507 25508 3. If the current section name (or `literal_prefix' value) ends with 25509 `.text', the literal section name is formed by replacing that 25510 suffix with the base `.literal' or `.lit4' name. For example, for 25511 literals defined in a section named `.iram0.text', the literal 25512 section will be `.iram0.literal' or `.iram0.lit4'. 25513 25514 4. If none of the preceding conditions apply, the literal section 25515 name is formed by adding the base `.literal' or `.lit4' name as a 25516 suffix to the current section name (or `literal_prefix' value). 25517 25518 ---------- Footnotes ---------- 25519 25520 (1) Literals for the `.init' and `.fini' sections are always placed 25521in separate sections, even when `--text-section-literals' is enabled. 25522 25523 25524File: as.info, Node: Literal Position Directive, Next: Literal Prefix Directive, Prev: Literal Directive, Up: Xtensa Directives 25525 255269.55.5.5 literal_position 25527......................... 25528 25529When using `--text-section-literals' to place literals inline in the 25530section being assembled, the `.literal_position' directive can be used 25531to mark a potential location for a literal pool. 25532 25533 .literal_position 25534 25535 The `.literal_position' directive is ignored when the 25536`--text-section-literals' option is not used or when `L32R' 25537instructions use the absolute addressing mode. 25538 25539 The assembler will automatically place text section literal pools 25540before `ENTRY' instructions, so the `.literal_position' directive is 25541only needed to specify some other location for a literal pool. You may 25542need to add an explicit jump instruction to skip over an inline literal 25543pool. 25544 25545 For example, an interrupt vector does not begin with an `ENTRY' 25546instruction so the assembler will be unable to automatically find a good 25547place to put a literal pool. Moreover, the code for the interrupt 25548vector must be at a specific starting address, so the literal pool 25549cannot come before the start of the code. The literal pool for the 25550vector must be explicitly positioned in the middle of the vector (before 25551any uses of the literals, due to the negative offsets used by 25552PC-relative `L32R' instructions). The `.literal_position' directive 25553can be used to do this. In the following code, the literal for `M' 25554will automatically be aligned correctly and is placed after the 25555unconditional jump. 25556 25557 .global M 25558 code_start: 25559 j continue 25560 .literal_position 25561 .align 4 25562 continue: 25563 movi a4, M 25564 25565 25566File: as.info, Node: Literal Prefix Directive, Next: Absolute Literals Directive, Prev: Literal Position Directive, Up: Xtensa Directives 25567 255689.55.5.6 literal_prefix 25569....................... 25570 25571The `literal_prefix' directive allows you to override the default 25572literal section names, which are derived from the names of the sections 25573where the literals are defined. 25574 25575 .begin literal_prefix [NAME] 25576 .end literal_prefix 25577 25578 For literals defined within the delimited region, the literal section 25579names are derived from the NAME argument instead of the name of the 25580current section. The rules used to derive the literal section names do 25581not change. *Note literal: Literal Directive. If the NAME argument is 25582omitted, the literal sections revert to the defaults. This directive 25583has no effect when using the `--text-section-literals' option (*note 25584Command-line Options: Xtensa Options.). 25585 25586 25587File: as.info, Node: Absolute Literals Directive, Prev: Literal Prefix Directive, Up: Xtensa Directives 25588 255899.55.5.7 absolute-literals 25590.......................... 25591 25592The `absolute-literals' and `no-absolute-literals' directives control 25593the absolute vs. PC-relative mode for `L32R' instructions. These are 25594relevant only for Xtensa configurations that include the absolute 25595addressing option for `L32R' instructions. 25596 25597 .begin [no-]absolute-literals 25598 .end [no-]absolute-literals 25599 25600 These directives do not change the `L32R' mode--they only cause the 25601assembler to emit the appropriate kind of relocation for `L32R' 25602instructions and to place the literal values in the appropriate section. 25603To change the `L32R' mode, the program must write the `LITBASE' special 25604register. It is the programmer's responsibility to keep track of the 25605mode and indicate to the assembler which mode is used in each region of 25606code. 25607 25608 If the Xtensa configuration includes the absolute `L32R' addressing 25609option, the default is to assume absolute `L32R' addressing unless the 25610`--no-absolute-literals' command-line option is specified. Otherwise, 25611the default is to assume PC-relative `L32R' addressing. The 25612`absolute-literals' directive can then be used to override the default 25613determined by the command-line options. 25614 25615 25616File: as.info, Node: Z80-Dependent, Next: Z8000-Dependent, Prev: Xtensa-Dependent, Up: Machine Dependencies 25617 256189.56 Z80 Dependent Features 25619=========================== 25620 25621* Menu: 25622 25623* Z80 Options:: Options 25624* Z80 Syntax:: Syntax 25625* Z80 Floating Point:: Floating Point 25626* Z80 Directives:: Z80 Machine Directives 25627* Z80 Opcodes:: Opcodes 25628 25629 25630File: as.info, Node: Z80 Options, Next: Z80 Syntax, Up: Z80-Dependent 25631 256329.56.1 Command-line Options 25633--------------------------- 25634 25635`-march=CPU[-EXT...][+EXT...]' 25636 This option specifies the target processor. The assembler will 25637 issue an error message if an attempt is made to assemble an 25638 instruction which will not execute on the target processor. The 25639 following processor names are recognized: `z80', `z180', `ez80', 25640 `gbz80', `z80n', `r800'. In addition to the basic instruction 25641 set, the assembler can be told to accept some extention mnemonics. 25642 For example, `-march=z180+sli+infc' extends Z180 with SLI 25643 instructions and IN F,(C). The following extentions are currently 25644 supported: `full' (all known instructions), `adl' (ADL CPU mode by 25645 default, eZ80 only), `sli' (instruction known as SLI, SLL or SL1), 25646 `xyhl' (instructions with halves of index registers: IXL, IXH, 25647 IYL, IYH), `xdcb' (instructions like ROTOP (II+D),R and BITOP 25648 N,(II+D),R), `infc' (instruction IN F,(C) or IN (C)), `outc0' 25649 (instruction OUT (C),0). Note that rather than extending a basic 25650 instruction set, the extention mnemonics starting with `-' revoke 25651 the respective functionality: `-march=z80-full+xyhl' first removes 25652 all default extentions and adds support for index registers halves 25653 only. 25654 25655 If this option is not specified then `-march=z80+xyhl+infc' is 25656 assumed. 25657 25658`-local-prefix=PREFIX' 25659 Mark all labels with specified prefix as local. But such label can 25660 be marked global explicitly in the code. This option do not change 25661 default local label prefix `.L', it is just adds new one. 25662 25663`-colonless' 25664 Accept colonless labels. All symbols at line begin are treated as 25665 labels. 25666 25667`-sdcc' 25668 Accept assembler code produced by SDCC. 25669 25670`-fp-s=FORMAT' 25671 Single precision floating point numbers format. Default: ieee754 25672 (32 bit). 25673 25674`-fp-d=FORMAT' 25675 Double precision floating point numbers format. Default: ieee754 25676 (64 bit). 25677 25678 Floating point numbers formats. 25679``ieee754'' 25680 Single or double precision IEEE754 compatible format. 25681 25682``half'' 25683 Half precision IEEE754 compatible format (16 bits). 25684 25685``single'' 25686 Single precision IEEE754 compatible format (32 bits). 25687 25688``double'' 25689 Double precision IEEE754 compatible format (64 bits). 25690 25691``zeda32'' 25692 32 bit floating point format from z80float library by Zeda. 25693 25694``math48'' 25695 48 bit floating point format from Math48 package by Anders 25696 Hejlsberg. 25697 25698 25699File: as.info, Node: Z80 Syntax, Next: Z80 Floating Point, Prev: Z80 Options, Up: Z80-Dependent 25700 257019.56.2 Syntax 25702------------- 25703 25704The assembler syntax closely follows the 'Z80 family CPU User Manual' by 25705Zilog. In expressions a single `=' may be used as "is equal to" 25706comparison operator. 25707 25708 Suffices can be used to indicate the radix of integer constants; `H' 25709or `h' for hexadecimal, `D' or `d' for decimal, `Q', `O', `q' or `o' 25710for octal, and `B' for binary. 25711 25712 The suffix `b' denotes a backreference to local label. 25713 25714* Menu: 25715 25716* Z80-Chars:: Special Characters 25717* Z80-Regs:: Register Names 25718* Z80-Case:: Case Sensitivity 25719* Z80-Labels:: Labels 25720 25721 25722File: as.info, Node: Z80-Chars, Next: Z80-Regs, Up: Z80 Syntax 25723 257249.56.2.1 Special Characters 25725........................... 25726 25727The semicolon `;' is the line comment character; 25728 25729 If a `#' appears as the first character of a line then the whole 25730line is treated as a comment, but in this case the line could also be a 25731logical line number directive (*note Comments::) or a preprocessor 25732control command (*note Preprocessing::). 25733 25734 The Z80 assembler does not support a line separator character. 25735 25736 The dollar sign `$' can be used as a prefix for hexadecimal numbers 25737and as a symbol denoting the current location counter. 25738 25739 A backslash `\' is an ordinary character for the Z80 assembler. 25740 25741 The single quote `'' must be followed by a closing quote. If there 25742is one character in between, it is a character constant, otherwise it is 25743a string constant. 25744 25745 25746File: as.info, Node: Z80-Regs, Next: Z80-Case, Prev: Z80-Chars, Up: Z80 Syntax 25747 257489.56.2.2 Register Names 25749....................... 25750 25751The registers are referred to with the letters assigned to them by 25752Zilog. In addition `as' recognizes `ixl' and `ixh' as the least and 25753most significant octet in `ix', and similarly `iyl' and `iyh' as parts 25754of `iy'. 25755 25756 25757File: as.info, Node: Z80-Case, Next: Z80-Labels, Prev: Z80-Regs, Up: Z80 Syntax 25758 257599.56.2.3 Case Sensitivity 25760......................... 25761 25762Upper and lower case are equivalent in register names, opcodes, 25763condition codes and assembler directives. The case of letters is 25764significant in labels and symbol names. The case is also important to 25765distinguish the suffix `b' for a backward reference to a local label 25766from the suffix `B' for a number in binary notation. 25767 25768 25769File: as.info, Node: Z80-Labels, Prev: Z80-Case, Up: Z80 Syntax 25770 257719.56.2.4 Labels 25772............... 25773 25774Labels started by `.L' acts as local labels. You may specify custom 25775local label prefix by `-local-prefix' command-line option. Dollar, 25776forward and backward local labels are supported. By default, all labels 25777are followed by colon. Legacy code with colonless labels can be built 25778with `-colonless' command-line option specified. In this case all 25779tokens at line begin are treated as labels. 25780 25781 25782File: as.info, Node: Z80 Floating Point, Next: Z80 Directives, Prev: Z80 Syntax, Up: Z80-Dependent 25783 257849.56.3 Floating Point 25785--------------------- 25786 25787Floating-point numbers of following types are supported: 25788 25789``ieee754'' 25790 Supported half, single and double precision IEEE754 compatible 25791 numbers. 25792 25793``zeda32'' 25794 32 bit floating point numbers from z80float library by Zeda. 25795 25796``math48'' 25797 48 bit floating point numbers from Math48 package by Anders 25798 Hejlsberg. 25799 25800 25801File: as.info, Node: Z80 Directives, Next: Z80 Opcodes, Prev: Z80 Floating Point, Up: Z80-Dependent 25802 258039.56.4 Z80 Assembler Directives 25804------------------------------- 25805 25806`as' for the Z80 supports some additional directives for compatibility 25807with other assemblers. 25808 25809 These are the additional directives in `as' for the Z80: 25810 25811``.assume ADL = EXPRESSION'' 25812 Set ADL status for eZ80. Non-zero value enable compilation in ADL 25813 mode else used Z80 mode. ADL and Z80 mode produces incompatible 25814 object code. Mixing both of them within one binary may lead 25815 problems with disassembler. 25816 25817``db EXPRESSION|STRING[,EXPRESSION|STRING...]'' 25818``defb EXPRESSION|STRING[,EXPRESSION|STRING...]'' 25819``defm STRING[,STRING...]'' 25820 For each STRING the characters are copied to the object file, for 25821 each other EXPRESSION the value is stored in one byte. A warning 25822 is issued in case of an overflow. Backslash symbol in the strings 25823 is generic symbol, it cannot be used as escape character. *Note 25824 `.ascii': Ascii. 25825 25826``dw EXPRESSION[,EXPRESSION...]'' 25827``defw EXPRESSION[,EXPRESSION...]'' 25828 For each EXPRESSION the value is stored in two bytes, ignoring 25829 overflow. 25830 25831``d24 EXPRESSION[,EXPRESSION...]'' 25832``def24 EXPRESSION[,EXPRESSION...]'' 25833 For each EXPRESSION the value is stored in three bytes, ignoring 25834 overflow. 25835 25836``d32 EXPRESSION[,EXPRESSION...]'' 25837``def32 EXPRESSION[,EXPRESSION...]'' 25838 For each EXPRESSION the value is stored in four bytes, ignoring 25839 overflow. 25840 25841``ds COUNT[, VALUE]'' 25842``defs COUNT[, VALUE]'' 25843 Fill COUNT bytes in the object file with VALUE, if VALUE is 25844 omitted it defaults to zero. 25845 25846``SYMBOL defl EXPRESSION'' 25847 The `defl' directive is like `.set' but with different syntax. 25848 *Note `.set': Set. It set the value of SYMBOL to EXPRESSION. 25849 Symbols defined with `defl' are not protected from redefinition. 25850 25851``SYMBOL equ EXPRESSION'' 25852 The `equ' directive is like `.equiv' but with different syntax. 25853 *Note `.equiv': Equiv. It set the value of SYMBOL to EXPRESSION. 25854 It is an error if SYMBOL is already defined. Symbols defined with 25855 `equ' are not protected from redefinition. 25856 25857``psect NAME'' 25858 A synonym for `.section', no second argument should be given. 25859 *Note `.section': Section. 25860 25861``xdef SYMBOL'' 25862 A synonym for `.global', make SYMBOL is visible to linker. *Note 25863 `.global': Global. 25864 25865``xref NAME'' 25866 A synonym for `.extern' (*Note `.extern': Extern.). 25867 25868 25869 25870File: as.info, Node: Z80 Opcodes, Prev: Z80 Directives, Up: Z80-Dependent 25871 258729.56.5 Opcodes 25873-------------- 25874 25875In line with common practice, Z80 mnemonics are used for the Z80, Z80N, 25876Z180, eZ80, Ascii R800 and the GameBoy Z80. 25877 25878 In many instructions it is possible to use one of the half index 25879registers (`ixl',`ixh',`iyl',`iyh') in stead of an 8-bit general 25880purpose register. This yields instructions that are documented on the 25881eZ80 and the R800, undocumented on the Z80 and unsupported on the Z180. 25882Similarly `in f,(c)' is documented on the R800, undocumented on the Z80 25883and unsupported on the Z180 and the eZ80. 25884 25885 The assembler also supports the following undocumented 25886Z80-instructions, that have not been adopted in any other instruction 25887set: 25888`out (c),0' 25889 Sends zero to the port pointed to by register `C'. 25890 25891`sli M' 25892 Equivalent to `M = (M<<1)+1', the operand M can be any operand 25893 that is valid for `sla'. One can use `sll' as a synonym for `sli'. 25894 25895`OP (ix+D), R' 25896 This is equivalent to 25897 25898 ld R, (ix+D) 25899 OP R 25900 ld (ix+D), R 25901 25902 The operation `OP' may be any of `res B,', `set B,', `rl', `rlc', 25903 `rr', `rrc', `sla', `sli', `sra' and `srl', and the register `R' 25904 may be any of `a', `b', `c', `d', `e', `h' and `l'. 25905 25906`OP (iy+D), R' 25907 As above, but with `iy' instead of `ix'. 25908 25909 The web site at `http://www.z80.info' is a good starting place to 25910find more information on programming the Z80. 25911 25912 You may enable or disable any of these instructions for any target 25913CPU even this instruction is not supported by any real CPU of this type. 25914Useful for custom CPU cores. 25915 25916 25917File: as.info, Node: Z8000-Dependent, Prev: Z80-Dependent, Up: Machine Dependencies 25918 259199.57 Z8000 Dependent Features 25920============================= 25921 25922 The Z8000 as supports both members of the Z8000 family: the 25923unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with 2592424 bit addresses. 25925 25926 When the assembler is in unsegmented mode (specified with the 25927`unsegm' directive), an address takes up one word (16 bit) sized 25928register. When the assembler is in segmented mode (specified with the 25929`segm' directive), a 24-bit address takes up a long (32 bit) register. 25930*Note Assembler Directives for the Z8000: Z8000 Directives, for a list 25931of other Z8000 specific assembler directives. 25932 25933* Menu: 25934 25935* Z8000 Options:: Command-line options for the Z8000 25936* Z8000 Syntax:: Assembler syntax for the Z8000 25937* Z8000 Directives:: Special directives for the Z8000 25938* Z8000 Opcodes:: Opcodes 25939 25940 25941File: as.info, Node: Z8000 Options, Next: Z8000 Syntax, Up: Z8000-Dependent 25942 259439.57.1 Options 25944-------------- 25945 25946`-z8001' 25947 Generate segmented code by default. 25948 25949`-z8002' 25950 Generate unsegmented code by default. 25951 25952 25953File: as.info, Node: Z8000 Syntax, Next: Z8000 Directives, Prev: Z8000 Options, Up: Z8000-Dependent 25954 259559.57.2 Syntax 25956------------- 25957 25958* Menu: 25959 25960* Z8000-Chars:: Special Characters 25961* Z8000-Regs:: Register Names 25962* Z8000-Addressing:: Addressing Modes 25963 25964 25965File: as.info, Node: Z8000-Chars, Next: Z8000-Regs, Up: Z8000 Syntax 25966 259679.57.2.1 Special Characters 25968........................... 25969 25970`!' is the line comment character. 25971 25972 If a `#' appears as the first character of a line then the whole 25973line is treated as a comment, but in this case the line could also be a 25974logical line number directive (*note Comments::) or a preprocessor 25975control command (*note Preprocessing::). 25976 25977 You can use `;' instead of a newline to separate statements. 25978 25979 25980File: as.info, Node: Z8000-Regs, Next: Z8000-Addressing, Prev: Z8000-Chars, Up: Z8000 Syntax 25981 259829.57.2.2 Register Names 25983....................... 25984 25985The Z8000 has sixteen 16 bit registers, numbered 0 to 15. You can refer 25986to different sized groups of registers by register number, with the 25987prefix `r' for 16 bit registers, `rr' for 32 bit registers and `rq' for 2598864 bit registers. You can also refer to the contents of the first 25989eight (of the sixteen 16 bit registers) by bytes. They are named `rlN' 25990and `rhN'. 25991 25992_byte registers_ 25993 rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3 25994 rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7 25995 25996_word registers_ 25997 r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 25998 25999_long word registers_ 26000 rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14 26001 26002_quad word registers_ 26003 rq0 rq4 rq8 rq12 26004 26005 26006File: as.info, Node: Z8000-Addressing, Prev: Z8000-Regs, Up: Z8000 Syntax 26007 260089.57.2.3 Addressing Modes 26009......................... 26010 26011as understands the following addressing modes for the Z8000: 26012 26013`rlN' 26014`rhN' 26015`rN' 26016`rrN' 26017`rqN' 26018 Register direct: 8bit, 16bit, 32bit, and 64bit registers. 26019 26020`@rN' 26021`@rrN' 26022 Indirect register: @rrN in segmented mode, @rN in unsegmented 26023 mode. 26024 26025`ADDR' 26026 Direct: the 16 bit or 24 bit address (depending on whether the 26027 assembler is in segmented or unsegmented mode) of the operand is 26028 in the instruction. 26029 26030`address(rN)' 26031 Indexed: the 16 or 24 bit address is added to the 16 bit register 26032 to produce the final address in memory of the operand. 26033 26034`rN(#IMM)' 26035`rrN(#IMM)' 26036 Base Address: the 16 or 24 bit register is added to the 16 bit sign 26037 extended immediate displacement to produce the final address in 26038 memory of the operand. 26039 26040`rN(rM)' 26041`rrN(rM)' 26042 Base Index: the 16 or 24 bit register rN or rrN is added to the 26043 sign extended 16 bit index register rM to produce the final 26044 address in memory of the operand. 26045 26046`#XX' 26047 Immediate data XX. 26048 26049 26050File: as.info, Node: Z8000 Directives, Next: Z8000 Opcodes, Prev: Z8000 Syntax, Up: Z8000-Dependent 26051 260529.57.3 Assembler Directives for the Z8000 26053----------------------------------------- 26054 26055The Z8000 port of as includes additional assembler directives, for 26056compatibility with other Z8000 assemblers. These do not begin with `.' 26057(unlike the ordinary as directives). 26058 26059`segm' 26060`.z8001' 26061 Generate code for the segmented Z8001. 26062 26063`unsegm' 26064`.z8002' 26065 Generate code for the unsegmented Z8002. 26066 26067`name' 26068 Synonym for `.file' 26069 26070`global' 26071 Synonym for `.global' 26072 26073`wval' 26074 Synonym for `.word' 26075 26076`lval' 26077 Synonym for `.long' 26078 26079`bval' 26080 Synonym for `.byte' 26081 26082`sval' 26083 Assemble a string. `sval' expects one string literal, delimited by 26084 single quotes. It assembles each byte of the string into 26085 consecutive addresses. You can use the escape sequence `%XX' 26086 (where XX represents a two-digit hexadecimal number) to represent 26087 the character whose ASCII value is XX. Use this feature to 26088 describe single quote and other characters that may not appear in 26089 string literals as themselves. For example, the C statement 26090 `char *a = "he said \"it's 50% off\"";' is represented in Z8000 26091 assembly language (shown with the assembler output in hex at the 26092 left) as 26093 26094 68652073 sval 'he said %22it%27s 50%25 off%22%00' 26095 61696420 26096 22697427 26097 73203530 26098 25206F66 26099 662200 26100 26101`rsect' 26102 synonym for `.section' 26103 26104`block' 26105 synonym for `.space' 26106 26107`even' 26108 special case of `.align'; aligns output to even byte boundary. 26109 26110 26111File: as.info, Node: Z8000 Opcodes, Prev: Z8000 Directives, Up: Z8000-Dependent 26112 261139.57.4 Opcodes 26114-------------- 26115 26116For detailed information on the Z8000 machine instruction set, see 26117`Z8000 Technical Manual'. 26118 26119 The following table summarizes the opcodes and their arguments: 26120 26121 rs 16 bit source register 26122 rd 16 bit destination register 26123 rbs 8 bit source register 26124 rbd 8 bit destination register 26125 rrs 32 bit source register 26126 rrd 32 bit destination register 26127 rqs 64 bit source register 26128 rqd 64 bit destination register 26129 addr 16/24 bit address 26130 imm immediate data 26131 26132 adc rd,rs clrb addr cpsir @rd,@rs,rr,cc 26133 adcb rbd,rbs clrb addr(rd) cpsirb @rd,@rs,rr,cc 26134 add rd,@rs clrb rbd dab rbd 26135 add rd,addr com @rd dbjnz rbd,disp7 26136 add rd,addr(rs) com addr dec @rd,imm4m1 26137 add rd,imm16 com addr(rd) dec addr(rd),imm4m1 26138 add rd,rs com rd dec addr,imm4m1 26139 addb rbd,@rs comb @rd dec rd,imm4m1 26140 addb rbd,addr comb addr decb @rd,imm4m1 26141 addb rbd,addr(rs) comb addr(rd) decb addr(rd),imm4m1 26142 addb rbd,imm8 comb rbd decb addr,imm4m1 26143 addb rbd,rbs comflg flags decb rbd,imm4m1 26144 addl rrd,@rs cp @rd,imm16 di i2 26145 addl rrd,addr cp addr(rd),imm16 div rrd,@rs 26146 addl rrd,addr(rs) cp addr,imm16 div rrd,addr 26147 addl rrd,imm32 cp rd,@rs div rrd,addr(rs) 26148 addl rrd,rrs cp rd,addr div rrd,imm16 26149 and rd,@rs cp rd,addr(rs) div rrd,rs 26150 and rd,addr cp rd,imm16 divl rqd,@rs 26151 and rd,addr(rs) cp rd,rs divl rqd,addr 26152 and rd,imm16 cpb @rd,imm8 divl rqd,addr(rs) 26153 and rd,rs cpb addr(rd),imm8 divl rqd,imm32 26154 andb rbd,@rs cpb addr,imm8 divl rqd,rrs 26155 andb rbd,addr cpb rbd,@rs djnz rd,disp7 26156 andb rbd,addr(rs) cpb rbd,addr ei i2 26157 andb rbd,imm8 cpb rbd,addr(rs) ex rd,@rs 26158 andb rbd,rbs cpb rbd,imm8 ex rd,addr 26159 bit @rd,imm4 cpb rbd,rbs ex rd,addr(rs) 26160 bit addr(rd),imm4 cpd rd,@rs,rr,cc ex rd,rs 26161 bit addr,imm4 cpdb rbd,@rs,rr,cc exb rbd,@rs 26162 bit rd,imm4 cpdr rd,@rs,rr,cc exb rbd,addr 26163 bit rd,rs cpdrb rbd,@rs,rr,cc exb rbd,addr(rs) 26164 bitb @rd,imm4 cpi rd,@rs,rr,cc exb rbd,rbs 26165 bitb addr(rd),imm4 cpib rbd,@rs,rr,cc ext0e imm8 26166 bitb addr,imm4 cpir rd,@rs,rr,cc ext0f imm8 26167 bitb rbd,imm4 cpirb rbd,@rs,rr,cc ext8e imm8 26168 bitb rbd,rs cpl rrd,@rs ext8f imm8 26169 bpt cpl rrd,addr exts rrd 26170 call @rd cpl rrd,addr(rs) extsb rd 26171 call addr cpl rrd,imm32 extsl rqd 26172 call addr(rd) cpl rrd,rrs halt 26173 calr disp12 cpsd @rd,@rs,rr,cc in rd,@rs 26174 clr @rd cpsdb @rd,@rs,rr,cc in rd,imm16 26175 clr addr cpsdr @rd,@rs,rr,cc inb rbd,@rs 26176 clr addr(rd) cpsdrb @rd,@rs,rr,cc inb rbd,imm16 26177 clr rd cpsi @rd,@rs,rr,cc inc @rd,imm4m1 26178 clrb @rd cpsib @rd,@rs,rr,cc inc addr(rd),imm4m1 26179 inc addr,imm4m1 ldb rbd,rs(rx) mult rrd,addr(rs) 26180 inc rd,imm4m1 ldb rd(imm16),rbs mult rrd,imm16 26181 incb @rd,imm4m1 ldb rd(rx),rbs mult rrd,rs 26182 incb addr(rd),imm4m1 ldctl ctrl,rs multl rqd,@rs 26183 incb addr,imm4m1 ldctl rd,ctrl multl rqd,addr 26184 incb rbd,imm4m1 ldd @rs,@rd,rr multl rqd,addr(rs) 26185 ind @rd,@rs,ra lddb @rs,@rd,rr multl rqd,imm32 26186 indb @rd,@rs,rba lddr @rs,@rd,rr multl rqd,rrs 26187 inib @rd,@rs,ra lddrb @rs,@rd,rr neg @rd 26188 inibr @rd,@rs,ra ldi @rd,@rs,rr neg addr 26189 iret ldib @rd,@rs,rr neg addr(rd) 26190 jp cc,@rd ldir @rd,@rs,rr neg rd 26191 jp cc,addr ldirb @rd,@rs,rr negb @rd 26192 jp cc,addr(rd) ldk rd,imm4 negb addr 26193 jr cc,disp8 ldl @rd,rrs negb addr(rd) 26194 ld @rd,imm16 ldl addr(rd),rrs negb rbd 26195 ld @rd,rs ldl addr,rrs nop 26196 ld addr(rd),imm16 ldl rd(imm16),rrs or rd,@rs 26197 ld addr(rd),rs ldl rd(rx),rrs or rd,addr 26198 ld addr,imm16 ldl rrd,@rs or rd,addr(rs) 26199 ld addr,rs ldl rrd,addr or rd,imm16 26200 ld rd(imm16),rs ldl rrd,addr(rs) or rd,rs 26201 ld rd(rx),rs ldl rrd,imm32 orb rbd,@rs 26202 ld rd,@rs ldl rrd,rrs orb rbd,addr 26203 ld rd,addr ldl rrd,rs(imm16) orb rbd,addr(rs) 26204 ld rd,addr(rs) ldl rrd,rs(rx) orb rbd,imm8 26205 ld rd,imm16 ldm @rd,rs,n orb rbd,rbs 26206 ld rd,rs ldm addr(rd),rs,n out @rd,rs 26207 ld rd,rs(imm16) ldm addr,rs,n out imm16,rs 26208 ld rd,rs(rx) ldm rd,@rs,n outb @rd,rbs 26209 lda rd,addr ldm rd,addr(rs),n outb imm16,rbs 26210 lda rd,addr(rs) ldm rd,addr,n outd @rd,@rs,ra 26211 lda rd,rs(imm16) ldps @rs outdb @rd,@rs,rba 26212 lda rd,rs(rx) ldps addr outib @rd,@rs,ra 26213 ldar rd,disp16 ldps addr(rs) outibr @rd,@rs,ra 26214 ldb @rd,imm8 ldr disp16,rs pop @rd,@rs 26215 ldb @rd,rbs ldr rd,disp16 pop addr(rd),@rs 26216 ldb addr(rd),imm8 ldrb disp16,rbs pop addr,@rs 26217 ldb addr(rd),rbs ldrb rbd,disp16 pop rd,@rs 26218 ldb addr,imm8 ldrl disp16,rrs popl @rd,@rs 26219 ldb addr,rbs ldrl rrd,disp16 popl addr(rd),@rs 26220 ldb rbd,@rs mbit popl addr,@rs 26221 ldb rbd,addr mreq rd popl rrd,@rs 26222 ldb rbd,addr(rs) mres push @rd,@rs 26223 ldb rbd,imm8 mset push @rd,addr 26224 ldb rbd,rbs mult rrd,@rs push @rd,addr(rs) 26225 ldb rbd,rs(imm16) mult rrd,addr push @rd,imm16 26226 push @rd,rs set addr,imm4 subl rrd,imm32 26227 pushl @rd,@rs set rd,imm4 subl rrd,rrs 26228 pushl @rd,addr set rd,rs tcc cc,rd 26229 pushl @rd,addr(rs) setb @rd,imm4 tccb cc,rbd 26230 pushl @rd,rrs setb addr(rd),imm4 test @rd 26231 res @rd,imm4 setb addr,imm4 test addr 26232 res addr(rd),imm4 setb rbd,imm4 test addr(rd) 26233 res addr,imm4 setb rbd,rs test rd 26234 res rd,imm4 setflg imm4 testb @rd 26235 res rd,rs sinb rbd,imm16 testb addr 26236 resb @rd,imm4 sinb rd,imm16 testb addr(rd) 26237 resb addr(rd),imm4 sind @rd,@rs,ra testb rbd 26238 resb addr,imm4 sindb @rd,@rs,rba testl @rd 26239 resb rbd,imm4 sinib @rd,@rs,ra testl addr 26240 resb rbd,rs sinibr @rd,@rs,ra testl addr(rd) 26241 resflg imm4 sla rd,imm8 testl rrd 26242 ret cc slab rbd,imm8 trdb @rd,@rs,rba 26243 rl rd,imm1or2 slal rrd,imm8 trdrb @rd,@rs,rba 26244 rlb rbd,imm1or2 sll rd,imm8 trib @rd,@rs,rbr 26245 rlc rd,imm1or2 sllb rbd,imm8 trirb @rd,@rs,rbr 26246 rlcb rbd,imm1or2 slll rrd,imm8 trtdrb @ra,@rb,rbr 26247 rldb rbb,rba sout imm16,rs trtib @ra,@rb,rr 26248 rr rd,imm1or2 soutb imm16,rbs trtirb @ra,@rb,rbr 26249 rrb rbd,imm1or2 soutd @rd,@rs,ra trtrb @ra,@rb,rbr 26250 rrc rd,imm1or2 soutdb @rd,@rs,rba tset @rd 26251 rrcb rbd,imm1or2 soutib @rd,@rs,ra tset addr 26252 rrdb rbb,rba soutibr @rd,@rs,ra tset addr(rd) 26253 rsvd36 sra rd,imm8 tset rd 26254 rsvd38 srab rbd,imm8 tsetb @rd 26255 rsvd78 sral rrd,imm8 tsetb addr 26256 rsvd7e srl rd,imm8 tsetb addr(rd) 26257 rsvd9d srlb rbd,imm8 tsetb rbd 26258 rsvd9f srll rrd,imm8 xor rd,@rs 26259 rsvdb9 sub rd,@rs xor rd,addr 26260 rsvdbf sub rd,addr xor rd,addr(rs) 26261 sbc rd,rs sub rd,addr(rs) xor rd,imm16 26262 sbcb rbd,rbs sub rd,imm16 xor rd,rs 26263 sc imm8 sub rd,rs xorb rbd,@rs 26264 sda rd,rs subb rbd,@rs xorb rbd,addr 26265 sdab rbd,rs subb rbd,addr xorb rbd,addr(rs) 26266 sdal rrd,rs subb rbd,addr(rs) xorb rbd,imm8 26267 sdl rd,rs subb rbd,imm8 xorb rbd,rbs 26268 sdlb rbd,rs subb rbd,rbs xorb rbd,rbs 26269 sdll rrd,rs subl rrd,@rs 26270 set @rd,imm4 subl rrd,addr 26271 set addr(rd),imm4 subl rrd,addr(rs) 26272 26273 26274File: as.info, Node: Reporting Bugs, Next: Acknowledgements, Prev: Machine Dependencies, Up: Top 26275 2627610 Reporting Bugs 26277***************** 26278 26279Your bug reports play an essential role in making `as' reliable. 26280 26281 Reporting a bug may help you by bringing a solution to your problem, 26282or it may not. But in any case the principal function of a bug report 26283is to help the entire community by making the next version of `as' work 26284better. Bug reports are your contribution to the maintenance of `as'. 26285 26286 In order for a bug report to serve its purpose, you must include the 26287information that enables us to fix the bug. 26288 26289* Menu: 26290 26291* Bug Criteria:: Have you found a bug? 26292* Bug Reporting:: How to report bugs 26293 26294 26295File: as.info, Node: Bug Criteria, Next: Bug Reporting, Up: Reporting Bugs 26296 2629710.1 Have You Found a Bug? 26298========================== 26299 26300If you are not sure whether you have found a bug, here are some 26301guidelines: 26302 26303 * If the assembler gets a fatal signal, for any input whatever, that 26304 is a `as' bug. Reliable assemblers never crash. 26305 26306 * If `as' produces an error message for valid input, that is a bug. 26307 26308 * If `as' does not produce an error message for invalid input, that 26309 is a bug. However, you should note that your idea of "invalid 26310 input" might be our idea of "an extension" or "support for 26311 traditional practice". 26312 26313 * If you are an experienced user of assemblers, your suggestions for 26314 improvement of `as' are welcome in any case. 26315 26316 26317File: as.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Reporting Bugs 26318 2631910.2 How to Report Bugs 26320======================= 26321 26322A number of companies and individuals offer support for GNU products. 26323If you obtained `as' from a support organization, we recommend you 26324contact that organization first. 26325 26326 You can find contact information for many support companies and 26327individuals in the file `etc/SERVICE' in the GNU Emacs distribution. 26328 26329 In any event, we also recommend that you send bug reports for `as' 26330to `http://www.NetBSD.org/support/send-pr.html'. 26331 26332 The fundamental principle of reporting bugs usefully is this: 26333*report all the facts*. If you are not sure whether to state a fact or 26334leave it out, state it! 26335 26336 Often people omit facts because they think they know what causes the 26337problem and assume that some details do not matter. Thus, you might 26338assume that the name of a symbol you use in an example does not matter. 26339Well, probably it does not, but one cannot be sure. Perhaps the bug 26340is a stray memory reference which happens to fetch from the location 26341where that name is stored in memory; perhaps, if the name were 26342different, the contents of that location would fool the assembler into 26343doing the right thing despite the bug. Play it safe and give a 26344specific, complete example. That is the easiest thing for you to do, 26345and the most helpful. 26346 26347 Keep in mind that the purpose of a bug report is to enable us to fix 26348the bug if it is new to us. Therefore, always write your bug reports 26349on the assumption that the bug has not been reported previously. 26350 26351 Sometimes people give a few sketchy facts and ask, "Does this ring a 26352bell?" This cannot help us fix a bug, so it is basically useless. We 26353respond by asking for enough details to enable us to investigate. You 26354might as well expedite matters by sending them to begin with. 26355 26356 To enable us to fix the bug, you should include all these things: 26357 26358 * The version of `as'. `as' announces it if you start it with the 26359 `--version' argument. 26360 26361 Without this, we will not know whether there is any point in 26362 looking for the bug in the current version of `as'. 26363 26364 * Any patches you may have applied to the `as' source. 26365 26366 * The type of machine you are using, and the operating system name 26367 and version number. 26368 26369 * What compiler (and its version) was used to compile `as'--e.g. 26370 "`gcc-2.7'". 26371 26372 * The command arguments you gave the assembler to assemble your 26373 example and observe the bug. To guarantee you will not omit 26374 something important, list them all. A copy of the Makefile (or 26375 the output from make) is sufficient. 26376 26377 If we were to try to guess the arguments, we would probably guess 26378 wrong and then we might not encounter the bug. 26379 26380 * A complete input file that will reproduce the bug. If the bug is 26381 observed when the assembler is invoked via a compiler, send the 26382 assembler source, not the high level language source. Most 26383 compilers will produce the assembler source when run with the `-S' 26384 option. If you are using `gcc', use the options `-v 26385 --save-temps'; this will save the assembler source in a file with 26386 an extension of `.s', and also show you exactly how `as' is being 26387 run. 26388 26389 * A description of what behavior you observe that you believe is 26390 incorrect. For example, "It gets a fatal signal." 26391 26392 Of course, if the bug is that `as' gets a fatal signal, then we 26393 will certainly notice it. But if the bug is incorrect output, we 26394 might not notice unless it is glaringly wrong. You might as well 26395 not give us a chance to make a mistake. 26396 26397 Even if the problem you experience is a fatal signal, you should 26398 still say so explicitly. Suppose something strange is going on, 26399 such as, your copy of `as' is out of sync, or you have encountered 26400 a bug in the C library on your system. (This has happened!) Your 26401 copy might crash and ours would not. If you told us to expect a 26402 crash, then when ours fails to crash, we would know that the bug 26403 was not happening for us. If you had not told us to expect a 26404 crash, then we would not be able to draw any conclusion from our 26405 observations. 26406 26407 * If you wish to suggest changes to the `as' source, send us context 26408 diffs, as generated by `diff' with the `-u', `-c', or `-p' option. 26409 Always send diffs from the old file to the new file. If you even 26410 discuss something in the `as' source, refer to it by context, not 26411 by line number. 26412 26413 The line numbers in our development sources will not match those 26414 in your sources. Your line numbers would convey no useful 26415 information to us. 26416 26417 Here are some things that are not necessary: 26418 26419 * A description of the envelope of the bug. 26420 26421 Often people who encounter a bug spend a lot of time investigating 26422 which changes to the input file will make the bug go away and which 26423 changes will not affect it. 26424 26425 This is often time consuming and not very useful, because the way 26426 we will find the bug is by running a single example under the 26427 debugger with breakpoints, not by pure deduction from a series of 26428 examples. We recommend that you save your time for something else. 26429 26430 Of course, if you can find a simpler example to report _instead_ 26431 of the original one, that is a convenience for us. Errors in the 26432 output will be easier to spot, running under the debugger will take 26433 less time, and so on. 26434 26435 However, simplification is not vital; if you do not want to do 26436 this, report the bug anyway and send us the entire test case you 26437 used. 26438 26439 * A patch for the bug. 26440 26441 A patch for the bug does help us if it is a good one. But do not 26442 omit the necessary information, such as the test case, on the 26443 assumption that a patch is all we need. We might see problems 26444 with your patch and decide to fix the problem another way, or we 26445 might not understand it at all. 26446 26447 Sometimes with a program as complicated as `as' it is very hard to 26448 construct an example that will make the program follow a certain 26449 path through the code. If you do not send us the example, we will 26450 not be able to construct one, so we will not be able to verify 26451 that the bug is fixed. 26452 26453 And if we cannot understand what bug you are trying to fix, or why 26454 your patch should be an improvement, we will not install it. A 26455 test case will help us to understand. 26456 26457 * A guess about what the bug is or what it depends on. 26458 26459 Such guesses are usually wrong. Even we cannot guess right about 26460 such things without first using the debugger to find the facts. 26461 26462 26463File: as.info, Node: Acknowledgements, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top 26464 2646511 Acknowledgements 26466******************* 26467 26468If you have contributed to GAS and your name isn't listed here, it is 26469not meant as a slight. We just don't know about it. Send mail to the 26470maintainer, and we'll correct the situation. Currently the maintainer 26471is Nick Clifton (email address `nickc@redhat.com'). 26472 26473 Dean Elsner wrote the original GNU assembler for the VAX.(1) 26474 26475 Jay Fenlason maintained GAS for a while, adding support for 26476GDB-specific debug information and the 68k series machines, most of the 26477preprocessing pass, and extensive changes in `messages.c', 26478`input-file.c', `write.c'. 26479 26480 K. Richard Pixley maintained GAS for a while, adding various 26481enhancements and many bug fixes, including merging support for several 26482processors, breaking GAS up to handle multiple object file format back 26483ends (including heavy rewrite, testing, an integration of the coff and 26484b.out back ends), adding configuration including heavy testing and 26485verification of cross assemblers and file splits and renaming, 26486converted GAS to strictly ANSI C including full prototypes, added 26487support for m680[34]0 and cpu32, did considerable work on i960 26488including a COFF port (including considerable amounts of reverse 26489engineering), a SPARC opcode file rewrite, DECstation, rs6000, and 26490hp300hpux host ports, updated "know" assertions and made them work, 26491much other reorganization, cleanup, and lint. 26492 26493 Ken Raeburn wrote the high-level BFD interface code to replace most 26494of the code in format-specific I/O modules. 26495 26496 The original VMS support was contributed by David L. Kashtan. Eric 26497Youngdale has done much work with it since. 26498 26499 The Intel 80386 machine description was written by Eliot Dresselhaus. 26500 26501 Minh Tran-Le at IntelliCorp contributed some AIX 386 support. 26502 26503 The Motorola 88k machine description was contributed by Devon Bowen 26504of Buffalo University and Torbjorn Granlund of the Swedish Institute of 26505Computer Science. 26506 26507 Keith Knowles at the Open Software Foundation wrote the original 26508MIPS back end (`tc-mips.c', `tc-mips.h'), and contributed Rose format 26509support (which hasn't been merged in yet). Ralph Campbell worked with 26510the MIPS code to support a.out format. 26511 26512 Support for the Zilog Z8k and Renesas H8/300 processors (tc-z8k, 26513tc-h8300), and IEEE 695 object file format (obj-ieee), was written by 26514Steve Chamberlain of Cygnus Support. Steve also modified the COFF back 26515end to use BFD for some low-level operations, for use with the H8/300 26516and AMD 29k targets. 26517 26518 John Gilmore built the AMD 29000 support, added `.include' support, 26519and simplified the configuration of which versions accept which 26520directives. He updated the 68k machine description so that Motorola's 26521opcodes always produced fixed-size instructions (e.g., `jsr'), while 26522synthetic instructions remained shrinkable (`jbsr'). John fixed many 26523bugs, including true tested cross-compilation support, and one bug in 26524relaxation that took a week and required the proverbial one-bit fix. 26525 26526 Ian Lance Taylor of Cygnus Support merged the Motorola and MIT 26527syntax for the 68k, completed support for some COFF targets (68k, i386 26528SVR3, and SCO Unix), added support for MIPS ECOFF and ELF targets, 26529wrote the initial RS/6000 and PowerPC assembler, and made a few other 26530minor patches. 26531 26532 Steve Chamberlain made GAS able to generate listings. 26533 26534 Hewlett-Packard contributed support for the HP9000/300. 26535 26536 Jeff Law wrote GAS and BFD support for the native HPPA object format 26537(SOM) along with a fairly extensive HPPA testsuite (for both SOM and 26538ELF object formats). This work was supported by both the Center for 26539Software Science at the University of Utah and Cygnus Support. 26540 26541 Support for ELF format files has been worked on by Mark Eichin of 26542Cygnus Support (original, incomplete implementation for SPARC), Pete 26543Hoogenboom and Jeff Law at the University of Utah (HPPA mainly), 26544Michael Meissner of the Open Software Foundation (i386 mainly), and Ken 26545Raeburn of Cygnus Support (sparc, and some initial 64-bit support). 26546 26547 Linas Vepstas added GAS support for the ESA/390 "IBM 370" 26548architecture. 26549 26550 Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote 26551GAS and BFD support for openVMS/Alpha. 26552 26553 Timothy Wall, Michael Hayes, and Greg Smart contributed to the 26554various tic* flavors. 26555 26556 David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from 26557Tensilica, Inc. added support for Xtensa processors. 26558 26559 Several engineers at Cygnus Support have also provided many small 26560bug fixes and configuration enhancements. 26561 26562 Jon Beniston added support for the Lattice Mico32 architecture. 26563 26564 Many others have contributed large or small bugfixes and 26565enhancements. If you have contributed significant work and are not 26566mentioned on this list, and want to be, let us know. Some of the 26567history has been lost; we are not intentionally leaving anyone out. 26568 26569 ---------- Footnotes ---------- 26570 26571 (1) Any more details? 26572 26573 26574File: as.info, Node: GNU Free Documentation License, Next: AS Index, Prev: Acknowledgements, Up: Top 26575 26576Appendix A GNU Free Documentation License 26577***************************************** 26578 26579 Version 1.3, 3 November 2008 26580 26581 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 26582 `http://fsf.org/' 26583 26584 Everyone is permitted to copy and distribute verbatim copies 26585 of this license document, but changing it is not allowed. 26586 26587 0. PREAMBLE 26588 26589 The purpose of this License is to make a manual, textbook, or other 26590 functional and useful document "free" in the sense of freedom: to 26591 assure everyone the effective freedom to copy and redistribute it, 26592 with or without modifying it, either commercially or 26593 noncommercially. Secondarily, this License preserves for the 26594 author and publisher a way to get credit for their work, while not 26595 being considered responsible for modifications made by others. 26596 26597 This License is a kind of "copyleft", which means that derivative 26598 works of the document must themselves be free in the same sense. 26599 It complements the GNU General Public License, which is a copyleft 26600 license designed for free software. 26601 26602 We have designed this License in order to use it for manuals for 26603 free software, because free software needs free documentation: a 26604 free program should come with manuals providing the same freedoms 26605 that the software does. But this License is not limited to 26606 software manuals; it can be used for any textual work, regardless 26607 of subject matter or whether it is published as a printed book. 26608 We recommend this License principally for works whose purpose is 26609 instruction or reference. 26610 26611 1. APPLICABILITY AND DEFINITIONS 26612 26613 This License applies to any manual or other work, in any medium, 26614 that contains a notice placed by the copyright holder saying it 26615 can be distributed under the terms of this License. Such a notice 26616 grants a world-wide, royalty-free license, unlimited in duration, 26617 to use that work under the conditions stated herein. The 26618 "Document", below, refers to any such manual or work. Any member 26619 of the public is a licensee, and is addressed as "you". You 26620 accept the license if you copy, modify or distribute the work in a 26621 way requiring permission under copyright law. 26622 26623 A "Modified Version" of the Document means any work containing the 26624 Document or a portion of it, either copied verbatim, or with 26625 modifications and/or translated into another language. 26626 26627 A "Secondary Section" is a named appendix or a front-matter section 26628 of the Document that deals exclusively with the relationship of the 26629 publishers or authors of the Document to the Document's overall 26630 subject (or to related matters) and contains nothing that could 26631 fall directly within that overall subject. (Thus, if the Document 26632 is in part a textbook of mathematics, a Secondary Section may not 26633 explain any mathematics.) The relationship could be a matter of 26634 historical connection with the subject or with related matters, or 26635 of legal, commercial, philosophical, ethical or political position 26636 regarding them. 26637 26638 The "Invariant Sections" are certain Secondary Sections whose 26639 titles are designated, as being those of Invariant Sections, in 26640 the notice that says that the Document is released under this 26641 License. If a section does not fit the above definition of 26642 Secondary then it is not allowed to be designated as Invariant. 26643 The Document may contain zero Invariant Sections. If the Document 26644 does not identify any Invariant Sections then there are none. 26645 26646 The "Cover Texts" are certain short passages of text that are 26647 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 26648 that says that the Document is released under this License. A 26649 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 26650 be at most 25 words. 26651 26652 A "Transparent" copy of the Document means a machine-readable copy, 26653 represented in a format whose specification is available to the 26654 general public, that is suitable for revising the document 26655 straightforwardly with generic text editors or (for images 26656 composed of pixels) generic paint programs or (for drawings) some 26657 widely available drawing editor, and that is suitable for input to 26658 text formatters or for automatic translation to a variety of 26659 formats suitable for input to text formatters. A copy made in an 26660 otherwise Transparent file format whose markup, or absence of 26661 markup, has been arranged to thwart or discourage subsequent 26662 modification by readers is not Transparent. An image format is 26663 not Transparent if used for any substantial amount of text. A 26664 copy that is not "Transparent" is called "Opaque". 26665 26666 Examples of suitable formats for Transparent copies include plain 26667 ASCII without markup, Texinfo input format, LaTeX input format, 26668 SGML or XML using a publicly available DTD, and 26669 standard-conforming simple HTML, PostScript or PDF designed for 26670 human modification. Examples of transparent image formats include 26671 PNG, XCF and JPG. Opaque formats include proprietary formats that 26672 can be read and edited only by proprietary word processors, SGML or 26673 XML for which the DTD and/or processing tools are not generally 26674 available, and the machine-generated HTML, PostScript or PDF 26675 produced by some word processors for output purposes only. 26676 26677 The "Title Page" means, for a printed book, the title page itself, 26678 plus such following pages as are needed to hold, legibly, the 26679 material this License requires to appear in the title page. For 26680 works in formats which do not have any title page as such, "Title 26681 Page" means the text near the most prominent appearance of the 26682 work's title, preceding the beginning of the body of the text. 26683 26684 The "publisher" means any person or entity that distributes copies 26685 of the Document to the public. 26686 26687 A section "Entitled XYZ" means a named subunit of the Document 26688 whose title either is precisely XYZ or contains XYZ in parentheses 26689 following text that translates XYZ in another language. (Here XYZ 26690 stands for a specific section name mentioned below, such as 26691 "Acknowledgements", "Dedications", "Endorsements", or "History".) 26692 To "Preserve the Title" of such a section when you modify the 26693 Document means that it remains a section "Entitled XYZ" according 26694 to this definition. 26695 26696 The Document may include Warranty Disclaimers next to the notice 26697 which states that this License applies to the Document. These 26698 Warranty Disclaimers are considered to be included by reference in 26699 this License, but only as regards disclaiming warranties: any other 26700 implication that these Warranty Disclaimers may have is void and 26701 has no effect on the meaning of this License. 26702 26703 2. VERBATIM COPYING 26704 26705 You may copy and distribute the Document in any medium, either 26706 commercially or noncommercially, provided that this License, the 26707 copyright notices, and the license notice saying this License 26708 applies to the Document are reproduced in all copies, and that you 26709 add no other conditions whatsoever to those of this License. You 26710 may not use technical measures to obstruct or control the reading 26711 or further copying of the copies you make or distribute. However, 26712 you may accept compensation in exchange for copies. If you 26713 distribute a large enough number of copies you must also follow 26714 the conditions in section 3. 26715 26716 You may also lend copies, under the same conditions stated above, 26717 and you may publicly display copies. 26718 26719 3. COPYING IN QUANTITY 26720 26721 If you publish printed copies (or copies in media that commonly 26722 have printed covers) of the Document, numbering more than 100, and 26723 the Document's license notice requires Cover Texts, you must 26724 enclose the copies in covers that carry, clearly and legibly, all 26725 these Cover Texts: Front-Cover Texts on the front cover, and 26726 Back-Cover Texts on the back cover. Both covers must also clearly 26727 and legibly identify you as the publisher of these copies. The 26728 front cover must present the full title with all words of the 26729 title equally prominent and visible. You may add other material 26730 on the covers in addition. Copying with changes limited to the 26731 covers, as long as they preserve the title of the Document and 26732 satisfy these conditions, can be treated as verbatim copying in 26733 other respects. 26734 26735 If the required texts for either cover are too voluminous to fit 26736 legibly, you should put the first ones listed (as many as fit 26737 reasonably) on the actual cover, and continue the rest onto 26738 adjacent pages. 26739 26740 If you publish or distribute Opaque copies of the Document 26741 numbering more than 100, you must either include a 26742 machine-readable Transparent copy along with each Opaque copy, or 26743 state in or with each Opaque copy a computer-network location from 26744 which the general network-using public has access to download 26745 using public-standard network protocols a complete Transparent 26746 copy of the Document, free of added material. If you use the 26747 latter option, you must take reasonably prudent steps, when you 26748 begin distribution of Opaque copies in quantity, to ensure that 26749 this Transparent copy will remain thus accessible at the stated 26750 location until at least one year after the last time you 26751 distribute an Opaque copy (directly or through your agents or 26752 retailers) of that edition to the public. 26753 26754 It is requested, but not required, that you contact the authors of 26755 the Document well before redistributing any large number of 26756 copies, to give them a chance to provide you with an updated 26757 version of the Document. 26758 26759 4. MODIFICATIONS 26760 26761 You may copy and distribute a Modified Version of the Document 26762 under the conditions of sections 2 and 3 above, provided that you 26763 release the Modified Version under precisely this License, with 26764 the Modified Version filling the role of the Document, thus 26765 licensing distribution and modification of the Modified Version to 26766 whoever possesses a copy of it. In addition, you must do these 26767 things in the Modified Version: 26768 26769 A. Use in the Title Page (and on the covers, if any) a title 26770 distinct from that of the Document, and from those of 26771 previous versions (which should, if there were any, be listed 26772 in the History section of the Document). You may use the 26773 same title as a previous version if the original publisher of 26774 that version gives permission. 26775 26776 B. List on the Title Page, as authors, one or more persons or 26777 entities responsible for authorship of the modifications in 26778 the Modified Version, together with at least five of the 26779 principal authors of the Document (all of its principal 26780 authors, if it has fewer than five), unless they release you 26781 from this requirement. 26782 26783 C. State on the Title page the name of the publisher of the 26784 Modified Version, as the publisher. 26785 26786 D. Preserve all the copyright notices of the Document. 26787 26788 E. Add an appropriate copyright notice for your modifications 26789 adjacent to the other copyright notices. 26790 26791 F. Include, immediately after the copyright notices, a license 26792 notice giving the public permission to use the Modified 26793 Version under the terms of this License, in the form shown in 26794 the Addendum below. 26795 26796 G. Preserve in that license notice the full lists of Invariant 26797 Sections and required Cover Texts given in the Document's 26798 license notice. 26799 26800 H. Include an unaltered copy of this License. 26801 26802 I. Preserve the section Entitled "History", Preserve its Title, 26803 and add to it an item stating at least the title, year, new 26804 authors, and publisher of the Modified Version as given on 26805 the Title Page. If there is no section Entitled "History" in 26806 the Document, create one stating the title, year, authors, 26807 and publisher of the Document as given on its Title Page, 26808 then add an item describing the Modified Version as stated in 26809 the previous sentence. 26810 26811 J. Preserve the network location, if any, given in the Document 26812 for public access to a Transparent copy of the Document, and 26813 likewise the network locations given in the Document for 26814 previous versions it was based on. These may be placed in 26815 the "History" section. You may omit a network location for a 26816 work that was published at least four years before the 26817 Document itself, or if the original publisher of the version 26818 it refers to gives permission. 26819 26820 K. For any section Entitled "Acknowledgements" or "Dedications", 26821 Preserve the Title of the section, and preserve in the 26822 section all the substance and tone of each of the contributor 26823 acknowledgements and/or dedications given therein. 26824 26825 L. Preserve all the Invariant Sections of the Document, 26826 unaltered in their text and in their titles. Section numbers 26827 or the equivalent are not considered part of the section 26828 titles. 26829 26830 M. Delete any section Entitled "Endorsements". Such a section 26831 may not be included in the Modified Version. 26832 26833 N. Do not retitle any existing section to be Entitled 26834 "Endorsements" or to conflict in title with any Invariant 26835 Section. 26836 26837 O. Preserve any Warranty Disclaimers. 26838 26839 If the Modified Version includes new front-matter sections or 26840 appendices that qualify as Secondary Sections and contain no 26841 material copied from the Document, you may at your option 26842 designate some or all of these sections as invariant. To do this, 26843 add their titles to the list of Invariant Sections in the Modified 26844 Version's license notice. These titles must be distinct from any 26845 other section titles. 26846 26847 You may add a section Entitled "Endorsements", provided it contains 26848 nothing but endorsements of your Modified Version by various 26849 parties--for example, statements of peer review or that the text 26850 has been approved by an organization as the authoritative 26851 definition of a standard. 26852 26853 You may add a passage of up to five words as a Front-Cover Text, 26854 and a passage of up to 25 words as a Back-Cover Text, to the end 26855 of the list of Cover Texts in the Modified Version. Only one 26856 passage of Front-Cover Text and one of Back-Cover Text may be 26857 added by (or through arrangements made by) any one entity. If the 26858 Document already includes a cover text for the same cover, 26859 previously added by you or by arrangement made by the same entity 26860 you are acting on behalf of, you may not add another; but you may 26861 replace the old one, on explicit permission from the previous 26862 publisher that added the old one. 26863 26864 The author(s) and publisher(s) of the Document do not by this 26865 License give permission to use their names for publicity for or to 26866 assert or imply endorsement of any Modified Version. 26867 26868 5. COMBINING DOCUMENTS 26869 26870 You may combine the Document with other documents released under 26871 this License, under the terms defined in section 4 above for 26872 modified versions, provided that you include in the combination 26873 all of the Invariant Sections of all of the original documents, 26874 unmodified, and list them all as Invariant Sections of your 26875 combined work in its license notice, and that you preserve all 26876 their Warranty Disclaimers. 26877 26878 The combined work need only contain one copy of this License, and 26879 multiple identical Invariant Sections may be replaced with a single 26880 copy. If there are multiple Invariant Sections with the same name 26881 but different contents, make the title of each such section unique 26882 by adding at the end of it, in parentheses, the name of the 26883 original author or publisher of that section if known, or else a 26884 unique number. Make the same adjustment to the section titles in 26885 the list of Invariant Sections in the license notice of the 26886 combined work. 26887 26888 In the combination, you must combine any sections Entitled 26889 "History" in the various original documents, forming one section 26890 Entitled "History"; likewise combine any sections Entitled 26891 "Acknowledgements", and any sections Entitled "Dedications". You 26892 must delete all sections Entitled "Endorsements." 26893 26894 6. COLLECTIONS OF DOCUMENTS 26895 26896 You may make a collection consisting of the Document and other 26897 documents released under this License, and replace the individual 26898 copies of this License in the various documents with a single copy 26899 that is included in the collection, provided that you follow the 26900 rules of this License for verbatim copying of each of the 26901 documents in all other respects. 26902 26903 You may extract a single document from such a collection, and 26904 distribute it individually under this License, provided you insert 26905 a copy of this License into the extracted document, and follow 26906 this License in all other respects regarding verbatim copying of 26907 that document. 26908 26909 7. AGGREGATION WITH INDEPENDENT WORKS 26910 26911 A compilation of the Document or its derivatives with other 26912 separate and independent documents or works, in or on a volume of 26913 a storage or distribution medium, is called an "aggregate" if the 26914 copyright resulting from the compilation is not used to limit the 26915 legal rights of the compilation's users beyond what the individual 26916 works permit. When the Document is included in an aggregate, this 26917 License does not apply to the other works in the aggregate which 26918 are not themselves derivative works of the Document. 26919 26920 If the Cover Text requirement of section 3 is applicable to these 26921 copies of the Document, then if the Document is less than one half 26922 of the entire aggregate, the Document's Cover Texts may be placed 26923 on covers that bracket the Document within the aggregate, or the 26924 electronic equivalent of covers if the Document is in electronic 26925 form. Otherwise they must appear on printed covers that bracket 26926 the whole aggregate. 26927 26928 8. TRANSLATION 26929 26930 Translation is considered a kind of modification, so you may 26931 distribute translations of the Document under the terms of section 26932 4. Replacing Invariant Sections with translations requires special 26933 permission from their copyright holders, but you may include 26934 translations of some or all Invariant Sections in addition to the 26935 original versions of these Invariant Sections. You may include a 26936 translation of this License, and all the license notices in the 26937 Document, and any Warranty Disclaimers, provided that you also 26938 include the original English version of this License and the 26939 original versions of those notices and disclaimers. In case of a 26940 disagreement between the translation and the original version of 26941 this License or a notice or disclaimer, the original version will 26942 prevail. 26943 26944 If a section in the Document is Entitled "Acknowledgements", 26945 "Dedications", or "History", the requirement (section 4) to 26946 Preserve its Title (section 1) will typically require changing the 26947 actual title. 26948 26949 9. TERMINATION 26950 26951 You may not copy, modify, sublicense, or distribute the Document 26952 except as expressly provided under this License. Any attempt 26953 otherwise to copy, modify, sublicense, or distribute it is void, 26954 and will automatically terminate your rights under this License. 26955 26956 However, if you cease all violation of this License, then your 26957 license from a particular copyright holder is reinstated (a) 26958 provisionally, unless and until the copyright holder explicitly 26959 and finally terminates your license, and (b) permanently, if the 26960 copyright holder fails to notify you of the violation by some 26961 reasonable means prior to 60 days after the cessation. 26962 26963 Moreover, your license from a particular copyright holder is 26964 reinstated permanently if the copyright holder notifies you of the 26965 violation by some reasonable means, this is the first time you have 26966 received notice of violation of this License (for any work) from 26967 that copyright holder, and you cure the violation prior to 30 days 26968 after your receipt of the notice. 26969 26970 Termination of your rights under this section does not terminate 26971 the licenses of parties who have received copies or rights from 26972 you under this License. If your rights have been terminated and 26973 not permanently reinstated, receipt of a copy of some or all of 26974 the same material does not give you any rights to use it. 26975 26976 10. FUTURE REVISIONS OF THIS LICENSE 26977 26978 The Free Software Foundation may publish new, revised versions of 26979 the GNU Free Documentation License from time to time. Such new 26980 versions will be similar in spirit to the present version, but may 26981 differ in detail to address new problems or concerns. See 26982 `http://www.gnu.org/copyleft/'. 26983 26984 Each version of the License is given a distinguishing version 26985 number. If the Document specifies that a particular numbered 26986 version of this License "or any later version" applies to it, you 26987 have the option of following the terms and conditions either of 26988 that specified version or of any later version that has been 26989 published (not as a draft) by the Free Software Foundation. If 26990 the Document does not specify a version number of this License, 26991 you may choose any version ever published (not as a draft) by the 26992 Free Software Foundation. If the Document specifies that a proxy 26993 can decide which future versions of this License can be used, that 26994 proxy's public statement of acceptance of a version permanently 26995 authorizes you to choose that version for the Document. 26996 26997 11. RELICENSING 26998 26999 "Massive Multiauthor Collaboration Site" (or "MMC Site") means any 27000 World Wide Web server that publishes copyrightable works and also 27001 provides prominent facilities for anybody to edit those works. A 27002 public wiki that anybody can edit is an example of such a server. 27003 A "Massive Multiauthor Collaboration" (or "MMC") contained in the 27004 site means any set of copyrightable works thus published on the MMC 27005 site. 27006 27007 "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 27008 license published by Creative Commons Corporation, a not-for-profit 27009 corporation with a principal place of business in San Francisco, 27010 California, as well as future copyleft versions of that license 27011 published by that same organization. 27012 27013 "Incorporate" means to publish or republish a Document, in whole or 27014 in part, as part of another Document. 27015 27016 An MMC is "eligible for relicensing" if it is licensed under this 27017 License, and if all works that were first published under this 27018 License somewhere other than this MMC, and subsequently 27019 incorporated in whole or in part into the MMC, (1) had no cover 27020 texts or invariant sections, and (2) were thus incorporated prior 27021 to November 1, 2008. 27022 27023 The operator of an MMC Site may republish an MMC contained in the 27024 site under CC-BY-SA on the same site at any time before August 1, 27025 2009, provided the MMC is eligible for relicensing. 27026 27027 27028ADDENDUM: How to use this License for your documents 27029==================================================== 27030 27031To use this License in a document you have written, include a copy of 27032the License in the document and put the following copyright and license 27033notices just after the title page: 27034 27035 Copyright (C) YEAR YOUR NAME. 27036 Permission is granted to copy, distribute and/or modify this document 27037 under the terms of the GNU Free Documentation License, Version 1.3 27038 or any later version published by the Free Software Foundation; 27039 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 27040 Texts. A copy of the license is included in the section entitled ``GNU 27041 Free Documentation License''. 27042 27043 If you have Invariant Sections, Front-Cover Texts and Back-Cover 27044Texts, replace the "with...Texts." line with this: 27045 27046 with the Invariant Sections being LIST THEIR TITLES, with 27047 the Front-Cover Texts being LIST, and with the Back-Cover Texts 27048 being LIST. 27049 27050 If you have Invariant Sections without Cover Texts, or some other 27051combination of the three, merge those two alternatives to suit the 27052situation. 27053 27054 If your document contains nontrivial examples of program code, we 27055recommend releasing these examples in parallel under your choice of 27056free software license, such as the GNU General Public License, to 27057permit their use in free software. 27058 27059 27060File: as.info, Node: AS Index, Prev: GNU Free Documentation License, Up: Top 27061 27062AS Index 27063******** 27064 27065[index] 27066* Menu: 27067 27068* \" (doublequote character): Strings. (line 43) 27069* \\ (\ character): Strings. (line 40) 27070* \b (backspace character): Strings. (line 15) 27071* \DDD (octal character code): Strings. (line 30) 27072* \f (formfeed character): Strings. (line 18) 27073* \n (newline character): Strings. (line 21) 27074* \r (carriage return character): Strings. (line 24) 27075* \t (tab): Strings. (line 27) 27076* \XD... (hex character code): Strings. (line 36) 27077* #: Comments. (line 33) 27078* #APP: Preprocessing. (line 28) 27079* #NO_APP: Preprocessing. (line 28) 27080* $ in symbol names <1>: SH-Chars. (line 15) 27081* $ in symbol names <2>: D10V-Chars. (line 53) 27082* $ in symbol names <3>: Meta-Chars. (line 10) 27083* $ in symbol names: D30V-Chars. (line 70) 27084* $a: ARM Mapping Symbols. 27085 (line 9) 27086* $acos math builtin, TIC54X: TIC54X-Builtins. (line 10) 27087* $asin math builtin, TIC54X: TIC54X-Builtins. (line 13) 27088* $atan math builtin, TIC54X: TIC54X-Builtins. (line 16) 27089* $atan2 math builtin, TIC54X: TIC54X-Builtins. (line 19) 27090* $ceil math builtin, TIC54X: TIC54X-Builtins. (line 22) 27091* $cos math builtin, TIC54X: TIC54X-Builtins. (line 28) 27092* $cosh math builtin, TIC54X: TIC54X-Builtins. (line 25) 27093* $cvf math builtin, TIC54X: TIC54X-Builtins. (line 31) 27094* $cvi math builtin, TIC54X: TIC54X-Builtins. (line 34) 27095* $d <1>: AArch64 Mapping Symbols. 27096 (line 12) 27097* $d: ARM Mapping Symbols. 27098 (line 15) 27099* $exp math builtin, TIC54X: TIC54X-Builtins. (line 37) 27100* $fabs math builtin, TIC54X: TIC54X-Builtins. (line 40) 27101* $firstch subsym builtin, TIC54X: TIC54X-Macros. (line 26) 27102* $floor math builtin, TIC54X: TIC54X-Builtins. (line 43) 27103* $fmod math builtin, TIC54X: TIC54X-Builtins. (line 47) 27104* $int math builtin, TIC54X: TIC54X-Builtins. (line 50) 27105* $iscons subsym builtin, TIC54X: TIC54X-Macros. (line 43) 27106* $isdefed subsym builtin, TIC54X: TIC54X-Macros. (line 34) 27107* $ismember subsym builtin, TIC54X: TIC54X-Macros. (line 38) 27108* $isname subsym builtin, TIC54X: TIC54X-Macros. (line 47) 27109* $isreg subsym builtin, TIC54X: TIC54X-Macros. (line 50) 27110* $lastch subsym builtin, TIC54X: TIC54X-Macros. (line 30) 27111* $ldexp math builtin, TIC54X: TIC54X-Builtins. (line 53) 27112* $log math builtin, TIC54X: TIC54X-Builtins. (line 59) 27113* $log10 math builtin, TIC54X: TIC54X-Builtins. (line 56) 27114* $max math builtin, TIC54X: TIC54X-Builtins. (line 62) 27115* $min math builtin, TIC54X: TIC54X-Builtins. (line 65) 27116* $pow math builtin, TIC54X: TIC54X-Builtins. (line 68) 27117* $round math builtin, TIC54X: TIC54X-Builtins. (line 71) 27118* $sgn math builtin, TIC54X: TIC54X-Builtins. (line 74) 27119* $sin math builtin, TIC54X: TIC54X-Builtins. (line 77) 27120* $sinh math builtin, TIC54X: TIC54X-Builtins. (line 80) 27121* $sqrt math builtin, TIC54X: TIC54X-Builtins. (line 83) 27122* $structacc subsym builtin, TIC54X: TIC54X-Macros. (line 57) 27123* $structsz subsym builtin, TIC54X: TIC54X-Macros. (line 54) 27124* $symcmp subsym builtin, TIC54X: TIC54X-Macros. (line 23) 27125* $symlen subsym builtin, TIC54X: TIC54X-Macros. (line 20) 27126* $t: ARM Mapping Symbols. 27127 (line 12) 27128* $tan math builtin, TIC54X: TIC54X-Builtins. (line 86) 27129* $tanh math builtin, TIC54X: TIC54X-Builtins. (line 89) 27130* $trunc math builtin, TIC54X: TIC54X-Builtins. (line 92) 27131* $x: AArch64 Mapping Symbols. 27132 (line 9) 27133* %gp: RX-Modifiers. (line 6) 27134* %gpreg: RX-Modifiers. (line 22) 27135* %pidreg: RX-Modifiers. (line 25) 27136* -+ option, VAX/VMS: VAX-Opts. (line 71) 27137* --: Command Line. (line 10) 27138* --32 option, i386: i386-Options. (line 8) 27139* --32 option, x86-64: i386-Options. (line 8) 27140* --64 option, i386: i386-Options. (line 8) 27141* --64 option, x86-64: i386-Options. (line 8) 27142* --abi-call0: Xtensa Options. (line 83) 27143* --abi-windowed: Xtensa Options. (line 83) 27144* --absolute-literals: Xtensa Options. (line 40) 27145* --allow-reg-prefix: SH Options. (line 9) 27146* --alternate: alternate. (line 6) 27147* --auto-litpools: Xtensa Options. (line 23) 27148* --base-size-default-16: M68K-Opts. (line 65) 27149* --base-size-default-32: M68K-Opts. (line 65) 27150* --big: SH Options. (line 9) 27151* --bitwise-or option, M680x0: M68K-Opts. (line 58) 27152* --compress-debug-sections= option: Overview. (line 378) 27153* --disp-size-default-16: M68K-Opts. (line 74) 27154* --disp-size-default-32: M68K-Opts. (line 74) 27155* --divide option, i386: i386-Options. (line 25) 27156* --dsp: SH Options. (line 9) 27157* --emulation=crisaout command-line option, CRIS: CRIS-Opts. (line 9) 27158* --emulation=criself command-line option, CRIS: CRIS-Opts. (line 9) 27159* --enforce-aligned-data: Sparc-Aligned-Data. (line 11) 27160* --fatal-warnings: W. (line 16) 27161* --fdpic: SH Options. (line 31) 27162* --fix-v4bx command-line option, ARM: ARM Options. (line 382) 27163* --fixed-special-register-names command-line option, MMIX: MMIX-Opts. 27164 (line 8) 27165* --force-long-branches: M68HC11-Opts. (line 82) 27166* --generate-example: M68HC11-Opts. (line 99) 27167* --globalize-symbols command-line option, MMIX: MMIX-Opts. (line 12) 27168* --gnu-syntax command-line option, MMIX: MMIX-Opts. (line 16) 27169* --linker-allocated-gregs command-line option, MMIX: MMIX-Opts. 27170 (line 67) 27171* --listing-cont-lines: listing. (line 34) 27172* --listing-lhs-width: listing. (line 16) 27173* --listing-lhs-width2: listing. (line 21) 27174* --listing-rhs-width: listing. (line 28) 27175* --little: SH Options. (line 9) 27176* --longcalls: Xtensa Options. (line 54) 27177* --march=ARCHITECTURE command-line option, CRIS: CRIS-Opts. (line 34) 27178* --MD: MD. (line 6) 27179* --mul-bug-abort command-line option, CRIS: CRIS-Opts. (line 62) 27180* --no-absolute-literals: Xtensa Options. (line 40) 27181* --no-auto-litpools: Xtensa Options. (line 23) 27182* --no-expand command-line option, MMIX: MMIX-Opts. (line 31) 27183* --no-longcalls: Xtensa Options. (line 54) 27184* --no-merge-gregs command-line option, MMIX: MMIX-Opts. (line 36) 27185* --no-mul-bug-abort command-line option, CRIS: CRIS-Opts. (line 62) 27186* --no-pad-sections: no-pad-sections. (line 6) 27187* --no-predefined-syms command-line option, MMIX: MMIX-Opts. (line 22) 27188* --no-pushj-stubs command-line option, MMIX: MMIX-Opts. (line 54) 27189* --no-stubs command-line option, MMIX: MMIX-Opts. (line 54) 27190* --no-target-align: Xtensa Options. (line 47) 27191* --no-text-section-literals: Xtensa Options. (line 7) 27192* --no-trampolines: Xtensa Options. (line 75) 27193* --no-transform: Xtensa Options. (line 63) 27194* --no-underscore command-line option, CRIS: CRIS-Opts. (line 15) 27195* --no-warn: W. (line 11) 27196* --pcrel: M68K-Opts. (line 86) 27197* --pic command-line option, CRIS: CRIS-Opts. (line 27) 27198* --print-insn-syntax <1>: M68HC11-Opts. (line 88) 27199* --print-insn-syntax: XGATE-Opts. (line 25) 27200* --print-opcodes <1>: M68HC11-Opts. (line 92) 27201* --print-opcodes: XGATE-Opts. (line 29) 27202* --register-prefix-optional option, M680x0: M68K-Opts. (line 45) 27203* --relax: SH Options. (line 9) 27204* --relax command-line option, MMIX: MMIX-Opts. (line 19) 27205* --rename-section: Xtensa Options. (line 71) 27206* --renesas: SH Options. (line 9) 27207* --sectname-subst: Section. (line 81) 27208* --short-branches: M68HC11-Opts. (line 67) 27209* --small: SH Options. (line 9) 27210* --statistics: statistics. (line 6) 27211* --strict-direct-mode: M68HC11-Opts. (line 57) 27212* --target-align: Xtensa Options. (line 47) 27213* --text-section-literals: Xtensa Options. (line 7) 27214* --traditional-format: traditional-format. (line 6) 27215* --trampolines: Xtensa Options. (line 75) 27216* --transform: Xtensa Options. (line 63) 27217* --underscore command-line option, CRIS: CRIS-Opts. (line 15) 27218* --warn: W. (line 19) 27219* --x32 option, i386: i386-Options. (line 8) 27220* --x32 option, x86-64: i386-Options. (line 8) 27221* --xgate-ramoffset: M68HC11-Opts. (line 36) 27222* -1 option, VAX/VMS: VAX-Opts. (line 77) 27223* -32addr command-line option, Alpha: Alpha Options. (line 57) 27224* -a: a. (line 6) 27225* -ac: a. (line 6) 27226* -ad: a. (line 6) 27227* -ag: a. (line 6) 27228* -ah: a. (line 6) 27229* -al: a. (line 6) 27230* -Aleon: Sparc-Opts. (line 25) 27231* -an: a. (line 6) 27232* -as: a. (line 6) 27233* -Asparc: Sparc-Opts. (line 25) 27234* -Asparcfmaf: Sparc-Opts. (line 25) 27235* -Asparcima: Sparc-Opts. (line 25) 27236* -Asparclet: Sparc-Opts. (line 25) 27237* -Asparclite: Sparc-Opts. (line 25) 27238* -Asparcvis: Sparc-Opts. (line 25) 27239* -Asparcvis2: Sparc-Opts. (line 25) 27240* -Asparcvis3: Sparc-Opts. (line 25) 27241* -Asparcvis3r: Sparc-Opts. (line 25) 27242* -Av6: Sparc-Opts. (line 25) 27243* -Av7: Sparc-Opts. (line 25) 27244* -Av8: Sparc-Opts. (line 25) 27245* -Av9: Sparc-Opts. (line 25) 27246* -Av9a: Sparc-Opts. (line 25) 27247* -Av9b: Sparc-Opts. (line 25) 27248* -Av9c: Sparc-Opts. (line 25) 27249* -Av9d: Sparc-Opts. (line 25) 27250* -Av9e: Sparc-Opts. (line 25) 27251* -Av9m: Sparc-Opts. (line 25) 27252* -Av9v: Sparc-Opts. (line 25) 27253* -big option, M32R: M32R-Opts. (line 35) 27254* -colonless command-line option, Z80: Z80 Options. (line 34) 27255* -D: D. (line 6) 27256* -D, ignored on VAX: VAX-Opts. (line 11) 27257* -d, VAX option: VAX-Opts. (line 16) 27258* -eabi= command-line option, ARM: ARM Options. (line 358) 27259* -EB command-line option, AArch64: AArch64 Options. (line 6) 27260* -EB command-line option, ARC: ARC Options. (line 85) 27261* -EB command-line option, ARM: ARM Options. (line 363) 27262* -EB command-line option, BPF: BPF Options. (line 6) 27263* -EB option (MIPS): MIPS Options. (line 13) 27264* -EB option, M32R: M32R-Opts. (line 39) 27265* -EB option, TILE-Gx: TILE-Gx Options. (line 11) 27266* -EL command-line option, AArch64: AArch64 Options. (line 10) 27267* -EL command-line option, ARC: ARC Options. (line 89) 27268* -EL command-line option, ARM: ARM Options. (line 374) 27269* -EL command-line option, BPF: BPF Options. (line 10) 27270* -EL option (MIPS): MIPS Options. (line 13) 27271* -EL option, M32R: M32R-Opts. (line 32) 27272* -EL option, TILE-Gx: TILE-Gx Options. (line 11) 27273* -f: f. (line 6) 27274* -F command-line option, Alpha: Alpha Options. (line 57) 27275* -fno-pic option, RISC-V: RISC-V-Options. (line 12) 27276* -fp-d command-line option, Z80: Z80 Options. (line 45) 27277* -fp-s command-line option, Z80: Z80 Options. (line 41) 27278* -fpic option, RISC-V: RISC-V-Options. (line 8) 27279* -G command-line option, Alpha: Alpha Options. (line 53) 27280* -g command-line option, Alpha: Alpha Options. (line 47) 27281* -G option (MIPS): MIPS Options. (line 8) 27282* -h option, VAX/VMS: VAX-Opts. (line 45) 27283* -H option, VAX/VMS: VAX-Opts. (line 81) 27284* -I PATH: I. (line 6) 27285* -ignore-parallel-conflicts option, M32RX: M32R-Opts. (line 87) 27286* -Ip option, M32RX: M32R-Opts. (line 97) 27287* -J, ignored on VAX: VAX-Opts. (line 27) 27288* -K: K. (line 6) 27289* -k command-line option, ARM: ARM Options. (line 378) 27290* -KPIC option, M32R: M32R-Opts. (line 42) 27291* -KPIC option, MIPS: MIPS Options. (line 21) 27292* -L: L. (line 6) 27293* -l option, M680x0: M68K-Opts. (line 33) 27294* -little option, M32R: M32R-Opts. (line 27) 27295* -local-prefix command-line option, Z80: Z80 Options. (line 29) 27296* -M: M. (line 6) 27297* -m11/03: PDP-11-Options. (line 140) 27298* -m11/04: PDP-11-Options. (line 143) 27299* -m11/05: PDP-11-Options. (line 146) 27300* -m11/10: PDP-11-Options. (line 146) 27301* -m11/15: PDP-11-Options. (line 149) 27302* -m11/20: PDP-11-Options. (line 149) 27303* -m11/21: PDP-11-Options. (line 152) 27304* -m11/23: PDP-11-Options. (line 155) 27305* -m11/24: PDP-11-Options. (line 155) 27306* -m11/34: PDP-11-Options. (line 158) 27307* -m11/34a: PDP-11-Options. (line 161) 27308* -m11/35: PDP-11-Options. (line 164) 27309* -m11/40: PDP-11-Options. (line 164) 27310* -m11/44: PDP-11-Options. (line 167) 27311* -m11/45: PDP-11-Options. (line 170) 27312* -m11/50: PDP-11-Options. (line 170) 27313* -m11/53: PDP-11-Options. (line 173) 27314* -m11/55: PDP-11-Options. (line 170) 27315* -m11/60: PDP-11-Options. (line 176) 27316* -m11/70: PDP-11-Options. (line 170) 27317* -m11/73: PDP-11-Options. (line 173) 27318* -m11/83: PDP-11-Options. (line 173) 27319* -m11/84: PDP-11-Options. (line 173) 27320* -m11/93: PDP-11-Options. (line 173) 27321* -m11/94: PDP-11-Options. (line 173) 27322* -m16c option, M16C: M32C-Opts. (line 12) 27323* -m31 option, s390: s390 Options. (line 8) 27324* -m32 option, TILE-Gx: TILE-Gx Options. (line 8) 27325* -m32bit-doubles: RX-Opts. (line 9) 27326* -m32c option, M32C: M32C-Opts. (line 9) 27327* -m32r option, M32R: M32R-Opts. (line 21) 27328* -m32rx option, M32R2: M32R-Opts. (line 17) 27329* -m32rx option, M32RX: M32R-Opts. (line 9) 27330* -m4byte-align command-line option, V850: V850 Options. (line 90) 27331* -m64 option, s390: s390 Options. (line 8) 27332* -m64 option, TILE-Gx: TILE-Gx Options. (line 8) 27333* -m64bit-doubles: RX-Opts. (line 15) 27334* -m68000 and related options: M68K-Opts. (line 98) 27335* -m68hc11: M68HC11-Opts. (line 9) 27336* -m68hc12: M68HC11-Opts. (line 14) 27337* -m68hcs12: M68HC11-Opts. (line 21) 27338* -m8byte-align command-line option, V850: V850 Options. (line 86) 27339* -m[no-]68851 command-line option, M680x0: M68K-Opts. (line 21) 27340* -m[no-]68881 command-line option, M680x0: M68K-Opts. (line 21) 27341* -m[no-]div command-line option, M680x0: M68K-Opts. (line 21) 27342* -m[no-]emac command-line option, M680x0: M68K-Opts. (line 21) 27343* -m[no-]float command-line option, M680x0: M68K-Opts. (line 21) 27344* -m[no-]mac command-line option, M680x0: M68K-Opts. (line 21) 27345* -m[no-]usp command-line option, M680x0: M68K-Opts. (line 21) 27346* -mabi= command-line option, AArch64: AArch64 Options. (line 14) 27347* -mabi=ABI option, RISC-V: RISC-V-Options. (line 33) 27348* -madd-bnd-prefix option, i386: i386-Options. (line 163) 27349* -madd-bnd-prefix option, x86-64: i386-Options. (line 163) 27350* -malign-branch-boundary= option, i386: i386-Options. (line 209) 27351* -malign-branch-boundary= option, x86-64: i386-Options. (line 209) 27352* -malign-branch-prefix-size= option, i386: i386-Options. (line 224) 27353* -malign-branch-prefix-size= option, x86-64: i386-Options. (line 224) 27354* -malign-branch= option, i386: i386-Options. (line 216) 27355* -malign-branch= option, x86-64: i386-Options. (line 216) 27356* -mall: PDP-11-Options. (line 26) 27357* -mall-enabled command-line option, LM32: LM32 Options. (line 30) 27358* -mall-extensions: PDP-11-Options. (line 26) 27359* -mall-opcodes command-line option, AVR: AVR Options. (line 112) 27360* -mamd64 option, x86-64: i386-Options. (line 300) 27361* -mapcs-26 command-line option, ARM: ARM Options. (line 330) 27362* -mapcs-32 command-line option, ARM: ARM Options. (line 330) 27363* -mapcs-float command-line option, ARM: ARM Options. (line 344) 27364* -mapcs-reentrant command-line option, ARM: ARM Options. (line 349) 27365* -march-attr option, RISC-V: RISC-V-Options. (line 48) 27366* -march= command-line option, AArch64: AArch64 Options. (line 44) 27367* -march= command-line option, ARM: ARM Options. (line 86) 27368* -march= command-line option, M680x0: M68K-Opts. (line 8) 27369* -march= command-line option, TIC6X: TIC6X Options. (line 6) 27370* -march= command-line option, Z80: Z80 Options. (line 6) 27371* -march= option, i386: i386-Options. (line 32) 27372* -march= option, s390: s390 Options. (line 25) 27373* -march= option, x86-64: i386-Options. (line 32) 27374* -march=ISA option, RISC-V: RISC-V-Options. (line 15) 27375* -matpcs command-line option, ARM: ARM Options. (line 336) 27376* -mavxscalar= option, i386: i386-Options. (line 108) 27377* -mavxscalar= option, x86-64: i386-Options. (line 108) 27378* -mbarrel-shift-enabled command-line option, LM32: LM32 Options. 27379 (line 12) 27380* -mbig-endian: RX-Opts. (line 20) 27381* -mbig-endian option, RISC-V: RISC-V-Options. (line 72) 27382* -mbig-obj option, i386: i386-Options. (line 177) 27383* -mbig-obj option, x86-64: i386-Options. (line 177) 27384* -mbranches-within-32B-boundaries option, i386: i386-Options. 27385 (line 229) 27386* -mbranches-within-32B-boundaries option, x86-64: i386-Options. 27387 (line 229) 27388* -mbreak-enabled command-line option, LM32: LM32 Options. (line 27) 27389* -mccs command-line option, ARM: ARM Options. (line 391) 27390* -mcis: PDP-11-Options. (line 32) 27391* -mcode-density command-line option, ARC: ARC Options. (line 94) 27392* -mconstant-gp command-line option, IA-64: IA-64 Options. (line 6) 27393* -mCPU command-line option, Alpha: Alpha Options. (line 6) 27394* -mcpu option, cpu: TIC54X-Opts. (line 15) 27395* -mcpu=: RX-Opts. (line 75) 27396* -mcpu= command-line option, AArch64: AArch64 Options. (line 19) 27397* -mcpu= command-line option, ARM: ARM Options. (line 6) 27398* -mcpu= command-line option, Blackfin: Blackfin Options. (line 6) 27399* -mcpu= command-line option, M680x0: M68K-Opts. (line 14) 27400* -mcpu=CPU command-line option, ARC: ARC Options. (line 10) 27401* -mcsm: PDP-11-Options. (line 43) 27402* -mcsr-check option, RISC-V: RISC-V-Options. (line 60) 27403* -mdcache-enabled command-line option, LM32: LM32 Options. (line 24) 27404* -mdebug command-line option, Alpha: Alpha Options. (line 25) 27405* -mdivide-enabled command-line option, LM32: LM32 Options. (line 9) 27406* -mdollar-hex option, dollar-hex: S12Z Options. (line 17) 27407* -mdpfp command-line option, ARC: ARC Options. (line 109) 27408* -mdsbt command-line option, TIC6X: TIC6X Options. (line 13) 27409* -me option, stderr redirect: TIC54X-Opts. (line 20) 27410* -meis: PDP-11-Options. (line 46) 27411* -mepiphany command-line option, Epiphany: Epiphany Options. 27412 (line 9) 27413* -mepiphany16 command-line option, Epiphany: Epiphany Options. 27414 (line 13) 27415* -merrors-to-file option, stderr redirect: TIC54X-Opts. (line 20) 27416* -mesa option, s390: s390 Options. (line 17) 27417* -mevexlig= option, i386: i386-Options. (line 129) 27418* -mevexlig= option, x86-64: i386-Options. (line 129) 27419* -mevexrcig= option, i386: i386-Options. (line 290) 27420* -mevexrcig= option, x86-64: i386-Options. (line 290) 27421* -mevexwig= option, i386: i386-Options. (line 139) 27422* -mevexwig= option, x86-64: i386-Options. (line 139) 27423* -mf option, far-mode: TIC54X-Opts. (line 8) 27424* -mf11: PDP-11-Options. (line 122) 27425* -mfar-mode option, far-mode: TIC54X-Opts. (line 8) 27426* -mfdpic command-line option, Blackfin: Blackfin Options. (line 19) 27427* -mfence-as-lock-add= option, i386: i386-Options. (line 190) 27428* -mfence-as-lock-add= option, x86-64: i386-Options. (line 190) 27429* -mfis: PDP-11-Options. (line 51) 27430* -mfloat-abi= command-line option, ARM: ARM Options. (line 353) 27431* -mfp-11: PDP-11-Options. (line 56) 27432* -mfp16-format= command-line option: ARM Options. (line 291) 27433* -mfpp: PDP-11-Options. (line 56) 27434* -mfpu: PDP-11-Options. (line 56) 27435* -mfpu= command-line option, ARM: ARM Options. (line 268) 27436* -mfpuda command-line option, ARC: ARC Options. (line 112) 27437* -mgcc-abi: RX-Opts. (line 63) 27438* -mgcc-abi command-line option, V850: V850 Options. (line 79) 27439* -mgcc-isr command-line option, AVR: AVR Options. (line 133) 27440* -mhard-float command-line option, V850: V850 Options. (line 101) 27441* -micache-enabled command-line option, LM32: LM32 Options. (line 21) 27442* -mimplicit-it command-line option, ARM: ARM Options. (line 314) 27443* -mint-register: RX-Opts. (line 57) 27444* -mintel64 option, x86-64: i386-Options. (line 300) 27445* -mip2022 option, IP2K: IP2K-Opts. (line 14) 27446* -mip2022ext option, IP2022: IP2K-Opts. (line 9) 27447* -misa-spec=ISAspec option, RISC-V: RISC-V-Options. (line 21) 27448* -mj11: PDP-11-Options. (line 126) 27449* -mka11: PDP-11-Options. (line 92) 27450* -mkb11: PDP-11-Options. (line 95) 27451* -mkd11a: PDP-11-Options. (line 98) 27452* -mkd11b: PDP-11-Options. (line 101) 27453* -mkd11d: PDP-11-Options. (line 104) 27454* -mkd11e: PDP-11-Options. (line 107) 27455* -mkd11f: PDP-11-Options. (line 110) 27456* -mkd11h: PDP-11-Options. (line 110) 27457* -mkd11k: PDP-11-Options. (line 114) 27458* -mkd11q: PDP-11-Options. (line 110) 27459* -mkd11z: PDP-11-Options. (line 118) 27460* -mkev11: PDP-11-Options. (line 51) 27461* -mlfence-after-load= option, i386: i386-Options. (line 237) 27462* -mlfence-after-load= option, x86-64: i386-Options. (line 237) 27463* -mlfence-before-indirect-branch= option, i386: i386-Options. 27464 (line 244) 27465* -mlfence-before-indirect-branch= option, x86-64: i386-Options. 27466 (line 244) 27467* -mlfence-before-ret= option, i386: i386-Options. (line 267) 27468* -mlfence-before-ret= option, x86-64: i386-Options. (line 267) 27469* -mlimited-eis: PDP-11-Options. (line 64) 27470* -mlink-relax command-line option, AVR: AVR Options. (line 124) 27471* -mlittle-endian: RX-Opts. (line 26) 27472* -mlittle-endian option, RISC-V: RISC-V-Options. (line 69) 27473* -mlong <1>: M68HC11-Opts. (line 45) 27474* -mlong: XGATE-Opts. (line 13) 27475* -mlong-double <1>: M68HC11-Opts. (line 53) 27476* -mlong-double: XGATE-Opts. (line 21) 27477* -mm9s12x: M68HC11-Opts. (line 27) 27478* -mm9s12xg: M68HC11-Opts. (line 32) 27479* -mmcu= command-line option, AVR: AVR Options. (line 6) 27480* -mmfpt: PDP-11-Options. (line 70) 27481* -mmicrocode: PDP-11-Options. (line 83) 27482* -mmnemonic= option, i386: i386-Options. (line 146) 27483* -mmnemonic= option, x86-64: i386-Options. (line 146) 27484* -mmultiply-enabled command-line option, LM32: LM32 Options. 27485 (line 6) 27486* -mmutiproc: PDP-11-Options. (line 73) 27487* -mmxps: PDP-11-Options. (line 77) 27488* -mnaked-reg option, i386: i386-Options. (line 158) 27489* -mnaked-reg option, x86-64: i386-Options. (line 158) 27490* -mnan= command-line option, MIPS: MIPS Options. (line 452) 27491* -mno-allow-string-insns: RX-Opts. (line 82) 27492* -mno-arch-attr option, RISC-V: RISC-V-Options. (line 56) 27493* -mno-cis: PDP-11-Options. (line 32) 27494* -mno-csm: PDP-11-Options. (line 43) 27495* -mno-csr-check option, RISC-V: RISC-V-Options. (line 66) 27496* -mno-dollar-line-separator command line option, AVR: AVR Options. 27497 (line 136) 27498* -mno-dsbt command-line option, TIC6X: TIC6X Options. (line 13) 27499* -mno-eis: PDP-11-Options. (line 46) 27500* -mno-extensions: PDP-11-Options. (line 29) 27501* -mno-fdpic command-line option, Blackfin: Blackfin Options. 27502 (line 22) 27503* -mno-fis: PDP-11-Options. (line 51) 27504* -mno-fp-11: PDP-11-Options. (line 56) 27505* -mno-fpp: PDP-11-Options. (line 56) 27506* -mno-fpu: PDP-11-Options. (line 56) 27507* -mno-kev11: PDP-11-Options. (line 51) 27508* -mno-limited-eis: PDP-11-Options. (line 64) 27509* -mno-link-relax command-line option, AVR: AVR Options. (line 128) 27510* -mno-mfpt: PDP-11-Options. (line 70) 27511* -mno-microcode: PDP-11-Options. (line 83) 27512* -mno-mutiproc: PDP-11-Options. (line 73) 27513* -mno-mxps: PDP-11-Options. (line 77) 27514* -mno-pic: PDP-11-Options. (line 11) 27515* -mno-pic command-line option, TIC6X: TIC6X Options. (line 36) 27516* -mno-regnames option, s390: s390 Options. (line 51) 27517* -mno-relax option, RISC-V: RISC-V-Options. (line 45) 27518* -mno-skip-bug command-line option, AVR: AVR Options. (line 115) 27519* -mno-spl: PDP-11-Options. (line 80) 27520* -mno-sym32: MIPS Options. (line 360) 27521* -mno-verbose-error command-line option, AArch64: AArch64 Options. 27522 (line 66) 27523* -mno-wrap command-line option, AVR: AVR Options. (line 118) 27524* -mnopic command-line option, Blackfin: Blackfin Options. (line 22) 27525* -mnps400 command-line option, ARC: ARC Options. (line 103) 27526* -momit-lock-prefix= option, i386: i386-Options. (line 181) 27527* -momit-lock-prefix= option, x86-64: i386-Options. (line 181) 27528* -mpic: PDP-11-Options. (line 11) 27529* -mpic command-line option, TIC6X: TIC6X Options. (line 36) 27530* -mpid: RX-Opts. (line 50) 27531* -mpid= command-line option, TIC6X: TIC6X Options. (line 23) 27532* -mpriv-spec=PRIVspec option, RISC-V: RISC-V-Options. (line 27) 27533* -mreg-prefix=PREFIX option, reg-prefix: S12Z Options. (line 9) 27534* -mregnames option, s390: s390 Options. (line 48) 27535* -mrelax command-line option, ARC: ARC Options. (line 98) 27536* -mrelax command-line option, V850: V850 Options. (line 72) 27537* -mrelax option, RISC-V: RISC-V-Options. (line 41) 27538* -mrelax-relocations= option, i386: i386-Options. (line 199) 27539* -mrelax-relocations= option, x86-64: i386-Options. (line 199) 27540* -mrh850-abi command-line option, V850: V850 Options. (line 82) 27541* -mrmw command-line option, AVR: AVR Options. (line 121) 27542* -mrx-abi: RX-Opts. (line 69) 27543* -mshared option, i386: i386-Options. (line 168) 27544* -mshared option, x86-64: i386-Options. (line 168) 27545* -mshort <1>: XGATE-Opts. (line 8) 27546* -mshort: M68HC11-Opts. (line 40) 27547* -mshort-double <1>: M68HC11-Opts. (line 49) 27548* -mshort-double: XGATE-Opts. (line 17) 27549* -msign-extend-enabled command-line option, LM32: LM32 Options. 27550 (line 15) 27551* -msmall-data-limit: RX-Opts. (line 42) 27552* -msoft-float command-line option, V850: V850 Options. (line 95) 27553* -mspfp command-line option, ARC: ARC Options. (line 106) 27554* -mspl: PDP-11-Options. (line 80) 27555* -msse-check= option, i386: i386-Options. (line 98) 27556* -msse-check= option, x86-64: i386-Options. (line 98) 27557* -msse2avx option, i386: i386-Options. (line 90) 27558* -msse2avx option, x86-64: i386-Options. (line 90) 27559* -msym32: MIPS Options. (line 360) 27560* -msyntax= option, i386: i386-Options. (line 152) 27561* -msyntax= option, x86-64: i386-Options. (line 152) 27562* -mt11: PDP-11-Options. (line 130) 27563* -mthumb command-line option, ARM: ARM Options. (line 304) 27564* -mthumb-interwork command-line option, ARM: ARM Options. (line 309) 27565* -mtune= option, i386: i386-Options. (line 82) 27566* -mtune= option, x86-64: i386-Options. (line 82) 27567* -mtune=ARCH command-line option, Visium: Visium Options. (line 8) 27568* -muse-conventional-section-names: RX-Opts. (line 33) 27569* -muse-renesas-section-names: RX-Opts. (line 37) 27570* -muse-unaligned-vector-move option, i386: i386-Options. (line 94) 27571* -muse-unaligned-vector-move option, x86-64: i386-Options. (line 94) 27572* -muser-enabled command-line option, LM32: LM32 Options. (line 18) 27573* -mv850 command-line option, V850: V850 Options. (line 23) 27574* -mv850any command-line option, V850: V850 Options. (line 41) 27575* -mv850e command-line option, V850: V850 Options. (line 29) 27576* -mv850e1 command-line option, V850: V850 Options. (line 35) 27577* -mv850e2 command-line option, V850: V850 Options. (line 51) 27578* -mv850e2v3 command-line option, V850: V850 Options. (line 57) 27579* -mv850e2v4 command-line option, V850: V850 Options. (line 63) 27580* -mv850e3v5 command-line option, V850: V850 Options. (line 66) 27581* -mverbose-error command-line option, AArch64: AArch64 Options. 27582 (line 62) 27583* -mvexwig= option, i386: i386-Options. (line 119) 27584* -mvexwig= option, x86-64: i386-Options. (line 119) 27585* -mvxworks-pic option, MIPS: MIPS Options. (line 26) 27586* -mwarn-areg-zero option, s390: s390 Options. (line 54) 27587* -mwarn-deprecated command-line option, ARM: ARM Options. (line 386) 27588* -mwarn-syms command-line option, ARM: ARM Options. (line 394) 27589* -mx86-used-note= option, i386: i386-Options. (line 283) 27590* -mx86-used-note= option, x86-64: i386-Options. (line 283) 27591* -mzarch option, s390: s390 Options. (line 17) 27592* -N command-line option, CRIS: CRIS-Opts. (line 58) 27593* -nIp option, M32RX: M32R-Opts. (line 101) 27594* -no-bitinst, M32R2: M32R-Opts. (line 54) 27595* -no-ignore-parallel-conflicts option, M32RX: M32R-Opts. (line 93) 27596* -no-mdebug command-line option, Alpha: Alpha Options. (line 25) 27597* -no-parallel option, M32RX: M32R-Opts. (line 51) 27598* -no-warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. 27599 (line 79) 27600* -no-warn-unmatched-high option, M32R: M32R-Opts. (line 111) 27601* -nocpp ignored (MIPS): MIPS Options. (line 363) 27602* -noreplace command-line option, Alpha: Alpha Options. (line 40) 27603* -o: o. (line 6) 27604* -O option, i386: i386-Options. (line 306) 27605* -O option, M32RX: M32R-Opts. (line 59) 27606* -O option, x86-64: i386-Options. (line 306) 27607* -O0 option, i386: i386-Options. (line 306) 27608* -O0 option, x86-64: i386-Options. (line 306) 27609* -O1 option, i386: i386-Options. (line 306) 27610* -O1 option, x86-64: i386-Options. (line 306) 27611* -O2 option, i386: i386-Options. (line 306) 27612* -O2 option, x86-64: i386-Options. (line 306) 27613* -Os option, i386: i386-Options. (line 306) 27614* -Os option, x86-64: i386-Options. (line 306) 27615* -parallel option, M32RX: M32R-Opts. (line 46) 27616* -R: R. (line 6) 27617* -relax command-line option, Alpha: Alpha Options. (line 32) 27618* -replace command-line option, Alpha: Alpha Options. (line 40) 27619* -S, ignored on VAX: VAX-Opts. (line 11) 27620* -sdcc command-line option, Z80: Z80 Options. (line 38) 27621* -T, ignored on VAX: VAX-Opts. (line 11) 27622* -t, ignored on VAX: VAX-Opts. (line 36) 27623* -v: v. (line 6) 27624* -V, redundant on VAX: VAX-Opts. (line 22) 27625* -version: v. (line 6) 27626* -W: W. (line 11) 27627* -warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. 27628 (line 65) 27629* -warn-unmatched-high option, M32R: M32R-Opts. (line 105) 27630* -Wnp option, M32RX: M32R-Opts. (line 83) 27631* -Wnuh option, M32RX: M32R-Opts. (line 117) 27632* -Wp option, M32RX: M32R-Opts. (line 75) 27633* -wsigned_overflow command-line option, V850: V850 Options. (line 9) 27634* -Wuh option, M32RX: M32R-Opts. (line 114) 27635* -wunsigned_overflow command-line option, V850: V850 Options. 27636 (line 16) 27637* -x command-line option, MMIX: MMIX-Opts. (line 44) 27638* -z8001 command-line option, Z8000: Z8000 Options. (line 6) 27639* -z8002 command-line option, Z8000: Z8000 Options. (line 9) 27640* . (symbol): Dot. (line 6) 27641* .align directive, ARM: ARM Directives. (line 6) 27642* .align directive, TILE-Gx: TILE-Gx Directives. (line 6) 27643* .align directive, TILEPro: TILEPro Directives. (line 6) 27644* .allow_suspicious_bundles directive, TILE-Gx: TILE-Gx Directives. 27645 (line 10) 27646* .allow_suspicious_bundles directive, TILEPro: TILEPro Directives. 27647 (line 10) 27648* .arc_attribute directive, ARC: ARC Directives. (line 244) 27649* .arch directive, AArch64: AArch64 Directives. (line 6) 27650* .arch directive, ARM: ARM Directives. (line 13) 27651* .arch directive, TIC6X: TIC6X Directives. (line 10) 27652* .arch_extension directive, AArch64: AArch64 Directives. (line 13) 27653* .arch_extension directive, ARM: ARM Directives. (line 21) 27654* .arm directive, ARM: ARM Directives. (line 30) 27655* .assume directive, Z80: Z80 Directives. (line 12) 27656* .attribute directive, RISC-V: RISC-V-Directives. (line 126) 27657* .big directive, M32RX: M32R-Directives. (line 88) 27658* .bss directive, AArch64: AArch64 Directives. (line 22) 27659* .bss directive, ARM: ARM Directives. (line 33) 27660* .c6xabi_attribute directive, TIC6X: TIC6X Directives. (line 20) 27661* .cantunwind directive, ARM: ARM Directives. (line 36) 27662* .cantunwind directive, TIC6X: TIC6X Directives. (line 13) 27663* .cfi_b_key_frame directive, AArch64: AArch64 Directives. (line 100) 27664* .code directive, ARM: ARM Directives. (line 40) 27665* .cpu directive, AArch64: AArch64 Directives. (line 25) 27666* .cpu directive, ARM: ARM Directives. (line 44) 27667* .dn and .qn directives, ARM: ARM Directives. (line 52) 27668* .dword directive, AArch64: AArch64 Directives. (line 29) 27669* .eabi_attribute directive, ARM: ARM Directives. (line 75) 27670* .ehtype directive, TIC6X: TIC6X Directives. (line 31) 27671* .endp directive, TIC6X: TIC6X Directives. (line 34) 27672* .even directive, AArch64: AArch64 Directives. (line 32) 27673* .even directive, ARM: ARM Directives. (line 104) 27674* .extend directive, ARM: ARM Directives. (line 107) 27675* .float16 directive, AArch64: AArch64 Directives. (line 36) 27676* .float16 directive, ARM: ARM Directives. (line 113) 27677* .float16_format directive, ARM: ARM Directives. (line 121) 27678* .fnend directive, ARM: ARM Directives. (line 128) 27679* .fnstart directive, ARM: ARM Directives. (line 137) 27680* .force_thumb directive, ARM: ARM Directives. (line 140) 27681* .fpu directive, ARM: ARM Directives. (line 144) 27682* .global: MIPS insn. (line 12) 27683* .gnu_attribute 4, N directive, MIPS: MIPS FP ABI History. 27684 (line 6) 27685* .gnu_attribute Tag_GNU_MIPS_ABI_FP, N directive, MIPS: MIPS FP ABI History. 27686 (line 6) 27687* .handlerdata directive, ARM: ARM Directives. (line 148) 27688* .handlerdata directive, TIC6X: TIC6X Directives. (line 39) 27689* .insn: MIPS insn. (line 6) 27690* .insn directive, s390: s390 Directives. (line 11) 27691* .inst directive, AArch64: AArch64 Directives. (line 42) 27692* .inst directive, ARM: ARM Directives. (line 157) 27693* .ldouble directive, ARM: ARM Directives. (line 107) 27694* .little directive, M32RX: M32R-Directives. (line 82) 27695* .long directive, s390: s390 Directives. (line 16) 27696* .ltorg directive, AArch64: AArch64 Directives. (line 46) 27697* .ltorg directive, ARM: ARM Directives. (line 167) 27698* .ltorg directive, s390: s390 Directives. (line 88) 27699* .m32r directive, M32R: M32R-Directives. (line 66) 27700* .m32r2 directive, M32R2: M32R-Directives. (line 77) 27701* .m32rx directive, M32RX: M32R-Directives. (line 72) 27702* .machine directive, s390: s390 Directives. (line 93) 27703* .machinemode directive, s390: s390 Directives. (line 109) 27704* .module: MIPS assembly options. 27705 (line 6) 27706* .module fp=NN directive, MIPS: MIPS FP ABI Selection. 27707 (line 6) 27708* .movsp directive, ARM: ARM Directives. (line 181) 27709* .nan directive, MIPS: MIPS NaN Encodings. (line 6) 27710* .no_pointers directive, XStormy16: XStormy16 Directives. 27711 (line 14) 27712* .nocmp directive, TIC6X: TIC6X Directives. (line 47) 27713* .o: Object. (line 6) 27714* .object_arch directive, ARM: ARM Directives. (line 186) 27715* .packed directive, ARM: ARM Directives. (line 192) 27716* .pad directive, ARM: ARM Directives. (line 197) 27717* .param on HPPA: HPPA Directives. (line 19) 27718* .personality directive, ARM: ARM Directives. (line 202) 27719* .personality directive, TIC6X: TIC6X Directives. (line 55) 27720* .personalityindex directive, ARM: ARM Directives. (line 205) 27721* .personalityindex directive, TIC6X: TIC6X Directives. (line 51) 27722* .pool directive, AArch64: AArch64 Directives. (line 60) 27723* .pool directive, ARM: ARM Directives. (line 209) 27724* .quad directive, s390: s390 Directives. (line 16) 27725* .req directive, AArch64: AArch64 Directives. (line 63) 27726* .req directive, ARM: ARM Directives. (line 212) 27727* .require_canonical_reg_names directive, TILE-Gx: TILE-Gx Directives. 27728 (line 19) 27729* .require_canonical_reg_names directive, TILEPro: TILEPro Directives. 27730 (line 19) 27731* .save directive, ARM: ARM Directives. (line 217) 27732* .scomm directive, TIC6X: TIC6X Directives. (line 58) 27733* .secrel32 directive, ARM: ARM Directives. (line 255) 27734* .set arch=CPU: MIPS ISA. (line 19) 27735* .set at: MIPS Macros. (line 42) 27736* .set at=REG: MIPS Macros. (line 36) 27737* .set autoextend: MIPS autoextend. (line 6) 27738* .set crc: MIPS ASE Instruction Generation Overrides. 27739 (line 69) 27740* .set doublefloat: MIPS Floating-Point. 27741 (line 12) 27742* .set dsp: MIPS ASE Instruction Generation Overrides. 27743 (line 21) 27744* .set dspr2: MIPS ASE Instruction Generation Overrides. 27745 (line 26) 27746* .set dspr3: MIPS ASE Instruction Generation Overrides. 27747 (line 32) 27748* .set ginv: MIPS ASE Instruction Generation Overrides. 27749 (line 73) 27750* .set hardfloat: MIPS Floating-Point. 27751 (line 6) 27752* .set insn32: MIPS assembly options. 27753 (line 18) 27754* .set loongson-cam: MIPS ASE Instruction Generation Overrides. 27755 (line 82) 27756* .set loongson-ext: MIPS ASE Instruction Generation Overrides. 27757 (line 87) 27758* .set loongson-ext2: MIPS ASE Instruction Generation Overrides. 27759 (line 92) 27760* .set loongson-mmi: MIPS ASE Instruction Generation Overrides. 27761 (line 77) 27762* .set macro: MIPS Macros. (line 31) 27763* .set mcu: MIPS ASE Instruction Generation Overrides. 27764 (line 43) 27765* .set mdmx: MIPS ASE Instruction Generation Overrides. 27766 (line 16) 27767* .set mips16e2: MIPS ASE Instruction Generation Overrides. 27768 (line 62) 27769* .set mips3d: MIPS ASE Instruction Generation Overrides. 27770 (line 6) 27771* .set mipsN: MIPS ISA. (line 6) 27772* .set msa: MIPS ASE Instruction Generation Overrides. 27773 (line 48) 27774* .set mt: MIPS ASE Instruction Generation Overrides. 27775 (line 38) 27776* .set noat: MIPS Macros. (line 42) 27777* .set noautoextend: MIPS autoextend. (line 6) 27778* .set nocrc: MIPS ASE Instruction Generation Overrides. 27779 (line 69) 27780* .set nodsp: MIPS ASE Instruction Generation Overrides. 27781 (line 21) 27782* .set nodspr2: MIPS ASE Instruction Generation Overrides. 27783 (line 26) 27784* .set nodspr3: MIPS ASE Instruction Generation Overrides. 27785 (line 32) 27786* .set noginv: MIPS ASE Instruction Generation Overrides. 27787 (line 73) 27788* .set noinsn32: MIPS assembly options. 27789 (line 18) 27790* .set noloongson-cam: MIPS ASE Instruction Generation Overrides. 27791 (line 82) 27792* .set noloongson-ext: MIPS ASE Instruction Generation Overrides. 27793 (line 87) 27794* .set noloongson-ext2: MIPS ASE Instruction Generation Overrides. 27795 (line 92) 27796* .set noloongson-mmi: MIPS ASE Instruction Generation Overrides. 27797 (line 77) 27798* .set nomacro: MIPS Macros. (line 31) 27799* .set nomcu: MIPS ASE Instruction Generation Overrides. 27800 (line 43) 27801* .set nomdmx: MIPS ASE Instruction Generation Overrides. 27802 (line 16) 27803* .set nomips16e2: MIPS ASE Instruction Generation Overrides. 27804 (line 62) 27805* .set nomips3d: MIPS ASE Instruction Generation Overrides. 27806 (line 6) 27807* .set nomsa: MIPS ASE Instruction Generation Overrides. 27808 (line 48) 27809* .set nomt: MIPS ASE Instruction Generation Overrides. 27810 (line 38) 27811* .set nosmartmips: MIPS ASE Instruction Generation Overrides. 27812 (line 11) 27813* .set nosym32: MIPS Symbol Sizes. (line 6) 27814* .set novirt: MIPS ASE Instruction Generation Overrides. 27815 (line 53) 27816* .set noxpa: MIPS ASE Instruction Generation Overrides. 27817 (line 58) 27818* .set pop: MIPS Option Stack. (line 6) 27819* .set push: MIPS Option Stack. (line 6) 27820* .set singlefloat: MIPS Floating-Point. 27821 (line 12) 27822* .set smartmips: MIPS ASE Instruction Generation Overrides. 27823 (line 11) 27824* .set softfloat: MIPS Floating-Point. 27825 (line 6) 27826* .set sym32: MIPS Symbol Sizes. (line 6) 27827* .set virt: MIPS ASE Instruction Generation Overrides. 27828 (line 53) 27829* .set xpa: MIPS ASE Instruction Generation Overrides. 27830 (line 58) 27831* .setfp directive, ARM: ARM Directives. (line 241) 27832* .short directive, s390: s390 Directives. (line 16) 27833* .syntax directive, ARM: ARM Directives. (line 260) 27834* .thumb directive, ARM: ARM Directives. (line 264) 27835* .thumb_func directive, ARM: ARM Directives. (line 267) 27836* .thumb_set directive, ARM: ARM Directives. (line 278) 27837* .tlsdescadd directive, AArch64: AArch64 Directives. (line 71) 27838* .tlsdesccall directive, AArch64: AArch64 Directives. (line 74) 27839* .tlsdescldr directive, AArch64: AArch64 Directives. (line 77) 27840* .tlsdescseq directive, ARM: ARM Directives. (line 285) 27841* .unreq directive, AArch64: AArch64 Directives. (line 80) 27842* .unreq directive, ARM: ARM Directives. (line 290) 27843* .unwind_raw directive, ARM: ARM Directives. (line 301) 27844* .v850 directive, V850: V850 Directives. (line 14) 27845* .v850e directive, V850: V850 Directives. (line 20) 27846* .v850e1 directive, V850: V850 Directives. (line 26) 27847* .v850e2 directive, V850: V850 Directives. (line 32) 27848* .v850e2v3 directive, V850: V850 Directives. (line 38) 27849* .v850e2v4 directive, V850: V850 Directives. (line 44) 27850* .v850e3v5 directive, V850: V850 Directives. (line 50) 27851* .variant_pcs directive, AArch64: AArch64 Directives. (line 91) 27852* .vsave directive, ARM: ARM Directives. (line 308) 27853* .xword directive, AArch64: AArch64 Directives. (line 96) 27854* .z8001: Z8000 Directives. (line 11) 27855* .z8002: Z8000 Directives. (line 15) 27856* 16-bit code, i386: i386-16bit. (line 6) 27857* 16bit_pointers directive, XStormy16: XStormy16 Directives. 27858 (line 6) 27859* 16byte directive, Nios II: Nios II Directives. (line 28) 27860* 16byte directive, PRU: PRU Directives. (line 25) 27861* 2byte directive: 2byte. (line 6) 27862* 2byte directive, Nios II: Nios II Directives. (line 19) 27863* 2byte directive, PRU: PRU Directives. (line 16) 27864* 32bit_pointers directive, XStormy16: XStormy16 Directives. 27865 (line 10) 27866* 3DNow!, i386: i386-SIMD. (line 6) 27867* 3DNow!, x86-64: i386-SIMD. (line 6) 27868* 430 support: MSP430-Dependent. (line 6) 27869* 4byte directive: 4byte. (line 6) 27870* 4byte directive, Nios II: Nios II Directives. (line 22) 27871* 4byte directive, PRU: PRU Directives. (line 19) 27872* 8byte directive: 8byte. (line 6) 27873* 8byte directive, Nios II: Nios II Directives. (line 25) 27874* 8byte directive, PRU: PRU Directives. (line 22) 27875* : (label): Statements. (line 31) 27876* @gotoff(SYMBOL), ARC modifier: ARC Modifiers. (line 20) 27877* @gotpc(SYMBOL), ARC modifier: ARC Modifiers. (line 16) 27878* @hi pseudo-op, XStormy16: XStormy16 Opcodes. (line 21) 27879* @lo pseudo-op, XStormy16: XStormy16 Opcodes. (line 10) 27880* @pcl(SYMBOL), ARC modifier: ARC Modifiers. (line 12) 27881* @plt(SYMBOL), ARC modifier: ARC Modifiers. (line 23) 27882* @sda(SYMBOL), ARC modifier: ARC Modifiers. (line 28) 27883* @word modifier, D10V: D10V-Word. (line 6) 27884* _ opcode prefix: Xtensa Opcodes. (line 9) 27885* __DYNAMIC__, ARC pre-defined symbol: ARC Symbols. (line 14) 27886* __GLOBAL_OFFSET_TABLE__, ARC pre-defined symbol: ARC Symbols. 27887 (line 11) 27888* a.out: Object. (line 6) 27889* a.out symbol attributes: a.out Symbols. (line 6) 27890* A_DIR environment variable, TIC54X: TIC54X-Env. (line 6) 27891* AArch64 floating point (IEEE): AArch64 Floating Point. 27892 (line 6) 27893* AArch64 immediate character: AArch64-Chars. (line 13) 27894* AArch64 line comment character: AArch64-Chars. (line 6) 27895* AArch64 line separator: AArch64-Chars. (line 10) 27896* AArch64 machine directives: AArch64 Directives. (line 6) 27897* AArch64 opcodes: AArch64 Opcodes. (line 6) 27898* AArch64 options (none): AArch64 Options. (line 6) 27899* AArch64 register names: AArch64-Regs. (line 6) 27900* AArch64 relocations: AArch64-Relocations. 27901 (line 6) 27902* AArch64 support: AArch64-Dependent. (line 6) 27903* ABORT directive: ABORT (COFF). (line 6) 27904* abort directive: Abort. (line 6) 27905* absolute section: Ld Sections. (line 29) 27906* absolute-literals directive: Absolute Literals Directive. 27907 (line 6) 27908* ADDI instructions, relaxation: Xtensa Immediate Relaxation. 27909 (line 43) 27910* addition, permitted arguments: Infix Ops. (line 44) 27911* addresses: Expressions. (line 6) 27912* addresses, format of: Secs Background. (line 68) 27913* addressing modes, D10V: D10V-Addressing. (line 6) 27914* addressing modes, D30V: D30V-Addressing. (line 6) 27915* addressing modes, H8/300: H8/300-Addressing. (line 6) 27916* addressing modes, M680x0: M68K-Syntax. (line 21) 27917* addressing modes, M68HC11: M68HC11-Syntax. (line 30) 27918* addressing modes, S12Z: S12Z Addressing Modes. 27919 (line 6) 27920* addressing modes, SH: SH-Addressing. (line 6) 27921* addressing modes, XGATE: XGATE-Syntax. (line 29) 27922* addressing modes, Z8000: Z8000-Addressing. (line 6) 27923* ADR reg,<label> pseudo op, ARM: ARM Opcodes. (line 25) 27924* ADRL reg,<label> pseudo op, ARM: ARM Opcodes. (line 43) 27925* ADRP, ADD, LDR/STR group relocations, AArch64: AArch64-Relocations. 27926 (line 14) 27927* advancing location counter: Org. (line 6) 27928* align directive <1>: Align. (line 6) 27929* align directive: RISC-V-Directives. (line 8) 27930* align directive, Nios II: Nios II Directives. (line 6) 27931* align directive, OpenRISC: OpenRISC-Directives. 27932 (line 9) 27933* align directive, PRU: PRU Directives. (line 6) 27934* align directive, SPARC: Sparc-Directives. (line 9) 27935* align directive, TIC54X: TIC54X-Directives. (line 6) 27936* aligned instruction bundle: Bundle directives. (line 9) 27937* alignment for NEON instructions: ARM-Neon-Alignment. (line 6) 27938* alignment of branch targets: Xtensa Automatic Alignment. 27939 (line 6) 27940* alignment of LOOP instructions: Xtensa Automatic Alignment. 27941 (line 6) 27942* Alpha floating point (IEEE): Alpha Floating Point. 27943 (line 6) 27944* Alpha line comment character: Alpha-Chars. (line 6) 27945* Alpha line separator: Alpha-Chars. (line 11) 27946* Alpha notes: Alpha Notes. (line 6) 27947* Alpha options: Alpha Options. (line 6) 27948* Alpha registers: Alpha-Regs. (line 6) 27949* Alpha relocations: Alpha-Relocs. (line 6) 27950* Alpha support: Alpha-Dependent. (line 6) 27951* Alpha Syntax: Alpha Options. (line 61) 27952* Alpha-only directives: Alpha Directives. (line 10) 27953* Altera Nios II support: NiosII-Dependent. (line 6) 27954* altered difference tables: Word. (line 12) 27955* alternate syntax for the 680x0: M68K-Moto-Syntax. (line 6) 27956* ARC Branch Target Address: ARC-Regs. (line 61) 27957* ARC BTA saved on exception entry: ARC-Regs. (line 80) 27958* ARC Build configuration for: BTA Registers: ARC-Regs. (line 90) 27959* ARC Build configuration for: Core Registers: ARC-Regs. (line 98) 27960* ARC Build configuration for: Interrupts: ARC-Regs. (line 94) 27961* ARC Build Configuration Registers Version: ARC-Regs. (line 86) 27962* ARC C preprocessor macro separator: ARC-Chars. (line 31) 27963* ARC core general registers: ARC-Regs. (line 10) 27964* ARC DCCM RAM Configuration Register: ARC-Regs. (line 102) 27965* ARC Exception Cause Register: ARC-Regs. (line 64) 27966* ARC Exception Return Address: ARC-Regs. (line 77) 27967* ARC extension core registers: ARC-Regs. (line 38) 27968* ARC frame pointer: ARC-Regs. (line 17) 27969* ARC global pointer: ARC-Regs. (line 14) 27970* ARC interrupt link register: ARC-Regs. (line 27) 27971* ARC Interrupt Vector Base address: ARC-Regs. (line 67) 27972* ARC level 1 interrupt link register: ARC-Regs. (line 23) 27973* ARC level 2 interrupt link register: ARC-Regs. (line 31) 27974* ARC line comment character: ARC-Chars. (line 11) 27975* ARC line separator: ARC-Chars. (line 27) 27976* ARC link register: ARC-Regs. (line 35) 27977* ARC loop counter: ARC-Regs. (line 41) 27978* ARC machine directives: ARC Directives. (line 6) 27979* ARC opcodes: ARC Opcodes. (line 6) 27980* ARC options: ARC Options. (line 6) 27981* ARC Processor Identification register: ARC-Regs. (line 52) 27982* ARC Program Counter: ARC-Regs. (line 55) 27983* ARC register name prefix character: ARC-Chars. (line 7) 27984* ARC register names: ARC-Regs. (line 6) 27985* ARC Saved User Stack Pointer: ARC-Regs. (line 74) 27986* ARC stack pointer: ARC-Regs. (line 20) 27987* ARC Status register: ARC-Regs. (line 58) 27988* ARC STATUS32 saved on exception: ARC-Regs. (line 83) 27989* ARC Stored STATUS32 register on entry to level P0 interrupts: ARC-Regs. 27990 (line 70) 27991* ARC support: ARC-Dependent. (line 6) 27992* ARC symbol prefix character: ARC-Chars. (line 20) 27993* ARC word aligned program counter: ARC-Regs. (line 44) 27994* arch directive, i386: i386-Arch. (line 6) 27995* arch directive, M680x0: M68K-Directives. (line 22) 27996* arch directive, MSP 430: MSP430 Directives. (line 18) 27997* arch directive, x86-64: i386-Arch. (line 6) 27998* architecture options, IP2022: IP2K-Opts. (line 9) 27999* architecture options, IP2K: IP2K-Opts. (line 14) 28000* architecture options, M16C: M32C-Opts. (line 12) 28001* architecture options, M32C: M32C-Opts. (line 9) 28002* architecture options, M32R: M32R-Opts. (line 21) 28003* architecture options, M32R2: M32R-Opts. (line 17) 28004* architecture options, M32RX: M32R-Opts. (line 9) 28005* architecture options, M680x0: M68K-Opts. (line 98) 28006* Architecture variant option, CRIS: CRIS-Opts. (line 34) 28007* architectures, Meta: Meta Options. (line 6) 28008* architectures, PowerPC: PowerPC-Opts. (line 6) 28009* architectures, SCORE: SCORE-Opts. (line 6) 28010* architectures, SPARC: Sparc-Opts. (line 6) 28011* arguments for addition: Infix Ops. (line 44) 28012* arguments for subtraction: Infix Ops. (line 49) 28013* arguments in expressions: Arguments. (line 6) 28014* arithmetic functions: Operators. (line 6) 28015* arithmetic operands: Arguments. (line 6) 28016* ARM data relocations: ARM-Relocations. (line 6) 28017* ARM floating point (IEEE): ARM Floating Point. (line 6) 28018* ARM identifiers: ARM-Chars. (line 19) 28019* ARM immediate character: ARM-Chars. (line 17) 28020* ARM line comment character: ARM-Chars. (line 6) 28021* ARM line separator: ARM-Chars. (line 14) 28022* ARM machine directives: ARM Directives. (line 6) 28023* ARM opcodes: ARM Opcodes. (line 6) 28024* ARM options (none): ARM Options. (line 6) 28025* ARM register names: ARM-Regs. (line 6) 28026* ARM support: ARM-Dependent. (line 6) 28027* ascii directive: Ascii. (line 6) 28028* asciz directive: Asciz. (line 6) 28029* asg directive, TIC54X: TIC54X-Directives. (line 20) 28030* assembler bugs, reporting: Bug Reporting. (line 6) 28031* assembler crash: Bug Criteria. (line 9) 28032* assembler directive .3byte, RX: RX-Directives. (line 9) 28033* assembler directive .arch, CRIS: CRIS-Pseudos. (line 45) 28034* assembler directive .dword, CRIS: CRIS-Pseudos. (line 12) 28035* assembler directive .far, M68HC11: M68HC11-Directives. (line 20) 28036* assembler directive .fetchalign, RX: RX-Directives. (line 13) 28037* assembler directive .interrupt, M68HC11: M68HC11-Directives. 28038 (line 26) 28039* assembler directive .mode, M68HC11: M68HC11-Directives. (line 16) 28040* assembler directive .relax, M68HC11: M68HC11-Directives. (line 10) 28041* assembler directive .syntax, CRIS: CRIS-Pseudos. (line 17) 28042* assembler directive .xrefb, M68HC11: M68HC11-Directives. (line 31) 28043* assembler directive BSPEC, MMIX: MMIX-Pseudos. (line 131) 28044* assembler directive BYTE, MMIX: MMIX-Pseudos. (line 97) 28045* assembler directive ESPEC, MMIX: MMIX-Pseudos. (line 131) 28046* assembler directive GREG, MMIX: MMIX-Pseudos. (line 50) 28047* assembler directive IS, MMIX: MMIX-Pseudos. (line 42) 28048* assembler directive LOC, MMIX: MMIX-Pseudos. (line 7) 28049* assembler directive LOCAL, MMIX: MMIX-Pseudos. (line 28) 28050* assembler directive OCTA, MMIX: MMIX-Pseudos. (line 108) 28051* assembler directive PREFIX, MMIX: MMIX-Pseudos. (line 120) 28052* assembler directive TETRA, MMIX: MMIX-Pseudos. (line 108) 28053* assembler directive WYDE, MMIX: MMIX-Pseudos. (line 108) 28054* assembler directives, CRIS: CRIS-Pseudos. (line 6) 28055* assembler directives, M68HC11: M68HC11-Directives. (line 6) 28056* assembler directives, M68HC12: M68HC11-Directives. (line 6) 28057* assembler directives, MMIX: MMIX-Pseudos. (line 6) 28058* assembler directives, RL78: RL78-Directives. (line 6) 28059* assembler directives, RX: RX-Directives. (line 6) 28060* assembler directives, XGATE: XGATE-Directives. (line 6) 28061* assembler internal logic error: As Sections. (line 13) 28062* assembler version: v. (line 6) 28063* assembler, and linker: Secs Background. (line 10) 28064* assembly listings, enabling: a. (line 6) 28065* assigning values to symbols <1>: Setting Symbols. (line 6) 28066* assigning values to symbols: Equ. (line 6) 28067* at register, MIPS: MIPS Macros. (line 36) 28068* att_syntax pseudo op, i386: i386-Variations. (line 6) 28069* att_syntax pseudo op, x86-64: i386-Variations. (line 6) 28070* attributes, symbol: Symbol Attributes. (line 6) 28071* auxiliary attributes, COFF symbols: COFF Symbols. (line 19) 28072* auxiliary symbol information, COFF: Dim. (line 6) 28073* AVR line comment character: AVR-Chars. (line 6) 28074* AVR line separator: AVR-Chars. (line 14) 28075* AVR modifiers: AVR-Modifiers. (line 6) 28076* AVR opcode summary: AVR Opcodes. (line 6) 28077* AVR options (none): AVR Options. (line 6) 28078* AVR register names: AVR-Regs. (line 6) 28079* AVR support: AVR-Dependent. (line 6) 28080* backslash (\\): Strings. (line 40) 28081* backspace (\b): Strings. (line 15) 28082* balign directive: Balign. (line 6) 28083* balignl directive: Balign. (line 29) 28084* balignw directive: Balign. (line 29) 28085* bes directive, TIC54X: TIC54X-Directives. (line 196) 28086* bfloat16 directive, i386: i386-Float. (line 14) 28087* bfloat16 directive, x86-64: i386-Float. (line 14) 28088* big endian output, MIPS: Overview. (line 891) 28089* big endian output, PJ: Overview. (line 791) 28090* big-endian output, MIPS: MIPS Options. (line 13) 28091* big-endian output, TIC6X: TIC6X Options. (line 46) 28092* bignums: Bignums. (line 6) 28093* binary constants, TIC54X: TIC54X-Constants. (line 8) 28094* binary files, including: Incbin. (line 6) 28095* binary integers: Integers. (line 6) 28096* bit names, IA-64: IA-64-Bits. (line 6) 28097* bitfields, not supported on VAX: VAX-no. (line 6) 28098* Blackfin directives: Blackfin Directives. 28099 (line 6) 28100* Blackfin options (none): Blackfin Options. (line 6) 28101* Blackfin support: Blackfin-Dependent. (line 6) 28102* Blackfin syntax: Blackfin Syntax. (line 6) 28103* block: Z8000 Directives. (line 55) 28104* BMI, i386: i386-BMI. (line 6) 28105* BMI, x86-64: i386-BMI. (line 6) 28106* BPF line comment character: BPF-Chars. (line 6) 28107* BPF opcodes: BPF Opcodes. (line 6) 28108* BPF options (none): BPF Options. (line 6) 28109* BPF register names: BPF-Regs. (line 6) 28110* BPF support: BPF-Dependent. (line 6) 28111* branch improvement, M680x0: M68K-Branch. (line 6) 28112* branch improvement, M68HC11: M68HC11-Branch. (line 6) 28113* branch improvement, VAX: VAX-branch. (line 6) 28114* branch instructions, relaxation: Xtensa Branch Relaxation. 28115 (line 6) 28116* Branch Target Address, ARC: ARC-Regs. (line 61) 28117* branch target alignment: Xtensa Automatic Alignment. 28118 (line 6) 28119* break directive, TIC54X: TIC54X-Directives. (line 143) 28120* BSD syntax: PDP-11-Syntax. (line 6) 28121* bss directive: Bss. (line 6) 28122* BSS directive: RISC-V-Directives. (line 24) 28123* bss directive, TIC54X: TIC54X-Directives. (line 29) 28124* bss section <1>: bss. (line 6) 28125* bss section: Ld Sections. (line 20) 28126* BTA saved on exception entry, ARC: ARC-Regs. (line 80) 28127* bug criteria: Bug Criteria. (line 6) 28128* bug reports: Bug Reporting. (line 6) 28129* bugs in assembler: Reporting Bugs. (line 6) 28130* Build configuration for: BTA Registers, ARC: ARC-Regs. (line 90) 28131* Build configuration for: Core Registers, ARC: ARC-Regs. (line 98) 28132* Build configuration for: Interrupts, ARC: ARC-Regs. (line 94) 28133* Build Configuration Registers Version, ARC: ARC-Regs. (line 86) 28134* Built-in symbols, CRIS: CRIS-Symbols. (line 6) 28135* builtin math functions, TIC54X: TIC54X-Builtins. (line 6) 28136* builtin subsym functions, TIC54X: TIC54X-Macros. (line 16) 28137* bundle: Bundle directives. (line 9) 28138* bundle-locked: Bundle directives. (line 38) 28139* bundle_align_mode directive: Bundle directives. (line 9) 28140* bundle_lock directive: Bundle directives. (line 31) 28141* bundle_unlock directive: Bundle directives. (line 31) 28142* bus lock prefixes, i386: i386-Prefixes. (line 36) 28143* bval: Z8000 Directives. (line 30) 28144* byte directive: Byte. (line 6) 28145* byte directive, TIC54X: TIC54X-Directives. (line 36) 28146* C preprocessor macro separator, ARC: ARC-Chars. (line 31) 28147* C-SKY options: C-SKY Options. (line 6) 28148* C-SKY support: C-SKY-Dependent. (line 6) 28149* C54XDSP_DIR environment variable, TIC54X: TIC54X-Env. (line 6) 28150* c_mode directive, TIC54X: TIC54X-Directives. (line 51) 28151* call directive, Nios II: Nios II Relocations. 28152 (line 38) 28153* call instructions, i386: i386-Mnemonics. (line 117) 28154* call instructions, relaxation: Xtensa Call Relaxation. 28155 (line 6) 28156* call instructions, x86-64: i386-Mnemonics. (line 117) 28157* call_hiadj directive, Nios II: Nios II Relocations. 28158 (line 38) 28159* call_lo directive, Nios II: Nios II Relocations. 28160 (line 38) 28161* carriage return (backslash-r): Strings. (line 24) 28162* case sensitivity, Z80: Z80-Case. (line 6) 28163* cfi_endproc directive: CFI directives. (line 40) 28164* cfi_fde_data directive: CFI directives. (line 66) 28165* cfi_personality directive: CFI directives. (line 47) 28166* cfi_personality_id directive: CFI directives. (line 59) 28167* cfi_sections directive: CFI directives. (line 9) 28168* cfi_startproc directive: CFI directives. (line 30) 28169* char directive, TIC54X: TIC54X-Directives. (line 36) 28170* character constant, Z80: Z80-Chars. (line 20) 28171* character constants: Characters. (line 6) 28172* character escape codes: Strings. (line 15) 28173* character escapes, Z80: Z80-Chars. (line 18) 28174* character, single: Chars. (line 6) 28175* characters used in symbols: Symbol Intro. (line 6) 28176* clink directive, TIC54X: TIC54X-Directives. (line 45) 28177* code16 directive, i386: i386-16bit. (line 6) 28178* code16gcc directive, i386: i386-16bit. (line 6) 28179* code32 directive, i386: i386-16bit. (line 6) 28180* code64 directive, i386: i386-16bit. (line 6) 28181* code64 directive, x86-64: i386-16bit. (line 6) 28182* COFF auxiliary symbol information: Dim. (line 6) 28183* COFF structure debugging: Tag. (line 6) 28184* COFF symbol attributes: COFF Symbols. (line 6) 28185* COFF symbol descriptor: Desc. (line 6) 28186* COFF symbol storage class: Scl. (line 6) 28187* COFF symbol type: Type. (line 11) 28188* COFF symbols, debugging: Def. (line 6) 28189* COFF value attribute: Val. (line 6) 28190* COMDAT: Linkonce. (line 6) 28191* comm directive: Comm. (line 6) 28192* command line conventions: Command Line. (line 6) 28193* command-line options ignored, VAX: VAX-Opts. (line 6) 28194* command-line options, V850: V850 Options. (line 9) 28195* comment character, XStormy16: XStormy16-Chars. (line 11) 28196* comments: Comments. (line 6) 28197* comments, M680x0: M68K-Chars. (line 6) 28198* comments, removed by preprocessor: Preprocessing. (line 11) 28199* common directive, SPARC: Sparc-Directives. (line 12) 28200* common sections: Linkonce. (line 6) 28201* common variable storage: bss. (line 6) 28202* comparison expressions: Infix Ops. (line 55) 28203* conditional assembly: If. (line 6) 28204* constant, single character: Chars. (line 6) 28205* constants: Constants. (line 6) 28206* constants, bignum: Bignums. (line 6) 28207* constants, character: Characters. (line 6) 28208* constants, converted by preprocessor: Preprocessing. (line 14) 28209* constants, floating point: Flonums. (line 6) 28210* constants, integer: Integers. (line 6) 28211* constants, number: Numbers. (line 6) 28212* constants, Sparc: Sparc-Constants. (line 6) 28213* constants, string: Strings. (line 6) 28214* constants, TIC54X: TIC54X-Constants. (line 6) 28215* conversion instructions, i386: i386-Mnemonics. (line 68) 28216* conversion instructions, x86-64: i386-Mnemonics. (line 68) 28217* coprocessor wait, i386: i386-Prefixes. (line 40) 28218* copy directive, TIC54X: TIC54X-Directives. (line 54) 28219* core general registers, ARC: ARC-Regs. (line 10) 28220* cpu directive, ARC: ARC Directives. (line 27) 28221* cpu directive, M680x0: M68K-Directives. (line 30) 28222* cpu directive, MSP 430: MSP430 Directives. (line 22) 28223* CR16 line comment character: CR16-Chars. (line 6) 28224* CR16 line separator: CR16-Chars. (line 13) 28225* CR16 Operand Qualifiers: CR16 Operand Qualifiers. 28226 (line 6) 28227* CR16 support: CR16-Dependent. (line 6) 28228* crash of assembler: Bug Criteria. (line 9) 28229* CRIS --emulation=crisaout command-line option: CRIS-Opts. (line 9) 28230* CRIS --emulation=criself command-line option: CRIS-Opts. (line 9) 28231* CRIS --march=ARCHITECTURE command-line option: CRIS-Opts. (line 34) 28232* CRIS --mul-bug-abort command-line option: CRIS-Opts. (line 62) 28233* CRIS --no-mul-bug-abort command-line option: CRIS-Opts. (line 62) 28234* CRIS --no-underscore command-line option: CRIS-Opts. (line 15) 28235* CRIS --pic command-line option: CRIS-Opts. (line 27) 28236* CRIS --underscore command-line option: CRIS-Opts. (line 15) 28237* CRIS -N command-line option: CRIS-Opts. (line 58) 28238* CRIS architecture variant option: CRIS-Opts. (line 34) 28239* CRIS assembler directive .arch: CRIS-Pseudos. (line 45) 28240* CRIS assembler directive .dword: CRIS-Pseudos. (line 12) 28241* CRIS assembler directive .syntax: CRIS-Pseudos. (line 17) 28242* CRIS assembler directives: CRIS-Pseudos. (line 6) 28243* CRIS built-in symbols: CRIS-Symbols. (line 6) 28244* CRIS instruction expansion: CRIS-Expand. (line 6) 28245* CRIS line comment characters: CRIS-Chars. (line 6) 28246* CRIS options: CRIS-Opts. (line 6) 28247* CRIS position-independent code: CRIS-Opts. (line 27) 28248* CRIS pseudo-op .arch: CRIS-Pseudos. (line 45) 28249* CRIS pseudo-op .dword: CRIS-Pseudos. (line 12) 28250* CRIS pseudo-op .syntax: CRIS-Pseudos. (line 17) 28251* CRIS pseudo-ops: CRIS-Pseudos. (line 6) 28252* CRIS register names: CRIS-Regs. (line 6) 28253* CRIS support: CRIS-Dependent. (line 6) 28254* CRIS symbols in position-independent code: CRIS-Pic. (line 6) 28255* ctbp register, V850: V850-Regs. (line 131) 28256* ctoff pseudo-op, V850: V850 Opcodes. (line 111) 28257* ctpc register, V850: V850-Regs. (line 119) 28258* ctpsw register, V850: V850-Regs. (line 122) 28259* current address: Dot. (line 6) 28260* current address, advancing: Org. (line 6) 28261* D10V @word modifier: D10V-Word. (line 6) 28262* D10V addressing modes: D10V-Addressing. (line 6) 28263* D10V floating point: D10V-Float. (line 6) 28264* D10V line comment character: D10V-Chars. (line 6) 28265* D10V opcode summary: D10V-Opcodes. (line 6) 28266* D10V optimization: Overview. (line 665) 28267* D10V options: D10V-Opts. (line 6) 28268* D10V registers: D10V-Regs. (line 6) 28269* D10V size modifiers: D10V-Size. (line 6) 28270* D10V sub-instruction ordering: D10V-Chars. (line 14) 28271* D10V sub-instructions: D10V-Subs. (line 6) 28272* D10V support: D10V-Dependent. (line 6) 28273* D10V syntax: D10V-Syntax. (line 6) 28274* d24 directive, Z80: Z80 Directives. (line 32) 28275* D30V addressing modes: D30V-Addressing. (line 6) 28276* D30V floating point: D30V-Float. (line 6) 28277* D30V Guarded Execution: D30V-Guarded. (line 6) 28278* D30V line comment character: D30V-Chars. (line 6) 28279* D30V nops: Overview. (line 673) 28280* D30V nops after 32-bit multiply: Overview. (line 676) 28281* D30V opcode summary: D30V-Opcodes. (line 6) 28282* D30V optimization: Overview. (line 670) 28283* D30V options: D30V-Opts. (line 6) 28284* D30V registers: D30V-Regs. (line 6) 28285* D30V size modifiers: D30V-Size. (line 6) 28286* D30V sub-instruction ordering: D30V-Chars. (line 14) 28287* D30V sub-instructions: D30V-Subs. (line 6) 28288* D30V support: D30V-Dependent. (line 6) 28289* D30V syntax: D30V-Syntax. (line 6) 28290* d32 directive, Z80: Z80 Directives. (line 37) 28291* data alignment on SPARC: Sparc-Aligned-Data. (line 6) 28292* data and text sections, joining: R. (line 6) 28293* data directive: Data. (line 6) 28294* data directive, TIC54X: TIC54X-Directives. (line 61) 28295* Data directives: RISC-V-Directives. (line 12) 28296* data relocations, ARM: ARM-Relocations. (line 6) 28297* data section: Ld Sections. (line 9) 28298* data1 directive, M680x0: M68K-Directives. (line 9) 28299* data2 directive, M680x0: M68K-Directives. (line 12) 28300* db directive, Z80: Z80 Directives. (line 18) 28301* dbpc register, V850: V850-Regs. (line 125) 28302* dbpsw register, V850: V850-Regs. (line 128) 28303* dc directive: Dc. (line 6) 28304* dcb directive: Dcb. (line 6) 28305* DCCM RAM Configuration Register, ARC: ARC-Regs. (line 102) 28306* debuggers, and symbol order: Symbols. (line 10) 28307* debugging COFF symbols: Def. (line 6) 28308* DEC syntax: PDP-11-Syntax. (line 6) 28309* decimal integers: Integers. (line 12) 28310* def directive: Def. (line 6) 28311* def directive, TIC54X: TIC54X-Directives. (line 103) 28312* def24 directive, Z80: Z80 Directives. (line 33) 28313* def32 directive, Z80: Z80 Directives. (line 38) 28314* defb directive, Z80: Z80 Directives. (line 19) 28315* defl directive, Z80: Z80 Directives. (line 47) 28316* defm directive, Z80: Z80 Directives. (line 20) 28317* defs directive, Z80: Z80 Directives. (line 43) 28318* defw directive, Z80: Z80 Directives. (line 28) 28319* density instructions: Density Instructions. 28320 (line 6) 28321* dependency tracking: MD. (line 6) 28322* deprecated directives: Deprecated. (line 6) 28323* desc directive: Desc. (line 6) 28324* descriptor, of a.out symbol: Symbol Desc. (line 6) 28325* dfloat directive, VAX: VAX-directives. (line 10) 28326* difference tables altered: Word. (line 12) 28327* difference tables, warning: K. (line 6) 28328* differences, mmixal: MMIX-mmixal. (line 6) 28329* dim directive: Dim. (line 6) 28330* directives and instructions: Statements. (line 20) 28331* directives for PowerPC: PowerPC-Pseudo. (line 6) 28332* directives for SCORE: SCORE-Pseudo. (line 6) 28333* directives, Blackfin: Blackfin Directives. 28334 (line 6) 28335* directives, M32R: M32R-Directives. (line 6) 28336* directives, M680x0: M68K-Directives. (line 6) 28337* directives, machine independent: Pseudo Ops. (line 6) 28338* directives, Xtensa: Xtensa Directives. (line 6) 28339* directives, Z8000: Z8000 Directives. (line 6) 28340* Disable floating-point instructions: MIPS Floating-Point. 28341 (line 6) 28342* Disable single-precision floating-point operations: MIPS Floating-Point. 28343 (line 12) 28344* displacement sizing character, VAX: VAX-operands. (line 12) 28345* dollar local symbols: Symbol Names. (line 124) 28346* dot (symbol): Dot. (line 6) 28347* double directive: Double. (line 6) 28348* double directive, i386: i386-Float. (line 14) 28349* double directive, M680x0: M68K-Float. (line 14) 28350* double directive, M68HC11: M68HC11-Float. (line 14) 28351* double directive, RX: RX-Float. (line 11) 28352* double directive, TIC54X: TIC54X-Directives. (line 64) 28353* double directive, VAX: VAX-float. (line 15) 28354* double directive, x86-64: i386-Float. (line 14) 28355* double directive, XGATE: XGATE-Float. (line 13) 28356* doublequote (\"): Strings. (line 43) 28357* drlist directive, TIC54X: TIC54X-Directives. (line 73) 28358* drnolist directive, TIC54X: TIC54X-Directives. (line 73) 28359* ds directive: Ds. (line 6) 28360* ds directive, Z80: Z80 Directives. (line 42) 28361* DTP-relative data directives: RISC-V-Directives. (line 18) 28362* dw directive, Z80: Z80 Directives. (line 27) 28363* dword directive, BPF: BPF Directives. (line 15) 28364* dword directive, Nios II: Nios II Directives. (line 16) 28365* dword directive, PRU: PRU Directives. (line 13) 28366* EB command-line option, C-SKY: C-SKY Options. (line 18) 28367* EB command-line option, Nios II: Nios II Options. (line 23) 28368* ecr register, V850: V850-Regs. (line 113) 28369* eight-byte integer <1>: Quad. (line 9) 28370* eight-byte integer: 8byte. (line 6) 28371* eipc register, V850: V850-Regs. (line 101) 28372* eipsw register, V850: V850-Regs. (line 104) 28373* eject directive: Eject. (line 6) 28374* EL command-line option, C-SKY: C-SKY Options. (line 14) 28375* EL command-line option, Nios II: Nios II Options. (line 26) 28376* ELF symbol type: Type. (line 22) 28377* else directive: Else. (line 6) 28378* elseif directive: Elseif. (line 6) 28379* empty expressions: Empty Exprs. (line 6) 28380* emsg directive, TIC54X: TIC54X-Directives. (line 77) 28381* emulation: Overview. (line 1145) 28382* encoding options, i386: i386-Mnemonics. (line 40) 28383* encoding options, x86-64: i386-Mnemonics. (line 40) 28384* end directive: End. (line 6) 28385* endef directive: Endef. (line 6) 28386* endfunc directive: Endfunc. (line 6) 28387* endianness, MIPS: Overview. (line 891) 28388* endianness, PJ: Overview. (line 791) 28389* endif directive: Endif. (line 6) 28390* endloop directive, TIC54X: TIC54X-Directives. (line 143) 28391* endm directive: Macro. (line 163) 28392* endm directive, TIC54X: TIC54X-Directives. (line 153) 28393* endproc directive, OpenRISC: OpenRISC-Directives. 28394 (line 24) 28395* endstruct directive, TIC54X: TIC54X-Directives. (line 216) 28396* endunion directive, TIC54X: TIC54X-Directives. (line 250) 28397* environment settings, TIC54X: TIC54X-Env. (line 6) 28398* EOF, newline must precede: Statements. (line 14) 28399* ep register, V850: V850-Regs. (line 95) 28400* Epiphany line comment character: Epiphany-Chars. (line 6) 28401* Epiphany line separator: Epiphany-Chars. (line 14) 28402* Epiphany options: Epiphany Options. (line 6) 28403* Epiphany support: Epiphany-Dependent. (line 6) 28404* equ directive: Equ. (line 6) 28405* equ directive, TIC54X: TIC54X-Directives. (line 191) 28406* equ directive, Z80: Z80 Directives. (line 52) 28407* equiv directive: Equiv. (line 6) 28408* eqv directive: Eqv. (line 6) 28409* err directive: Err. (line 6) 28410* error directive: Error. (line 6) 28411* error messages: Errors. (line 6) 28412* error on valid input: Bug Criteria. (line 12) 28413* errors, caused by warnings: W. (line 16) 28414* errors, continuing after: Z. (line 6) 28415* escape codes, character: Strings. (line 15) 28416* eval directive, TIC54X: TIC54X-Directives. (line 24) 28417* even: Z8000 Directives. (line 58) 28418* even directive, M680x0: M68K-Directives. (line 15) 28419* even directive, TIC54X: TIC54X-Directives. (line 6) 28420* Exception Cause Register, ARC: ARC-Regs. (line 64) 28421* Exception Return Address, ARC: ARC-Regs. (line 77) 28422* exitm directive: Macro. (line 166) 28423* expr (internal section): As Sections. (line 17) 28424* expression arguments: Arguments. (line 6) 28425* expressions: Expressions. (line 6) 28426* expressions, comparison: Infix Ops. (line 55) 28427* expressions, empty: Empty Exprs. (line 6) 28428* expressions, integer: Integer Exprs. (line 6) 28429* extAuxRegister directive, ARC: ARC Directives. (line 106) 28430* extCondCode directive, ARC: ARC Directives. (line 128) 28431* extCoreRegister directive, ARC: ARC Directives. (line 139) 28432* extend directive M680x0: M68K-Float. (line 17) 28433* extend directive M68HC11: M68HC11-Float. (line 17) 28434* extend directive XGATE: XGATE-Float. (line 16) 28435* extension core registers, ARC: ARC-Regs. (line 38) 28436* extension instructions, i386: i386-Mnemonics. (line 87) 28437* extension instructions, x86-64: i386-Mnemonics. (line 87) 28438* extern directive: Extern. (line 6) 28439* extInstruction directive, ARC: ARC Directives. (line 167) 28440* fail directive: Fail. (line 6) 28441* far_mode directive, TIC54X: TIC54X-Directives. (line 82) 28442* faster processing (-f): f. (line 6) 28443* fatal signal: Bug Criteria. (line 9) 28444* fclist directive, TIC54X: TIC54X-Directives. (line 87) 28445* fcnolist directive, TIC54X: TIC54X-Directives. (line 87) 28446* fepc register, V850: V850-Regs. (line 107) 28447* fepsw register, V850: V850-Regs. (line 110) 28448* ffloat directive, VAX: VAX-directives. (line 14) 28449* field directive, TIC54X: TIC54X-Directives. (line 91) 28450* file directive: File. (line 6) 28451* file directive, MSP 430: MSP430 Directives. (line 6) 28452* file name, logical: File. (line 13) 28453* file names and line numbers, in warnings/errors: Errors. (line 16) 28454* files, including: Include. (line 6) 28455* files, input: Input Files. (line 6) 28456* fill directive: Fill. (line 6) 28457* filling memory <1>: Space. (line 6) 28458* filling memory: Skip. (line 6) 28459* filling memory with no-op instructions <1>: Nops. (line 6) 28460* filling memory with no-op instructions: Nop. (line 6) 28461* filling memory with zero bytes: Zero. (line 6) 28462* FLIX syntax: Xtensa Syntax. (line 6) 28463* float directive: Float. (line 6) 28464* float directive, i386: i386-Float. (line 14) 28465* float directive, M680x0: M68K-Float. (line 11) 28466* float directive, M68HC11: M68HC11-Float. (line 11) 28467* float directive, RX: RX-Float. (line 8) 28468* float directive, TIC54X: TIC54X-Directives. (line 64) 28469* float directive, VAX: VAX-float. (line 15) 28470* float directive, x86-64: i386-Float. (line 14) 28471* float directive, XGATE: XGATE-Float. (line 10) 28472* floating point numbers: Flonums. (line 6) 28473* floating point numbers (double): Double. (line 6) 28474* floating point numbers (single) <1>: Single. (line 6) 28475* floating point numbers (single): Float. (line 6) 28476* floating point, AArch64 (IEEE): AArch64 Floating Point. 28477 (line 6) 28478* floating point, Alpha (IEEE): Alpha Floating Point. 28479 (line 6) 28480* floating point, ARM (IEEE): ARM Floating Point. (line 6) 28481* floating point, D10V: D10V-Float. (line 6) 28482* floating point, D30V: D30V-Float. (line 6) 28483* floating point, H8/300 (IEEE): H8/300 Floating Point. 28484 (line 6) 28485* floating point, HPPA (IEEE): HPPA Floating Point. 28486 (line 6) 28487* floating point, i386: i386-Float. (line 6) 28488* floating point, M680x0: M68K-Float. (line 6) 28489* floating point, M68HC11: M68HC11-Float. (line 6) 28490* floating point, MSP 430 (IEEE): MSP430 Floating Point. 28491 (line 6) 28492* floating point, OPENRISC (IEEE): OpenRISC-Float. (line 6) 28493* floating point, RX: RX-Float. (line 6) 28494* floating point, s390: s390 Floating Point. 28495 (line 6) 28496* floating point, SH (IEEE): SH Floating Point. (line 6) 28497* floating point, SPARC (IEEE): Sparc-Float. (line 6) 28498* floating point, V850 (IEEE): V850 Floating Point. 28499 (line 6) 28500* floating point, VAX: VAX-float. (line 6) 28501* floating point, WebAssembly (IEEE): WebAssembly-Floating-Point. 28502 (line 6) 28503* floating point, x86-64: i386-Float. (line 6) 28504* floating point, XGATE: XGATE-Float. (line 6) 28505* floating point, Z80: Z80 Floating Point. (line 6) 28506* flonums: Flonums. (line 6) 28507* force2bsr command-line option, C-SKY: C-SKY Options. (line 43) 28508* format of error messages: Errors. (line 38) 28509* format of warning messages: Errors. (line 12) 28510* formfeed (\f): Strings. (line 18) 28511* four-byte integer: 4byte. (line 6) 28512* fpic command-line option, C-SKY: C-SKY Options. (line 22) 28513* frame pointer, ARC: ARC-Regs. (line 17) 28514* func directive: Func. (line 6) 28515* functions, in expressions: Operators. (line 6) 28516* gfloat directive, VAX: VAX-directives. (line 18) 28517* global: Z8000 Directives. (line 21) 28518* global directive: Global. (line 6) 28519* global directive, TIC54X: TIC54X-Directives. (line 103) 28520* global pointer, ARC: ARC-Regs. (line 14) 28521* got directive, Nios II: Nios II Relocations. 28522 (line 38) 28523* got_hiadj directive, Nios II: Nios II Relocations. 28524 (line 38) 28525* got_lo directive, Nios II: Nios II Relocations. 28526 (line 38) 28527* gotoff directive, Nios II: Nios II Relocations. 28528 (line 38) 28529* gotoff_hiadj directive, Nios II: Nios II Relocations. 28530 (line 38) 28531* gotoff_lo directive, Nios II: Nios II Relocations. 28532 (line 38) 28533* gp register, MIPS: MIPS Small Data. (line 6) 28534* gp register, V850: V850-Regs. (line 17) 28535* gprel directive, Nios II: Nios II Relocations. 28536 (line 26) 28537* grouping data: Sub-Sections. (line 6) 28538* H8/300 addressing modes: H8/300-Addressing. (line 6) 28539* H8/300 floating point (IEEE): H8/300 Floating Point. 28540 (line 6) 28541* H8/300 line comment character: H8/300-Chars. (line 6) 28542* H8/300 line separator: H8/300-Chars. (line 8) 28543* H8/300 machine directives (none): H8/300 Directives. (line 6) 28544* H8/300 opcode summary: H8/300 Opcodes. (line 6) 28545* H8/300 options: H8/300 Options. (line 6) 28546* H8/300 registers: H8/300-Regs. (line 6) 28547* H8/300 size suffixes: H8/300 Opcodes. (line 163) 28548* H8/300 support: H8/300-Dependent. (line 6) 28549* H8/300H, assembling for: H8/300 Directives. (line 8) 28550* half directive, BPF: BPF Directives. (line 9) 28551* half directive, Nios II: Nios II Directives. (line 10) 28552* half directive, SPARC: Sparc-Directives. (line 17) 28553* half directive, TIC54X: TIC54X-Directives. (line 111) 28554* hex character code (\XD...): Strings. (line 36) 28555* hexadecimal integers: Integers. (line 15) 28556* hexadecimal prefix, S12Z: S12Z Options. (line 17) 28557* hexadecimal prefix, Z80: Z80-Chars. (line 15) 28558* hfloat directive, i386: i386-Float. (line 14) 28559* hfloat directive, VAX: VAX-directives. (line 22) 28560* hfloat directive, x86-64: i386-Float. (line 14) 28561* hi directive, Nios II: Nios II Relocations. 28562 (line 20) 28563* hi pseudo-op, V850: V850 Opcodes. (line 33) 28564* hi0 pseudo-op, V850: V850 Opcodes. (line 10) 28565* hiadj directive, Nios II: Nios II Relocations. 28566 (line 6) 28567* hidden directive: Hidden. (line 6) 28568* high directive, M32R: M32R-Directives. (line 18) 28569* hilo pseudo-op, V850: V850 Opcodes. (line 55) 28570* HPPA directives not supported: HPPA Directives. (line 11) 28571* HPPA floating point (IEEE): HPPA Floating Point. 28572 (line 6) 28573* HPPA Syntax: HPPA Options. (line 8) 28574* HPPA-only directives: HPPA Directives. (line 24) 28575* hword directive: hword. (line 6) 28576* i386 16-bit code: i386-16bit. (line 6) 28577* i386 arch directive: i386-Arch. (line 6) 28578* i386 att_syntax pseudo op: i386-Variations. (line 6) 28579* i386 conversion instructions: i386-Mnemonics. (line 68) 28580* i386 extension instructions: i386-Mnemonics. (line 87) 28581* i386 floating point: i386-Float. (line 6) 28582* i386 immediate operands: i386-Variations. (line 15) 28583* i386 instruction naming: i386-Mnemonics. (line 9) 28584* i386 instruction prefixes: i386-Prefixes. (line 6) 28585* i386 intel_syntax pseudo op: i386-Variations. (line 6) 28586* i386 jump optimization: i386-Jumps. (line 6) 28587* i386 jump, call, return: i386-Variations. (line 46) 28588* i386 jump/call operands: i386-Variations. (line 15) 28589* i386 line comment character: i386-Chars. (line 6) 28590* i386 line separator: i386-Chars. (line 18) 28591* i386 memory references: i386-Memory. (line 6) 28592* i386 mnemonic compatibility: i386-Mnemonics. (line 123) 28593* i386 mul, imul instructions: i386-Notes. (line 6) 28594* i386 options: i386-Options. (line 6) 28595* i386 register operands: i386-Variations. (line 15) 28596* i386 registers: i386-Regs. (line 6) 28597* i386 sections: i386-Variations. (line 52) 28598* i386 size suffixes: i386-Variations. (line 29) 28599* i386 source, destination operands: i386-Variations. (line 22) 28600* i386 support: i386-Dependent. (line 6) 28601* i386 syntax compatibility: i386-Variations. (line 6) 28602* i80386 support: i386-Dependent. (line 6) 28603* IA-64 line comment character: IA-64-Chars. (line 6) 28604* IA-64 line separator: IA-64-Chars. (line 8) 28605* IA-64 options: IA-64 Options. (line 6) 28606* IA-64 Processor-status-Register bit names: IA-64-Bits. (line 6) 28607* IA-64 registers: IA-64-Regs. (line 6) 28608* IA-64 relocations: IA-64-Relocs. (line 6) 28609* IA-64 support: IA-64-Dependent. (line 6) 28610* IA-64 Syntax: IA-64 Options. (line 87) 28611* ident directive: Ident. (line 6) 28612* identifiers, ARM: ARM-Chars. (line 19) 28613* identifiers, MSP 430: MSP430-Chars. (line 17) 28614* if directive: If. (line 6) 28615* ifb directive: If. (line 21) 28616* ifc directive: If. (line 25) 28617* ifdef directive: If. (line 16) 28618* ifeq directive: If. (line 33) 28619* ifeqs directive: If. (line 36) 28620* ifge directive: If. (line 40) 28621* ifgt directive: If. (line 44) 28622* ifle directive: If. (line 48) 28623* iflt directive: If. (line 52) 28624* ifnb directive: If. (line 56) 28625* ifnc directive: If. (line 61) 28626* ifndef directive: If. (line 65) 28627* ifne directive: If. (line 72) 28628* ifnes directive: If. (line 76) 28629* ifnotdef directive: If. (line 65) 28630* immediate character, AArch64: AArch64-Chars. (line 13) 28631* immediate character, ARM: ARM-Chars. (line 17) 28632* immediate character, M680x0: M68K-Chars. (line 13) 28633* immediate character, VAX: VAX-operands. (line 6) 28634* immediate fields, relaxation: Xtensa Immediate Relaxation. 28635 (line 6) 28636* immediate operands, i386: i386-Variations. (line 15) 28637* immediate operands, x86-64: i386-Variations. (line 15) 28638* imul instruction, i386: i386-Notes. (line 6) 28639* imul instruction, x86-64: i386-Notes. (line 6) 28640* incbin directive: Incbin. (line 6) 28641* include directive: Include. (line 6) 28642* include directive search path: I. (line 6) 28643* indirect character, VAX: VAX-operands. (line 9) 28644* infix operators: Infix Ops. (line 6) 28645* inhibiting interrupts, i386: i386-Prefixes. (line 36) 28646* input: Input Files. (line 6) 28647* input file linenumbers: Input Files. (line 35) 28648* INSN directives: RISC-V-Directives. (line 107) 28649* instruction aliases, s390: s390 Aliases. (line 6) 28650* instruction bundle: Bundle directives. (line 9) 28651* instruction expansion, CRIS: CRIS-Expand. (line 6) 28652* instruction expansion, MMIX: MMIX-Expand. (line 6) 28653* instruction formats, risc-v: RISC-V-Formats. (line 6) 28654* instruction formats, s390: s390 Formats. (line 6) 28655* instruction marker, s390: s390 Instruction Marker. 28656 (line 6) 28657* instruction mnemonics, s390: s390 Mnemonics. (line 6) 28658* instruction naming, i386: i386-Mnemonics. (line 9) 28659* instruction naming, x86-64: i386-Mnemonics. (line 9) 28660* instruction operand modifier, s390: s390 Operand Modifier. 28661 (line 6) 28662* instruction operands, s390: s390 Operands. (line 6) 28663* instruction prefixes, i386: i386-Prefixes. (line 6) 28664* instruction set, M680x0: M68K-opcodes. (line 6) 28665* instruction set, M68HC11: M68HC11-opcodes. (line 6) 28666* instruction set, XGATE: XGATE-opcodes. (line 6) 28667* instruction summary, AVR: AVR Opcodes. (line 6) 28668* instruction summary, D10V: D10V-Opcodes. (line 6) 28669* instruction summary, D30V: D30V-Opcodes. (line 6) 28670* instruction summary, H8/300: H8/300 Opcodes. (line 6) 28671* instruction summary, LM32 <1>: OpenRISC-Opcodes. (line 6) 28672* instruction summary, LM32: LM32 Opcodes. (line 6) 28673* instruction summary, SH: SH Opcodes. (line 6) 28674* instruction summary, Z8000: Z8000 Opcodes. (line 6) 28675* instruction syntax, s390: s390 Syntax. (line 6) 28676* instructions and directives: Statements. (line 20) 28677* int directive: Int. (line 6) 28678* int directive, H8/300: H8/300 Directives. (line 6) 28679* int directive, i386: i386-Float. (line 22) 28680* int directive, TIC54X: TIC54X-Directives. (line 111) 28681* int directive, x86-64: i386-Float. (line 22) 28682* integer expressions: Integer Exprs. (line 6) 28683* integer, 16-byte: Octa. (line 6) 28684* integer, 2-byte: 2byte. (line 6) 28685* integer, 4-byte: 4byte. (line 6) 28686* integer, 8-byte <1>: Quad. (line 9) 28687* integer, 8-byte: 8byte. (line 6) 28688* integers: Integers. (line 6) 28689* integers, 16-bit: hword. (line 6) 28690* integers, 32-bit: Int. (line 6) 28691* integers, binary: Integers. (line 6) 28692* integers, decimal: Integers. (line 12) 28693* integers, hexadecimal: Integers. (line 15) 28694* integers, octal: Integers. (line 9) 28695* integers, one byte: Byte. (line 6) 28696* intel_syntax pseudo op, i386: i386-Variations. (line 6) 28697* intel_syntax pseudo op, x86-64: i386-Variations. (line 6) 28698* internal assembler sections: As Sections. (line 6) 28699* internal directive: Internal. (line 6) 28700* interrupt link register, ARC: ARC-Regs. (line 27) 28701* Interrupt Vector Base address, ARC: ARC-Regs. (line 67) 28702* invalid input: Bug Criteria. (line 14) 28703* invocation summary: Overview. (line 6) 28704* IP2K architecture options: IP2K-Opts. (line 14) 28705* IP2K line comment character: IP2K-Chars. (line 6) 28706* IP2K line separator: IP2K-Chars. (line 14) 28707* IP2K options: IP2K-Opts. (line 6) 28708* IP2K support: IP2K-Dependent. (line 6) 28709* irp directive: Irp. (line 6) 28710* irpc directive: Irpc. (line 6) 28711* joining text and data sections: R. (line 6) 28712* jsri2bsr command-line option, C-SKY: C-SKY Options. (line 52) 28713* jump instructions, i386: i386-Mnemonics. (line 117) 28714* jump instructions, relaxation: Xtensa Jump Relaxation. 28715 (line 6) 28716* jump instructions, x86-64: i386-Mnemonics. (line 117) 28717* jump optimization, i386: i386-Jumps. (line 6) 28718* jump optimization, x86-64: i386-Jumps. (line 6) 28719* jump/call operands, i386: i386-Variations. (line 15) 28720* jump/call operands, x86-64: i386-Variations. (line 15) 28721* L16SI instructions, relaxation: Xtensa Immediate Relaxation. 28722 (line 23) 28723* L16UI instructions, relaxation: Xtensa Immediate Relaxation. 28724 (line 23) 28725* L32I instructions, relaxation: Xtensa Immediate Relaxation. 28726 (line 23) 28727* L8UI instructions, relaxation: Xtensa Immediate Relaxation. 28728 (line 23) 28729* label (:): Statements. (line 31) 28730* label directive, TIC54X: TIC54X-Directives. (line 123) 28731* labels: Labels. (line 6) 28732* labels, Z80: Z80-Labels. (line 6) 28733* largecomm directive, ELF: i386-Directives. (line 17) 28734* lcomm directive <1>: ARC Directives. (line 9) 28735* lcomm directive: Lcomm. (line 6) 28736* lcomm directive, COFF: i386-Directives. (line 6) 28737* lcommon directive, ARC: ARC Directives. (line 24) 28738* ld: Object. (line 15) 28739* ldouble directive M680x0: M68K-Float. (line 17) 28740* ldouble directive M68HC11: M68HC11-Float. (line 17) 28741* ldouble directive XGATE: XGATE-Float. (line 16) 28742* ldouble directive, TIC54X: TIC54X-Directives. (line 64) 28743* LDR reg,=<expr> pseudo op, AArch64: AArch64 Opcodes. (line 9) 28744* LDR reg,=<label> pseudo op, ARM: ARM Opcodes. (line 15) 28745* LEB128 directives: RISC-V-Directives. (line 27) 28746* length directive, TIC54X: TIC54X-Directives. (line 127) 28747* length of symbols: Symbol Intro. (line 20) 28748* level 1 interrupt link register, ARC: ARC-Regs. (line 23) 28749* level 2 interrupt link register, ARC: ARC-Regs. (line 31) 28750* lflags directive (ignored): Lflags. (line 6) 28751* line: ARC-Chars. (line 30) 28752* line comment character: Comments. (line 19) 28753* line comment character, AArch64: AArch64-Chars. (line 6) 28754* line comment character, Alpha: Alpha-Chars. (line 6) 28755* line comment character, ARC: ARC-Chars. (line 11) 28756* line comment character, ARM: ARM-Chars. (line 6) 28757* line comment character, AVR: AVR-Chars. (line 6) 28758* line comment character, BPF: BPF-Chars. (line 6) 28759* line comment character, CR16: CR16-Chars. (line 6) 28760* line comment character, D10V: D10V-Chars. (line 6) 28761* line comment character, D30V: D30V-Chars. (line 6) 28762* line comment character, Epiphany: Epiphany-Chars. (line 6) 28763* line comment character, H8/300: H8/300-Chars. (line 6) 28764* line comment character, i386: i386-Chars. (line 6) 28765* line comment character, IA-64: IA-64-Chars. (line 6) 28766* line comment character, IP2K: IP2K-Chars. (line 6) 28767* line comment character, LM32: LM32-Chars. (line 6) 28768* line comment character, M32C: M32C-Chars. (line 6) 28769* line comment character, M680x0: M68K-Chars. (line 6) 28770* line comment character, M68HC11: M68HC11-Syntax. (line 17) 28771* line comment character, Meta: Meta-Chars. (line 6) 28772* line comment character, MicroBlaze: MicroBlaze-Chars. (line 6) 28773* line comment character, MIPS: MIPS-Chars. (line 6) 28774* line comment character, MSP 430: MSP430-Chars. (line 6) 28775* line comment character, Nios II: Nios II Chars. (line 6) 28776* line comment character, NS32K: NS32K-Chars. (line 6) 28777* line comment character, OpenRISC: OpenRISC-Chars. (line 6) 28778* line comment character, PJ: PJ-Chars. (line 6) 28779* line comment character, PowerPC: PowerPC-Chars. (line 6) 28780* line comment character, PRU: PRU Chars. (line 6) 28781* line comment character, RL78: RL78-Chars. (line 6) 28782* line comment character, RX: RX-Chars. (line 6) 28783* line comment character, S12Z: S12Z Syntax Overview. 28784 (line 32) 28785* line comment character, s390: s390 Characters. (line 6) 28786* line comment character, SCORE: SCORE-Chars. (line 6) 28787* line comment character, SH: SH-Chars. (line 6) 28788* line comment character, Sparc: Sparc-Chars. (line 6) 28789* line comment character, TIC54X: TIC54X-Chars. (line 6) 28790* line comment character, TIC6X: TIC6X Syntax. (line 6) 28791* line comment character, V850: V850-Chars. (line 6) 28792* line comment character, VAX: VAX-Chars. (line 6) 28793* line comment character, Visium: Visium Characters. (line 6) 28794* line comment character, WebAssembly: WebAssembly-Chars. (line 6) 28795* line comment character, XGATE: XGATE-Syntax. (line 16) 28796* line comment character, XStormy16: XStormy16-Chars. (line 6) 28797* line comment character, Z80: Z80-Chars. (line 6) 28798* line comment character, Z8000: Z8000-Chars. (line 6) 28799* line comment characters, CRIS: CRIS-Chars. (line 6) 28800* line comment characters, MMIX: MMIX-Chars. (line 6) 28801* line directive: Line. (line 6) 28802* line directive, MSP 430: MSP430 Directives. (line 14) 28803* line numbers, in input files: Input Files. (line 35) 28804* line separator character: Statements. (line 6) 28805* line separator character, Nios II: Nios II Chars. (line 6) 28806* line separator, AArch64: AArch64-Chars. (line 10) 28807* line separator, Alpha: Alpha-Chars. (line 11) 28808* line separator, ARC: ARC-Chars. (line 27) 28809* line separator, ARM: ARM-Chars. (line 14) 28810* line separator, AVR: AVR-Chars. (line 14) 28811* line separator, CR16: CR16-Chars. (line 13) 28812* line separator, Epiphany: Epiphany-Chars. (line 14) 28813* line separator, H8/300: H8/300-Chars. (line 8) 28814* line separator, i386: i386-Chars. (line 18) 28815* line separator, IA-64: IA-64-Chars. (line 8) 28816* line separator, IP2K: IP2K-Chars. (line 14) 28817* line separator, LM32: LM32-Chars. (line 12) 28818* line separator, M32C: M32C-Chars. (line 14) 28819* line separator, M680x0: M68K-Chars. (line 20) 28820* line separator, M68HC11: M68HC11-Syntax. (line 27) 28821* line separator, Meta: Meta-Chars. (line 8) 28822* line separator, MicroBlaze: MicroBlaze-Chars. (line 14) 28823* line separator, MIPS: MIPS-Chars. (line 14) 28824* line separator, MSP 430: MSP430-Chars. (line 14) 28825* line separator, NS32K: NS32K-Chars. (line 18) 28826* line separator, OpenRISC: OpenRISC-Chars. (line 9) 28827* line separator, PJ: PJ-Chars. (line 14) 28828* line separator, PowerPC: PowerPC-Chars. (line 18) 28829* line separator, RL78: RL78-Chars. (line 14) 28830* line separator, RX: RX-Chars. (line 14) 28831* line separator, S12Z: S12Z Syntax Overview. 28832 (line 41) 28833* line separator, s390: s390 Characters. (line 13) 28834* line separator, SCORE: SCORE-Chars. (line 14) 28835* line separator, SH: SH-Chars. (line 8) 28836* line separator, Sparc: Sparc-Chars. (line 14) 28837* line separator, TIC54X: TIC54X-Chars. (line 17) 28838* line separator, TIC6X: TIC6X Syntax. (line 13) 28839* line separator, V850: V850-Chars. (line 13) 28840* line separator, VAX: VAX-Chars. (line 14) 28841* line separator, Visium: Visium Characters. (line 14) 28842* line separator, XGATE: XGATE-Syntax. (line 26) 28843* line separator, XStormy16: XStormy16-Chars. (line 14) 28844* line separator, Z80: Z80-Chars. (line 13) 28845* line separator, Z8000: Z8000-Chars. (line 13) 28846* lines starting with #: Comments. (line 33) 28847* link register, ARC: ARC-Regs. (line 35) 28848* linker: Object. (line 15) 28849* linker, and assembler: Secs Background. (line 10) 28850* linkonce directive: Linkonce. (line 6) 28851* list directive: List. (line 6) 28852* list directive, TIC54X: TIC54X-Directives. (line 131) 28853* listing control, turning off: Nolist. (line 6) 28854* listing control, turning on: List. (line 6) 28855* listing control: new page: Eject. (line 6) 28856* listing control: paper size: Psize. (line 6) 28857* listing control: subtitle: Sbttl. (line 6) 28858* listing control: title line: Title. (line 6) 28859* listings, enabling: a. (line 6) 28860* literal directive: Literal Directive. (line 6) 28861* literal pool entries, s390: s390 Literal Pool Entries. 28862 (line 6) 28863* literal_position directive: Literal Position Directive. 28864 (line 6) 28865* literal_prefix directive: Literal Prefix Directive. 28866 (line 6) 28867* little endian output, MIPS: Overview. (line 894) 28868* little endian output, PJ: Overview. (line 794) 28869* little-endian output, MIPS: MIPS Options. (line 13) 28870* little-endian output, TIC6X: TIC6X Options. (line 46) 28871* LM32 line comment character: LM32-Chars. (line 6) 28872* LM32 line separator: LM32-Chars. (line 12) 28873* LM32 modifiers: LM32-Modifiers. (line 6) 28874* LM32 opcode summary: LM32 Opcodes. (line 6) 28875* LM32 options (none): LM32 Options. (line 6) 28876* LM32 register names: LM32-Regs. (line 6) 28877* LM32 support: LM32-Dependent. (line 6) 28878* ln directive: Ln. (line 6) 28879* lo directive, Nios II: Nios II Relocations. 28880 (line 23) 28881* lo pseudo-op, V850: V850 Opcodes. (line 22) 28882* loc directive: Loc. (line 6) 28883* loc_mark_labels directive: Loc_mark_labels. (line 6) 28884* local common symbols: Lcomm. (line 6) 28885* local directive: Local. (line 6) 28886* local labels: Symbol Names. (line 53) 28887* local symbol names: Symbol Names. (line 40) 28888* local symbols, retaining in output: L. (line 6) 28889* location counter: Dot. (line 6) 28890* location counter, advancing: Org. (line 6) 28891* location counter, Z80: Z80-Chars. (line 15) 28892* logical file name: File. (line 13) 28893* logical line number: Line. (line 6) 28894* logical line numbers: Comments. (line 33) 28895* long directive: Long. (line 6) 28896* long directive, i386: i386-Float. (line 22) 28897* long directive, TIC54X: TIC54X-Directives. (line 135) 28898* long directive, x86-64: i386-Float. (line 22) 28899* longcall pseudo-op, V850: V850 Opcodes. (line 123) 28900* longcalls directive: Longcalls Directive. 28901 (line 6) 28902* longjump pseudo-op, V850: V850 Opcodes. (line 129) 28903* Loongson Content Address Memory (CAM) generation override: MIPS ASE Instruction Generation Overrides. 28904 (line 82) 28905* Loongson EXTensions (EXT) instructions generation override: MIPS ASE Instruction Generation Overrides. 28906 (line 87) 28907* Loongson EXTensions R2 (EXT2) instructions generation override: MIPS ASE Instruction Generation Overrides. 28908 (line 92) 28909* Loongson MultiMedia extensions Instructions (MMI) generation override: MIPS ASE Instruction Generation Overrides. 28910 (line 77) 28911* loop counter, ARC: ARC-Regs. (line 41) 28912* loop directive, TIC54X: TIC54X-Directives. (line 143) 28913* LOOP instructions, alignment: Xtensa Automatic Alignment. 28914 (line 6) 28915* low directive, M32R: M32R-Directives. (line 9) 28916* lp register, V850: V850-Regs. (line 98) 28917* lval: Z8000 Directives. (line 27) 28918* LWP, i386: i386-LWP. (line 6) 28919* LWP, x86-64: i386-LWP. (line 6) 28920* M16C architecture option: M32C-Opts. (line 12) 28921* M32C architecture option: M32C-Opts. (line 9) 28922* M32C line comment character: M32C-Chars. (line 6) 28923* M32C line separator: M32C-Chars. (line 14) 28924* M32C modifiers: M32C-Modifiers. (line 6) 28925* M32C options: M32C-Opts. (line 6) 28926* M32C support: M32C-Dependent. (line 6) 28927* M32R architecture options: M32R-Opts. (line 17) 28928* M32R directives: M32R-Directives. (line 6) 28929* M32R options: M32R-Opts. (line 6) 28930* M32R support: M32R-Dependent. (line 6) 28931* M32R warnings: M32R-Warnings. (line 6) 28932* M680x0 addressing modes: M68K-Syntax. (line 21) 28933* M680x0 architecture options: M68K-Opts. (line 98) 28934* M680x0 branch improvement: M68K-Branch. (line 6) 28935* M680x0 directives: M68K-Directives. (line 6) 28936* M680x0 floating point: M68K-Float. (line 6) 28937* M680x0 immediate character: M68K-Chars. (line 13) 28938* M680x0 line comment character: M68K-Chars. (line 6) 28939* M680x0 line separator: M68K-Chars. (line 20) 28940* M680x0 opcodes: M68K-opcodes. (line 6) 28941* M680x0 options: M68K-Opts. (line 6) 28942* M680x0 pseudo-opcodes: M68K-Branch. (line 6) 28943* M680x0 size modifiers: M68K-Syntax. (line 8) 28944* M680x0 support: M68K-Dependent. (line 6) 28945* M680x0 syntax: M68K-Syntax. (line 8) 28946* M68HC11 addressing modes: M68HC11-Syntax. (line 30) 28947* M68HC11 and M68HC12 support: M68HC11-Dependent. (line 6) 28948* M68HC11 assembler directive .far: M68HC11-Directives. (line 20) 28949* M68HC11 assembler directive .interrupt: M68HC11-Directives. 28950 (line 26) 28951* M68HC11 assembler directive .mode: M68HC11-Directives. (line 16) 28952* M68HC11 assembler directive .relax: M68HC11-Directives. (line 10) 28953* M68HC11 assembler directive .xrefb: M68HC11-Directives. (line 31) 28954* M68HC11 assembler directives: M68HC11-Directives. (line 6) 28955* M68HC11 branch improvement: M68HC11-Branch. (line 6) 28956* M68HC11 floating point: M68HC11-Float. (line 6) 28957* M68HC11 line comment character: M68HC11-Syntax. (line 17) 28958* M68HC11 line separator: M68HC11-Syntax. (line 27) 28959* M68HC11 modifiers: M68HC11-Modifiers. (line 6) 28960* M68HC11 opcodes: M68HC11-opcodes. (line 6) 28961* M68HC11 options: M68HC11-Opts. (line 6) 28962* M68HC11 pseudo-opcodes: M68HC11-Branch. (line 6) 28963* M68HC11 syntax: M68HC11-Syntax. (line 6) 28964* M68HC12 assembler directives: M68HC11-Directives. (line 6) 28965* mA6 command-line option, ARC: ARC Options. (line 14) 28966* mA7 command-line option, ARC: ARC Options. (line 39) 28967* machine dependencies: Machine Dependencies. 28968 (line 6) 28969* machine directives, AArch64: AArch64 Directives. (line 6) 28970* machine directives, ARC: ARC Directives. (line 6) 28971* machine directives, ARM: ARM Directives. (line 6) 28972* machine directives, BPF: BPF Directives. (line 6) 28973* machine directives, H8/300 (none): H8/300 Directives. (line 6) 28974* machine directives, MSP 430: MSP430 Directives. (line 6) 28975* machine directives, Nios II: Nios II Directives. (line 6) 28976* machine directives, OPENRISC: OpenRISC-Directives. 28977 (line 6) 28978* machine directives, PRU: PRU Directives. (line 6) 28979* machine directives, RISC-V: RISC-V-Directives. (line 6) 28980* machine directives, SH: SH Directives. (line 6) 28981* machine directives, SPARC: Sparc-Directives. (line 6) 28982* machine directives, TIC54X: TIC54X-Directives. (line 6) 28983* machine directives, TIC6X: TIC6X Directives. (line 6) 28984* machine directives, TILE-Gx: TILE-Gx Directives. (line 6) 28985* machine directives, TILEPro: TILEPro Directives. (line 6) 28986* machine directives, V850: V850 Directives. (line 6) 28987* machine directives, VAX: VAX-directives. (line 6) 28988* machine directives, x86: i386-Directives. (line 6) 28989* machine directives, XStormy16: XStormy16 Directives. 28990 (line 6) 28991* machine independent directives: Pseudo Ops. (line 6) 28992* machine instructions (not covered): Manual. (line 14) 28993* machine relocations, Nios II: Nios II Relocations. 28994 (line 6) 28995* machine relocations, PRU: PRU Relocations. (line 6) 28996* machine-independent syntax: Syntax. (line 6) 28997* macro directive: Macro. (line 28) 28998* macro directive, TIC54X: TIC54X-Directives. (line 153) 28999* macros: Macro. (line 6) 29000* macros, count executed: Macro. (line 168) 29001* Macros, MSP 430: MSP430-Macros. (line 6) 29002* macros, TIC54X: TIC54X-Macros. (line 6) 29003* make rules: MD. (line 6) 29004* manual, structure and purpose: Manual. (line 6) 29005* marc600 command-line option, ARC: ARC Options. (line 14) 29006* mARC601 command-line option, ARC: ARC Options. (line 27) 29007* mARC700 command-line option, ARC: ARC Options. (line 39) 29008* march command-line option, C-SKY: C-SKY Options. (line 6) 29009* march command-line option, Nios II: Nios II Options. (line 29) 29010* math builtins, TIC54X: TIC54X-Builtins. (line 6) 29011* Maximum number of continuation lines: listing. (line 34) 29012* mbig-endian command-line option, C-SKY: C-SKY Options. (line 18) 29013* mbranch-stub command-line option, C-SKY: C-SKY Options. (line 34) 29014* mcache command-line option, C-SKY: C-SKY Options. (line 101) 29015* mcp command-line option, C-SKY: C-SKY Options. (line 98) 29016* mcpu command-line option, C-SKY: C-SKY Options. (line 10) 29017* mdsp command-line option, C-SKY: C-SKY Options. (line 110) 29018* medsp command-line option, C-SKY: C-SKY Options. (line 113) 29019* melrw command-line option, C-SKY: C-SKY Options. (line 64) 29020* mEM command-line option, ARC: ARC Options. (line 42) 29021* memory references, i386: i386-Memory. (line 6) 29022* memory references, x86-64: i386-Memory. (line 6) 29023* memory-mapped registers, TIC54X: TIC54X-MMRegs. (line 6) 29024* merging text and data sections: R. (line 6) 29025* messages from assembler: Errors. (line 6) 29026* Meta architectures: Meta Options. (line 6) 29027* Meta line comment character: Meta-Chars. (line 6) 29028* Meta line separator: Meta-Chars. (line 8) 29029* Meta options: Meta Options. (line 6) 29030* Meta registers: Meta-Regs. (line 6) 29031* Meta support: Meta-Dependent. (line 6) 29032* mforce2bsr command-line option, C-SKY: C-SKY Options. (line 43) 29033* mhard-float command-line option, C-SKY: C-SKY Options. (line 92) 29034* mHS command-line option, ARC: ARC Options. (line 64) 29035* MicroBlaze architectures: MicroBlaze-Dependent. 29036 (line 6) 29037* MicroBlaze directives: MicroBlaze Directives. 29038 (line 6) 29039* MicroBlaze line comment character: MicroBlaze-Chars. (line 6) 29040* MicroBlaze line separator: MicroBlaze-Chars. (line 14) 29041* MicroBlaze support: MicroBlaze-Dependent. 29042 (line 13) 29043* minus, permitted arguments: Infix Ops. (line 49) 29044* MIPS 32-bit microMIPS instruction generation override: MIPS assembly options. 29045 (line 18) 29046* MIPS architecture options: MIPS Options. (line 29) 29047* MIPS big-endian output: MIPS Options. (line 13) 29048* MIPS CPU override: MIPS ISA. (line 19) 29049* MIPS cyclic redundancy check (CRC) instruction generation override: MIPS ASE Instruction Generation Overrides. 29050 (line 69) 29051* MIPS directives to override command-line options: MIPS assembly options. 29052 (line 6) 29053* MIPS DSP Release 1 instruction generation override: MIPS ASE Instruction Generation Overrides. 29054 (line 21) 29055* MIPS DSP Release 2 instruction generation override: MIPS ASE Instruction Generation Overrides. 29056 (line 26) 29057* MIPS DSP Release 3 instruction generation override: MIPS ASE Instruction Generation Overrides. 29058 (line 32) 29059* MIPS endianness: Overview. (line 891) 29060* MIPS eXtended Physical Address (XPA) instruction generation override: MIPS ASE Instruction Generation Overrides. 29061 (line 58) 29062* MIPS Global INValidate (GINV) instruction generation override: MIPS ASE Instruction Generation Overrides. 29063 (line 73) 29064* MIPS IEEE 754 NaN data encoding selection: MIPS NaN Encodings. 29065 (line 6) 29066* MIPS ISA: Overview. (line 897) 29067* MIPS ISA override: MIPS ISA. (line 6) 29068* MIPS line comment character: MIPS-Chars. (line 6) 29069* MIPS line separator: MIPS-Chars. (line 14) 29070* MIPS little-endian output: MIPS Options. (line 13) 29071* MIPS MCU instruction generation override: MIPS ASE Instruction Generation Overrides. 29072 (line 43) 29073* MIPS MDMX instruction generation override: MIPS ASE Instruction Generation Overrides. 29074 (line 16) 29075* MIPS MIPS-3D instruction generation override: MIPS ASE Instruction Generation Overrides. 29076 (line 6) 29077* MIPS MT instruction generation override: MIPS ASE Instruction Generation Overrides. 29078 (line 38) 29079* MIPS option stack: MIPS Option Stack. (line 6) 29080* MIPS processor: MIPS-Dependent. (line 6) 29081* MIPS SIMD Architecture instruction generation override: MIPS ASE Instruction Generation Overrides. 29082 (line 48) 29083* MIPS16e2 instruction generation override: MIPS ASE Instruction Generation Overrides. 29084 (line 62) 29085* mistack command-line option, C-SKY: C-SKY Options. (line 82) 29086* MIT: M68K-Syntax. (line 6) 29087* mjsri2bsr command-line option, C-SKY: C-SKY Options. (line 52) 29088* mlabr command-line option, C-SKY: C-SKY Options. (line 75) 29089* mlaf command-line option, C-SKY: C-SKY Options. (line 69) 29090* mlib directive, TIC54X: TIC54X-Directives. (line 159) 29091* mlink-relax command-line option, PRU: PRU Options. (line 6) 29092* mlist directive, TIC54X: TIC54X-Directives. (line 164) 29093* mliterals-after-br command-line option, C-SKY: C-SKY Options. 29094 (line 75) 29095* mliterals-after-func command-line option, C-SKY: C-SKY Options. 29096 (line 69) 29097* mlittle-endian command-line option, C-SKY: C-SKY Options. (line 14) 29098* mljump command-line option, C-SKY: C-SKY Options. (line 26) 29099* MMIX assembler directive BSPEC: MMIX-Pseudos. (line 131) 29100* MMIX assembler directive BYTE: MMIX-Pseudos. (line 97) 29101* MMIX assembler directive ESPEC: MMIX-Pseudos. (line 131) 29102* MMIX assembler directive GREG: MMIX-Pseudos. (line 50) 29103* MMIX assembler directive IS: MMIX-Pseudos. (line 42) 29104* MMIX assembler directive LOC: MMIX-Pseudos. (line 7) 29105* MMIX assembler directive LOCAL: MMIX-Pseudos. (line 28) 29106* MMIX assembler directive OCTA: MMIX-Pseudos. (line 108) 29107* MMIX assembler directive PREFIX: MMIX-Pseudos. (line 120) 29108* MMIX assembler directive TETRA: MMIX-Pseudos. (line 108) 29109* MMIX assembler directive WYDE: MMIX-Pseudos. (line 108) 29110* MMIX assembler directives: MMIX-Pseudos. (line 6) 29111* MMIX line comment characters: MMIX-Chars. (line 6) 29112* MMIX options: MMIX-Opts. (line 6) 29113* MMIX pseudo-op BSPEC: MMIX-Pseudos. (line 131) 29114* MMIX pseudo-op BYTE: MMIX-Pseudos. (line 97) 29115* MMIX pseudo-op ESPEC: MMIX-Pseudos. (line 131) 29116* MMIX pseudo-op GREG: MMIX-Pseudos. (line 50) 29117* MMIX pseudo-op IS: MMIX-Pseudos. (line 42) 29118* MMIX pseudo-op LOC: MMIX-Pseudos. (line 7) 29119* MMIX pseudo-op LOCAL: MMIX-Pseudos. (line 28) 29120* MMIX pseudo-op OCTA: MMIX-Pseudos. (line 108) 29121* MMIX pseudo-op PREFIX: MMIX-Pseudos. (line 120) 29122* MMIX pseudo-op TETRA: MMIX-Pseudos. (line 108) 29123* MMIX pseudo-op WYDE: MMIX-Pseudos. (line 108) 29124* MMIX pseudo-ops: MMIX-Pseudos. (line 6) 29125* MMIX register names: MMIX-Regs. (line 6) 29126* MMIX support: MMIX-Dependent. (line 6) 29127* mmixal differences: MMIX-mmixal. (line 6) 29128* mmp command-line option, C-SKY: C-SKY Options. (line 95) 29129* mmregs directive, TIC54X: TIC54X-Directives. (line 169) 29130* mmsg directive, TIC54X: TIC54X-Directives. (line 77) 29131* MMX, i386: i386-SIMD. (line 6) 29132* MMX, x86-64: i386-SIMD. (line 6) 29133* mnemonic compatibility, i386: i386-Mnemonics. (line 123) 29134* mnemonic suffixes, i386: i386-Variations. (line 29) 29135* mnemonic suffixes, x86-64: i386-Variations. (line 29) 29136* mnemonics for opcodes, VAX: VAX-opcodes. (line 6) 29137* mnemonics, AVR: AVR Opcodes. (line 6) 29138* mnemonics, D10V: D10V-Opcodes. (line 6) 29139* mnemonics, D30V: D30V-Opcodes. (line 6) 29140* mnemonics, H8/300: H8/300 Opcodes. (line 6) 29141* mnemonics, LM32: LM32 Opcodes. (line 6) 29142* mnemonics, OpenRISC: OpenRISC-Opcodes. (line 6) 29143* mnemonics, SH: SH Opcodes. (line 6) 29144* mnemonics, Z8000: Z8000 Opcodes. (line 6) 29145* mno-branch-stub command-line option, C-SKY: C-SKY Options. (line 34) 29146* mno-elrw command-line option, C-SKY: C-SKY Options. (line 64) 29147* mno-force2bsr command-line option, C-SKY: C-SKY Options. (line 43) 29148* mno-istack command-line option, C-SKY: C-SKY Options. (line 82) 29149* mno-jsri2bsr command-line option, C-SKY: C-SKY Options. (line 52) 29150* mno-labr command-line option, C-SKY: C-SKY Options. (line 75) 29151* mno-laf command-line option, C-SKY: C-SKY Options. (line 69) 29152* mno-link-relax command-line option, PRU: PRU Options. (line 12) 29153* mno-literals-after-func command-line option, C-SKY: C-SKY Options. 29154 (line 69) 29155* mno-ljump command-line option, C-SKY: C-SKY Options. (line 26) 29156* mno-lrw command-line option, C-SKY: C-SKY Options. (line 59) 29157* mno-warn-regname-label command-line option, PRU: PRU Options. 29158 (line 16) 29159* mnolist directive, TIC54X: TIC54X-Directives. (line 164) 29160* mnoliterals-after-br command-line option, C-SKY: C-SKY Options. 29161 (line 75) 29162* mnolrw command-line option, C-SKY: C-SKY Options. (line 59) 29163* mnps400 command-line option, ARC: ARC Options. (line 79) 29164* modifiers, M32C: M32C-Modifiers. (line 6) 29165* module layout, WebAssembly: WebAssembly-module-layout. 29166 (line 6) 29167* Motorola syntax for the 680x0: M68K-Moto-Syntax. (line 6) 29168* MOVI instructions, relaxation: Xtensa Immediate Relaxation. 29169 (line 12) 29170* MOVN, MOVZ and MOVK group relocations, AArch64: AArch64-Relocations. 29171 (line 6) 29172* MOVW and MOVT relocations, ARM: ARM-Relocations. (line 21) 29173* MRI compatibility mode: M. (line 6) 29174* mri directive: MRI. (line 6) 29175* MRI mode, temporarily: MRI. (line 6) 29176* msecurity command-line option, C-SKY: C-SKY Options. (line 104) 29177* MSP 430 floating point (IEEE): MSP430 Floating Point. 29178 (line 6) 29179* MSP 430 identifiers: MSP430-Chars. (line 17) 29180* MSP 430 line comment character: MSP430-Chars. (line 6) 29181* MSP 430 line separator: MSP430-Chars. (line 14) 29182* MSP 430 machine directives: MSP430 Directives. (line 6) 29183* MSP 430 macros: MSP430-Macros. (line 6) 29184* MSP 430 opcodes: MSP430 Opcodes. (line 6) 29185* MSP 430 options (none): MSP430 Options. (line 6) 29186* MSP 430 profiling capability: MSP430 Profiling Capability. 29187 (line 6) 29188* MSP 430 register names: MSP430-Regs. (line 6) 29189* MSP 430 support: MSP430-Dependent. (line 6) 29190* MSP430 Assembler Extensions: MSP430-Ext. (line 6) 29191* mspabi_attribute directive, MSP430: MSP430 Directives. (line 39) 29192* mtrust command-line option, C-SKY: C-SKY Options. (line 107) 29193* mul instruction, i386: i386-Notes. (line 6) 29194* mul instruction, x86-64: i386-Notes. (line 6) 29195* mvdsp command-line option, C-SKY: C-SKY Options. (line 116) 29196* N32K support: NS32K-Dependent. (line 6) 29197* name: Z8000 Directives. (line 18) 29198* named section: Section. (line 6) 29199* named sections: Ld Sections. (line 8) 29200* names, symbol: Symbol Names. (line 6) 29201* naming object file: o. (line 6) 29202* NDS32 options: NDS32 Options. (line 6) 29203* NDS32 processor: NDS32-Dependent. (line 6) 29204* new page, in listings: Eject. (line 6) 29205* newblock directive, TIC54X: TIC54X-Directives. (line 175) 29206* newline (\n): Strings. (line 21) 29207* newline, required at file end: Statements. (line 14) 29208* Nios II line comment character: Nios II Chars. (line 6) 29209* Nios II line separator character: Nios II Chars. (line 6) 29210* Nios II machine directives: Nios II Directives. (line 6) 29211* Nios II machine relocations: Nios II Relocations. 29212 (line 6) 29213* Nios II opcodes: Nios II Opcodes. (line 6) 29214* Nios II options: Nios II Options. (line 6) 29215* Nios II support: NiosII-Dependent. (line 6) 29216* Nios support: NiosII-Dependent. (line 6) 29217* no-absolute-literals directive: Absolute Literals Directive. 29218 (line 6) 29219* no-force2bsr command-line option, C-SKY: C-SKY Options. (line 43) 29220* no-jsri2bsr command-line option, C-SKY: C-SKY Options. (line 52) 29221* no-longcalls directive: Longcalls Directive. 29222 (line 6) 29223* no-relax command-line option, Nios II: Nios II Options. (line 20) 29224* no-schedule directive: Schedule Directive. (line 6) 29225* no-transform directive: Transform Directive. 29226 (line 6) 29227* nodelay directive, OpenRISC: OpenRISC-Directives. 29228 (line 15) 29229* nolist directive: Nolist. (line 6) 29230* nolist directive, TIC54X: TIC54X-Directives. (line 131) 29231* nop directive: Nop. (line 6) 29232* NOP pseudo op, ARM: ARM Opcodes. (line 9) 29233* nops directive: Nops. (line 6) 29234* notes for Alpha: Alpha Notes. (line 6) 29235* notes for WebAssembly: WebAssembly-Notes. (line 6) 29236* NS32K line comment character: NS32K-Chars. (line 6) 29237* NS32K line separator: NS32K-Chars. (line 18) 29238* null-terminated strings: Asciz. (line 6) 29239* number constants: Numbers. (line 6) 29240* number of macros executed: Macro. (line 168) 29241* numbered subsections: Sub-Sections. (line 6) 29242* numbers, 16-bit: hword. (line 6) 29243* numeric values: Expressions. (line 6) 29244* nword directive, SPARC: Sparc-Directives. (line 20) 29245* Object Attribute, RISC-V: RISC-V-ATTRIBUTE. (line 6) 29246* object attributes: Object Attributes. (line 6) 29247* object file: Object. (line 6) 29248* object file format: Object Formats. (line 6) 29249* object file name: o. (line 6) 29250* object file, after errors: Z. (line 6) 29251* obsolescent directives: Deprecated. (line 6) 29252* octa directive: Octa. (line 6) 29253* octal character code (\DDD): Strings. (line 30) 29254* octal integers: Integers. (line 9) 29255* offset directive: Offset. (line 6) 29256* offset directive, V850: V850 Directives. (line 6) 29257* opcode mnemonics, VAX: VAX-opcodes. (line 6) 29258* opcode names, TILE-Gx: TILE-Gx Opcodes. (line 6) 29259* opcode names, TILEPro: TILEPro Opcodes. (line 6) 29260* opcode names, Xtensa: Xtensa Opcodes. (line 6) 29261* opcode summary, AVR: AVR Opcodes. (line 6) 29262* opcode summary, D10V: D10V-Opcodes. (line 6) 29263* opcode summary, D30V: D30V-Opcodes. (line 6) 29264* opcode summary, H8/300: H8/300 Opcodes. (line 6) 29265* opcode summary, LM32: LM32 Opcodes. (line 6) 29266* opcode summary, OpenRISC: OpenRISC-Opcodes. (line 6) 29267* opcode summary, SH: SH Opcodes. (line 6) 29268* opcode summary, Z8000: Z8000 Opcodes. (line 6) 29269* opcodes for AArch64: AArch64 Opcodes. (line 6) 29270* opcodes for ARC: ARC Opcodes. (line 6) 29271* opcodes for ARM: ARM Opcodes. (line 6) 29272* opcodes for BPF: BPF Opcodes. (line 6) 29273* opcodes for MSP 430: MSP430 Opcodes. (line 6) 29274* opcodes for Nios II: Nios II Opcodes. (line 6) 29275* opcodes for PRU: PRU Opcodes. (line 6) 29276* opcodes for V850: V850 Opcodes. (line 6) 29277* opcodes, M680x0: M68K-opcodes. (line 6) 29278* opcodes, M68HC11: M68HC11-opcodes. (line 6) 29279* opcodes, WebAssembly: WebAssembly-Opcodes. 29280 (line 6) 29281* OPENRISC floating point (IEEE): OpenRISC-Float. (line 6) 29282* OpenRISC line comment character: OpenRISC-Chars. (line 6) 29283* OpenRISC line separator: OpenRISC-Chars. (line 9) 29284* OPENRISC machine directives: OpenRISC-Directives. 29285 (line 6) 29286* OpenRISC opcode summary: OpenRISC-Opcodes. (line 6) 29287* OpenRISC registers: OpenRISC-Regs. (line 6) 29288* OpenRISC relocations: OpenRISC-Relocs. (line 6) 29289* OPENRISC support: OpenRISC-Dependent. (line 6) 29290* OPENRISC syntax: OpenRISC-Dependent. (line 13) 29291* operand delimiters, i386: i386-Variations. (line 15) 29292* operand delimiters, x86-64: i386-Variations. (line 15) 29293* operand notation, VAX: VAX-operands. (line 6) 29294* operands in expressions: Arguments. (line 6) 29295* operator precedence: Infix Ops. (line 11) 29296* operators, in expressions: Operators. (line 6) 29297* operators, permitted arguments: Infix Ops. (line 6) 29298* optimization, D10V: Overview. (line 665) 29299* optimization, D30V: Overview. (line 670) 29300* optimizations: Xtensa Optimizations. 29301 (line 6) 29302* option directive: RISC-V-Directives. (line 34) 29303* Option directive: RISC-V-Directives. (line 34) 29304* option directive, TIC54X: TIC54X-Directives. (line 179) 29305* option summary: Overview. (line 6) 29306* options for AArch64 (none): AArch64 Options. (line 6) 29307* options for Alpha: Alpha Options. (line 6) 29308* options for ARC: ARC Options. (line 6) 29309* options for ARM (none): ARM Options. (line 6) 29310* options for AVR (none): AVR Options. (line 6) 29311* options for Blackfin (none): Blackfin Options. (line 6) 29312* options for BPF (none): BPF Options. (line 6) 29313* options for C-SKY: C-SKY Options. (line 6) 29314* options for i386: i386-Options. (line 6) 29315* options for IA-64: IA-64 Options. (line 6) 29316* options for LM32 (none): LM32 Options. (line 6) 29317* options for Meta: Meta Options. (line 6) 29318* options for MSP430 (none): MSP430 Options. (line 6) 29319* options for NDS32: NDS32 Options. (line 6) 29320* options for Nios II: Nios II Options. (line 6) 29321* options for PDP-11: PDP-11-Options. (line 6) 29322* options for PowerPC: PowerPC-Opts. (line 6) 29323* options for PRU: PRU Options. (line 6) 29324* options for s390: s390 Options. (line 6) 29325* options for SCORE: SCORE-Opts. (line 6) 29326* options for SPARC: Sparc-Opts. (line 6) 29327* options for TIC6X: TIC6X Options. (line 6) 29328* options for V850 (none): V850 Options. (line 6) 29329* options for VAX/VMS: VAX-Opts. (line 42) 29330* options for Visium: Visium Options. (line 6) 29331* options for x86-64: i386-Options. (line 6) 29332* options for Z80: Z80 Options. (line 6) 29333* options, all versions of assembler: Invoking. (line 6) 29334* options, command line: Command Line. (line 13) 29335* options, CRIS: CRIS-Opts. (line 6) 29336* options, D10V: D10V-Opts. (line 6) 29337* options, D30V: D30V-Opts. (line 6) 29338* options, Epiphany: Epiphany Options. (line 6) 29339* options, H8/300: H8/300 Options. (line 6) 29340* options, IP2K: IP2K-Opts. (line 6) 29341* options, M32C: M32C-Opts. (line 6) 29342* options, M32R: M32R-Opts. (line 6) 29343* options, M680x0: M68K-Opts. (line 6) 29344* options, M68HC11: M68HC11-Opts. (line 6) 29345* options, MMIX: MMIX-Opts. (line 6) 29346* options, PJ: PJ Options. (line 6) 29347* options, RL78: RL78-Opts. (line 6) 29348* options, RX: RX-Opts. (line 6) 29349* options, S12Z: S12Z Options. (line 6) 29350* options, SH: SH Options. (line 6) 29351* options, TIC54X: TIC54X-Opts. (line 6) 29352* options, XGATE: XGATE-Opts. (line 6) 29353* options, Z8000: Z8000 Options. (line 6) 29354* org directive: Org. (line 6) 29355* other attribute, of a.out symbol: Symbol Other. (line 6) 29356* output file: Object. (line 6) 29357* output section padding: no-pad-sections. (line 6) 29358* p2align directive: P2align. (line 6) 29359* p2alignl directive: P2align. (line 30) 29360* p2alignw directive: P2align. (line 30) 29361* padding the location counter: Align. (line 6) 29362* padding the location counter given a power of two: P2align. 29363 (line 6) 29364* padding the location counter given number of bytes: Balign. 29365 (line 6) 29366* page, in listings: Eject. (line 6) 29367* paper size, for listings: Psize. (line 6) 29368* paths for .include: I. (line 6) 29369* patterns, writing in memory: Fill. (line 6) 29370* PDP-11 comments: PDP-11-Syntax. (line 16) 29371* PDP-11 floating-point register syntax: PDP-11-Syntax. (line 13) 29372* PDP-11 general-purpose register syntax: PDP-11-Syntax. (line 10) 29373* PDP-11 instruction naming: PDP-11-Mnemonics. (line 6) 29374* PDP-11 line separator: PDP-11-Syntax. (line 19) 29375* PDP-11 support: PDP-11-Dependent. (line 6) 29376* PDP-11 syntax: PDP-11-Syntax. (line 6) 29377* PIC code generation for ARM: ARM Options. (line 378) 29378* PIC code generation for M32R: M32R-Opts. (line 42) 29379* pic command-line option, C-SKY: C-SKY Options. (line 22) 29380* PIC selection, MIPS: MIPS Options. (line 21) 29381* PJ endianness: Overview. (line 791) 29382* PJ line comment character: PJ-Chars. (line 6) 29383* PJ line separator: PJ-Chars. (line 14) 29384* PJ options: PJ Options. (line 6) 29385* PJ support: PJ-Dependent. (line 6) 29386* plus, permitted arguments: Infix Ops. (line 44) 29387* pmem directive, PRU: PRU Relocations. (line 6) 29388* popsection directive: PopSection. (line 6) 29389* Position-independent code, CRIS: CRIS-Opts. (line 27) 29390* Position-independent code, symbols in, CRIS: CRIS-Pic. (line 6) 29391* PowerPC architectures: PowerPC-Opts. (line 6) 29392* PowerPC directives: PowerPC-Pseudo. (line 6) 29393* PowerPC line comment character: PowerPC-Chars. (line 6) 29394* PowerPC line separator: PowerPC-Chars. (line 18) 29395* PowerPC options: PowerPC-Opts. (line 6) 29396* PowerPC support: PPC-Dependent. (line 6) 29397* precedence of operators: Infix Ops. (line 11) 29398* precision, floating point: Flonums. (line 6) 29399* prefix operators: Prefix Ops. (line 6) 29400* prefixes, i386: i386-Prefixes. (line 6) 29401* preprocessing: Preprocessing. (line 6) 29402* preprocessing, turning on and off: Preprocessing. (line 28) 29403* previous directive: Previous. (line 6) 29404* primary attributes, COFF symbols: COFF Symbols. (line 13) 29405* print directive: Print. (line 6) 29406* proc directive, OpenRISC: OpenRISC-Directives. 29407 (line 20) 29408* proc directive, SPARC: Sparc-Directives. (line 25) 29409* Processor Identification register, ARC: ARC-Regs. (line 52) 29410* profiler directive, MSP 430: MSP430 Directives. (line 26) 29411* profiling capability for MSP 430: MSP430 Profiling Capability. 29412 (line 6) 29413* Program Counter, ARC: ARC-Regs. (line 55) 29414* protected directive: Protected. (line 6) 29415* PRU line comment character: PRU Chars. (line 6) 29416* PRU machine directives: PRU Directives. (line 6) 29417* PRU machine relocations: PRU Relocations. (line 6) 29418* PRU opcodes: PRU Opcodes. (line 6) 29419* PRU options: PRU Options. (line 6) 29420* PRU support: PRU-Dependent. (line 6) 29421* psect directive, Z80: Z80 Directives. (line 58) 29422* pseudo map fd, BPF: BPF-Pseudo-Maps. (line 6) 29423* pseudo-op .arch, CRIS: CRIS-Pseudos. (line 45) 29424* pseudo-op .dword, CRIS: CRIS-Pseudos. (line 12) 29425* pseudo-op .syntax, CRIS: CRIS-Pseudos. (line 17) 29426* pseudo-op BSPEC, MMIX: MMIX-Pseudos. (line 131) 29427* pseudo-op BYTE, MMIX: MMIX-Pseudos. (line 97) 29428* pseudo-op ESPEC, MMIX: MMIX-Pseudos. (line 131) 29429* pseudo-op GREG, MMIX: MMIX-Pseudos. (line 50) 29430* pseudo-op IS, MMIX: MMIX-Pseudos. (line 42) 29431* pseudo-op LOC, MMIX: MMIX-Pseudos. (line 7) 29432* pseudo-op LOCAL, MMIX: MMIX-Pseudos. (line 28) 29433* pseudo-op OCTA, MMIX: MMIX-Pseudos. (line 108) 29434* pseudo-op PREFIX, MMIX: MMIX-Pseudos. (line 120) 29435* pseudo-op TETRA, MMIX: MMIX-Pseudos. (line 108) 29436* pseudo-op WYDE, MMIX: MMIX-Pseudos. (line 108) 29437* pseudo-opcodes for XStormy16: XStormy16 Opcodes. (line 6) 29438* pseudo-opcodes, M680x0: M68K-Branch. (line 6) 29439* pseudo-opcodes, M68HC11: M68HC11-Branch. (line 6) 29440* pseudo-ops for branch, VAX: VAX-branch. (line 6) 29441* pseudo-ops, CRIS: CRIS-Pseudos. (line 6) 29442* pseudo-ops, machine independent: Pseudo Ops. (line 6) 29443* pseudo-ops, MMIX: MMIX-Pseudos. (line 6) 29444* psize directive: Psize. (line 6) 29445* PSR bits: IA-64-Bits. (line 6) 29446* pstring directive, TIC54X: TIC54X-Directives. (line 208) 29447* psw register, V850: V850-Regs. (line 116) 29448* purgem directive: Purgem. (line 6) 29449* purpose of GNU assembler: GNU Assembler. (line 12) 29450* pushsection directive: PushSection. (line 6) 29451* quad directive: Quad. (line 6) 29452* quad directive, i386: i386-Float. (line 22) 29453* quad directive, x86-64: i386-Float. (line 22) 29454* real-mode code, i386: i386-16bit. (line 6) 29455* ref directive, TIC54X: TIC54X-Directives. (line 103) 29456* refsym directive, MSP 430: MSP430 Directives. (line 30) 29457* register directive, SPARC: Sparc-Directives. (line 29) 29458* register name prefix character, ARC: ARC-Chars. (line 7) 29459* register names, AArch64: AArch64-Regs. (line 6) 29460* register names, Alpha: Alpha-Regs. (line 6) 29461* register names, ARC: ARC-Regs. (line 6) 29462* register names, ARM: ARM-Regs. (line 6) 29463* register names, AVR: AVR-Regs. (line 6) 29464* register names, BPF: BPF-Regs. (line 6) 29465* register names, CRIS: CRIS-Regs. (line 6) 29466* register names, H8/300: H8/300-Regs. (line 6) 29467* register names, IA-64: IA-64-Regs. (line 6) 29468* register names, LM32: LM32-Regs. (line 6) 29469* register names, MMIX: MMIX-Regs. (line 6) 29470* register names, MSP 430: MSP430-Regs. (line 6) 29471* register names, OpenRISC: OpenRISC-Regs. (line 6) 29472* register names, S12Z: S12Z Addressing Modes. 29473 (line 28) 29474* register names, Sparc: Sparc-Regs. (line 6) 29475* register names, TILE-Gx: TILE-Gx Registers. (line 6) 29476* register names, TILEPro: TILEPro Registers. (line 6) 29477* register names, V850: V850-Regs. (line 6) 29478* register names, VAX: VAX-operands. (line 17) 29479* register names, Visium: Visium Registers. (line 6) 29480* register names, Xtensa: Xtensa Registers. (line 6) 29481* register names, Z80: Z80-Regs. (line 6) 29482* register naming, s390: s390 Register. (line 6) 29483* register notation, S12Z: S12Z Register Notation. 29484 (line 6) 29485* register operands, i386: i386-Variations. (line 15) 29486* register operands, x86-64: i386-Variations. (line 15) 29487* registers, D10V: D10V-Regs. (line 6) 29488* registers, D30V: D30V-Regs. (line 6) 29489* registers, i386: i386-Regs. (line 6) 29490* registers, Meta: Meta-Regs. (line 6) 29491* registers, SH: SH-Regs. (line 6) 29492* registers, TIC54X memory-mapped: TIC54X-MMRegs. (line 6) 29493* registers, x86-64: i386-Regs. (line 6) 29494* registers, Z8000: Z8000-Regs. (line 6) 29495* relax-all command-line option, Nios II: Nios II Options. (line 13) 29496* relax-section command-line option, Nios II: Nios II Options. 29497 (line 6) 29498* relaxation: Xtensa Relaxation. (line 6) 29499* relaxation of ADDI instructions: Xtensa Immediate Relaxation. 29500 (line 43) 29501* relaxation of branch instructions: Xtensa Branch Relaxation. 29502 (line 6) 29503* relaxation of call instructions: Xtensa Call Relaxation. 29504 (line 6) 29505* relaxation of immediate fields: Xtensa Immediate Relaxation. 29506 (line 6) 29507* relaxation of jump instructions: Xtensa Jump Relaxation. 29508 (line 6) 29509* relaxation of L16SI instructions: Xtensa Immediate Relaxation. 29510 (line 23) 29511* relaxation of L16UI instructions: Xtensa Immediate Relaxation. 29512 (line 23) 29513* relaxation of L32I instructions: Xtensa Immediate Relaxation. 29514 (line 23) 29515* relaxation of L8UI instructions: Xtensa Immediate Relaxation. 29516 (line 23) 29517* relaxation of MOVI instructions: Xtensa Immediate Relaxation. 29518 (line 12) 29519* reloc directive: Reloc. (line 6) 29520* relocation: Sections. (line 6) 29521* relocation example: Ld Sections. (line 40) 29522* relocations, AArch64: AArch64-Relocations. 29523 (line 6) 29524* relocations, Alpha: Alpha-Relocs. (line 6) 29525* relocations, OpenRISC: OpenRISC-Relocs. (line 6) 29526* relocations, Sparc: Sparc-Relocs. (line 6) 29527* relocations, WebAssembly: WebAssembly-Relocs. (line 6) 29528* repeat prefixes, i386: i386-Prefixes. (line 44) 29529* reporting bugs in assembler: Reporting Bugs. (line 6) 29530* rept directive: Rept. (line 6) 29531* reserve directive, SPARC: Sparc-Directives. (line 39) 29532* return instructions, i386: i386-Variations. (line 46) 29533* return instructions, x86-64: i386-Variations. (line 46) 29534* REX prefixes, i386: i386-Prefixes. (line 46) 29535* RISC-V instruction formats: RISC-V-Formats. (line 6) 29536* RISC-V machine directives: RISC-V-Directives. (line 6) 29537* RISC-V support: RISC-V-Dependent. (line 6) 29538* RL78 assembler directives: RL78-Directives. (line 6) 29539* RL78 line comment character: RL78-Chars. (line 6) 29540* RL78 line separator: RL78-Chars. (line 14) 29541* RL78 modifiers: RL78-Modifiers. (line 6) 29542* RL78 options: RL78-Opts. (line 6) 29543* RL78 support: RL78-Dependent. (line 6) 29544* rsect: Z8000 Directives. (line 52) 29545* RX assembler directive .3byte: RX-Directives. (line 9) 29546* RX assembler directive .fetchalign: RX-Directives. (line 13) 29547* RX assembler directives: RX-Directives. (line 6) 29548* RX floating point: RX-Float. (line 6) 29549* RX line comment character: RX-Chars. (line 6) 29550* RX line separator: RX-Chars. (line 14) 29551* RX modifiers: RX-Modifiers. (line 6) 29552* RX options: RX-Opts. (line 6) 29553* RX support: RX-Dependent. (line 6) 29554* S12Z addressing modes: S12Z Addressing Modes. 29555 (line 6) 29556* S12Z line separator: S12Z Syntax Overview. 29557 (line 41) 29558* S12Z options: S12Z Options. (line 6) 29559* S12Z support: S12Z-Dependent. (line 9) 29560* S12Z syntax: S12Z Syntax. (line 12) 29561* s390 floating point: s390 Floating Point. 29562 (line 6) 29563* s390 instruction aliases: s390 Aliases. (line 6) 29564* s390 instruction formats: s390 Formats. (line 6) 29565* s390 instruction marker: s390 Instruction Marker. 29566 (line 6) 29567* s390 instruction mnemonics: s390 Mnemonics. (line 6) 29568* s390 instruction operand modifier: s390 Operand Modifier. 29569 (line 6) 29570* s390 instruction operands: s390 Operands. (line 6) 29571* s390 instruction syntax: s390 Syntax. (line 6) 29572* s390 line comment character: s390 Characters. (line 6) 29573* s390 line separator: s390 Characters. (line 13) 29574* s390 literal pool entries: s390 Literal Pool Entries. 29575 (line 6) 29576* s390 options: s390 Options. (line 6) 29577* s390 register naming: s390 Register. (line 6) 29578* s390 support: S/390-Dependent. (line 6) 29579* Saved User Stack Pointer, ARC: ARC-Regs. (line 74) 29580* sblock directive, TIC54X: TIC54X-Directives. (line 182) 29581* sbttl directive: Sbttl. (line 6) 29582* schedule directive: Schedule Directive. (line 6) 29583* scl directive: Scl. (line 6) 29584* SCORE architectures: SCORE-Opts. (line 6) 29585* SCORE directives: SCORE-Pseudo. (line 6) 29586* SCORE line comment character: SCORE-Chars. (line 6) 29587* SCORE line separator: SCORE-Chars. (line 14) 29588* SCORE options: SCORE-Opts. (line 6) 29589* SCORE processor: SCORE-Dependent. (line 6) 29590* sdaoff pseudo-op, V850: V850 Opcodes. (line 65) 29591* search path for .include: I. (line 6) 29592* sect directive, TIC54X: TIC54X-Directives. (line 188) 29593* section directive (COFF version): Section. (line 16) 29594* section directive (ELF version): Section. (line 77) 29595* section directive, V850: V850 Directives. (line 9) 29596* section name substitution: Section. (line 81) 29597* section override prefixes, i386: i386-Prefixes. (line 23) 29598* Section Stack <1>: Previous. (line 6) 29599* Section Stack <2>: SubSection. (line 6) 29600* Section Stack <3>: PopSection. (line 6) 29601* Section Stack <4>: PushSection. (line 6) 29602* Section Stack: Section. (line 72) 29603* section-relative addressing: Secs Background. (line 68) 29604* sections: Sections. (line 6) 29605* sections in messages, internal: As Sections. (line 6) 29606* sections, i386: i386-Variations. (line 52) 29607* sections, named: Ld Sections. (line 8) 29608* sections, x86-64: i386-Variations. (line 52) 29609* seg directive, SPARC: Sparc-Directives. (line 44) 29610* segm: Z8000 Directives. (line 10) 29611* set at directive, Nios II: Nios II Directives. (line 35) 29612* set break directive, Nios II: Nios II Directives. (line 43) 29613* set directive: Set. (line 6) 29614* set directive, Nios II: Nios II Directives. (line 57) 29615* set directive, TIC54X: TIC54X-Directives. (line 191) 29616* set no_warn_regname_label directive, PRU: PRU Directives. (line 28) 29617* set noat directive, Nios II: Nios II Directives. (line 31) 29618* set nobreak directive, Nios II: Nios II Directives. (line 39) 29619* set norelax directive, Nios II: Nios II Directives. (line 46) 29620* set relaxall directive, Nios II: Nios II Directives. (line 53) 29621* set relaxsection directive, Nios II: Nios II Directives. (line 49) 29622* SH addressing modes: SH-Addressing. (line 6) 29623* SH floating point (IEEE): SH Floating Point. (line 6) 29624* SH line comment character: SH-Chars. (line 6) 29625* SH line separator: SH-Chars. (line 8) 29626* SH machine directives: SH Directives. (line 6) 29627* SH opcode summary: SH Opcodes. (line 6) 29628* SH options: SH Options. (line 6) 29629* SH registers: SH-Regs. (line 6) 29630* SH support: SH-Dependent. (line 6) 29631* shigh directive, M32R: M32R-Directives. (line 26) 29632* short directive: Short. (line 6) 29633* short directive, TIC54X: TIC54X-Directives. (line 111) 29634* signatures, WebAssembly: WebAssembly-Signatures. 29635 (line 6) 29636* SIMD, i386: i386-SIMD. (line 6) 29637* SIMD, x86-64: i386-SIMD. (line 6) 29638* single character constant: Chars. (line 6) 29639* single directive: Single. (line 6) 29640* single directive, i386: i386-Float. (line 14) 29641* single directive, x86-64: i386-Float. (line 14) 29642* single quote, Z80: Z80-Chars. (line 20) 29643* sixteen bit integers: hword. (line 6) 29644* sixteen byte integer: Octa. (line 6) 29645* size directive (COFF version): Size. (line 11) 29646* size directive (ELF version): Size. (line 19) 29647* size modifiers, D10V: D10V-Size. (line 6) 29648* size modifiers, D30V: D30V-Size. (line 6) 29649* size modifiers, M680x0: M68K-Syntax. (line 8) 29650* size prefixes, i386: i386-Prefixes. (line 27) 29651* size suffixes, H8/300: H8/300 Opcodes. (line 163) 29652* size, translations, Sparc: Sparc-Size-Translations. 29653 (line 6) 29654* sizes operands, i386: i386-Variations. (line 29) 29655* sizes operands, x86-64: i386-Variations. (line 29) 29656* skip directive: Skip. (line 6) 29657* skip directive, M680x0: M68K-Directives. (line 19) 29658* skip directive, SPARC: Sparc-Directives. (line 48) 29659* sleb128 directive: Sleb128. (line 6) 29660* small data, MIPS: MIPS Small Data. (line 6) 29661* SmartMIPS instruction generation override: MIPS ASE Instruction Generation Overrides. 29662 (line 11) 29663* SOM symbol attributes: SOM Symbols. (line 6) 29664* source program: Input Files. (line 6) 29665* source, destination operands; i386: i386-Variations. (line 22) 29666* source, destination operands; x86-64: i386-Variations. (line 22) 29667* sp register: Xtensa Registers. (line 6) 29668* sp register, V850: V850-Regs. (line 14) 29669* space directive: Space. (line 6) 29670* space directive, TIC54X: TIC54X-Directives. (line 196) 29671* space used, maximum for assembly: statistics. (line 6) 29672* SPARC architectures: Sparc-Opts. (line 6) 29673* Sparc constants: Sparc-Constants. (line 6) 29674* SPARC data alignment: Sparc-Aligned-Data. (line 6) 29675* SPARC floating point (IEEE): Sparc-Float. (line 6) 29676* Sparc line comment character: Sparc-Chars. (line 6) 29677* Sparc line separator: Sparc-Chars. (line 14) 29678* SPARC machine directives: Sparc-Directives. (line 6) 29679* SPARC options: Sparc-Opts. (line 6) 29680* Sparc registers: Sparc-Regs. (line 6) 29681* Sparc relocations: Sparc-Relocs. (line 6) 29682* Sparc size translations: Sparc-Size-Translations. 29683 (line 6) 29684* SPARC support: Sparc-Dependent. (line 6) 29685* SPARC syntax: Sparc-Aligned-Data. (line 21) 29686* special characters, M680x0: M68K-Chars. (line 6) 29687* special purpose registers, MSP 430: MSP430-Regs. (line 11) 29688* sslist directive, TIC54X: TIC54X-Directives. (line 203) 29689* ssnolist directive, TIC54X: TIC54X-Directives. (line 203) 29690* stabd directive: Stab. (line 38) 29691* stabn directive: Stab. (line 48) 29692* stabs directive: Stab. (line 51) 29693* stabX directives: Stab. (line 6) 29694* stack pointer, ARC: ARC-Regs. (line 20) 29695* standard assembler sections: Secs Background. (line 27) 29696* standard input, as input file: Command Line. (line 10) 29697* statement separator character: Statements. (line 6) 29698* statement separator, AArch64: AArch64-Chars. (line 10) 29699* statement separator, Alpha: Alpha-Chars. (line 11) 29700* statement separator, ARC: ARC-Chars. (line 27) 29701* statement separator, ARM: ARM-Chars. (line 14) 29702* statement separator, AVR: AVR-Chars. (line 14) 29703* statement separator, BPF: BPF-Chars. (line 10) 29704* statement separator, CR16: CR16-Chars. (line 13) 29705* statement separator, Epiphany: Epiphany-Chars. (line 14) 29706* statement separator, H8/300: H8/300-Chars. (line 8) 29707* statement separator, i386: i386-Chars. (line 18) 29708* statement separator, IA-64: IA-64-Chars. (line 8) 29709* statement separator, IP2K: IP2K-Chars. (line 14) 29710* statement separator, LM32: LM32-Chars. (line 12) 29711* statement separator, M32C: M32C-Chars. (line 14) 29712* statement separator, M68HC11: M68HC11-Syntax. (line 27) 29713* statement separator, Meta: Meta-Chars. (line 8) 29714* statement separator, MicroBlaze: MicroBlaze-Chars. (line 14) 29715* statement separator, MIPS: MIPS-Chars. (line 14) 29716* statement separator, MSP 430: MSP430-Chars. (line 14) 29717* statement separator, NS32K: NS32K-Chars. (line 18) 29718* statement separator, OpenRISC: OpenRISC-Chars. (line 9) 29719* statement separator, PJ: PJ-Chars. (line 14) 29720* statement separator, PowerPC: PowerPC-Chars. (line 18) 29721* statement separator, RL78: RL78-Chars. (line 14) 29722* statement separator, RX: RX-Chars. (line 14) 29723* statement separator, S12Z: S12Z Syntax Overview. 29724 (line 41) 29725* statement separator, s390: s390 Characters. (line 13) 29726* statement separator, SCORE: SCORE-Chars. (line 14) 29727* statement separator, SH: SH-Chars. (line 8) 29728* statement separator, Sparc: Sparc-Chars. (line 14) 29729* statement separator, TIC54X: TIC54X-Chars. (line 17) 29730* statement separator, TIC6X: TIC6X Syntax. (line 13) 29731* statement separator, V850: V850-Chars. (line 13) 29732* statement separator, VAX: VAX-Chars. (line 14) 29733* statement separator, Visium: Visium Characters. (line 14) 29734* statement separator, XGATE: XGATE-Syntax. (line 26) 29735* statement separator, XStormy16: XStormy16-Chars. (line 14) 29736* statement separator, Z80: Z80-Chars. (line 13) 29737* statement separator, Z8000: Z8000-Chars. (line 13) 29738* statements, structure of: Statements. (line 6) 29739* statistics, about assembly: statistics. (line 6) 29740* Status register, ARC: ARC-Regs. (line 58) 29741* STATUS32 saved on exception, ARC: ARC-Regs. (line 83) 29742* stopping the assembly: Abort. (line 6) 29743* Stored STATUS32 register on entry to level P0 interrupts, ARC: ARC-Regs. 29744 (line 70) 29745* string constants: Strings. (line 6) 29746* string directive: String. (line 8) 29747* string directive on HPPA: HPPA Directives. (line 137) 29748* string directive, TIC54X: TIC54X-Directives. (line 208) 29749* string literals: Ascii. (line 6) 29750* string, copying to object file: String. (line 8) 29751* string16 directive: String. (line 8) 29752* string16, copying to object file: String. (line 8) 29753* string32 directive: String. (line 8) 29754* string32, copying to object file: String. (line 8) 29755* string64 directive: String. (line 8) 29756* string64, copying to object file: String. (line 8) 29757* string8 directive: String. (line 8) 29758* string8, copying to object file: String. (line 8) 29759* struct directive: Struct. (line 6) 29760* struct directive, TIC54X: TIC54X-Directives. (line 216) 29761* structure debugging, COFF: Tag. (line 6) 29762* sub-instruction ordering, D10V: D10V-Chars. (line 14) 29763* sub-instruction ordering, D30V: D30V-Chars. (line 14) 29764* sub-instructions, D10V: D10V-Subs. (line 6) 29765* sub-instructions, D30V: D30V-Subs. (line 6) 29766* subexpressions: Arguments. (line 24) 29767* subsection directive: SubSection. (line 6) 29768* subsym builtins, TIC54X: TIC54X-Macros. (line 16) 29769* subtitles for listings: Sbttl. (line 6) 29770* subtraction, permitted arguments: Infix Ops. (line 49) 29771* summary of options: Overview. (line 6) 29772* support: HPPA-Dependent. (line 6) 29773* supporting files, including: Include. (line 6) 29774* suppressing warnings: W. (line 11) 29775* sval: Z8000 Directives. (line 33) 29776* symbol attributes: Symbol Attributes. (line 6) 29777* symbol attributes, a.out: a.out Symbols. (line 6) 29778* symbol attributes, COFF: COFF Symbols. (line 6) 29779* symbol attributes, SOM: SOM Symbols. (line 6) 29780* symbol descriptor, COFF: Desc. (line 6) 29781* symbol modifiers <1>: LM32-Modifiers. (line 12) 29782* symbol modifiers <2>: AVR-Modifiers. (line 12) 29783* symbol modifiers <3>: M32C-Modifiers. (line 11) 29784* symbol modifiers: M68HC11-Modifiers. (line 12) 29785* symbol modifiers, TILE-Gx: TILE-Gx Modifiers. (line 6) 29786* symbol modifiers, TILEPro: TILEPro Modifiers. (line 6) 29787* symbol names: Symbol Names. (line 6) 29788* symbol names, $ in <1>: SH-Chars. (line 15) 29789* symbol names, $ in <2>: D10V-Chars. (line 53) 29790* symbol names, $ in <3>: Meta-Chars. (line 10) 29791* symbol names, $ in: D30V-Chars. (line 70) 29792* symbol names, local: Symbol Names. (line 40) 29793* symbol names, temporary: Symbol Names. (line 53) 29794* symbol prefix character, ARC: ARC-Chars. (line 20) 29795* symbol storage class (COFF): Scl. (line 6) 29796* symbol type: Symbol Type. (line 6) 29797* symbol type, COFF: Type. (line 11) 29798* symbol type, ELF: Type. (line 22) 29799* symbol value: Symbol Value. (line 6) 29800* symbol value, setting: Set. (line 6) 29801* symbol values, assigning: Setting Symbols. (line 6) 29802* symbol versioning: Symver. (line 6) 29803* symbol, common: Comm. (line 6) 29804* symbol, making visible to linker: Global. (line 6) 29805* symbolic debuggers, information for: Stab. (line 6) 29806* symbols: Symbols. (line 6) 29807* Symbols in position-independent code, CRIS: CRIS-Pic. (line 6) 29808* symbols with uppercase, VAX/VMS: VAX-Opts. (line 42) 29809* symbols, assigning values to: Equ. (line 6) 29810* Symbols, built-in, CRIS: CRIS-Symbols. (line 6) 29811* Symbols, CRIS, built-in: CRIS-Symbols. (line 6) 29812* symbols, local common: Lcomm. (line 6) 29813* symver directive: Symver. (line 6) 29814* syntax compatibility, i386: i386-Variations. (line 6) 29815* syntax compatibility, x86-64: i386-Variations. (line 6) 29816* syntax, AVR: AVR-Modifiers. (line 6) 29817* syntax, Blackfin: Blackfin Syntax. (line 6) 29818* syntax, D10V: D10V-Syntax. (line 6) 29819* syntax, D30V: D30V-Syntax. (line 6) 29820* syntax, LM32: LM32-Modifiers. (line 6) 29821* syntax, M680x0: M68K-Syntax. (line 8) 29822* syntax, M68HC11 <1>: M68HC11-Syntax. (line 6) 29823* syntax, M68HC11: M68HC11-Modifiers. (line 6) 29824* syntax, machine-independent: Syntax. (line 6) 29825* syntax, OPENRISC: OpenRISC-Dependent. (line 13) 29826* syntax, RL78: RL78-Modifiers. (line 6) 29827* syntax, RX: RX-Modifiers. (line 6) 29828* syntax, S12Z: S12Z Syntax. (line 12) 29829* syntax, SPARC: Sparc-Aligned-Data. (line 21) 29830* syntax, TILE-Gx: TILE-Gx Syntax. (line 6) 29831* syntax, TILEPro: TILEPro Syntax. (line 6) 29832* syntax, XGATE: XGATE-Syntax. (line 6) 29833* syntax, Xtensa assembler: Xtensa Syntax. (line 6) 29834* tab (\t): Strings. (line 27) 29835* tab directive, TIC54X: TIC54X-Directives. (line 247) 29836* tag directive: Tag. (line 6) 29837* tag directive, TIC54X: TIC54X-Directives. (line 250) 29838* TBM, i386: i386-TBM. (line 6) 29839* TBM, x86-64: i386-TBM. (line 6) 29840* tdaoff pseudo-op, V850: V850 Opcodes. (line 81) 29841* temporary symbol names: Symbol Names. (line 53) 29842* text and data sections, joining: R. (line 6) 29843* text directive: Text. (line 6) 29844* text section: Ld Sections. (line 9) 29845* tfloat directive, i386: i386-Float. (line 14) 29846* tfloat directive, x86-64: i386-Float. (line 14) 29847* Thumb support: ARM-Dependent. (line 6) 29848* TIC54X builtin math functions: TIC54X-Builtins. (line 6) 29849* TIC54X line comment character: TIC54X-Chars. (line 6) 29850* TIC54X line separator: TIC54X-Chars. (line 17) 29851* TIC54X machine directives: TIC54X-Directives. (line 6) 29852* TIC54X memory-mapped registers: TIC54X-MMRegs. (line 6) 29853* TIC54X options: TIC54X-Opts. (line 6) 29854* TIC54X subsym builtins: TIC54X-Macros. (line 16) 29855* TIC54X support: TIC54X-Dependent. (line 6) 29856* TIC54X-specific macros: TIC54X-Macros. (line 6) 29857* TIC6X big-endian output: TIC6X Options. (line 46) 29858* TIC6X line comment character: TIC6X Syntax. (line 6) 29859* TIC6X line separator: TIC6X Syntax. (line 13) 29860* TIC6X little-endian output: TIC6X Options. (line 46) 29861* TIC6X machine directives: TIC6X Directives. (line 6) 29862* TIC6X options: TIC6X Options. (line 6) 29863* TIC6X support: TIC6X-Dependent. (line 6) 29864* TILE-Gx machine directives: TILE-Gx Directives. (line 6) 29865* TILE-Gx modifiers: TILE-Gx Modifiers. (line 6) 29866* TILE-Gx opcode names: TILE-Gx Opcodes. (line 6) 29867* TILE-Gx register names: TILE-Gx Registers. (line 6) 29868* TILE-Gx support: TILE-Gx-Dependent. (line 6) 29869* TILE-Gx syntax: TILE-Gx Syntax. (line 6) 29870* TILEPro machine directives: TILEPro Directives. (line 6) 29871* TILEPro modifiers: TILEPro Modifiers. (line 6) 29872* TILEPro opcode names: TILEPro Opcodes. (line 6) 29873* TILEPro register names: TILEPro Registers. (line 6) 29874* TILEPro support: TILEPro-Dependent. (line 6) 29875* TILEPro syntax: TILEPro Syntax. (line 6) 29876* time, total for assembly: statistics. (line 6) 29877* title directive: Title. (line 6) 29878* tls_common directive: Tls_common. (line 6) 29879* tls_gd directive, Nios II: Nios II Relocations. 29880 (line 38) 29881* tls_ie directive, Nios II: Nios II Relocations. 29882 (line 38) 29883* tls_ldm directive, Nios II: Nios II Relocations. 29884 (line 38) 29885* tls_ldo directive, Nios II: Nios II Relocations. 29886 (line 38) 29887* tls_le directive, Nios II: Nios II Relocations. 29888 (line 38) 29889* TMS320C6X support: TIC6X-Dependent. (line 6) 29890* tp register, V850: V850-Regs. (line 20) 29891* transform directive: Transform Directive. 29892 (line 6) 29893* trusted compiler: f. (line 6) 29894* turning preprocessing on and off: Preprocessing. (line 28) 29895* two-byte integer: 2byte. (line 6) 29896* type directive (COFF version): Type. (line 11) 29897* type directive (ELF version): Type. (line 22) 29898* type of a symbol: Symbol Type. (line 6) 29899* ualong directive, SH: SH Directives. (line 6) 29900* uaquad directive, SH: SH Directives. (line 6) 29901* uaword directive, SH: SH Directives. (line 6) 29902* ubyte directive, TIC54X: TIC54X-Directives. (line 36) 29903* uchar directive, TIC54X: TIC54X-Directives. (line 36) 29904* uhalf directive, TIC54X: TIC54X-Directives. (line 111) 29905* uint directive, TIC54X: TIC54X-Directives. (line 111) 29906* uleb128 directive: Uleb128. (line 6) 29907* ulong directive, TIC54X: TIC54X-Directives. (line 135) 29908* undefined section: Ld Sections. (line 36) 29909* union directive, TIC54X: TIC54X-Directives. (line 250) 29910* unsegm: Z8000 Directives. (line 14) 29911* usect directive, TIC54X: TIC54X-Directives. (line 262) 29912* ushort directive, TIC54X: TIC54X-Directives. (line 111) 29913* uword directive, TIC54X: TIC54X-Directives. (line 111) 29914* V850 command-line options: V850 Options. (line 9) 29915* V850 floating point (IEEE): V850 Floating Point. 29916 (line 6) 29917* V850 line comment character: V850-Chars. (line 6) 29918* V850 line separator: V850-Chars. (line 13) 29919* V850 machine directives: V850 Directives. (line 6) 29920* V850 opcodes: V850 Opcodes. (line 6) 29921* V850 options (none): V850 Options. (line 6) 29922* V850 register names: V850-Regs. (line 6) 29923* V850 support: V850-Dependent. (line 6) 29924* val directive: Val. (line 6) 29925* value attribute, COFF: Val. (line 6) 29926* value directive: i386-Directives. (line 26) 29927* value of a symbol: Symbol Value. (line 6) 29928* var directive, TIC54X: TIC54X-Directives. (line 272) 29929* VAX bitfields not supported: VAX-no. (line 6) 29930* VAX branch improvement: VAX-branch. (line 6) 29931* VAX command-line options ignored: VAX-Opts. (line 6) 29932* VAX displacement sizing character: VAX-operands. (line 12) 29933* VAX floating point: VAX-float. (line 6) 29934* VAX immediate character: VAX-operands. (line 6) 29935* VAX indirect character: VAX-operands. (line 9) 29936* VAX line comment character: VAX-Chars. (line 6) 29937* VAX line separator: VAX-Chars. (line 14) 29938* VAX machine directives: VAX-directives. (line 6) 29939* VAX opcode mnemonics: VAX-opcodes. (line 6) 29940* VAX operand notation: VAX-operands. (line 6) 29941* VAX register names: VAX-operands. (line 17) 29942* VAX support: Vax-Dependent. (line 6) 29943* Vax-11 C compatibility: VAX-Opts. (line 42) 29944* VAX/VMS options: VAX-Opts. (line 42) 29945* version directive: Version. (line 6) 29946* version directive, TIC54X: TIC54X-Directives. (line 276) 29947* version of assembler: v. (line 6) 29948* versions of symbols: Symver. (line 6) 29949* Virtualization instruction generation override: MIPS ASE Instruction Generation Overrides. 29950 (line 53) 29951* visibility <1>: Hidden. (line 6) 29952* visibility <2>: Protected. (line 6) 29953* visibility: Internal. (line 6) 29954* Visium line comment character: Visium Characters. (line 6) 29955* Visium line separator: Visium Characters. (line 14) 29956* Visium options: Visium Options. (line 6) 29957* Visium registers: Visium Registers. (line 6) 29958* Visium support: Visium-Dependent. (line 6) 29959* VMS (VAX) options: VAX-Opts. (line 42) 29960* vtable_entry directive: VTableEntry. (line 6) 29961* vtable_inherit directive: VTableInherit. (line 6) 29962* warning directive: Warning. (line 6) 29963* warning for altered difference tables: K. (line 6) 29964* warning messages: Errors. (line 6) 29965* warnings, causing error: W. (line 16) 29966* warnings, M32R: M32R-Warnings. (line 6) 29967* warnings, suppressing: W. (line 11) 29968* warnings, switching on: W. (line 19) 29969* weak directive: Weak. (line 6) 29970* weakref directive: Weakref. (line 6) 29971* WebAssembly floating point (IEEE): WebAssembly-Floating-Point. 29972 (line 6) 29973* WebAssembly line comment character: WebAssembly-Chars. (line 6) 29974* WebAssembly module layout: WebAssembly-module-layout. 29975 (line 6) 29976* WebAssembly notes: WebAssembly-Notes. (line 6) 29977* WebAssembly opcodes: WebAssembly-Opcodes. 29978 (line 6) 29979* WebAssembly relocations: WebAssembly-Relocs. (line 6) 29980* WebAssembly signatures: WebAssembly-Signatures. 29981 (line 6) 29982* WebAssembly support: WebAssembly-Dependent. 29983 (line 6) 29984* WebAssembly Syntax: WebAssembly-Syntax. (line 6) 29985* whitespace: Whitespace. (line 6) 29986* whitespace, removed by preprocessor: Preprocessing. (line 7) 29987* wide floating point directives, VAX: VAX-directives. (line 10) 29988* width directive, TIC54X: TIC54X-Directives. (line 127) 29989* Width of continuation lines of disassembly output: listing. 29990 (line 21) 29991* Width of first line disassembly output: listing. (line 16) 29992* Width of source line output: listing. (line 28) 29993* wmsg directive, TIC54X: TIC54X-Directives. (line 77) 29994* word aligned program counter, ARC: ARC-Regs. (line 44) 29995* word directive: Word. (line 6) 29996* word directive, BPF: BPF Directives. (line 12) 29997* word directive, H8/300: H8/300 Directives. (line 6) 29998* word directive, i386: i386-Float. (line 22) 29999* word directive, Nios II: Nios II Directives. (line 13) 30000* word directive, OpenRISC: OpenRISC-Directives. 30001 (line 12) 30002* word directive, PRU: PRU Directives. (line 10) 30003* word directive, SPARC: Sparc-Directives. (line 51) 30004* word directive, TIC54X: TIC54X-Directives. (line 111) 30005* word directive, x86-64: i386-Float. (line 22) 30006* writing patterns in memory: Fill. (line 6) 30007* wval: Z8000 Directives. (line 24) 30008* x86 machine directives: i386-Directives. (line 6) 30009* x86-64 arch directive: i386-Arch. (line 6) 30010* x86-64 att_syntax pseudo op: i386-Variations. (line 6) 30011* x86-64 conversion instructions: i386-Mnemonics. (line 68) 30012* x86-64 extension instructions: i386-Mnemonics. (line 87) 30013* x86-64 floating point: i386-Float. (line 6) 30014* x86-64 immediate operands: i386-Variations. (line 15) 30015* x86-64 instruction naming: i386-Mnemonics. (line 9) 30016* x86-64 intel_syntax pseudo op: i386-Variations. (line 6) 30017* x86-64 jump optimization: i386-Jumps. (line 6) 30018* x86-64 jump, call, return: i386-Variations. (line 46) 30019* x86-64 jump/call operands: i386-Variations. (line 15) 30020* x86-64 memory references: i386-Memory. (line 6) 30021* x86-64 options: i386-Options. (line 6) 30022* x86-64 register operands: i386-Variations. (line 15) 30023* x86-64 registers: i386-Regs. (line 6) 30024* x86-64 sections: i386-Variations. (line 52) 30025* x86-64 size suffixes: i386-Variations. (line 29) 30026* x86-64 source, destination operands: i386-Variations. (line 22) 30027* x86-64 support: i386-Dependent. (line 6) 30028* x86-64 syntax compatibility: i386-Variations. (line 6) 30029* xdef directive, Z80: Z80 Directives. (line 62) 30030* xfloat directive, TIC54X: TIC54X-Directives. (line 64) 30031* XGATE addressing modes: XGATE-Syntax. (line 29) 30032* XGATE assembler directives: XGATE-Directives. (line 6) 30033* XGATE floating point: XGATE-Float. (line 6) 30034* XGATE line comment character: XGATE-Syntax. (line 16) 30035* XGATE line separator: XGATE-Syntax. (line 26) 30036* XGATE opcodes: XGATE-opcodes. (line 6) 30037* XGATE options: XGATE-Opts. (line 6) 30038* XGATE support: XGATE-Dependent. (line 6) 30039* XGATE syntax: XGATE-Syntax. (line 6) 30040* xlong directive, TIC54X: TIC54X-Directives. (line 135) 30041* xref directive, Z80: Z80 Directives. (line 66) 30042* XStormy16 comment character: XStormy16-Chars. (line 11) 30043* XStormy16 line comment character: XStormy16-Chars. (line 6) 30044* XStormy16 line separator: XStormy16-Chars. (line 14) 30045* XStormy16 machine directives: XStormy16 Directives. 30046 (line 6) 30047* XStormy16 pseudo-opcodes: XStormy16 Opcodes. (line 6) 30048* XStormy16 support: XSTORMY16-Dependent. 30049 (line 6) 30050* Xtensa architecture: Xtensa-Dependent. (line 6) 30051* Xtensa assembler syntax: Xtensa Syntax. (line 6) 30052* Xtensa directives: Xtensa Directives. (line 6) 30053* Xtensa opcode names: Xtensa Opcodes. (line 6) 30054* Xtensa register names: Xtensa Registers. (line 6) 30055* xword directive, SPARC: Sparc-Directives. (line 55) 30056* Z80 $: Z80-Chars. (line 15) 30057* Z80 ': Z80-Chars. (line 20) 30058* Z80 floating point: Z80 Floating Point. (line 6) 30059* Z80 labels: Z80-Labels. (line 6) 30060* Z80 line comment character: Z80-Chars. (line 6) 30061* Z80 line separator: Z80-Chars. (line 13) 30062* Z80 options: Z80 Options. (line 6) 30063* Z80 registers: Z80-Regs. (line 6) 30064* Z80 support: Z80-Dependent. (line 6) 30065* Z80 Syntax: Z80 Options. (line 69) 30066* Z80, \: Z80-Chars. (line 18) 30067* Z80, case sensitivity: Z80-Case. (line 6) 30068* Z80-only directives: Z80 Directives. (line 6) 30069* Z800 addressing modes: Z8000-Addressing. (line 6) 30070* Z8000 directives: Z8000 Directives. (line 6) 30071* Z8000 line comment character: Z8000-Chars. (line 6) 30072* Z8000 line separator: Z8000-Chars. (line 13) 30073* Z8000 opcode summary: Z8000 Opcodes. (line 6) 30074* Z8000 options: Z8000 Options. (line 6) 30075* Z8000 registers: Z8000-Regs. (line 6) 30076* Z8000 support: Z8000-Dependent. (line 6) 30077* zdaoff pseudo-op, V850: V850 Opcodes. (line 99) 30078* zero directive: Zero. (line 6) 30079* zero register, V850: V850-Regs. (line 7) 30080* zero-terminated strings: Asciz. (line 6) 30081 30082 30083 30084Tag Table: 30085Node: Top868 30086Node: Overview1861 30087Node: Manual44415 30088Node: GNU Assembler45359 30089Node: Object Formats46530 30090Node: Command Line46982 30091Node: Input Files48069 30092Node: Object50050 30093Node: Errors50946 30094Node: Invoking52510 30095Node: a54527 30096Node: alternate56438 30097Node: D56610 30098Node: f56843 30099Node: I57351 30100Node: K57895 30101Node: L58199 30102Node: listing58938 30103Node: M60597 30104Node: MD64435 30105Node: no-pad-sections64875 30106Node: o65250 30107Node: R65677 30108Node: statistics66707 30109Node: traditional-format67114 30110Node: v67587 30111Node: W67862 30112Node: Z68769 30113Node: Syntax69291 30114Node: Preprocessing69883 30115Node: Whitespace71539 30116Node: Comments71935 30117Node: Symbol Intro73946 30118Node: Statements75015 30119Node: Constants77004 30120Node: Characters77635 30121Node: Strings78137 30122Node: Chars80312 30123Node: Numbers81165 30124Node: Integers81705 30125Node: Bignums82361 30126Node: Flonums82717 30127Node: Sections84337 30128Node: Secs Background84715 30129Node: Ld Sections89754 30130Node: As Sections92138 30131Node: Sub-Sections93048 30132Node: bss96193 30133Node: Symbols97143 30134Node: Labels97791 30135Node: Setting Symbols98522 30136Node: Symbol Names99076 30137Node: Dot105130 30138Node: Symbol Attributes105577 30139Node: Symbol Value106313 30140Node: Symbol Type107358 30141Node: a.out Symbols107746 30142Node: Symbol Desc108008 30143Node: Symbol Other108303 30144Node: COFF Symbols108472 30145Node: SOM Symbols109145 30146Node: Expressions109587 30147Node: Empty Exprs110336 30148Node: Integer Exprs110683 30149Node: Arguments111078 30150Node: Operators112184 30151Node: Prefix Ops112519 30152Node: Infix Ops112847 30153Node: Pseudo Ops115236 30154Node: Abort121550 30155Node: ABORT (COFF)121962 30156Node: Align122170 30157Node: Altmacro124566 30158Node: Ascii125895 30159Node: Asciz126204 30160Node: Attach_to_group126594 30161Node: Balign127009 30162Node: Bss129004 30163Node: Bundle directives129428 30164Node: Byte132413 30165Node: CFI directives132674 30166Node: Comm141982 30167Ref: Comm-Footnote-1143583 30168Node: Data143945 30169Node: Dc144261 30170Node: Dcb145244 30171Node: Ds146042 30172Node: Def146982 30173Node: Desc147212 30174Node: Dim147712 30175Node: Double147969 30176Node: Eject148307 30177Node: Else148482 30178Node: Elseif148782 30179Node: End149076 30180Node: Endef149291 30181Node: Endfunc149468 30182Node: Endif149643 30183Node: Equ149904 30184Node: Equiv150419 30185Node: Eqv150975 30186Node: Err151339 30187Node: Error151650 30188Node: Exitm152095 30189Node: Extern152264 30190Node: Fail152525 30191Node: File152970 30192Node: Fill155255 30193Node: Float156219 30194Node: Func156561 30195Node: Global157151 30196Node: Gnu_attribute157908 30197Node: Hidden158133 30198Node: hword158719 30199Node: Ident159047 30200Node: If159621 30201Node: Incbin162680 30202Node: Include163375 30203Node: Int163926 30204Node: Internal164307 30205Node: Irp164955 30206Node: Irpc165834 30207Node: Lcomm166751 30208Node: Lflags167499 30209Node: Line167693 30210Node: Linkonce168606 30211Node: List169835 30212Node: Ln170443 30213Node: Loc170593 30214Node: Loc_mark_labels172898 30215Node: Local173382 30216Node: Long173994 30217Node: Macro174172 30218Node: MRI181627 30219Node: Noaltmacro181965 30220Node: Nolist182134 30221Node: Nop182563 30222Node: Nops183247 30223Node: Octa184101 30224Node: Offset184436 30225Node: Org184763 30226Node: P2align186048 30227Node: PopSection188102 30228Node: Previous188610 30229Node: Print190023 30230Node: Protected190252 30231Node: Psize190899 30232Node: Purgem191583 30233Node: PushSection191804 30234Node: Quad192547 30235Node: Reloc193003 30236Node: Rept193764 30237Node: Sbttl194326 30238Node: Scl194691 30239Node: Section195032 30240Ref: Section Name Substitutions197106 30241Node: Set204969 30242Node: Short206061 30243Node: Single206382 30244Node: Size206727 30245Node: Skip207399 30246Node: Sleb128207723 30247Node: Space208045 30248Node: Stab208686 30249Node: String210688 30250Node: Struct211680 30251Node: SubSection212403 30252Node: Symver212964 30253Node: Tag215841 30254Node: Text216221 30255Node: Title216540 30256Node: Tls_common216927 30257Node: Type217246 30258Node: Uleb128219721 30259Node: Val220045 30260Node: Version220295 30261Node: VTableEntry220570 30262Node: VTableInherit220860 30263Node: Warning221310 30264Node: Weak221544 30265Node: Weakref222213 30266Node: Word223178 30267Node: Zero225018 30268Node: 2byte225425 30269Node: 4byte226374 30270Node: 8byte226638 30271Node: Deprecated226915 30272Node: Object Attributes227151 30273Node: GNU Object Attributes228871 30274Node: Defining New Object Attributes233235 30275Node: Machine Dependencies234032 30276Node: AArch64-Dependent238124 30277Node: AArch64 Options238606 30278Node: AArch64 Extensions241712 30279Node: AArch64 Syntax248346 30280Node: AArch64-Chars248646 30281Node: AArch64-Regs249132 30282Node: AArch64-Relocations249426 30283Node: AArch64 Floating Point250500 30284Node: AArch64 Directives250725 30285Node: AArch64 Opcodes254667 30286Node: AArch64 Mapping Symbols255345 30287Node: Alpha-Dependent255727 30288Node: Alpha Notes256167 30289Node: Alpha Options256448 30290Node: Alpha Syntax258923 30291Node: Alpha-Chars259392 30292Node: Alpha-Regs259804 30293Node: Alpha-Relocs260191 30294Node: Alpha Floating Point266449 30295Node: Alpha Directives266671 30296Node: Alpha Opcodes272194 30297Node: ARC-Dependent272489 30298Node: ARC Options272934 30299Node: ARC Syntax276042 30300Node: ARC-Chars276270 30301Node: ARC-Regs277393 30302Node: ARC Directives280163 30303Node: ARC Modifiers288781 30304Node: ARC Symbols289792 30305Node: ARC Opcodes290353 30306Node: ARM-Dependent290599 30307Node: ARM Options291064 30308Node: ARM Syntax311338 30309Node: ARM-Instruction-Set311706 30310Node: ARM-Chars312926 30311Node: ARM-Regs313637 30312Node: ARM-Relocations313846 30313Node: ARM-Neon-Alignment315531 30314Node: ARM Floating Point315995 30315Node: ARM Directives316194 30316Ref: arm_fnend321354 30317Ref: arm_fnstart321678 30318Ref: arm_pad324087 30319Ref: arm_save324689 30320Ref: arm_setfp325390 30321Node: ARM Opcodes328682 30322Node: ARM Mapping Symbols331285 30323Node: ARM Unwinding Tutorial332095 30324Node: AVR-Dependent338297 30325Node: AVR Options338636 30326Node: AVR Syntax345139 30327Node: AVR-Chars345426 30328Node: AVR-Regs346057 30329Node: AVR-Modifiers346636 30330Node: AVR Opcodes348999 30331Node: AVR Pseudo Instructions354277 30332Node: Blackfin-Dependent355937 30333Node: Blackfin Options356248 30334Node: Blackfin Syntax357222 30335Node: Blackfin Directives363426 30336Node: BPF-Dependent364172 30337Node: BPF Options364489 30338Node: BPF Syntax364872 30339Node: BPF-Chars365140 30340Node: BPF-Regs365533 30341Node: BPF-Pseudo-Maps366048 30342Node: BPF Directives366468 30343Node: BPF Opcodes366882 30344Node: CR16-Dependent373499 30345Node: CR16 Operand Qualifiers373794 30346Node: CR16 Syntax376523 30347Node: CR16-Chars376709 30348Node: CRIS-Dependent377246 30349Node: CRIS-Opts377593 30350Ref: march-option379279 30351Node: CRIS-Expand381096 30352Node: CRIS-Symbols382279 30353Node: CRIS-Syntax383448 30354Node: CRIS-Chars383784 30355Node: CRIS-Pic384335 30356Ref: crispic384531 30357Node: CRIS-Regs388071 30358Node: CRIS-Pseudos388488 30359Ref: crisnous389264 30360Node: C-SKY-Dependent390546 30361Node: C-SKY Options390808 30362Node: C-SKY Syntax393795 30363Node: D10V-Dependent394040 30364Node: D10V-Opts394394 30365Node: D10V-Syntax395358 30366Node: D10V-Size395889 30367Node: D10V-Subs396864 30368Node: D10V-Chars397901 30369Node: D10V-Regs399815 30370Node: D10V-Addressing400862 30371Node: D10V-Word401550 30372Node: D10V-Float402067 30373Node: D10V-Opcodes402380 30374Node: D30V-Dependent402775 30375Node: D30V-Opts403132 30376Node: D30V-Syntax403809 30377Node: D30V-Size404343 30378Node: D30V-Subs405316 30379Node: D30V-Chars406353 30380Node: D30V-Guarded408961 30381Node: D30V-Regs409643 30382Node: D30V-Addressing410784 30383Node: D30V-Float411454 30384Node: D30V-Opcodes411767 30385Node: Epiphany-Dependent412162 30386Node: Epiphany Options412450 30387Node: Epiphany Syntax412849 30388Node: Epiphany-Chars413050 30389Node: H8/300-Dependent413604 30390Node: H8/300 Options414020 30391Node: H8/300 Syntax414461 30392Node: H8/300-Chars414762 30393Node: H8/300-Regs415061 30394Node: H8/300-Addressing415980 30395Node: H8/300 Floating Point417021 30396Node: H8/300 Directives417348 30397Node: H8/300 Opcodes418476 30398Node: HPPA-Dependent426798 30399Node: HPPA Notes427230 30400Node: HPPA Options427989 30401Node: HPPA Syntax428184 30402Node: HPPA Floating Point429454 30403Node: HPPA Directives429660 30404Node: HPPA Opcodes438346 30405Node: i386-Dependent438605 30406Node: i386-Options439991 30407Node: i386-Directives455166 30408Node: i386-Syntax456509 30409Node: i386-Variations456814 30410Node: i386-Chars459741 30411Node: i386-Mnemonics460470 30412Node: i386-Regs465480 30413Node: i386-Prefixes468145 30414Node: i386-Memory470905 30415Node: i386-Jumps473842 30416Node: i386-Float474963 30417Node: i386-SIMD476863 30418Node: i386-LWP477972 30419Node: i386-BMI478806 30420Node: i386-TBM479184 30421Node: i386-16bit479714 30422Node: i386-Arch481785 30423Node: i386-ISA485637 30424Node: i386-Bugs486509 30425Node: i386-Notes487262 30426Node: IA-64-Dependent488120 30427Node: IA-64 Options488421 30428Node: IA-64 Syntax491572 30429Node: IA-64-Chars491978 30430Node: IA-64-Regs492208 30431Node: IA-64-Bits493134 30432Node: IA-64-Relocs493664 30433Node: IA-64 Opcodes494136 30434Node: IP2K-Dependent494408 30435Node: IP2K-Opts494680 30436Node: IP2K-Syntax495180 30437Node: IP2K-Chars495354 30438Node: LM32-Dependent495897 30439Node: LM32 Options496192 30440Node: LM32 Syntax496826 30441Node: LM32-Regs497122 30442Node: LM32-Modifiers498081 30443Node: LM32-Chars499456 30444Node: LM32 Opcodes499964 30445Node: M32C-Dependent500268 30446Node: M32C-Opts500777 30447Node: M32C-Syntax501197 30448Node: M32C-Modifiers501432 30449Node: M32C-Chars503221 30450Node: M32R-Dependent503787 30451Node: M32R-Opts504108 30452Node: M32R-Directives508271 30453Node: M32R-Warnings512246 30454Node: M68K-Dependent515252 30455Node: M68K-Opts515719 30456Node: M68K-Syntax523092 30457Node: M68K-Moto-Syntax524932 30458Node: M68K-Float527522 30459Node: M68K-Directives528042 30460Node: M68K-opcodes529370 30461Node: M68K-Branch529596 30462Node: M68K-Chars533794 30463Node: M68HC11-Dependent534657 30464Node: M68HC11-Opts535188 30465Node: M68HC11-Syntax539493 30466Node: M68HC11-Modifiers542284 30467Node: M68HC11-Directives544112 30468Node: M68HC11-Float545488 30469Node: M68HC11-opcodes546016 30470Node: M68HC11-Branch546198 30471Node: S12Z-Dependent548647 30472Node: S12Z Options548993 30473Node: S12Z Syntax549977 30474Node: S12Z Syntax Overview550296 30475Node: S12Z Addressing Modes551958 30476Node: S12Z Register Notation555765 30477Node: Meta-Dependent556947 30478Node: Meta Options557229 30479Node: Meta Syntax557891 30480Node: Meta-Chars558103 30481Node: Meta-Regs558403 30482Node: MicroBlaze-Dependent558679 30483Node: MicroBlaze Directives559368 30484Node: MicroBlaze Syntax560751 30485Node: MicroBlaze-Chars560983 30486Node: MIPS-Dependent561535 30487Node: MIPS Options562972 30488Node: MIPS Macros582488 30489Ref: MIPS Macros-Footnote-1585202 30490Node: MIPS Symbol Sizes585345 30491Node: MIPS Small Data587017 30492Node: MIPS ISA589180 30493Node: MIPS assembly options590965 30494Node: MIPS autoextend592098 30495Node: MIPS insn592832 30496Node: MIPS FP ABIs594112 30497Node: MIPS FP ABI History594564 30498Node: MIPS FP ABI Variants595324 30499Node: MIPS FP ABI Selection597878 30500Node: MIPS FP ABI Compatibility598942 30501Node: MIPS NaN Encodings599752 30502Node: MIPS Option Stack601715 30503Node: MIPS ASE Instruction Generation Overrides602500 30504Node: MIPS Floating-Point607263 30505Node: MIPS Syntax608169 30506Node: MIPS-Chars608431 30507Node: MMIX-Dependent608973 30508Node: MMIX-Opts609353 30509Node: MMIX-Expand612958 30510Node: MMIX-Syntax614273 30511Ref: mmixsite614630 30512Node: MMIX-Chars615471 30513Node: MMIX-Symbols616345 30514Node: MMIX-Regs618413 30515Node: MMIX-Pseudos619438 30516Ref: MMIX-loc619579 30517Ref: MMIX-local620659 30518Ref: MMIX-is621191 30519Ref: MMIX-greg621462 30520Ref: GREG-base622381 30521Ref: MMIX-byte623698 30522Ref: MMIX-constants624169 30523Ref: MMIX-prefix624815 30524Ref: MMIX-spec625189 30525Node: MMIX-mmixal625523 30526Node: MSP430-Dependent629021 30527Node: MSP430 Options629490 30528Node: MSP430 Syntax633056 30529Node: MSP430-Macros633372 30530Node: MSP430-Chars634103 30531Node: MSP430-Regs634818 30532Node: MSP430-Ext635378 30533Node: MSP430 Floating Point637199 30534Node: MSP430 Directives637423 30535Node: MSP430 Opcodes639274 30536Node: MSP430 Profiling Capability639669 30537Node: NDS32-Dependent641998 30538Node: NDS32 Options642610 30539Node: NDS32 Syntax644511 30540Node: NDS32-Chars644779 30541Node: NDS32-Regs645246 30542Node: NDS32-Ops646100 30543Node: NiosII-Dependent649695 30544Node: Nios II Options650114 30545Node: Nios II Syntax651352 30546Node: Nios II Chars651558 30547Node: Nios II Relocations651749 30548Node: Nios II Directives653321 30549Node: Nios II Opcodes654884 30550Node: NS32K-Dependent655159 30551Node: NS32K Syntax655388 30552Node: NS32K-Chars655537 30553Node: OpenRISC-Dependent656277 30554Node: OpenRISC-Syntax656620 30555Node: OpenRISC-Chars656941 30556Node: OpenRISC-Regs657264 30557Node: OpenRISC-Relocs658277 30558Node: OpenRISC-Float663073 30559Node: OpenRISC-Directives663279 30560Node: OpenRISC-Opcodes664077 30561Node: PDP-11-Dependent664369 30562Node: PDP-11-Options664762 30563Node: PDP-11-Pseudos669833 30564Node: PDP-11-Syntax670178 30565Node: PDP-11-Mnemonics671010 30566Node: PDP-11-Synthetic671312 30567Node: PJ-Dependent671530 30568Node: PJ Options671793 30569Node: PJ Syntax672088 30570Node: PJ-Chars672253 30571Node: PPC-Dependent672802 30572Node: PowerPC-Opts673134 30573Node: PowerPC-Pseudo676926 30574Node: PowerPC-Syntax677548 30575Node: PowerPC-Chars677738 30576Node: PRU-Dependent678489 30577Node: PRU Options678872 30578Node: PRU Syntax679608 30579Node: PRU Chars679795 30580Node: PRU Relocations679950 30581Node: PRU Directives680501 30582Node: PRU Opcodes681405 30583Node: RISC-V-Dependent681822 30584Node: RISC-V-Options682250 30585Node: RISC-V-Directives684970 30586Node: RISC-V-Modifiers690325 30587Node: RISC-V-Formats694393 30588Node: RISC-V-ATTRIBUTE702994 30589Node: RL78-Dependent704960 30590Node: RL78-Opts705361 30591Node: RL78-Modifiers706196 30592Node: RL78-Directives706972 30593Node: RL78-Syntax707577 30594Node: RL78-Chars707773 30595Node: RX-Dependent708329 30596Node: RX-Opts708760 30597Node: RX-Modifiers713026 30598Node: RX-Directives714130 30599Node: RX-Float714870 30600Node: RX-Syntax715511 30601Node: RX-Chars715690 30602Node: S/390-Dependent716242 30603Node: s390 Options717104 30604Node: s390 Characters719288 30605Node: s390 Syntax719809 30606Node: s390 Register720710 30607Node: s390 Mnemonics721523 30608Node: s390 Operands724541 30609Node: s390 Formats727161 30610Node: s390 Aliases736782 30611Node: s390 Operand Modifier740679 30612Node: s390 Instruction Marker744480 30613Node: s390 Literal Pool Entries745496 30614Node: s390 Directives747419 30615Node: s390 Floating Point752867 30616Node: SCORE-Dependent753313 30617Node: SCORE-Opts753615 30618Node: SCORE-Pseudo754903 30619Node: SCORE-Syntax756980 30620Node: SCORE-Chars757162 30621Node: SH-Dependent757720 30622Node: SH Options758132 30623Node: SH Syntax759187 30624Node: SH-Chars759460 30625Node: SH-Regs760003 30626Node: SH-Addressing760617 30627Node: SH Floating Point761526 30628Node: SH Directives762620 30629Node: SH Opcodes763021 30630Node: Sparc-Dependent767343 30631Node: Sparc-Opts767752 30632Node: Sparc-Aligned-Data773465 30633Node: Sparc-Syntax774297 30634Node: Sparc-Chars774871 30635Node: Sparc-Regs775434 30636Node: Sparc-Constants781282 30637Node: Sparc-Relocs786042 30638Node: Sparc-Size-Translations791178 30639Node: Sparc-Float792827 30640Node: Sparc-Directives793022 30641Node: TIC54X-Dependent794982 30642Node: TIC54X-Opts795745 30643Node: TIC54X-Block796788 30644Node: TIC54X-Env797148 30645Node: TIC54X-Constants797496 30646Node: TIC54X-Subsyms797898 30647Node: TIC54X-Locals799807 30648Node: TIC54X-Builtins800551 30649Node: TIC54X-Ext803022 30650Node: TIC54X-Directives803593 30651Node: TIC54X-Macros814494 30652Node: TIC54X-MMRegs816605 30653Node: TIC54X-Syntax816843 30654Node: TIC54X-Chars817033 30655Node: TIC6X-Dependent817724 30656Node: TIC6X Options818027 30657Node: TIC6X Syntax820028 30658Node: TIC6X Directives821130 30659Node: TILE-Gx-Dependent823414 30660Node: TILE-Gx Options823724 30661Node: TILE-Gx Syntax824074 30662Node: TILE-Gx Opcodes826308 30663Node: TILE-Gx Registers826596 30664Node: TILE-Gx Modifiers827368 30665Node: TILE-Gx Directives832341 30666Node: TILEPro-Dependent833245 30667Node: TILEPro Options833554 30668Node: TILEPro Syntax833738 30669Node: TILEPro Opcodes835972 30670Node: TILEPro Registers836263 30671Node: TILEPro Modifiers837033 30672Node: TILEPro Directives841799 30673Node: V850-Dependent842703 30674Node: V850 Options843099 30675Node: V850 Syntax847379 30676Node: V850-Chars847619 30677Node: V850-Regs848163 30678Node: V850 Floating Point849731 30679Node: V850 Directives849937 30680Node: V850 Opcodes852004 30681Node: Vax-Dependent857896 30682Node: VAX-Opts858480 30683Node: VAX-float862215 30684Node: VAX-directives862847 30685Node: VAX-opcodes863708 30686Node: VAX-branch864097 30687Node: VAX-operands866604 30688Node: VAX-no867367 30689Node: VAX-Syntax867623 30690Node: VAX-Chars867789 30691Node: Visium-Dependent868343 30692Node: Visium Options868656 30693Node: Visium Syntax869122 30694Node: Visium Characters869367 30695Node: Visium Registers869948 30696Node: Visium Opcodes870220 30697Node: WebAssembly-Dependent870646 30698Node: WebAssembly-Notes871087 30699Node: WebAssembly-Syntax871373 30700Node: WebAssembly-Chars871939 30701Node: WebAssembly-Relocs872318 30702Node: WebAssembly-Signatures873043 30703Node: WebAssembly-Floating-Point873544 30704Node: WebAssembly-Opcodes873785 30705Node: WebAssembly-module-layout874418 30706Node: XGATE-Dependent874896 30707Node: XGATE-Opts875323 30708Node: XGATE-Syntax876314 30709Node: XGATE-Directives878391 30710Node: XGATE-Float878630 30711Node: XGATE-opcodes879127 30712Node: XSTORMY16-Dependent879239 30713Node: XStormy16 Syntax879585 30714Node: XStormy16-Chars879775 30715Node: XStormy16 Directives880388 30716Node: XStormy16 Opcodes881043 30717Node: Xtensa-Dependent882099 30718Node: Xtensa Options882833 30719Node: Xtensa Syntax887410 30720Node: Xtensa Opcodes889554 30721Node: Xtensa Registers891348 30722Node: Xtensa Optimizations891981 30723Node: Density Instructions892433 30724Node: Xtensa Automatic Alignment893535 30725Node: Xtensa Relaxation895982 30726Node: Xtensa Branch Relaxation896947 30727Node: Xtensa Call Relaxation898319 30728Node: Xtensa Jump Relaxation900100 30729Node: Xtensa Immediate Relaxation902200 30730Node: Xtensa Directives904774 30731Node: Schedule Directive906483 30732Node: Longcalls Directive906823 30733Node: Transform Directive907367 30734Node: Literal Directive908109 30735Ref: Literal Directive-Footnote-1911648 30736Node: Literal Position Directive911790 30737Node: Literal Prefix Directive913489 30738Node: Absolute Literals Directive914387 30739Node: Z80-Dependent915694 30740Node: Z80 Options916082 30741Node: Z80 Syntax918589 30742Node: Z80-Chars919297 30743Node: Z80-Regs920147 30744Node: Z80-Case920499 30745Node: Z80-Labels920963 30746Node: Z80 Floating Point921456 30747Node: Z80 Directives921931 30748Node: Z80 Opcodes924394 30749Node: Z8000-Dependent926018 30750Node: Z8000 Options926957 30751Node: Z8000 Syntax927174 30752Node: Z8000-Chars927464 30753Node: Z8000-Regs927946 30754Node: Z8000-Addressing928736 30755Node: Z8000 Directives929853 30756Node: Z8000 Opcodes931462 30757Node: Reporting Bugs941404 30758Node: Bug Criteria942130 30759Node: Bug Reporting942897 30760Node: Acknowledgements949553 30761Ref: Acknowledgements-Footnote-1954518 30762Node: GNU Free Documentation License954544 30763Node: AS Index979713 30764 30765End Tag Table 30766