1This is as.info, produced by makeinfo version 5.1 from as.texi. 2 3This file documents the GNU Assembler "as". 4 5 Copyright (C) 1991-2021 Free Software Foundation, Inc. 6 7 Permission is granted to copy, distribute and/or modify this document 8under the terms of the GNU Free Documentation License, Version 1.3 or 9any later version published by the Free Software Foundation; with no 10Invariant Sections, with no Front-Cover Texts, and with no Back-Cover 11Texts. A copy of the license is included in the section entitled "GNU 12Free Documentation License". 13 14INFO-DIR-SECTION Software development 15START-INFO-DIR-ENTRY 16* As: (as). The GNU assembler. 17* Gas: (as). The GNU assembler. 18END-INFO-DIR-ENTRY 19 20 21File: as.info, Node: Top, Next: Overview, Up: (dir) 22 23Using as 24******** 25 26This file is a user guide to the GNU assembler 'as' (GNU Toolchain for 27the A-profile Architecture 10.3-2021.07 (arm-10.29)) version 2.36.1. 28 29 This document is distributed under the terms of the GNU Free 30Documentation License. A copy of the license is included in the section 31entitled "GNU Free Documentation License". 32 33* Menu: 34 35* Overview:: Overview 36* Invoking:: Command-Line Options 37* Syntax:: Syntax 38* Sections:: Sections and Relocation 39* Symbols:: Symbols 40* Expressions:: Expressions 41* Pseudo Ops:: Assembler Directives 42* Object Attributes:: Object Attributes 43* Machine Dependencies:: Machine Dependent Features 44* Reporting Bugs:: Reporting Bugs 45* Acknowledgements:: Who Did What 46* GNU Free Documentation License:: GNU Free Documentation License 47* AS Index:: AS Index 48 49 50File: as.info, Node: Overview, Next: Invoking, Prev: Top, Up: Top 51 521 Overview 53********** 54 55Here is a brief summary of how to invoke 'as'. For details, see *note 56Command-Line Options: Invoking. 57 58 as [-a[cdghlns][=FILE]] [-alternate] [-D] 59 [-compress-debug-sections] [-nocompress-debug-sections] 60 [-debug-prefix-map OLD=NEW] 61 [-defsym SYM=VAL] [-f] [-g] [-gstabs] 62 [-gstabs+] [-gdwarf-<N>] [-gdwarf-sections] 63 [-gdwarf-cie-version=VERSION] 64 [-help] [-I DIR] [-J] 65 [-K] [-L] [-listing-lhs-width=NUM] 66 [-listing-lhs-width2=NUM] [-listing-rhs-width=NUM] 67 [-listing-cont-lines=NUM] [-keep-locals] 68 [-no-pad-sections] 69 [-o OBJFILE] [-R] 70 [-statistics] 71 [-v] [-version] [-version] 72 [-W] [-warn] [-fatal-warnings] [-w] [-x] 73 [-Z] [@FILE] 74 [-sectname-subst] [-size-check=[error|warning]] 75 [-elf-stt-common=[no|yes]] 76 [-generate-missing-build-notes=[no|yes]] 77 [-target-help] [TARGET-OPTIONS] 78 [-|FILES ...] 79 80 _Target AArch64 options:_ 81 [-EB|-EL] 82 [-mabi=ABI] 83 84 _Target Alpha options:_ 85 [-mCPU] 86 [-mdebug | -no-mdebug] 87 [-replace | -noreplace] 88 [-relax] [-g] [-GSIZE] 89 [-F] [-32addr] 90 91 _Target ARC options:_ 92 [-mcpu=CPU] 93 [-mA6|-mARC600|-mARC601|-mA7|-mARC700|-mEM|-mHS] 94 [-mcode-density] 95 [-mrelax] 96 [-EB|-EL] 97 98 _Target ARM options:_ 99 [-mcpu=PROCESSOR[+EXTENSION...]] 100 [-march=ARCHITECTURE[+EXTENSION...]] 101 [-mfpu=FLOATING-POINT-FORMAT] 102 [-mfloat-abi=ABI] 103 [-meabi=VER] 104 [-mthumb] 105 [-EB|-EL] 106 [-mapcs-32|-mapcs-26|-mapcs-float| 107 -mapcs-reentrant] 108 [-mthumb-interwork] [-k] 109 110 _Target Blackfin options:_ 111 [-mcpu=PROCESSOR[-SIREVISION]] 112 [-mfdpic] 113 [-mno-fdpic] 114 [-mnopic] 115 116 _Target BPF options:_ 117 [-EL] [-EB] 118 119 _Target CRIS options:_ 120 [-underscore | -no-underscore] 121 [-pic] [-N] 122 [-emulation=criself | -emulation=crisaout] 123 [-march=v0_v10 | -march=v10 | -march=v32 | -march=common_v10_v32] 124 125 _Target C-SKY options:_ 126 [-march=ARCH] [-mcpu=CPU] 127 [-EL] [-mlittle-endian] [-EB] [-mbig-endian] 128 [-fpic] [-pic] 129 [-mljump] [-mno-ljump] 130 [-force2bsr] [-mforce2bsr] [-no-force2bsr] [-mno-force2bsr] 131 [-jsri2bsr] [-mjsri2bsr] [-no-jsri2bsr ] [-mno-jsri2bsr] 132 [-mnolrw ] [-mno-lrw] 133 [-melrw] [-mno-elrw] 134 [-mlaf ] [-mliterals-after-func] 135 [-mno-laf] [-mno-literals-after-func] 136 [-mlabr] [-mliterals-after-br] 137 [-mno-labr] [-mnoliterals-after-br] 138 [-mistack] [-mno-istack] 139 [-mhard-float] [-mmp] [-mcp] [-mcache] 140 [-msecurity] [-mtrust] 141 [-mdsp] [-medsp] [-mvdsp] 142 143 _Target D10V options:_ 144 [-O] 145 146 _Target D30V options:_ 147 [-O|-n|-N] 148 149 _Target EPIPHANY options:_ 150 [-mepiphany|-mepiphany16] 151 152 _Target H8/300 options:_ 153 [-h-tick-hex] 154 155 _Target i386 options:_ 156 [-32|-x32|-64] [-n] 157 [-march=CPU[+EXTENSION...]] [-mtune=CPU] 158 159 _Target IA-64 options:_ 160 [-mconstant-gp|-mauto-pic] 161 [-milp32|-milp64|-mlp64|-mp64] 162 [-mle|mbe] 163 [-mtune=itanium1|-mtune=itanium2] 164 [-munwind-check=warning|-munwind-check=error] 165 [-mhint.b=ok|-mhint.b=warning|-mhint.b=error] 166 [-x|-xexplicit] [-xauto] [-xdebug] 167 168 _Target IP2K options:_ 169 [-mip2022|-mip2022ext] 170 171 _Target M32C options:_ 172 [-m32c|-m16c] [-relax] [-h-tick-hex] 173 174 _Target M32R options:_ 175 [-m32rx|-[no-]warn-explicit-parallel-conflicts| 176 -W[n]p] 177 178 _Target M680X0 options:_ 179 [-l] [-m68000|-m68010|-m68020|...] 180 181 _Target M68HC11 options:_ 182 [-m68hc11|-m68hc12|-m68hcs12|-mm9s12x|-mm9s12xg] 183 [-mshort|-mlong] 184 [-mshort-double|-mlong-double] 185 [-force-long-branches] [-short-branches] 186 [-strict-direct-mode] [-print-insn-syntax] 187 [-print-opcodes] [-generate-example] 188 189 _Target MCORE options:_ 190 [-jsri2bsr] [-sifilter] [-relax] 191 [-mcpu=[210|340]] 192 193 _Target Meta options:_ 194 [-mcpu=CPU] [-mfpu=CPU] [-mdsp=CPU] 195 _Target MICROBLAZE options:_ 196 197 _Target MIPS options:_ 198 [-nocpp] [-EL] [-EB] [-O[OPTIMIZATION LEVEL]] 199 [-g[DEBUG LEVEL]] [-G NUM] [-KPIC] [-call_shared] 200 [-non_shared] [-xgot [-mvxworks-pic] 201 [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32] 202 [-mfp64] [-mgp64] [-mfpxx] 203 [-modd-spreg] [-mno-odd-spreg] 204 [-march=CPU] [-mtune=CPU] [-mips1] [-mips2] 205 [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2] 206 [-mips32r3] [-mips32r5] [-mips32r6] [-mips64] [-mips64r2] 207 [-mips64r3] [-mips64r5] [-mips64r6] 208 [-construct-floats] [-no-construct-floats] 209 [-mignore-branch-isa] [-mno-ignore-branch-isa] 210 [-mnan=ENCODING] 211 [-trap] [-no-break] [-break] [-no-trap] 212 [-mips16] [-no-mips16] 213 [-mmips16e2] [-mno-mips16e2] 214 [-mmicromips] [-mno-micromips] 215 [-msmartmips] [-mno-smartmips] 216 [-mips3d] [-no-mips3d] 217 [-mdmx] [-no-mdmx] 218 [-mdsp] [-mno-dsp] 219 [-mdspr2] [-mno-dspr2] 220 [-mdspr3] [-mno-dspr3] 221 [-mmsa] [-mno-msa] 222 [-mxpa] [-mno-xpa] 223 [-mmt] [-mno-mt] 224 [-mmcu] [-mno-mcu] 225 [-mcrc] [-mno-crc] 226 [-mginv] [-mno-ginv] 227 [-mloongson-mmi] [-mno-loongson-mmi] 228 [-mloongson-cam] [-mno-loongson-cam] 229 [-mloongson-ext] [-mno-loongson-ext] 230 [-mloongson-ext2] [-mno-loongson-ext2] 231 [-minsn32] [-mno-insn32] 232 [-mfix7000] [-mno-fix7000] 233 [-mfix-rm7000] [-mno-fix-rm7000] 234 [-mfix-vr4120] [-mno-fix-vr4120] 235 [-mfix-vr4130] [-mno-fix-vr4130] 236 [-mfix-r5900] [-mno-fix-r5900] 237 [-mdebug] [-no-mdebug] 238 [-mpdr] [-mno-pdr] 239 240 _Target MMIX options:_ 241 [-fixed-special-register-names] [-globalize-symbols] 242 [-gnu-syntax] [-relax] [-no-predefined-symbols] 243 [-no-expand] [-no-merge-gregs] [-x] 244 [-linker-allocated-gregs] 245 246 _Target Nios II options:_ 247 [-relax-all] [-relax-section] [-no-relax] 248 [-EB] [-EL] 249 250 _Target NDS32 options:_ 251 [-EL] [-EB] [-O] [-Os] [-mcpu=CPU] 252 [-misa=ISA] [-mabi=ABI] [-mall-ext] 253 [-m[no-]16-bit] [-m[no-]perf-ext] [-m[no-]perf2-ext] 254 [-m[no-]string-ext] [-m[no-]dsp-ext] [-m[no-]mac] [-m[no-]div] 255 [-m[no-]audio-isa-ext] [-m[no-]fpu-sp-ext] [-m[no-]fpu-dp-ext] 256 [-m[no-]fpu-fma] [-mfpu-freg=FREG] [-mreduced-regs] 257 [-mfull-regs] [-m[no-]dx-regs] [-mpic] [-mno-relax] 258 [-mb2bb] 259 260 _Target PDP11 options:_ 261 [-mpic|-mno-pic] [-mall] [-mno-extensions] 262 [-mEXTENSION|-mno-EXTENSION] 263 [-mCPU] [-mMACHINE] 264 265 _Target picoJava options:_ 266 [-mb|-me] 267 268 _Target PowerPC options:_ 269 [-a32|-a64] 270 [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604|-m403|-m405| 271 -m440|-m464|-m476|-m7400|-m7410|-m7450|-m7455|-m750cl|-mgekko| 272 -mbroadway|-mppc64|-m620|-me500|-e500x2|-me500mc|-me500mc64|-me5500| 273 -me6500|-mppc64bridge|-mbooke|-mpower4|-mpwr4|-mpower5|-mpwr5|-mpwr5x| 274 -mpower6|-mpwr6|-mpower7|-mpwr7|-mpower8|-mpwr8|-mpower9|-mpwr9-ma2| 275 -mcell|-mspe|-mspe2|-mtitan|-me300|-mcom] 276 [-many] [-maltivec|-mvsx|-mhtm|-mvle] 277 [-mregnames|-mno-regnames] 278 [-mrelocatable|-mrelocatable-lib|-K PIC] [-memb] 279 [-mlittle|-mlittle-endian|-le|-mbig|-mbig-endian|-be] 280 [-msolaris|-mno-solaris] 281 [-nops=COUNT] 282 283 _Target PRU options:_ 284 [-link-relax] 285 [-mnolink-relax] 286 [-mno-warn-regname-label] 287 288 _Target RISC-V options:_ 289 [-fpic|-fPIC|-fno-pic] 290 [-march=ISA] 291 [-mabi=ABI] 292 [-mlittle-endian|-mbig-endian] 293 294 _Target RL78 options:_ 295 [-mg10] 296 [-m32bit-doubles|-m64bit-doubles] 297 298 _Target RX options:_ 299 [-mlittle-endian|-mbig-endian] 300 [-m32bit-doubles|-m64bit-doubles] 301 [-muse-conventional-section-names] 302 [-msmall-data-limit] 303 [-mpid] 304 [-mrelax] 305 [-mint-register=NUMBER] 306 [-mgcc-abi|-mrx-abi] 307 308 _Target s390 options:_ 309 [-m31|-m64] [-mesa|-mzarch] [-march=CPU] 310 [-mregnames|-mno-regnames] 311 [-mwarn-areg-zero] 312 313 _Target SCORE options:_ 314 [-EB][-EL][-FIXDD][-NWARN] 315 [-SCORE5][-SCORE5U][-SCORE7][-SCORE3] 316 [-march=score7][-march=score3] 317 [-USE_R1][-KPIC][-O0][-G NUM][-V] 318 319 _Target SPARC options:_ 320 [-Av6|-Av7|-Av8|-Aleon|-Asparclet|-Asparclite 321 -Av8plus|-Av8plusa|-Av8plusb|-Av8plusc|-Av8plusd 322 -Av8plusv|-Av8plusm|-Av9|-Av9a|-Av9b|-Av9c 323 -Av9d|-Av9e|-Av9v|-Av9m|-Asparc|-Asparcvis 324 -Asparcvis2|-Asparcfmaf|-Asparcima|-Asparcvis3 325 -Asparcvisr|-Asparc5] 326 [-xarch=v8plus|-xarch=v8plusa]|-xarch=v8plusb|-xarch=v8plusc 327 -xarch=v8plusd|-xarch=v8plusv|-xarch=v8plusm|-xarch=v9 328 -xarch=v9a|-xarch=v9b|-xarch=v9c|-xarch=v9d|-xarch=v9e 329 -xarch=v9v|-xarch=v9m|-xarch=sparc|-xarch=sparcvis 330 -xarch=sparcvis2|-xarch=sparcfmaf|-xarch=sparcima 331 -xarch=sparcvis3|-xarch=sparcvisr|-xarch=sparc5 332 -bump] 333 [-32|-64] 334 [-enforce-aligned-data][-dcti-couples-detect] 335 336 _Target TIC54X options:_ 337 [-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf] 338 [-merrors-to-file <FILENAME>|-me <FILENAME>] 339 340 _Target TIC6X options:_ 341 [-march=ARCH] [-mbig-endian|-mlittle-endian] 342 [-mdsbt|-mno-dsbt] [-mpid=no|-mpid=near|-mpid=far] 343 [-mpic|-mno-pic] 344 345 _Target TILE-Gx options:_ 346 [-m32|-m64][-EB][-EL] 347 348 _Target Visium options:_ 349 [-mtune=ARCH] 350 351 _Target Xtensa options:_ 352 [-[no-]text-section-literals] [-[no-]auto-litpools] 353 [-[no-]absolute-literals] 354 [-[no-]target-align] [-[no-]longcalls] 355 [-[no-]transform] 356 [-rename-section OLDNAME=NEWNAME] 357 [-[no-]trampolines] 358 [-abi-windowed|-abi-call0] 359 360 _Target Z80 options:_ 361 [-march=CPU[-EXT][+EXT]] 362 [-local-prefix=PREFIX] 363 [-colonless] 364 [-sdcc] 365 [-fp-s=FORMAT] 366 [-fp-d=FORMAT] 367 368 369'@FILE' 370 Read command-line options from FILE. The options read are inserted 371 in place of the original @FILE option. If FILE does not exist, or 372 cannot be read, then the option will be treated literally, and not 373 removed. 374 375 Options in FILE are separated by whitespace. A whitespace 376 character may be included in an option by surrounding the entire 377 option in either single or double quotes. Any character (including 378 a backslash) may be included by prefixing the character to be 379 included with a backslash. The FILE may itself contain additional 380 @FILE options; any such options will be processed recursively. 381 382'-a[cdghlmns]' 383 Turn on listings, in any of a variety of ways: 384 385 '-ac' 386 omit false conditionals 387 388 '-ad' 389 omit debugging directives 390 391 '-ag' 392 include general information, like as version and options 393 passed 394 395 '-ah' 396 include high-level source 397 398 '-al' 399 include assembly 400 401 '-am' 402 include macro expansions 403 404 '-an' 405 omit forms processing 406 407 '-as' 408 include symbols 409 410 '=file' 411 set the name of the listing file 412 413 You may combine these options; for example, use '-aln' for assembly 414 listing without forms processing. The '=file' option, if used, 415 must be the last one. By itself, '-a' defaults to '-ahls'. 416 417'--alternate' 418 Begin in alternate macro mode. *Note '.altmacro': Altmacro. 419 420'--compress-debug-sections' 421 Compress DWARF debug sections using zlib with SHF_COMPRESSED from 422 the ELF ABI. The resulting object file may not be compatible with 423 older linkers and object file utilities. Note if compression would 424 make a given section _larger_ then it is not compressed. 425 426'--compress-debug-sections=none' 427'--compress-debug-sections=zlib' 428'--compress-debug-sections=zlib-gnu' 429'--compress-debug-sections=zlib-gabi' 430 These options control how DWARF debug sections are compressed. 431 '--compress-debug-sections=none' is equivalent to 432 '--nocompress-debug-sections'. '--compress-debug-sections=zlib' 433 and '--compress-debug-sections=zlib-gabi' are equivalent to 434 '--compress-debug-sections'. '--compress-debug-sections=zlib-gnu' 435 compresses DWARF debug sections using zlib. The debug sections are 436 renamed to begin with '.zdebug'. Note if compression would make a 437 given section _larger_ then it is not compressed nor renamed. 438 439'--nocompress-debug-sections' 440 Do not compress DWARF debug sections. This is usually the default 441 for all targets except the x86/x86_64, but a configure time option 442 can be used to override this. 443 444'-D' 445 Ignored. This option is accepted for script compatibility with 446 calls to other assemblers. 447 448'--debug-prefix-map OLD=NEW' 449 When assembling files in directory 'OLD', record debugging 450 information describing them as in 'NEW' instead. 451 452'--defsym SYM=VALUE' 453 Define the symbol SYM to be VALUE before assembling the input file. 454 VALUE must be an integer constant. As in C, a leading '0x' 455 indicates a hexadecimal value, and a leading '0' indicates an octal 456 value. The value of the symbol can be overridden inside a source 457 file via the use of a '.set' pseudo-op. 458 459'-f' 460 "fast"--skip whitespace and comment preprocessing (assume source is 461 compiler output). 462 463'-g' 464'--gen-debug' 465 Generate debugging information for each assembler source line using 466 whichever debug format is preferred by the target. This currently 467 means either STABS, ECOFF or DWARF2. When the debug format is 468 DWARF then a '.debug_info' and '.debug_line' section is only 469 emitted when the assembly file doesn't generate one itself. 470 471'--gstabs' 472 Generate stabs debugging information for each assembler line. This 473 may help debugging assembler code, if the debugger can handle it. 474 475'--gstabs+' 476 Generate stabs debugging information for each assembler line, with 477 GNU extensions that probably only gdb can handle, and that could 478 make other debuggers crash or refuse to read your program. This 479 may help debugging assembler code. Currently the only GNU 480 extension is the location of the current working directory at 481 assembling time. 482 483'--gdwarf-2' 484 Generate DWARF2 debugging information for each assembler line. 485 This may help debugging assembler code, if the debugger can handle 486 it. Note--this option is only supported by some targets, not all 487 of them. 488 489'--gdwarf-3' 490 This option is the same as the '--gdwarf-2' option, except that it 491 allows for the possibility of the generation of extra debug 492 information as per version 3 of the DWARF specification. Note - 493 enabling this option does not guarantee the generation of any extra 494 information, the choice to do so is on a per target basis. 495 496'--gdwarf-4' 497 This option is the same as the '--gdwarf-2' option, except that it 498 allows for the possibility of the generation of extra debug 499 information as per version 4 of the DWARF specification. Note - 500 enabling this option does not guarantee the generation of any extra 501 information, the choice to do so is on a per target basis. 502 503'--gdwarf-5' 504 This option is the same as the '--gdwarf-2' option, except that it 505 allows for the possibility of the generation of extra debug 506 information as per version 5 of the DWARF specification. Note - 507 enabling this option does not guarantee the generation of any extra 508 information, the choice to do so is on a per target basis. 509 510'--gdwarf-sections' 511 Instead of creating a .debug_line section, create a series of 512 .debug_line.FOO sections where FOO is the name of the corresponding 513 code section. For example a code section called .TEXT.FUNC will 514 have its dwarf line number information placed into a section called 515 .DEBUG_LINE.TEXT.FUNC. If the code section is just called .TEXT 516 then debug line section will still be called just .DEBUG_LINE 517 without any suffix. 518 519'--gdwarf-cie-version=VERSION' 520 Control which version of DWARF Common Information Entries (CIEs) 521 are produced. When this flag is not specificed the default is 522 version 1, though some targets can modify this default. Other 523 possible values for VERSION are 3 or 4. 524 525'--size-check=error' 526'--size-check=warning' 527 Issue an error or warning for invalid ELF .size directive. 528 529'--elf-stt-common=no' 530'--elf-stt-common=yes' 531 These options control whether the ELF assembler should generate 532 common symbols with the 'STT_COMMON' type. The default can be 533 controlled by a configure option '--enable-elf-stt-common'. 534 535'--generate-missing-build-notes=yes' 536'--generate-missing-build-notes=no' 537 These options control whether the ELF assembler should generate GNU 538 Build attribute notes if none are present in the input sources. 539 The default can be controlled by the 540 '--enable-generate-build-notes' configure option. 541 542'--help' 543 Print a summary of the command-line options and exit. 544 545'--target-help' 546 Print a summary of all target specific options and exit. 547 548'-I DIR' 549 Add directory DIR to the search list for '.include' directives. 550 551'-J' 552 Don't warn about signed overflow. 553 554'-K' 555 Issue warnings when difference tables altered for long 556 displacements. 557 558'-L' 559'--keep-locals' 560 Keep (in the symbol table) local symbols. These symbols start with 561 system-specific local label prefixes, typically '.L' for ELF 562 systems or 'L' for traditional a.out systems. *Note Symbol 563 Names::. 564 565'--listing-lhs-width=NUMBER' 566 Set the maximum width, in words, of the output data column for an 567 assembler listing to NUMBER. 568 569'--listing-lhs-width2=NUMBER' 570 Set the maximum width, in words, of the output data column for 571 continuation lines in an assembler listing to NUMBER. 572 573'--listing-rhs-width=NUMBER' 574 Set the maximum width of an input source line, as displayed in a 575 listing, to NUMBER bytes. 576 577'--listing-cont-lines=NUMBER' 578 Set the maximum number of lines printed in a listing for a single 579 line of input to NUMBER + 1. 580 581'--no-pad-sections' 582 Stop the assembler for padding the ends of output sections to the 583 alignment of that section. The default is to pad the sections, but 584 this can waste space which might be needed on targets which have 585 tight memory constraints. 586 587'-o OBJFILE' 588 Name the object-file output from 'as' OBJFILE. 589 590'-R' 591 Fold the data section into the text section. 592 593'--sectname-subst' 594 Honor substitution sequences in section names. *Note '.section 595 NAME': Section Name Substitutions. 596 597'--statistics' 598 Print the maximum space (in bytes) and total time (in seconds) used 599 by assembly. 600 601'--strip-local-absolute' 602 Remove local absolute symbols from the outgoing symbol table. 603 604'-v' 605'-version' 606 Print the 'as' version. 607 608'--version' 609 Print the 'as' version and exit. 610 611'-W' 612'--no-warn' 613 Suppress warning messages. 614 615'--fatal-warnings' 616 Treat warnings as errors. 617 618'--warn' 619 Don't suppress warning messages or treat them as errors. 620 621'-w' 622 Ignored. 623 624'-x' 625 Ignored. 626 627'-Z' 628 Generate an object file even after errors. 629 630'-- | FILES ...' 631 Standard input, or source files to assemble. 632 633 *Note AArch64 Options::, for the options available when as is 634configured for the 64-bit mode of the ARM Architecture (AArch64). 635 636 *Note Alpha Options::, for the options available when as is 637configured for an Alpha processor. 638 639 The following options are available when as is configured for an ARC 640processor. 641 642'-mcpu=CPU' 643 This option selects the core processor variant. 644'-EB | -EL' 645 Select either big-endian (-EB) or little-endian (-EL) output. 646'-mcode-density' 647 Enable Code Density extension instructions. 648 649 The following options are available when as is configured for the ARM 650processor family. 651 652'-mcpu=PROCESSOR[+EXTENSION...]' 653 Specify which ARM processor variant is the target. 654'-march=ARCHITECTURE[+EXTENSION...]' 655 Specify which ARM architecture variant is used by the target. 656'-mfpu=FLOATING-POINT-FORMAT' 657 Select which Floating Point architecture is the target. 658'-mfloat-abi=ABI' 659 Select which floating point ABI is in use. 660'-mthumb' 661 Enable Thumb only instruction decoding. 662'-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant' 663 Select which procedure calling convention is in use. 664'-EB | -EL' 665 Select either big-endian (-EB) or little-endian (-EL) output. 666'-mthumb-interwork' 667 Specify that the code has been generated with interworking between 668 Thumb and ARM code in mind. 669'-mccs' 670 Turns on CodeComposer Studio assembly syntax compatibility mode. 671'-k' 672 Specify that PIC code has been generated. 673 674 *Note Blackfin Options::, for the options available when as is 675configured for the Blackfin processor family. 676 677 *Note BPF Options::, for the options available when as is configured 678for the Linux kernel BPF processor family. 679 680 See the info pages for documentation of the CRIS-specific options. 681 682 *Note C-SKY Options::, for the options available when as is 683configured for the C-SKY processor family. 684 685 The following options are available when as is configured for a D10V 686processor. 687'-O' 688 Optimize output by parallelizing instructions. 689 690 The following options are available when as is configured for a D30V 691processor. 692'-O' 693 Optimize output by parallelizing instructions. 694 695'-n' 696 Warn when nops are generated. 697 698'-N' 699 Warn when a nop after a 32-bit multiply instruction is generated. 700 701 The following options are available when as is configured for the 702Adapteva EPIPHANY series. 703 704 *Note Epiphany Options::, for the options available when as is 705configured for an Epiphany processor. 706 707 *Note i386-Options::, for the options available when as is configured 708for an i386 processor. 709 710 The following options are available when as is configured for the 711Ubicom IP2K series. 712 713'-mip2022ext' 714 Specifies that the extended IP2022 instructions are allowed. 715 716'-mip2022' 717 Restores the default behaviour, which restricts the permitted 718 instructions to just the basic IP2022 ones. 719 720 The following options are available when as is configured for the 721Renesas M32C and M16C processors. 722 723'-m32c' 724 Assemble M32C instructions. 725 726'-m16c' 727 Assemble M16C instructions (the default). 728 729'-relax' 730 Enable support for link-time relaxations. 731 732'-h-tick-hex' 733 Support H'00 style hex constants in addition to 0x00 style. 734 735 The following options are available when as is configured for the 736Renesas M32R (formerly Mitsubishi M32R) series. 737 738'--m32rx' 739 Specify which processor in the M32R family is the target. The 740 default is normally the M32R, but this option changes it to the 741 M32RX. 742 743'--warn-explicit-parallel-conflicts or --Wp' 744 Produce warning messages when questionable parallel constructs are 745 encountered. 746 747'--no-warn-explicit-parallel-conflicts or --Wnp' 748 Do not produce warning messages when questionable parallel 749 constructs are encountered. 750 751 The following options are available when as is configured for the 752Motorola 68000 series. 753 754'-l' 755 Shorten references to undefined symbols, to one word instead of 756 two. 757 758'-m68000 | -m68008 | -m68010 | -m68020 | -m68030' 759'| -m68040 | -m68060 | -m68302 | -m68331 | -m68332' 760'| -m68333 | -m68340 | -mcpu32 | -m5200' 761 Specify what processor in the 68000 family is the target. The 762 default is normally the 68020, but this can be changed at 763 configuration time. 764 765'-m68881 | -m68882 | -mno-68881 | -mno-68882' 766 The target machine does (or does not) have a floating-point 767 coprocessor. The default is to assume a coprocessor for 68020, 768 68030, and cpu32. Although the basic 68000 is not compatible with 769 the 68881, a combination of the two can be specified, since it's 770 possible to do emulation of the coprocessor instructions with the 771 main processor. 772 773'-m68851 | -mno-68851' 774 The target machine does (or does not) have a memory-management unit 775 coprocessor. The default is to assume an MMU for 68020 and up. 776 777 *Note Nios II Options::, for the options available when as is 778configured for an Altera Nios II processor. 779 780 For details about the PDP-11 machine dependent features options, see 781*note PDP-11-Options::. 782 783'-mpic | -mno-pic' 784 Generate position-independent (or position-dependent) code. The 785 default is '-mpic'. 786 787'-mall' 788'-mall-extensions' 789 Enable all instruction set extensions. This is the default. 790 791'-mno-extensions' 792 Disable all instruction set extensions. 793 794'-mEXTENSION | -mno-EXTENSION' 795 Enable (or disable) a particular instruction set extension. 796 797'-mCPU' 798 Enable the instruction set extensions supported by a particular 799 CPU, and disable all other extensions. 800 801'-mMACHINE' 802 Enable the instruction set extensions supported by a particular 803 machine model, and disable all other extensions. 804 805 The following options are available when as is configured for a 806picoJava processor. 807 808'-mb' 809 Generate "big endian" format output. 810 811'-ml' 812 Generate "little endian" format output. 813 814 *Note PRU Options::, for the options available when as is configured 815for a PRU processor. 816 817 The following options are available when as is configured for the 818Motorola 68HC11 or 68HC12 series. 819 820'-m68hc11 | -m68hc12 | -m68hcs12 | -mm9s12x | -mm9s12xg' 821 Specify what processor is the target. The default is defined by 822 the configuration option when building the assembler. 823 824'--xgate-ramoffset' 825 Instruct the linker to offset RAM addresses from S12X address space 826 into XGATE address space. 827 828'-mshort' 829 Specify to use the 16-bit integer ABI. 830 831'-mlong' 832 Specify to use the 32-bit integer ABI. 833 834'-mshort-double' 835 Specify to use the 32-bit double ABI. 836 837'-mlong-double' 838 Specify to use the 64-bit double ABI. 839 840'--force-long-branches' 841 Relative branches are turned into absolute ones. This concerns 842 conditional branches, unconditional branches and branches to a sub 843 routine. 844 845'-S | --short-branches' 846 Do not turn relative branches into absolute ones when the offset is 847 out of range. 848 849'--strict-direct-mode' 850 Do not turn the direct addressing mode into extended addressing 851 mode when the instruction does not support direct addressing mode. 852 853'--print-insn-syntax' 854 Print the syntax of instruction in case of error. 855 856'--print-opcodes' 857 Print the list of instructions with syntax and then exit. 858 859'--generate-example' 860 Print an example of instruction for each possible instruction and 861 then exit. This option is only useful for testing 'as'. 862 863 The following options are available when 'as' is configured for the 864SPARC architecture: 865 866'-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite' 867'-Av8plus | -Av8plusa | -Av9 | -Av9a' 868 Explicitly select a variant of the SPARC architecture. 869 870 '-Av8plus' and '-Av8plusa' select a 32 bit environment. '-Av9' and 871 '-Av9a' select a 64 bit environment. 872 873 '-Av8plusa' and '-Av9a' enable the SPARC V9 instruction set with 874 UltraSPARC extensions. 875 876'-xarch=v8plus | -xarch=v8plusa' 877 For compatibility with the Solaris v9 assembler. These options are 878 equivalent to -Av8plus and -Av8plusa, respectively. 879 880'-bump' 881 Warn when the assembler switches to another architecture. 882 883 The following options are available when as is configured for the 884'c54x architecture. 885 886'-mfar-mode' 887 Enable extended addressing mode. All addresses and relocations 888 will assume extended addressing (usually 23 bits). 889'-mcpu=CPU_VERSION' 890 Sets the CPU version being compiled for. 891'-merrors-to-file FILENAME' 892 Redirect error output to a file, for broken systems which don't 893 support such behaviour in the shell. 894 895 The following options are available when as is configured for a MIPS 896processor. 897 898'-G NUM' 899 This option sets the largest size of an object that can be 900 referenced implicitly with the 'gp' register. It is only accepted 901 for targets that use ECOFF format, such as a DECstation running 902 Ultrix. The default value is 8. 903 904'-EB' 905 Generate "big endian" format output. 906 907'-EL' 908 Generate "little endian" format output. 909 910'-mips1' 911'-mips2' 912'-mips3' 913'-mips4' 914'-mips5' 915'-mips32' 916'-mips32r2' 917'-mips32r3' 918'-mips32r5' 919'-mips32r6' 920'-mips64' 921'-mips64r2' 922'-mips64r3' 923'-mips64r5' 924'-mips64r6' 925 Generate code for a particular MIPS Instruction Set Architecture 926 level. '-mips1' is an alias for '-march=r3000', '-mips2' is an 927 alias for '-march=r6000', '-mips3' is an alias for '-march=r4000' 928 and '-mips4' is an alias for '-march=r8000'. '-mips5', '-mips32', 929 '-mips32r2', '-mips32r3', '-mips32r5', '-mips32r6', '-mips64', 930 '-mips64r2', '-mips64r3', '-mips64r5', and '-mips64r6' correspond 931 to generic MIPS V, MIPS32, MIPS32 Release 2, MIPS32 Release 3, 932 MIPS32 Release 5, MIPS32 Release 6, MIPS64, MIPS64 Release 2, 933 MIPS64 Release 3, MIPS64 Release 5, and MIPS64 Release 6 ISA 934 processors, respectively. 935 936'-march=CPU' 937 Generate code for a particular MIPS CPU. 938 939'-mtune=CPU' 940 Schedule and tune for a particular MIPS CPU. 941 942'-mfix7000' 943'-mno-fix7000' 944 Cause nops to be inserted if the read of the destination register 945 of an mfhi or mflo instruction occurs in the following two 946 instructions. 947 948'-mfix-rm7000' 949'-mno-fix-rm7000' 950 Cause nops to be inserted if a dmult or dmultu instruction is 951 followed by a load instruction. 952 953'-mfix-r5900' 954'-mno-fix-r5900' 955 Do not attempt to schedule the preceding instruction into the delay 956 slot of a branch instruction placed at the end of a short loop of 957 six instructions or fewer and always schedule a 'nop' instruction 958 there instead. The short loop bug under certain conditions causes 959 loops to execute only once or twice, due to a hardware bug in the 960 R5900 chip. 961 962'-mdebug' 963'-no-mdebug' 964 Cause stabs-style debugging output to go into an ECOFF-style 965 .mdebug section instead of the standard ELF .stabs sections. 966 967'-mpdr' 968'-mno-pdr' 969 Control generation of '.pdr' sections. 970 971'-mgp32' 972'-mfp32' 973 The register sizes are normally inferred from the ISA and ABI, but 974 these flags force a certain group of registers to be treated as 32 975 bits wide at all times. '-mgp32' controls the size of 976 general-purpose registers and '-mfp32' controls the size of 977 floating-point registers. 978 979'-mgp64' 980'-mfp64' 981 The register sizes are normally inferred from the ISA and ABI, but 982 these flags force a certain group of registers to be treated as 64 983 bits wide at all times. '-mgp64' controls the size of 984 general-purpose registers and '-mfp64' controls the size of 985 floating-point registers. 986 987'-mfpxx' 988 The register sizes are normally inferred from the ISA and ABI, but 989 using this flag in combination with '-mabi=32' enables an ABI 990 variant which will operate correctly with floating-point registers 991 which are 32 or 64 bits wide. 992 993'-modd-spreg' 994'-mno-odd-spreg' 995 Enable use of floating-point operations on odd-numbered 996 single-precision registers when supported by the ISA. '-mfpxx' 997 implies '-mno-odd-spreg', otherwise the default is '-modd-spreg'. 998 999'-mips16' 1000'-no-mips16' 1001 Generate code for the MIPS 16 processor. This is equivalent to 1002 putting '.module mips16' at the start of the assembly file. 1003 '-no-mips16' turns off this option. 1004 1005'-mmips16e2' 1006'-mno-mips16e2' 1007 Enable the use of MIPS16e2 instructions in MIPS16 mode. This is 1008 equivalent to putting '.module mips16e2' at the start of the 1009 assembly file. '-mno-mips16e2' turns off this option. 1010 1011'-mmicromips' 1012'-mno-micromips' 1013 Generate code for the microMIPS processor. This is equivalent to 1014 putting '.module micromips' at the start of the assembly file. 1015 '-mno-micromips' turns off this option. This is equivalent to 1016 putting '.module nomicromips' at the start of the assembly file. 1017 1018'-msmartmips' 1019'-mno-smartmips' 1020 Enables the SmartMIPS extension to the MIPS32 instruction set. 1021 This is equivalent to putting '.module smartmips' at the start of 1022 the assembly file. '-mno-smartmips' turns off this option. 1023 1024'-mips3d' 1025'-no-mips3d' 1026 Generate code for the MIPS-3D Application Specific Extension. This 1027 tells the assembler to accept MIPS-3D instructions. '-no-mips3d' 1028 turns off this option. 1029 1030'-mdmx' 1031'-no-mdmx' 1032 Generate code for the MDMX Application Specific Extension. This 1033 tells the assembler to accept MDMX instructions. '-no-mdmx' turns 1034 off this option. 1035 1036'-mdsp' 1037'-mno-dsp' 1038 Generate code for the DSP Release 1 Application Specific Extension. 1039 This tells the assembler to accept DSP Release 1 instructions. 1040 '-mno-dsp' turns off this option. 1041 1042'-mdspr2' 1043'-mno-dspr2' 1044 Generate code for the DSP Release 2 Application Specific Extension. 1045 This option implies '-mdsp'. This tells the assembler to accept 1046 DSP Release 2 instructions. '-mno-dspr2' turns off this option. 1047 1048'-mdspr3' 1049'-mno-dspr3' 1050 Generate code for the DSP Release 3 Application Specific Extension. 1051 This option implies '-mdsp' and '-mdspr2'. This tells the 1052 assembler to accept DSP Release 3 instructions. '-mno-dspr3' turns 1053 off this option. 1054 1055'-mmsa' 1056'-mno-msa' 1057 Generate code for the MIPS SIMD Architecture Extension. This tells 1058 the assembler to accept MSA instructions. '-mno-msa' turns off 1059 this option. 1060 1061'-mxpa' 1062'-mno-xpa' 1063 Generate code for the MIPS eXtended Physical Address (XPA) 1064 Extension. This tells the assembler to accept XPA instructions. 1065 '-mno-xpa' turns off this option. 1066 1067'-mmt' 1068'-mno-mt' 1069 Generate code for the MT Application Specific Extension. This 1070 tells the assembler to accept MT instructions. '-mno-mt' turns off 1071 this option. 1072 1073'-mmcu' 1074'-mno-mcu' 1075 Generate code for the MCU Application Specific Extension. This 1076 tells the assembler to accept MCU instructions. '-mno-mcu' turns 1077 off this option. 1078 1079'-mcrc' 1080'-mno-crc' 1081 Generate code for the MIPS cyclic redundancy check (CRC) 1082 Application Specific Extension. This tells the assembler to accept 1083 CRC instructions. '-mno-crc' turns off this option. 1084 1085'-mginv' 1086'-mno-ginv' 1087 Generate code for the Global INValidate (GINV) Application Specific 1088 Extension. This tells the assembler to accept GINV instructions. 1089 '-mno-ginv' turns off this option. 1090 1091'-mloongson-mmi' 1092'-mno-loongson-mmi' 1093 Generate code for the Loongson MultiMedia extensions Instructions 1094 (MMI) Application Specific Extension. This tells the assembler to 1095 accept MMI instructions. '-mno-loongson-mmi' turns off this 1096 option. 1097 1098'-mloongson-cam' 1099'-mno-loongson-cam' 1100 Generate code for the Loongson Content Address Memory (CAM) 1101 instructions. This tells the assembler to accept Loongson CAM 1102 instructions. '-mno-loongson-cam' turns off this option. 1103 1104'-mloongson-ext' 1105'-mno-loongson-ext' 1106 Generate code for the Loongson EXTensions (EXT) instructions. This 1107 tells the assembler to accept Loongson EXT instructions. 1108 '-mno-loongson-ext' turns off this option. 1109 1110'-mloongson-ext2' 1111'-mno-loongson-ext2' 1112 Generate code for the Loongson EXTensions R2 (EXT2) instructions. 1113 This option implies '-mloongson-ext'. This tells the assembler to 1114 accept Loongson EXT2 instructions. '-mno-loongson-ext2' turns off 1115 this option. 1116 1117'-minsn32' 1118'-mno-insn32' 1119 Only use 32-bit instruction encodings when generating code for the 1120 microMIPS processor. This option inhibits the use of any 16-bit 1121 instructions. This is equivalent to putting '.set insn32' at the 1122 start of the assembly file. '-mno-insn32' turns off this option. 1123 This is equivalent to putting '.set noinsn32' at the start of the 1124 assembly file. By default '-mno-insn32' is selected, allowing all 1125 instructions to be used. 1126 1127'--construct-floats' 1128'--no-construct-floats' 1129 The '--no-construct-floats' option disables the construction of 1130 double width floating point constants by loading the two halves of 1131 the value into the two single width floating point registers that 1132 make up the double width register. By default '--construct-floats' 1133 is selected, allowing construction of these floating point 1134 constants. 1135 1136'--relax-branch' 1137'--no-relax-branch' 1138 The '--relax-branch' option enables the relaxation of out-of-range 1139 branches. By default '--no-relax-branch' is selected, causing any 1140 out-of-range branches to produce an error. 1141 1142'-mignore-branch-isa' 1143'-mno-ignore-branch-isa' 1144 Ignore branch checks for invalid transitions between ISA modes. 1145 The semantics of branches does not provide for an ISA mode switch, 1146 so in most cases the ISA mode a branch has been encoded for has to 1147 be the same as the ISA mode of the branch's target label. 1148 Therefore GAS has checks implemented that verify in branch assembly 1149 that the two ISA modes match. '-mignore-branch-isa' disables these 1150 checks. By default '-mno-ignore-branch-isa' is selected, causing 1151 any invalid branch requiring a transition between ISA modes to 1152 produce an error. 1153 1154'-mnan=ENCODING' 1155 Select between the IEEE 754-2008 ('-mnan=2008') or the legacy 1156 ('-mnan=legacy') NaN encoding format. The latter is the default. 1157 1158'--emulation=NAME' 1159 This option was formerly used to switch between ELF and ECOFF 1160 output on targets like IRIX 5 that supported both. MIPS ECOFF 1161 support was removed in GAS 2.24, so the option now serves little 1162 purpose. It is retained for backwards compatibility. 1163 1164 The available configuration names are: 'mipself', 'mipslelf' and 1165 'mipsbelf'. Choosing 'mipself' now has no effect, since the output 1166 is always ELF. 'mipslelf' and 'mipsbelf' select little- and 1167 big-endian output respectively, but '-EL' and '-EB' are now the 1168 preferred options instead. 1169 1170'-nocpp' 1171 'as' ignores this option. It is accepted for compatibility with 1172 the native tools. 1173 1174'--trap' 1175'--no-trap' 1176'--break' 1177'--no-break' 1178 Control how to deal with multiplication overflow and division by 1179 zero. '--trap' or '--no-break' (which are synonyms) take a trap 1180 exception (and only work for Instruction Set Architecture level 2 1181 and higher); '--break' or '--no-trap' (also synonyms, and the 1182 default) take a break exception. 1183 1184'-n' 1185 When this option is used, 'as' will issue a warning every time it 1186 generates a nop instruction from a macro. 1187 1188 The following options are available when as is configured for an 1189MCore processor. 1190 1191'-jsri2bsr' 1192'-nojsri2bsr' 1193 Enable or disable the JSRI to BSR transformation. By default this 1194 is enabled. The command-line option '-nojsri2bsr' can be used to 1195 disable it. 1196 1197'-sifilter' 1198'-nosifilter' 1199 Enable or disable the silicon filter behaviour. By default this is 1200 disabled. The default can be overridden by the '-sifilter' 1201 command-line option. 1202 1203'-relax' 1204 Alter jump instructions for long displacements. 1205 1206'-mcpu=[210|340]' 1207 Select the cpu type on the target hardware. This controls which 1208 instructions can be assembled. 1209 1210'-EB' 1211 Assemble for a big endian target. 1212 1213'-EL' 1214 Assemble for a little endian target. 1215 1216 *Note Meta Options::, for the options available when as is configured 1217for a Meta processor. 1218 1219 See the info pages for documentation of the MMIX-specific options. 1220 1221 *Note NDS32 Options::, for the options available when as is 1222configured for a NDS32 processor. 1223 1224 *Note PowerPC-Opts::, for the options available when as is configured 1225for a PowerPC processor. 1226 1227 *Note RISC-V-Options::, for the options available when as is 1228configured for a RISC-V processor. 1229 1230 See the info pages for documentation of the RX-specific options. 1231 1232 The following options are available when as is configured for the 1233s390 processor family. 1234 1235'-m31' 1236'-m64' 1237 Select the word size, either 31/32 bits or 64 bits. 1238'-mesa' 1239'-mzarch' 1240 Select the architecture mode, either the Enterprise System 1241 Architecture (esa) or the z/Architecture mode (zarch). 1242'-march=PROCESSOR' 1243 Specify which s390 processor variant is the target, 'g5' (or 1244 'arch3'), 'g6', 'z900' (or 'arch5'), 'z990' (or 'arch6'), 'z9-109', 1245 'z9-ec' (or 'arch7'), 'z10' (or 'arch8'), 'z196' (or 'arch9'), 1246 'zEC12' (or 'arch10'), 'z13' (or 'arch11'), 'z14' (or 'arch12'), or 1247 'z15' (or 'arch13'). 1248'-mregnames' 1249'-mno-regnames' 1250 Allow or disallow symbolic names for registers. 1251'-mwarn-areg-zero' 1252 Warn whenever the operand for a base or index register has been 1253 specified but evaluates to zero. 1254 1255 *Note TIC6X Options::, for the options available when as is 1256configured for a TMS320C6000 processor. 1257 1258 *Note TILE-Gx Options::, for the options available when as is 1259configured for a TILE-Gx processor. 1260 1261 *Note Visium Options::, for the options available when as is 1262configured for a Visium processor. 1263 1264 *Note Xtensa Options::, for the options available when as is 1265configured for an Xtensa processor. 1266 1267 *Note Z80 Options::, for the options available when as is configured 1268for an Z80 processor. 1269 1270* Menu: 1271 1272* Manual:: Structure of this Manual 1273* GNU Assembler:: The GNU Assembler 1274* Object Formats:: Object File Formats 1275* Command Line:: Command Line 1276* Input Files:: Input Files 1277* Object:: Output (Object) File 1278* Errors:: Error and Warning Messages 1279 1280 1281File: as.info, Node: Manual, Next: GNU Assembler, Up: Overview 1282 12831.1 Structure of this Manual 1284============================ 1285 1286This manual is intended to describe what you need to know to use GNU 1287'as'. We cover the syntax expected in source files, including notation 1288for symbols, constants, and expressions; the directives that 'as' 1289understands; and of course how to invoke 'as'. 1290 1291 This manual also describes some of the machine-dependent features of 1292various flavors of the assembler. 1293 1294 On the other hand, this manual is _not_ intended as an introduction 1295to programming in assembly language--let alone programming in general! 1296In a similar vein, we make no attempt to introduce the machine 1297architecture; we do _not_ describe the instruction set, standard 1298mnemonics, registers or addressing modes that are standard to a 1299particular architecture. You may want to consult the manufacturer's 1300machine architecture manual for this information. 1301 1302 1303File: as.info, Node: GNU Assembler, Next: Object Formats, Prev: Manual, Up: Overview 1304 13051.2 The GNU Assembler 1306===================== 1307 1308GNU 'as' is really a family of assemblers. If you use (or have used) 1309the GNU assembler on one architecture, you should find a fairly similar 1310environment when you use it on another architecture. Each version has 1311much in common with the others, including object file formats, most 1312assembler directives (often called "pseudo-ops") and assembler syntax. 1313 1314 'as' is primarily intended to assemble the output of the GNU C 1315compiler 'gcc' for use by the linker 'ld'. Nevertheless, we've tried to 1316make 'as' assemble correctly everything that other assemblers for the 1317same machine would assemble. Any exceptions are documented explicitly 1318(*note Machine Dependencies::). This doesn't mean 'as' always uses the 1319same syntax as another assembler for the same architecture; for example, 1320we know of several incompatible versions of 680x0 assembly language 1321syntax. 1322 1323 Unlike older assemblers, 'as' is designed to assemble a source 1324program in one pass of the source file. This has a subtle impact on the 1325'.org' directive (*note '.org': Org.). 1326 1327 1328File: as.info, Node: Object Formats, Next: Command Line, Prev: GNU Assembler, Up: Overview 1329 13301.3 Object File Formats 1331======================= 1332 1333The GNU assembler can be configured to produce several alternative 1334object file formats. For the most part, this does not affect how you 1335write assembly language programs; but directives for debugging symbols 1336are typically different in different file formats. *Note Symbol 1337Attributes: Symbol Attributes. 1338 1339 1340File: as.info, Node: Command Line, Next: Input Files, Prev: Object Formats, Up: Overview 1341 13421.4 Command Line 1343================ 1344 1345After the program name 'as', the command line may contain options and 1346file names. Options may appear in any order, and may be before, after, 1347or between file names. The order of file names is significant. 1348 1349 '--' (two hyphens) by itself names the standard input file 1350explicitly, as one of the files for 'as' to assemble. 1351 1352 Except for '--' any command-line argument that begins with a hyphen 1353('-') is an option. Each option changes the behavior of 'as'. No 1354option changes the way another option works. An option is a '-' 1355followed by one or more letters; the case of the letter is important. 1356All options are optional. 1357 1358 Some options expect exactly one file name to follow them. The file 1359name may either immediately follow the option's letter (compatible with 1360older assemblers) or it may be the next command argument (GNU standard). 1361These two command lines are equivalent: 1362 1363 as -o my-object-file.o mumble.s 1364 as -omy-object-file.o mumble.s 1365 1366 1367File: as.info, Node: Input Files, Next: Object, Prev: Command Line, Up: Overview 1368 13691.5 Input Files 1370=============== 1371 1372We use the phrase "source program", abbreviated "source", to describe 1373the program input to one run of 'as'. The program may be in one or more 1374files; how the source is partitioned into files doesn't change the 1375meaning of the source. 1376 1377 The source program is a concatenation of the text in all the files, 1378in the order specified. 1379 1380 Each time you run 'as' it assembles exactly one source program. The 1381source program is made up of one or more files. (The standard input is 1382also a file.) 1383 1384 You give 'as' a command line that has zero or more input file names. 1385The input files are read (from left file name to right). A command-line 1386argument (in any position) that has no special meaning is taken to be an 1387input file name. 1388 1389 If you give 'as' no file names it attempts to read one input file 1390from the 'as' standard input, which is normally your terminal. You may 1391have to type <ctl-D> to tell 'as' there is no more program to assemble. 1392 1393 Use '--' if you need to explicitly name the standard input file in 1394your command line. 1395 1396 If the source is empty, 'as' produces a small, empty object file. 1397 1398Filenames and Line-numbers 1399-------------------------- 1400 1401There are two ways of locating a line in the input file (or files) and 1402either may be used in reporting error messages. One way refers to a 1403line number in a physical file; the other refers to a line number in a 1404"logical" file. *Note Error and Warning Messages: Errors. 1405 1406 "Physical files" are those files named in the command line given to 1407'as'. 1408 1409 "Logical files" are simply names declared explicitly by assembler 1410directives; they bear no relation to physical files. Logical file names 1411help error messages reflect the original source file, when 'as' source 1412is itself synthesized from other files. 'as' understands the '#' 1413directives emitted by the 'gcc' preprocessor. See also *note '.file': 1414File. 1415 1416 1417File: as.info, Node: Object, Next: Errors, Prev: Input Files, Up: Overview 1418 14191.6 Output (Object) File 1420======================== 1421 1422Every time you run 'as' it produces an output file, which is your 1423assembly language program translated into numbers. This file is the 1424object file. Its default name is 'a.out'. You can give it another name 1425by using the '-o' option. Conventionally, object file names end with 1426'.o'. The default name is used for historical reasons: older assemblers 1427were capable of assembling self-contained programs directly into a 1428runnable program. (For some formats, this isn't currently possible, but 1429it can be done for the 'a.out' format.) 1430 1431 The object file is meant for input to the linker 'ld'. It contains 1432assembled program code, information to help 'ld' integrate the assembled 1433program into a runnable file, and (optionally) symbolic information for 1434the debugger. 1435 1436 1437File: as.info, Node: Errors, Prev: Object, Up: Overview 1438 14391.7 Error and Warning Messages 1440============================== 1441 1442'as' may write warnings and error messages to the standard error file 1443(usually your terminal). This should not happen when a compiler runs 1444'as' automatically. Warnings report an assumption made so that 'as' 1445could keep assembling a flawed program; errors report a grave problem 1446that stops the assembly. 1447 1448 Warning messages have the format 1449 1450 file_name:NNN:Warning Message Text 1451 1452(where NNN is a line number). If both a logical file name (*note 1453'.file': File.) and a logical line number (*note '.line': Line.) have 1454been given then they will be used, otherwise the file name and line 1455number in the current assembler source file will be used. The message 1456text is intended to be self explanatory (in the grand Unix tradition). 1457 1458 Note the file name must be set via the logical version of the '.file' 1459directive, not the DWARF2 version of the '.file' directive. For 1460example: 1461 1462 .file 2 "bar.c" 1463 error_assembler_source 1464 .file "foo.c" 1465 .line 30 1466 error_c_source 1467 1468 produces this output: 1469 1470 Assembler messages: 1471 asm.s:2: Error: no such instruction: `error_assembler_source' 1472 foo.c:31: Error: no such instruction: `error_c_source' 1473 1474 Error messages have the format 1475 1476 file_name:NNN:FATAL:Error Message Text 1477 1478 The file name and line number are derived as for warning messages. 1479The actual message text may be rather less explanatory because many of 1480them aren't supposed to happen. 1481 1482 1483File: as.info, Node: Invoking, Next: Syntax, Prev: Overview, Up: Top 1484 14852 Command-Line Options 1486********************** 1487 1488This chapter describes command-line options available in _all_ versions 1489of the GNU assembler; see *note Machine Dependencies::, for options 1490specific to particular machine architectures. 1491 1492 If you are invoking 'as' via the GNU C compiler, you can use the 1493'-Wa' option to pass arguments through to the assembler. The assembler 1494arguments must be separated from each other (and the '-Wa') by commas. 1495For example: 1496 1497 gcc -c -g -O -Wa,-alh,-L file.c 1498 1499This passes two options to the assembler: '-alh' (emit a listing to 1500standard output with high-level and assembly source) and '-L' (retain 1501local symbols in the symbol table). 1502 1503 Usually you do not need to use this '-Wa' mechanism, since many 1504compiler command-line options are automatically passed to the assembler 1505by the compiler. (You can call the GNU compiler driver with the '-v' 1506option to see precisely what options it passes to each compilation pass, 1507including the assembler.) 1508 1509* Menu: 1510 1511* a:: -a[cdghlns] enable listings 1512* alternate:: -alternate enable alternate macro syntax 1513* D:: -D for compatibility 1514* f:: -f to work faster 1515* I:: -I for .include search path 1516* K:: -K for difference tables 1517 1518* L:: -L to retain local symbols 1519* listing:: -listing-XXX to configure listing output 1520* M:: -M or -mri to assemble in MRI compatibility mode 1521* MD:: -MD for dependency tracking 1522* no-pad-sections:: -no-pad-sections to stop section padding 1523* o:: -o to name the object file 1524* R:: -R to join data and text sections 1525* statistics:: -statistics to see statistics about assembly 1526* traditional-format:: -traditional-format for compatible output 1527* v:: -v to announce version 1528* W:: -W, -no-warn, -warn, -fatal-warnings to control warnings 1529* Z:: -Z to make object file even after errors 1530 1531 1532File: as.info, Node: a, Next: alternate, Up: Invoking 1533 15342.1 Enable Listings: '-a[cdghlns]' 1535================================== 1536 1537These options enable listing output from the assembler. By itself, '-a' 1538requests high-level, assembly, and symbols listing. You can use other 1539letters to select specific options for the list: '-ah' requests a 1540high-level language listing, '-al' requests an output-program assembly 1541listing, and '-as' requests a symbol table listing. High-level listings 1542require that a compiler debugging option like '-g' be used, and that 1543assembly listings ('-al') be requested also. 1544 1545 Use the '-ag' option to print a first section with general assembly 1546information, like as version, switches passed, or time stamp. 1547 1548 Use the '-ac' option to omit false conditionals from a listing. Any 1549lines which are not assembled because of a false '.if' (or '.ifdef', or 1550any other conditional), or a true '.if' followed by an '.else', will be 1551omitted from the listing. 1552 1553 Use the '-ad' option to omit debugging directives from the listing. 1554 1555 Once you have specified one of these options, you can further control 1556listing output and its appearance using the directives '.list', 1557'.nolist', '.psize', '.eject', '.title', and '.sbttl'. The '-an' option 1558turns off all forms processing. If you do not request listing output 1559with one of the '-a' options, the listing-control directives have no 1560effect. 1561 1562 The letters after '-a' may be combined into one option, _e.g._, 1563'-aln'. 1564 1565 Note if the assembler source is coming from the standard input (e.g., 1566because it is being created by 'gcc' and the '-pipe' command-line switch 1567is being used) then the listing will not contain any comments or 1568preprocessor directives. This is because the listing code buffers input 1569source lines from stdin only after they have been preprocessed by the 1570assembler. This reduces memory usage and makes the code more efficient. 1571 1572 1573File: as.info, Node: alternate, Next: D, Prev: a, Up: Invoking 1574 15752.2 '--alternate' 1576================= 1577 1578Begin in alternate macro mode, see *note '.altmacro': Altmacro. 1579 1580 1581File: as.info, Node: D, Next: f, Prev: alternate, Up: Invoking 1582 15832.3 '-D' 1584======== 1585 1586This option has no effect whatsoever, but it is accepted to make it more 1587likely that scripts written for other assemblers also work with 'as'. 1588 1589 1590File: as.info, Node: f, Next: I, Prev: D, Up: Invoking 1591 15922.4 Work Faster: '-f' 1593===================== 1594 1595'-f' should only be used when assembling programs written by a (trusted) 1596compiler. '-f' stops the assembler from doing whitespace and comment 1597preprocessing on the input file(s) before assembling them. *Note 1598Preprocessing: Preprocessing. 1599 1600 _Warning:_ if you use '-f' when the files actually need to be 1601 preprocessed (if they contain comments, for example), 'as' does not 1602 work correctly. 1603 1604 1605File: as.info, Node: I, Next: K, Prev: f, Up: Invoking 1606 16072.5 '.include' Search Path: '-I' PATH 1608===================================== 1609 1610Use this option to add a PATH to the list of directories 'as' searches 1611for files specified in '.include' directives (*note '.include': 1612Include.). You may use '-I' as many times as necessary to include a 1613variety of paths. The current working directory is always searched 1614first; after that, 'as' searches any '-I' directories in the same order 1615as they were specified (left to right) on the command line. 1616 1617 1618File: as.info, Node: K, Next: L, Prev: I, Up: Invoking 1619 16202.6 Difference Tables: '-K' 1621=========================== 1622 1623'as' sometimes alters the code emitted for directives of the form '.word 1624SYM1-SYM2'. *Note '.word': Word. You can use the '-K' option if you 1625want a warning issued when this is done. 1626 1627 1628File: as.info, Node: L, Next: listing, Prev: K, Up: Invoking 1629 16302.7 Include Local Symbols: '-L' 1631=============================== 1632 1633Symbols beginning with system-specific local label prefixes, typically 1634'.L' for ELF systems or 'L' for traditional a.out systems, are called 1635"local symbols". *Note Symbol Names::. Normally you do not see such 1636symbols when debugging, because they are intended for the use of 1637programs (like compilers) that compose assembler programs, not for your 1638notice. Normally both 'as' and 'ld' discard such symbols, so you do not 1639normally debug with them. 1640 1641 This option tells 'as' to retain those local symbols in the object 1642file. Usually if you do this you also tell the linker 'ld' to preserve 1643those symbols. 1644 1645 1646File: as.info, Node: listing, Next: M, Prev: L, Up: Invoking 1647 16482.8 Configuring listing output: '--listing' 1649=========================================== 1650 1651The listing feature of the assembler can be enabled via the command-line 1652switch '-a' (*note a::). This feature combines the input source file(s) 1653with a hex dump of the corresponding locations in the output object 1654file, and displays them as a listing file. The format of this listing 1655can be controlled by directives inside the assembler source (i.e., 1656'.list' (*note List::), '.title' (*note Title::), '.sbttl' (*note 1657Sbttl::), '.psize' (*note Psize::), and '.eject' (*note Eject::) and 1658also by the following switches: 1659 1660'--listing-lhs-width='number'' 1661 Sets the maximum width, in words, of the first line of the hex byte 1662 dump. This dump appears on the left hand side of the listing 1663 output. 1664 1665'--listing-lhs-width2='number'' 1666 Sets the maximum width, in words, of any further lines of the hex 1667 byte dump for a given input source line. If this value is not 1668 specified, it defaults to being the same as the value specified for 1669 '--listing-lhs-width'. If neither switch is used the default is to 1670 one. 1671 1672'--listing-rhs-width='number'' 1673 Sets the maximum width, in characters, of the source line that is 1674 displayed alongside the hex dump. The default value for this 1675 parameter is 100. The source line is displayed on the right hand 1676 side of the listing output. 1677 1678'--listing-cont-lines='number'' 1679 Sets the maximum number of continuation lines of hex dump that will 1680 be displayed for a given single line of source input. The default 1681 value is 4. 1682 1683 1684File: as.info, Node: M, Next: MD, Prev: listing, Up: Invoking 1685 16862.9 Assemble in MRI Compatibility Mode: '-M' 1687============================================ 1688 1689The '-M' or '--mri' option selects MRI compatibility mode. This changes 1690the syntax and pseudo-op handling of 'as' to make it compatible with the 1691'ASM68K' assembler from Microtec Research. The exact nature of the MRI 1692syntax will not be documented here; see the MRI manuals for more 1693information. Note in particular that the handling of macros and macro 1694arguments is somewhat different. The purpose of this option is to 1695permit assembling existing MRI assembler code using 'as'. 1696 1697 The MRI compatibility is not complete. Certain operations of the MRI 1698assembler depend upon its object file format, and can not be supported 1699using other object file formats. Supporting these would require 1700enhancing each object file format individually. These are: 1701 1702 * global symbols in common section 1703 1704 The m68k MRI assembler supports common sections which are merged by 1705 the linker. Other object file formats do not support this. 'as' 1706 handles common sections by treating them as a single common symbol. 1707 It permits local symbols to be defined within a common section, but 1708 it can not support global symbols, since it has no way to describe 1709 them. 1710 1711 * complex relocations 1712 1713 The MRI assemblers support relocations against a negated section 1714 address, and relocations which combine the start addresses of two 1715 or more sections. These are not support by other object file 1716 formats. 1717 1718 * 'END' pseudo-op specifying start address 1719 1720 The MRI 'END' pseudo-op permits the specification of a start 1721 address. This is not supported by other object file formats. The 1722 start address may instead be specified using the '-e' option to the 1723 linker, or in a linker script. 1724 1725 * 'IDNT', '.ident' and 'NAME' pseudo-ops 1726 1727 The MRI 'IDNT', '.ident' and 'NAME' pseudo-ops assign a module name 1728 to the output file. This is not supported by other object file 1729 formats. 1730 1731 * 'ORG' pseudo-op 1732 1733 The m68k MRI 'ORG' pseudo-op begins an absolute section at a given 1734 address. This differs from the usual 'as' '.org' pseudo-op, which 1735 changes the location within the current section. Absolute sections 1736 are not supported by other object file formats. The address of a 1737 section may be assigned within a linker script. 1738 1739 There are some other features of the MRI assembler which are not 1740supported by 'as', typically either because they are difficult or 1741because they seem of little consequence. Some of these may be supported 1742in future releases. 1743 1744 * EBCDIC strings 1745 1746 EBCDIC strings are not supported. 1747 1748 * packed binary coded decimal 1749 1750 Packed binary coded decimal is not supported. This means that the 1751 'DC.P' and 'DCB.P' pseudo-ops are not supported. 1752 1753 * 'FEQU' pseudo-op 1754 1755 The m68k 'FEQU' pseudo-op is not supported. 1756 1757 * 'NOOBJ' pseudo-op 1758 1759 The m68k 'NOOBJ' pseudo-op is not supported. 1760 1761 * 'OPT' branch control options 1762 1763 The m68k 'OPT' branch control options--'B', 'BRS', 'BRB', 'BRL', 1764 and 'BRW'--are ignored. 'as' automatically relaxes all branches, 1765 whether forward or backward, to an appropriate size, so these 1766 options serve no purpose. 1767 1768 * 'OPT' list control options 1769 1770 The following m68k 'OPT' list control options are ignored: 'C', 1771 'CEX', 'CL', 'CRE', 'E', 'G', 'I', 'M', 'MEX', 'MC', 'MD', 'X'. 1772 1773 * other 'OPT' options 1774 1775 The following m68k 'OPT' options are ignored: 'NEST', 'O', 'OLD', 1776 'OP', 'P', 'PCO', 'PCR', 'PCS', 'R'. 1777 1778 * 'OPT' 'D' option is default 1779 1780 The m68k 'OPT' 'D' option is the default, unlike the MRI assembler. 1781 'OPT NOD' may be used to turn it off. 1782 1783 * 'XREF' pseudo-op. 1784 1785 The m68k 'XREF' pseudo-op is ignored. 1786 1787 1788File: as.info, Node: MD, Next: no-pad-sections, Prev: M, Up: Invoking 1789 17902.10 Dependency Tracking: '--MD' 1791================================ 1792 1793'as' can generate a dependency file for the file it creates. This file 1794consists of a single rule suitable for 'make' describing the 1795dependencies of the main source file. 1796 1797 The rule is written to the file named in its argument. 1798 1799 This feature is used in the automatic updating of makefiles. 1800 1801 1802File: as.info, Node: no-pad-sections, Next: o, Prev: MD, Up: Invoking 1803 18042.11 Output Section Padding 1805=========================== 1806 1807Normally the assembler will pad the end of each output section up to its 1808alignment boundary. But this can waste space, which can be significant 1809on memory constrained targets. So the '--no-pad-sections' option will 1810disable this behaviour. 1811 1812 1813File: as.info, Node: o, Next: R, Prev: no-pad-sections, Up: Invoking 1814 18152.12 Name the Object File: '-o' 1816=============================== 1817 1818There is always one object file output when you run 'as'. By default it 1819has the name 'a.out'. You use this option (which takes exactly one 1820filename) to give the object file a different name. 1821 1822 Whatever the object file is called, 'as' overwrites any existing file 1823of the same name. 1824 1825 1826File: as.info, Node: R, Next: statistics, Prev: o, Up: Invoking 1827 18282.13 Join Data and Text Sections: '-R' 1829====================================== 1830 1831'-R' tells 'as' to write the object file as if all data-section data 1832lives in the text section. This is only done at the very last moment: 1833your binary data are the same, but data section parts are relocated 1834differently. The data section part of your object file is zero bytes 1835long because all its bytes are appended to the text section. (*Note 1836Sections and Relocation: Sections.) 1837 1838 When you specify '-R' it would be possible to generate shorter 1839address displacements (because we do not have to cross between text and 1840data section). We refrain from doing this simply for compatibility with 1841older versions of 'as'. In future, '-R' may work this way. 1842 1843 When 'as' is configured for COFF or ELF output, this option is only 1844useful if you use sections named '.text' and '.data'. 1845 1846 '-R' is not supported for any of the HPPA targets. Using '-R' 1847generates a warning from 'as'. 1848 1849 1850File: as.info, Node: statistics, Next: traditional-format, Prev: R, Up: Invoking 1851 18522.14 Display Assembly Statistics: '--statistics' 1853================================================ 1854 1855Use '--statistics' to display two statistics about the resources used by 1856'as': the maximum amount of space allocated during the assembly (in 1857bytes), and the total execution time taken for the assembly (in CPU 1858seconds). 1859 1860 1861File: as.info, Node: traditional-format, Next: v, Prev: statistics, Up: Invoking 1862 18632.15 Compatible Output: '--traditional-format' 1864============================================== 1865 1866For some targets, the output of 'as' is different in some ways from the 1867output of some existing assembler. This switch requests 'as' to use the 1868traditional format instead. 1869 1870 For example, it disables the exception frame optimizations which 'as' 1871normally does by default on 'gcc' output. 1872 1873 1874File: as.info, Node: v, Next: W, Prev: traditional-format, Up: Invoking 1875 18762.16 Announce Version: '-v' 1877=========================== 1878 1879You can find out what version of as is running by including the option 1880'-v' (which you can also spell as '-version') on the command line. 1881 1882 1883File: as.info, Node: W, Next: Z, Prev: v, Up: Invoking 1884 18852.17 Control Warnings: '-W', '--warn', '--no-warn', '--fatal-warnings' 1886====================================================================== 1887 1888'as' should never give a warning or error message when assembling 1889compiler output. But programs written by people often cause 'as' to 1890give a warning that a particular assumption was made. All such warnings 1891are directed to the standard error file. 1892 1893 If you use the '-W' and '--no-warn' options, no warnings are issued. 1894This only affects the warning messages: it does not change any 1895particular of how 'as' assembles your file. Errors, which stop the 1896assembly, are still reported. 1897 1898 If you use the '--fatal-warnings' option, 'as' considers files that 1899generate warnings to be in error. 1900 1901 You can switch these options off again by specifying '--warn', which 1902causes warnings to be output as usual. 1903 1904 1905File: as.info, Node: Z, Prev: W, Up: Invoking 1906 19072.18 Generate Object File in Spite of Errors: '-Z' 1908================================================== 1909 1910After an error message, 'as' normally produces no output. If for some 1911reason you are interested in object file output even after 'as' gives an 1912error message on your program, use the '-Z' option. If there are any 1913errors, 'as' continues anyways, and writes an object file after a final 1914warning message of the form 'N errors, M warnings, generating bad object 1915file.' 1916 1917 1918File: as.info, Node: Syntax, Next: Sections, Prev: Invoking, Up: Top 1919 19203 Syntax 1921******** 1922 1923This chapter describes the machine-independent syntax allowed in a 1924source file. 'as' syntax is similar to what many other assemblers use; 1925it is inspired by the BSD 4.2 assembler, except that 'as' does not 1926assemble Vax bit-fields. 1927 1928* Menu: 1929 1930* Preprocessing:: Preprocessing 1931* Whitespace:: Whitespace 1932* Comments:: Comments 1933* Symbol Intro:: Symbols 1934* Statements:: Statements 1935* Constants:: Constants 1936 1937 1938File: as.info, Node: Preprocessing, Next: Whitespace, Up: Syntax 1939 19403.1 Preprocessing 1941================= 1942 1943The 'as' internal preprocessor: 1944 * adjusts and removes extra whitespace. It leaves one space or tab 1945 before the keywords on a line, and turns any other whitespace on 1946 the line into a single space. 1947 1948 * removes all comments, replacing them with a single space, or an 1949 appropriate number of newlines. 1950 1951 * converts character constants into the appropriate numeric values. 1952 1953 It does not do macro processing, include file handling, or anything 1954else you may get from your C compiler's preprocessor. You can do 1955include file processing with the '.include' directive (*note '.include': 1956Include.). You can use the GNU C compiler driver to get other "CPP" 1957style preprocessing by giving the input file a '.S' suffix. See the 1958'Options Controlling the Kind of Output' section of the GCC manual for 1959more details 1960(https://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html#Overall-Options) 1961 1962 Excess whitespace, comments, and character constants cannot be used 1963in the portions of the input text that are not preprocessed. 1964 1965 If the first line of an input file is '#NO_APP' or if you use the 1966'-f' option, whitespace and comments are not removed from the input 1967file. Within an input file, you can ask for whitespace and comment 1968removal in specific portions of the by putting a line that says '#APP' 1969before the text that may contain whitespace or comments, and putting a 1970line that says '#NO_APP' after this text. This feature is mainly intend 1971to support 'asm' statements in compilers whose output is otherwise free 1972of comments and whitespace. 1973 1974 1975File: as.info, Node: Whitespace, Next: Comments, Prev: Preprocessing, Up: Syntax 1976 19773.2 Whitespace 1978============== 1979 1980"Whitespace" is one or more blanks or tabs, in any order. Whitespace is 1981used to separate symbols, and to make programs neater for people to 1982read. Unless within character constants (*note Character Constants: 1983Characters.), any whitespace means the same as exactly one space. 1984 1985 1986File: as.info, Node: Comments, Next: Symbol Intro, Prev: Whitespace, Up: Syntax 1987 19883.3 Comments 1989============ 1990 1991There are two ways of rendering comments to 'as'. In both cases the 1992comment is equivalent to one space. 1993 1994 Anything from '/*' through the next '*/' is a comment. This means 1995you may not nest these comments. 1996 1997 /* 1998 The only way to include a newline ('\n') in a comment 1999 is to use this sort of comment. 2000 */ 2001 2002 /* This sort of comment does not nest. */ 2003 2004 Anything from a "line comment" character up to the next newline is 2005considered a comment and is ignored. The line comment character is 2006target specific, and some targets multiple comment characters. Some 2007targets also have line comment characters that only work if they are the 2008first character on a line. Some targets use a sequence of two 2009characters to introduce a line comment. Some targets can also change 2010their line comment characters depending upon command-line options that 2011have been used. For more details see the _Syntax_ section in the 2012documentation for individual targets. 2013 2014 If the line comment character is the hash sign ('#') then it still 2015has the special ability to enable and disable preprocessing (*note 2016Preprocessing::) and to specify logical line numbers: 2017 2018 To be compatible with past assemblers, lines that begin with '#' have 2019a special interpretation. Following the '#' should be an absolute 2020expression (*note Expressions::): the logical line number of the _next_ 2021line. Then a string (*note Strings: Strings.) is allowed: if present it 2022is a new logical file name. The rest of the line, if any, should be 2023whitespace. 2024 2025 If the first non-whitespace characters on the line are not numeric, 2026the line is ignored. (Just like a comment.) 2027 2028 # This is an ordinary comment. 2029 # 42-6 "new_file_name" # New logical file name 2030 # This is logical line # 36. 2031 This feature is deprecated, and may disappear from future versions of 2032'as'. 2033 2034 2035File: as.info, Node: Symbol Intro, Next: Statements, Prev: Comments, Up: Syntax 2036 20373.4 Symbols 2038=========== 2039 2040A "symbol" is one or more characters chosen from the set of all letters 2041(both upper and lower case), digits and the three characters '_.$'. On 2042most machines, you can also use '$' in symbol names; exceptions are 2043noted in *note Machine Dependencies::. No symbol may begin with a 2044digit. Case is significant. There is no length limit; all characters 2045are significant. Multibyte characters are supported. Symbols are 2046delimited by characters not in that set, or by the beginning of a file 2047(since the source program must end with a newline, the end of a file is 2048not a possible symbol delimiter). *Note Symbols::. 2049 2050 Symbol names may also be enclosed in double quote '"' characters. In 2051such cases any characters are allowed, except for the NUL character. If 2052a double quote character is to be included in the symbol name it must be 2053preceded by a backslash '\' character. 2054 2055 2056File: as.info, Node: Statements, Next: Constants, Prev: Symbol Intro, Up: Syntax 2057 20583.5 Statements 2059============== 2060 2061A "statement" ends at a newline character ('\n') or a "line separator 2062character". The line separator character is target specific and 2063described in the _Syntax_ section of each target's documentation. Not 2064all targets support a line separator character. The newline or line 2065separator character is considered to be part of the preceding statement. 2066Newlines and separators within character constants are an exception: 2067they do not end statements. 2068 2069 It is an error to end any statement with end-of-file: the last 2070character of any input file should be a newline. 2071 2072 An empty statement is allowed, and may include whitespace. It is 2073ignored. 2074 2075 A statement begins with zero or more labels, optionally followed by a 2076key symbol which determines what kind of statement it is. The key 2077symbol determines the syntax of the rest of the statement. If the 2078symbol begins with a dot '.' then the statement is an assembler 2079directive: typically valid for any computer. If the symbol begins with 2080a letter the statement is an assembly language "instruction": it 2081assembles into a machine language instruction. Different versions of 2082'as' for different computers recognize different instructions. In fact, 2083the same symbol may represent a different instruction in a different 2084computer's assembly language. 2085 2086 A label is a symbol immediately followed by a colon (':'). 2087Whitespace before a label or after a colon is permitted, but you may not 2088have whitespace between a label's symbol and its colon. *Note Labels::. 2089 2090 For HPPA targets, labels need not be immediately followed by a colon, 2091but the definition of a label must begin in column zero. This also 2092implies that only one label may be defined on each line. 2093 2094 label: .directive followed by something 2095 another_label: # This is an empty statement. 2096 instruction operand_1, operand_2, ... 2097 2098 2099File: as.info, Node: Constants, Prev: Statements, Up: Syntax 2100 21013.6 Constants 2102============= 2103 2104A constant is a number, written so that its value is known by 2105inspection, without knowing any context. Like this: 2106 .byte 74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value. 2107 .ascii "Ring the bell\7" # A string constant. 2108 .octa 0x123456789abcdef0123456789ABCDEF0 # A bignum. 2109 .float 0f-314159265358979323846264338327\ 2110 95028841971.693993751E-40 # - pi, a flonum. 2111 2112* Menu: 2113 2114* Characters:: Character Constants 2115* Numbers:: Number Constants 2116 2117 2118File: as.info, Node: Characters, Next: Numbers, Up: Constants 2119 21203.6.1 Character Constants 2121------------------------- 2122 2123There are two kinds of character constants. A "character" stands for 2124one character in one byte and its value may be used in numeric 2125expressions. String constants (properly called string _literals_) are 2126potentially many bytes and their values may not be used in arithmetic 2127expressions. 2128 2129* Menu: 2130 2131* Strings:: Strings 2132* Chars:: Characters 2133 2134 2135File: as.info, Node: Strings, Next: Chars, Up: Characters 2136 21373.6.1.1 Strings 2138............... 2139 2140A "string" is written between double-quotes. It may contain 2141double-quotes or null characters. The way to get special characters 2142into a string is to "escape" these characters: precede them with a 2143backslash '\' character. For example '\\' represents one backslash: the 2144first '\' is an escape which tells 'as' to interpret the second 2145character literally as a backslash (which prevents 'as' from recognizing 2146the second '\' as an escape character). The complete list of escapes 2147follows. 2148 2149'\b' 2150 Mnemonic for backspace; for ASCII this is octal code 010. 2151 2152'backslash-f' 2153 Mnemonic for FormFeed; for ASCII this is octal code 014. 2154 2155'\n' 2156 Mnemonic for newline; for ASCII this is octal code 012. 2157 2158'\r' 2159 Mnemonic for carriage-Return; for ASCII this is octal code 015. 2160 2161'\t' 2162 Mnemonic for horizontal Tab; for ASCII this is octal code 011. 2163 2164'\ DIGIT DIGIT DIGIT' 2165 An octal character code. The numeric code is 3 octal digits. For 2166 compatibility with other Unix systems, 8 and 9 are accepted as 2167 digits: for example, '\008' has the value 010, and '\009' the value 2168 011. 2169 2170'\x HEX-DIGITS...' 2171 A hex character code. All trailing hex digits are combined. 2172 Either upper or lower case 'x' works. 2173 2174'\\' 2175 Represents one '\' character. 2176 2177'\"' 2178 Represents one '"' character. Needed in strings to represent this 2179 character, because an unescaped '"' would end the string. 2180 2181'\ ANYTHING-ELSE' 2182 Any other character when escaped by '\' gives a warning, but 2183 assembles as if the '\' was not present. The idea is that if you 2184 used an escape sequence you clearly didn't want the literal 2185 interpretation of the following character. However 'as' has no 2186 other interpretation, so 'as' knows it is giving you the wrong code 2187 and warns you of the fact. 2188 2189 Which characters are escapable, and what those escapes represent, 2190varies widely among assemblers. The current set is what we think the 2191BSD 4.2 assembler recognizes, and is a subset of what most C compilers 2192recognize. If you are in doubt, do not use an escape sequence. 2193 2194 2195File: as.info, Node: Chars, Prev: Strings, Up: Characters 2196 21973.6.1.2 Characters 2198.................. 2199 2200A single character may be written as a single quote immediately followed 2201by that character. Some backslash escapes apply to characters, '\b', 2202'\f', '\n', '\r', '\t', and '\"' with the same meaning as for strings, 2203plus '\'' for a single quote. So if you want to write the character 2204backslash, you must write ''\\' where the first '\' escapes the second 2205'\'. As you can see, the quote is an acute accent, not a grave accent. 2206A newline immediately following an acute accent is taken as a literal 2207character and does not count as the end of a statement. The value of a 2208character constant in a numeric expression is the machine's byte-wide 2209code for that character. 'as' assumes your character code is ASCII: 2210''A' means 65, ''B' means 66, and so on. 2211 2212 2213File: as.info, Node: Numbers, Prev: Characters, Up: Constants 2214 22153.6.2 Number Constants 2216---------------------- 2217 2218'as' distinguishes three kinds of numbers according to how they are 2219stored in the target machine. _Integers_ are numbers that would fit 2220into an 'int' in the C language. _Bignums_ are integers, but they are 2221stored in more than 32 bits. _Flonums_ are floating point numbers, 2222described below. 2223 2224* Menu: 2225 2226* Integers:: Integers 2227* Bignums:: Bignums 2228* Flonums:: Flonums 2229 2230 2231File: as.info, Node: Integers, Next: Bignums, Up: Numbers 2232 22333.6.2.1 Integers 2234................ 2235 2236A binary integer is '0b' or '0B' followed by zero or more of the binary 2237digits '01'. 2238 2239 An octal integer is '0' followed by zero or more of the octal digits 2240('01234567'). 2241 2242 A decimal integer starts with a non-zero digit followed by zero or 2243more digits ('0123456789'). 2244 2245 A hexadecimal integer is '0x' or '0X' followed by one or more 2246hexadecimal digits chosen from '0123456789abcdefABCDEF'. 2247 2248 Integers have the usual values. To denote a negative integer, use 2249the prefix operator '-' discussed under expressions (*note Prefix 2250Operators: Prefix Ops.). 2251 2252 2253File: as.info, Node: Bignums, Next: Flonums, Prev: Integers, Up: Numbers 2254 22553.6.2.2 Bignums 2256............... 2257 2258A "bignum" has the same syntax and semantics as an integer except that 2259the number (or its negative) takes more than 32 bits to represent in 2260binary. The distinction is made because in some places integers are 2261permitted while bignums are not. 2262 2263 2264File: as.info, Node: Flonums, Prev: Bignums, Up: Numbers 2265 22663.6.2.3 Flonums 2267............... 2268 2269A "flonum" represents a floating point number. The translation is 2270indirect: a decimal floating point number from the text is converted by 2271'as' to a generic binary floating point number of more than sufficient 2272precision. This generic floating point number is converted to a 2273particular computer's floating point format (or formats) by a portion of 2274'as' specialized to that computer. 2275 2276 A flonum is written by writing (in order) 2277 * The digit '0'. ('0' is optional on the HPPA.) 2278 2279 * A letter, to tell 'as' the rest of the number is a flonum. 'e' is 2280 recommended. Case is not important. 2281 2282 On the H8/300 and Renesas / SuperH SH architectures, the letter 2283 must be one of the letters 'DFPRSX' (in upper or lower case). 2284 2285 On the ARC, the letter must be one of the letters 'DFRS' (in upper 2286 or lower case). 2287 2288 On the HPPA architecture, the letter must be 'E' (upper case only). 2289 2290 * An optional sign: either '+' or '-'. 2291 2292 * An optional "integer part": zero or more decimal digits. 2293 2294 * An optional "fractional part": '.' followed by zero or more decimal 2295 digits. 2296 2297 * An optional exponent, consisting of: 2298 2299 * An 'E' or 'e'. 2300 * Optional sign: either '+' or '-'. 2301 * One or more decimal digits. 2302 2303 At least one of the integer part or the fractional part must be 2304present. The floating point number has the usual base-10 value. 2305 2306 'as' does all processing using integers. Flonums are computed 2307independently of any floating point hardware in the computer running 2308'as'. 2309 2310 2311File: as.info, Node: Sections, Next: Symbols, Prev: Syntax, Up: Top 2312 23134 Sections and Relocation 2314************************* 2315 2316* Menu: 2317 2318* Secs Background:: Background 2319* Ld Sections:: Linker Sections 2320* As Sections:: Assembler Internal Sections 2321* Sub-Sections:: Sub-Sections 2322* bss:: bss Section 2323 2324 2325File: as.info, Node: Secs Background, Next: Ld Sections, Up: Sections 2326 23274.1 Background 2328============== 2329 2330Roughly, a section is a range of addresses, with no gaps; all data "in" 2331those addresses is treated the same for some particular purpose. For 2332example there may be a "read only" section. 2333 2334 The linker 'ld' reads many object files (partial programs) and 2335combines their contents to form a runnable program. When 'as' emits an 2336object file, the partial program is assumed to start at address 0. 'ld' 2337assigns the final addresses for the partial program, so that different 2338partial programs do not overlap. This is actually an 2339oversimplification, but it suffices to explain how 'as' uses sections. 2340 2341 'ld' moves blocks of bytes of your program to their run-time 2342addresses. These blocks slide to their run-time addresses as rigid 2343units; their length does not change and neither does the order of bytes 2344within them. Such a rigid unit is called a _section_. Assigning 2345run-time addresses to sections is called "relocation". It includes the 2346task of adjusting mentions of object-file addresses so they refer to the 2347proper run-time addresses. For the H8/300, and for the Renesas / SuperH 2348SH, 'as' pads sections if needed to ensure they end on a word (sixteen 2349bit) boundary. 2350 2351 An object file written by 'as' has at least three sections, any of 2352which may be empty. These are named "text", "data" and "bss" sections. 2353 2354 When it generates COFF or ELF output, 'as' can also generate whatever 2355other named sections you specify using the '.section' directive (*note 2356'.section': Section.). If you do not use any directives that place 2357output in the '.text' or '.data' sections, these sections still exist, 2358but are empty. 2359 2360 When 'as' generates SOM or ELF output for the HPPA, 'as' can also 2361generate whatever other named sections you specify using the '.space' 2362and '.subspace' directives. See 'HP9000 Series 800 Assembly Language 2363Reference Manual' (HP 92432-90001) for details on the '.space' and 2364'.subspace' assembler directives. 2365 2366 Additionally, 'as' uses different names for the standard text, data, 2367and bss sections when generating SOM output. Program text is placed 2368into the '$CODE$' section, data into '$DATA$', and BSS into '$BSS$'. 2369 2370 Within the object file, the text section starts at address '0', the 2371data section follows, and the bss section follows the data section. 2372 2373 When generating either SOM or ELF output files on the HPPA, the text 2374section starts at address '0', the data section at address '0x4000000', 2375and the bss section follows the data section. 2376 2377 To let 'ld' know which data changes when the sections are relocated, 2378and how to change that data, 'as' also writes to the object file details 2379of the relocation needed. To perform relocation 'ld' must know, each 2380time an address in the object file is mentioned: 2381 * Where in the object file is the beginning of this reference to an 2382 address? 2383 * How long (in bytes) is this reference? 2384 * Which section does the address refer to? What is the numeric value 2385 of 2386 (ADDRESS) - (START-ADDRESS OF SECTION)? 2387 * Is the reference to an address "Program-Counter relative"? 2388 2389 In fact, every address 'as' ever uses is expressed as 2390 (SECTION) + (OFFSET INTO SECTION) 2391Further, most expressions 'as' computes have this section-relative 2392nature. (For some object formats, such as SOM for the HPPA, some 2393expressions are symbol-relative instead.) 2394 2395 In this manual we use the notation {SECNAME N} to mean "offset N into 2396section SECNAME." 2397 2398 Apart from text, data and bss sections you need to know about the 2399"absolute" section. When 'ld' mixes partial programs, addresses in the 2400absolute section remain unchanged. For example, address '{absolute 0}' 2401is "relocated" to run-time address 0 by 'ld'. Although the linker never 2402arranges two partial programs' data sections with overlapping addresses 2403after linking, _by definition_ their absolute sections must overlap. 2404Address '{absolute 239}' in one part of a program is always the same 2405address when the program is running as address '{absolute 239}' in any 2406other part of the program. 2407 2408 The idea of sections is extended to the "undefined" section. Any 2409address whose section is unknown at assembly time is by definition 2410rendered {undefined U}--where U is filled in later. Since numbers are 2411always defined, the only way to generate an undefined address is to 2412mention an undefined symbol. A reference to a named common block would 2413be such a symbol: its value is unknown at assembly time so it has 2414section _undefined_. 2415 2416 By analogy the word _section_ is used to describe groups of sections 2417in the linked program. 'ld' puts all partial programs' text sections in 2418contiguous addresses in the linked program. It is customary to refer to 2419the _text section_ of a program, meaning all the addresses of all 2420partial programs' text sections. Likewise for data and bss sections. 2421 2422 Some sections are manipulated by 'ld'; others are invented for use of 2423'as' and have no meaning except during assembly. 2424 2425 2426File: as.info, Node: Ld Sections, Next: As Sections, Prev: Secs Background, Up: Sections 2427 24284.2 Linker Sections 2429=================== 2430 2431'ld' deals with just four kinds of sections, summarized below. 2432 2433*named sections* 2434*text section* 2435*data section* 2436 These sections hold your program. 'as' and 'ld' treat them as 2437 separate but equal sections. Anything you can say of one section 2438 is true of another. When the program is running, however, it is 2439 customary for the text section to be unalterable. The text section 2440 is often shared among processes: it contains instructions, 2441 constants and the like. The data section of a running program is 2442 usually alterable: for example, C variables would be stored in the 2443 data section. 2444 2445*bss section* 2446 This section contains zeroed bytes when your program begins 2447 running. It is used to hold uninitialized variables or common 2448 storage. The length of each partial program's bss section is 2449 important, but because it starts out containing zeroed bytes there 2450 is no need to store explicit zero bytes in the object file. The 2451 bss section was invented to eliminate those explicit zeros from 2452 object files. 2453 2454*absolute section* 2455 Address 0 of this section is always "relocated" to runtime address 2456 0. This is useful if you want to refer to an address that 'ld' 2457 must not change when relocating. In this sense we speak of 2458 absolute addresses being "unrelocatable": they do not change during 2459 relocation. 2460 2461*undefined section* 2462 This "section" is a catch-all for address references to objects not 2463 in the preceding sections. 2464 2465 An idealized example of three relocatable sections follows. The 2466example uses the traditional section names '.text' and '.data'. Memory 2467addresses are on the horizontal axis. 2468 2469 +-----+----+--+ 2470 partial program # 1: |ttttt|dddd|00| 2471 +-----+----+--+ 2472 2473 text data bss 2474 seg. seg. seg. 2475 2476 +---+---+---+ 2477 partial program # 2: |TTT|DDD|000| 2478 +---+---+---+ 2479 2480 +--+---+-----+--+----+---+-----+~~ 2481 linked program: | |TTT|ttttt| |dddd|DDD|00000| 2482 +--+---+-----+--+----+---+-----+~~ 2483 2484 addresses: 0 ... 2485 2486 2487File: as.info, Node: As Sections, Next: Sub-Sections, Prev: Ld Sections, Up: Sections 2488 24894.3 Assembler Internal Sections 2490=============================== 2491 2492These sections are meant only for the internal use of 'as'. They have 2493no meaning at run-time. You do not really need to know about these 2494sections for most purposes; but they can be mentioned in 'as' warning 2495messages, so it might be helpful to have an idea of their meanings to 2496'as'. These sections are used to permit the value of every expression 2497in your assembly language program to be a section-relative address. 2498 2499ASSEMBLER-INTERNAL-LOGIC-ERROR! 2500 An internal assembler logic error has been found. This means there 2501 is a bug in the assembler. 2502 2503expr section 2504 The assembler stores complex expression internally as combinations 2505 of symbols. When it needs to represent an expression as a symbol, 2506 it puts it in the expr section. 2507 2508 2509File: as.info, Node: Sub-Sections, Next: bss, Prev: As Sections, Up: Sections 2510 25114.4 Sub-Sections 2512================ 2513 2514Assembled bytes conventionally fall into two sections: text and data. 2515You may have separate groups of data in named sections that you want to 2516end up near to each other in the object file, even though they are not 2517contiguous in the assembler source. 'as' allows you to use 2518"subsections" for this purpose. Within each section, there can be 2519numbered subsections with values from 0 to 8192. Objects assembled into 2520the same subsection go into the object file together with other objects 2521in the same subsection. For example, a compiler might want to store 2522constants in the text section, but might not want to have them 2523interspersed with the program being assembled. In this case, the 2524compiler could issue a '.text 0' before each section of code being 2525output, and a '.text 1' before each group of constants being output. 2526 2527 Subsections are optional. If you do not use subsections, everything 2528goes in subsection number zero. 2529 2530 Each subsection is zero-padded up to a multiple of four bytes. 2531(Subsections may be padded a different amount on different flavors of 2532'as'.) 2533 2534 Subsections appear in your object file in numeric order, lowest 2535numbered to highest. (All this to be compatible with other people's 2536assemblers.) The object file contains no representation of subsections; 2537'ld' and other programs that manipulate object files see no trace of 2538them. They just see all your text subsections as a text section, and 2539all your data subsections as a data section. 2540 2541 To specify which subsection you want subsequent statements assembled 2542into, use a numeric argument to specify it, in a '.text EXPRESSION' or a 2543'.data EXPRESSION' statement. When generating COFF output, you can also 2544use an extra subsection argument with arbitrary named sections: 2545'.section NAME, EXPRESSION'. When generating ELF output, you can also 2546use the '.subsection' directive (*note SubSection::) to specify a 2547subsection: '.subsection EXPRESSION'. EXPRESSION should be an absolute 2548expression (*note Expressions::). If you just say '.text' then '.text 25490' is assumed. Likewise '.data' means '.data 0'. Assembly begins in 2550'text 0'. For instance: 2551 .text 0 # The default subsection is text 0 anyway. 2552 .ascii "This lives in the first text subsection. *" 2553 .text 1 2554 .ascii "But this lives in the second text subsection." 2555 .data 0 2556 .ascii "This lives in the data section," 2557 .ascii "in the first data subsection." 2558 .text 0 2559 .ascii "This lives in the first text section," 2560 .ascii "immediately following the asterisk (*)." 2561 2562 Each section has a "location counter" incremented by one for every 2563byte assembled into that section. Because subsections are merely a 2564convenience restricted to 'as' there is no concept of a subsection 2565location counter. There is no way to directly manipulate a location 2566counter--but the '.align' directive changes it, and any label definition 2567captures its current value. The location counter of the section where 2568statements are being assembled is said to be the "active" location 2569counter. 2570 2571 2572File: as.info, Node: bss, Prev: Sub-Sections, Up: Sections 2573 25744.5 bss Section 2575=============== 2576 2577The bss section is used for local common variable storage. You may 2578allocate address space in the bss section, but you may not dictate data 2579to load into it before your program executes. When your program starts 2580running, all the contents of the bss section are zeroed bytes. 2581 2582 The '.lcomm' pseudo-op defines a symbol in the bss section; see *note 2583'.lcomm': Lcomm. 2584 2585 The '.comm' pseudo-op may be used to declare a common symbol, which 2586is another form of uninitialized symbol; see *note '.comm': Comm. 2587 2588 When assembling for a target which supports multiple sections, such 2589as ELF or COFF, you may switch into the '.bss' section and define 2590symbols as usual; see *note '.section': Section. You may only assemble 2591zero values into the section. Typically the section will only contain 2592symbol definitions and '.skip' directives (*note '.skip': Skip.). 2593 2594 2595File: as.info, Node: Symbols, Next: Expressions, Prev: Sections, Up: Top 2596 25975 Symbols 2598********* 2599 2600Symbols are a central concept: the programmer uses symbols to name 2601things, the linker uses symbols to link, and the debugger uses symbols 2602to debug. 2603 2604 _Warning:_ 'as' does not place symbols in the object file in the 2605 same order they were declared. This may break some debuggers. 2606 2607* Menu: 2608 2609* Labels:: Labels 2610* Setting Symbols:: Giving Symbols Other Values 2611* Symbol Names:: Symbol Names 2612* Dot:: The Special Dot Symbol 2613* Symbol Attributes:: Symbol Attributes 2614 2615 2616File: as.info, Node: Labels, Next: Setting Symbols, Up: Symbols 2617 26185.1 Labels 2619========== 2620 2621A "label" is written as a symbol immediately followed by a colon ':'. 2622The symbol then represents the current value of the active location 2623counter, and is, for example, a suitable instruction operand. You are 2624warned if you use the same symbol to represent two different locations: 2625the first definition overrides any other definitions. 2626 2627 On the HPPA, the usual form for a label need not be immediately 2628followed by a colon, but instead must start in column zero. Only one 2629label may be defined on a single line. To work around this, the HPPA 2630version of 'as' also provides a special directive '.label' for defining 2631labels more flexibly. 2632 2633 2634File: as.info, Node: Setting Symbols, Next: Symbol Names, Prev: Labels, Up: Symbols 2635 26365.2 Giving Symbols Other Values 2637=============================== 2638 2639A symbol can be given an arbitrary value by writing a symbol, followed 2640by an equals sign '=', followed by an expression (*note Expressions::). 2641This is equivalent to using the '.set' directive. *Note '.set': Set. 2642In the same way, using a double equals sign '=''=' here represents an 2643equivalent of the '.eqv' directive. *Note '.eqv': Eqv. 2644 2645 Blackfin does not support symbol assignment with '='. 2646 2647 2648File: as.info, Node: Symbol Names, Next: Dot, Prev: Setting Symbols, Up: Symbols 2649 26505.3 Symbol Names 2651================ 2652 2653Symbol names begin with a letter or with one of '._'. On most machines, 2654you can also use '$' in symbol names; exceptions are noted in *note 2655Machine Dependencies::. That character may be followed by any string of 2656digits, letters, dollar signs (unless otherwise noted for a particular 2657target machine), and underscores. 2658 2659 Case of letters is significant: 'foo' is a different symbol name than 2660'Foo'. 2661 2662 Symbol names do not start with a digit. An exception to this rule is 2663made for Local Labels. See below. 2664 2665 Multibyte characters are supported. To generate a symbol name 2666containing multibyte characters enclose it within double quotes and use 2667escape codes. cf *Note Strings::. Generating a multibyte symbol name 2668from a label is not currently supported. 2669 2670 Each symbol has exactly one name. Each name in an assembly language 2671program refers to exactly one symbol. You may use that symbol name any 2672number of times in a program. 2673 2674Local Symbol Names 2675------------------ 2676 2677A local symbol is any symbol beginning with certain local label 2678prefixes. By default, the local label prefix is '.L' for ELF systems or 2679'L' for traditional a.out systems, but each target may have its own set 2680of local label prefixes. On the HPPA local symbols begin with 'L$'. 2681 2682 Local symbols are defined and used within the assembler, but they are 2683normally not saved in object files. Thus, they are not visible when 2684debugging. You may use the '-L' option (*note Include Local Symbols: 2685L.) to retain the local symbols in the object files. 2686 2687Local Labels 2688------------ 2689 2690Local labels are different from local symbols. Local labels help 2691compilers and programmers use names temporarily. They create symbols 2692which are guaranteed to be unique over the entire scope of the input 2693source code and which can be referred to by a simple notation. To 2694define a local label, write a label of the form 'N:' (where N represents 2695any non-negative integer). To refer to the most recent previous 2696definition of that label write 'Nb', using the same number as when you 2697defined the label. To refer to the next definition of a local label, 2698write 'Nf'. The 'b' stands for "backwards" and the 'f' stands for 2699"forwards". 2700 2701 There is no restriction on how you can use these labels, and you can 2702reuse them too. So that it is possible to repeatedly define the same 2703local label (using the same number 'N'), although you can only refer to 2704the most recently defined local label of that number (for a backwards 2705reference) or the next definition of a specific local label for a 2706forward reference. It is also worth noting that the first 10 local 2707labels ('0:'...'9:') are implemented in a slightly more efficient manner 2708than the others. 2709 2710 Here is an example: 2711 2712 1: branch 1f 2713 2: branch 1b 2714 1: branch 2f 2715 2: branch 1b 2716 2717 Which is the equivalent of: 2718 2719 label_1: branch label_3 2720 label_2: branch label_1 2721 label_3: branch label_4 2722 label_4: branch label_3 2723 2724 Local label names are only a notational device. They are immediately 2725transformed into more conventional symbol names before the assembler 2726uses them. The symbol names are stored in the symbol table, appear in 2727error messages, and are optionally emitted to the object file. The 2728names are constructed using these parts: 2729 2730'_local label prefix_' 2731 All local symbols begin with the system-specific local label 2732 prefix. Normally both 'as' and 'ld' forget symbols that start with 2733 the local label prefix. These labels are used for symbols you are 2734 never intended to see. If you use the '-L' option then 'as' 2735 retains these symbols in the object file. If you also instruct 2736 'ld' to retain these symbols, you may use them in debugging. 2737 2738'NUMBER' 2739 This is the number that was used in the local label definition. So 2740 if the label is written '55:' then the number is '55'. 2741 2742'C-B' 2743 This unusual character is included so you do not accidentally 2744 invent a symbol of the same name. The character has ASCII value of 2745 '\002' (control-B). 2746 2747'_ordinal number_' 2748 This is a serial number to keep the labels distinct. The first 2749 definition of '0:' gets the number '1'. The 15th definition of 2750 '0:' gets the number '15', and so on. Likewise the first 2751 definition of '1:' gets the number '1' and its 15th definition gets 2752 '15' as well. 2753 2754 So for example, the first '1:' may be named '.L1C-B1', and the 44th 2755'3:' may be named '.L3C-B44'. 2756 2757Dollar Local Labels 2758------------------- 2759 2760On some targets 'as' also supports an even more local form of local 2761labels called dollar labels. These labels go out of scope (i.e., they 2762become undefined) as soon as a non-local label is defined. Thus they 2763remain valid for only a small region of the input source code. Normal 2764local labels, by contrast, remain in scope for the entire file, or until 2765they are redefined by another occurrence of the same local label. 2766 2767 Dollar labels are defined in exactly the same way as ordinary local 2768labels, except that they have a dollar sign suffix to their numeric 2769value, e.g., '55$:'. 2770 2771 They can also be distinguished from ordinary local labels by their 2772transformed names which use ASCII character '\001' (control-A) as the 2773magic character to distinguish them from ordinary labels. For example, 2774the fifth definition of '6$' may be named '.L6'C-A'5'. 2775 2776 2777File: as.info, Node: Dot, Next: Symbol Attributes, Prev: Symbol Names, Up: Symbols 2778 27795.4 The Special Dot Symbol 2780========================== 2781 2782The special symbol '.' refers to the current address that 'as' is 2783assembling into. Thus, the expression 'melvin: .long .' defines 2784'melvin' to contain its own address. Assigning a value to '.' is 2785treated the same as a '.org' directive. Thus, the expression '.=.+4' is 2786the same as saying '.space 4'. 2787 2788 2789File: as.info, Node: Symbol Attributes, Prev: Dot, Up: Symbols 2790 27915.5 Symbol Attributes 2792===================== 2793 2794Every symbol has, as well as its name, the attributes "Value" and 2795"Type". Depending on output format, symbols can also have auxiliary 2796attributes. 2797 2798 If you use a symbol without defining it, 'as' assumes zero for all 2799these attributes, and probably won't warn you. This makes the symbol an 2800externally defined symbol, which is generally what you would want. 2801 2802* Menu: 2803 2804* Symbol Value:: Value 2805* Symbol Type:: Type 2806* a.out Symbols:: Symbol Attributes: 'a.out' 2807* COFF Symbols:: Symbol Attributes for COFF 2808* SOM Symbols:: Symbol Attributes for SOM 2809 2810 2811File: as.info, Node: Symbol Value, Next: Symbol Type, Up: Symbol Attributes 2812 28135.5.1 Value 2814----------- 2815 2816The value of a symbol is (usually) 32 bits. For a symbol which labels a 2817location in the text, data, bss or absolute sections the value is the 2818number of addresses from the start of that section to the label. 2819Naturally for text, data and bss sections the value of a symbol changes 2820as 'ld' changes section base addresses during linking. Absolute 2821symbols' values do not change during linking: that is why they are 2822called absolute. 2823 2824 The value of an undefined symbol is treated in a special way. If it 2825is 0 then the symbol is not defined in this assembler source file, and 2826'ld' tries to determine its value from other files linked into the same 2827program. You make this kind of symbol simply by mentioning a symbol 2828name without defining it. A non-zero value represents a '.comm' common 2829declaration. The value is how much common storage to reserve, in bytes 2830(addresses). The symbol refers to the first address of the allocated 2831storage. 2832 2833 2834File: as.info, Node: Symbol Type, Next: a.out Symbols, Prev: Symbol Value, Up: Symbol Attributes 2835 28365.5.2 Type 2837---------- 2838 2839The type attribute of a symbol contains relocation (section) 2840information, any flag settings indicating that a symbol is external, and 2841(optionally), other information for linkers and debuggers. The exact 2842format depends on the object-code output format in use. 2843 2844 2845File: as.info, Node: a.out Symbols, Next: COFF Symbols, Prev: Symbol Type, Up: Symbol Attributes 2846 28475.5.3 Symbol Attributes: 'a.out' 2848-------------------------------- 2849 2850* Menu: 2851 2852* Symbol Desc:: Descriptor 2853* Symbol Other:: Other 2854 2855 2856File: as.info, Node: Symbol Desc, Next: Symbol Other, Up: a.out Symbols 2857 28585.5.3.1 Descriptor 2859.................. 2860 2861This is an arbitrary 16-bit value. You may establish a symbol's 2862descriptor value by using a '.desc' statement (*note '.desc': Desc.). A 2863descriptor value means nothing to 'as'. 2864 2865 2866File: as.info, Node: Symbol Other, Prev: Symbol Desc, Up: a.out Symbols 2867 28685.5.3.2 Other 2869............. 2870 2871This is an arbitrary 8-bit value. It means nothing to 'as'. 2872 2873 2874File: as.info, Node: COFF Symbols, Next: SOM Symbols, Prev: a.out Symbols, Up: Symbol Attributes 2875 28765.5.4 Symbol Attributes for COFF 2877-------------------------------- 2878 2879The COFF format supports a multitude of auxiliary symbol attributes; 2880like the primary symbol attributes, they are set between '.def' and 2881'.endef' directives. 2882 28835.5.4.1 Primary Attributes 2884.......................... 2885 2886The symbol name is set with '.def'; the value and type, respectively, 2887with '.val' and '.type'. 2888 28895.5.4.2 Auxiliary Attributes 2890............................ 2891 2892The 'as' directives '.dim', '.line', '.scl', '.size', '.tag', and 2893'.weak' can generate auxiliary symbol table information for COFF. 2894 2895 2896File: as.info, Node: SOM Symbols, Prev: COFF Symbols, Up: Symbol Attributes 2897 28985.5.5 Symbol Attributes for SOM 2899------------------------------- 2900 2901The SOM format for the HPPA supports a multitude of symbol attributes 2902set with the '.EXPORT' and '.IMPORT' directives. 2903 2904 The attributes are described in 'HP9000 Series 800 Assembly Language 2905Reference Manual' (HP 92432-90001) under the 'IMPORT' and 'EXPORT' 2906assembler directive documentation. 2907 2908 2909File: as.info, Node: Expressions, Next: Pseudo Ops, Prev: Symbols, Up: Top 2910 29116 Expressions 2912************* 2913 2914An "expression" specifies an address or numeric value. Whitespace may 2915precede and/or follow an expression. 2916 2917 The result of an expression must be an absolute number, or else an 2918offset into a particular section. If an expression is not absolute, and 2919there is not enough information when 'as' sees the expression to know 2920its section, a second pass over the source program might be necessary to 2921interpret the expression--but the second pass is currently not 2922implemented. 'as' aborts with an error message in this situation. 2923 2924* Menu: 2925 2926* Empty Exprs:: Empty Expressions 2927* Integer Exprs:: Integer Expressions 2928 2929 2930File: as.info, Node: Empty Exprs, Next: Integer Exprs, Up: Expressions 2931 29326.1 Empty Expressions 2933===================== 2934 2935An empty expression has no value: it is just whitespace or null. 2936Wherever an absolute expression is required, you may omit the 2937expression, and 'as' assumes a value of (absolute) 0. This is 2938compatible with other assemblers. 2939 2940 2941File: as.info, Node: Integer Exprs, Prev: Empty Exprs, Up: Expressions 2942 29436.2 Integer Expressions 2944======================= 2945 2946An "integer expression" is one or more _arguments_ delimited by 2947_operators_. 2948 2949* Menu: 2950 2951* Arguments:: Arguments 2952* Operators:: Operators 2953* Prefix Ops:: Prefix Operators 2954* Infix Ops:: Infix Operators 2955 2956 2957File: as.info, Node: Arguments, Next: Operators, Up: Integer Exprs 2958 29596.2.1 Arguments 2960--------------- 2961 2962"Arguments" are symbols, numbers or subexpressions. In other contexts 2963arguments are sometimes called "arithmetic operands". In this manual, 2964to avoid confusing them with the "instruction operands" of the machine 2965language, we use the term "argument" to refer to parts of expressions 2966only, reserving the word "operand" to refer only to machine instruction 2967operands. 2968 2969 Symbols are evaluated to yield {SECTION NNN} where SECTION is one of 2970text, data, bss, absolute, or undefined. NNN is a signed, 2's 2971complement 32 bit integer. 2972 2973 Numbers are usually integers. 2974 2975 A number can be a flonum or bignum. In this case, you are warned 2976that only the low order 32 bits are used, and 'as' pretends these 32 2977bits are an integer. You may write integer-manipulating instructions 2978that act on exotic constants, compatible with other assemblers. 2979 2980 Subexpressions are a left parenthesis '(' followed by an integer 2981expression, followed by a right parenthesis ')'; or a prefix operator 2982followed by an argument. 2983 2984 2985File: as.info, Node: Operators, Next: Prefix Ops, Prev: Arguments, Up: Integer Exprs 2986 29876.2.2 Operators 2988--------------- 2989 2990"Operators" are arithmetic functions, like '+' or '%'. Prefix operators 2991are followed by an argument. Infix operators appear between their 2992arguments. Operators may be preceded and/or followed by whitespace. 2993 2994 2995File: as.info, Node: Prefix Ops, Next: Infix Ops, Prev: Operators, Up: Integer Exprs 2996 29976.2.3 Prefix Operator 2998--------------------- 2999 3000'as' has the following "prefix operators". They each take one argument, 3001which must be absolute. 3002 3003'-' 3004 "Negation". Two's complement negation. 3005'~' 3006 "Complementation". Bitwise not. 3007 3008 3009File: as.info, Node: Infix Ops, Prev: Prefix Ops, Up: Integer Exprs 3010 30116.2.4 Infix Operators 3012--------------------- 3013 3014"Infix operators" take two arguments, one on either side. Operators 3015have precedence, but operations with equal precedence are performed left 3016to right. Apart from '+' or '-', both arguments must be absolute, and 3017the result is absolute. 3018 3019 1. Highest Precedence 3020 3021 '*' 3022 "Multiplication". 3023 3024 '/' 3025 "Division". Truncation is the same as the C operator '/' 3026 3027 '%' 3028 "Remainder". 3029 3030 '<<' 3031 "Shift Left". Same as the C operator '<<'. 3032 3033 '>>' 3034 "Shift Right". Same as the C operator '>>'. 3035 3036 2. Intermediate precedence 3037 3038 '|' 3039 3040 "Bitwise Inclusive Or". 3041 3042 '&' 3043 "Bitwise And". 3044 3045 '^' 3046 "Bitwise Exclusive Or". 3047 3048 '!' 3049 "Bitwise Or Not". 3050 3051 3. Low Precedence 3052 3053 '+' 3054 "Addition". If either argument is absolute, the result has 3055 the section of the other argument. You may not add together 3056 arguments from different sections. 3057 3058 '-' 3059 "Subtraction". If the right argument is absolute, the result 3060 has the section of the left argument. If both arguments are 3061 in the same section, the result is absolute. You may not 3062 subtract arguments from different sections. 3063 3064 '==' 3065 "Is Equal To" 3066 '<>' 3067 '!=' 3068 "Is Not Equal To" 3069 '<' 3070 "Is Less Than" 3071 '>' 3072 "Is Greater Than" 3073 '>=' 3074 "Is Greater Than Or Equal To" 3075 '<=' 3076 "Is Less Than Or Equal To" 3077 3078 The comparison operators can be used as infix operators. A 3079 true results has a value of -1 whereas a false result has a 3080 value of 0. Note, these operators perform signed comparisons. 3081 3082 4. Lowest Precedence 3083 3084 '&&' 3085 "Logical And". 3086 3087 '||' 3088 "Logical Or". 3089 3090 These two logical operations can be used to combine the 3091 results of sub expressions. Note, unlike the comparison 3092 operators a true result returns a value of 1 but a false 3093 results does still return 0. Also note that the logical or 3094 operator has a slightly lower precedence than logical and. 3095 3096 In short, it's only meaningful to add or subtract the _offsets_ in an 3097address; you can only have a defined section in one of the two 3098arguments. 3099 3100 3101File: as.info, Node: Pseudo Ops, Next: Object Attributes, Prev: Expressions, Up: Top 3102 31037 Assembler Directives 3104********************** 3105 3106All assembler directives have names that begin with a period ('.'). The 3107names are case insensitive for most targets, and usually written in 3108lower case. 3109 3110 This chapter discusses directives that are available regardless of 3111the target machine configuration for the GNU assembler. Some machine 3112configurations provide additional directives. *Note Machine 3113Dependencies::. 3114 3115* Menu: 3116 3117* Abort:: '.abort' 3118* ABORT (COFF):: '.ABORT' 3119 3120* Align:: '.align [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]' 3121* Altmacro:: '.altmacro' 3122* Ascii:: '.ascii "STRING"'... 3123* Asciz:: '.asciz "STRING"'... 3124* Attach_to_group:: '.attach_to_group NAME' 3125* Balign:: '.balign [ABS-EXPR[, ABS-EXPR]]' 3126* Bundle directives:: '.bundle_align_mode ABS-EXPR', etc 3127* Byte:: '.byte EXPRESSIONS' 3128* CFI directives:: '.cfi_startproc [simple]', '.cfi_endproc', etc. 3129* Comm:: '.comm SYMBOL , LENGTH ' 3130* Data:: '.data SUBSECTION' 3131* Dc:: '.dc[SIZE] EXPRESSIONS' 3132* Dcb:: '.dcb[SIZE] NUMBER [,FILL]' 3133* Ds:: '.ds[SIZE] NUMBER [,FILL]' 3134* Def:: '.def NAME' 3135* Desc:: '.desc SYMBOL, ABS-EXPRESSION' 3136* Dim:: '.dim' 3137 3138* Double:: '.double FLONUMS' 3139* Eject:: '.eject' 3140* Else:: '.else' 3141* Elseif:: '.elseif' 3142* End:: '.end' 3143* Endef:: '.endef' 3144 3145* Endfunc:: '.endfunc' 3146* Endif:: '.endif' 3147* Equ:: '.equ SYMBOL, EXPRESSION' 3148* Equiv:: '.equiv SYMBOL, EXPRESSION' 3149* Eqv:: '.eqv SYMBOL, EXPRESSION' 3150* Err:: '.err' 3151* Error:: '.error STRING' 3152* Exitm:: '.exitm' 3153* Extern:: '.extern' 3154* Fail:: '.fail' 3155* File:: '.file' 3156* Fill:: '.fill REPEAT , SIZE , VALUE' 3157* Float:: '.float FLONUMS' 3158* Func:: '.func' 3159* Global:: '.global SYMBOL', '.globl SYMBOL' 3160* Gnu_attribute:: '.gnu_attribute TAG,VALUE' 3161* Hidden:: '.hidden NAMES' 3162 3163* hword:: '.hword EXPRESSIONS' 3164* Ident:: '.ident' 3165* If:: '.if ABSOLUTE EXPRESSION' 3166* Incbin:: '.incbin "FILE"[,SKIP[,COUNT]]' 3167* Include:: '.include "FILE"' 3168* Int:: '.int EXPRESSIONS' 3169* Internal:: '.internal NAMES' 3170 3171* Irp:: '.irp SYMBOL,VALUES'... 3172* Irpc:: '.irpc SYMBOL,VALUES'... 3173* Lcomm:: '.lcomm SYMBOL , LENGTH' 3174* Lflags:: '.lflags' 3175* Line:: '.line LINE-NUMBER' 3176 3177* Linkonce:: '.linkonce [TYPE]' 3178* List:: '.list' 3179* Ln:: '.ln LINE-NUMBER' 3180* Loc:: '.loc FILENO LINENO' 3181* Loc_mark_labels:: '.loc_mark_labels ENABLE' 3182* Local:: '.local NAMES' 3183 3184* Long:: '.long EXPRESSIONS' 3185 3186* Macro:: '.macro NAME ARGS'... 3187* MRI:: '.mri VAL' 3188* Noaltmacro:: '.noaltmacro' 3189* Nolist:: '.nolist' 3190* Nop:: '.nop' 3191* Nops:: '.nops SIZE[, CONTROL]' 3192* Octa:: '.octa BIGNUMS' 3193* Offset:: '.offset LOC' 3194* Org:: '.org NEW-LC, FILL' 3195* P2align:: '.p2align [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]' 3196* PopSection:: '.popsection' 3197* Previous:: '.previous' 3198 3199* Print:: '.print STRING' 3200* Protected:: '.protected NAMES' 3201 3202* Psize:: '.psize LINES, COLUMNS' 3203* Purgem:: '.purgem NAME' 3204* PushSection:: '.pushsection NAME' 3205 3206* Quad:: '.quad BIGNUMS' 3207* Reloc:: '.reloc OFFSET, RELOC_NAME[, EXPRESSION]' 3208* Rept:: '.rept COUNT' 3209* Sbttl:: '.sbttl "SUBHEADING"' 3210* Scl:: '.scl CLASS' 3211* Section:: '.section NAME[, FLAGS]' 3212 3213* Set:: '.set SYMBOL, EXPRESSION' 3214* Short:: '.short EXPRESSIONS' 3215* Single:: '.single FLONUMS' 3216* Size:: '.size [NAME , EXPRESSION]' 3217* Skip:: '.skip SIZE [,FILL]' 3218 3219* Sleb128:: '.sleb128 EXPRESSIONS' 3220* Space:: '.space SIZE [,FILL]' 3221* Stab:: '.stabd, .stabn, .stabs' 3222 3223* String:: '.string "STR"', '.string8 "STR"', '.string16 "STR"', '.string32 "STR"', '.string64 "STR"' 3224* Struct:: '.struct EXPRESSION' 3225* SubSection:: '.subsection' 3226* Symver:: '.symver NAME,NAME2@NODENAME[,VISIBILITY]' 3227 3228* Tag:: '.tag STRUCTNAME' 3229 3230* Text:: '.text SUBSECTION' 3231* Title:: '.title "HEADING"' 3232* Tls_common:: '.tls_common SYMBOL, LENGTH[, ALIGNMENT]' 3233* Type:: '.type <INT | NAME , TYPE DESCRIPTION>' 3234 3235* Uleb128:: '.uleb128 EXPRESSIONS' 3236* Val:: '.val ADDR' 3237 3238* Version:: '.version "STRING"' 3239* VTableEntry:: '.vtable_entry TABLE, OFFSET' 3240* VTableInherit:: '.vtable_inherit CHILD, PARENT' 3241 3242* Warning:: '.warning STRING' 3243* Weak:: '.weak NAMES' 3244* Weakref:: '.weakref ALIAS, SYMBOL' 3245* Word:: '.word EXPRESSIONS' 3246* Zero:: '.zero SIZE' 3247* 2byte:: '.2byte EXPRESSIONS' 3248* 4byte:: '.4byte EXPRESSIONS' 3249* 8byte:: '.8byte BIGNUMS' 3250* Deprecated:: Deprecated Directives 3251 3252 3253File: as.info, Node: Abort, Next: ABORT (COFF), Up: Pseudo Ops 3254 32557.1 '.abort' 3256============ 3257 3258This directive stops the assembly immediately. It is for compatibility 3259with other assemblers. The original idea was that the assembly language 3260source would be piped into the assembler. If the sender of the source 3261quit, it could use this directive tells 'as' to quit also. One day 3262'.abort' will not be supported. 3263 3264 3265File: as.info, Node: ABORT (COFF), Next: Align, Prev: Abort, Up: Pseudo Ops 3266 32677.2 '.ABORT' (COFF) 3268=================== 3269 3270When producing COFF output, 'as' accepts this directive as a synonym for 3271'.abort'. 3272 3273 3274File: as.info, Node: Align, Next: Altmacro, Prev: ABORT (COFF), Up: Pseudo Ops 3275 32767.3 '.align [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]' 3277=============================================== 3278 3279Pad the location counter (in the current subsection) to a particular 3280storage boundary. The first expression (which must be absolute) is the 3281alignment required, as described below. If this expression is omitted 3282then a default value of 0 is used, effectively disabling alignment 3283requirements. 3284 3285 The second expression (also absolute) gives the fill value to be 3286stored in the padding bytes. It (and the comma) may be omitted. If it 3287is omitted, the padding bytes are normally zero. However, on most 3288systems, if the section is marked as containing code and the fill value 3289is omitted, the space is filled with no-op instructions. 3290 3291 The third expression is also absolute, and is also optional. If it 3292is present, it is the maximum number of bytes that should be skipped by 3293this alignment directive. If doing the alignment would require skipping 3294more bytes than the specified maximum, then the alignment is not done at 3295all. You can omit the fill value (the second argument) entirely by 3296simply using two commas after the required alignment; this can be useful 3297if you want the alignment to be filled with no-op instructions when 3298appropriate. 3299 3300 The way the required alignment is specified varies from system to 3301system. For the arc, hppa, i386 using ELF, iq2000, m68k, or1k, s390, 3302sparc, tic4x and xtensa, the first expression is the alignment request 3303in bytes. For example '.align 8' advances the location counter until it 3304is a multiple of 8. If the location counter is already a multiple of 8, 3305no change is needed. For the tic54x, the first expression is the 3306alignment request in words. 3307 3308 For other systems, including ppc, i386 using a.out format, arm and 3309strongarm, it is the number of low-order zero bits the location counter 3310must have after advancement. For example '.align 3' advances the 3311location counter until it is a multiple of 8. If the location counter 3312is already a multiple of 8, no change is needed. 3313 3314 This inconsistency is due to the different behaviors of the various 3315native assemblers for these systems which GAS must emulate. GAS also 3316provides '.balign' and '.p2align' directives, described later, which 3317have a consistent behavior across all architectures (but are specific to 3318GAS). 3319 3320 3321File: as.info, Node: Altmacro, Next: Ascii, Prev: Align, Up: Pseudo Ops 3322 33237.4 '.altmacro' 3324=============== 3325 3326Enable alternate macro mode, enabling: 3327 3328'LOCAL NAME [ , ... ]' 3329 One additional directive, 'LOCAL', is available. It is used to 3330 generate a string replacement for each of the NAME arguments, and 3331 replace any instances of NAME in each macro expansion. The 3332 replacement string is unique in the assembly, and different for 3333 each separate macro expansion. 'LOCAL' allows you to write macros 3334 that define symbols, without fear of conflict between separate 3335 macro expansions. 3336 3337'String delimiters' 3338 You can write strings delimited in these other ways besides 3339 '"STRING"': 3340 3341 ''STRING'' 3342 You can delimit strings with single-quote characters. 3343 3344 '<STRING>' 3345 You can delimit strings with matching angle brackets. 3346 3347'single-character string escape' 3348 To include any single character literally in a string (even if the 3349 character would otherwise have some special meaning), you can 3350 prefix the character with '!' (an exclamation mark). For example, 3351 you can write '<4.3 !> 5.4!!>' to get the literal text '4.3 > 3352 5.4!'. 3353 3354'Expression results as strings' 3355 You can write '%EXPR' to evaluate the expression EXPR and use the 3356 result as a string. 3357 3358 3359File: as.info, Node: Ascii, Next: Asciz, Prev: Altmacro, Up: Pseudo Ops 3360 33617.5 '.ascii "STRING"'... 3362======================== 3363 3364'.ascii' expects zero or more string literals (*note Strings::) 3365separated by commas. It assembles each string (with no automatic 3366trailing zero byte) into consecutive addresses. 3367 3368 3369File: as.info, Node: Asciz, Next: Attach_to_group, Prev: Ascii, Up: Pseudo Ops 3370 33717.6 '.asciz "STRING"'... 3372======================== 3373 3374'.asciz' is just like '.ascii', but each string is followed by a zero 3375byte. The "z" in '.asciz' stands for "zero". Note that multiple string 3376arguments not separated by commas will be concatenated together and only 3377one final zero byte will be stored. 3378 3379 3380File: as.info, Node: Attach_to_group, Next: Balign, Prev: Asciz, Up: Pseudo Ops 3381 33827.7 '.attach_to_group NAME' 3383=========================== 3384 3385Attaches the current section to the named group. This is like declaring 3386the section with the 'G' attribute, but can be done after the section 3387has been created. Note if the group section does not exist at the point 3388that this directive is used then it will be created. 3389 3390 3391File: as.info, Node: Balign, Next: Bundle directives, Prev: Attach_to_group, Up: Pseudo Ops 3392 33937.8 '.balign[wl] [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]' 3394==================================================== 3395 3396Pad the location counter (in the current subsection) to a particular 3397storage boundary. The first expression (which must be absolute) is the 3398alignment request in bytes. For example '.balign 8' advances the 3399location counter until it is a multiple of 8. If the location counter 3400is already a multiple of 8, no change is needed. If the expression is 3401omitted then a default value of 0 is used, effectively disabling 3402alignment requirements. 3403 3404 The second expression (also absolute) gives the fill value to be 3405stored in the padding bytes. It (and the comma) may be omitted. If it 3406is omitted, the padding bytes are normally zero. However, on most 3407systems, if the section is marked as containing code and the fill value 3408is omitted, the space is filled with no-op instructions. 3409 3410 The third expression is also absolute, and is also optional. If it 3411is present, it is the maximum number of bytes that should be skipped by 3412this alignment directive. If doing the alignment would require skipping 3413more bytes than the specified maximum, then the alignment is not done at 3414all. You can omit the fill value (the second argument) entirely by 3415simply using two commas after the required alignment; this can be useful 3416if you want the alignment to be filled with no-op instructions when 3417appropriate. 3418 3419 The '.balignw' and '.balignl' directives are variants of the 3420'.balign' directive. The '.balignw' directive treats the fill pattern 3421as a two byte word value. The '.balignl' directives treats the fill 3422pattern as a four byte longword value. For example, '.balignw 4,0x368d' 3423will align to a multiple of 4. If it skips two bytes, they will be 3424filled in with the value 0x368d (the exact placement of the bytes 3425depends upon the endianness of the processor). If it skips 1 or 3 3426bytes, the fill value is undefined. 3427 3428 3429File: as.info, Node: Bundle directives, Next: Byte, Prev: Balign, Up: Pseudo Ops 3430 34317.9 Bundle directives 3432===================== 3433 34347.9.1 '.bundle_align_mode ABS-EXPR' 3435----------------------------------- 3436 3437'.bundle_align_mode' enables or disables "aligned instruction bundle" 3438mode. In this mode, sequences of adjacent instructions are grouped into 3439fixed-sized "bundles". If the argument is zero, this mode is disabled 3440(which is the default state). If the argument it not zero, it gives the 3441size of an instruction bundle as a power of two (as for the '.p2align' 3442directive, *note P2align::). 3443 3444 For some targets, it's an ABI requirement that no instruction may 3445span a certain aligned boundary. A "bundle" is simply a sequence of 3446instructions that starts on an aligned boundary. For example, if 3447ABS-EXPR is '5' then the bundle size is 32, so each aligned chunk of 32 3448bytes is a bundle. When aligned instruction bundle mode is in effect, 3449no single instruction may span a boundary between bundles. If an 3450instruction would start too close to the end of a bundle for the length 3451of that particular instruction to fit within the bundle, then the space 3452at the end of that bundle is filled with no-op instructions so the 3453instruction starts in the next bundle. As a corollary, it's an error if 3454any single instruction's encoding is longer than the bundle size. 3455 34567.9.2 '.bundle_lock' and '.bundle_unlock' 3457----------------------------------------- 3458 3459The '.bundle_lock' and directive '.bundle_unlock' directives allow 3460explicit control over instruction bundle padding. These directives are 3461only valid when '.bundle_align_mode' has been used to enable aligned 3462instruction bundle mode. It's an error if they appear when 3463'.bundle_align_mode' has not been used at all, or when the last 3464directive was '.bundle_align_mode 0'. 3465 3466 For some targets, it's an ABI requirement that certain instructions 3467may appear only as part of specified permissible sequences of multiple 3468instructions, all within the same bundle. A pair of '.bundle_lock' and 3469'.bundle_unlock' directives define a "bundle-locked" instruction 3470sequence. For purposes of aligned instruction bundle mode, a sequence 3471starting with '.bundle_lock' and ending with '.bundle_unlock' is treated 3472as a single instruction. That is, the entire sequence must fit into a 3473single bundle and may not span a bundle boundary. If necessary, no-op 3474instructions will be inserted before the first instruction of the 3475sequence so that the whole sequence starts on an aligned bundle 3476boundary. It's an error if the sequence is longer than the bundle size. 3477 3478 For convenience when using '.bundle_lock' and '.bundle_unlock' inside 3479assembler macros (*note Macro::), bundle-locked sequences may be nested. 3480That is, a second '.bundle_lock' directive before the next 3481'.bundle_unlock' directive has no effect except that it must be matched 3482by another closing '.bundle_unlock' so that there is the same number of 3483'.bundle_lock' and '.bundle_unlock' directives. 3484 3485 3486File: as.info, Node: Byte, Next: CFI directives, Prev: Bundle directives, Up: Pseudo Ops 3487 34887.10 '.byte EXPRESSIONS' 3489======================== 3490 3491'.byte' expects zero or more expressions, separated by commas. Each 3492expression is assembled into the next byte. 3493 3494 3495File: as.info, Node: CFI directives, Next: Comm, Prev: Byte, Up: Pseudo Ops 3496 34977.11 CFI directives 3498=================== 3499 35007.11.1 '.cfi_sections SECTION_LIST' 3501----------------------------------- 3502 3503'.cfi_sections' may be used to specify whether CFI directives should 3504emit '.eh_frame' section and/or '.debug_frame' section. If SECTION_LIST 3505is '.eh_frame', '.eh_frame' is emitted, if SECTION_LIST is 3506'.debug_frame', '.debug_frame' is emitted. To emit both use '.eh_frame, 3507.debug_frame'. The default if this directive is not used is 3508'.cfi_sections .eh_frame'. 3509 3510 On targets that support compact unwinding tables these can be 3511generated by specifying '.eh_frame_entry' instead of '.eh_frame'. 3512 3513 Some targets may support an additional name, such as '.c6xabi.exidx' 3514which is used by the target. 3515 3516 The '.cfi_sections' directive can be repeated, with the same or 3517different arguments, provided that CFI generation has not yet started. 3518Once CFI generation has started however the section list is fixed and 3519any attempts to redefine it will result in an error. 3520 35217.11.2 '.cfi_startproc [simple]' 3522-------------------------------- 3523 3524'.cfi_startproc' is used at the beginning of each function that should 3525have an entry in '.eh_frame'. It initializes some internal data 3526structures. Don't forget to close the function by '.cfi_endproc'. 3527 3528 Unless '.cfi_startproc' is used along with parameter 'simple' it also 3529emits some architecture dependent initial CFI instructions. 3530 35317.11.3 '.cfi_endproc' 3532--------------------- 3533 3534'.cfi_endproc' is used at the end of a function where it closes its 3535unwind entry previously opened by '.cfi_startproc', and emits it to 3536'.eh_frame'. 3537 35387.11.4 '.cfi_personality ENCODING [, EXP]' 3539------------------------------------------ 3540 3541'.cfi_personality' defines personality routine and its encoding. 3542ENCODING must be a constant determining how the personality should be 3543encoded. If it is 255 ('DW_EH_PE_omit'), second argument is not 3544present, otherwise second argument should be a constant or a symbol 3545name. When using indirect encodings, the symbol provided should be the 3546location where personality can be loaded from, not the personality 3547routine itself. The default after '.cfi_startproc' is '.cfi_personality 35480xff', no personality routine. 3549 35507.11.5 '.cfi_personality_id ID' 3551------------------------------- 3552 3553'cfi_personality_id' defines a personality routine by its index as 3554defined in a compact unwinding format. Only valid when generating 3555compact EH frames (i.e. with '.cfi_sections eh_frame_entry'. 3556 35577.11.6 '.cfi_fde_data [OPCODE1 [, ...]]' 3558---------------------------------------- 3559 3560'cfi_fde_data' is used to describe the compact unwind opcodes to be used 3561for the current function. These are emitted inline in the 3562'.eh_frame_entry' section if small enough and there is no LSDA, or in 3563the '.gnu.extab' section otherwise. Only valid when generating compact 3564EH frames (i.e. with '.cfi_sections eh_frame_entry'. 3565 35667.11.7 '.cfi_lsda ENCODING [, EXP]' 3567----------------------------------- 3568 3569'.cfi_lsda' defines LSDA and its encoding. ENCODING must be a constant 3570determining how the LSDA should be encoded. If it is 255 3571('DW_EH_PE_omit'), the second argument is not present, otherwise the 3572second argument should be a constant or a symbol name. The default 3573after '.cfi_startproc' is '.cfi_lsda 0xff', meaning that no LSDA is 3574present. 3575 35767.11.8 '.cfi_inline_lsda' [ALIGN] 3577--------------------------------- 3578 3579'.cfi_inline_lsda' marks the start of a LSDA data section and switches 3580to the corresponding '.gnu.extab' section. Must be preceded by a CFI 3581block containing a '.cfi_lsda' directive. Only valid when generating 3582compact EH frames (i.e. with '.cfi_sections eh_frame_entry'. 3583 3584 The table header and unwinding opcodes will be generated at this 3585point, so that they are immediately followed by the LSDA data. The 3586symbol referenced by the '.cfi_lsda' directive should still be defined 3587in case a fallback FDE based encoding is used. The LSDA data is 3588terminated by a section directive. 3589 3590 The optional ALIGN argument specifies the alignment required. The 3591alignment is specified as a power of two, as with the '.p2align' 3592directive. 3593 35947.11.9 '.cfi_def_cfa REGISTER, OFFSET' 3595-------------------------------------- 3596 3597'.cfi_def_cfa' defines a rule for computing CFA as: take address from 3598REGISTER and add OFFSET to it. 3599 36007.11.10 '.cfi_def_cfa_register REGISTER' 3601---------------------------------------- 3602 3603'.cfi_def_cfa_register' modifies a rule for computing CFA. From now on 3604REGISTER will be used instead of the old one. Offset remains the same. 3605 36067.11.11 '.cfi_def_cfa_offset OFFSET' 3607------------------------------------ 3608 3609'.cfi_def_cfa_offset' modifies a rule for computing CFA. Register 3610remains the same, but OFFSET is new. Note that it is the absolute 3611offset that will be added to a defined register to compute CFA address. 3612 36137.11.12 '.cfi_adjust_cfa_offset OFFSET' 3614--------------------------------------- 3615 3616Same as '.cfi_def_cfa_offset' but OFFSET is a relative value that is 3617added/subtracted from the previous offset. 3618 36197.11.13 '.cfi_offset REGISTER, OFFSET' 3620-------------------------------------- 3621 3622Previous value of REGISTER is saved at offset OFFSET from CFA. 3623 36247.11.14 '.cfi_val_offset REGISTER, OFFSET' 3625------------------------------------------ 3626 3627Previous value of REGISTER is CFA + OFFSET. 3628 36297.11.15 '.cfi_rel_offset REGISTER, OFFSET' 3630------------------------------------------ 3631 3632Previous value of REGISTER is saved at offset OFFSET from the current 3633CFA register. This is transformed to '.cfi_offset' using the known 3634displacement of the CFA register from the CFA. This is often easier to 3635use, because the number will match the code it's annotating. 3636 36377.11.16 '.cfi_register REGISTER1, REGISTER2' 3638-------------------------------------------- 3639 3640Previous value of REGISTER1 is saved in register REGISTER2. 3641 36427.11.17 '.cfi_restore REGISTER' 3643------------------------------- 3644 3645'.cfi_restore' says that the rule for REGISTER is now the same as it was 3646at the beginning of the function, after all initial instruction added by 3647'.cfi_startproc' were executed. 3648 36497.11.18 '.cfi_undefined REGISTER' 3650--------------------------------- 3651 3652From now on the previous value of REGISTER can't be restored anymore. 3653 36547.11.19 '.cfi_same_value REGISTER' 3655---------------------------------- 3656 3657Current value of REGISTER is the same like in the previous frame, i.e. 3658no restoration needed. 3659 36607.11.20 '.cfi_remember_state' and '.cfi_restore_state' 3661------------------------------------------------------ 3662 3663'.cfi_remember_state' pushes the set of rules for every register onto an 3664implicit stack, while '.cfi_restore_state' pops them off the stack and 3665places them in the current row. This is useful for situations where you 3666have multiple '.cfi_*' directives that need to be undone due to the 3667control flow of the program. For example, we could have something like 3668this (assuming the CFA is the value of 'rbp'): 3669 3670 je label 3671 popq %rbx 3672 .cfi_restore %rbx 3673 popq %r12 3674 .cfi_restore %r12 3675 popq %rbp 3676 .cfi_restore %rbp 3677 .cfi_def_cfa %rsp, 8 3678 ret 3679 label: 3680 /* Do something else */ 3681 3682 Here, we want the '.cfi' directives to affect only the rows 3683corresponding to the instructions before 'label'. This means we'd have 3684to add multiple '.cfi' directives after 'label' to recreate the original 3685save locations of the registers, as well as setting the CFA back to the 3686value of 'rbp'. This would be clumsy, and result in a larger binary 3687size. Instead, we can write: 3688 3689 je label 3690 popq %rbx 3691 .cfi_remember_state 3692 .cfi_restore %rbx 3693 popq %r12 3694 .cfi_restore %r12 3695 popq %rbp 3696 .cfi_restore %rbp 3697 .cfi_def_cfa %rsp, 8 3698 ret 3699 label: 3700 .cfi_restore_state 3701 /* Do something else */ 3702 3703 That way, the rules for the instructions after 'label' will be the 3704same as before the first '.cfi_restore' without having to use multiple 3705'.cfi' directives. 3706 37077.11.21 '.cfi_return_column REGISTER' 3708------------------------------------- 3709 3710Change return column REGISTER, i.e. the return address is either 3711directly in REGISTER or can be accessed by rules for REGISTER. 3712 37137.11.22 '.cfi_signal_frame' 3714--------------------------- 3715 3716Mark current function as signal trampoline. 3717 37187.11.23 '.cfi_window_save' 3719-------------------------- 3720 3721SPARC register window has been saved. 3722 37237.11.24 '.cfi_escape' EXPRESSION[, ...] 3724--------------------------------------- 3725 3726Allows the user to add arbitrary bytes to the unwind info. One might 3727use this to add OS-specific CFI opcodes, or generic CFI opcodes that GAS 3728does not yet support. 3729 37307.11.25 '.cfi_val_encoded_addr REGISTER, ENCODING, LABEL' 3731--------------------------------------------------------- 3732 3733The current value of REGISTER is LABEL. The value of LABEL will be 3734encoded in the output file according to ENCODING; see the description of 3735'.cfi_personality' for details on this encoding. 3736 3737 The usefulness of equating a register to a fixed label is probably 3738limited to the return address register. Here, it can be useful to mark 3739a code segment that has only one return address which is reached by a 3740direct branch and no copy of the return address exists in memory or 3741another register. 3742 3743 3744File: as.info, Node: Comm, Next: Data, Prev: CFI directives, Up: Pseudo Ops 3745 37467.12 '.comm SYMBOL , LENGTH ' 3747============================= 3748 3749'.comm' declares a common symbol named SYMBOL. When linking, a common 3750symbol in one object file may be merged with a defined or common symbol 3751of the same name in another object file. If 'ld' does not see a 3752definition for the symbol-just one or more common symbols-then it will 3753allocate LENGTH bytes of uninitialized memory. LENGTH must be an 3754absolute expression. If 'ld' sees multiple common symbols with the same 3755name, and they do not all have the same size, it will allocate space 3756using the largest size. 3757 3758 When using ELF or (as a GNU extension) PE, the '.comm' directive 3759takes an optional third argument. This is the desired alignment of the 3760symbol, specified for ELF as a byte boundary (for example, an alignment 3761of 16 means that the least significant 4 bits of the address should be 3762zero), and for PE as a power of two (for example, an alignment of 5 3763means aligned to a 32-byte boundary). The alignment must be an absolute 3764expression, and it must be a power of two. If 'ld' allocates 3765uninitialized memory for the common symbol, it will use the alignment 3766when placing the symbol. If no alignment is specified, 'as' will set 3767the alignment to the largest power of two less than or equal to the size 3768of the symbol, up to a maximum of 16 on ELF, or the default section 3769alignment of 4 on PE(1). 3770 3771 The syntax for '.comm' differs slightly on the HPPA. The syntax is 3772'SYMBOL .comm, LENGTH'; SYMBOL is optional. 3773 3774 ---------- Footnotes ---------- 3775 3776 (1) This is not the same as the executable image file alignment 3777controlled by 'ld''s '--section-alignment' option; image file sections 3778in PE are aligned to multiples of 4096, which is far too large an 3779alignment for ordinary variables. It is rather the default alignment 3780for (non-debug) sections within object ('*.o') files, which are less 3781strictly aligned. 3782 3783 3784File: as.info, Node: Data, Next: Dc, Prev: Comm, Up: Pseudo Ops 3785 37867.13 '.data SUBSECTION' 3787======================= 3788 3789'.data' tells 'as' to assemble the following statements onto the end of 3790the data subsection numbered SUBSECTION (which is an absolute 3791expression). If SUBSECTION is omitted, it defaults to zero. 3792 3793 3794File: as.info, Node: Dc, Next: Dcb, Prev: Data, Up: Pseudo Ops 3795 37967.14 '.dc[SIZE] EXPRESSIONS' 3797============================ 3798 3799The '.dc' directive expects zero or more EXPRESSIONS separated by 3800commas. These expressions are evaluated and their values inserted into 3801the current section. The size of the emitted value depends upon the 3802suffix to the '.dc' directive: 3803 3804''.a'' 3805 Emits N-bit values, where N is the size of an address on the target 3806 system. 3807''.b'' 3808 Emits 8-bit values. 3809''.d'' 3810 Emits double precision floating-point values. 3811''.l'' 3812 Emits 32-bit values. 3813''.s'' 3814 Emits single precision floating-point values. 3815''.w'' 3816 Emits 16-bit values. Note - this is true even on targets where the 3817 '.word' directive would emit 32-bit values. 3818''.x'' 3819 Emits long double precision floating-point values. 3820 3821 If no suffix is used then '.w' is assumed. 3822 3823 The byte ordering is target dependent, as is the size and format of 3824floating point values. 3825 3826 3827File: as.info, Node: Dcb, Next: Ds, Prev: Dc, Up: Pseudo Ops 3828 38297.15 '.dcb[SIZE] NUMBER [,FILL]' 3830================================ 3831 3832This directive emits NUMBER copies of FILL, each of SIZE bytes. Both 3833NUMBER and FILL are absolute expressions. If the comma and FILL are 3834omitted, FILL is assumed to be zero. The SIZE suffix, if present, must 3835be one of: 3836 3837''.b'' 3838 Emits single byte values. 3839''.d'' 3840 Emits double-precision floating point values. 3841''.l'' 3842 Emits 4-byte values. 3843''.s'' 3844 Emits single-precision floating point values. 3845''.w'' 3846 Emits 2-byte values. 3847''.x'' 3848 Emits long double-precision floating point values. 3849 3850 If the SIZE suffix is omitted then '.w' is assumed. 3851 3852 The byte ordering is target dependent, as is the size and format of 3853floating point values. 3854 3855 3856File: as.info, Node: Ds, Next: Def, Prev: Dcb, Up: Pseudo Ops 3857 38587.16 '.ds[SIZE] NUMBER [,FILL]' 3859=============================== 3860 3861This directive emits NUMBER copies of FILL, each of SIZE bytes. Both 3862NUMBER and FILL are absolute expressions. If the comma and FILL are 3863omitted, FILL is assumed to be zero. The SIZE suffix, if present, must 3864be one of: 3865 3866''.b'' 3867 Emits single byte values. 3868''.d'' 3869 Emits 8-byte values. 3870''.l'' 3871 Emits 4-byte values. 3872''.p'' 3873 Emits 12-byte values. 3874''.s'' 3875 Emits 4-byte values. 3876''.w'' 3877 Emits 2-byte values. 3878''.x'' 3879 Emits 12-byte values. 3880 3881 Note - unlike the '.dcb' directive the '.d', '.s' and '.x' suffixes 3882do not indicate that floating-point values are to be inserted. 3883 3884 If the SIZE suffix is omitted then '.w' is assumed. 3885 3886 The byte ordering is target dependent. 3887 3888 3889File: as.info, Node: Def, Next: Desc, Prev: Ds, Up: Pseudo Ops 3890 38917.17 '.def NAME' 3892================ 3893 3894Begin defining debugging information for a symbol NAME; the definition 3895extends until the '.endef' directive is encountered. 3896 3897 3898File: as.info, Node: Desc, Next: Dim, Prev: Def, Up: Pseudo Ops 3899 39007.18 '.desc SYMBOL, ABS-EXPRESSION' 3901=================================== 3902 3903This directive sets the descriptor of the symbol (*note Symbol 3904Attributes::) to the low 16 bits of an absolute expression. 3905 3906 The '.desc' directive is not available when 'as' is configured for 3907COFF output; it is only for 'a.out' or 'b.out' object format. For the 3908sake of compatibility, 'as' accepts it, but produces no output, when 3909configured for COFF. 3910 3911 3912File: as.info, Node: Dim, Next: Double, Prev: Desc, Up: Pseudo Ops 3913 39147.19 '.dim' 3915=========== 3916 3917This directive is generated by compilers to include auxiliary debugging 3918information in the symbol table. It is only permitted inside 3919'.def'/'.endef' pairs. 3920 3921 3922File: as.info, Node: Double, Next: Eject, Prev: Dim, Up: Pseudo Ops 3923 39247.20 '.double FLONUMS' 3925====================== 3926 3927'.double' expects zero or more flonums, separated by commas. It 3928assembles floating point numbers. The exact kind of floating point 3929numbers emitted depends on how 'as' is configured. *Note Machine 3930Dependencies::. 3931 3932 3933File: as.info, Node: Eject, Next: Else, Prev: Double, Up: Pseudo Ops 3934 39357.21 '.eject' 3936============= 3937 3938Force a page break at this point, when generating assembly listings. 3939 3940 3941File: as.info, Node: Else, Next: Elseif, Prev: Eject, Up: Pseudo Ops 3942 39437.22 '.else' 3944============ 3945 3946'.else' is part of the 'as' support for conditional assembly; see *note 3947'.if': If. It marks the beginning of a section of code to be assembled 3948if the condition for the preceding '.if' was false. 3949 3950 3951File: as.info, Node: Elseif, Next: End, Prev: Else, Up: Pseudo Ops 3952 39537.23 '.elseif' 3954============== 3955 3956'.elseif' is part of the 'as' support for conditional assembly; see 3957*note '.if': If. It is shorthand for beginning a new '.if' block that 3958would otherwise fill the entire '.else' section. 3959 3960 3961File: as.info, Node: End, Next: Endef, Prev: Elseif, Up: Pseudo Ops 3962 39637.24 '.end' 3964=========== 3965 3966'.end' marks the end of the assembly file. 'as' does not process 3967anything in the file past the '.end' directive. 3968 3969 3970File: as.info, Node: Endef, Next: Endfunc, Prev: End, Up: Pseudo Ops 3971 39727.25 '.endef' 3973============= 3974 3975This directive flags the end of a symbol definition begun with '.def'. 3976 3977 3978File: as.info, Node: Endfunc, Next: Endif, Prev: Endef, Up: Pseudo Ops 3979 39807.26 '.endfunc' 3981=============== 3982 3983'.endfunc' marks the end of a function specified with '.func'. 3984 3985 3986File: as.info, Node: Endif, Next: Equ, Prev: Endfunc, Up: Pseudo Ops 3987 39887.27 '.endif' 3989============= 3990 3991'.endif' is part of the 'as' support for conditional assembly; it marks 3992the end of a block of code that is only assembled conditionally. *Note 3993'.if': If. 3994 3995 3996File: as.info, Node: Equ, Next: Equiv, Prev: Endif, Up: Pseudo Ops 3997 39987.28 '.equ SYMBOL, EXPRESSION' 3999============================== 4000 4001This directive sets the value of SYMBOL to EXPRESSION. It is synonymous 4002with '.set'; see *note '.set': Set. 4003 4004 The syntax for 'equ' on the HPPA is 'SYMBOL .equ EXPRESSION'. 4005 4006 The syntax for 'equ' on the Z80 is 'SYMBOL equ EXPRESSION'. On the 4007Z80 it is an error if SYMBOL is already defined, but the symbol is not 4008protected from later redefinition. Compare *note Equiv::. 4009 4010 4011File: as.info, Node: Equiv, Next: Eqv, Prev: Equ, Up: Pseudo Ops 4012 40137.29 '.equiv SYMBOL, EXPRESSION' 4014================================ 4015 4016The '.equiv' directive is like '.equ' and '.set', except that the 4017assembler will signal an error if SYMBOL is already defined. Note a 4018symbol which has been referenced but not actually defined is considered 4019to be undefined. 4020 4021 Except for the contents of the error message, this is roughly 4022equivalent to 4023 .ifdef SYM 4024 .err 4025 .endif 4026 .equ SYM,VAL 4027 plus it protects the symbol from later redefinition. 4028 4029 4030File: as.info, Node: Eqv, Next: Err, Prev: Equiv, Up: Pseudo Ops 4031 40327.30 '.eqv SYMBOL, EXPRESSION' 4033============================== 4034 4035The '.eqv' directive is like '.equiv', but no attempt is made to 4036evaluate the expression or any part of it immediately. Instead each 4037time the resulting symbol is used in an expression, a snapshot of its 4038current value is taken. 4039 4040 4041File: as.info, Node: Err, Next: Error, Prev: Eqv, Up: Pseudo Ops 4042 40437.31 '.err' 4044=========== 4045 4046If 'as' assembles a '.err' directive, it will print an error message 4047and, unless the '-Z' option was used, it will not generate an object 4048file. This can be used to signal an error in conditionally compiled 4049code. 4050 4051 4052File: as.info, Node: Error, Next: Exitm, Prev: Err, Up: Pseudo Ops 4053 40547.32 '.error "STRING"' 4055====================== 4056 4057Similarly to '.err', this directive emits an error, but you can specify 4058a string that will be emitted as the error message. If you don't 4059specify the message, it defaults to '".error directive invoked in source 4060file"'. *Note Error and Warning Messages: Errors. 4061 4062 .error "This code has not been assembled and tested." 4063 4064 4065File: as.info, Node: Exitm, Next: Extern, Prev: Error, Up: Pseudo Ops 4066 40677.33 '.exitm' 4068============= 4069 4070Exit early from the current macro definition. *Note Macro::. 4071 4072 4073File: as.info, Node: Extern, Next: Fail, Prev: Exitm, Up: Pseudo Ops 4074 40757.34 '.extern' 4076============== 4077 4078'.extern' is accepted in the source program--for compatibility with 4079other assemblers--but it is ignored. 'as' treats all undefined symbols 4080as external. 4081 4082 4083File: as.info, Node: Fail, Next: File, Prev: Extern, Up: Pseudo Ops 4084 40857.35 '.fail EXPRESSION' 4086======================= 4087 4088Generates an error or a warning. If the value of the EXPRESSION is 500 4089or more, 'as' will print a warning message. If the value is less than 4090500, 'as' will print an error message. The message will include the 4091value of EXPRESSION. This can occasionally be useful inside complex 4092nested macros or conditional assembly. 4093 4094 4095File: as.info, Node: File, Next: Fill, Prev: Fail, Up: Pseudo Ops 4096 40977.36 '.file' 4098============ 4099 4100There are two different versions of the '.file' directive. Targets that 4101support DWARF2 line number information use the DWARF2 version of 4102'.file'. Other targets use the default version. 4103 4104Default Version 4105--------------- 4106 4107This version of the '.file' directive tells 'as' that we are about to 4108start a new logical file. The syntax is: 4109 4110 .file STRING 4111 4112 STRING is the new file name. In general, the filename is recognized 4113whether or not it is surrounded by quotes '"'; but if you wish to 4114specify an empty file name, you must give the quotes-'""'. This 4115statement may go away in future: it is only recognized to be compatible 4116with old 'as' programs. 4117 4118DWARF2 Version 4119-------------- 4120 4121When emitting DWARF2 line number information, '.file' assigns filenames 4122to the '.debug_line' file name table. The syntax is: 4123 4124 .file FILENO FILENAME 4125 4126 The FILENO operand should be a unique positive integer to use as the 4127index of the entry in the table. The FILENAME operand is a C string 4128literal enclosed in double quotes. The FILENAME can include directory 4129elements. If it does, then the directory will be added to the directory 4130table and the basename will be added to the file table. 4131 4132 The detail of filename indices is exposed to the user because the 4133filename table is shared with the '.debug_info' section of the DWARF2 4134debugging information, and thus the user must know the exact indices 4135that table entries will have. 4136 4137 If DWARF-5 support has been enabled via the '-gdwarf-5' option then 4138an extended version of the 'file' is also allowed: 4139 4140 .file FILENO [DIRNAME] FILENAME [md5 VALUE] 4141 4142 With this version a separate directory name is allowed, although if 4143this is used then FILENAME should not contain any directory components. 4144In addtion an md5 hash value of the contents of FILENAME can be 4145provided. This will be stored in the the file table as well, and can be 4146used by tools reading the debug information to verify that the contents 4147of the source file match the contents of the compiled file. 4148 4149 4150File: as.info, Node: Fill, Next: Float, Prev: File, Up: Pseudo Ops 4151 41527.37 '.fill REPEAT , SIZE , VALUE' 4153================================== 4154 4155REPEAT, SIZE and VALUE are absolute expressions. This emits REPEAT 4156copies of SIZE bytes. REPEAT may be zero or more. SIZE may be zero or 4157more, but if it is more than 8, then it is deemed to have the value 8, 4158compatible with other people's assemblers. The contents of each REPEAT 4159bytes is taken from an 8-byte number. The highest order 4 bytes are 4160zero. The lowest order 4 bytes are VALUE rendered in the byte-order of 4161an integer on the computer 'as' is assembling for. Each SIZE bytes in a 4162repetition is taken from the lowest order SIZE bytes of this number. 4163Again, this bizarre behavior is compatible with other people's 4164assemblers. 4165 4166 SIZE and VALUE are optional. If the second comma and VALUE are 4167absent, VALUE is assumed zero. If the first comma and following tokens 4168are absent, SIZE is assumed to be 1. 4169 4170 4171File: as.info, Node: Float, Next: Func, Prev: Fill, Up: Pseudo Ops 4172 41737.38 '.float FLONUMS' 4174===================== 4175 4176This directive assembles zero or more flonums, separated by commas. It 4177has the same effect as '.single'. The exact kind of floating point 4178numbers emitted depends on how 'as' is configured. *Note Machine 4179Dependencies::. 4180 4181 4182File: as.info, Node: Func, Next: Global, Prev: Float, Up: Pseudo Ops 4183 41847.39 '.func NAME[,LABEL]' 4185========================= 4186 4187'.func' emits debugging information to denote function NAME, and is 4188ignored unless the file is assembled with debugging enabled. Only 4189'--gstabs[+]' is currently supported. LABEL is the entry point of the 4190function and if omitted NAME prepended with the 'leading char' is used. 4191'leading char' is usually '_' or nothing, depending on the target. All 4192functions are currently defined to have 'void' return type. The 4193function must be terminated with '.endfunc'. 4194 4195 4196File: as.info, Node: Global, Next: Gnu_attribute, Prev: Func, Up: Pseudo Ops 4197 41987.40 '.global SYMBOL', '.globl SYMBOL' 4199====================================== 4200 4201'.global' makes the symbol visible to 'ld'. If you define SYMBOL in 4202your partial program, its value is made available to other partial 4203programs that are linked with it. Otherwise, SYMBOL takes its 4204attributes from a symbol of the same name from another file linked into 4205the same program. 4206 4207 Both spellings ('.globl' and '.global') are accepted, for 4208compatibility with other assemblers. 4209 4210 On the HPPA, '.global' is not always enough to make it accessible to 4211other partial programs. You may need the HPPA-only '.EXPORT' directive 4212as well. *Note HPPA Assembler Directives: HPPA Directives. 4213 4214 4215File: as.info, Node: Gnu_attribute, Next: Hidden, Prev: Global, Up: Pseudo Ops 4216 42177.41 '.gnu_attribute TAG,VALUE' 4218=============================== 4219 4220Record a GNU object attribute for this file. *Note Object Attributes::. 4221 4222 4223File: as.info, Node: Hidden, Next: hword, Prev: Gnu_attribute, Up: Pseudo Ops 4224 42257.42 '.hidden NAMES' 4226==================== 4227 4228This is one of the ELF visibility directives. The other two are 4229'.internal' (*note '.internal': Internal.) and '.protected' (*note 4230'.protected': Protected.). 4231 4232 This directive overrides the named symbols default visibility (which 4233is set by their binding: local, global or weak). The directive sets the 4234visibility to 'hidden' which means that the symbols are not visible to 4235other components. Such symbols are always considered to be 'protected' 4236as well. 4237 4238 4239File: as.info, Node: hword, Next: Ident, Prev: Hidden, Up: Pseudo Ops 4240 42417.43 '.hword EXPRESSIONS' 4242========================= 4243 4244This expects zero or more EXPRESSIONS, and emits a 16 bit number for 4245each. 4246 4247 This directive is a synonym for '.short'; depending on the target 4248architecture, it may also be a synonym for '.word'. 4249 4250 4251File: as.info, Node: Ident, Next: If, Prev: hword, Up: Pseudo Ops 4252 42537.44 '.ident' 4254============= 4255 4256This directive is used by some assemblers to place tags in object files. 4257The behavior of this directive varies depending on the target. When 4258using the a.out object file format, 'as' simply accepts the directive 4259for source-file compatibility with existing assemblers, but does not 4260emit anything for it. When using COFF, comments are emitted to the 4261'.comment' or '.rdata' section, depending on the target. When using 4262ELF, comments are emitted to the '.comment' section. 4263 4264 4265File: as.info, Node: If, Next: Incbin, Prev: Ident, Up: Pseudo Ops 4266 42677.45 '.if ABSOLUTE EXPRESSION' 4268============================== 4269 4270'.if' marks the beginning of a section of code which is only considered 4271part of the source program being assembled if the argument (which must 4272be an ABSOLUTE EXPRESSION) is non-zero. The end of the conditional 4273section of code must be marked by '.endif' (*note '.endif': Endif.); 4274optionally, you may include code for the alternative condition, flagged 4275by '.else' (*note '.else': Else.). If you have several conditions to 4276check, '.elseif' may be used to avoid nesting blocks if/else within each 4277subsequent '.else' block. 4278 4279 The following variants of '.if' are also supported: 4280'.ifdef SYMBOL' 4281 Assembles the following section of code if the specified SYMBOL has 4282 been defined. Note a symbol which has been referenced but not yet 4283 defined is considered to be undefined. 4284 4285'.ifb TEXT' 4286 Assembles the following section of code if the operand is blank 4287 (empty). 4288 4289'.ifc STRING1,STRING2' 4290 Assembles the following section of code if the two strings are the 4291 same. The strings may be optionally quoted with single quotes. If 4292 they are not quoted, the first string stops at the first comma, and 4293 the second string stops at the end of the line. Strings which 4294 contain whitespace should be quoted. The string comparison is case 4295 sensitive. 4296 4297'.ifeq ABSOLUTE EXPRESSION' 4298 Assembles the following section of code if the argument is zero. 4299 4300'.ifeqs STRING1,STRING2' 4301 Another form of '.ifc'. The strings must be quoted using double 4302 quotes. 4303 4304'.ifge ABSOLUTE EXPRESSION' 4305 Assembles the following section of code if the argument is greater 4306 than or equal to zero. 4307 4308'.ifgt ABSOLUTE EXPRESSION' 4309 Assembles the following section of code if the argument is greater 4310 than zero. 4311 4312'.ifle ABSOLUTE EXPRESSION' 4313 Assembles the following section of code if the argument is less 4314 than or equal to zero. 4315 4316'.iflt ABSOLUTE EXPRESSION' 4317 Assembles the following section of code if the argument is less 4318 than zero. 4319 4320'.ifnb TEXT' 4321 Like '.ifb', but the sense of the test is reversed: this assembles 4322 the following section of code if the operand is non-blank 4323 (non-empty). 4324 4325'.ifnc STRING1,STRING2.' 4326 Like '.ifc', but the sense of the test is reversed: this assembles 4327 the following section of code if the two strings are not the same. 4328 4329'.ifndef SYMBOL' 4330'.ifnotdef SYMBOL' 4331 Assembles the following section of code if the specified SYMBOL has 4332 not been defined. Both spelling variants are equivalent. Note a 4333 symbol which has been referenced but not yet defined is considered 4334 to be undefined. 4335 4336'.ifne ABSOLUTE EXPRESSION' 4337 Assembles the following section of code if the argument is not 4338 equal to zero (in other words, this is equivalent to '.if'). 4339 4340'.ifnes STRING1,STRING2' 4341 Like '.ifeqs', but the sense of the test is reversed: this 4342 assembles the following section of code if the two strings are not 4343 the same. 4344 4345 4346File: as.info, Node: Incbin, Next: Include, Prev: If, Up: Pseudo Ops 4347 43487.46 '.incbin "FILE"[,SKIP[,COUNT]]' 4349==================================== 4350 4351The 'incbin' directive includes FILE verbatim at the current location. 4352You can control the search paths used with the '-I' command-line option 4353(*note Command-Line Options: Invoking.). Quotation marks are required 4354around FILE. 4355 4356 The SKIP argument skips a number of bytes from the start of the FILE. 4357The COUNT argument indicates the maximum number of bytes to read. Note 4358that the data is not aligned in any way, so it is the user's 4359responsibility to make sure that proper alignment is provided both 4360before and after the 'incbin' directive. 4361 4362 4363File: as.info, Node: Include, Next: Int, Prev: Incbin, Up: Pseudo Ops 4364 43657.47 '.include "FILE"' 4366====================== 4367 4368This directive provides a way to include supporting files at specified 4369points in your source program. The code from FILE is assembled as if it 4370followed the point of the '.include'; when the end of the included file 4371is reached, assembly of the original file continues. You can control 4372the search paths used with the '-I' command-line option (*note 4373Command-Line Options: Invoking.). Quotation marks are required around 4374FILE. 4375 4376 4377File: as.info, Node: Int, Next: Internal, Prev: Include, Up: Pseudo Ops 4378 43797.48 '.int EXPRESSIONS' 4380======================= 4381 4382Expect zero or more EXPRESSIONS, of any section, separated by commas. 4383For each expression, emit a number that, at run time, is the value of 4384that expression. The byte order and bit size of the number depends on 4385what kind of target the assembly is for. 4386 4387 4388File: as.info, Node: Internal, Next: Irp, Prev: Int, Up: Pseudo Ops 4389 43907.49 '.internal NAMES' 4391====================== 4392 4393This is one of the ELF visibility directives. The other two are 4394'.hidden' (*note '.hidden': Hidden.) and '.protected' (*note 4395'.protected': Protected.). 4396 4397 This directive overrides the named symbols default visibility (which 4398is set by their binding: local, global or weak). The directive sets the 4399visibility to 'internal' which means that the symbols are considered to 4400be 'hidden' (i.e., not visible to other components), and that some 4401extra, processor specific processing must also be performed upon the 4402symbols as well. 4403 4404 4405File: as.info, Node: Irp, Next: Irpc, Prev: Internal, Up: Pseudo Ops 4406 44077.50 '.irp SYMBOL,VALUES'... 4408============================ 4409 4410Evaluate a sequence of statements assigning different values to SYMBOL. 4411The sequence of statements starts at the '.irp' directive, and is 4412terminated by an '.endr' directive. For each VALUE, SYMBOL is set to 4413VALUE, and the sequence of statements is assembled. If no VALUE is 4414listed, the sequence of statements is assembled once, with SYMBOL set to 4415the null string. To refer to SYMBOL within the sequence of statements, 4416use \SYMBOL. 4417 4418 For example, assembling 4419 4420 .irp param,1,2,3 4421 move d\param,sp@- 4422 .endr 4423 4424 is equivalent to assembling 4425 4426 move d1,sp@- 4427 move d2,sp@- 4428 move d3,sp@- 4429 4430 For some caveats with the spelling of SYMBOL, see also *note Macro::. 4431 4432 4433File: as.info, Node: Irpc, Next: Lcomm, Prev: Irp, Up: Pseudo Ops 4434 44357.51 '.irpc SYMBOL,VALUES'... 4436============================= 4437 4438Evaluate a sequence of statements assigning different values to SYMBOL. 4439The sequence of statements starts at the '.irpc' directive, and is 4440terminated by an '.endr' directive. For each character in VALUE, SYMBOL 4441is set to the character, and the sequence of statements is assembled. 4442If no VALUE is listed, the sequence of statements is assembled once, 4443with SYMBOL set to the null string. To refer to SYMBOL within the 4444sequence of statements, use \SYMBOL. 4445 4446 For example, assembling 4447 4448 .irpc param,123 4449 move d\param,sp@- 4450 .endr 4451 4452 is equivalent to assembling 4453 4454 move d1,sp@- 4455 move d2,sp@- 4456 move d3,sp@- 4457 4458 For some caveats with the spelling of SYMBOL, see also the discussion 4459at *Note Macro::. 4460 4461 4462File: as.info, Node: Lcomm, Next: Lflags, Prev: Irpc, Up: Pseudo Ops 4463 44647.52 '.lcomm SYMBOL , LENGTH' 4465============================= 4466 4467Reserve LENGTH (an absolute expression) bytes for a local common denoted 4468by SYMBOL. The section and value of SYMBOL are those of the new local 4469common. The addresses are allocated in the bss section, so that at 4470run-time the bytes start off zeroed. SYMBOL is not declared global 4471(*note '.global': Global.), so is normally not visible to 'ld'. 4472 4473 Some targets permit a third argument to be used with '.lcomm'. This 4474argument specifies the desired alignment of the symbol in the bss 4475section. 4476 4477 The syntax for '.lcomm' differs slightly on the HPPA. The syntax is 4478'SYMBOL .lcomm, LENGTH'; SYMBOL is optional. 4479 4480 4481File: as.info, Node: Lflags, Next: Line, Prev: Lcomm, Up: Pseudo Ops 4482 44837.53 '.lflags' 4484============== 4485 4486'as' accepts this directive, for compatibility with other assemblers, 4487but ignores it. 4488 4489 4490File: as.info, Node: Line, Next: Linkonce, Prev: Lflags, Up: Pseudo Ops 4491 44927.54 '.line LINE-NUMBER' 4493======================== 4494 4495Change the logical line number. LINE-NUMBER must be an absolute 4496expression. The next line has that logical line number. Therefore any 4497other statements on the current line (after a statement separator 4498character) are reported as on logical line number LINE-NUMBER - 1. One 4499day 'as' will no longer support this directive: it is recognized only 4500for compatibility with existing assembler programs. 4501 4502 Even though this is a directive associated with the 'a.out' or 4503'b.out' object-code formats, 'as' still recognizes it when producing 4504COFF output, and treats '.line' as though it were the COFF '.ln' _if_ it 4505is found outside a '.def'/'.endef' pair. 4506 4507 Inside a '.def', '.line' is, instead, one of the directives used by 4508compilers to generate auxiliary symbol information for debugging. 4509 4510 4511File: as.info, Node: Linkonce, Next: List, Prev: Line, Up: Pseudo Ops 4512 45137.55 '.linkonce [TYPE]' 4514======================= 4515 4516Mark the current section so that the linker only includes a single copy 4517of it. This may be used to include the same section in several 4518different object files, but ensure that the linker will only include it 4519once in the final output file. The '.linkonce' pseudo-op must be used 4520for each instance of the section. Duplicate sections are detected based 4521on the section name, so it should be unique. 4522 4523 This directive is only supported by a few object file formats; as of 4524this writing, the only object file format which supports it is the 4525Portable Executable format used on Windows NT. 4526 4527 The TYPE argument is optional. If specified, it must be one of the 4528following strings. For example: 4529 .linkonce same_size 4530 Not all types may be supported on all object file formats. 4531 4532'discard' 4533 Silently discard duplicate sections. This is the default. 4534 4535'one_only' 4536 Warn if there are duplicate sections, but still keep only one copy. 4537 4538'same_size' 4539 Warn if any of the duplicates have different sizes. 4540 4541'same_contents' 4542 Warn if any of the duplicates do not have exactly the same 4543 contents. 4544 4545 4546File: as.info, Node: List, Next: Ln, Prev: Linkonce, Up: Pseudo Ops 4547 45487.56 '.list' 4549============ 4550 4551Control (in conjunction with the '.nolist' directive) whether or not 4552assembly listings are generated. These two directives maintain an 4553internal counter (which is zero initially). '.list' increments the 4554counter, and '.nolist' decrements it. Assembly listings are generated 4555whenever the counter is greater than zero. 4556 4557 By default, listings are disabled. When you enable them (with the 4558'-a' command-line option; *note Command-Line Options: Invoking.), the 4559initial value of the listing counter is one. 4560 4561 4562File: as.info, Node: Ln, Next: Loc, Prev: List, Up: Pseudo Ops 4563 45647.57 '.ln LINE-NUMBER' 4565====================== 4566 4567'.ln' is a synonym for '.line'. 4568 4569 4570File: as.info, Node: Loc, Next: Loc_mark_labels, Prev: Ln, Up: Pseudo Ops 4571 45727.58 '.loc FILENO LINENO [COLUMN] [OPTIONS]' 4573============================================ 4574 4575When emitting DWARF2 line number information, the '.loc' directive will 4576add a row to the '.debug_line' line number matrix corresponding to the 4577immediately following assembly instruction. The FILENO, LINENO, and 4578optional COLUMN arguments will be applied to the '.debug_line' state 4579machine before the row is added. It is an error for the input assembly 4580file to generate a non-empty '.debug_line' and also use 'loc' 4581directives. 4582 4583 The OPTIONS are a sequence of the following tokens in any order: 4584 4585'basic_block' 4586 This option will set the 'basic_block' register in the 4587 '.debug_line' state machine to 'true'. 4588 4589'prologue_end' 4590 This option will set the 'prologue_end' register in the 4591 '.debug_line' state machine to 'true'. 4592 4593'epilogue_begin' 4594 This option will set the 'epilogue_begin' register in the 4595 '.debug_line' state machine to 'true'. 4596 4597'is_stmt VALUE' 4598 This option will set the 'is_stmt' register in the '.debug_line' 4599 state machine to 'value', which must be either 0 or 1. 4600 4601'isa VALUE' 4602 This directive will set the 'isa' register in the '.debug_line' 4603 state machine to VALUE, which must be an unsigned integer. 4604 4605'discriminator VALUE' 4606 This directive will set the 'discriminator' register in the 4607 '.debug_line' state machine to VALUE, which must be an unsigned 4608 integer. 4609 4610'view VALUE' 4611 This option causes a row to be added to '.debug_line' in reference 4612 to the current address (which might not be the same as that of the 4613 following assembly instruction), and to associate VALUE with the 4614 'view' register in the '.debug_line' state machine. If VALUE is a 4615 label, both the 'view' register and the label are set to the number 4616 of prior '.loc' directives at the same program location. If VALUE 4617 is the literal '0', the 'view' register is set to zero, and the 4618 assembler asserts that there aren't any prior '.loc' directives at 4619 the same program location. If VALUE is the literal '-0', the 4620 assembler arrange for the 'view' register to be reset in this row, 4621 even if there are prior '.loc' directives at the same program 4622 location. 4623 4624 4625File: as.info, Node: Loc_mark_labels, Next: Local, Prev: Loc, Up: Pseudo Ops 4626 46277.59 '.loc_mark_labels ENABLE' 4628============================== 4629 4630When emitting DWARF2 line number information, the '.loc_mark_labels' 4631directive makes the assembler emit an entry to the '.debug_line' line 4632number matrix with the 'basic_block' register in the state machine set 4633whenever a code label is seen. The ENABLE argument should be either 1 4634or 0, to enable or disable this function respectively. 4635 4636 4637File: as.info, Node: Local, Next: Long, Prev: Loc_mark_labels, Up: Pseudo Ops 4638 46397.60 '.local NAMES' 4640=================== 4641 4642This directive, which is available for ELF targets, marks each symbol in 4643the comma-separated list of 'names' as a local symbol so that it will 4644not be externally visible. If the symbols do not already exist, they 4645will be created. 4646 4647 For targets where the '.lcomm' directive (*note Lcomm::) does not 4648accept an alignment argument, which is the case for most ELF targets, 4649the '.local' directive can be used in combination with '.comm' (*note 4650Comm::) to define aligned local common data. 4651 4652 4653File: as.info, Node: Long, Next: Macro, Prev: Local, Up: Pseudo Ops 4654 46557.61 '.long EXPRESSIONS' 4656======================== 4657 4658'.long' is the same as '.int'. *Note '.int': Int. 4659 4660 4661File: as.info, Node: Macro, Next: MRI, Prev: Long, Up: Pseudo Ops 4662 46637.62 '.macro' 4664============= 4665 4666The commands '.macro' and '.endm' allow you to define macros that 4667generate assembly output. For example, this definition specifies a 4668macro 'sum' that puts a sequence of numbers into memory: 4669 4670 .macro sum from=0, to=5 4671 .long \from 4672 .if \to-\from 4673 sum "(\from+1)",\to 4674 .endif 4675 .endm 4676 4677With that definition, 'SUM 0,5' is equivalent to this assembly input: 4678 4679 .long 0 4680 .long 1 4681 .long 2 4682 .long 3 4683 .long 4 4684 .long 5 4685 4686'.macro MACNAME' 4687'.macro MACNAME MACARGS ...' 4688 Begin the definition of a macro called MACNAME. If your macro 4689 definition requires arguments, specify their names after the macro 4690 name, separated by commas or spaces. You can qualify the macro 4691 argument to indicate whether all invocations must specify a 4692 non-blank value (through ':'req''), or whether it takes all of the 4693 remaining arguments (through ':'vararg''). You can supply a 4694 default value for any macro argument by following the name with 4695 '=DEFLT'. You cannot define two macros with the same MACNAME 4696 unless it has been subject to the '.purgem' directive (*note 4697 Purgem::) between the two definitions. For example, these are all 4698 valid '.macro' statements: 4699 4700 '.macro comm' 4701 Begin the definition of a macro called 'comm', which takes no 4702 arguments. 4703 4704 '.macro plus1 p, p1' 4705 '.macro plus1 p p1' 4706 Either statement begins the definition of a macro called 4707 'plus1', which takes two arguments; within the macro 4708 definition, write '\p' or '\p1' to evaluate the arguments. 4709 4710 '.macro reserve_str p1=0 p2' 4711 Begin the definition of a macro called 'reserve_str', with two 4712 arguments. The first argument has a default value, but not 4713 the second. After the definition is complete, you can call 4714 the macro either as 'reserve_str A,B' (with '\p1' evaluating 4715 to A and '\p2' evaluating to B), or as 'reserve_str ,B' (with 4716 '\p1' evaluating as the default, in this case '0', and '\p2' 4717 evaluating to B). 4718 4719 '.macro m p1:req, p2=0, p3:vararg' 4720 Begin the definition of a macro called 'm', with at least 4721 three arguments. The first argument must always have a value 4722 specified, but not the second, which instead has a default 4723 value. The third formal will get assigned all remaining 4724 arguments specified at invocation time. 4725 4726 When you call a macro, you can specify the argument values 4727 either by position, or by keyword. For example, 'sum 9,17' is 4728 equivalent to 'sum to=17, from=9'. 4729 4730 Note that since each of the MACARGS can be an identifier exactly as 4731 any other one permitted by the target architecture, there may be 4732 occasional problems if the target hand-crafts special meanings to 4733 certain characters when they occur in a special position. For 4734 example, if the colon (':') is generally permitted to be part of a 4735 symbol name, but the architecture specific code special-cases it 4736 when occurring as the final character of a symbol (to denote a 4737 label), then the macro parameter replacement code will have no way 4738 of knowing that and consider the whole construct (including the 4739 colon) an identifier, and check only this identifier for being the 4740 subject to parameter substitution. So for example this macro 4741 definition: 4742 4743 .macro label l 4744 \l: 4745 .endm 4746 4747 might not work as expected. Invoking 'label foo' might not create 4748 a label called 'foo' but instead just insert the text '\l:' into 4749 the assembler source, probably generating an error about an 4750 unrecognised identifier. 4751 4752 Similarly problems might occur with the period character ('.') 4753 which is often allowed inside opcode names (and hence identifier 4754 names). So for example constructing a macro to build an opcode 4755 from a base name and a length specifier like this: 4756 4757 .macro opcode base length 4758 \base.\length 4759 .endm 4760 4761 and invoking it as 'opcode store l' will not create a 'store.l' 4762 instruction but instead generate some kind of error as the 4763 assembler tries to interpret the text '\base.\length'. 4764 4765 There are several possible ways around this problem: 4766 4767 'Insert white space' 4768 If it is possible to use white space characters then this is 4769 the simplest solution. eg: 4770 4771 .macro label l 4772 \l : 4773 .endm 4774 4775 'Use '\()'' 4776 The string '\()' can be used to separate the end of a macro 4777 argument from the following text. eg: 4778 4779 .macro opcode base length 4780 \base\().\length 4781 .endm 4782 4783 'Use the alternate macro syntax mode' 4784 In the alternative macro syntax mode the ampersand character 4785 ('&') can be used as a separator. eg: 4786 4787 .altmacro 4788 .macro label l 4789 l&: 4790 .endm 4791 4792 Note: this problem of correctly identifying string parameters to 4793 pseudo ops also applies to the identifiers used in '.irp' (*note 4794 Irp::) and '.irpc' (*note Irpc::) as well. 4795 4796'.endm' 4797 Mark the end of a macro definition. 4798 4799'.exitm' 4800 Exit early from the current macro definition. 4801 4802'\@' 4803 'as' maintains a counter of how many macros it has executed in this 4804 pseudo-variable; you can copy that number to your output with '\@', 4805 but _only within a macro definition_. 4806 4807'LOCAL NAME [ , ... ]' 4808 _Warning: 'LOCAL' is only available if you select "alternate macro 4809 syntax" with '--alternate' or '.altmacro'._ *Note '.altmacro': 4810 Altmacro. 4811 4812 4813File: as.info, Node: MRI, Next: Noaltmacro, Prev: Macro, Up: Pseudo Ops 4814 48157.63 '.mri VAL' 4816=============== 4817 4818If VAL is non-zero, this tells 'as' to enter MRI mode. If VAL is zero, 4819this tells 'as' to exit MRI mode. This change affects code assembled 4820until the next '.mri' directive, or until the end of the file. *Note 4821MRI mode: M. 4822 4823 4824File: as.info, Node: Noaltmacro, Next: Nolist, Prev: MRI, Up: Pseudo Ops 4825 48267.64 '.noaltmacro' 4827================== 4828 4829Disable alternate macro mode. *Note Altmacro::. 4830 4831 4832File: as.info, Node: Nolist, Next: Nop, Prev: Noaltmacro, Up: Pseudo Ops 4833 48347.65 '.nolist' 4835============== 4836 4837Control (in conjunction with the '.list' directive) whether or not 4838assembly listings are generated. These two directives maintain an 4839internal counter (which is zero initially). '.list' increments the 4840counter, and '.nolist' decrements it. Assembly listings are generated 4841whenever the counter is greater than zero. 4842 4843 4844File: as.info, Node: Nop, Next: Nops, Prev: Nolist, Up: Pseudo Ops 4845 48467.66 '.nop [SIZE]' 4847================== 4848 4849This directive emits no-op instructions. It is provided on all 4850architectures, allowing the creation of architecture neutral tests 4851involving actual code. The size of the generated instruction is target 4852specific, but if the optional SIZE argument is given and resolves to an 4853absolute positive value at that point in assembly (no forward 4854expressions allowed) then the fewest no-op instructions are emitted that 4855equal or exceed a total SIZE in bytes. '.nop' does affect the 4856generation of DWARF debug line information. Some targets do not support 4857using '.nop' with SIZE. 4858 4859 4860File: as.info, Node: Nops, Next: Octa, Prev: Nop, Up: Pseudo Ops 4861 48627.67 '.nops SIZE[, CONTROL]' 4863============================ 4864 4865This directive emits no-op instructions. It is specific to the Intel 486680386 and AMD x86-64 targets. It takes a SIZE argument and generates 4867SIZE bytes of no-op instructions. SIZE must be absolute and positive. 4868These bytes do not affect the generation of DWARF debug line 4869information. 4870 4871 The optional CONTROL argument specifies a size limit for a single 4872no-op instruction. If not provided then a value of 0 is assumed. The 4873valid values of CONTROL are between 0 and 4 in 16-bit mode, between 0 4874and 7 when tuning for older processors in 32-bit mode, between 0 and 11 4875in 64-bit mode or when tuning for newer processors in 32-bit mode. When 48760 is used, the no-op instruction size limit is set to the maximum 4877supported size. 4878 4879 4880File: as.info, Node: Octa, Next: Offset, Prev: Nops, Up: Pseudo Ops 4881 48827.68 '.octa BIGNUMS' 4883==================== 4884 4885This directive expects zero or more bignums, separated by commas. For 4886each bignum, it emits a 16-byte integer. 4887 4888 The term "octa" comes from contexts in which a "word" is two bytes; 4889hence _octa_-word for 16 bytes. 4890 4891 4892File: as.info, Node: Offset, Next: Org, Prev: Octa, Up: Pseudo Ops 4893 48947.69 '.offset LOC' 4895================== 4896 4897Set the location counter to LOC in the absolute section. LOC must be an 4898absolute expression. This directive may be useful for defining symbols 4899with absolute values. Do not confuse it with the '.org' directive. 4900 4901 4902File: as.info, Node: Org, Next: P2align, Prev: Offset, Up: Pseudo Ops 4903 49047.70 '.org NEW-LC , FILL' 4905========================= 4906 4907Advance the location counter of the current section to NEW-LC. NEW-LC 4908is either an absolute expression or an expression with the same section 4909as the current subsection. That is, you can't use '.org' to cross 4910sections: if NEW-LC has the wrong section, the '.org' directive is 4911ignored. To be compatible with former assemblers, if the section of 4912NEW-LC is absolute, 'as' issues a warning, then pretends the section of 4913NEW-LC is the same as the current subsection. 4914 4915 '.org' may only increase the location counter, or leave it unchanged; 4916you cannot use '.org' to move the location counter backwards. 4917 4918 Because 'as' tries to assemble programs in one pass, NEW-LC may not 4919be undefined. If you really detest this restriction we eagerly await a 4920chance to share your improved assembler. 4921 4922 Beware that the origin is relative to the start of the section, not 4923to the start of the subsection. This is compatible with other people's 4924assemblers. 4925 4926 When the location counter (of the current subsection) is advanced, 4927the intervening bytes are filled with FILL which should be an absolute 4928expression. If the comma and FILL are omitted, FILL defaults to zero. 4929 4930 4931File: as.info, Node: P2align, Next: PopSection, Prev: Org, Up: Pseudo Ops 4932 49337.71 '.p2align[wl] [ABS-EXPR[, ABS-EXPR[, ABS-EXPR]]]' 4934====================================================== 4935 4936Pad the location counter (in the current subsection) to a particular 4937storage boundary. The first expression (which must be absolute) is the 4938number of low-order zero bits the location counter must have after 4939advancement. For example '.p2align 3' advances the location counter 4940until it is a multiple of 8. If the location counter is already a 4941multiple of 8, no change is needed. If the expression is omitted then a 4942default value of 0 is used, effectively disabling alignment 4943requirements. 4944 4945 The second expression (also absolute) gives the fill value to be 4946stored in the padding bytes. It (and the comma) may be omitted. If it 4947is omitted, the padding bytes are normally zero. However, on most 4948systems, if the section is marked as containing code and the fill value 4949is omitted, the space is filled with no-op instructions. 4950 4951 The third expression is also absolute, and is also optional. If it 4952is present, it is the maximum number of bytes that should be skipped by 4953this alignment directive. If doing the alignment would require skipping 4954more bytes than the specified maximum, then the alignment is not done at 4955all. You can omit the fill value (the second argument) entirely by 4956simply using two commas after the required alignment; this can be useful 4957if you want the alignment to be filled with no-op instructions when 4958appropriate. 4959 4960 The '.p2alignw' and '.p2alignl' directives are variants of the 4961'.p2align' directive. The '.p2alignw' directive treats the fill pattern 4962as a two byte word value. The '.p2alignl' directives treats the fill 4963pattern as a four byte longword value. For example, '.p2alignw 49642,0x368d' will align to a multiple of 4. If it skips two bytes, they 4965will be filled in with the value 0x368d (the exact placement of the 4966bytes depends upon the endianness of the processor). If it skips 1 or 3 4967bytes, the fill value is undefined. 4968 4969 4970File: as.info, Node: PopSection, Next: Previous, Prev: P2align, Up: Pseudo Ops 4971 49727.72 '.popsection' 4973================== 4974 4975This is one of the ELF section stack manipulation directives. The 4976others are '.section' (*note Section::), '.subsection' (*note 4977SubSection::), '.pushsection' (*note PushSection::), and '.previous' 4978(*note Previous::). 4979 4980 This directive replaces the current section (and subsection) with the 4981top section (and subsection) on the section stack. This section is 4982popped off the stack. 4983 4984 4985File: as.info, Node: Previous, Next: Print, Prev: PopSection, Up: Pseudo Ops 4986 49877.73 '.previous' 4988================ 4989 4990This is one of the ELF section stack manipulation directives. The 4991others are '.section' (*note Section::), '.subsection' (*note 4992SubSection::), '.pushsection' (*note PushSection::), and '.popsection' 4993(*note PopSection::). 4994 4995 This directive swaps the current section (and subsection) with most 4996recently referenced section/subsection pair prior to this one. Multiple 4997'.previous' directives in a row will flip between two sections (and 4998their subsections). For example: 4999 5000 .section A 5001 .subsection 1 5002 .word 0x1234 5003 .subsection 2 5004 .word 0x5678 5005 .previous 5006 .word 0x9abc 5007 5008 Will place 0x1234 and 0x9abc into subsection 1 and 0x5678 into 5009subsection 2 of section A. Whilst: 5010 5011 .section A 5012 .subsection 1 5013 # Now in section A subsection 1 5014 .word 0x1234 5015 .section B 5016 .subsection 0 5017 # Now in section B subsection 0 5018 .word 0x5678 5019 .subsection 1 5020 # Now in section B subsection 1 5021 .word 0x9abc 5022 .previous 5023 # Now in section B subsection 0 5024 .word 0xdef0 5025 5026 Will place 0x1234 into section A, 0x5678 and 0xdef0 into subsection 0 5027of section B and 0x9abc into subsection 1 of section B. 5028 5029 In terms of the section stack, this directive swaps the current 5030section with the top section on the section stack. 5031 5032 5033File: as.info, Node: Print, Next: Protected, Prev: Previous, Up: Pseudo Ops 5034 50357.74 '.print STRING' 5036==================== 5037 5038'as' will print STRING on the standard output during assembly. You must 5039put STRING in double quotes. 5040 5041 5042File: as.info, Node: Protected, Next: Psize, Prev: Print, Up: Pseudo Ops 5043 50447.75 '.protected NAMES' 5045======================= 5046 5047This is one of the ELF visibility directives. The other two are 5048'.hidden' (*note Hidden::) and '.internal' (*note Internal::). 5049 5050 This directive overrides the named symbols default visibility (which 5051is set by their binding: local, global or weak). The directive sets the 5052visibility to 'protected' which means that any references to the symbols 5053from within the components that defines them must be resolved to the 5054definition in that component, even if a definition in another component 5055would normally preempt this. 5056 5057 5058File: as.info, Node: Psize, Next: Purgem, Prev: Protected, Up: Pseudo Ops 5059 50607.76 '.psize LINES , COLUMNS' 5061============================= 5062 5063Use this directive to declare the number of lines--and, optionally, the 5064number of columns--to use for each page, when generating listings. 5065 5066 If you do not use '.psize', listings use a default line-count of 60. 5067You may omit the comma and COLUMNS specification; the default width is 5068200 columns. 5069 5070 'as' generates formfeeds whenever the specified number of lines is 5071exceeded (or whenever you explicitly request one, using '.eject'). 5072 5073 If you specify LINES as '0', no formfeeds are generated save those 5074explicitly specified with '.eject'. 5075 5076 5077File: as.info, Node: Purgem, Next: PushSection, Prev: Psize, Up: Pseudo Ops 5078 50797.77 '.purgem NAME' 5080=================== 5081 5082Undefine the macro NAME, so that later uses of the string will not be 5083expanded. *Note Macro::. 5084 5085 5086File: as.info, Node: PushSection, Next: Quad, Prev: Purgem, Up: Pseudo Ops 5087 50887.78 '.pushsection NAME [, SUBSECTION] [, "FLAGS"[, @TYPE[,ARGUMENTS]]]' 5089======================================================================== 5090 5091This is one of the ELF section stack manipulation directives. The 5092others are '.section' (*note Section::), '.subsection' (*note 5093SubSection::), '.popsection' (*note PopSection::), and '.previous' 5094(*note Previous::). 5095 5096 This directive pushes the current section (and subsection) onto the 5097top of the section stack, and then replaces the current section and 5098subsection with 'name' and 'subsection'. The optional 'flags', 'type' 5099and 'arguments' are treated the same as in the '.section' (*note 5100Section::) directive. 5101 5102 5103File: as.info, Node: Quad, Next: Reloc, Prev: PushSection, Up: Pseudo Ops 5104 51057.79 '.quad BIGNUMS' 5106==================== 5107 5108'.quad' expects zero or more bignums, separated by commas. For each 5109bignum, it emits an 8-byte integer. If the bignum won't fit in 8 bytes, 5110it prints a warning message; and just takes the lowest order 8 bytes of 5111the bignum. 5112 5113 The term "quad" comes from contexts in which a "word" is two bytes; 5114hence _quad_-word for 8 bytes. 5115 5116 5117File: as.info, Node: Reloc, Next: Rept, Prev: Quad, Up: Pseudo Ops 5118 51197.80 '.reloc OFFSET, RELOC_NAME[, EXPRESSION]' 5120============================================== 5121 5122Generate a relocation at OFFSET of type RELOC_NAME with value 5123EXPRESSION. If OFFSET is a number, the relocation is generated in the 5124current section. If OFFSET is an expression that resolves to a symbol 5125plus offset, the relocation is generated in the given symbol's section. 5126EXPRESSION, if present, must resolve to a symbol plus addend or to an 5127absolute value, but note that not all targets support an addend. e.g. 5128ELF REL targets such as i386 store an addend in the section contents 5129rather than in the relocation. This low level interface does not 5130support addends stored in the section. 5131 5132 5133File: as.info, Node: Rept, Next: Sbttl, Prev: Reloc, Up: Pseudo Ops 5134 51357.81 '.rept COUNT' 5136================== 5137 5138Repeat the sequence of lines between the '.rept' directive and the next 5139'.endr' directive COUNT times. 5140 5141 For example, assembling 5142 5143 .rept 3 5144 .long 0 5145 .endr 5146 5147 is equivalent to assembling 5148 5149 .long 0 5150 .long 0 5151 .long 0 5152 5153 A count of zero is allowed, but nothing is generated. Negative 5154counts are not allowed and if encountered will be treated as if they 5155were zero. 5156 5157 5158File: as.info, Node: Sbttl, Next: Scl, Prev: Rept, Up: Pseudo Ops 5159 51607.82 '.sbttl "SUBHEADING"' 5161========================== 5162 5163Use SUBHEADING as the title (third line, immediately after the title 5164line) when generating assembly listings. 5165 5166 This directive affects subsequent pages, as well as the current page 5167if it appears within ten lines of the top of a page. 5168 5169 5170File: as.info, Node: Scl, Next: Section, Prev: Sbttl, Up: Pseudo Ops 5171 51727.83 '.scl CLASS' 5173================= 5174 5175Set the storage-class value for a symbol. This directive may only be 5176used inside a '.def'/'.endef' pair. Storage class may flag whether a 5177symbol is static or external, or it may record further symbolic 5178debugging information. 5179 5180 5181File: as.info, Node: Section, Next: Set, Prev: Scl, Up: Pseudo Ops 5182 51837.84 '.section NAME' 5184==================== 5185 5186Use the '.section' directive to assemble the following code into a 5187section named NAME. 5188 5189 This directive is only supported for targets that actually support 5190arbitrarily named sections; on 'a.out' targets, for example, it is not 5191accepted, even with a standard 'a.out' section name. 5192 5193COFF Version 5194------------ 5195 5196For COFF targets, the '.section' directive is used in one of the 5197following ways: 5198 5199 .section NAME[, "FLAGS"] 5200 .section NAME[, SUBSECTION] 5201 5202 If the optional argument is quoted, it is taken as flags to use for 5203the section. Each flag is a single character. The following flags are 5204recognized: 5205 5206'b' 5207 bss section (uninitialized data) 5208'n' 5209 section is not loaded 5210'w' 5211 writable section 5212'd' 5213 data section 5214'e' 5215 exclude section from linking 5216'r' 5217 read-only section 5218'x' 5219 executable section 5220's' 5221 shared section (meaningful for PE targets) 5222'a' 5223 ignored. (For compatibility with the ELF version) 5224'y' 5225 section is not readable (meaningful for PE targets) 5226'0-9' 5227 single-digit power-of-two section alignment (GNU extension) 5228 5229 If no flags are specified, the default flags depend upon the section 5230name. If the section name is not recognized, the default will be for 5231the section to be loaded and writable. Note the 'n' and 'w' flags 5232remove attributes from the section, rather than adding them, so if they 5233are used on their own it will be as if no flags had been specified at 5234all. 5235 5236 If the optional argument to the '.section' directive is not quoted, 5237it is taken as a subsection number (*note Sub-Sections::). 5238 5239ELF Version 5240----------- 5241 5242This is one of the ELF section stack manipulation directives. The 5243others are '.subsection' (*note SubSection::), '.pushsection' (*note 5244PushSection::), '.popsection' (*note PopSection::), and '.previous' 5245(*note Previous::). 5246 5247 For ELF targets, the '.section' directive is used like this: 5248 5249 .section NAME [, "FLAGS"[, @TYPE[,FLAG_SPECIFIC_ARGUMENTS]]] 5250 5251 If the '--sectname-subst' command-line option is provided, the NAME 5252argument may contain a substitution sequence. Only '%S' is supported at 5253the moment, and substitutes the current section name. For example: 5254 5255 .macro exception_code 5256 .section %S.exception 5257 [exception code here] 5258 .previous 5259 .endm 5260 5261 .text 5262 [code] 5263 exception_code 5264 [...] 5265 5266 .section .init 5267 [init code] 5268 exception_code 5269 [...] 5270 5271 The two 'exception_code' invocations above would create the 5272'.text.exception' and '.init.exception' sections respectively. This is 5273useful e.g. to discriminate between ancillary sections that are tied to 5274setup code to be discarded after use from ancillary sections that need 5275to stay resident without having to define multiple 'exception_code' 5276macros just for that purpose. 5277 5278 The optional FLAGS argument is a quoted string which may contain any 5279combination of the following characters: 5280 5281'a' 5282 section is allocatable 5283'd' 5284 section is a GNU_MBIND section 5285'e' 5286 section is excluded from executable and shared library. 5287'o' 5288 section references a symbol defined in another section (the 5289 linked-to section) in the same file. 5290'w' 5291 section is writable 5292'x' 5293 section is executable 5294'M' 5295 section is mergeable 5296'S' 5297 section contains zero terminated strings 5298'G' 5299 section is a member of a section group 5300'T' 5301 section is used for thread-local-storage 5302'?' 5303 section is a member of the previously-current section's group, if 5304 any 5305'R' 5306 retained section (apply SHF_GNU_RETAIN to prevent linker garbage 5307 collection, GNU ELF extension) 5308'<number>' 5309 a numeric value indicating the bits to be set in the ELF section 5310 header's flags field. Note - if one or more of the alphabetic 5311 characters described above is also included in the flags field, 5312 their bit values will be ORed into the resulting value. 5313'<target specific>' 5314 some targets extend this list with their own flag characters 5315 5316 Note - once a section's flags have been set they cannot be changed. 5317There are a few exceptions to this rule however. Processor and 5318application specific flags can be added to an already defined section. 5319The '.interp', '.strtab' and '.symtab' sections can have the allocate 5320flag ('a') set after they are initially defined, and the 5321'.note-GNU-stack' section may have the executable ('x') flag added. 5322Also note that the '.attach_to_group' directive can be used to add a 5323section to a group even if the section was not originally declared to be 5324part of that group. 5325 5326 The optional TYPE argument may contain one of the following 5327constants: 5328 5329'@progbits' 5330 section contains data 5331'@nobits' 5332 section does not contain data (i.e., section only occupies space) 5333'@note' 5334 section contains data which is used by things other than the 5335 program 5336'@init_array' 5337 section contains an array of pointers to init functions 5338'@fini_array' 5339 section contains an array of pointers to finish functions 5340'@preinit_array' 5341 section contains an array of pointers to pre-init functions 5342'@<number>' 5343 a numeric value to be set as the ELF section header's type field. 5344'@<target specific>' 5345 some targets extend this list with their own types 5346 5347 Many targets only support the first three section types. The type 5348may be enclosed in double quotes if necessary. 5349 5350 Note on targets where the '@' character is the start of a comment (eg 5351ARM) then another character is used instead. For example the ARM port 5352uses the '%' character. 5353 5354 Note - some sections, eg '.text' and '.data' are considered to be 5355special and have fixed types. Any attempt to declare them with a 5356different type will generate an error from the assembler. 5357 5358 If FLAGS contains the 'M' symbol then the TYPE argument must be 5359specified as well as an extra argument--ENTSIZE--like this: 5360 5361 .section NAME , "FLAGS"M, @TYPE, ENTSIZE 5362 5363 Sections with the 'M' flag but not 'S' flag must contain fixed size 5364constants, each ENTSIZE octets long. Sections with both 'M' and 'S' 5365must contain zero terminated strings where each character is ENTSIZE 5366bytes long. The linker may remove duplicates within sections with the 5367same name, same entity size and same flags. ENTSIZE must be an absolute 5368expression. For sections with both 'M' and 'S', a string which is a 5369suffix of a larger string is considered a duplicate. Thus '"def"' will 5370be merged with '"abcdef"'; A reference to the first '"def"' will be 5371changed to a reference to '"abcdef"+3'. 5372 5373 If FLAGS contains the 'o' flag, then the TYPE argument must be 5374present along with an additional field like this: 5375 5376 .section NAME,"FLAGS"o,@TYPE,SYMBOLNAME|SECTIONINDEX 5377 5378 The SYMBOLNAME field specifies the symbol name which the section 5379references. Alternatively a numeric SECTIONINDEX can be provided. This 5380is not generally a good idea as section indicies are rarely known at 5381assembly time, but the facility is provided for testing purposes. An 5382index of zero is allowed. It indicates that the linked-to section has 5383already been discarded. 5384 5385 Note: If both the M and O flags are present, then the fields for the 5386Merge flag should come first, like this: 5387 5388 .section NAME,"FLAGS"Mo,@TYPE,ENTSIZE,SYMBOLNAME 5389 5390 If FLAGS contains the 'G' symbol then the TYPE argument must be 5391present along with an additional field like this: 5392 5393 .section NAME , "FLAGS"G, @TYPE, GROUPNAME[, LINKAGE] 5394 5395 The GROUPNAME field specifies the name of the section group to which 5396this particular section belongs. The optional linkage field can 5397contain: 5398 5399'comdat' 5400 indicates that only one copy of this section should be retained 5401'.gnu.linkonce' 5402 an alias for comdat 5403 5404 Note: if both the M and G flags are present then the fields for the 5405Merge flag should come first, like this: 5406 5407 .section NAME , "FLAGS"MG, @TYPE, ENTSIZE, GROUPNAME[, LINKAGE] 5408 5409 If both 'o' flag and 'G' flag are present, then the SYMBOLNAME field 5410for 'o' comes first, like this: 5411 5412 .section NAME,"FLAGS"oG,@TYPE,SYMBOLNAME,GROUPNAME[,LINKAGE] 5413 5414 If FLAGS contains the '?' symbol then it may not also contain the 'G' 5415symbol and the GROUPNAME or LINKAGE fields should not be present. 5416Instead, '?' says to consider the section that's current before this 5417directive. If that section used 'G', then the new section will use 'G' 5418with those same GROUPNAME and LINKAGE fields implicitly. If not, then 5419the '?' symbol has no effect. 5420 5421 The optional UNIQUE,'<NUMBER>' argument must come last. It assigns 5422'<NUMBER>' as a unique section ID to distinguish different sections with 5423the same section name like these: 5424 5425 .section NAME,"FLAGS",@TYPE,UNIQUE,<NUMBER> 5426 .section NAME,"FLAGS"G,@TYPE,GROUPNAME,[LINKAGE],UNIQUE,<NUMBER> 5427 .section NAME,"FLAGS"MG,@TYPE,ENTSIZE,GROUPNAME[,LINKAGE],UNIQUE,<NUMBER> 5428 5429 The valid values of '<NUMBER>' are between 0 and 4294967295. 5430 5431 If no flags are specified, the default flags depend upon the section 5432name. If the section name is not recognized, the default will be for 5433the section to have none of the above flags: it will not be allocated in 5434memory, nor writable, nor executable. The section will contain data. 5435 5436 For ELF targets, the assembler supports another type of '.section' 5437directive for compatibility with the Solaris assembler: 5438 5439 .section "NAME"[, FLAGS...] 5440 5441 Note that the section name is quoted. There may be a sequence of 5442comma separated flags: 5443 5444'#alloc' 5445 section is allocatable 5446'#write' 5447 section is writable 5448'#execinstr' 5449 section is executable 5450'#exclude' 5451 section is excluded from executable and shared library. 5452'#tls' 5453 section is used for thread local storage 5454 5455 This directive replaces the current section and subsection. See the 5456contents of the gas testsuite directory 'gas/testsuite/gas/elf' for some 5457examples of how this directive and the other section stack directives 5458work. 5459 5460 5461File: as.info, Node: Set, Next: Short, Prev: Section, Up: Pseudo Ops 5462 54637.85 '.set SYMBOL, EXPRESSION' 5464============================== 5465 5466Set the value of SYMBOL to EXPRESSION. This changes SYMBOL's value and 5467type to conform to EXPRESSION. If SYMBOL was flagged as external, it 5468remains flagged (*note Symbol Attributes::). 5469 5470 You may '.set' a symbol many times in the same assembly provided that 5471the values given to the symbol are constants. Values that are based on 5472expressions involving other symbols are allowed, but some targets may 5473restrict this to only being done once per assembly. This is because 5474those targets do not set the addresses of symbols at assembly time, but 5475rather delay the assignment until a final link is performed. This 5476allows the linker a chance to change the code in the files, changing the 5477location of, and the relative distance between, various different 5478symbols. 5479 5480 If you '.set' a global symbol, the value stored in the object file is 5481the last value stored into it. 5482 5483 On Z80 'set' is a real instruction, use '.set' or 'SYMBOL defl 5484EXPRESSION' instead. 5485 5486 5487File: as.info, Node: Short, Next: Single, Prev: Set, Up: Pseudo Ops 5488 54897.86 '.short EXPRESSIONS' 5490========================= 5491 5492'.short' is normally the same as '.word'. *Note '.word': Word. 5493 5494 In some configurations, however, '.short' and '.word' generate 5495numbers of different lengths. *Note Machine Dependencies::. 5496 5497 5498File: as.info, Node: Single, Next: Size, Prev: Short, Up: Pseudo Ops 5499 55007.87 '.single FLONUMS' 5501====================== 5502 5503This directive assembles zero or more flonums, separated by commas. It 5504has the same effect as '.float'. The exact kind of floating point 5505numbers emitted depends on how 'as' is configured. *Note Machine 5506Dependencies::. 5507 5508 5509File: as.info, Node: Size, Next: Skip, Prev: Single, Up: Pseudo Ops 5510 55117.88 '.size' 5512============ 5513 5514This directive is used to set the size associated with a symbol. 5515 5516COFF Version 5517------------ 5518 5519For COFF targets, the '.size' directive is only permitted inside 5520'.def'/'.endef' pairs. It is used like this: 5521 5522 .size EXPRESSION 5523 5524ELF Version 5525----------- 5526 5527For ELF targets, the '.size' directive is used like this: 5528 5529 .size NAME , EXPRESSION 5530 5531 This directive sets the size associated with a symbol NAME. The size 5532in bytes is computed from EXPRESSION which can make use of label 5533arithmetic. This directive is typically used to set the size of 5534function symbols. 5535 5536 5537File: as.info, Node: Skip, Next: Sleb128, Prev: Size, Up: Pseudo Ops 5538 55397.89 '.skip SIZE [,FILL]' 5540========================= 5541 5542This directive emits SIZE bytes, each of value FILL. Both SIZE and FILL 5543are absolute expressions. If the comma and FILL are omitted, FILL is 5544assumed to be zero. This is the same as '.space'. 5545 5546 5547File: as.info, Node: Sleb128, Next: Space, Prev: Skip, Up: Pseudo Ops 5548 55497.90 '.sleb128 EXPRESSIONS' 5550=========================== 5551 5552SLEB128 stands for "signed little endian base 128." This is a compact, 5553variable length representation of numbers used by the DWARF symbolic 5554debugging format. *Note '.uleb128': Uleb128. 5555 5556 5557File: as.info, Node: Space, Next: Stab, Prev: Sleb128, Up: Pseudo Ops 5558 55597.91 '.space SIZE [,FILL]' 5560========================== 5561 5562This directive emits SIZE bytes, each of value FILL. Both SIZE and FILL 5563are absolute expressions. If the comma and FILL are omitted, FILL is 5564assumed to be zero. This is the same as '.skip'. 5565 5566 _Warning:_ '.space' has a completely different meaning for HPPA 5567 targets; use '.block' as a substitute. See 'HP9000 Series 800 5568 Assembly Language Reference Manual' (HP 92432-90001) for the 5569 meaning of the '.space' directive. *Note HPPA Assembler 5570 Directives: HPPA Directives, for a summary. 5571 5572 5573File: as.info, Node: Stab, Next: String, Prev: Space, Up: Pseudo Ops 5574 55757.92 '.stabd, .stabn, .stabs' 5576============================= 5577 5578There are three directives that begin '.stab'. All emit symbols (*note 5579Symbols::), for use by symbolic debuggers. The symbols are not entered 5580in the 'as' hash table: they cannot be referenced elsewhere in the 5581source file. Up to five fields are required: 5582 5583STRING 5584 This is the symbol's name. It may contain any character except 5585 '\000', so is more general than ordinary symbol names. Some 5586 debuggers used to code arbitrarily complex structures into symbol 5587 names using this field. 5588 5589TYPE 5590 An absolute expression. The symbol's type is set to the low 8 bits 5591 of this expression. Any bit pattern is permitted, but 'ld' and 5592 debuggers choke on silly bit patterns. 5593 5594OTHER 5595 An absolute expression. The symbol's "other" attribute is set to 5596 the low 8 bits of this expression. 5597 5598DESC 5599 An absolute expression. The symbol's descriptor is set to the low 5600 16 bits of this expression. 5601 5602VALUE 5603 An absolute expression which becomes the symbol's value. 5604 5605 If a warning is detected while reading a '.stabd', '.stabn', or 5606'.stabs' statement, the symbol has probably already been created; you 5607get a half-formed symbol in your object file. This is compatible with 5608earlier assemblers! 5609 5610'.stabd TYPE , OTHER , DESC' 5611 5612 The "name" of the symbol generated is not even an empty string. It 5613 is a null pointer, for compatibility. Older assemblers used a null 5614 pointer so they didn't waste space in object files with empty 5615 strings. 5616 5617 The symbol's value is set to the location counter, relocatably. 5618 When your program is linked, the value of this symbol is the 5619 address of the location counter when the '.stabd' was assembled. 5620 5621'.stabn TYPE , OTHER , DESC , VALUE' 5622 The name of the symbol is set to the empty string '""'. 5623 5624'.stabs STRING , TYPE , OTHER , DESC , VALUE' 5625 All five fields are specified. 5626 5627 5628File: as.info, Node: String, Next: Struct, Prev: Stab, Up: Pseudo Ops 5629 56307.93 '.string' "STR", '.string8' "STR", '.string16' 5631=================================================== 5632 5633"STR", '.string32' "STR", '.string64' "STR" 5634 5635 Copy the characters in STR to the object file. You may specify more 5636than one string to copy, separated by commas. Unless otherwise 5637specified for a particular machine, the assembler marks the end of each 5638string with a 0 byte. You can use any of the escape sequences described 5639in *note Strings: Strings. 5640 5641 The variants 'string16', 'string32' and 'string64' differ from the 5642'string' pseudo opcode in that each 8-bit character from STR is copied 5643and expanded to 16, 32 or 64 bits respectively. The expanded characters 5644are stored in target endianness byte order. 5645 5646 Example: 5647 .string32 "BYE" 5648 expands to: 5649 .string "B\0\0\0Y\0\0\0E\0\0\0" /* On little endian targets. */ 5650 .string "\0\0\0B\0\0\0Y\0\0\0E" /* On big endian targets. */ 5651 5652 5653File: as.info, Node: Struct, Next: SubSection, Prev: String, Up: Pseudo Ops 5654 56557.94 '.struct EXPRESSION' 5656========================= 5657 5658Switch to the absolute section, and set the section offset to 5659EXPRESSION, which must be an absolute expression. You might use this as 5660follows: 5661 .struct 0 5662 field1: 5663 .struct field1 + 4 5664 field2: 5665 .struct field2 + 4 5666 field3: 5667 This would define the symbol 'field1' to have the value 0, the symbol 5668'field2' to have the value 4, and the symbol 'field3' to have the value 56698. Assembly would be left in the absolute section, and you would need 5670to use a '.section' directive of some sort to change to some other 5671section before further assembly. 5672 5673 5674File: as.info, Node: SubSection, Next: Symver, Prev: Struct, Up: Pseudo Ops 5675 56767.95 '.subsection NAME' 5677======================= 5678 5679This is one of the ELF section stack manipulation directives. The 5680others are '.section' (*note Section::), '.pushsection' (*note 5681PushSection::), '.popsection' (*note PopSection::), and '.previous' 5682(*note Previous::). 5683 5684 This directive replaces the current subsection with 'name'. The 5685current section is not changed. The replaced subsection is put onto the 5686section stack in place of the then current top of stack subsection. 5687 5688 5689File: as.info, Node: Symver, Next: Tag, Prev: SubSection, Up: Pseudo Ops 5690 56917.96 '.symver' 5692============== 5693 5694Use the '.symver' directive to bind symbols to specific version nodes 5695within a source file. This is only supported on ELF platforms, and is 5696typically used when assembling files to be linked into a shared library. 5697There are cases where it may make sense to use this in objects to be 5698bound into an application itself so as to override a versioned symbol 5699from a shared library. 5700 5701 For ELF targets, the '.symver' directive can be used like this: 5702 .symver NAME, NAME2@NODENAME[ ,VISIBILITY] 5703 If the original symbol NAME is defined within the file being 5704assembled, the '.symver' directive effectively creates a symbol alias 5705with the name NAME2@NODENAME, and in fact the main reason that we just 5706don't try and create a regular alias is that the @ character isn't 5707permitted in symbol names. The NAME2 part of the name is the actual 5708name of the symbol by which it will be externally referenced. The name 5709NAME itself is merely a name of convenience that is used so that it is 5710possible to have definitions for multiple versions of a function within 5711a single source file, and so that the compiler can unambiguously know 5712which version of a function is being mentioned. The NODENAME portion of 5713the alias should be the name of a node specified in the version script 5714supplied to the linker when building a shared library. If you are 5715attempting to override a versioned symbol from a shared library, then 5716NODENAME should correspond to the nodename of the symbol you are trying 5717to override. The optional argument VISIBILITY updates the visibility of 5718the original symbol. The valid visibilities are 'local', 'hidden', and 5719'remove'. The 'local' visibility makes the original symbol a local 5720symbol (*note Local::). The 'hidden' visibility sets the visibility of 5721the original symbol to 'hidden' (*note Hidden::). The 'remove' 5722visibility removes the original symbol from the symbol table. If 5723visibility isn't specified, the original symbol is unchanged. 5724 5725 If the symbol NAME is not defined within the file being assembled, 5726all references to NAME will be changed to NAME2@NODENAME. If no 5727reference to NAME is made, NAME2@NODENAME will be removed from the 5728symbol table. 5729 5730 Another usage of the '.symver' directive is: 5731 .symver NAME, NAME2@@NODENAME 5732 In this case, the symbol NAME must exist and be defined within the 5733file being assembled. It is similar to NAME2@NODENAME. The difference 5734is NAME2@@NODENAME will also be used to resolve references to NAME2 by 5735the linker. 5736 5737 The third usage of the '.symver' directive is: 5738 .symver NAME, NAME2@@@NODENAME 5739 When NAME is not defined within the file being assembled, it is 5740treated as NAME2@NODENAME. When NAME is defined within the file being 5741assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME. 5742 5743 5744File: as.info, Node: Tag, Next: Text, Prev: Symver, Up: Pseudo Ops 5745 57467.97 '.tag STRUCTNAME' 5747====================== 5748 5749This directive is generated by compilers to include auxiliary debugging 5750information in the symbol table. It is only permitted inside 5751'.def'/'.endef' pairs. Tags are used to link structure definitions in 5752the symbol table with instances of those structures. 5753 5754 5755File: as.info, Node: Text, Next: Title, Prev: Tag, Up: Pseudo Ops 5756 57577.98 '.text SUBSECTION' 5758======================= 5759 5760Tells 'as' to assemble the following statements onto the end of the text 5761subsection numbered SUBSECTION, which is an absolute expression. If 5762SUBSECTION is omitted, subsection number zero is used. 5763 5764 5765File: as.info, Node: Title, Next: Tls_common, Prev: Text, Up: Pseudo Ops 5766 57677.99 '.title "HEADING"' 5768======================= 5769 5770Use HEADING as the title (second line, immediately after the source file 5771name and pagenumber) when generating assembly listings. 5772 5773 This directive affects subsequent pages, as well as the current page 5774if it appears within ten lines of the top of a page. 5775 5776 5777File: as.info, Node: Tls_common, Next: Type, Prev: Title, Up: Pseudo Ops 5778 57797.100 '.tls_common SYMBOL, LENGTH[, ALIGNMENT]' 5780=============================================== 5781 5782This directive behaves in the same way as the '.comm' directive (*note 5783Comm::) except that SYMBOL has type of STT_TLS instead of STT_OBJECT. 5784 5785 5786File: as.info, Node: Type, Next: Uleb128, Prev: Tls_common, Up: Pseudo Ops 5787 57887.101 '.type' 5789============= 5790 5791This directive is used to set the type of a symbol. 5792 5793COFF Version 5794------------ 5795 5796For COFF targets, this directive is permitted only within 5797'.def'/'.endef' pairs. It is used like this: 5798 5799 .type INT 5800 5801 This records the integer INT as the type attribute of a symbol table 5802entry. 5803 5804ELF Version 5805----------- 5806 5807For ELF targets, the '.type' directive is used like this: 5808 5809 .type NAME , TYPE DESCRIPTION 5810 5811 This sets the type of symbol NAME to be either a function symbol or 5812an object symbol. There are five different syntaxes supported for the 5813TYPE DESCRIPTION field, in order to provide compatibility with various 5814other assemblers. 5815 5816 Because some of the characters used in these syntaxes (such as '@' 5817and '#') are comment characters for some architectures, some of the 5818syntaxes below do not work on all architectures. The first variant will 5819be accepted by the GNU assembler on all architectures so that variant 5820should be used for maximum portability, if you do not need to assemble 5821your code with other assemblers. 5822 5823 The syntaxes supported are: 5824 5825 .type <name> STT_<TYPE_IN_UPPER_CASE> 5826 .type <name>,#<type> 5827 .type <name>,@<type> 5828 .type <name>,%<type> 5829 .type <name>,"<type>" 5830 5831 The types supported are: 5832 5833'STT_FUNC' 5834'function' 5835 Mark the symbol as being a function name. 5836 5837'STT_GNU_IFUNC' 5838'gnu_indirect_function' 5839 Mark the symbol as an indirect function when evaluated during reloc 5840 processing. (This is only supported on assemblers targeting GNU 5841 systems). 5842 5843'STT_OBJECT' 5844'object' 5845 Mark the symbol as being a data object. 5846 5847'STT_TLS' 5848'tls_object' 5849 Mark the symbol as being a thread-local data object. 5850 5851'STT_COMMON' 5852'common' 5853 Mark the symbol as being a common data object. 5854 5855'STT_NOTYPE' 5856'notype' 5857 Does not mark the symbol in any way. It is supported just for 5858 completeness. 5859 5860'gnu_unique_object' 5861 Marks the symbol as being a globally unique data object. The 5862 dynamic linker will make sure that in the entire process there is 5863 just one symbol with this name and type in use. (This is only 5864 supported on assemblers targeting GNU systems). 5865 5866 Changing between incompatible types other than from/to STT_NOTYPE 5867will result in a diagnostic. An intermediate change to STT_NOTYPE will 5868silence this. 5869 5870 Note: Some targets support extra types in addition to those listed 5871above. 5872 5873 5874File: as.info, Node: Uleb128, Next: Val, Prev: Type, Up: Pseudo Ops 5875 58767.102 '.uleb128 EXPRESSIONS' 5877============================ 5878 5879ULEB128 stands for "unsigned little endian base 128." This is a 5880compact, variable length representation of numbers used by the DWARF 5881symbolic debugging format. *Note '.sleb128': Sleb128. 5882 5883 5884File: as.info, Node: Val, Next: Version, Prev: Uleb128, Up: Pseudo Ops 5885 58867.103 '.val ADDR' 5887================= 5888 5889This directive, permitted only within '.def'/'.endef' pairs, records the 5890address ADDR as the value attribute of a symbol table entry. 5891 5892 5893File: as.info, Node: Version, Next: VTableEntry, Prev: Val, Up: Pseudo Ops 5894 58957.104 '.version "STRING"' 5896========================= 5897 5898This directive creates a '.note' section and places into it an ELF 5899formatted note of type NT_VERSION. The note's name is set to 'string'. 5900 5901 5902File: as.info, Node: VTableEntry, Next: VTableInherit, Prev: Version, Up: Pseudo Ops 5903 59047.105 '.vtable_entry TABLE, OFFSET' 5905=================================== 5906 5907This directive finds or creates a symbol 'table' and creates a 5908'VTABLE_ENTRY' relocation for it with an addend of 'offset'. 5909 5910 5911File: as.info, Node: VTableInherit, Next: Warning, Prev: VTableEntry, Up: Pseudo Ops 5912 59137.106 '.vtable_inherit CHILD, PARENT' 5914===================================== 5915 5916This directive finds the symbol 'child' and finds or creates the symbol 5917'parent' and then creates a 'VTABLE_INHERIT' relocation for the parent 5918whose addend is the value of the child symbol. As a special case the 5919parent name of '0' is treated as referring to the '*ABS*' section. 5920 5921 5922File: as.info, Node: Warning, Next: Weak, Prev: VTableInherit, Up: Pseudo Ops 5923 59247.107 '.warning "STRING"' 5925========================= 5926 5927Similar to the directive '.error' (*note '.error "STRING"': Error.), but 5928just emits a warning. 5929 5930 5931File: as.info, Node: Weak, Next: Weakref, Prev: Warning, Up: Pseudo Ops 5932 59337.108 '.weak NAMES' 5934=================== 5935 5936This directive sets the weak attribute on the comma separated list of 5937symbol 'names'. If the symbols do not already exist, they will be 5938created. 5939 5940 On COFF targets other than PE, weak symbols are a GNU extension. 5941This directive sets the weak attribute on the comma separated list of 5942symbol 'names'. If the symbols do not already exist, they will be 5943created. 5944 5945 On the PE target, weak symbols are supported natively as weak 5946aliases. When a weak symbol is created that is not an alias, GAS 5947creates an alternate symbol to hold the default value. 5948 5949 5950File: as.info, Node: Weakref, Next: Word, Prev: Weak, Up: Pseudo Ops 5951 59527.109 '.weakref ALIAS, TARGET' 5953============================== 5954 5955This directive creates an alias to the target symbol that enables the 5956symbol to be referenced with weak-symbol semantics, but without actually 5957making it weak. If direct references or definitions of the symbol are 5958present, then the symbol will not be weak, but if all references to it 5959are through weak references, the symbol will be marked as weak in the 5960symbol table. 5961 5962 The effect is equivalent to moving all references to the alias to a 5963separate assembly source file, renaming the alias to the symbol in it, 5964declaring the symbol as weak there, and running a reloadable link to 5965merge the object files resulting from the assembly of the new source 5966file and the old source file that had the references to the alias 5967removed. 5968 5969 The alias itself never makes to the symbol table, and is entirely 5970handled within the assembler. 5971 5972 5973File: as.info, Node: Word, Next: Zero, Prev: Weakref, Up: Pseudo Ops 5974 59757.110 '.word EXPRESSIONS' 5976========================= 5977 5978This directive expects zero or more EXPRESSIONS, of any section, 5979separated by commas. 5980 5981 The size of the number emitted, and its byte order, depend on what 5982target computer the assembly is for. 5983 5984 _Warning: Special Treatment to support Compilers_ 5985 5986 Machines with a 32-bit address space, but that do less than 32-bit 5987addressing, require the following special treatment. If the machine of 5988interest to you does 32-bit addressing (or doesn't require it; *note 5989Machine Dependencies::), you can ignore this issue. 5990 5991 In order to assemble compiler output into something that works, 'as' 5992occasionally does strange things to '.word' directives. Directives of 5993the form '.word sym1-sym2' are often emitted by compilers as part of 5994jump tables. Therefore, when 'as' assembles a directive of the form 5995'.word sym1-sym2', and the difference between 'sym1' and 'sym2' does not 5996fit in 16 bits, 'as' creates a "secondary jump table", immediately 5997before the next label. This secondary jump table is preceded by a 5998short-jump to the first byte after the secondary table. This short-jump 5999prevents the flow of control from accidentally falling into the new 6000table. Inside the table is a long-jump to 'sym2'. The original '.word' 6001contains 'sym1' minus the address of the long-jump to 'sym2'. 6002 6003 If there were several occurrences of '.word sym1-sym2' before the 6004secondary jump table, all of them are adjusted. If there was a '.word 6005sym3-sym4', that also did not fit in sixteen bits, a long-jump to 'sym4' 6006is included in the secondary jump table, and the '.word' directives are 6007adjusted to contain 'sym3' minus the address of the long-jump to 'sym4'; 6008and so on, for as many entries in the original jump table as necessary. 6009 6010 6011File: as.info, Node: Zero, Next: 2byte, Prev: Word, Up: Pseudo Ops 6012 60137.111 '.zero SIZE' 6014================== 6015 6016This directive emits SIZE 0-valued bytes. SIZE must be an absolute 6017expression. This directive is actually an alias for the '.skip' 6018directive so it can take an optional second argument of the value to 6019store in the bytes instead of zero. Using '.zero' in this way would be 6020confusing however. 6021 6022 6023File: as.info, Node: 2byte, Next: 4byte, Prev: Zero, Up: Pseudo Ops 6024 60257.112 '.2byte EXPRESSION [, EXPRESSION]*' 6026========================================= 6027 6028This directive expects zero or more expressions, separated by commas. 6029If there are no expressions then the directive does nothing. Otherwise 6030each expression is evaluated in turn and placed in the next two bytes of 6031the current output section, using the endian model of the target. If an 6032expression will not fit in two bytes, a warning message is displayed and 6033the least significant two bytes of the expression's value are used. If 6034an expression cannot be evaluated at assembly time then relocations will 6035be generated in order to compute the value at link time. 6036 6037 This directive does not apply any alignment before or after inserting 6038the values. As a result of this, if relocations are generated, they may 6039be different from those used for inserting values with a guaranteed 6040alignment. 6041 6042 This directive is only available for ELF targets, 6043 6044 6045File: as.info, Node: 4byte, Next: 8byte, Prev: 2byte, Up: Pseudo Ops 6046 60477.113 '.4byte EXPRESSION [, EXPRESSION]*' 6048========================================= 6049 6050Like the '.2byte' directive, except that it inserts unaligned, four byte 6051long values into the output. 6052 6053 6054File: as.info, Node: 8byte, Next: Deprecated, Prev: 4byte, Up: Pseudo Ops 6055 60567.114 '.8byte EXPRESSION [, EXPRESSION]*' 6057========================================= 6058 6059Like the '.2byte' directive, except that it inserts unaligned, eight 6060byte long bignum values into the output. 6061 6062 6063File: as.info, Node: Deprecated, Prev: 8byte, Up: Pseudo Ops 6064 60657.115 Deprecated Directives 6066=========================== 6067 6068One day these directives won't work. They are included for 6069compatibility with older assemblers. 6070.abort 6071.line 6072 6073 6074File: as.info, Node: Object Attributes, Next: Machine Dependencies, Prev: Pseudo Ops, Up: Top 6075 60768 Object Attributes 6077******************* 6078 6079'as' assembles source files written for a specific architecture into 6080object files for that architecture. But not all object files are alike. 6081Many architectures support incompatible variations. For instance, 6082floating point arguments might be passed in floating point registers if 6083the object file requires hardware floating point support--or floating 6084point arguments might be passed in integer registers if the object file 6085supports processors with no hardware floating point unit. Or, if two 6086objects are built for different generations of the same architecture, 6087the combination may require the newer generation at run-time. 6088 6089 This information is useful during and after linking. At link time, 6090'ld' can warn about incompatible object files. After link time, tools 6091like 'gdb' can use it to process the linked file correctly. 6092 6093 Compatibility information is recorded as a series of object 6094attributes. Each attribute has a "vendor", "tag", and "value". The 6095vendor is a string, and indicates who sets the meaning of the tag. The 6096tag is an integer, and indicates what property the attribute describes. 6097The value may be a string or an integer, and indicates how the property 6098affects this object. Missing attributes are the same as attributes with 6099a zero value or empty string value. 6100 6101 Object attributes were developed as part of the ABI for the ARM 6102Architecture. The file format is documented in 'ELF for the ARM 6103Architecture'. 6104 6105* Menu: 6106 6107* GNU Object Attributes:: GNU Object Attributes 6108* Defining New Object Attributes:: Defining New Object Attributes 6109 6110 6111File: as.info, Node: GNU Object Attributes, Next: Defining New Object Attributes, Up: Object Attributes 6112 61138.1 GNU Object Attributes 6114========================= 6115 6116The '.gnu_attribute' directive records an object attribute with vendor 6117'gnu'. 6118 6119 Except for 'Tag_compatibility', which has both an integer and a 6120string for its value, GNU attributes have a string value if the tag 6121number is odd and an integer value if the tag number is even. The 6122second bit ('TAG & 2' is set for architecture-independent attributes and 6123clear for architecture-dependent ones. 6124 61258.1.1 Common GNU attributes 6126--------------------------- 6127 6128These attributes are valid on all architectures. 6129 6130Tag_compatibility (32) 6131 The compatibility attribute takes an integer flag value and a 6132 vendor name. If the flag value is 0, the file is compatible with 6133 other toolchains. If it is 1, then the file is only compatible 6134 with the named toolchain. If it is greater than 1, the file can 6135 only be processed by other toolchains under some private 6136 arrangement indicated by the flag value and the vendor name. 6137 61388.1.2 M680x0 Attributes 6139----------------------- 6140 6141Tag_GNU_M68K_ABI_FP (4) 6142 The floating-point ABI used by this object file. The value will 6143 be: 6144 6145 * 0 for files not affected by the floating-point ABI. 6146 * 1 for files using double-precision hardware floating-point 6147 ABI. 6148 * 2 for files using the software floating-point ABI. 6149 61508.1.3 MIPS Attributes 6151--------------------- 6152 6153Tag_GNU_MIPS_ABI_FP (4) 6154 The floating-point ABI used by this object file. The value will 6155 be: 6156 6157 * 0 for files not affected by the floating-point ABI. 6158 * 1 for files using the hardware floating-point ABI with a 6159 standard double-precision FPU. 6160 * 2 for files using the hardware floating-point ABI with a 6161 single-precision FPU. 6162 * 3 for files using the software floating-point ABI. 6163 * 4 for files using the deprecated hardware floating-point ABI 6164 which used 64-bit floating-point registers, 32-bit 6165 general-purpose registers and increased the number of 6166 callee-saved floating-point registers. 6167 * 5 for files using the hardware floating-point ABI with a 6168 double-precision FPU with either 32-bit or 64-bit 6169 floating-point registers and 32-bit general-purpose registers. 6170 * 6 for files using the hardware floating-point ABI with 64-bit 6171 floating-point registers and 32-bit general-purpose registers. 6172 * 7 for files using the hardware floating-point ABI with 64-bit 6173 floating-point registers, 32-bit general-purpose registers and 6174 a rule that forbids the direct use of odd-numbered 6175 single-precision floating-point registers. 6176 61778.1.4 PowerPC Attributes 6178------------------------ 6179 6180Tag_GNU_Power_ABI_FP (4) 6181 The floating-point ABI used by this object file. The value will 6182 be: 6183 6184 * 0 for files not affected by the floating-point ABI. 6185 * 1 for files using double-precision hardware floating-point 6186 ABI. 6187 * 2 for files using the software floating-point ABI. 6188 * 3 for files using single-precision hardware floating-point 6189 ABI. 6190 6191Tag_GNU_Power_ABI_Vector (8) 6192 The vector ABI used by this object file. The value will be: 6193 6194 * 0 for files not affected by the vector ABI. 6195 * 1 for files using general purpose registers to pass vectors. 6196 * 2 for files using AltiVec registers to pass vectors. 6197 * 3 for files using SPE registers to pass vectors. 6198 61998.1.5 IBM z Systems Attributes 6200------------------------------ 6201 6202Tag_GNU_S390_ABI_Vector (8) 6203 The vector ABI used by this object file. The value will be: 6204 6205 * 0 for files not affected by the vector ABI. 6206 * 1 for files using software vector ABI. 6207 * 2 for files using hardware vector ABI. 6208 62098.1.6 MSP430 Attributes 6210----------------------- 6211 6212Tag_GNU_MSP430_Data_Region (4) 6213 The data region used by this object file. The value will be: 6214 6215 * 0 for files not using the large memory model. 6216 * 1 for files which have been compiled with the condition that 6217 all data is in the lower memory region, i.e. below address 6218 0x10000. 6219 * 2 for files which allow data to be placed in the full 20-bit 6220 memory range. 6221 6222 6223File: as.info, Node: Defining New Object Attributes, Prev: GNU Object Attributes, Up: Object Attributes 6224 62258.2 Defining New Object Attributes 6226================================== 6227 6228If you want to define a new GNU object attribute, here are the places 6229you will need to modify. New attributes should be discussed on the 6230'binutils' mailing list. 6231 6232 * This manual, which is the official register of attributes. 6233 * The header for your architecture 'include/elf', to define the tag. 6234 * The 'bfd' support file for your architecture, to merge the 6235 attribute and issue any appropriate link warnings. 6236 * Test cases in 'ld/testsuite' for merging and link warnings. 6237 * 'binutils/readelf.c' to display your attribute. 6238 * GCC, if you want the compiler to mark the attribute automatically. 6239 6240 6241File: as.info, Node: Machine Dependencies, Next: Reporting Bugs, Prev: Object Attributes, Up: Top 6242 62439 Machine Dependent Features 6244**************************** 6245 6246The machine instruction sets are (almost by definition) different on 6247each machine where 'as' runs. Floating point representations vary as 6248well, and 'as' often supports a few additional directives or 6249command-line options for compatibility with other assemblers on a 6250particular platform. Finally, some versions of 'as' support special 6251pseudo-instructions for branch optimization. 6252 6253 This chapter discusses most of these differences, though it does not 6254include details on any machine's instruction set. For details on that 6255subject, see the hardware manufacturer's manual. 6256 6257* Menu: 6258 6259* AArch64-Dependent:: AArch64 Dependent Features 6260* Alpha-Dependent:: Alpha Dependent Features 6261* ARC-Dependent:: ARC Dependent Features 6262* ARM-Dependent:: ARM Dependent Features 6263* AVR-Dependent:: AVR Dependent Features 6264* Blackfin-Dependent:: Blackfin Dependent Features 6265* BPF-Dependent:: BPF Dependent Features 6266* CR16-Dependent:: CR16 Dependent Features 6267* CRIS-Dependent:: CRIS Dependent Features 6268* C-SKY-Dependent:: C-SKY Dependent Features 6269* D10V-Dependent:: D10V Dependent Features 6270* D30V-Dependent:: D30V Dependent Features 6271* Epiphany-Dependent:: EPIPHANY Dependent Features 6272* H8/300-Dependent:: Renesas H8/300 Dependent Features 6273* HPPA-Dependent:: HPPA Dependent Features 6274* i386-Dependent:: Intel 80386 and AMD x86-64 Dependent Features 6275* IA-64-Dependent:: Intel IA-64 Dependent Features 6276* IP2K-Dependent:: IP2K Dependent Features 6277* LM32-Dependent:: LM32 Dependent Features 6278* M32C-Dependent:: M32C Dependent Features 6279* M32R-Dependent:: M32R Dependent Features 6280* M68K-Dependent:: M680x0 Dependent Features 6281* M68HC11-Dependent:: M68HC11 and 68HC12 Dependent Features 6282* S12Z-Dependent:: S12Z Dependent Features 6283* Meta-Dependent :: Meta Dependent Features 6284* MicroBlaze-Dependent:: MICROBLAZE Dependent Features 6285* MIPS-Dependent:: MIPS Dependent Features 6286* MMIX-Dependent:: MMIX Dependent Features 6287* MSP430-Dependent:: MSP430 Dependent Features 6288* NDS32-Dependent:: Andes NDS32 Dependent Features 6289* NiosII-Dependent:: Altera Nios II Dependent Features 6290* NS32K-Dependent:: NS32K Dependent Features 6291* OpenRISC-Dependent:: OpenRISC 1000 Features 6292* PDP-11-Dependent:: PDP-11 Dependent Features 6293* PJ-Dependent:: picoJava Dependent Features 6294* PPC-Dependent:: PowerPC Dependent Features 6295* PRU-Dependent:: PRU Dependent Features 6296* RISC-V-Dependent:: RISC-V Dependent Features 6297* RL78-Dependent:: RL78 Dependent Features 6298* RX-Dependent:: RX Dependent Features 6299* S/390-Dependent:: IBM S/390 Dependent Features 6300* SCORE-Dependent:: SCORE Dependent Features 6301* SH-Dependent:: Renesas / SuperH SH Dependent Features 6302* Sparc-Dependent:: SPARC Dependent Features 6303* TIC54X-Dependent:: TI TMS320C54x Dependent Features 6304* TIC6X-Dependent :: TI TMS320C6x Dependent Features 6305* TILE-Gx-Dependent :: Tilera TILE-Gx Dependent Features 6306* TILEPro-Dependent :: Tilera TILEPro Dependent Features 6307* V850-Dependent:: V850 Dependent Features 6308* Vax-Dependent:: VAX Dependent Features 6309* Visium-Dependent:: Visium Dependent Features 6310* WebAssembly-Dependent:: WebAssembly Dependent Features 6311* XGATE-Dependent:: XGATE Dependent Features 6312* XSTORMY16-Dependent:: XStormy16 Dependent Features 6313* Xtensa-Dependent:: Xtensa Dependent Features 6314* Z80-Dependent:: Z80 Dependent Features 6315* Z8000-Dependent:: Z8000 Dependent Features 6316 6317 6318File: as.info, Node: AArch64-Dependent, Next: Alpha-Dependent, Up: Machine Dependencies 6319 63209.1 AArch64 Dependent Features 6321============================== 6322 6323* Menu: 6324 6325* AArch64 Options:: Options 6326* AArch64 Extensions:: Extensions 6327* AArch64 Syntax:: Syntax 6328* AArch64 Floating Point:: Floating Point 6329* AArch64 Directives:: AArch64 Machine Directives 6330* AArch64 Opcodes:: Opcodes 6331* AArch64 Mapping Symbols:: Mapping Symbols 6332 6333 6334File: as.info, Node: AArch64 Options, Next: AArch64 Extensions, Up: AArch64-Dependent 6335 63369.1.1 Options 6337------------- 6338 6339'-EB' 6340 This option specifies that the output generated by the assembler 6341 should be marked as being encoded for a big-endian processor. 6342 6343'-EL' 6344 This option specifies that the output generated by the assembler 6345 should be marked as being encoded for a little-endian processor. 6346 6347'-mabi=ABI' 6348 Specify which ABI the source code uses. The recognized arguments 6349 are: 'ilp32' and 'lp64', which decides the generated object file in 6350 ELF32 and ELF64 format respectively. The default is 'lp64'. 6351 6352'-mcpu=PROCESSOR[+EXTENSION...]' 6353 This option specifies the target processor. The assembler will 6354 issue an error message if an attempt is made to assemble an 6355 instruction which will not execute on the target processor. The 6356 following processor names are recognized: 'cortex-a34', 6357 'cortex-a35', 'cortex-a53', 'cortex-a55', 'cortex-a57', 6358 'cortex-a65', 'cortex-a65ae', 'cortex-a72', 'cortex-a73', 6359 'cortex-a75', 'cortex-a76', 'cortex-a76ae', 'cortex-a77', 6360 'cortex-a78', 'cortex-a78ae', 'cortex-a78c', 'ares', 'exynos-m1', 6361 'falkor', 'neoverse-n1', 'neoverse-n2', 'neoverse-e1', 6362 'neoverse-v1', 'qdf24xx', 'saphira', 'thunderx', 'vulcan', 'xgene1' 6363 'xgene2', 'cortex-r82', and 'cortex-x1'. The special name 'all' 6364 may be used to allow the assembler to accept instructions valid for 6365 any supported processor, including all optional extensions. 6366 6367 In addition to the basic instruction set, the assembler can be told 6368 to accept, or restrict, various extension mnemonics that extend the 6369 processor. *Note AArch64 Extensions::. 6370 6371 If some implementations of a particular processor can have an 6372 extension, then then those extensions are automatically enabled. 6373 Consequently, you will not normally have to specify any additional 6374 extensions. 6375 6376'-march=ARCHITECTURE[+EXTENSION...]' 6377 This option specifies the target architecture. The assembler will 6378 issue an error message if an attempt is made to assemble an 6379 instruction which will not execute on the target architecture. The 6380 following architecture names are recognized: 'armv8-a', 6381 'armv8.1-a', 'armv8.2-a', 'armv8.3-a', 'armv8.4-a' 'armv8.5-a', 6382 'armv8.6-a', 'armv8.7-a', and 'armv8-r'. 6383 6384 If both '-mcpu' and '-march' are specified, the assembler will use 6385 the setting for '-mcpu'. If neither are specified, the assembler 6386 will default to '-mcpu=all'. 6387 6388 The architecture option can be extended with the same instruction 6389 set extension options as the '-mcpu' option. Unlike '-mcpu', 6390 extensions are not always enabled by default, *Note AArch64 6391 Extensions::. 6392 6393'-mverbose-error' 6394 This option enables verbose error messages for AArch64 gas. This 6395 option is enabled by default. 6396 6397'-mno-verbose-error' 6398 This option disables verbose error messages in AArch64 gas. 6399 6400 6401File: as.info, Node: AArch64 Extensions, Next: AArch64 Syntax, Prev: AArch64 Options, Up: AArch64-Dependent 6402 64039.1.2 Architecture Extensions 6404----------------------------- 6405 6406The table below lists the permitted architecture extensions that are 6407supported by the assembler and the conditions under which they are 6408automatically enabled. 6409 6410 Multiple extensions may be specified, separated by a '+'. Extension 6411mnemonics may also be removed from those the assembler accepts. This is 6412done by prepending 'no' to the option that adds the extension. 6413Extensions that are removed must be listed after all extensions that 6414have been added. 6415 6416 Enabling an extension that requires other extensions will 6417automatically cause those extensions to be enabled. Similarly, 6418disabling an extension that is required by other extensions will 6419automatically cause those extensions to be disabled. 6420 6421Extension Minimum Enabled by Description 6422 Architecture default 6423---------------------------------------------------------------------------- 6424'i8mm' ARMv8.2-A ARMv8.6-A Enable Int8 Matrix Multiply 6425 or later extension. 6426'f32mm' ARMv8.2-A No Enable F32 Matrix Multiply extension. 6427'f64mm' ARMv8.2-A No Enable F64 Matrix Multiply extension. 6428'bf16' ARMv8.2-A ARMv8.6-A Enable BFloat16 extension. 6429 or later 6430'compnum' ARMv8.2-A ARMv8.3-A Enable the complex number SIMD 6431 or later extensions. This implies 'fp16' and 6432 'simd'. 6433'crc' ARMv8-A ARMv8.1-A Enable CRC instructions. 6434 or later 6435'crypto' ARMv8-A No Enable cryptographic extensions. 6436 This implies 'fp', 'simd', 'aes' and 6437 'sha2'. 6438'aes' ARMv8-A No Enable the AES cryptographic 6439 extensions. This implies 'fp' and 6440 'simd'. 6441'sha2' ARMv8-A No Enable the SHA2 cryptographic 6442 extensions. This implies 'fp' and 6443 'simd'. 6444'sha3' ARMv8.2-A No Enable the ARMv8.2-A SHA2 and SHA3 6445 cryptographic extensions. This 6446 implies 'fp', 'simd' and 'sha2'. 6447'sm4' ARMv8.2-A No Enable the ARMv8.2-A SM3 and SM4 6448 cryptographic extensions. This 6449 implies 'fp' and 'simd'. 6450'fp' ARMv8-A ARMv8-A or Enable floating-point extensions. 6451 later 6452'fp16' ARMv8.2-A ARMv8.2-A Enable ARMv8.2 16-bit floating-point 6453 or later support. This implies 'fp'. 6454'lor' ARMv8-A ARMv8.1-A Enable Limited Ordering Regions 6455 or later extensions. 6456'lse' ARMv8-A ARMv8.1-A Enable Large System extensions. 6457 or later 6458'pan' ARMv8-A ARMv8.1-A Enable Privileged Access Never 6459 or later support. 6460'profile' ARMv8.2-A No Enable statistical profiling 6461 extensions. 6462'ras' ARMv8-A ARMv8.2-A Enable the Reliability, Availability 6463 or later and Serviceability extension. 6464'rcpc' ARMv8.2-A ARMv8.3-A Enable the weak release consistency 6465 or later extension. 6466'rdma' ARMv8-A ARMv8.1-A Enable ARMv8.1 Advanced SIMD 6467 or later extensions. This implies 'simd'. 6468'simd' ARMv8-A ARMv8-A or Enable Advanced SIMD extensions. 6469 later This implies 'fp'. 6470'sve' ARMv8.2-A No Enable the Scalable Vector 6471 Extensions. This implies 'fp16', 6472 'simd' and 'compnum'. 6473'dotprod' ARMv8.2-A ARMv8.4-A Enable the Dot Product extension. 6474 or later This implies 'simd'. 6475'fp16fml' ARMv8.2-A ARMv8.4-A Enable ARMv8.2 16-bit floating-point 6476 or later multiplication variant support. This 6477 implies 'fp16'. 6478'sb' ARMv8-A ARMv8.5-A Enable the speculation barrier 6479 or later instruction sb. 6480'predres' ARMv8-A ARMv8.5-A Enable the Execution and Data and 6481 or later Prediction instructions. 6482'rng' ARMv8.5-A No Enable ARMv8.5-A random number 6483 instructions. 6484'ssbs' ARMv8-A ARMv8.5-A Enable Speculative Store Bypassing 6485 or later Safe state read and write. 6486'memtag' ARMv8.5-A No Enable ARMv8.5-A Memory Tagging 6487 Extensions. 6488'tme' ARMv8-A No Enable Transactional Memory 6489 Extensions. 6490'sve2' ARMv8-A No Enable the SVE2 Extension. 6491'sve2-bitperm'ARMv8-A No Enable SVE2 BITPERM Extension. 6492'sve2-sm4'ARMv8-A No Enable SVE2 SM4 Extension. 6493'sve2-aes'ARMv8-A No Enable SVE2 AES Extension. This also 6494 enables the .Q->.B form of the 6495 'pmullt' and 'pmullb' instructions. 6496'sve2-sha3'ARMv8-A No Enable SVE2 SHA3 Extension. 6497'flagm' ARMv8-A ARMv8.4-A Enable Flag Manipulation 6498 or later instructions. 6499'ls64' ARMv8.6-A ARMv8.7-A Enable 64 Byte Loads/Stores. 6500 or later 6501'pauth' ARMv8-A No Enable Pointer Authentication. 6502 6503 6504File: as.info, Node: AArch64 Syntax, Next: AArch64 Floating Point, Prev: AArch64 Extensions, Up: AArch64-Dependent 6505 65069.1.3 Syntax 6507------------ 6508 6509* Menu: 6510 6511* AArch64-Chars:: Special Characters 6512* AArch64-Regs:: Register Names 6513* AArch64-Relocations:: Relocations 6514 6515 6516File: as.info, Node: AArch64-Chars, Next: AArch64-Regs, Up: AArch64 Syntax 6517 65189.1.3.1 Special Characters 6519.......................... 6520 6521The presence of a '//' on a line indicates the start of a comment that 6522extends to the end of the current line. If a '#' appears as the first 6523character of a line, the whole line is treated as a comment. 6524 6525 The ';' character can be used instead of a newline to separate 6526statements. 6527 6528 The '#' can be optionally used to indicate immediate operands. 6529 6530 6531File: as.info, Node: AArch64-Regs, Next: AArch64-Relocations, Prev: AArch64-Chars, Up: AArch64 Syntax 6532 65339.1.3.2 Register Names 6534...................... 6535 6536Please refer to the section '4.4 Register Names' of 'ARMv8 Instruction 6537Set Overview', which is available at <http://infocenter.arm.com>. 6538 6539 6540File: as.info, Node: AArch64-Relocations, Prev: AArch64-Regs, Up: AArch64 Syntax 6541 65429.1.3.3 Relocations 6543................... 6544 6545Relocations for 'MOVZ' and 'MOVK' instructions can be generated by 6546prefixing the label with '#:abs_g2:' etc. For example to load the 654748-bit absolute address of FOO into x0: 6548 6549 movz x0, #:abs_g2:foo // bits 32-47, overflow check 6550 movk x0, #:abs_g1_nc:foo // bits 16-31, no overflow check 6551 movk x0, #:abs_g0_nc:foo // bits 0-15, no overflow check 6552 6553 Relocations for 'ADRP', and 'ADD', 'LDR' or 'STR' instructions can be 6554generated by prefixing the label with ':pg_hi21:' and '#:lo12:' 6555respectively. 6556 6557 For example to use 33-bit (+/-4GB) pc-relative addressing to load the 6558address of FOO into x0: 6559 6560 adrp x0, :pg_hi21:foo 6561 add x0, x0, #:lo12:foo 6562 6563 Or to load the value of FOO into x0: 6564 6565 adrp x0, :pg_hi21:foo 6566 ldr x0, [x0, #:lo12:foo] 6567 6568 Note that ':pg_hi21:' is optional. 6569 6570 adrp x0, foo 6571 6572 is equivalent to 6573 6574 adrp x0, :pg_hi21:foo 6575 6576 6577File: as.info, Node: AArch64 Floating Point, Next: AArch64 Directives, Prev: AArch64 Syntax, Up: AArch64-Dependent 6578 65799.1.4 Floating Point 6580-------------------- 6581 6582The AArch64 architecture uses IEEE floating-point numbers. 6583 6584 6585File: as.info, Node: AArch64 Directives, Next: AArch64 Opcodes, Prev: AArch64 Floating Point, Up: AArch64-Dependent 6586 65879.1.5 AArch64 Machine Directives 6588-------------------------------- 6589 6590'.arch NAME' 6591 Select the target architecture. Valid values for NAME are the same 6592 as for the '-march' command-line option. 6593 6594 Specifying '.arch' clears any previously selected architecture 6595 extensions. 6596 6597'.arch_extension NAME' 6598 Add or remove an architecture extension to the target architecture. 6599 Valid values for NAME are the same as those accepted as 6600 architectural extensions by the '-mcpu' command-line option. 6601 6602 '.arch_extension' may be used multiple times to add or remove 6603 extensions incrementally to the architecture being compiled for. 6604 6605'.bss' 6606 This directive switches to the '.bss' section. 6607 6608'.cpu NAME' 6609 Set the target processor. Valid values for NAME are the same as 6610 those accepted by the '-mcpu=' command-line option. 6611 6612'.dword EXPRESSIONS' 6613 The '.dword' directive produces 64 bit values. 6614 6615'.even' 6616 The '.even' directive aligns the output on the next even byte 6617 boundary. 6618 6619'.float16 VALUE [,...,VALUE_N]' 6620 Place the half precision floating point representation of one or 6621 more floating-point values into the current section. The format 6622 used to encode the floating point values is always the IEEE 6623 754-2008 half precision floating point format. 6624 6625'.inst EXPRESSIONS' 6626 Inserts the expressions into the output as if they were 6627 instructions, rather than data. 6628 6629'.ltorg' 6630 This directive causes the current contents of the literal pool to 6631 be dumped into the current section (which is assumed to be the 6632 .text section) at the current location (aligned to a word 6633 boundary). GAS maintains a separate literal pool for each section 6634 and each sub-section. The '.ltorg' directive will only affect the 6635 literal pool of the current section and sub-section. At the end of 6636 assembly all remaining, un-empty literal pools will automatically 6637 be dumped. 6638 6639 Note - older versions of GAS would dump the current literal pool 6640 any time a section change occurred. This is no longer done, since 6641 it prevents accurate control of the placement of literal pools. 6642 6643'.pool' 6644 This is a synonym for .ltorg. 6645 6646'NAME .req REGISTER NAME' 6647 This creates an alias for REGISTER NAME called NAME. For example: 6648 6649 foo .req w0 6650 6651 ip0, ip1, lr and fp are automatically defined to alias to X16, X17, 6652 X30 and X29 respectively. 6653 6654'.tlsdescadd' 6655 Emits a TLSDESC_ADD reloc on the next instruction. 6656 6657'.tlsdesccall' 6658 Emits a TLSDESC_CALL reloc on the next instruction. 6659 6660'.tlsdescldr' 6661 Emits a TLSDESC_LDR reloc on the next instruction. 6662 6663'.unreq ALIAS-NAME' 6664 This undefines a register alias which was previously defined using 6665 the 'req' directive. For example: 6666 6667 foo .req w0 6668 .unreq foo 6669 6670 An error occurs if the name is undefined. Note - this pseudo op 6671 can be used to delete builtin in register name aliases (eg 'w0'). 6672 This should only be done if it is really necessary. 6673 6674'.variant_pcs SYMBOL' 6675 This directive marks SYMBOL referencing a function that may follow 6676 a variant procedure call standard with different register usage 6677 convention from the base procedure call standard. 6678 6679'.xword EXPRESSIONS' 6680 The '.xword' directive produces 64 bit values. This is the same as 6681 the '.dword' directive. 6682 6683'.cfi_b_key_frame' 6684 The '.cfi_b_key_frame' directive inserts a 'B' character into the 6685 CIE corresponding to the current frame's FDE, meaning that its 6686 return address has been signed with the B-key. If two frames are 6687 signed with differing keys then they will not share the same CIE. 6688 This information is intended to be used by the stack unwinder in 6689 order to properly authenticate return addresses. 6690 6691 6692File: as.info, Node: AArch64 Opcodes, Next: AArch64 Mapping Symbols, Prev: AArch64 Directives, Up: AArch64-Dependent 6693 66949.1.6 Opcodes 6695------------- 6696 6697GAS implements all the standard AArch64 opcodes. It also implements 6698several pseudo opcodes, including several synthetic load instructions. 6699 6700'LDR =' 6701 ldr <register> , =<expression> 6702 6703 The constant expression will be placed into the nearest literal 6704 pool (if it not already there) and a PC-relative LDR instruction 6705 will be generated. 6706 6707 For more information on the AArch64 instruction set and assembly 6708language notation, see 'ARMv8 Instruction Set Overview' available at 6709<http://infocenter.arm.com>. 6710 6711 6712File: as.info, Node: AArch64 Mapping Symbols, Prev: AArch64 Opcodes, Up: AArch64-Dependent 6713 67149.1.7 Mapping Symbols 6715--------------------- 6716 6717The AArch64 ELF specification requires that special symbols be inserted 6718into object files to mark certain features: 6719 6720'$x' 6721 At the start of a region of code containing AArch64 instructions. 6722 6723'$d' 6724 At the start of a region of data. 6725 6726 6727File: as.info, Node: Alpha-Dependent, Next: ARC-Dependent, Prev: AArch64-Dependent, Up: Machine Dependencies 6728 67299.2 Alpha Dependent Features 6730============================ 6731 6732* Menu: 6733 6734* Alpha Notes:: Notes 6735* Alpha Options:: Options 6736* Alpha Syntax:: Syntax 6737* Alpha Floating Point:: Floating Point 6738* Alpha Directives:: Alpha Machine Directives 6739* Alpha Opcodes:: Opcodes 6740 6741 6742File: as.info, Node: Alpha Notes, Next: Alpha Options, Up: Alpha-Dependent 6743 67449.2.1 Notes 6745----------- 6746 6747The documentation here is primarily for the ELF object format. 'as' 6748also supports the ECOFF and EVAX formats, but features specific to these 6749formats are not yet documented. 6750 6751 6752File: as.info, Node: Alpha Options, Next: Alpha Syntax, Prev: Alpha Notes, Up: Alpha-Dependent 6753 67549.2.2 Options 6755------------- 6756 6757'-mCPU' 6758 This option specifies the target processor. If an attempt is made 6759 to assemble an instruction which will not execute on the target 6760 processor, the assembler may either expand the instruction as a 6761 macro or issue an error message. This option is equivalent to the 6762 '.arch' directive. 6763 6764 The following processor names are recognized: '21064', '21064a', 6765 '21066', '21068', '21164', '21164a', '21164pc', '21264', '21264a', 6766 '21264b', 'ev4', 'ev5', 'lca45', 'ev5', 'ev56', 'pca56', 'ev6', 6767 'ev67', 'ev68'. The special name 'all' may be used to allow the 6768 assembler to accept instructions valid for any Alpha processor. 6769 6770 In order to support existing practice in OSF/1 with respect to 6771 '.arch', and existing practice within 'MILO' (the Linux ARC 6772 bootloader), the numbered processor names (e.g. 21064) enable the 6773 processor-specific PALcode instructions, while the "electro-vlasic" 6774 names (e.g. 'ev4') do not. 6775 6776'-mdebug' 6777'-no-mdebug' 6778 Enables or disables the generation of '.mdebug' encapsulation for 6779 stabs directives and procedure descriptors. The default is to 6780 automatically enable '.mdebug' when the first stabs directive is 6781 seen. 6782 6783'-relax' 6784 This option forces all relocations to be put into the object file, 6785 instead of saving space and resolving some relocations at assembly 6786 time. Note that this option does not propagate all symbol 6787 arithmetic into the object file, because not all symbol arithmetic 6788 can be represented. However, the option can still be useful in 6789 specific applications. 6790 6791'-replace' 6792'-noreplace' 6793 Enables or disables the optimization of procedure calls, both at 6794 assemblage and at link time. These options are only available for 6795 VMS targets and '-replace' is the default. See section 1.4.1 of 6796 the OpenVMS Linker Utility Manual. 6797 6798'-g' 6799 This option is used when the compiler generates debug information. 6800 When 'gcc' is using 'mips-tfile' to generate debug information for 6801 ECOFF, local labels must be passed through to the object file. 6802 Otherwise this option has no effect. 6803 6804'-GSIZE' 6805 A local common symbol larger than SIZE is placed in '.bss', while 6806 smaller symbols are placed in '.sbss'. 6807 6808'-F' 6809'-32addr' 6810 These options are ignored for backward compatibility. 6811 6812 6813File: as.info, Node: Alpha Syntax, Next: Alpha Floating Point, Prev: Alpha Options, Up: Alpha-Dependent 6814 68159.2.3 Syntax 6816------------ 6817 6818The assembler syntax closely follow the Alpha Reference Manual; 6819assembler directives and general syntax closely follow the OSF/1 and 6820OpenVMS syntax, with a few differences for ELF. 6821 6822* Menu: 6823 6824* Alpha-Chars:: Special Characters 6825* Alpha-Regs:: Register Names 6826* Alpha-Relocs:: Relocations 6827 6828 6829File: as.info, Node: Alpha-Chars, Next: Alpha-Regs, Up: Alpha Syntax 6830 68319.2.3.1 Special Characters 6832.......................... 6833 6834'#' is the line comment character. Note that if '#' is the first 6835character on a line then it can also be a logical line number directive 6836(*note Comments::) or a preprocessor control command (*note 6837Preprocessing::). 6838 6839 ';' can be used instead of a newline to separate statements. 6840 6841 6842File: as.info, Node: Alpha-Regs, Next: Alpha-Relocs, Prev: Alpha-Chars, Up: Alpha Syntax 6843 68449.2.3.2 Register Names 6845...................... 6846 6847The 32 integer registers are referred to as '$N' or '$rN'. In addition, 6848registers 15, 28, 29, and 30 may be referred to by the symbols '$fp', 6849'$at', '$gp', and '$sp' respectively. 6850 6851 The 32 floating-point registers are referred to as '$fN'. 6852 6853 6854File: as.info, Node: Alpha-Relocs, Prev: Alpha-Regs, Up: Alpha Syntax 6855 68569.2.3.3 Relocations 6857................... 6858 6859Some of these relocations are available for ECOFF, but mostly only for 6860ELF. They are modeled after the relocation format introduced in Digital 6861Unix 4.0, but there are additions. 6862 6863 The format is '!TAG' or '!TAG!NUMBER' where TAG is the name of the 6864relocation. In some cases NUMBER is used to relate specific 6865instructions. 6866 6867 The relocation is placed at the end of the instruction like so: 6868 6869 ldah $0,a($29) !gprelhigh 6870 lda $0,a($0) !gprellow 6871 ldq $1,b($29) !literal!100 6872 ldl $2,0($1) !lituse_base!100 6873 6874'!literal' 6875'!literal!N' 6876 Used with an 'ldq' instruction to load the address of a symbol from 6877 the GOT. 6878 6879 A sequence number N is optional, and if present is used to pair 6880 'lituse' relocations with this 'literal' relocation. The 'lituse' 6881 relocations are used by the linker to optimize the code based on 6882 the final location of the symbol. 6883 6884 Note that these optimizations are dependent on the data flow of the 6885 program. Therefore, if _any_ 'lituse' is paired with a 'literal' 6886 relocation, then _all_ uses of the register set by the 'literal' 6887 instruction must also be marked with 'lituse' relocations. This is 6888 because the original 'literal' instruction may be deleted or 6889 transformed into another instruction. 6890 6891 Also note that there may be a one-to-many relationship between 6892 'literal' and 'lituse', but not a many-to-one. That is, if there 6893 are two code paths that load up the same address and feed the value 6894 to a single use, then the use may not use a 'lituse' relocation. 6895 6896'!lituse_base!N' 6897 Used with any memory format instruction (e.g. 'ldl') to indicate 6898 that the literal is used for an address load. The offset field of 6899 the instruction must be zero. During relaxation, the code may be 6900 altered to use a gp-relative load. 6901 6902'!lituse_jsr!N' 6903 Used with a register branch format instruction (e.g. 'jsr') to 6904 indicate that the literal is used for a call. During relaxation, 6905 the code may be altered to use a direct branch (e.g. 'bsr'). 6906 6907'!lituse_jsrdirect!N' 6908 Similar to 'lituse_jsr', but also that this call cannot be vectored 6909 through a PLT entry. This is useful for functions with special 6910 calling conventions which do not allow the normal call-clobbered 6911 registers to be clobbered. 6912 6913'!lituse_bytoff!N' 6914 Used with a byte mask instruction (e.g. 'extbl') to indicate that 6915 only the low 3 bits of the address are relevant. During 6916 relaxation, the code may be altered to use an immediate instead of 6917 a register shift. 6918 6919'!lituse_addr!N' 6920 Used with any other instruction to indicate that the original 6921 address is in fact used, and the original 'ldq' instruction may not 6922 be altered or deleted. This is useful in conjunction with 6923 'lituse_jsr' to test whether a weak symbol is defined. 6924 6925 ldq $27,foo($29) !literal!1 6926 beq $27,is_undef !lituse_addr!1 6927 jsr $26,($27),foo !lituse_jsr!1 6928 6929'!lituse_tlsgd!N' 6930 Used with a register branch format instruction to indicate that the 6931 literal is the call to '__tls_get_addr' used to compute the address 6932 of the thread-local storage variable whose descriptor was loaded 6933 with '!tlsgd!N'. 6934 6935'!lituse_tlsldm!N' 6936 Used with a register branch format instruction to indicate that the 6937 literal is the call to '__tls_get_addr' used to compute the address 6938 of the base of the thread-local storage block for the current 6939 module. The descriptor for the module must have been loaded with 6940 '!tlsldm!N'. 6941 6942'!gpdisp!N' 6943 Used with 'ldah' and 'lda' to load the GP from the current address, 6944 a-la the 'ldgp' macro. The source register for the 'ldah' 6945 instruction must contain the address of the 'ldah' instruction. 6946 There must be exactly one 'lda' instruction paired with the 'ldah' 6947 instruction, though it may appear anywhere in the instruction 6948 stream. The immediate operands must be zero. 6949 6950 bsr $26,foo 6951 ldah $29,0($26) !gpdisp!1 6952 lda $29,0($29) !gpdisp!1 6953 6954'!gprelhigh' 6955 Used with an 'ldah' instruction to add the high 16 bits of a 32-bit 6956 displacement from the GP. 6957 6958'!gprellow' 6959 Used with any memory format instruction to add the low 16 bits of a 6960 32-bit displacement from the GP. 6961 6962'!gprel' 6963 Used with any memory format instruction to add a 16-bit 6964 displacement from the GP. 6965 6966'!samegp' 6967 Used with any branch format instruction to skip the GP load at the 6968 target address. The referenced symbol must have the same GP as the 6969 source object file, and it must be declared to either not use '$27' 6970 or perform a standard GP load in the first two instructions via the 6971 '.prologue' directive. 6972 6973'!tlsgd' 6974'!tlsgd!N' 6975 Used with an 'lda' instruction to load the address of a TLS 6976 descriptor for a symbol in the GOT. 6977 6978 The sequence number N is optional, and if present it used to pair 6979 the descriptor load with both the 'literal' loading the address of 6980 the '__tls_get_addr' function and the 'lituse_tlsgd' marking the 6981 call to that function. 6982 6983 For proper relaxation, both the 'tlsgd', 'literal' and 'lituse' 6984 relocations must be in the same extended basic block. That is, the 6985 relocation with the lowest address must be executed first at 6986 runtime. 6987 6988'!tlsldm' 6989'!tlsldm!N' 6990 Used with an 'lda' instruction to load the address of a TLS 6991 descriptor for the current module in the GOT. 6992 6993 Similar in other respects to 'tlsgd'. 6994 6995'!gotdtprel' 6996 Used with an 'ldq' instruction to load the offset of the TLS symbol 6997 within its module's thread-local storage block. Also known as the 6998 dynamic thread pointer offset or dtp-relative offset. 6999 7000'!dtprelhi' 7001'!dtprello' 7002'!dtprel' 7003 Like 'gprel' relocations except they compute dtp-relative offsets. 7004 7005'!gottprel' 7006 Used with an 'ldq' instruction to load the offset of the TLS symbol 7007 from the thread pointer. Also known as the tp-relative offset. 7008 7009'!tprelhi' 7010'!tprello' 7011'!tprel' 7012 Like 'gprel' relocations except they compute tp-relative offsets. 7013 7014 7015File: as.info, Node: Alpha Floating Point, Next: Alpha Directives, Prev: Alpha Syntax, Up: Alpha-Dependent 7016 70179.2.4 Floating Point 7018-------------------- 7019 7020The Alpha family uses both IEEE and VAX floating-point numbers. 7021 7022 7023File: as.info, Node: Alpha Directives, Next: Alpha Opcodes, Prev: Alpha Floating Point, Up: Alpha-Dependent 7024 70259.2.5 Alpha Assembler Directives 7026-------------------------------- 7027 7028'as' for the Alpha supports many additional directives for compatibility 7029with the native assembler. This section describes them only briefly. 7030 7031 These are the additional directives in 'as' for the Alpha: 7032 7033'.arch CPU' 7034 Specifies the target processor. This is equivalent to the '-mCPU' 7035 command-line option. *Note Options: Alpha Options, for a list of 7036 values for CPU. 7037 7038'.ent FUNCTION[, N]' 7039 Mark the beginning of FUNCTION. An optional number may follow for 7040 compatibility with the OSF/1 assembler, but is ignored. When 7041 generating '.mdebug' information, this will create a procedure 7042 descriptor for the function. In ELF, it will mark the symbol as a 7043 function a-la the generic '.type' directive. 7044 7045'.end FUNCTION' 7046 Mark the end of FUNCTION. In ELF, it will set the size of the 7047 symbol a-la the generic '.size' directive. 7048 7049'.mask MASK, OFFSET' 7050 Indicate which of the integer registers are saved in the current 7051 function's stack frame. MASK is interpreted a bit mask in which 7052 bit N set indicates that register N is saved. The registers are 7053 saved in a block located OFFSET bytes from the "canonical frame 7054 address" (CFA) which is the value of the stack pointer on entry to 7055 the function. The registers are saved sequentially, except that 7056 the return address register (normally '$26') is saved first. 7057 7058 This and the other directives that describe the stack frame are 7059 currently only used when generating '.mdebug' information. They 7060 may in the future be used to generate DWARF2 '.debug_frame' unwind 7061 information for hand written assembly. 7062 7063'.fmask MASK, OFFSET' 7064 Indicate which of the floating-point registers are saved in the 7065 current stack frame. The MASK and OFFSET parameters are 7066 interpreted as with '.mask'. 7067 7068'.frame FRAMEREG, FRAMEOFFSET, RETREG[, ARGOFFSET]' 7069 Describes the shape of the stack frame. The frame pointer in use 7070 is FRAMEREG; normally this is either '$fp' or '$sp'. The frame 7071 pointer is FRAMEOFFSET bytes below the CFA. The return address is 7072 initially located in RETREG until it is saved as indicated in 7073 '.mask'. For compatibility with OSF/1 an optional ARGOFFSET 7074 parameter is accepted and ignored. It is believed to indicate the 7075 offset from the CFA to the saved argument registers. 7076 7077'.prologue N' 7078 Indicate that the stack frame is set up and all registers have been 7079 spilled. The argument N indicates whether and how the function 7080 uses the incoming "procedure vector" (the address of the called 7081 function) in '$27'. 0 indicates that '$27' is not used; 1 7082 indicates that the first two instructions of the function use '$27' 7083 to perform a load of the GP register; 2 indicates that '$27' is 7084 used in some non-standard way and so the linker cannot elide the 7085 load of the procedure vector during relaxation. 7086 7087'.usepv FUNCTION, WHICH' 7088 Used to indicate the use of the '$27' register, similar to 7089 '.prologue', but without the other semantics of needing to be 7090 inside an open '.ent'/'.end' block. 7091 7092 The WHICH argument should be either 'no', indicating that '$27' is 7093 not used, or 'std', indicating that the first two instructions of 7094 the function perform a GP load. 7095 7096 One might use this directive instead of '.prologue' if you are also 7097 using dwarf2 CFI directives. 7098 7099'.gprel32 EXPRESSION' 7100 Computes the difference between the address in EXPRESSION and the 7101 GP for the current object file, and stores it in 4 bytes. In 7102 addition to being smaller than a full 8 byte address, this also 7103 does not require a dynamic relocation when used in a shared 7104 library. 7105 7106'.t_floating EXPRESSION' 7107 Stores EXPRESSION as an IEEE double precision value. 7108 7109'.s_floating EXPRESSION' 7110 Stores EXPRESSION as an IEEE single precision value. 7111 7112'.f_floating EXPRESSION' 7113 Stores EXPRESSION as a VAX F format value. 7114 7115'.g_floating EXPRESSION' 7116 Stores EXPRESSION as a VAX G format value. 7117 7118'.d_floating EXPRESSION' 7119 Stores EXPRESSION as a VAX D format value. 7120 7121'.set FEATURE' 7122 Enables or disables various assembler features. Using the positive 7123 name of the feature enables while using 'noFEATURE' disables. 7124 7125 'at' 7126 Indicates that macro expansions may clobber the "assembler 7127 temporary" ('$at' or '$28') register. Some macros may not be 7128 expanded without this and will generate an error message if 7129 'noat' is in effect. When 'at' is in effect, a warning will 7130 be generated if '$at' is used by the programmer. 7131 7132 'macro' 7133 Enables the expansion of macro instructions. Note that 7134 variants of real instructions, such as 'br label' vs 'br 7135 $31,label' are considered alternate forms and not macros. 7136 7137 'move' 7138 'reorder' 7139 'volatile' 7140 These control whether and how the assembler may re-order 7141 instructions. Accepted for compatibility with the OSF/1 7142 assembler, but 'as' does not do instruction scheduling, so 7143 these features are ignored. 7144 7145 The following directives are recognized for compatibility with the 7146OSF/1 assembler but are ignored. 7147 7148 .proc .aproc 7149 .reguse .livereg 7150 .option .aent 7151 .ugen .eflag 7152 .alias .noalias 7153 7154 7155File: as.info, Node: Alpha Opcodes, Prev: Alpha Directives, Up: Alpha-Dependent 7156 71579.2.6 Opcodes 7158------------- 7159 7160For detailed information on the Alpha machine instruction set, see the 7161Alpha Architecture Handbook 7162(ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf). 7163 7164 7165File: as.info, Node: ARC-Dependent, Next: ARM-Dependent, Prev: Alpha-Dependent, Up: Machine Dependencies 7166 71679.3 ARC Dependent Features 7168========================== 7169 7170* Menu: 7171 7172* ARC Options:: Options 7173* ARC Syntax:: Syntax 7174* ARC Directives:: ARC Machine Directives 7175* ARC Modifiers:: ARC Assembler Modifiers 7176* ARC Symbols:: ARC Pre-defined Symbols 7177* ARC Opcodes:: Opcodes 7178 7179 7180File: as.info, Node: ARC Options, Next: ARC Syntax, Up: ARC-Dependent 7181 71829.3.1 Options 7183------------- 7184 7185The following options control the type of CPU for which code is 7186assembled, and generic constraints on the code generated: 7187 7188'-mcpu=CPU' 7189 Set architecture type and register usage for CPU. There are also 7190 shortcut alias options available for backward compatibility and 7191 convenience. Supported values for CPU are 7192 7193 'arc600' 7194 Assemble for ARC 600. Aliases: '-mA6', '-mARC600'. 7195 7196 'arc600_norm' 7197 Assemble for ARC 600 with norm instructions. 7198 7199 'arc600_mul64' 7200 Assemble for ARC 600 with mul64 instructions. 7201 7202 'arc600_mul32x16' 7203 Assemble for ARC 600 with mul32x16 instructions. 7204 7205 'arc601' 7206 Assemble for ARC 601. Alias: '-mARC601'. 7207 7208 'arc601_norm' 7209 Assemble for ARC 601 with norm instructions. 7210 7211 'arc601_mul64' 7212 Assemble for ARC 601 with mul64 instructions. 7213 7214 'arc601_mul32x16' 7215 Assemble for ARC 601 with mul32x16 instructions. 7216 7217 'arc700' 7218 Assemble for ARC 700. Aliases: '-mA7', '-mARC700'. 7219 7220 'arcem' 7221 Assemble for ARC EM. Aliases: '-mEM' 7222 7223 'em' 7224 Assemble for ARC EM, identical as arcem variant. 7225 7226 'em4' 7227 Assemble for ARC EM with code-density instructions. 7228 7229 'em4_dmips' 7230 Assemble for ARC EM with code-density instructions. 7231 7232 'em4_fpus' 7233 Assemble for ARC EM with code-density instructions. 7234 7235 'em4_fpuda' 7236 Assemble for ARC EM with code-density, and double-precision 7237 assist instructions. 7238 7239 'quarkse_em' 7240 Assemble for QuarkSE-EM cpu. 7241 7242 'archs' 7243 Assemble for ARC HS. Aliases: '-mHS', '-mav2hs'. 7244 7245 'hs' 7246 Assemble for ARC HS. 7247 7248 'hs34' 7249 Assemble for ARC HS34. 7250 7251 'hs38' 7252 Assemble for ARC HS38. 7253 7254 'hs38_linux' 7255 Assemble for ARC HS38 with floating point support on. 7256 7257 'nps400' 7258 Assemble for ARC 700 with NPS-400 extended instructions. 7259 7260 Note: the '.cpu' directive (*note ARC Directives::) can to be used 7261 to select a core variant from within assembly code. 7262 7263'-EB' 7264 This option specifies that the output generated by the assembler 7265 should be marked as being encoded for a big-endian processor. 7266 7267'-EL' 7268 This option specifies that the output generated by the assembler 7269 should be marked as being encoded for a little-endian processor - 7270 this is the default. 7271 7272'-mcode-density' 7273 This option turns on Code Density instructions. Only valid for ARC 7274 EM processors. 7275 7276'-mrelax' 7277 Enable support for assembly-time relaxation. The assembler will 7278 replace a longer version of an instruction with a shorter one, 7279 whenever it is possible. 7280 7281'-mnps400' 7282 Enable support for NPS-400 extended instructions. 7283 7284'-mspfp' 7285 Enable support for single-precision floating point instructions. 7286 7287'-mdpfp' 7288 Enable support for double-precision floating point instructions. 7289 7290'-mfpuda' 7291 Enable support for double-precision assist floating point 7292 instructions. Only valid for ARC EM processors. 7293 7294 7295File: as.info, Node: ARC Syntax, Next: ARC Directives, Prev: ARC Options, Up: ARC-Dependent 7296 72979.3.2 Syntax 7298------------ 7299 7300* Menu: 7301 7302* ARC-Chars:: Special Characters 7303* ARC-Regs:: Register Names 7304 7305 7306File: as.info, Node: ARC-Chars, Next: ARC-Regs, Up: ARC Syntax 7307 73089.3.2.1 Special Characters 7309.......................... 7310 7311'%' 7312 A register name can optionally be prefixed by a '%' character. So 7313 register '%r0' is equivalent to 'r0' in the assembly code. 7314 7315'#' 7316 The presence of a '#' character within a line (but not at the start 7317 of a line) indicates the start of a comment that extends to the end 7318 of the current line. 7319 7320 _Note:_ if a line starts with a '#' character then it can also be a 7321 logical line number directive (*note Comments::) or a preprocessor 7322 control command (*note Preprocessing::). 7323 7324'@' 7325 Prefixing an operand with an '@' specifies that the operand is a 7326 symbol and not a register. This is how the assembler disambiguates 7327 the use of an ARC register name as a symbol. So the instruction 7328 mov r0, @r0 7329 moves the address of symbol 'r0' into register 'r0'. 7330 7331'`' 7332 The '`' (backtick) character is used to separate statements on a 7333 single line. 7334 7335'-' 7336 Used as a separator to obtain a sequence of commands from a C 7337 preprocessor macro. 7338 7339 7340File: as.info, Node: ARC-Regs, Prev: ARC-Chars, Up: ARC Syntax 7341 73429.3.2.2 Register Names 7343...................... 7344 7345The ARC assembler uses the following register names for its core 7346registers: 7347 7348'r0-r31' 7349 The core general registers. Registers 'r26' through 'r31' have 7350 special functions, and are usually referred to by those synonyms. 7351 7352'gp' 7353 The global pointer and a synonym for 'r26'. 7354 7355'fp' 7356 The frame pointer and a synonym for 'r27'. 7357 7358'sp' 7359 The stack pointer and a synonym for 'r28'. 7360 7361'ilink1' 7362 For ARC 600 and ARC 700, the level 1 interrupt link register and a 7363 synonym for 'r29'. Not supported for ARCv2. 7364 7365'ilink' 7366 For ARCv2, the interrupt link register and a synonym for 'r29'. 7367 Not supported for ARC 600 and ARC 700. 7368 7369'ilink2' 7370 For ARC 600 and ARC 700, the level 2 interrupt link register and a 7371 synonym for 'r30'. Not supported for ARC v2. 7372 7373'blink' 7374 The link register and a synonym for 'r31'. 7375 7376'r32-r59' 7377 The extension core registers. 7378 7379'lp_count' 7380 The loop count register. 7381 7382'pcl' 7383 The word aligned program counter. 7384 7385 In addition the ARC processor has a large number of _auxiliary 7386registers_. The precise set depends on the extensions being supported, 7387but the following baseline set are always defined: 7388 7389'identity' 7390 Processor Identification register. Auxiliary register address 0x4. 7391 7392'pc' 7393 Program Counter. Auxiliary register address 0x6. 7394 7395'status32' 7396 Status register. Auxiliary register address 0x0a. 7397 7398'bta' 7399 Branch Target Address. Auxiliary register address 0x412. 7400 7401'ecr' 7402 Exception Cause Register. Auxiliary register address 0x403. 7403 7404'int_vector_base' 7405 Interrupt Vector Base address. Auxiliary register address 0x25. 7406 7407'status32_p0' 7408 Stored STATUS32 register on entry to level P0 interrupts. 7409 Auxiliary register address 0xb. 7410 7411'aux_user_sp' 7412 Saved User Stack Pointer. Auxiliary register address 0xd. 7413 7414'eret' 7415 Exception Return Address. Auxiliary register address 0x400. 7416 7417'erbta' 7418 BTA saved on exception entry. Auxiliary register address 0x401. 7419 7420'erstatus' 7421 STATUS32 saved on exception. Auxiliary register address 0x402. 7422 7423'bcr_ver' 7424 Build Configuration Registers Version. Auxiliary register address 7425 0x60. 7426 7427'bta_link_build' 7428 Build configuration for: BTA Registers. Auxiliary register address 7429 0x63. 7430 7431'vecbase_ac_build' 7432 Build configuration for: Interrupts. Auxiliary register address 7433 0x68. 7434 7435'rf_build' 7436 Build configuration for: Core Registers. Auxiliary register 7437 address 0x6e. 7438 7439'dccm_build' 7440 DCCM RAM Configuration Register. Auxiliary register address 0xc1. 7441 7442 Additional auxiliary register names are defined according to the 7443processor architecture version and extensions selected by the options. 7444 7445 7446File: as.info, Node: ARC Directives, Next: ARC Modifiers, Prev: ARC Syntax, Up: ARC-Dependent 7447 74489.3.3 ARC Machine Directives 7449---------------------------- 7450 7451The ARC version of 'as' supports the following additional machine 7452directives: 7453 7454'.lcomm SYMBOL, LENGTH[, ALIGNMENT]' 7455 Reserve LENGTH (an absolute expression) bytes for a local common 7456 denoted by SYMBOL. The section and value of SYMBOL are those of 7457 the new local common. The addresses are allocated in the bss 7458 section, so that at run-time the bytes start off zeroed. Since 7459 SYMBOL is not declared global, it is normally not visible to 'ld'. 7460 The optional third parameter, ALIGNMENT, specifies the desired 7461 alignment of the symbol in the bss section, specified as a byte 7462 boundary (for example, an alignment of 16 means that the least 7463 significant 4 bits of the address should be zero). The alignment 7464 must be an absolute expression, and it must be a power of two. If 7465 no alignment is specified, as will set the alignment to the largest 7466 power of two less than or equal to the size of the symbol, up to a 7467 maximum of 16. 7468 7469'.lcommon SYMBOL, LENGTH[, ALIGNMENT]' 7470 The same as 'lcomm' directive. 7471 7472'.cpu CPU' 7473 The '.cpu' directive must be followed by the desired core version. 7474 Permitted values for CPU are: 7475 'ARC600' 7476 Assemble for the ARC600 instruction set. 7477 7478 'arc600_norm' 7479 Assemble for ARC 600 with norm instructions. 7480 7481 'arc600_mul64' 7482 Assemble for ARC 600 with mul64 instructions. 7483 7484 'arc600_mul32x16' 7485 Assemble for ARC 600 with mul32x16 instructions. 7486 7487 'arc601' 7488 Assemble for ARC 601 instruction set. 7489 7490 'arc601_norm' 7491 Assemble for ARC 601 with norm instructions. 7492 7493 'arc601_mul64' 7494 Assemble for ARC 601 with mul64 instructions. 7495 7496 'arc601_mul32x16' 7497 Assemble for ARC 601 with mul32x16 instructions. 7498 7499 'ARC700' 7500 Assemble for the ARC700 instruction set. 7501 7502 'NPS400' 7503 Assemble for the NPS400 instruction set. 7504 7505 'EM' 7506 Assemble for the ARC EM instruction set. 7507 7508 'arcem' 7509 Assemble for ARC EM instruction set 7510 7511 'em4' 7512 Assemble for ARC EM with code-density instructions. 7513 7514 'em4_dmips' 7515 Assemble for ARC EM with code-density instructions. 7516 7517 'em4_fpus' 7518 Assemble for ARC EM with code-density instructions. 7519 7520 'em4_fpuda' 7521 Assemble for ARC EM with code-density, and double-precision 7522 assist instructions. 7523 7524 'quarkse_em' 7525 Assemble for QuarkSE-EM instruction set. 7526 7527 'HS' 7528 Assemble for the ARC HS instruction set. 7529 7530 'archs' 7531 Assemble for ARC HS instruction set. 7532 7533 'hs' 7534 Assemble for ARC HS instruction set. 7535 7536 'hs34' 7537 Assemble for ARC HS34 instruction set. 7538 7539 'hs38' 7540 Assemble for ARC HS38 instruction set. 7541 7542 'hs38_linux' 7543 Assemble for ARC HS38 with floating point support on. 7544 7545 Note: the '.cpu' directive overrides the command-line option 7546 '-mcpu=CPU'; a warning is emitted when the version is not 7547 consistent between the two. 7548 7549'.extAuxRegister NAME, ADDR, MODE' 7550 Auxiliary registers can be defined in the assembler source code by 7551 using this directive. The first parameter, NAME, is the name of 7552 the new auxiliary register. The second parameter, ADDR, is address 7553 the of the auxiliary register. The third parameter, MODE, 7554 specifies whether the register is readable and/or writable and is 7555 one of: 7556 'r' 7557 Read only; 7558 7559 'w' 7560 Write only; 7561 7562 'r|w' 7563 Read and write. 7564 7565 For example: 7566 .extAuxRegister mulhi, 0x12, w 7567 specifies a write only extension auxiliary register, MULHI at 7568 address 0x12. 7569 7570'.extCondCode SUFFIX, VAL' 7571 ARC supports extensible condition codes. This directive defines a 7572 new condition code, to be known by the suffix, SUFFIX and will 7573 depend on the value, VAL in the condition code. 7574 7575 For example: 7576 .extCondCode is_busy,0x14 7577 add.is_busy r1,r2,r3 7578 will only execute the 'add' instruction if the condition code value 7579 is 0x14. 7580 7581'.extCoreRegister NAME, REGNUM, MODE, SHORTCUT' 7582 Specifies an extension core register named NAME as a synonym for 7583 the register numbered REGNUM. The register number must be between 7584 32 and 59. The third argument, MODE, indicates whether the 7585 register is readable and/or writable and is one of: 7586 'r' 7587 Read only; 7588 7589 'w' 7590 Write only; 7591 7592 'r|w' 7593 Read and write. 7594 7595 The final parameter, SHORTCUT indicates whether the register has a 7596 short cut in the pipeline. The valid values are: 7597 'can_shortcut' 7598 The register has a short cut in the pipeline; 7599 7600 'cannot_shortcut' 7601 The register does not have a short cut in the pipeline. 7602 7603 For example: 7604 .extCoreRegister mlo, 57, r , can_shortcut 7605 defines a read only extension core register, 'mlo', which is 7606 register 57, and can short cut the pipeline. 7607 7608'.extInstruction NAME, OPCODE, SUBOPCODE, SUFFIXCLASS, SYNTAXCLASS' 7609 ARC allows the user to specify extension instructions. These 7610 extension instructions are not macros; the assembler creates 7611 encodings for use of these instructions according to the 7612 specification by the user. 7613 7614 The first argument, NAME, gives the name of the instruction. 7615 7616 The second argument, OPCODE, is the opcode to be used (bits 31:27 7617 in the encoding). 7618 7619 The third argument, SUBOPCODE, is the sub-opcode to be used, but 7620 the correct value also depends on the fifth argument, SYNTAXCLASS 7621 7622 The fourth argument, SUFFIXCLASS, determines the kinds of suffixes 7623 to be allowed. Valid values are: 7624 'SUFFIX_NONE' 7625 No suffixes are permitted; 7626 7627 'SUFFIX_COND' 7628 Conditional suffixes are permitted; 7629 7630 'SUFFIX_FLAG' 7631 Flag setting suffixes are permitted. 7632 7633 'SUFFIX_COND|SUFFIX_FLAG' 7634 Both conditional and flag setting suffices are permitted. 7635 7636 The fifth and final argument, SYNTAXCLASS, determines the syntax 7637 class for the instruction. It can have the following values: 7638 'SYNTAX_2OP' 7639 Two Operand Instruction; 7640 7641 'SYNTAX_3OP' 7642 Three Operand Instruction. 7643 7644 'SYNTAX_1OP' 7645 One Operand Instruction. 7646 7647 'SYNTAX_NOP' 7648 No Operand Instruction. 7649 7650 The syntax class may be followed by '|' and one of the following 7651 modifiers. 7652 7653 'OP1_MUST_BE_IMM' 7654 Modifies syntax class 'SYNTAX_3OP', specifying that the first 7655 operand of a three-operand instruction must be an immediate 7656 (i.e., the result is discarded). This is usually used to set 7657 the flags using specific instructions and not retain results. 7658 7659 'OP1_IMM_IMPLIED' 7660 Modifies syntax class 'SYNTAX_20P', specifying that there is 7661 an implied immediate destination operand which does not appear 7662 in the syntax. 7663 7664 For example, if the source code contains an instruction like: 7665 inst r1,r2 7666 the first argument is an implied immediate (that is, the 7667 result is discarded). This is the same as though the source 7668 code were: inst 0,r1,r2. 7669 7670 For example, defining a 64-bit multiplier with immediate operands: 7671 .extInstruction mp64, 0x07, 0x2d, SUFFIX_COND|SUFFIX_FLAG, 7672 SYNTAX_3OP|OP1_MUST_BE_IMM 7673 which specifies an extension instruction named 'mp64' with 3 7674 operands. It sets the flags and can be used with a condition code, 7675 for which the first operand is an immediate, i.e. equivalent to 7676 discarding the result of the operation. 7677 7678 A two operands instruction variant would be: 7679 .extInstruction mul64, 0x07, 0x2d, SUFFIX_COND, 7680 SYNTAX_2OP|OP1_IMM_IMPLIED 7681 which describes a two operand instruction with an implicit first 7682 immediate operand. The result of this operation would be 7683 discarded. 7684 7685'.arc_attribute TAG, VALUE' 7686 Set the ARC object attribute TAG to VALUE. 7687 7688 The TAG is either an attribute number, or one of the following: 7689 'Tag_ARC_PCS_config', 'Tag_ARC_CPU_base', 'Tag_ARC_CPU_variation', 7690 'Tag_ARC_CPU_name', 'Tag_ARC_ABI_rf16', 'Tag_ARC_ABI_osver', 7691 'Tag_ARC_ABI_sda', 'Tag_ARC_ABI_pic', 'Tag_ARC_ABI_tls', 7692 'Tag_ARC_ABI_enumsize', 'Tag_ARC_ABI_exceptions', 7693 'Tag_ARC_ABI_double_size', 'Tag_ARC_ISA_config', 7694 'Tag_ARC_ISA_apex', 'Tag_ARC_ISA_mpy_option' 7695 7696 The VALUE is either a 'number', '"string"', or 'number, "string"' 7697 depending on the tag. 7698 7699 7700File: as.info, Node: ARC Modifiers, Next: ARC Symbols, Prev: ARC Directives, Up: ARC-Dependent 7701 77029.3.4 ARC Assembler Modifiers 7703----------------------------- 7704 7705The following additional assembler modifiers have been added for 7706position-independent code. These modifiers are available only with the 7707ARC 700 and above processors and generate relocation entries, which are 7708interpreted by the linker as follows: 7709 7710'@pcl(SYMBOL)' 7711 Relative distance of SYMBOL's from the current program counter 7712 location. 7713 7714'@gotpc(SYMBOL)' 7715 Relative distance of SYMBOL's Global Offset Table entry from the 7716 current program counter location. 7717 7718'@gotoff(SYMBOL)' 7719 Distance of SYMBOL from the base of the Global Offset Table. 7720 7721'@plt(SYMBOL)' 7722 Distance of SYMBOL's Procedure Linkage Table entry from the current 7723 program counter. This is valid only with branch and link 7724 instructions and PC-relative calls. 7725 7726'@sda(SYMBOL)' 7727 Relative distance of SYMBOL from the base of the Small Data 7728 Pointer. 7729 7730 7731File: as.info, Node: ARC Symbols, Next: ARC Opcodes, Prev: ARC Modifiers, Up: ARC-Dependent 7732 77339.3.5 ARC Pre-defined Symbols 7734----------------------------- 7735 7736The following assembler symbols will prove useful when developing 7737position-independent code. These symbols are available only with the 7738ARC 700 and above processors. 7739 7740'__GLOBAL_OFFSET_TABLE__' 7741 Symbol referring to the base of the Global Offset Table. 7742 7743'__DYNAMIC__' 7744 An alias for the Global Offset Table 'Base__GLOBAL_OFFSET_TABLE__'. 7745 It can be used only with '@gotpc' modifiers. 7746 7747 7748File: as.info, Node: ARC Opcodes, Prev: ARC Symbols, Up: ARC-Dependent 7749 77509.3.6 Opcodes 7751------------- 7752 7753For information on the ARC instruction set, see 'ARC Programmers 7754Reference Manual', available where you download the processor IP 7755library. 7756 7757 7758File: as.info, Node: ARM-Dependent, Next: AVR-Dependent, Prev: ARC-Dependent, Up: Machine Dependencies 7759 77609.4 ARM Dependent Features 7761========================== 7762 7763* Menu: 7764 7765* ARM Options:: Options 7766* ARM Syntax:: Syntax 7767* ARM Floating Point:: Floating Point 7768* ARM Directives:: ARM Machine Directives 7769* ARM Opcodes:: Opcodes 7770* ARM Mapping Symbols:: Mapping Symbols 7771* ARM Unwinding Tutorial:: Unwinding 7772 7773 7774File: as.info, Node: ARM Options, Next: ARM Syntax, Up: ARM-Dependent 7775 77769.4.1 Options 7777------------- 7778 7779'-mcpu=PROCESSOR[+EXTENSION...]' 7780 This option specifies the target processor. The assembler will 7781 issue an error message if an attempt is made to assemble an 7782 instruction which will not execute on the target processor. The 7783 following processor names are recognized: 'arm1', 'arm2', 'arm250', 7784 'arm3', 'arm6', 'arm60', 'arm600', 'arm610', 'arm620', 'arm7', 7785 'arm7m', 'arm7d', 'arm7dm', 'arm7di', 'arm7dmi', 'arm70', 'arm700', 7786 'arm700i', 'arm710', 'arm710t', 'arm720', 'arm720t', 'arm740t', 7787 'arm710c', 'arm7100', 'arm7500', 'arm7500fe', 'arm7t', 'arm7tdmi', 7788 'arm7tdmi-s', 'arm8', 'arm810', 'strongarm', 'strongarm1', 7789 'strongarm110', 'strongarm1100', 'strongarm1110', 'arm9', 'arm920', 7790 'arm920t', 'arm922t', 'arm940t', 'arm9tdmi', 'fa526' (Faraday FA526 7791 processor), 'fa626' (Faraday FA626 processor), 'arm9e', 'arm926e', 7792 'arm926ej-s', 'arm946e-r0', 'arm946e', 'arm946e-s', 'arm966e-r0', 7793 'arm966e', 'arm966e-s', 'arm968e-s', 'arm10t', 'arm10tdmi', 7794 'arm10e', 'arm1020', 'arm1020t', 'arm1020e', 'arm1022e', 7795 'arm1026ej-s', 'fa606te' (Faraday FA606TE processor), 'fa616te' 7796 (Faraday FA616TE processor), 'fa626te' (Faraday FA626TE processor), 7797 'fmp626' (Faraday FMP626 processor), 'fa726te' (Faraday FA726TE 7798 processor), 'arm1136j-s', 'arm1136jf-s', 'arm1156t2-s', 7799 'arm1156t2f-s', 'arm1176jz-s', 'arm1176jzf-s', 'mpcore', 7800 'mpcorenovfp', 'cortex-a5', 'cortex-a7', 'cortex-a8', 'cortex-a9', 7801 'cortex-a15', 'cortex-a17', 'cortex-a32', 'cortex-a35', 7802 'cortex-a53', 'cortex-a55', 'cortex-a57', 'cortex-a72', 7803 'cortex-a73', 'cortex-a75', 'cortex-a76', 'cortex-a76ae', 7804 'cortex-a77', 'cortex-a78', 'cortex-a78ae', 'cortex-a78c', 'ares', 7805 'cortex-r4', 'cortex-r4f', 'cortex-r5', 'cortex-r7', 'cortex-r8', 7806 'cortex-r52', 'cortex-m35p', 'cortex-m33', 'cortex-m23', 7807 'cortex-m7', 'cortex-m4', 'cortex-m3', 'cortex-m1', 'cortex-m0', 7808 'cortex-m0plus', 'cortex-x1', 'exynos-m1', 'marvell-pj4', 7809 'marvell-whitney', 'neoverse-n1', 'neoverse-n2', 'neoverse-v1', 7810 'xgene1', 'xgene2', 'ep9312' (ARM920 with Cirrus Maverick 7811 coprocessor), 'i80200' (Intel XScale processor) 'iwmmxt' (Intel 7812 XScale processor with Wireless MMX technology coprocessor) and 7813 'xscale'. The special name 'all' may be used to allow the 7814 assembler to accept instructions valid for any ARM processor. 7815 7816 In addition to the basic instruction set, the assembler can be told 7817 to accept various extension mnemonics that extend the processor 7818 using the co-processor instruction space. For example, 7819 '-mcpu=arm920+maverick' is equivalent to specifying '-mcpu=ep9312'. 7820 7821 Multiple extensions may be specified, separated by a '+'. The 7822 extensions should be specified in ascending alphabetical order. 7823 7824 Some extensions may be restricted to particular architectures; this 7825 is documented in the list of extensions below. 7826 7827 Extension mnemonics may also be removed from those the assembler 7828 accepts. This is done be prepending 'no' to the option that adds 7829 the extension. Extensions that are removed should be listed after 7830 all extensions which have been added, again in ascending 7831 alphabetical order. For example, '-mcpu=ep9312+nomaverick' is 7832 equivalent to specifying '-mcpu=arm920'. 7833 7834 The following extensions are currently supported: 'bf16' (BFloat16 7835 extensions for v8.6-A architecture), 'i8mm' (Int8 Matrix Multiply 7836 extensions for v8.6-A architecture), 'crc' 'crypto' (Cryptography 7837 Extensions for v8-A architecture, implies 'fp+simd'), 'dotprod' 7838 (Dot Product Extensions for v8.2-A architecture, implies 7839 'fp+simd'), 'fp' (Floating Point Extensions for v8-A architecture), 7840 'fp16' (FP16 Extensions for v8.2-A architecture, implies 'fp'), 7841 'fp16fml' (FP16 Floating Point Multiplication Variant Extensions 7842 for v8.2-A architecture, implies 'fp16'), 'idiv' (Integer Divide 7843 Extensions for v7-A and v7-R architectures), 'iwmmxt', 'iwmmxt2', 7844 'xscale', 'maverick', 'mp' (Multiprocessing Extensions for v7-A and 7845 v7-R architectures), 'os' (Operating System for v6M architecture), 7846 'predres' (Execution and Data Prediction Restriction Instruction 7847 for v8-A architectures, added by default from v8.5-A), 'sb' 7848 (Speculation Barrier Instruction for v8-A architectures, added by 7849 default from v8.5-A), 'sec' (Security Extensions for v6K and v7-A 7850 architectures), 'simd' (Advanced SIMD Extensions for v8-A 7851 architecture, implies 'fp'), 'virt' (Virtualization Extensions for 7852 v7-A architecture, implies 'idiv'), 'pan' (Privileged Access Never 7853 Extensions for v8-A architecture), 'ras' (Reliability, Availability 7854 and Serviceability extensions for v8-A architecture), 'rdma' 7855 (ARMv8.1 Advanced SIMD extensions for v8-A architecture, implies 7856 'simd') and 'xscale'. 7857 7858'-march=ARCHITECTURE[+EXTENSION...]' 7859 This option specifies the target architecture. The assembler will 7860 issue an error message if an attempt is made to assemble an 7861 instruction which will not execute on the target architecture. The 7862 following architecture names are recognized: 'armv1', 'armv2', 7863 'armv2a', 'armv2s', 'armv3', 'armv3m', 'armv4', 'armv4xm', 7864 'armv4t', 'armv4txm', 'armv5', 'armv5t', 'armv5txm', 'armv5te', 7865 'armv5texp', 'armv6', 'armv6j', 'armv6k', 'armv6z', 'armv6kz', 7866 'armv6-m', 'armv6s-m', 'armv7', 'armv7-a', 'armv7ve', 'armv7-r', 7867 'armv7-m', 'armv7e-m', 'armv8-a', 'armv8.1-a', 'armv8.2-a', 7868 'armv8.3-a', 'armv8-r', 'armv8.4-a', 'armv8.5-a', 'armv8-m.base', 7869 'armv8-m.main', 'armv8.1-m.main', 'armv8.6-a', 'iwmmxt', 'iwmmxt2' 7870 and 'xscale'. If both '-mcpu' and '-march' are specified, the 7871 assembler will use the setting for '-mcpu'. 7872 7873 The architecture option can be extended with a set extension 7874 options. These extensions are context sensitive, i.e. the same 7875 extension may mean different things when used with different 7876 architectures. When used together with a '-mfpu' option, the union 7877 of both feature enablement is taken. See their availability and 7878 meaning below: 7879 7880 For 'armv5te', 'armv5texp', 'armv5tej', 'armv6', 'armv6j', 7881 'armv6k', 'armv6z', 'armv6kz', 'armv6zk', 'armv6t2', 'armv6kt2' and 7882 'armv6zt2': 7883 7884 '+fp': Enables VFPv2 instructions. '+nofp': Disables all FPU 7885 instrunctions. 7886 7887 For 'armv7': 7888 7889 '+fp': Enables VFPv3 instructions with 16 double-word registers. 7890 '+nofp': Disables all FPU instructions. 7891 7892 For 'armv7-a': 7893 7894 '+fp': Enables VFPv3 instructions with 16 double-word registers. 7895 '+vfpv3-d16': Alias for '+fp'. '+vfpv3': Enables VFPv3 7896 instructions with 32 double-word registers. '+vfpv3-d16-fp16': 7897 Enables VFPv3 with half precision floating-point conversion 7898 instructions and 16 double-word registers. '+vfpv3-fp16': Enables 7899 VFPv3 with half precision floating-point conversion instructions 7900 and 32 double-word registers. '+vfpv4-d16': Enables VFPv4 7901 instructions with 16 double-word registers. '+vfpv4': Enables 7902 VFPv4 instructions with 32 double-word registers. '+simd': Enables 7903 VFPv3 and NEONv1 instructions with 32 double-word registers. 7904 '+neon': Alias for '+simd'. '+neon-vfpv3': Alias for '+simd'. 7905 '+neon-fp16': Enables VFPv3, half precision floating-point 7906 conversion and NEONv1 instructions with 32 double-word registers. 7907 '+neon-vfpv4': Enables VFPv4 and NEONv1 with Fused-MAC instructions 7908 and 32 double-word registers. '+mp': Enables Multiprocessing 7909 Extensions. '+sec': Enables Security Extensions. '+nofp': 7910 Disables all FPU and NEON instructions. '+nosimd': Disables all 7911 NEON instructions. 7912 7913 For 'armv7ve': 7914 7915 '+fp': Enables VFPv4 instructions with 16 double-word registers. 7916 '+vfpv4-d16': Alias for '+fp'. '+vfpv3-d16': Enables VFPv3 7917 instructions with 16 double-word registers. '+vfpv3': Enables 7918 VFPv3 instructions with 32 double-word registers. 7919 '+vfpv3-d16-fp16': Enables VFPv3 with half precision floating-point 7920 conversion instructions and 16 double-word registers. 7921 '+vfpv3-fp16': Enables VFPv3 with half precision floating-point 7922 conversion instructions and 32 double-word registers. '+vfpv4': 7923 Enables VFPv4 instructions with 32 double-word registers. '+simd': 7924 Enables VFPv4 and NEONv1 with Fused-MAC instructions and 32 7925 double-word registers. '+neon-vfpv4': Alias for '+simd'. '+neon': 7926 Enables VFPv3 and NEONv1 instructions with 32 double-word 7927 registers. '+neon-vfpv3': Alias for '+neon'. '+neon-fp16': 7928 Enables VFPv3, half precision floating-point conversion and NEONv1 7929 instructions with 32 double-word registers. double-word registers. 7930 '+nofp': Disables all FPU and NEON instructions. '+nosimd': 7931 Disables all NEON instructions. 7932 7933 For 'armv7-r': 7934 7935 '+fp.sp': Enables single-precision only VFPv3 instructions with 16 7936 double-word registers. '+vfpv3xd': Alias for '+fp.sp'. '+fp': 7937 Enables VFPv3 instructions with 16 double-word registers. 7938 '+vfpv3-d16': Alias for '+fp'. '+vfpv3xd-fp16': Enables 7939 single-precision only VFPv3 and half floating-point conversion 7940 instructions with 16 double-word registers. '+vfpv3-d16-fp16': 7941 Enables VFPv3 and half precision floating-point conversion 7942 instructions with 16 double-word registers. '+idiv': Enables 7943 integer division instructions in ARM mode. '+nofp': Disables all 7944 FPU instructions. 7945 7946 For 'armv7e-m': 7947 7948 '+fp': Enables single-precision only VFPv4 instructions with 16 7949 double-word registers. '+vfpvf4-sp-d16': Alias for '+fp'. 7950 '+fpv5': Enables single-precision only VFPv5 instructions with 16 7951 double-word registers. '+fp.dp': Enables VFPv5 instructions with 7952 16 double-word registers. '+fpv5-d16"': Alias for '+fp.dp'. 7953 '+nofp': Disables all FPU instructions. 7954 7955 For 'armv8-m.main': 7956 7957 '+dsp': Enables DSP Extension. '+fp': Enables single-precision 7958 only VFPv5 instructions with 16 double-word registers. '+fp.dp': 7959 Enables VFPv5 instructions with 16 double-word registers. 7960 '+cdecp0' (CDE extensions for v8-m architecture with coprocessor 7961 0), '+cdecp1' (CDE extensions for v8-m architecture with 7962 coprocessor 1), '+cdecp2' (CDE extensions for v8-m architecture 7963 with coprocessor 2), '+cdecp3' (CDE extensions for v8-m 7964 architecture with coprocessor 3), '+cdecp4' (CDE extensions for 7965 v8-m architecture with coprocessor 4), '+cdecp5' (CDE extensions 7966 for v8-m architecture with coprocessor 5), '+cdecp6' (CDE 7967 extensions for v8-m architecture with coprocessor 6), '+cdecp7' 7968 (CDE extensions for v8-m architecture with coprocessor 7), '+nofp': 7969 Disables all FPU instructions. '+nodsp': Disables DSP Extension. 7970 7971 For 'armv8.1-m.main': 7972 7973 '+dsp': Enables DSP Extension. '+fp': Enables single and half 7974 precision scalar Floating Point Extensions for Armv8.1-M Mainline 7975 with 16 double-word registers. '+fp.dp': Enables double precision 7976 scalar Floating Point Extensions for Armv8.1-M Mainline, implies 7977 '+fp'. '+mve': Enables integer only M-profile Vector Extension for 7978 Armv8.1-M Mainline, implies '+dsp'. '+mve.fp': Enables Floating 7979 Point M-profile Vector Extension for Armv8.1-M Mainline, implies 7980 '+mve' and '+fp'. '+nofp': Disables all FPU instructions. 7981 '+nodsp': Disables DSP Extension. '+nomve': Disables all M-profile 7982 Vector Extensions. 7983 7984 For 'armv8-a': 7985 7986 '+crc': Enables CRC32 Extension. '+simd': Enables VFP and NEON for 7987 Armv8-A. '+crypto': Enables Cryptography Extensions for Armv8-A, 7988 implies '+simd'. '+sb': Enables Speculation Barrier Instruction 7989 for Armv8-A. '+predres': Enables Execution and Data Prediction 7990 Restriction Instruction for Armv8-A. '+nofp': Disables all FPU, 7991 NEON and Cryptography Extensions. '+nocrypto': Disables 7992 Cryptography Extensions. 7993 7994 For 'armv8.1-a': 7995 7996 '+simd': Enables VFP and NEON for Armv8.1-A. '+crypto': Enables 7997 Cryptography Extensions for Armv8-A, implies '+simd'. '+sb': 7998 Enables Speculation Barrier Instruction for Armv8-A. '+predres': 7999 Enables Execution and Data Prediction Restriction Instruction for 8000 Armv8-A. '+nofp': Disables all FPU, NEON and Cryptography 8001 Extensions. '+nocrypto': Disables Cryptography Extensions. 8002 8003 For 'armv8.2-a' and 'armv8.3-a': 8004 8005 '+simd': Enables VFP and NEON for Armv8.1-A. '+fp16': Enables FP16 8006 Extension for Armv8.2-A, implies '+simd'. '+fp16fml': Enables FP16 8007 Floating Point Multiplication Variant Extensions for Armv8.2-A, 8008 implies '+fp16'. '+crypto': Enables Cryptography Extensions for 8009 Armv8-A, implies '+simd'. '+dotprod': Enables Dot Product 8010 Extensions for Armv8.2-A, implies '+simd'. '+sb': Enables 8011 Speculation Barrier Instruction for Armv8-A. '+predres': Enables 8012 Execution and Data Prediction Restriction Instruction for Armv8-A. 8013 '+nofp': Disables all FPU, NEON, Cryptography and Dot Product 8014 Extensions. '+nocrypto': Disables Cryptography Extensions. 8015 8016 For 'armv8.4-a': 8017 8018 '+simd': Enables VFP and NEON for Armv8.1-A and Dot Product 8019 Extensions for Armv8.2-A. '+fp16': Enables FP16 Floating Point and 8020 Floating Point Multiplication Variant Extensions for Armv8.2-A, 8021 implies '+simd'. '+crypto': Enables Cryptography Extensions for 8022 Armv8-A, implies '+simd'. '+sb': Enables Speculation Barrier 8023 Instruction for Armv8-A. '+predres': Enables Execution and Data 8024 Prediction Restriction Instruction for Armv8-A. '+nofp': Disables 8025 all FPU, NEON, Cryptography and Dot Product Extensions. 8026 '+nocryptp': Disables Cryptography Extensions. 8027 8028 For 'armv8.5-a': 8029 8030 '+simd': Enables VFP and NEON for Armv8.1-A and Dot Product 8031 Extensions for Armv8.2-A. '+fp16': Enables FP16 Floating Point and 8032 Floating Point Multiplication Variant Extensions for Armv8.2-A, 8033 implies '+simd'. '+crypto': Enables Cryptography Extensions for 8034 Armv8-A, implies '+simd'. '+nofp': Disables all FPU, NEON, 8035 Cryptography and Dot Product Extensions. '+nocryptp': Disables 8036 Cryptography Extensions. 8037 8038'-mfpu=FLOATING-POINT-FORMAT' 8039 8040 This option specifies the floating point format to assemble for. 8041 The assembler will issue an error message if an attempt is made to 8042 assemble an instruction which will not execute on the target 8043 floating point unit. The following format options are recognized: 8044 'softfpa', 'fpe', 'fpe2', 'fpe3', 'fpa', 'fpa10', 'fpa11', 8045 'arm7500fe', 'softvfp', 'softvfp+vfp', 'vfp', 'vfp10', 'vfp10-r0', 8046 'vfp9', 'vfpxd', 'vfpv2', 'vfpv3', 'vfpv3-fp16', 'vfpv3-d16', 8047 'vfpv3-d16-fp16', 'vfpv3xd', 'vfpv3xd-d16', 'vfpv4', 'vfpv4-d16', 8048 'fpv4-sp-d16', 'fpv5-sp-d16', 'fpv5-d16', 'fp-armv8', 'arm1020t', 8049 'arm1020e', 'arm1136jf-s', 'maverick', 'neon', 'neon-vfpv3', 8050 'neon-fp16', 'neon-vfpv4', 'neon-fp-armv8', 'crypto-neon-fp-armv8', 8051 'neon-fp-armv8.1' and 'crypto-neon-fp-armv8.1'. 8052 8053 In addition to determining which instructions are assembled, this 8054 option also affects the way in which the '.double' assembler 8055 directive behaves when assembling little-endian code. 8056 8057 The default is dependent on the processor selected. For 8058 Architecture 5 or later, the default is to assemble for VFP 8059 instructions; for earlier architectures the default is to assemble 8060 for FPA instructions. 8061 8062'-mfp16-format=FORMAT' 8063 This option specifies the half-precision floating point format to 8064 use when assembling floating point numbers emitted by the 8065 '.float16' directive. The following format options are recognized: 8066 'ieee', 'alternative'. If 'ieee' is specified then the IEEE 8067 754-2008 half-precision floating point format is used, if 8068 'alternative' is specified then the Arm alternative half-precision 8069 format is used. If this option is set on the command line then the 8070 format is fixed and cannot be changed with the 'float16_format' 8071 directive. If this value is not set then the IEEE 754-2008 format 8072 is used until the format is explicitly set with the 8073 'float16_format' directive. 8074 8075'-mthumb' 8076 This option specifies that the assembler should start assembling 8077 Thumb instructions; that is, it should behave as though the file 8078 starts with a '.code 16' directive. 8079 8080'-mthumb-interwork' 8081 This option specifies that the output generated by the assembler 8082 should be marked as supporting interworking. It also affects the 8083 behaviour of the 'ADR' and 'ADRL' pseudo opcodes. 8084 8085'-mimplicit-it=never' 8086'-mimplicit-it=always' 8087'-mimplicit-it=arm' 8088'-mimplicit-it=thumb' 8089 The '-mimplicit-it' option controls the behavior of the assembler 8090 when conditional instructions are not enclosed in IT blocks. There 8091 are four possible behaviors. If 'never' is specified, such 8092 constructs cause a warning in ARM code and an error in Thumb-2 8093 code. If 'always' is specified, such constructs are accepted in 8094 both ARM and Thumb-2 code, where the IT instruction is added 8095 implicitly. If 'arm' is specified, such constructs are accepted in 8096 ARM code and cause an error in Thumb-2 code. If 'thumb' is 8097 specified, such constructs cause a warning in ARM code and are 8098 accepted in Thumb-2 code. If you omit this option, the behavior is 8099 equivalent to '-mimplicit-it=arm'. 8100 8101'-mapcs-26' 8102'-mapcs-32' 8103 These options specify that the output generated by the assembler 8104 should be marked as supporting the indicated version of the Arm 8105 Procedure. Calling Standard. 8106 8107'-matpcs' 8108 This option specifies that the output generated by the assembler 8109 should be marked as supporting the Arm/Thumb Procedure Calling 8110 Standard. If enabled this option will cause the assembler to 8111 create an empty debugging section in the object file called 8112 .arm.atpcs. Debuggers can use this to determine the ABI being used 8113 by. 8114 8115'-mapcs-float' 8116 This indicates the floating point variant of the APCS should be 8117 used. In this variant floating point arguments are passed in FP 8118 registers rather than integer registers. 8119 8120'-mapcs-reentrant' 8121 This indicates that the reentrant variant of the APCS should be 8122 used. This variant supports position independent code. 8123 8124'-mfloat-abi=ABI' 8125 This option specifies that the output generated by the assembler 8126 should be marked as using specified floating point ABI. The 8127 following values are recognized: 'soft', 'softfp' and 'hard'. 8128 8129'-meabi=VER' 8130 This option specifies which EABI version the produced object files 8131 should conform to. The following values are recognized: 'gnu', '4' 8132 and '5'. 8133 8134'-EB' 8135 This option specifies that the output generated by the assembler 8136 should be marked as being encoded for a big-endian processor. 8137 8138 Note: If a program is being built for a system with big-endian data 8139 and little-endian instructions then it should be assembled with the 8140 '-EB' option, (all of it, code and data) and then linked with the 8141 '--be8' option. This will reverse the endianness of the 8142 instructions back to little-endian, but leave the data as 8143 big-endian. 8144 8145'-EL' 8146 This option specifies that the output generated by the assembler 8147 should be marked as being encoded for a little-endian processor. 8148 8149'-k' 8150 This option specifies that the output of the assembler should be 8151 marked as position-independent code (PIC). 8152 8153'--fix-v4bx' 8154 Allow 'BX' instructions in ARMv4 code. This is intended for use 8155 with the linker option of the same name. 8156 8157'-mwarn-deprecated' 8158'-mno-warn-deprecated' 8159 Enable or disable warnings about using deprecated options or 8160 features. The default is to warn. 8161 8162'-mccs' 8163 Turns on CodeComposer Studio assembly syntax compatibility mode. 8164 8165'-mwarn-syms' 8166'-mno-warn-syms' 8167 Enable or disable warnings about symbols that match the names of 8168 ARM instructions. The default is to warn. 8169 8170 8171File: as.info, Node: ARM Syntax, Next: ARM Floating Point, Prev: ARM Options, Up: ARM-Dependent 8172 81739.4.2 Syntax 8174------------ 8175 8176* Menu: 8177 8178* ARM-Instruction-Set:: Instruction Set 8179* ARM-Chars:: Special Characters 8180* ARM-Regs:: Register Names 8181* ARM-Relocations:: Relocations 8182* ARM-Neon-Alignment:: NEON Alignment Specifiers 8183 8184 8185File: as.info, Node: ARM-Instruction-Set, Next: ARM-Chars, Up: ARM Syntax 8186 81879.4.2.1 Instruction Set Syntax 8188.............................. 8189 8190Two slightly different syntaxes are support for ARM and THUMB 8191instructions. The default, 'divided', uses the old style where ARM and 8192THUMB instructions had their own, separate syntaxes. The new, 'unified' 8193syntax, which can be selected via the '.syntax' directive, and has the 8194following main features: 8195 8196 * Immediate operands do not require a '#' prefix. 8197 8198 * The 'IT' instruction may appear, and if it does it is validated 8199 against subsequent conditional affixes. In ARM mode it does not 8200 generate machine code, in THUMB mode it does. 8201 8202 * For ARM instructions the conditional affixes always appear at the 8203 end of the instruction. For THUMB instructions conditional affixes 8204 can be used, but only inside the scope of an 'IT' instruction. 8205 8206 * All of the instructions new to the V6T2 architecture (and later) 8207 are available. (Only a few such instructions can be written in the 8208 'divided' syntax). 8209 8210 * The '.N' and '.W' suffixes are recognized and honored. 8211 8212 * All instructions set the flags if and only if they have an 's' 8213 affix. 8214 8215 8216File: as.info, Node: ARM-Chars, Next: ARM-Regs, Prev: ARM-Instruction-Set, Up: ARM Syntax 8217 82189.4.2.2 Special Characters 8219.......................... 8220 8221The presence of a '@' anywhere on a line indicates the start of a 8222comment that extends to the end of that line. 8223 8224 If a '#' appears as the first character of a line then the whole line 8225is treated as a comment, but in this case the line could also be a 8226logical line number directive (*note Comments::) or a preprocessor 8227control command (*note Preprocessing::). 8228 8229 The ';' character can be used instead of a newline to separate 8230statements. 8231 8232 Either '#' or '$' can be used to indicate immediate operands. 8233 8234 *TODO* Explain about /data modifier on symbols. 8235 8236 8237File: as.info, Node: ARM-Regs, Next: ARM-Relocations, Prev: ARM-Chars, Up: ARM Syntax 8238 82399.4.2.3 Register Names 8240...................... 8241 8242*TODO* Explain about ARM register naming, and the predefined names. 8243 8244 8245File: as.info, Node: ARM-Relocations, Next: ARM-Neon-Alignment, Prev: ARM-Regs, Up: ARM Syntax 8246 82479.4.2.4 ARM relocation generation 8248................................. 8249 8250Specific data relocations can be generated by putting the relocation 8251name in parentheses after the symbol name. For example: 8252 8253 .word foo(TARGET1) 8254 8255 This will generate an 'R_ARM_TARGET1' relocation against the symbol 8256FOO. The following relocations are supported: 'GOT', 'GOTOFF', 8257'TARGET1', 'TARGET2', 'SBREL', 'TLSGD', 'TLSLDM', 'TLSLDO', 'TLSDESC', 8258'TLSCALL', 'GOTTPOFF', 'GOT_PREL' and 'TPOFF'. 8259 8260 For compatibility with older toolchains the assembler also accepts 8261'(PLT)' after branch targets. On legacy targets this will generate the 8262deprecated 'R_ARM_PLT32' relocation. On EABI targets it will encode 8263either the 'R_ARM_CALL' or 'R_ARM_JUMP24' relocation, as appropriate. 8264 8265 Relocations for 'MOVW' and 'MOVT' instructions can be generated by 8266prefixing the value with '#:lower16:' and '#:upper16' respectively. For 8267example to load the 32-bit address of foo into r0: 8268 8269 MOVW r0, #:lower16:foo 8270 MOVT r0, #:upper16:foo 8271 8272 Relocations 'R_ARM_THM_ALU_ABS_G0_NC', 'R_ARM_THM_ALU_ABS_G1_NC', 8273'R_ARM_THM_ALU_ABS_G2_NC' and 'R_ARM_THM_ALU_ABS_G3_NC' can be generated 8274by prefixing the value with '#:lower0_7:#', '#:lower8_15:#', 8275'#:upper0_7:#' and '#:upper8_15:#' respectively. For example to load 8276the 32-bit address of foo into r0: 8277 8278 MOVS r0, #:upper8_15:#foo 8279 LSLS r0, r0, #8 8280 ADDS r0, #:upper0_7:#foo 8281 LSLS r0, r0, #8 8282 ADDS r0, #:lower8_15:#foo 8283 LSLS r0, r0, #8 8284 ADDS r0, #:lower0_7:#foo 8285 8286 8287File: as.info, Node: ARM-Neon-Alignment, Prev: ARM-Relocations, Up: ARM Syntax 8288 82899.4.2.5 NEON Alignment Specifiers 8290................................. 8291 8292Some NEON load/store instructions allow an optional address alignment 8293qualifier. The ARM documentation specifies that this is indicated by '@ 8294ALIGN'. However GAS already interprets the '@' character as a "line 8295comment" start, so ': ALIGN' is used instead. For example: 8296 8297 vld1.8 {q0}, [r0, :128] 8298 8299 8300File: as.info, Node: ARM Floating Point, Next: ARM Directives, Prev: ARM Syntax, Up: ARM-Dependent 8301 83029.4.3 Floating Point 8303-------------------- 8304 8305The ARM family uses IEEE floating-point numbers. 8306 8307 8308File: as.info, Node: ARM Directives, Next: ARM Opcodes, Prev: ARM Floating Point, Up: ARM-Dependent 8309 83109.4.4 ARM Machine Directives 8311---------------------------- 8312 8313'.align EXPRESSION [, EXPRESSION]' 8314 This is the generic .ALIGN directive. For the ARM however if the 8315 first argument is zero (ie no alignment is needed) the assembler 8316 will behave as if the argument had been 2 (ie pad to the next four 8317 byte boundary). This is for compatibility with ARM's own 8318 assembler. 8319 8320'.arch NAME' 8321 Select the target architecture. Valid values for NAME are the same 8322 as for the '-march' command-line option without the instruction set 8323 extension. 8324 8325 Specifying '.arch' clears any previously selected architecture 8326 extensions. 8327 8328'.arch_extension NAME' 8329 Add or remove an architecture extension to the target architecture. 8330 Valid values for NAME are the same as those accepted as 8331 architectural extensions by the '-mcpu' and '-march' command-line 8332 options. 8333 8334 '.arch_extension' may be used multiple times to add or remove 8335 extensions incrementally to the architecture being compiled for. 8336 8337'.arm' 8338 This performs the same action as .CODE 32. 8339 8340'.bss' 8341 This directive switches to the '.bss' section. 8342 8343'.cantunwind' 8344 Prevents unwinding through the current function. No personality 8345 routine or exception table data is required or permitted. 8346 8347'.code [16|32]' 8348 This directive selects the instruction set being generated. The 8349 value 16 selects Thumb, with the value 32 selecting ARM. 8350 8351'.cpu NAME' 8352 Select the target processor. Valid values for NAME are the same as 8353 for the '-mcpu' command-line option without the instruction set 8354 extension. 8355 8356 Specifying '.cpu' clears any previously selected architecture 8357 extensions. 8358 8359'NAME .dn REGISTER NAME [.TYPE] [[INDEX]]' 8360'NAME .qn REGISTER NAME [.TYPE] [[INDEX]]' 8361 8362 The 'dn' and 'qn' directives are used to create typed and/or 8363 indexed register aliases for use in Advanced SIMD Extension (Neon) 8364 instructions. The former should be used to create aliases of 8365 double-precision registers, and the latter to create aliases of 8366 quad-precision registers. 8367 8368 If these directives are used to create typed aliases, those aliases 8369 can be used in Neon instructions instead of writing types after the 8370 mnemonic or after each operand. For example: 8371 8372 x .dn d2.f32 8373 y .dn d3.f32 8374 z .dn d4.f32[1] 8375 vmul x,y,z 8376 8377 This is equivalent to writing the following: 8378 8379 vmul.f32 d2,d3,d4[1] 8380 8381 Aliases created using 'dn' or 'qn' can be destroyed using 'unreq'. 8382 8383'.eabi_attribute TAG, VALUE' 8384 Set the EABI object attribute TAG to VALUE. 8385 8386 The TAG is either an attribute number, or one of the following: 8387 'Tag_CPU_raw_name', 'Tag_CPU_name', 'Tag_CPU_arch', 8388 'Tag_CPU_arch_profile', 'Tag_ARM_ISA_use', 'Tag_THUMB_ISA_use', 8389 'Tag_FP_arch', 'Tag_WMMX_arch', 'Tag_Advanced_SIMD_arch', 8390 'Tag_MVE_arch', 'Tag_PCS_config', 'Tag_ABI_PCS_R9_use', 8391 'Tag_ABI_PCS_RW_data', 'Tag_ABI_PCS_RO_data', 8392 'Tag_ABI_PCS_GOT_use', 'Tag_ABI_PCS_wchar_t', 8393 'Tag_ABI_FP_rounding', 'Tag_ABI_FP_denormal', 8394 'Tag_ABI_FP_exceptions', 'Tag_ABI_FP_user_exceptions', 8395 'Tag_ABI_FP_number_model', 'Tag_ABI_align_needed', 8396 'Tag_ABI_align_preserved', 'Tag_ABI_enum_size', 8397 'Tag_ABI_HardFP_use', 'Tag_ABI_VFP_args', 'Tag_ABI_WMMX_args', 8398 'Tag_ABI_optimization_goals', 'Tag_ABI_FP_optimization_goals', 8399 'Tag_compatibility', 'Tag_CPU_unaligned_access', 8400 'Tag_FP_HP_extension', 'Tag_ABI_FP_16bit_format', 8401 'Tag_MPextension_use', 'Tag_DIV_use', 'Tag_nodefaults', 8402 'Tag_also_compatible_with', 'Tag_conformance', 'Tag_T2EE_use', 8403 'Tag_Virtualization_use' 8404 8405 The VALUE is either a 'number', '"string"', or 'number, "string"' 8406 depending on the tag. 8407 8408 Note - the following legacy values are also accepted by TAG: 8409 'Tag_VFP_arch', 'Tag_ABI_align8_needed', 8410 'Tag_ABI_align8_preserved', 'Tag_VFP_HP_extension', 8411 8412'.even' 8413 This directive aligns to an even-numbered address. 8414 8415'.extend EXPRESSION [, EXPRESSION]*' 8416'.ldouble EXPRESSION [, EXPRESSION]*' 8417 These directives write 12byte long double floating-point values to 8418 the output section. These are not compatible with current ARM 8419 processors or ABIs. 8420 8421'.float16 VALUE [,...,VALUE_N]' 8422 Place the half precision floating point representation of one or 8423 more floating-point values into the current section. The exact 8424 format of the encoding is specified by '.float16_format'. If the 8425 format has not been explicitly set yet (either via the 8426 '.float16_format' directive or the command line option) then the 8427 IEEE 754-2008 format is used. 8428 8429'.float16_format FORMAT' 8430 Set the format to use when encoding float16 values emitted by the 8431 '.float16' directive. Once the format has been set it cannot be 8432 changed. 'format' should be one of the following: 'ieee' (encode 8433 in the IEEE 754-2008 half precision format) or 'alternative' 8434 (encode in the Arm alternative half precision format). 8435 8436'.fnend' 8437 Marks the end of a function with an unwind table entry. The unwind 8438 index table entry is created when this directive is processed. 8439 8440 If no personality routine has been specified then standard 8441 personality routine 0 or 1 will be used, depending on the number of 8442 unwind opcodes required. 8443 8444'.fnstart' 8445 Marks the start of a function with an unwind table entry. 8446 8447'.force_thumb' 8448 This directive forces the selection of Thumb instructions, even if 8449 the target processor does not support those instructions 8450 8451'.fpu NAME' 8452 Select the floating-point unit to assemble for. Valid values for 8453 NAME are the same as for the '-mfpu' command-line option. 8454 8455'.handlerdata' 8456 Marks the end of the current function, and the start of the 8457 exception table entry for that function. Anything between this 8458 directive and the '.fnend' directive will be added to the exception 8459 table entry. 8460 8461 Must be preceded by a '.personality' or '.personalityindex' 8462 directive. 8463 8464'.inst OPCODE [ , ... ]' 8465'.inst.n OPCODE [ , ... ]' 8466'.inst.w OPCODE [ , ... ]' 8467 Generates the instruction corresponding to the numerical value 8468 OPCODE. '.inst.n' and '.inst.w' allow the Thumb instruction size 8469 to be specified explicitly, overriding the normal encoding rules. 8470 8471'.ldouble EXPRESSION [, EXPRESSION]*' 8472 See '.extend'. 8473 8474'.ltorg' 8475 This directive causes the current contents of the literal pool to 8476 be dumped into the current section (which is assumed to be the 8477 .text section) at the current location (aligned to a word 8478 boundary). 'GAS' maintains a separate literal pool for each 8479 section and each sub-section. The '.ltorg' directive will only 8480 affect the literal pool of the current section and sub-section. At 8481 the end of assembly all remaining, un-empty literal pools will 8482 automatically be dumped. 8483 8484 Note - older versions of 'GAS' would dump the current literal pool 8485 any time a section change occurred. This is no longer done, since 8486 it prevents accurate control of the placement of literal pools. 8487 8488'.movsp REG [, #OFFSET]' 8489 Tell the unwinder that REG contains an offset from the current 8490 stack pointer. If OFFSET is not specified then it is assumed to be 8491 zero. 8492 8493'.object_arch NAME' 8494 Override the architecture recorded in the EABI object attribute 8495 section. Valid values for NAME are the same as for the '.arch' 8496 directive. Typically this is useful when code uses runtime 8497 detection of CPU features. 8498 8499'.packed EXPRESSION [, EXPRESSION]*' 8500 This directive writes 12-byte packed floating-point values to the 8501 output section. These are not compatible with current ARM 8502 processors or ABIs. 8503 8504'.pad #COUNT' 8505 Generate unwinder annotations for a stack adjustment of COUNT 8506 bytes. A positive value indicates the function prologue allocated 8507 stack space by decrementing the stack pointer. 8508 8509'.personality NAME' 8510 Sets the personality routine for the current function to NAME. 8511 8512'.personalityindex INDEX' 8513 Sets the personality routine for the current function to the EABI 8514 standard routine number INDEX 8515 8516'.pool' 8517 This is a synonym for .ltorg. 8518 8519'NAME .req REGISTER NAME' 8520 This creates an alias for REGISTER NAME called NAME. For example: 8521 8522 foo .req r0 8523 8524'.save REGLIST' 8525 Generate unwinder annotations to restore the registers in REGLIST. 8526 The format of REGLIST is the same as the corresponding 8527 store-multiple instruction. 8528 8529 _core registers_ 8530 .save {r4, r5, r6, lr} 8531 stmfd sp!, {r4, r5, r6, lr} 8532 _FPA registers_ 8533 .save f4, 2 8534 sfmfd f4, 2, [sp]! 8535 _VFP registers_ 8536 .save {d8, d9, d10} 8537 fstmdx sp!, {d8, d9, d10} 8538 _iWMMXt registers_ 8539 .save {wr10, wr11} 8540 wstrd wr11, [sp, #-8]! 8541 wstrd wr10, [sp, #-8]! 8542 or 8543 .save wr11 8544 wstrd wr11, [sp, #-8]! 8545 .save wr10 8546 wstrd wr10, [sp, #-8]! 8547 8548'.setfp FPREG, SPREG [, #OFFSET]' 8549 Make all unwinder annotations relative to a frame pointer. Without 8550 this the unwinder will use offsets from the stack pointer. 8551 8552 The syntax of this directive is the same as the 'add' or 'mov' 8553 instruction used to set the frame pointer. SPREG must be either 8554 'sp' or mentioned in a previous '.movsp' directive. 8555 8556 .movsp ip 8557 mov ip, sp 8558 ... 8559 .setfp fp, ip, #4 8560 add fp, ip, #4 8561 8562'.secrel32 EXPRESSION [, EXPRESSION]*' 8563 This directive emits relocations that evaluate to the 8564 section-relative offset of each expression's symbol. This 8565 directive is only supported for PE targets. 8566 8567'.syntax [unified | divided]' 8568 This directive sets the Instruction Set Syntax as described in the 8569 *note ARM-Instruction-Set:: section. 8570 8571'.thumb' 8572 This performs the same action as .CODE 16. 8573 8574'.thumb_func' 8575 This directive specifies that the following symbol is the name of a 8576 Thumb encoded function. This information is necessary in order to 8577 allow the assembler and linker to generate correct code for 8578 interworking between Arm and Thumb instructions and should be used 8579 even if interworking is not going to be performed. The presence of 8580 this directive also implies '.thumb' 8581 8582 This directive is not necessary when generating EABI objects. On 8583 these targets the encoding is implicit when generating Thumb code. 8584 8585'.thumb_set' 8586 This performs the equivalent of a '.set' directive in that it 8587 creates a symbol which is an alias for another symbol (possibly not 8588 yet defined). This directive also has the added property in that 8589 it marks the aliased symbol as being a thumb function entry point, 8590 in the same way that the '.thumb_func' directive does. 8591 8592'.tlsdescseq TLS-VARIABLE' 8593 This directive is used to annotate parts of an inlined TLS 8594 descriptor trampoline. Normally the trampoline is provided by the 8595 linker, and this directive is not needed. 8596 8597'.unreq ALIAS-NAME' 8598 This undefines a register alias which was previously defined using 8599 the 'req', 'dn' or 'qn' directives. For example: 8600 8601 foo .req r0 8602 .unreq foo 8603 8604 An error occurs if the name is undefined. Note - this pseudo op 8605 can be used to delete builtin in register name aliases (eg 'r0'). 8606 This should only be done if it is really necessary. 8607 8608'.unwind_raw OFFSET, BYTE1, ...' 8609 Insert one of more arbitrary unwind opcode bytes, which are known 8610 to adjust the stack pointer by OFFSET bytes. 8611 8612 For example '.unwind_raw 4, 0xb1, 0x01' is equivalent to '.save 8613 {r0}' 8614 8615'.vsave VFP-REGLIST' 8616 Generate unwinder annotations to restore the VFP registers in 8617 VFP-REGLIST using FLDMD. Also works for VFPv3 registers that are to 8618 be restored using VLDM. The format of VFP-REGLIST is the same as 8619 the corresponding store-multiple instruction. 8620 8621 _VFP registers_ 8622 .vsave {d8, d9, d10} 8623 fstmdd sp!, {d8, d9, d10} 8624 _VFPv3 registers_ 8625 .vsave {d15, d16, d17} 8626 vstm sp!, {d15, d16, d17} 8627 8628 Since FLDMX and FSTMX are now deprecated, this directive should be 8629 used in favour of '.save' for saving VFP registers for ARMv6 and 8630 above. 8631 8632 8633File: as.info, Node: ARM Opcodes, Next: ARM Mapping Symbols, Prev: ARM Directives, Up: ARM-Dependent 8634 86359.4.5 Opcodes 8636------------- 8637 8638'as' implements all the standard ARM opcodes. It also implements 8639several pseudo opcodes, including several synthetic load instructions. 8640 8641'NOP' 8642 nop 8643 8644 This pseudo op will always evaluate to a legal ARM instruction that 8645 does nothing. Currently it will evaluate to MOV r0, r0. 8646 8647'LDR' 8648 ldr <register> , = <expression> 8649 8650 If expression evaluates to a numeric constant then a MOV or MVN 8651 instruction will be used in place of the LDR instruction, if the 8652 constant can be generated by either of these instructions. 8653 Otherwise the constant will be placed into the nearest literal pool 8654 (if it not already there) and a PC relative LDR instruction will be 8655 generated. 8656 8657'ADR' 8658 adr <register> <label> 8659 8660 This instruction will load the address of LABEL into the indicated 8661 register. The instruction will evaluate to a PC relative ADD or 8662 SUB instruction depending upon where the label is located. If the 8663 label is out of range, or if it is not defined in the same file 8664 (and section) as the ADR instruction, then an error will be 8665 generated. This instruction will not make use of the literal pool. 8666 8667 If LABEL is a thumb function symbol, and thumb interworking has 8668 been enabled via the '-mthumb-interwork' option then the bottom bit 8669 of the value stored into REGISTER will be set. This allows the 8670 following sequence to work as expected: 8671 8672 adr r0, thumb_function 8673 blx r0 8674 8675'ADRL' 8676 adrl <register> <label> 8677 8678 This instruction will load the address of LABEL into the indicated 8679 register. The instruction will evaluate to one or two PC relative 8680 ADD or SUB instructions depending upon where the label is located. 8681 If a second instruction is not needed a NOP instruction will be 8682 generated in its place, so that this instruction is always 8 bytes 8683 long. 8684 8685 If the label is out of range, or if it is not defined in the same 8686 file (and section) as the ADRL instruction, then an error will be 8687 generated. This instruction will not make use of the literal pool. 8688 8689 If LABEL is a thumb function symbol, and thumb interworking has 8690 been enabled via the '-mthumb-interwork' option then the bottom bit 8691 of the value stored into REGISTER will be set. 8692 8693 For information on the ARM or Thumb instruction sets, see 'ARM 8694Software Development Toolkit Reference Manual', Advanced RISC Machines 8695Ltd. 8696 8697 8698File: as.info, Node: ARM Mapping Symbols, Next: ARM Unwinding Tutorial, Prev: ARM Opcodes, Up: ARM-Dependent 8699 87009.4.6 Mapping Symbols 8701--------------------- 8702 8703The ARM ELF specification requires that special symbols be inserted into 8704object files to mark certain features: 8705 8706'$a' 8707 At the start of a region of code containing ARM instructions. 8708 8709'$t' 8710 At the start of a region of code containing THUMB instructions. 8711 8712'$d' 8713 At the start of a region of data. 8714 8715 The assembler will automatically insert these symbols for you - there 8716is no need to code them yourself. Support for tagging symbols ($b, $f, 8717$p and $m) which is also mentioned in the current ARM ELF specification 8718is not implemented. This is because they have been dropped from the new 8719EABI and so tools cannot rely upon their presence. 8720 8721 8722File: as.info, Node: ARM Unwinding Tutorial, Prev: ARM Mapping Symbols, Up: ARM-Dependent 8723 87249.4.7 Unwinding 8725--------------- 8726 8727The ABI for the ARM Architecture specifies a standard format for 8728exception unwind information. This information is used when an 8729exception is thrown to determine where control should be transferred. 8730In particular, the unwind information is used to determine which 8731function called the function that threw the exception, and which 8732function called that one, and so forth. This information is also used 8733to restore the values of callee-saved registers in the function catching 8734the exception. 8735 8736 If you are writing functions in assembly code, and those functions 8737call other functions that throw exceptions, you must use assembly pseudo 8738ops to ensure that appropriate exception unwind information is 8739generated. Otherwise, if one of the functions called by your assembly 8740code throws an exception, the run-time library will be unable to unwind 8741the stack through your assembly code and your program will not behave 8742correctly. 8743 8744 To illustrate the use of these pseudo ops, we will examine the code 8745that G++ generates for the following C++ input: 8746 8747void callee (int *); 8748 8749int 8750caller () 8751{ 8752 int i; 8753 callee (&i); 8754 return i; 8755} 8756 8757 This example does not show how to throw or catch an exception from 8758assembly code. That is a much more complex operation and should always 8759be done in a high-level language, such as C++, that directly supports 8760exceptions. 8761 8762 The code generated by one particular version of G++ when compiling 8763the example above is: 8764 8765_Z6callerv: 8766 .fnstart 8767.LFB2: 8768 @ Function supports interworking. 8769 @ args = 0, pretend = 0, frame = 8 8770 @ frame_needed = 1, uses_anonymous_args = 0 8771 stmfd sp!, {fp, lr} 8772 .save {fp, lr} 8773.LCFI0: 8774 .setfp fp, sp, #4 8775 add fp, sp, #4 8776.LCFI1: 8777 .pad #8 8778 sub sp, sp, #8 8779.LCFI2: 8780 sub r3, fp, #8 8781 mov r0, r3 8782 bl _Z6calleePi 8783 ldr r3, [fp, #-8] 8784 mov r0, r3 8785 sub sp, fp, #4 8786 ldmfd sp!, {fp, lr} 8787 bx lr 8788.LFE2: 8789 .fnend 8790 8791 Of course, the sequence of instructions varies based on the options 8792you pass to GCC and on the version of GCC in use. The exact 8793instructions are not important since we are focusing on the pseudo ops 8794that are used to generate unwind information. 8795 8796 An important assumption made by the unwinder is that the stack frame 8797does not change during the body of the function. In particular, since 8798we assume that the assembly code does not itself throw an exception, the 8799only point where an exception can be thrown is from a call, such as the 8800'bl' instruction above. At each call site, the same saved registers 8801(including 'lr', which indicates the return address) must be located in 8802the same locations relative to the frame pointer. 8803 8804 The '.fnstart' (*note .fnstart pseudo op: arm_fnstart.) pseudo op 8805appears immediately before the first instruction of the function while 8806the '.fnend' (*note .fnend pseudo op: arm_fnend.) pseudo op appears 8807immediately after the last instruction of the function. These pseudo 8808ops specify the range of the function. 8809 8810 Only the order of the other pseudos ops (e.g., '.setfp' or '.pad') 8811matters; their exact locations are irrelevant. In the example above, 8812the compiler emits the pseudo ops with particular instructions. That 8813makes it easier to understand the code, but it is not required for 8814correctness. It would work just as well to emit all of the pseudo ops 8815other than '.fnend' in the same order, but immediately after '.fnstart'. 8816 8817 The '.save' (*note .save pseudo op: arm_save.) pseudo op indicates 8818registers that have been saved to the stack so that they can be restored 8819before the function returns. The argument to the '.save' pseudo op is a 8820list of registers to save. If a register is "callee-saved" (as 8821specified by the ABI) and is modified by the function you are writing, 8822then your code must save the value before it is modified and restore the 8823original value before the function returns. If an exception is thrown, 8824the run-time library restores the values of these registers from their 8825locations on the stack before returning control to the exception 8826handler. (Of course, if an exception is not thrown, the function that 8827contains the '.save' pseudo op restores these registers in the function 8828epilogue, as is done with the 'ldmfd' instruction above.) 8829 8830 You do not have to save callee-saved registers at the very beginning 8831of the function and you do not need to use the '.save' pseudo op 8832immediately following the point at which the registers are saved. 8833However, if you modify a callee-saved register, you must save it on the 8834stack before modifying it and before calling any functions which might 8835throw an exception. And, you must use the '.save' pseudo op to indicate 8836that you have done so. 8837 8838 The '.pad' (*note .pad: arm_pad.) pseudo op indicates a modification 8839of the stack pointer that does not save any registers. The argument is 8840the number of bytes (in decimal) that are subtracted from the stack 8841pointer. (On ARM CPUs, the stack grows downwards, so subtracting from 8842the stack pointer increases the size of the stack.) 8843 8844 The '.setfp' (*note .setfp pseudo op: arm_setfp.) pseudo op indicates 8845the register that contains the frame pointer. The first argument is the 8846register that is set, which is typically 'fp'. The second argument 8847indicates the register from which the frame pointer takes its value. 8848The third argument, if present, is the value (in decimal) added to the 8849register specified by the second argument to compute the value of the 8850frame pointer. You should not modify the frame pointer in the body of 8851the function. 8852 8853 If you do not use a frame pointer, then you should not use the 8854'.setfp' pseudo op. If you do not use a frame pointer, then you should 8855avoid modifying the stack pointer outside of the function prologue. 8856Otherwise, the run-time library will be unable to find saved registers 8857when it is unwinding the stack. 8858 8859 The pseudo ops described above are sufficient for writing assembly 8860code that calls functions which may throw exceptions. If you need to 8861know more about the object-file format used to represent unwind 8862information, you may consult the 'Exception Handling ABI for the ARM 8863Architecture' available from <http://infocenter.arm.com>. 8864 8865 8866File: as.info, Node: AVR-Dependent, Next: Blackfin-Dependent, Prev: ARM-Dependent, Up: Machine Dependencies 8867 88689.5 AVR Dependent Features 8869========================== 8870 8871* Menu: 8872 8873* AVR Options:: Options 8874* AVR Syntax:: Syntax 8875* AVR Opcodes:: Opcodes 8876* AVR Pseudo Instructions:: Pseudo Instructions 8877 8878 8879File: as.info, Node: AVR Options, Next: AVR Syntax, Up: AVR-Dependent 8880 88819.5.1 Options 8882------------- 8883 8884'-mmcu=MCU' 8885 Specify ATMEL AVR instruction set or MCU type. 8886 8887 Instruction set avr1 is for the minimal AVR core, not supported by 8888 the C compiler, only for assembler programs (MCU types: at90s1200, 8889 attiny11, attiny12, attiny15, attiny28). 8890 8891 Instruction set avr2 (default) is for the classic AVR core with up 8892 to 8K program memory space (MCU types: at90s2313, at90s2323, 8893 at90s2333, at90s2343, attiny22, attiny26, at90s4414, at90s4433, 8894 at90s4434, at90s8515, at90c8534, at90s8535). 8895 8896 Instruction set avr25 is for the classic AVR core with up to 8K 8897 program memory space plus the MOVW instruction (MCU types: 8898 attiny13, attiny13a, attiny2313, attiny2313a, attiny24, attiny24a, 8899 attiny4313, attiny44, attiny44a, attiny84, attiny84a, attiny25, 8900 attiny45, attiny85, attiny261, attiny261a, attiny461, attiny461a, 8901 attiny861, attiny861a, attiny87, attiny43u, attiny48, attiny88, 8902 attiny828, at86rf401, ata6289, ata5272). 8903 8904 Instruction set avr3 is for the classic AVR core with up to 128K 8905 program memory space (MCU types: at43usb355, at76c711). 8906 8907 Instruction set avr31 is for the classic AVR core with exactly 128K 8908 program memory space (MCU types: atmega103, at43usb320). 8909 8910 Instruction set avr35 is for classic AVR core plus MOVW, CALL, and 8911 JMP instructions (MCU types: attiny167, attiny1634, at90usb82, 8912 at90usb162, atmega8u2, atmega16u2, atmega32u2, ata5505). 8913 8914 Instruction set avr4 is for the enhanced AVR core with up to 8K 8915 program memory space (MCU types: atmega48, atmega48a, atmega48pa, 8916 atmega48p, atmega8, atmega8a, atmega88, atmega88a, atmega88p, 8917 atmega88pa, atmega8515, atmega8535, atmega8hva, at90pwm1, at90pwm2, 8918 at90pwm2b, at90pwm3, at90pwm3b, at90pwm81, ata6285, ata6286). 8919 8920 Instruction set avr5 is for the enhanced AVR core with up to 128K 8921 program memory space (MCU types: at90pwm161, atmega16, atmega16a, 8922 atmega161, atmega162, atmega163, atmega164a, atmega164p, 8923 atmega164pa, atmega165, atmega165a, atmega165p, atmega165pa, 8924 atmega168, atmega168a, atmega168p, atmega168pa, atmega169, 8925 atmega169a, atmega169p, atmega169pa, atmega32, atmega323, 8926 atmega324a, atmega324p, atmega324pa, atmega325, atmega325a, 8927 atmega32, atmega32a, atmega323, atmega324a, atmega324p, 8928 atmega324pa, atmega325, atmega325a, atmega325p, atmega325p, 8929 atmega325pa, atmega3250, atmega3250a, atmega3250p, atmega3250pa, 8930 atmega328, atmega328p, atmega329, atmega329a, atmega329p, 8931 atmega329pa, atmega3290a, atmega3290p, atmega3290pa, atmega406, 8932 atmega64, atmega64a, atmega64rfr2, atmega644rfr2, atmega640, 8933 atmega644, atmega644a, atmega644p, atmega644pa, atmega645, 8934 atmega645a, atmega645p, atmega6450, atmega6450a, atmega6450p, 8935 atmega649, atmega649a, atmega649p, atmega6490, atmega6490a, 8936 atmega6490p, atmega16hva, atmega16hva2, atmega16hvb, 8937 atmega16hvbrevb, atmega32hvb, atmega32hvbrevb, atmega64hve, 8938 at90can32, at90can64, at90pwm161, at90pwm216, at90pwm316, 8939 atmega32c1, atmega64c1, atmega16m1, atmega32m1, atmega64m1, 8940 atmega16u4, atmega32u4, atmega32u6, at90usb646, at90usb647, at94k, 8941 at90scr100, ata5790, ata5795). 8942 8943 Instruction set avr51 is for the enhanced AVR core with exactly 8944 128K program memory space (MCU types: atmega128, atmega128a, 8945 atmega1280, atmega1281, atmega1284, atmega1284p, atmega128rfa1, 8946 atmega128rfr2, atmega1284rfr2, at90can128, at90usb1286, 8947 at90usb1287, m3000). 8948 8949 Instruction set avr6 is for the enhanced AVR core with a 3-byte PC 8950 (MCU types: atmega2560, atmega2561, atmega256rfr2, atmega2564rfr2). 8951 8952 Instruction set avrxmega2 is for the XMEGA AVR core with 8K to 64K 8953 program memory space and less than 64K data space (MCU types: 8954 atxmega16a4, atxmega16a4u, atxmega16c4, atxmega16d4, atxmega16x1, 8955 atxmega32a4, atxmega32a4u, atxmega32c4, atxmega32d4, atxmega16e5, 8956 atxmega8e5, atxmega32e5, atxmega32x1). 8957 8958 Instruction set avrxmega3 is for the XMEGA AVR core with up to 64K 8959 of combined program memory and RAM, and with program memory visible 8960 in the RAM address space (MCU types: attiny212, attiny214, 8961 attiny412, attiny414, attiny416, attiny417, attiny814, attiny816, 8962 attiny817, attiny1614, attiny1616, attiny1617, attiny3214, 8963 attiny3216, attiny3217). 8964 8965 Instruction set avrxmega4 is for the XMEGA AVR core with up to 64K 8966 program memory space and less than 64K data space (MCU types: 8967 atxmega64a3, atxmega64a3u, atxmega64a4u, atxmega64b1, atxmega64b3, 8968 atxmega64c3, atxmega64d3, atxmega64d4). 8969 8970 Instruction set avrxmega5 is for the XMEGA AVR core with up to 64K 8971 program memory space and greater than 64K data space (MCU types: 8972 atxmega64a1, atxmega64a1u). 8973 8974 Instruction set avrxmega6 is for the XMEGA AVR core with larger 8975 than 64K program memory space and less than 64K data space (MCU 8976 types: atxmega128a3, atxmega128a3u, atxmega128c3, atxmega128d3, 8977 atxmega128d4, atxmega192a3, atxmega192a3u, atxmega128b1, 8978 atxmega128b3, atxmega192c3, atxmega192d3, atxmega256a3, 8979 atxmega256a3u, atxmega256a3b, atxmega256a3bu, atxmega256c3, 8980 atxmega256d3, atxmega384c3, atxmega256d3). 8981 8982 Instruction set avrxmega7 is for the XMEGA AVR core with larger 8983 than 64K program memory space and greater than 64K data space (MCU 8984 types: atxmega128a1, atxmega128a1u, atxmega128a4u). 8985 8986 Instruction set avrtiny is for the ATtiny4/5/9/10/20/40 8987 microcontrollers. 8988 8989'-mall-opcodes' 8990 Accept all AVR opcodes, even if not supported by '-mmcu'. 8991 8992'-mno-skip-bug' 8993 This option disable warnings for skipping two-word instructions. 8994 8995'-mno-wrap' 8996 This option reject 'rjmp/rcall' instructions with 8K wrap-around. 8997 8998'-mrmw' 8999 Accept Read-Modify-Write ('XCH,LAC,LAS,LAT') instructions. 9000 9001'-mlink-relax' 9002 Enable support for link-time relaxation. This is now on by default 9003 and this flag no longer has any effect. 9004 9005'-mno-link-relax' 9006 Disable support for link-time relaxation. The assembler will 9007 resolve relocations when it can, and may be able to better compress 9008 some debug information. 9009 9010'-mgcc-isr' 9011 Enable the '__gcc_isr' pseudo instruction. 9012 9013 9014File: as.info, Node: AVR Syntax, Next: AVR Opcodes, Prev: AVR Options, Up: AVR-Dependent 9015 90169.5.2 Syntax 9017------------ 9018 9019* Menu: 9020 9021* AVR-Chars:: Special Characters 9022* AVR-Regs:: Register Names 9023* AVR-Modifiers:: Relocatable Expression Modifiers 9024 9025 9026File: as.info, Node: AVR-Chars, Next: AVR-Regs, Up: AVR Syntax 9027 90289.5.2.1 Special Characters 9029.......................... 9030 9031The presence of a ';' anywhere on a line indicates the start of a 9032comment that extends to the end of that line. 9033 9034 If a '#' appears as the first character of a line, the whole line is 9035treated as a comment, but in this case the line can also be a logical 9036line number directive (*note Comments::) or a preprocessor control 9037command (*note Preprocessing::). 9038 9039 The '$' character can be used instead of a newline to separate 9040statements. 9041 9042 9043File: as.info, Node: AVR-Regs, Next: AVR-Modifiers, Prev: AVR-Chars, Up: AVR Syntax 9044 90459.5.2.2 Register Names 9046...................... 9047 9048The AVR has 32 x 8-bit general purpose working registers 'r0', 'r1', ... 9049'r31'. Six of the 32 registers can be used as three 16-bit indirect 9050address register pointers for Data Space addressing. One of the these 9051address pointers can also be used as an address pointer for look up 9052tables in Flash program memory. These added function registers are the 905316-bit 'X', 'Y' and 'Z' - registers. 9054 9055 X = r26:r27 9056 Y = r28:r29 9057 Z = r30:r31 9058 9059 9060File: as.info, Node: AVR-Modifiers, Prev: AVR-Regs, Up: AVR Syntax 9061 90629.5.2.3 Relocatable Expression Modifiers 9063........................................ 9064 9065The assembler supports several modifiers when using relocatable 9066addresses in AVR instruction operands. The general syntax is the 9067following: 9068 9069 modifier(relocatable-expression) 9070 9071'lo8' 9072 9073 This modifier allows you to use bits 0 through 7 of an address 9074 expression as an 8 bit relocatable expression. 9075 9076'hi8' 9077 9078 This modifier allows you to use bits 7 through 15 of an address 9079 expression as an 8 bit relocatable expression. This is useful 9080 with, for example, the AVR 'ldi' instruction and 'lo8' modifier. 9081 9082 For example 9083 9084 ldi r26, lo8(sym+10) 9085 ldi r27, hi8(sym+10) 9086 9087'hh8' 9088 9089 This modifier allows you to use bits 16 through 23 of an address 9090 expression as an 8 bit relocatable expression. Also, can be useful 9091 for loading 32 bit constants. 9092 9093'hlo8' 9094 9095 Synonym of 'hh8'. 9096 9097'hhi8' 9098 9099 This modifier allows you to use bits 24 through 31 of an expression 9100 as an 8 bit expression. This is useful with, for example, the AVR 9101 'ldi' instruction and 'lo8', 'hi8', 'hlo8', 'hhi8', modifier. 9102 9103 For example 9104 9105 ldi r26, lo8(285774925) 9106 ldi r27, hi8(285774925) 9107 ldi r28, hlo8(285774925) 9108 ldi r29, hhi8(285774925) 9109 ; r29,r28,r27,r26 = 285774925 9110 9111'pm_lo8' 9112 9113 This modifier allows you to use bits 0 through 7 of an address 9114 expression as an 8 bit relocatable expression. This modifier is 9115 useful for addressing data or code from Flash/Program memory by 9116 two-byte words. The use of 'pm_lo8' is similar to 'lo8'. 9117 9118'pm_hi8' 9119 9120 This modifier allows you to use bits 8 through 15 of an address 9121 expression as an 8 bit relocatable expression. This modifier is 9122 useful for addressing data or code from Flash/Program memory by 9123 two-byte words. 9124 9125 For example, when setting the AVR 'Z' register with the 'ldi' 9126 instruction for subsequent use by the 'ijmp' instruction: 9127 9128 ldi r30, pm_lo8(sym) 9129 ldi r31, pm_hi8(sym) 9130 ijmp 9131 9132'pm_hh8' 9133 9134 This modifier allows you to use bits 15 through 23 of an address 9135 expression as an 8 bit relocatable expression. This modifier is 9136 useful for addressing data or code from Flash/Program memory by 9137 two-byte words. 9138 9139 9140File: as.info, Node: AVR Opcodes, Next: AVR Pseudo Instructions, Prev: AVR Syntax, Up: AVR-Dependent 9141 91429.5.3 Opcodes 9143------------- 9144 9145For detailed information on the AVR machine instruction set, see 9146<www.atmel.com/products/AVR>. 9147 9148 'as' implements all the standard AVR opcodes. The following table 9149summarizes the AVR opcodes, and their arguments. 9150 9151 Legend: 9152 r any register 9153 d 'ldi' register (r16-r31) 9154 v 'movw' even register (r0, r2, ..., r28, r30) 9155 a 'fmul' register (r16-r23) 9156 w 'adiw' register (r24,r26,r28,r30) 9157 e pointer registers (X,Y,Z) 9158 b base pointer register and displacement ([YZ]+disp) 9159 z Z pointer register (for [e]lpm Rd,Z[+]) 9160 M immediate value from 0 to 255 9161 n immediate value from 0 to 255 ( n = ~M ). Relocation impossible 9162 s immediate value from 0 to 7 9163 P Port address value from 0 to 63. (in, out) 9164 p Port address value from 0 to 31. (cbi, sbi, sbic, sbis) 9165 K immediate value from 0 to 63 (used in 'adiw', 'sbiw') 9166 i immediate value 9167 l signed pc relative offset from -64 to 63 9168 L signed pc relative offset from -2048 to 2047 9169 h absolute code address (call, jmp) 9170 S immediate value from 0 to 7 (S = s << 4) 9171 ? use this opcode entry if no parameters, else use next opcode entry 9172 9173 1001010010001000 clc 9174 1001010011011000 clh 9175 1001010011111000 cli 9176 1001010010101000 cln 9177 1001010011001000 cls 9178 1001010011101000 clt 9179 1001010010111000 clv 9180 1001010010011000 clz 9181 1001010000001000 sec 9182 1001010001011000 seh 9183 1001010001111000 sei 9184 1001010000101000 sen 9185 1001010001001000 ses 9186 1001010001101000 set 9187 1001010000111000 sev 9188 1001010000011000 sez 9189 100101001SSS1000 bclr S 9190 100101000SSS1000 bset S 9191 1001010100001001 icall 9192 1001010000001001 ijmp 9193 1001010111001000 lpm ? 9194 1001000ddddd010+ lpm r,z 9195 1001010111011000 elpm ? 9196 1001000ddddd011+ elpm r,z 9197 0000000000000000 nop 9198 1001010100001000 ret 9199 1001010100011000 reti 9200 1001010110001000 sleep 9201 1001010110011000 break 9202 1001010110101000 wdr 9203 1001010111101000 spm 9204 000111rdddddrrrr adc r,r 9205 000011rdddddrrrr add r,r 9206 001000rdddddrrrr and r,r 9207 000101rdddddrrrr cp r,r 9208 000001rdddddrrrr cpc r,r 9209 000100rdddddrrrr cpse r,r 9210 001001rdddddrrrr eor r,r 9211 001011rdddddrrrr mov r,r 9212 100111rdddddrrrr mul r,r 9213 001010rdddddrrrr or r,r 9214 000010rdddddrrrr sbc r,r 9215 000110rdddddrrrr sub r,r 9216 001001rdddddrrrr clr r 9217 000011rdddddrrrr lsl r 9218 000111rdddddrrrr rol r 9219 001000rdddddrrrr tst r 9220 0111KKKKddddKKKK andi d,M 9221 0111KKKKddddKKKK cbr d,n 9222 1110KKKKddddKKKK ldi d,M 9223 11101111dddd1111 ser d 9224 0110KKKKddddKKKK ori d,M 9225 0110KKKKddddKKKK sbr d,M 9226 0011KKKKddddKKKK cpi d,M 9227 0100KKKKddddKKKK sbci d,M 9228 0101KKKKddddKKKK subi d,M 9229 1111110rrrrr0sss sbrc r,s 9230 1111111rrrrr0sss sbrs r,s 9231 1111100ddddd0sss bld r,s 9232 1111101ddddd0sss bst r,s 9233 10110PPdddddPPPP in r,P 9234 10111PPrrrrrPPPP out P,r 9235 10010110KKddKKKK adiw w,K 9236 10010111KKddKKKK sbiw w,K 9237 10011000pppppsss cbi p,s 9238 10011010pppppsss sbi p,s 9239 10011001pppppsss sbic p,s 9240 10011011pppppsss sbis p,s 9241 111101lllllll000 brcc l 9242 111100lllllll000 brcs l 9243 111100lllllll001 breq l 9244 111101lllllll100 brge l 9245 111101lllllll101 brhc l 9246 111100lllllll101 brhs l 9247 111101lllllll111 brid l 9248 111100lllllll111 brie l 9249 111100lllllll000 brlo l 9250 111100lllllll100 brlt l 9251 111100lllllll010 brmi l 9252 111101lllllll001 brne l 9253 111101lllllll010 brpl l 9254 111101lllllll000 brsh l 9255 111101lllllll110 brtc l 9256 111100lllllll110 brts l 9257 111101lllllll011 brvc l 9258 111100lllllll011 brvs l 9259 111101lllllllsss brbc s,l 9260 111100lllllllsss brbs s,l 9261 1101LLLLLLLLLLLL rcall L 9262 1100LLLLLLLLLLLL rjmp L 9263 1001010hhhhh111h call h 9264 1001010hhhhh110h jmp h 9265 1001010rrrrr0101 asr r 9266 1001010rrrrr0000 com r 9267 1001010rrrrr1010 dec r 9268 1001010rrrrr0011 inc r 9269 1001010rrrrr0110 lsr r 9270 1001010rrrrr0001 neg r 9271 1001000rrrrr1111 pop r 9272 1001001rrrrr1111 push r 9273 1001010rrrrr0111 ror r 9274 1001010rrrrr0010 swap r 9275 00000001ddddrrrr movw v,v 9276 00000010ddddrrrr muls d,d 9277 000000110ddd0rrr mulsu a,a 9278 000000110ddd1rrr fmul a,a 9279 000000111ddd0rrr fmuls a,a 9280 000000111ddd1rrr fmulsu a,a 9281 1001001ddddd0000 sts i,r 9282 1001000ddddd0000 lds r,i 9283 10o0oo0dddddbooo ldd r,b 9284 100!000dddddee-+ ld r,e 9285 10o0oo1rrrrrbooo std b,r 9286 100!001rrrrree-+ st e,r 9287 1001010100011001 eicall 9288 1001010000011001 eijmp 9289 9290 9291File: as.info, Node: AVR Pseudo Instructions, Prev: AVR Opcodes, Up: AVR-Dependent 9292 92939.5.4 Pseudo Instructions 9294------------------------- 9295 9296The only available pseudo-instruction '__gcc_isr' can be activated by 9297option '-mgcc-isr'. 9298 9299'__gcc_isr 1' 9300 Emit code chunk to be used in avr-gcc ISR prologue. It will expand 9301 to at most six 1-word instructions, all optional: push of 9302 'tmp_reg', push of 'SREG', push and clear of 'zero_reg', push of 9303 REG. 9304 9305'__gcc_isr 2' 9306 Emit code chunk to be used in an avr-gcc ISR epilogue. It will 9307 expand to at most five 1-word instructions, all optional: pop of 9308 REG, pop of 'zero_reg', pop of 'SREG', pop of 'tmp_reg'. 9309 9310'__gcc_isr 0, REG' 9311 Finish avr-gcc ISR function. Scan code since the last prologue for 9312 usage of: 'SREG', 'tmp_reg', 'zero_reg'. Prologue chunk and 9313 epilogue chunks will be replaced by appropriate code to save / 9314 restore 'SREG', 'tmp_reg', 'zero_reg' and REG. 9315 9316 Example input: 9317 9318 __vector1: 9319 __gcc_isr 1 9320 lds r24, var 9321 inc r24 9322 sts var, r24 9323 __gcc_isr 2 9324 reti 9325 __gcc_isr 0, r24 9326 9327 Example output: 9328 9329 00000000 <__vector1>: 9330 0: 8f 93 push r24 9331 2: 8f b7 in r24, 0x3f 9332 4: 8f 93 push r24 9333 6: 80 91 60 00 lds r24, 0x0060 ; 0x800060 <var> 9334 a: 83 95 inc r24 9335 c: 80 93 60 00 sts 0x0060, r24 ; 0x800060 <var> 9336 10: 8f 91 pop r24 9337 12: 8f bf out 0x3f, r24 9338 14: 8f 91 pop r24 9339 16: 18 95 reti 9340 9341 9342File: as.info, Node: Blackfin-Dependent, Next: BPF-Dependent, Prev: AVR-Dependent, Up: Machine Dependencies 9343 93449.6 Blackfin Dependent Features 9345=============================== 9346 9347* Menu: 9348 9349* Blackfin Options:: Blackfin Options 9350* Blackfin Syntax:: Blackfin Syntax 9351* Blackfin Directives:: Blackfin Directives 9352 9353 9354File: as.info, Node: Blackfin Options, Next: Blackfin Syntax, Up: Blackfin-Dependent 9355 93569.6.1 Options 9357------------- 9358 9359'-mcpu=PROCESSOR[-SIREVISION]' 9360 This option specifies the target processor. The optional 9361 SIREVISION is not used in assembler. It's here such that GCC can 9362 easily pass down its '-mcpu=' option. The assembler will issue an 9363 error message if an attempt is made to assemble an instruction 9364 which will not execute on the target processor. The following 9365 processor names are recognized: 'bf504', 'bf506', 'bf512', 'bf514', 9366 'bf516', 'bf518', 'bf522', 'bf523', 'bf524', 'bf525', 'bf526', 9367 'bf527', 'bf531', 'bf532', 'bf533', 'bf534', 'bf535' (not 9368 implemented yet), 'bf536', 'bf537', 'bf538', 'bf539', 'bf542', 9369 'bf542m', 'bf544', 'bf544m', 'bf547', 'bf547m', 'bf548', 'bf548m', 9370 'bf549', 'bf549m', 'bf561', and 'bf592'. 9371 9372'-mfdpic' 9373 Assemble for the FDPIC ABI. 9374 9375'-mno-fdpic' 9376'-mnopic' 9377 Disable -mfdpic. 9378 9379 9380File: as.info, Node: Blackfin Syntax, Next: Blackfin Directives, Prev: Blackfin Options, Up: Blackfin-Dependent 9381 93829.6.2 Syntax 9383------------ 9384 9385'Special Characters' 9386 Assembler input is free format and may appear anywhere on the line. 9387 One instruction may extend across multiple lines or more than one 9388 instruction may appear on the same line. White space (space, tab, 9389 comments or newline) may appear anywhere between tokens. A token 9390 must not have embedded spaces. Tokens include numbers, register 9391 names, keywords, user identifiers, and also some multicharacter 9392 special symbols like "+=", "/*" or "||". 9393 9394 Comments are introduced by the '#' character and extend to the end 9395 of the current line. If the '#' appears as the first character of 9396 a line, the whole line is treated as a comment, but in this case 9397 the line can also be a logical line number directive (*note 9398 Comments::) or a preprocessor control command (*note 9399 Preprocessing::). 9400 9401'Instruction Delimiting' 9402 A semicolon must terminate every instruction. Sometimes a complete 9403 instruction will consist of more than one operation. There are two 9404 cases where this occurs. The first is when two general operations 9405 are combined. Normally a comma separates the different parts, as 9406 in 9407 9408 a0= r3.h * r2.l, a1 = r3.l * r2.h ; 9409 9410 The second case occurs when a general instruction is combined with 9411 one or two memory references for joint issue. The latter portions 9412 are set off by a "||" token. 9413 9414 a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++]; 9415 9416 Multiple instructions can occur on the same line. Each must be 9417 terminated by a semicolon character. 9418 9419'Register Names' 9420 9421 The assembler treats register names and instruction keywords in a 9422 case insensitive manner. User identifiers are case sensitive. 9423 Thus, R3.l, R3.L, r3.l and r3.L are all equivalent input to the 9424 assembler. 9425 9426 Register names are reserved and may not be used as program 9427 identifiers. 9428 9429 Some operations (such as "Move Register") require a register pair. 9430 Register pairs are always data registers and are denoted using a 9431 colon, eg., R3:2. The larger number must be written firsts. Note 9432 that the hardware only supports odd-even pairs, eg., R7:6, R5:4, 9433 R3:2, and R1:0. 9434 9435 Some instructions (such as -SP (Push Multiple)) require a group of 9436 adjacent registers. Adjacent registers are denoted in the syntax 9437 by the range enclosed in parentheses and separated by a colon, eg., 9438 (R7:3). Again, the larger number appears first. 9439 9440 Portions of a particular register may be individually specified. 9441 This is written with a dot (".") following the register name and 9442 then a letter denoting the desired portion. For 32-bit registers, 9443 ".H" denotes the most significant ("High") portion. ".L" denotes 9444 the least-significant portion. The subdivisions of the 40-bit 9445 registers are described later. 9446 9447'Accumulators' 9448 The set of 40-bit registers A1 and A0 that normally contain data 9449 that is being manipulated. Each accumulator can be accessed in 9450 four ways. 9451 9452 'one 40-bit register' 9453 The register will be referred to as A1 or A0. 9454 'one 32-bit register' 9455 The registers are designated as A1.W or A0.W. 9456 'two 16-bit registers' 9457 The registers are designated as A1.H, A1.L, A0.H or A0.L. 9458 'one 8-bit register' 9459 The registers are designated as A1.X or A0.X for the bits that 9460 extend beyond bit 31. 9461 9462'Data Registers' 9463 The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7) 9464 that normally contain data for manipulation. These are abbreviated 9465 as D-register or Dreg. Data registers can be accessed as 32-bit 9466 registers or as two independent 16-bit registers. The least 9467 significant 16 bits of each register is called the "low" half and 9468 is designated with ".L" following the register name. The most 9469 significant 16 bits are called the "high" half and is designated 9470 with ".H" following the name. 9471 9472 R7.L, r2.h, r4.L, R0.H 9473 9474'Pointer Registers' 9475 The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP) 9476 that normally contain byte addresses of data structures. These are 9477 abbreviated as P-register or Preg. 9478 9479 p2, p5, fp, sp 9480 9481'Stack Pointer SP' 9482 The stack pointer contains the 32-bit address of the last occupied 9483 byte location in the stack. The stack grows by decrementing the 9484 stack pointer. 9485 9486'Frame Pointer FP' 9487 The frame pointer contains the 32-bit address of the previous frame 9488 pointer in the stack. It is located at the top of a frame. 9489 9490'Loop Top' 9491 LT0 and LT1. These registers contain the 32-bit address of the top 9492 of a zero overhead loop. 9493 9494'Loop Count' 9495 LC0 and LC1. These registers contain the 32-bit counter of the 9496 zero overhead loop executions. 9497 9498'Loop Bottom' 9499 LB0 and LB1. These registers contain the 32-bit address of the 9500 bottom of a zero overhead loop. 9501 9502'Index Registers' 9503 The set of 32-bit registers (I0, I1, I2, I3) that normally contain 9504 byte addresses of data structures. Abbreviated I-register or Ireg. 9505 9506'Modify Registers' 9507 The set of 32-bit registers (M0, M1, M2, M3) that normally contain 9508 offset values that are added and subtracted to one of the index 9509 registers. Abbreviated as Mreg. 9510 9511'Length Registers' 9512 The set of 32-bit registers (L0, L1, L2, L3) that normally contain 9513 the length in bytes of the circular buffer. Abbreviated as Lreg. 9514 Clear the Lreg to disable circular addressing for the corresponding 9515 Ireg. 9516 9517'Base Registers' 9518 The set of 32-bit registers (B0, B1, B2, B3) that normally contain 9519 the base address in bytes of the circular buffer. Abbreviated as 9520 Breg. 9521 9522'Floating Point' 9523 The Blackfin family has no hardware floating point but the .float 9524 directive generates ieee floating point numbers for use with 9525 software floating point libraries. 9526 9527'Blackfin Opcodes' 9528 For detailed information on the Blackfin machine instruction set, 9529 see the Blackfin Processor Instruction Set Reference. 9530 9531 9532File: as.info, Node: Blackfin Directives, Prev: Blackfin Syntax, Up: Blackfin-Dependent 9533 95349.6.3 Directives 9535---------------- 9536 9537The following directives are provided for compatibility with the VDSP 9538assembler. 9539 9540'.byte2' 9541 Initializes a two byte data object. 9542 9543 This maps to the '.short' directive. 9544'.byte4' 9545 Initializes a four byte data object. 9546 9547 This maps to the '.int' directive. 9548'.db' 9549 Initializes a single byte data object. 9550 9551 This directive is a synonym for '.byte'. 9552'.dw' 9553 Initializes a two byte data object. 9554 9555 This directive is a synonym for '.byte2'. 9556'.dd' 9557 Initializes a four byte data object. 9558 9559 This directive is a synonym for '.byte4'. 9560'.var' 9561 Define and initialize a 32 bit data object. 9562 9563 9564File: as.info, Node: BPF-Dependent, Next: CR16-Dependent, Prev: Blackfin-Dependent, Up: Machine Dependencies 9565 95669.7 BPF Dependent Features 9567========================== 9568 9569* Menu: 9570 9571* BPF Options:: Options 9572* BPF Syntax:: Syntax 9573* BPF Directives:: Machine Directives 9574* BPF Opcodes:: Opcodes 9575 9576 9577File: as.info, Node: BPF Options, Next: BPF Syntax, Up: BPF-Dependent 9578 95799.7.1 Options 9580------------- 9581 9582'-EB' 9583 This option specifies that the assembler should emit big-endian 9584 eBPF. 9585 9586'-EL' 9587 This option specifies that the assembler should emit little-endian 9588 eBPF. 9589 9590 Note that if no endianness option is specified in the command line, 9591the host endianness is used. 9592 9593 9594File: as.info, Node: BPF Syntax, Next: BPF Directives, Prev: BPF Options, Up: BPF-Dependent 9595 95969.7.2 Syntax 9597------------ 9598 9599* Menu: 9600 9601* BPF-Chars:: Special Characters 9602* BPF-Regs:: Register Names 9603* BPF-Pseudo-Maps:: Pseudo map fds 9604 9605 9606File: as.info, Node: BPF-Chars, Next: BPF-Regs, Up: BPF Syntax 9607 96089.7.2.1 Special Characters 9609.......................... 9610 9611The presence of a ';' on a line indicates the start of a comment that 9612extends to the end of the current line. If a '#' appears as the first 9613character of a line, the whole line is treated as a comment. 9614 9615 Statements and assembly directives are separated by newlines. 9616 9617 9618File: as.info, Node: BPF-Regs, Next: BPF-Pseudo-Maps, Prev: BPF-Chars, Up: BPF Syntax 9619 96209.7.2.2 Register Names 9621...................... 9622 9623The eBPF processor provides ten general-purpose 64-bit registers, which 9624are read-write, and a read-only frame pointer register: 9625 9626'%r0 .. %r9' 9627 General-purpose registers. 9628'%r10' 9629 Frame pointer register. 9630 9631 Some registers have additional names, to reflect their role in the 9632eBPF ABI: 9633 9634'%a' 9635 This is '%r0'. 9636'%ctx' 9637 This is '%r6'. 9638'%fp' 9639 This is '%r10'. 9640 9641 9642File: as.info, Node: BPF-Pseudo-Maps, Prev: BPF-Regs, Up: BPF Syntax 9643 96449.7.2.3 Pseudo Maps 9645................... 9646 9647The 'LDDW' instruction can take a literal pseudo map file descriptor as 9648its second argument. This uses the syntax '%map_fd(N)' where 'N' is a 9649signed number. 9650 9651 For example, to load the address of the pseudo map with file 9652descriptor '2' in register 'r1' we would do: 9653 9654 lddw %r1, %map_fd(2) 9655 9656 9657File: as.info, Node: BPF Directives, Next: BPF Opcodes, Prev: BPF Syntax, Up: BPF-Dependent 9658 96599.7.3 Machine Directives 9660------------------------ 9661 9662The BPF version of 'as' supports the following additional machine 9663directives: 9664 9665'.word' 9666 The '.half' directive produces a 16 bit value. 9667 9668'.word' 9669 The '.word' directive produces a 32 bit value. 9670 9671'.dword' 9672 The '.dword' directive produces a 64 bit value. 9673 9674 9675File: as.info, Node: BPF Opcodes, Prev: BPF Directives, Up: BPF-Dependent 9676 96779.7.4 Opcodes 9678------------- 9679 9680In the instruction descriptions below the following field descriptors 9681are used: 9682 9683'%d' 9684 Destination general-purpose register whose role is to be 9685 destination of an operation. 9686'%s' 9687 Source general-purpose register whose role is to be the source of 9688 an operation. 9689'disp16' 9690 16-bit signed PC-relative offset, measured in number of 64-bit 9691 words, minus one. 9692'disp32' 9693 32-bit signed PC-relative offset, measured in number of 64-bit 9694 words, minus one. 9695'offset16' 9696 Signed 16-bit immediate. 9697'imm32' 9698 Signed 32-bit immediate. 9699'imm64' 9700 Signed 64-bit immediate. 9701 97029.7.4.1 Arithmetic instructions 9703............................... 9704 9705The destination register in these instructions act like an accumulator. 9706 9707'add %d, (%s|imm32)' 9708 64-bit arithmetic addition. 9709'sub %d, (%s|imm32)' 9710 64-bit arithmetic subtraction. 9711'mul %d, (%s|imm32)' 9712 64-bit arithmetic multiplication. 9713'div %d, (%s|imm32)' 9714 64-bit arithmetic integer division. 9715'mod %d, (%s|imm32)' 9716 64-bit integer remainder. 9717'and %d, (%s|imm32)' 9718 64-bit bit-wise "and" operation. 9719'or %d, (%s|imm32)' 9720 64-bit bit-wise "or" operation. 9721'xor %d, (%s|imm32)' 9722 64-bit bit-wise exclusive-or operation. 9723'lsh %d, (%s|imm32)' 9724 64-bit left shift, by '%s' or 'imm32' bits. 9725'rsh %d, (%s|imm32)' 9726 64-bit right logical shift, by '%s' or 'imm32' bits. 9727'arsh %d, (%s|imm32)' 9728 64-bit right arithmetic shift, by '%s' or 'imm32' bits. 9729'neg %d' 9730 64-bit arithmetic negation. 9731'mov %d, (%s|imm32)' 9732 Move the 64-bit value of '%s' in '%d', or load 'imm32' in '%d'. 9733 97349.7.4.2 32-bit arithmetic instructions 9735...................................... 9736 9737The destination register in these instructions act as an accumulator. 9738 9739'add32 %d, (%s|imm32)' 9740 32-bit arithmetic addition. 9741'sub32 %d, (%s|imm32)' 9742 32-bit arithmetic subtraction. 9743'mul32 %d, (%s|imm32)' 9744 32-bit arithmetic multiplication. 9745'div32 %d, (%s|imm32)' 9746 32-bit arithmetic integer division. 9747'mod32 %d, (%s|imm32)' 9748 32-bit integer remainder. 9749'and32 %d, (%s|imm32)' 9750 32-bit bit-wise "and" operation. 9751'or32 %d, (%s|imm32)' 9752 32-bit bit-wise "or" operation. 9753'xor32 %d, (%s|imm32)' 9754 32-bit bit-wise exclusive-or operation. 9755'lsh32 %d, (%s|imm32)' 9756 32-bit left shift, by '%s' or 'imm32' bits. 9757'rsh32 %d, (%s|imm32)' 9758 32-bit right logical shift, by '%s' or 'imm32' bits. 9759'arsh32 %d, (%s|imm32)' 9760 32-bit right arithmetic shift, by '%s' or 'imm32' bits. 9761'neg32 %d' 9762 32-bit arithmetic negation. 9763'mov32 %d, (%s|imm32)' 9764 Move the 32-bit value of '%s' in '%d', or load 'imm32' in '%d'. 9765 97669.7.4.3 Endianness conversion instructions 9767.......................................... 9768 9769'endle %d, (8|16|32)' 9770 Convert the 8-bit, 16-bit or 32-bit value in '%d' to little-endian. 9771'endbe %d, (8|16|32)' 9772 Convert the 8-bit, 16-bit or 32-bit value in '%d' to big-endian. 9773 97749.7.4.4 64-bit load and pseudo maps 9775................................... 9776 9777'lddw %d, imm64' 9778 Load the given signed 64-bit immediate, or pseudo map descriptor, 9779 to the destination register '%d'. 9780'lddw %d, %map_fd(N)' 9781 Load the address of the given pseudo map fd _N_ to the destination 9782 register '%d'. 9783 97849.7.4.5 Load instructions for socket filters 9785............................................ 9786 9787The following instructions are intended to be used in socket filters, 9788and are therefore not general-purpose: they make assumptions on the 9789contents of several registers. See the file 9790'Documentation/networking/filter.txt' in the Linux kernel source tree 9791for more information. 9792 9793 Absolute loads: 9794 9795'ldabsdw imm32' 9796 Absolute 64-bit load. 9797'ldabsw imm32' 9798 Absolute 32-bit load. 9799'ldabsh imm32' 9800 Absolute 16-bit load. 9801'ldabsb imm32' 9802 Absolute 8-bit load. 9803 9804 Indirect loads: 9805 9806'ldinddw %s, imm32' 9807 Indirect 64-bit load. 9808'ldindw %s, imm32' 9809 Indirect 32-bit load. 9810'ldindh %s, imm32' 9811 Indirect 16-bit load. 9812'ldindb %s, imm32' 9813 Indirect 8-bit load. 9814 98159.7.4.6 Generic load/store instructions 9816....................................... 9817 9818General-purpose load and store instructions are provided for several 9819word sizes. 9820 9821 Load to register instructions: 9822 9823'ldxdw %d, [%s+offset16]' 9824 Generic 64-bit load. 9825'ldxw %d, [%s+offset16]' 9826 Generic 32-bit load. 9827'ldxh %d, [%s+offset16]' 9828 Generic 16-bit load. 9829'ldxb %d, [%s+offset16]' 9830 Generic 8-bit load. 9831 9832 Store from register instructions: 9833 9834'stxdw [%d+offset16], %s' 9835 Generic 64-bit store. 9836'stxw [%d+offset16], %s' 9837 Generic 32-bit store. 9838'stxh [%d+offset16], %s' 9839 Generic 16-bit store. 9840'stxb [%d+offset16], %s' 9841 Generic 8-bit store. 9842 9843 Store from immediates instructions: 9844 9845'stddw [%d+offset16], imm32' 9846 Store immediate as 64-bit. 9847'stdw [%d+offset16], imm32' 9848 Store immediate as 32-bit. 9849'stdh [%d+offset16], imm32' 9850 Store immediate as 16-bit. 9851'stdb [%d+offset16], imm32' 9852 Store immediate as 8-bit. 9853 98549.7.4.7 Jump instructions 9855......................... 9856 9857eBPF provides the following compare-and-jump instructions, which compare 9858the values of the two given registers, or the values of a register and 9859an immediate, and perform a branch in case the comparison holds true. 9860 9861'ja %d,(%s|imm32),disp16' 9862 Jump-always. 9863'jeq %d,(%s|imm32),disp16' 9864 Jump if equal. 9865'jgt %d,(%s|imm32),disp16' 9866 Jump if greater. 9867'jge %d,(%s|imm32),disp16' 9868 Jump if greater or equal. 9869'jlt %d,(%s|imm32),disp16' 9870 Jump if lesser. 9871'jle %d,(%s|imm32),disp16' 9872 Jump if lesser or equal. 9873'jset %d,(%s|imm32),disp16' 9874 Jump if signed equal. 9875'jne %d,(%s|imm32),disp16' 9876 Jump if not equal. 9877'jsgt %d,(%s|imm32),disp16' 9878 Jump if signed greater. 9879'jsge %d,(%s|imm32),disp16' 9880 Jump if signed greater or equal. 9881'jslt %d,(%s|imm32),disp16' 9882 Jump if signed lesser. 9883'jsle %d,(%s|imm32),disp16' 9884 Jump if signed lesser or equal. 9885 9886 A call instruction is provided in order to perform calls to other 9887eBPF functions, or to external kernel helpers: 9888 9889'call (disp32|imm32)' 9890 Jump and link to the offset _disp32_, or to the kernel helper 9891 function identified by _imm32_. 9892 9893 Finally: 9894 9895'exit' 9896 Terminate the eBPF program. 9897 98989.7.4.8 Atomic instructions 9899........................... 9900 9901Atomic exchange-and-add instructions are provided in two flavors: one 9902for swapping 64-bit quantities and another for 32-bit quantities. 9903 9904'xadddw [%d+offset16],%s' 9905 Exchange-and-add a 64-bit value at the specified location. 9906'xaddw [%d+offset16],%s' 9907 Exchange-and-add a 32-bit value at the specified location. 9908 9909 9910File: as.info, Node: CR16-Dependent, Next: CRIS-Dependent, Prev: BPF-Dependent, Up: Machine Dependencies 9911 99129.8 CR16 Dependent Features 9913=========================== 9914 9915* Menu: 9916 9917* CR16 Operand Qualifiers:: CR16 Machine Operand Qualifiers 9918* CR16 Syntax:: Syntax for the CR16 9919 9920 9921File: as.info, Node: CR16 Operand Qualifiers, Next: CR16 Syntax, Up: CR16-Dependent 9922 99239.8.1 CR16 Operand Qualifiers 9924----------------------------- 9925 9926The National Semiconductor CR16 target of 'as' has a few machine 9927dependent operand qualifiers. 9928 9929 Operand expression type qualifier is an optional field in the 9930instruction operand, to determines the type of the expression field of 9931an operand. The '@' is required. CR16 architecture uses one of the 9932following expression qualifiers: 9933 9934's' 9935 - 'Specifies expression operand type as small' 9936'm' 9937 - 'Specifies expression operand type as medium' 9938'l' 9939 - 'Specifies expression operand type as large' 9940'c' 9941 - 'Specifies the CR16 Assembler generates a relocation entry for 9942 the operand, where pc has implied bit, the expression is adjusted 9943 accordingly. The linker uses the relocation entry to update the 9944 operand address at link time.' 9945'got/GOT' 9946 - 'Specifies the CR16 Assembler generates a relocation entry for 9947 the operand, offset from Global Offset Table. The linker uses this 9948 relocation entry to update the operand address at link time' 9949'cgot/cGOT' 9950 - 'Specifies the CompactRISC Assembler generates a relocation entry 9951 for the operand, where pc has implied bit, the expression is 9952 adjusted accordingly. The linker uses the relocation entry to 9953 update the operand address at link time.' 9954 9955 CR16 target operand qualifiers and its size (in bits): 9956 9957'Immediate Operand: s' 9958 4 bits. 9959 9960'Immediate Operand: m' 9961 16 bits, for movb and movw instructions. 9962 9963'Immediate Operand: m' 9964 20 bits, movd instructions. 9965 9966'Immediate Operand: l' 9967 32 bits. 9968 9969'Absolute Operand: s' 9970 Illegal specifier for this operand. 9971 9972'Absolute Operand: m' 9973 20 bits, movd instructions. 9974 9975'Displacement Operand: s' 9976 8 bits. 9977 9978'Displacement Operand: m' 9979 16 bits. 9980 9981'Displacement Operand: l' 9982 24 bits. 9983 9984 For example: 9985 1 movw $_myfun@c,r1 9986 9987 This loads the address of _myfun, shifted right by 1, into r1. 9988 9989 2 movd $_myfun@c,(r2,r1) 9990 9991 This loads the address of _myfun, shifted right by 1, into register-pair r2-r1. 9992 9993 3 _myfun_ptr: 9994 .long _myfun@c 9995 loadd _myfun_ptr, (r1,r0) 9996 jal (r1,r0) 9997 9998 This .long directive, the address of _myfunc, shifted right by 1 at link time. 9999 10000 4 loadd _data1@GOT(r12), (r1,r0) 10001 10002 This loads the address of _data1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r2-r1. 10003 10004 5 loadd _myfunc@cGOT(r12), (r1,r0) 10005 10006 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. 10007 10008 10009File: as.info, Node: CR16 Syntax, Prev: CR16 Operand Qualifiers, Up: CR16-Dependent 10010 100119.8.2 CR16 Syntax 10012----------------- 10013 10014* Menu: 10015 10016* CR16-Chars:: Special Characters 10017 10018 10019File: as.info, Node: CR16-Chars, Up: CR16 Syntax 10020 100219.8.2.1 Special Characters 10022.......................... 10023 10024The presence of a '#' on a line indicates the start of a comment that 10025extends to the end of the current line. If the '#' appears as the first 10026character of a line, the whole line is treated as a comment, but in this 10027case the line can also be a logical line number directive (*note 10028Comments::) or a preprocessor control command (*note Preprocessing::). 10029 10030 The ';' character can be used to separate statements on the same 10031line. 10032 10033 10034File: as.info, Node: CRIS-Dependent, Next: C-SKY-Dependent, Prev: CR16-Dependent, Up: Machine Dependencies 10035 100369.9 CRIS Dependent Features 10037=========================== 10038 10039* Menu: 10040 10041* CRIS-Opts:: Command-line Options 10042* CRIS-Expand:: Instruction expansion 10043* CRIS-Symbols:: Symbols 10044* CRIS-Syntax:: Syntax 10045 10046 10047File: as.info, Node: CRIS-Opts, Next: CRIS-Expand, Up: CRIS-Dependent 10048 100499.9.1 Command-line Options 10050-------------------------- 10051 10052The CRIS version of 'as' has these machine-dependent command-line 10053options. 10054 10055 The format of the generated object files can be either ELF or a.out, 10056specified by the command-line options '--emulation=crisaout' and 10057'--emulation=criself'. The default is ELF (criself), unless 'as' has 10058been configured specifically for a.out by using the configuration name 10059'cris-axis-aout'. 10060 10061 There are two different link-incompatible ELF object file variants 10062for CRIS, for use in environments where symbols are expected to be 10063prefixed by a leading '_' character and for environments without such a 10064symbol prefix. The variant used for GNU/Linux port has no symbol 10065prefix. Which variant to produce is specified by either of the options 10066'--underscore' and '--no-underscore'. The default is '--underscore'. 10067Since symbols in CRIS a.out objects are expected to have a '_' prefix, 10068specifying '--no-underscore' when generating a.out objects is an error. 10069Besides the object format difference, the effect of this option is to 10070parse register names differently (*note crisnous::). The 10071'--no-underscore' option makes a '$' register prefix mandatory. 10072 10073 The option '--pic' must be passed to 'as' in order to recognize the 10074symbol syntax used for ELF (SVR4 PIC) position-independent-code (*note 10075crispic::). This will also affect expansion of instructions. The 10076expansion with '--pic' will use PC-relative rather than (slightly 10077faster) absolute addresses in those expansions. This option is only 10078valid when generating ELF format object files. 10079 10080 The option '--march=ARCHITECTURE' specifies the recognized 10081instruction set and recognized register names. It also controls the 10082architecture type of the object file. Valid values for ARCHITECTURE 10083are: 10084 10085'v0_v10' 10086 All instructions and register names for any architecture variant in 10087 the set v0...v10 are recognized. This is the default if the target 10088 is configured as cris-*. 10089 10090'v10' 10091 Only instructions and register names for CRIS v10 (as found in 10092 ETRAX 100 LX) are recognized. This is the default if the target is 10093 configured as crisv10-*. 10094 10095'v32' 10096 Only instructions and register names for CRIS v32 (code name 10097 Guinness) are recognized. This is the default if the target is 10098 configured as crisv32-*. This value implies '--no-mul-bug-abort'. 10099 (A subsequent '--mul-bug-abort' will turn it back on.) 10100 10101'common_v10_v32' 10102 Only instructions with register names and addressing modes with 10103 opcodes common to the v10 and v32 are recognized. 10104 10105 When '-N' is specified, 'as' will emit a warning when a 16-bit branch 10106instruction is expanded into a 32-bit multiple-instruction construct 10107(*note CRIS-Expand::). 10108 10109 Some versions of the CRIS v10, for example in the Etrax 100 LX, 10110contain a bug that causes destabilizing memory accesses when a multiply 10111instruction is executed with certain values in the first operand just 10112before a cache-miss. When the '--mul-bug-abort' command-line option is 10113active (the default value), 'as' will refuse to assemble a file 10114containing a multiply instruction at a dangerous offset, one that could 10115be the last on a cache-line, or is in a section with insufficient 10116alignment. This placement checking does not catch any case where the 10117multiply instruction is dangerously placed because it is located in a 10118delay-slot. The '--mul-bug-abort' command-line option turns off the 10119checking. 10120 10121 10122File: as.info, Node: CRIS-Expand, Next: CRIS-Symbols, Prev: CRIS-Opts, Up: CRIS-Dependent 10123 101249.9.2 Instruction expansion 10125--------------------------- 10126 10127'as' will silently choose an instruction that fits the operand size for 10128'[register+constant]' operands. For example, the offset '127' in 10129'move.d [r3+127],r4' fits in an instruction using a signed-byte offset. 10130Similarly, 'move.d [r2+32767],r1' will generate an instruction using a 1013116-bit offset. For symbolic expressions and constants that do not fit 10132in 16 bits including the sign bit, a 32-bit offset is generated. 10133 10134 For branches, 'as' will expand from a 16-bit branch instruction into 10135a sequence of instructions that can reach a full 32-bit address. Since 10136this does not correspond to a single instruction, such expansions can 10137optionally be warned about. *Note CRIS-Opts::. 10138 10139 If the operand is found to fit the range, a 'lapc' mnemonic will 10140translate to a 'lapcq' instruction. Use 'lapc.d' to force the 32-bit 10141'lapc' instruction. 10142 10143 Similarly, the 'addo' mnemonic will translate to the shortest fitting 10144instruction of 'addoq', 'addo.w' and 'addo.d', when used with a operand 10145that is a constant known at assembly time. 10146 10147 10148File: as.info, Node: CRIS-Symbols, Next: CRIS-Syntax, Prev: CRIS-Expand, Up: CRIS-Dependent 10149 101509.9.3 Symbols 10151------------- 10152 10153Some symbols are defined by the assembler. They're intended to be used 10154in conditional assembly, for example: 10155 .if ..asm.arch.cris.v32 10156 CODE FOR CRIS V32 10157 .elseif ..asm.arch.cris.common_v10_v32 10158 CODE COMMON TO CRIS V32 AND CRIS V10 10159 .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10 10160 CODE FOR V10 10161 .else 10162 .error "Code needs to be added here." 10163 .endif 10164 10165 These symbols are defined in the assembler, reflecting command-line 10166options, either when specified or the default. They are always defined, 10167to 0 or 1. 10168 10169'..asm.arch.cris.any_v0_v10' 10170 This symbol is non-zero when '--march=v0_v10' is specified or the 10171 default. 10172 10173'..asm.arch.cris.common_v10_v32' 10174 Set according to the option '--march=common_v10_v32'. 10175 10176'..asm.arch.cris.v10' 10177 Reflects the option '--march=v10'. 10178 10179'..asm.arch.cris.v32' 10180 Corresponds to '--march=v10'. 10181 10182 Speaking of symbols, when a symbol is used in code, it can have a 10183suffix modifying its value for use in position-independent code. *Note 10184CRIS-Pic::. 10185 10186 10187File: as.info, Node: CRIS-Syntax, Prev: CRIS-Symbols, Up: CRIS-Dependent 10188 101899.9.4 Syntax 10190------------ 10191 10192There are different aspects of the CRIS assembly syntax. 10193 10194* Menu: 10195 10196* CRIS-Chars:: Special Characters 10197* CRIS-Pic:: Position-Independent Code Symbols 10198* CRIS-Regs:: Register Names 10199* CRIS-Pseudos:: Assembler Directives 10200 10201 10202File: as.info, Node: CRIS-Chars, Next: CRIS-Pic, Up: CRIS-Syntax 10203 102049.9.4.1 Special Characters 10205.......................... 10206 10207The character '#' is a line comment character. It starts a comment if 10208and only if it is placed at the beginning of a line. 10209 10210 A ';' character starts a comment anywhere on the line, causing all 10211characters up to the end of the line to be ignored. 10212 10213 A '@' character is handled as a line separator equivalent to a 10214logical new-line character (except in a comment), so separate 10215instructions can be specified on a single line. 10216 10217 10218File: as.info, Node: CRIS-Pic, Next: CRIS-Regs, Prev: CRIS-Chars, Up: CRIS-Syntax 10219 102209.9.4.2 Symbols in position-independent code 10221............................................ 10222 10223When generating position-independent code (SVR4 PIC) for use in 10224cris-axis-linux-gnu or crisv32-axis-linux-gnu shared libraries, symbol 10225suffixes are used to specify what kind of run-time symbol lookup will be 10226used, expressed in the object as different _relocation types_. Usually, 10227all absolute symbol values must be located in a table, the _global 10228offset table_, leaving the code position-independent; independent of 10229values of global symbols and independent of the address of the code. 10230The suffix modifies the value of the symbol, into for example an index 10231into the global offset table where the real symbol value is entered, or 10232a PC-relative value, or a value relative to the start of the global 10233offset table. All symbol suffixes start with the character ':' (omitted 10234in the list below). Every symbol use in code or a read-only section 10235must therefore have a PIC suffix to enable a useful shared library to be 10236created. Usually, these constructs must not be used with an additive 10237constant offset as is usually allowed, i.e. no 4 as in 'symbol + 4' is 10238allowed. This restriction is checked at link-time, not at 10239assembly-time. 10240 10241'GOT' 10242 10243 Attaching this suffix to a symbol in an instruction causes the 10244 symbol to be entered into the global offset table. The value is a 10245 32-bit index for that symbol into the global offset table. The 10246 name of the corresponding relocation is 'R_CRIS_32_GOT'. Example: 10247 'move.d [$r0+extsym:GOT],$r9' 10248 10249'GOT16' 10250 10251 Same as for 'GOT', but the value is a 16-bit index into the global 10252 offset table. The corresponding relocation is 'R_CRIS_16_GOT'. 10253 Example: 'move.d [$r0+asymbol:GOT16],$r10' 10254 10255'PLT' 10256 10257 This suffix is used for function symbols. It causes a _procedure 10258 linkage table_, an array of code stubs, to be created at the time 10259 the shared object is created or linked against, together with a 10260 global offset table entry. The value is a pc-relative offset to 10261 the corresponding stub code in the procedure linkage table. This 10262 arrangement causes the run-time symbol resolver to be called to 10263 look up and set the value of the symbol the first time the function 10264 is called (at latest; depending environment variables). It is only 10265 safe to leave the symbol unresolved this way if all references are 10266 function calls. The name of the relocation is 10267 'R_CRIS_32_PLT_PCREL'. Example: 'add.d fnname:PLT,$pc' 10268 10269'PLTG' 10270 10271 Like PLT, but the value is relative to the beginning of the global 10272 offset table. The relocation is 'R_CRIS_32_PLT_GOTREL'. Example: 10273 'move.d fnname:PLTG,$r3' 10274 10275'GOTPLT' 10276 10277 Similar to 'PLT', but the value of the symbol is a 32-bit index 10278 into the global offset table. This is somewhat of a mix between 10279 the effect of the 'GOT' and the 'PLT' suffix; the difference to 10280 'GOT' is that there will be a procedure linkage table entry 10281 created, and that the symbol is assumed to be a function entry and 10282 will be resolved by the run-time resolver as with 'PLT'. The 10283 relocation is 'R_CRIS_32_GOTPLT'. Example: 'jsr 10284 [$r0+fnname:GOTPLT]' 10285 10286'GOTPLT16' 10287 10288 A variant of 'GOTPLT' giving a 16-bit value. Its relocation name 10289 is 'R_CRIS_16_GOTPLT'. Example: 'jsr [$r0+fnname:GOTPLT16]' 10290 10291'GOTOFF' 10292 10293 This suffix must only be attached to a local symbol, but may be 10294 used in an expression adding an offset. The value is the address 10295 of the symbol relative to the start of the global offset table. 10296 The relocation name is 'R_CRIS_32_GOTREL'. Example: 'move.d 10297 [$r0+localsym:GOTOFF],r3' 10298 10299 10300File: as.info, Node: CRIS-Regs, Next: CRIS-Pseudos, Prev: CRIS-Pic, Up: CRIS-Syntax 10301 103029.9.4.3 Register names 10303...................... 10304 10305A '$' character may always prefix a general or special register name in 10306an instruction operand but is mandatory when the option 10307'--no-underscore' is specified or when the '.syntax register_prefix' 10308directive is in effect (*note crisnous::). Register names are 10309case-insensitive. 10310 10311 10312File: as.info, Node: CRIS-Pseudos, Prev: CRIS-Regs, Up: CRIS-Syntax 10313 103149.9.4.4 Assembler Directives 10315............................ 10316 10317There are a few CRIS-specific pseudo-directives in addition to the 10318generic ones. *Note Pseudo Ops::. Constants emitted by 10319pseudo-directives are in little-endian order for CRIS. There is no 10320support for floating-point-specific directives for CRIS. 10321 10322'.dword EXPRESSIONS' 10323 10324 The '.dword' directive is a synonym for '.int', expecting zero or 10325 more EXPRESSIONS, separated by commas. For each expression, a 10326 32-bit little-endian constant is emitted. 10327 10328'.syntax ARGUMENT' 10329 The '.syntax' directive takes as ARGUMENT one of the following 10330 case-sensitive choices. 10331 10332 'no_register_prefix' 10333 10334 The '.syntax no_register_prefix' directive makes a '$' 10335 character prefix on all registers optional. It overrides a 10336 previous setting, including the corresponding effect of the 10337 option '--no-underscore'. If this directive is used when 10338 ordinary symbols do not have a '_' character prefix, care must 10339 be taken to avoid ambiguities whether an operand is a register 10340 or a symbol; using symbols with names the same as general or 10341 special registers then invoke undefined behavior. 10342 10343 'register_prefix' 10344 10345 This directive makes a '$' character prefix on all registers 10346 mandatory. It overrides a previous setting, including the 10347 corresponding effect of the option '--underscore'. 10348 10349 'leading_underscore' 10350 10351 This is an assertion directive, emitting an error if the 10352 '--no-underscore' option is in effect. 10353 10354 'no_leading_underscore' 10355 10356 This is the opposite of the '.syntax leading_underscore' 10357 directive and emits an error if the option '--underscore' is 10358 in effect. 10359 10360'.arch ARGUMENT' 10361 This is an assertion directive, giving an error if the specified 10362 ARGUMENT is not the same as the specified or default value for the 10363 '--march=ARCHITECTURE' option (*note march-option::). 10364 10365 10366File: as.info, Node: C-SKY-Dependent, Next: D10V-Dependent, Prev: CRIS-Dependent, Up: Machine Dependencies 10367 103689.10 C-SKY Dependent Features 10369============================= 10370 10371* Menu: 10372 10373* C-SKY Options:: Options 10374* C-SKY Syntax:: Syntax 10375 10376 10377File: as.info, Node: C-SKY Options, Next: C-SKY Syntax, Up: C-SKY-Dependent 10378 103799.10.1 Options 10380-------------- 10381 10382'-march=ARCHNAME' 10383 Assemble for architecture ARCHNAME. The '--help' option lists 10384 valid values for ARCHNAME. 10385 10386'-mcpu=CPUNAME' 10387 Assemble for architecture CPUNAME. The '--help' option lists valid 10388 values for CPUNAME. 10389 10390'-EL' 10391'-mlittle-endian' 10392 Generate little-endian output. 10393 10394'-EB' 10395'-mbig-endian' 10396 Generate big-endian output. 10397 10398'-fpic' 10399'-pic' 10400 Generate position-independent code. 10401 10402'-mljump' 10403'-mno-ljump' 10404 Enable/disable transformation of the short branch instructions 10405 'jbf', 'jbt', and 'jbr' to 'jmpi'. This option is for V2 10406 processors only. It is ignored on CK801 and CK802 targets, which 10407 do not support the 'jmpi' instruction, and is enabled by default 10408 for other processors. 10409 10410'-mbranch-stub' 10411'-mno-branch-stub' 10412 Pass through 'R_CKCORE_PCREL_IMM26BY2' relocations for 'bsr' 10413 instructions to the linker. 10414 10415 This option is only available for bare-metal C-SKY V2 ELF targets, 10416 where it is enabled by default. It cannot be used in code that 10417 will be dynamically linked against shared libraries. 10418 10419'-force2bsr' 10420'-mforce2bsr' 10421'-no-force2bsr' 10422'-mno-force2bsr' 10423 Enable/disable transformation of 'jbsr' instructions to 'bsr'. 10424 This option is always enabled (and '-mno-force2bsr' is ignored) for 10425 CK801/CK802 targets. It is also always enabled when 10426 '-mbranch-stub' is in effect. 10427 10428'-jsri2bsr' 10429'-mjsri2bsr' 10430'-no-jsri2bsr' 10431'-mno-jsri2bsr' 10432 Enable/disable transformation of 'jsri' instructions to 'bsr'. 10433 This option is enabled by default. 10434 10435'-mnolrw' 10436'-mno-lrw' 10437 Enable/disable transformation of 'lrw' instructions into a 10438 'movih'/'ori' pair. 10439 10440'-melrw' 10441'-mno-elrw' 10442 Enable/disable extended 'lrw' instructions. This option is enabled 10443 by default for CK800-series processors. 10444 10445'-mlaf' 10446'-mliterals-after-func' 10447'-mno-laf' 10448'-mno-literals-after-func' 10449 Enable/disable placement of literal pools after each function. 10450 10451'-mlabr' 10452'-mliterals-after-br' 10453'-mno-labr' 10454'-mnoliterals-after-br' 10455 Enable/disable placement of literal pools after unconditional 10456 branches. This option is enabled by default. 10457 10458'-mistack' 10459'-mno-istack' 10460 Enable/disable interrupt stack instructions. This option is 10461 enabled by default on CK801, CK802, and CK802 processors. 10462 10463 The following options explicitly enable certain optional 10464instructions. These features are also enabled implicitly by using 10465'-mcpu=' to specify a processor that supports it. 10466 10467'-mhard-float' 10468 Enable hard float instructions. 10469 10470'-mmp' 10471 Enable multiprocessor instructions. 10472 10473'-mcp' 10474 Enable coprocessor instructions. 10475 10476'-mcache' 10477 Enable cache prefetch instruction. 10478 10479'-msecurity' 10480 Enable C-SKY security instructions. 10481 10482'-mtrust' 10483 Enable C-SKY trust instructions. 10484 10485'-mdsp' 10486 Enable DSP instructions. 10487 10488'-medsp' 10489 Enable enhanced DSP instructions. 10490 10491'-mvdsp' 10492 Enable vector DSP instructions. 10493 10494 10495File: as.info, Node: C-SKY Syntax, Prev: C-SKY Options, Up: C-SKY-Dependent 10496 104979.10.2 Syntax 10498------------- 10499 10500'as' implements the standard C-SKY assembler syntax documented in the 10501'C-SKY V2 CPU Applications Binary Interface Standards Manual'. 10502 10503 10504File: as.info, Node: D10V-Dependent, Next: D30V-Dependent, Prev: C-SKY-Dependent, Up: Machine Dependencies 10505 105069.11 D10V Dependent Features 10507============================ 10508 10509* Menu: 10510 10511* D10V-Opts:: D10V Options 10512* D10V-Syntax:: Syntax 10513* D10V-Float:: Floating Point 10514* D10V-Opcodes:: Opcodes 10515 10516 10517File: as.info, Node: D10V-Opts, Next: D10V-Syntax, Up: D10V-Dependent 10518 105199.11.1 D10V Options 10520------------------- 10521 10522The Mitsubishi D10V version of 'as' has a few machine dependent options. 10523 10524'-O' 10525 The D10V can often execute two sub-instructions in parallel. When 10526 this option is used, 'as' will attempt to optimize its output by 10527 detecting when instructions can be executed in parallel. 10528'--nowarnswap' 10529 To optimize execution performance, 'as' will sometimes swap the 10530 order of instructions. Normally this generates a warning. When 10531 this option is used, no warning will be generated when instructions 10532 are swapped. 10533'--gstabs-packing' 10534'--no-gstabs-packing' 10535 'as' packs adjacent short instructions into a single packed 10536 instruction. '--no-gstabs-packing' turns instruction packing off 10537 if '--gstabs' is specified as well; '--gstabs-packing' (the 10538 default) turns instruction packing on even when '--gstabs' is 10539 specified. 10540 10541 10542File: as.info, Node: D10V-Syntax, Next: D10V-Float, Prev: D10V-Opts, Up: D10V-Dependent 10543 105449.11.2 Syntax 10545------------- 10546 10547The D10V syntax is based on the syntax in Mitsubishi's D10V architecture 10548manual. The differences are detailed below. 10549 10550* Menu: 10551 10552* D10V-Size:: Size Modifiers 10553* D10V-Subs:: Sub-Instructions 10554* D10V-Chars:: Special Characters 10555* D10V-Regs:: Register Names 10556* D10V-Addressing:: Addressing Modes 10557* D10V-Word:: @WORD Modifier 10558 10559 10560File: as.info, Node: D10V-Size, Next: D10V-Subs, Up: D10V-Syntax 10561 105629.11.2.1 Size Modifiers 10563....................... 10564 10565The D10V version of 'as' uses the instruction names in the D10V 10566Architecture Manual. However, the names in the manual are sometimes 10567ambiguous. There are instruction names that can assemble to a short or 10568long form opcode. How does the assembler pick the correct form? 'as' 10569will always pick the smallest form if it can. When dealing with a 10570symbol that is not defined yet when a line is being assembled, it will 10571always use the long form. If you need to force the assembler to use 10572either the short or long form of the instruction, you can append either 10573'.s' (short) or '.l' (long) to it. For example, if you are writing an 10574assembly program and you want to do a branch to a symbol that is defined 10575later in your program, you can write 'bra.s foo'. Objdump and GDB will 10576always append '.s' or '.l' to instructions which have both short and 10577long forms. 10578 10579 10580File: as.info, Node: D10V-Subs, Next: D10V-Chars, Prev: D10V-Size, Up: D10V-Syntax 10581 105829.11.2.2 Sub-Instructions 10583......................... 10584 10585The D10V assembler takes as input a series of instructions, either 10586one-per-line, or in the special two-per-line format described in the 10587next section. Some of these instructions will be short-form or 10588sub-instructions. These sub-instructions can be packed into a single 10589instruction. The assembler will do this automatically. It will also 10590detect when it should not pack instructions. For example, when a label 10591is defined, the next instruction will never be packaged with the 10592previous one. Whenever a branch and link instruction is called, it will 10593not be packaged with the next instruction so the return address will be 10594valid. Nops are automatically inserted when necessary. 10595 10596 If you do not want the assembler automatically making these 10597decisions, you can control the packaging and execution type (parallel or 10598sequential) with the special execution symbols described in the next 10599section. 10600 10601 10602File: as.info, Node: D10V-Chars, Next: D10V-Regs, Prev: D10V-Subs, Up: D10V-Syntax 10603 106049.11.2.3 Special Characters 10605........................... 10606 10607A semicolon (';') can be used anywhere on a line to start a comment that 10608extends to the end of the line. 10609 10610 If a '#' appears as the first character of a line, the whole line is 10611treated as a comment, but in this case the line could also be a logical 10612line number directive (*note Comments::) or a preprocessor control 10613command (*note Preprocessing::). 10614 10615 Sub-instructions may be executed in order, in reverse-order, or in 10616parallel. Instructions listed in the standard one-per-line format will 10617be executed sequentially. To specify the executing order, use the 10618following symbols: 10619'->' 10620 Sequential with instruction on the left first. 10621'<-' 10622 Sequential with instruction on the right first. 10623'||' 10624 Parallel 10625 The D10V syntax allows either one instruction per line, one 10626instruction per line with the execution symbol, or two instructions per 10627line. For example 10628'abs a1 -> abs r0' 10629 Execute these sequentially. The instruction on the right is in the 10630 right container and is executed second. 10631'abs r0 <- abs a1' 10632 Execute these reverse-sequentially. The instruction on the right 10633 is in the right container, and is executed first. 10634'ld2w r2,@r8+ || mac a0,r0,r7' 10635 Execute these in parallel. 10636'ld2w r2,@r8+ ||' 10637'mac a0,r0,r7' 10638 Two-line format. Execute these in parallel. 10639'ld2w r2,@r8+' 10640'mac a0,r0,r7' 10641 Two-line format. Execute these sequentially. Assembler will put 10642 them in the proper containers. 10643'ld2w r2,@r8+ ->' 10644'mac a0,r0,r7' 10645 Two-line format. Execute these sequentially. Same as above but 10646 second instruction will always go into right container. 10647 Since '$' has no special meaning, you may use it in symbol names. 10648 10649 10650File: as.info, Node: D10V-Regs, Next: D10V-Addressing, Prev: D10V-Chars, Up: D10V-Syntax 10651 106529.11.2.4 Register Names 10653....................... 10654 10655You can use the predefined symbols 'r0' through 'r15' to refer to the 10656D10V registers. You can also use 'sp' as an alias for 'r15'. The 10657accumulators are 'a0' and 'a1'. There are special register-pair names 10658that may optionally be used in opcodes that require even-numbered 10659registers. Register names are not case sensitive. 10660 10661 Register Pairs 10662'r0-r1' 10663'r2-r3' 10664'r4-r5' 10665'r6-r7' 10666'r8-r9' 10667'r10-r11' 10668'r12-r13' 10669'r14-r15' 10670 10671 The D10V also has predefined symbols for these control registers and 10672status bits: 10673'psw' 10674 Processor Status Word 10675'bpsw' 10676 Backup Processor Status Word 10677'pc' 10678 Program Counter 10679'bpc' 10680 Backup Program Counter 10681'rpt_c' 10682 Repeat Count 10683'rpt_s' 10684 Repeat Start address 10685'rpt_e' 10686 Repeat End address 10687'mod_s' 10688 Modulo Start address 10689'mod_e' 10690 Modulo End address 10691'iba' 10692 Instruction Break Address 10693'f0' 10694 Flag 0 10695'f1' 10696 Flag 1 10697'c' 10698 Carry flag 10699 10700 10701File: as.info, Node: D10V-Addressing, Next: D10V-Word, Prev: D10V-Regs, Up: D10V-Syntax 10702 107039.11.2.5 Addressing Modes 10704......................... 10705 10706'as' understands the following addressing modes for the D10V. 'RN' in 10707the following refers to any of the numbered registers, but _not_ the 10708control registers. 10709'RN' 10710 Register direct 10711'@RN' 10712 Register indirect 10713'@RN+' 10714 Register indirect with post-increment 10715'@RN-' 10716 Register indirect with post-decrement 10717'@-SP' 10718 Register indirect with pre-decrement 10719'@(DISP, RN)' 10720 Register indirect with displacement 10721'ADDR' 10722 PC relative address (for branch or rep). 10723'#IMM' 10724 Immediate data (the '#' is optional and ignored) 10725 10726 10727File: as.info, Node: D10V-Word, Prev: D10V-Addressing, Up: D10V-Syntax 10728 107299.11.2.6 @WORD Modifier 10730....................... 10731 10732Any symbol followed by '@word' will be replaced by the symbol's value 10733shifted right by 2. This is used in situations such as loading a 10734register with the address of a function (or any other code fragment). 10735For example, if you want to load a register with the location of the 10736function 'main' then jump to that function, you could do it as follows: 10737 ldi r2, main@word 10738 jmp r2 10739 10740 10741File: as.info, Node: D10V-Float, Next: D10V-Opcodes, Prev: D10V-Syntax, Up: D10V-Dependent 10742 107439.11.3 Floating Point 10744--------------------- 10745 10746The D10V has no hardware floating point, but the '.float' and '.double' 10747directives generates IEEE floating-point numbers for compatibility with 10748other development tools. 10749 10750 10751File: as.info, Node: D10V-Opcodes, Prev: D10V-Float, Up: D10V-Dependent 10752 107539.11.4 Opcodes 10754-------------- 10755 10756For detailed information on the D10V machine instruction set, see 'D10V 10757Architecture: A VLIW Microprocessor for Multimedia Applications' 10758(Mitsubishi Electric Corp.). 'as' implements all the standard D10V 10759opcodes. The only changes are those described in the section on size 10760modifiers 10761 10762 10763File: as.info, Node: D30V-Dependent, Next: Epiphany-Dependent, Prev: D10V-Dependent, Up: Machine Dependencies 10764 107659.12 D30V Dependent Features 10766============================ 10767 10768* Menu: 10769 10770* D30V-Opts:: D30V Options 10771* D30V-Syntax:: Syntax 10772* D30V-Float:: Floating Point 10773* D30V-Opcodes:: Opcodes 10774 10775 10776File: as.info, Node: D30V-Opts, Next: D30V-Syntax, Up: D30V-Dependent 10777 107789.12.1 D30V Options 10779------------------- 10780 10781The Mitsubishi D30V version of 'as' has a few machine dependent options. 10782 10783'-O' 10784 The D30V can often execute two sub-instructions in parallel. When 10785 this option is used, 'as' will attempt to optimize its output by 10786 detecting when instructions can be executed in parallel. 10787 10788'-n' 10789 When this option is used, 'as' will issue a warning every time it 10790 adds a nop instruction. 10791 10792'-N' 10793 When this option is used, 'as' will issue a warning if it needs to 10794 insert a nop after a 32-bit multiply before a load or 16-bit 10795 multiply instruction. 10796 10797 10798File: as.info, Node: D30V-Syntax, Next: D30V-Float, Prev: D30V-Opts, Up: D30V-Dependent 10799 108009.12.2 Syntax 10801------------- 10802 10803The D30V syntax is based on the syntax in Mitsubishi's D30V architecture 10804manual. The differences are detailed below. 10805 10806* Menu: 10807 10808* D30V-Size:: Size Modifiers 10809* D30V-Subs:: Sub-Instructions 10810* D30V-Chars:: Special Characters 10811* D30V-Guarded:: Guarded Execution 10812* D30V-Regs:: Register Names 10813* D30V-Addressing:: Addressing Modes 10814 10815 10816File: as.info, Node: D30V-Size, Next: D30V-Subs, Up: D30V-Syntax 10817 108189.12.2.1 Size Modifiers 10819....................... 10820 10821The D30V version of 'as' uses the instruction names in the D30V 10822Architecture Manual. However, the names in the manual are sometimes 10823ambiguous. There are instruction names that can assemble to a short or 10824long form opcode. How does the assembler pick the correct form? 'as' 10825will always pick the smallest form if it can. When dealing with a 10826symbol that is not defined yet when a line is being assembled, it will 10827always use the long form. If you need to force the assembler to use 10828either the short or long form of the instruction, you can append either 10829'.s' (short) or '.l' (long) to it. For example, if you are writing an 10830assembly program and you want to do a branch to a symbol that is defined 10831later in your program, you can write 'bra.s foo'. Objdump and GDB will 10832always append '.s' or '.l' to instructions which have both short and 10833long forms. 10834 10835 10836File: as.info, Node: D30V-Subs, Next: D30V-Chars, Prev: D30V-Size, Up: D30V-Syntax 10837 108389.12.2.2 Sub-Instructions 10839......................... 10840 10841The D30V assembler takes as input a series of instructions, either 10842one-per-line, or in the special two-per-line format described in the 10843next section. Some of these instructions will be short-form or 10844sub-instructions. These sub-instructions can be packed into a single 10845instruction. The assembler will do this automatically. It will also 10846detect when it should not pack instructions. For example, when a label 10847is defined, the next instruction will never be packaged with the 10848previous one. Whenever a branch and link instruction is called, it will 10849not be packaged with the next instruction so the return address will be 10850valid. Nops are automatically inserted when necessary. 10851 10852 If you do not want the assembler automatically making these 10853decisions, you can control the packaging and execution type (parallel or 10854sequential) with the special execution symbols described in the next 10855section. 10856 10857 10858File: as.info, Node: D30V-Chars, Next: D30V-Guarded, Prev: D30V-Subs, Up: D30V-Syntax 10859 108609.12.2.3 Special Characters 10861........................... 10862 10863A semicolon (';') can be used anywhere on a line to start a comment that 10864extends to the end of the line. 10865 10866 If a '#' appears as the first character of a line, the whole line is 10867treated as a comment, but in this case the line could also be a logical 10868line number directive (*note Comments::) or a preprocessor control 10869command (*note Preprocessing::). 10870 10871 Sub-instructions may be executed in order, in reverse-order, or in 10872parallel. Instructions listed in the standard one-per-line format will 10873be executed sequentially unless you use the '-O' option. 10874 10875 To specify the executing order, use the following symbols: 10876'->' 10877 Sequential with instruction on the left first. 10878 10879'<-' 10880 Sequential with instruction on the right first. 10881 10882'||' 10883 Parallel 10884 10885 The D30V syntax allows either one instruction per line, one 10886instruction per line with the execution symbol, or two instructions per 10887line. For example 10888'abs r2,r3 -> abs r4,r5' 10889 Execute these sequentially. The instruction on the right is in the 10890 right container and is executed second. 10891 10892'abs r2,r3 <- abs r4,r5' 10893 Execute these reverse-sequentially. The instruction on the right 10894 is in the right container, and is executed first. 10895 10896'abs r2,r3 || abs r4,r5' 10897 Execute these in parallel. 10898 10899'ldw r2,@(r3,r4) ||' 10900'mulx r6,r8,r9' 10901 Two-line format. Execute these in parallel. 10902 10903'mulx a0,r8,r9' 10904'stw r2,@(r3,r4)' 10905 Two-line format. Execute these sequentially unless '-O' option is 10906 used. If the '-O' option is used, the assembler will determine if 10907 the instructions could be done in parallel (the above two 10908 instructions can be done in parallel), and if so, emit them as 10909 parallel instructions. The assembler will put them in the proper 10910 containers. In the above example, the assembler will put the 'stw' 10911 instruction in left container and the 'mulx' instruction in the 10912 right container. 10913 10914'stw r2,@(r3,r4) ->' 10915'mulx a0,r8,r9' 10916 Two-line format. Execute the 'stw' instruction followed by the 10917 'mulx' instruction sequentially. The first instruction goes in the 10918 left container and the second instruction goes into right 10919 container. The assembler will give an error if the machine 10920 ordering constraints are violated. 10921 10922'stw r2,@(r3,r4) <-' 10923'mulx a0,r8,r9' 10924 Same as previous example, except that the 'mulx' instruction is 10925 executed before the 'stw' instruction. 10926 10927 Since '$' has no special meaning, you may use it in symbol names. 10928 10929 10930File: as.info, Node: D30V-Guarded, Next: D30V-Regs, Prev: D30V-Chars, Up: D30V-Syntax 10931 109329.12.2.4 Guarded Execution 10933.......................... 10934 10935'as' supports the full range of guarded execution directives for each 10936instruction. Just append the directive after the instruction proper. 10937The directives are: 10938 10939'/tx' 10940 Execute the instruction if flag f0 is true. 10941'/fx' 10942 Execute the instruction if flag f0 is false. 10943'/xt' 10944 Execute the instruction if flag f1 is true. 10945'/xf' 10946 Execute the instruction if flag f1 is false. 10947'/tt' 10948 Execute the instruction if both flags f0 and f1 are true. 10949'/tf' 10950 Execute the instruction if flag f0 is true and flag f1 is false. 10951 10952 10953File: as.info, Node: D30V-Regs, Next: D30V-Addressing, Prev: D30V-Guarded, Up: D30V-Syntax 10954 109559.12.2.5 Register Names 10956....................... 10957 10958You can use the predefined symbols 'r0' through 'r63' to refer to the 10959D30V registers. You can also use 'sp' as an alias for 'r63' and 'link' 10960as an alias for 'r62'. The accumulators are 'a0' and 'a1'. 10961 10962 The D30V also has predefined symbols for these control registers and 10963status bits: 10964'psw' 10965 Processor Status Word 10966'bpsw' 10967 Backup Processor Status Word 10968'pc' 10969 Program Counter 10970'bpc' 10971 Backup Program Counter 10972'rpt_c' 10973 Repeat Count 10974'rpt_s' 10975 Repeat Start address 10976'rpt_e' 10977 Repeat End address 10978'mod_s' 10979 Modulo Start address 10980'mod_e' 10981 Modulo End address 10982'iba' 10983 Instruction Break Address 10984'f0' 10985 Flag 0 10986'f1' 10987 Flag 1 10988'f2' 10989 Flag 2 10990'f3' 10991 Flag 3 10992'f4' 10993 Flag 4 10994'f5' 10995 Flag 5 10996'f6' 10997 Flag 6 10998'f7' 10999 Flag 7 11000's' 11001 Same as flag 4 (saturation flag) 11002'v' 11003 Same as flag 5 (overflow flag) 11004'va' 11005 Same as flag 6 (sticky overflow flag) 11006'c' 11007 Same as flag 7 (carry/borrow flag) 11008'b' 11009 Same as flag 7 (carry/borrow flag) 11010 11011 11012File: as.info, Node: D30V-Addressing, Prev: D30V-Regs, Up: D30V-Syntax 11013 110149.12.2.6 Addressing Modes 11015......................... 11016 11017'as' understands the following addressing modes for the D30V. 'RN' in 11018the following refers to any of the numbered registers, but _not_ the 11019control registers. 11020'RN' 11021 Register direct 11022'@RN' 11023 Register indirect 11024'@RN+' 11025 Register indirect with post-increment 11026'@RN-' 11027 Register indirect with post-decrement 11028'@-SP' 11029 Register indirect with pre-decrement 11030'@(DISP, RN)' 11031 Register indirect with displacement 11032'ADDR' 11033 PC relative address (for branch or rep). 11034'#IMM' 11035 Immediate data (the '#' is optional and ignored) 11036 11037 11038File: as.info, Node: D30V-Float, Next: D30V-Opcodes, Prev: D30V-Syntax, Up: D30V-Dependent 11039 110409.12.3 Floating Point 11041--------------------- 11042 11043The D30V has no hardware floating point, but the '.float' and '.double' 11044directives generates IEEE floating-point numbers for compatibility with 11045other development tools. 11046 11047 11048File: as.info, Node: D30V-Opcodes, Prev: D30V-Float, Up: D30V-Dependent 11049 110509.12.4 Opcodes 11051-------------- 11052 11053For detailed information on the D30V machine instruction set, see 'D30V 11054Architecture: A VLIW Microprocessor for Multimedia Applications' 11055(Mitsubishi Electric Corp.). 'as' implements all the standard D30V 11056opcodes. The only changes are those described in the section on size 11057modifiers 11058 11059 11060File: as.info, Node: Epiphany-Dependent, Next: H8/300-Dependent, Prev: D30V-Dependent, Up: Machine Dependencies 11061 110629.13 Epiphany Dependent Features 11063================================ 11064 11065* Menu: 11066 11067* Epiphany Options:: Options 11068* Epiphany Syntax:: Epiphany Syntax 11069 11070 11071File: as.info, Node: Epiphany Options, Next: Epiphany Syntax, Up: Epiphany-Dependent 11072 110739.13.1 Options 11074-------------- 11075 11076'as' has two additional command-line options for the Epiphany 11077architecture. 11078 11079'-mepiphany' 11080 Specifies that the both 32 and 16 bit instructions are allowed. 11081 This is the default behavior. 11082 11083'-mepiphany16' 11084 Restricts the permitted instructions to just the 16 bit set. 11085 11086 11087File: as.info, Node: Epiphany Syntax, Prev: Epiphany Options, Up: Epiphany-Dependent 11088 110899.13.2 Epiphany Syntax 11090---------------------- 11091 11092* Menu: 11093 11094* Epiphany-Chars:: Special Characters 11095 11096 11097File: as.info, Node: Epiphany-Chars, Up: Epiphany Syntax 11098 110999.13.2.1 Special Characters 11100........................... 11101 11102The presence of a ';' on a line indicates the start of a comment that 11103extends to the end of the current line. 11104 11105 If a '#' appears as the first character of a line then the whole line 11106is treated as a comment, but in this case the line could also be a 11107logical line number directive (*note Comments::) or a preprocessor 11108control command (*note Preprocessing::). 11109 11110 The '`' character can be used to separate statements on the same 11111line. 11112 11113 11114File: as.info, Node: H8/300-Dependent, Next: HPPA-Dependent, Prev: Epiphany-Dependent, Up: Machine Dependencies 11115 111169.14 H8/300 Dependent Features 11117============================== 11118 11119* Menu: 11120 11121* H8/300 Options:: Options 11122* H8/300 Syntax:: Syntax 11123* H8/300 Floating Point:: Floating Point 11124* H8/300 Directives:: H8/300 Machine Directives 11125* H8/300 Opcodes:: Opcodes 11126 11127 11128File: as.info, Node: H8/300 Options, Next: H8/300 Syntax, Up: H8/300-Dependent 11129 111309.14.1 Options 11131-------------- 11132 11133The Renesas H8/300 version of 'as' has one machine-dependent option: 11134 11135'-h-tick-hex' 11136 Support H'00 style hex constants in addition to 0x00 style. 11137 11138'-mach=NAME' 11139 Sets the H8300 machine variant. The following machine names are 11140 recognised: 'h8300h', 'h8300hn', 'h8300s', 'h8300sn', 'h8300sx' and 11141 'h8300sxn'. 11142 11143 11144File: as.info, Node: H8/300 Syntax, Next: H8/300 Floating Point, Prev: H8/300 Options, Up: H8/300-Dependent 11145 111469.14.2 Syntax 11147------------- 11148 11149* Menu: 11150 11151* H8/300-Chars:: Special Characters 11152* H8/300-Regs:: Register Names 11153* H8/300-Addressing:: Addressing Modes 11154 11155 11156File: as.info, Node: H8/300-Chars, Next: H8/300-Regs, Up: H8/300 Syntax 11157 111589.14.2.1 Special Characters 11159........................... 11160 11161';' is the line comment character. 11162 11163 '$' can be used instead of a newline to separate statements. 11164Therefore _you may not use '$' in symbol names_ on the H8/300. 11165 11166 11167File: as.info, Node: H8/300-Regs, Next: H8/300-Addressing, Prev: H8/300-Chars, Up: H8/300 Syntax 11168 111699.14.2.2 Register Names 11170....................... 11171 11172You can use predefined symbols of the form 'rNh' and 'rNl' to refer to 11173the H8/300 registers as sixteen 8-bit general-purpose registers. N is a 11174digit from '0' to '7'); for instance, both 'r0h' and 'r7l' are valid 11175register names. 11176 11177 You can also use the eight predefined symbols 'rN' to refer to the 11178H8/300 registers as 16-bit registers (you must use this form for 11179addressing). 11180 11181 On the H8/300H, you can also use the eight predefined symbols 'erN' 11182('er0' ... 'er7') to refer to the 32-bit general purpose registers. 11183 11184 The two control registers are called 'pc' (program counter; a 16-bit 11185register, except on the H8/300H where it is 24 bits) and 'ccr' 11186(condition code register; an 8-bit register). 'r7' is used as the stack 11187pointer, and can also be called 'sp'. 11188 11189 11190File: as.info, Node: H8/300-Addressing, Prev: H8/300-Regs, Up: H8/300 Syntax 11191 111929.14.2.3 Addressing Modes 11193......................... 11194 11195as understands the following addressing modes for the H8/300: 11196'rN' 11197 Register direct 11198 11199'@rN' 11200 Register indirect 11201 11202'@(D, rN)' 11203'@(D:16, rN)' 11204'@(D:24, rN)' 11205 Register indirect: 16-bit or 24-bit displacement D from register N. 11206 (24-bit displacements are only meaningful on the H8/300H.) 11207 11208'@rN+' 11209 Register indirect with post-increment 11210 11211'@-rN' 11212 Register indirect with pre-decrement 11213 11214'@AA' 11215'@AA:8' 11216'@AA:16' 11217'@AA:24' 11218 Absolute address 'aa'. (The address size ':24' only makes sense on 11219 the H8/300H.) 11220 11221'#XX' 11222'#XX:8' 11223'#XX:16' 11224'#XX:32' 11225 Immediate data XX. You may specify the ':8', ':16', or ':32' for 11226 clarity, if you wish; but 'as' neither requires this nor uses 11227 it--the data size required is taken from context. 11228 11229'@@AA' 11230'@@AA:8' 11231 Memory indirect. You may specify the ':8' for clarity, if you 11232 wish; but 'as' neither requires this nor uses it. 11233 11234 11235File: as.info, Node: H8/300 Floating Point, Next: H8/300 Directives, Prev: H8/300 Syntax, Up: H8/300-Dependent 11236 112379.14.3 Floating Point 11238--------------------- 11239 11240The H8/300 family has no hardware floating point, but the '.float' 11241directive generates IEEE floating-point numbers for compatibility with 11242other development tools. 11243 11244 11245File: as.info, Node: H8/300 Directives, Next: H8/300 Opcodes, Prev: H8/300 Floating Point, Up: H8/300-Dependent 11246 112479.14.4 H8/300 Machine Directives 11248-------------------------------- 11249 11250'as' has the following machine-dependent directives for the H8/300: 11251 11252'.h8300h' 11253 Recognize and emit additional instructions for the H8/300H variant, 11254 and also make '.int' emit 32-bit numbers rather than the usual 11255 (16-bit) for the H8/300 family. 11256 11257'.h8300s' 11258 Recognize and emit additional instructions for the H8S variant, and 11259 also make '.int' emit 32-bit numbers rather than the usual (16-bit) 11260 for the H8/300 family. 11261 11262'.h8300hn' 11263 Recognize and emit additional instructions for the H8/300H variant 11264 in normal mode, and also make '.int' emit 32-bit numbers rather 11265 than the usual (16-bit) for the H8/300 family. 11266 11267'.h8300sn' 11268 Recognize and emit additional instructions for the H8S variant in 11269 normal mode, and also make '.int' emit 32-bit numbers rather than 11270 the usual (16-bit) for the H8/300 family. 11271 11272 On the H8/300 family (including the H8/300H) '.word' directives 11273generate 16-bit numbers. 11274 11275 11276File: as.info, Node: H8/300 Opcodes, Prev: H8/300 Directives, Up: H8/300-Dependent 11277 112789.14.5 Opcodes 11279-------------- 11280 11281For detailed information on the H8/300 machine instruction set, see 11282'H8/300 Series Programming Manual'. For information specific to the 11283H8/300H, see 'H8/300H Series Programming Manual' (Renesas). 11284 11285 'as' implements all the standard H8/300 opcodes. No additional 11286pseudo-instructions are needed on this family. 11287 11288 The following table summarizes the H8/300 opcodes, and their 11289arguments. Entries marked '*' are opcodes used only on the H8/300H. 11290 11291 Legend: 11292 Rs source register 11293 Rd destination register 11294 abs absolute address 11295 imm immediate data 11296 disp:N N-bit displacement from a register 11297 pcrel:N N-bit displacement relative to program counter 11298 11299 add.b #imm,rd * andc #imm,ccr 11300 add.b rs,rd band #imm,rd 11301 add.w rs,rd band #imm,@rd 11302 * add.w #imm,rd band #imm,@abs:8 11303 * add.l rs,rd bra pcrel:8 11304 * add.l #imm,rd * bra pcrel:16 11305 adds #imm,rd bt pcrel:8 11306 addx #imm,rd * bt pcrel:16 11307 addx rs,rd brn pcrel:8 11308 and.b #imm,rd * brn pcrel:16 11309 and.b rs,rd bf pcrel:8 11310 * and.w rs,rd * bf pcrel:16 11311 * and.w #imm,rd bhi pcrel:8 11312 * and.l #imm,rd * bhi pcrel:16 11313 * and.l rs,rd bls pcrel:8 11314 * bls pcrel:16 bld #imm,rd 11315 bcc pcrel:8 bld #imm,@rd 11316 * bcc pcrel:16 bld #imm,@abs:8 11317 bhs pcrel:8 bnot #imm,rd 11318 * bhs pcrel:16 bnot #imm,@rd 11319 bcs pcrel:8 bnot #imm,@abs:8 11320 * bcs pcrel:16 bnot rs,rd 11321 blo pcrel:8 bnot rs,@rd 11322 * blo pcrel:16 bnot rs,@abs:8 11323 bne pcrel:8 bor #imm,rd 11324 * bne pcrel:16 bor #imm,@rd 11325 beq pcrel:8 bor #imm,@abs:8 11326 * beq pcrel:16 bset #imm,rd 11327 bvc pcrel:8 bset #imm,@rd 11328 * bvc pcrel:16 bset #imm,@abs:8 11329 bvs pcrel:8 bset rs,rd 11330 * bvs pcrel:16 bset rs,@rd 11331 bpl pcrel:8 bset rs,@abs:8 11332 * bpl pcrel:16 bsr pcrel:8 11333 bmi pcrel:8 bsr pcrel:16 11334 * bmi pcrel:16 bst #imm,rd 11335 bge pcrel:8 bst #imm,@rd 11336 * bge pcrel:16 bst #imm,@abs:8 11337 blt pcrel:8 btst #imm,rd 11338 * blt pcrel:16 btst #imm,@rd 11339 bgt pcrel:8 btst #imm,@abs:8 11340 * bgt pcrel:16 btst rs,rd 11341 ble pcrel:8 btst rs,@rd 11342 * ble pcrel:16 btst rs,@abs:8 11343 bclr #imm,rd bxor #imm,rd 11344 bclr #imm,@rd bxor #imm,@rd 11345 bclr #imm,@abs:8 bxor #imm,@abs:8 11346 bclr rs,rd cmp.b #imm,rd 11347 bclr rs,@rd cmp.b rs,rd 11348 bclr rs,@abs:8 cmp.w rs,rd 11349 biand #imm,rd cmp.w rs,rd 11350 biand #imm,@rd * cmp.w #imm,rd 11351 biand #imm,@abs:8 * cmp.l #imm,rd 11352 bild #imm,rd * cmp.l rs,rd 11353 bild #imm,@rd daa rs 11354 bild #imm,@abs:8 das rs 11355 bior #imm,rd dec.b rs 11356 bior #imm,@rd * dec.w #imm,rd 11357 bior #imm,@abs:8 * dec.l #imm,rd 11358 bist #imm,rd divxu.b rs,rd 11359 bist #imm,@rd * divxu.w rs,rd 11360 bist #imm,@abs:8 * divxs.b rs,rd 11361 bixor #imm,rd * divxs.w rs,rd 11362 bixor #imm,@rd eepmov 11363 bixor #imm,@abs:8 * eepmovw 11364 * exts.w rd mov.w rs,@abs:16 11365 * exts.l rd * mov.l #imm,rd 11366 * extu.w rd * mov.l rs,rd 11367 * extu.l rd * mov.l @rs,rd 11368 inc rs * mov.l @(disp:16,rs),rd 11369 * inc.w #imm,rd * mov.l @(disp:24,rs),rd 11370 * inc.l #imm,rd * mov.l @rs+,rd 11371 jmp @rs * mov.l @abs:16,rd 11372 jmp abs * mov.l @abs:24,rd 11373 jmp @@abs:8 * mov.l rs,@rd 11374 jsr @rs * mov.l rs,@(disp:16,rd) 11375 jsr abs * mov.l rs,@(disp:24,rd) 11376 jsr @@abs:8 * mov.l rs,@-rd 11377 ldc #imm,ccr * mov.l rs,@abs:16 11378 ldc rs,ccr * mov.l rs,@abs:24 11379 * ldc @abs:16,ccr movfpe @abs:16,rd 11380 * ldc @abs:24,ccr movtpe rs,@abs:16 11381 * ldc @(disp:16,rs),ccr mulxu.b rs,rd 11382 * ldc @(disp:24,rs),ccr * mulxu.w rs,rd 11383 * ldc @rs+,ccr * mulxs.b rs,rd 11384 * ldc @rs,ccr * mulxs.w rs,rd 11385 * mov.b @(disp:24,rs),rd neg.b rs 11386 * mov.b rs,@(disp:24,rd) * neg.w rs 11387 mov.b @abs:16,rd * neg.l rs 11388 mov.b rs,rd nop 11389 mov.b @abs:8,rd not.b rs 11390 mov.b rs,@abs:8 * not.w rs 11391 mov.b rs,rd * not.l rs 11392 mov.b #imm,rd or.b #imm,rd 11393 mov.b @rs,rd or.b rs,rd 11394 mov.b @(disp:16,rs),rd * or.w #imm,rd 11395 mov.b @rs+,rd * or.w rs,rd 11396 mov.b @abs:8,rd * or.l #imm,rd 11397 mov.b rs,@rd * or.l rs,rd 11398 mov.b rs,@(disp:16,rd) orc #imm,ccr 11399 mov.b rs,@-rd pop.w rs 11400 mov.b rs,@abs:8 * pop.l rs 11401 mov.w rs,@rd push.w rs 11402 * mov.w @(disp:24,rs),rd * push.l rs 11403 * mov.w rs,@(disp:24,rd) rotl.b rs 11404 * mov.w @abs:24,rd * rotl.w rs 11405 * mov.w rs,@abs:24 * rotl.l rs 11406 mov.w rs,rd rotr.b rs 11407 mov.w #imm,rd * rotr.w rs 11408 mov.w @rs,rd * rotr.l rs 11409 mov.w @(disp:16,rs),rd rotxl.b rs 11410 mov.w @rs+,rd * rotxl.w rs 11411 mov.w @abs:16,rd * rotxl.l rs 11412 mov.w rs,@(disp:16,rd) rotxr.b rs 11413 mov.w rs,@-rd * rotxr.w rs 11414 * rotxr.l rs * stc ccr,@(disp:24,rd) 11415 bpt * stc ccr,@-rd 11416 rte * stc ccr,@abs:16 11417 rts * stc ccr,@abs:24 11418 shal.b rs sub.b rs,rd 11419 * shal.w rs sub.w rs,rd 11420 * shal.l rs * sub.w #imm,rd 11421 shar.b rs * sub.l rs,rd 11422 * shar.w rs * sub.l #imm,rd 11423 * shar.l rs subs #imm,rd 11424 shll.b rs subx #imm,rd 11425 * shll.w rs subx rs,rd 11426 * shll.l rs * trapa #imm 11427 shlr.b rs xor #imm,rd 11428 * shlr.w rs xor rs,rd 11429 * shlr.l rs * xor.w #imm,rd 11430 sleep * xor.w rs,rd 11431 stc ccr,rd * xor.l #imm,rd 11432 * stc ccr,@rs * xor.l rs,rd 11433 * stc ccr,@(disp:16,rd) xorc #imm,ccr 11434 11435 Four H8/300 instructions ('add', 'cmp', 'mov', 'sub') are defined 11436with variants using the suffixes '.b', '.w', and '.l' to specify the 11437size of a memory operand. 'as' supports these suffixes, but does not 11438require them; since one of the operands is always a register, 'as' can 11439deduce the correct size. 11440 11441 For example, since 'r0' refers to a 16-bit register, 11442 mov r0,@foo 11443is equivalent to 11444 mov.w r0,@foo 11445 11446 If you use the size suffixes, 'as' issues a warning when the suffix 11447and the register size do not match. 11448 11449 11450File: as.info, Node: HPPA-Dependent, Next: i386-Dependent, Prev: H8/300-Dependent, Up: Machine Dependencies 11451 114529.15 HPPA Dependent Features 11453============================ 11454 11455* Menu: 11456 11457* HPPA Notes:: Notes 11458* HPPA Options:: Options 11459* HPPA Syntax:: Syntax 11460* HPPA Floating Point:: Floating Point 11461* HPPA Directives:: HPPA Machine Directives 11462* HPPA Opcodes:: Opcodes 11463 11464 11465File: as.info, Node: HPPA Notes, Next: HPPA Options, Up: HPPA-Dependent 11466 114679.15.1 Notes 11468------------ 11469 11470As a back end for GNU CC 'as' has been thoroughly tested and should work 11471extremely well. We have tested it only minimally on hand written 11472assembly code and no one has tested it much on the assembly output from 11473the HP compilers. 11474 11475 The format of the debugging sections has changed since the original 11476'as' port (version 1.3X) was released; therefore, you must rebuild all 11477HPPA objects and libraries with the new assembler so that you can debug 11478the final executable. 11479 11480 The HPPA 'as' port generates a small subset of the relocations 11481available in the SOM and ELF object file formats. Additional relocation 11482support will be added as it becomes necessary. 11483 11484 11485File: as.info, Node: HPPA Options, Next: HPPA Syntax, Prev: HPPA Notes, Up: HPPA-Dependent 11486 114879.15.2 Options 11488-------------- 11489 11490'as' has no machine-dependent command-line options for the HPPA. 11491 11492 11493File: as.info, Node: HPPA Syntax, Next: HPPA Floating Point, Prev: HPPA Options, Up: HPPA-Dependent 11494 114959.15.3 Syntax 11496------------- 11497 11498The assembler syntax closely follows the HPPA instruction set reference 11499manual; assembler directives and general syntax closely follow the HPPA 11500assembly language reference manual, with a few noteworthy differences. 11501 11502 First, a colon may immediately follow a label definition. This is 11503simply for compatibility with how most assembly language programmers 11504write code. 11505 11506 Some obscure expression parsing problems may affect hand written code 11507which uses the 'spop' instructions, or code which makes significant use 11508of the '!' line separator. 11509 11510 'as' is much less forgiving about missing arguments and other similar 11511oversights than the HP assembler. 'as' notifies you of missing 11512arguments as syntax errors; this is regarded as a feature, not a bug. 11513 11514 Finally, 'as' allows you to use an external symbol without explicitly 11515importing the symbol. _Warning:_ in the future this will be an error 11516for HPPA targets. 11517 11518 Special characters for HPPA targets include: 11519 11520 ';' is the line comment character. 11521 11522 '!' can be used instead of a newline to separate statements. 11523 11524 Since '$' has no special meaning, you may use it in symbol names. 11525 11526 11527File: as.info, Node: HPPA Floating Point, Next: HPPA Directives, Prev: HPPA Syntax, Up: HPPA-Dependent 11528 115299.15.4 Floating Point 11530--------------------- 11531 11532The HPPA family uses IEEE floating-point numbers. 11533 11534 11535File: as.info, Node: HPPA Directives, Next: HPPA Opcodes, Prev: HPPA Floating Point, Up: HPPA-Dependent 11536 115379.15.5 HPPA Assembler Directives 11538-------------------------------- 11539 11540'as' for the HPPA supports many additional directives for compatibility 11541with the native assembler. This section describes them only briefly. 11542For detailed information on HPPA-specific assembler directives, see 11543'HP9000 Series 800 Assembly Language Reference Manual' (HP 92432-90001). 11544 11545 'as' does _not_ support the following assembler directives described 11546in the HP manual: 11547 11548 .endm .liston 11549 .enter .locct 11550 .leave .macro 11551 .listoff 11552 11553 Beyond those implemented for compatibility, 'as' supports one 11554additional assembler directive for the HPPA: '.param'. It conveys 11555register argument locations for static functions. Its syntax closely 11556follows the '.export' directive. 11557 11558 These are the additional directives in 'as' for the HPPA: 11559 11560'.block N' 11561'.blockz N' 11562 Reserve N bytes of storage, and initialize them to zero. 11563 11564'.call' 11565 Mark the beginning of a procedure call. Only the special case with 11566 _no arguments_ is allowed. 11567 11568'.callinfo [ PARAM=VALUE, ... ] [ FLAG, ... ]' 11569 Specify a number of parameters and flags that define the 11570 environment for a procedure. 11571 11572 PARAM may be any of 'frame' (frame size), 'entry_gr' (end of 11573 general register range), 'entry_fr' (end of float register range), 11574 'entry_sr' (end of space register range). 11575 11576 The values for FLAG are 'calls' or 'caller' (proc has subroutines), 11577 'no_calls' (proc does not call subroutines), 'save_rp' (preserve 11578 return pointer), 'save_sp' (proc preserves stack pointer), 11579 'no_unwind' (do not unwind this proc), 'hpux_int' (proc is 11580 interrupt routine). 11581 11582'.code' 11583 Assemble into the standard section called '$TEXT$', subsection 11584 '$CODE$'. 11585 11586'.copyright "STRING"' 11587 In the SOM object format, insert STRING into the object code, 11588 marked as a copyright string. 11589 11590'.copyright "STRING"' 11591 In the ELF object format, insert STRING into the object code, 11592 marked as a version string. 11593 11594'.enter' 11595 Not yet supported; the assembler rejects programs containing this 11596 directive. 11597 11598'.entry' 11599 Mark the beginning of a procedure. 11600 11601'.exit' 11602 Mark the end of a procedure. 11603 11604'.export NAME [ ,TYP ] [ ,PARAM=R ]' 11605 Make a procedure NAME available to callers. TYP, if present, must 11606 be one of 'absolute', 'code' (ELF only, not SOM), 'data', 'entry', 11607 'data', 'entry', 'millicode', 'plabel', 'pri_prog', or 'sec_prog'. 11608 11609 PARAM, if present, provides either relocation information for the 11610 procedure arguments and result, or a privilege level. PARAM may be 11611 'argwN' (where N ranges from '0' to '3', and indicates one of four 11612 one-word arguments); 'rtnval' (the procedure's result); or 11613 'priv_lev' (privilege level). For arguments or the result, R 11614 specifies how to relocate, and must be one of 'no' (not 11615 relocatable), 'gr' (argument is in general register), 'fr' (in 11616 floating point register), or 'fu' (upper half of float register). 11617 For 'priv_lev', R is an integer. 11618 11619'.half N' 11620 Define a two-byte integer constant N; synonym for the portable 'as' 11621 directive '.short'. 11622 11623'.import NAME [ ,TYP ]' 11624 Converse of '.export'; make a procedure available to call. The 11625 arguments use the same conventions as the first two arguments for 11626 '.export'. 11627 11628'.label NAME' 11629 Define NAME as a label for the current assembly location. 11630 11631'.leave' 11632 Not yet supported; the assembler rejects programs containing this 11633 directive. 11634 11635'.origin LC' 11636 Advance location counter to LC. Synonym for the 'as' portable 11637 directive '.org'. 11638 11639'.param NAME [ ,TYP ] [ ,PARAM=R ]' 11640 Similar to '.export', but used for static procedures. 11641 11642'.proc' 11643 Use preceding the first statement of a procedure. 11644 11645'.procend' 11646 Use following the last statement of a procedure. 11647 11648'LABEL .reg EXPR' 11649 Synonym for '.equ'; define LABEL with the absolute expression EXPR 11650 as its value. 11651 11652'.space SECNAME [ ,PARAMS ]' 11653 Switch to section SECNAME, creating a new section by that name if 11654 necessary. You may only use PARAMS when creating a new section, 11655 not when switching to an existing one. SECNAME may identify a 11656 section by number rather than by name. 11657 11658 If specified, the list PARAMS declares attributes of the section, 11659 identified by keywords. The keywords recognized are 'spnum=EXP' 11660 (identify this section by the number EXP, an absolute expression), 11661 'sort=EXP' (order sections according to this sort key when linking; 11662 EXP is an absolute expression), 'unloadable' (section contains no 11663 loadable data), 'notdefined' (this section defined elsewhere), and 11664 'private' (data in this section not available to other programs). 11665 11666'.spnum SECNAM' 11667 Allocate four bytes of storage, and initialize them with the 11668 section number of the section named SECNAM. (You can define the 11669 section number with the HPPA '.space' directive.) 11670 11671'.string "STR"' 11672 Copy the characters in the string STR to the object file. *Note 11673 Strings: Strings, for information on escape sequences you can use 11674 in 'as' strings. 11675 11676 _Warning!_ The HPPA version of '.string' differs from the usual 11677 'as' definition: it does _not_ write a zero byte after copying STR. 11678 11679'.stringz "STR"' 11680 Like '.string', but appends a zero byte after copying STR to object 11681 file. 11682 11683'.subspa NAME [ ,PARAMS ]' 11684'.nsubspa NAME [ ,PARAMS ]' 11685 Similar to '.space', but selects a subsection NAME within the 11686 current section. You may only specify PARAMS when you create a 11687 subsection (in the first instance of '.subspa' for this NAME). 11688 11689 If specified, the list PARAMS declares attributes of the 11690 subsection, identified by keywords. The keywords recognized are 11691 'quad=EXPR' ("quadrant" for this subsection), 'align=EXPR' 11692 (alignment for beginning of this subsection; a power of two), 11693 'access=EXPR' (value for "access rights" field), 'sort=EXPR' 11694 (sorting order for this subspace in link), 'code_only' (subsection 11695 contains only code), 'unloadable' (subsection cannot be loaded into 11696 memory), 'comdat' (subsection is comdat), 'common' (subsection is 11697 common block), 'dup_comm' (subsection may have duplicate names), or 11698 'zero' (subsection is all zeros, do not write in object file). 11699 11700 '.nsubspa' always creates a new subspace with the given name, even 11701 if one with the same name already exists. 11702 11703 'comdat', 'common' and 'dup_comm' can be used to implement various 11704 flavors of one-only support when using the SOM linker. The SOM 11705 linker only supports specific combinations of these flags. The 11706 details are not documented. A brief description is provided here. 11707 11708 'comdat' provides a form of linkonce support. It is useful for 11709 both code and data subspaces. A 'comdat' subspace has a key symbol 11710 marked by the 'is_comdat' flag or 'ST_COMDAT'. Only the first 11711 subspace for any given key is selected. The key symbol becomes 11712 universal in shared links. This is similar to the behavior of 11713 'secondary_def' symbols. 11714 11715 'common' provides Fortran named common support. It is only useful 11716 for data subspaces. Symbols with the flag 'is_common' retain this 11717 flag in shared links. Referencing a 'is_common' symbol in a shared 11718 library from outside the library doesn't work. Thus, 'is_common' 11719 symbols must be output whenever they are needed. 11720 11721 'common' and 'dup_comm' together provide Cobol common support. The 11722 subspaces in this case must all be the same length. Otherwise, 11723 this support is similar to the Fortran common support. 11724 11725 'dup_comm' by itself provides a type of one-only support for code. 11726 Only the first 'dup_comm' subspace is selected. There is a rather 11727 complex algorithm to compare subspaces. Code symbols marked with 11728 the 'dup_common' flag are hidden. This support was intended for 11729 "C++ duplicate inlines". 11730 11731 A simplified technique is used to mark the flags of symbols based 11732 on the flags of their subspace. A symbol with the scope 11733 SS_UNIVERSAL and type ST_ENTRY, ST_CODE or ST_DATA is marked with 11734 the corresponding settings of 'comdat', 'common' and 'dup_comm' 11735 from the subspace, respectively. This avoids having to introduce 11736 additional directives to mark these symbols. The HP assembler sets 11737 'is_common' from 'common'. However, it doesn't set the 11738 'dup_common' from 'dup_comm'. It doesn't have 'comdat' support. 11739 11740'.version "STR"' 11741 Write STR as version identifier in object code. 11742 11743 11744File: as.info, Node: HPPA Opcodes, Prev: HPPA Directives, Up: HPPA-Dependent 11745 117469.15.6 Opcodes 11747-------------- 11748 11749For detailed information on the HPPA machine instruction set, see 11750'PA-RISC Architecture and Instruction Set Reference Manual' (HP 1175109740-90039). 11752 11753 11754File: as.info, Node: i386-Dependent, Next: IA-64-Dependent, Prev: HPPA-Dependent, Up: Machine Dependencies 11755 117569.16 80386 Dependent Features 11757============================= 11758 11759The i386 version 'as' supports both the original Intel 386 architecture 11760in both 16 and 32-bit mode as well as AMD x86-64 architecture extending 11761the Intel architecture to 64-bits. 11762 11763* Menu: 11764 11765* i386-Options:: Options 11766* i386-Directives:: X86 specific directives 11767* i386-Syntax:: Syntactical considerations 11768* i386-Mnemonics:: Instruction Naming 11769* i386-Regs:: Register Naming 11770* i386-Prefixes:: Instruction Prefixes 11771* i386-Memory:: Memory References 11772* i386-Jumps:: Handling of Jump Instructions 11773* i386-Float:: Floating Point 11774* i386-SIMD:: Intel's MMX and AMD's 3DNow! SIMD Operations 11775* i386-LWP:: AMD's Lightweight Profiling Instructions 11776* i386-BMI:: Bit Manipulation Instruction 11777* i386-TBM:: AMD's Trailing Bit Manipulation Instructions 11778* i386-16bit:: Writing 16-bit Code 11779* i386-Arch:: Specifying an x86 CPU architecture 11780* i386-ISA:: AMD64 ISA vs. Intel64 ISA 11781* i386-Bugs:: AT&T Syntax bugs 11782* i386-Notes:: Notes 11783 11784 11785File: as.info, Node: i386-Options, Next: i386-Directives, Up: i386-Dependent 11786 117879.16.1 Options 11788-------------- 11789 11790The i386 version of 'as' has a few machine dependent options: 11791 11792'--32 | --x32 | --64' 11793 Select the word size, either 32 bits or 64 bits. '--32' implies 11794 Intel i386 architecture, while '--x32' and '--64' imply AMD x86-64 11795 architecture with 32-bit or 64-bit word-size respectively. 11796 11797 These options are only available with the ELF object file format, 11798 and require that the necessary BFD support has been included (on a 11799 32-bit platform you have to add -enable-64-bit-bfd to configure 11800 enable 64-bit usage and use x86-64 as target platform). 11801 11802'-n' 11803 By default, x86 GAS replaces multiple nop instructions used for 11804 alignment within code sections with multi-byte nop instructions 11805 such as leal 0(%esi,1),%esi. This switch disables the optimization 11806 if a single byte nop (0x90) is explicitly specified as the fill 11807 byte for alignment. 11808 11809'--divide' 11810 On SVR4-derived platforms, the character '/' is treated as a 11811 comment character, which means that it cannot be used in 11812 expressions. The '--divide' option turns '/' into a normal 11813 character. This does not disable '/' at the beginning of a line 11814 starting a comment, or affect using '#' for starting a comment. 11815 11816'-march=CPU[+EXTENSION...]' 11817 This option specifies the target processor. The assembler will 11818 issue an error message if an attempt is made to assemble an 11819 instruction which will not execute on the target processor. The 11820 following processor names are recognized: 'i8086', 'i186', 'i286', 11821 'i386', 'i486', 'i586', 'i686', 'pentium', 'pentiumpro', 11822 'pentiumii', 'pentiumiii', 'pentium4', 'prescott', 'nocona', 11823 'core', 'core2', 'corei7', 'l1om', 'k1om', 'iamcu', 'k6', 'k6_2', 11824 'athlon', 'opteron', 'k8', 'amdfam10', 'bdver1', 'bdver2', 11825 'bdver3', 'bdver4', 'znver1', 'znver2', 'znver3', 'btver1', 11826 'btver2', 'generic32' and 'generic64'. 11827 11828 In addition to the basic instruction set, the assembler can be told 11829 to accept various extension mnemonics. For example, 11830 '-march=i686+sse4+vmx' extends I686 with SSE4 and VMX. The 11831 following extensions are currently supported: '8087', '287', '387', 11832 '687', 'no87', 'no287', 'no387', 'no687', 'cmov', 'nocmov', 'fxsr', 11833 'nofxsr', 'mmx', 'nommx', 'sse', 'sse2', 'sse3', 'sse4a', 'ssse3', 11834 'sse4.1', 'sse4.2', 'sse4', 'nosse', 'nosse2', 'nosse3', 'nosse4a', 11835 'nossse3', 'nosse4.1', 'nosse4.2', 'nosse4', 'avx', 'avx2', 11836 'noavx', 'noavx2', 'adx', 'rdseed', 'prfchw', 'smap', 'mpx', 'sha', 11837 'rdpid', 'ptwrite', 'cet', 'gfni', 'vaes', 'vpclmulqdq', 11838 'prefetchwt1', 'clflushopt', 'se1', 'clwb', 'movdiri', 'movdir64b', 11839 'enqcmd', 'serialize', 'tsxldtrk', 'kl', 'nokl', 'widekl', 11840 'nowidekl', 'hreset', 'avx512f', 'avx512cd', 'avx512er', 11841 'avx512pf', 'avx512vl', 'avx512bw', 'avx512dq', 'avx512ifma', 11842 'avx512vbmi', 'avx512_4fmaps', 'avx512_4vnniw', 'avx512_vpopcntdq', 11843 'avx512_vbmi2', 'avx512_vnni', 'avx512_bitalg', 11844 'avx512_vp2intersect', 'tdx', 'avx512_bf16', 'avx_vnni', 11845 'noavx512f', 'noavx512cd', 'noavx512er', 'noavx512pf', 11846 'noavx512vl', 'noavx512bw', 'noavx512dq', 'noavx512ifma', 11847 'noavx512vbmi', 'noavx512_4fmaps', 'noavx512_4vnniw', 11848 'noavx512_vpopcntdq', 'noavx512_vbmi2', 'noavx512_vnni', 11849 'noavx512_bitalg', 'noavx512_vp2intersect', 'notdx', 11850 'noavx512_bf16', 'noavx_vnni', 'noenqcmd', 'noserialize', 11851 'notsxldtrk', 'amx_int8', 'noamx_int8', 'amx_bf16', 'noamx_bf16', 11852 'amx_tile', 'noamx_tile', 'nouintr', 'nohreset', 'vmx', 'vmfunc', 11853 'smx', 'xsave', 'xsaveopt', 'xsavec', 'xsaves', 'aes', 'pclmul', 11854 'fsgsbase', 'rdrnd', 'f16c', 'bmi2', 'fma', 'movbe', 'ept', 11855 'lzcnt', 'popcnt', 'hle', 'rtm', 'invpcid', 'clflush', 'mwaitx', 11856 'clzero', 'wbnoinvd', 'pconfig', 'waitpkg', 'uintr', 'cldemote', 11857 'rdpru', 'mcommit', 'sev_es', 'lwp', 'fma4', 'xop', 'cx16', 11858 'syscall', 'rdtscp', '3dnow', '3dnowa', 'sse4a', 'sse5', 'snp', 11859 'invlpgb', 'tlbsync', 'svme' and 'padlock'. Note that rather than 11860 extending a basic instruction set, the extension mnemonics starting 11861 with 'no' revoke the respective functionality. 11862 11863 When the '.arch' directive is used with '-march', the '.arch' 11864 directive will take precedent. 11865 11866'-mtune=CPU' 11867 This option specifies a processor to optimize for. When used in 11868 conjunction with the '-march' option, only instructions of the 11869 processor specified by the '-march' option will be generated. 11870 11871 Valid CPU values are identical to the processor list of 11872 '-march=CPU'. 11873 11874'-msse2avx' 11875 This option specifies that the assembler should encode SSE 11876 instructions with VEX prefix. 11877 11878'-msse-check=NONE' 11879'-msse-check=WARNING' 11880'-msse-check=ERROR' 11881 These options control if the assembler should check SSE 11882 instructions. '-msse-check=NONE' will make the assembler not to 11883 check SSE instructions, which is the default. 11884 '-msse-check=WARNING' will make the assembler issue a warning for 11885 any SSE instruction. '-msse-check=ERROR' will make the assembler 11886 issue an error for any SSE instruction. 11887 11888'-mavxscalar=128' 11889'-mavxscalar=256' 11890 These options control how the assembler should encode scalar AVX 11891 instructions. '-mavxscalar=128' will encode scalar AVX 11892 instructions with 128bit vector length, which is the default. 11893 '-mavxscalar=256' will encode scalar AVX instructions with 256bit 11894 vector length. 11895 11896 WARNING: Don't use this for production code - due to CPU errata the 11897 resulting code may not work on certain models. 11898 11899'-mvexwig=0' 11900'-mvexwig=1' 11901 These options control how the assembler should encode VEX.W-ignored 11902 (WIG) VEX instructions. '-mvexwig=0' will encode WIG VEX 11903 instructions with vex.w = 0, which is the default. '-mvexwig=1' 11904 will encode WIG EVEX instructions with vex.w = 1. 11905 11906 WARNING: Don't use this for production code - due to CPU errata the 11907 resulting code may not work on certain models. 11908 11909'-mevexlig=128' 11910'-mevexlig=256' 11911'-mevexlig=512' 11912 These options control how the assembler should encode 11913 length-ignored (LIG) EVEX instructions. '-mevexlig=128' will 11914 encode LIG EVEX instructions with 128bit vector length, which is 11915 the default. '-mevexlig=256' and '-mevexlig=512' will encode LIG 11916 EVEX instructions with 256bit and 512bit vector length, 11917 respectively. 11918 11919'-mevexwig=0' 11920'-mevexwig=1' 11921 These options control how the assembler should encode w-ignored 11922 (WIG) EVEX instructions. '-mevexwig=0' will encode WIG EVEX 11923 instructions with evex.w = 0, which is the default. '-mevexwig=1' 11924 will encode WIG EVEX instructions with evex.w = 1. 11925 11926'-mmnemonic=ATT' 11927'-mmnemonic=INTEL' 11928 This option specifies instruction mnemonic for matching 11929 instructions. The '.att_mnemonic' and '.intel_mnemonic' directives 11930 will take precedent. 11931 11932'-msyntax=ATT' 11933'-msyntax=INTEL' 11934 This option specifies instruction syntax when processing 11935 instructions. The '.att_syntax' and '.intel_syntax' directives 11936 will take precedent. 11937 11938'-mnaked-reg' 11939 This option specifies that registers don't require a '%' prefix. 11940 The '.att_syntax' and '.intel_syntax' directives will take 11941 precedent. 11942 11943'-madd-bnd-prefix' 11944 This option forces the assembler to add BND prefix to all branches, 11945 even if such prefix was not explicitly specified in the source 11946 code. 11947 11948'-mno-shared' 11949 On ELF target, the assembler normally optimizes out non-PLT 11950 relocations against defined non-weak global branch targets with 11951 default visibility. The '-mshared' option tells the assembler to 11952 generate code which may go into a shared library where all non-weak 11953 global branch targets with default visibility can be preempted. 11954 The resulting code is slightly bigger. This option only affects 11955 the handling of branch instructions. 11956 11957'-mbig-obj' 11958 On PE/COFF target this option forces the use of big object file 11959 format, which allows more than 32768 sections. 11960 11961'-momit-lock-prefix=NO' 11962'-momit-lock-prefix=YES' 11963 These options control how the assembler should encode lock prefix. 11964 This option is intended as a workaround for processors, that fail 11965 on lock prefix. This option can only be safely used with 11966 single-core, single-thread computers '-momit-lock-prefix=YES' will 11967 omit all lock prefixes. '-momit-lock-prefix=NO' will encode lock 11968 prefix as usual, which is the default. 11969 11970'-mfence-as-lock-add=NO' 11971'-mfence-as-lock-add=YES' 11972 These options control how the assembler should encode lfence, 11973 mfence and sfence. '-mfence-as-lock-add=YES' will encode lfence, 11974 mfence and sfence as 'lock addl $0x0, (%rsp)' in 64-bit mode and 11975 'lock addl $0x0, (%esp)' in 32-bit mode. '-mfence-as-lock-add=NO' 11976 will encode lfence, mfence and sfence as usual, which is the 11977 default. 11978 11979'-mrelax-relocations=NO' 11980'-mrelax-relocations=YES' 11981 These options control whether the assembler should generate relax 11982 relocations, R_386_GOT32X, in 32-bit mode, or R_X86_64_GOTPCRELX 11983 and R_X86_64_REX_GOTPCRELX, in 64-bit mode. 11984 '-mrelax-relocations=YES' will generate relax relocations. 11985 '-mrelax-relocations=NO' will not generate relax relocations. The 11986 default can be controlled by a configure option 11987 '--enable-x86-relax-relocations'. 11988 11989'-malign-branch-boundary=NUM' 11990 This option controls how the assembler should align branches with 11991 segment prefixes or NOP. NUM must be a power of 2. It should be 0 11992 or no less than 16. Branches will be aligned within NUM byte 11993 boundary. '-malign-branch-boundary=0', which is the default, 11994 doesn't align branches. 11995 11996'-malign-branch=TYPE[+TYPE...]' 11997 This option specifies types of branches to align. TYPE is 11998 combination of 'jcc', which aligns conditional jumps, 'fused', 11999 which aligns fused conditional jumps, 'jmp', which aligns 12000 unconditional jumps, 'call' which aligns calls, 'ret', which aligns 12001 rets, 'indirect', which aligns indirect jumps and calls. The 12002 default is '-malign-branch=jcc+fused+jmp'. 12003 12004'-malign-branch-prefix-size=NUM' 12005 This option specifies the maximum number of prefixes on an 12006 instruction to align branches. NUM should be between 0 and 5. The 12007 default NUM is 5. 12008 12009'-mbranches-within-32B-boundaries' 12010 This option aligns conditional jumps, fused conditional jumps and 12011 unconditional jumps within 32 byte boundary with up to 5 segment 12012 prefixes on an instruction. It is equivalent to 12013 '-malign-branch-boundary=32' '-malign-branch=jcc+fused+jmp' 12014 '-malign-branch-prefix-size=5'. The default doesn't align 12015 branches. 12016 12017'-mlfence-after-load=NO' 12018'-mlfence-after-load=YES' 12019 These options control whether the assembler should generate lfence 12020 after load instructions. '-mlfence-after-load=YES' will generate 12021 lfence. '-mlfence-after-load=NO' will not generate lfence, which 12022 is the default. 12023 12024'-mlfence-before-indirect-branch=NONE' 12025'-mlfence-before-indirect-branch=ALL' 12026'-mlfence-before-indirect-branch=REGISTER' 12027'-mlfence-before-indirect-branch=MEMORY' 12028 These options control whether the assembler should generate lfence 12029 before indirect near branch instructions. 12030 '-mlfence-before-indirect-branch=ALL' will generate lfence before 12031 indirect near branch via register and issue a warning before 12032 indirect near branch via memory. It also implicitly sets 12033 '-mlfence-before-ret=SHL' when there's no explicit 12034 '-mlfence-before-ret='. '-mlfence-before-indirect-branch=REGISTER' 12035 will generate lfence before indirect near branch via register. 12036 '-mlfence-before-indirect-branch=MEMORY' will issue a warning 12037 before indirect near branch via memory. 12038 '-mlfence-before-indirect-branch=NONE' will not generate lfence nor 12039 issue warning, which is the default. Note that lfence won't be 12040 generated before indirect near branch via register with 12041 '-mlfence-after-load=YES' since lfence will be generated after 12042 loading branch target register. 12043 12044'-mlfence-before-ret=NONE' 12045'-mlfence-before-ret=SHL' 12046'-mlfence-before-ret=OR' 12047'-mlfence-before-ret=YES' 12048'-mlfence-before-ret=NOT' 12049 These options control whether the assembler should generate lfence 12050 before ret. '-mlfence-before-ret=OR' will generate generate or 12051 instruction with lfence. '-mlfence-before-ret=SHL/YES' will 12052 generate shl instruction with lfence. '-mlfence-before-ret=NOT' 12053 will generate not instruction with lfence. 12054 '-mlfence-before-ret=NONE' will not generate lfence, which is the 12055 default. 12056 12057'-mx86-used-note=NO' 12058'-mx86-used-note=YES' 12059 These options control whether the assembler should generate 12060 GNU_PROPERTY_X86_ISA_1_USED and GNU_PROPERTY_X86_FEATURE_2_USED GNU 12061 property notes. The default can be controlled by the 12062 '--enable-x86-used-note' configure option. 12063 12064'-mevexrcig=RNE' 12065'-mevexrcig=RD' 12066'-mevexrcig=RU' 12067'-mevexrcig=RZ' 12068 These options control how the assembler should encode SAE-only EVEX 12069 instructions. '-mevexrcig=RNE' will encode RC bits of EVEX 12070 instruction with 00, which is the default. '-mevexrcig=RD', 12071 '-mevexrcig=RU' and '-mevexrcig=RZ' will encode SAE-only EVEX 12072 instructions with 01, 10 and 11 RC bits, respectively. 12073 12074'-mamd64' 12075'-mintel64' 12076 This option specifies that the assembler should accept only AMD64 12077 or Intel64 ISA in 64-bit mode. The default is to accept common, 12078 Intel64 only and AMD64 ISAs. 12079 12080'-O0 | -O | -O1 | -O2 | -Os' 12081 Optimize instruction encoding with smaller instruction size. '-O' 12082 and '-O1' encode 64-bit register load instructions with 64-bit 12083 immediate as 32-bit register load instructions with 31-bit or 12084 32-bits immediates, encode 64-bit register clearing instructions 12085 with 32-bit register clearing instructions, encode 256-bit/512-bit 12086 VEX/EVEX vector register clearing instructions with 128-bit VEX 12087 vector register clearing instructions, encode 128-bit/256-bit EVEX 12088 vector register load/store instructions with VEX vector register 12089 load/store instructions, and encode 128-bit/256-bit EVEX packed 12090 integer logical instructions with 128-bit/256-bit VEX packed 12091 integer logical. 12092 12093 '-O2' includes '-O1' optimization plus encodes 256-bit/512-bit EVEX 12094 vector register clearing instructions with 128-bit EVEX vector 12095 register clearing instructions. In 64-bit mode VEX encoded 12096 instructions with commutative source operands will also have their 12097 source operands swapped if this allows using the 2-byte VEX prefix 12098 form instead of the 3-byte one. Certain forms of AND as well as OR 12099 with the same (register) operand specified twice will also be 12100 changed to TEST. 12101 12102 '-Os' includes '-O2' optimization plus encodes 16-bit, 32-bit and 12103 64-bit register tests with immediate as 8-bit register test with 12104 immediate. '-O0' turns off this optimization. 12105 12106 12107File: as.info, Node: i386-Directives, Next: i386-Syntax, Prev: i386-Options, Up: i386-Dependent 12108 121099.16.2 x86 specific Directives 12110------------------------------ 12111 12112'.lcomm SYMBOL , LENGTH[, ALIGNMENT]' 12113 Reserve LENGTH (an absolute expression) bytes for a local common 12114 denoted by SYMBOL. The section and value of SYMBOL are those of 12115 the new local common. The addresses are allocated in the bss 12116 section, so that at run-time the bytes start off zeroed. Since 12117 SYMBOL is not declared global, it is normally not visible to 'ld'. 12118 The optional third parameter, ALIGNMENT, specifies the desired 12119 alignment of the symbol in the bss section. 12120 12121 This directive is only available for COFF based x86 targets. 12122 12123'.largecomm SYMBOL , LENGTH[, ALIGNMENT]' 12124 This directive behaves in the same way as the 'comm' directive 12125 except that the data is placed into the .LBSS section instead of 12126 the .BSS section *note Comm::. 12127 12128 The directive is intended to be used for data which requires a 12129 large amount of space, and it is only available for ELF based 12130 x86_64 targets. 12131 12132'.value EXPRESSION [, EXPRESSION]' 12133 This directive behaves in the same way as the '.short' directive, 12134 taking a series of comma separated expressions and storing them as 12135 two-byte wide values into the current section. 12136 12137 12138File: as.info, Node: i386-Syntax, Next: i386-Mnemonics, Prev: i386-Directives, Up: i386-Dependent 12139 121409.16.3 i386 Syntactical Considerations 12141-------------------------------------- 12142 12143* Menu: 12144 12145* i386-Variations:: AT&T Syntax versus Intel Syntax 12146* i386-Chars:: Special Characters 12147 12148 12149File: as.info, Node: i386-Variations, Next: i386-Chars, Up: i386-Syntax 12150 121519.16.3.1 AT&T Syntax versus Intel Syntax 12152........................................ 12153 12154'as' now supports assembly using Intel assembler syntax. 12155'.intel_syntax' selects Intel mode, and '.att_syntax' switches back to 12156the usual AT&T mode for compatibility with the output of 'gcc'. Either 12157of these directives may have an optional argument, 'prefix', or 12158'noprefix' specifying whether registers require a '%' prefix. AT&T 12159System V/386 assembler syntax is quite different from Intel syntax. We 12160mention these differences because almost all 80386 documents use Intel 12161syntax. Notable differences between the two syntaxes are: 12162 12163 * AT&T immediate operands are preceded by '$'; Intel immediate 12164 operands are undelimited (Intel 'push 4' is AT&T 'pushl $4'). AT&T 12165 register operands are preceded by '%'; Intel register operands are 12166 undelimited. AT&T absolute (as opposed to PC relative) jump/call 12167 operands are prefixed by '*'; they are undelimited in Intel syntax. 12168 12169 * AT&T and Intel syntax use the opposite order for source and 12170 destination operands. Intel 'add eax, 4' is 'addl $4, %eax'. The 12171 'source, dest' convention is maintained for compatibility with 12172 previous Unix assemblers. Note that 'bound', 'invlpga', and 12173 instructions with 2 immediate operands, such as the 'enter' 12174 instruction, do _not_ have reversed order. *note i386-Bugs::. 12175 12176 * In AT&T syntax the size of memory operands is determined from the 12177 last character of the instruction mnemonic. Mnemonic suffixes of 12178 'b', 'w', 'l' and 'q' specify byte (8-bit), word (16-bit), long 12179 (32-bit) and quadruple word (64-bit) memory references. Mnemonic 12180 suffixes of 'x', 'y' and 'z' specify xmm (128-bit vector), ymm 12181 (256-bit vector) and zmm (512-bit vector) memory references, only 12182 when there's no other way to disambiguate an instruction. Intel 12183 syntax accomplishes this by prefixing memory operands (_not_ the 12184 instruction mnemonics) with 'byte ptr', 'word ptr', 'dword ptr', 12185 'qword ptr', 'xmmword ptr', 'ymmword ptr' and 'zmmword ptr'. Thus, 12186 Intel syntax 'mov al, byte ptr FOO' is 'movb FOO, %al' in AT&T 12187 syntax. In Intel syntax, 'fword ptr', 'tbyte ptr' and 'oword ptr' 12188 specify 48-bit, 80-bit and 128-bit memory references. 12189 12190 In 64-bit code, 'movabs' can be used to encode the 'mov' 12191 instruction with the 64-bit displacement or immediate operand. 12192 12193 * Immediate form long jumps and calls are 'lcall/ljmp $SECTION, 12194 $OFFSET' in AT&T syntax; the Intel syntax is 'call/jmp far 12195 SECTION:OFFSET'. Also, the far return instruction is 'lret 12196 $STACK-ADJUST' in AT&T syntax; Intel syntax is 'ret far 12197 STACK-ADJUST'. 12198 12199 * The AT&T assembler does not provide support for multiple section 12200 programs. Unix style systems expect all programs to be single 12201 sections. 12202 12203 12204File: as.info, Node: i386-Chars, Prev: i386-Variations, Up: i386-Syntax 12205 122069.16.3.2 Special Characters 12207........................... 12208 12209The presence of a '#' appearing anywhere on a line indicates the start 12210of a comment that extends to the end of that line. 12211 12212 If a '#' appears as the first character of a line then the whole line 12213is treated as a comment, but in this case the line can also be a logical 12214line number directive (*note Comments::) or a preprocessor control 12215command (*note Preprocessing::). 12216 12217 If the '--divide' command-line option has not been specified then the 12218'/' character appearing anywhere on a line also introduces a line 12219comment. 12220 12221 The ';' character can be used to separate statements on the same 12222line. 12223 12224 12225File: as.info, Node: i386-Mnemonics, Next: i386-Regs, Prev: i386-Syntax, Up: i386-Dependent 12226 122279.16.4 i386-Mnemonics 12228--------------------- 12229 122309.16.4.1 Instruction Naming 12231........................... 12232 12233Instruction mnemonics are suffixed with one character modifiers which 12234specify the size of operands. The letters 'b', 'w', 'l' and 'q' specify 12235byte, word, long and quadruple word operands. If no suffix is specified 12236by an instruction then 'as' tries to fill in the missing suffix based on 12237the destination register operand (the last one by convention). Thus, 12238'mov %ax, %bx' is equivalent to 'movw %ax, %bx'; also, 'mov $1, %bx' is 12239equivalent to 'movw $1, bx'. Note that this is incompatible with the 12240AT&T Unix assembler which assumes that a missing mnemonic suffix implies 12241long operand size. (This incompatibility does not affect compiler 12242output since compilers always explicitly specify the mnemonic suffix.) 12243 12244 When there is no sizing suffix and no (suitable) register operands to 12245deduce the size of memory operands, with a few exceptions and where long 12246operand size is possible in the first place, operand size will default 12247to long in 32- and 64-bit modes. Similarly it will default to short in 1224816-bit mode. Noteworthy exceptions are 12249 12250 * Instructions with an implicit on-stack operand as well as branches, 12251 which default to quad in 64-bit mode. 12252 12253 * Sign- and zero-extending moves, which default to byte size source 12254 operands. 12255 12256 * Floating point insns with integer operands, which default to short 12257 (for perhaps historical reasons). 12258 12259 * CRC32 with a 64-bit destination, which defaults to a quad source 12260 operand. 12261 12262 Different encoding options can be specified via pseudo prefixes: 12263 12264 * '{disp8}' - prefer 8-bit displacement. 12265 12266 * '{disp32}' - prefer 32-bit displacement. 12267 12268 * '{disp16}' - prefer 16-bit displacement. 12269 12270 * '{load}' - prefer load-form instruction. 12271 12272 * '{store}' - prefer store-form instruction. 12273 12274 * '{vex}' - encode with VEX prefix. 12275 12276 * '{vex3}' - encode with 3-byte VEX prefix. 12277 12278 * '{evex}' - encode with EVEX prefix. 12279 12280 * '{rex}' - prefer REX prefix for integer and legacy vector 12281 instructions (x86-64 only). Note that this differs from the 'rex' 12282 prefix which generates REX prefix unconditionally. 12283 12284 * '{nooptimize}' - disable instruction size optimization. 12285 12286 Mnemonics of Intel VNNI instructions are encoded with the EVEX prefix 12287by default. The pseudo '{vex}' prefix can be used to encode mnemonics 12288of Intel VNNI instructions with the VEX prefix. 12289 12290 The Intel-syntax conversion instructions 12291 12292 * 'cbw' -- sign-extend byte in '%al' to word in '%ax', 12293 12294 * 'cwde' -- sign-extend word in '%ax' to long in '%eax', 12295 12296 * 'cwd' -- sign-extend word in '%ax' to long in '%dx:%ax', 12297 12298 * 'cdq' -- sign-extend dword in '%eax' to quad in '%edx:%eax', 12299 12300 * 'cdqe' -- sign-extend dword in '%eax' to quad in '%rax' (x86-64 12301 only), 12302 12303 * 'cqo' -- sign-extend quad in '%rax' to octuple in '%rdx:%rax' 12304 (x86-64 only), 12305 12306are called 'cbtw', 'cwtl', 'cwtd', 'cltd', 'cltq', and 'cqto' in AT&T 12307naming. 'as' accepts either naming for these instructions. 12308 12309 The Intel-syntax extension instructions 12310 12311 * 'movsx' -- sign-extend 'reg8/mem8' to 'reg16'. 12312 12313 * 'movsx' -- sign-extend 'reg8/mem8' to 'reg32'. 12314 12315 * 'movsx' -- sign-extend 'reg8/mem8' to 'reg64' (x86-64 only). 12316 12317 * 'movsx' -- sign-extend 'reg16/mem16' to 'reg32' 12318 12319 * 'movsx' -- sign-extend 'reg16/mem16' to 'reg64' (x86-64 only). 12320 12321 * 'movsxd' -- sign-extend 'reg32/mem32' to 'reg64' (x86-64 only). 12322 12323 * 'movzx' -- zero-extend 'reg8/mem8' to 'reg16'. 12324 12325 * 'movzx' -- zero-extend 'reg8/mem8' to 'reg32'. 12326 12327 * 'movzx' -- zero-extend 'reg8/mem8' to 'reg64' (x86-64 only). 12328 12329 * 'movzx' -- zero-extend 'reg16/mem16' to 'reg32' 12330 12331 * 'movzx' -- zero-extend 'reg16/mem16' to 'reg64' (x86-64 only). 12332 12333are called 'movsbw/movsxb/movsx', 'movsbl/movsxb/movsx', 12334'movsbq/movsb/movsx', 'movswl/movsxw', 'movswq/movsxw', 'movslq/movsxl', 12335'movzbw/movzxb/movzx', 'movzbl/movzxb/movzx', 'movzbq/movzxb/movzx', 12336'movzwl/movzxw' and 'movzwq/movzxw' in AT&T syntax. 12337 12338 Far call/jump instructions are 'lcall' and 'ljmp' in AT&T syntax, but 12339are 'call far' and 'jump far' in Intel convention. 12340 123419.16.4.2 AT&T Mnemonic versus Intel Mnemonic 12342............................................ 12343 12344'as' supports assembly using Intel mnemonic. '.intel_mnemonic' selects 12345Intel mnemonic with Intel syntax, and '.att_mnemonic' switches back to 12346the usual AT&T mnemonic with AT&T syntax for compatibility with the 12347output of 'gcc'. Several x87 instructions, 'fadd', 'fdiv', 'fdivp', 12348'fdivr', 'fdivrp', 'fmul', 'fsub', 'fsubp', 'fsubr' and 'fsubrp', are 12349implemented in AT&T System V/386 assembler with different mnemonics from 12350those in Intel IA32 specification. 'gcc' generates those instructions 12351with AT&T mnemonic. 12352 12353 * 'movslq' with AT&T mnemonic only accepts 64-bit destination 12354 register. 'movsxd' should be used to encode 16-bit or 32-bit 12355 destination register with both AT&T and Intel mnemonics. 12356 12357 12358File: as.info, Node: i386-Regs, Next: i386-Prefixes, Prev: i386-Mnemonics, Up: i386-Dependent 12359 123609.16.5 Register Naming 12361---------------------- 12362 12363Register operands are always prefixed with '%'. The 80386 registers 12364consist of 12365 12366 * the 8 32-bit registers '%eax' (the accumulator), '%ebx', '%ecx', 12367 '%edx', '%edi', '%esi', '%ebp' (the frame pointer), and '%esp' (the 12368 stack pointer). 12369 12370 * the 8 16-bit low-ends of these: '%ax', '%bx', '%cx', '%dx', '%di', 12371 '%si', '%bp', and '%sp'. 12372 12373 * the 8 8-bit registers: '%ah', '%al', '%bh', '%bl', '%ch', '%cl', 12374 '%dh', and '%dl' (These are the high-bytes and low-bytes of '%ax', 12375 '%bx', '%cx', and '%dx') 12376 12377 * the 6 section registers '%cs' (code section), '%ds' (data section), 12378 '%ss' (stack section), '%es', '%fs', and '%gs'. 12379 12380 * the 5 processor control registers '%cr0', '%cr2', '%cr3', '%cr4', 12381 and '%cr8'. 12382 12383 * the 6 debug registers '%db0', '%db1', '%db2', '%db3', '%db6', and 12384 '%db7'. 12385 12386 * the 2 test registers '%tr6' and '%tr7'. 12387 12388 * the 8 floating point register stack '%st' or equivalently '%st(0)', 12389 '%st(1)', '%st(2)', '%st(3)', '%st(4)', '%st(5)', '%st(6)', and 12390 '%st(7)'. These registers are overloaded by 8 MMX registers 12391 '%mm0', '%mm1', '%mm2', '%mm3', '%mm4', '%mm5', '%mm6' and '%mm7'. 12392 12393 * the 8 128-bit SSE registers registers '%xmm0', '%xmm1', '%xmm2', 12394 '%xmm3', '%xmm4', '%xmm5', '%xmm6' and '%xmm7'. 12395 12396 The AMD x86-64 architecture extends the register set by: 12397 12398 * enhancing the 8 32-bit registers to 64-bit: '%rax' (the 12399 accumulator), '%rbx', '%rcx', '%rdx', '%rdi', '%rsi', '%rbp' (the 12400 frame pointer), '%rsp' (the stack pointer) 12401 12402 * the 8 extended registers '%r8'-'%r15'. 12403 12404 * the 8 32-bit low ends of the extended registers: '%r8d'-'%r15d'. 12405 12406 * the 8 16-bit low ends of the extended registers: '%r8w'-'%r15w'. 12407 12408 * the 8 8-bit low ends of the extended registers: '%r8b'-'%r15b'. 12409 12410 * the 4 8-bit registers: '%sil', '%dil', '%bpl', '%spl'. 12411 12412 * the 8 debug registers: '%db8'-'%db15'. 12413 12414 * the 8 128-bit SSE registers: '%xmm8'-'%xmm15'. 12415 12416 With the AVX extensions more registers were made available: 12417 12418 * the 16 256-bit SSE '%ymm0'-'%ymm15' (only the first 8 available in 12419 32-bit mode). The bottom 128 bits are overlaid with the 12420 'xmm0'-'xmm15' registers. 12421 12422 The AVX512 extensions added the following registers: 12423 12424 * the 32 512-bit registers '%zmm0'-'%zmm31' (only the first 8 12425 available in 32-bit mode). The bottom 128 bits are overlaid with 12426 the '%xmm0'-'%xmm31' registers and the first 256 bits are overlaid 12427 with the '%ymm0'-'%ymm31' registers. 12428 12429 * the 8 mask registers '%k0'-'%k7'. 12430 12431 12432File: as.info, Node: i386-Prefixes, Next: i386-Memory, Prev: i386-Regs, Up: i386-Dependent 12433 124349.16.6 Instruction Prefixes 12435--------------------------- 12436 12437Instruction prefixes are used to modify the following instruction. They 12438are used to repeat string instructions, to provide section overrides, to 12439perform bus lock operations, and to change operand and address sizes. 12440(Most instructions that normally operate on 32-bit operands will use 1244116-bit operands if the instruction has an "operand size" prefix.) 12442Instruction prefixes are best written on the same line as the 12443instruction they act upon. For example, the 'scas' (scan string) 12444instruction is repeated with: 12445 12446 repne scas %es:(%edi),%al 12447 12448 You may also place prefixes on the lines immediately preceding the 12449instruction, but this circumvents checks that 'as' does with prefixes, 12450and will not work with all prefixes. 12451 12452 Here is a list of instruction prefixes: 12453 12454 * Section override prefixes 'cs', 'ds', 'ss', 'es', 'fs', 'gs'. 12455 These are automatically added by specifying using the 12456 SECTION:MEMORY-OPERAND form for memory references. 12457 12458 * Operand/Address size prefixes 'data16' and 'addr16' change 32-bit 12459 operands/addresses into 16-bit operands/addresses, while 'data32' 12460 and 'addr32' change 16-bit ones (in a '.code16' section) into 12461 32-bit operands/addresses. These prefixes _must_ appear on the 12462 same line of code as the instruction they modify. For example, in 12463 a 16-bit '.code16' section, you might write: 12464 12465 addr32 jmpl *(%ebx) 12466 12467 * The bus lock prefix 'lock' inhibits interrupts during execution of 12468 the instruction it precedes. (This is only valid with certain 12469 instructions; see a 80386 manual for details). 12470 12471 * The wait for coprocessor prefix 'wait' waits for the coprocessor to 12472 complete the current instruction. This should never be needed for 12473 the 80386/80387 combination. 12474 12475 * The 'rep', 'repe', and 'repne' prefixes are added to string 12476 instructions to make them repeat '%ecx' times ('%cx' times if the 12477 current address size is 16-bits). 12478 * The 'rex' family of prefixes is used by x86-64 to encode extensions 12479 to i386 instruction set. The 'rex' prefix has four bits -- an 12480 operand size overwrite ('64') used to change operand size from 12481 32-bit to 64-bit and X, Y and Z extensions bits used to extend the 12482 register set. 12483 12484 You may write the 'rex' prefixes directly. The 'rex64xyz' 12485 instruction emits 'rex' prefix with all the bits set. By omitting 12486 the '64', 'x', 'y' or 'z' you may write other prefixes as well. 12487 Normally, there is no need to write the prefixes explicitly, since 12488 gas will automatically generate them based on the instruction 12489 operands. 12490 12491 12492File: as.info, Node: i386-Memory, Next: i386-Jumps, Prev: i386-Prefixes, Up: i386-Dependent 12493 124949.16.7 Memory References 12495------------------------ 12496 12497An Intel syntax indirect memory reference of the form 12498 12499 SECTION:[BASE + INDEX*SCALE + DISP] 12500 12501is translated into the AT&T syntax 12502 12503 SECTION:DISP(BASE, INDEX, SCALE) 12504 12505where BASE and INDEX are the optional 32-bit base and index registers, 12506DISP is the optional displacement, and SCALE, taking the values 1, 2, 4, 12507and 8, multiplies INDEX to calculate the address of the operand. If no 12508SCALE is specified, SCALE is taken to be 1. SECTION specifies the 12509optional section register for the memory operand, and may override the 12510default section register (see a 80386 manual for section register 12511defaults). Note that section overrides in AT&T syntax _must_ be 12512preceded by a '%'. If you specify a section override which coincides 12513with the default section register, 'as' does _not_ output any section 12514register override prefixes to assemble the given instruction. Thus, 12515section overrides can be specified to emphasize which section register 12516is used for a given memory operand. 12517 12518 Here are some examples of Intel and AT&T style memory references: 12519 12520AT&T: '-4(%ebp)', Intel: '[ebp - 4]' 12521 BASE is '%ebp'; DISP is '-4'. SECTION is missing, and the default 12522 section is used ('%ss' for addressing with '%ebp' as the base 12523 register). INDEX, SCALE are both missing. 12524 12525AT&T: 'foo(,%eax,4)', Intel: '[foo + eax*4]' 12526 INDEX is '%eax' (scaled by a SCALE 4); DISP is 'foo'. All other 12527 fields are missing. The section register here defaults to '%ds'. 12528 12529AT&T: 'foo(,1)'; Intel '[foo]' 12530 This uses the value pointed to by 'foo' as a memory operand. Note 12531 that BASE and INDEX are both missing, but there is only _one_ ','. 12532 This is a syntactic exception. 12533 12534AT&T: '%gs:foo'; Intel 'gs:foo' 12535 This selects the contents of the variable 'foo' with section 12536 register SECTION being '%gs'. 12537 12538 Absolute (as opposed to PC relative) call and jump operands must be 12539prefixed with '*'. If no '*' is specified, 'as' always chooses PC 12540relative addressing for jump/call labels. 12541 12542 Any instruction that has a memory operand, but no register operand, 12543_must_ specify its size (byte, word, long, or quadruple) with an 12544instruction mnemonic suffix ('b', 'w', 'l' or 'q', respectively). 12545 12546 The x86-64 architecture adds an RIP (instruction pointer relative) 12547addressing. This addressing mode is specified by using 'rip' as a base 12548register. Only constant offsets are valid. For example: 12549 12550AT&T: '1234(%rip)', Intel: '[rip + 1234]' 12551 Points to the address 1234 bytes past the end of the current 12552 instruction. 12553 12554AT&T: 'symbol(%rip)', Intel: '[rip + symbol]' 12555 Points to the 'symbol' in RIP relative way, this is shorter than 12556 the default absolute addressing. 12557 12558 Other addressing modes remain unchanged in x86-64 architecture, 12559except registers used are 64-bit instead of 32-bit. 12560 12561 12562File: as.info, Node: i386-Jumps, Next: i386-Float, Prev: i386-Memory, Up: i386-Dependent 12563 125649.16.8 Handling of Jump Instructions 12565------------------------------------ 12566 12567Jump instructions are always optimized to use the smallest possible 12568displacements. This is accomplished by using byte (8-bit) displacement 12569jumps whenever the target is sufficiently close. If a byte displacement 12570is insufficient a long displacement is used. We do not support word 12571(16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump 12572instruction with the 'data16' instruction prefix), since the 80386 12573insists upon masking '%eip' to 16 bits after the word displacement is 12574added. (See also *note i386-Arch::) 12575 12576 Note that the 'jcxz', 'jecxz', 'loop', 'loopz', 'loope', 'loopnz' and 12577'loopne' instructions only come in byte displacements, so that if you 12578use these instructions ('gcc' does not use them) you may get an error 12579message (and incorrect code). The AT&T 80386 assembler tries to get 12580around this problem by expanding 'jcxz foo' to 12581 12582 jcxz cx_zero 12583 jmp cx_nonzero 12584 cx_zero: jmp foo 12585 cx_nonzero: 12586 12587 12588File: as.info, Node: i386-Float, Next: i386-SIMD, Prev: i386-Jumps, Up: i386-Dependent 12589 125909.16.9 Floating Point 12591--------------------- 12592 12593All 80387 floating point types except packed BCD are supported. (BCD 12594support may be added without much difficulty). These data types are 1259516-, 32-, and 64- bit integers, and single (32-bit), double (64-bit), 12596and extended (80-bit) precision floating point. Each supported type has 12597an instruction mnemonic suffix and a constructor associated with it. 12598Instruction mnemonic suffixes specify the operand's data type. 12599Constructors build these data types into memory. 12600 12601 * Floating point constructors are '.float' or '.single', '.double', 12602 and '.tfloat' for 32-, 64-, and 80-bit formats. These correspond 12603 to instruction mnemonic suffixes 's', 'l', and 't'. 't' stands for 12604 80-bit (ten byte) real. The 80387 only supports this format via 12605 the 'fldt' (load 80-bit real to stack top) and 'fstpt' (store 12606 80-bit real and pop stack) instructions. 12607 12608 * Integer constructors are '.word', '.long' or '.int', and '.quad' 12609 for the 16-, 32-, and 64-bit integer formats. The corresponding 12610 instruction mnemonic suffixes are 's' (short), 'l' (long), and 'q' 12611 (quad). As with the 80-bit real format, the 64-bit 'q' format is 12612 only present in the 'fildq' (load quad integer to stack top) and 12613 'fistpq' (store quad integer and pop stack) instructions. 12614 12615 Register to register operations should not use instruction mnemonic 12616suffixes. 'fstl %st, %st(1)' will give a warning, and be assembled as 12617if you wrote 'fst %st, %st(1)', since all register to register 12618operations use 80-bit floating point operands. (Contrast this with 12619'fstl %st, mem', which converts '%st' from 80-bit to 64-bit floating 12620point format, then stores the result in the 4 byte location 'mem') 12621 12622 12623File: as.info, Node: i386-SIMD, Next: i386-LWP, Prev: i386-Float, Up: i386-Dependent 12624 126259.16.10 Intel's MMX and AMD's 3DNow! SIMD Operations 12626---------------------------------------------------- 12627 12628'as' supports Intel's MMX instruction set (SIMD instructions for integer 12629data), available on Intel's Pentium MMX processors and Pentium II 12630processors, AMD's K6 and K6-2 processors, Cyrix' M2 processor, and 12631probably others. It also supports AMD's 3DNow! instruction set (SIMD 12632instructions for 32-bit floating point data) available on AMD's K6-2 12633processor and possibly others in the future. 12634 12635 Currently, 'as' does not support Intel's floating point SIMD, Katmai 12636(KNI). 12637 12638 The eight 64-bit MMX operands, also used by 3DNow!, are called 12639'%mm0', '%mm1', ... '%mm7'. They contain eight 8-bit integers, four 1264016-bit integers, two 32-bit integers, one 64-bit integer, or two 32-bit 12641floating point values. The MMX registers cannot be used at the same 12642time as the floating point stack. 12643 12644 See Intel and AMD documentation, keeping in mind that the operand 12645order in instructions is reversed from the Intel syntax. 12646 12647 12648File: as.info, Node: i386-LWP, Next: i386-BMI, Prev: i386-SIMD, Up: i386-Dependent 12649 126509.16.11 AMD's Lightweight Profiling Instructions 12651------------------------------------------------ 12652 12653'as' supports AMD's Lightweight Profiling (LWP) instruction set, 12654available on AMD's Family 15h (Orochi) processors. 12655 12656 LWP enables applications to collect and manage performance data, and 12657react to performance events. The collection of performance data 12658requires no context switches. LWP runs in the context of a thread and 12659so several counters can be used independently across multiple threads. 12660LWP can be used in both 64-bit and legacy 32-bit modes. 12661 12662 For detailed information on the LWP instruction set, see the 'AMD 12663Lightweight Profiling Specification' available at Lightweight Profiling 12664Specification (http://developer.amd.com/cpu/LWP). 12665 12666 12667File: as.info, Node: i386-BMI, Next: i386-TBM, Prev: i386-LWP, Up: i386-Dependent 12668 126699.16.12 Bit Manipulation Instructions 12670------------------------------------- 12671 12672'as' supports the Bit Manipulation (BMI) instruction set. 12673 12674 BMI instructions provide several instructions implementing individual 12675bit manipulation operations such as isolation, masking, setting, or 12676resetting. 12677 12678 12679File: as.info, Node: i386-TBM, Next: i386-16bit, Prev: i386-BMI, Up: i386-Dependent 12680 126819.16.13 AMD's Trailing Bit Manipulation Instructions 12682---------------------------------------------------- 12683 12684'as' supports AMD's Trailing Bit Manipulation (TBM) instruction set, 12685available on AMD's BDVER2 processors (Trinity and Viperfish). 12686 12687 TBM instructions provide instructions implementing individual bit 12688manipulation operations such as isolating, masking, setting, resetting, 12689complementing, and operations on trailing zeros and ones. 12690 12691 12692File: as.info, Node: i386-16bit, Next: i386-Arch, Prev: i386-TBM, Up: i386-Dependent 12693 126949.16.14 Writing 16-bit Code 12695--------------------------- 12696 12697While 'as' normally writes only "pure" 32-bit i386 code or 64-bit x86-64 12698code depending on the default configuration, it also supports writing 12699code to run in real mode or in 16-bit protected mode code segments. To 12700do this, put a '.code16' or '.code16gcc' directive before the assembly 12701language instructions to be run in 16-bit mode. You can switch 'as' to 12702writing 32-bit code with the '.code32' directive or 64-bit code with the 12703'.code64' directive. 12704 12705 '.code16gcc' provides experimental support for generating 16-bit code 12706from gcc, and differs from '.code16' in that 'call', 'ret', 'enter', 12707'leave', 'push', 'pop', 'pusha', 'popa', 'pushf', and 'popf' 12708instructions default to 32-bit size. This is so that the stack pointer 12709is manipulated in the same way over function calls, allowing access to 12710function parameters at the same stack offsets as in 32-bit mode. 12711'.code16gcc' also automatically adds address size prefixes where 12712necessary to use the 32-bit addressing modes that gcc generates. 12713 12714 The code which 'as' generates in 16-bit mode will not necessarily run 12715on a 16-bit pre-80386 processor. To write code that runs on such a 12716processor, you must refrain from using _any_ 32-bit constructs which 12717require 'as' to output address or operand size prefixes. 12718 12719 Note that writing 16-bit code instructions by explicitly specifying a 12720prefix or an instruction mnemonic suffix within a 32-bit code section 12721generates different machine instructions than those generated for a 1272216-bit code segment. In a 32-bit code section, the following code 12723generates the machine opcode bytes '66 6a 04', which pushes the value 12724'4' onto the stack, decrementing '%esp' by 2. 12725 12726 pushw $4 12727 12728 The same code in a 16-bit code section would generate the machine 12729opcode bytes '6a 04' (i.e., without the operand size prefix), which is 12730correct since the processor default operand size is assumed to be 16 12731bits in a 16-bit code section. 12732 12733 12734File: as.info, Node: i386-Arch, Next: i386-ISA, Prev: i386-16bit, Up: i386-Dependent 12735 127369.16.15 Specifying CPU Architecture 12737----------------------------------- 12738 12739'as' may be told to assemble for a particular CPU (sub-)architecture 12740with the '.arch CPU_TYPE' directive. This directive enables a warning 12741when gas detects an instruction that is not supported on the CPU 12742specified. The choices for CPU_TYPE are: 12743 12744'i8086' 'i186' 'i286' 'i386' 12745'i486' 'i586' 'i686' 'pentium' 12746'pentiumpro' 'pentiumii' 'pentiumiii' 'pentium4' 12747'prescott' 'nocona' 'core' 'core2' 12748'corei7' 'l1om' 'k1om' 'iamcu' 12749'k6' 'k6_2' 'athlon' 'k8' 12750'amdfam10' 'bdver1' 'bdver2' 'bdver3' 12751'bdver4' 'znver1' 'znver2' 'znver3' 12752'btver1' 'btver2' 'generic32' 'generic64' 12753'.cmov' '.fxsr' '.mmx' 12754'.sse' '.sse2' '.sse3' '.sse4a' 12755'.ssse3' '.sse4.1' '.sse4.2' '.sse4' 12756'.avx' '.vmx' '.smx' '.ept' 12757'.clflush' '.movbe' '.xsave' '.xsaveopt' 12758'.aes' '.pclmul' '.fma' '.fsgsbase' 12759'.rdrnd' '.f16c' '.avx2' '.bmi2' 12760'.lzcnt' '.popcnt' '.invpcid' '.vmfunc' 12761'.hle' 12762'.rtm' '.adx' '.rdseed' '.prfchw' 12763'.smap' '.mpx' '.sha' '.prefetchwt1' 12764'.clflushopt' '.xsavec' '.xsaves' '.se1' 12765'.avx512f' '.avx512cd' '.avx512er' '.avx512pf' 12766'.avx512vl' '.avx512bw' '.avx512dq' '.avx512ifma' 12767'.avx512vbmi' '.avx512_4fmaps''.avx512_4vnniw' 12768'.avx512_vpopcntdq''.avx512_vbmi2''.avx512_vnni' 12769'.avx512_bitalg''.avx512_bf16''.avx512_vp2intersect' 12770'.tdx' '.avx_vnni' 12771'.clwb' '.rdpid' '.ptwrite' 12772'.ibt' 12773'.wbnoinvd' '.pconfig' '.waitpkg' '.cldemote' 12774'.shstk' '.gfni' '.vaes' '.vpclmulqdq' 12775'.movdiri' '.movdir64b' '.enqcmd' '.tsxldtrk' 12776'.amx_int8' '.amx_bf16' '.amx_tile' 12777'.kl' '.widekl' '.uintr' '.hreset' 12778'.3dnow' '.3dnowa' '.sse4a' '.sse5' 12779'.syscall' '.rdtscp' '.svme' 12780'.lwp' '.fma4' '.xop' '.cx16' 12781'.padlock' '.clzero' '.mwaitx' '.rdpru' 12782'.mcommit' '.sev_es' '.snp' '.invlpgb' 12783'.tlbsync' 12784 12785 Apart from the warning, there are only two other effects on 'as' 12786operation; Firstly, if you specify a CPU other than 'i486', then shift 12787by one instructions such as 'sarl $1, %eax' will automatically use a two 12788byte opcode sequence. The larger three byte opcode sequence is used on 12789the 486 (and when no architecture is specified) because it executes 12790faster on the 486. Note that you can explicitly request the two byte 12791opcode by writing 'sarl %eax'. Secondly, if you specify 'i8086', 12792'i186', or 'i286', _and_ '.code16' or '.code16gcc' then byte offset 12793conditional jumps will be promoted when necessary to a two instruction 12794sequence consisting of a conditional jump of the opposite sense around 12795an unconditional jump to the target. 12796 12797 Following the CPU architecture (but not a sub-architecture, which are 12798those starting with a dot), you may specify 'jumps' or 'nojumps' to 12799control automatic promotion of conditional jumps. 'jumps' is the 12800default, and enables jump promotion; All external jumps will be of the 12801long variety, and file-local jumps will be promoted as necessary. 12802(*note i386-Jumps::) 'nojumps' leaves external conditional jumps as byte 12803offset jumps, and warns about file-local conditional jumps that 'as' 12804promotes. Unconditional jumps are treated as for 'jumps'. 12805 12806 For example 12807 12808 .arch i8086,nojumps 12809 12810 12811File: as.info, Node: i386-ISA, Next: i386-Bugs, Prev: i386-Arch, Up: i386-Dependent 12812 128139.16.16 AMD64 ISA vs. Intel64 ISA 12814--------------------------------- 12815 12816There are some discrepancies between AMD64 and Intel64 ISAs. 12817 12818 * For 'movsxd' with 16-bit destination register, AMD64 supports 12819 32-bit source operand and Intel64 supports 16-bit source operand. 12820 12821 * For far branches (with explicit memory operand), both ISAs support 12822 32- and 16-bit operand size. Intel64 additionally supports 64-bit 12823 operand size, encoded as 'ljmpq' and 'lcallq' in AT&T syntax and 12824 with an explicit 'tbyte ptr' operand size specifier in Intel 12825 syntax. 12826 12827 * 'lfs', 'lgs', and 'lss' similarly allow for 16- and 32-bit operand 12828 size (32- and 48-bit memory operand) in both ISAs, while Intel64 12829 additionally supports 64-bit operand sise (80-bit memory operands). 12830 12831 12832File: as.info, Node: i386-Bugs, Next: i386-Notes, Prev: i386-ISA, Up: i386-Dependent 12833 128349.16.17 AT&T Syntax bugs 12835------------------------ 12836 12837The UnixWare assembler, and probably other AT&T derived ix86 Unix 12838assemblers, generate floating point instructions with reversed source 12839and destination registers in certain cases. Unfortunately, gcc and 12840possibly many other programs use this reversed syntax, so we're stuck 12841with it. 12842 12843 For example 12844 12845 fsub %st,%st(3) 12846results in '%st(3)' being updated to '%st - %st(3)' rather than the 12847expected '%st(3) - %st'. This happens with all the non-commutative 12848arithmetic floating point operations with two register operands where 12849the source register is '%st' and the destination register is '%st(i)'. 12850 12851 12852File: as.info, Node: i386-Notes, Prev: i386-Bugs, Up: i386-Dependent 12853 128549.16.18 Notes 12855------------- 12856 12857There is some trickery concerning the 'mul' and 'imul' instructions that 12858deserves mention. The 16-, 32-, 64- and 128-bit expanding multiplies 12859(base opcode '0xf6'; extension 4 for 'mul' and 5 for 'imul') can be 12860output only in the one operand form. Thus, 'imul %ebx, %eax' does _not_ 12861select the expanding multiply; the expanding multiply would clobber the 12862'%edx' register, and this would confuse 'gcc' output. Use 'imul %ebx' 12863to get the 64-bit product in '%edx:%eax'. 12864 12865 We have added a two operand form of 'imul' when the first operand is 12866an immediate mode expression and the second operand is a register. This 12867is just a shorthand, so that, multiplying '%eax' by 69, for example, can 12868be done with 'imul $69, %eax' rather than 'imul $69, %eax, %eax'. 12869 12870 12871File: as.info, Node: IA-64-Dependent, Next: IP2K-Dependent, Prev: i386-Dependent, Up: Machine Dependencies 12872 128739.17 IA-64 Dependent Features 12874============================= 12875 12876* Menu: 12877 12878* IA-64 Options:: Options 12879* IA-64 Syntax:: Syntax 12880* IA-64 Opcodes:: Opcodes 12881 12882 12883File: as.info, Node: IA-64 Options, Next: IA-64 Syntax, Up: IA-64-Dependent 12884 128859.17.1 Options 12886-------------- 12887 12888'-mconstant-gp' 12889 This option instructs the assembler to mark the resulting object 12890 file as using the "constant GP" model. With this model, it is 12891 assumed that the entire program uses a single global pointer (GP) 12892 value. Note that this option does not in any fashion affect the 12893 machine code emitted by the assembler. All it does is turn on the 12894 EF_IA_64_CONS_GP flag in the ELF file header. 12895 12896'-mauto-pic' 12897 This option instructs the assembler to mark the resulting object 12898 file as using the "constant GP without function descriptor" data 12899 model. This model is like the "constant GP" model, except that it 12900 additionally does away with function descriptors. What this means 12901 is that the address of a function refers directly to the function's 12902 code entry-point. Normally, such an address would refer to a 12903 function descriptor, which contains both the code entry-point and 12904 the GP-value needed by the function. Note that this option does 12905 not in any fashion affect the machine code emitted by the 12906 assembler. All it does is turn on the EF_IA_64_NOFUNCDESC_CONS_GP 12907 flag in the ELF file header. 12908 12909'-milp32' 12910'-milp64' 12911'-mlp64' 12912'-mp64' 12913 These options select the data model. The assembler defaults to 12914 '-mlp64' (LP64 data model). 12915 12916'-mle' 12917'-mbe' 12918 These options select the byte order. The '-mle' option selects 12919 little-endian byte order (default) and '-mbe' selects big-endian 12920 byte order. Note that IA-64 machine code always uses little-endian 12921 byte order. 12922 12923'-mtune=itanium1' 12924'-mtune=itanium2' 12925 Tune for a particular IA-64 CPU, ITANIUM1 or ITANIUM2. The default 12926 is ITANIUM2. 12927 12928'-munwind-check=warning' 12929'-munwind-check=error' 12930 These options control what the assembler will do when performing 12931 consistency checks on unwind directives. '-munwind-check=warning' 12932 will make the assembler issue a warning when an unwind directive 12933 check fails. This is the default. '-munwind-check=error' will 12934 make the assembler issue an error when an unwind directive check 12935 fails. 12936 12937'-mhint.b=ok' 12938'-mhint.b=warning' 12939'-mhint.b=error' 12940 These options control what the assembler will do when the 'hint.b' 12941 instruction is used. '-mhint.b=ok' will make the assembler accept 12942 'hint.b'. '-mint.b=warning' will make the assembler issue a 12943 warning when 'hint.b' is used. '-mhint.b=error' will make the 12944 assembler treat 'hint.b' as an error, which is the default. 12945 12946'-x' 12947'-xexplicit' 12948 These options turn on dependency violation checking. 12949 12950'-xauto' 12951 This option instructs the assembler to automatically insert stop 12952 bits where necessary to remove dependency violations. This is the 12953 default mode. 12954 12955'-xnone' 12956 This option turns off dependency violation checking. 12957 12958'-xdebug' 12959 This turns on debug output intended to help tracking down bugs in 12960 the dependency violation checker. 12961 12962'-xdebugn' 12963 This is a shortcut for -xnone -xdebug. 12964 12965'-xdebugx' 12966 This is a shortcut for -xexplicit -xdebug. 12967 12968 12969File: as.info, Node: IA-64 Syntax, Next: IA-64 Opcodes, Prev: IA-64 Options, Up: IA-64-Dependent 12970 129719.17.2 Syntax 12972------------- 12973 12974The assembler syntax closely follows the IA-64 Assembly Language 12975Reference Guide. 12976 12977* Menu: 12978 12979* IA-64-Chars:: Special Characters 12980* IA-64-Regs:: Register Names 12981* IA-64-Bits:: Bit Names 12982* IA-64-Relocs:: Relocations 12983 12984 12985File: as.info, Node: IA-64-Chars, Next: IA-64-Regs, Up: IA-64 Syntax 12986 129879.17.2.1 Special Characters 12988........................... 12989 12990'//' is the line comment token. 12991 12992 ';' can be used instead of a newline to separate statements. 12993 12994 12995File: as.info, Node: IA-64-Regs, Next: IA-64-Bits, Prev: IA-64-Chars, Up: IA-64 Syntax 12996 129979.17.2.2 Register Names 12998....................... 12999 13000The 128 integer registers are referred to as 'rN'. The 128 13001floating-point registers are referred to as 'fN'. The 128 application 13002registers are referred to as 'arN'. The 128 control registers are 13003referred to as 'crN'. The 64 one-bit predicate registers are referred 13004to as 'pN'. The 8 branch registers are referred to as 'bN'. In 13005addition, the assembler defines a number of aliases: 'gp' ('r1'), 'sp' 13006('r12'), 'rp' ('b0'), 'ret0' ('r8'), 'ret1' ('r9'), 'ret2' ('r10'), 13007'ret3' ('r9'), 'fargN' ('f8+N'), and 'fretN' ('f8+N'). 13008 13009 For convenience, the assembler also defines aliases for all named 13010application and control registers. For example, 'ar.bsp' refers to the 13011register backing store pointer ('ar17'). Similarly, 'cr.eoi' refers to 13012the end-of-interrupt register ('cr67'). 13013 13014 13015File: as.info, Node: IA-64-Bits, Next: IA-64-Relocs, Prev: IA-64-Regs, Up: IA-64 Syntax 13016 130179.17.2.3 IA-64 Processor-Status-Register (PSR) Bit Names 13018........................................................ 13019 13020The assembler defines bit masks for each of the bits in the IA-64 13021processor status register. For example, 'psr.ic' corresponds to a value 13022of 0x2000. These masks are primarily intended for use with the 13023'ssm'/'sum' and 'rsm'/'rum' instructions, but they can be used anywhere 13024else where an integer constant is expected. 13025 13026 13027File: as.info, Node: IA-64-Relocs, Prev: IA-64-Bits, Up: IA-64 Syntax 13028 130299.17.2.4 Relocations 13030.................... 13031 13032In addition to the standard IA-64 relocations, the following relocations 13033are implemented by 'as': 13034 13035'@slotcount(V)' 13036 Convert the address offset V into a slot count. This pseudo 13037 function is available only on VMS. The expression V must be known 13038 at assembly time: it can't reference undefined symbols or symbols 13039 in different sections. 13040 13041 13042File: as.info, Node: IA-64 Opcodes, Prev: IA-64 Syntax, Up: IA-64-Dependent 13043 130449.17.3 Opcodes 13045-------------- 13046 13047For detailed information on the IA-64 machine instruction set, see the 13048IA-64 Architecture Handbook 13049(http://developer.intel.com/design/itanium/arch_spec.htm). 13050 13051 13052File: as.info, Node: IP2K-Dependent, Next: LM32-Dependent, Prev: IA-64-Dependent, Up: Machine Dependencies 13053 130549.18 IP2K Dependent Features 13055============================ 13056 13057* Menu: 13058 13059* IP2K-Opts:: IP2K Options 13060* IP2K-Syntax:: IP2K Syntax 13061 13062 13063File: as.info, Node: IP2K-Opts, Next: IP2K-Syntax, Up: IP2K-Dependent 13064 130659.18.1 IP2K Options 13066------------------- 13067 13068The Ubicom IP2K version of 'as' has a few machine dependent options: 13069 13070'-mip2022ext' 13071 'as' can assemble the extended IP2022 instructions, but it will 13072 only do so if this is specifically allowed via this command line 13073 option. 13074 13075'-mip2022' 13076 This option restores the assembler's default behaviour of not 13077 permitting the extended IP2022 instructions to be assembled. 13078 13079 13080File: as.info, Node: IP2K-Syntax, Prev: IP2K-Opts, Up: IP2K-Dependent 13081 130829.18.2 IP2K Syntax 13083------------------ 13084 13085* Menu: 13086 13087* IP2K-Chars:: Special Characters 13088 13089 13090File: as.info, Node: IP2K-Chars, Up: IP2K-Syntax 13091 130929.18.2.1 Special Characters 13093........................... 13094 13095The presence of a ';' on a line indicates the start of a comment that 13096extends to the end of the current line. 13097 13098 If a '#' appears as the first character of a line, the whole line is 13099treated as a comment, but in this case the line can also be a logical 13100line number directive (*note Comments::) or a preprocessor control 13101command (*note Preprocessing::). 13102 13103 The IP2K assembler does not currently support a line separator 13104character. 13105 13106 13107File: as.info, Node: LM32-Dependent, Next: M32C-Dependent, Prev: IP2K-Dependent, Up: Machine Dependencies 13108 131099.19 LM32 Dependent Features 13110============================ 13111 13112* Menu: 13113 13114* LM32 Options:: Options 13115* LM32 Syntax:: Syntax 13116* LM32 Opcodes:: Opcodes 13117 13118 13119File: as.info, Node: LM32 Options, Next: LM32 Syntax, Up: LM32-Dependent 13120 131219.19.1 Options 13122-------------- 13123 13124'-mmultiply-enabled' 13125 Enable multiply instructions. 13126 13127'-mdivide-enabled' 13128 Enable divide instructions. 13129 13130'-mbarrel-shift-enabled' 13131 Enable barrel-shift instructions. 13132 13133'-msign-extend-enabled' 13134 Enable sign extend instructions. 13135 13136'-muser-enabled' 13137 Enable user defined instructions. 13138 13139'-micache-enabled' 13140 Enable instruction cache related CSRs. 13141 13142'-mdcache-enabled' 13143 Enable data cache related CSRs. 13144 13145'-mbreak-enabled' 13146 Enable break instructions. 13147 13148'-mall-enabled' 13149 Enable all instructions and CSRs. 13150 13151 13152File: as.info, Node: LM32 Syntax, Next: LM32 Opcodes, Prev: LM32 Options, Up: LM32-Dependent 13153 131549.19.2 Syntax 13155------------- 13156 13157* Menu: 13158 13159* LM32-Regs:: Register Names 13160* LM32-Modifiers:: Relocatable Expression Modifiers 13161* LM32-Chars:: Special Characters 13162 13163 13164File: as.info, Node: LM32-Regs, Next: LM32-Modifiers, Up: LM32 Syntax 13165 131669.19.2.1 Register Names 13167....................... 13168 13169LM32 has 32 x 32-bit general purpose registers 'r0', 'r1', ... 'r31'. 13170 13171 The following aliases are defined: 'gp' - 'r26', 'fp' - 'r27', 'sp' - 13172'r28', 'ra' - 'r29', 'ea' - 'r30', 'ba' - 'r31'. 13173 13174 LM32 has the following Control and Status Registers (CSRs). 13175 13176'IE' 13177 Interrupt enable. 13178'IM' 13179 Interrupt mask. 13180'IP' 13181 Interrupt pending. 13182'ICC' 13183 Instruction cache control. 13184'DCC' 13185 Data cache control. 13186'CC' 13187 Cycle counter. 13188'CFG' 13189 Configuration. 13190'EBA' 13191 Exception base address. 13192'DC' 13193 Debug control. 13194'DEBA' 13195 Debug exception base address. 13196'JTX' 13197 JTAG transmit. 13198'JRX' 13199 JTAG receive. 13200'BP0' 13201 Breakpoint 0. 13202'BP1' 13203 Breakpoint 1. 13204'BP2' 13205 Breakpoint 2. 13206'BP3' 13207 Breakpoint 3. 13208'WP0' 13209 Watchpoint 0. 13210'WP1' 13211 Watchpoint 1. 13212'WP2' 13213 Watchpoint 2. 13214'WP3' 13215 Watchpoint 3. 13216 13217 13218File: as.info, Node: LM32-Modifiers, Next: LM32-Chars, Prev: LM32-Regs, Up: LM32 Syntax 13219 132209.19.2.2 Relocatable Expression Modifiers 13221......................................... 13222 13223The assembler supports several modifiers when using relocatable 13224addresses in LM32 instruction operands. The general syntax is the 13225following: 13226 13227 modifier(relocatable-expression) 13228 13229'lo' 13230 13231 This modifier allows you to use bits 0 through 15 of an address 13232 expression as 16 bit relocatable expression. 13233 13234'hi' 13235 13236 This modifier allows you to use bits 16 through 23 of an address 13237 expression as 16 bit relocatable expression. 13238 13239 For example 13240 13241 ori r4, r4, lo(sym+10) 13242 orhi r4, r4, hi(sym+10) 13243 13244'gp' 13245 13246 This modified creates a 16-bit relocatable expression that is the 13247 offset of the symbol from the global pointer. 13248 13249 mva r4, gp(sym) 13250 13251'got' 13252 13253 This modifier places a symbol in the GOT and creates a 16-bit 13254 relocatable expression that is the offset into the GOT of this 13255 symbol. 13256 13257 lw r4, (gp+got(sym)) 13258 13259'gotofflo16' 13260 13261 This modifier allows you to use the bits 0 through 15 of an address 13262 which is an offset from the GOT. 13263 13264'gotoffhi16' 13265 13266 This modifier allows you to use the bits 16 through 31 of an 13267 address which is an offset from the GOT. 13268 13269 orhi r4, r4, gotoffhi16(lsym) 13270 addi r4, r4, gotofflo16(lsym) 13271 13272 13273File: as.info, Node: LM32-Chars, Prev: LM32-Modifiers, Up: LM32 Syntax 13274 132759.19.2.3 Special Characters 13276........................... 13277 13278The presence of a '#' on a line indicates the start of a comment that 13279extends to the end of the current line. Note that if a line starts with 13280a '#' character then it can also be a logical line number directive 13281(*note Comments::) or a preprocessor control command (*note 13282Preprocessing::). 13283 13284 A semicolon (';') can be used to separate multiple statements on the 13285same line. 13286 13287 13288File: as.info, Node: LM32 Opcodes, Prev: LM32 Syntax, Up: LM32-Dependent 13289 132909.19.3 Opcodes 13291-------------- 13292 13293For detailed information on the LM32 machine instruction set, see 13294<http://www.latticesemi.com/products/intellectualproperty/ipcores/mico32/>. 13295 13296 'as' implements all the standard LM32 opcodes. 13297 13298 13299File: as.info, Node: M32C-Dependent, Next: M32R-Dependent, Prev: LM32-Dependent, Up: Machine Dependencies 13300 133019.20 M32C Dependent Features 13302============================ 13303 13304'as' can assemble code for several different members of the Renesas M32C 13305family. Normally the default is to assemble code for the M16C 13306microprocessor. The '-m32c' option may be used to change the default to 13307the M32C microprocessor. 13308 13309* Menu: 13310 13311* M32C-Opts:: M32C Options 13312* M32C-Syntax:: M32C Syntax 13313 13314 13315File: as.info, Node: M32C-Opts, Next: M32C-Syntax, Up: M32C-Dependent 13316 133179.20.1 M32C Options 13318------------------- 13319 13320The Renesas M32C version of 'as' has these machine-dependent options: 13321 13322'-m32c' 13323 Assemble M32C instructions. 13324 13325'-m16c' 13326 Assemble M16C instructions (default). 13327 13328'-relax' 13329 Enable support for link-time relaxations. 13330 13331'-h-tick-hex' 13332 Support H'00 style hex constants in addition to 0x00 style. 13333 13334 13335File: as.info, Node: M32C-Syntax, Prev: M32C-Opts, Up: M32C-Dependent 13336 133379.20.2 M32C Syntax 13338------------------ 13339 13340* Menu: 13341 13342* M32C-Modifiers:: Symbolic Operand Modifiers 13343* M32C-Chars:: Special Characters 13344 13345 13346File: as.info, Node: M32C-Modifiers, Next: M32C-Chars, Up: M32C-Syntax 13347 133489.20.2.1 Symbolic Operand Modifiers 13349................................... 13350 13351The assembler supports several modifiers when using symbol addresses in 13352M32C instruction operands. The general syntax is the following: 13353 13354 %modifier(symbol) 13355 13356'%dsp8' 13357'%dsp16' 13358 13359 These modifiers override the assembler's assumptions about how big 13360 a symbol's address is. Normally, when it sees an operand like 13361 'sym[a0]' it assumes 'sym' may require the widest displacement 13362 field (16 bits for '-m16c', 24 bits for '-m32c'). These modifiers 13363 tell it to assume the address will fit in an 8 or 16 bit 13364 (respectively) unsigned displacement. Note that, of course, if it 13365 doesn't actually fit you will get linker errors. Example: 13366 13367 mov.w %dsp8(sym)[a0],r1 13368 mov.b #0,%dsp8(sym)[a0] 13369 13370'%hi8' 13371 13372 This modifier allows you to load bits 16 through 23 of a 24 bit 13373 address into an 8 bit register. This is useful with, for example, 13374 the M16C 'smovf' instruction, which expects a 20 bit address in 13375 'r1h' and 'a0'. Example: 13376 13377 mov.b #%hi8(sym),r1h 13378 mov.w #%lo16(sym),a0 13379 smovf.b 13380 13381'%lo16' 13382 13383 Likewise, this modifier allows you to load bits 0 through 15 of a 13384 24 bit address into a 16 bit register. 13385 13386'%hi16' 13387 13388 This modifier allows you to load bits 16 through 31 of a 32 bit 13389 address into a 16 bit register. While the M32C family only has 24 13390 bits of address space, it does support addresses in pairs of 16 bit 13391 registers (like 'a1a0' for the 'lde' instruction). This modifier 13392 is for loading the upper half in such cases. Example: 13393 13394 mov.w #%hi16(sym),a1 13395 mov.w #%lo16(sym),a0 13396 ... 13397 lde.w [a1a0],r1 13398 13399 13400File: as.info, Node: M32C-Chars, Prev: M32C-Modifiers, Up: M32C-Syntax 13401 134029.20.2.2 Special Characters 13403........................... 13404 13405The presence of a ';' character on a line indicates the start of a 13406comment that extends to the end of that line. 13407 13408 If a '#' appears as the first character of a line, the whole line is 13409treated as a comment, but in this case the line can also be a logical 13410line number directive (*note Comments::) or a preprocessor control 13411command (*note Preprocessing::). 13412 13413 The '|' character can be used to separate statements on the same 13414line. 13415 13416 13417File: as.info, Node: M32R-Dependent, Next: M68K-Dependent, Prev: M32C-Dependent, Up: Machine Dependencies 13418 134199.21 M32R Dependent Features 13420============================ 13421 13422* Menu: 13423 13424* M32R-Opts:: M32R Options 13425* M32R-Directives:: M32R Directives 13426* M32R-Warnings:: M32R Warnings 13427 13428 13429File: as.info, Node: M32R-Opts, Next: M32R-Directives, Up: M32R-Dependent 13430 134319.21.1 M32R Options 13432------------------- 13433 13434The Renesas M32R version of 'as' has a few machine dependent options: 13435 13436'-m32rx' 13437 'as' can assemble code for several different members of the Renesas 13438 M32R family. Normally the default is to assemble code for the M32R 13439 microprocessor. This option may be used to change the default to 13440 the M32RX microprocessor, which adds some more instructions to the 13441 basic M32R instruction set, and some additional parameters to some 13442 of the original instructions. 13443 13444'-m32r2' 13445 This option changes the target processor to the M32R2 13446 microprocessor. 13447 13448'-m32r' 13449 This option can be used to restore the assembler's default 13450 behaviour of assembling for the M32R microprocessor. This can be 13451 useful if the default has been changed by a previous command-line 13452 option. 13453 13454'-little' 13455 This option tells the assembler to produce little-endian code and 13456 data. The default is dependent upon how the toolchain was 13457 configured. 13458 13459'-EL' 13460 This is a synonym for _-little_. 13461 13462'-big' 13463 This option tells the assembler to produce big-endian code and 13464 data. 13465 13466'-EB' 13467 This is a synonym for _-big_. 13468 13469'-KPIC' 13470 This option specifies that the output of the assembler should be 13471 marked as position-independent code (PIC). 13472 13473'-parallel' 13474 This option tells the assembler to attempts to combine two 13475 sequential instructions into a single, parallel instruction, where 13476 it is legal to do so. 13477 13478'-no-parallel' 13479 This option disables a previously enabled _-parallel_ option. 13480 13481'-no-bitinst' 13482 This option disables the support for the extended bit-field 13483 instructions provided by the M32R2. If this support needs to be 13484 re-enabled the _-bitinst_ switch can be used to restore it. 13485 13486'-O' 13487 This option tells the assembler to attempt to optimize the 13488 instructions that it produces. This includes filling delay slots 13489 and converting sequential instructions into parallel ones. This 13490 option implies _-parallel_. 13491 13492'-warn-explicit-parallel-conflicts' 13493 Instructs 'as' to produce warning messages when questionable 13494 parallel instructions are encountered. This option is enabled by 13495 default, but 'gcc' disables it when it invokes 'as' directly. 13496 Questionable instructions are those whose behaviour would be 13497 different if they were executed sequentially. For example the code 13498 fragment 'mv r1, r2 || mv r3, r1' produces a different result from 13499 'mv r1, r2 \n mv r3, r1' since the former moves r1 into r3 and then 13500 r2 into r1, whereas the later moves r2 into r1 and r3. 13501 13502'-Wp' 13503 This is a shorter synonym for the 13504 _-warn-explicit-parallel-conflicts_ option. 13505 13506'-no-warn-explicit-parallel-conflicts' 13507 Instructs 'as' not to produce warning messages when questionable 13508 parallel instructions are encountered. 13509 13510'-Wnp' 13511 This is a shorter synonym for the 13512 _-no-warn-explicit-parallel-conflicts_ option. 13513 13514'-ignore-parallel-conflicts' 13515 This option tells the assembler's to stop checking parallel 13516 instructions for constraint violations. This ability is provided 13517 for hardware vendors testing chip designs and should not be used 13518 under normal circumstances. 13519 13520'-no-ignore-parallel-conflicts' 13521 This option restores the assembler's default behaviour of checking 13522 parallel instructions to detect constraint violations. 13523 13524'-Ip' 13525 This is a shorter synonym for the _-ignore-parallel-conflicts_ 13526 option. 13527 13528'-nIp' 13529 This is a shorter synonym for the _-no-ignore-parallel-conflicts_ 13530 option. 13531 13532'-warn-unmatched-high' 13533 This option tells the assembler to produce a warning message if a 13534 '.high' pseudo op is encountered without a matching '.low' pseudo 13535 op. The presence of such an unmatched pseudo op usually indicates 13536 a programming error. 13537 13538'-no-warn-unmatched-high' 13539 Disables a previously enabled _-warn-unmatched-high_ option. 13540 13541'-Wuh' 13542 This is a shorter synonym for the _-warn-unmatched-high_ option. 13543 13544'-Wnuh' 13545 This is a shorter synonym for the _-no-warn-unmatched-high_ option. 13546 13547 13548File: as.info, Node: M32R-Directives, Next: M32R-Warnings, Prev: M32R-Opts, Up: M32R-Dependent 13549 135509.21.2 M32R Directives 13551---------------------- 13552 13553The Renesas M32R version of 'as' has a few architecture specific 13554directives: 13555 13556'low EXPRESSION' 13557 The 'low' directive computes the value of its expression and places 13558 the lower 16-bits of the result into the immediate-field of the 13559 instruction. For example: 13560 13561 or3 r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678 13562 add3, r0, r0, #low(fred) ; compute r0 = r0 + low 16-bits of address of fred 13563 13564'high EXPRESSION' 13565 The 'high' directive computes the value of its expression and 13566 places the upper 16-bits of the result into the immediate-field of 13567 the instruction. For example: 13568 13569 seth r0, #high(0x12345678) ; compute r0 = 0x12340000 13570 seth, r0, #high(fred) ; compute r0 = upper 16-bits of address of fred 13571 13572'shigh EXPRESSION' 13573 The 'shigh' directive is very similar to the 'high' directive. It 13574 also computes the value of its expression and places the upper 13575 16-bits of the result into the immediate-field of the instruction. 13576 The difference is that 'shigh' also checks to see if the lower 13577 16-bits could be interpreted as a signed number, and if so it 13578 assumes that a borrow will occur from the upper-16 bits. To 13579 compensate for this the 'shigh' directive pre-biases the upper 16 13580 bit value by adding one to it. For example: 13581 13582 For example: 13583 13584 seth r0, #shigh(0x12345678) ; compute r0 = 0x12340000 13585 seth r0, #shigh(0x00008000) ; compute r0 = 0x00010000 13586 13587 In the second example the lower 16-bits are 0x8000. If these are 13588 treated as a signed value and sign extended to 32-bits then the 13589 value becomes 0xffff8000. If this value is then added to 13590 0x00010000 then the result is 0x00008000. 13591 13592 This behaviour is to allow for the different semantics of the 'or3' 13593 and 'add3' instructions. The 'or3' instruction treats its 16-bit 13594 immediate argument as unsigned whereas the 'add3' treats its 16-bit 13595 immediate as a signed value. So for example: 13596 13597 seth r0, #shigh(0x00008000) 13598 add3 r0, r0, #low(0x00008000) 13599 13600 Produces the correct result in r0, whereas: 13601 13602 seth r0, #shigh(0x00008000) 13603 or3 r0, r0, #low(0x00008000) 13604 13605 Stores 0xffff8000 into r0. 13606 13607 Note - the 'shigh' directive does not know where in the assembly 13608 source code the lower 16-bits of the value are going set, so it 13609 cannot check to make sure that an 'or3' instruction is being used 13610 rather than an 'add3' instruction. It is up to the programmer to 13611 make sure that correct directives are used. 13612 13613'.m32r' 13614 The directive performs a similar thing as the _-m32r_ command line 13615 option. It tells the assembler to only accept M32R instructions 13616 from now on. An instructions from later M32R architectures are 13617 refused. 13618 13619'.m32rx' 13620 The directive performs a similar thing as the _-m32rx_ command line 13621 option. It tells the assembler to start accepting the extra 13622 instructions in the M32RX ISA as well as the ordinary M32R ISA. 13623 13624'.m32r2' 13625 The directive performs a similar thing as the _-m32r2_ command line 13626 option. It tells the assembler to start accepting the extra 13627 instructions in the M32R2 ISA as well as the ordinary M32R ISA. 13628 13629'.little' 13630 The directive performs a similar thing as the _-little_ command 13631 line option. It tells the assembler to start producing 13632 little-endian code and data. This option should be used with care 13633 as producing mixed-endian binary files is fraught with danger. 13634 13635'.big' 13636 The directive performs a similar thing as the _-big_ command line 13637 option. It tells the assembler to start producing big-endian code 13638 and data. This option should be used with care as producing 13639 mixed-endian binary files is fraught with danger. 13640 13641 13642File: as.info, Node: M32R-Warnings, Prev: M32R-Directives, Up: M32R-Dependent 13643 136449.21.3 M32R Warnings 13645-------------------- 13646 13647There are several warning and error messages that can be produced by 13648'as' which are specific to the M32R: 13649 13650'output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?' 13651 This message is only produced if warnings for explicit parallel 13652 conflicts have been enabled. It indicates that the assembler has 13653 encountered a parallel instruction in which the destination 13654 register of the left hand instruction is used as an input register 13655 in the right hand instruction. For example in this code fragment 13656 'mv r1, r2 || neg r3, r1' register r1 is the destination of the 13657 move instruction and the input to the neg instruction. 13658 13659'output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?' 13660 This message is only produced if warnings for explicit parallel 13661 conflicts have been enabled. It indicates that the assembler has 13662 encountered a parallel instruction in which the destination 13663 register of the right hand instruction is used as an input register 13664 in the left hand instruction. For example in this code fragment 13665 'mv r1, r2 || neg r2, r3' register r2 is the destination of the neg 13666 instruction and the input to the move instruction. 13667 13668'instruction '...' is for the M32RX only' 13669 This message is produced when the assembler encounters an 13670 instruction which is only supported by the M32Rx processor, and the 13671 '-m32rx' command-line flag has not been specified to allow assembly 13672 of such instructions. 13673 13674'unknown instruction '...'' 13675 This message is produced when the assembler encounters an 13676 instruction which it does not recognize. 13677 13678'only the NOP instruction can be issued in parallel on the m32r' 13679 This message is produced when the assembler encounters a parallel 13680 instruction which does not involve a NOP instruction and the 13681 '-m32rx' command-line flag has not been specified. Only the M32Rx 13682 processor is able to execute two instructions in parallel. 13683 13684'instruction '...' cannot be executed in parallel.' 13685 This message is produced when the assembler encounters a parallel 13686 instruction which is made up of one or two instructions which 13687 cannot be executed in parallel. 13688 13689'Instructions share the same execution pipeline' 13690 This message is produced when the assembler encounters a parallel 13691 instruction whose components both use the same execution pipeline. 13692 13693'Instructions write to the same destination register.' 13694 This message is produced when the assembler encounters a parallel 13695 instruction where both components attempt to modify the same 13696 register. For example these code fragments will produce this 13697 message: 'mv r1, r2 || neg r1, r3' 'jl r0 || mv r14, r1' 'st r2, 13698 @-r1 || mv r1, r3' 'mv r1, r2 || ld r0, @r1+' 'cmp r1, r2 || addx 13699 r3, r4' (Both write to the condition bit) 13700 13701 13702File: as.info, Node: M68K-Dependent, Next: M68HC11-Dependent, Prev: M32R-Dependent, Up: Machine Dependencies 13703 137049.22 M680x0 Dependent Features 13705============================== 13706 13707* Menu: 13708 13709* M68K-Opts:: M680x0 Options 13710* M68K-Syntax:: Syntax 13711* M68K-Moto-Syntax:: Motorola Syntax 13712* M68K-Float:: Floating Point 13713* M68K-Directives:: 680x0 Machine Directives 13714* M68K-opcodes:: Opcodes 13715 13716 13717File: as.info, Node: M68K-Opts, Next: M68K-Syntax, Up: M68K-Dependent 13718 137199.22.1 M680x0 Options 13720--------------------- 13721 13722The Motorola 680x0 version of 'as' has a few machine dependent options: 13723 13724'-march=ARCHITECTURE' 13725 This option specifies a target architecture. The following 13726 architectures are recognized: '68000', '68010', '68020', '68030', 13727 '68040', '68060', 'cpu32', 'isaa', 'isaaplus', 'isab', 'isac' and 13728 'cfv4e'. 13729 13730'-mcpu=CPU' 13731 This option specifies a target cpu. When used in conjunction with 13732 the '-march' option, the cpu must be within the specified 13733 architecture. Also, the generic features of the architecture are 13734 used for instruction generation, rather than those of the specific 13735 chip. 13736 13737'-m[no-]68851' 13738'-m[no-]68881' 13739'-m[no-]div' 13740'-m[no-]usp' 13741'-m[no-]float' 13742'-m[no-]mac' 13743'-m[no-]emac' 13744 13745 Enable or disable various architecture specific features. If a 13746 chip or architecture by default supports an option (for instance 13747 '-march=isaaplus' includes the '-mdiv' option), explicitly 13748 disabling the option will override the default. 13749 13750'-l' 13751 You can use the '-l' option to shorten the size of references to 13752 undefined symbols. If you do not use the '-l' option, references 13753 to undefined symbols are wide enough for a full 'long' (32 bits). 13754 (Since 'as' cannot know where these symbols end up, 'as' can only 13755 allocate space for the linker to fill in later. Since 'as' does 13756 not know how far away these symbols are, it allocates as much space 13757 as it can.) If you use this option, the references are only one 13758 word wide (16 bits). This may be useful if you want the object 13759 file to be as small as possible, and you know that the relevant 13760 symbols are always less than 17 bits away. 13761 13762'--register-prefix-optional' 13763 For some configurations, especially those where the compiler 13764 normally does not prepend an underscore to the names of user 13765 variables, the assembler requires a '%' before any use of a 13766 register name. This is intended to let the assembler distinguish 13767 between C variables and functions named 'a0' through 'a7', and so 13768 on. The '%' is always accepted, but is not required for certain 13769 configurations, notably 'sun3'. The '--register-prefix-optional' 13770 option may be used to permit omitting the '%' even for 13771 configurations for which it is normally required. If this is done, 13772 it will generally be impossible to refer to C variables and 13773 functions with the same names as register names. 13774 13775'--bitwise-or' 13776 Normally the character '|' is treated as a comment character, which 13777 means that it can not be used in expressions. The '--bitwise-or' 13778 option turns '|' into a normal character. In this mode, you must 13779 either use C style comments, or start comments with a '#' character 13780 at the beginning of a line. 13781 13782'--base-size-default-16 --base-size-default-32' 13783 If you use an addressing mode with a base register without 13784 specifying the size, 'as' will normally use the full 32 bit value. 13785 For example, the addressing mode '%a0@(%d0)' is equivalent to 13786 '%a0@(%d0:l)'. You may use the '--base-size-default-16' option to 13787 tell 'as' to default to using the 16 bit value. In this case, 13788 '%a0@(%d0)' is equivalent to '%a0@(%d0:w)'. You may use the 13789 '--base-size-default-32' option to restore the default behaviour. 13790 13791'--disp-size-default-16 --disp-size-default-32' 13792 If you use an addressing mode with a displacement, and the value of 13793 the displacement is not known, 'as' will normally assume that the 13794 value is 32 bits. For example, if the symbol 'disp' has not been 13795 defined, 'as' will assemble the addressing mode '%a0@(disp,%d0)' as 13796 though 'disp' is a 32 bit value. You may use the 13797 '--disp-size-default-16' option to tell 'as' to instead assume that 13798 the displacement is 16 bits. In this case, 'as' will assemble 13799 '%a0@(disp,%d0)' as though 'disp' is a 16 bit value. You may use 13800 the '--disp-size-default-32' option to restore the default 13801 behaviour. 13802 13803'--pcrel' 13804 Always keep branches PC-relative. In the M680x0 architecture all 13805 branches are defined as PC-relative. However, on some processors 13806 they are limited to word displacements maximum. When 'as' needs a 13807 long branch that is not available, it normally emits an absolute 13808 jump instead. This option disables this substitution. When this 13809 option is given and no long branches are available, only word 13810 branches will be emitted. An error message will be generated if a 13811 word branch cannot reach its target. This option has no effect on 13812 68020 and other processors that have long branches. *note Branch 13813 Improvement: M68K-Branch. 13814 13815'-m68000' 13816 'as' can assemble code for several different members of the 13817 Motorola 680x0 family. The default depends upon how 'as' was 13818 configured when it was built; normally, the default is to assemble 13819 code for the 68020 microprocessor. The following options may be 13820 used to change the default. These options control which 13821 instructions and addressing modes are permitted. The members of 13822 the 680x0 family are very similar. For detailed information about 13823 the differences, see the Motorola manuals. 13824 13825 '-m68000' 13826 '-m68ec000' 13827 '-m68hc000' 13828 '-m68hc001' 13829 '-m68008' 13830 '-m68302' 13831 '-m68306' 13832 '-m68307' 13833 '-m68322' 13834 '-m68356' 13835 Assemble for the 68000. '-m68008', '-m68302', and so on are 13836 synonyms for '-m68000', since the chips are the same from the 13837 point of view of the assembler. 13838 13839 '-m68010' 13840 Assemble for the 68010. 13841 13842 '-m68020' 13843 '-m68ec020' 13844 Assemble for the 68020. This is normally the default. 13845 13846 '-m68030' 13847 '-m68ec030' 13848 Assemble for the 68030. 13849 13850 '-m68040' 13851 '-m68ec040' 13852 Assemble for the 68040. 13853 13854 '-m68060' 13855 '-m68ec060' 13856 Assemble for the 68060. 13857 13858 '-mcpu32' 13859 '-m68330' 13860 '-m68331' 13861 '-m68332' 13862 '-m68333' 13863 '-m68334' 13864 '-m68336' 13865 '-m68340' 13866 '-m68341' 13867 '-m68349' 13868 '-m68360' 13869 Assemble for the CPU32 family of chips. 13870 13871 '-m5200' 13872 '-m5202' 13873 '-m5204' 13874 '-m5206' 13875 '-m5206e' 13876 '-m521x' 13877 '-m5249' 13878 '-m528x' 13879 '-m5307' 13880 '-m5407' 13881 '-m547x' 13882 '-m548x' 13883 '-mcfv4' 13884 '-mcfv4e' 13885 Assemble for the ColdFire family of chips. 13886 13887 '-m68881' 13888 '-m68882' 13889 Assemble 68881 floating point instructions. This is the 13890 default for the 68020, 68030, and the CPU32. The 68040 and 13891 68060 always support floating point instructions. 13892 13893 '-mno-68881' 13894 Do not assemble 68881 floating point instructions. This is 13895 the default for 68000 and the 68010. The 68040 and 68060 13896 always support floating point instructions, even if this 13897 option is used. 13898 13899 '-m68851' 13900 Assemble 68851 MMU instructions. This is the default for the 13901 68020, 68030, and 68060. The 68040 accepts a somewhat 13902 different set of MMU instructions; '-m68851' and '-m68040' 13903 should not be used together. 13904 13905 '-mno-68851' 13906 Do not assemble 68851 MMU instructions. This is the default 13907 for the 68000, 68010, and the CPU32. The 68040 accepts a 13908 somewhat different set of MMU instructions. 13909 13910 13911File: as.info, Node: M68K-Syntax, Next: M68K-Moto-Syntax, Prev: M68K-Opts, Up: M68K-Dependent 13912 139139.22.2 Syntax 13914------------- 13915 13916This syntax for the Motorola 680x0 was developed at MIT. 13917 13918 The 680x0 version of 'as' uses instructions names and syntax 13919compatible with the Sun assembler. Intervening periods are ignored; for 13920example, 'movl' is equivalent to 'mov.l'. 13921 13922 In the following table APC stands for any of the address registers 13923('%a0' through '%a7'), the program counter ('%pc'), the zero-address 13924relative to the program counter ('%zpc'), a suppressed address register 13925('%za0' through '%za7'), or it may be omitted entirely. The use of SIZE 13926means one of 'w' or 'l', and it may be omitted, along with the leading 13927colon, unless a scale is also specified. The use of SCALE means one of 13928'1', '2', '4', or '8', and it may always be omitted along with the 13929leading colon. 13930 13931 The following addressing modes are understood: 13932"Immediate" 13933 '#NUMBER' 13934 13935"Data Register" 13936 '%d0' through '%d7' 13937 13938"Address Register" 13939 '%a0' through '%a7' 13940 '%a7' is also known as '%sp', i.e., the Stack Pointer. '%a6' is 13941 also known as '%fp', the Frame Pointer. 13942 13943"Address Register Indirect" 13944 '%a0@' through '%a7@' 13945 13946"Address Register Postincrement" 13947 '%a0@+' through '%a7@+' 13948 13949"Address Register Predecrement" 13950 '%a0@-' through '%a7@-' 13951 13952"Indirect Plus Offset" 13953 'APC@(NUMBER)' 13954 13955"Index" 13956 'APC@(NUMBER,REGISTER:SIZE:SCALE)' 13957 13958 The NUMBER may be omitted. 13959 13960"Postindex" 13961 'APC@(NUMBER)@(ONUMBER,REGISTER:SIZE:SCALE)' 13962 13963 The ONUMBER or the REGISTER, but not both, may be omitted. 13964 13965"Preindex" 13966 'APC@(NUMBER,REGISTER:SIZE:SCALE)@(ONUMBER)' 13967 13968 The NUMBER may be omitted. Omitting the REGISTER produces the 13969 Postindex addressing mode. 13970 13971"Absolute" 13972 'SYMBOL', or 'DIGITS', optionally followed by ':b', ':w', or ':l'. 13973 13974 13975File: as.info, Node: M68K-Moto-Syntax, Next: M68K-Float, Prev: M68K-Syntax, Up: M68K-Dependent 13976 139779.22.3 Motorola Syntax 13978---------------------- 13979 13980The standard Motorola syntax for this chip differs from the syntax 13981already discussed (*note Syntax: M68K-Syntax.). 'as' can accept 13982Motorola syntax for operands, even if MIT syntax is used for other 13983operands in the same instruction. The two kinds of syntax are fully 13984compatible. 13985 13986 In the following table APC stands for any of the address registers 13987('%a0' through '%a7'), the program counter ('%pc'), the zero-address 13988relative to the program counter ('%zpc'), or a suppressed address 13989register ('%za0' through '%za7'). The use of SIZE means one of 'w' or 13990'l', and it may always be omitted along with the leading dot. The use 13991of SCALE means one of '1', '2', '4', or '8', and it may always be 13992omitted along with the leading asterisk. 13993 13994 The following additional addressing modes are understood: 13995 13996"Address Register Indirect" 13997 '(%a0)' through '(%a7)' 13998 '%a7' is also known as '%sp', i.e., the Stack Pointer. '%a6' is 13999 also known as '%fp', the Frame Pointer. 14000 14001"Address Register Postincrement" 14002 '(%a0)+' through '(%a7)+' 14003 14004"Address Register Predecrement" 14005 '-(%a0)' through '-(%a7)' 14006 14007"Indirect Plus Offset" 14008 'NUMBER(%A0)' through 'NUMBER(%A7)', or 'NUMBER(%PC)'. 14009 14010 The NUMBER may also appear within the parentheses, as in 14011 '(NUMBER,%A0)'. When used with the PC, the NUMBER may be omitted 14012 (with an address register, omitting the NUMBER produces Address 14013 Register Indirect mode). 14014 14015"Index" 14016 'NUMBER(APC,REGISTER.SIZE*SCALE)' 14017 14018 The NUMBER may be omitted, or it may appear within the parentheses. 14019 The APC may be omitted. The REGISTER and the APC may appear in 14020 either order. If both APC and REGISTER are address registers, and 14021 the SIZE and SCALE are omitted, then the first register is taken as 14022 the base register, and the second as the index register. 14023 14024"Postindex" 14025 '([NUMBER,APC],REGISTER.SIZE*SCALE,ONUMBER)' 14026 14027 The ONUMBER, or the REGISTER, or both, may be omitted. Either the 14028 NUMBER or the APC may be omitted, but not both. 14029 14030"Preindex" 14031 '([NUMBER,APC,REGISTER.SIZE*SCALE],ONUMBER)' 14032 14033 The NUMBER, or the APC, or the REGISTER, or any two of them, may be 14034 omitted. The ONUMBER may be omitted. The REGISTER and the APC may 14035 appear in either order. If both APC and REGISTER are address 14036 registers, and the SIZE and SCALE are omitted, then the first 14037 register is taken as the base register, and the second as the index 14038 register. 14039 14040 14041File: as.info, Node: M68K-Float, Next: M68K-Directives, Prev: M68K-Moto-Syntax, Up: M68K-Dependent 14042 140439.22.4 Floating Point 14044--------------------- 14045 14046Packed decimal (P) format floating literals are not supported. Feel 14047free to add the code! 14048 14049 The floating point formats generated by directives are these. 14050 14051'.float' 14052 'Single' precision floating point constants. 14053 14054'.double' 14055 'Double' precision floating point constants. 14056 14057'.extend' 14058'.ldouble' 14059 'Extended' precision ('long double') floating point constants. 14060 14061 14062File: as.info, Node: M68K-Directives, Next: M68K-opcodes, Prev: M68K-Float, Up: M68K-Dependent 14063 140649.22.5 680x0 Machine Directives 14065------------------------------- 14066 14067In order to be compatible with the Sun assembler the 680x0 assembler 14068understands the following directives. 14069 14070'.data1' 14071 This directive is identical to a '.data 1' directive. 14072 14073'.data2' 14074 This directive is identical to a '.data 2' directive. 14075 14076'.even' 14077 This directive is a special case of the '.align' directive; it 14078 aligns the output to an even byte boundary. 14079 14080'.skip' 14081 This directive is identical to a '.space' directive. 14082 14083'.arch NAME' 14084 Select the target architecture and extension features. Valid 14085 values for NAME are the same as for the '-march' command-line 14086 option. This directive cannot be specified after any instructions 14087 have been assembled. If it is given multiple times, or in 14088 conjunction with the '-march' option, all uses must be for the same 14089 architecture and extension set. 14090 14091'.cpu NAME' 14092 Select the target cpu. Valid values for NAME are the same as for 14093 the '-mcpu' command-line option. This directive cannot be 14094 specified after any instructions have been assembled. If it is 14095 given multiple times, or in conjunction with the '-mopt' option, 14096 all uses must be for the same cpu. 14097 14098 14099File: as.info, Node: M68K-opcodes, Prev: M68K-Directives, Up: M68K-Dependent 14100 141019.22.6 Opcodes 14102-------------- 14103 14104* Menu: 14105 14106* M68K-Branch:: Branch Improvement 14107* M68K-Chars:: Special Characters 14108 14109 14110File: as.info, Node: M68K-Branch, Next: M68K-Chars, Up: M68K-opcodes 14111 141129.22.6.1 Branch Improvement 14113........................... 14114 14115Certain pseudo opcodes are permitted for branch instructions. They 14116expand to the shortest branch instruction that reach the target. 14117Generally these mnemonics are made by substituting 'j' for 'b' at the 14118start of a Motorola mnemonic. 14119 14120 The following table summarizes the pseudo-operations. A '*' flags 14121cases that are more fully described after the table: 14122 14123 Displacement 14124 +------------------------------------------------------------ 14125 | 68020 68000/10, not PC-relative OK 14126 Pseudo-Op |BYTE WORD LONG ABSOLUTE LONG JUMP ** 14127 +------------------------------------------------------------ 14128 jbsr |bsrs bsrw bsrl jsr 14129 jra |bras braw bral jmp 14130 * jXX |bXXs bXXw bXXl bNXs;jmp 14131 * dbXX | N/A dbXXw dbXX;bras;bral dbXX;bras;jmp 14132 fjXX | N/A fbXXw fbXXl N/A 14133 14134 XX: condition 14135 NX: negative of condition XX 14136 14137 '*'--see full description below 14138 '**'--this expansion mode is disallowed by '--pcrel' 14139 14140'jbsr' 14141'jra' 14142 These are the simplest jump pseudo-operations; they always map to 14143 one particular machine instruction, depending on the displacement 14144 to the branch target. This instruction will be a byte or word 14145 branch is that is sufficient. Otherwise, a long branch will be 14146 emitted if available. If no long branches are available and the 14147 '--pcrel' option is not given, an absolute long jump will be 14148 emitted instead. If no long branches are available, the '--pcrel' 14149 option is given, and a word branch cannot reach the target, an 14150 error message is generated. 14151 14152 In addition to standard branch operands, 'as' allows these 14153 pseudo-operations to have all operands that are allowed for jsr and 14154 jmp, substituting these instructions if the operand given is not 14155 valid for a branch instruction. 14156 14157'jXX' 14158 Here, 'jXX' stands for an entire family of pseudo-operations, where 14159 XX is a conditional branch or condition-code test. The full list 14160 of pseudo-ops in this family is: 14161 jhi jls jcc jcs jne jeq jvc 14162 jvs jpl jmi jge jlt jgt jle 14163 14164 Usually, each of these pseudo-operations expands to a single branch 14165 instruction. However, if a word branch is not sufficient, no long 14166 branches are available, and the '--pcrel' option is not given, 'as' 14167 issues a longer code fragment in terms of NX, the opposite 14168 condition to XX. For example, under these conditions: 14169 jXX foo 14170 gives 14171 bNXs oof 14172 jmp foo 14173 oof: 14174 14175'dbXX' 14176 The full family of pseudo-operations covered here is 14177 dbhi dbls dbcc dbcs dbne dbeq dbvc 14178 dbvs dbpl dbmi dbge dblt dbgt dble 14179 dbf dbra dbt 14180 14181 Motorola 'dbXX' instructions allow word displacements only. When a 14182 word displacement is sufficient, each of these pseudo-operations 14183 expands to the corresponding Motorola instruction. When a word 14184 displacement is not sufficient and long branches are available, 14185 when the source reads 'dbXX foo', 'as' emits 14186 dbXX oo1 14187 bras oo2 14188 oo1:bral foo 14189 oo2: 14190 14191 If, however, long branches are not available and the '--pcrel' 14192 option is not given, 'as' emits 14193 dbXX oo1 14194 bras oo2 14195 oo1:jmp foo 14196 oo2: 14197 14198'fjXX' 14199 This family includes 14200 fjne fjeq fjge fjlt fjgt fjle fjf 14201 fjt fjgl fjgle fjnge fjngl fjngle fjngt 14202 fjnle fjnlt fjoge fjogl fjogt fjole fjolt 14203 fjor fjseq fjsf fjsne fjst fjueq fjuge 14204 fjugt fjule fjult fjun 14205 14206 Each of these pseudo-operations always expands to a single Motorola 14207 coprocessor branch instruction, word or long. All Motorola 14208 coprocessor branch instructions allow both word and long 14209 displacements. 14210 14211 14212File: as.info, Node: M68K-Chars, Prev: M68K-Branch, Up: M68K-opcodes 14213 142149.22.6.2 Special Characters 14215........................... 14216 14217Line comments are introduced by the '|' character appearing anywhere on 14218a line, unless the '--bitwise-or' command-line option has been 14219specified. 14220 14221 An asterisk ('*') as the first character on a line marks the start of 14222a line comment as well. 14223 14224 A hash character ('#') as the first character on a line also marks 14225the start of a line comment, but in this case it could also be a logical 14226line number directive (*note Comments::) or a preprocessor control 14227command (*note Preprocessing::). If the hash character appears 14228elsewhere on a line it is used to introduce an immediate value. (This 14229is for compatibility with Sun's assembler). 14230 14231 Multiple statements on the same line can appear if they are separated 14232by the ';' character. 14233 14234 14235File: as.info, Node: M68HC11-Dependent, Next: S12Z-Dependent, Prev: M68K-Dependent, Up: Machine Dependencies 14236 142379.23 M68HC11 and M68HC12 Dependent Features 14238=========================================== 14239 14240* Menu: 14241 14242* M68HC11-Opts:: M68HC11 and M68HC12 Options 14243* M68HC11-Syntax:: Syntax 14244* M68HC11-Modifiers:: Symbolic Operand Modifiers 14245* M68HC11-Directives:: Assembler Directives 14246* M68HC11-Float:: Floating Point 14247* M68HC11-opcodes:: Opcodes 14248 14249 14250File: as.info, Node: M68HC11-Opts, Next: M68HC11-Syntax, Up: M68HC11-Dependent 14251 142529.23.1 M68HC11 and M68HC12 Options 14253---------------------------------- 14254 14255The Motorola 68HC11 and 68HC12 version of 'as' have a few machine 14256dependent options. 14257 14258'-m68hc11' 14259 This option switches the assembler into the M68HC11 mode. In this 14260 mode, the assembler only accepts 68HC11 operands and mnemonics. It 14261 produces code for the 68HC11. 14262 14263'-m68hc12' 14264 This option switches the assembler into the M68HC12 mode. In this 14265 mode, the assembler also accepts 68HC12 operands and mnemonics. It 14266 produces code for the 68HC12. A few 68HC11 instructions are 14267 replaced by some 68HC12 instructions as recommended by Motorola 14268 specifications. 14269 14270'-m68hcs12' 14271 This option switches the assembler into the M68HCS12 mode. This 14272 mode is similar to '-m68hc12' but specifies to assemble for the 14273 68HCS12 series. The only difference is on the assembling of the 14274 'movb' and 'movw' instruction when a PC-relative operand is used. 14275 14276'-mm9s12x' 14277 This option switches the assembler into the M9S12X mode. This mode 14278 is similar to '-m68hc12' but specifies to assemble for the S12X 14279 series which is a superset of the HCS12. 14280 14281'-mm9s12xg' 14282 This option switches the assembler into the XGATE mode for the RISC 14283 co-processor featured on some S12X-family chips. 14284 14285'--xgate-ramoffset' 14286 This option instructs the linker to offset RAM addresses from S12X 14287 address space into XGATE address space. 14288 14289'-mshort' 14290 This option controls the ABI and indicates to use a 16-bit integer 14291 ABI. It has no effect on the assembled instructions. This is the 14292 default. 14293 14294'-mlong' 14295 This option controls the ABI and indicates to use a 32-bit integer 14296 ABI. 14297 14298'-mshort-double' 14299 This option controls the ABI and indicates to use a 32-bit float 14300 ABI. This is the default. 14301 14302'-mlong-double' 14303 This option controls the ABI and indicates to use a 64-bit float 14304 ABI. 14305 14306'--strict-direct-mode' 14307 You can use the '--strict-direct-mode' option to disable the 14308 automatic translation of direct page mode addressing into extended 14309 mode when the instruction does not support direct mode. For 14310 example, the 'clr' instruction does not support direct page mode 14311 addressing. When it is used with the direct page mode, 'as' will 14312 ignore it and generate an absolute addressing. This option 14313 prevents 'as' from doing this, and the wrong usage of the direct 14314 page mode will raise an error. 14315 14316'--short-branches' 14317 The '--short-branches' option turns off the translation of relative 14318 branches into absolute branches when the branch offset is out of 14319 range. By default 'as' transforms the relative branch ('bsr', 14320 'bgt', 'bge', 'beq', 'bne', 'ble', 'blt', 'bhi', 'bcc', 'bls', 14321 'bcs', 'bmi', 'bvs', 'bvs', 'bra') into an absolute branch when the 14322 offset is out of the -128 .. 127 range. In that case, the 'bsr' 14323 instruction is translated into a 'jsr', the 'bra' instruction is 14324 translated into a 'jmp' and the conditional branches instructions 14325 are inverted and followed by a 'jmp'. This option disables these 14326 translations and 'as' will generate an error if a relative branch 14327 is out of range. This option does not affect the optimization 14328 associated to the 'jbra', 'jbsr' and 'jbXX' pseudo opcodes. 14329 14330'--force-long-branches' 14331 The '--force-long-branches' option forces the translation of 14332 relative branches into absolute branches. This option does not 14333 affect the optimization associated to the 'jbra', 'jbsr' and 'jbXX' 14334 pseudo opcodes. 14335 14336'--print-insn-syntax' 14337 You can use the '--print-insn-syntax' option to obtain the syntax 14338 description of the instruction when an error is detected. 14339 14340'--print-opcodes' 14341 The '--print-opcodes' option prints the list of all the 14342 instructions with their syntax. The first item of each line 14343 represents the instruction name and the rest of the line indicates 14344 the possible operands for that instruction. The list is printed in 14345 alphabetical order. Once the list is printed 'as' exits. 14346 14347'--generate-example' 14348 The '--generate-example' option is similar to '--print-opcodes' but 14349 it generates an example for each instruction instead. 14350 14351 14352File: as.info, Node: M68HC11-Syntax, Next: M68HC11-Modifiers, Prev: M68HC11-Opts, Up: M68HC11-Dependent 14353 143549.23.2 Syntax 14355------------- 14356 14357In the M68HC11 syntax, the instruction name comes first and it may be 14358followed by one or several operands (up to three). Operands are 14359separated by comma (','). In the normal mode, 'as' will complain if too 14360many operands are specified for a given instruction. In the MRI mode 14361(turned on with '-M' option), it will treat them as comments. Example: 14362 14363 inx 14364 lda #23 14365 bset 2,x #4 14366 brclr *bot #8 foo 14367 14368 The presence of a ';' character or a '!' character anywhere on a line 14369indicates the start of a comment that extends to the end of that line. 14370 14371 A '*' or a '#' character at the start of a line also introduces a 14372line comment, but these characters do not work elsewhere on the line. 14373If the first character of the line is a '#' then as well as starting a 14374comment, the line could also be logical line number directive (*note 14375Comments::) or a preprocessor control command (*note Preprocessing::). 14376 14377 The M68HC11 assembler does not currently support a line separator 14378character. 14379 14380 The following addressing modes are understood for 68HC11 and 68HC12: 14381"Immediate" 14382 '#NUMBER' 14383 14384"Address Register" 14385 'NUMBER,X', 'NUMBER,Y' 14386 14387 The NUMBER may be omitted in which case 0 is assumed. 14388 14389"Direct Addressing mode" 14390 '*SYMBOL', or '*DIGITS' 14391 14392"Absolute" 14393 'SYMBOL', or 'DIGITS' 14394 14395 The M68HC12 has other more complex addressing modes. All of them are 14396supported and they are represented below: 14397 14398"Constant Offset Indexed Addressing Mode" 14399 'NUMBER,REG' 14400 14401 The NUMBER may be omitted in which case 0 is assumed. The register 14402 can be either 'X', 'Y', 'SP' or 'PC'. The assembler will use the 14403 smaller post-byte definition according to the constant value (5-bit 14404 constant offset, 9-bit constant offset or 16-bit constant offset). 14405 If the constant is not known by the assembler it will use the 14406 16-bit constant offset post-byte and the value will be resolved at 14407 link time. 14408 14409"Offset Indexed Indirect" 14410 '[NUMBER,REG]' 14411 14412 The register can be either 'X', 'Y', 'SP' or 'PC'. 14413 14414"Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement" 14415 'NUMBER,-REG' 'NUMBER,+REG' 'NUMBER,REG-' 'NUMBER,REG+' 14416 14417 The number must be in the range '-8'..'+8' and must not be 0. The 14418 register can be either 'X', 'Y', 'SP' or 'PC'. 14419 14420"Accumulator Offset" 14421 'ACC,REG' 14422 14423 The accumulator register can be either 'A', 'B' or 'D'. The 14424 register can be either 'X', 'Y', 'SP' or 'PC'. 14425 14426"Accumulator D offset indexed-indirect" 14427 '[D,REG]' 14428 14429 The register can be either 'X', 'Y', 'SP' or 'PC'. 14430 14431 For example: 14432 14433 ldab 1024,sp 14434 ldd [10,x] 14435 orab 3,+x 14436 stab -2,y- 14437 ldx a,pc 14438 sty [d,sp] 14439 14440 14441File: as.info, Node: M68HC11-Modifiers, Next: M68HC11-Directives, Prev: M68HC11-Syntax, Up: M68HC11-Dependent 14442 144439.23.3 Symbolic Operand Modifiers 14444--------------------------------- 14445 14446The assembler supports several modifiers when using symbol addresses in 1444768HC11 and 68HC12 instruction operands. The general syntax is the 14448following: 14449 14450 %modifier(symbol) 14451 14452'%addr' 14453 This modifier indicates to the assembler and linker to use the 14454 16-bit physical address corresponding to the symbol. This is 14455 intended to be used on memory window systems to map a symbol in the 14456 memory bank window. If the symbol is in a memory expansion part, 14457 the physical address corresponds to the symbol address within the 14458 memory bank window. If the symbol is not in a memory expansion 14459 part, this is the symbol address (using or not using the %addr 14460 modifier has no effect in that case). 14461 14462'%page' 14463 This modifier indicates to use the memory page number corresponding 14464 to the symbol. If the symbol is in a memory expansion part, its 14465 page number is computed by the linker as a number used to map the 14466 page containing the symbol in the memory bank window. If the 14467 symbol is not in a memory expansion part, the page number is 0. 14468 14469'%hi' 14470 This modifier indicates to use the 8-bit high part of the physical 14471 address of the symbol. 14472 14473'%lo' 14474 This modifier indicates to use the 8-bit low part of the physical 14475 address of the symbol. 14476 14477 For example a 68HC12 call to a function 'foo_example' stored in 14478memory expansion part could be written as follows: 14479 14480 call %addr(foo_example),%page(foo_example) 14481 14482 and this is equivalent to 14483 14484 call foo_example 14485 14486 And for 68HC11 it could be written as follows: 14487 14488 ldab #%page(foo_example) 14489 stab _page_switch 14490 jsr %addr(foo_example) 14491 14492 14493File: as.info, Node: M68HC11-Directives, Next: M68HC11-Float, Prev: M68HC11-Modifiers, Up: M68HC11-Dependent 14494 144959.23.4 Assembler Directives 14496--------------------------- 14497 14498The 68HC11 and 68HC12 version of 'as' have the following specific 14499assembler directives: 14500 14501'.relax' 14502 The relax directive is used by the 'GNU Compiler' to emit a 14503 specific relocation to mark a group of instructions for linker 14504 relaxation. The sequence of instructions within the group must be 14505 known to the linker so that relaxation can be performed. 14506 14507'.mode [mshort|mlong|mshort-double|mlong-double]' 14508 This directive specifies the ABI. It overrides the '-mshort', 14509 '-mlong', '-mshort-double' and '-mlong-double' options. 14510 14511'.far SYMBOL' 14512 This directive marks the symbol as a 'far' symbol meaning that it 14513 uses a 'call/rtc' calling convention as opposed to 'jsr/rts'. 14514 During a final link, the linker will identify references to the 14515 'far' symbol and will verify the proper calling convention. 14516 14517'.interrupt SYMBOL' 14518 This directive marks the symbol as an interrupt entry point. This 14519 information is then used by the debugger to correctly unwind the 14520 frame across interrupts. 14521 14522'.xrefb SYMBOL' 14523 This directive is defined for compatibility with the 'Specification 14524 for Motorola 8 and 16-Bit Assembly Language Input Standard' and is 14525 ignored. 14526 14527 14528File: as.info, Node: M68HC11-Float, Next: M68HC11-opcodes, Prev: M68HC11-Directives, Up: M68HC11-Dependent 14529 145309.23.5 Floating Point 14531--------------------- 14532 14533Packed decimal (P) format floating literals are not supported. Feel 14534free to add the code! 14535 14536 The floating point formats generated by directives are these. 14537 14538'.float' 14539 'Single' precision floating point constants. 14540 14541'.double' 14542 'Double' precision floating point constants. 14543 14544'.extend' 14545'.ldouble' 14546 'Extended' precision ('long double') floating point constants. 14547 14548 14549File: as.info, Node: M68HC11-opcodes, Prev: M68HC11-Float, Up: M68HC11-Dependent 14550 145519.23.6 Opcodes 14552-------------- 14553 14554* Menu: 14555 14556* M68HC11-Branch:: Branch Improvement 14557 14558 14559File: as.info, Node: M68HC11-Branch, Up: M68HC11-opcodes 14560 145619.23.6.1 Branch Improvement 14562........................... 14563 14564Certain pseudo opcodes are permitted for branch instructions. They 14565expand to the shortest branch instruction that reach the target. 14566Generally these mnemonics are made by prepending 'j' to the start of 14567Motorola mnemonic. These pseudo opcodes are not affected by the 14568'--short-branches' or '--force-long-branches' options. 14569 14570 The following table summarizes the pseudo-operations. 14571 14572 Displacement Width 14573 +-------------------------------------------------------------+ 14574 | Options | 14575 | --short-branches --force-long-branches | 14576 +--------------------------+----------------------------------+ 14577 Op |BYTE WORD | BYTE WORD | 14578 +--------------------------+----------------------------------+ 14579 bsr | bsr <pc-rel> <error> | jsr <abs> | 14580 bra | bra <pc-rel> <error> | jmp <abs> | 14581 jbsr | bsr <pc-rel> jsr <abs> | bsr <pc-rel> jsr <abs> | 14582 jbra | bra <pc-rel> jmp <abs> | bra <pc-rel> jmp <abs> | 14583 bXX | bXX <pc-rel> <error> | bNX +3; jmp <abs> | 14584 jbXX | bXX <pc-rel> bNX +3; | bXX <pc-rel> bNX +3; jmp <abs> | 14585 | jmp <abs> | | 14586 +--------------------------+----------------------------------+ 14587 XX: condition 14588 NX: negative of condition XX 14589 14590'jbsr' 14591'jbra' 14592 These are the simplest jump pseudo-operations; they always map to 14593 one particular machine instruction, depending on the displacement 14594 to the branch target. 14595 14596'jbXX' 14597 Here, 'jbXX' stands for an entire family of pseudo-operations, 14598 where XX is a conditional branch or condition-code test. The full 14599 list of pseudo-ops in this family is: 14600 jbcc jbeq jbge jbgt jbhi jbvs jbpl jblo 14601 jbcs jbne jblt jble jbls jbvc jbmi 14602 14603 For the cases of non-PC relative displacements and long 14604 displacements, 'as' issues a longer code fragment in terms of NX, 14605 the opposite condition to XX. For example, for the non-PC relative 14606 case: 14607 jbXX foo 14608 gives 14609 bNXs oof 14610 jmp foo 14611 oof: 14612 14613 14614File: as.info, Node: S12Z-Dependent, Next: Meta-Dependent, Prev: M68HC11-Dependent, Up: Machine Dependencies 14615 146169.24 S12Z Dependent Features 14617============================ 14618 14619The Freescale S12Z version of 'as' has a few machine dependent features. 14620 14621* Menu: 14622 14623* S12Z Options:: S12Z Options 14624* S12Z Syntax:: Syntax 14625 14626 14627File: as.info, Node: S12Z Options, Next: S12Z Syntax, Up: S12Z-Dependent 14628 146299.24.1 S12Z Options 14630------------------- 14631 14632The S12Z version of 'as' recognizes the following options: 14633 14634'-mreg-prefix=PREFIX' 14635 You can use the '-mreg-prefix=PFX' option to indicate that the 14636 assembler should expect all register names to be prefixed with the 14637 string PFX. 14638 14639 For an explanation of what this means and why it might be needed, 14640 see *note S12Z Register Notation::. 14641 14642'-mdollar-hex' 14643 The '-mdollar-hex' option affects the way that literal hexadecimal 14644 constants are represented. When this option is specified, the 14645 assembler will consider the '$' character as the start of a 14646 hexadecimal integer constant. Without this option, the standard 14647 value of '0x' is expected. 14648 14649 If you use this option, then you cannot have symbol names starting 14650 with '$'. '-mdollar-hex' is implied if the '--traditional-format' 14651 (*note traditional-format::) is used. 14652 14653 14654File: as.info, Node: S12Z Syntax, Prev: S12Z Options, Up: S12Z-Dependent 14655 146569.24.2 Syntax 14657------------- 14658 14659* Menu: 14660 14661* S12Z Syntax Overview:: General description 14662* S12Z Addressing Modes:: Operands and their semantics 14663* S12Z Register Notation:: How to refer to registers 14664 14665 14666File: as.info, Node: S12Z Syntax Overview, Next: S12Z Addressing Modes, Up: S12Z Syntax 14667 146689.24.2.1 Overview 14669................. 14670 14671In the S12Z syntax, the instruction name comes first and it may be 14672followed by one, or by several operands. In most cases the maximum 14673number of operands is three. Operands are separated by a comma (','). 14674A comma however does not act as a separator if it appears within 14675parentheses ('()') or within square brackets ('[]'). 'as' will complain 14676if too many, too few or inappropriate operands are specified for a given 14677instruction. 14678 14679 Some instructions accept and (in certain situations require) a suffix 14680indicating the size of the operand. The suffix is separated from the 14681instruction name by a period ('.') and may be one of 'b', 'w', 'p' or 14682'l' indicating 'byte' (a single byte), 'word' (2 bytes), 'pointer' (3 14683bytes) or 'long' (4 bytes) respectively. 14684 14685 Example: 14686 14687 bset.b 0xA98, #5 14688 mov.b #6, 0x2409 14689 ld d0, #4 14690 mov.l (d0, x), 0x2409 14691 inc d0 14692 cmp d0, #12 14693 blt *-4 14694 lea x, 0x2409 14695 st y, (1, x) 14696 14697 The presence of a ';' character anywhere on a line indicates the 14698start of a comment that extends to the end of that line. 14699 14700 A '*' or a '#' character at the start of a line also introduces a 14701line comment, but these characters do not work elsewhere on the line. 14702If the first character of the line is a '#' then as well as starting a 14703comment, the line could also be logical line number directive (*note 14704Comments::) or a preprocessor control command (*note Preprocessing::). 14705 14706 The S12Z assembler does not currently support a line separator 14707character. 14708 14709 14710File: as.info, Node: S12Z Addressing Modes, Next: S12Z Register Notation, Prev: S12Z Syntax Overview, Up: S12Z Syntax 14711 147129.24.2.2 Addressing Modes 14713......................... 14714 14715The following addressing modes are understood for the S12Z. 14716"Immediate" 14717 '#NUMBER' 14718 14719"Immediate Bit Field" 14720 '#WIDTH:OFFSET' 14721 14722 Bit field instructions in the immediate mode require the width and 14723 offset to be specified. The WIDTH parameter specifies the number 14724 of bits in the field. It should be a number in the range [1,32]. 14725 OFFSET determines the position within the field where the operation 14726 should start. It should be a number in the range [0,31]. 14727 14728"Relative" 14729 '*SYMBOL', or '*[+-]DIGITS' 14730 14731 Program counter relative addresses have a width of 15 bits. Thus, 14732 they must be within the range [-32768, 32767]. 14733 14734"Register" 14735 'REG' 14736 14737 Some instructions accept a register as an operand. In general, REG 14738 may be a data register ('D0', 'D1' ... 'D7'), the 'X' register or 14739 the 'Y' register. 14740 14741 A few instructions accept as an argument the stack pointer register 14742 ('S'), and/or the program counter ('P'). 14743 14744 Some very special instructions accept arguments which refer to the 14745 condition code register. For these arguments the syntax is 'CCR', 14746 'CCH' or 'CCL' which refer to the complete condition code register, 14747 the condition code register high byte and the condition code 14748 register low byte respectively. 14749 14750"Absolute Direct" 14751 'SYMBOL', or 'DIGITS' 14752 14753"Absolute Indirect" 14754 '[SYMBOL', or 'DIGITS]' 14755 14756"Constant Offset Indexed" 14757 '(NUMBER,REG)' 14758 14759 REG may be either 'X', 'Y', 'S' or 'P' or one of the data registers 14760 'D0', 'D1' ... 'D7'. If any of the registers 'D2' ... 'D5' are 14761 specified, then the register value is treated as a signed value. 14762 Otherwise it is treated as unsigned. NUMBER may be any integer in 14763 the range [-8388608,8388607]. 14764 14765"Offset Indexed Indirect" 14766 '[NUMBER,REG]' 14767 14768 REG may be either 'X', 'Y', 'S' or 'P'. NUMBER may be any integer 14769 in the range [-8388608,8388607]. 14770 14771"Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement" 14772 '-REG', '+REG', 'REG-' or 'REG+' 14773 14774 This addressing mode is typically used to access a value at an 14775 address, and simultaneously to increment/decrement the register 14776 pointing to that address. Thus REG may be any of the 24 bit 14777 registers 'X', 'Y', or 'S'. Pre-increment and post-decrement are 14778 not available for register 'S' (only post-increment and 14779 pre-decrement are available). 14780 14781"Register Offset Direct" 14782 '(DATA-REG,REG)' 14783 14784 REG can be either 'X', 'Y', or 'S'. DATA-REG must be one of the 14785 data registers 'D0', 'D1' ... 'D7'. If any of the registers 'D2' 14786 ... 'D5' are specified, then the register value is treated as a 14787 signed value. Otherwise it is treated as unsigned. 14788 14789"Register Offset Indirect" 14790 '[DATA-REG,REG]' 14791 14792 REG can be either 'X' or 'Y'. DATA-REG must be one of the data 14793 registers 'D0', 'D1' ... 'D7'. If any of the registers 'D2' ... 14794 'D5' are specified, then the register value is treated as a signed 14795 value. Otherwise it is treated as unsigned. 14796 14797 For example: 14798 14799 trap #197 ;; Immediate mode 14800 bra *+49 ;; Relative mode 14801 bra .L0 ;; ditto 14802 jmp 0xFE0034 ;; Absolute direct mode 14803 jmp [0xFD0012] ;; Absolute indirect mode 14804 inc.b (4,x) ;; Constant offset indexed mode 14805 jsr (45, d0) ;; ditto 14806 dec.w [4,y] ;; Constant offset indexed indirect mode 14807 clr.p (-s) ;; Pre-decrement mode 14808 neg.l (d0, s) ;; Register offset direct mode 14809 com.b [d1, x] ;; Register offset indirect mode 14810 psh cch ;; Register mode 14811 14812 14813File: as.info, Node: S12Z Register Notation, Prev: S12Z Addressing Modes, Up: S12Z Syntax 14814 148159.24.2.3 Register Notation 14816.......................... 14817 14818Without a register prefix (*note S12Z Options::), S12Z assembler code is 14819expected in the traditional format like this: 14820 lea s, (-2,s) 14821 st d2, (0,s) 14822 ld x, symbol 14823 tfr d2, d6 14824 cmp d6, #1532 14825 14826However, if 'as' is started with (for example) '-mreg-prefix=%' then all 14827register names must be prefixed with '%' as follows: 14828 lea %s, (-2,%s) 14829 st %d2, (0,%s) 14830 ld %x, symbol 14831 tfr %d2, %d6 14832 cmp %d6, #1532 14833 14834 The register prefix feature is intended to be used by compilers to 14835avoid ambiguity between symbols and register names. Consider the 14836following assembler instruction: 14837 st d0, d1 14838The destination operand of this instruction could either refer to the 14839register 'D1', or it could refer to the symbol named "d1". If the 14840latter is intended then 'as' must be invoked with '-mreg-prefix=PFX' and 14841the code written as 14842 st PFXd0, d1 14843where PFX is the chosen register prefix. For this reason, compiler 14844back-ends should choose a register prefix which cannot be confused with 14845a symbol name. 14846 14847 14848File: as.info, Node: Meta-Dependent, Next: MicroBlaze-Dependent, Prev: S12Z-Dependent, Up: Machine Dependencies 14849 148509.25 Meta Dependent Features 14851============================ 14852 14853* Menu: 14854 14855* Meta Options:: Options 14856* Meta Syntax:: Meta Assembler Syntax 14857 14858 14859File: as.info, Node: Meta Options, Next: Meta Syntax, Up: Meta-Dependent 14860 148619.25.1 Options 14862-------------- 14863 14864The Imagination Technologies Meta architecture is implemented in a 14865number of versions, with each new version adding new features such as 14866instructions and registers. For precise details of what instructions 14867each core supports, please see the chip's technical reference manual. 14868 14869 The following table lists all available Meta options. 14870 14871'-mcpu=metac11' 14872 Generate code for Meta 1.1. 14873 14874'-mcpu=metac12' 14875 Generate code for Meta 1.2. 14876 14877'-mcpu=metac21' 14878 Generate code for Meta 2.1. 14879 14880'-mfpu=metac21' 14881 Allow code to use FPU hardware of Meta 2.1. 14882 14883 14884File: as.info, Node: Meta Syntax, Prev: Meta Options, Up: Meta-Dependent 14885 148869.25.2 Syntax 14887------------- 14888 14889* Menu: 14890 14891* Meta-Chars:: Special Characters 14892* Meta-Regs:: Register Names 14893 14894 14895File: as.info, Node: Meta-Chars, Next: Meta-Regs, Up: Meta Syntax 14896 148979.25.2.1 Special Characters 14898........................... 14899 14900'!' is the line comment character. 14901 14902 You can use ';' instead of a newline to separate statements. 14903 14904 Since '$' has no special meaning, you may use it in symbol names. 14905 14906 14907File: as.info, Node: Meta-Regs, Prev: Meta-Chars, Up: Meta Syntax 14908 149099.25.2.2 Register Names 14910....................... 14911 14912Registers can be specified either using their mnemonic names, such as 14913'D0Re0', or using the unit plus register number separated by a '.', such 14914as 'D0.0'. 14915 14916 14917File: as.info, Node: MicroBlaze-Dependent, Next: MIPS-Dependent, Prev: Meta-Dependent, Up: Machine Dependencies 14918 149199.26 MicroBlaze Dependent Features 14920================================== 14921 14922The Xilinx MicroBlaze processor family includes several variants, all 14923using the same core instruction set. This chapter covers features of 14924the GNU assembler that are specific to the MicroBlaze architecture. For 14925details about the MicroBlaze instruction set, please see the 'MicroBlaze 14926Processor Reference Guide (UG081)' available at www.xilinx.com. 14927 14928* Menu: 14929 14930* MicroBlaze Directives:: Directives for MicroBlaze Processors. 14931* MicroBlaze Syntax:: Syntax for the MicroBlaze 14932 14933 14934File: as.info, Node: MicroBlaze Directives, Next: MicroBlaze Syntax, Up: MicroBlaze-Dependent 14935 149369.26.1 Directives 14937----------------- 14938 14939A number of assembler directives are available for MicroBlaze. 14940 14941'.data8 EXPRESSION,...' 14942 This directive is an alias for '.byte'. Each expression is 14943 assembled into an eight-bit value. 14944 14945'.data16 EXPRESSION,...' 14946 This directive is an alias for '.hword'. Each expression is 14947 assembled into an 16-bit value. 14948 14949'.data32 EXPRESSION,...' 14950 This directive is an alias for '.word'. Each expression is 14951 assembled into an 32-bit value. 14952 14953'.ent NAME[,LABEL]' 14954 This directive is an alias for '.func' denoting the start of 14955 function NAME at (optional) LABEL. 14956 14957'.end NAME[,LABEL]' 14958 This directive is an alias for '.endfunc' denoting the end of 14959 function NAME. 14960 14961'.gpword LABEL,...' 14962 This directive is an alias for '.rva'. The resolved address of 14963 LABEL is stored in the data section. 14964 14965'.weakext LABEL' 14966 Declare that LABEL is a weak external symbol. 14967 14968'.rodata' 14969 Switch to .rodata section. Equivalent to '.section .rodata' 14970 14971'.sdata2' 14972 Switch to .sdata2 section. Equivalent to '.section .sdata2' 14973 14974'.sdata' 14975 Switch to .sdata section. Equivalent to '.section .sdata' 14976 14977'.bss' 14978 Switch to .bss section. Equivalent to '.section .bss' 14979 14980'.sbss' 14981 Switch to .sbss section. Equivalent to '.section .sbss' 14982 14983 14984File: as.info, Node: MicroBlaze Syntax, Prev: MicroBlaze Directives, Up: MicroBlaze-Dependent 14985 149869.26.2 Syntax for the MicroBlaze 14987-------------------------------- 14988 14989* Menu: 14990 14991* MicroBlaze-Chars:: Special Characters 14992 14993 14994File: as.info, Node: MicroBlaze-Chars, Up: MicroBlaze Syntax 14995 149969.26.2.1 Special Characters 14997........................... 14998 14999The presence of a '#' on a line indicates the start of a comment that 15000extends to the end of the current line. 15001 15002 If a '#' appears as the first character of a line, the whole line is 15003treated as a comment, but in this case the line can also be a logical 15004line number directive (*note Comments::) or a preprocessor control 15005command (*note Preprocessing::). 15006 15007 The ';' character can be used to separate statements on the same 15008line. 15009 15010 15011File: as.info, Node: MIPS-Dependent, Next: MMIX-Dependent, Prev: MicroBlaze-Dependent, Up: Machine Dependencies 15012 150139.27 MIPS Dependent Features 15014============================ 15015 15016GNU 'as' for MIPS architectures supports several different MIPS 15017processors, and MIPS ISA levels I through V, MIPS32, and MIPS64. For 15018information about the MIPS instruction set, see 'MIPS RISC 15019Architecture', by Kane and Heindrich (Prentice-Hall). For an overview 15020of MIPS assembly conventions, see "Appendix D: Assembly Language 15021Programming" in the same work. 15022 15023* Menu: 15024 15025* MIPS Options:: Assembler options 15026* MIPS Macros:: High-level assembly macros 15027* MIPS Symbol Sizes:: Directives to override the size of symbols 15028* MIPS Small Data:: Controlling the use of small data accesses 15029* MIPS ISA:: Directives to override the ISA level 15030* MIPS assembly options:: Directives to control code generation 15031* MIPS autoextend:: Directives for extending MIPS 16 bit instructions 15032* MIPS insn:: Directive to mark data as an instruction 15033* MIPS FP ABIs:: Marking which FP ABI is in use 15034* MIPS NaN Encodings:: Directives to record which NaN encoding is being used 15035* MIPS Option Stack:: Directives to save and restore options 15036* MIPS ASE Instruction Generation Overrides:: Directives to control 15037 generation of MIPS ASE instructions 15038* MIPS Floating-Point:: Directives to override floating-point options 15039* MIPS Syntax:: MIPS specific syntactical considerations 15040 15041 15042File: as.info, Node: MIPS Options, Next: MIPS Macros, Up: MIPS-Dependent 15043 150449.27.1 Assembler options 15045------------------------ 15046 15047The MIPS configurations of GNU 'as' support these special options: 15048 15049'-G NUM' 15050 Set the "small data" limit to N bytes. The default limit is 8 15051 bytes. *Note Controlling the use of small data accesses: MIPS 15052 Small Data. 15053 15054'-EB' 15055'-EL' 15056 Any MIPS configuration of 'as' can select big-endian or 15057 little-endian output at run time (unlike the other GNU development 15058 tools, which must be configured for one or the other). Use '-EB' 15059 to select big-endian output, and '-EL' for little-endian. 15060 15061'-KPIC' 15062 Generate SVR4-style PIC. This option tells the assembler to 15063 generate SVR4-style position-independent macro expansions. It also 15064 tells the assembler to mark the output file as PIC. 15065 15066'-mvxworks-pic' 15067 Generate VxWorks PIC. This option tells the assembler to generate 15068 VxWorks-style position-independent macro expansions. 15069 15070'-mips1' 15071'-mips2' 15072'-mips3' 15073'-mips4' 15074'-mips5' 15075'-mips32' 15076'-mips32r2' 15077'-mips32r3' 15078'-mips32r5' 15079'-mips32r6' 15080'-mips64' 15081'-mips64r2' 15082'-mips64r3' 15083'-mips64r5' 15084'-mips64r6' 15085 Generate code for a particular MIPS Instruction Set Architecture 15086 level. '-mips1' corresponds to the R2000 and R3000 processors, 15087 '-mips2' to the R6000 processor, '-mips3' to the R4000 processor, 15088 and '-mips4' to the R8000 and R10000 processors. '-mips5', 15089 '-mips32', '-mips32r2', '-mips32r3', '-mips32r5', '-mips32r6', 15090 '-mips64', '-mips64r2', '-mips64r3', '-mips64r5', and '-mips64r6' 15091 correspond to generic MIPS V, MIPS32, MIPS32 Release 2, MIPS32 15092 Release 3, MIPS32 Release 5, MIPS32 Release 6, MIPS64, and MIPS64 15093 Release 2, MIPS64 Release 3, MIPS64 Release 5, and MIPS64 Release 6 15094 ISA processors, respectively. You can also switch instruction sets 15095 during the assembly; see *note Directives to override the ISA 15096 level: MIPS ISA. 15097 15098'-mgp32' 15099'-mfp32' 15100 Some macros have different expansions for 32-bit and 64-bit 15101 registers. The register sizes are normally inferred from the ISA 15102 and ABI, but these flags force a certain group of registers to be 15103 treated as 32 bits wide at all times. '-mgp32' controls the size 15104 of general-purpose registers and '-mfp32' controls the size of 15105 floating-point registers. 15106 15107 The '.set gp=32' and '.set fp=32' directives allow the size of 15108 registers to be changed for parts of an object. The default value 15109 is restored by '.set gp=default' and '.set fp=default'. 15110 15111 On some MIPS variants there is a 32-bit mode flag; when this flag 15112 is set, 64-bit instructions generate a trap. Also, some 32-bit 15113 OSes only save the 32-bit registers on a context switch, so it is 15114 essential never to use the 64-bit registers. 15115 15116'-mgp64' 15117'-mfp64' 15118 Assume that 64-bit registers are available. This is provided in 15119 the interests of symmetry with '-mgp32' and '-mfp32'. 15120 15121 The '.set gp=64' and '.set fp=64' directives allow the size of 15122 registers to be changed for parts of an object. The default value 15123 is restored by '.set gp=default' and '.set fp=default'. 15124 15125'-mfpxx' 15126 Make no assumptions about whether 32-bit or 64-bit floating-point 15127 registers are available. This is provided to support having 15128 modules compatible with either '-mfp32' or '-mfp64'. This option 15129 can only be used with MIPS II and above. 15130 15131 The '.set fp=xx' directive allows a part of an object to be marked 15132 as not making assumptions about 32-bit or 64-bit FP registers. The 15133 default value is restored by '.set fp=default'. 15134 15135'-modd-spreg' 15136'-mno-odd-spreg' 15137 Enable use of floating-point operations on odd-numbered 15138 single-precision registers when supported by the ISA. '-mfpxx' 15139 implies '-mno-odd-spreg', otherwise the default is '-modd-spreg' 15140 15141'-mips16' 15142'-no-mips16' 15143 Generate code for the MIPS 16 processor. This is equivalent to 15144 putting '.module mips16' at the start of the assembly file. 15145 '-no-mips16' turns off this option. 15146 15147'-mmips16e2' 15148'-mno-mips16e2' 15149 Enable the use of MIPS16e2 instructions in MIPS16 mode. This is 15150 equivalent to putting '.module mips16e2' at the start of the 15151 assembly file. '-mno-mips16e2' turns off this option. 15152 15153'-mmicromips' 15154'-mno-micromips' 15155 Generate code for the microMIPS processor. This is equivalent to 15156 putting '.module micromips' at the start of the assembly file. 15157 '-mno-micromips' turns off this option. This is equivalent to 15158 putting '.module nomicromips' at the start of the assembly file. 15159 15160'-msmartmips' 15161'-mno-smartmips' 15162 Enables the SmartMIPS extensions to the MIPS32 instruction set, 15163 which provides a number of new instructions which target smartcard 15164 and cryptographic applications. This is equivalent to putting 15165 '.module smartmips' at the start of the assembly file. 15166 '-mno-smartmips' turns off this option. 15167 15168'-mips3d' 15169'-no-mips3d' 15170 Generate code for the MIPS-3D Application Specific Extension. This 15171 tells the assembler to accept MIPS-3D instructions. '-no-mips3d' 15172 turns off this option. 15173 15174'-mdmx' 15175'-no-mdmx' 15176 Generate code for the MDMX Application Specific Extension. This 15177 tells the assembler to accept MDMX instructions. '-no-mdmx' turns 15178 off this option. 15179 15180'-mdsp' 15181'-mno-dsp' 15182 Generate code for the DSP Release 1 Application Specific Extension. 15183 This tells the assembler to accept DSP Release 1 instructions. 15184 '-mno-dsp' turns off this option. 15185 15186'-mdspr2' 15187'-mno-dspr2' 15188 Generate code for the DSP Release 2 Application Specific Extension. 15189 This option implies '-mdsp'. This tells the assembler to accept 15190 DSP Release 2 instructions. '-mno-dspr2' turns off this option. 15191 15192'-mdspr3' 15193'-mno-dspr3' 15194 Generate code for the DSP Release 3 Application Specific Extension. 15195 This option implies '-mdsp' and '-mdspr2'. This tells the 15196 assembler to accept DSP Release 3 instructions. '-mno-dspr3' turns 15197 off this option. 15198 15199'-mmt' 15200'-mno-mt' 15201 Generate code for the MT Application Specific Extension. This 15202 tells the assembler to accept MT instructions. '-mno-mt' turns off 15203 this option. 15204 15205'-mmcu' 15206'-mno-mcu' 15207 Generate code for the MCU Application Specific Extension. This 15208 tells the assembler to accept MCU instructions. '-mno-mcu' turns 15209 off this option. 15210 15211'-mmsa' 15212'-mno-msa' 15213 Generate code for the MIPS SIMD Architecture Extension. This tells 15214 the assembler to accept MSA instructions. '-mno-msa' turns off 15215 this option. 15216 15217'-mxpa' 15218'-mno-xpa' 15219 Generate code for the MIPS eXtended Physical Address (XPA) 15220 Extension. This tells the assembler to accept XPA instructions. 15221 '-mno-xpa' turns off this option. 15222 15223'-mvirt' 15224'-mno-virt' 15225 Generate code for the Virtualization Application Specific 15226 Extension. This tells the assembler to accept Virtualization 15227 instructions. '-mno-virt' turns off this option. 15228 15229'-mcrc' 15230'-mno-crc' 15231 Generate code for the cyclic redundancy check (CRC) Application 15232 Specific Extension. This tells the assembler to accept CRC 15233 instructions. '-mno-crc' turns off this option. 15234 15235'-mginv' 15236'-mno-ginv' 15237 Generate code for the Global INValidate (GINV) Application Specific 15238 Extension. This tells the assembler to accept GINV instructions. 15239 '-mno-ginv' turns off this option. 15240 15241'-mloongson-mmi' 15242'-mno-loongson-mmi' 15243 Generate code for the Loongson MultiMedia extensions Instructions 15244 (MMI) Application Specific Extension. This tells the assembler to 15245 accept MMI instructions. '-mno-loongson-mmi' turns off this 15246 option. 15247 15248'-mloongson-cam' 15249'-mno-loongson-cam' 15250 Generate code for the Loongson Content Address Memory (CAM) 15251 Application Specific Extension. This tells the assembler to accept 15252 CAM instructions. '-mno-loongson-cam' turns off this option. 15253 15254'-mloongson-ext' 15255'-mno-loongson-ext' 15256 Generate code for the Loongson EXTensions (EXT) instructions 15257 Application Specific Extension. This tells the assembler to accept 15258 EXT instructions. '-mno-loongson-ext' turns off this option. 15259 15260'-mloongson-ext2' 15261'-mno-loongson-ext2' 15262 Generate code for the Loongson EXTensions R2 (EXT2) instructions 15263 Application Specific Extension. This tells the assembler to accept 15264 EXT2 instructions. '-mno-loongson-ext2' turns off this option. 15265 15266'-minsn32' 15267'-mno-insn32' 15268 Only use 32-bit instruction encodings when generating code for the 15269 microMIPS processor. This option inhibits the use of any 16-bit 15270 instructions. This is equivalent to putting '.set insn32' at the 15271 start of the assembly file. '-mno-insn32' turns off this option. 15272 This is equivalent to putting '.set noinsn32' at the start of the 15273 assembly file. By default '-mno-insn32' is selected, allowing all 15274 instructions to be used. 15275 15276'-mfix7000' 15277'-mno-fix7000' 15278 Cause nops to be inserted if the read of the destination register 15279 of an mfhi or mflo instruction occurs in the following two 15280 instructions. 15281 15282'-mfix-rm7000' 15283'-mno-fix-rm7000' 15284 Cause nops to be inserted if a dmult or dmultu instruction is 15285 followed by a load instruction. 15286 15287'-mfix-loongson2f-jump' 15288'-mno-fix-loongson2f-jump' 15289 Eliminate instruction fetch from outside 256M region to work around 15290 the Loongson2F 'jump' instructions. Without it, under extreme 15291 cases, the kernel may crash. The issue has been solved in latest 15292 processor batches, but this fix has no side effect to them. 15293 15294'-mfix-loongson2f-nop' 15295'-mno-fix-loongson2f-nop' 15296 Replace nops by 'or at,at,zero' to work around the Loongson2F 'nop' 15297 errata. Without it, under extreme cases, the CPU might deadlock. 15298 The issue has been solved in later Loongson2F batches, but this fix 15299 has no side effect to them. 15300 15301'-mfix-loongson3-llsc' 15302'-mno-fix-loongson3-llsc' 15303 Insert 'sync' before 'll' and 'lld' to work around Loongson3 LLSC 15304 errata. Without it, under extrame cases, the CPU might deadlock. 15305 The default can be controlled by the 15306 '--enable-mips-fix-loongson3-llsc=[yes|no]' configure option. 15307 15308'-mfix-vr4120' 15309'-mno-fix-vr4120' 15310 Insert nops to work around certain VR4120 errata. This option is 15311 intended to be used on GCC-generated code: it is not designed to 15312 catch all problems in hand-written assembler code. 15313 15314'-mfix-vr4130' 15315'-mno-fix-vr4130' 15316 Insert nops to work around the VR4130 'mflo'/'mfhi' errata. 15317 15318'-mfix-24k' 15319'-mno-fix-24k' 15320 Insert nops to work around the 24K 'eret'/'deret' errata. 15321 15322'-mfix-cn63xxp1' 15323'-mno-fix-cn63xxp1' 15324 Replace 'pref' hints 0 - 4 and 6 - 24 with hint 28 to work around 15325 certain CN63XXP1 errata. 15326 15327'-mfix-r5900' 15328'-mno-fix-r5900' 15329 Do not attempt to schedule the preceding instruction into the delay 15330 slot of a branch instruction placed at the end of a short loop of 15331 six instructions or fewer and always schedule a 'nop' instruction 15332 there instead. The short loop bug under certain conditions causes 15333 loops to execute only once or twice, due to a hardware bug in the 15334 R5900 chip. 15335 15336'-m4010' 15337'-no-m4010' 15338 Generate code for the LSI R4010 chip. This tells the assembler to 15339 accept the R4010-specific instructions ('addciu', 'ffc', etc.), and 15340 to not schedule 'nop' instructions around accesses to the 'HI' and 15341 'LO' registers. '-no-m4010' turns off this option. 15342 15343'-m4650' 15344'-no-m4650' 15345 Generate code for the MIPS R4650 chip. This tells the assembler to 15346 accept the 'mad' and 'madu' instruction, and to not schedule 'nop' 15347 instructions around accesses to the 'HI' and 'LO' registers. 15348 '-no-m4650' turns off this option. 15349 15350'-m3900' 15351'-no-m3900' 15352'-m4100' 15353'-no-m4100' 15354 For each option '-mNNNN', generate code for the MIPS RNNNN chip. 15355 This tells the assembler to accept instructions specific to that 15356 chip, and to schedule for that chip's hazards. 15357 15358'-march=CPU' 15359 Generate code for a particular MIPS CPU. It is exactly equivalent 15360 to '-mCPU', except that there are more value of CPU understood. 15361 Valid CPU value are: 15362 15363 2000, 3000, 3900, 4000, 4010, 4100, 4111, vr4120, vr4130, 15364 vr4181, 4300, 4400, 4600, 4650, 5000, rm5200, rm5230, rm5231, 15365 rm5261, rm5721, vr5400, vr5500, 6000, rm7000, 8000, rm9000, 15366 10000, 12000, 14000, 16000, 4kc, 4km, 4kp, 4ksc, 4kec, 4kem, 15367 4kep, 4ksd, m4k, m4kp, m14k, m14kc, m14ke, m14kec, 24kc, 15368 24kf2_1, 24kf, 24kf1_1, 24kec, 24kef2_1, 24kef, 24kef1_1, 15369 34kc, 34kf2_1, 34kf, 34kf1_1, 34kn, 74kc, 74kf2_1, 74kf, 15370 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf, 1004kf1_1, 15371 interaptiv, interaptiv-mr2, m5100, m5101, p5600, 5kc, 5kf, 15372 20kc, 25kf, sb1, sb1a, i6400, i6500, p6600, loongson2e, 15373 loongson2f, gs464, gs464e, gs264e, octeon, octeon+, octeon2, 15374 octeon3, xlr, xlp 15375 15376 For compatibility reasons, 'Nx' and 'Bfx' are accepted as synonyms 15377 for 'Nf1_1'. These values are deprecated. 15378 15379'-mtune=CPU' 15380 Schedule and tune for a particular MIPS CPU. Valid CPU values are 15381 identical to '-march=CPU'. 15382 15383'-mabi=ABI' 15384 Record which ABI the source code uses. The recognized arguments 15385 are: '32', 'n32', 'o64', '64' and 'eabi'. 15386 15387'-msym32' 15388'-mno-sym32' 15389 Equivalent to adding '.set sym32' or '.set nosym32' to the 15390 beginning of the assembler input. *Note MIPS Symbol Sizes::. 15391 15392'-nocpp' 15393 This option is ignored. It is accepted for command-line 15394 compatibility with other assemblers, which use it to turn off C 15395 style preprocessing. With GNU 'as', there is no need for '-nocpp', 15396 because the GNU assembler itself never runs the C preprocessor. 15397 15398'-msoft-float' 15399'-mhard-float' 15400 Disable or enable floating-point instructions. Note that by 15401 default floating-point instructions are always allowed even with 15402 CPU targets that don't have support for these instructions. 15403 15404'-msingle-float' 15405'-mdouble-float' 15406 Disable or enable double-precision floating-point operations. Note 15407 that by default double-precision floating-point operations are 15408 always allowed even with CPU targets that don't have support for 15409 these operations. 15410 15411'--construct-floats' 15412'--no-construct-floats' 15413 The '--no-construct-floats' option disables the construction of 15414 double width floating point constants by loading the two halves of 15415 the value into the two single width floating point registers that 15416 make up the double width register. This feature is useful if the 15417 processor support the FR bit in its status register, and this bit 15418 is known (by the programmer) to be set. This bit prevents the 15419 aliasing of the double width register by the single width 15420 registers. 15421 15422 By default '--construct-floats' is selected, allowing construction 15423 of these floating point constants. 15424 15425'--relax-branch' 15426'--no-relax-branch' 15427 The '--relax-branch' option enables the relaxation of out-of-range 15428 branches. Any branches whose target cannot be reached directly are 15429 converted to a small instruction sequence including an 15430 inverse-condition branch to the physically next instruction, and a 15431 jump to the original target is inserted between the two 15432 instructions. In PIC code the jump will involve further 15433 instructions for address calculation. 15434 15435 The 'BC1ANY2F', 'BC1ANY2T', 'BC1ANY4F', 'BC1ANY4T', 'BPOSGE32' and 15436 'BPOSGE64' instructions are excluded from relaxation, because they 15437 have no complementing counterparts. They could be relaxed with the 15438 use of a longer sequence involving another branch, however this has 15439 not been implemented and if their target turns out of reach, they 15440 produce an error even if branch relaxation is enabled. 15441 15442 Also no MIPS16 branches are ever relaxed. 15443 15444 By default '--no-relax-branch' is selected, causing any 15445 out-of-range branches to produce an error. 15446 15447'-mignore-branch-isa' 15448'-mno-ignore-branch-isa' 15449 Ignore branch checks for invalid transitions between ISA modes. 15450 15451 The semantics of branches does not provide for an ISA mode switch, 15452 so in most cases the ISA mode a branch has been encoded for has to 15453 be the same as the ISA mode of the branch's target label. If the 15454 ISA modes do not match, then such a branch, if taken, will cause 15455 the ISA mode to remain unchanged and instructions that follow will 15456 be executed in the wrong ISA mode causing the program to misbehave 15457 or crash. 15458 15459 In the case of the 'BAL' instruction it may be possible to relax it 15460 to an equivalent 'JALX' instruction so that the ISA mode is 15461 switched at the run time as required. For other branches no 15462 relaxation is possible and therefore GAS has checks implemented 15463 that verify in branch assembly that the two ISA modes match, and 15464 report an error otherwise so that the problem with code can be 15465 diagnosed at the assembly time rather than at the run time. 15466 15467 However some assembly code, including generated code produced by 15468 some versions of GCC, may incorrectly include branches to data 15469 labels, which appear to require a mode switch but are either dead 15470 or immediately followed by valid instructions encoded for the same 15471 ISA the branch has been encoded for. While not strictly correct at 15472 the source level such code will execute as intended, so to help 15473 with these cases '-mignore-branch-isa' is supported which disables 15474 ISA mode checks for branches. 15475 15476 By default '-mno-ignore-branch-isa' is selected, causing any 15477 invalid branch requiring a transition between ISA modes to produce 15478 an error. 15479 15480'-mnan=ENCODING' 15481 This option indicates whether the source code uses the IEEE 2008 15482 NaN encoding ('-mnan=2008') or the original MIPS encoding 15483 ('-mnan=legacy'). It is equivalent to adding a '.nan' directive to 15484 the beginning of the source file. *Note MIPS NaN Encodings::. 15485 15486 '-mnan=legacy' is the default if no '-mnan' option or '.nan' 15487 directive is used. 15488 15489'--trap' 15490'--no-break' 15491 'as' automatically macro expands certain division and 15492 multiplication instructions to check for overflow and division by 15493 zero. This option causes 'as' to generate code to take a trap 15494 exception rather than a break exception when an error is detected. 15495 The trap instructions are only supported at Instruction Set 15496 Architecture level 2 and higher. 15497 15498'--break' 15499'--no-trap' 15500 Generate code to take a break exception rather than a trap 15501 exception when an error is detected. This is the default. 15502 15503'-mpdr' 15504'-mno-pdr' 15505 Control generation of '.pdr' sections. Off by default on IRIX, on 15506 elsewhere. 15507 15508'-mshared' 15509'-mno-shared' 15510 When generating code using the Unix calling conventions (selected 15511 by '-KPIC' or '-mcall_shared'), gas will normally generate code 15512 which can go into a shared library. The '-mno-shared' option tells 15513 gas to generate code which uses the calling convention, but can not 15514 go into a shared library. The resulting code is slightly more 15515 efficient. This option only affects the handling of the '.cpload' 15516 and '.cpsetup' pseudo-ops. 15517 15518 15519File: as.info, Node: MIPS Macros, Next: MIPS Symbol Sizes, Prev: MIPS Options, Up: MIPS-Dependent 15520 155219.27.2 High-level assembly macros 15522--------------------------------- 15523 15524MIPS assemblers have traditionally provided a wider range of 15525instructions than the MIPS architecture itself. These extra 15526instructions are usually referred to as "macro" instructions (1). 15527 15528 Some MIPS macro instructions extend an underlying architectural 15529instruction while others are entirely new. An example of the former 15530type is 'and', which allows the third operand to be either a register or 15531an arbitrary immediate value. Examples of the latter type include 15532'bgt', which branches to the third operand when the first operand is 15533greater than the second operand, and 'ulh', which implements an 15534unaligned 2-byte load. 15535 15536 One of the most common extensions provided by macros is to expand 15537memory offsets to the full address range (32 or 64 bits) and to allow 15538symbolic offsets such as 'my_data + 4' to be used in place of integer 15539constants. For example, the architectural instruction 'lbu' allows only 15540a signed 16-bit offset, whereas the macro 'lbu' allows code such as 'lbu 15541$4,array+32769($5)'. The implementation of these symbolic offsets 15542depends on several factors, such as whether the assembler is generating 15543SVR4-style PIC (selected by '-KPIC', *note Assembler options: MIPS 15544Options.), the size of symbols (*note Directives to override the size of 15545symbols: MIPS Symbol Sizes.), and the small data limit (*note 15546Controlling the use of small data accesses: MIPS Small Data.). 15547 15548 Sometimes it is undesirable to have one assembly instruction expand 15549to several machine instructions. The directive '.set nomacro' tells the 15550assembler to warn when this happens. '.set macro' restores the default 15551behavior. 15552 15553 Some macro instructions need a temporary register to store 15554intermediate results. This register is usually '$1', also known as 15555'$at', but it can be changed to any core register REG using '.set 15556at=REG'. Note that '$at' always refers to '$1' regardless of which 15557register is being used as the temporary register. 15558 15559 Implicit uses of the temporary register in macros could interfere 15560with explicit uses in the assembly code. The assembler therefore warns 15561whenever it sees an explicit use of the temporary register. The 15562directive '.set noat' silences this warning while '.set at' restores the 15563default behavior. It is safe to use '.set noat' while '.set nomacro' is 15564in effect since single-instruction macros never need a temporary 15565register. 15566 15567 Note that while the GNU assembler provides these macros for 15568compatibility, it does not make any attempt to optimize them with the 15569surrounding code. 15570 15571 ---------- Footnotes ---------- 15572 15573 (1) The term "macro" is somewhat overloaded here, since these macros 15574have no relation to those defined by '.macro', *note '.macro': Macro. 15575 15576 15577File: as.info, Node: MIPS Symbol Sizes, Next: MIPS Small Data, Prev: MIPS Macros, Up: MIPS-Dependent 15578 155799.27.3 Directives to override the size of symbols 15580------------------------------------------------- 15581 15582The n64 ABI allows symbols to have any 64-bit value. Although this 15583provides a great deal of flexibility, it means that some macros have 15584much longer expansions than their 32-bit counterparts. For example, the 15585non-PIC expansion of 'dla $4,sym' is usually: 15586 15587 lui $4,%highest(sym) 15588 lui $1,%hi(sym) 15589 daddiu $4,$4,%higher(sym) 15590 daddiu $1,$1,%lo(sym) 15591 dsll32 $4,$4,0 15592 daddu $4,$4,$1 15593 15594 whereas the 32-bit expansion is simply: 15595 15596 lui $4,%hi(sym) 15597 daddiu $4,$4,%lo(sym) 15598 15599 n64 code is sometimes constructed in such a way that all symbolic 15600constants are known to have 32-bit values, and in such cases, it's 15601preferable to use the 32-bit expansion instead of the 64-bit expansion. 15602 15603 You can use the '.set sym32' directive to tell the assembler that, 15604from this point on, all expressions of the form 'SYMBOL' or 'SYMBOL + 15605OFFSET' have 32-bit values. For example: 15606 15607 .set sym32 15608 dla $4,sym 15609 lw $4,sym+16 15610 sw $4,sym+0x8000($4) 15611 15612 will cause the assembler to treat 'sym', 'sym+16' and 'sym+0x8000' as 1561332-bit values. The handling of non-symbolic addresses is not affected. 15614 15615 The directive '.set nosym32' ends a '.set sym32' block and reverts to 15616the normal behavior. It is also possible to change the symbol size 15617using the command-line options '-msym32' and '-mno-sym32'. 15618 15619 These options and directives are always accepted, but at present, 15620they have no effect for anything other than n64. 15621 15622 15623File: as.info, Node: MIPS Small Data, Next: MIPS ISA, Prev: MIPS Symbol Sizes, Up: MIPS-Dependent 15624 156259.27.4 Controlling the use of small data accesses 15626------------------------------------------------- 15627 15628It often takes several instructions to load the address of a symbol. 15629For example, when 'addr' is a 32-bit symbol, the non-PIC expansion of 15630'dla $4,addr' is usually: 15631 15632 lui $4,%hi(addr) 15633 daddiu $4,$4,%lo(addr) 15634 15635 The sequence is much longer when 'addr' is a 64-bit symbol. *Note 15636Directives to override the size of symbols: MIPS Symbol Sizes. 15637 15638 In order to cut down on this overhead, most embedded MIPS systems set 15639aside a 64-kilobyte "small data" area and guarantee that all data of 15640size N and smaller will be placed in that area. The limit N is passed 15641to both the assembler and the linker using the command-line option '-G 15642N', *note Assembler options: MIPS Options. Note that the same value of 15643N must be used when linking and when assembling all input files to the 15644link; any inconsistency could cause a relocation overflow error. 15645 15646 The size of an object in the '.bss' section is set by the '.comm' or 15647'.lcomm' directive that defines it. The size of an external object may 15648be set with the '.extern' directive. For example, '.extern sym,4' 15649declares that the object at 'sym' is 4 bytes in length, while leaving 15650'sym' otherwise undefined. 15651 15652 When no '-G' option is given, the default limit is 8 bytes. The 15653option '-G 0' prevents any data from being automatically classified as 15654small. 15655 15656 It is also possible to mark specific objects as small by putting them 15657in the special sections '.sdata' and '.sbss', which are "small" 15658counterparts of '.data' and '.bss' respectively. The toolchain will 15659treat such data as small regardless of the '-G' setting. 15660 15661 On startup, systems that support a small data area are expected to 15662initialize register '$28', also known as '$gp', in such a way that small 15663data can be accessed using a 16-bit offset from that register. For 15664example, when 'addr' is small data, the 'dla $4,addr' instruction above 15665is equivalent to: 15666 15667 daddiu $4,$28,%gp_rel(addr) 15668 15669 Small data is not supported for SVR4-style PIC. 15670 15671 15672File: as.info, Node: MIPS ISA, Next: MIPS assembly options, Prev: MIPS Small Data, Up: MIPS-Dependent 15673 156749.27.5 Directives to override the ISA level 15675------------------------------------------- 15676 15677GNU 'as' supports an additional directive to change the MIPS Instruction 15678Set Architecture level on the fly: '.set mipsN'. N should be a number 15679from 0 to 5, or 32, 32r2, 32r3, 32r5, 32r6, 64, 64r2, 64r3, 64r5 or 1568064r6. The values other than 0 make the assembler accept instructions 15681for the corresponding ISA level, from that point on in the assembly. 15682'.set mipsN' affects not only which instructions are permitted, but also 15683how certain macros are expanded. '.set mips0' restores the ISA level to 15684its original level: either the level you selected with command-line 15685options, or the default for your configuration. You can use this 15686feature to permit specific MIPS III instructions while assembling in 32 15687bit mode. Use this directive with care! 15688 15689 The '.set arch=CPU' directive provides even finer control. It 15690changes the effective CPU target and allows the assembler to use 15691instructions specific to a particular CPU. All CPUs supported by the 15692'-march' command-line option are also selectable by this directive. The 15693original value is restored by '.set arch=default'. 15694 15695 The directive '.set mips16' puts the assembler into MIPS 16 mode, in 15696which it will assemble instructions for the MIPS 16 processor. Use 15697'.set nomips16' to return to normal 32 bit mode. 15698 15699 Traditional MIPS assemblers do not support this directive. 15700 15701 The directive '.set micromips' puts the assembler into microMIPS 15702mode, in which it will assemble instructions for the microMIPS 15703processor. Use '.set nomicromips' to return to normal 32 bit mode. 15704 15705 Traditional MIPS assemblers do not support this directive. 15706 15707 15708File: as.info, Node: MIPS assembly options, Next: MIPS autoextend, Prev: MIPS ISA, Up: MIPS-Dependent 15709 157109.27.6 Directives to control code generation 15711-------------------------------------------- 15712 15713The '.module' directive allows command-line options to be set directly 15714from assembly. The format of the directive matches the '.set' directive 15715but only those options which are relevant to a whole module are 15716supported. The effect of a '.module' directive is the same as the 15717corresponding command-line option. Where '.set' directives support 15718returning to a default then the '.module' directives do not as they 15719define the defaults. 15720 15721 These module-level directives must appear first in assembly. 15722 15723 Traditional MIPS assemblers do not support this directive. 15724 15725 The directive '.set insn32' makes the assembler only use 32-bit 15726instruction encodings when generating code for the microMIPS processor. 15727This directive inhibits the use of any 16-bit instructions from that 15728point on in the assembly. The '.set noinsn32' directive allows 16-bit 15729instructions to be accepted. 15730 15731 Traditional MIPS assemblers do not support this directive. 15732 15733 15734File: as.info, Node: MIPS autoextend, Next: MIPS insn, Prev: MIPS assembly options, Up: MIPS-Dependent 15735 157369.27.7 Directives for extending MIPS 16 bit instructions 15737-------------------------------------------------------- 15738 15739By default, MIPS 16 instructions are automatically extended to 32 bits 15740when necessary. The directive '.set noautoextend' will turn this off. 15741When '.set noautoextend' is in effect, any 32 bit instruction must be 15742explicitly extended with the '.e' modifier (e.g., 'li.e $4,1000'). The 15743directive '.set autoextend' may be used to once again automatically 15744extend instructions when necessary. 15745 15746 This directive is only meaningful when in MIPS 16 mode. Traditional 15747MIPS assemblers do not support this directive. 15748 15749 15750File: as.info, Node: MIPS insn, Next: MIPS FP ABIs, Prev: MIPS autoextend, Up: MIPS-Dependent 15751 157529.27.8 Directive to mark data as an instruction 15753----------------------------------------------- 15754 15755The '.insn' directive tells 'as' that the following data is actually 15756instructions. This makes a difference in MIPS 16 and microMIPS modes: 15757when loading the address of a label which precedes instructions, 'as' 15758automatically adds 1 to the value, so that jumping to the loaded address 15759will do the right thing. 15760 15761 The '.global' and '.globl' directives supported by 'as' will by 15762default mark the symbol as pointing to a region of data not code. This 15763means that, for example, any instructions following such a symbol will 15764not be disassembled by 'objdump' as it will regard them as data. To 15765change this behavior an optional section name can be placed after the 15766symbol name in the '.global' directive. If this section exists and is 15767known to be a code section, then the symbol will be marked as pointing 15768at code not data. Ie the syntax for the directive is: 15769 15770 '.global SYMBOL[ SECTION][, SYMBOL[ SECTION]] ...', 15771 15772 Here is a short example: 15773 15774 .global foo .text, bar, baz .data 15775 foo: 15776 nop 15777 bar: 15778 .word 0x0 15779 baz: 15780 .word 0x1 15781 15782 15783File: as.info, Node: MIPS FP ABIs, Next: MIPS NaN Encodings, Prev: MIPS insn, Up: MIPS-Dependent 15784 157859.27.9 Directives to control the FP ABI 15786--------------------------------------- 15787 15788* Menu: 15789 15790* MIPS FP ABI History:: History of FP ABIs 15791* MIPS FP ABI Variants:: Supported FP ABIs 15792* MIPS FP ABI Selection:: Automatic selection of FP ABI 15793* MIPS FP ABI Compatibility:: Linking different FP ABI variants 15794 15795 15796File: as.info, Node: MIPS FP ABI History, Next: MIPS FP ABI Variants, Up: MIPS FP ABIs 15797 157989.27.9.1 History of FP ABIs 15799........................... 15800 15801The MIPS ABIs support a variety of different floating-point extensions 15802where calling-convention and register sizes vary for floating-point 15803data. The extensions exist to support a wide variety of optional 15804architecture features. The resulting ABI variants are generally 15805incompatible with each other and must be tracked carefully. 15806 15807 Traditionally the use of an explicit '.gnu_attribute 4, N' directive 15808is used to indicate which ABI is in use by a specific module. It was 15809then left to the user to ensure that command-line options and the 15810selected ABI were compatible with some potential for inconsistencies. 15811 15812 15813File: as.info, Node: MIPS FP ABI Variants, Next: MIPS FP ABI Selection, Prev: MIPS FP ABI History, Up: MIPS FP ABIs 15814 158159.27.9.2 Supported FP ABIs 15816.......................... 15817 15818The supported floating-point ABI variants are: 15819 15820'0 - No floating-point' 15821 This variant is used to indicate that floating-point is not used 15822 within the module at all and therefore has no impact on the ABI. 15823 This is the default. 15824 15825'1 - Double-precision' 15826 This variant indicates that double-precision support is used. For 15827 64-bit ABIs this means that 64-bit wide floating-point registers 15828 are required. For 32-bit ABIs this means that 32-bit wide 15829 floating-point registers are required and double-precision 15830 operations use pairs of registers. 15831 15832'2 - Single-precision' 15833 This variant indicates that single-precision support is used. 15834 Double precision operations will be supported via soft-float 15835 routines. 15836 15837'3 - Soft-float' 15838 This variant indicates that although floating-point support is used 15839 all operations are emulated in software. This means the ABI is 15840 modified to pass all floating-point data in general-purpose 15841 registers. 15842 15843'4 - Deprecated' 15844 This variant existed as an initial attempt at supporting 64-bit 15845 wide floating-point registers for O32 ABI on a MIPS32r2 CPU. This 15846 has been superseded by 5, 6 and 7. 15847 15848'5 - Double-precision 32-bit CPU, 32-bit or 64-bit FPU' 15849 This variant is used by 32-bit ABIs to indicate that the 15850 floating-point code in the module has been designed to operate 15851 correctly with either 32-bit wide or 64-bit wide floating-point 15852 registers. Double-precision support is used. Only O32 currently 15853 supports this variant and requires a minimum architecture of MIPS 15854 II. 15855 15856'6 - Double-precision 32-bit FPU, 64-bit FPU' 15857 This variant is used by 32-bit ABIs to indicate that the 15858 floating-point code in the module requires 64-bit wide 15859 floating-point registers. Double-precision support is used. Only 15860 O32 currently supports this variant and requires a minimum 15861 architecture of MIPS32r2. 15862 15863'7 - Double-precision compat 32-bit FPU, 64-bit FPU' 15864 This variant is used by 32-bit ABIs to indicate that the 15865 floating-point code in the module requires 64-bit wide 15866 floating-point registers. Double-precision support is used. This 15867 differs from the previous ABI as it restricts use of odd-numbered 15868 single-precision registers. Only O32 currently supports this 15869 variant and requires a minimum architecture of MIPS32r2. 15870 15871 15872File: as.info, Node: MIPS FP ABI Selection, Next: MIPS FP ABI Compatibility, Prev: MIPS FP ABI Variants, Up: MIPS FP ABIs 15873 158749.27.9.3 Automatic selection of FP ABI 15875...................................... 15876 15877In order to simplify and add safety to the process of selecting the 15878correct floating-point ABI, the assembler will automatically infer the 15879correct '.gnu_attribute 4, N' directive based on command-line options 15880and '.module' overrides. Where an explicit '.gnu_attribute 4, N' 15881directive has been seen then a warning will be raised if it does not 15882match an inferred setting. 15883 15884 The floating-point ABI is inferred as follows. If '-msoft-float' has 15885been used the module will be marked as soft-float. If '-msingle-float' 15886has been used then the module will be marked as single-precision. The 15887remaining ABIs are then selected based on the FP register width. 15888Double-precision is selected if the width of GP and FP registers match 15889and the special double-precision variants for 32-bit ABIs are then 15890selected depending on '-mfpxx', '-mfp64' and '-mno-odd-spreg'. 15891 15892 15893File: as.info, Node: MIPS FP ABI Compatibility, Prev: MIPS FP ABI Selection, Up: MIPS FP ABIs 15894 158959.27.9.4 Linking different FP ABI variants 15896.......................................... 15897 15898Modules using the default FP ABI (no floating-point) can be linked with 15899any other (singular) FP ABI variant. 15900 15901 Special compatibility support exists for O32 with the four 15902double-precision FP ABI variants. The '-mfpxx' FP ABI is specifically 15903designed to be compatible with the standard double-precision ABI and the 15904'-mfp64' FP ABIs. This makes it desirable for O32 modules to be built 15905as '-mfpxx' to ensure the maximum compatibility with other modules 15906produced for more specific needs. The only FP ABIs which cannot be 15907linked together are the standard double-precision ABI and the full 15908'-mfp64' ABI with '-modd-spreg'. 15909 15910 15911File: as.info, Node: MIPS NaN Encodings, Next: MIPS Option Stack, Prev: MIPS FP ABIs, Up: MIPS-Dependent 15912 159139.27.10 Directives to record which NaN encoding is being used 15914------------------------------------------------------------- 15915 15916The IEEE 754 floating-point standard defines two types of not-a-number 15917(NaN) data: "signalling" NaNs and "quiet" NaNs. The original version of 15918the standard did not specify how these two types should be 15919distinguished. Most implementations followed the i387 model, in which 15920the first bit of the significand is set for quiet NaNs and clear for 15921signalling NaNs. However, the original MIPS implementation assigned the 15922opposite meaning to the bit, so that it was set for signalling NaNs and 15923clear for quiet NaNs. 15924 15925 The 2008 revision of the standard formally suggested the i387 choice 15926and as from Sep 2012 the current release of the MIPS architecture 15927therefore optionally supports that form. Code that uses one NaN 15928encoding would usually be incompatible with code that uses the other NaN 15929encoding, so MIPS ELF objects have a flag ('EF_MIPS_NAN2008') to record 15930which encoding is being used. 15931 15932 Assembly files can use the '.nan' directive to select between the two 15933encodings. '.nan 2008' says that the assembly file uses the IEEE 15934754-2008 encoding while '.nan legacy' says that the file uses the 15935original MIPS encoding. If several '.nan' directives are given, the 15936final setting is the one that is used. 15937 15938 The command-line options '-mnan=legacy' and '-mnan=2008' can be used 15939instead of '.nan legacy' and '.nan 2008' respectively. However, any 15940'.nan' directive overrides the command-line setting. 15941 15942 '.nan legacy' is the default if no '.nan' directive or '-mnan' option 15943is given. 15944 15945 Note that GNU 'as' does not produce NaNs itself and therefore these 15946directives do not affect code generation. They simply control the 15947setting of the 'EF_MIPS_NAN2008' flag. 15948 15949 Traditional MIPS assemblers do not support these directives. 15950 15951 15952File: as.info, Node: MIPS Option Stack, Next: MIPS ASE Instruction Generation Overrides, Prev: MIPS NaN Encodings, Up: MIPS-Dependent 15953 159549.27.11 Directives to save and restore options 15955---------------------------------------------- 15956 15957The directives '.set push' and '.set pop' may be used to save and 15958restore the current settings for all the options which are controlled by 15959'.set'. The '.set push' directive saves the current settings on a 15960stack. The '.set pop' directive pops the stack and restores the 15961settings. 15962 15963 These directives can be useful inside an macro which must change an 15964option such as the ISA level or instruction reordering but does not want 15965to change the state of the code which invoked the macro. 15966 15967 Traditional MIPS assemblers do not support these directives. 15968 15969 15970File: as.info, Node: MIPS ASE Instruction Generation Overrides, Next: MIPS Floating-Point, Prev: MIPS Option Stack, Up: MIPS-Dependent 15971 159729.27.12 Directives to control generation of MIPS ASE instructions 15973----------------------------------------------------------------- 15974 15975The directive '.set mips3d' makes the assembler accept instructions from 15976the MIPS-3D Application Specific Extension from that point on in the 15977assembly. The '.set nomips3d' directive prevents MIPS-3D instructions 15978from being accepted. 15979 15980 The directive '.set smartmips' makes the assembler accept 15981instructions from the SmartMIPS Application Specific Extension to the 15982MIPS32 ISA from that point on in the assembly. The '.set nosmartmips' 15983directive prevents SmartMIPS instructions from being accepted. 15984 15985 The directive '.set mdmx' makes the assembler accept instructions 15986from the MDMX Application Specific Extension from that point on in the 15987assembly. The '.set nomdmx' directive prevents MDMX instructions from 15988being accepted. 15989 15990 The directive '.set dsp' makes the assembler accept instructions from 15991the DSP Release 1 Application Specific Extension from that point on in 15992the assembly. The '.set nodsp' directive prevents DSP Release 1 15993instructions from being accepted. 15994 15995 The directive '.set dspr2' makes the assembler accept instructions 15996from the DSP Release 2 Application Specific Extension from that point on 15997in the assembly. This directive implies '.set dsp'. The '.set nodspr2' 15998directive prevents DSP Release 2 instructions from being accepted. 15999 16000 The directive '.set dspr3' makes the assembler accept instructions 16001from the DSP Release 3 Application Specific Extension from that point on 16002in the assembly. This directive implies '.set dsp' and '.set dspr2'. 16003The '.set nodspr3' directive prevents DSP Release 3 instructions from 16004being accepted. 16005 16006 The directive '.set mt' makes the assembler accept instructions from 16007the MT Application Specific Extension from that point on in the 16008assembly. The '.set nomt' directive prevents MT instructions from being 16009accepted. 16010 16011 The directive '.set mcu' makes the assembler accept instructions from 16012the MCU Application Specific Extension from that point on in the 16013assembly. The '.set nomcu' directive prevents MCU instructions from 16014being accepted. 16015 16016 The directive '.set msa' makes the assembler accept instructions from 16017the MIPS SIMD Architecture Extension from that point on in the assembly. 16018The '.set nomsa' directive prevents MSA instructions from being 16019accepted. 16020 16021 The directive '.set virt' makes the assembler accept instructions 16022from the Virtualization Application Specific Extension from that point 16023on in the assembly. The '.set novirt' directive prevents Virtualization 16024instructions from being accepted. 16025 16026 The directive '.set xpa' makes the assembler accept instructions from 16027the XPA Extension from that point on in the assembly. The '.set noxpa' 16028directive prevents XPA instructions from being accepted. 16029 16030 The directive '.set mips16e2' makes the assembler accept instructions 16031from the MIPS16e2 Application Specific Extension from that point on in 16032the assembly, whenever in MIPS16 mode. The '.set nomips16e2' directive 16033prevents MIPS16e2 instructions from being accepted, in MIPS16 mode. 16034Neither directive affects the state of MIPS16 mode being active itself 16035which has separate controls. 16036 16037 The directive '.set crc' makes the assembler accept instructions from 16038the CRC Extension from that point on in the assembly. The '.set nocrc' 16039directive prevents CRC instructions from being accepted. 16040 16041 The directive '.set ginv' makes the assembler accept instructions 16042from the GINV Extension from that point on in the assembly. The '.set 16043noginv' directive prevents GINV instructions from being accepted. 16044 16045 The directive '.set loongson-mmi' makes the assembler accept 16046instructions from the MMI Extension from that point on in the assembly. 16047The '.set noloongson-mmi' directive prevents MMI instructions from being 16048accepted. 16049 16050 The directive '.set loongson-cam' makes the assembler accept 16051instructions from the Loongson CAM from that point on in the assembly. 16052The '.set noloongson-cam' directive prevents Loongson CAM instructions 16053from being accepted. 16054 16055 The directive '.set loongson-ext' makes the assembler accept 16056instructions from the Loongson EXT from that point on in the assembly. 16057The '.set noloongson-ext' directive prevents Loongson EXT instructions 16058from being accepted. 16059 16060 The directive '.set loongson-ext2' makes the assembler accept 16061instructions from the Loongson EXT2 from that point on in the assembly. 16062This directive implies '.set loognson-ext'. The '.set noloongson-ext2' 16063directive prevents Loongson EXT2 instructions from being accepted. 16064 16065 Traditional MIPS assemblers do not support these directives. 16066 16067 16068File: as.info, Node: MIPS Floating-Point, Next: MIPS Syntax, Prev: MIPS ASE Instruction Generation Overrides, Up: MIPS-Dependent 16069 160709.27.13 Directives to override floating-point options 16071----------------------------------------------------- 16072 16073The directives '.set softfloat' and '.set hardfloat' provide finer 16074control of disabling and enabling float-point instructions. These 16075directives always override the default (that hard-float instructions are 16076accepted) or the command-line options ('-msoft-float' and 16077'-mhard-float'). 16078 16079 The directives '.set singlefloat' and '.set doublefloat' provide 16080finer control of disabling and enabling double-precision float-point 16081operations. These directives always override the default (that 16082double-precision operations are accepted) or the command-line options 16083('-msingle-float' and '-mdouble-float'). 16084 16085 Traditional MIPS assemblers do not support these directives. 16086 16087 16088File: as.info, Node: MIPS Syntax, Prev: MIPS Floating-Point, Up: MIPS-Dependent 16089 160909.27.14 Syntactical considerations for the MIPS assembler 16091--------------------------------------------------------- 16092 16093* Menu: 16094 16095* MIPS-Chars:: Special Characters 16096 16097 16098File: as.info, Node: MIPS-Chars, Up: MIPS Syntax 16099 161009.27.14.1 Special Characters 16101............................ 16102 16103The presence of a '#' on a line indicates the start of a comment that 16104extends to the end of the current line. 16105 16106 If a '#' appears as the first character of a line, the whole line is 16107treated as a comment, but in this case the line can also be a logical 16108line number directive (*note Comments::) or a preprocessor control 16109command (*note Preprocessing::). 16110 16111 The ';' character can be used to separate statements on the same 16112line. 16113 16114 16115File: as.info, Node: MMIX-Dependent, Next: MSP430-Dependent, Prev: MIPS-Dependent, Up: Machine Dependencies 16116 161179.28 MMIX Dependent Features 16118============================ 16119 16120* Menu: 16121 16122* MMIX-Opts:: Command-line Options 16123* MMIX-Expand:: Instruction expansion 16124* MMIX-Syntax:: Syntax 16125* MMIX-mmixal:: Differences to 'mmixal' syntax and semantics 16126 16127 16128File: as.info, Node: MMIX-Opts, Next: MMIX-Expand, Up: MMIX-Dependent 16129 161309.28.1 Command-line Options 16131--------------------------- 16132 16133The MMIX version of 'as' has some machine-dependent options. 16134 16135 When '--fixed-special-register-names' is specified, only the register 16136names specified in *note MMIX-Regs:: are recognized in the instructions 16137'PUT' and 'GET'. 16138 16139 You can use the '--globalize-symbols' to make all symbols global. 16140This option is useful when splitting up a 'mmixal' program into several 16141files. 16142 16143 The '--gnu-syntax' turns off most syntax compatibility with 'mmixal'. 16144Its usability is currently doubtful. 16145 16146 The '--relax' option is not fully supported, but will eventually make 16147the object file prepared for linker relaxation. 16148 16149 If you want to avoid inadvertently calling a predefined symbol and 16150would rather get an error, for example when using 'as' with a compiler 16151or other machine-generated code, specify '--no-predefined-syms'. This 16152turns off built-in predefined definitions of all such symbols, including 16153rounding-mode symbols, segment symbols, 'BIT' symbols, and 'TRAP' 16154symbols used in 'mmix' "system calls". It also turns off predefined 16155special-register names, except when used in 'PUT' and 'GET' 16156instructions. 16157 16158 By default, some instructions are expanded to fit the size of the 16159operand or an external symbol (*note MMIX-Expand::). By passing 16160'--no-expand', no such expansion will be done, instead causing errors at 16161link time if the operand does not fit. 16162 16163 The 'mmixal' documentation (*note mmixsite::) specifies that global 16164registers allocated with the 'GREG' directive (*note MMIX-greg::) and 16165initialized to the same non-zero value, will refer to the same global 16166register. This isn't strictly enforceable in 'as' since the final 16167addresses aren't known until link-time, but it will do an effort unless 16168the '--no-merge-gregs' option is specified. (Register merging isn't yet 16169implemented in 'ld'.) 16170 16171 'as' will warn every time it expands an instruction to fit an operand 16172unless the option '-x' is specified. It is believed that this behaviour 16173is more useful than just mimicking 'mmixal''s behaviour, in which 16174instructions are only expanded if the '-x' option is specified, and 16175assembly fails otherwise, when an instruction needs to be expanded. It 16176needs to be kept in mind that 'mmixal' is both an assembler and linker, 16177while 'as' will expand instructions that at link stage can be 16178contracted. (Though linker relaxation isn't yet implemented in 'ld'.) 16179The option '-x' also implies '--linker-allocated-gregs'. 16180 16181 If instruction expansion is enabled, 'as' can expand a 'PUSHJ' 16182instruction into a series of instructions. The shortest expansion is to 16183not expand it, but just mark the call as redirectable to a stub, which 16184'ld' creates at link-time, but only if the original 'PUSHJ' instruction 16185is found not to reach the target. The stub consists of the necessary 16186instructions to form a jump to the target. This happens if 'as' can 16187assert that the 'PUSHJ' instruction can reach such a stub. The option 16188'--no-pushj-stubs' disables this shorter expansion, and the longer 16189series of instructions is then created at assembly-time. The option 16190'--no-stubs' is a synonym, intended for compatibility with future 16191releases, where generation of stubs for other instructions may be 16192implemented. 16193 16194 Usually a two-operand-expression (*note GREG-base::) without a 16195matching 'GREG' directive is treated as an error by 'as'. When the 16196option '--linker-allocated-gregs' is in effect, they are instead passed 16197through to the linker, which will allocate as many global registers as 16198is needed. 16199 16200 16201File: as.info, Node: MMIX-Expand, Next: MMIX-Syntax, Prev: MMIX-Opts, Up: MMIX-Dependent 16202 162039.28.2 Instruction expansion 16204---------------------------- 16205 16206When 'as' encounters an instruction with an operand that is either not 16207known or does not fit the operand size of the instruction, 'as' (and 16208'ld') will expand the instruction into a sequence of instructions 16209semantically equivalent to the operand fitting the instruction. 16210Expansion will take place for the following instructions: 16211 16212'GETA' 16213 Expands to a sequence of four instructions: 'SETL', 'INCML', 16214 'INCMH' and 'INCH'. The operand must be a multiple of four. 16215Conditional branches 16216 A branch instruction is turned into a branch with the complemented 16217 condition and prediction bit over five instructions; four 16218 instructions setting '$255' to the operand value, which like with 16219 'GETA' must be a multiple of four, and a final 'GO $255,$255,0'. 16220'PUSHJ' 16221 Similar to expansion for conditional branches; four instructions 16222 set '$255' to the operand value, followed by a 'PUSHGO 16223 $255,$255,0'. 16224'JMP' 16225 Similar to conditional branches and 'PUSHJ'. The final instruction 16226 is 'GO $255,$255,0'. 16227 16228 The linker 'ld' is expected to shrink these expansions for code 16229assembled with '--relax' (though not currently implemented). 16230 16231 16232File: as.info, Node: MMIX-Syntax, Next: MMIX-mmixal, Prev: MMIX-Expand, Up: MMIX-Dependent 16233 162349.28.3 Syntax 16235------------- 16236 16237The assembly syntax is supposed to be upward compatible with that 16238described in Sections 1.3 and 1.4 of 'The Art of Computer Programming, 16239Volume 1'. Draft versions of those chapters as well as other MMIX 16240information is located at 16241<http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html>. Most code 16242examples from the mmixal package located there should work unmodified 16243when assembled and linked as single files, with a few noteworthy 16244exceptions (*note MMIX-mmixal::). 16245 16246 Before an instruction is emitted, the current location is aligned to 16247the next four-byte boundary. If a label is defined at the beginning of 16248the line, its value will be the aligned value. 16249 16250 In addition to the traditional hex-prefix '0x', a hexadecimal number 16251can also be specified by the prefix character '#'. 16252 16253 After all operands to an MMIX instruction or directive have been 16254specified, the rest of the line is ignored, treated as a comment. 16255 16256* Menu: 16257 16258* MMIX-Chars:: Special Characters 16259* MMIX-Symbols:: Symbols 16260* MMIX-Regs:: Register Names 16261* MMIX-Pseudos:: Assembler Directives 16262 16263 16264File: as.info, Node: MMIX-Chars, Next: MMIX-Symbols, Up: MMIX-Syntax 16265 162669.28.3.1 Special Characters 16267........................... 16268 16269The characters '*' and '#' are line comment characters; each start a 16270comment at the beginning of a line, but only at the beginning of a line. 16271A '#' prefixes a hexadecimal number if found elsewhere on a line. If a 16272'#' appears at the start of a line the whole line is treated as a 16273comment, but the line can also act as a logical line number directive 16274(*note Comments::) or a preprocessor control command (*note 16275Preprocessing::). 16276 16277 Two other characters, '%' and '!', each start a comment anywhere on 16278the line. Thus you can't use the 'modulus' and 'not' operators in 16279expressions normally associated with these two characters. 16280 16281 A ';' is a line separator, treated as a new-line, so separate 16282instructions can be specified on a single line. 16283 16284 16285File: as.info, Node: MMIX-Symbols, Next: MMIX-Regs, Prev: MMIX-Chars, Up: MMIX-Syntax 16286 162879.28.3.2 Symbols 16288................ 16289 16290The character ':' is permitted in identifiers. There are two exceptions 16291to it being treated as any other symbol character: if a symbol begins 16292with ':', it means that the symbol is in the global namespace and that 16293the current prefix should not be prepended to that symbol (*note 16294MMIX-prefix::). The ':' is then not considered part of the symbol. For 16295a symbol in the label position (first on a line), a ':' at the end of a 16296symbol is silently stripped off. A label is permitted, but not 16297required, to be followed by a ':', as with many other assembly formats. 16298 16299 The character '@' in an expression, is a synonym for '.', the current 16300location. 16301 16302 In addition to the common forward and backward local symbol formats 16303(*note Symbol Names::), they can be specified with upper-case 'B' and 16304'F', as in '8B' and '9F'. A local label defined for the current 16305position is written with a 'H' appended to the number: 16306 3H LDB $0,$1,2 16307 This and traditional local-label formats cannot be mixed: a label 16308must be defined and referred to using the same format. 16309 16310 There's a minor caveat: just as for the ordinary local symbols, the 16311local symbols are translated into ordinary symbols using control 16312characters are to hide the ordinal number of the symbol. Unfortunately, 16313these symbols are not translated back in error messages. Thus you may 16314see confusing error messages when local symbols are used. Control 16315characters '\003' (control-C) and '\004' (control-D) are used for the 16316MMIX-specific local-symbol syntax. 16317 16318 The symbol 'Main' is handled specially; it is always global. 16319 16320 By defining the symbols '__.MMIX.start..text' and 16321'__.MMIX.start..data', the address of respectively the '.text' and 16322'.data' segments of the final program can be defined, though when 16323linking more than one object file, the code or data in the object file 16324containing the symbol is not guaranteed to be start at that position; 16325just the final executable. *Note MMIX-loc::. 16326 16327 16328File: as.info, Node: MMIX-Regs, Next: MMIX-Pseudos, Prev: MMIX-Symbols, Up: MMIX-Syntax 16329 163309.28.3.3 Register names 16331....................... 16332 16333Local and global registers are specified as '$0' to '$255'. The 16334recognized special register names are 'rJ', 'rA', 'rB', 'rC', 'rD', 16335'rE', 'rF', 'rG', 'rH', 'rI', 'rK', 'rL', 'rM', 'rN', 'rO', 'rP', 'rQ', 16336'rR', 'rS', 'rT', 'rU', 'rV', 'rW', 'rX', 'rY', 'rZ', 'rBB', 'rTT', 16337'rWW', 'rXX', 'rYY' and 'rZZ'. A leading ':' is optional for special 16338register names. 16339 16340 Local and global symbols can be equated to register names and used in 16341place of ordinary registers. 16342 16343 Similarly for special registers, local and global symbols can be 16344used. Also, symbols equated from numbers and constant expressions are 16345allowed in place of a special register, except when either of the 16346options '--no-predefined-syms' and '--fixed-special-register-names' are 16347specified. Then only the special register names above are allowed for 16348the instructions having a special register operand; 'GET' and 'PUT'. 16349 16350 16351File: as.info, Node: MMIX-Pseudos, Prev: MMIX-Regs, Up: MMIX-Syntax 16352 163539.28.3.4 Assembler Directives 16354............................. 16355 16356'LOC' 16357 16358 The 'LOC' directive sets the current location to the value of the 16359 operand field, which may include changing sections. If the operand 16360 is a constant, the section is set to either '.data' if the value is 16361 '0x2000000000000000' or larger, else it is set to '.text'. Within 16362 a section, the current location may only be changed to 16363 monotonically higher addresses. A LOC expression must be a 16364 previously defined symbol or a "pure" constant. 16365 16366 An example, which sets the label PREV to the current location, and 16367 updates the current location to eight bytes forward: 16368 prev LOC @+8 16369 16370 When a LOC has a constant as its operand, a symbol 16371 '__.MMIX.start..text' or '__.MMIX.start..data' is defined depending 16372 on the address as mentioned above. Each such symbol is interpreted 16373 as special by the linker, locating the section at that address. 16374 Note that if multiple files are linked, the first object file with 16375 that section will be mapped to that address (not necessarily the 16376 file with the LOC definition). 16377 16378'LOCAL' 16379 16380 Example: 16381 LOCAL external_symbol 16382 LOCAL 42 16383 .local asymbol 16384 16385 This directive-operation generates a link-time assertion that the 16386 operand does not correspond to a global register. The operand is 16387 an expression that at link-time resolves to a register symbol or a 16388 number. A number is treated as the register having that number. 16389 There is one restriction on the use of this directive: the 16390 pseudo-directive must be placed in a section with contents, code or 16391 data. 16392 16393'IS' 16394 16395 The 'IS' directive: 16396 asymbol IS an_expression 16397 sets the symbol 'asymbol' to 'an_expression'. A symbol may not be 16398 set more than once using this directive. Local labels may be set 16399 using this directive, for example: 16400 5H IS @+4 16401 16402'GREG' 16403 16404 This directive reserves a global register, gives it an initial 16405 value and optionally gives it a symbolic name. Some examples: 16406 16407 areg GREG 16408 breg GREG data_value 16409 GREG data_buffer 16410 .greg creg, another_data_value 16411 16412 The symbolic register name can be used in place of a (non-special) 16413 register. If a value isn't provided, it defaults to zero. Unless 16414 the option '--no-merge-gregs' is specified, non-zero registers 16415 allocated with this directive may be eliminated by 'as'; another 16416 register with the same value used in its place. Any of the 16417 instructions 'CSWAP', 'GO', 'LDA', 'LDBU', 'LDB', 'LDHT', 'LDOU', 16418 'LDO', 'LDSF', 'LDTU', 'LDT', 'LDUNC', 'LDVTS', 'LDWU', 'LDW', 16419 'PREGO', 'PRELD', 'PREST', 'PUSHGO', 'STBU', 'STB', 'STCO', 'STHT', 16420 'STOU', 'STSF', 'STTU', 'STT', 'STUNC', 'SYNCD', 'SYNCID', can have 16421 a value nearby an initial value in place of its second and third 16422 operands. Here, "nearby" is defined as within the range 0...255 16423 from the initial value of such an allocated register. 16424 16425 buffer1 BYTE 0,0,0,0,0 16426 buffer2 BYTE 0,0,0,0,0 16427 ... 16428 GREG buffer1 16429 LDOU $42,buffer2 16430 In the example above, the 'Y' field of the 'LDOUI' instruction 16431 (LDOU with a constant Z) will be replaced with the global register 16432 allocated for 'buffer1', and the 'Z' field will have the value 5, 16433 the offset from 'buffer1' to 'buffer2'. The result is equivalent 16434 to this code: 16435 buffer1 BYTE 0,0,0,0,0 16436 buffer2 BYTE 0,0,0,0,0 16437 ... 16438 tmpreg GREG buffer1 16439 LDOU $42,tmpreg,(buffer2-buffer1) 16440 16441 Global registers allocated with this directive are allocated in 16442 order higher-to-lower within a file. Other than that, the exact 16443 order of register allocation and elimination is undefined. For 16444 example, the order is undefined when more than one file with such 16445 directives are linked together. With the options '-x' and 16446 '--linker-allocated-gregs', 'GREG' directives for two-operand cases 16447 like the one mentioned above can be omitted. Sufficient global 16448 registers will then be allocated by the linker. 16449 16450'BYTE' 16451 16452 The 'BYTE' directive takes a series of operands separated by a 16453 comma. If an operand is a string (*note Strings::), each character 16454 of that string is emitted as a byte. Other operands must be 16455 constant expressions without forward references, in the range 16456 0...255. If you need operands having expressions with forward 16457 references, use '.byte' (*note Byte::). An operand can be omitted, 16458 defaulting to a zero value. 16459 16460'WYDE' 16461'TETRA' 16462'OCTA' 16463 16464 The directives 'WYDE', 'TETRA' and 'OCTA' emit constants of two, 16465 four and eight bytes size respectively. Before anything else 16466 happens for the directive, the current location is aligned to the 16467 respective constant-size boundary. If a label is defined at the 16468 beginning of the line, its value will be that after the alignment. 16469 A single operand can be omitted, defaulting to a zero value emitted 16470 for the directive. Operands can be expressed as strings (*note 16471 Strings::), in which case each character in the string is emitted 16472 as a separate constant of the size indicated by the directive. 16473 16474'PREFIX' 16475 16476 The 'PREFIX' directive sets a symbol name prefix to be prepended to 16477 all symbols (except local symbols, *note MMIX-Symbols::), that are 16478 not prefixed with ':', until the next 'PREFIX' directive. Such 16479 prefixes accumulate. For example, 16480 PREFIX a 16481 PREFIX b 16482 c IS 0 16483 defines a symbol 'abc' with the value 0. 16484 16485'BSPEC' 16486'ESPEC' 16487 16488 A pair of 'BSPEC' and 'ESPEC' directives delimit a section of 16489 special contents (without specified semantics). Example: 16490 BSPEC 42 16491 TETRA 1,2,3 16492 ESPEC 16493 The single operand to 'BSPEC' must be number in the range 0...255. 16494 The 'BSPEC' number 80 is used by the GNU binutils implementation. 16495 16496 16497File: as.info, Node: MMIX-mmixal, Prev: MMIX-Syntax, Up: MMIX-Dependent 16498 164999.28.4 Differences to 'mmixal' 16500------------------------------ 16501 16502The binutils 'as' and 'ld' combination has a few differences in function 16503compared to 'mmixal' (*note mmixsite::). 16504 16505 The replacement of a symbol with a GREG-allocated register (*note 16506GREG-base::) is not handled the exactly same way in 'as' as in 'mmixal'. 16507This is apparent in the 'mmixal' example file 'inout.mms', where 16508different registers with different offsets, eventually yielding the same 16509address, are used in the first instruction. This type of difference 16510should however not affect the function of any program unless it has 16511specific assumptions about the allocated register number. 16512 16513 Line numbers (in the 'mmo' object format) are currently not 16514supported. 16515 16516 Expression operator precedence is not that of mmixal: operator 16517precedence is that of the C programming language. It's recommended to 16518use parentheses to explicitly specify wanted operator precedence 16519whenever more than one type of operators are used. 16520 16521 The serialize unary operator '&', the fractional division operator 16522'//', the logical not operator '!' and the modulus operator '%' are not 16523available. 16524 16525 Symbols are not global by default, unless the option 16526'--globalize-symbols' is passed. Use the '.global' directive to 16527globalize symbols (*note Global::). 16528 16529 Operand syntax is a bit stricter with 'as' than 'mmixal'. For 16530example, you can't say 'addu 1,2,3', instead you must write 'addu 16531$1,$2,3'. 16532 16533 You can't LOC to a lower address than those already visited (i.e., 16534"backwards"). 16535 16536 A LOC directive must come before any emitted code. 16537 16538 Predefined symbols are visible as file-local symbols after use. (In 16539the ELF file, that is--the linked mmo file has no notion of a file-local 16540symbol.) 16541 16542 Some mapping of constant expressions to sections in LOC expressions 16543is attempted, but that functionality is easily confused and should be 16544avoided unless compatibility with 'mmixal' is required. A LOC 16545expression to '0x2000000000000000' or higher, maps to the '.data' 16546section and lower addresses map to the '.text' section (*note 16547MMIX-loc::). 16548 16549 The code and data areas are each contiguous. Sparse programs with 16550far-away LOC directives will take up the same amount of space as a 16551contiguous program with zeros filled in the gaps between the LOC 16552directives. If you need sparse programs, you might try and get the 16553wanted effect with a linker script and splitting up the code parts into 16554sections (*note Section::). Assembly code for this, to be compatible 16555with 'mmixal', would look something like: 16556 .if 0 16557 LOC away_expression 16558 .else 16559 .section away,"ax" 16560 .fi 16561 'as' will not execute the LOC directive and 'mmixal' ignores the 16562lines with '.'. This construct can be used generally to help 16563compatibility. 16564 16565 Symbols can't be defined twice-not even to the same value. 16566 16567 Instruction mnemonics are recognized case-insensitive, though the 16568'IS' and 'GREG' pseudo-operations must be specified in upper-case 16569characters. 16570 16571 There's no unicode support. 16572 16573 The following is a list of programs in 'mmix.tar.gz', available at 16574<http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html>, last checked 16575with the version dated 2001-08-25 (md5sum 16576c393470cfc86fac040487d22d2bf0172) that assemble with 'mmixal' but do not 16577assemble with 'as': 16578 16579'silly.mms' 16580 LOC to a previous address. 16581'sim.mms' 16582 Redefines symbol 'Done'. 16583'test.mms' 16584 Uses the serial operator '&'. 16585 16586 16587File: as.info, Node: MSP430-Dependent, Next: NDS32-Dependent, Prev: MMIX-Dependent, Up: Machine Dependencies 16588 165899.29 MSP 430 Dependent Features 16590=============================== 16591 16592* Menu: 16593 16594* MSP430 Options:: Options 16595* MSP430 Syntax:: Syntax 16596* MSP430 Floating Point:: Floating Point 16597* MSP430 Directives:: MSP 430 Machine Directives 16598* MSP430 Opcodes:: Opcodes 16599* MSP430 Profiling Capability:: Profiling Capability 16600 16601 16602File: as.info, Node: MSP430 Options, Next: MSP430 Syntax, Up: MSP430-Dependent 16603 166049.29.1 Options 16605-------------- 16606 16607'-mmcu' 16608 selects the mcu architecture. If the architecture is 430Xv2 then 16609 this also enables NOP generation unless the '-mN' is also 16610 specified. 16611 16612'-mcpu' 16613 selects the cpu architecture. If the architecture is 430Xv2 then 16614 this also enables NOP generation unless the '-mN' is also 16615 specified. 16616 16617'-msilicon-errata=NAME[,NAME...]' 16618 Implements a fixup for named silicon errata. Multiple silicon 16619 errata can be specified by multiple uses of the '-msilicon-errata' 16620 option and/or by including the errata names, separated by commas, 16621 on an individual '-msilicon-errata' option. Errata names currently 16622 recognised by the assembler are: 16623 16624 'cpu4' 16625 'PUSH #4' and 'PUSH #8' need longer encodings on the MSP430. 16626 This option is enabled by default, and cannot be disabled. 16627 'cpu8' 16628 Do not set the 'SP' to an odd value. 16629 'cpu11' 16630 Do not update the 'SR' and the 'PC' in the same instruction. 16631 'cpu12' 16632 Do not use the 'PC' in a 'CMP' or 'BIT' instruction. 16633 'cpu13' 16634 Do not use an arithmetic instruction to modify the 'SR'. 16635 'cpu19' 16636 Insert 'NOP' after 'CPUOFF'. 16637 16638'-msilicon-errata-warn=NAME[,NAME...]' 16639 Like the '-msilicon-errata' option except that instead of fixing 16640 the specified errata, a warning message is issued instead. This 16641 option can be used alongside '-msilicon-errata' to generate 16642 messages whenever a problem is fixed, or on its own in order to 16643 inspect code for potential problems. 16644 16645'-mP' 16646 enables polymorph instructions handler. 16647 16648'-mQ' 16649 enables relaxation at assembly time. DANGEROUS! 16650 16651'-ml' 16652 indicates that the input uses the large code model. 16653 16654'-mn' 16655 enables the generation of a NOP instruction following any 16656 instruction that might change the interrupts enabled/disabled 16657 state. The pipelined nature of the MSP430 core means that any 16658 instruction that changes the interrupt state ('EINT', 'DINT', 'BIC 16659 #8, SR', 'BIS #8, SR' or 'MOV.W <>, SR') must be followed by a NOP 16660 instruction in order to ensure the correct processing of 16661 interrupts. By default it is up to the programmer to supply these 16662 NOP instructions, but this command-line option enables the 16663 automatic insertion by the assembler, if they are missing. 16664 16665'-mN' 16666 disables the generation of a NOP instruction following any 16667 instruction that might change the interrupts enabled/disabled 16668 state. This is the default behaviour. 16669 16670'-my' 16671 tells the assembler to generate a warning message if a NOP does not 16672 immediately follow an instruction that enables or disables 16673 interrupts. This is the default. 16674 16675 Note that this option can be stacked with the '-mn' option so that 16676 the assembler will both warn about missing NOP instructions and 16677 then insert them automatically. 16678 16679'-mY' 16680 disables warnings about missing NOP instructions. 16681 16682'-md' 16683 mark the object file as one that requires data to copied from ROM 16684 to RAM at execution startup. Disabled by default. 16685 16686'-mdata-region=REGION' 16687 Select the region data will be placed in. Region placement is 16688 performed by the compiler and linker. The only effect this option 16689 will have on the assembler is that if UPPER or EITHER is selected, 16690 then the symbols to initialise high data and bss will be defined. 16691 Valid REGION values are: 16692 'none' 16693 'lower' 16694 'upper' 16695 'either' 16696 16697 16698File: as.info, Node: MSP430 Syntax, Next: MSP430 Floating Point, Prev: MSP430 Options, Up: MSP430-Dependent 16699 167009.29.2 Syntax 16701------------- 16702 16703* Menu: 16704 16705* MSP430-Macros:: Macros 16706* MSP430-Chars:: Special Characters 16707* MSP430-Regs:: Register Names 16708* MSP430-Ext:: Assembler Extensions 16709 16710 16711File: as.info, Node: MSP430-Macros, Next: MSP430-Chars, Up: MSP430 Syntax 16712 167139.29.2.1 Macros 16714............... 16715 16716The macro syntax used on the MSP 430 is like that described in the MSP 16717430 Family Assembler Specification. Normal 'as' macros should still 16718work. 16719 16720 Additional built-in macros are: 16721 16722'llo(exp)' 16723 Extracts least significant word from 32-bit expression 'exp'. 16724 16725'lhi(exp)' 16726 Extracts most significant word from 32-bit expression 'exp'. 16727 16728'hlo(exp)' 16729 Extracts 3rd word from 64-bit expression 'exp'. 16730 16731'hhi(exp)' 16732 Extracts 4rd word from 64-bit expression 'exp'. 16733 16734 They normally being used as an immediate source operand. 16735 mov #llo(1), r10 ; == mov #1, r10 16736 mov #lhi(1), r10 ; == mov #0, r10 16737 16738 16739File: as.info, Node: MSP430-Chars, Next: MSP430-Regs, Prev: MSP430-Macros, Up: MSP430 Syntax 16740 167419.29.2.2 Special Characters 16742........................... 16743 16744A semicolon (';') appearing anywhere on a line starts a comment that 16745extends to the end of that line. 16746 16747 If a '#' appears as the first character of a line then the whole line 16748is treated as a comment, but it can also be a logical line number 16749directive (*note Comments::) or a preprocessor control command (*note 16750Preprocessing::). 16751 16752 Multiple statements can appear on the same line provided that they 16753are separated by the '{' character. 16754 16755 The character '$' in jump instructions indicates current location and 16756implemented only for TI syntax compatibility. 16757 16758 16759File: as.info, Node: MSP430-Regs, Next: MSP430-Ext, Prev: MSP430-Chars, Up: MSP430 Syntax 16760 167619.29.2.3 Register Names 16762....................... 16763 16764General-purpose registers are represented by predefined symbols of the 16765form 'rN' (for global registers), where N represents a number between 16766'0' and '15'. The leading letters may be in either upper or lower case; 16767for example, 'r13' and 'R7' are both valid register names. 16768 16769 Register names 'PC', 'SP' and 'SR' cannot be used as register names 16770and will be treated as variables. Use 'r0', 'r1', and 'r2' instead. 16771 16772 16773File: as.info, Node: MSP430-Ext, Prev: MSP430-Regs, Up: MSP430 Syntax 16774 167759.29.2.4 Assembler Extensions 16776............................. 16777 16778'@rN' 16779 As destination operand being treated as '0(rn)' 16780 16781'0(rN)' 16782 As source operand being treated as '@rn' 16783 16784'jCOND +N' 16785 Skips next N bytes followed by jump instruction and equivalent to 16786 'jCOND $+N+2' 16787 16788 Also, there are some instructions, which cannot be found in other 16789assemblers. These are branch instructions, which has different opcodes 16790upon jump distance. They all got PC relative addressing mode. 16791 16792'beq label' 16793 A polymorph instruction which is 'jeq label' in case if jump 16794 distance within allowed range for cpu's jump instruction. If not, 16795 this unrolls into a sequence of 16796 jne $+6 16797 br label 16798 16799'bne label' 16800 A polymorph instruction which is 'jne label' or 'jeq +4; br label' 16801 16802'blt label' 16803 A polymorph instruction which is 'jl label' or 'jge +4; br label' 16804 16805'bltn label' 16806 A polymorph instruction which is 'jn label' or 'jn +2; jmp +4; br 16807 label' 16808 16809'bltu label' 16810 A polymorph instruction which is 'jlo label' or 'jhs +2; br label' 16811 16812'bge label' 16813 A polymorph instruction which is 'jge label' or 'jl +4; br label' 16814 16815'bgeu label' 16816 A polymorph instruction which is 'jhs label' or 'jlo +4; br label' 16817 16818'bgt label' 16819 A polymorph instruction which is 'jeq +2; jge label' or 'jeq +6; jl 16820 +4; br label' 16821 16822'bgtu label' 16823 A polymorph instruction which is 'jeq +2; jhs label' or 'jeq +6; 16824 jlo +4; br label' 16825 16826'bleu label' 16827 A polymorph instruction which is 'jeq label; jlo label' or 'jeq +2; 16828 jhs +4; br label' 16829 16830'ble label' 16831 A polymorph instruction which is 'jeq label; jl label' or 'jeq +2; 16832 jge +4; br label' 16833 16834'jump label' 16835 A polymorph instruction which is 'jmp label' or 'br label' 16836 16837 16838File: as.info, Node: MSP430 Floating Point, Next: MSP430 Directives, Prev: MSP430 Syntax, Up: MSP430-Dependent 16839 168409.29.3 Floating Point 16841--------------------- 16842 16843The MSP 430 family uses IEEE 32-bit floating-point numbers. 16844 16845 16846File: as.info, Node: MSP430 Directives, Next: MSP430 Opcodes, Prev: MSP430 Floating Point, Up: MSP430-Dependent 16847 168489.29.4 MSP 430 Machine Directives 16849--------------------------------- 16850 16851'.file' 16852 This directive is ignored; it is accepted for compatibility with 16853 other MSP 430 assemblers. 16854 16855 _Warning:_ in other versions of the GNU assembler, '.file' is 16856 used for the directive called '.app-file' in the MSP 430 16857 support. 16858 16859'.line' 16860 This directive is ignored; it is accepted for compatibility with 16861 other MSP 430 assemblers. 16862 16863'.arch' 16864 Sets the target microcontroller in the same way as the '-mmcu' 16865 command-line option. 16866 16867'.cpu' 16868 Sets the target architecture in the same way as the '-mcpu' 16869 command-line option. 16870 16871'.profiler' 16872 This directive instructs assembler to add new profile entry to the 16873 object file. 16874 16875'.refsym' 16876 This directive instructs assembler to add an undefined reference to 16877 the symbol following the directive. The maximum symbol name length 16878 is 1023 characters. No relocation is created for this symbol; it 16879 will exist purely for pulling in object files from archives. Note 16880 that this reloc is not sufficient to prevent garbage collection; 16881 use a KEEP() directive in the linker file to preserve such objects. 16882 16883'.mspabi_attribute' 16884 This directive tells the assembler what the MSPABI build attributes 16885 for this file are. This is used for validating the command line 16886 options passed to the assembler against the options the original 16887 source file was compiled with. The expected format is: 16888 '.mspabi_attribute tag_name, tag_value' For example, to set the tag 16889 'OFBA_MSPABI_Tag_ISA' to 'MSP430X': '.mspabi_attribute 4, 2' 16890 16891 See the 'MSP430 EABI, document slaa534' for the details on tag 16892 names and values. 16893 16894 16895File: as.info, Node: MSP430 Opcodes, Next: MSP430 Profiling Capability, Prev: MSP430 Directives, Up: MSP430-Dependent 16896 168979.29.5 Opcodes 16898-------------- 16899 16900'as' implements all the standard MSP 430 opcodes. No additional 16901pseudo-instructions are needed on this family. 16902 16903 For information on the 430 machine instruction set, see 'MSP430 16904User's Manual, document slau049d', Texas Instrument, Inc. 16905 16906 16907File: as.info, Node: MSP430 Profiling Capability, Prev: MSP430 Opcodes, Up: MSP430-Dependent 16908 169099.29.6 Profiling Capability 16910--------------------------- 16911 16912It is a performance hit to use gcc's profiling approach for this tiny 16913target. Even more - jtag hardware facility does not perform any 16914profiling functions. However we've got gdb's built-in simulator where 16915we can do anything. 16916 16917 We define new section '.profiler' which holds all profiling 16918information. We define new pseudo operation '.profiler' which will 16919instruct assembler to add new profile entry to the object file. Profile 16920should take place at the present address. 16921 16922 Pseudo operation format: 16923 16924 '.profiler flags,function_to_profile [, cycle_corrector, extra]' 16925 16926 where: 16927 16928 'flags' is a combination of the following characters: 16929 16930 's' 16931 function entry 16932 'x' 16933 function exit 16934 'i' 16935 function is in init section 16936 'f' 16937 function is in fini section 16938 'l' 16939 library call 16940 'c' 16941 libc standard call 16942 'd' 16943 stack value demand 16944 'I' 16945 interrupt service routine 16946 'P' 16947 prologue start 16948 'p' 16949 prologue end 16950 'E' 16951 epilogue start 16952 'e' 16953 epilogue end 16954 'j' 16955 long jump / sjlj unwind 16956 'a' 16957 an arbitrary code fragment 16958 't' 16959 extra parameter saved (a constant value like frame size) 16960 16961'function_to_profile' 16962 a function address 16963'cycle_corrector' 16964 a value which should be added to the cycle counter, zero if 16965 omitted. 16966'extra' 16967 any extra parameter, zero if omitted. 16968 16969 For example: 16970 .global fxx 16971 .type fxx,@function 16972 fxx: 16973 .LFrameOffset_fxx=0x08 16974 .profiler "scdP", fxx ; function entry. 16975 ; we also demand stack value to be saved 16976 push r11 16977 push r10 16978 push r9 16979 push r8 16980 .profiler "cdpt",fxx,0, .LFrameOffset_fxx ; check stack value at this point 16981 ; (this is a prologue end) 16982 ; note, that spare var filled with 16983 ; the farme size 16984 mov r15,r8 16985 ... 16986 .profiler cdE,fxx ; check stack 16987 pop r8 16988 pop r9 16989 pop r10 16990 pop r11 16991 .profiler xcde,fxx,3 ; exit adds 3 to the cycle counter 16992 ret ; cause 'ret' insn takes 3 cycles 16993 16994 16995File: as.info, Node: NDS32-Dependent, Next: NiosII-Dependent, Prev: MSP430-Dependent, Up: Machine Dependencies 16996 169979.30 NDS32 Dependent Features 16998============================= 16999 17000The NDS32 processors family includes high-performance and low-power 1700132-bit processors for high-end to low-end. GNU 'as' for NDS32 17002architectures supports NDS32 ISA version 3. For detail about NDS32 17003instruction set, please see the AndeStar ISA User Manual which is 17004available at http://www.andestech.com/en/index/index.htm 17005 17006* Menu: 17007 17008* NDS32 Options:: Assembler options 17009* NDS32 Syntax:: High-level assembly macros 17010 17011 17012File: as.info, Node: NDS32 Options, Next: NDS32 Syntax, Up: NDS32-Dependent 17013 170149.30.1 NDS32 Options 17015-------------------- 17016 17017The NDS32 configurations of GNU 'as' support these special options: 17018 17019'-O1' 17020 Optimize for performance. 17021 17022'-Os' 17023 Optimize for space. 17024 17025'-EL' 17026 Produce little endian data output. 17027 17028'-EB' 17029 Produce little endian data output. 17030 17031'-mpic' 17032 Generate PIC. 17033 17034'-mno-fp-as-gp-relax' 17035 Suppress fp-as-gp relaxation for this file. 17036 17037'-mb2bb-relax' 17038 Back-to-back branch optimization. 17039 17040'-mno-all-relax' 17041 Suppress all relaxation for this file. 17042 17043'-march=<arch name>' 17044 Assemble for architecture <arch name> which could be v3, v3j, v3m, 17045 v3f, v3s, v2, v2j, v2f, v2s. 17046 17047'-mbaseline=<baseline>' 17048 Assemble for baseline <baseline> which could be v2, v3, v3m. 17049 17050'-mfpu-freg=FREG' 17051 Specify a FPU configuration. 17052 '0 8 SP / 4 DP registers' 17053 '1 16 SP / 8 DP registers' 17054 '2 32 SP / 16 DP registers' 17055 '3 32 SP / 32 DP registers' 17056 17057'-mabi=ABI' 17058 Specify a abi version <abi> could be v1, v2, v2fp, v2fpp. 17059 17060'-m[no-]mac' 17061 Enable/Disable Multiply instructions support. 17062 17063'-m[no-]div' 17064 Enable/Disable Divide instructions support. 17065 17066'-m[no-]16bit-ext' 17067 Enable/Disable 16-bit extension 17068 17069'-m[no-]dx-regs' 17070 Enable/Disable d0/d1 registers 17071 17072'-m[no-]perf-ext' 17073 Enable/Disable Performance extension 17074 17075'-m[no-]perf2-ext' 17076 Enable/Disable Performance extension 2 17077 17078'-m[no-]string-ext' 17079 Enable/Disable String extension 17080 17081'-m[no-]reduced-regs' 17082 Enable/Disable Reduced Register configuration (GPR16) option 17083 17084'-m[no-]audio-isa-ext' 17085 Enable/Disable AUDIO ISA extension 17086 17087'-m[no-]fpu-sp-ext' 17088 Enable/Disable FPU SP extension 17089 17090'-m[no-]fpu-dp-ext' 17091 Enable/Disable FPU DP extension 17092 17093'-m[no-]fpu-fma' 17094 Enable/Disable FPU fused-multiply-add instructions 17095 17096'-mall-ext' 17097 Turn on all extensions and instructions support 17098 17099 17100File: as.info, Node: NDS32 Syntax, Prev: NDS32 Options, Up: NDS32-Dependent 17101 171029.30.2 Syntax 17103------------- 17104 17105* Menu: 17106 17107* NDS32-Chars:: Special Characters 17108* NDS32-Regs:: Register Names 17109* NDS32-Ops:: Pseudo Instructions 17110 17111 17112File: as.info, Node: NDS32-Chars, Next: NDS32-Regs, Up: NDS32 Syntax 17113 171149.30.2.1 Special Characters 17115........................... 17116 17117Use '#' at column 1 and '!' anywhere in the line except inside quotes. 17118 17119 Multiple instructions in a line are allowed though not recommended 17120and should be separated by ';'. 17121 17122 Assembler is not case-sensitive in general except user defined label. 17123For example, 'jral F1' is different from 'jral f1' while it is the same 17124as 'JRAL F1'. 17125 17126 17127File: as.info, Node: NDS32-Regs, Next: NDS32-Ops, Prev: NDS32-Chars, Up: NDS32 Syntax 17128 171299.30.2.2 Register Names 17130....................... 17131 17132'General purpose registers (GPR)' 17133 There are 32 32-bit general purpose registers $r0 to $r31. 17134 17135'Accumulators d0 and d1' 17136 64-bit accumulators: $d0.hi, $d0.lo, $d1.hi, and $d1.lo. 17137 17138'Assembler reserved register $ta' 17139 Register $ta ($r15) is reserved for assembler using. 17140 17141'Operating system reserved registers $p0 and $p1' 17142 Registers $p0 ($r26) and $p1 ($r27) are used by operating system as 17143 scratch registers. 17144 17145'Frame pointer $fp' 17146 Register $r28 is regarded as the frame pointer. 17147 17148'Global pointer' 17149 Register $r29 is regarded as the global pointer. 17150 17151'Link pointer' 17152 Register $r30 is regarded as the link pointer. 17153 17154'Stack pointer' 17155 Register $r31 is regarded as the stack pointer. 17156 17157 17158File: as.info, Node: NDS32-Ops, Prev: NDS32-Regs, Up: NDS32 Syntax 17159 171609.30.2.3 Pseudo Instructions 17161............................ 17162 17163'li rt5,imm32' 17164 load 32-bit integer into register rt5. 'sethi rt5,hi20(imm32)' and 17165 then 'ori rt5,reg,lo12(imm32)'. 17166 17167'la rt5,var' 17168 Load 32-bit address of var into register rt5. 'sethi 17169 rt5,hi20(var)' and then 'ori reg,rt5,lo12(var)' 17170 17171'l.[bhw] rt5,var' 17172 Load value of var into register rt5. 'sethi $ta,hi20(var)' and 17173 then 'l[bhw]i rt5,[$ta+lo12(var)]' 17174 17175'l.[bh]s rt5,var' 17176 Load value of var into register rt5. 'sethi $ta,hi20(var)' and 17177 then 'l[bh]si rt5,[$ta+lo12(var)]' 17178 17179'l.[bhw]p rt5,var,inc' 17180 Load value of var into register rt5 and increment $ta by amount 17181 inc. 'la $ta,var' and then 'l[bhw]i.bi rt5,[$ta],inc' 17182 17183'l.[bhw]pc rt5,inc' 17184 Continue loading value of var into register rt5 and increment $ta 17185 by amount inc. 'l[bhw]i.bi rt5,[$ta],inc.' 17186 17187'l.[bh]sp rt5,var,inc' 17188 Load value of var into register rt5 and increment $ta by amount 17189 inc. 'la $ta,var' and then 'l[bh]si.bi rt5,[$ta],inc' 17190 17191'l.[bh]spc rt5,inc' 17192 Continue loading value of var into register rt5 and increment $ta 17193 by amount inc. 'l[bh]si.bi rt5,[$ta],inc.' 17194 17195's.[bhw] rt5,var' 17196 Store register rt5 to var. 'sethi $ta,hi20(var)' and then 's[bhw]i 17197 rt5,[$ta+lo12(var)]' 17198 17199's.[bhw]p rt5,var,inc' 17200 Store register rt5 to var and increment $ta by amount inc. 'la 17201 $ta,var' and then 's[bhw]i.bi rt5,[$ta],inc' 17202 17203's.[bhw]pc rt5,inc' 17204 Continue storing register rt5 to var and increment $ta by amount 17205 inc. 's[bhw]i.bi rt5,[$ta],inc.' 17206 17207'not rt5,ra5' 17208 Alias of 'nor rt5,ra5,ra5'. 17209 17210'neg rt5,ra5' 17211 Alias of 'subri rt5,ra5,0'. 17212 17213'br rb5' 17214 Depending on how it is assembled, it is translated into 'r5 rb5' or 17215 'jr rb5'. 17216 17217'b label' 17218 Branch to label depending on how it is assembled, it is translated 17219 into 'j8 label', 'j label', or "'la $ta,label' 'br $ta'". 17220 17221'bral rb5' 17222 Alias of jral br5 depending on how it is assembled, it is 17223 translated into 'jral5 rb5' or 'jral rb5'. 17224 17225'bal fname' 17226 Alias of jal fname depending on how it is assembled, it is 17227 translated into 'jal fname' or "'la $ta,fname' 'bral $ta'". 17228 17229'call fname' 17230 Call function fname same as 'jal fname'. 17231 17232'move rt5,ra5' 17233 For 16-bit, this is 'mov55 rt5,ra5'. For no 16-bit, this is 'ori 17234 rt5,ra5,0'. 17235 17236'move rt5,var' 17237 This is the same as 'l.w rt5,var'. 17238 17239'move rt5,imm32' 17240 This is the same as 'li rt5,imm32'. 17241 17242'pushm ra5,rb5' 17243 Push contents of registers from ra5 to rb5 into stack. 17244 17245'push ra5' 17246 Push content of register ra5 into stack. (same 'pushm ra5,ra5'). 17247 17248'push.d var' 17249 Push value of double-word variable var into stack. 17250 17251'push.w var' 17252 Push value of word variable var into stack. 17253 17254'push.h var' 17255 Push value of half-word variable var into stack. 17256 17257'push.b var' 17258 Push value of byte variable var into stack. 17259 17260'pusha var' 17261 Push 32-bit address of variable var into stack. 17262 17263'pushi imm32' 17264 Push 32-bit immediate value into stack. 17265 17266'popm ra5,rb5' 17267 Pop top of stack values into registers ra5 to rb5. 17268 17269'pop rt5' 17270 Pop top of stack value into register. (same as 'popm rt5,rt5'.) 17271 17272'pop.d var,ra5' 17273 Pop value of double-word variable var from stack using register ra5 17274 as 2nd scratch register. (1st is $ta) 17275 17276'pop.w var,ra5' 17277 Pop value of word variable var from stack using register ra5. 17278 17279'pop.h var,ra5' 17280 Pop value of half-word variable var from stack using register ra5. 17281 17282'pop.b var,ra5' 17283 Pop value of byte variable var from stack using register ra5. 17284 17285 17286File: as.info, Node: NiosII-Dependent, Next: NS32K-Dependent, Prev: NDS32-Dependent, Up: Machine Dependencies 17287 172889.31 Nios II Dependent Features 17289=============================== 17290 17291* Menu: 17292 17293* Nios II Options:: Options 17294* Nios II Syntax:: Syntax 17295* Nios II Relocations:: Relocations 17296* Nios II Directives:: Nios II Machine Directives 17297* Nios II Opcodes:: Opcodes 17298 17299 17300File: as.info, Node: Nios II Options, Next: Nios II Syntax, Up: NiosII-Dependent 17301 173029.31.1 Options 17303-------------- 17304 17305'-relax-section' 17306 Replace identified out-of-range branches with PC-relative 'jmp' 17307 sequences when possible. The generated code sequences are suitable 17308 for use in position-independent code, but there is a practical 17309 limit on the extended branch range because of the length of the 17310 sequences. This option is the default. 17311 17312'-relax-all' 17313 Replace branch instructions not determinable to be in range and all 17314 call instructions with 'jmp' and 'callr' sequences (respectively). 17315 This option generates absolute relocations against the target 17316 symbols and is not appropriate for position-independent code. 17317 17318'-no-relax' 17319 Do not replace any branches or calls. 17320 17321'-EB' 17322 Generate big-endian output. 17323 17324'-EL' 17325 Generate little-endian output. This is the default. 17326 17327'-march=ARCHITECTURE' 17328 This option specifies the target architecture. The assembler 17329 issues an error message if an attempt is made to assemble an 17330 instruction which will not execute on the target architecture. The 17331 following architecture names are recognized: 'r1', 'r2'. The 17332 default is 'r1'. 17333 17334 17335File: as.info, Node: Nios II Syntax, Next: Nios II Relocations, Prev: Nios II Options, Up: NiosII-Dependent 17336 173379.31.2 Syntax 17338------------- 17339 17340* Menu: 17341 17342* Nios II Chars:: Special Characters 17343 17344 17345File: as.info, Node: Nios II Chars, Up: Nios II Syntax 17346 173479.31.2.1 Special Characters 17348........................... 17349 17350'#' is the line comment character. ';' is the line separator character. 17351 17352 17353File: as.info, Node: Nios II Relocations, Next: Nios II Directives, Prev: Nios II Syntax, Up: NiosII-Dependent 17354 173559.31.3 Nios II Machine Relocations 17356---------------------------------- 17357 17358'%hiadj(EXPRESSION)' 17359 Extract the upper 16 bits of EXPRESSION and add one if the 15th bit 17360 is set. 17361 17362 The value of '%hiadj(EXPRESSION)' is: 17363 ((EXPRESSION >> 16) & 0xffff) + ((EXPRESSION >> 15) & 0x01) 17364 17365 The '%hiadj' relocation is intended to be used with the 'addi', 17366 'ld' or 'st' instructions along with a '%lo', in order to load a 17367 32-bit constant. 17368 17369 movhi r2, %hiadj(symbol) 17370 addi r2, r2, %lo(symbol) 17371 17372'%hi(EXPRESSION)' 17373 Extract the upper 16 bits of EXPRESSION. 17374 17375'%lo(EXPRESSION)' 17376 Extract the lower 16 bits of EXPRESSION. 17377 17378'%gprel(EXPRESSION)' 17379 Subtract the value of the symbol '_gp' from EXPRESSION. 17380 17381 The intention of the '%gprel' relocation is to have a fast small 17382 area of memory which only takes a 16-bit immediate to access. 17383 17384 .section .sdata 17385 fastint: 17386 .int 123 17387 .section .text 17388 ldw r4, %gprel(fastint)(gp) 17389 17390'%call(EXPRESSION)' 17391'%call_lo(EXPRESSION)' 17392'%call_hiadj(EXPRESSION)' 17393'%got(EXPRESSION)' 17394'%got_lo(EXPRESSION)' 17395'%got_hiadj(EXPRESSION)' 17396'%gotoff(EXPRESSION)' 17397'%gotoff_lo(EXPRESSION)' 17398'%gotoff_hiadj(EXPRESSION)' 17399'%tls_gd(EXPRESSION)' 17400'%tls_ie(EXPRESSION)' 17401'%tls_le(EXPRESSION)' 17402'%tls_ldm(EXPRESSION)' 17403'%tls_ldo(EXPRESSION)' 17404 17405 These relocations support the ABI for Linux Systems documented in 17406 the 'Nios II Processor Reference Handbook'. 17407 17408 17409File: as.info, Node: Nios II Directives, Next: Nios II Opcodes, Prev: Nios II Relocations, Up: NiosII-Dependent 17410 174119.31.4 Nios II Machine Directives 17412--------------------------------- 17413 17414'.align EXPRESSION [, EXPRESSION]' 17415 This is the generic '.align' directive, however this aligns to a 17416 power of two. 17417 17418'.half EXPRESSION' 17419 Create an aligned constant 2 bytes in size. 17420 17421'.word EXPRESSION' 17422 Create an aligned constant 4 bytes in size. 17423 17424'.dword EXPRESSION' 17425 Create an aligned constant 8 bytes in size. 17426 17427'.2byte EXPRESSION' 17428 Create an unaligned constant 2 bytes in size. 17429 17430'.4byte EXPRESSION' 17431 Create an unaligned constant 4 bytes in size. 17432 17433'.8byte EXPRESSION' 17434 Create an unaligned constant 8 bytes in size. 17435 17436'.16byte EXPRESSION' 17437 Create an unaligned constant 16 bytes in size. 17438 17439'.set noat' 17440 Allows assembly code to use 'at' register without warning. Macro 17441 or relaxation expansions generate warnings. 17442 17443'.set at' 17444 Assembly code using 'at' register generates warnings, and macro 17445 expansion and relaxation are enabled. 17446 17447'.set nobreak' 17448 Allows assembly code to use 'ba' and 'bt' registers without 17449 warning. 17450 17451'.set break' 17452 Turns warnings back on for using 'ba' and 'bt' registers. 17453 17454'.set norelax' 17455 Do not replace any branches or calls. 17456 17457'.set relaxsection' 17458 Replace identified out-of-range branches with 'jmp' sequences 17459 (default). 17460 17461'.set relaxsection' 17462 Replace all branch and call instructions with 'jmp' and 'callr' 17463 sequences. 17464 17465'.set ...' 17466 All other '.set' are the normal use. 17467 17468 17469File: as.info, Node: Nios II Opcodes, Prev: Nios II Directives, Up: NiosII-Dependent 17470 174719.31.5 Opcodes 17472-------------- 17473 17474'as' implements all the standard Nios II opcodes documented in the 'Nios 17475II Processor Reference Handbook', including the assembler 17476pseudo-instructions. 17477 17478 17479File: as.info, Node: NS32K-Dependent, Next: OpenRISC-Dependent, Prev: NiosII-Dependent, Up: Machine Dependencies 17480 174819.32 NS32K Dependent Features 17482============================= 17483 17484* Menu: 17485 17486* NS32K Syntax:: Syntax 17487 17488 17489File: as.info, Node: NS32K Syntax, Up: NS32K-Dependent 17490 174919.32.1 Syntax 17492------------- 17493 17494* Menu: 17495 17496* NS32K-Chars:: Special Characters 17497 17498 17499File: as.info, Node: NS32K-Chars, Up: NS32K Syntax 17500 175019.32.1.1 Special Characters 17502........................... 17503 17504The presence of a '#' appearing anywhere on a line indicates the start 17505of a comment that extends to the end of that line. 17506 17507 If a '#' appears as the first character of a line then the whole line 17508is treated as a comment, but in this case the line can also be a logical 17509line number directive (*note Comments::) or a preprocessor control 17510command (*note Preprocessing::). 17511 17512 If Sequent compatibility has been configured into the assembler then 17513the '|' character appearing as the first character on a line will also 17514indicate the start of a line comment. 17515 17516 The ';' character can be used to separate statements on the same 17517line. 17518 17519 17520File: as.info, Node: OpenRISC-Dependent, Next: PDP-11-Dependent, Prev: NS32K-Dependent, Up: Machine Dependencies 17521 175229.33 OPENRISC Dependent Features 17523================================ 17524 17525* Menu: 17526 17527* OpenRISC-Syntax:: Syntax 17528* OpenRISC-Float:: Floating Point 17529* OpenRISC-Directives:: OpenRISC Machine Directives 17530* OpenRISC-Opcodes:: Opcodes 17531 17532 17533File: as.info, Node: OpenRISC-Syntax, Next: OpenRISC-Float, Up: OpenRISC-Dependent 17534 175359.33.1 OpenRISC Syntax 17536---------------------- 17537 17538The assembler syntax follows the OpenRISC 1000 Architecture Manual. 17539 17540* Menu: 17541 17542* OpenRISC-Chars:: Special Characters 17543* OpenRISC-Regs:: Register Names 17544* OpenRISC-Relocs:: Relocations 17545 17546 17547File: as.info, Node: OpenRISC-Chars, Next: OpenRISC-Regs, Up: OpenRISC-Syntax 17548 175499.33.1.1 Special Characters 17550........................... 17551 17552A '#' character appearing anywhere on a line indicates the start of a 17553comment that extends to the end of that line. 17554 17555 ';' can be used instead of a newline to separate statements. 17556 17557 17558File: as.info, Node: OpenRISC-Regs, Next: OpenRISC-Relocs, Prev: OpenRISC-Chars, Up: OpenRISC-Syntax 17559 175609.33.1.2 Register Names 17561....................... 17562 17563The OpenRISC register file contains 32 general pupose registers. 17564 17565 * The 32 general purpose registers are referred to as 'rN'. 17566 17567 * The stack pointer register 'r1' can be referenced using the alias 17568 'sp'. 17569 17570 * The frame pointer register 'r2' can be referenced using the alias 17571 'fp'. 17572 17573 * The link register 'r9' can be referenced using the alias 'lr'. 17574 17575 Floating point operations use the same general purpose registers. 17576The instructions 'lf.itof.s' (single precision) and 'lf.itof.d' (double 17577precision) can be used to convert integer values to floating point. 17578Likewise, instructions 'lf.ftoi.s' (single precision) and 'lf.ftoi.d' 17579(double precision) can be used to convert floating point to integer. 17580 17581 OpenRISC also contains privileged special purpose registers (SPRs). 17582The SPRs are accessed using the 'l.mfspr' and 'l.mtspr' instructions. 17583 17584 17585File: as.info, Node: OpenRISC-Relocs, Prev: OpenRISC-Regs, Up: OpenRISC-Syntax 17586 175879.33.1.3 Relocations 17588.................... 17589 17590ELF relocations are available as defined in the OpenRISC architecture 17591specification. 17592 17593 'R_OR1K_HI_16_IN_INSN' is obtained using 'hi' and 17594'R_OR1K_LO_16_IN_INSN' and 'R_OR1K_SLO16' are obtained using 'lo'. For 17595signed offsets 'R_OR1K_AHI16' is obtained from 'ha'. For example: 17596 17597 l.movhi r5, hi(symbol) 17598 l.ori r5, r5, lo(symbol) 17599 17600 l.movhi r5, ha(symbol) 17601 l.addi r5, r5, lo(symbol) 17602 17603 These "high" mnemonics extract bits 31:16 of their operand, and the 17604"low" mnemonics extract bits 15:0 of their operand. 17605 17606 The PC relative relocation 'R_OR1K_GOTPC_HI16' can be obtained by 17607enclosing an operand inside of 'gotpchi'. Likewise, the 17608'R_OR1K_GOTPC_LO16' relocation can be obtained using 'gotpclo'. These 17609are mostly used when assembling PIC code. For example, the standard PIC 17610sequence on OpenRISC to get the base of the global offset table, PC 17611relative, into a register, can be performed as: 17612 17613 l.jal 0x8 17614 l.movhi r17, gotpchi(_GLOBAL_OFFSET_TABLE_-4) 17615 l.ori r17, r17, gotpclo(_GLOBAL_OFFSET_TABLE_+0) 17616 l.add r17, r17, r9 17617 17618 Several relocations exist to allow the link editor to perform GOT 17619data references. The 'R_OR1K_GOT16' relocation can obtained by 17620enclosing an operand inside of 'got'. For example, assuming the GOT 17621base is in register 'r17'. 17622 17623 l.lwz r19, got(a)(r17) 17624 l.lwz r21, 0(r19) 17625 17626 Also, several relocations exist for local GOT references. The 17627'R_OR1K_GOTOFF_AHI16' relocation can obtained by enclosing an operand 17628inside of 'gotoffha'. Likewise, 'R_OR1K_GOTOFF_LO16' and 17629'R_OR1K_GOTOFF_SLO16' can be obtained by enclosing an operand inside of 17630'gotofflo'. For example, assuming the GOT base is in register 'rl7': 17631 17632 l.movhi r19, gotoffha(symbol) 17633 l.add r19, r19, r17 17634 l.lwz r19, gotofflo(symbol)(r19) 17635 17636 The above PC relative relocations use a 'l.jal' (jump) instruction 17637and reading of the link register to load the PC. OpenRISC also supports 17638page offset PC relative locations without a jump instruction using the 17639'l.adrp' instruction. By default the 'l.adrp' instruction will create 17640an 'R_OR1K_PCREL_PG21' relocation. Likewise, 'BFD_RELOC_OR1K_LO13' and 17641'BFD_RELOC_OR1K_SLO13' can be obtained by enclosing an operand inside of 17642'po'. For example: 17643 17644 l.adrp r3, symbol 17645 l.ori r4, r3, po(symbol) 17646 l.lbz r5, po(symbol)(r3) 17647 l.sb po(symbol)(r3), r6 17648 17649 Likewise the page offset relocations can be used with GOT references. 17650The relocation 'R_OR1K_GOT_PG21' can be obtained by enclosing an 17651'l.adrp' immediate operand inside of 'got'. Likewise, 'R_OR1K_GOT_LO13' 17652can be obtained by enclosing an operand inside of 'gotpo'. For example 17653to load the value of a GOT symbol into register 'r5' we can do: 17654 17655 l.adrp r17, got(_GLOBAL_OFFSET_TABLE_) 17656 l.lwz r5, gotpo(symbol)(r17) 17657 17658 There are many relocations that can be requested for access to thread 17659local storage variables. All of the OpenRISC TLS mnemonics are 17660supported: 17661 17662 * 'R_OR1K_TLS_GD_HI16' is requested using 'tlsgdhi'. 17663 * 'R_OR1K_TLS_GD_LO16' is requested using 'tlsgdlo'. 17664 * 'R_OR1K_TLS_GD_PG21' is requested using 'tldgd'. 17665 * 'R_OR1K_TLS_GD_LO13' is requested using 'tlsgdpo'. 17666 17667 * 'R_OR1K_TLS_LDM_HI16' is requested using 'tlsldmhi'. 17668 * 'R_OR1K_TLS_LDM_LO16' is requested using 'tlsldmlo'. 17669 * 'R_OR1K_TLS_LDM_PG21' is requested using 'tldldm'. 17670 * 'R_OR1K_TLS_LDM_LO13' is requested using 'tlsldmpo'. 17671 17672 * 'R_OR1K_TLS_LDO_HI16' is requested using 'dtpoffhi'. 17673 * 'R_OR1K_TLS_LDO_LO16' is requested using 'dtpofflo'. 17674 17675 * 'R_OR1K_TLS_IE_HI16' is requested using 'gottpoffhi'. 17676 * 'R_OR1K_TLS_IE_AHI16' is requested using 'gottpoffha'. 17677 * 'R_OR1K_TLS_IE_LO16' is requested using 'gottpofflo'. 17678 * 'R_OR1K_TLS_IE_PG21' is requested using 'gottp'. 17679 * 'R_OR1K_TLS_IE_LO13' is requested using 'gottppo'. 17680 17681 * 'R_OR1K_TLS_LE_HI16' is requested using 'tpoffhi'. 17682 * 'R_OR1K_TLS_LE_AHI16' is requested using 'tpoffha'. 17683 * 'R_OR1K_TLS_LE_LO16' is requested using 'tpofflo'. 17684 * 'R_OR1K_TLS_LE_SLO16' also is requested using 'tpofflo' depending 17685 on the instruction format. 17686 17687 Here are some example TLS model sequences. 17688 17689 First, General Dynamic: 17690 17691 l.movhi r17, tlsgdhi(symbol) 17692 l.ori r17, r17, tlsgdlo(symbol) 17693 l.add r17, r17, r16 17694 l.or r3, r17, r17 17695 l.jal plt(__tls_get_addr) 17696 l.nop 17697 17698 Initial Exec: 17699 17700 l.movhi r17, gottpoffhi(symbol) 17701 l.add r17, r17, r16 17702 l.lwz r17, gottpofflo(symbol)(r17) 17703 l.add r17, r17, r10 17704 l.lbs r17, 0(r17) 17705 17706 And finally, Local Exec: 17707 17708 l.movhi r17, tpoffha(symbol) 17709 l.add r17, r17, r10 17710 l.addi r17, r17, tpofflo(symbol) 17711 l.lbs r17, 0(r17) 17712 17713 17714File: as.info, Node: OpenRISC-Float, Next: OpenRISC-Directives, Prev: OpenRISC-Syntax, Up: OpenRISC-Dependent 17715 177169.33.2 Floating Point 17717--------------------- 17718 17719OpenRISC uses IEEE floating-point numbers. 17720 17721 17722File: as.info, Node: OpenRISC-Directives, Next: OpenRISC-Opcodes, Prev: OpenRISC-Float, Up: OpenRISC-Dependent 17723 177249.33.3 OpenRISC Machine Directives 17725---------------------------------- 17726 17727The OpenRISC version of 'as' supports the following additional machine 17728directives: 17729 17730'.align' 17731 This must be followed by the desired alignment in bytes. 17732 17733'.word' 17734 On the OpenRISC, the '.word' directive produces a 32 bit value. 17735 17736'.nodelay' 17737 On the OpenRISC, the '.nodelay' directive sets a flag in elf 17738 binaries indicating that the binary is generated catering for no 17739 delay slots. 17740 17741'.proc' 17742 This directive is ignored. Any text following it on the same line 17743 is also ignored. 17744 17745'.endproc' 17746 This directive is ignored. Any text following it on the same line 17747 is also ignored. 17748 17749 17750File: as.info, Node: OpenRISC-Opcodes, Prev: OpenRISC-Directives, Up: OpenRISC-Dependent 17751 177529.33.4 Opcodes 17753-------------- 17754 17755For detailed information on the OpenRISC machine instruction set, see 17756<http://www.openrisc.io/architecture/>. 17757 17758 'as' implements all the standard OpenRISC opcodes. 17759 17760 17761File: as.info, Node: PDP-11-Dependent, Next: PJ-Dependent, Prev: OpenRISC-Dependent, Up: Machine Dependencies 17762 177639.34 PDP-11 Dependent Features 17764============================== 17765 17766* Menu: 17767 17768* PDP-11-Options:: Options 17769* PDP-11-Pseudos:: Assembler Directives 17770* PDP-11-Syntax:: DEC Syntax versus BSD Syntax 17771* PDP-11-Mnemonics:: Instruction Naming 17772* PDP-11-Synthetic:: Synthetic Instructions 17773 17774 17775File: as.info, Node: PDP-11-Options, Next: PDP-11-Pseudos, Up: PDP-11-Dependent 17776 177779.34.1 Options 17778-------------- 17779 17780The PDP-11 version of 'as' has a rich set of machine dependent options. 17781 177829.34.1.1 Code Generation Options 17783................................ 17784 17785'-mpic | -mno-pic' 17786 Generate position-independent (or position-dependent) code. 17787 17788 The default is to generate position-independent code. 17789 177909.34.1.2 Instruction Set Extension Options 17791.......................................... 17792 17793These options enables or disables the use of extensions over the base 17794line instruction set as introduced by the first PDP-11 CPU: the KA11. 17795Most options come in two variants: a '-m'EXTENSION that enables 17796EXTENSION, and a '-mno-'EXTENSION that disables EXTENSION. 17797 17798 The default is to enable all extensions. 17799 17800'-mall | -mall-extensions' 17801 Enable all instruction set extensions. 17802 17803'-mno-extensions' 17804 Disable all instruction set extensions. 17805 17806'-mcis | -mno-cis' 17807 Enable (or disable) the use of the commercial instruction set, 17808 which consists of these instructions: 'ADDNI', 'ADDN', 'ADDPI', 17809 'ADDP', 'ASHNI', 'ASHN', 'ASHPI', 'ASHP', 'CMPCI', 'CMPC', 'CMPNI', 17810 'CMPN', 'CMPPI', 'CMPP', 'CVTLNI', 'CVTLN', 'CVTLPI', 'CVTLP', 17811 'CVTNLI', 'CVTNL', 'CVTNPI', 'CVTNP', 'CVTPLI', 'CVTPL', 'CVTPNI', 17812 'CVTPN', 'DIVPI', 'DIVP', 'L2DR', 'L3DR', 'LOCCI', 'LOCC', 'MATCI', 17813 'MATC', 'MOVCI', 'MOVC', 'MOVRCI', 'MOVRC', 'MOVTCI', 'MOVTC', 17814 'MULPI', 'MULP', 'SCANCI', 'SCANC', 'SKPCI', 'SKPC', 'SPANCI', 17815 'SPANC', 'SUBNI', 'SUBN', 'SUBPI', and 'SUBP'. 17816 17817'-mcsm | -mno-csm' 17818 Enable (or disable) the use of the 'CSM' instruction. 17819 17820'-meis | -mno-eis' 17821 Enable (or disable) the use of the extended instruction set, which 17822 consists of these instructions: 'ASHC', 'ASH', 'DIV', 'MARK', 17823 'MUL', 'RTT', 'SOB' 'SXT', and 'XOR'. 17824 17825'-mfis | -mkev11' 17826'-mno-fis | -mno-kev11' 17827 Enable (or disable) the use of the KEV11 floating-point 17828 instructions: 'FADD', 'FDIV', 'FMUL', and 'FSUB'. 17829 17830'-mfpp | -mfpu | -mfp-11' 17831'-mno-fpp | -mno-fpu | -mno-fp-11' 17832 Enable (or disable) the use of FP-11 floating-point instructions: 17833 'ABSF', 'ADDF', 'CFCC', 'CLRF', 'CMPF', 'DIVF', 'LDCFF', 'LDCIF', 17834 'LDEXP', 'LDF', 'LDFPS', 'MODF', 'MULF', 'NEGF', 'SETD', 'SETF', 17835 'SETI', 'SETL', 'STCFF', 'STCFI', 'STEXP', 'STF', 'STFPS', 'STST', 17836 'SUBF', and 'TSTF'. 17837 17838'-mlimited-eis | -mno-limited-eis' 17839 Enable (or disable) the use of the limited extended instruction 17840 set: 'MARK', 'RTT', 'SOB', 'SXT', and 'XOR'. 17841 17842 The -mno-limited-eis options also implies -mno-eis. 17843 17844'-mmfpt | -mno-mfpt' 17845 Enable (or disable) the use of the 'MFPT' instruction. 17846 17847'-mmultiproc | -mno-multiproc' 17848 Enable (or disable) the use of multiprocessor instructions: 17849 'TSTSET' and 'WRTLCK'. 17850 17851'-mmxps | -mno-mxps' 17852 Enable (or disable) the use of the 'MFPS' and 'MTPS' instructions. 17853 17854'-mspl | -mno-spl' 17855 Enable (or disable) the use of the 'SPL' instruction. 17856 17857 Enable (or disable) the use of the microcode instructions: 'LDUB', 17858 'MED', and 'XFC'. 17859 178609.34.1.3 CPU Model Options 17861.......................... 17862 17863These options enable the instruction set extensions supported by a 17864particular CPU, and disables all other extensions. 17865 17866'-mka11' 17867 KA11 CPU. Base line instruction set only. 17868 17869'-mkb11' 17870 KB11 CPU. Enable extended instruction set and 'SPL'. 17871 17872'-mkd11a' 17873 KD11-A CPU. Enable limited extended instruction set. 17874 17875'-mkd11b' 17876 KD11-B CPU. Base line instruction set only. 17877 17878'-mkd11d' 17879 KD11-D CPU. Base line instruction set only. 17880 17881'-mkd11e' 17882 KD11-E CPU. Enable extended instruction set, 'MFPS', and 'MTPS'. 17883 17884'-mkd11f | -mkd11h | -mkd11q' 17885 KD11-F, KD11-H, or KD11-Q CPU. Enable limited extended instruction 17886 set, 'MFPS', and 'MTPS'. 17887 17888'-mkd11k' 17889 KD11-K CPU. Enable extended instruction set, 'LDUB', 'MED', 'MFPS', 17890 'MFPT', 'MTPS', and 'XFC'. 17891 17892'-mkd11z' 17893 KD11-Z CPU. Enable extended instruction set, 'CSM', 'MFPS', 'MFPT', 17894 'MTPS', and 'SPL'. 17895 17896'-mf11' 17897 F11 CPU. Enable extended instruction set, 'MFPS', 'MFPT', and 17898 'MTPS'. 17899 17900'-mj11' 17901 J11 CPU. Enable extended instruction set, 'CSM', 'MFPS', 'MFPT', 17902 'MTPS', 'SPL', 'TSTSET', and 'WRTLCK'. 17903 17904'-mt11' 17905 T11 CPU. Enable limited extended instruction set, 'MFPS', and 17906 'MTPS'. 17907 179089.34.1.4 Machine Model Options 17909.............................. 17910 17911These options enable the instruction set extensions supported by a 17912particular machine model, and disables all other extensions. 17913 17914'-m11/03' 17915 Same as '-mkd11f'. 17916 17917'-m11/04' 17918 Same as '-mkd11d'. 17919 17920'-m11/05 | -m11/10' 17921 Same as '-mkd11b'. 17922 17923'-m11/15 | -m11/20' 17924 Same as '-mka11'. 17925 17926'-m11/21' 17927 Same as '-mt11'. 17928 17929'-m11/23 | -m11/24' 17930 Same as '-mf11'. 17931 17932'-m11/34' 17933 Same as '-mkd11e'. 17934 17935'-m11/34a' 17936 Ame as '-mkd11e' '-mfpp'. 17937 17938'-m11/35 | -m11/40' 17939 Same as '-mkd11a'. 17940 17941'-m11/44' 17942 Same as '-mkd11z'. 17943 17944'-m11/45 | -m11/50 | -m11/55 | -m11/70' 17945 Same as '-mkb11'. 17946 17947'-m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94' 17948 Same as '-mj11'. 17949 17950'-m11/60' 17951 Same as '-mkd11k'. 17952 17953 17954File: as.info, Node: PDP-11-Pseudos, Next: PDP-11-Syntax, Prev: PDP-11-Options, Up: PDP-11-Dependent 17955 179569.34.2 Assembler Directives 17957--------------------------- 17958 17959The PDP-11 version of 'as' has a few machine dependent assembler 17960directives. 17961 17962'.bss' 17963 Switch to the 'bss' section. 17964 17965'.even' 17966 Align the location counter to an even number. 17967 17968 17969File: as.info, Node: PDP-11-Syntax, Next: PDP-11-Mnemonics, Prev: PDP-11-Pseudos, Up: PDP-11-Dependent 17970 179719.34.3 PDP-11 Assembly Language Syntax 17972-------------------------------------- 17973 17974'as' supports both DEC syntax and BSD syntax. The only difference is 17975that in DEC syntax, a '#' character is used to denote an immediate 17976constants, while in BSD syntax the character for this purpose is '$'. 17977 17978 general-purpose registers are named 'r0' through 'r7'. Mnemonic 17979alternatives for 'r6' and 'r7' are 'sp' and 'pc', respectively. 17980 17981 Floating-point registers are named 'ac0' through 'ac3', or 17982alternatively 'fr0' through 'fr3'. 17983 17984 Comments are started with a '#' or a '/' character, and extend to the 17985end of the line. (FIXME: clash with immediates?) 17986 17987 Multiple statements on the same line can be separated by the ';' 17988character. 17989 17990 17991File: as.info, Node: PDP-11-Mnemonics, Next: PDP-11-Synthetic, Prev: PDP-11-Syntax, Up: PDP-11-Dependent 17992 179939.34.4 Instruction Naming 17994------------------------- 17995 17996Some instructions have alternative names. 17997 17998'BCC' 17999 'BHIS' 18000 18001'BCS' 18002 'BLO' 18003 18004'L2DR' 18005 'L2D' 18006 18007'L3DR' 18008 'L3D' 18009 18010'SYS' 18011 'TRAP' 18012 18013 18014File: as.info, Node: PDP-11-Synthetic, Prev: PDP-11-Mnemonics, Up: PDP-11-Dependent 18015 180169.34.5 Synthetic Instructions 18017----------------------------- 18018 18019The 'JBR' and 'J'CC synthetic instructions are not supported yet. 18020 18021 18022File: as.info, Node: PJ-Dependent, Next: PPC-Dependent, Prev: PDP-11-Dependent, Up: Machine Dependencies 18023 180249.35 picoJava Dependent Features 18025================================ 18026 18027* Menu: 18028 18029* PJ Options:: Options 18030* PJ Syntax:: PJ Syntax 18031 18032 18033File: as.info, Node: PJ Options, Next: PJ Syntax, Up: PJ-Dependent 18034 180359.35.1 Options 18036-------------- 18037 18038'as' has two additional command-line options for the picoJava 18039architecture. 18040'-ml' 18041 This option selects little endian data output. 18042 18043'-mb' 18044 This option selects big endian data output. 18045 18046 18047File: as.info, Node: PJ Syntax, Prev: PJ Options, Up: PJ-Dependent 18048 180499.35.2 PJ Syntax 18050---------------- 18051 18052* Menu: 18053 18054* PJ-Chars:: Special Characters 18055 18056 18057File: as.info, Node: PJ-Chars, Up: PJ Syntax 18058 180599.35.2.1 Special Characters 18060........................... 18061 18062The presence of a '!' or '/' on a line indicates the start of a comment 18063that extends to the end of the current line. 18064 18065 If a '#' appears as the first character of a line then the whole line 18066is treated as a comment, but in this case the line could also be a 18067logical line number directive (*note Comments::) or a preprocessor 18068control command (*note Preprocessing::). 18069 18070 The ';' character can be used to separate statements on the same 18071line. 18072 18073 18074File: as.info, Node: PPC-Dependent, Next: PRU-Dependent, Prev: PJ-Dependent, Up: Machine Dependencies 18075 180769.36 PowerPC Dependent Features 18077=============================== 18078 18079* Menu: 18080 18081* PowerPC-Opts:: Options 18082* PowerPC-Pseudo:: PowerPC Assembler Directives 18083* PowerPC-Syntax:: PowerPC Syntax 18084 18085 18086File: as.info, Node: PowerPC-Opts, Next: PowerPC-Pseudo, Up: PPC-Dependent 18087 180889.36.1 Options 18089-------------- 18090 18091The PowerPC chip family includes several successive levels, using the 18092same core instruction set, but including a few additional instructions 18093at each level. There are exceptions to this however. For details on 18094what instructions each variant supports, please see the chip's 18095architecture reference manual. 18096 18097 The following table lists all available PowerPC options. 18098 18099'-a32' 18100 Generate ELF32 or XCOFF32. 18101 18102'-a64' 18103 Generate ELF64 or XCOFF64. 18104 18105'-K PIC' 18106 Set EF_PPC_RELOCATABLE_LIB in ELF flags. 18107 18108'-mpwrx | -mpwr2' 18109 Generate code for POWER/2 (RIOS2). 18110 18111'-mpwr' 18112 Generate code for POWER (RIOS1) 18113 18114'-m601' 18115 Generate code for PowerPC 601. 18116 18117'-mppc, -mppc32, -m603, -m604' 18118 Generate code for PowerPC 603/604. 18119 18120'-m403, -m405' 18121 Generate code for PowerPC 403/405. 18122 18123'-m440' 18124 Generate code for PowerPC 440. BookE and some 405 instructions. 18125 18126'-m464' 18127 Generate code for PowerPC 464. 18128 18129'-m476' 18130 Generate code for PowerPC 476. 18131 18132'-m7400, -m7410, -m7450, -m7455' 18133 Generate code for PowerPC 7400/7410/7450/7455. 18134 18135'-m750cl, -mgekko, -mbroadway' 18136 Generate code for PowerPC 750CL/Gekko/Broadway. 18137 18138'-m821, -m850, -m860' 18139 Generate code for PowerPC 821/850/860. 18140 18141'-mppc64, -m620' 18142 Generate code for PowerPC 620/625/630. 18143 18144'-me500, -me500x2' 18145 Generate code for Motorola e500 core complex. 18146 18147'-me500mc' 18148 Generate code for Freescale e500mc core complex. 18149 18150'-me500mc64' 18151 Generate code for Freescale e500mc64 core complex. 18152 18153'-me5500' 18154 Generate code for Freescale e5500 core complex. 18155 18156'-me6500' 18157 Generate code for Freescale e6500 core complex. 18158 18159'-mspe' 18160 Generate code for Motorola SPE instructions. 18161 18162'-mspe2' 18163 Generate code for Freescale SPE2 instructions. 18164 18165'-mtitan' 18166 Generate code for AppliedMicro Titan core complex. 18167 18168'-mppc64bridge' 18169 Generate code for PowerPC 64, including bridge insns. 18170 18171'-mbooke' 18172 Generate code for 32-bit BookE. 18173 18174'-ma2' 18175 Generate code for A2 architecture. 18176 18177'-me300' 18178 Generate code for PowerPC e300 family. 18179 18180'-maltivec' 18181 Generate code for processors with AltiVec instructions. 18182 18183'-mvle' 18184 Generate code for Freescale PowerPC VLE instructions. 18185 18186'-mvsx' 18187 Generate code for processors with Vector-Scalar (VSX) instructions. 18188 18189'-mhtm' 18190 Generate code for processors with Hardware Transactional Memory 18191 instructions. 18192 18193'-mpower4, -mpwr4' 18194 Generate code for Power4 architecture. 18195 18196'-mpower5, -mpwr5, -mpwr5x' 18197 Generate code for Power5 architecture. 18198 18199'-mpower6, -mpwr6' 18200 Generate code for Power6 architecture. 18201 18202'-mpower7, -mpwr7' 18203 Generate code for Power7 architecture. 18204 18205'-mpower8, -mpwr8' 18206 Generate code for Power8 architecture. 18207 18208'-mpower9, -mpwr9' 18209 Generate code for Power9 architecture. 18210 18211'-mpower10, -mpwr10' 18212 Generate code for Power10 architecture. 18213 18214'-mcell' 18215'-mcell' 18216 Generate code for Cell Broadband Engine architecture. 18217 18218'-mcom' 18219 Generate code Power/PowerPC common instructions. 18220 18221'-many' 18222 Generate code for any architecture (PWR/PWRX/PPC). 18223 18224'-mregnames' 18225 Allow symbolic names for registers. 18226 18227'-mno-regnames' 18228 Do not allow symbolic names for registers. 18229 18230'-mrelocatable' 18231 Support for GCC's -mrelocatable option. 18232 18233'-mrelocatable-lib' 18234 Support for GCC's -mrelocatable-lib option. 18235 18236'-memb' 18237 Set PPC_EMB bit in ELF flags. 18238 18239'-mlittle, -mlittle-endian, -le' 18240 Generate code for a little endian machine. 18241 18242'-mbig, -mbig-endian, -be' 18243 Generate code for a big endian machine. 18244 18245'-msolaris' 18246 Generate code for Solaris. 18247 18248'-mno-solaris' 18249 Do not generate code for Solaris. 18250 18251'-nops=COUNT' 18252 If an alignment directive inserts more than COUNT nops, put a 18253 branch at the beginning to skip execution of the nops. 18254 18255 18256File: as.info, Node: PowerPC-Pseudo, Next: PowerPC-Syntax, Prev: PowerPC-Opts, Up: PPC-Dependent 18257 182589.36.2 PowerPC Assembler Directives 18259----------------------------------- 18260 18261A number of assembler directives are available for PowerPC. The 18262following table is far from complete. 18263 18264'.machine "string"' 18265 This directive allows you to change the machine for which code is 18266 generated. '"string"' may be any of the -m cpu selection options 18267 (without the -m) enclosed in double quotes, '"push"', or '"pop"'. 18268 '.machine "push"' saves the currently selected cpu, which may be 18269 restored with '.machine "pop"'. 18270 18271 18272File: as.info, Node: PowerPC-Syntax, Prev: PowerPC-Pseudo, Up: PPC-Dependent 18273 182749.36.3 PowerPC Syntax 18275--------------------- 18276 18277* Menu: 18278 18279* PowerPC-Chars:: Special Characters 18280 18281 18282File: as.info, Node: PowerPC-Chars, Up: PowerPC-Syntax 18283 182849.36.3.1 Special Characters 18285........................... 18286 18287The presence of a '#' on a line indicates the start of a comment that 18288extends to the end of the current line. 18289 18290 If a '#' appears as the first character of a line then the whole line 18291is treated as a comment, but in this case the line could also be a 18292logical line number directive (*note Comments::) or a preprocessor 18293control command (*note Preprocessing::). 18294 18295 If the assembler has been configured for the ppc-*-solaris* target 18296then the '!' character also acts as a line comment character. This can 18297be disabled via the '-mno-solaris' command-line option. 18298 18299 The ';' character can be used to separate statements on the same 18300line. 18301 18302 18303File: as.info, Node: PRU-Dependent, Next: RISC-V-Dependent, Prev: PPC-Dependent, Up: Machine Dependencies 18304 183059.37 PRU Dependent Features 18306=========================== 18307 18308* Menu: 18309 18310* PRU Options:: Options 18311* PRU Syntax:: Syntax 18312* PRU Relocations:: Relocations 18313* PRU Directives:: PRU Machine Directives 18314* PRU Opcodes:: Opcodes 18315 18316 18317File: as.info, Node: PRU Options, Next: PRU Syntax, Up: PRU-Dependent 18318 183199.37.1 Options 18320-------------- 18321 18322'-mlink-relax' 18323 Assume that LD would optimize LDI32 instructions by checking the 18324 upper 16 bits of the EXPRESSION. If they are all zeros, then LD 18325 would shorten the LDI32 instruction to a single LDI. In such case 18326 'as' will output DIFF relocations for diff expressions. 18327 18328'-mno-link-relax' 18329 Assume that LD would not optimize LDI32 instructions. As a 18330 consequence, DIFF relocations will not be emitted. 18331 18332'-mno-warn-regname-label' 18333 Do not warn if a label name matches a register name. Usually 18334 assembler programmers will want this warning to be emitted. C 18335 compilers may want to turn this off. 18336 18337 18338File: as.info, Node: PRU Syntax, Next: PRU Relocations, Prev: PRU Options, Up: PRU-Dependent 18339 183409.37.2 Syntax 18341------------- 18342 18343* Menu: 18344 18345* PRU Chars:: Special Characters 18346 18347 18348File: as.info, Node: PRU Chars, Up: PRU Syntax 18349 183509.37.2.1 Special Characters 18351........................... 18352 18353'#' and ';' are the line comment characters. 18354 18355 18356File: as.info, Node: PRU Relocations, Next: PRU Directives, Prev: PRU Syntax, Up: PRU-Dependent 18357 183589.37.3 PRU Machine Relocations 18359------------------------------ 18360 18361'%pmem(EXPRESSION)' 18362 Convert EXPRESSION from byte-address to a word-address. In other 18363 words, shift right by two. 18364 18365'%label(EXPRESSION)' 18366 Mark the given operand as a label. This is useful if you need to 18367 jump to a label that matches a register name. 18368 18369 r1: 18370 jmp r1 ; Will jump to register R1 18371 jmp %label(r1) ; Will jump to label r1 18372 18373 18374File: as.info, Node: PRU Directives, Next: PRU Opcodes, Prev: PRU Relocations, Up: PRU-Dependent 18375 183769.37.4 PRU Machine Directives 18377----------------------------- 18378 18379'.align EXPRESSION [, EXPRESSION]' 18380 This is the generic '.align' directive, however this aligns to a 18381 power of two. 18382 18383'.word EXPRESSION' 18384 Create an aligned constant 4 bytes in size. 18385 18386'.dword EXPRESSION' 18387 Create an aligned constant 8 bytes in size. 18388 18389'.2byte EXPRESSION' 18390 Create an unaligned constant 2 bytes in size. 18391 18392'.4byte EXPRESSION' 18393 Create an unaligned constant 4 bytes in size. 18394 18395'.8byte EXPRESSION' 18396 Create an unaligned constant 8 bytes in size. 18397 18398'.16byte EXPRESSION' 18399 Create an unaligned constant 16 bytes in size. 18400 18401'.set no_warn_regname_label' 18402 Do not output warnings when a label name matches a register name. 18403 Equivalent to passing the '-mno-warn-regname-label' command-line 18404 option. 18405 18406 18407File: as.info, Node: PRU Opcodes, Prev: PRU Directives, Up: PRU-Dependent 18408 184099.37.5 Opcodes 18410-------------- 18411 18412'as' implements all the standard PRU core V3 opcodes in the original 18413pasm assembler. Older cores are not supported by 'as'. 18414 18415 GAS also implements the LDI32 pseudo instruction for loading a 32-bit 18416immediate value into a register. 18417 18418 ldi32 sp, __stack_top 18419 ldi32 r14, 0x12345678 18420 18421 18422File: as.info, Node: RISC-V-Dependent, Next: RL78-Dependent, Prev: PRU-Dependent, Up: Machine Dependencies 18423 184249.38 RISC-V Dependent Features 18425============================== 18426 18427* Menu: 18428 18429* RISC-V-Options:: RISC-V Options 18430* RISC-V-Directives:: RISC-V Directives 18431* RISC-V-Modifiers:: RISC-V Assembler Modifiers 18432* RISC-V-Formats:: RISC-V Instruction Formats 18433* RISC-V-ATTRIBUTE:: RISC-V Object Attribute 18434 18435 18436File: as.info, Node: RISC-V-Options, Next: RISC-V-Directives, Up: RISC-V-Dependent 18437 184389.38.1 RISC-V Options 18439--------------------- 18440 18441The following table lists all available RISC-V specific options. 18442 18443'-fpic' 18444'-fPIC' 18445 Generate position-independent code 18446 18447'-fno-pic' 18448 Don't generate position-independent code (default) 18449 18450'-march=ISA' 18451 Select the base isa, as specified by ISA. For example 18452 -march=rv32ima. If this option and the architecture attributes 18453 aren't set, then assembler will check the default configure setting 18454 -with-arch=ISA. 18455 18456'-misa-spec=ISAspec' 18457 Select the default isa spec version. If the version of ISA isn't 18458 set by -march, then assembler helps to set the version according to 18459 the default chosen spec. If this option isn't set, then assembler 18460 will check the default configure setting -with-isa-spec=ISAspec. 18461 18462'-mpriv-spec=PRIVspec' 18463 Select the privileged spec version. We can decide whether the CSR 18464 is valid or not according to the chosen spec. If this option and 18465 the privilege attributes aren't set, then assembler will check the 18466 default configure setting -with-priv-spec=PRIVspec. 18467 18468'-mabi=ABI' 18469 Selects the ABI, which is either "ilp32" or "lp64", optionally 18470 followed by "f", "d", or "q" to indicate single-precision, 18471 double-precision, or quad-precision floating-point calling 18472 convention, or none to indicate the soft-float calling convention. 18473 Also, "ilp32" can optionally be followed by "e" to indicate the RVE 18474 ABI, which is always soft-float. 18475 18476'-mrelax' 18477 Take advantage of linker relaxations to reduce the number of 18478 instructions required to materialize symbol addresses. (default) 18479 18480'-mno-relax' 18481 Don't do linker relaxations. 18482 18483'-march-attr' 18484 Generate the default contents for the riscv elf attribute section 18485 if the .attribute directives are not set. This section is used to 18486 record the information that a linker or runtime loader needs to 18487 check compatibility. This information includes ISA string, stack 18488 alignment requirement, unaligned memory accesses, and the major, 18489 minor and revision version of privileged specification. 18490 18491'-mno-arch-attr' 18492 Don't generate the default riscv elf attribute section if the 18493 .attribute directives are not set. 18494 18495'-mcsr-check' 18496 Enable the CSR checking for the ISA-dependent CRS and the read-only 18497 CSR. The ISA-dependent CSR are only valid when the specific ISA is 18498 set. The read-only CSR can not be written by the CSR instructions. 18499 18500'-mno-csr-check' 18501 Don't do CSR checking. 18502 18503'-mlittle-endian' 18504 Generate code for a little endian machine. 18505 18506'-mbig-endian' 18507 Generate code for a big endian machine. 18508 18509 18510File: as.info, Node: RISC-V-Directives, Next: RISC-V-Modifiers, Prev: RISC-V-Options, Up: RISC-V-Dependent 18511 185129.38.2 RISC-V Directives 18513------------------------ 18514 18515The following table lists all available RISC-V specific directives. 18516 18517'.align SIZE-LOG-2' 18518 Align to the given boundary, with the size given as log2 the number 18519 of bytes to align to. 18520 18521'.half VALUE' 18522'.word VALUE' 18523'.dword VALUE' 18524 Emits a half-word, word, or double-word value at the current 18525 position. 18526 18527'.dtprelword VALUE' 18528'.dtpreldword VALUE' 18529 Emits a DTP-relative word (or double-word) at the current position. 18530 This is meant to be used by the compiler in shared libraries for 18531 DWARF debug info for thread local variables. 18532 18533'.bss' 18534 Sets the current section to the BSS section. 18535 18536'.uleb128 VALUE' 18537'.sleb128 VALUE' 18538 Emits a signed or unsigned LEB128 value at the current position. 18539 This only accepts constant expressions, because symbol addresses 18540 can change with relaxation, and we don't support relocations to 18541 modify LEB128 values at link time. 18542 18543'.option ARGUMENT' 18544 Modifies RISC-V specific assembler options inline with the assembly 18545 code. This is used when particular instruction sequences must be 18546 assembled with a specific set of options. For example, since we 18547 relax addressing sequences to shorter GP-relative sequences when 18548 possible the initial load of GP must not be relaxed and should be 18549 emitted as something like 18550 18551 .option push 18552 .option norelax 18553 la gp, __global_pointer$ 18554 .option pop 18555 18556 in order to produce after linker relaxation the expected 18557 18558 auipc gp, %pcrel_hi(__global_pointer$) 18559 addi gp, gp, %pcrel_lo(__global_pointer$) 18560 18561 instead of just 18562 18563 addi gp, gp, 0 18564 18565 It's not expected that options are changed in this manner during 18566 regular use, but there are a handful of esoteric cases like the one 18567 above where users need to disable particular features of the 18568 assembler for particular code sequences. The complete list of 18569 option arguments is shown below: 18570 18571 'push' 18572 'pop' 18573 Pushes or pops the current option stack. These should be used 18574 whenever changing an option in line with assembly code in 18575 order to ensure the user's command-line options are respected 18576 for the bulk of the file being assembled. 18577 18578 'rvc' 18579 'norvc' 18580 Enables or disables the generation of compressed instructions. 18581 Instructions are opportunistically compressed by the RISC-V 18582 assembler when possible, but sometimes this behavior is not 18583 desirable. 18584 18585 'pic' 18586 'nopic' 18587 Enables or disables position-independent code generation. 18588 Unless you really know what you're doing, this should only be 18589 at the top of a file. 18590 18591 'relax' 18592 'norelax' 18593 Enables or disables relaxation. The RISC-V assembler and 18594 linker opportunistically relax some code sequences, but 18595 sometimes this behavior is not desirable. 18596 18597'csr-check' 18598'no-csr-check' 18599 Enables or disables the CSR checking. 18600 18601'.insn VALUE' 18602'.insn VALUE' 18603 This directive permits the numeric representation of an 18604 instructions and makes the assembler insert the operands according 18605 to one of the instruction formats for '.insn' (*note 18606 RISC-V-Formats::). For example, the instruction 'add a0, a1, a2' 18607 could be written as '.insn r 0x33, 0, 0, a0, a1, a2'. 18608 18609'.attribute TAG, VALUE' 18610 Set the object attribute TAG to VALUE. 18611 18612 The TAG is either an attribute number, or one of the following: 18613 'Tag_RISCV_arch', 'Tag_RISCV_stack_align', 18614 'Tag_RISCV_unaligned_access', 'Tag_RISCV_priv_spec', 18615 'Tag_RISCV_priv_spec_minor', 'Tag_RISCV_priv_spec_revision'. 18616 18617 18618File: as.info, Node: RISC-V-Modifiers, Next: RISC-V-Formats, Prev: RISC-V-Directives, Up: RISC-V-Dependent 18619 186209.38.3 RISC-V Assembler Modifiers 18621--------------------------------- 18622 18623The RISC-V assembler supports following modifiers for relocatable 18624addresses used in RISC-V instruction operands. However, we also support 18625some pseudo instructions that are easier to use than these modifiers. 18626 18627'%lo(SYMBOL)' 18628 The low 12 bits of absolute address for SYMBOL. 18629 18630'%hi(SYMBOL)' 18631 The high 20 bits of absolute address for SYMBOL. This is usually 18632 used with the %lo modifier to represent a 32-bit absolute address. 18633 18634 lui a0, %hi(SYMBOL) // R_RISCV_HI20 18635 addi a0, a0, %lo(SYMBOL) // R_RISCV_LO12_I 18636 18637 lui a0, %hi(SYMBOL) // R_RISCV_HI20 18638 load/store a0, %lo(SYMBOL)(a0) // R_RISCV_LO12_I/S 18639 18640'%pcrel_lo(LABEL)' 18641 The low 12 bits of relative address between pc and SYMBOL. The 18642 SYMBOL is related to the high part instruction which is marked by 18643 LABEL. 18644 18645'%pcrel_hi(SYMBOL)' 18646 The high 20 bits of relative address between pc and SYMBOL. This 18647 is usually used with the %pcrel_lo modifier to represent a +/-2GB 18648 pc-relative range. 18649 18650 LABEL: 18651 auipc a0, %pcrel_hi(SYMBOL) // R_RISCV_PCREL_HI20 18652 addi a0, a0, %pcrel_lo(LABEL) // R_RISCV_PCREL_LO12_I 18653 18654 LABEL: 18655 auipc a0, %pcrel_hi(SYMBOL) // R_RISCV_PCREL_HI20 18656 load/store a0, %pcrel_lo(LABEL)(a0) // R_RISCV_PCREL_LO12_I/S 18657 18658 Or you can use the pseudo lla/lw/sw/... instruction to do this. 18659 18660 lla a0, SYMBOL 18661 18662'%got_pcrel_hi(SYMBOL)' 18663 The high 20 bits of relative address between pc and the GOT entry 18664 of SYMBOL. This is usually used with the %pcrel_lo modifier to 18665 access the GOT entry. 18666 18667 LABEL: 18668 auipc a0, %got_pcrel_hi(SYMBOL) // R_RISCV_GOT_HI20 18669 addi a0, a0, %pcrel_lo(LABEL) // R_RISCV_PCREL_LO12_I 18670 18671 LABEL: 18672 auipc a0, %got_pcrel_hi(SYMBOL) // R_RISCV_GOT_HI20 18673 load/store a0, %pcrel_lo(LABEL)(a0) // R_RISCV_PCREL_LO12_I/S 18674 18675 Also, the pseudo la instruction with PIC has similar behavior. 18676 18677'%tprel_add(SYMBOL)' 18678 This is used purely to associate the R_RISCV_TPREL_ADD relocation 18679 for TLS relaxation. This one is only valid as the fourth operand 18680 to the normally 3 operand add instruction. 18681 18682'%tprel_lo(SYMBOL)' 18683 The low 12 bits of relative address between tp and SYMBOL. 18684 18685'%tprel_hi(SYMBOL)' 18686 The high 20 bits of relative address between tp and SYMBOL. This 18687 is usually used with the %tprel_lo and %tprel_add modifiers to 18688 access the thread local variable SYMBOL in TLS Local Exec. 18689 18690 lui a5, %tprel_hi(SYMBOL) // R_RISCV_TPREL_HI20 18691 add a5, a5, tp, %tprel_add(SYMBOL) // R_RISCV_TPREL_ADD 18692 load/store t0, %tprel_lo(SYMBOL)(a5) // R_RISCV_TPREL_LO12_I/S 18693 18694'%tls_ie_pcrel_hi(SYMBOL)' 18695 The high 20 bits of relative address between pc and GOT entry. It 18696 is usually used with the %pcrel_lo modifier to access the thread 18697 local variable SYMBOL in TLS Initial Exec. 18698 18699 la.tls.ie a5, SYMBOL 18700 add a5, a5, tp 18701 load/store t0, 0(a5) 18702 18703 The pseudo la.tls.ie instruction can be expended to 18704 18705 LABEL: 18706 auipc a5, %tls_ie_pcrel_hi(SYMBOL) // R_RISCV_TLS_GOT_HI20 18707 load a5, %pcrel_lo(LABEL)(a5) // R_RISCV_PCREL_LO12_I 18708 18709'%tls_gd_pcrel_hi(SYMBOL)' 18710 The high 20 bits of relative address between pc and GOT entry. It 18711 is usually used with the %pcrel_lo modifier to access the thread 18712 local variable SYMBOL in TLS Global Dynamic. 18713 18714 la.tls.gd a0, SYMBOL 18715 call __tls_get_addr@plt 18716 mv a5, a0 18717 load/store t0, 0(a5) 18718 18719 The pseudo la.tls.gd instruction can be expended to 18720 18721 LABEL: 18722 auipc a0, %tls_gd_pcrel_hi(SYMBOL) // R_RISCV_TLS_GD_HI20 18723 addi a0, a0, %pcrel_lo(LABEL) // R_RISCV_PCREL_LO12_I 18724 18725 18726File: as.info, Node: RISC-V-Formats, Next: RISC-V-ATTRIBUTE, Prev: RISC-V-Modifiers, Up: RISC-V-Dependent 18727 187289.38.4 RISC-V Instruction Formats 18729--------------------------------- 18730 18731The RISC-V Instruction Set Manual Volume I: User-Level ISA lists 12 18732instruction formats where some of the formats have multiple variants. 18733For the '.insn' pseudo directive the assembler recognizes some of the 18734formats. Typically, the most general variant of the instruction format 18735is used by the '.insn' directive. 18736 18737 The following table lists the abbreviations used in the table of 18738instruction formats: 18739 18740 opcode Unsigned immediate or opcode name for 7-bits opcode. 18741 opcode2 Unsigned immediate or opcode name for 2-bits opcode. 18742 func7 Unsigned immediate for 7-bits function code. 18743 func6 Unsigned immediate for 6-bits function code. 18744 func4 Unsigned immediate for 4-bits function code. 18745 func3 Unsigned immediate for 3-bits function code. 18746 func2 Unsigned immediate for 2-bits function code. 18747 rd Destination register number for operand x, can be GPR or FPR. 18748 rd' Destination register number for operand x, 18749 only accept s0-s1, a0-a5, fs0-fs1 and fa0-fa5. 18750 rs1 First source register number for operand x, can be GPR or FPR. 18751 rs1' First source register number for operand x, 18752 only accept s0-s1, a0-a5, fs0-fs1 and fa0-fa5. 18753 rs2 Second source register number for operand x, can be GPR or FPR. 18754 rs2' Second source register number for operand x, 18755 only accept s0-s1, a0-a5, fs0-fs1 and fa0-fa5. 18756 simm12 Sign-extended 12-bit immediate for operand x. 18757 simm20 Sign-extended 20-bit immediate for operand x. 18758 simm6 Sign-extended 6-bit immediate for operand x. 18759 uimm8 Unsigned 8-bit immediate for operand x. 18760 symbol Symbol or lable reference for operand x. 18761 18762 The following table lists all available opcode name: 18763 18764'C0' 18765'C1' 18766'C2' 18767 Opcode space for compressed instructions. 18768 18769'LOAD' 18770 Opcode space for load instructions. 18771 18772'LOAD_FP' 18773 Opcode space for floating-point load instructions. 18774 18775'STORE' 18776 Opcode space for store instructions. 18777 18778'STORE_FP' 18779 Opcode space for floating-point store instructions. 18780 18781'AUIPC' 18782 Opcode space for auipc instruction. 18783 18784'LUI' 18785 Opcode space for lui instruction. 18786 18787'BRANCH' 18788 Opcode space for branch instructions. 18789 18790'JAL' 18791 Opcode space for jal instruction. 18792 18793'JALR' 18794 Opcode space for jalr instruction. 18795 18796'OP' 18797 Opcode space for ALU instructions. 18798 18799'OP_32' 18800 Opcode space for 32-bits ALU instructions. 18801 18802'OP_IMM' 18803 Opcode space for ALU with immediate instructions. 18804 18805'OP_IMM_32' 18806 Opcode space for 32-bits ALU with immediate instructions. 18807 18808'OP_FP' 18809 Opcode space for floating-point operation instructions. 18810 18811'MADD' 18812 Opcode space for madd instruction. 18813 18814'MSUB' 18815 Opcode space for msub instruction. 18816 18817'NMADD' 18818 Opcode space for nmadd instruction. 18819 18820'NMSUB' 18821 Opcode space for msub instruction. 18822 18823'AMO' 18824 Opcode space for atomic memory operation instructions. 18825 18826'MISC_MEM' 18827 Opcode space for misc instructions. 18828 18829'SYSTEM' 18830 Opcode space for system instructions. 18831 18832'CUSTOM_0' 18833'CUSTOM_1' 18834'CUSTOM_2' 18835'CUSTOM_3' 18836 Opcode space for customize instructions. 18837 18838 An instruction is two or four bytes in length and must be aligned on 18839a 2 byte boundary. The first two bits of the instruction specify the 18840length of the instruction, 00, 01 and 10 indicates a two byte 18841instruction, 11 indicates a four byte instruction. 18842 18843 The following table lists the RISC-V instruction formats that are 18844available with the '.insn' pseudo directive: 18845 18846'R type: .insn r opcode, func3, func7, rd, rs1, rs2' 18847 +-------+-----+-----+-------+----+-------------+ 18848 | func7 | rs2 | rs1 | func3 | rd | opcode | 18849 +-------+-----+-----+-------+----+-------------+ 18850 31 25 20 15 12 7 0 18851 18852'R type with 4 register operands: .insn r opcode, func3, func2, rd, rs1, rs2, rs3' 18853'R4 type: .insn r4 opcode, func3, func2, rd, rs1, rs2, rs3' 18854 +-----+-------+-----+-----+-------+----+-------------+ 18855 | rs3 | func2 | rs2 | rs1 | func3 | rd | opcode | 18856 +-----+-------+-----+-----+-------+----+-------------+ 18857 31 27 25 20 15 12 7 0 18858 18859'I type: .insn i opcode, func3, rd, rs1, simm12' 18860'I type: .insn i opcode, func3, rd, simm12(rs1)' 18861 +-------------+-----+-------+----+-------------+ 18862 | simm12 | rs1 | func3 | rd | opcode | 18863 +-------------+-----+-------+----+-------------+ 18864 31 20 15 12 7 0 18865 18866'S type: .insn s opcode, func3, rs2, simm12(rs1)' 18867 +--------------+-----+-----+-------+-------------+-------------+ 18868 | simm12[11:5] | rs2 | rs1 | func3 | simm12[4:0] | opcode | 18869 +--------------+-----+-----+-------+-------------+-------------+ 18870 31 25 20 15 12 7 0 18871 18872'B type: .insn s opcode, func3, rs1, rs2, symbol' 18873'SB type: .insn sb opcode, func3, rs1, rs2, symbol' 18874 +------------+--------------+-----+-----+-------+-------------+-------------+--------+ 18875 | simm12[12] | simm12[10:5] | rs2 | rs1 | func3 | simm12[4:1] | simm12[11]] | opcode | 18876 +------------+--------------+-----+-----+-------+-------------+-------------+--------+ 18877 31 30 25 20 15 12 7 0 18878 18879'U type: .insn u opcode, rd, simm20' 18880 +---------------------------+----+-------------+ 18881 | simm20 | rd | opcode | 18882 +---------------------------+----+-------------+ 18883 31 12 7 0 18884 18885'J type: .insn j opcode, rd, symbol' 18886'UJ type: .insn uj opcode, rd, symbol' 18887 +------------+--------------+------------+---------------+----+-------------+ 18888 | simm20[20] | simm20[10:1] | simm20[11] | simm20[19:12] | rd | opcode | 18889 +------------+--------------+------------+---------------+----+-------------+ 18890 31 30 21 20 12 7 0 18891 18892'CR type: .insn cr opcode2, func4, rd, rs2' 18893 +---------+--------+-----+---------+ 18894 | func4 | rd/rs1 | rs2 | opcode2 | 18895 +---------+--------+-----+---------+ 18896 15 12 7 2 0 18897 18898'CI type: .insn ci opcode2, func3, rd, simm6' 18899 +---------+-----+--------+-----+---------+ 18900 | func3 | imm | rd/rs1 | imm | opcode2 | 18901 +---------+-----+--------+-----+---------+ 18902 15 13 12 7 2 0 18903 18904'CIW type: .insn ciw opcode2, func3, rd, uimm8' 18905 +---------+--------------+-----+---------+ 18906 | func3 | imm | rd' | opcode2 | 18907 +---------+--------------+-----+---------+ 18908 15 13 7 2 0 18909 18910'CA type: .insn ca opcode2, func6, func2, rd, rs2' 18911 +---------+----------+-------+------+--------+ 18912 | func6 | rd'/rs1' | func2 | rs2' | opcode | 18913 +---------+----------+-------+------+--------+ 18914 15 10 7 5 2 0 18915 18916'CB type: .insn cb opcode2, func3, rs1, symbol' 18917 +---------+--------+------+--------+---------+ 18918 | func3 | offset | rs1' | offset | opcode2 | 18919 +---------+--------+------+--------+---------+ 18920 15 13 10 7 2 0 18921 18922'CJ type: .insn cj opcode2, symbol' 18923 +---------+--------------------+---------+ 18924 | func3 | jump target | opcode2 | 18925 +---------+--------------------+---------+ 18926 15 13 7 2 0 18927 18928 For the complete list of all instruction format variants see The 18929RISC-V Instruction Set Manual Volume I: User-Level ISA. 18930 18931 18932File: as.info, Node: RISC-V-ATTRIBUTE, Prev: RISC-V-Formats, Up: RISC-V-Dependent 18933 189349.38.5 RISC-V Object Attribute 18935------------------------------ 18936 18937RISC-V attributes have a string value if the tag number is odd and an 18938integer value if the tag number is even. 18939 18940Tag_RISCV_stack_align (4) 18941 Tag_RISCV_strict_align records the N-byte stack alignment for this 18942 object. The default value is 16 for RV32I or RV64I, and 4 for 18943 RV32E. 18944 18945 The smallest value will be used if object files with different 18946 Tag_RISCV_stack_align values are merged. 18947 18948Tag_RISCV_arch (5) 18949 Tag_RISCV_arch contains a string for the target architecture taken 18950 from the option '-march'. Different architectures will be 18951 integrated into a superset when object files are merged. 18952 18953 Note that the version information of the target architecture must 18954 be presented explicitly in the attribute and abbreviations must be 18955 expanded. The version information, if not given by '-march', must 18956 be in accordance with the default specified by the tool. For 18957 example, the architecture 'RV32I' has to be recorded in the 18958 attribute as 'RV32I2P0' in which '2P0' stands for the default 18959 version of its base ISA. On the other hand, the architecture 18960 'RV32G' has to be presented as 'RV32I2P0_M2P0_A2P0_F2P0_D2P0' in 18961 which the abbreviation 'G' is expanded to the 'IMAFD' combination 18962 with default versions of the standard extensions. 18963 18964Tag_RISCV_unaligned_access (6) 18965 Tag_RISCV_unaligned_access is 0 for files that do not allow any 18966 unaligned memory accesses, and 1 for files that do allow unaligned 18967 memory accesses. 18968 18969Tag_RISCV_priv_spec (8) 18970Tag_RISCV_priv_spec_minor (10) 18971Tag_RISCV_priv_spec_revision (12) 18972 Tag_RISCV_priv_spec contains the major/minor/revision version 18973 information of the privileged specification. It will report errors 18974 if object files of different privileged specification versions are 18975 merged. 18976 18977 18978File: as.info, Node: RL78-Dependent, Next: RX-Dependent, Prev: RISC-V-Dependent, Up: Machine Dependencies 18979 189809.39 RL78 Dependent Features 18981============================ 18982 18983* Menu: 18984 18985* RL78-Opts:: RL78 Assembler Command-line Options 18986* RL78-Modifiers:: Symbolic Operand Modifiers 18987* RL78-Directives:: Assembler Directives 18988* RL78-Syntax:: Syntax 18989 18990 18991File: as.info, Node: RL78-Opts, Next: RL78-Modifiers, Up: RL78-Dependent 18992 189939.39.1 RL78 Options 18994------------------- 18995 18996'relax' 18997 Enable support for link-time relaxation. 18998 18999'norelax' 19000 Disable support for link-time relaxation (default). 19001 19002'mg10' 19003 Mark the generated binary as targeting the G10 variant of the RL78 19004 architecture. 19005 19006'mg13' 19007 Mark the generated binary as targeting the G13 variant of the RL78 19008 architecture. 19009 19010'mg14' 19011'mrl78' 19012 Mark the generated binary as targeting the G14 variant of the RL78 19013 architecture. This is the default. 19014 19015'm32bit-doubles' 19016 Mark the generated binary as one that uses 32-bits to hold the 19017 'double' floating point type. This is the default. 19018 19019'm64bit-doubles' 19020 Mark the generated binary as one that uses 64-bits to hold the 19021 'double' floating point type. 19022 19023 19024File: as.info, Node: RL78-Modifiers, Next: RL78-Directives, Prev: RL78-Opts, Up: RL78-Dependent 19025 190269.39.2 Symbolic Operand Modifiers 19027--------------------------------- 19028 19029The RL78 has three modifiers that adjust the relocations used by the 19030linker: 19031 19032'%lo16()' 19033 19034 When loading a 20-bit (or wider) address into registers, this 19035 modifier selects the 16 least significant bits. 19036 19037 movw ax,#%lo16(_sym) 19038 19039'%hi16()' 19040 19041 When loading a 20-bit (or wider) address into registers, this 19042 modifier selects the 16 most significant bits. 19043 19044 movw ax,#%hi16(_sym) 19045 19046'%hi8()' 19047 19048 When loading a 20-bit (or wider) address into registers, this 19049 modifier selects the 8 bits that would go into CS or ES (i.e. bits 19050 23..16). 19051 19052 mov es, #%hi8(_sym) 19053 19054 19055File: as.info, Node: RL78-Directives, Next: RL78-Syntax, Prev: RL78-Modifiers, Up: RL78-Dependent 19056 190579.39.3 Assembler Directives 19058--------------------------- 19059 19060In addition to the common directives, the RL78 adds these: 19061 19062'.double' 19063 Output a constant in "double" format, which is either a 32-bit or a 19064 64-bit floating point value, depending upon the setting of the 19065 '-m32bit-doubles'|'-m64bit-doubles' command-line option. 19066 19067'.bss' 19068 Select the BSS section. 19069 19070'.3byte' 19071 Output a constant value in a three byte format. 19072 19073'.int' 19074'.word' 19075 Output a constant value in a four byte format. 19076 19077 19078File: as.info, Node: RL78-Syntax, Prev: RL78-Directives, Up: RL78-Dependent 19079 190809.39.4 Syntax for the RL78 19081-------------------------- 19082 19083* Menu: 19084 19085* RL78-Chars:: Special Characters 19086 19087 19088File: as.info, Node: RL78-Chars, Up: RL78-Syntax 19089 190909.39.4.1 Special Characters 19091........................... 19092 19093The presence of a ';' appearing anywhere on a line indicates the start 19094of a comment that extends to the end of that line. 19095 19096 If a '#' appears as the first character of a line then the whole line 19097is treated as a comment, but in this case the line can also be a logical 19098line number directive (*note Comments::) or a preprocessor control 19099command (*note Preprocessing::). 19100 19101 The '|' character can be used to separate statements on the same 19102line. 19103 19104 19105File: as.info, Node: RX-Dependent, Next: S/390-Dependent, Prev: RL78-Dependent, Up: Machine Dependencies 19106 191079.40 RX Dependent Features 19108========================== 19109 19110* Menu: 19111 19112* RX-Opts:: RX Assembler Command-line Options 19113* RX-Modifiers:: Symbolic Operand Modifiers 19114* RX-Directives:: Assembler Directives 19115* RX-Float:: Floating Point 19116* RX-Syntax:: Syntax 19117 19118 19119File: as.info, Node: RX-Opts, Next: RX-Modifiers, Up: RX-Dependent 19120 191219.40.1 RX Options 19122----------------- 19123 19124The Renesas RX port of 'as' has a few target specific command-line 19125options: 19126 19127'-m32bit-doubles' 19128 This option controls the ABI and indicates to use a 32-bit float 19129 ABI. It has no effect on the assembled instructions, but it does 19130 influence the behaviour of the '.double' pseudo-op. This is the 19131 default. 19132 19133'-m64bit-doubles' 19134 This option controls the ABI and indicates to use a 64-bit float 19135 ABI. It has no effect on the assembled instructions, but it does 19136 influence the behaviour of the '.double' pseudo-op. 19137 19138'-mbig-endian' 19139 This option controls the ABI and indicates to use a big-endian data 19140 ABI. It has no effect on the assembled instructions, but it does 19141 influence the behaviour of the '.short', '.hword', '.int', '.word', 19142 '.long', '.quad' and '.octa' pseudo-ops. 19143 19144'-mlittle-endian' 19145 This option controls the ABI and indicates to use a little-endian 19146 data ABI. It has no effect on the assembled instructions, but it 19147 does influence the behaviour of the '.short', '.hword', '.int', 19148 '.word', '.long', '.quad' and '.octa' pseudo-ops. This is the 19149 default. 19150 19151'-muse-conventional-section-names' 19152 This option controls the default names given to the code (.text), 19153 initialised data (.data) and uninitialised data sections (.bss). 19154 19155'-muse-renesas-section-names' 19156 This option controls the default names given to the code (.P), 19157 initialised data (.D_1) and uninitialised data sections (.B_1). 19158 This is the default. 19159 19160'-msmall-data-limit' 19161 This option tells the assembler that the small data limit feature 19162 of the RX port of GCC is being used. This results in the assembler 19163 generating an undefined reference to a symbol called '__gp' for use 19164 by the relocations that are needed to support the small data limit 19165 feature. This option is not enabled by default as it would 19166 otherwise pollute the symbol table. 19167 19168'-mpid' 19169 This option tells the assembler that the position independent data 19170 of the RX port of GCC is being used. This results in the assembler 19171 generating an undefined reference to a symbol called '__pid_base', 19172 and also setting the RX_PID flag bit in the e_flags field of the 19173 ELF header of the object file. 19174 19175'-mint-register=NUM' 19176 This option tells the assembler how many registers have been 19177 reserved for use by interrupt handlers. This is needed in order to 19178 compute the correct values for the '%gpreg' and '%pidreg' meta 19179 registers. 19180 19181'-mgcc-abi' 19182 This option tells the assembler that the old GCC ABI is being used 19183 by the assembled code. With this version of the ABI function 19184 arguments that are passed on the stack are aligned to a 32-bit 19185 boundary. 19186 19187'-mrx-abi' 19188 This option tells the assembler that the official RX ABI is being 19189 used by the assembled code. With this version of the ABI function 19190 arguments that are passed on the stack are aligned to their natural 19191 alignments. This option is the default. 19192 19193'-mcpu=NAME' 19194 This option tells the assembler the target CPU type. Currently the 19195 'rx100', 'rx200', 'rx600', 'rx610', 'rxv2', 'rxv3' and 'rxv3-dfpu' 19196 are recognised as valid cpu names. Attempting to assemble an 19197 instructionnot supported by the indicated cpu type will result in 19198 an error message being generated. 19199 19200'-mno-allow-string-insns' 19201 This option tells the assembler to mark the object file that it is 19202 building as one that does not use the string instructions 'SMOVF', 19203 'SCMPU', 'SMOVB', 'SMOVU', 'SUNTIL' 'SWHILE' or the 'RMPA' 19204 instruction. In addition the mark tells the linker to complain if 19205 an attempt is made to link the binary with another one that does 19206 use any of these instructions. 19207 19208 Note - the inverse of this option, '-mallow-string-insns', is not 19209 needed. The assembler automatically detects the use of the the 19210 instructions in the source code and labels the resulting object 19211 file appropriately. If no string instructions are detected then 19212 the object file is labelled as being one that can be linked with 19213 either string-using or string-banned object files. 19214 19215 19216File: as.info, Node: RX-Modifiers, Next: RX-Directives, Prev: RX-Opts, Up: RX-Dependent 19217 192189.40.2 Symbolic Operand Modifiers 19219--------------------------------- 19220 19221The assembler supports one modifier when using symbol addresses in RX 19222instruction operands. The general syntax is the following: 19223 19224 %gp(symbol) 19225 19226 The modifier returns the offset from the __GP symbol to the specified 19227symbol as a 16-bit value. The intent is that this offset should be used 19228in a register+offset move instruction when generating references to 19229small data. Ie, like this: 19230 19231 mov.W %gp(_foo)[%gpreg], r1 19232 19233 The assembler also supports two meta register names which can be used 19234to refer to registers whose values may not be known to the programmer. 19235These meta register names are: 19236 19237'%gpreg' 19238 The small data address register. 19239 19240'%pidreg' 19241 The PID base address register. 19242 19243 Both registers normally have the value r13, but this can change if 19244some registers have been reserved for use by interrupt handlers or if 19245both the small data limit and position independent data features are 19246being used at the same time. 19247 19248 19249File: as.info, Node: RX-Directives, Next: RX-Float, Prev: RX-Modifiers, Up: RX-Dependent 19250 192519.40.3 Assembler Directives 19252--------------------------- 19253 19254The RX version of 'as' has the following specific assembler directives: 19255 19256'.3byte' 19257 Inserts a 3-byte value into the output file at the current 19258 location. 19259 19260'.fetchalign' 19261 If the next opcode following this directive spans a fetch line 19262 boundary (8 byte boundary), the opcode is aligned to that boundary. 19263 If the next opcode does not span a fetch line, this directive has 19264 no effect. Note that one or more labels may be between this 19265 directive and the opcode; those labels are aligned as well. Any 19266 inserted bytes due to alignment will form a NOP opcode. 19267 19268 19269File: as.info, Node: RX-Float, Next: RX-Syntax, Prev: RX-Directives, Up: RX-Dependent 19270 192719.40.4 Floating Point 19272--------------------- 19273 19274The floating point formats generated by directives are these. 19275 19276'.float' 19277 'Single' precision (32-bit) floating point constants. 19278 19279'.double' 19280 If the '-m64bit-doubles' command-line option has been specified 19281 then then 'double' directive generates 'double' precision (64-bit) 19282 floating point constants, otherwise it generates 'single' precision 19283 (32-bit) floating point constants. To force the generation of 19284 64-bit floating point constants used the 'dc.d' directive instead. 19285 19286 19287File: as.info, Node: RX-Syntax, Prev: RX-Float, Up: RX-Dependent 19288 192899.40.5 Syntax for the RX 19290------------------------ 19291 19292* Menu: 19293 19294* RX-Chars:: Special Characters 19295 19296 19297File: as.info, Node: RX-Chars, Up: RX-Syntax 19298 192999.40.5.1 Special Characters 19300........................... 19301 19302The presence of a ';' appearing anywhere on a line indicates the start 19303of a comment that extends to the end of that line. 19304 19305 If a '#' appears as the first character of a line then the whole line 19306is treated as a comment, but in this case the line can also be a logical 19307line number directive (*note Comments::) or a preprocessor control 19308command (*note Preprocessing::). 19309 19310 The '!' character can be used to separate statements on the same 19311line. 19312 19313 19314File: as.info, Node: S/390-Dependent, Next: SCORE-Dependent, Prev: RX-Dependent, Up: Machine Dependencies 19315 193169.41 IBM S/390 Dependent Features 19317================================= 19318 19319The s390 version of 'as' supports two architectures modes and eleven 19320chip levels. The architecture modes are the Enterprise System 19321Architecture (ESA) and the newer z/Architecture mode. The chip levels 19322are g5 (or arch3), g6, z900 (or arch5), z990 (or arch6), z9-109, z9-ec 19323(or arch7), z10 (or arch8), z196 (or arch9), zEC12 (or arch10), z13 (or 19324arch11), z14 (or arch12), z15 (or arch13), or arch14. 19325 19326* Menu: 19327 19328* s390 Options:: Command-line Options. 19329* s390 Characters:: Special Characters. 19330* s390 Syntax:: Assembler Instruction syntax. 19331* s390 Directives:: Assembler Directives. 19332* s390 Floating Point:: Floating Point. 19333 19334 19335File: as.info, Node: s390 Options, Next: s390 Characters, Up: S/390-Dependent 19336 193379.41.1 Options 19338-------------- 19339 19340The following table lists all available s390 specific options: 19341 19342'-m31 | -m64' 19343 Select 31- or 64-bit ABI implying a word size of 32- or 64-bit. 19344 19345 These options are only available with the ELF object file format, 19346 and require that the necessary BFD support has been included (on a 19347 31-bit platform you must add -enable-64-bit-bfd on the call to the 19348 configure script to enable 64-bit usage and use s390x as target 19349 platform). 19350 19351'-mesa | -mzarch' 19352 Select the architecture mode, either the Enterprise System 19353 Architecture (esa) mode or the z/Architecture mode (zarch). 19354 19355 The 64-bit instructions are only available with the z/Architecture 19356 mode. The combination of '-m64' and '-mesa' results in a warning 19357 message. 19358 19359'-march=CPU' 19360 This option specifies the target processor. The following 19361 processor names are recognized: 'g5' (or 'arch3'), 'g6', 'z900' (or 19362 'arch5'), 'z990' (or 'arch6'), 'z9-109', 'z9-ec' (or 'arch7'), 19363 'z10' (or 'arch8'), 'z196' (or 'arch9'), 'zEC12' (or 'arch10'), 19364 'z13' (or 'arch11'), 'z14' (or 'arch12'), 'z15' (or 'arch13'), and 19365 'arch14'. 19366 19367 Assembling an instruction that is not supported on the target 19368 processor results in an error message. 19369 19370 The processor names starting with 'arch' refer to the edition 19371 number in the Principle of Operations manual. They can be used as 19372 alternate processor names and have been added for compatibility 19373 with the IBM XL compiler. 19374 19375 'arch3', 'g5' and 'g6' cannot be used with the '-mzarch' option 19376 since the z/Architecture mode is not supported on these processor 19377 levels. 19378 19379 There is no 'arch4' option supported. 'arch4' matches 19380 '-march=arch5 -mesa'. 19381 19382'-mregnames' 19383 Allow symbolic names for registers. 19384 19385'-mno-regnames' 19386 Do not allow symbolic names for registers. 19387 19388'-mwarn-areg-zero' 19389 Warn whenever the operand for a base or index register has been 19390 specified but evaluates to zero. This can indicate the misuse of 19391 general purpose register 0 as an address register. 19392 19393 19394File: as.info, Node: s390 Characters, Next: s390 Syntax, Prev: s390 Options, Up: S/390-Dependent 19395 193969.41.2 Special Characters 19397------------------------- 19398 19399'#' is the line comment character. 19400 19401 If a '#' appears as the first character of a line then the whole line 19402is treated as a comment, but in this case the line could also be a 19403logical line number directive (*note Comments::) or a preprocessor 19404control command (*note Preprocessing::). 19405 19406 The ';' character can be used instead of a newline to separate 19407statements. 19408 19409 19410File: as.info, Node: s390 Syntax, Next: s390 Directives, Prev: s390 Characters, Up: S/390-Dependent 19411 194129.41.3 Instruction syntax 19413------------------------- 19414 19415The assembler syntax closely follows the syntax outlined in Enterprise 19416Systems Architecture/390 Principles of Operation (SA22-7201) and the 19417z/Architecture Principles of Operation (SA22-7832). 19418 19419 Each instruction has two major parts, the instruction mnemonic and 19420the instruction operands. The instruction format varies. 19421 19422* Menu: 19423 19424* s390 Register:: Register Naming 19425* s390 Mnemonics:: Instruction Mnemonics 19426* s390 Operands:: Instruction Operands 19427* s390 Formats:: Instruction Formats 19428* s390 Aliases:: Instruction Aliases 19429* s390 Operand Modifier:: Instruction Operand Modifier 19430* s390 Instruction Marker:: Instruction Marker 19431* s390 Literal Pool Entries:: Literal Pool Entries 19432 19433 19434File: as.info, Node: s390 Register, Next: s390 Mnemonics, Up: s390 Syntax 19435 194369.41.3.1 Register naming 19437........................ 19438 19439The 'as' recognizes a number of predefined symbols for the various 19440processor registers. A register specification in one of the instruction 19441formats is an unsigned integer between 0 and 15. The specific 19442instruction and the position of the register in the instruction format 19443denotes the type of the register. The register symbols are prefixed 19444with '%': 19445 19446 %rN the 16 general purpose registers, 0 <= N <= 15 19447 %fN the 16 floating point registers, 0 <= N <= 15 19448 %aN the 16 access registers, 0 <= N <= 15 19449 %cN the 16 control registers, 0 <= N <= 15 19450 %lit an alias for the general purpose register %r13 19451 %sp an alias for the general purpose register %r15 19452 19453 19454File: as.info, Node: s390 Mnemonics, Next: s390 Operands, Prev: s390 Register, Up: s390 Syntax 19455 194569.41.3.2 Instruction Mnemonics 19457.............................. 19458 19459All instructions documented in the Principles of Operation are supported 19460with the mnemonic and order of operands as described. The instruction 19461mnemonic identifies the instruction format (*note s390 Formats::) and 19462the specific operation code for the instruction. For example, the 'lr' 19463mnemonic denotes the instruction format 'RR' with the operation code 19464'0x18'. 19465 19466 The definition of the various mnemonics follows a scheme, where the 19467first character usually hint at the type of the instruction: 19468 19469 a add instruction, for example 'al' for add logical 32-bit 19470 b branch instruction, for example 'bc' for branch on condition 19471 c compare or convert instruction, for example 'cr' for compare 19472 register 32-bit 19473 d divide instruction, for example 'dlr' devide logical register 19474 64-bit to 32-bit 19475 i insert instruction, for example 'ic' insert character 19476 l load instruction, for example 'ltr' load and test register 19477 mv move instruction, for example 'mvc' move character 19478 m multiply instruction, for example 'mh' multiply halfword 19479 n and instruction, for example 'ni' and immediate 19480 o or instruction, for example 'oc' or character 19481 sla, sll shift left single instruction 19482 sra, srl shift right single instruction 19483 st store instruction, for example 'stm' store multiple 19484 s subtract instruction, for example 'slr' subtract 19485 logical 32-bit 19486 t test or translate instruction, of example 'tm' test under mask 19487 x exclusive or instruction, for example 'xc' exclusive or 19488 character 19489 19490 Certain characters at the end of the mnemonic may describe a property 19491of the instruction: 19492 19493 c the instruction uses a 8-bit character operand 19494 f the instruction extends a 32-bit operand to 64 bit 19495 g the operands are treated as 64-bit values 19496 h the operand uses a 16-bit halfword operand 19497 i the instruction uses an immediate operand 19498 l the instruction uses unsigned, logical operands 19499 m the instruction uses a mask or operates on multiple values 19500 r if r is the last character, the instruction operates on registers 19501 y the instruction uses 20-bit displacements 19502 19503 There are many exceptions to the scheme outlined in the above lists, 19504in particular for the privileged instructions. For non-privileged 19505instruction it works quite well, for example the instruction 'clgfr' c: 19506compare instruction, l: unsigned operands, g: 64-bit operands, f: 32- to 1950764-bit extension, r: register operands. The instruction compares an 1950864-bit value in a register with the zero extended 32-bit value from a 19509second register. For a complete list of all mnemonics see appendix B in 19510the Principles of Operation. 19511 19512 19513File: as.info, Node: s390 Operands, Next: s390 Formats, Prev: s390 Mnemonics, Up: s390 Syntax 19514 195159.41.3.3 Instruction Operands 19516............................. 19517 19518Instruction operands can be grouped into three classes, operands located 19519in registers, immediate operands, and operands in storage. 19520 19521 A register operand can be located in general, floating-point, access, 19522or control register. The register is identified by a four-bit field. 19523The field containing the register operand is called the R field. 19524 19525 Immediate operands are contained within the instruction and can have 195268, 16 or 32 bits. The field containing the immediate operand is called 19527the I field. Dependent on the instruction the I field is either signed 19528or unsigned. 19529 19530 A storage operand consists of an address and a length. The address 19531of a storage operands can be specified in any of these ways: 19532 19533 * The content of a single general R 19534 * The sum of the content of a general register called the base 19535 register B plus the content of a displacement field D 19536 * The sum of the contents of two general registers called the index 19537 register X and the base register B plus the content of a 19538 displacement field 19539 * The sum of the current instruction address and a 32-bit signed 19540 immediate field multiplied by two. 19541 19542 The length of a storage operand can be: 19543 19544 * Implied by the instruction 19545 * Specified by a bitmask 19546 * Specified by a four-bit or eight-bit length field L 19547 * Specified by the content of a general register 19548 19549 The notation for storage operand addresses formed from multiple 19550fields is as follows: 19551 19552'Dn(Bn)' 19553 the address for operand number n is formed from the content of 19554 general register Bn called the base register and the displacement 19555 field Dn. 19556'Dn(Xn,Bn)' 19557 the address for operand number n is formed from the content of 19558 general register Xn called the index register, general register Bn 19559 called the base register and the displacement field Dn. 19560'Dn(Ln,Bn)' 19561 the address for operand number n is formed from the content of 19562 general register Bn called the base register and the displacement 19563 field Dn. The length of the operand n is specified by the field 19564 Ln. 19565 19566 The base registers Bn and the index registers Xn of a storage operand 19567can be skipped. If Bn and Xn are skipped, a zero will be stored to the 19568operand field. The notation changes as follows: 19569 19570 full notation short notation 19571 ---------------------------------------------- 19572 Dn(0,Bn) Dn(Bn) 19573 Dn(0,0) Dn 19574 Dn(0) Dn 19575 Dn(Ln,0) Dn(Ln) 19576 19577 19578File: as.info, Node: s390 Formats, Next: s390 Aliases, Prev: s390 Operands, Up: s390 Syntax 19579 195809.41.3.4 Instruction Formats 19581............................ 19582 19583The Principles of Operation manuals lists 26 instruction formats where 19584some of the formats have multiple variants. For the '.insn' pseudo 19585directive the assembler recognizes some of the formats. Typically, the 19586most general variant of the instruction format is used by the '.insn' 19587directive. 19588 19589 The following table lists the abbreviations used in the table of 19590instruction formats: 19591 19592 OpCode / OpCd Part of the op code. 19593 Bx Base register number for operand x. 19594 Dx Displacement for operand x. 19595 DLx Displacement lower 12 bits for operand x. 19596 DHx Displacement higher 8-bits for operand x. 19597 Rx Register number for operand x. 19598 Xx Index register number for operand x. 19599 Ix Signed immediate for operand x. 19600 Ux Unsigned immediate for operand x. 19601 19602 An instruction is two, four, or six bytes in length and must be 19603aligned on a 2 byte boundary. The first two bits of the instruction 19604specify the length of the instruction, 00 indicates a two byte 19605instruction, 01 and 10 indicates a four byte instruction, and 11 19606indicates a six byte instruction. 19607 19608 The following table lists the s390 instruction formats that are 19609available with the '.insn' pseudo directive: 19610 19611'E format' 19612 +-------------+ 19613 | OpCode | 19614 +-------------+ 19615 0 15 19616 19617'RI format: <insn> R1,I2' 19618 +--------+----+----+------------------+ 19619 | OpCode | R1 |OpCd| I2 | 19620 +--------+----+----+------------------+ 19621 0 8 12 16 31 19622 19623'RIE format: <insn> R1,R3,I2' 19624 +--------+----+----+------------------+--------+--------+ 19625 | OpCode | R1 | R3 | I2 |////////| OpCode | 19626 +--------+----+----+------------------+--------+--------+ 19627 0 8 12 16 32 40 47 19628 19629'RIL format: <insn> R1,I2' 19630 +--------+----+----+------------------------------------+ 19631 | OpCode | R1 |OpCd| I2 | 19632 +--------+----+----+------------------------------------+ 19633 0 8 12 16 47 19634 19635'RILU format: <insn> R1,U2' 19636 +--------+----+----+------------------------------------+ 19637 | OpCode | R1 |OpCd| U2 | 19638 +--------+----+----+------------------------------------+ 19639 0 8 12 16 47 19640 19641'RIS format: <insn> R1,I2,M3,D4(B4)' 19642 +--------+----+----+----+-------------+--------+--------+ 19643 | OpCode | R1 | M3 | B4 | D4 | I2 | Opcode | 19644 +--------+----+----+----+-------------+--------+--------+ 19645 0 8 12 16 20 32 36 47 19646 19647'RR format: <insn> R1,R2' 19648 +--------+----+----+ 19649 | OpCode | R1 | R2 | 19650 +--------+----+----+ 19651 0 8 12 15 19652 19653'RRE format: <insn> R1,R2' 19654 +------------------+--------+----+----+ 19655 | OpCode |////////| R1 | R2 | 19656 +------------------+--------+----+----+ 19657 0 16 24 28 31 19658 19659'RRF format: <insn> R1,R2,R3,M4' 19660 +------------------+----+----+----+----+ 19661 | OpCode | R3 | M4 | R1 | R2 | 19662 +------------------+----+----+----+----+ 19663 0 16 20 24 28 31 19664 19665'RRS format: <insn> R1,R2,M3,D4(B4)' 19666 +--------+----+----+----+-------------+----+----+--------+ 19667 | OpCode | R1 | R3 | B4 | D4 | M3 |////| OpCode | 19668 +--------+----+----+----+-------------+----+----+--------+ 19669 0 8 12 16 20 32 36 40 47 19670 19671'RS format: <insn> R1,R3,D2(B2)' 19672 +--------+----+----+----+-------------+ 19673 | OpCode | R1 | R3 | B2 | D2 | 19674 +--------+----+----+----+-------------+ 19675 0 8 12 16 20 31 19676 19677'RSE format: <insn> R1,R3,D2(B2)' 19678 +--------+----+----+----+-------------+--------+--------+ 19679 | OpCode | R1 | R3 | B2 | D2 |////////| OpCode | 19680 +--------+----+----+----+-------------+--------+--------+ 19681 0 8 12 16 20 32 40 47 19682 19683'RSI format: <insn> R1,R3,I2' 19684 +--------+----+----+------------------------------------+ 19685 | OpCode | R1 | R3 | I2 | 19686 +--------+----+----+------------------------------------+ 19687 0 8 12 16 47 19688 19689'RSY format: <insn> R1,R3,D2(B2)' 19690 +--------+----+----+----+-------------+--------+--------+ 19691 | OpCode | R1 | R3 | B2 | DL2 | DH2 | OpCode | 19692 +--------+----+----+----+-------------+--------+--------+ 19693 0 8 12 16 20 32 40 47 19694 19695'RX format: <insn> R1,D2(X2,B2)' 19696 +--------+----+----+----+-------------+ 19697 | OpCode | R1 | X2 | B2 | D2 | 19698 +--------+----+----+----+-------------+ 19699 0 8 12 16 20 31 19700 19701'RXE format: <insn> R1,D2(X2,B2)' 19702 +--------+----+----+----+-------------+--------+--------+ 19703 | OpCode | R1 | X2 | B2 | D2 |////////| OpCode | 19704 +--------+----+----+----+-------------+--------+--------+ 19705 0 8 12 16 20 32 40 47 19706 19707'RXF format: <insn> R1,R3,D2(X2,B2)' 19708 +--------+----+----+----+-------------+----+---+--------+ 19709 | OpCode | R3 | X2 | B2 | D2 | R1 |///| OpCode | 19710 +--------+----+----+----+-------------+----+---+--------+ 19711 0 8 12 16 20 32 36 40 47 19712 19713'RXY format: <insn> R1,D2(X2,B2)' 19714 +--------+----+----+----+-------------+--------+--------+ 19715 | OpCode | R1 | X2 | B2 | DL2 | DH2 | OpCode | 19716 +--------+----+----+----+-------------+--------+--------+ 19717 0 8 12 16 20 32 36 40 47 19718 19719'S format: <insn> D2(B2)' 19720 +------------------+----+-------------+ 19721 | OpCode | B2 | D2 | 19722 +------------------+----+-------------+ 19723 0 16 20 31 19724 19725'SI format: <insn> D1(B1),I2' 19726 +--------+---------+----+-------------+ 19727 | OpCode | I2 | B1 | D1 | 19728 +--------+---------+----+-------------+ 19729 0 8 16 20 31 19730 19731'SIY format: <insn> D1(B1),U2' 19732 +--------+---------+----+-------------+--------+--------+ 19733 | OpCode | I2 | B1 | DL1 | DH1 | OpCode | 19734 +--------+---------+----+-------------+--------+--------+ 19735 0 8 16 20 32 36 40 47 19736 19737'SIL format: <insn> D1(B1),I2' 19738 +------------------+----+-------------+-----------------+ 19739 | OpCode | B1 | D1 | I2 | 19740 +------------------+----+-------------+-----------------+ 19741 0 16 20 32 47 19742 19743'SS format: <insn> D1(R1,B1),D2(B3),R3' 19744 +--------+----+----+----+-------------+----+------------+ 19745 | OpCode | R1 | R3 | B1 | D1 | B2 | D2 | 19746 +--------+----+----+----+-------------+----+------------+ 19747 0 8 12 16 20 32 36 47 19748 19749'SSE format: <insn> D1(B1),D2(B2)' 19750 +------------------+----+-------------+----+------------+ 19751 | OpCode | B1 | D1 | B2 | D2 | 19752 +------------------+----+-------------+----+------------+ 19753 0 8 12 16 20 32 36 47 19754 19755'SSF format: <insn> D1(B1),D2(B2),R3' 19756 +--------+----+----+----+-------------+----+------------+ 19757 | OpCode | R3 |OpCd| B1 | D1 | B2 | D2 | 19758 +--------+----+----+----+-------------+----+------------+ 19759 0 8 12 16 20 32 36 47 19760 19761 For the complete list of all instruction format variants see the 19762Principles of Operation manuals. 19763 19764 19765File: as.info, Node: s390 Aliases, Next: s390 Operand Modifier, Prev: s390 Formats, Up: s390 Syntax 19766 197679.41.3.5 Instruction Aliases 19768............................ 19769 19770A specific bit pattern can have multiple mnemonics, for example the bit 19771pattern '0xa7000000' has the mnemonics 'tmh' and 'tmlh'. In addition, 19772there are a number of mnemonics recognized by 'as' that are not present 19773in the Principles of Operation. These are the short forms of the branch 19774instructions, where the condition code mask operand is encoded in the 19775mnemonic. This is relevant for the branch instructions, the compare and 19776branch instructions, and the compare and trap instructions. 19777 19778 For the branch instructions there are 20 condition code strings that 19779can be used as part of the mnemonic in place of a mask operand in the 19780instruction format: 19781 19782 instruction short form 19783 ---------------------------------------------- 19784 bcr M1,R2 b<m>r R2 19785 bc M1,D2(X2,B2) b<m> D2(X2,B2) 19786 brc M1,I2 j<m> I2 19787 brcl M1,I2 jg<m> I2 19788 19789 In the mnemonic for a branch instruction the condition code string 19790<m> can be any of the following: 19791 19792 o jump on overflow / if ones 19793 h jump on A high 19794 p jump on plus 19795 nle jump on not low or equal 19796 l jump on A low 19797 m jump on minus 19798 nhe jump on not high or equal 19799 lh jump on low or high 19800 ne jump on A not equal B 19801 nz jump on not zero / if not zeros 19802 e jump on A equal B 19803 z jump on zero / if zeroes 19804 nlh jump on not low or high 19805 he jump on high or equal 19806 nl jump on A not low 19807 nm jump on not minus / if not mixed 19808 le jump on low or equal 19809 nh jump on A not high 19810 np jump on not plus 19811 no jump on not overflow / if not ones 19812 19813 For the compare and branch, and compare and trap instructions there 19814are 12 condition code strings that can be used as part of the mnemonic 19815in place of a mask operand in the instruction format: 19816 19817 instruction short form 19818 ------------------------------------------------------------ 19819 crb R1,R2,M3,D4(B4) crb<m> R1,R2,D4(B4) 19820 cgrb R1,R2,M3,D4(B4) cgrb<m> R1,R2,D4(B4) 19821 crj R1,R2,M3,I4 crj<m> R1,R2,I4 19822 cgrj R1,R2,M3,I4 cgrj<m> R1,R2,I4 19823 cib R1,I2,M3,D4(B4) cib<m> R1,I2,D4(B4) 19824 cgib R1,I2,M3,D4(B4) cgib<m> R1,I2,D4(B4) 19825 cij R1,I2,M3,I4 cij<m> R1,I2,I4 19826 cgij R1,I2,M3,I4 cgij<m> R1,I2,I4 19827 crt R1,R2,M3 crt<m> R1,R2 19828 cgrt R1,R2,M3 cgrt<m> R1,R2 19829 cit R1,I2,M3 cit<m> R1,I2 19830 cgit R1,I2,M3 cgit<m> R1,I2 19831 clrb R1,R2,M3,D4(B4) clrb<m> R1,R2,D4(B4) 19832 clgrb R1,R2,M3,D4(B4) clgrb<m> R1,R2,D4(B4) 19833 clrj R1,R2,M3,I4 clrj<m> R1,R2,I4 19834 clgrj R1,R2,M3,I4 clgrj<m> R1,R2,I4 19835 clib R1,I2,M3,D4(B4) clib<m> R1,I2,D4(B4) 19836 clgib R1,I2,M3,D4(B4) clgib<m> R1,I2,D4(B4) 19837 clij R1,I2,M3,I4 clij<m> R1,I2,I4 19838 clgij R1,I2,M3,I4 clgij<m> R1,I2,I4 19839 clrt R1,R2,M3 clrt<m> R1,R2 19840 clgrt R1,R2,M3 clgrt<m> R1,R2 19841 clfit R1,I2,M3 clfit<m> R1,I2 19842 clgit R1,I2,M3 clgit<m> R1,I2 19843 19844 In the mnemonic for a compare and branch and compare and trap 19845instruction the condition code string <m> can be any of the following: 19846 19847 h jump on A high 19848 nle jump on not low or equal 19849 l jump on A low 19850 nhe jump on not high or equal 19851 ne jump on A not equal B 19852 lh jump on low or high 19853 e jump on A equal B 19854 nlh jump on not low or high 19855 nl jump on A not low 19856 he jump on high or equal 19857 nh jump on A not high 19858 le jump on low or equal 19859 19860 19861File: as.info, Node: s390 Operand Modifier, Next: s390 Instruction Marker, Prev: s390 Aliases, Up: s390 Syntax 19862 198639.41.3.6 Instruction Operand Modifier 19864..................................... 19865 19866If a symbol modifier is attached to a symbol in an expression for an 19867instruction operand field, the symbol term is replaced with a reference 19868to an object in the global offset table (GOT) or the procedure linkage 19869table (PLT). The following expressions are allowed: 'symbol@modifier + 19870constant', 'symbol@modifier + label + constant', and 'symbol@modifier - 19871label + constant'. The term 'symbol' is the symbol that will be entered 19872into the GOT or PLT, 'label' is a local label, and 'constant' is an 19873arbitrary expression that the assembler can evaluate to a constant 19874value. 19875 19876 The term '(symbol + constant1)@modifier +/- label + constant2' is 19877also accepted but a warning message is printed and the term is converted 19878to 'symbol@modifier +/- label + constant1 + constant2'. 19879 19880'@got' 19881'@got12' 19882 The @got modifier can be used for displacement fields, 16-bit 19883 immediate fields and 32-bit pc-relative immediate fields. The 19884 @got12 modifier is synonym to @got. The symbol is added to the 19885 GOT. For displacement fields and 16-bit immediate fields the symbol 19886 term is replaced with the offset from the start of the GOT to the 19887 GOT slot for the symbol. For a 32-bit pc-relative field the 19888 pc-relative offset to the GOT slot from the current instruction 19889 address is used. 19890'@gotent' 19891 The @gotent modifier can be used for 32-bit pc-relative immediate 19892 fields. The symbol is added to the GOT and the symbol term is 19893 replaced with the pc-relative offset from the current instruction 19894 to the GOT slot for the symbol. 19895'@gotoff' 19896 The @gotoff modifier can be used for 16-bit immediate fields. The 19897 symbol term is replaced with the offset from the start of the GOT 19898 to the address of the symbol. 19899'@gotplt' 19900 The @gotplt modifier can be used for displacement fields, 16-bit 19901 immediate fields, and 32-bit pc-relative immediate fields. A 19902 procedure linkage table entry is generated for the symbol and a 19903 jump slot for the symbol is added to the GOT. For displacement 19904 fields and 16-bit immediate fields the symbol term is replaced with 19905 the offset from the start of the GOT to the jump slot for the 19906 symbol. For a 32-bit pc-relative field the pc-relative offset to 19907 the jump slot from the current instruction address is used. 19908'@plt' 19909 The @plt modifier can be used for 16-bit and 32-bit pc-relative 19910 immediate fields. A procedure linkage table entry is generated for 19911 the symbol. The symbol term is replaced with the relative offset 19912 from the current instruction to the PLT entry for the symbol. 19913'@pltoff' 19914 The @pltoff modifier can be used for 16-bit immediate fields. The 19915 symbol term is replaced with the offset from the start of the PLT 19916 to the address of the symbol. 19917'@gotntpoff' 19918 The @gotntpoff modifier can be used for displacement fields. The 19919 symbol is added to the static TLS block and the negated offset to 19920 the symbol in the static TLS block is added to the GOT. The symbol 19921 term is replaced with the offset to the GOT slot from the start of 19922 the GOT. 19923'@indntpoff' 19924 The @indntpoff modifier can be used for 32-bit pc-relative 19925 immediate fields. The symbol is added to the static TLS block and 19926 the negated offset to the symbol in the static TLS block is added 19927 to the GOT. The symbol term is replaced with the pc-relative offset 19928 to the GOT slot from the current instruction address. 19929 19930 For more information about the thread local storage modifiers 19931'gotntpoff' and 'indntpoff' see the ELF extension documentation 'ELF 19932Handling For Thread-Local Storage'. 19933 19934 19935File: as.info, Node: s390 Instruction Marker, Next: s390 Literal Pool Entries, Prev: s390 Operand Modifier, Up: s390 Syntax 19936 199379.41.3.7 Instruction Marker 19938........................... 19939 19940The thread local storage instruction markers are used by the linker to 19941perform code optimization. 19942 19943':tls_load' 19944 The :tls_load marker is used to flag the load instruction in the 19945 initial exec TLS model that retrieves the offset from the thread 19946 pointer to a thread local storage variable from the GOT. 19947':tls_gdcall' 19948 The :tls_gdcall marker is used to flag the branch-and-save 19949 instruction to the __tls_get_offset function in the global dynamic 19950 TLS model. 19951':tls_ldcall' 19952 The :tls_ldcall marker is used to flag the branch-and-save 19953 instruction to the __tls_get_offset function in the local dynamic 19954 TLS model. 19955 19956 For more information about the thread local storage instruction 19957marker and the linker optimizations see the ELF extension documentation 19958'ELF Handling For Thread-Local Storage'. 19959 19960 19961File: as.info, Node: s390 Literal Pool Entries, Prev: s390 Instruction Marker, Up: s390 Syntax 19962 199639.41.3.8 Literal Pool Entries 19964............................. 19965 19966A literal pool is a collection of values. To access the values a 19967pointer to the literal pool is loaded to a register, the literal pool 19968register. Usually, register %r13 is used as the literal pool register 19969(*note s390 Register::). Literal pool entries are created by adding the 19970suffix :lit1, :lit2, :lit4, or :lit8 to the end of an expression for an 19971instruction operand. The expression is added to the literal pool and 19972the operand is replaced with the offset to the literal in the literal 19973pool. 19974 19975':lit1' 19976 The literal pool entry is created as an 8-bit value. An operand 19977 modifier must not be used for the original expression. 19978':lit2' 19979 The literal pool entry is created as a 16 bit value. The operand 19980 modifier @got may be used in the original expression. The term 19981 'x@got:lit2' will put the got offset for the global symbol x to the 19982 literal pool as 16 bit value. 19983':lit4' 19984 The literal pool entry is created as a 32-bit value. The operand 19985 modifier @got and @plt may be used in the original expression. The 19986 term 'x@got:lit4' will put the got offset for the global symbol x 19987 to the literal pool as a 32-bit value. The term 'x@plt:lit4' will 19988 put the plt offset for the global symbol x to the literal pool as a 19989 32-bit value. 19990':lit8' 19991 The literal pool entry is created as a 64-bit value. The operand 19992 modifier @got and @plt may be used in the original expression. The 19993 term 'x@got:lit8' will put the got offset for the global symbol x 19994 to the literal pool as a 64-bit value. The term 'x@plt:lit8' will 19995 put the plt offset for the global symbol x to the literal pool as a 19996 64-bit value. 19997 19998 The assembler directive '.ltorg' is used to emit all literal pool 19999entries to the current position. 20000 20001 20002File: as.info, Node: s390 Directives, Next: s390 Floating Point, Prev: s390 Syntax, Up: S/390-Dependent 20003 200049.41.4 Assembler Directives 20005--------------------------- 20006 20007'as' for s390 supports all of the standard ELF assembler directives as 20008outlined in the main part of this document. Some directives have been 20009extended and there are some additional directives, which are only 20010available for the s390 'as'. 20011 20012'.insn' 20013 This directive permits the numeric representation of an 20014 instructions and makes the assembler insert the operands according 20015 to one of the instructions formats for '.insn' (*note s390 20016 Formats::). For example, the instruction 'l %r1,24(%r15)' could be 20017 written as '.insn rx,0x58000000,%r1,24(%r15)'. 20018'.short' 20019'.long' 20020'.quad' 20021 This directive places one or more 16-bit (.short), 32-bit (.long), 20022 or 64-bit (.quad) values into the current section. If an ELF or 20023 TLS modifier is used only the following expressions are allowed: 20024 'symbol@modifier + constant', 'symbol@modifier + label + constant', 20025 and 'symbol@modifier - label + constant'. The following modifiers 20026 are available: 20027 '@got' 20028 '@got12' 20029 The @got modifier can be used for .short, .long and .quad. 20030 The @got12 modifier is synonym to @got. The symbol is added 20031 to the GOT. The symbol term is replaced with offset from the 20032 start of the GOT to the GOT slot for the symbol. 20033 '@gotoff' 20034 The @gotoff modifier can be used for .short, .long and .quad. 20035 The symbol term is replaced with the offset from the start of 20036 the GOT to the address of the symbol. 20037 '@gotplt' 20038 The @gotplt modifier can be used for .long and .quad. A 20039 procedure linkage table entry is generated for the symbol and 20040 a jump slot for the symbol is added to the GOT. The symbol 20041 term is replaced with the offset from the start of the GOT to 20042 the jump slot for the symbol. 20043 '@plt' 20044 The @plt modifier can be used for .long and .quad. A 20045 procedure linkage table entry us generated for the symbol. 20046 The symbol term is replaced with the address of the PLT entry 20047 for the symbol. 20048 '@pltoff' 20049 The @pltoff modifier can be used for .short, .long and .quad. 20050 The symbol term is replaced with the offset from the start of 20051 the PLT to the address of the symbol. 20052 '@tlsgd' 20053 '@tlsldm' 20054 The @tlsgd and @tlsldm modifier can be used for .long and 20055 .quad. A tls_index structure for the symbol is added to the 20056 GOT. The symbol term is replaced with the offset from the 20057 start of the GOT to the tls_index structure. 20058 '@gotntpoff' 20059 '@indntpoff' 20060 The @gotntpoff and @indntpoff modifier can be used for .long 20061 and .quad. The symbol is added to the static TLS block and 20062 the negated offset to the symbol in the static TLS block is 20063 added to the GOT. For @gotntpoff the symbol term is replaced 20064 with the offset from the start of the GOT to the GOT slot, for 20065 @indntpoff the symbol term is replaced with the address of the 20066 GOT slot. 20067 '@dtpoff' 20068 The @dtpoff modifier can be used for .long and .quad. The 20069 symbol term is replaced with the offset of the symbol relative 20070 to the start of the TLS block it is contained in. 20071 '@ntpoff' 20072 The @ntpoff modifier can be used for .long and .quad. The 20073 symbol term is replaced with the offset of the symbol relative 20074 to the TCB pointer. 20075 20076 For more information about the thread local storage modifiers see 20077 the ELF extension documentation 'ELF Handling For Thread-Local 20078 Storage'. 20079 20080'.ltorg' 20081 This directive causes the current contents of the literal pool to 20082 be dumped to the current location (*note s390 Literal Pool 20083 Entries::). 20084 20085'.machine STRING[+EXTENSION]...' 20086 20087 This directive allows changing the machine for which code is 20088 generated. 'string' may be any of the '-march=' selection options, 20089 or 'push', or 'pop'. '.machine push' saves the currently selected 20090 cpu, which may be restored with '.machine pop'. Be aware that the 20091 cpu string has to be put into double quotes in case it contains 20092 characters not appropriate for identifiers. So you have to write 20093 '"z9-109"' instead of just 'z9-109'. Extensions can be specified 20094 after the cpu name, separated by plus characters. Valid extensions 20095 are: 'htm', 'nohtm', 'vx', 'novx'. They extend the basic 20096 instruction set with features from a higher cpu level, or remove 20097 support for a feature from the given cpu level. 20098 20099 Example: 'z13+nohtm' allows all instructions of the z13 cpu except 20100 instructions from the HTM facility. 20101 20102'.machinemode string' 20103 This directive allows one to change the architecture mode for which 20104 code is being generated. 'string' may be 'esa', 'zarch', 20105 'zarch_nohighgprs', 'push', or 'pop'. '.machinemode 20106 zarch_nohighgprs' can be used to prevent the 'highgprs' flag from 20107 being set in the ELF header of the output file. This is useful in 20108 situations where the code is gated with a runtime check which makes 20109 sure that the code is only executed on kernels providing the 20110 'highgprs' feature. '.machinemode push' saves the currently 20111 selected mode, which may be restored with '.machinemode pop'. 20112 20113 20114File: as.info, Node: s390 Floating Point, Prev: s390 Directives, Up: S/390-Dependent 20115 201169.41.5 Floating Point 20117--------------------- 20118 20119The assembler recognizes both the IEEE floating-point instruction and 20120the hexadecimal floating-point instructions. The floating-point 20121constructors '.float', '.single', and '.double' always emit the IEEE 20122format. To assemble hexadecimal floating-point constants the '.long' 20123and '.quad' directives must be used. 20124 20125 20126File: as.info, Node: SCORE-Dependent, Next: SH-Dependent, Prev: S/390-Dependent, Up: Machine Dependencies 20127 201289.42 SCORE Dependent Features 20129============================= 20130 20131* Menu: 20132 20133* SCORE-Opts:: Assembler options 20134* SCORE-Pseudo:: SCORE Assembler Directives 20135* SCORE-Syntax:: Syntax 20136 20137 20138File: as.info, Node: SCORE-Opts, Next: SCORE-Pseudo, Up: SCORE-Dependent 20139 201409.42.1 Options 20141-------------- 20142 20143The following table lists all available SCORE options. 20144 20145'-G NUM' 20146 This option sets the largest size of an object that can be 20147 referenced implicitly with the 'gp' register. The default value is 20148 8. 20149 20150'-EB' 20151 Assemble code for a big-endian cpu 20152 20153'-EL' 20154 Assemble code for a little-endian cpu 20155 20156'-FIXDD' 20157 Assemble code for fix data dependency 20158 20159'-NWARN' 20160 Assemble code for no warning message for fix data dependency 20161 20162'-SCORE5' 20163 Assemble code for target is SCORE5 20164 20165'-SCORE5U' 20166 Assemble code for target is SCORE5U 20167 20168'-SCORE7' 20169 Assemble code for target is SCORE7, this is default setting 20170 20171'-SCORE3' 20172 Assemble code for target is SCORE3 20173 20174'-march=score7' 20175 Assemble code for target is SCORE7, this is default setting 20176 20177'-march=score3' 20178 Assemble code for target is SCORE3 20179 20180'-USE_R1' 20181 Assemble code for no warning message when using temp register r1 20182 20183'-KPIC' 20184 Generate code for PIC. This option tells the assembler to generate 20185 score position-independent macro expansions. It also tells the 20186 assembler to mark the output file as PIC. 20187 20188'-O0' 20189 Assembler will not perform any optimizations 20190 20191'-V' 20192 Sunplus release version 20193 20194 20195File: as.info, Node: SCORE-Pseudo, Next: SCORE-Syntax, Prev: SCORE-Opts, Up: SCORE-Dependent 20196 201979.42.2 SCORE Assembler Directives 20198--------------------------------- 20199 20200A number of assembler directives are available for SCORE. The following 20201table is far from complete. 20202 20203'.set nwarn' 20204 Let the assembler not to generate warnings if the source machine 20205 language instructions happen data dependency. 20206 20207'.set fixdd' 20208 Let the assembler to insert bubbles (32 bit nop instruction / 16 20209 bit nop! Instruction) if the source machine language instructions 20210 happen data dependency. 20211 20212'.set nofixdd' 20213 Let the assembler to generate warnings if the source machine 20214 language instructions happen data dependency. (Default) 20215 20216'.set r1' 20217 Let the assembler not to generate warnings if the source program 20218 uses r1. allow user to use r1 20219 20220'set nor1' 20221 Let the assembler to generate warnings if the source program uses 20222 r1. (Default) 20223 20224'.sdata' 20225 Tell the assembler to add subsequent data into the sdata section 20226 20227'.rdata' 20228 Tell the assembler to add subsequent data into the rdata section 20229 20230'.frame "frame-register", "offset", "return-pc-register"' 20231 Describe a stack frame. "frame-register" is the frame register, 20232 "offset" is the distance from the frame register to the virtual 20233 frame pointer, "return-pc-register" is the return program register. 20234 You must use ".ent" before ".frame" and only one ".frame" can be 20235 used per ".ent". 20236 20237'.mask "bitmask", "frameoffset"' 20238 Indicate which of the integer registers are saved in the current 20239 function's stack frame, this is for the debugger to explain the 20240 frame chain. 20241 20242'.ent "proc-name"' 20243 Set the beginning of the procedure "proc_name". Use this directive 20244 when you want to generate information for the debugger. 20245 20246'.end proc-name' 20247 Set the end of a procedure. Use this directive to generate 20248 information for the debugger. 20249 20250'.bss' 20251 Switch the destination of following statements into the bss 20252 section, which is used for data that is uninitialized anywhere. 20253 20254 20255File: as.info, Node: SCORE-Syntax, Prev: SCORE-Pseudo, Up: SCORE-Dependent 20256 202579.42.3 SCORE Syntax 20258------------------- 20259 20260* Menu: 20261 20262* SCORE-Chars:: Special Characters 20263 20264 20265File: as.info, Node: SCORE-Chars, Up: SCORE-Syntax 20266 202679.42.3.1 Special Characters 20268........................... 20269 20270The presence of a '#' appearing anywhere on a line indicates the start 20271of a comment that extends to the end of that line. 20272 20273 If a '#' appears as the first character of a line then the whole line 20274is treated as a comment, but in this case the line can also be a logical 20275line number directive (*note Comments::) or a preprocessor control 20276command (*note Preprocessing::). 20277 20278 The ';' character can be used to separate statements on the same 20279line. 20280 20281 20282File: as.info, Node: SH-Dependent, Next: Sparc-Dependent, Prev: SCORE-Dependent, Up: Machine Dependencies 20283 202849.43 Renesas / SuperH SH Dependent Features 20285=========================================== 20286 20287* Menu: 20288 20289* SH Options:: Options 20290* SH Syntax:: Syntax 20291* SH Floating Point:: Floating Point 20292* SH Directives:: SH Machine Directives 20293* SH Opcodes:: Opcodes 20294 20295 20296File: as.info, Node: SH Options, Next: SH Syntax, Up: SH-Dependent 20297 202989.43.1 Options 20299-------------- 20300 20301'as' has following command-line options for the Renesas (formerly 20302Hitachi) / SuperH SH family. 20303 20304'--little' 20305 Generate little endian code. 20306 20307'--big' 20308 Generate big endian code. 20309 20310'--relax' 20311 Alter jump instructions for long displacements. 20312 20313'--small' 20314 Align sections to 4 byte boundaries, not 16. 20315 20316'--dsp' 20317 Enable sh-dsp insns, and disable sh3e / sh4 insns. 20318 20319'--renesas' 20320 Disable optimization with section symbol for compatibility with 20321 Renesas assembler. 20322 20323'--allow-reg-prefix' 20324 Allow '$' as a register name prefix. 20325 20326'--fdpic' 20327 Generate an FDPIC object file. 20328 20329'--isa=sh4 | sh4a' 20330 Specify the sh4 or sh4a instruction set. 20331'--isa=dsp' 20332 Enable sh-dsp insns, and disable sh3e / sh4 insns. 20333'--isa=fp' 20334 Enable sh2e, sh3e, sh4, and sh4a insn sets. 20335'--isa=all' 20336 Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets. 20337 20338'-h-tick-hex' 20339 Support H'00 style hex constants in addition to 0x00 style. 20340 20341 20342File: as.info, Node: SH Syntax, Next: SH Floating Point, Prev: SH Options, Up: SH-Dependent 20343 203449.43.2 Syntax 20345------------- 20346 20347* Menu: 20348 20349* SH-Chars:: Special Characters 20350* SH-Regs:: Register Names 20351* SH-Addressing:: Addressing Modes 20352 20353 20354File: as.info, Node: SH-Chars, Next: SH-Regs, Up: SH Syntax 20355 203569.43.2.1 Special Characters 20357........................... 20358 20359'!' is the line comment character. 20360 20361 You can use ';' instead of a newline to separate statements. 20362 20363 If a '#' appears as the first character of a line then the whole line 20364is treated as a comment, but in this case the line could also be a 20365logical line number directive (*note Comments::) or a preprocessor 20366control command (*note Preprocessing::). 20367 20368 Since '$' has no special meaning, you may use it in symbol names. 20369 20370 20371File: as.info, Node: SH-Regs, Next: SH-Addressing, Prev: SH-Chars, Up: SH Syntax 20372 203739.43.2.2 Register Names 20374....................... 20375 20376You can use the predefined symbols 'r0', 'r1', 'r2', 'r3', 'r4', 'r5', 20377'r6', 'r7', 'r8', 'r9', 'r10', 'r11', 'r12', 'r13', 'r14', and 'r15' to 20378refer to the SH registers. 20379 20380 The SH also has these control registers: 20381 20382'pr' 20383 procedure register (holds return address) 20384 20385'pc' 20386 program counter 20387 20388'mach' 20389'macl' 20390 high and low multiply accumulator registers 20391 20392'sr' 20393 status register 20394 20395'gbr' 20396 global base register 20397 20398'vbr' 20399 vector base register (for interrupt vectors) 20400 20401 20402File: as.info, Node: SH-Addressing, Prev: SH-Regs, Up: SH Syntax 20403 204049.43.2.3 Addressing Modes 20405......................... 20406 20407'as' understands the following addressing modes for the SH. 'RN' in the 20408following refers to any of the numbered registers, but _not_ the control 20409registers. 20410 20411'RN' 20412 Register direct 20413 20414'@RN' 20415 Register indirect 20416 20417'@-RN' 20418 Register indirect with pre-decrement 20419 20420'@RN+' 20421 Register indirect with post-increment 20422 20423'@(DISP, RN)' 20424 Register indirect with displacement 20425 20426'@(R0, RN)' 20427 Register indexed 20428 20429'@(DISP, GBR)' 20430 'GBR' offset 20431 20432'@(R0, GBR)' 20433 GBR indexed 20434 20435'ADDR' 20436'@(DISP, PC)' 20437 PC relative address (for branch or for addressing memory). The 20438 'as' implementation allows you to use the simpler form ADDR 20439 anywhere a PC relative address is called for; the alternate form is 20440 supported for compatibility with other assemblers. 20441 20442'#IMM' 20443 Immediate data 20444 20445 20446File: as.info, Node: SH Floating Point, Next: SH Directives, Prev: SH Syntax, Up: SH-Dependent 20447 204489.43.3 Floating Point 20449--------------------- 20450 20451SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other 20452SH groups can use '.float' directive to generate IEEE floating-point 20453numbers. 20454 20455 SH2E and SH3E support single-precision floating point calculations as 20456well as entirely PCAPI compatible emulation of double-precision floating 20457point calculations. SH2E and SH3E instructions are a subset of the 20458floating point calculations conforming to the IEEE754 standard. 20459 20460 In addition to single-precision and double-precision floating-point 20461operation capability, the on-chip FPU of SH4 has a 128-bit graphic 20462engine that enables 32-bit floating-point data to be processed 128 bits 20463at a time. It also supports 4 * 4 array operations and inner product 20464operations. Also, a superscalar architecture is employed that enables 20465simultaneous execution of two instructions (including FPU instructions), 20466providing performance of up to twice that of conventional architectures 20467at the same frequency. 20468 20469 20470File: as.info, Node: SH Directives, Next: SH Opcodes, Prev: SH Floating Point, Up: SH-Dependent 20471 204729.43.4 SH Machine Directives 20473---------------------------- 20474 20475'uaword' 20476'ualong' 20477'uaquad' 20478 'as' will issue a warning when a misaligned '.word', '.long', or 20479 '.quad' directive is used. You may use '.uaword', '.ualong', or 20480 '.uaquad' to indicate that the value is intentionally misaligned. 20481 20482 20483File: as.info, Node: SH Opcodes, Prev: SH Directives, Up: SH-Dependent 20484 204859.43.5 Opcodes 20486-------------- 20487 20488For detailed information on the SH machine instruction set, see 20489'SH-Microcomputer User's Manual' (Renesas) or 'SH-4 32-bit CPU Core 20490Architecture' (SuperH) and 'SuperH (SH) 64-Bit RISC Series' (SuperH). 20491 20492 'as' implements all the standard SH opcodes. No additional 20493pseudo-instructions are needed on this family. Note, however, that 20494because 'as' supports a simpler form of PC-relative addressing, you may 20495simply write (for example) 20496 20497 mov.l bar,r0 20498 20499where other assemblers might require an explicit displacement to 'bar' 20500from the program counter: 20501 20502 mov.l @(DISP, PC) 20503 20504 Here is a summary of SH opcodes: 20505 20506 Legend: 20507 Rn a numbered register 20508 Rm another numbered register 20509 #imm immediate data 20510 disp displacement 20511 disp8 8-bit displacement 20512 disp12 12-bit displacement 20513 20514 add #imm,Rn lds.l @Rn+,PR 20515 add Rm,Rn mac.w @Rm+,@Rn+ 20516 addc Rm,Rn mov #imm,Rn 20517 addv Rm,Rn mov Rm,Rn 20518 and #imm,R0 mov.b Rm,@(R0,Rn) 20519 and Rm,Rn mov.b Rm,@-Rn 20520 and.b #imm,@(R0,GBR) mov.b Rm,@Rn 20521 bf disp8 mov.b @(disp,Rm),R0 20522 bra disp12 mov.b @(disp,GBR),R0 20523 bsr disp12 mov.b @(R0,Rm),Rn 20524 bt disp8 mov.b @Rm+,Rn 20525 clrmac mov.b @Rm,Rn 20526 clrt mov.b R0,@(disp,Rm) 20527 cmp/eq #imm,R0 mov.b R0,@(disp,GBR) 20528 cmp/eq Rm,Rn mov.l Rm,@(disp,Rn) 20529 cmp/ge Rm,Rn mov.l Rm,@(R0,Rn) 20530 cmp/gt Rm,Rn mov.l Rm,@-Rn 20531 cmp/hi Rm,Rn mov.l Rm,@Rn 20532 cmp/hs Rm,Rn mov.l @(disp,Rn),Rm 20533 cmp/pl Rn mov.l @(disp,GBR),R0 20534 cmp/pz Rn mov.l @(disp,PC),Rn 20535 cmp/str Rm,Rn mov.l @(R0,Rm),Rn 20536 div0s Rm,Rn mov.l @Rm+,Rn 20537 div0u mov.l @Rm,Rn 20538 div1 Rm,Rn mov.l R0,@(disp,GBR) 20539 exts.b Rm,Rn mov.w Rm,@(R0,Rn) 20540 exts.w Rm,Rn mov.w Rm,@-Rn 20541 extu.b Rm,Rn mov.w Rm,@Rn 20542 extu.w Rm,Rn mov.w @(disp,Rm),R0 20543 jmp @Rn mov.w @(disp,GBR),R0 20544 jsr @Rn mov.w @(disp,PC),Rn 20545 ldc Rn,GBR mov.w @(R0,Rm),Rn 20546 ldc Rn,SR mov.w @Rm+,Rn 20547 ldc Rn,VBR mov.w @Rm,Rn 20548 ldc.l @Rn+,GBR mov.w R0,@(disp,Rm) 20549 ldc.l @Rn+,SR mov.w R0,@(disp,GBR) 20550 ldc.l @Rn+,VBR mova @(disp,PC),R0 20551 lds Rn,MACH movt Rn 20552 lds Rn,MACL muls Rm,Rn 20553 lds Rn,PR mulu Rm,Rn 20554 lds.l @Rn+,MACH neg Rm,Rn 20555 lds.l @Rn+,MACL negc Rm,Rn 20556 nop stc VBR,Rn 20557 not Rm,Rn stc.l GBR,@-Rn 20558 or #imm,R0 stc.l SR,@-Rn 20559 or Rm,Rn stc.l VBR,@-Rn 20560 or.b #imm,@(R0,GBR) sts MACH,Rn 20561 rotcl Rn sts MACL,Rn 20562 rotcr Rn sts PR,Rn 20563 rotl Rn sts.l MACH,@-Rn 20564 rotr Rn sts.l MACL,@-Rn 20565 rte sts.l PR,@-Rn 20566 rts sub Rm,Rn 20567 sett subc Rm,Rn 20568 shal Rn subv Rm,Rn 20569 shar Rn swap.b Rm,Rn 20570 shll Rn swap.w Rm,Rn 20571 shll16 Rn tas.b @Rn 20572 shll2 Rn trapa #imm 20573 shll8 Rn tst #imm,R0 20574 shlr Rn tst Rm,Rn 20575 shlr16 Rn tst.b #imm,@(R0,GBR) 20576 shlr2 Rn xor #imm,R0 20577 shlr8 Rn xor Rm,Rn 20578 sleep xor.b #imm,@(R0,GBR) 20579 stc GBR,Rn xtrct Rm,Rn 20580 stc SR,Rn 20581 20582 20583File: as.info, Node: Sparc-Dependent, Next: TIC54X-Dependent, Prev: SH-Dependent, Up: Machine Dependencies 20584 205859.44 SPARC Dependent Features 20586============================= 20587 20588* Menu: 20589 20590* Sparc-Opts:: Options 20591* Sparc-Aligned-Data:: Option to enforce aligned data 20592* Sparc-Syntax:: Syntax 20593* Sparc-Float:: Floating Point 20594* Sparc-Directives:: Sparc Machine Directives 20595 20596 20597File: as.info, Node: Sparc-Opts, Next: Sparc-Aligned-Data, Up: Sparc-Dependent 20598 205999.44.1 Options 20600-------------- 20601 20602The SPARC chip family includes several successive versions, using the 20603same core instruction set, but including a few additional instructions 20604at each version. There are exceptions to this however. For details on 20605what instructions each variant supports, please see the chip's 20606architecture reference manual. 20607 20608 By default, 'as' assumes the core instruction set (SPARC v6), but 20609"bumps" the architecture level as needed: it switches to successively 20610higher architectures as it encounters instructions that only exist in 20611the higher levels. 20612 20613 If not configured for SPARC v9 ('sparc64-*-*') GAS will not bump past 20614sparclite by default, an option must be passed to enable the v9 20615instructions. 20616 20617 GAS treats sparclite as being compatible with v8, unless an 20618architecture is explicitly requested. SPARC v9 is always incompatible 20619with sparclite. 20620 20621'-Av6 | -Av7 | -Av8 | -Aleon | -Asparclet | -Asparclite' 20622'-Av8plus | -Av8plusa | -Av8plusb | -Av8plusc | -Av8plusd |' 20623'-Av8plusv | -Av8plusm | -Av8plusm8' 20624'-Av9 | -Av9a | -Av9b | -Av9c | -Av9d | -Av9e | -Av9v | -Av9m | -Av9m8' 20625'-Asparc | -Asparcvis | -Asparcvis2 | -Asparcfmaf | -Asparcima' 20626'-Asparcvis3 | -Asparcvis3r | -Asparc5 | -Asparc6' 20627 Use one of the '-A' options to select one of the SPARC 20628 architectures explicitly. If you select an architecture 20629 explicitly, 'as' reports a fatal error if it encounters an 20630 instruction or feature requiring an incompatible or higher level. 20631 20632 '-Av8plus', '-Av8plusa', '-Av8plusb', '-Av8plusc', '-Av8plusd', and 20633 '-Av8plusv' select a 32 bit environment. 20634 20635 '-Av9', '-Av9a', '-Av9b', '-Av9c', '-Av9d', '-Av9e', '-Av9v' and 20636 '-Av9m' select a 64 bit environment and are not available unless 20637 GAS is explicitly configured with 64 bit environment support. 20638 20639 '-Av8plusa' and '-Av9a' enable the SPARC V9 instruction set with 20640 UltraSPARC VIS 1.0 extensions. 20641 20642 '-Av8plusb' and '-Av9b' enable the UltraSPARC VIS 2.0 instructions, 20643 as well as the instructions enabled by '-Av8plusa' and '-Av9a'. 20644 20645 '-Av8plusc' and '-Av9c' enable the UltraSPARC Niagara instructions, 20646 as well as the instructions enabled by '-Av8plusb' and '-Av9b'. 20647 20648 '-Av8plusd' and '-Av9d' enable the floating point fused 20649 multiply-add, VIS 3.0, and HPC extension instructions, as well as 20650 the instructions enabled by '-Av8plusc' and '-Av9c'. 20651 20652 '-Av8pluse' and '-Av9e' enable the cryptographic instructions, as 20653 well as the instructions enabled by '-Av8plusd' and '-Av9d'. 20654 20655 '-Av8plusv' and '-Av9v' enable floating point unfused multiply-add, 20656 and integer multiply-add, as well as the instructions enabled by 20657 '-Av8pluse' and '-Av9e'. 20658 20659 '-Av8plusm' and '-Av9m' enable the VIS 4.0, subtract extended, 20660 xmpmul, xmontmul and xmontsqr instructions, as well as the 20661 instructions enabled by '-Av8plusv' and '-Av9v'. 20662 20663 '-Av8plusm8' and '-Av9m8' enable the instructions introduced in the 20664 Oracle SPARC Architecture 2017 and the M8 processor, as well as the 20665 instructions enabled by '-Av8plusm' and '-Av9m'. 20666 20667 '-Asparc' specifies a v9 environment. It is equivalent to '-Av9' 20668 if the word size is 64-bit, and '-Av8plus' otherwise. 20669 20670 '-Asparcvis' specifies a v9a environment. It is equivalent to 20671 '-Av9a' if the word size is 64-bit, and '-Av8plusa' otherwise. 20672 20673 '-Asparcvis2' specifies a v9b environment. It is equivalent to 20674 '-Av9b' if the word size is 64-bit, and '-Av8plusb' otherwise. 20675 20676 '-Asparcfmaf' specifies a v9b environment with the floating point 20677 fused multiply-add instructions enabled. 20678 20679 '-Asparcima' specifies a v9b environment with the integer 20680 multiply-add instructions enabled. 20681 20682 '-Asparcvis3' specifies a v9b environment with the VIS 3.0, HPC , 20683 and floating point fused multiply-add instructions enabled. 20684 20685 '-Asparcvis3r' specifies a v9b environment with the VIS 3.0, HPC, 20686 and floating point unfused multiply-add instructions enabled. 20687 20688 '-Asparc5' is equivalent to '-Av9m'. 20689 20690 '-Asparc6' is equivalent to '-Av9m8'. 20691 20692'-xarch=v8plus | -xarch=v8plusa | -xarch=v8plusb | -xarch=v8plusc' 20693'-xarch=v8plusd | -xarch=v8plusv | -xarch=v8plusm |' 20694'-xarch=v8plusm8 | -xarch=v9 | -xarch=v9a | -xarch=v9b' 20695'-xarch=v9c | -xarch=v9d | -xarch=v9e | -xarch=v9v' 20696'-xarch=v9m | -xarch=v9m8' 20697'-xarch=sparc | -xarch=sparcvis | -xarch=sparcvis2' 20698'-xarch=sparcfmaf | -xarch=sparcima | -xarch=sparcvis3' 20699'-xarch=sparcvis3r | -xarch=sparc5 | -xarch=sparc6' 20700 For compatibility with the SunOS v9 assembler. These options are 20701 equivalent to -Av8plus, -Av8plusa, -Av8plusb, -Av8plusc, -Av8plusd, 20702 -Av8plusv, -Av8plusm, -Av8plusm8, -Av9, -Av9a, -Av9b, -Av9c, -Av9d, 20703 -Av9e, -Av9v, -Av9m, -Av9m8, -Asparc, -Asparcvis, -Asparcvis2, 20704 -Asparcfmaf, -Asparcima, -Asparcvis3, -Asparcvis3r, -Asparc5 and 20705 -Asparc6 respectively. 20706 20707'-bump' 20708 Warn whenever it is necessary to switch to another level. If an 20709 architecture level is explicitly requested, GAS will not issue 20710 warnings until that level is reached, and will then bump the level 20711 as required (except between incompatible levels). 20712 20713'-32 | -64' 20714 Select the word size, either 32 bits or 64 bits. These options are 20715 only available with the ELF object file format, and require that 20716 the necessary BFD support has been included. 20717 20718'--dcti-couples-detect' 20719 Warn if a DCTI (delayed control transfer instruction) couple is 20720 found when generating code for a variant of the SPARC architecture 20721 in which the execution of the couple is unpredictable, or very 20722 slow. This is disabled by default. 20723 20724 20725File: as.info, Node: Sparc-Aligned-Data, Next: Sparc-Syntax, Prev: Sparc-Opts, Up: Sparc-Dependent 20726 207279.44.2 Enforcing aligned data 20728----------------------------- 20729 20730SPARC GAS normally permits data to be misaligned. For example, it 20731permits the '.long' pseudo-op to be used on a byte boundary. However, 20732the native SunOS assemblers issue an error when they see misaligned 20733data. 20734 20735 You can use the '--enforce-aligned-data' option to make SPARC GAS 20736also issue an error about misaligned data, just as the SunOS assemblers 20737do. 20738 20739 The '--enforce-aligned-data' option is not the default because gcc 20740issues misaligned data pseudo-ops when it initializes certain packed 20741data structures (structures defined using the 'packed' attribute). You 20742may have to assemble with GAS in order to initialize packed data 20743structures in your own code. 20744 20745 20746File: as.info, Node: Sparc-Syntax, Next: Sparc-Float, Prev: Sparc-Aligned-Data, Up: Sparc-Dependent 20747 207489.44.3 Sparc Syntax 20749------------------- 20750 20751The assembler syntax closely follows The Sparc Architecture Manual, 20752versions 8 and 9, as well as most extensions defined by Sun for their 20753UltraSPARC and Niagara line of processors. 20754 20755* Menu: 20756 20757* Sparc-Chars:: Special Characters 20758* Sparc-Regs:: Register Names 20759* Sparc-Constants:: Constant Names 20760* Sparc-Relocs:: Relocations 20761* Sparc-Size-Translations:: Size Translations 20762 20763 20764File: as.info, Node: Sparc-Chars, Next: Sparc-Regs, Up: Sparc-Syntax 20765 207669.44.3.1 Special Characters 20767........................... 20768 20769A '!' character appearing anywhere on a line indicates the start of a 20770comment that extends to the end of that line. 20771 20772 If a '#' appears as the first character of a line then the whole line 20773is treated as a comment, but in this case the line could also be a 20774logical line number directive (*note Comments::) or a preprocessor 20775control command (*note Preprocessing::). 20776 20777 ';' can be used instead of a newline to separate statements. 20778 20779 20780File: as.info, Node: Sparc-Regs, Next: Sparc-Constants, Prev: Sparc-Chars, Up: Sparc-Syntax 20781 207829.44.3.2 Register Names 20783....................... 20784 20785The Sparc integer register file is broken down into global, outgoing, 20786local, and incoming. 20787 20788 * The 8 global registers are referred to as '%gN'. 20789 20790 * The 8 outgoing registers are referred to as '%oN'. 20791 20792 * The 8 local registers are referred to as '%lN'. 20793 20794 * The 8 incoming registers are referred to as '%iN'. 20795 20796 * The frame pointer register '%i6' can be referenced using the alias 20797 '%fp'. 20798 20799 * The stack pointer register '%o6' can be referenced using the alias 20800 '%sp'. 20801 20802 Floating point registers are simply referred to as '%fN'. When 20803assembling for pre-V9, only 32 floating point registers are available. 20804For V9 and later there are 64, but there are restrictions when 20805referencing the upper 32 registers. They can only be accessed as double 20806or quad, and thus only even or quad numbered accesses are allowed. For 20807example, '%f34' is a legal floating point register, but '%f35' is not. 20808 20809 Floating point registers accessed as double can also be referred 20810using the '%dN' notation, where N is even. Similarly, floating point 20811registers accessed as quad can be referred using the '%qN' notation, 20812where N is a multiple of 4. For example, '%f4' can be denoted as both 20813'%d4' and '%q4'. On the other hand, '%f2' can be denoted as '%d2' but 20814not as '%q2'. 20815 20816 Certain V9 instructions allow access to ancillary state registers. 20817Most simply they can be referred to as '%asrN' where N can be from 16 to 2081831. However, there are some aliases defined to reference ASR registers 20819defined for various UltraSPARC processors: 20820 20821 * The tick compare register is referred to as '%tick_cmpr'. 20822 20823 * The system tick register is referred to as '%stick'. An alias, 20824 '%sys_tick', exists but is deprecated and should not be used by new 20825 software. 20826 20827 * The system tick compare register is referred to as '%stick_cmpr'. 20828 An alias, '%sys_tick_cmpr', exists but is deprecated and should not 20829 be used by new software. 20830 20831 * The software interrupt register is referred to as '%softint'. 20832 20833 * The set software interrupt register is referred to as 20834 '%set_softint'. The mnemonic '%softint_set' is provided as an 20835 alias. 20836 20837 * The clear software interrupt register is referred to as 20838 '%clear_softint'. The mnemonic '%softint_clear' is provided as an 20839 alias. 20840 20841 * The performance instrumentation counters register is referred to as 20842 '%pic'. 20843 20844 * The performance control register is referred to as '%pcr'. 20845 20846 * The graphics status register is referred to as '%gsr'. 20847 20848 * The V9 dispatch control register is referred to as '%dcr'. 20849 20850 Various V9 branch and conditional move instructions allow 20851specification of which set of integer condition codes to test. These 20852are referred to as '%xcc' and '%icc'. 20853 20854 Additionally, GAS supports the so-called "natural" condition codes; 20855these are referred to as '%ncc' and reference to '%icc' if the word size 20856is 32, '%xcc' if the word size is 64. 20857 20858 In V9, there are 4 sets of floating point condition codes which are 20859referred to as '%fccN'. 20860 20861 Several special privileged and non-privileged registers exist: 20862 20863 * The V9 address space identifier register is referred to as '%asi'. 20864 20865 * The V9 restorable windows register is referred to as '%canrestore'. 20866 20867 * The V9 savable windows register is referred to as '%cansave'. 20868 20869 * The V9 clean windows register is referred to as '%cleanwin'. 20870 20871 * The V9 current window pointer register is referred to as '%cwp'. 20872 20873 * The floating-point queue register is referred to as '%fq'. 20874 20875 * The V8 co-processor queue register is referred to as '%cq'. 20876 20877 * The floating point status register is referred to as '%fsr'. 20878 20879 * The other windows register is referred to as '%otherwin'. 20880 20881 * The V9 program counter register is referred to as '%pc'. 20882 20883 * The V9 next program counter register is referred to as '%npc'. 20884 20885 * The V9 processor interrupt level register is referred to as '%pil'. 20886 20887 * The V9 processor state register is referred to as '%pstate'. 20888 20889 * The trap base address register is referred to as '%tba'. 20890 20891 * The V9 tick register is referred to as '%tick'. 20892 20893 * The V9 trap level is referred to as '%tl'. 20894 20895 * The V9 trap program counter is referred to as '%tpc'. 20896 20897 * The V9 trap next program counter is referred to as '%tnpc'. 20898 20899 * The V9 trap state is referred to as '%tstate'. 20900 20901 * The V9 trap type is referred to as '%tt'. 20902 20903 * The V9 condition codes is referred to as '%ccr'. 20904 20905 * The V9 floating-point registers state is referred to as '%fprs'. 20906 20907 * The V9 version register is referred to as '%ver'. 20908 20909 * The V9 window state register is referred to as '%wstate'. 20910 20911 * The Y register is referred to as '%y'. 20912 20913 * The V8 window invalid mask register is referred to as '%wim'. 20914 20915 * The V8 processor state register is referred to as '%psr'. 20916 20917 * The V9 global register level register is referred to as '%gl'. 20918 20919 Several special register names exist for hypervisor mode code: 20920 20921 * The hyperprivileged processor state register is referred to as 20922 '%hpstate'. 20923 20924 * The hyperprivileged trap state register is referred to as 20925 '%htstate'. 20926 20927 * The hyperprivileged interrupt pending register is referred to as 20928 '%hintp'. 20929 20930 * The hyperprivileged trap base address register is referred to as 20931 '%htba'. 20932 20933 * The hyperprivileged implementation version register is referred to 20934 as '%hver'. 20935 20936 * The hyperprivileged system tick offset register is referred to as 20937 '%hstick_offset'. Note that there is no '%hstick' register, the 20938 normal '%stick' is used. 20939 20940 * The hyperprivileged system tick enable register is referred to as 20941 '%hstick_enable'. 20942 20943 * The hyperprivileged system tick compare register is referred to as 20944 '%hstick_cmpr'. 20945 20946 20947File: as.info, Node: Sparc-Constants, Next: Sparc-Relocs, Prev: Sparc-Regs, Up: Sparc-Syntax 20948 209499.44.3.3 Constants 20950.................. 20951 20952Several Sparc instructions take an immediate operand field for which 20953mnemonic names exist. Two such examples are 'membar' and 'prefetch'. 20954Another example are the set of V9 memory access instruction that allow 20955specification of an address space identifier. 20956 20957 The 'membar' instruction specifies a memory barrier that is the 20958defined by the operand which is a bitmask. The supported mask mnemonics 20959are: 20960 20961 * '#Sync' requests that all operations (including nonmemory reference 20962 operations) appearing prior to the 'membar' must have been 20963 performed and the effects of any exceptions become visible before 20964 any instructions after the 'membar' may be initiated. This 20965 corresponds to 'membar' cmask field bit 2. 20966 20967 * '#MemIssue' requests that all memory reference operations appearing 20968 prior to the 'membar' must have been performed before any memory 20969 operation after the 'membar' may be initiated. This corresponds to 20970 'membar' cmask field bit 1. 20971 20972 * '#Lookaside' requests that a store appearing prior to the 'membar' 20973 must complete before any load following the 'membar' referencing 20974 the same address can be initiated. This corresponds to 'membar' 20975 cmask field bit 0. 20976 20977 * '#StoreStore' defines that the effects of all stores appearing 20978 prior to the 'membar' instruction must be visible to all processors 20979 before the effect of any stores following the 'membar'. Equivalent 20980 to the deprecated 'stbar' instruction. This corresponds to 20981 'membar' mmask field bit 3. 20982 20983 * '#LoadStore' defines all loads appearing prior to the 'membar' 20984 instruction must have been performed before the effect of any 20985 stores following the 'membar' is visible to any other processor. 20986 This corresponds to 'membar' mmask field bit 2. 20987 20988 * '#StoreLoad' defines that the effects of all stores appearing prior 20989 to the 'membar' instruction must be visible to all processors 20990 before loads following the 'membar' may be performed. This 20991 corresponds to 'membar' mmask field bit 1. 20992 20993 * '#LoadLoad' defines that all loads appearing prior to the 'membar' 20994 instruction must have been performed before any loads following the 20995 'membar' may be performed. This corresponds to 'membar' mmask 20996 field bit 0. 20997 20998 These values can be ored together, for example: 20999 21000 membar #Sync 21001 membar #StoreLoad | #LoadLoad 21002 membar #StoreLoad | #StoreStore 21003 21004 The 'prefetch' and 'prefetcha' instructions take a prefetch function 21005code. The following prefetch function code constant mnemonics are 21006available: 21007 21008 * '#n_reads' requests a prefetch for several reads, and corresponds 21009 to a prefetch function code of 0. 21010 21011 '#one_read' requests a prefetch for one read, and corresponds to a 21012 prefetch function code of 1. 21013 21014 '#n_writes' requests a prefetch for several writes (and possibly 21015 reads), and corresponds to a prefetch function code of 2. 21016 21017 '#one_write' requests a prefetch for one write, and corresponds to 21018 a prefetch function code of 3. 21019 21020 '#page' requests a prefetch page, and corresponds to a prefetch 21021 function code of 4. 21022 21023 '#invalidate' requests a prefetch invalidate, and corresponds to a 21024 prefetch function code of 16. 21025 21026 '#unified' requests a prefetch to the nearest unified cache, and 21027 corresponds to a prefetch function code of 17. 21028 21029 '#n_reads_strong' requests a strong prefetch for several reads, and 21030 corresponds to a prefetch function code of 20. 21031 21032 '#one_read_strong' requests a strong prefetch for one read, and 21033 corresponds to a prefetch function code of 21. 21034 21035 '#n_writes_strong' requests a strong prefetch for several writes, 21036 and corresponds to a prefetch function code of 22. 21037 21038 '#one_write_strong' requests a strong prefetch for one write, and 21039 corresponds to a prefetch function code of 23. 21040 21041 Onle one prefetch code may be specified. Here are some examples: 21042 21043 prefetch [%l0 + %l2], #one_read 21044 prefetch [%g2 + 8], #n_writes 21045 prefetcha [%g1] 0x8, #unified 21046 prefetcha [%o0 + 0x10] %asi, #n_reads 21047 21048 The actual behavior of a given prefetch function code is processor 21049 specific. If a processor does not implement a given prefetch 21050 function code, it will treat the prefetch instruction as a nop. 21051 21052 For instructions that accept an immediate address space identifier, 21053 'as' provides many mnemonics corresponding to V9 defined as well as 21054 UltraSPARC and Niagara extended values. For example, '#ASI_P' and 21055 '#ASI_BLK_INIT_QUAD_LDD_AIUS'. See the V9 and processor specific 21056 manuals for details. 21057 21058 21059File: as.info, Node: Sparc-Relocs, Next: Sparc-Size-Translations, Prev: Sparc-Constants, Up: Sparc-Syntax 21060 210619.44.3.4 Relocations 21062.................... 21063 21064ELF relocations are available as defined in the 32-bit and 64-bit Sparc 21065ELF specifications. 21066 21067 'R_SPARC_HI22' is obtained using '%hi' and 'R_SPARC_LO10' is obtained 21068using '%lo'. Likewise 'R_SPARC_HIX22' is obtained from '%hix' and 21069'R_SPARC_LOX10' is obtained using '%lox'. For example: 21070 21071 sethi %hi(symbol), %g1 21072 or %g1, %lo(symbol), %g1 21073 21074 sethi %hix(symbol), %g1 21075 xor %g1, %lox(symbol), %g1 21076 21077 These "high" mnemonics extract bits 31:10 of their operand, and the 21078"low" mnemonics extract bits 9:0 of their operand. 21079 21080 V9 code model relocations can be requested as follows: 21081 21082 * 'R_SPARC_HH22' is requested using '%hh'. It can also be generated 21083 using '%uhi'. 21084 * 'R_SPARC_HM10' is requested using '%hm'. It can also be generated 21085 using '%ulo'. 21086 * 'R_SPARC_LM22' is requested using '%lm'. 21087 21088 * 'R_SPARC_H44' is requested using '%h44'. 21089 * 'R_SPARC_M44' is requested using '%m44'. 21090 * 'R_SPARC_L44' is requested using '%l44' or '%l34'. 21091 * 'R_SPARC_H34' is requested using '%h34'. 21092 21093 The '%l34' generates a 'R_SPARC_L44' relocation because it calculates 21094the necessary value, and therefore no explicit 'R_SPARC_L34' relocation 21095needed to be created for this purpose. 21096 21097 The '%h34' and '%l34' relocations are used for the abs34 code model. 21098Here is an example abs34 address generation sequence: 21099 21100 sethi %h34(symbol), %g1 21101 sllx %g1, 2, %g1 21102 or %g1, %l34(symbol), %g1 21103 21104 The PC relative relocation 'R_SPARC_PC22' can be obtained by 21105enclosing an operand inside of '%pc22'. Likewise, the 'R_SPARC_PC10' 21106relocation can be obtained using '%pc10'. These are mostly used when 21107assembling PIC code. For example, the standard PIC sequence on Sparc to 21108get the base of the global offset table, PC relative, into a register, 21109can be performed as: 21110 21111 sethi %pc22(_GLOBAL_OFFSET_TABLE_-4), %l7 21112 add %l7, %pc10(_GLOBAL_OFFSET_TABLE_+4), %l7 21113 21114 Several relocations exist to allow the link editor to potentially 21115optimize GOT data references. The 'R_SPARC_GOTDATA_OP_HIX22' relocation 21116can obtained by enclosing an operand inside of '%gdop_hix22'. The 21117'R_SPARC_GOTDATA_OP_LOX10' relocation can obtained by enclosing an 21118operand inside of '%gdop_lox10'. Likewise, 'R_SPARC_GOTDATA_OP' can be 21119obtained by enclosing an operand inside of '%gdop'. For example, 21120assuming the GOT base is in register '%l7': 21121 21122 sethi %gdop_hix22(symbol), %l1 21123 xor %l1, %gdop_lox10(symbol), %l1 21124 ld [%l7 + %l1], %l2, %gdop(symbol) 21125 21126 There are many relocations that can be requested for access to thread 21127local storage variables. All of the Sparc TLS mnemonics are supported: 21128 21129 * 'R_SPARC_TLS_GD_HI22' is requested using '%tgd_hi22'. 21130 * 'R_SPARC_TLS_GD_LO10' is requested using '%tgd_lo10'. 21131 * 'R_SPARC_TLS_GD_ADD' is requested using '%tgd_add'. 21132 * 'R_SPARC_TLS_GD_CALL' is requested using '%tgd_call'. 21133 21134 * 'R_SPARC_TLS_LDM_HI22' is requested using '%tldm_hi22'. 21135 * 'R_SPARC_TLS_LDM_LO10' is requested using '%tldm_lo10'. 21136 * 'R_SPARC_TLS_LDM_ADD' is requested using '%tldm_add'. 21137 * 'R_SPARC_TLS_LDM_CALL' is requested using '%tldm_call'. 21138 21139 * 'R_SPARC_TLS_LDO_HIX22' is requested using '%tldo_hix22'. 21140 * 'R_SPARC_TLS_LDO_LOX10' is requested using '%tldo_lox10'. 21141 * 'R_SPARC_TLS_LDO_ADD' is requested using '%tldo_add'. 21142 21143 * 'R_SPARC_TLS_IE_HI22' is requested using '%tie_hi22'. 21144 * 'R_SPARC_TLS_IE_LO10' is requested using '%tie_lo10'. 21145 * 'R_SPARC_TLS_IE_LD' is requested using '%tie_ld'. 21146 * 'R_SPARC_TLS_IE_LDX' is requested using '%tie_ldx'. 21147 * 'R_SPARC_TLS_IE_ADD' is requested using '%tie_add'. 21148 21149 * 'R_SPARC_TLS_LE_HIX22' is requested using '%tle_hix22'. 21150 * 'R_SPARC_TLS_LE_LOX10' is requested using '%tle_lox10'. 21151 21152 Here are some example TLS model sequences. 21153 21154 First, General Dynamic: 21155 21156 sethi %tgd_hi22(symbol), %l1 21157 add %l1, %tgd_lo10(symbol), %l1 21158 add %l7, %l1, %o0, %tgd_add(symbol) 21159 call __tls_get_addr, %tgd_call(symbol) 21160 nop 21161 21162 Local Dynamic: 21163 21164 sethi %tldm_hi22(symbol), %l1 21165 add %l1, %tldm_lo10(symbol), %l1 21166 add %l7, %l1, %o0, %tldm_add(symbol) 21167 call __tls_get_addr, %tldm_call(symbol) 21168 nop 21169 21170 sethi %tldo_hix22(symbol), %l1 21171 xor %l1, %tldo_lox10(symbol), %l1 21172 add %o0, %l1, %l1, %tldo_add(symbol) 21173 21174 Initial Exec: 21175 21176 sethi %tie_hi22(symbol), %l1 21177 add %l1, %tie_lo10(symbol), %l1 21178 ld [%l7 + %l1], %o0, %tie_ld(symbol) 21179 add %g7, %o0, %o0, %tie_add(symbol) 21180 21181 sethi %tie_hi22(symbol), %l1 21182 add %l1, %tie_lo10(symbol), %l1 21183 ldx [%l7 + %l1], %o0, %tie_ldx(symbol) 21184 add %g7, %o0, %o0, %tie_add(symbol) 21185 21186 And finally, Local Exec: 21187 21188 sethi %tle_hix22(symbol), %l1 21189 add %l1, %tle_lox10(symbol), %l1 21190 add %g7, %l1, %l1 21191 21192 When assembling for 64-bit, and a secondary constant addend is 21193specified in an address expression that would normally generate an 21194'R_SPARC_LO10' relocation, the assembler will emit an 'R_SPARC_OLO10' 21195instead. 21196 21197 21198File: as.info, Node: Sparc-Size-Translations, Prev: Sparc-Relocs, Up: Sparc-Syntax 21199 212009.44.3.5 Size Translations 21201.......................... 21202 21203Often it is desirable to write code in an operand size agnostic manner. 21204'as' provides support for this via operand size opcode translations. 21205Translations are supported for loads, stores, shifts, compare-and-swap 21206atomics, and the 'clr' synthetic instruction. 21207 21208 If generating 32-bit code, 'as' will generate the 32-bit opcode. 21209Whereas if 64-bit code is being generated, the 64-bit opcode will be 21210emitted. For example 'ldn' will be transformed into 'ld' for 32-bit 21211code and 'ldx' for 64-bit code. 21212 21213 Here is an example meant to demonstrate all the supported opcode 21214translations: 21215 21216 ldn [%o0], %o1 21217 ldna [%o0] %asi, %o2 21218 stn %o1, [%o0] 21219 stna %o2, [%o0] %asi 21220 slln %o3, 3, %o3 21221 srln %o4, 8, %o4 21222 sran %o5, 12, %o5 21223 casn [%o0], %o1, %o2 21224 casna [%o0] %asi, %o1, %o2 21225 clrn %g1 21226 21227 In 32-bit mode 'as' will emit: 21228 21229 ld [%o0], %o1 21230 lda [%o0] %asi, %o2 21231 st %o1, [%o0] 21232 sta %o2, [%o0] %asi 21233 sll %o3, 3, %o3 21234 srl %o4, 8, %o4 21235 sra %o5, 12, %o5 21236 cas [%o0], %o1, %o2 21237 casa [%o0] %asi, %o1, %o2 21238 clr %g1 21239 21240 And in 64-bit mode 'as' will emit: 21241 21242 ldx [%o0], %o1 21243 ldxa [%o0] %asi, %o2 21244 stx %o1, [%o0] 21245 stxa %o2, [%o0] %asi 21246 sllx %o3, 3, %o3 21247 srlx %o4, 8, %o4 21248 srax %o5, 12, %o5 21249 casx [%o0], %o1, %o2 21250 casxa [%o0] %asi, %o1, %o2 21251 clrx %g1 21252 21253 Finally, the '.nword' translating directive is supported as well. It 21254is documented in the section on Sparc machine directives. 21255 21256 21257File: as.info, Node: Sparc-Float, Next: Sparc-Directives, Prev: Sparc-Syntax, Up: Sparc-Dependent 21258 212599.44.4 Floating Point 21260--------------------- 21261 21262The Sparc uses IEEE floating-point numbers. 21263 21264 21265File: as.info, Node: Sparc-Directives, Prev: Sparc-Float, Up: Sparc-Dependent 21266 212679.44.5 Sparc Machine Directives 21268------------------------------- 21269 21270The Sparc version of 'as' supports the following additional machine 21271directives: 21272 21273'.align' 21274 This must be followed by the desired alignment in bytes. 21275 21276'.common' 21277 This must be followed by a symbol name, a positive number, and 21278 '"bss"'. This behaves somewhat like '.comm', but the syntax is 21279 different. 21280 21281'.half' 21282 This is functionally identical to '.short'. 21283 21284'.nword' 21285 On the Sparc, the '.nword' directive produces native word sized 21286 value, ie. if assembling with -32 it is equivalent to '.word', if 21287 assembling with -64 it is equivalent to '.xword'. 21288 21289'.proc' 21290 This directive is ignored. Any text following it on the same line 21291 is also ignored. 21292 21293'.register' 21294 This directive declares use of a global application or system 21295 register. It must be followed by a register name %g2, %g3, %g6 or 21296 %g7, comma and the symbol name for that register. If symbol name 21297 is '#scratch', it is a scratch register, if it is '#ignore', it 21298 just suppresses any errors about using undeclared global register, 21299 but does not emit any information about it into the object file. 21300 This can be useful e.g. if you save the register before use and 21301 restore it after. 21302 21303'.reserve' 21304 This must be followed by a symbol name, a positive number, and 21305 '"bss"'. This behaves somewhat like '.lcomm', but the syntax is 21306 different. 21307 21308'.seg' 21309 This must be followed by '"text"', '"data"', or '"data1"'. It 21310 behaves like '.text', '.data', or '.data 1'. 21311 21312'.skip' 21313 This is functionally identical to the '.space' directive. 21314 21315'.word' 21316 On the Sparc, the '.word' directive produces 32 bit values, instead 21317 of the 16 bit values it produces on many other machines. 21318 21319'.xword' 21320 On the Sparc V9 processor, the '.xword' directive produces 64 bit 21321 values. 21322 21323 21324File: as.info, Node: TIC54X-Dependent, Next: TIC6X-Dependent, Prev: Sparc-Dependent, Up: Machine Dependencies 21325 213269.45 TIC54X Dependent Features 21327============================== 21328 21329* Menu: 21330 21331* TIC54X-Opts:: Command-line Options 21332* TIC54X-Block:: Blocking 21333* TIC54X-Env:: Environment Settings 21334* TIC54X-Constants:: Constants Syntax 21335* TIC54X-Subsyms:: String Substitution 21336* TIC54X-Locals:: Local Label Syntax 21337* TIC54X-Builtins:: Builtin Assembler Math Functions 21338* TIC54X-Ext:: Extended Addressing Support 21339* TIC54X-Directives:: Directives 21340* TIC54X-Macros:: Macro Features 21341* TIC54X-MMRegs:: Memory-mapped Registers 21342* TIC54X-Syntax:: Syntax 21343 21344 21345File: as.info, Node: TIC54X-Opts, Next: TIC54X-Block, Up: TIC54X-Dependent 21346 213479.45.1 Options 21348-------------- 21349 21350The TMS320C54X version of 'as' has a few machine-dependent options. 21351 21352 You can use the '-mfar-mode' option to enable extended addressing 21353mode. All addresses will be assumed to be > 16 bits, and the 21354appropriate relocation types will be used. This option is equivalent to 21355using the '.far_mode' directive in the assembly code. If you do not use 21356the '-mfar-mode' option, all references will be assumed to be 16 bits. 21357This option may be abbreviated to '-mf'. 21358 21359 You can use the '-mcpu' option to specify a particular CPU. This 21360option is equivalent to using the '.version' directive in the assembly 21361code. For recognized CPU codes, see *Note '.version': 21362TIC54X-Directives. The default CPU version is '542'. 21363 21364 You can use the '-merrors-to-file' option to redirect error output to 21365a file (this provided for those deficient environments which don't 21366provide adequate output redirection). This option may be abbreviated to 21367'-me'. 21368 21369 21370File: as.info, Node: TIC54X-Block, Next: TIC54X-Env, Prev: TIC54X-Opts, Up: TIC54X-Dependent 21371 213729.45.2 Blocking 21373--------------- 21374 21375A blocked section or memory block is guaranteed not to cross the 21376blocking boundary (usually a page, or 128 words) if it is smaller than 21377the blocking size, or to start on a page boundary if it is larger than 21378the blocking size. 21379 21380 21381File: as.info, Node: TIC54X-Env, Next: TIC54X-Constants, Prev: TIC54X-Block, Up: TIC54X-Dependent 21382 213839.45.3 Environment Settings 21384--------------------------- 21385 21386'C54XDSP_DIR' and 'A_DIR' are semicolon-separated paths which are added 21387to the list of directories normally searched for source and include 21388files. 'C54XDSP_DIR' will override 'A_DIR'. 21389 21390 21391File: as.info, Node: TIC54X-Constants, Next: TIC54X-Subsyms, Prev: TIC54X-Env, Up: TIC54X-Dependent 21392 213939.45.4 Constants Syntax 21394----------------------- 21395 21396The TIC54X version of 'as' allows the following additional constant 21397formats, using a suffix to indicate the radix: 21398 21399 Binary 000000B, 011000b 21400 Octal 10Q, 224q 21401 Hexadecimal 45h, 0FH 21402 21403 21404File: as.info, Node: TIC54X-Subsyms, Next: TIC54X-Locals, Prev: TIC54X-Constants, Up: TIC54X-Dependent 21405 214069.45.5 String Substitution 21407-------------------------- 21408 21409A subset of allowable symbols (which we'll call subsyms) may be assigned 21410arbitrary string values. This is roughly equivalent to C preprocessor 21411#define macros. When 'as' encounters one of these symbols, the symbol 21412is replaced in the input stream by its string value. Subsym names 21413*must* begin with a letter. 21414 21415 Subsyms may be defined using the '.asg' and '.eval' directives (*Note 21416'.asg': TIC54X-Directives, *Note '.eval': TIC54X-Directives. 21417 21418 Expansion is recursive until a previously encountered symbol is seen, 21419at which point substitution stops. 21420 21421 In this example, x is replaced with SYM2; SYM2 is replaced with SYM1, 21422and SYM1 is replaced with x. At this point, x has already been 21423encountered and the substitution stops. 21424 21425 .asg "x",SYM1 21426 .asg "SYM1",SYM2 21427 .asg "SYM2",x 21428 add x,a ; final code assembled is "add x, a" 21429 21430 Macro parameters are converted to subsyms; a side effect of this is 21431the normal 'as' '\ARG' dereferencing syntax is unnecessary. Subsyms 21432defined within a macro will have global scope, unless the '.var' 21433directive is used to identify the subsym as a local macro variable *note 21434'.var': TIC54X-Directives. 21435 21436 Substitution may be forced in situations where replacement might be 21437ambiguous by placing colons on either side of the subsym. The following 21438code: 21439 21440 .eval "10",x 21441 LAB:X: add #x, a 21442 21443 When assembled becomes: 21444 21445 LAB10 add #10, a 21446 21447 Smaller parts of the string assigned to a subsym may be accessed with 21448the following syntax: 21449 21450':SYMBOL(CHAR_INDEX):' 21451 Evaluates to a single-character string, the character at 21452 CHAR_INDEX. 21453':SYMBOL(START,LENGTH):' 21454 Evaluates to a substring of SYMBOL beginning at START with length 21455 LENGTH. 21456 21457 21458File: as.info, Node: TIC54X-Locals, Next: TIC54X-Builtins, Prev: TIC54X-Subsyms, Up: TIC54X-Dependent 21459 214609.45.6 Local Labels 21461------------------- 21462 21463Local labels may be defined in two ways: 21464 21465 * $N, where N is a decimal number between 0 and 9 21466 * LABEL?, where LABEL is any legal symbol name. 21467 21468 Local labels thus defined may be redefined or automatically 21469generated. The scope of a local label is based on when it may be 21470undefined or reset. This happens when one of the following situations 21471is encountered: 21472 21473 * .newblock directive *note '.newblock': TIC54X-Directives. 21474 * The current section is changed (.sect, .text, or .data) 21475 * Entering or leaving an included file 21476 * The macro scope where the label was defined is exited 21477 21478 21479File: as.info, Node: TIC54X-Builtins, Next: TIC54X-Ext, Prev: TIC54X-Locals, Up: TIC54X-Dependent 21480 214819.45.7 Math Builtins 21482-------------------- 21483 21484The following built-in functions may be used to generate a 21485floating-point value. All return a floating-point value except '$cvi', 21486'$int', and '$sgn', which return an integer value. 21487 21488'$acos(EXPR)' 21489 Returns the floating point arccosine of EXPR. 21490 21491'$asin(EXPR)' 21492 Returns the floating point arcsine of EXPR. 21493 21494'$atan(EXPR)' 21495 Returns the floating point arctangent of EXPR. 21496 21497'$atan2(EXPR1,EXPR2)' 21498 Returns the floating point arctangent of EXPR1 / EXPR2. 21499 21500'$ceil(EXPR)' 21501 Returns the smallest integer not less than EXPR as floating point. 21502 21503'$cosh(EXPR)' 21504 Returns the floating point hyperbolic cosine of EXPR. 21505 21506'$cos(EXPR)' 21507 Returns the floating point cosine of EXPR. 21508 21509'$cvf(EXPR)' 21510 Returns the integer value EXPR converted to floating-point. 21511 21512'$cvi(EXPR)' 21513 Returns the floating point value EXPR converted to integer. 21514 21515'$exp(EXPR)' 21516 Returns the floating point value e ^ EXPR. 21517 21518'$fabs(EXPR)' 21519 Returns the floating point absolute value of EXPR. 21520 21521'$floor(EXPR)' 21522 Returns the largest integer that is not greater than EXPR as 21523 floating point. 21524 21525'$fmod(EXPR1,EXPR2)' 21526 Returns the floating point remainder of EXPR1 / EXPR2. 21527 21528'$int(EXPR)' 21529 Returns 1 if EXPR evaluates to an integer, zero otherwise. 21530 21531'$ldexp(EXPR1,EXPR2)' 21532 Returns the floating point value EXPR1 * 2 ^ EXPR2. 21533 21534'$log10(EXPR)' 21535 Returns the base 10 logarithm of EXPR. 21536 21537'$log(EXPR)' 21538 Returns the natural logarithm of EXPR. 21539 21540'$max(EXPR1,EXPR2)' 21541 Returns the floating point maximum of EXPR1 and EXPR2. 21542 21543'$min(EXPR1,EXPR2)' 21544 Returns the floating point minimum of EXPR1 and EXPR2. 21545 21546'$pow(EXPR1,EXPR2)' 21547 Returns the floating point value EXPR1 ^ EXPR2. 21548 21549'$round(EXPR)' 21550 Returns the nearest integer to EXPR as a floating point number. 21551 21552'$sgn(EXPR)' 21553 Returns -1, 0, or 1 based on the sign of EXPR. 21554 21555'$sin(EXPR)' 21556 Returns the floating point sine of EXPR. 21557 21558'$sinh(EXPR)' 21559 Returns the floating point hyperbolic sine of EXPR. 21560 21561'$sqrt(EXPR)' 21562 Returns the floating point square root of EXPR. 21563 21564'$tan(EXPR)' 21565 Returns the floating point tangent of EXPR. 21566 21567'$tanh(EXPR)' 21568 Returns the floating point hyperbolic tangent of EXPR. 21569 21570'$trunc(EXPR)' 21571 Returns the integer value of EXPR truncated towards zero as 21572 floating point. 21573 21574 21575File: as.info, Node: TIC54X-Ext, Next: TIC54X-Directives, Prev: TIC54X-Builtins, Up: TIC54X-Dependent 21576 215779.45.8 Extended Addressing 21578-------------------------- 21579 21580The 'LDX' pseudo-op is provided for loading the extended addressing bits 21581of a label or address. For example, if an address '_label' resides in 21582extended program memory, the value of '_label' may be loaded as follows: 21583 ldx #_label,16,a ; loads extended bits of _label 21584 or #_label,a ; loads lower 16 bits of _label 21585 bacc a ; full address is in accumulator A 21586 21587 21588File: as.info, Node: TIC54X-Directives, Next: TIC54X-Macros, Prev: TIC54X-Ext, Up: TIC54X-Dependent 21589 215909.45.9 Directives 21591----------------- 21592 21593'.align [SIZE]' 21594'.even' 21595 Align the section program counter on the next boundary, based on 21596 SIZE. SIZE may be any power of 2. '.even' is equivalent to 21597 '.align' with a SIZE of 2. 21598 '1' 21599 Align SPC to word boundary 21600 '2' 21601 Align SPC to longword boundary (same as .even) 21602 '128' 21603 Align SPC to page boundary 21604 21605'.asg STRING, NAME' 21606 Assign NAME the string STRING. String replacement is performed on 21607 STRING before assignment. 21608 21609'.eval STRING, NAME' 21610 Evaluate the contents of string STRING and assign the result as a 21611 string to the subsym NAME. String replacement is performed on 21612 STRING before assignment. 21613 21614'.bss SYMBOL, SIZE [, [BLOCKING_FLAG] [,ALIGNMENT_FLAG]]' 21615 Reserve space for SYMBOL in the .bss section. SIZE is in words. 21616 If present, BLOCKING_FLAG indicates the allocated space should be 21617 aligned on a page boundary if it would otherwise cross a page 21618 boundary. If present, ALIGNMENT_FLAG causes the assembler to 21619 allocate SIZE on a long word boundary. 21620 21621'.byte VALUE [,...,VALUE_N]' 21622'.ubyte VALUE [,...,VALUE_N]' 21623'.char VALUE [,...,VALUE_N]' 21624'.uchar VALUE [,...,VALUE_N]' 21625 Place one or more bytes into consecutive words of the current 21626 section. The upper 8 bits of each word is zero-filled. If a label 21627 is used, it points to the word allocated for the first byte 21628 encountered. 21629 21630'.clink ["SECTION_NAME"]' 21631 Set STYP_CLINK flag for this section, which indicates to the linker 21632 that if no symbols from this section are referenced, the section 21633 should not be included in the link. If SECTION_NAME is omitted, 21634 the current section is used. 21635 21636'.c_mode' 21637 TBD. 21638 21639'.copy "FILENAME" | FILENAME' 21640'.include "FILENAME" | FILENAME' 21641 Read source statements from FILENAME. The normal include search 21642 path is used. Normally .copy will cause statements from the 21643 included file to be printed in the assembly listing and .include 21644 will not, but this distinction is not currently implemented. 21645 21646'.data' 21647 Begin assembling code into the .data section. 21648 21649'.double VALUE [,...,VALUE_N]' 21650'.ldouble VALUE [,...,VALUE_N]' 21651'.float VALUE [,...,VALUE_N]' 21652'.xfloat VALUE [,...,VALUE_N]' 21653 Place an IEEE single-precision floating-point representation of one 21654 or more floating-point values into the current section. All but 21655 '.xfloat' align the result on a longword boundary. Values are 21656 stored most-significant word first. 21657 21658'.drlist' 21659'.drnolist' 21660 Control printing of directives to the listing file. Ignored. 21661 21662'.emsg STRING' 21663'.mmsg STRING' 21664'.wmsg STRING' 21665 Emit a user-defined error, message, or warning, respectively. 21666 21667'.far_mode' 21668 Use extended addressing when assembling statements. This should 21669 appear only once per file, and is equivalent to the -mfar-mode 21670 option *note '-mfar-mode': TIC54X-Opts. 21671 21672'.fclist' 21673'.fcnolist' 21674 Control printing of false conditional blocks to the listing file. 21675 21676'.field VALUE [,SIZE]' 21677 Initialize a bitfield of SIZE bits in the current section. If 21678 VALUE is relocatable, then SIZE must be 16. SIZE defaults to 16 21679 bits. If VALUE does not fit into SIZE bits, the value will be 21680 truncated. Successive '.field' directives will pack starting at 21681 the current word, filling the most significant bits first, and 21682 aligning to the start of the next word if the field size does not 21683 fit into the space remaining in the current word. A '.align' 21684 directive with an operand of 1 will force the next '.field' 21685 directive to begin packing into a new word. If a label is used, it 21686 points to the word that contains the specified field. 21687 21688'.global SYMBOL [,...,SYMBOL_N]' 21689'.def SYMBOL [,...,SYMBOL_N]' 21690'.ref SYMBOL [,...,SYMBOL_N]' 21691 '.def' nominally identifies a symbol defined in the current file 21692 and available to other files. '.ref' identifies a symbol used in 21693 the current file but defined elsewhere. Both map to the standard 21694 '.global' directive. 21695 21696'.half VALUE [,...,VALUE_N]' 21697'.uhalf VALUE [,...,VALUE_N]' 21698'.short VALUE [,...,VALUE_N]' 21699'.ushort VALUE [,...,VALUE_N]' 21700'.int VALUE [,...,VALUE_N]' 21701'.uint VALUE [,...,VALUE_N]' 21702'.word VALUE [,...,VALUE_N]' 21703'.uword VALUE [,...,VALUE_N]' 21704 Place one or more values into consecutive words of the current 21705 section. If a label is used, it points to the word allocated for 21706 the first value encountered. 21707 21708'.label SYMBOL' 21709 Define a special SYMBOL to refer to the load time address of the 21710 current section program counter. 21711 21712'.length' 21713'.width' 21714 Set the page length and width of the output listing file. Ignored. 21715 21716'.list' 21717'.nolist' 21718 Control whether the source listing is printed. Ignored. 21719 21720'.long VALUE [,...,VALUE_N]' 21721'.ulong VALUE [,...,VALUE_N]' 21722'.xlong VALUE [,...,VALUE_N]' 21723 Place one or more 32-bit values into consecutive words in the 21724 current section. The most significant word is stored first. 21725 '.long' and '.ulong' align the result on a longword boundary; 21726 'xlong' does not. 21727 21728'.loop [COUNT]' 21729'.break [CONDITION]' 21730'.endloop' 21731 Repeatedly assemble a block of code. '.loop' begins the block, and 21732 '.endloop' marks its termination. COUNT defaults to 1024, and 21733 indicates the number of times the block should be repeated. 21734 '.break' terminates the loop so that assembly begins after the 21735 '.endloop' directive. The optional CONDITION will cause the loop 21736 to terminate only if it evaluates to zero. 21737 21738'MACRO_NAME .macro [PARAM1][,...PARAM_N]' 21739'[.mexit]' 21740'.endm' 21741 See the section on macros for more explanation (*Note 21742 TIC54X-Macros::. 21743 21744'.mlib "FILENAME" | FILENAME' 21745 Load the macro library FILENAME. FILENAME must be an archived 21746 library (BFD ar-compatible) of text files, expected to contain only 21747 macro definitions. The standard include search path is used. 21748 21749'.mlist' 21750'.mnolist' 21751 Control whether to include macro and loop block expansions in the 21752 listing output. Ignored. 21753 21754'.mmregs' 21755 Define global symbolic names for the 'c54x registers. Supposedly 21756 equivalent to executing '.set' directives for each register with 21757 its memory-mapped value, but in reality is provided only for 21758 compatibility and does nothing. 21759 21760'.newblock' 21761 This directive resets any TIC54X local labels currently defined. 21762 Normal 'as' local labels are unaffected. 21763 21764'.option OPTION_LIST' 21765 Set listing options. Ignored. 21766 21767'.sblock "SECTION_NAME" | SECTION_NAME [,"NAME_N" | NAME_N]' 21768 Designate SECTION_NAME for blocking. Blocking guarantees that a 21769 section will start on a page boundary (128 words) if it would 21770 otherwise cross a page boundary. Only initialized sections may be 21771 designated with this directive. See also *Note TIC54X-Block::. 21772 21773'.sect "SECTION_NAME"' 21774 Define a named initialized section and make it the current section. 21775 21776'SYMBOL .set "VALUE"' 21777'SYMBOL .equ "VALUE"' 21778 Equate a constant VALUE to a SYMBOL, which is placed in the symbol 21779 table. SYMBOL may not be previously defined. 21780 21781'.space SIZE_IN_BITS' 21782'.bes SIZE_IN_BITS' 21783 Reserve the given number of bits in the current section and 21784 zero-fill them. If a label is used with '.space', it points to the 21785 *first* word reserved. With '.bes', the label points to the *last* 21786 word reserved. 21787 21788'.sslist' 21789'.ssnolist' 21790 Controls the inclusion of subsym replacement in the listing output. 21791 Ignored. 21792 21793'.string "STRING" [,...,"STRING_N"]' 21794'.pstring "STRING" [,...,"STRING_N"]' 21795 Place 8-bit characters from STRING into the current section. 21796 '.string' zero-fills the upper 8 bits of each word, while 21797 '.pstring' puts two characters into each word, filling the 21798 most-significant bits first. Unused space is zero-filled. If a 21799 label is used, it points to the first word initialized. 21800 21801'[STAG] .struct [OFFSET]' 21802'[NAME_1] element [COUNT_1]' 21803'[NAME_2] element [COUNT_2]' 21804'[TNAME] .tag STAGX [TCOUNT]' 21805'...' 21806'[NAME_N] element [COUNT_N]' 21807'[SSIZE] .endstruct' 21808'LABEL .tag [STAG]' 21809 Assign symbolic offsets to the elements of a structure. STAG 21810 defines a symbol to use to reference the structure. OFFSET 21811 indicates a starting value to use for the first element 21812 encountered; otherwise it defaults to zero. Each element can have 21813 a named offset, NAME, which is a symbol assigned the value of the 21814 element's offset into the structure. If STAG is missing, these 21815 become global symbols. COUNT adjusts the offset that many times, 21816 as if 'element' were an array. 'element' may be one of '.byte', 21817 '.word', '.long', '.float', or any equivalent of those, and the 21818 structure offset is adjusted accordingly. '.field' and '.string' 21819 are also allowed; the size of '.field' is one bit, and '.string' is 21820 considered to be one word in size. Only element descriptors, 21821 structure/union tags, '.align' and conditional assembly directives 21822 are allowed within '.struct'/'.endstruct'. '.align' aligns member 21823 offsets to word boundaries only. SSIZE, if provided, will always 21824 be assigned the size of the structure. 21825 21826 The '.tag' directive, in addition to being used to define a 21827 structure/union element within a structure, may be used to apply a 21828 structure to a symbol. Once applied to LABEL, the individual 21829 structure elements may be applied to LABEL to produce the desired 21830 offsets using LABEL as the structure base. 21831 21832'.tab' 21833 Set the tab size in the output listing. Ignored. 21834 21835'[UTAG] .union' 21836'[NAME_1] element [COUNT_1]' 21837'[NAME_2] element [COUNT_2]' 21838'[TNAME] .tag UTAGX[,TCOUNT]' 21839'...' 21840'[NAME_N] element [COUNT_N]' 21841'[USIZE] .endstruct' 21842'LABEL .tag [UTAG]' 21843 Similar to '.struct', but the offset after each element is reset to 21844 zero, and the USIZE is set to the maximum of all defined elements. 21845 Starting offset for the union is always zero. 21846 21847'[SYMBOL] .usect "SECTION_NAME", SIZE, [,[BLOCKING_FLAG] [,ALIGNMENT_FLAG]]' 21848 Reserve space for variables in a named, uninitialized section 21849 (similar to .bss). '.usect' allows definitions sections 21850 independent of .bss. SYMBOL points to the first location reserved 21851 by this allocation. The symbol may be used as a variable name. 21852 SIZE is the allocated size in words. BLOCKING_FLAG indicates 21853 whether to block this section on a page boundary (128 words) (*note 21854 TIC54X-Block::). ALIGNMENT FLAG indicates whether the section 21855 should be longword-aligned. 21856 21857'.var SYM[,..., SYM_N]' 21858 Define a subsym to be a local variable within a macro. See *Note 21859 TIC54X-Macros::. 21860 21861'.version VERSION' 21862 Set which processor to build instructions for. Though the 21863 following values are accepted, the op is ignored. 21864 '541' 21865 '542' 21866 '543' 21867 '545' 21868 '545LP' 21869 '546LP' 21870 '548' 21871 '549' 21872 21873 21874File: as.info, Node: TIC54X-Macros, Next: TIC54X-MMRegs, Prev: TIC54X-Directives, Up: TIC54X-Dependent 21875 218769.45.10 Macros 21877-------------- 21878 21879Macros do not require explicit dereferencing of arguments (i.e., \ARG). 21880 21881 During macro expansion, the macro parameters are converted to 21882subsyms. If the number of arguments passed the macro invocation exceeds 21883the number of parameters defined, the last parameter is assigned the 21884string equivalent of all remaining arguments. If fewer arguments are 21885given than parameters, the missing parameters are assigned empty 21886strings. To include a comma in an argument, you must enclose the 21887argument in quotes. 21888 21889 The following built-in subsym functions allow examination of the 21890string value of subsyms (or ordinary strings). The arguments are 21891strings unless otherwise indicated (subsyms passed as args will be 21892replaced by the strings they represent). 21893'$symlen(STR)' 21894 Returns the length of STR. 21895 21896'$symcmp(STR1,STR2)' 21897 Returns 0 if STR1 == STR2, non-zero otherwise. 21898 21899'$firstch(STR,CH)' 21900 Returns index of the first occurrence of character constant CH in 21901 STR. 21902 21903'$lastch(STR,CH)' 21904 Returns index of the last occurrence of character constant CH in 21905 STR. 21906 21907'$isdefed(SYMBOL)' 21908 Returns zero if the symbol SYMBOL is not in the symbol table, 21909 non-zero otherwise. 21910 21911'$ismember(SYMBOL,LIST)' 21912 Assign the first member of comma-separated string LIST to SYMBOL; 21913 LIST is reassigned the remainder of the list. Returns zero if LIST 21914 is a null string. Both arguments must be subsyms. 21915 21916'$iscons(EXPR)' 21917 Returns 1 if string EXPR is binary, 2 if octal, 3 if hexadecimal, 4 21918 if a character, 5 if decimal, and zero if not an integer. 21919 21920'$isname(NAME)' 21921 Returns 1 if NAME is a valid symbol name, zero otherwise. 21922 21923'$isreg(REG)' 21924 Returns 1 if REG is a valid predefined register name (AR0-AR7 21925 only). 21926 21927'$structsz(STAG)' 21928 Returns the size of the structure or union represented by STAG. 21929 21930'$structacc(STAG)' 21931 Returns the reference point of the structure or union represented 21932 by STAG. Always returns zero. 21933 21934 21935File: as.info, Node: TIC54X-MMRegs, Next: TIC54X-Syntax, Prev: TIC54X-Macros, Up: TIC54X-Dependent 21936 219379.45.11 Memory-mapped Registers 21938------------------------------- 21939 21940The following symbols are recognized as memory-mapped registers: 21941 21942 21943File: as.info, Node: TIC54X-Syntax, Prev: TIC54X-MMRegs, Up: TIC54X-Dependent 21944 219459.45.12 TIC54X Syntax 21946--------------------- 21947 21948* Menu: 21949 21950* TIC54X-Chars:: Special Characters 21951 21952 21953File: as.info, Node: TIC54X-Chars, Up: TIC54X-Syntax 21954 219559.45.12.1 Special Characters 21956............................ 21957 21958The presence of a ';' appearing anywhere on a line indicates the start 21959of a comment that extends to the end of that line. 21960 21961 If a '#' appears as the first character of a line then the whole line 21962is treated as a comment, but in this case the line can also be a logical 21963line number directive (*note Comments::) or a preprocessor control 21964command (*note Preprocessing::). 21965 21966 The presence of an asterisk ('*') at the start of a line also 21967indicates a comment that extends to the end of that line. 21968 21969 The TIC54X assembler does not currently support a line separator 21970character. 21971 21972 21973File: as.info, Node: TIC6X-Dependent, Next: TILE-Gx-Dependent, Prev: TIC54X-Dependent, Up: Machine Dependencies 21974 219759.46 TIC6X Dependent Features 21976============================= 21977 21978* Menu: 21979 21980* TIC6X Options:: Options 21981* TIC6X Syntax:: Syntax 21982* TIC6X Directives:: Directives 21983 21984 21985File: as.info, Node: TIC6X Options, Next: TIC6X Syntax, Up: TIC6X-Dependent 21986 219879.46.1 TIC6X Options 21988-------------------- 21989 21990'-march=ARCH' 21991 Enable (only) instructions from architecture ARCH. By default, all 21992 instructions are permitted. 21993 21994 The following values of ARCH are accepted: 'c62x', 'c64x', 'c64x+', 21995 'c67x', 'c67x+', 'c674x'. 21996 21997'-mdsbt' 21998'-mno-dsbt' 21999 The '-mdsbt' option causes the assembler to generate the 22000 'Tag_ABI_DSBT' attribute with a value of 1, indicating that the 22001 code is using DSBT addressing. The '-mno-dsbt' option, the 22002 default, causes the tag to have a value of 0, indicating that the 22003 code does not use DSBT addressing. The linker will emit a warning 22004 if objects of different type (DSBT and non-DSBT) are linked 22005 together. 22006 22007'-mpid=no' 22008'-mpid=near' 22009'-mpid=far' 22010 The '-mpid=' option causes the assembler to generate the 22011 'Tag_ABI_PID' attribute with a value indicating the form of data 22012 addressing used by the code. '-mpid=no', the default, indicates 22013 position-dependent data addressing, '-mpid=near' indicates 22014 position-independent addressing with GOT accesses using near DP 22015 addressing, and '-mpid=far' indicates position-independent 22016 addressing with GOT accesses using far DP addressing. The linker 22017 will emit a warning if objects built with different settings of 22018 this option are linked together. 22019 22020'-mpic' 22021'-mno-pic' 22022 The '-mpic' option causes the assembler to generate the 22023 'Tag_ABI_PIC' attribute with a value of 1, indicating that the code 22024 is using position-independent code addressing, The '-mno-pic' 22025 option, the default, causes the tag to have a value of 0, 22026 indicating position-dependent code addressing. The linker will 22027 emit a warning if objects of different type (position-dependent and 22028 position-independent) are linked together. 22029 22030'-mbig-endian' 22031'-mlittle-endian' 22032 Generate code for the specified endianness. The default is 22033 little-endian. 22034 22035 22036File: as.info, Node: TIC6X Syntax, Next: TIC6X Directives, Prev: TIC6X Options, Up: TIC6X-Dependent 22037 220389.46.2 TIC6X Syntax 22039------------------- 22040 22041The presence of a ';' on a line indicates the start of a comment that 22042extends to the end of the current line. If a '#' or '*' appears as the 22043first character of a line, the whole line is treated as a comment. Note 22044that if a line starts with a '#' character then it can also be a logical 22045line number directive (*note Comments::) or a preprocessor control 22046command (*note Preprocessing::). 22047 22048 The '@' character can be used instead of a newline to separate 22049statements. 22050 22051 Instruction, register and functional unit names are case-insensitive. 22052'as' requires fully-specified functional unit names, such as '.S1', 22053'.L1X' or '.D1T2', on all instructions using a functional unit. 22054 22055 For some instructions, there may be syntactic ambiguity between 22056register or functional unit names and the names of labels or other 22057symbols. To avoid this, enclose the ambiguous symbol name in 22058parentheses; register and functional unit names may not be enclosed in 22059parentheses. 22060 22061 22062File: as.info, Node: TIC6X Directives, Prev: TIC6X Syntax, Up: TIC6X-Dependent 22063 220649.46.3 TIC6X Directives 22065----------------------- 22066 22067Directives controlling the set of instructions accepted by the assembler 22068have effect for instructions between the directive and any subsequent 22069directive overriding it. 22070 22071'.arch ARCH' 22072 This has the same effect as '-march=ARCH'. 22073 22074'.cantunwind' 22075 Prevents unwinding through the current function. No personality 22076 routine or exception table data is required or permitted. 22077 22078 If this is not specified then frame unwinding information will be 22079 constructed from CFI directives. *note CFI directives::. 22080 22081'.c6xabi_attribute TAG, VALUE' 22082 Set the C6000 EABI build attribute TAG to VALUE. 22083 22084 The TAG is either an attribute number or one of 'Tag_ISA', 22085 'Tag_ABI_wchar_t', 'Tag_ABI_stack_align_needed', 22086 'Tag_ABI_stack_align_preserved', 'Tag_ABI_DSBT', 'Tag_ABI_PID', 22087 'Tag_ABI_PIC', 'TAG_ABI_array_object_alignment', 22088 'TAG_ABI_array_object_align_expected', 'Tag_ABI_compatibility' and 22089 'Tag_ABI_conformance'. The VALUE is either a 'number', '"string"', 22090 or 'number, "string"' depending on the tag. 22091 22092'.ehtype SYMBOL' 22093 Output an exception type table reference to SYMBOL. 22094 22095'.endp' 22096 Marks the end of and exception table or function. If preceded by a 22097 '.handlerdata' directive then this also switched back to the 22098 previous text section. 22099 22100'.handlerdata' 22101 Marks the end of the current function, and the start of the 22102 exception table entry for that function. Anything between this 22103 directive and the '.endp' directive will be added to the exception 22104 table entry. 22105 22106 Must be preceded by a CFI block containing a '.cfi_lsda' directive. 22107 22108'.nocmp' 22109 Disallow use of C64x+ compact instructions in the current text 22110 section. 22111 22112'.personalityindex INDEX' 22113 Sets the personality routine for the current function to the ABI 22114 specified compact routine number INDEX 22115 22116'.personality NAME' 22117 Sets the personality routine for the current function to NAME. 22118 22119'.scomm SYMBOL, SIZE, ALIGN' 22120 Like '.comm', creating a common symbol SYMBOL with size SIZE and 22121 alignment ALIGN, but unlike when using '.comm', this symbol will be 22122 placed into the small BSS section by the linker. 22123 22124 22125File: as.info, Node: TILE-Gx-Dependent, Next: TILEPro-Dependent, Prev: TIC6X-Dependent, Up: Machine Dependencies 22126 221279.47 TILE-Gx Dependent Features 22128=============================== 22129 22130* Menu: 22131 22132* TILE-Gx Options:: TILE-Gx Options 22133* TILE-Gx Syntax:: TILE-Gx Syntax 22134* TILE-Gx Directives:: TILE-Gx Directives 22135 22136 22137File: as.info, Node: TILE-Gx Options, Next: TILE-Gx Syntax, Up: TILE-Gx-Dependent 22138 221399.47.1 Options 22140-------------- 22141 22142The following table lists all available TILE-Gx specific options: 22143 22144'-m32 | -m64' 22145 Select the word size, either 32 bits or 64 bits. 22146 22147'-EB | -EL' 22148 Select the endianness, either big-endian (-EB) or little-endian 22149 (-EL). 22150 22151 22152File: as.info, Node: TILE-Gx Syntax, Next: TILE-Gx Directives, Prev: TILE-Gx Options, Up: TILE-Gx-Dependent 22153 221549.47.2 Syntax 22155------------- 22156 22157Block comments are delimited by '/*' and '*/'. End of line comments may 22158be introduced by '#'. 22159 22160 Instructions consist of a leading opcode or macro name followed by 22161whitespace and an optional comma-separated list of operands: 22162 22163 OPCODE [OPERAND, ...] 22164 22165 Instructions must be separated by a newline or semicolon. 22166 22167 There are two ways to write code: either write naked instructions, 22168which the assembler is free to combine into VLIW bundles, or specify the 22169VLIW bundles explicitly. 22170 22171 Bundles are specified using curly braces: 22172 22173 { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 } 22174 22175 A bundle can span multiple lines. If you want to put multiple 22176instructions on a line, whether in a bundle or not, you need to separate 22177them with semicolons as in this example. 22178 22179 A bundle may contain one or more instructions, up to the limit 22180specified by the ISA (currently three). If fewer instructions are 22181specified than the hardware supports in a bundle, the assembler inserts 22182'fnop' instructions automatically. 22183 22184 The assembler will prefer to preserve the ordering of instructions 22185within the bundle, putting the first instruction in a lower-numbered 22186pipeline than the next one, etc. This fact, combined with the optional 22187use of explicit 'fnop' or 'nop' instructions, allows precise control 22188over which pipeline executes each instruction. 22189 22190 If the instructions cannot be bundled in the listed order, the 22191assembler will automatically try to find a valid pipeline assignment. 22192If there is no way to bundle the instructions together, the assembler 22193reports an error. 22194 22195 The assembler does not yet auto-bundle (automatically combine 22196multiple instructions into one bundle), but it reserves the right to do 22197so in the future. If you want to force an instruction to run by itself, 22198put it in a bundle explicitly with curly braces and use 'nop' 22199instructions (not 'fnop') to fill the remaining pipeline slots in that 22200bundle. 22201 22202* Menu: 22203 22204* TILE-Gx Opcodes:: Opcode Naming Conventions. 22205* TILE-Gx Registers:: Register Naming. 22206* TILE-Gx Modifiers:: Symbolic Operand Modifiers. 22207 22208 22209File: as.info, Node: TILE-Gx Opcodes, Next: TILE-Gx Registers, Up: TILE-Gx Syntax 22210 222119.47.2.1 Opcode Names 22212..................... 22213 22214For a complete list of opcodes and descriptions of their semantics, see 22215'TILE-Gx Instruction Set Architecture', available upon request at 22216www.tilera.com. 22217 22218 22219File: as.info, Node: TILE-Gx Registers, Next: TILE-Gx Modifiers, Prev: TILE-Gx Opcodes, Up: TILE-Gx Syntax 22220 222219.47.2.2 Register Names 22222....................... 22223 22224General-purpose registers are represented by predefined symbols of the 22225form 'rN', where N represents a number between '0' and '63'. However, 22226the following registers have canonical names that must be used instead: 22227 22228'r54' 22229 sp 22230 22231'r55' 22232 lr 22233 22234'r56' 22235 sn 22236 22237'r57' 22238 idn0 22239 22240'r58' 22241 idn1 22242 22243'r59' 22244 udn0 22245 22246'r60' 22247 udn1 22248 22249'r61' 22250 udn2 22251 22252'r62' 22253 udn3 22254 22255'r63' 22256 zero 22257 22258 The assembler will emit a warning if a numeric name is used instead 22259of the non-numeric name. The '.no_require_canonical_reg_names' 22260assembler pseudo-op turns off this warning. 22261'.require_canonical_reg_names' turns it back on. 22262 22263 22264File: as.info, Node: TILE-Gx Modifiers, Prev: TILE-Gx Registers, Up: TILE-Gx Syntax 22265 222669.47.2.3 Symbolic Operand Modifiers 22267................................... 22268 22269The assembler supports several modifiers when using symbol addresses in 22270TILE-Gx instruction operands. The general syntax is the following: 22271 22272 modifier(symbol) 22273 22274 The following modifiers are supported: 22275 22276'hw0' 22277 22278 This modifier is used to load bits 0-15 of the symbol's address. 22279 22280'hw1' 22281 22282 This modifier is used to load bits 16-31 of the symbol's address. 22283 22284'hw2' 22285 22286 This modifier is used to load bits 32-47 of the symbol's address. 22287 22288'hw3' 22289 22290 This modifier is used to load bits 48-63 of the symbol's address. 22291 22292'hw0_last' 22293 22294 This modifier yields the same value as 'hw0', but it also checks 22295 that the value does not overflow. 22296 22297'hw1_last' 22298 22299 This modifier yields the same value as 'hw1', but it also checks 22300 that the value does not overflow. 22301 22302'hw2_last' 22303 22304 This modifier yields the same value as 'hw2', but it also checks 22305 that the value does not overflow. 22306 22307 A 48-bit symbolic value is constructed by using the following 22308 idiom: 22309 22310 moveli r0, hw2_last(sym) 22311 shl16insli r0, r0, hw1(sym) 22312 shl16insli r0, r0, hw0(sym) 22313 22314'hw0_got' 22315 22316 This modifier is used to load bits 0-15 of the symbol's offset in 22317 the GOT entry corresponding to the symbol. 22318 22319'hw0_last_got' 22320 22321 This modifier yields the same value as 'hw0_got', but it also 22322 checks that the value does not overflow. 22323 22324'hw1_last_got' 22325 22326 This modifier is used to load bits 16-31 of the symbol's offset in 22327 the GOT entry corresponding to the symbol, and it also checks that 22328 the value does not overflow. 22329 22330'plt' 22331 22332 This modifier is used for function symbols. It causes a _procedure 22333 linkage table_, an array of code stubs, to be created at the time 22334 the shared object is created or linked against, together with a 22335 global offset table entry. The value is a pc-relative offset to 22336 the corresponding stub code in the procedure linkage table. This 22337 arrangement causes the run-time symbol resolver to be called to 22338 look up and set the value of the symbol the first time the function 22339 is called (at latest; depending environment variables). It is only 22340 safe to leave the symbol unresolved this way if all references are 22341 function calls. 22342 22343'hw0_plt' 22344 22345 This modifier is used to load bits 0-15 of the pc-relative address 22346 of a plt entry. 22347 22348'hw1_plt' 22349 22350 This modifier is used to load bits 16-31 of the pc-relative address 22351 of a plt entry. 22352 22353'hw1_last_plt' 22354 22355 This modifier yields the same value as 'hw1_plt', but it also 22356 checks that the value does not overflow. 22357 22358'hw2_last_plt' 22359 22360 This modifier is used to load bits 32-47 of the pc-relative address 22361 of a plt entry, and it also checks that the value does not 22362 overflow. 22363 22364'hw0_tls_gd' 22365 22366 This modifier is used to load bits 0-15 of the offset of the GOT 22367 entry of the symbol's TLS descriptor, to be used for 22368 general-dynamic TLS accesses. 22369 22370'hw0_last_tls_gd' 22371 22372 This modifier yields the same value as 'hw0_tls_gd', but it also 22373 checks that the value does not overflow. 22374 22375'hw1_last_tls_gd' 22376 22377 This modifier is used to load bits 16-31 of the offset of the GOT 22378 entry of the symbol's TLS descriptor, to be used for 22379 general-dynamic TLS accesses. It also checks that the value does 22380 not overflow. 22381 22382'hw0_tls_ie' 22383 22384 This modifier is used to load bits 0-15 of the offset of the GOT 22385 entry containing the offset of the symbol's address from the TCB, 22386 to be used for initial-exec TLS accesses. 22387 22388'hw0_last_tls_ie' 22389 22390 This modifier yields the same value as 'hw0_tls_ie', but it also 22391 checks that the value does not overflow. 22392 22393'hw1_last_tls_ie' 22394 22395 This modifier is used to load bits 16-31 of the offset of the GOT 22396 entry containing the offset of the symbol's address from the TCB, 22397 to be used for initial-exec TLS accesses. It also checks that the 22398 value does not overflow. 22399 22400'hw0_tls_le' 22401 22402 This modifier is used to load bits 0-15 of the offset of the 22403 symbol's address from the TCB, to be used for local-exec TLS 22404 accesses. 22405 22406'hw0_last_tls_le' 22407 22408 This modifier yields the same value as 'hw0_tls_le', but it also 22409 checks that the value does not overflow. 22410 22411'hw1_last_tls_le' 22412 22413 This modifier is used to load bits 16-31 of the offset of the 22414 symbol's address from the TCB, to be used for local-exec TLS 22415 accesses. It also checks that the value does not overflow. 22416 22417'tls_gd_call' 22418 22419 This modifier is used to tag an instruction as the "call" part of a 22420 calling sequence for a TLS GD reference of its operand. 22421 22422'tls_gd_add' 22423 22424 This modifier is used to tag an instruction as the "add" part of a 22425 calling sequence for a TLS GD reference of its operand. 22426 22427'tls_ie_load' 22428 22429 This modifier is used to tag an instruction as the "load" part of a 22430 calling sequence for a TLS IE reference of its operand. 22431 22432 22433File: as.info, Node: TILE-Gx Directives, Prev: TILE-Gx Syntax, Up: TILE-Gx-Dependent 22434 224359.47.3 TILE-Gx Directives 22436------------------------- 22437 22438'.align EXPRESSION [, EXPRESSION]' 22439 This is the generic .ALIGN directive. The first argument is the 22440 requested alignment in bytes. 22441 22442'.allow_suspicious_bundles' 22443 Turns on error checking for combinations of instructions in a 22444 bundle that probably indicate a programming error. This is on by 22445 default. 22446 22447'.no_allow_suspicious_bundles' 22448 Turns off error checking for combinations of instructions in a 22449 bundle that probably indicate a programming error. 22450 22451'.require_canonical_reg_names' 22452 Require that canonical register names be used, and emit a warning 22453 if the numeric names are used. This is on by default. 22454 22455'.no_require_canonical_reg_names' 22456 Permit the use of numeric names for registers that have canonical 22457 names. 22458 22459 22460File: as.info, Node: TILEPro-Dependent, Next: V850-Dependent, Prev: TILE-Gx-Dependent, Up: Machine Dependencies 22461 224629.48 TILEPro Dependent Features 22463=============================== 22464 22465* Menu: 22466 22467* TILEPro Options:: TILEPro Options 22468* TILEPro Syntax:: TILEPro Syntax 22469* TILEPro Directives:: TILEPro Directives 22470 22471 22472File: as.info, Node: TILEPro Options, Next: TILEPro Syntax, Up: TILEPro-Dependent 22473 224749.48.1 Options 22475-------------- 22476 22477'as' has no machine-dependent command-line options for TILEPro. 22478 22479 22480File: as.info, Node: TILEPro Syntax, Next: TILEPro Directives, Prev: TILEPro Options, Up: TILEPro-Dependent 22481 224829.48.2 Syntax 22483------------- 22484 22485Block comments are delimited by '/*' and '*/'. End of line comments may 22486be introduced by '#'. 22487 22488 Instructions consist of a leading opcode or macro name followed by 22489whitespace and an optional comma-separated list of operands: 22490 22491 OPCODE [OPERAND, ...] 22492 22493 Instructions must be separated by a newline or semicolon. 22494 22495 There are two ways to write code: either write naked instructions, 22496which the assembler is free to combine into VLIW bundles, or specify the 22497VLIW bundles explicitly. 22498 22499 Bundles are specified using curly braces: 22500 22501 { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 } 22502 22503 A bundle can span multiple lines. If you want to put multiple 22504instructions on a line, whether in a bundle or not, you need to separate 22505them with semicolons as in this example. 22506 22507 A bundle may contain one or more instructions, up to the limit 22508specified by the ISA (currently three). If fewer instructions are 22509specified than the hardware supports in a bundle, the assembler inserts 22510'fnop' instructions automatically. 22511 22512 The assembler will prefer to preserve the ordering of instructions 22513within the bundle, putting the first instruction in a lower-numbered 22514pipeline than the next one, etc. This fact, combined with the optional 22515use of explicit 'fnop' or 'nop' instructions, allows precise control 22516over which pipeline executes each instruction. 22517 22518 If the instructions cannot be bundled in the listed order, the 22519assembler will automatically try to find a valid pipeline assignment. 22520If there is no way to bundle the instructions together, the assembler 22521reports an error. 22522 22523 The assembler does not yet auto-bundle (automatically combine 22524multiple instructions into one bundle), but it reserves the right to do 22525so in the future. If you want to force an instruction to run by itself, 22526put it in a bundle explicitly with curly braces and use 'nop' 22527instructions (not 'fnop') to fill the remaining pipeline slots in that 22528bundle. 22529 22530* Menu: 22531 22532* TILEPro Opcodes:: Opcode Naming Conventions. 22533* TILEPro Registers:: Register Naming. 22534* TILEPro Modifiers:: Symbolic Operand Modifiers. 22535 22536 22537File: as.info, Node: TILEPro Opcodes, Next: TILEPro Registers, Up: TILEPro Syntax 22538 225399.48.2.1 Opcode Names 22540..................... 22541 22542For a complete list of opcodes and descriptions of their semantics, see 22543'TILE Processor User Architecture Manual', available upon request at 22544www.tilera.com. 22545 22546 22547File: as.info, Node: TILEPro Registers, Next: TILEPro Modifiers, Prev: TILEPro Opcodes, Up: TILEPro Syntax 22548 225499.48.2.2 Register Names 22550....................... 22551 22552General-purpose registers are represented by predefined symbols of the 22553form 'rN', where N represents a number between '0' and '63'. However, 22554the following registers have canonical names that must be used instead: 22555 22556'r54' 22557 sp 22558 22559'r55' 22560 lr 22561 22562'r56' 22563 sn 22564 22565'r57' 22566 idn0 22567 22568'r58' 22569 idn1 22570 22571'r59' 22572 udn0 22573 22574'r60' 22575 udn1 22576 22577'r61' 22578 udn2 22579 22580'r62' 22581 udn3 22582 22583'r63' 22584 zero 22585 22586 The assembler will emit a warning if a numeric name is used instead 22587of the canonical name. The '.no_require_canonical_reg_names' assembler 22588pseudo-op turns off this warning. '.require_canonical_reg_names' turns 22589it back on. 22590 22591 22592File: as.info, Node: TILEPro Modifiers, Prev: TILEPro Registers, Up: TILEPro Syntax 22593 225949.48.2.3 Symbolic Operand Modifiers 22595................................... 22596 22597The assembler supports several modifiers when using symbol addresses in 22598TILEPro instruction operands. The general syntax is the following: 22599 22600 modifier(symbol) 22601 22602 The following modifiers are supported: 22603 22604'lo16' 22605 22606 This modifier is used to load the low 16 bits of the symbol's 22607 address, sign-extended to a 32-bit value (sign-extension allows it 22608 to be range-checked against signed 16 bit immediate operands 22609 without complaint). 22610 22611'hi16' 22612 22613 This modifier is used to load the high 16 bits of the symbol's 22614 address, also sign-extended to a 32-bit value. 22615 22616'ha16' 22617 22618 'ha16(N)' is identical to 'hi16(N)', except if 'lo16(N)' is 22619 negative it adds one to the 'hi16(N)' value. This way 'lo16' and 22620 'ha16' can be added to create any 32-bit value using 'auli'. For 22621 example, here is how you move an arbitrary 32-bit address into r3: 22622 22623 moveli r3, lo16(sym) 22624 auli r3, r3, ha16(sym) 22625 22626'got' 22627 22628 This modifier is used to load the offset of the GOT entry 22629 corresponding to the symbol. 22630 22631'got_lo16' 22632 22633 This modifier is used to load the sign-extended low 16 bits of the 22634 offset of the GOT entry corresponding to the symbol. 22635 22636'got_hi16' 22637 22638 This modifier is used to load the sign-extended high 16 bits of the 22639 offset of the GOT entry corresponding to the symbol. 22640 22641'got_ha16' 22642 22643 This modifier is like 'got_hi16', but it adds one if 'got_lo16' of 22644 the input value is negative. 22645 22646'plt' 22647 22648 This modifier is used for function symbols. It causes a _procedure 22649 linkage table_, an array of code stubs, to be created at the time 22650 the shared object is created or linked against, together with a 22651 global offset table entry. The value is a pc-relative offset to 22652 the corresponding stub code in the procedure linkage table. This 22653 arrangement causes the run-time symbol resolver to be called to 22654 look up and set the value of the symbol the first time the function 22655 is called (at latest; depending environment variables). It is only 22656 safe to leave the symbol unresolved this way if all references are 22657 function calls. 22658 22659'tls_gd' 22660 22661 This modifier is used to load the offset of the GOT entry of the 22662 symbol's TLS descriptor, to be used for general-dynamic TLS 22663 accesses. 22664 22665'tls_gd_lo16' 22666 22667 This modifier is used to load the sign-extended low 16 bits of the 22668 offset of the GOT entry of the symbol's TLS descriptor, to be used 22669 for general dynamic TLS accesses. 22670 22671'tls_gd_hi16' 22672 22673 This modifier is used to load the sign-extended high 16 bits of the 22674 offset of the GOT entry of the symbol's TLS descriptor, to be used 22675 for general dynamic TLS accesses. 22676 22677'tls_gd_ha16' 22678 22679 This modifier is like 'tls_gd_hi16', but it adds one to the value 22680 if 'tls_gd_lo16' of the input value is negative. 22681 22682'tls_ie' 22683 22684 This modifier is used to load the offset of the GOT entry 22685 containing the offset of the symbol's address from the TCB, to be 22686 used for initial-exec TLS accesses. 22687 22688'tls_ie_lo16' 22689 22690 This modifier is used to load the low 16 bits of the offset of the 22691 GOT entry containing the offset of the symbol's address from the 22692 TCB, to be used for initial-exec TLS accesses. 22693 22694'tls_ie_hi16' 22695 22696 This modifier is used to load the high 16 bits of the offset of the 22697 GOT entry containing the offset of the symbol's address from the 22698 TCB, to be used for initial-exec TLS accesses. 22699 22700'tls_ie_ha16' 22701 22702 This modifier is like 'tls_ie_hi16', but it adds one to the value 22703 if 'tls_ie_lo16' of the input value is negative. 22704 22705'tls_le' 22706 22707 This modifier is used to load the offset of the symbol's address 22708 from the TCB, to be used for local-exec TLS accesses. 22709 22710'tls_le_lo16' 22711 22712 This modifier is used to load the low 16 bits of the offset of the 22713 symbol's address from the TCB, to be used for local-exec TLS 22714 accesses. 22715 22716'tls_le_hi16' 22717 22718 This modifier is used to load the high 16 bits of the offset of the 22719 symbol's address from the TCB, to be used for local-exec TLS 22720 accesses. 22721 22722'tls_le_ha16' 22723 22724 This modifier is like 'tls_le_hi16', but it adds one to the value 22725 if 'tls_le_lo16' of the input value is negative. 22726 22727'tls_gd_call' 22728 22729 This modifier is used to tag an instruction as the "call" part of a 22730 calling sequence for a TLS GD reference of its operand. 22731 22732'tls_gd_add' 22733 22734 This modifier is used to tag an instruction as the "add" part of a 22735 calling sequence for a TLS GD reference of its operand. 22736 22737'tls_ie_load' 22738 22739 This modifier is used to tag an instruction as the "load" part of a 22740 calling sequence for a TLS IE reference of its operand. 22741 22742 22743File: as.info, Node: TILEPro Directives, Prev: TILEPro Syntax, Up: TILEPro-Dependent 22744 227459.48.3 TILEPro Directives 22746------------------------- 22747 22748'.align EXPRESSION [, EXPRESSION]' 22749 This is the generic .ALIGN directive. The first argument is the 22750 requested alignment in bytes. 22751 22752'.allow_suspicious_bundles' 22753 Turns on error checking for combinations of instructions in a 22754 bundle that probably indicate a programming error. This is on by 22755 default. 22756 22757'.no_allow_suspicious_bundles' 22758 Turns off error checking for combinations of instructions in a 22759 bundle that probably indicate a programming error. 22760 22761'.require_canonical_reg_names' 22762 Require that canonical register names be used, and emit a warning 22763 if the numeric names are used. This is on by default. 22764 22765'.no_require_canonical_reg_names' 22766 Permit the use of numeric names for registers that have canonical 22767 names. 22768 22769 22770File: as.info, Node: V850-Dependent, Next: Vax-Dependent, Prev: TILEPro-Dependent, Up: Machine Dependencies 22771 227729.49 v850 Dependent Features 22773============================ 22774 22775* Menu: 22776 22777* V850 Options:: Options 22778* V850 Syntax:: Syntax 22779* V850 Floating Point:: Floating Point 22780* V850 Directives:: V850 Machine Directives 22781* V850 Opcodes:: Opcodes 22782 22783 22784File: as.info, Node: V850 Options, Next: V850 Syntax, Up: V850-Dependent 22785 227869.49.1 Options 22787-------------- 22788 22789'as' supports the following additional command-line options for the V850 22790processor family: 22791 22792'-wsigned_overflow' 22793 Causes warnings to be produced when signed immediate values 22794 overflow the space available for then within their opcodes. By 22795 default this option is disabled as it is possible to receive 22796 spurious warnings due to using exact bit patterns as immediate 22797 constants. 22798 22799'-wunsigned_overflow' 22800 Causes warnings to be produced when unsigned immediate values 22801 overflow the space available for then within their opcodes. By 22802 default this option is disabled as it is possible to receive 22803 spurious warnings due to using exact bit patterns as immediate 22804 constants. 22805 22806'-mv850' 22807 Specifies that the assembled code should be marked as being 22808 targeted at the V850 processor. This allows the linker to detect 22809 attempts to link such code with code assembled for other 22810 processors. 22811 22812'-mv850e' 22813 Specifies that the assembled code should be marked as being 22814 targeted at the V850E processor. This allows the linker to detect 22815 attempts to link such code with code assembled for other 22816 processors. 22817 22818'-mv850e1' 22819 Specifies that the assembled code should be marked as being 22820 targeted at the V850E1 processor. This allows the linker to detect 22821 attempts to link such code with code assembled for other 22822 processors. 22823 22824'-mv850any' 22825 Specifies that the assembled code should be marked as being 22826 targeted at the V850 processor but support instructions that are 22827 specific to the extended variants of the process. This allows the 22828 production of binaries that contain target specific code, but which 22829 are also intended to be used in a generic fashion. For example 22830 libgcc.a contains generic routines used by the code produced by GCC 22831 for all versions of the v850 architecture, together with support 22832 routines only used by the V850E architecture. 22833 22834'-mv850e2' 22835 Specifies that the assembled code should be marked as being 22836 targeted at the V850E2 processor. This allows the linker to detect 22837 attempts to link such code with code assembled for other 22838 processors. 22839 22840'-mv850e2v3' 22841 Specifies that the assembled code should be marked as being 22842 targeted at the V850E2V3 processor. This allows the linker to 22843 detect attempts to link such code with code assembled for other 22844 processors. 22845 22846'-mv850e2v4' 22847 This is an alias for '-mv850e3v5'. 22848 22849'-mv850e3v5' 22850 Specifies that the assembled code should be marked as being 22851 targeted at the V850E3V5 processor. This allows the linker to 22852 detect attempts to link such code with code assembled for other 22853 processors. 22854 22855'-mrelax' 22856 Enables relaxation. This allows the .longcall and .longjump pseudo 22857 ops to be used in the assembler source code. These ops label 22858 sections of code which are either a long function call or a long 22859 branch. The assembler will then flag these sections of code and 22860 the linker will attempt to relax them. 22861 22862'-mgcc-abi' 22863 Marks the generated object file as supporting the old GCC ABI. 22864 22865'-mrh850-abi' 22866 Marks the generated object file as supporting the RH850 ABI. This 22867 is the default. 22868 22869'-m8byte-align' 22870 Marks the generated object file as supporting a maximum 64-bits of 22871 alignment for variables defined in the source code. 22872 22873'-m4byte-align' 22874 Marks the generated object file as supporting a maximum 32-bits of 22875 alignment for variables defined in the source code. This is the 22876 default. 22877 22878'-msoft-float' 22879 Marks the generated object file as not using any floating point 22880 instructions - and hence can be linked with other V850 binaries 22881 that do or do not use floating point. This is the default for 22882 binaries for architectures earlier than the 'e2v3'. 22883 22884'-mhard-float' 22885 Marks the generated object file as one that uses floating point 22886 instructions - and hence can only be linked with other V850 22887 binaries that use the same kind of floating point instructions, or 22888 with binaries that do not use floating point at all. This is the 22889 default for binaries the 'e2v3' and later architectures. 22890 22891 22892File: as.info, Node: V850 Syntax, Next: V850 Floating Point, Prev: V850 Options, Up: V850-Dependent 22893 228949.49.2 Syntax 22895------------- 22896 22897* Menu: 22898 22899* V850-Chars:: Special Characters 22900* V850-Regs:: Register Names 22901 22902 22903File: as.info, Node: V850-Chars, Next: V850-Regs, Up: V850 Syntax 22904 229059.49.2.1 Special Characters 22906........................... 22907 22908'#' is the line comment character. If a '#' appears as the first 22909character of a line, the whole line is treated as a comment, but in this 22910case the line can also be a logical line number directive (*note 22911Comments::) or a preprocessor control command (*note Preprocessing::). 22912 22913 Two dashes ('--') can also be used to start a line comment. 22914 22915 The ';' character can be used to separate statements on the same 22916line. 22917 22918 22919File: as.info, Node: V850-Regs, Prev: V850-Chars, Up: V850 Syntax 22920 229219.49.2.2 Register Names 22922....................... 22923 22924'as' supports the following names for registers: 22925'general register 0' 22926 r0, zero 22927'general register 1' 22928 r1 22929'general register 2' 22930 r2, hp 22931'general register 3' 22932 r3, sp 22933'general register 4' 22934 r4, gp 22935'general register 5' 22936 r5, tp 22937'general register 6' 22938 r6 22939'general register 7' 22940 r7 22941'general register 8' 22942 r8 22943'general register 9' 22944 r9 22945'general register 10' 22946 r10 22947'general register 11' 22948 r11 22949'general register 12' 22950 r12 22951'general register 13' 22952 r13 22953'general register 14' 22954 r14 22955'general register 15' 22956 r15 22957'general register 16' 22958 r16 22959'general register 17' 22960 r17 22961'general register 18' 22962 r18 22963'general register 19' 22964 r19 22965'general register 20' 22966 r20 22967'general register 21' 22968 r21 22969'general register 22' 22970 r22 22971'general register 23' 22972 r23 22973'general register 24' 22974 r24 22975'general register 25' 22976 r25 22977'general register 26' 22978 r26 22979'general register 27' 22980 r27 22981'general register 28' 22982 r28 22983'general register 29' 22984 r29 22985'general register 30' 22986 r30, ep 22987'general register 31' 22988 r31, lp 22989'system register 0' 22990 eipc 22991'system register 1' 22992 eipsw 22993'system register 2' 22994 fepc 22995'system register 3' 22996 fepsw 22997'system register 4' 22998 ecr 22999'system register 5' 23000 psw 23001'system register 16' 23002 ctpc 23003'system register 17' 23004 ctpsw 23005'system register 18' 23006 dbpc 23007'system register 19' 23008 dbpsw 23009'system register 20' 23010 ctbp 23011 23012 23013File: as.info, Node: V850 Floating Point, Next: V850 Directives, Prev: V850 Syntax, Up: V850-Dependent 23014 230159.49.3 Floating Point 23016--------------------- 23017 23018The V850 family uses IEEE floating-point numbers. 23019 23020 23021File: as.info, Node: V850 Directives, Next: V850 Opcodes, Prev: V850 Floating Point, Up: V850-Dependent 23022 230239.49.4 V850 Machine Directives 23024------------------------------ 23025 23026'.offset <EXPRESSION>' 23027 Moves the offset into the current section to the specified amount. 23028 23029'.section "name", <type>' 23030 This is an extension to the standard .section directive. It sets 23031 the current section to be <type> and creates an alias for this 23032 section called "name". 23033 23034'.v850' 23035 Specifies that the assembled code should be marked as being 23036 targeted at the V850 processor. This allows the linker to detect 23037 attempts to link such code with code assembled for other 23038 processors. 23039 23040'.v850e' 23041 Specifies that the assembled code should be marked as being 23042 targeted at the V850E processor. This allows the linker to detect 23043 attempts to link such code with code assembled for other 23044 processors. 23045 23046'.v850e1' 23047 Specifies that the assembled code should be marked as being 23048 targeted at the V850E1 processor. This allows the linker to detect 23049 attempts to link such code with code assembled for other 23050 processors. 23051 23052'.v850e2' 23053 Specifies that the assembled code should be marked as being 23054 targeted at the V850E2 processor. This allows the linker to detect 23055 attempts to link such code with code assembled for other 23056 processors. 23057 23058'.v850e2v3' 23059 Specifies that the assembled code should be marked as being 23060 targeted at the V850E2V3 processor. This allows the linker to 23061 detect attempts to link such code with code assembled for other 23062 processors. 23063 23064'.v850e2v4' 23065 Specifies that the assembled code should be marked as being 23066 targeted at the V850E3V5 processor. This allows the linker to 23067 detect attempts to link such code with code assembled for other 23068 processors. 23069 23070'.v850e3v5' 23071 Specifies that the assembled code should be marked as being 23072 targeted at the V850E3V5 processor. This allows the linker to 23073 detect attempts to link such code with code assembled for other 23074 processors. 23075 23076 23077File: as.info, Node: V850 Opcodes, Prev: V850 Directives, Up: V850-Dependent 23078 230799.49.5 Opcodes 23080-------------- 23081 23082'as' implements all the standard V850 opcodes. 23083 23084 'as' also implements the following pseudo ops: 23085 23086'hi0()' 23087 Computes the higher 16 bits of the given expression and stores it 23088 into the immediate operand field of the given instruction. For 23089 example: 23090 23091 'mulhi hi0(here - there), r5, r6' 23092 23093 computes the difference between the address of labels 'here' and 23094 'there', takes the upper 16 bits of this difference, shifts it down 23095 16 bits and then multiplies it by the lower 16 bits in register 5, 23096 putting the result into register 6. 23097 23098'lo()' 23099 Computes the lower 16 bits of the given expression and stores it 23100 into the immediate operand field of the given instruction. For 23101 example: 23102 23103 'addi lo(here - there), r5, r6' 23104 23105 computes the difference between the address of labels 'here' and 23106 'there', takes the lower 16 bits of this difference and adds it to 23107 register 5, putting the result into register 6. 23108 23109'hi()' 23110 Computes the higher 16 bits of the given expression and then adds 23111 the value of the most significant bit of the lower 16 bits of the 23112 expression and stores the result into the immediate operand field 23113 of the given instruction. For example the following code can be 23114 used to compute the address of the label 'here' and store it into 23115 register 6: 23116 23117 'movhi hi(here), r0, r6' 'movea lo(here), r6, r6' 23118 23119 The reason for this special behaviour is that movea performs a sign 23120 extension on its immediate operand. So for example if the address 23121 of 'here' was 0xFFFFFFFF then without the special behaviour of the 23122 hi() pseudo-op the movhi instruction would put 0xFFFF0000 into r6, 23123 then the movea instruction would takes its immediate operand, 23124 0xFFFF, sign extend it to 32 bits, 0xFFFFFFFF, and then add it into 23125 r6 giving 0xFFFEFFFF which is wrong (the fifth nibble is E). With 23126 the hi() pseudo op adding in the top bit of the lo() pseudo op, the 23127 movhi instruction actually stores 0 into r6 (0xFFFF + 1 = 0x0000), 23128 so that the movea instruction stores 0xFFFFFFFF into r6 - the right 23129 value. 23130 23131'hilo()' 23132 Computes the 32 bit value of the given expression and stores it 23133 into the immediate operand field of the given instruction (which 23134 must be a mov instruction). For example: 23135 23136 'mov hilo(here), r6' 23137 23138 computes the absolute address of label 'here' and puts the result 23139 into register 6. 23140 23141'sdaoff()' 23142 Computes the offset of the named variable from the start of the 23143 Small Data Area (whose address is held in register 4, the GP 23144 register) and stores the result as a 16 bit signed value in the 23145 immediate operand field of the given instruction. For example: 23146 23147 'ld.w sdaoff(_a_variable)[gp],r6' 23148 23149 loads the contents of the location pointed to by the label 23150 '_a_variable' into register 6, provided that the label is located 23151 somewhere within +/- 32K of the address held in the GP register. 23152 [Note the linker assumes that the GP register contains a fixed 23153 address set to the address of the label called '__gp'. This can 23154 either be set up automatically by the linker, or specifically set 23155 by using the '--defsym __gp=<value>' command-line option]. 23156 23157'tdaoff()' 23158 Computes the offset of the named variable from the start of the 23159 Tiny Data Area (whose address is held in register 30, the EP 23160 register) and stores the result as a 4,5, 7 or 8 bit unsigned value 23161 in the immediate operand field of the given instruction. For 23162 example: 23163 23164 'sld.w tdaoff(_a_variable)[ep],r6' 23165 23166 loads the contents of the location pointed to by the label 23167 '_a_variable' into register 6, provided that the label is located 23168 somewhere within +256 bytes of the address held in the EP register. 23169 [Note the linker assumes that the EP register contains a fixed 23170 address set to the address of the label called '__ep'. This can 23171 either be set up automatically by the linker, or specifically set 23172 by using the '--defsym __ep=<value>' command-line option]. 23173 23174'zdaoff()' 23175 Computes the offset of the named variable from address 0 and stores 23176 the result as a 16 bit signed value in the immediate operand field 23177 of the given instruction. For example: 23178 23179 'movea zdaoff(_a_variable),zero,r6' 23180 23181 puts the address of the label '_a_variable' into register 6, 23182 assuming that the label is somewhere within the first 32K of 23183 memory. (Strictly speaking it also possible to access the last 32K 23184 of memory as well, as the offsets are signed). 23185 23186'ctoff()' 23187 Computes the offset of the named variable from the start of the 23188 Call Table Area (whose address is held in system register 20, the 23189 CTBP register) and stores the result a 6 or 16 bit unsigned value 23190 in the immediate field of then given instruction or piece of data. 23191 For example: 23192 23193 'callt ctoff(table_func1)' 23194 23195 will put the call the function whose address is held in the call 23196 table at the location labeled 'table_func1'. 23197 23198'.longcall name' 23199 Indicates that the following sequence of instructions is a long 23200 call to function 'name'. The linker will attempt to shorten this 23201 call sequence if 'name' is within a 22bit offset of the call. Only 23202 valid if the '-mrelax' command-line switch has been enabled. 23203 23204'.longjump name' 23205 Indicates that the following sequence of instructions is a long 23206 jump to label 'name'. The linker will attempt to shorten this code 23207 sequence if 'name' is within a 22bit offset of the jump. Only 23208 valid if the '-mrelax' command-line switch has been enabled. 23209 23210 For information on the V850 instruction set, see 'V850 Family 2321132-/16-Bit single-Chip Microcontroller Architecture Manual' from NEC. 23212Ltd. 23213 23214 23215File: as.info, Node: Vax-Dependent, Next: Visium-Dependent, Prev: V850-Dependent, Up: Machine Dependencies 23216 232179.50 VAX Dependent Features 23218=========================== 23219 23220* Menu: 23221 23222* VAX-Opts:: VAX Command-Line Options 23223* VAX-float:: VAX Floating Point 23224* VAX-directives:: Vax Machine Directives 23225* VAX-opcodes:: VAX Opcodes 23226* VAX-branch:: VAX Branch Improvement 23227* VAX-operands:: VAX Operands 23228* VAX-no:: Not Supported on VAX 23229* VAX-Syntax:: VAX Syntax 23230 23231 23232File: as.info, Node: VAX-Opts, Next: VAX-float, Up: Vax-Dependent 23233 232349.50.1 VAX Command-Line Options 23235------------------------------- 23236 23237The Vax version of 'as' accepts any of the following options, gives a 23238warning message that the option was ignored and proceeds. These options 23239are for compatibility with scripts designed for other people's 23240assemblers. 23241 23242'-D (Debug)' 23243'-S (Symbol Table)' 23244'-T (Token Trace)' 23245 These are obsolete options used to debug old assemblers. 23246 23247'-d (Displacement size for JUMPs)' 23248 This option expects a number following the '-d'. Like options that 23249 expect filenames, the number may immediately follow the '-d' (old 23250 standard) or constitute the whole of the command-line argument that 23251 follows '-d' (GNU standard). 23252 23253'-V (Virtualize Interpass Temporary File)' 23254 Some other assemblers use a temporary file. This option commanded 23255 them to keep the information in active memory rather than in a disk 23256 file. 'as' always does this, so this option is redundant. 23257 23258'-J (JUMPify Longer Branches)' 23259 Many 32-bit computers permit a variety of branch instructions to do 23260 the same job. Some of these instructions are short (and fast) but 23261 have a limited range; others are long (and slow) but can branch 23262 anywhere in virtual memory. Often there are 3 flavors of branch: 23263 short, medium and long. Some other assemblers would emit short and 23264 medium branches, unless told by this option to emit short and long 23265 branches. 23266 23267'-t (Temporary File Directory)' 23268 Some other assemblers may use a temporary file, and this option 23269 takes a filename being the directory to site the temporary file. 23270 Since 'as' does not use a temporary disk file, this option makes no 23271 difference. '-t' needs exactly one filename. 23272 23273 The Vax version of the assembler accepts additional options when 23274compiled for VMS: 23275 23276'-h N' 23277 External symbol or section (used for global variables) names are 23278 not case sensitive on VAX/VMS and always mapped to upper case. 23279 This is contrary to the C language definition which explicitly 23280 distinguishes upper and lower case. To implement a standard 23281 conforming C compiler, names must be changed (mapped) to preserve 23282 the case information. The default mapping is to convert all lower 23283 case characters to uppercase and adding an underscore followed by a 23284 6 digit hex value, representing a 24 digit binary value. The one 23285 digits in the binary value represent which characters are uppercase 23286 in the original symbol name. 23287 23288 The '-h N' option determines how we map names. This takes several 23289 values. No '-h' switch at all allows case hacking as described 23290 above. A value of zero ('-h0') implies names should be upper case, 23291 and inhibits the case hack. A value of 2 ('-h2') implies names 23292 should be all lower case, with no case hack. A value of 3 ('-h3') 23293 implies that case should be preserved. The value 1 is unused. The 23294 '-H' option directs 'as' to display every mapped symbol during 23295 assembly. 23296 23297 Symbols whose names include a dollar sign '$' are exceptions to the 23298 general name mapping. These symbols are normally only used to 23299 reference VMS library names. Such symbols are always mapped to 23300 upper case. 23301 23302'-+' 23303 The '-+' option causes 'as' to truncate any symbol name larger than 23304 31 characters. The '-+' option also prevents some code following 23305 the '_main' symbol normally added to make the object file 23306 compatible with Vax-11 "C". 23307 23308'-1' 23309 This option is ignored for backward compatibility with 'as' version 23310 1.x. 23311 23312'-H' 23313 The '-H' option causes 'as' to print every symbol which was changed 23314 by case mapping. 23315 23316 23317File: as.info, Node: VAX-float, Next: VAX-directives, Prev: VAX-Opts, Up: Vax-Dependent 23318 233199.50.2 VAX Floating Point 23320------------------------- 23321 23322Conversion of flonums to floating point is correct, and compatible with 23323previous assemblers. Rounding is towards zero if the remainder is 23324exactly half the least significant bit. 23325 23326 'D', 'F', 'G' and 'H' floating point formats are understood. 23327 23328 Immediate floating literals (_e.g._ 'S`$6.9') are rendered 23329correctly. Again, rounding is towards zero in the boundary case. 23330 23331 The '.float' directive produces 'f' format numbers. The '.double' 23332directive produces 'd' format numbers. 23333 23334 23335File: as.info, Node: VAX-directives, Next: VAX-opcodes, Prev: VAX-float, Up: Vax-Dependent 23336 233379.50.3 Vax Machine Directives 23338----------------------------- 23339 23340The Vax version of the assembler supports four directives for generating 23341Vax floating point constants. They are described in the table below. 23342 23343'.dfloat' 23344 This expects zero or more flonums, separated by commas, and 23345 assembles Vax 'd' format 64-bit floating point constants. 23346 23347'.ffloat' 23348 This expects zero or more flonums, separated by commas, and 23349 assembles Vax 'f' format 32-bit floating point constants. 23350 23351'.gfloat' 23352 This expects zero or more flonums, separated by commas, and 23353 assembles Vax 'g' format 64-bit floating point constants. 23354 23355'.hfloat' 23356 This expects zero or more flonums, separated by commas, and 23357 assembles Vax 'h' format 128-bit floating point constants. 23358 23359 23360File: as.info, Node: VAX-opcodes, Next: VAX-branch, Prev: VAX-directives, Up: Vax-Dependent 23361 233629.50.4 VAX Opcodes 23363------------------ 23364 23365All DEC mnemonics are supported. Beware that 'case...' instructions 23366have exactly 3 operands. The dispatch table that follows the 'case...' 23367instruction should be made with '.word' statements. This is compatible 23368with all unix assemblers we know of. 23369 23370 23371File: as.info, Node: VAX-branch, Next: VAX-operands, Prev: VAX-opcodes, Up: Vax-Dependent 23372 233739.50.5 VAX Branch Improvement 23374----------------------------- 23375 23376Certain pseudo opcodes are permitted. They are for branch instructions. 23377They expand to the shortest branch instruction that reaches the target. 23378Generally these mnemonics are made by substituting 'j' for 'b' at the 23379start of a DEC mnemonic. This feature is included both for 23380compatibility and to help compilers. If you do not need this feature, 23381avoid these opcodes. Here are the mnemonics, and the code they can 23382expand into. 23383 23384'jbsb' 23385 'Jsb' is already an instruction mnemonic, so we chose 'jbsb'. 23386 (byte displacement) 23387 'bsbb ...' 23388 (word displacement) 23389 'bsbw ...' 23390 (long displacement) 23391 'jsb ...' 23392'jbr' 23393'jr' 23394 Unconditional branch. 23395 (byte displacement) 23396 'brb ...' 23397 (word displacement) 23398 'brw ...' 23399 (long displacement) 23400 'jmp ...' 23401'jCOND' 23402 COND may be any one of the conditional branches 'neq', 'nequ', 23403 'eql', 'eqlu', 'gtr', 'geq', 'lss', 'gtru', 'lequ', 'vc', 'vs', 23404 'gequ', 'cc', 'lssu', 'cs'. COND may also be one of the bit tests 23405 'bs', 'bc', 'bss', 'bcs', 'bsc', 'bcc', 'bssi', 'bcci', 'lbs', 23406 'lbc'. NOTCOND is the opposite condition to COND. 23407 (byte displacement) 23408 'bCOND ...' 23409 (word displacement) 23410 'bNOTCOND foo ; brw ... ; foo:' 23411 (long displacement) 23412 'bNOTCOND foo ; jmp ... ; foo:' 23413'jacbX' 23414 X may be one of 'b d f g h l w'. 23415 (word displacement) 23416 'OPCODE ...' 23417 (long displacement) 23418 OPCODE ..., foo ; 23419 brb bar ; 23420 foo: jmp ... ; 23421 bar: 23422'jaobYYY' 23423 YYY may be one of 'lss leq'. 23424'jsobZZZ' 23425 ZZZ may be one of 'geq gtr'. 23426 (byte displacement) 23427 'OPCODE ...' 23428 (word displacement) 23429 OPCODE ..., foo ; 23430 brb bar ; 23431 foo: brw DESTINATION ; 23432 bar: 23433 (long displacement) 23434 OPCODE ..., foo ; 23435 brb bar ; 23436 foo: jmp DESTINATION ; 23437 bar: 23438'aobleq' 23439'aoblss' 23440'sobgeq' 23441'sobgtr' 23442 (byte displacement) 23443 'OPCODE ...' 23444 (word displacement) 23445 OPCODE ..., foo ; 23446 brb bar ; 23447 foo: brw DESTINATION ; 23448 bar: 23449 (long displacement) 23450 OPCODE ..., foo ; 23451 brb bar ; 23452 foo: jmp DESTINATION ; 23453 bar: 23454 23455 23456File: as.info, Node: VAX-operands, Next: VAX-no, Prev: VAX-branch, Up: Vax-Dependent 23457 234589.50.6 VAX Operands 23459------------------- 23460 23461The immediate character is '$' for Unix compatibility, not '#' as DEC 23462writes it. 23463 23464 The indirect character is '*' for Unix compatibility, not '@' as DEC 23465writes it. 23466 23467 The displacement sizing character is '`' (an accent grave) for Unix 23468compatibility, not '^' as DEC writes it. The letter preceding '`' may 23469have either case. 'G' is not understood, but all other letters ('b i l 23470s w') are understood. 23471 23472 Register names understood are 'r0 r1 r2 ... r15 ap fp sp pc'. Upper 23473and lower case letters are equivalent. 23474 23475 For instance 23476 tstb *w`$4(r5) 23477 23478 Any expression is permitted in an operand. Operands are comma 23479separated. 23480 23481 23482File: as.info, Node: VAX-no, Next: VAX-Syntax, Prev: VAX-operands, Up: Vax-Dependent 23483 234849.50.7 Not Supported on VAX 23485--------------------------- 23486 23487Vax bit fields can not be assembled with 'as'. Someone can add the 23488required code if they really need it. 23489 23490 23491File: as.info, Node: VAX-Syntax, Prev: VAX-no, Up: Vax-Dependent 23492 234939.50.8 VAX Syntax 23494----------------- 23495 23496* Menu: 23497 23498* VAX-Chars:: Special Characters 23499 23500 23501File: as.info, Node: VAX-Chars, Up: VAX-Syntax 23502 235039.50.8.1 Special Characters 23504........................... 23505 23506The presence of a '#' appearing anywhere on a line indicates the start 23507of a comment that extends to the end of that line. 23508 23509 If a '#' appears as the first character of a line then the whole line 23510is treated as a comment, but in this case the line can also be a logical 23511line number directive (*note Comments::) or a preprocessor control 23512command (*note Preprocessing::). 23513 23514 The ';' character can be used to separate statements on the same 23515line. 23516 23517 23518File: as.info, Node: Visium-Dependent, Next: WebAssembly-Dependent, Prev: Vax-Dependent, Up: Machine Dependencies 23519 235209.51 Visium Dependent Features 23521============================== 23522 23523* Menu: 23524 23525* Visium Options:: Options 23526* Visium Syntax:: Syntax 23527* Visium Opcodes:: Opcodes 23528 23529 23530File: as.info, Node: Visium Options, Next: Visium Syntax, Up: Visium-Dependent 23531 235329.51.1 Options 23533-------------- 23534 23535The Visium assembler implements one machine-specific option: 23536 23537'-mtune=ARCH' 23538 This option specifies the target architecture. If an attempt is 23539 made to assemble an instruction that will not execute on the target 23540 architecture, the assembler will issue an error message. 23541 23542 The following names are recognized: 'mcm24' 'mcm' 'gr5' 'gr6' 23543 23544 23545File: as.info, Node: Visium Syntax, Next: Visium Opcodes, Prev: Visium Options, Up: Visium-Dependent 23546 235479.51.2 Syntax 23548------------- 23549 23550* Menu: 23551 23552* Visium Characters:: Special Characters 23553* Visium Registers:: Register Names 23554 23555 23556File: as.info, Node: Visium Characters, Next: Visium Registers, Up: Visium Syntax 23557 235589.51.2.1 Special Characters 23559........................... 23560 23561Line comments are introduced either by the '!' character or by the ';' 23562character appearing anywhere on a line. 23563 23564 A hash character ('#') as the first character on a line also marks 23565the start of a line comment, but in this case it could also be a logical 23566line number directive (*note Comments::) or a preprocessor control 23567command (*note Preprocessing::). 23568 23569 The Visium assembler does not currently support a line separator 23570character. 23571 23572 23573File: as.info, Node: Visium Registers, Prev: Visium Characters, Up: Visium Syntax 23574 235759.51.2.2 Register Names 23576....................... 23577 23578Registers can be specified either by using their canonical mnemonic 23579names or by using their alias if they have one, for example 'sp'. 23580 23581 23582File: as.info, Node: Visium Opcodes, Prev: Visium Syntax, Up: Visium-Dependent 23583 235849.51.3 Opcodes 23585-------------- 23586 23587All the standard opcodes of the architecture are implemented, along with 23588the following three pseudo-instructions: 'cmp', 'cmpc', 'move'. 23589 23590 In addition, the following two illegal opcodes are implemented and 23591used by the simulation: 23592 23593 stop 5-bit immediate, SourceA 23594 trace 5-bit immediate, SourceA 23595 23596 23597File: as.info, Node: WebAssembly-Dependent, Next: XGATE-Dependent, Prev: Visium-Dependent, Up: Machine Dependencies 23598 235999.52 WebAssembly Dependent Features 23600=================================== 23601 23602* Menu: 23603 23604* WebAssembly-Notes:: Notes 23605* WebAssembly-Syntax:: Syntax 23606* WebAssembly-Floating-Point:: Floating Point 23607* WebAssembly-Opcodes:: Opcodes 23608* WebAssembly-module-layout:: Module Layout 23609 23610 23611File: as.info, Node: WebAssembly-Notes, Next: WebAssembly-Syntax, Up: WebAssembly-Dependent 23612 236139.52.1 Notes 23614------------ 23615 23616While WebAssembly provides its own module format for executables, this 23617documentation describes how to use 'as' to produce intermediate ELF 23618object format files. 23619 23620 23621File: as.info, Node: WebAssembly-Syntax, Next: WebAssembly-Floating-Point, Prev: WebAssembly-Notes, Up: WebAssembly-Dependent 23622 236239.52.2 Syntax 23624------------- 23625 23626The assembler syntax directly encodes sequences of opcodes as defined in 23627the WebAssembly binary encoding specification at 23628https://github.com/webassembly/spec/BinaryEncoding.md. Structured 23629sexp-style expressions are not supported as input. 23630 23631* Menu: 23632 23633* WebAssembly-Chars:: Special Characters 23634* WebAssembly-Relocs:: Relocations 23635* WebAssembly-Signatures:: Signatures 23636 23637 23638File: as.info, Node: WebAssembly-Chars, Next: WebAssembly-Relocs, Up: WebAssembly-Syntax 23639 236409.52.2.1 Special Characters 23641........................... 23642 23643'#' and ';' are the line comment characters. Note that if '#' is the 23644first character on a line then it can also be a logical line number 23645directive (*note Comments::) or a preprocessor control command (*note 23646Preprocessing::). 23647 23648 23649File: as.info, Node: WebAssembly-Relocs, Next: WebAssembly-Signatures, Prev: WebAssembly-Chars, Up: WebAssembly-Syntax 23650 236519.52.2.2 Relocations 23652.................... 23653 23654Special relocations are available by using the '@PLT', '@GOT', or '@GOT' 23655suffixes after a constant expression, which correspond to the 23656R_ASMJS_LEB128_PLT, R_ASMJS_LEB128_GOT, and R_ASMJS_LEB128_GOT_CODE 23657relocations, respectively. 23658 23659 The '@PLT' suffix is followed by a symbol name in braces; the symbol 23660value is used to determine the function signature for which a PLT stub 23661is generated. Currently, the symbol _name_ is parsed from its last 'F' 23662character to determine the argument count of the function, which is also 23663necessary for generating a PLT stub. 23664 23665 23666File: as.info, Node: WebAssembly-Signatures, Prev: WebAssembly-Relocs, Up: WebAssembly-Syntax 23667 236689.52.2.3 Signatures 23669................... 23670 23671Function signatures are specified with the 'signature' pseudo-opcode, 23672followed by a simple function signature imitating a C++-mangled function 23673type: 'F' followed by an optional 'v', then a sequence of 'i', 'l', 'f', 23674and 'd' characters to mark i32, i64, f32, and f64 parameters, 23675respectively; followed by a final 'E' to mark the end of the function 23676signature. 23677 23678 23679File: as.info, Node: WebAssembly-Floating-Point, Next: WebAssembly-Opcodes, Prev: WebAssembly-Syntax, Up: WebAssembly-Dependent 23680 236819.52.3 Floating Point 23682--------------------- 23683 23684WebAssembly uses little-endian IEEE floating-point numbers. 23685 23686 23687File: as.info, Node: WebAssembly-Opcodes, Next: WebAssembly-module-layout, Prev: WebAssembly-Floating-Point, Up: WebAssembly-Dependent 23688 236899.52.4 Regular Opcodes 23690---------------------- 23691 23692Ordinary instructions are encoded with the WebAssembly mnemonics as 23693listed at: 23694<https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md>. 23695 23696 Opcodes are written directly in the order in which they are encoded, 23697without going through an intermediate sexp-style expression as in the 23698'was' format. 23699 23700 For "typed" opcodes (block, if, etc.), the type of the block is 23701specified in square brackets following the opcode: 'if[i]', 'if[]'. 23702 23703 23704File: as.info, Node: WebAssembly-module-layout, Prev: WebAssembly-Opcodes, Up: WebAssembly-Dependent 23705 237069.52.5 WebAssembly Module Layout 23707-------------------------------- 23708 23709'as' will only produce ELF output, not a valid WebAssembly module. It 23710is possible to make 'as' produce output in a single ELF section which 23711becomes a valid WebAssembly module, but a linker script to do so may be 23712preferable, as it doesn't require running the entire module through the 23713assembler at once. 23714 23715 23716File: as.info, Node: XGATE-Dependent, Next: XSTORMY16-Dependent, Prev: WebAssembly-Dependent, Up: Machine Dependencies 23717 237189.53 XGATE Dependent Features 23719============================= 23720 23721* Menu: 23722 23723* XGATE-Opts:: XGATE Options 23724* XGATE-Syntax:: Syntax 23725* XGATE-Directives:: Assembler Directives 23726* XGATE-Float:: Floating Point 23727* XGATE-opcodes:: Opcodes 23728 23729 23730File: as.info, Node: XGATE-Opts, Next: XGATE-Syntax, Up: XGATE-Dependent 23731 237329.53.1 XGATE Options 23733-------------------- 23734 23735The Freescale XGATE version of 'as' has a few machine dependent options. 23736 23737'-mshort' 23738 This option controls the ABI and indicates to use a 16-bit integer 23739 ABI. It has no effect on the assembled instructions. This is the 23740 default. 23741 23742'-mlong' 23743 This option controls the ABI and indicates to use a 32-bit integer 23744 ABI. 23745 23746'-mshort-double' 23747 This option controls the ABI and indicates to use a 32-bit float 23748 ABI. This is the default. 23749 23750'-mlong-double' 23751 This option controls the ABI and indicates to use a 64-bit float 23752 ABI. 23753 23754'--print-insn-syntax' 23755 You can use the '--print-insn-syntax' option to obtain the syntax 23756 description of the instruction when an error is detected. 23757 23758'--print-opcodes' 23759 The '--print-opcodes' option prints the list of all the 23760 instructions with their syntax. Once the list is printed 'as' 23761 exits. 23762 23763 23764File: as.info, Node: XGATE-Syntax, Next: XGATE-Directives, Prev: XGATE-Opts, Up: XGATE-Dependent 23765 237669.53.2 Syntax 23767------------- 23768 23769In XGATE RISC syntax, the instruction name comes first and it may be 23770followed by up to three operands. Operands are separated by commas 23771(','). 'as' will complain if too many operands are specified for a 23772given instruction. The same will happen if you specified too few 23773operands. 23774 23775 nop 23776 ldl #23 23777 CMP R1, R2 23778 23779 The presence of a ';' character or a '!' character anywhere on a line 23780indicates the start of a comment that extends to the end of that line. 23781 23782 A '*' or a '#' character at the start of a line also introduces a 23783line comment, but these characters do not work elsewhere on the line. 23784If the first character of the line is a '#' then as well as starting a 23785comment, the line could also be logical line number directive (*note 23786Comments::) or a preprocessor control command (*note Preprocessing::). 23787 23788 The XGATE assembler does not currently support a line separator 23789character. 23790 23791 The following addressing modes are understood for XGATE: 23792"Inherent" 23793 '' 23794 23795"Immediate 3 Bit Wide" 23796 '#NUMBER' 23797 23798"Immediate 4 Bit Wide" 23799 '#NUMBER' 23800 23801"Immediate 8 Bit Wide" 23802 '#NUMBER' 23803 23804"Monadic Addressing" 23805 'REG' 23806 23807"Dyadic Addressing" 23808 'REG, REG' 23809 23810"Triadic Addressing" 23811 'REG, REG, REG' 23812 23813"Relative Addressing 9 Bit Wide" 23814 '*SYMBOL' 23815 23816"Relative Addressing 10 Bit Wide" 23817 '*SYMBOL' 23818 23819"Index Register plus Immediate Offset" 23820 'REG, (REG, #NUMBER)' 23821 23822"Index Register plus Register Offset" 23823 'REG, REG, REG' 23824 23825"Index Register plus Register Offset with Post-increment" 23826 'REG, REG, REG+' 23827 23828"Index Register plus Register Offset with Pre-decrement" 23829 'REG, REG, -REG' 23830 23831 The register can be either 'R0', 'R1', 'R2', 'R3', 'R4', 'R5', 'R6' 23832 or 'R7'. 23833 23834 Convene macro opcodes to deal with 16-bit values have been added. 23835 23836"Immediate 16 Bit Wide" 23837 '#NUMBER', or '*SYMBOL' 23838 23839 For example: 23840 23841 ldw R1, #1024 23842 ldw R3, timer 23843 ldw R1, (R1, #0) 23844 COM R1 23845 stw R2, (R1, #0) 23846 23847 23848File: as.info, Node: XGATE-Directives, Next: XGATE-Float, Prev: XGATE-Syntax, Up: XGATE-Dependent 23849 238509.53.3 Assembler Directives 23851--------------------------- 23852 23853The XGATE version of 'as' have the following specific assembler 23854directives: 23855 23856 23857File: as.info, Node: XGATE-Float, Next: XGATE-opcodes, Prev: XGATE-Directives, Up: XGATE-Dependent 23858 238599.53.4 Floating Point 23860--------------------- 23861 23862Packed decimal (P) format floating literals are not supported(yet). 23863 23864 The floating point formats generated by directives are these. 23865 23866'.float' 23867 'Single' precision floating point constants. 23868 23869'.double' 23870 'Double' precision floating point constants. 23871 23872'.extend' 23873'.ldouble' 23874 'Extended' precision ('long double') floating point constants. 23875 23876 23877File: as.info, Node: XGATE-opcodes, Prev: XGATE-Float, Up: XGATE-Dependent 23878 238799.53.5 Opcodes 23880-------------- 23881 23882 23883File: as.info, Node: XSTORMY16-Dependent, Next: Xtensa-Dependent, Prev: XGATE-Dependent, Up: Machine Dependencies 23884 238859.54 XStormy16 Dependent Features 23886================================= 23887 23888* Menu: 23889 23890* XStormy16 Syntax:: Syntax 23891* XStormy16 Directives:: Machine Directives 23892* XStormy16 Opcodes:: Pseudo-Opcodes 23893 23894 23895File: as.info, Node: XStormy16 Syntax, Next: XStormy16 Directives, Up: XSTORMY16-Dependent 23896 238979.54.1 Syntax 23898------------- 23899 23900* Menu: 23901 23902* XStormy16-Chars:: Special Characters 23903 23904 23905File: as.info, Node: XStormy16-Chars, Up: XStormy16 Syntax 23906 239079.54.1.1 Special Characters 23908........................... 23909 23910'#' is the line comment character. If a '#' appears as the first 23911character of a line, the whole line is treated as a comment, but in this 23912case the line can also be a logical line number directive (*note 23913Comments::) or a preprocessor control command (*note Preprocessing::). 23914 23915 A semicolon (';') can be used to start a comment that extends from 23916wherever the character appears on the line up to the end of the line. 23917 23918 The '|' character can be used to separate statements on the same 23919line. 23920 23921 23922File: as.info, Node: XStormy16 Directives, Next: XStormy16 Opcodes, Prev: XStormy16 Syntax, Up: XSTORMY16-Dependent 23923 239249.54.2 XStormy16 Machine Directives 23925----------------------------------- 23926 23927'.16bit_pointers' 23928 Like the '--16bit-pointers' command-line option this directive 23929 indicates that the assembly code makes use of 16-bit pointers. 23930 23931'.32bit_pointers' 23932 Like the '--32bit-pointers' command-line option this directive 23933 indicates that the assembly code makes use of 32-bit pointers. 23934 23935'.no_pointers' 23936 Like the '--no-pointers' command-line option this directive 23937 indicates that the assembly code does not makes use pointers. 23938 23939 23940File: as.info, Node: XStormy16 Opcodes, Prev: XStormy16 Directives, Up: XSTORMY16-Dependent 23941 239429.54.3 XStormy16 Pseudo-Opcodes 23943------------------------------- 23944 23945'as' implements all the standard XStormy16 opcodes. 23946 23947 'as' also implements the following pseudo ops: 23948 23949'@lo()' 23950 Computes the lower 16 bits of the given expression and stores it 23951 into the immediate operand field of the given instruction. For 23952 example: 23953 23954 'add r6, @lo(here - there)' 23955 23956 computes the difference between the address of labels 'here' and 23957 'there', takes the lower 16 bits of this difference and adds it to 23958 register 6. 23959 23960'@hi()' 23961 Computes the higher 16 bits of the given expression and stores it 23962 into the immediate operand field of the given instruction. For 23963 example: 23964 23965 'addc r7, @hi(here - there)' 23966 23967 computes the difference between the address of labels 'here' and 23968 'there', takes the upper 16 bits of this difference, shifts it down 23969 16 bits and then adds it, along with the carry bit, to the value in 23970 register 7. 23971 23972 23973File: as.info, Node: Xtensa-Dependent, Next: Z80-Dependent, Prev: XSTORMY16-Dependent, Up: Machine Dependencies 23974 239759.55 Xtensa Dependent Features 23976============================== 23977 23978This chapter covers features of the GNU assembler that are specific to 23979the Xtensa architecture. For details about the Xtensa instruction set, 23980please consult the 'Xtensa Instruction Set Architecture (ISA) Reference 23981Manual'. 23982 23983* Menu: 23984 23985* Xtensa Options:: Command-line Options. 23986* Xtensa Syntax:: Assembler Syntax for Xtensa Processors. 23987* Xtensa Optimizations:: Assembler Optimizations. 23988* Xtensa Relaxation:: Other Automatic Transformations. 23989* Xtensa Directives:: Directives for Xtensa Processors. 23990 23991 23992File: as.info, Node: Xtensa Options, Next: Xtensa Syntax, Up: Xtensa-Dependent 23993 239949.55.1 Command-line Options 23995--------------------------- 23996 23997'--text-section-literals | --no-text-section-literals' 23998 Control the treatment of literal pools. The default is 23999 '--no-text-section-literals', which places literals in separate 24000 sections in the output file. This allows the literal pool to be 24001 placed in a data RAM/ROM. With '--text-section-literals', the 24002 literals are interspersed in the text section in order to keep them 24003 as close as possible to their references. This may be necessary 24004 for large assembly files, where the literals would otherwise be out 24005 of range of the 'L32R' instructions in the text section. Literals 24006 are grouped into pools following '.literal_position' directives or 24007 preceding 'ENTRY' instructions. These options only affect literals 24008 referenced via PC-relative 'L32R' instructions; literals for 24009 absolute mode 'L32R' instructions are handled separately. *Note 24010 literal: Literal Directive. 24011 24012'--auto-litpools | --no-auto-litpools' 24013 Control the treatment of literal pools. The default is 24014 '--no-auto-litpools', which in the absence of 24015 '--text-section-literals' places literals in separate sections in 24016 the output file. This allows the literal pool to be placed in a 24017 data RAM/ROM. With '--auto-litpools', the literals are interspersed 24018 in the text section in order to keep them as close as possible to 24019 their references, explicit '.literal_position' directives are not 24020 required. This may be necessary for very large functions, where 24021 single literal pool at the beginning of the function may not be 24022 reachable by 'L32R' instructions at the end. These options only 24023 affect literals referenced via PC-relative 'L32R' instructions; 24024 literals for absolute mode 'L32R' instructions are handled 24025 separately. When used together with '--text-section-literals', 24026 '--auto-litpools' takes precedence. *Note literal: Literal 24027 Directive. 24028 24029'--absolute-literals | --no-absolute-literals' 24030 Indicate to the assembler whether 'L32R' instructions use absolute 24031 or PC-relative addressing. If the processor includes the absolute 24032 addressing option, the default is to use absolute 'L32R' 24033 relocations. Otherwise, only the PC-relative 'L32R' relocations 24034 can be used. 24035 24036'--target-align | --no-target-align' 24037 Enable or disable automatic alignment to reduce branch penalties at 24038 some expense in code size. *Note Automatic Instruction Alignment: 24039 Xtensa Automatic Alignment. This optimization is enabled by 24040 default. Note that the assembler will always align instructions 24041 like 'LOOP' that have fixed alignment requirements. 24042 24043'--longcalls | --no-longcalls' 24044 Enable or disable transformation of call instructions to allow 24045 calls across a greater range of addresses. *Note Function Call 24046 Relaxation: Xtensa Call Relaxation. This option should be used 24047 when call targets can potentially be out of range. It may degrade 24048 both code size and performance, but the linker can generally 24049 optimize away the unnecessary overhead when a call ends up within 24050 range. The default is '--no-longcalls'. 24051 24052'--transform | --no-transform' 24053 Enable or disable all assembler transformations of Xtensa 24054 instructions, including both relaxation and optimization. The 24055 default is '--transform'; '--no-transform' should only be used in 24056 the rare cases when the instructions must be exactly as specified 24057 in the assembly source. Using '--no-transform' causes out of range 24058 instruction operands to be errors. 24059 24060'--rename-section OLDNAME=NEWNAME' 24061 Rename the OLDNAME section to NEWNAME. This option can be used 24062 multiple times to rename multiple sections. 24063 24064'--trampolines | --no-trampolines' 24065 Enable or disable transformation of jump instructions to allow 24066 jumps across a greater range of addresses. *Note Jump Trampolines: 24067 Xtensa Jump Relaxation. This option should be used when jump 24068 targets can potentially be out of range. In the absence of such 24069 jumps this option does not affect code size or performance. The 24070 default is '--trampolines'. 24071 24072'--abi-windowed | --abi-call0' 24073 Choose ABI tag written to the '.xtensa.info' section. ABI tag 24074 indicates ABI of the assembly code. A warning is issued by the 24075 linker on an attempt to link object files with inconsistent ABI 24076 tags. Default ABI is chosen by the Xtensa core configuration. 24077 24078 24079File: as.info, Node: Xtensa Syntax, Next: Xtensa Optimizations, Prev: Xtensa Options, Up: Xtensa-Dependent 24080 240819.55.2 Assembler Syntax 24082----------------------- 24083 24084Block comments are delimited by '/*' and '*/'. End of line comments may 24085be introduced with either '#' or '//'. 24086 24087 If a '#' appears as the first character of a line then the whole line 24088is treated as a comment, but in this case the line could also be a 24089logical line number directive (*note Comments::) or a preprocessor 24090control command (*note Preprocessing::). 24091 24092 Instructions consist of a leading opcode or macro name followed by 24093whitespace and an optional comma-separated list of operands: 24094 24095 OPCODE [OPERAND, ...] 24096 24097 Instructions must be separated by a newline or semicolon (';'). 24098 24099 FLIX instructions, which bundle multiple opcodes together in a single 24100instruction, are specified by enclosing the bundled opcodes inside 24101braces: 24102 24103 { 24104 [FORMAT] 24105 OPCODE0 [OPERANDS] 24106 OPCODE1 [OPERANDS] 24107 OPCODE2 [OPERANDS] 24108 ... 24109 } 24110 24111 The opcodes in a FLIX instruction are listed in the same order as the 24112corresponding instruction slots in the TIE format declaration. 24113Directives and labels are not allowed inside the braces of a FLIX 24114instruction. A particular TIE format name can optionally be specified 24115immediately after the opening brace, but this is usually unnecessary. 24116The assembler will automatically search for a format that can encode the 24117specified opcodes, so the format name need only be specified in rare 24118cases where there is more than one applicable format and where it 24119matters which of those formats is used. A FLIX instruction can also be 24120specified on a single line by separating the opcodes with semicolons: 24121 24122 { [FORMAT;] OPCODE0 [OPERANDS]; OPCODE1 [OPERANDS]; OPCODE2 [OPERANDS]; ... } 24123 24124 If an opcode can only be encoded in a FLIX instruction but is not 24125specified as part of a FLIX bundle, the assembler will choose the 24126smallest format where the opcode can be encoded and will fill unused 24127instruction slots with no-ops. 24128 24129* Menu: 24130 24131* Xtensa Opcodes:: Opcode Naming Conventions. 24132* Xtensa Registers:: Register Naming. 24133 24134 24135File: as.info, Node: Xtensa Opcodes, Next: Xtensa Registers, Up: Xtensa Syntax 24136 241379.55.2.1 Opcode Names 24138..................... 24139 24140See the 'Xtensa Instruction Set Architecture (ISA) Reference Manual' for 24141a complete list of opcodes and descriptions of their semantics. 24142 24143 If an opcode name is prefixed with an underscore character ('_'), 24144'as' will not transform that instruction in any way. The underscore 24145prefix disables both optimization (*note Xtensa Optimizations: Xtensa 24146Optimizations.) and relaxation (*note Xtensa Relaxation: Xtensa 24147Relaxation.) for that particular instruction. Only use the underscore 24148prefix when it is essential to select the exact opcode produced by the 24149assembler. Using this feature unnecessarily makes the code less 24150efficient by disabling assembler optimization and less flexible by 24151disabling relaxation. 24152 24153 Note that this special handling of underscore prefixes only applies 24154to Xtensa opcodes, not to either built-in macros or user-defined macros. 24155When an underscore prefix is used with a macro (e.g., '_MOV'), it refers 24156to a different macro. The assembler generally provides built-in macros 24157both with and without the underscore prefix, where the underscore 24158versions behave as if the underscore carries through to the instructions 24159in the macros. For example, '_MOV' may expand to '_MOV.N'. 24160 24161 The underscore prefix only applies to individual instructions, not to 24162series of instructions. For example, if a series of instructions have 24163underscore prefixes, the assembler will not transform the individual 24164instructions, but it may insert other instructions between them (e.g., 24165to align a 'LOOP' instruction). To prevent the assembler from modifying 24166a series of instructions as a whole, use the 'no-transform' directive. 24167*Note transform: Transform Directive. 24168 24169 24170File: as.info, Node: Xtensa Registers, Prev: Xtensa Opcodes, Up: Xtensa Syntax 24171 241729.55.2.2 Register Names 24173....................... 24174 24175The assembly syntax for a register file entry is the "short" name for a 24176TIE register file followed by the index into that register file. For 24177example, the general-purpose 'AR' register file has a short name of 'a', 24178so these registers are named 'a0'...'a15'. As a special feature, 'sp' 24179is also supported as a synonym for 'a1'. Additional registers may be 24180added by processor configuration options and by designer-defined TIE 24181extensions. An initial '$' character is optional in all register names. 24182 24183 24184File: as.info, Node: Xtensa Optimizations, Next: Xtensa Relaxation, Prev: Xtensa Syntax, Up: Xtensa-Dependent 24185 241869.55.3 Xtensa Optimizations 24187--------------------------- 24188 24189The optimizations currently supported by 'as' are generation of density 24190instructions where appropriate and automatic branch target alignment. 24191 24192* Menu: 24193 24194* Density Instructions:: Using Density Instructions. 24195* Xtensa Automatic Alignment:: Automatic Instruction Alignment. 24196 24197 24198File: as.info, Node: Density Instructions, Next: Xtensa Automatic Alignment, Up: Xtensa Optimizations 24199 242009.55.3.1 Using Density Instructions 24201................................... 24202 24203The Xtensa instruction set has a code density option that provides 2420416-bit versions of some of the most commonly used opcodes. Use of these 24205opcodes can significantly reduce code size. When possible, the 24206assembler automatically translates instructions from the core Xtensa 24207instruction set into equivalent instructions from the Xtensa code 24208density option. This translation can be disabled by using underscore 24209prefixes (*note Opcode Names: Xtensa Opcodes.), by using the 24210'--no-transform' command-line option (*note Command Line Options: Xtensa 24211Options.), or by using the 'no-transform' directive (*note transform: 24212Transform Directive.). 24213 24214 It is a good idea _not_ to use the density instructions directly. 24215The assembler will automatically select dense instructions where 24216possible. If you later need to use an Xtensa processor without the code 24217density option, the same assembly code will then work without 24218modification. 24219 24220 24221File: as.info, Node: Xtensa Automatic Alignment, Prev: Density Instructions, Up: Xtensa Optimizations 24222 242239.55.3.2 Automatic Instruction Alignment 24224........................................ 24225 24226The Xtensa assembler will automatically align certain instructions, both 24227to optimize performance and to satisfy architectural requirements. 24228 24229 As an optimization to improve performance, the assembler attempts to 24230align branch targets so they do not cross instruction fetch boundaries. 24231(Xtensa processors can be configured with either 32-bit or 64-bit 24232instruction fetch widths.) An instruction immediately following a call 24233is treated as a branch target in this context, because it will be the 24234target of a return from the call. This alignment has the potential to 24235reduce branch penalties at some expense in code size. This optimization 24236is enabled by default. You can disable it with the '--no-target-align' 24237command-line option (*note Command-line Options: Xtensa Options.). 24238 24239 The target alignment optimization is done without adding instructions 24240that could increase the execution time of the program. If there are 24241density instructions in the code preceding a target, the assembler can 24242change the target alignment by widening some of those instructions to 24243the equivalent 24-bit instructions. Extra bytes of padding can be 24244inserted immediately following unconditional jump and return 24245instructions. This approach is usually successful in aligning many, but 24246not all, branch targets. 24247 24248 The 'LOOP' family of instructions must be aligned such that the first 24249instruction in the loop body does not cross an instruction fetch 24250boundary (e.g., with a 32-bit fetch width, a 'LOOP' instruction must be 24251on either a 1 or 2 mod 4 byte boundary). The assembler knows about this 24252restriction and inserts the minimal number of 2 or 3 byte no-op 24253instructions to satisfy it. When no-op instructions are added, any 24254label immediately preceding the original loop will be moved in order to 24255refer to the loop instruction, not the newly generated no-op 24256instruction. To preserve binary compatibility across processors with 24257different fetch widths, the assembler conservatively assumes a 32-bit 24258fetch width when aligning 'LOOP' instructions (except if the first 24259instruction in the loop is a 64-bit instruction). 24260 24261 Previous versions of the assembler automatically aligned 'ENTRY' 24262instructions to 4-byte boundaries, but that alignment is now the 24263programmer's responsibility. 24264 24265 24266File: as.info, Node: Xtensa Relaxation, Next: Xtensa Directives, Prev: Xtensa Optimizations, Up: Xtensa-Dependent 24267 242689.55.4 Xtensa Relaxation 24269------------------------ 24270 24271When an instruction operand is outside the range allowed for that 24272particular instruction field, 'as' can transform the code to use a 24273functionally-equivalent instruction or sequence of instructions. This 24274process is known as "relaxation". This is typically done for branch 24275instructions because the distance of the branch targets is not known 24276until assembly-time. The Xtensa assembler offers branch relaxation and 24277also extends this concept to function calls, 'MOVI' instructions and 24278other instructions with immediate fields. 24279 24280* Menu: 24281 24282* Xtensa Branch Relaxation:: Relaxation of Branches. 24283* Xtensa Call Relaxation:: Relaxation of Function Calls. 24284* Xtensa Jump Relaxation:: Relaxation of Jumps. 24285* Xtensa Immediate Relaxation:: Relaxation of other Immediate Fields. 24286 24287 24288File: as.info, Node: Xtensa Branch Relaxation, Next: Xtensa Call Relaxation, Up: Xtensa Relaxation 24289 242909.55.4.1 Conditional Branch Relaxation 24291...................................... 24292 24293When the target of a branch is too far away from the branch itself, 24294i.e., when the offset from the branch to the target is too large to fit 24295in the immediate field of the branch instruction, it may be necessary to 24296replace the branch with a branch around a jump. For example, 24297 24298 beqz a2, L 24299 24300 may result in: 24301 24302 bnez.n a2, M 24303 j L 24304 M: 24305 24306 (The 'BNEZ.N' instruction would be used in this example only if the 24307density option is available. Otherwise, 'BNEZ' would be used.) 24308 24309 This relaxation works well because the unconditional jump instruction 24310has a much larger offset range than the various conditional branches. 24311However, an error will occur if a branch target is beyond the range of a 24312jump instruction. 'as' cannot relax unconditional jumps. Similarly, an 24313error will occur if the original input contains an unconditional jump to 24314a target that is out of range. 24315 24316 Branch relaxation is enabled by default. It can be disabled by using 24317underscore prefixes (*note Opcode Names: Xtensa Opcodes.), the 24318'--no-transform' command-line option (*note Command-line Options: Xtensa 24319Options.), or the 'no-transform' directive (*note transform: Transform 24320Directive.). 24321 24322 24323File: as.info, Node: Xtensa Call Relaxation, Next: Xtensa Jump Relaxation, Prev: Xtensa Branch Relaxation, Up: Xtensa Relaxation 24324 243259.55.4.2 Function Call Relaxation 24326................................. 24327 24328Function calls may require relaxation because the Xtensa immediate call 24329instructions ('CALL0', 'CALL4', 'CALL8' and 'CALL12') provide a 24330PC-relative offset of only 512 Kbytes in either direction. For larger 24331programs, it may be necessary to use indirect calls ('CALLX0', 'CALLX4', 24332'CALLX8' and 'CALLX12') where the target address is specified in a 24333register. The Xtensa assembler can automatically relax immediate call 24334instructions into indirect call instructions. This relaxation is done 24335by loading the address of the called function into the callee's return 24336address register and then using a 'CALLX' instruction. So, for example: 24337 24338 call8 func 24339 24340 might be relaxed to: 24341 24342 .literal .L1, func 24343 l32r a8, .L1 24344 callx8 a8 24345 24346 Because the addresses of targets of function calls are not generally 24347known until link-time, the assembler must assume the worst and relax all 24348the calls to functions in other source files, not just those that really 24349will be out of range. The linker can recognize calls that were 24350unnecessarily relaxed, and it will remove the overhead introduced by the 24351assembler for those cases where direct calls are sufficient. 24352 24353 Call relaxation is disabled by default because it can have a negative 24354effect on both code size and performance, although the linker can 24355usually eliminate the unnecessary overhead. If a program is too large 24356and some of the calls are out of range, function call relaxation can be 24357enabled using the '--longcalls' command-line option or the 'longcalls' 24358directive (*note longcalls: Longcalls Directive.). 24359 24360 24361File: as.info, Node: Xtensa Jump Relaxation, Next: Xtensa Immediate Relaxation, Prev: Xtensa Call Relaxation, Up: Xtensa Relaxation 24362 243639.55.4.3 Jump Relaxation 24364........................ 24365 24366Jump instruction may require relaxation because the Xtensa jump 24367instruction ('J') provide a PC-relative offset of only 128 Kbytes in 24368either direction. One option is to use jump long ('J.L') instruction, 24369which depending on jump distance may be assembled as jump ('J') or 24370indirect jump ('JX'). However it needs a free register. When there's 24371no spare register it is possible to plant intermediate jump sites 24372(trampolines) between the jump instruction and its target. These sites 24373may be located in areas unreachable by normal code execution flow, in 24374that case they only contain intermediate jumps, or they may be inserted 24375in the middle of code block, in which case there's an additional jump 24376from the beginning of the trampoline to the instruction past its end. 24377So, for example: 24378 24379 j 1f 24380 ... 24381 retw 24382 ... 24383 mov a10, a2 24384 call8 func 24385 ... 24386 1: 24387 ... 24388 24389 might be relaxed to: 24390 24391 j .L0_TR_1 24392 ... 24393 retw 24394 .L0_TR_1: 24395 j 1f 24396 ... 24397 mov a10, a2 24398 call8 func 24399 ... 24400 1: 24401 ... 24402 24403 or to: 24404 24405 j .L0_TR_1 24406 ... 24407 retw 24408 ... 24409 mov a10, a2 24410 j .L0_TR_0 24411 .L0_TR_1: 24412 j 1f 24413 .L0_TR_0: 24414 call8 func 24415 ... 24416 1: 24417 ... 24418 24419 The Xtensa assembler uses trampolines with jump around only when it 24420cannot find suitable unreachable trampoline. There may be multiple 24421trampolines between the jump instruction and its target. 24422 24423 This relaxation does not apply to jumps to undefined symbols, 24424assuming they will reach their targets once resolved. 24425 24426 Jump relaxation is enabled by default because it does not affect code 24427size or performance while the code itself is small. This relaxation may 24428be disabled completely with '--no-trampolines' or '--no-transform' 24429command-line options (*note Command-line Options: Xtensa Options.). 24430 24431 24432File: as.info, Node: Xtensa Immediate Relaxation, Prev: Xtensa Jump Relaxation, Up: Xtensa Relaxation 24433 244349.55.4.4 Other Immediate Field Relaxation 24435......................................... 24436 24437The assembler normally performs the following other relaxations. They 24438can be disabled by using underscore prefixes (*note Opcode Names: Xtensa 24439Opcodes.), the '--no-transform' command-line option (*note Command-line 24440Options: Xtensa Options.), or the 'no-transform' directive (*note 24441transform: Transform Directive.). 24442 24443 The 'MOVI' machine instruction can only materialize values in the 24444range from -2048 to 2047. Values outside this range are best 24445materialized with 'L32R' instructions. Thus: 24446 24447 movi a0, 100000 24448 24449 is assembled into the following machine code: 24450 24451 .literal .L1, 100000 24452 l32r a0, .L1 24453 24454 The 'L8UI' machine instruction can only be used with immediate 24455offsets in the range from 0 to 255. The 'L16SI' and 'L16UI' machine 24456instructions can only be used with offsets from 0 to 510. The 'L32I' 24457machine instruction can only be used with offsets from 0 to 1020. A 24458load offset outside these ranges can be materialized with an 'L32R' 24459instruction if the destination register of the load is different than 24460the source address register. For example: 24461 24462 l32i a1, a0, 2040 24463 24464 is translated to: 24465 24466 .literal .L1, 2040 24467 l32r a1, .L1 24468 add a1, a0, a1 24469 l32i a1, a1, 0 24470 24471If the load destination and source address register are the same, an 24472out-of-range offset causes an error. 24473 24474 The Xtensa 'ADDI' instruction only allows immediate operands in the 24475range from -128 to 127. There are a number of alternate instruction 24476sequences for the 'ADDI' operation. First, if the immediate is 0, the 24477'ADDI' will be turned into a 'MOV.N' instruction (or the equivalent 'OR' 24478instruction if the code density option is not available). If the 'ADDI' 24479immediate is outside of the range -128 to 127, but inside the range 24480-32896 to 32639, an 'ADDMI' instruction or 'ADDMI'/'ADDI' sequence will 24481be used. Finally, if the immediate is outside of this range and a free 24482register is available, an 'L32R'/'ADD' sequence will be used with a 24483literal allocated from the literal pool. 24484 24485 For example: 24486 24487 addi a5, a6, 0 24488 addi a5, a6, 512 24489 addi a5, a6, 513 24490 addi a5, a6, 50000 24491 24492 is assembled into the following: 24493 24494 .literal .L1, 50000 24495 mov.n a5, a6 24496 addmi a5, a6, 0x200 24497 addmi a5, a6, 0x200 24498 addi a5, a5, 1 24499 l32r a5, .L1 24500 add a5, a6, a5 24501 24502 24503File: as.info, Node: Xtensa Directives, Prev: Xtensa Relaxation, Up: Xtensa-Dependent 24504 245059.55.5 Directives 24506----------------- 24507 24508The Xtensa assembler supports a region-based directive syntax: 24509 24510 .begin DIRECTIVE [OPTIONS] 24511 ... 24512 .end DIRECTIVE 24513 24514 All the Xtensa-specific directives that apply to a region of code use 24515this syntax. 24516 24517 The directive applies to code between the '.begin' and the '.end'. 24518The state of the option after the '.end' reverts to what it was before 24519the '.begin'. A nested '.begin'/'.end' region can further change the 24520state of the directive without having to be aware of its outer state. 24521For example, consider: 24522 24523 .begin no-transform 24524 L: add a0, a1, a2 24525 .begin transform 24526 M: add a0, a1, a2 24527 .end transform 24528 N: add a0, a1, a2 24529 .end no-transform 24530 24531 The 'ADD' opcodes at 'L' and 'N' in the outer 'no-transform' region 24532both result in 'ADD' machine instructions, but the assembler selects an 24533'ADD.N' instruction for the 'ADD' at 'M' in the inner 'transform' 24534region. 24535 24536 The advantage of this style is that it works well inside macros which 24537can preserve the context of their callers. 24538 24539 The following directives are available: 24540* Menu: 24541 24542* Schedule Directive:: Enable instruction scheduling. 24543* Longcalls Directive:: Use Indirect Calls for Greater Range. 24544* Transform Directive:: Disable All Assembler Transformations. 24545* Literal Directive:: Intermix Literals with Instructions. 24546* Literal Position Directive:: Specify Inline Literal Pool Locations. 24547* Literal Prefix Directive:: Specify Literal Section Name Prefix. 24548* Absolute Literals Directive:: Control PC-Relative vs. Absolute Literals. 24549 24550 24551File: as.info, Node: Schedule Directive, Next: Longcalls Directive, Up: Xtensa Directives 24552 245539.55.5.1 schedule 24554................. 24555 24556The 'schedule' directive is recognized only for compatibility with 24557Tensilica's assembler. 24558 24559 .begin [no-]schedule 24560 .end [no-]schedule 24561 24562 This directive is ignored and has no effect on 'as'. 24563 24564 24565File: as.info, Node: Longcalls Directive, Next: Transform Directive, Prev: Schedule Directive, Up: Xtensa Directives 24566 245679.55.5.2 longcalls 24568.................. 24569 24570The 'longcalls' directive enables or disables function call relaxation. 24571*Note Function Call Relaxation: Xtensa Call Relaxation. 24572 24573 .begin [no-]longcalls 24574 .end [no-]longcalls 24575 24576 Call relaxation is disabled by default unless the '--longcalls' 24577command-line option is specified. The 'longcalls' directive overrides 24578the default determined by the command-line options. 24579 24580 24581File: as.info, Node: Transform Directive, Next: Literal Directive, Prev: Longcalls Directive, Up: Xtensa Directives 24582 245839.55.5.3 transform 24584.................. 24585 24586This directive enables or disables all assembler transformation, 24587including relaxation (*note Xtensa Relaxation: Xtensa Relaxation.) and 24588optimization (*note Xtensa Optimizations: Xtensa Optimizations.). 24589 24590 .begin [no-]transform 24591 .end [no-]transform 24592 24593 Transformations are enabled by default unless the '--no-transform' 24594option is used. The 'transform' directive overrides the default 24595determined by the command-line options. An underscore opcode prefix, 24596disabling transformation of that opcode, always takes precedence over 24597both directives and command-line flags. 24598 24599 24600File: as.info, Node: Literal Directive, Next: Literal Position Directive, Prev: Transform Directive, Up: Xtensa Directives 24601 246029.55.5.4 literal 24603................ 24604 24605The '.literal' directive is used to define literal pool data, i.e., 24606read-only 32-bit data accessed via 'L32R' instructions. 24607 24608 .literal LABEL, VALUE[, VALUE...] 24609 24610 This directive is similar to the standard '.word' directive, except 24611that the actual location of the literal data is determined by the 24612assembler and linker, not by the position of the '.literal' directive. 24613Using this directive gives the assembler freedom to locate the literal 24614data in the most appropriate place and possibly to combine identical 24615literals. For example, the code: 24616 24617 entry sp, 40 24618 .literal .L1, sym 24619 l32r a4, .L1 24620 24621 can be used to load a pointer to the symbol 'sym' into register 'a4'. 24622The value of 'sym' will not be placed between the 'ENTRY' and 'L32R' 24623instructions; instead, the assembler puts the data in a literal pool. 24624 24625 Literal pools are placed by default in separate literal sections; 24626however, when using the '--text-section-literals' option (*note 24627Command-line Options: Xtensa Options.), the literal pools for 24628PC-relative mode 'L32R' instructions are placed in the current 24629section.(1) These text section literal pools are created automatically 24630before 'ENTRY' instructions and manually after '.literal_position' 24631directives (*note literal_position: Literal Position Directive.). If 24632there are no preceding 'ENTRY' instructions, explicit 24633'.literal_position' directives must be used to place the text section 24634literal pools; otherwise, 'as' will report an error. 24635 24636 When literals are placed in separate sections, the literal section 24637names are derived from the names of the sections where the literals are 24638defined. The base literal section names are '.literal' for PC-relative 24639mode 'L32R' instructions and '.lit4' for absolute mode 'L32R' 24640instructions (*note absolute-literals: Absolute Literals Directive.). 24641These base names are used for literals defined in the default '.text' 24642section. For literals defined in other sections or within the scope of 24643a 'literal_prefix' directive (*note literal_prefix: Literal Prefix 24644Directive.), the following rules determine the literal section name: 24645 24646 1. If the current section is a member of a section group, the literal 24647 section name includes the group name as a suffix to the base 24648 '.literal' or '.lit4' name, with a period to separate the base name 24649 and group name. The literal section is also made a member of the 24650 group. 24651 24652 2. If the current section name (or 'literal_prefix' value) begins with 24653 "'.gnu.linkonce.KIND.'", the literal section name is formed by 24654 replacing "'.KIND'" with the base '.literal' or '.lit4' name. For 24655 example, for literals defined in a section named 24656 '.gnu.linkonce.t.func', the literal section will be 24657 '.gnu.linkonce.literal.func' or '.gnu.linkonce.lit4.func'. 24658 24659 3. If the current section name (or 'literal_prefix' value) ends with 24660 '.text', the literal section name is formed by replacing that 24661 suffix with the base '.literal' or '.lit4' name. For example, for 24662 literals defined in a section named '.iram0.text', the literal 24663 section will be '.iram0.literal' or '.iram0.lit4'. 24664 24665 4. If none of the preceding conditions apply, the literal section name 24666 is formed by adding the base '.literal' or '.lit4' name as a suffix 24667 to the current section name (or 'literal_prefix' value). 24668 24669 ---------- Footnotes ---------- 24670 24671 (1) Literals for the '.init' and '.fini' sections are always placed 24672in separate sections, even when '--text-section-literals' is enabled. 24673 24674 24675File: as.info, Node: Literal Position Directive, Next: Literal Prefix Directive, Prev: Literal Directive, Up: Xtensa Directives 24676 246779.55.5.5 literal_position 24678......................... 24679 24680When using '--text-section-literals' to place literals inline in the 24681section being assembled, the '.literal_position' directive can be used 24682to mark a potential location for a literal pool. 24683 24684 .literal_position 24685 24686 The '.literal_position' directive is ignored when the 24687'--text-section-literals' option is not used or when 'L32R' instructions 24688use the absolute addressing mode. 24689 24690 The assembler will automatically place text section literal pools 24691before 'ENTRY' instructions, so the '.literal_position' directive is 24692only needed to specify some other location for a literal pool. You may 24693need to add an explicit jump instruction to skip over an inline literal 24694pool. 24695 24696 For example, an interrupt vector does not begin with an 'ENTRY' 24697instruction so the assembler will be unable to automatically find a good 24698place to put a literal pool. Moreover, the code for the interrupt 24699vector must be at a specific starting address, so the literal pool 24700cannot come before the start of the code. The literal pool for the 24701vector must be explicitly positioned in the middle of the vector (before 24702any uses of the literals, due to the negative offsets used by 24703PC-relative 'L32R' instructions). The '.literal_position' directive can 24704be used to do this. In the following code, the literal for 'M' will 24705automatically be aligned correctly and is placed after the unconditional 24706jump. 24707 24708 .global M 24709 code_start: 24710 j continue 24711 .literal_position 24712 .align 4 24713 continue: 24714 movi a4, M 24715 24716 24717File: as.info, Node: Literal Prefix Directive, Next: Absolute Literals Directive, Prev: Literal Position Directive, Up: Xtensa Directives 24718 247199.55.5.6 literal_prefix 24720....................... 24721 24722The 'literal_prefix' directive allows you to override the default 24723literal section names, which are derived from the names of the sections 24724where the literals are defined. 24725 24726 .begin literal_prefix [NAME] 24727 .end literal_prefix 24728 24729 For literals defined within the delimited region, the literal section 24730names are derived from the NAME argument instead of the name of the 24731current section. The rules used to derive the literal section names do 24732not change. *Note literal: Literal Directive. If the NAME argument is 24733omitted, the literal sections revert to the defaults. This directive 24734has no effect when using the '--text-section-literals' option (*note 24735Command-line Options: Xtensa Options.). 24736 24737 24738File: as.info, Node: Absolute Literals Directive, Prev: Literal Prefix Directive, Up: Xtensa Directives 24739 247409.55.5.7 absolute-literals 24741.......................... 24742 24743The 'absolute-literals' and 'no-absolute-literals' directives control 24744the absolute vs. PC-relative mode for 'L32R' instructions. These are 24745relevant only for Xtensa configurations that include the absolute 24746addressing option for 'L32R' instructions. 24747 24748 .begin [no-]absolute-literals 24749 .end [no-]absolute-literals 24750 24751 These directives do not change the 'L32R' mode--they only cause the 24752assembler to emit the appropriate kind of relocation for 'L32R' 24753instructions and to place the literal values in the appropriate section. 24754To change the 'L32R' mode, the program must write the 'LITBASE' special 24755register. It is the programmer's responsibility to keep track of the 24756mode and indicate to the assembler which mode is used in each region of 24757code. 24758 24759 If the Xtensa configuration includes the absolute 'L32R' addressing 24760option, the default is to assume absolute 'L32R' addressing unless the 24761'--no-absolute-literals' command-line option is specified. Otherwise, 24762the default is to assume PC-relative 'L32R' addressing. The 24763'absolute-literals' directive can then be used to override the default 24764determined by the command-line options. 24765 24766 24767File: as.info, Node: Z80-Dependent, Next: Z8000-Dependent, Prev: Xtensa-Dependent, Up: Machine Dependencies 24768 247699.56 Z80 Dependent Features 24770=========================== 24771 24772* Menu: 24773 24774* Z80 Options:: Options 24775* Z80 Syntax:: Syntax 24776* Z80 Floating Point:: Floating Point 24777* Z80 Directives:: Z80 Machine Directives 24778* Z80 Opcodes:: Opcodes 24779 24780 24781File: as.info, Node: Z80 Options, Next: Z80 Syntax, Up: Z80-Dependent 24782 247839.56.1 Command-line Options 24784--------------------------- 24785 24786'-march=CPU[-EXT...][+EXT...]' 24787 This option specifies the target processor. The assembler will 24788 issue an error message if an attempt is made to assemble an 24789 instruction which will not execute on the target processor. The 24790 following processor names are recognized: 'z80', 'z180', 'ez80', 24791 'gbz80', 'z80n', 'r800'. In addition to the basic instruction set, 24792 the assembler can be told to accept some extention mnemonics. For 24793 example, '-march=z180+sli+infc' extends Z180 with SLI instructions 24794 and IN F,(C). The following extentions are currently supported: 24795 'full' (all known instructions), 'adl' (ADL CPU mode by default, 24796 eZ80 only), 'sli' (instruction known as SLI, SLL or SL1), 'xyhl' 24797 (instructions with halves of index registers: IXL, IXH, IYL, IYH), 24798 'xdcb' (instructions like ROTOP (II+D),R and BITOP N,(II+D),R), 24799 'infc' (instruction IN F,(C) or IN (C)), 'outc0' (instruction OUT 24800 (C),0). Note that rather than extending a basic instruction set, 24801 the extention mnemonics starting with '-' revoke the respective 24802 functionality: '-march=z80-full+xyhl' first removes all default 24803 extentions and adds support for index registers halves only. 24804 24805 If this option is not specified then '-march=z80+xyhl+infc' is 24806 assumed. 24807 24808'-local-prefix=PREFIX' 24809 Mark all labels with specified prefix as local. But such label can 24810 be marked global explicitly in the code. This option do not change 24811 default local label prefix '.L', it is just adds new one. 24812 24813'-colonless' 24814 Accept colonless labels. All symbols at line begin are treated as 24815 labels. 24816 24817'-sdcc' 24818 Accept assembler code produced by SDCC. 24819 24820'-fp-s=FORMAT' 24821 Single precision floating point numbers format. Default: ieee754 24822 (32 bit). 24823 24824'-fp-d=FORMAT' 24825 Double precision floating point numbers format. Default: ieee754 24826 (64 bit). 24827 24828 Floating point numbers formats. 24829'ieee754' 24830 Single or double precision IEEE754 compatible format. 24831 24832'half' 24833 Half precision IEEE754 compatible format (16 bits). 24834 24835'single' 24836 Single precision IEEE754 compatible format (32 bits). 24837 24838'double' 24839 Double precision IEEE754 compatible format (64 bits). 24840 24841'zeda32' 24842 32 bit floating point format from z80float library by Zeda. 24843 24844'math48' 24845 48 bit floating point format from Math48 package by Anders 24846 Hejlsberg. 24847 24848 24849File: as.info, Node: Z80 Syntax, Next: Z80 Floating Point, Prev: Z80 Options, Up: Z80-Dependent 24850 248519.56.2 Syntax 24852------------- 24853 24854The assembler syntax closely follows the 'Z80 family CPU User Manual' by 24855Zilog. In expressions a single '=' may be used as "is equal to" 24856comparison operator. 24857 24858 Suffices can be used to indicate the radix of integer constants; 'H' 24859or 'h' for hexadecimal, 'D' or 'd' for decimal, 'Q', 'O', 'q' or 'o' for 24860octal, and 'B' for binary. 24861 24862 The suffix 'b' denotes a backreference to local label. 24863 24864* Menu: 24865 24866* Z80-Chars:: Special Characters 24867* Z80-Regs:: Register Names 24868* Z80-Case:: Case Sensitivity 24869* Z80-Labels:: Labels 24870 24871 24872File: as.info, Node: Z80-Chars, Next: Z80-Regs, Up: Z80 Syntax 24873 248749.56.2.1 Special Characters 24875........................... 24876 24877The semicolon ';' is the line comment character; 24878 24879 If a '#' appears as the first character of a line then the whole line 24880is treated as a comment, but in this case the line could also be a 24881logical line number directive (*note Comments::) or a preprocessor 24882control command (*note Preprocessing::). 24883 24884 The Z80 assembler does not support a line separator character. 24885 24886 The dollar sign '$' can be used as a prefix for hexadecimal numbers 24887and as a symbol denoting the current location counter. 24888 24889 A backslash '\' is an ordinary character for the Z80 assembler. 24890 24891 The single quote ''' must be followed by a closing quote. If there 24892is one character in between, it is a character constant, otherwise it is 24893a string constant. 24894 24895 24896File: as.info, Node: Z80-Regs, Next: Z80-Case, Prev: Z80-Chars, Up: Z80 Syntax 24897 248989.56.2.2 Register Names 24899....................... 24900 24901The registers are referred to with the letters assigned to them by 24902Zilog. In addition 'as' recognizes 'ixl' and 'ixh' as the least and 24903most significant octet in 'ix', and similarly 'iyl' and 'iyh' as parts 24904of 'iy'. 24905 24906 24907File: as.info, Node: Z80-Case, Next: Z80-Labels, Prev: Z80-Regs, Up: Z80 Syntax 24908 249099.56.2.3 Case Sensitivity 24910......................... 24911 24912Upper and lower case are equivalent in register names, opcodes, 24913condition codes and assembler directives. The case of letters is 24914significant in labels and symbol names. The case is also important to 24915distinguish the suffix 'b' for a backward reference to a local label 24916from the suffix 'B' for a number in binary notation. 24917 24918 24919File: as.info, Node: Z80-Labels, Prev: Z80-Case, Up: Z80 Syntax 24920 249219.56.2.4 Labels 24922............... 24923 24924Labels started by '.L' acts as local labels. You may specify custom 24925local label prefix by '-local-prefix' command-line option. Dollar, 24926forward and backward local labels are supported. By default, all labels 24927are followed by colon. Legacy code with colonless labels can be built 24928with '-colonless' command-line option specified. In this case all 24929tokens at line begin are treated as labels. 24930 24931 24932File: as.info, Node: Z80 Floating Point, Next: Z80 Directives, Prev: Z80 Syntax, Up: Z80-Dependent 24933 249349.56.3 Floating Point 24935--------------------- 24936 24937Floating-point numbers of following types are supported: 24938 24939'ieee754' 24940 Supported half, single and double precision IEEE754 compatible 24941 numbers. 24942 24943'zeda32' 24944 32 bit floating point numbers from z80float library by Zeda. 24945 24946'math48' 24947 48 bit floating point numbers from Math48 package by Anders 24948 Hejlsberg. 24949 24950 24951File: as.info, Node: Z80 Directives, Next: Z80 Opcodes, Prev: Z80 Floating Point, Up: Z80-Dependent 24952 249539.56.4 Z80 Assembler Directives 24954------------------------------- 24955 24956'as' for the Z80 supports some additional directives for compatibility 24957with other assemblers. 24958 24959 These are the additional directives in 'as' for the Z80: 24960 24961'.assume ADL = EXPRESSION' 24962 Set ADL status for eZ80. Non-zero value enable compilation in ADL 24963 mode else used Z80 mode. ADL and Z80 mode produces incompatible 24964 object code. Mixing both of them within one binary may lead 24965 problems with disassembler. 24966 24967'db EXPRESSION|STRING[,EXPRESSION|STRING...]' 24968'defb EXPRESSION|STRING[,EXPRESSION|STRING...]' 24969'defm STRING[,STRING...]' 24970 For each STRING the characters are copied to the object file, for 24971 each other EXPRESSION the value is stored in one byte. A warning 24972 is issued in case of an overflow. Backslash symbol in the strings 24973 is generic symbol, it cannot be used as escape character. *Note 24974 '.ascii': Ascii. 24975 24976'dw EXPRESSION[,EXPRESSION...]' 24977'defw EXPRESSION[,EXPRESSION...]' 24978 For each EXPRESSION the value is stored in two bytes, ignoring 24979 overflow. 24980 24981'd24 EXPRESSION[,EXPRESSION...]' 24982'def24 EXPRESSION[,EXPRESSION...]' 24983 For each EXPRESSION the value is stored in three bytes, ignoring 24984 overflow. 24985 24986'd32 EXPRESSION[,EXPRESSION...]' 24987'def32 EXPRESSION[,EXPRESSION...]' 24988 For each EXPRESSION the value is stored in four bytes, ignoring 24989 overflow. 24990 24991'ds COUNT[, VALUE]' 24992'defs COUNT[, VALUE]' 24993 Fill COUNT bytes in the object file with VALUE, if VALUE is omitted 24994 it defaults to zero. 24995 24996'SYMBOL defl EXPRESSION' 24997 The 'defl' directive is like '.set' but with different syntax. 24998 *Note '.set': Set. It set the value of SYMBOL to EXPRESSION. 24999 Symbols defined with 'defl' are not protected from redefinition. 25000 25001'SYMBOL equ EXPRESSION' 25002 The 'equ' directive is like '.equiv' but with different syntax. 25003 *Note '.equiv': Equiv. It set the value of SYMBOL to EXPRESSION. 25004 It is an error if SYMBOL is already defined. Symbols defined with 25005 'equ' are not protected from redefinition. 25006 25007'psect NAME' 25008 A synonym for '.section', no second argument should be given. 25009 *Note '.section': Section. 25010 25011'xdef SYMBOL' 25012 A synonym for '.global', make SYMBOL is visible to linker. *Note 25013 '.global': Global. 25014 25015'xref NAME' 25016 A synonym for '.extern' (*note '.extern': Extern.). 25017 25018 25019File: as.info, Node: Z80 Opcodes, Prev: Z80 Directives, Up: Z80-Dependent 25020 250219.56.5 Opcodes 25022-------------- 25023 25024In line with common practice, Z80 mnemonics are used for the Z80, Z80N, 25025Z180, eZ80, Ascii R800 and the GameBoy Z80. 25026 25027 In many instructions it is possible to use one of the half index 25028registers ('ixl','ixh','iyl','iyh') in stead of an 8-bit general purpose 25029register. This yields instructions that are documented on the eZ80 and 25030the R800, undocumented on the Z80 and unsupported on the Z180. 25031Similarly 'in f,(c)' is documented on the R800, undocumented on the Z80 25032and unsupported on the Z180 and the eZ80. 25033 25034 The assembler also supports the following undocumented 25035Z80-instructions, that have not been adopted in any other instruction 25036set: 25037'out (c),0' 25038 Sends zero to the port pointed to by register 'C'. 25039 25040'sli M' 25041 Equivalent to 'M = (M<<1)+1', the operand M can be any operand that 25042 is valid for 'sla'. One can use 'sll' as a synonym for 'sli'. 25043 25044'OP (ix+D), R' 25045 This is equivalent to 25046 25047 ld R, (ix+D) 25048 OP R 25049 ld (ix+D), R 25050 25051 The operation 'OP' may be any of 'res B,', 'set B,', 'rl', 'rlc', 25052 'rr', 'rrc', 'sla', 'sli', 'sra' and 'srl', and the register 'R' 25053 may be any of 'a', 'b', 'c', 'd', 'e', 'h' and 'l'. 25054 25055'OP (iy+D), R' 25056 As above, but with 'iy' instead of 'ix'. 25057 25058 The web site at <http://www.z80.info> is a good starting place to 25059find more information on programming the Z80. 25060 25061 You may enable or disable any of these instructions for any target 25062CPU even this instruction is not supported by any real CPU of this type. 25063Useful for custom CPU cores. 25064 25065 25066File: as.info, Node: Z8000-Dependent, Prev: Z80-Dependent, Up: Machine Dependencies 25067 250689.57 Z8000 Dependent Features 25069============================= 25070 25071The Z8000 as supports both members of the Z8000 family: the unsegmented 25072Z8002, with 16 bit addresses, and the segmented Z8001 with 24 bit 25073addresses. 25074 25075 When the assembler is in unsegmented mode (specified with the 25076'unsegm' directive), an address takes up one word (16 bit) sized 25077register. When the assembler is in segmented mode (specified with the 25078'segm' directive), a 24-bit address takes up a long (32 bit) register. 25079*Note Assembler Directives for the Z8000: Z8000 Directives, for a list 25080of other Z8000 specific assembler directives. 25081 25082* Menu: 25083 25084* Z8000 Options:: Command-line options for the Z8000 25085* Z8000 Syntax:: Assembler syntax for the Z8000 25086* Z8000 Directives:: Special directives for the Z8000 25087* Z8000 Opcodes:: Opcodes 25088 25089 25090File: as.info, Node: Z8000 Options, Next: Z8000 Syntax, Up: Z8000-Dependent 25091 250929.57.1 Options 25093-------------- 25094 25095'-z8001' 25096 Generate segmented code by default. 25097 25098'-z8002' 25099 Generate unsegmented code by default. 25100 25101 25102File: as.info, Node: Z8000 Syntax, Next: Z8000 Directives, Prev: Z8000 Options, Up: Z8000-Dependent 25103 251049.57.2 Syntax 25105------------- 25106 25107* Menu: 25108 25109* Z8000-Chars:: Special Characters 25110* Z8000-Regs:: Register Names 25111* Z8000-Addressing:: Addressing Modes 25112 25113 25114File: as.info, Node: Z8000-Chars, Next: Z8000-Regs, Up: Z8000 Syntax 25115 251169.57.2.1 Special Characters 25117........................... 25118 25119'!' is the line comment character. 25120 25121 If a '#' appears as the first character of a line then the whole line 25122is treated as a comment, but in this case the line could also be a 25123logical line number directive (*note Comments::) or a preprocessor 25124control command (*note Preprocessing::). 25125 25126 You can use ';' instead of a newline to separate statements. 25127 25128 25129File: as.info, Node: Z8000-Regs, Next: Z8000-Addressing, Prev: Z8000-Chars, Up: Z8000 Syntax 25130 251319.57.2.2 Register Names 25132....................... 25133 25134The Z8000 has sixteen 16 bit registers, numbered 0 to 15. You can refer 25135to different sized groups of registers by register number, with the 25136prefix 'r' for 16 bit registers, 'rr' for 32 bit registers and 'rq' for 2513764 bit registers. You can also refer to the contents of the first eight 25138(of the sixteen 16 bit registers) by bytes. They are named 'rlN' and 25139'rhN'. 25140 25141_byte registers_ 25142 rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3 25143 rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7 25144 25145_word registers_ 25146 r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 25147 25148_long word registers_ 25149 rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14 25150 25151_quad word registers_ 25152 rq0 rq4 rq8 rq12 25153 25154 25155File: as.info, Node: Z8000-Addressing, Prev: Z8000-Regs, Up: Z8000 Syntax 25156 251579.57.2.3 Addressing Modes 25158......................... 25159 25160as understands the following addressing modes for the Z8000: 25161 25162'rlN' 25163'rhN' 25164'rN' 25165'rrN' 25166'rqN' 25167 Register direct: 8bit, 16bit, 32bit, and 64bit registers. 25168 25169'@rN' 25170'@rrN' 25171 Indirect register: @rrN in segmented mode, @rN in unsegmented mode. 25172 25173'ADDR' 25174 Direct: the 16 bit or 24 bit address (depending on whether the 25175 assembler is in segmented or unsegmented mode) of the operand is in 25176 the instruction. 25177 25178'address(rN)' 25179 Indexed: the 16 or 24 bit address is added to the 16 bit register 25180 to produce the final address in memory of the operand. 25181 25182'rN(#IMM)' 25183'rrN(#IMM)' 25184 Base Address: the 16 or 24 bit register is added to the 16 bit sign 25185 extended immediate displacement to produce the final address in 25186 memory of the operand. 25187 25188'rN(rM)' 25189'rrN(rM)' 25190 Base Index: the 16 or 24 bit register rN or rrN is added to the 25191 sign extended 16 bit index register rM to produce the final address 25192 in memory of the operand. 25193 25194'#XX' 25195 Immediate data XX. 25196 25197 25198File: as.info, Node: Z8000 Directives, Next: Z8000 Opcodes, Prev: Z8000 Syntax, Up: Z8000-Dependent 25199 252009.57.3 Assembler Directives for the Z8000 25201----------------------------------------- 25202 25203The Z8000 port of as includes additional assembler directives, for 25204compatibility with other Z8000 assemblers. These do not begin with '.' 25205(unlike the ordinary as directives). 25206 25207'segm' 25208'.z8001' 25209 Generate code for the segmented Z8001. 25210 25211'unsegm' 25212'.z8002' 25213 Generate code for the unsegmented Z8002. 25214 25215'name' 25216 Synonym for '.file' 25217 25218'global' 25219 Synonym for '.global' 25220 25221'wval' 25222 Synonym for '.word' 25223 25224'lval' 25225 Synonym for '.long' 25226 25227'bval' 25228 Synonym for '.byte' 25229 25230'sval' 25231 Assemble a string. 'sval' expects one string literal, delimited by 25232 single quotes. It assembles each byte of the string into 25233 consecutive addresses. You can use the escape sequence '%XX' 25234 (where XX represents a two-digit hexadecimal number) to represent 25235 the character whose ASCII value is XX. Use this feature to 25236 describe single quote and other characters that may not appear in 25237 string literals as themselves. For example, the C statement 'char *a = "he said \"it's 50% off\"";' 25238 is represented in Z8000 assembly language (shown with the assembler 25239 output in hex at the left) as 25240 25241 68652073 sval 'he said %22it%27s 50%25 off%22%00' 25242 61696420 25243 22697427 25244 73203530 25245 25206F66 25246 662200 25247 25248'rsect' 25249 synonym for '.section' 25250 25251'block' 25252 synonym for '.space' 25253 25254'even' 25255 special case of '.align'; aligns output to even byte boundary. 25256 25257 25258File: as.info, Node: Z8000 Opcodes, Prev: Z8000 Directives, Up: Z8000-Dependent 25259 252609.57.4 Opcodes 25261-------------- 25262 25263For detailed information on the Z8000 machine instruction set, see 25264'Z8000 Technical Manual'. 25265 25266 The following table summarizes the opcodes and their arguments: 25267 25268 rs 16 bit source register 25269 rd 16 bit destination register 25270 rbs 8 bit source register 25271 rbd 8 bit destination register 25272 rrs 32 bit source register 25273 rrd 32 bit destination register 25274 rqs 64 bit source register 25275 rqd 64 bit destination register 25276 addr 16/24 bit address 25277 imm immediate data 25278 25279 adc rd,rs clrb addr cpsir @rd,@rs,rr,cc 25280 adcb rbd,rbs clrb addr(rd) cpsirb @rd,@rs,rr,cc 25281 add rd,@rs clrb rbd dab rbd 25282 add rd,addr com @rd dbjnz rbd,disp7 25283 add rd,addr(rs) com addr dec @rd,imm4m1 25284 add rd,imm16 com addr(rd) dec addr(rd),imm4m1 25285 add rd,rs com rd dec addr,imm4m1 25286 addb rbd,@rs comb @rd dec rd,imm4m1 25287 addb rbd,addr comb addr decb @rd,imm4m1 25288 addb rbd,addr(rs) comb addr(rd) decb addr(rd),imm4m1 25289 addb rbd,imm8 comb rbd decb addr,imm4m1 25290 addb rbd,rbs comflg flags decb rbd,imm4m1 25291 addl rrd,@rs cp @rd,imm16 di i2 25292 addl rrd,addr cp addr(rd),imm16 div rrd,@rs 25293 addl rrd,addr(rs) cp addr,imm16 div rrd,addr 25294 addl rrd,imm32 cp rd,@rs div rrd,addr(rs) 25295 addl rrd,rrs cp rd,addr div rrd,imm16 25296 and rd,@rs cp rd,addr(rs) div rrd,rs 25297 and rd,addr cp rd,imm16 divl rqd,@rs 25298 and rd,addr(rs) cp rd,rs divl rqd,addr 25299 and rd,imm16 cpb @rd,imm8 divl rqd,addr(rs) 25300 and rd,rs cpb addr(rd),imm8 divl rqd,imm32 25301 andb rbd,@rs cpb addr,imm8 divl rqd,rrs 25302 andb rbd,addr cpb rbd,@rs djnz rd,disp7 25303 andb rbd,addr(rs) cpb rbd,addr ei i2 25304 andb rbd,imm8 cpb rbd,addr(rs) ex rd,@rs 25305 andb rbd,rbs cpb rbd,imm8 ex rd,addr 25306 bit @rd,imm4 cpb rbd,rbs ex rd,addr(rs) 25307 bit addr(rd),imm4 cpd rd,@rs,rr,cc ex rd,rs 25308 bit addr,imm4 cpdb rbd,@rs,rr,cc exb rbd,@rs 25309 bit rd,imm4 cpdr rd,@rs,rr,cc exb rbd,addr 25310 bit rd,rs cpdrb rbd,@rs,rr,cc exb rbd,addr(rs) 25311 bitb @rd,imm4 cpi rd,@rs,rr,cc exb rbd,rbs 25312 bitb addr(rd),imm4 cpib rbd,@rs,rr,cc ext0e imm8 25313 bitb addr,imm4 cpir rd,@rs,rr,cc ext0f imm8 25314 bitb rbd,imm4 cpirb rbd,@rs,rr,cc ext8e imm8 25315 bitb rbd,rs cpl rrd,@rs ext8f imm8 25316 bpt cpl rrd,addr exts rrd 25317 call @rd cpl rrd,addr(rs) extsb rd 25318 call addr cpl rrd,imm32 extsl rqd 25319 call addr(rd) cpl rrd,rrs halt 25320 calr disp12 cpsd @rd,@rs,rr,cc in rd,@rs 25321 clr @rd cpsdb @rd,@rs,rr,cc in rd,imm16 25322 clr addr cpsdr @rd,@rs,rr,cc inb rbd,@rs 25323 clr addr(rd) cpsdrb @rd,@rs,rr,cc inb rbd,imm16 25324 clr rd cpsi @rd,@rs,rr,cc inc @rd,imm4m1 25325 clrb @rd cpsib @rd,@rs,rr,cc inc addr(rd),imm4m1 25326 inc addr,imm4m1 ldb rbd,rs(rx) mult rrd,addr(rs) 25327 inc rd,imm4m1 ldb rd(imm16),rbs mult rrd,imm16 25328 incb @rd,imm4m1 ldb rd(rx),rbs mult rrd,rs 25329 incb addr(rd),imm4m1 ldctl ctrl,rs multl rqd,@rs 25330 incb addr,imm4m1 ldctl rd,ctrl multl rqd,addr 25331 incb rbd,imm4m1 ldd @rs,@rd,rr multl rqd,addr(rs) 25332 ind @rd,@rs,ra lddb @rs,@rd,rr multl rqd,imm32 25333 indb @rd,@rs,rba lddr @rs,@rd,rr multl rqd,rrs 25334 inib @rd,@rs,ra lddrb @rs,@rd,rr neg @rd 25335 inibr @rd,@rs,ra ldi @rd,@rs,rr neg addr 25336 iret ldib @rd,@rs,rr neg addr(rd) 25337 jp cc,@rd ldir @rd,@rs,rr neg rd 25338 jp cc,addr ldirb @rd,@rs,rr negb @rd 25339 jp cc,addr(rd) ldk rd,imm4 negb addr 25340 jr cc,disp8 ldl @rd,rrs negb addr(rd) 25341 ld @rd,imm16 ldl addr(rd),rrs negb rbd 25342 ld @rd,rs ldl addr,rrs nop 25343 ld addr(rd),imm16 ldl rd(imm16),rrs or rd,@rs 25344 ld addr(rd),rs ldl rd(rx),rrs or rd,addr 25345 ld addr,imm16 ldl rrd,@rs or rd,addr(rs) 25346 ld addr,rs ldl rrd,addr or rd,imm16 25347 ld rd(imm16),rs ldl rrd,addr(rs) or rd,rs 25348 ld rd(rx),rs ldl rrd,imm32 orb rbd,@rs 25349 ld rd,@rs ldl rrd,rrs orb rbd,addr 25350 ld rd,addr ldl rrd,rs(imm16) orb rbd,addr(rs) 25351 ld rd,addr(rs) ldl rrd,rs(rx) orb rbd,imm8 25352 ld rd,imm16 ldm @rd,rs,n orb rbd,rbs 25353 ld rd,rs ldm addr(rd),rs,n out @rd,rs 25354 ld rd,rs(imm16) ldm addr,rs,n out imm16,rs 25355 ld rd,rs(rx) ldm rd,@rs,n outb @rd,rbs 25356 lda rd,addr ldm rd,addr(rs),n outb imm16,rbs 25357 lda rd,addr(rs) ldm rd,addr,n outd @rd,@rs,ra 25358 lda rd,rs(imm16) ldps @rs outdb @rd,@rs,rba 25359 lda rd,rs(rx) ldps addr outib @rd,@rs,ra 25360 ldar rd,disp16 ldps addr(rs) outibr @rd,@rs,ra 25361 ldb @rd,imm8 ldr disp16,rs pop @rd,@rs 25362 ldb @rd,rbs ldr rd,disp16 pop addr(rd),@rs 25363 ldb addr(rd),imm8 ldrb disp16,rbs pop addr,@rs 25364 ldb addr(rd),rbs ldrb rbd,disp16 pop rd,@rs 25365 ldb addr,imm8 ldrl disp16,rrs popl @rd,@rs 25366 ldb addr,rbs ldrl rrd,disp16 popl addr(rd),@rs 25367 ldb rbd,@rs mbit popl addr,@rs 25368 ldb rbd,addr mreq rd popl rrd,@rs 25369 ldb rbd,addr(rs) mres push @rd,@rs 25370 ldb rbd,imm8 mset push @rd,addr 25371 ldb rbd,rbs mult rrd,@rs push @rd,addr(rs) 25372 ldb rbd,rs(imm16) mult rrd,addr push @rd,imm16 25373 push @rd,rs set addr,imm4 subl rrd,imm32 25374 pushl @rd,@rs set rd,imm4 subl rrd,rrs 25375 pushl @rd,addr set rd,rs tcc cc,rd 25376 pushl @rd,addr(rs) setb @rd,imm4 tccb cc,rbd 25377 pushl @rd,rrs setb addr(rd),imm4 test @rd 25378 res @rd,imm4 setb addr,imm4 test addr 25379 res addr(rd),imm4 setb rbd,imm4 test addr(rd) 25380 res addr,imm4 setb rbd,rs test rd 25381 res rd,imm4 setflg imm4 testb @rd 25382 res rd,rs sinb rbd,imm16 testb addr 25383 resb @rd,imm4 sinb rd,imm16 testb addr(rd) 25384 resb addr(rd),imm4 sind @rd,@rs,ra testb rbd 25385 resb addr,imm4 sindb @rd,@rs,rba testl @rd 25386 resb rbd,imm4 sinib @rd,@rs,ra testl addr 25387 resb rbd,rs sinibr @rd,@rs,ra testl addr(rd) 25388 resflg imm4 sla rd,imm8 testl rrd 25389 ret cc slab rbd,imm8 trdb @rd,@rs,rba 25390 rl rd,imm1or2 slal rrd,imm8 trdrb @rd,@rs,rba 25391 rlb rbd,imm1or2 sll rd,imm8 trib @rd,@rs,rbr 25392 rlc rd,imm1or2 sllb rbd,imm8 trirb @rd,@rs,rbr 25393 rlcb rbd,imm1or2 slll rrd,imm8 trtdrb @ra,@rb,rbr 25394 rldb rbb,rba sout imm16,rs trtib @ra,@rb,rr 25395 rr rd,imm1or2 soutb imm16,rbs trtirb @ra,@rb,rbr 25396 rrb rbd,imm1or2 soutd @rd,@rs,ra trtrb @ra,@rb,rbr 25397 rrc rd,imm1or2 soutdb @rd,@rs,rba tset @rd 25398 rrcb rbd,imm1or2 soutib @rd,@rs,ra tset addr 25399 rrdb rbb,rba soutibr @rd,@rs,ra tset addr(rd) 25400 rsvd36 sra rd,imm8 tset rd 25401 rsvd38 srab rbd,imm8 tsetb @rd 25402 rsvd78 sral rrd,imm8 tsetb addr 25403 rsvd7e srl rd,imm8 tsetb addr(rd) 25404 rsvd9d srlb rbd,imm8 tsetb rbd 25405 rsvd9f srll rrd,imm8 xor rd,@rs 25406 rsvdb9 sub rd,@rs xor rd,addr 25407 rsvdbf sub rd,addr xor rd,addr(rs) 25408 sbc rd,rs sub rd,addr(rs) xor rd,imm16 25409 sbcb rbd,rbs sub rd,imm16 xor rd,rs 25410 sc imm8 sub rd,rs xorb rbd,@rs 25411 sda rd,rs subb rbd,@rs xorb rbd,addr 25412 sdab rbd,rs subb rbd,addr xorb rbd,addr(rs) 25413 sdal rrd,rs subb rbd,addr(rs) xorb rbd,imm8 25414 sdl rd,rs subb rbd,imm8 xorb rbd,rbs 25415 sdlb rbd,rs subb rbd,rbs xorb rbd,rbs 25416 sdll rrd,rs subl rrd,@rs 25417 set @rd,imm4 subl rrd,addr 25418 set addr(rd),imm4 subl rrd,addr(rs) 25419 25420 25421File: as.info, Node: Reporting Bugs, Next: Acknowledgements, Prev: Machine Dependencies, Up: Top 25422 2542310 Reporting Bugs 25424***************** 25425 25426Your bug reports play an essential role in making 'as' reliable. 25427 25428 Reporting a bug may help you by bringing a solution to your problem, 25429or it may not. But in any case the principal function of a bug report 25430is to help the entire community by making the next version of 'as' work 25431better. Bug reports are your contribution to the maintenance of 'as'. 25432 25433 In order for a bug report to serve its purpose, you must include the 25434information that enables us to fix the bug. 25435 25436* Menu: 25437 25438* Bug Criteria:: Have you found a bug? 25439* Bug Reporting:: How to report bugs 25440 25441 25442File: as.info, Node: Bug Criteria, Next: Bug Reporting, Up: Reporting Bugs 25443 2544410.1 Have You Found a Bug? 25445========================== 25446 25447If you are not sure whether you have found a bug, here are some 25448guidelines: 25449 25450 * If the assembler gets a fatal signal, for any input whatever, that 25451 is a 'as' bug. Reliable assemblers never crash. 25452 25453 * If 'as' produces an error message for valid input, that is a bug. 25454 25455 * If 'as' does not produce an error message for invalid input, that 25456 is a bug. However, you should note that your idea of "invalid 25457 input" might be our idea of "an extension" or "support for 25458 traditional practice". 25459 25460 * If you are an experienced user of assemblers, your suggestions for 25461 improvement of 'as' are welcome in any case. 25462 25463 25464File: as.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Reporting Bugs 25465 2546610.2 How to Report Bugs 25467======================= 25468 25469A number of companies and individuals offer support for GNU products. 25470If you obtained 'as' from a support organization, we recommend you 25471contact that organization first. 25472 25473 You can find contact information for many support companies and 25474individuals in the file 'etc/SERVICE' in the GNU Emacs distribution. 25475 25476 In any event, we also recommend that you send bug reports for 'as' to 25477<https://bugs.linaro.org/>. 25478 25479 The fundamental principle of reporting bugs usefully is this: *report 25480all the facts*. If you are not sure whether to state a fact or leave it 25481out, state it! 25482 25483 Often people omit facts because they think they know what causes the 25484problem and assume that some details do not matter. Thus, you might 25485assume that the name of a symbol you use in an example does not matter. 25486Well, probably it does not, but one cannot be sure. Perhaps the bug is 25487a stray memory reference which happens to fetch from the location where 25488that name is stored in memory; perhaps, if the name were different, the 25489contents of that location would fool the assembler into doing the right 25490thing despite the bug. Play it safe and give a specific, complete 25491example. That is the easiest thing for you to do, and the most helpful. 25492 25493 Keep in mind that the purpose of a bug report is to enable us to fix 25494the bug if it is new to us. Therefore, always write your bug reports on 25495the assumption that the bug has not been reported previously. 25496 25497 Sometimes people give a few sketchy facts and ask, "Does this ring a 25498bell?" This cannot help us fix a bug, so it is basically useless. We 25499respond by asking for enough details to enable us to investigate. You 25500might as well expedite matters by sending them to begin with. 25501 25502 To enable us to fix the bug, you should include all these things: 25503 25504 * The version of 'as'. 'as' announces it if you start it with the 25505 '--version' argument. 25506 25507 Without this, we will not know whether there is any point in 25508 looking for the bug in the current version of 'as'. 25509 25510 * Any patches you may have applied to the 'as' source. 25511 25512 * The type of machine you are using, and the operating system name 25513 and version number. 25514 25515 * What compiler (and its version) was used to compile 'as'--e.g. 25516 "'gcc-2.7'". 25517 25518 * The command arguments you gave the assembler to assemble your 25519 example and observe the bug. To guarantee you will not omit 25520 something important, list them all. A copy of the Makefile (or the 25521 output from make) is sufficient. 25522 25523 If we were to try to guess the arguments, we would probably guess 25524 wrong and then we might not encounter the bug. 25525 25526 * A complete input file that will reproduce the bug. If the bug is 25527 observed when the assembler is invoked via a compiler, send the 25528 assembler source, not the high level language source. Most 25529 compilers will produce the assembler source when run with the '-S' 25530 option. If you are using 'gcc', use the options '-v --save-temps'; 25531 this will save the assembler source in a file with an extension of 25532 '.s', and also show you exactly how 'as' is being run. 25533 25534 * A description of what behavior you observe that you believe is 25535 incorrect. For example, "It gets a fatal signal." 25536 25537 Of course, if the bug is that 'as' gets a fatal signal, then we 25538 will certainly notice it. But if the bug is incorrect output, we 25539 might not notice unless it is glaringly wrong. You might as well 25540 not give us a chance to make a mistake. 25541 25542 Even if the problem you experience is a fatal signal, you should 25543 still say so explicitly. Suppose something strange is going on, 25544 such as, your copy of 'as' is out of sync, or you have encountered 25545 a bug in the C library on your system. (This has happened!) Your 25546 copy might crash and ours would not. If you told us to expect a 25547 crash, then when ours fails to crash, we would know that the bug 25548 was not happening for us. If you had not told us to expect a 25549 crash, then we would not be able to draw any conclusion from our 25550 observations. 25551 25552 * If you wish to suggest changes to the 'as' source, send us context 25553 diffs, as generated by 'diff' with the '-u', '-c', or '-p' option. 25554 Always send diffs from the old file to the new file. If you even 25555 discuss something in the 'as' source, refer to it by context, not 25556 by line number. 25557 25558 The line numbers in our development sources will not match those in 25559 your sources. Your line numbers would convey no useful information 25560 to us. 25561 25562 Here are some things that are not necessary: 25563 25564 * A description of the envelope of the bug. 25565 25566 Often people who encounter a bug spend a lot of time investigating 25567 which changes to the input file will make the bug go away and which 25568 changes will not affect it. 25569 25570 This is often time consuming and not very useful, because the way 25571 we will find the bug is by running a single example under the 25572 debugger with breakpoints, not by pure deduction from a series of 25573 examples. We recommend that you save your time for something else. 25574 25575 Of course, if you can find a simpler example to report _instead_ of 25576 the original one, that is a convenience for us. Errors in the 25577 output will be easier to spot, running under the debugger will take 25578 less time, and so on. 25579 25580 However, simplification is not vital; if you do not want to do 25581 this, report the bug anyway and send us the entire test case you 25582 used. 25583 25584 * A patch for the bug. 25585 25586 A patch for the bug does help us if it is a good one. But do not 25587 omit the necessary information, such as the test case, on the 25588 assumption that a patch is all we need. We might see problems with 25589 your patch and decide to fix the problem another way, or we might 25590 not understand it at all. 25591 25592 Sometimes with a program as complicated as 'as' it is very hard to 25593 construct an example that will make the program follow a certain 25594 path through the code. If you do not send us the example, we will 25595 not be able to construct one, so we will not be able to verify that 25596 the bug is fixed. 25597 25598 And if we cannot understand what bug you are trying to fix, or why 25599 your patch should be an improvement, we will not install it. A 25600 test case will help us to understand. 25601 25602 * A guess about what the bug is or what it depends on. 25603 25604 Such guesses are usually wrong. Even we cannot guess right about 25605 such things without first using the debugger to find the facts. 25606 25607 25608File: as.info, Node: Acknowledgements, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top 25609 2561011 Acknowledgements 25611******************* 25612 25613If you have contributed to GAS and your name isn't listed here, it is 25614not meant as a slight. We just don't know about it. Send mail to the 25615maintainer, and we'll correct the situation. Currently the maintainer 25616is Nick Clifton (email address 'nickc@redhat.com'). 25617 25618 Dean Elsner wrote the original GNU assembler for the VAX.(1) 25619 25620 Jay Fenlason maintained GAS for a while, adding support for 25621GDB-specific debug information and the 68k series machines, most of the 25622preprocessing pass, and extensive changes in 'messages.c', 25623'input-file.c', 'write.c'. 25624 25625 K. Richard Pixley maintained GAS for a while, adding various 25626enhancements and many bug fixes, including merging support for several 25627processors, breaking GAS up to handle multiple object file format back 25628ends (including heavy rewrite, testing, an integration of the coff and 25629b.out back ends), adding configuration including heavy testing and 25630verification of cross assemblers and file splits and renaming, converted 25631GAS to strictly ANSI C including full prototypes, added support for 25632m680[34]0 and cpu32, did considerable work on i960 including a COFF port 25633(including considerable amounts of reverse engineering), a SPARC opcode 25634file rewrite, DECstation, rs6000, and hp300hpux host ports, updated 25635"know" assertions and made them work, much other reorganization, 25636cleanup, and lint. 25637 25638 Ken Raeburn wrote the high-level BFD interface code to replace most 25639of the code in format-specific I/O modules. 25640 25641 The original VMS support was contributed by David L. Kashtan. Eric 25642Youngdale has done much work with it since. 25643 25644 The Intel 80386 machine description was written by Eliot Dresselhaus. 25645 25646 Minh Tran-Le at IntelliCorp contributed some AIX 386 support. 25647 25648 The Motorola 88k machine description was contributed by Devon Bowen 25649of Buffalo University and Torbjorn Granlund of the Swedish Institute of 25650Computer Science. 25651 25652 Keith Knowles at the Open Software Foundation wrote the original MIPS 25653back end ('tc-mips.c', 'tc-mips.h'), and contributed Rose format support 25654(which hasn't been merged in yet). Ralph Campbell worked with the MIPS 25655code to support a.out format. 25656 25657 Support for the Zilog Z8k and Renesas H8/300 processors (tc-z8k, 25658tc-h8300), and IEEE 695 object file format (obj-ieee), was written by 25659Steve Chamberlain of Cygnus Support. Steve also modified the COFF back 25660end to use BFD for some low-level operations, for use with the H8/300 25661and AMD 29k targets. 25662 25663 John Gilmore built the AMD 29000 support, added '.include' support, 25664and simplified the configuration of which versions accept which 25665directives. He updated the 68k machine description so that Motorola's 25666opcodes always produced fixed-size instructions (e.g., 'jsr'), while 25667synthetic instructions remained shrinkable ('jbsr'). John fixed many 25668bugs, including true tested cross-compilation support, and one bug in 25669relaxation that took a week and required the proverbial one-bit fix. 25670 25671 Ian Lance Taylor of Cygnus Support merged the Motorola and MIT syntax 25672for the 68k, completed support for some COFF targets (68k, i386 SVR3, 25673and SCO Unix), added support for MIPS ECOFF and ELF targets, wrote the 25674initial RS/6000 and PowerPC assembler, and made a few other minor 25675patches. 25676 25677 Steve Chamberlain made GAS able to generate listings. 25678 25679 Hewlett-Packard contributed support for the HP9000/300. 25680 25681 Jeff Law wrote GAS and BFD support for the native HPPA object format 25682(SOM) along with a fairly extensive HPPA testsuite (for both SOM and ELF 25683object formats). This work was supported by both the Center for 25684Software Science at the University of Utah and Cygnus Support. 25685 25686 Support for ELF format files has been worked on by Mark Eichin of 25687Cygnus Support (original, incomplete implementation for SPARC), Pete 25688Hoogenboom and Jeff Law at the University of Utah (HPPA mainly), Michael 25689Meissner of the Open Software Foundation (i386 mainly), and Ken Raeburn 25690of Cygnus Support (sparc, and some initial 64-bit support). 25691 25692 Linas Vepstas added GAS support for the ESA/390 "IBM 370" 25693architecture. 25694 25695 Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote 25696GAS and BFD support for openVMS/Alpha. 25697 25698 Timothy Wall, Michael Hayes, and Greg Smart contributed to the 25699various tic* flavors. 25700 25701 David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from 25702Tensilica, Inc. added support for Xtensa processors. 25703 25704 Several engineers at Cygnus Support have also provided many small bug 25705fixes and configuration enhancements. 25706 25707 Jon Beniston added support for the Lattice Mico32 architecture. 25708 25709 Many others have contributed large or small bugfixes and 25710enhancements. If you have contributed significant work and are not 25711mentioned on this list, and want to be, let us know. Some of the 25712history has been lost; we are not intentionally leaving anyone out. 25713 25714 ---------- Footnotes ---------- 25715 25716 (1) Any more details? 25717 25718 25719File: as.info, Node: GNU Free Documentation License, Next: AS Index, Prev: Acknowledgements, Up: Top 25720 25721Appendix A GNU Free Documentation License 25722***************************************** 25723 25724 Version 1.3, 3 November 2008 25725 25726 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 25727 <http://fsf.org/> 25728 25729 Everyone is permitted to copy and distribute verbatim copies 25730 of this license document, but changing it is not allowed. 25731 25732 0. PREAMBLE 25733 25734 The purpose of this License is to make a manual, textbook, or other 25735 functional and useful document "free" in the sense of freedom: to 25736 assure everyone the effective freedom to copy and redistribute it, 25737 with or without modifying it, either commercially or 25738 noncommercially. Secondarily, this License preserves for the 25739 author and publisher a way to get credit for their work, while not 25740 being considered responsible for modifications made by others. 25741 25742 This License is a kind of "copyleft", which means that derivative 25743 works of the document must themselves be free in the same sense. 25744 It complements the GNU General Public License, which is a copyleft 25745 license designed for free software. 25746 25747 We have designed this License in order to use it for manuals for 25748 free software, because free software needs free documentation: a 25749 free program should come with manuals providing the same freedoms 25750 that the software does. But this License is not limited to 25751 software manuals; it can be used for any textual work, regardless 25752 of subject matter or whether it is published as a printed book. We 25753 recommend this License principally for works whose purpose is 25754 instruction or reference. 25755 25756 1. APPLICABILITY AND DEFINITIONS 25757 25758 This License applies to any manual or other work, in any medium, 25759 that contains a notice placed by the copyright holder saying it can 25760 be distributed under the terms of this License. Such a notice 25761 grants a world-wide, royalty-free license, unlimited in duration, 25762 to use that work under the conditions stated herein. The 25763 "Document", below, refers to any such manual or work. Any member 25764 of the public is a licensee, and is addressed as "you". You accept 25765 the license if you copy, modify or distribute the work in a way 25766 requiring permission under copyright law. 25767 25768 A "Modified Version" of the Document means any work containing the 25769 Document or a portion of it, either copied verbatim, or with 25770 modifications and/or translated into another language. 25771 25772 A "Secondary Section" is a named appendix or a front-matter section 25773 of the Document that deals exclusively with the relationship of the 25774 publishers or authors of the Document to the Document's overall 25775 subject (or to related matters) and contains nothing that could 25776 fall directly within that overall subject. (Thus, if the Document 25777 is in part a textbook of mathematics, a Secondary Section may not 25778 explain any mathematics.) The relationship could be a matter of 25779 historical connection with the subject or with related matters, or 25780 of legal, commercial, philosophical, ethical or political position 25781 regarding them. 25782 25783 The "Invariant Sections" are certain Secondary Sections whose 25784 titles are designated, as being those of Invariant Sections, in the 25785 notice that says that the Document is released under this License. 25786 If a section does not fit the above definition of Secondary then it 25787 is not allowed to be designated as Invariant. The Document may 25788 contain zero Invariant Sections. If the Document does not identify 25789 any Invariant Sections then there are none. 25790 25791 The "Cover Texts" are certain short passages of text that are 25792 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 25793 that says that the Document is released under this License. A 25794 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 25795 be at most 25 words. 25796 25797 A "Transparent" copy of the Document means a machine-readable copy, 25798 represented in a format whose specification is available to the 25799 general public, that is suitable for revising the document 25800 straightforwardly with generic text editors or (for images composed 25801 of pixels) generic paint programs or (for drawings) some widely 25802 available drawing editor, and that is suitable for input to text 25803 formatters or for automatic translation to a variety of formats 25804 suitable for input to text formatters. A copy made in an otherwise 25805 Transparent file format whose markup, or absence of markup, has 25806 been arranged to thwart or discourage subsequent modification by 25807 readers is not Transparent. An image format is not Transparent if 25808 used for any substantial amount of text. A copy that is not 25809 "Transparent" is called "Opaque". 25810 25811 Examples of suitable formats for Transparent copies include plain 25812 ASCII without markup, Texinfo input format, LaTeX input format, 25813 SGML or XML using a publicly available DTD, and standard-conforming 25814 simple HTML, PostScript or PDF designed for human modification. 25815 Examples of transparent image formats include PNG, XCF and JPG. 25816 Opaque formats include proprietary formats that can be read and 25817 edited only by proprietary word processors, SGML or XML for which 25818 the DTD and/or processing tools are not generally available, and 25819 the machine-generated HTML, PostScript or PDF produced by some word 25820 processors for output purposes only. 25821 25822 The "Title Page" means, for a printed book, the title page itself, 25823 plus such following pages as are needed to hold, legibly, the 25824 material this License requires to appear in the title page. For 25825 works in formats which do not have any title page as such, "Title 25826 Page" means the text near the most prominent appearance of the 25827 work's title, preceding the beginning of the body of the text. 25828 25829 The "publisher" means any person or entity that distributes copies 25830 of the Document to the public. 25831 25832 A section "Entitled XYZ" means a named subunit of the Document 25833 whose title either is precisely XYZ or contains XYZ in parentheses 25834 following text that translates XYZ in another language. (Here XYZ 25835 stands for a specific section name mentioned below, such as 25836 "Acknowledgements", "Dedications", "Endorsements", or "History".) 25837 To "Preserve the Title" of such a section when you modify the 25838 Document means that it remains a section "Entitled XYZ" according 25839 to this definition. 25840 25841 The Document may include Warranty Disclaimers next to the notice 25842 which states that this License applies to the Document. These 25843 Warranty Disclaimers are considered to be included by reference in 25844 this License, but only as regards disclaiming warranties: any other 25845 implication that these Warranty Disclaimers may have is void and 25846 has no effect on the meaning of this License. 25847 25848 2. VERBATIM COPYING 25849 25850 You may copy and distribute the Document in any medium, either 25851 commercially or noncommercially, provided that this License, the 25852 copyright notices, and the license notice saying this License 25853 applies to the Document are reproduced in all copies, and that you 25854 add no other conditions whatsoever to those of this License. You 25855 may not use technical measures to obstruct or control the reading 25856 or further copying of the copies you make or distribute. However, 25857 you may accept compensation in exchange for copies. If you 25858 distribute a large enough number of copies you must also follow the 25859 conditions in section 3. 25860 25861 You may also lend copies, under the same conditions stated above, 25862 and you may publicly display copies. 25863 25864 3. COPYING IN QUANTITY 25865 25866 If you publish printed copies (or copies in media that commonly 25867 have printed covers) of the Document, numbering more than 100, and 25868 the Document's license notice requires Cover Texts, you must 25869 enclose the copies in covers that carry, clearly and legibly, all 25870 these Cover Texts: Front-Cover Texts on the front cover, and 25871 Back-Cover Texts on the back cover. Both covers must also clearly 25872 and legibly identify you as the publisher of these copies. The 25873 front cover must present the full title with all words of the title 25874 equally prominent and visible. You may add other material on the 25875 covers in addition. Copying with changes limited to the covers, as 25876 long as they preserve the title of the Document and satisfy these 25877 conditions, can be treated as verbatim copying in other respects. 25878 25879 If the required texts for either cover are too voluminous to fit 25880 legibly, you should put the first ones listed (as many as fit 25881 reasonably) on the actual cover, and continue the rest onto 25882 adjacent pages. 25883 25884 If you publish or distribute Opaque copies of the Document 25885 numbering more than 100, you must either include a machine-readable 25886 Transparent copy along with each Opaque copy, or state in or with 25887 each Opaque copy a computer-network location from which the general 25888 network-using public has access to download using public-standard 25889 network protocols a complete Transparent copy of the Document, free 25890 of added material. If you use the latter option, you must take 25891 reasonably prudent steps, when you begin distribution of Opaque 25892 copies in quantity, to ensure that this Transparent copy will 25893 remain thus accessible at the stated location until at least one 25894 year after the last time you distribute an Opaque copy (directly or 25895 through your agents or retailers) of that edition to the public. 25896 25897 It is requested, but not required, that you contact the authors of 25898 the Document well before redistributing any large number of copies, 25899 to give them a chance to provide you with an updated version of the 25900 Document. 25901 25902 4. MODIFICATIONS 25903 25904 You may copy and distribute a Modified Version of the Document 25905 under the conditions of sections 2 and 3 above, provided that you 25906 release the Modified Version under precisely this License, with the 25907 Modified Version filling the role of the Document, thus licensing 25908 distribution and modification of the Modified Version to whoever 25909 possesses a copy of it. In addition, you must do these things in 25910 the Modified Version: 25911 25912 A. Use in the Title Page (and on the covers, if any) a title 25913 distinct from that of the Document, and from those of previous 25914 versions (which should, if there were any, be listed in the 25915 History section of the Document). You may use the same title 25916 as a previous version if the original publisher of that 25917 version gives permission. 25918 25919 B. List on the Title Page, as authors, one or more persons or 25920 entities responsible for authorship of the modifications in 25921 the Modified Version, together with at least five of the 25922 principal authors of the Document (all of its principal 25923 authors, if it has fewer than five), unless they release you 25924 from this requirement. 25925 25926 C. State on the Title page the name of the publisher of the 25927 Modified Version, as the publisher. 25928 25929 D. Preserve all the copyright notices of the Document. 25930 25931 E. Add an appropriate copyright notice for your modifications 25932 adjacent to the other copyright notices. 25933 25934 F. Include, immediately after the copyright notices, a license 25935 notice giving the public permission to use the Modified 25936 Version under the terms of this License, in the form shown in 25937 the Addendum below. 25938 25939 G. Preserve in that license notice the full lists of Invariant 25940 Sections and required Cover Texts given in the Document's 25941 license notice. 25942 25943 H. Include an unaltered copy of this License. 25944 25945 I. Preserve the section Entitled "History", Preserve its Title, 25946 and add to it an item stating at least the title, year, new 25947 authors, and publisher of the Modified Version as given on the 25948 Title Page. If there is no section Entitled "History" in the 25949 Document, create one stating the title, year, authors, and 25950 publisher of the Document as given on its Title Page, then add 25951 an item describing the Modified Version as stated in the 25952 previous sentence. 25953 25954 J. Preserve the network location, if any, given in the Document 25955 for public access to a Transparent copy of the Document, and 25956 likewise the network locations given in the Document for 25957 previous versions it was based on. These may be placed in the 25958 "History" section. You may omit a network location for a work 25959 that was published at least four years before the Document 25960 itself, or if the original publisher of the version it refers 25961 to gives permission. 25962 25963 K. For any section Entitled "Acknowledgements" or "Dedications", 25964 Preserve the Title of the section, and preserve in the section 25965 all the substance and tone of each of the contributor 25966 acknowledgements and/or dedications given therein. 25967 25968 L. Preserve all the Invariant Sections of the Document, unaltered 25969 in their text and in their titles. Section numbers or the 25970 equivalent are not considered part of the section titles. 25971 25972 M. Delete any section Entitled "Endorsements". Such a section 25973 may not be included in the Modified Version. 25974 25975 N. Do not retitle any existing section to be Entitled 25976 "Endorsements" or to conflict in title with any Invariant 25977 Section. 25978 25979 O. Preserve any Warranty Disclaimers. 25980 25981 If the Modified Version includes new front-matter sections or 25982 appendices that qualify as Secondary Sections and contain no 25983 material copied from the Document, you may at your option designate 25984 some or all of these sections as invariant. To do this, add their 25985 titles to the list of Invariant Sections in the Modified Version's 25986 license notice. These titles must be distinct from any other 25987 section titles. 25988 25989 You may add a section Entitled "Endorsements", provided it contains 25990 nothing but endorsements of your Modified Version by various 25991 parties--for example, statements of peer review or that the text 25992 has been approved by an organization as the authoritative 25993 definition of a standard. 25994 25995 You may add a passage of up to five words as a Front-Cover Text, 25996 and a passage of up to 25 words as a Back-Cover Text, to the end of 25997 the list of Cover Texts in the Modified Version. Only one passage 25998 of Front-Cover Text and one of Back-Cover Text may be added by (or 25999 through arrangements made by) any one entity. If the Document 26000 already includes a cover text for the same cover, previously added 26001 by you or by arrangement made by the same entity you are acting on 26002 behalf of, you may not add another; but you may replace the old 26003 one, on explicit permission from the previous publisher that added 26004 the old one. 26005 26006 The author(s) and publisher(s) of the Document do not by this 26007 License give permission to use their names for publicity for or to 26008 assert or imply endorsement of any Modified Version. 26009 26010 5. COMBINING DOCUMENTS 26011 26012 You may combine the Document with other documents released under 26013 this License, under the terms defined in section 4 above for 26014 modified versions, provided that you include in the combination all 26015 of the Invariant Sections of all of the original documents, 26016 unmodified, and list them all as Invariant Sections of your 26017 combined work in its license notice, and that you preserve all 26018 their Warranty Disclaimers. 26019 26020 The combined work need only contain one copy of this License, and 26021 multiple identical Invariant Sections may be replaced with a single 26022 copy. If there are multiple Invariant Sections with the same name 26023 but different contents, make the title of each such section unique 26024 by adding at the end of it, in parentheses, the name of the 26025 original author or publisher of that section if known, or else a 26026 unique number. Make the same adjustment to the section titles in 26027 the list of Invariant Sections in the license notice of the 26028 combined work. 26029 26030 In the combination, you must combine any sections Entitled 26031 "History" in the various original documents, forming one section 26032 Entitled "History"; likewise combine any sections Entitled 26033 "Acknowledgements", and any sections Entitled "Dedications". You 26034 must delete all sections Entitled "Endorsements." 26035 26036 6. COLLECTIONS OF DOCUMENTS 26037 26038 You may make a collection consisting of the Document and other 26039 documents released under this License, and replace the individual 26040 copies of this License in the various documents with a single copy 26041 that is included in the collection, provided that you follow the 26042 rules of this License for verbatim copying of each of the documents 26043 in all other respects. 26044 26045 You may extract a single document from such a collection, and 26046 distribute it individually under this License, provided you insert 26047 a copy of this License into the extracted document, and follow this 26048 License in all other respects regarding verbatim copying of that 26049 document. 26050 26051 7. AGGREGATION WITH INDEPENDENT WORKS 26052 26053 A compilation of the Document or its derivatives with other 26054 separate and independent documents or works, in or on a volume of a 26055 storage or distribution medium, is called an "aggregate" if the 26056 copyright resulting from the compilation is not used to limit the 26057 legal rights of the compilation's users beyond what the individual 26058 works permit. When the Document is included in an aggregate, this 26059 License does not apply to the other works in the aggregate which 26060 are not themselves derivative works of the Document. 26061 26062 If the Cover Text requirement of section 3 is applicable to these 26063 copies of the Document, then if the Document is less than one half 26064 of the entire aggregate, the Document's Cover Texts may be placed 26065 on covers that bracket the Document within the aggregate, or the 26066 electronic equivalent of covers if the Document is in electronic 26067 form. Otherwise they must appear on printed covers that bracket 26068 the whole aggregate. 26069 26070 8. TRANSLATION 26071 26072 Translation is considered a kind of modification, so you may 26073 distribute translations of the Document under the terms of section 26074 4. Replacing Invariant Sections with translations requires special 26075 permission from their copyright holders, but you may include 26076 translations of some or all Invariant Sections in addition to the 26077 original versions of these Invariant Sections. You may include a 26078 translation of this License, and all the license notices in the 26079 Document, and any Warranty Disclaimers, provided that you also 26080 include the original English version of this License and the 26081 original versions of those notices and disclaimers. In case of a 26082 disagreement between the translation and the original version of 26083 this License or a notice or disclaimer, the original version will 26084 prevail. 26085 26086 If a section in the Document is Entitled "Acknowledgements", 26087 "Dedications", or "History", the requirement (section 4) to 26088 Preserve its Title (section 1) will typically require changing the 26089 actual title. 26090 26091 9. TERMINATION 26092 26093 You may not copy, modify, sublicense, or distribute the Document 26094 except as expressly provided under this License. Any attempt 26095 otherwise to copy, modify, sublicense, or distribute it is void, 26096 and will automatically terminate your rights under this License. 26097 26098 However, if you cease all violation of this License, then your 26099 license from a particular copyright holder is reinstated (a) 26100 provisionally, unless and until the copyright holder explicitly and 26101 finally terminates your license, and (b) permanently, if the 26102 copyright holder fails to notify you of the violation by some 26103 reasonable means prior to 60 days after the cessation. 26104 26105 Moreover, your license from a particular copyright holder is 26106 reinstated permanently if the copyright holder notifies you of the 26107 violation by some reasonable means, this is the first time you have 26108 received notice of violation of this License (for any work) from 26109 that copyright holder, and you cure the violation prior to 30 days 26110 after your receipt of the notice. 26111 26112 Termination of your rights under this section does not terminate 26113 the licenses of parties who have received copies or rights from you 26114 under this License. If your rights have been terminated and not 26115 permanently reinstated, receipt of a copy of some or all of the 26116 same material does not give you any rights to use it. 26117 26118 10. FUTURE REVISIONS OF THIS LICENSE 26119 26120 The Free Software Foundation may publish new, revised versions of 26121 the GNU Free Documentation License from time to time. Such new 26122 versions will be similar in spirit to the present version, but may 26123 differ in detail to address new problems or concerns. See 26124 <http://www.gnu.org/copyleft/>. 26125 26126 Each version of the License is given a distinguishing version 26127 number. If the Document specifies that a particular numbered 26128 version of this License "or any later version" applies to it, you 26129 have the option of following the terms and conditions either of 26130 that specified version or of any later version that has been 26131 published (not as a draft) by the Free Software Foundation. If the 26132 Document does not specify a version number of this License, you may 26133 choose any version ever published (not as a draft) by the Free 26134 Software Foundation. If the Document specifies that a proxy can 26135 decide which future versions of this License can be used, that 26136 proxy's public statement of acceptance of a version permanently 26137 authorizes you to choose that version for the Document. 26138 26139 11. RELICENSING 26140 26141 "Massive Multiauthor Collaboration Site" (or "MMC Site") means any 26142 World Wide Web server that publishes copyrightable works and also 26143 provides prominent facilities for anybody to edit those works. A 26144 public wiki that anybody can edit is an example of such a server. 26145 A "Massive Multiauthor Collaboration" (or "MMC") contained in the 26146 site means any set of copyrightable works thus published on the MMC 26147 site. 26148 26149 "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 26150 license published by Creative Commons Corporation, a not-for-profit 26151 corporation with a principal place of business in San Francisco, 26152 California, as well as future copyleft versions of that license 26153 published by that same organization. 26154 26155 "Incorporate" means to publish or republish a Document, in whole or 26156 in part, as part of another Document. 26157 26158 An MMC is "eligible for relicensing" if it is licensed under this 26159 License, and if all works that were first published under this 26160 License somewhere other than this MMC, and subsequently 26161 incorporated in whole or in part into the MMC, (1) had no cover 26162 texts or invariant sections, and (2) were thus incorporated prior 26163 to November 1, 2008. 26164 26165 The operator of an MMC Site may republish an MMC contained in the 26166 site under CC-BY-SA on the same site at any time before August 1, 26167 2009, provided the MMC is eligible for relicensing. 26168 26169ADDENDUM: How to use this License for your documents 26170==================================================== 26171 26172To use this License in a document you have written, include a copy of 26173the License in the document and put the following copyright and license 26174notices just after the title page: 26175 26176 Copyright (C) YEAR YOUR NAME. 26177 Permission is granted to copy, distribute and/or modify this document 26178 under the terms of the GNU Free Documentation License, Version 1.3 26179 or any later version published by the Free Software Foundation; 26180 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 26181 Texts. A copy of the license is included in the section entitled ``GNU 26182 Free Documentation License''. 26183 26184 If you have Invariant Sections, Front-Cover Texts and Back-Cover 26185Texts, replace the "with...Texts." line with this: 26186 26187 with the Invariant Sections being LIST THEIR TITLES, with 26188 the Front-Cover Texts being LIST, and with the Back-Cover Texts 26189 being LIST. 26190 26191 If you have Invariant Sections without Cover Texts, or some other 26192combination of the three, merge those two alternatives to suit the 26193situation. 26194 26195 If your document contains nontrivial examples of program code, we 26196recommend releasing these examples in parallel under your choice of free 26197software license, such as the GNU General Public License, to permit 26198their use in free software. 26199 26200 26201File: as.info, Node: AS Index, Prev: GNU Free Documentation License, Up: Top 26202 26203AS Index 26204******** 26205 26206[index] 26207* Menu: 26208 26209* ' \"' (doublequote character): Strings. (line 43) 26210* ' \b' (backspace character): Strings. (line 15) 26211* ' \DDD' (octal character code): Strings. (line 30) 26212* ' \f' (formfeed character): Strings. (line 18) 26213* ' \n' (newline character): Strings. (line 21) 26214* ' \r' (carriage return character): Strings. (line 24) 26215* ' \t' (tab): Strings. (line 27) 26216* ' \XD...' (hex character code): Strings. (line 36) 26217* ' \\' ('\' character): Strings. (line 40) 26218* #: Comments. (line 33) 26219* #APP: Preprocessing. (line 28) 26220* #NO_APP: Preprocessing. (line 28) 26221* '$' in symbol names: D10V-Chars. (line 46) 26222* '$' in symbol names <1>: D30V-Chars. (line 70) 26223* '$' in symbol names <2>: Meta-Chars. (line 10) 26224* '$' in symbol names <3>: SH-Chars. (line 15) 26225* '$a': ARM Mapping Symbols. 26226 (line 9) 26227* '$acos' math builtin, TIC54X: TIC54X-Builtins. (line 10) 26228* '$asin' math builtin, TIC54X: TIC54X-Builtins. (line 13) 26229* '$atan' math builtin, TIC54X: TIC54X-Builtins. (line 16) 26230* '$atan2' math builtin, TIC54X: TIC54X-Builtins. (line 19) 26231* '$ceil' math builtin, TIC54X: TIC54X-Builtins. (line 22) 26232* '$cos' math builtin, TIC54X: TIC54X-Builtins. (line 28) 26233* '$cosh' math builtin, TIC54X: TIC54X-Builtins. (line 25) 26234* '$cvf' math builtin, TIC54X: TIC54X-Builtins. (line 31) 26235* '$cvi' math builtin, TIC54X: TIC54X-Builtins. (line 34) 26236* '$d': AArch64 Mapping Symbols. 26237 (line 12) 26238* '$d' <1>: ARM Mapping Symbols. 26239 (line 15) 26240* '$exp' math builtin, TIC54X: TIC54X-Builtins. (line 37) 26241* '$fabs' math builtin, TIC54X: TIC54X-Builtins. (line 40) 26242* '$firstch' subsym builtin, TIC54X: TIC54X-Macros. (line 26) 26243* '$floor' math builtin, TIC54X: TIC54X-Builtins. (line 43) 26244* '$fmod' math builtin, TIC54X: TIC54X-Builtins. (line 47) 26245* '$int' math builtin, TIC54X: TIC54X-Builtins. (line 50) 26246* '$iscons' subsym builtin, TIC54X: TIC54X-Macros. (line 43) 26247* '$isdefed' subsym builtin, TIC54X: TIC54X-Macros. (line 34) 26248* '$ismember' subsym builtin, TIC54X: TIC54X-Macros. (line 38) 26249* '$isname' subsym builtin, TIC54X: TIC54X-Macros. (line 47) 26250* '$isreg' subsym builtin, TIC54X: TIC54X-Macros. (line 50) 26251* '$lastch' subsym builtin, TIC54X: TIC54X-Macros. (line 30) 26252* '$ldexp' math builtin, TIC54X: TIC54X-Builtins. (line 53) 26253* '$log' math builtin, TIC54X: TIC54X-Builtins. (line 59) 26254* '$log10' math builtin, TIC54X: TIC54X-Builtins. (line 56) 26255* '$max' math builtin, TIC54X: TIC54X-Builtins. (line 62) 26256* '$min' math builtin, TIC54X: TIC54X-Builtins. (line 65) 26257* '$pow' math builtin, TIC54X: TIC54X-Builtins. (line 68) 26258* '$round' math builtin, TIC54X: TIC54X-Builtins. (line 71) 26259* '$sgn' math builtin, TIC54X: TIC54X-Builtins. (line 74) 26260* '$sin' math builtin, TIC54X: TIC54X-Builtins. (line 77) 26261* '$sinh' math builtin, TIC54X: TIC54X-Builtins. (line 80) 26262* '$sqrt' math builtin, TIC54X: TIC54X-Builtins. (line 83) 26263* '$structacc' subsym builtin, TIC54X: TIC54X-Macros. (line 57) 26264* '$structsz' subsym builtin, TIC54X: TIC54X-Macros. (line 54) 26265* '$symcmp' subsym builtin, TIC54X: TIC54X-Macros. (line 23) 26266* '$symlen' subsym builtin, TIC54X: TIC54X-Macros. (line 20) 26267* '$t': ARM Mapping Symbols. 26268 (line 12) 26269* '$tan' math builtin, TIC54X: TIC54X-Builtins. (line 86) 26270* '$tanh' math builtin, TIC54X: TIC54X-Builtins. (line 89) 26271* '$trunc' math builtin, TIC54X: TIC54X-Builtins. (line 92) 26272* '$x': AArch64 Mapping Symbols. 26273 (line 9) 26274* %gp: RX-Modifiers. (line 6) 26275* '%gpreg': RX-Modifiers. (line 22) 26276* '%pidreg': RX-Modifiers. (line 25) 26277* '-+' option, VAX/VMS: VAX-Opts. (line 71) 26278* --: Command Line. (line 10) 26279* '--32' option, i386: i386-Options. (line 8) 26280* '--32' option, x86-64: i386-Options. (line 8) 26281* '--64' option, i386: i386-Options. (line 8) 26282* '--64' option, x86-64: i386-Options. (line 8) 26283* --abi-call0: Xtensa Options. (line 82) 26284* --abi-windowed: Xtensa Options. (line 82) 26285* --absolute-literals: Xtensa Options. (line 39) 26286* --allow-reg-prefix: SH Options. (line 9) 26287* --alternate: alternate. (line 6) 26288* --auto-litpools: Xtensa Options. (line 22) 26289* '--base-size-default-16': M68K-Opts. (line 66) 26290* '--base-size-default-32': M68K-Opts. (line 66) 26291* --big: SH Options. (line 9) 26292* '--bitwise-or' option, M680x0: M68K-Opts. (line 59) 26293* '--compress-debug-sections=' option: Overview. (line 377) 26294* '--disp-size-default-16': M68K-Opts. (line 75) 26295* '--disp-size-default-32': M68K-Opts. (line 75) 26296* '--divide' option, i386: i386-Options. (line 25) 26297* --dsp: SH Options. (line 9) 26298* '--emulation=crisaout' command-line option, CRIS: CRIS-Opts. 26299 (line 9) 26300* '--emulation=criself' command-line option, CRIS: CRIS-Opts. 26301 (line 9) 26302* --enforce-aligned-data: Sparc-Aligned-Data. (line 11) 26303* --fatal-warnings: W. (line 16) 26304* --fdpic: SH Options. (line 31) 26305* '--fix-v4bx' command-line option, ARM: ARM Options. (line 380) 26306* '--fixed-special-register-names' command-line option, MMIX: MMIX-Opts. 26307 (line 8) 26308* '--force-long-branches': M68HC11-Opts. (line 81) 26309* '--generate-example': M68HC11-Opts. (line 98) 26310* '--globalize-symbols' command-line option, MMIX: MMIX-Opts. 26311 (line 12) 26312* '--gnu-syntax' command-line option, MMIX: MMIX-Opts. (line 16) 26313* '--linker-allocated-gregs' command-line option, MMIX: MMIX-Opts. 26314 (line 67) 26315* --listing-cont-lines: listing. (line 34) 26316* --listing-lhs-width: listing. (line 16) 26317* --listing-lhs-width2: listing. (line 21) 26318* --listing-rhs-width: listing. (line 28) 26319* --little: SH Options. (line 9) 26320* --longcalls: Xtensa Options. (line 53) 26321* '--march=ARCHITECTURE' command-line option, CRIS: CRIS-Opts. 26322 (line 34) 26323* --MD: MD. (line 6) 26324* '--mul-bug-abort' command-line option, CRIS: CRIS-Opts. (line 63) 26325* --no-absolute-literals: Xtensa Options. (line 39) 26326* --no-auto-litpools: Xtensa Options. (line 22) 26327* '--no-expand' command-line option, MMIX: MMIX-Opts. (line 31) 26328* --no-longcalls: Xtensa Options. (line 53) 26329* '--no-merge-gregs' command-line option, MMIX: MMIX-Opts. (line 36) 26330* '--no-mul-bug-abort' command-line option, CRIS: CRIS-Opts. (line 63) 26331* --no-pad-sections: no-pad-sections. (line 6) 26332* '--no-predefined-syms' command-line option, MMIX: MMIX-Opts. 26333 (line 22) 26334* '--no-pushj-stubs' command-line option, MMIX: MMIX-Opts. (line 54) 26335* '--no-stubs' command-line option, MMIX: MMIX-Opts. (line 54) 26336* --no-target-align: Xtensa Options. (line 46) 26337* --no-text-section-literals: Xtensa Options. (line 7) 26338* --no-trampolines: Xtensa Options. (line 74) 26339* --no-transform: Xtensa Options. (line 62) 26340* '--no-underscore' command-line option, CRIS: CRIS-Opts. (line 15) 26341* --no-warn: W. (line 11) 26342* '--pcrel': M68K-Opts. (line 87) 26343* '--pic' command-line option, CRIS: CRIS-Opts. (line 27) 26344* '--print-insn-syntax': M68HC11-Opts. (line 87) 26345* '--print-insn-syntax' <1>: XGATE-Opts. (line 25) 26346* '--print-opcodes': M68HC11-Opts. (line 91) 26347* '--print-opcodes' <1>: XGATE-Opts. (line 29) 26348* '--register-prefix-optional' option, M680x0: M68K-Opts. (line 46) 26349* --relax: SH Options. (line 9) 26350* '--relax' command-line option, MMIX: MMIX-Opts. (line 19) 26351* --rename-section: Xtensa Options. (line 70) 26352* --renesas: SH Options. (line 9) 26353* --sectname-subst: Section. (line 71) 26354* '--short-branches': M68HC11-Opts. (line 67) 26355* --small: SH Options. (line 9) 26356* --statistics: statistics. (line 6) 26357* '--strict-direct-mode': M68HC11-Opts. (line 57) 26358* --target-align: Xtensa Options. (line 46) 26359* --text-section-literals: Xtensa Options. (line 7) 26360* --traditional-format: traditional-format. (line 6) 26361* --trampolines: Xtensa Options. (line 74) 26362* --transform: Xtensa Options. (line 62) 26363* '--underscore' command-line option, CRIS: CRIS-Opts. (line 15) 26364* --warn: W. (line 19) 26365* '--x32' option, i386: i386-Options. (line 8) 26366* '--x32' option, x86-64: i386-Options. (line 8) 26367* '--xgate-ramoffset': M68HC11-Opts. (line 36) 26368* '-1' option, VAX/VMS: VAX-Opts. (line 77) 26369* '-32addr' command-line option, Alpha: Alpha Options. (line 57) 26370* -a: a. (line 6) 26371* -ac: a. (line 6) 26372* -ad: a. (line 6) 26373* -ag: a. (line 6) 26374* -ah: a. (line 6) 26375* -al: a. (line 6) 26376* -Aleon: Sparc-Opts. (line 25) 26377* -an: a. (line 6) 26378* -as: a. (line 6) 26379* -Asparc: Sparc-Opts. (line 25) 26380* -Asparcfmaf: Sparc-Opts. (line 25) 26381* -Asparcima: Sparc-Opts. (line 25) 26382* -Asparclet: Sparc-Opts. (line 25) 26383* -Asparclite: Sparc-Opts. (line 25) 26384* -Asparcvis: Sparc-Opts. (line 25) 26385* -Asparcvis2: Sparc-Opts. (line 25) 26386* -Asparcvis3: Sparc-Opts. (line 25) 26387* -Asparcvis3r: Sparc-Opts. (line 25) 26388* -Av6: Sparc-Opts. (line 25) 26389* -Av7: Sparc-Opts. (line 25) 26390* -Av8: Sparc-Opts. (line 25) 26391* -Av9: Sparc-Opts. (line 25) 26392* -Av9a: Sparc-Opts. (line 25) 26393* -Av9b: Sparc-Opts. (line 25) 26394* -Av9c: Sparc-Opts. (line 25) 26395* -Av9d: Sparc-Opts. (line 25) 26396* -Av9e: Sparc-Opts. (line 25) 26397* -Av9m: Sparc-Opts. (line 25) 26398* -Av9v: Sparc-Opts. (line 25) 26399* '-big' option, M32R: M32R-Opts. (line 35) 26400* '-colonless' command-line option, Z80: Z80 Options. (line 33) 26401* -D: D. (line 6) 26402* '-D', ignored on VAX: VAX-Opts. (line 11) 26403* '-d', VAX option: VAX-Opts. (line 16) 26404* '-eabi=' command-line option, ARM: ARM Options. (line 356) 26405* '-EB' command-line option, AArch64: AArch64 Options. (line 6) 26406* '-EB' command-line option, ARC: ARC Options. (line 84) 26407* '-EB' command-line option, ARM: ARM Options. (line 361) 26408* '-EB' command-line option, BPF: BPF Options. (line 6) 26409* '-EB' option (MIPS): MIPS Options. (line 13) 26410* '-EB' option, M32R: M32R-Opts. (line 39) 26411* '-EB' option, TILE-Gx: TILE-Gx Options. (line 11) 26412* '-EL' command-line option, AArch64: AArch64 Options. (line 10) 26413* '-EL' command-line option, ARC: ARC Options. (line 88) 26414* '-EL' command-line option, ARM: ARM Options. (line 372) 26415* '-EL' command-line option, BPF: BPF Options. (line 10) 26416* '-EL' option (MIPS): MIPS Options. (line 13) 26417* '-EL' option, M32R: M32R-Opts. (line 32) 26418* '-EL' option, TILE-Gx: TILE-Gx Options. (line 11) 26419* -f: f. (line 6) 26420* '-F' command-line option, Alpha: Alpha Options. (line 57) 26421* '-fno-pic' option, RISC-V: RISC-V-Options. (line 12) 26422* '-fp-d' command-line option, Z80: Z80 Options. (line 44) 26423* '-fp-s' command-line option, Z80: Z80 Options. (line 40) 26424* '-fpic' option, RISC-V: RISC-V-Options. (line 8) 26425* '-g' command-line option, Alpha: Alpha Options. (line 47) 26426* '-G' command-line option, Alpha: Alpha Options. (line 53) 26427* '-G' option (MIPS): MIPS Options. (line 8) 26428* '-h' option, VAX/VMS: VAX-Opts. (line 45) 26429* '-H' option, VAX/VMS: VAX-Opts. (line 81) 26430* -I PATH: I. (line 6) 26431* '-ignore-parallel-conflicts' option, M32RX: M32R-Opts. (line 87) 26432* '-Ip' option, M32RX: M32R-Opts. (line 97) 26433* '-J', ignored on VAX: VAX-Opts. (line 27) 26434* -K: K. (line 6) 26435* '-k' command-line option, ARM: ARM Options. (line 376) 26436* '-KPIC' option, M32R: M32R-Opts. (line 42) 26437* '-KPIC' option, MIPS: MIPS Options. (line 21) 26438* -L: L. (line 6) 26439* '-l' option, M680x0: M68K-Opts. (line 34) 26440* '-little' option, M32R: M32R-Opts. (line 27) 26441* '-local-prefix' command-line option, Z80: Z80 Options. (line 28) 26442* -M: M. (line 6) 26443* -m11/03: PDP-11-Options. (line 140) 26444* -m11/04: PDP-11-Options. (line 143) 26445* -m11/05: PDP-11-Options. (line 146) 26446* -m11/10: PDP-11-Options. (line 146) 26447* -m11/15: PDP-11-Options. (line 149) 26448* -m11/20: PDP-11-Options. (line 149) 26449* -m11/21: PDP-11-Options. (line 152) 26450* -m11/23: PDP-11-Options. (line 155) 26451* -m11/24: PDP-11-Options. (line 155) 26452* -m11/34: PDP-11-Options. (line 158) 26453* -m11/34a: PDP-11-Options. (line 161) 26454* -m11/35: PDP-11-Options. (line 164) 26455* -m11/40: PDP-11-Options. (line 164) 26456* -m11/44: PDP-11-Options. (line 167) 26457* -m11/45: PDP-11-Options. (line 170) 26458* -m11/50: PDP-11-Options. (line 170) 26459* -m11/53: PDP-11-Options. (line 173) 26460* -m11/55: PDP-11-Options. (line 170) 26461* -m11/60: PDP-11-Options. (line 176) 26462* -m11/70: PDP-11-Options. (line 170) 26463* -m11/73: PDP-11-Options. (line 173) 26464* -m11/83: PDP-11-Options. (line 173) 26465* -m11/84: PDP-11-Options. (line 173) 26466* -m11/93: PDP-11-Options. (line 173) 26467* -m11/94: PDP-11-Options. (line 173) 26468* '-m16c' option, M16C: M32C-Opts. (line 12) 26469* '-m31' option, s390: s390 Options. (line 8) 26470* '-m32' option, TILE-Gx: TILE-Gx Options. (line 8) 26471* '-m32bit-doubles': RX-Opts. (line 9) 26472* '-m32c' option, M32C: M32C-Opts. (line 9) 26473* '-m32r' option, M32R: M32R-Opts. (line 21) 26474* '-m32rx' option, M32R2: M32R-Opts. (line 17) 26475* '-m32rx' option, M32RX: M32R-Opts. (line 9) 26476* '-m4byte-align' command-line option, V850: V850 Options. (line 90) 26477* '-m64' option, s390: s390 Options. (line 8) 26478* '-m64' option, TILE-Gx: TILE-Gx Options. (line 8) 26479* '-m64bit-doubles': RX-Opts. (line 15) 26480* '-m68000' and related options: M68K-Opts. (line 99) 26481* '-m68hc11': M68HC11-Opts. (line 9) 26482* '-m68hc12': M68HC11-Opts. (line 14) 26483* '-m68hcs12': M68HC11-Opts. (line 21) 26484* '-m8byte-align' command-line option, V850: V850 Options. (line 86) 26485* '-mabi=' command-line option, AArch64: AArch64 Options. (line 14) 26486* '-mabi=ABI' option, RISC-V: RISC-V-Options. (line 33) 26487* '-madd-bnd-prefix' option, i386: i386-Options. (line 159) 26488* '-madd-bnd-prefix' option, x86-64: i386-Options. (line 159) 26489* '-malign-branch-boundary=' option, i386: i386-Options. (line 205) 26490* '-malign-branch-boundary=' option, x86-64: i386-Options. (line 205) 26491* '-malign-branch-prefix-size=' option, i386: i386-Options. (line 220) 26492* '-malign-branch-prefix-size=' option, x86-64: i386-Options. 26493 (line 220) 26494* '-malign-branch=' option, i386: i386-Options. (line 212) 26495* '-malign-branch=' option, x86-64: i386-Options. (line 212) 26496* -mall: PDP-11-Options. (line 26) 26497* '-mall-enabled' command-line option, LM32: LM32 Options. (line 30) 26498* -mall-extensions: PDP-11-Options. (line 26) 26499* '-mall-opcodes' command-line option, AVR: AVR Options. (line 111) 26500* '-mamd64' option, x86-64: i386-Options. (line 290) 26501* '-mapcs-26' command-line option, ARM: ARM Options. (line 328) 26502* '-mapcs-32' command-line option, ARM: ARM Options. (line 328) 26503* '-mapcs-float' command-line option, ARM: ARM Options. (line 342) 26504* '-mapcs-reentrant' command-line option, ARM: ARM Options. (line 347) 26505* '-march-attr' option, RISC-V: RISC-V-Options. (line 48) 26506* '-march=' command-line option, AArch64: AArch64 Options. (line 43) 26507* '-march=' command-line option, ARM: ARM Options. (line 85) 26508* '-march=' command-line option, M680x0: M68K-Opts. (line 8) 26509* '-march=' command-line option, TIC6X: TIC6X Options. (line 6) 26510* '-march=' command-line option, Z80: Z80 Options. (line 6) 26511* '-march=' option, i386: i386-Options. (line 32) 26512* '-march=' option, s390: s390 Options. (line 25) 26513* '-march=' option, x86-64: i386-Options. (line 32) 26514* '-march=ISA' option, RISC-V: RISC-V-Options. (line 15) 26515* '-matpcs' command-line option, ARM: ARM Options. (line 334) 26516* '-mavxscalar=' option, i386: i386-Options. (line 104) 26517* '-mavxscalar=' option, x86-64: i386-Options. (line 104) 26518* '-mbarrel-shift-enabled' command-line option, LM32: LM32 Options. 26519 (line 12) 26520* '-mbig-endian': RX-Opts. (line 20) 26521* '-mbig-endian' option, RISC-V: RISC-V-Options. (line 71) 26522* '-mbig-obj' option, i386: i386-Options. (line 173) 26523* '-mbig-obj' option, x86-64: i386-Options. (line 173) 26524* '-mbranches-within-32B-boundaries' option, i386: i386-Options. 26525 (line 225) 26526* '-mbranches-within-32B-boundaries' option, x86-64: i386-Options. 26527 (line 225) 26528* '-mbreak-enabled' command-line option, LM32: LM32 Options. (line 27) 26529* '-mccs' command-line option, ARM: ARM Options. (line 389) 26530* -mcis: PDP-11-Options. (line 32) 26531* '-mcode-density' command-line option, ARC: ARC Options. (line 93) 26532* '-mconstant-gp' command-line option, IA-64: IA-64 Options. (line 6) 26533* '-mCPU' command-line option, Alpha: Alpha Options. (line 6) 26534* '-mcpu' option, cpu: TIC54X-Opts. (line 15) 26535* '-mcpu=': RX-Opts. (line 75) 26536* '-mcpu=' command-line option, AArch64: AArch64 Options. (line 19) 26537* '-mcpu=' command-line option, ARM: ARM Options. (line 6) 26538* '-mcpu=' command-line option, Blackfin: Blackfin Options. (line 6) 26539* '-mcpu=' command-line option, M680x0: M68K-Opts. (line 14) 26540* '-mcpu=CPU' command-line option, ARC: ARC Options. (line 10) 26541* -mcsm: PDP-11-Options. (line 43) 26542* '-mcsr-check' option, RISC-V: RISC-V-Options. (line 60) 26543* '-mdcache-enabled' command-line option, LM32: LM32 Options. 26544 (line 24) 26545* '-mdebug' command-line option, Alpha: Alpha Options. (line 25) 26546* '-mdivide-enabled' command-line option, LM32: LM32 Options. 26547 (line 9) 26548* '-mdollar-hex' option, dollar-hex: S12Z Options. (line 17) 26549* '-mdpfp' command-line option, ARC: ARC Options. (line 108) 26550* '-mdsbt' command-line option, TIC6X: TIC6X Options. (line 13) 26551* '-me' option, stderr redirect: TIC54X-Opts. (line 20) 26552* -meis: PDP-11-Options. (line 46) 26553* '-mepiphany' command-line option, Epiphany: Epiphany Options. 26554 (line 9) 26555* '-mepiphany16' command-line option, Epiphany: Epiphany Options. 26556 (line 13) 26557* '-merrors-to-file' option, stderr redirect: TIC54X-Opts. (line 20) 26558* '-mesa' option, s390: s390 Options. (line 17) 26559* '-mevexlig=' option, i386: i386-Options. (line 125) 26560* '-mevexlig=' option, x86-64: i386-Options. (line 125) 26561* '-mevexrcig=' option, i386: i386-Options. (line 280) 26562* '-mevexrcig=' option, x86-64: i386-Options. (line 280) 26563* '-mevexwig=' option, i386: i386-Options. (line 135) 26564* '-mevexwig=' option, x86-64: i386-Options. (line 135) 26565* '-mf' option, far-mode: TIC54X-Opts. (line 8) 26566* -mf11: PDP-11-Options. (line 122) 26567* '-mfar-mode' option, far-mode: TIC54X-Opts. (line 8) 26568* '-mfdpic' command-line option, Blackfin: Blackfin Options. (line 19) 26569* '-mfence-as-lock-add=' option, i386: i386-Options. (line 186) 26570* '-mfence-as-lock-add=' option, x86-64: i386-Options. (line 186) 26571* -mfis: PDP-11-Options. (line 51) 26572* '-mfloat-abi=' command-line option, ARM: ARM Options. (line 351) 26573* -mfp-11: PDP-11-Options. (line 56) 26574* '-mfp16-format=' command-line option: ARM Options. (line 289) 26575* -mfpp: PDP-11-Options. (line 56) 26576* -mfpu: PDP-11-Options. (line 56) 26577* '-mfpu=' command-line option, ARM: ARM Options. (line 265) 26578* '-mfpuda' command-line option, ARC: ARC Options. (line 111) 26579* '-mgcc-abi': RX-Opts. (line 63) 26580* '-mgcc-abi' command-line option, V850: V850 Options. (line 79) 26581* '-mgcc-isr' command-line option, AVR: AVR Options. (line 132) 26582* '-mhard-float' command-line option, V850: V850 Options. (line 101) 26583* '-micache-enabled' command-line option, LM32: LM32 Options. 26584 (line 21) 26585* '-mimplicit-it' command-line option, ARM: ARM Options. (line 312) 26586* '-mint-register': RX-Opts. (line 57) 26587* '-mintel64' option, x86-64: i386-Options. (line 290) 26588* '-mip2022' option, IP2K: IP2K-Opts. (line 14) 26589* '-mip2022ext' option, IP2022: IP2K-Opts. (line 9) 26590* '-misa-spec=ISAspec' option, RISC-V: RISC-V-Options. (line 21) 26591* -mj11: PDP-11-Options. (line 126) 26592* -mka11: PDP-11-Options. (line 92) 26593* -mkb11: PDP-11-Options. (line 95) 26594* -mkd11a: PDP-11-Options. (line 98) 26595* -mkd11b: PDP-11-Options. (line 101) 26596* -mkd11d: PDP-11-Options. (line 104) 26597* -mkd11e: PDP-11-Options. (line 107) 26598* -mkd11f: PDP-11-Options. (line 110) 26599* -mkd11h: PDP-11-Options. (line 110) 26600* -mkd11k: PDP-11-Options. (line 114) 26601* -mkd11q: PDP-11-Options. (line 110) 26602* -mkd11z: PDP-11-Options. (line 118) 26603* -mkev11: PDP-11-Options. (line 51) 26604* -mkev11 <1>: PDP-11-Options. (line 51) 26605* '-mlfence-after-load=' option, i386: i386-Options. (line 233) 26606* '-mlfence-after-load=' option, x86-64: i386-Options. (line 233) 26607* '-mlfence-before-indirect-branch=' option, i386: i386-Options. 26608 (line 240) 26609* '-mlfence-before-indirect-branch=' option, x86-64: i386-Options. 26610 (line 240) 26611* '-mlfence-before-ret=' option, i386: i386-Options. (line 260) 26612* '-mlfence-before-ret=' option, x86-64: i386-Options. (line 260) 26613* -mlimited-eis: PDP-11-Options. (line 64) 26614* '-mlink-relax' command-line option, AVR: AVR Options. (line 123) 26615* '-mlittle-endian': RX-Opts. (line 26) 26616* '-mlittle-endian' option, RISC-V: RISC-V-Options. (line 68) 26617* '-mlong': M68HC11-Opts. (line 45) 26618* '-mlong' <1>: XGATE-Opts. (line 13) 26619* '-mlong-double': M68HC11-Opts. (line 53) 26620* '-mlong-double' <1>: XGATE-Opts. (line 21) 26621* '-mm9s12x': M68HC11-Opts. (line 27) 26622* '-mm9s12xg': M68HC11-Opts. (line 32) 26623* '-mmcu=' command-line option, AVR: AVR Options. (line 6) 26624* -mmfpt: PDP-11-Options. (line 70) 26625* -mmicrocode: PDP-11-Options. (line 83) 26626* '-mmnemonic=' option, i386: i386-Options. (line 142) 26627* '-mmnemonic=' option, x86-64: i386-Options. (line 142) 26628* '-mmultiply-enabled' command-line option, LM32: LM32 Options. 26629 (line 6) 26630* -mmutiproc: PDP-11-Options. (line 73) 26631* -mmxps: PDP-11-Options. (line 77) 26632* '-mnaked-reg' option, i386: i386-Options. (line 154) 26633* '-mnaked-reg' option, x86-64: i386-Options. (line 154) 26634* '-mnan=' command-line option, MIPS: MIPS Options. (line 439) 26635* '-mno-allow-string-insns': RX-Opts. (line 82) 26636* '-mno-arch-attr' option, RISC-V: RISC-V-Options. (line 56) 26637* -mno-cis: PDP-11-Options. (line 32) 26638* -mno-csm: PDP-11-Options. (line 43) 26639* '-mno-csr-check' option, RISC-V: RISC-V-Options. (line 65) 26640* '-mno-dsbt' command-line option, TIC6X: TIC6X Options. (line 13) 26641* -mno-eis: PDP-11-Options. (line 46) 26642* -mno-extensions: PDP-11-Options. (line 29) 26643* '-mno-fdpic' command-line option, Blackfin: Blackfin Options. 26644 (line 22) 26645* -mno-fis: PDP-11-Options. (line 51) 26646* -mno-fp-11: PDP-11-Options. (line 56) 26647* -mno-fpp: PDP-11-Options. (line 56) 26648* -mno-fpu: PDP-11-Options. (line 56) 26649* -mno-kev11: PDP-11-Options. (line 51) 26650* -mno-limited-eis: PDP-11-Options. (line 64) 26651* '-mno-link-relax' command-line option, AVR: AVR Options. (line 127) 26652* -mno-mfpt: PDP-11-Options. (line 70) 26653* -mno-microcode: PDP-11-Options. (line 83) 26654* -mno-mutiproc: PDP-11-Options. (line 73) 26655* -mno-mxps: PDP-11-Options. (line 77) 26656* -mno-pic: PDP-11-Options. (line 11) 26657* '-mno-pic' command-line option, TIC6X: TIC6X Options. (line 36) 26658* '-mno-regnames' option, s390: s390 Options. (line 51) 26659* '-mno-relax' option, RISC-V: RISC-V-Options. (line 45) 26660* '-mno-skip-bug' command-line option, AVR: AVR Options. (line 114) 26661* -mno-spl: PDP-11-Options. (line 80) 26662* -mno-sym32: MIPS Options. (line 348) 26663* '-mno-verbose-error' command-line option, AArch64: AArch64 Options. 26664 (line 64) 26665* '-mno-wrap' command-line option, AVR: AVR Options. (line 117) 26666* '-mnopic' command-line option, Blackfin: Blackfin Options. (line 22) 26667* '-mnps400' command-line option, ARC: ARC Options. (line 102) 26668* '-momit-lock-prefix=' option, i386: i386-Options. (line 177) 26669* '-momit-lock-prefix=' option, x86-64: i386-Options. (line 177) 26670* -mpic: PDP-11-Options. (line 11) 26671* '-mpic' command-line option, TIC6X: TIC6X Options. (line 36) 26672* '-mpid': RX-Opts. (line 50) 26673* '-mpid=' command-line option, TIC6X: TIC6X Options. (line 23) 26674* '-mpriv-spec=PRIVspec' option, RISC-V: RISC-V-Options. (line 27) 26675* '-mreg-prefix=PREFIX' option, reg-prefix: S12Z Options. (line 9) 26676* '-mregnames' option, s390: s390 Options. (line 48) 26677* '-mrelax' command-line option, ARC: ARC Options. (line 97) 26678* '-mrelax' command-line option, V850: V850 Options. (line 72) 26679* '-mrelax' option, RISC-V: RISC-V-Options. (line 41) 26680* '-mrelax-relocations=' option, i386: i386-Options. (line 195) 26681* '-mrelax-relocations=' option, x86-64: i386-Options. (line 195) 26682* '-mrh850-abi' command-line option, V850: V850 Options. (line 82) 26683* '-mrmw' command-line option, AVR: AVR Options. (line 120) 26684* '-mrx-abi': RX-Opts. (line 69) 26685* '-mshared' option, i386: i386-Options. (line 164) 26686* '-mshared' option, x86-64: i386-Options. (line 164) 26687* '-mshort': M68HC11-Opts. (line 40) 26688* '-mshort' <1>: XGATE-Opts. (line 8) 26689* '-mshort-double': M68HC11-Opts. (line 49) 26690* '-mshort-double' <1>: XGATE-Opts. (line 17) 26691* '-msign-extend-enabled' command-line option, LM32: LM32 Options. 26692 (line 15) 26693* '-msmall-data-limit': RX-Opts. (line 42) 26694* '-msoft-float' command-line option, V850: V850 Options. (line 95) 26695* '-mspfp' command-line option, ARC: ARC Options. (line 105) 26696* -mspl: PDP-11-Options. (line 80) 26697* '-msse-check=' option, i386: i386-Options. (line 94) 26698* '-msse-check=' option, x86-64: i386-Options. (line 94) 26699* '-msse2avx' option, i386: i386-Options. (line 90) 26700* '-msse2avx' option, x86-64: i386-Options. (line 90) 26701* -msym32: MIPS Options. (line 348) 26702* '-msyntax=' option, i386: i386-Options. (line 148) 26703* '-msyntax=' option, x86-64: i386-Options. (line 148) 26704* -mt11: PDP-11-Options. (line 130) 26705* '-mthumb' command-line option, ARM: ARM Options. (line 302) 26706* '-mthumb-interwork' command-line option, ARM: ARM Options. (line 307) 26707* '-mtune=' option, i386: i386-Options. (line 82) 26708* '-mtune=' option, x86-64: i386-Options. (line 82) 26709* '-mtune=ARCH' command-line option, Visium: Visium Options. (line 8) 26710* '-muse-conventional-section-names': RX-Opts. (line 33) 26711* '-muse-renesas-section-names': RX-Opts. (line 37) 26712* '-muser-enabled' command-line option, LM32: LM32 Options. (line 18) 26713* '-mv850' command-line option, V850: V850 Options. (line 23) 26714* '-mv850any' command-line option, V850: V850 Options. (line 41) 26715* '-mv850e' command-line option, V850: V850 Options. (line 29) 26716* '-mv850e1' command-line option, V850: V850 Options. (line 35) 26717* '-mv850e2' command-line option, V850: V850 Options. (line 51) 26718* '-mv850e2v3' command-line option, V850: V850 Options. (line 57) 26719* '-mv850e2v4' command-line option, V850: V850 Options. (line 63) 26720* '-mv850e3v5' command-line option, V850: V850 Options. (line 66) 26721* '-mverbose-error' command-line option, AArch64: AArch64 Options. 26722 (line 60) 26723* '-mvexwig=' option, i386: i386-Options. (line 115) 26724* '-mvexwig=' option, x86-64: i386-Options. (line 115) 26725* '-mvxworks-pic' option, MIPS: MIPS Options. (line 26) 26726* '-mwarn-areg-zero' option, s390: s390 Options. (line 54) 26727* '-mwarn-deprecated' command-line option, ARM: ARM Options. (line 384) 26728* '-mwarn-syms' command-line option, ARM: ARM Options. (line 392) 26729* '-mx86-used-note=' option, i386: i386-Options. (line 273) 26730* '-mx86-used-note=' option, x86-64: i386-Options. (line 273) 26731* '-mzarch' option, s390: s390 Options. (line 17) 26732* '-m[no-]68851' command-line option, M680x0: M68K-Opts. (line 21) 26733* '-m[no-]68881' command-line option, M680x0: M68K-Opts. (line 21) 26734* '-m[no-]div' command-line option, M680x0: M68K-Opts. (line 21) 26735* '-m[no-]emac' command-line option, M680x0: M68K-Opts. (line 21) 26736* '-m[no-]float' command-line option, M680x0: M68K-Opts. (line 21) 26737* '-m[no-]mac' command-line option, M680x0: M68K-Opts. (line 21) 26738* '-m[no-]usp' command-line option, M680x0: M68K-Opts. (line 21) 26739* '-N' command-line option, CRIS: CRIS-Opts. (line 59) 26740* '-nIp' option, M32RX: M32R-Opts. (line 101) 26741* '-no-bitinst', M32R2: M32R-Opts. (line 54) 26742* '-no-ignore-parallel-conflicts' option, M32RX: M32R-Opts. (line 93) 26743* '-no-mdebug' command-line option, Alpha: Alpha Options. (line 25) 26744* '-no-parallel' option, M32RX: M32R-Opts. (line 51) 26745* '-no-warn-explicit-parallel-conflicts' option, M32RX: M32R-Opts. 26746 (line 79) 26747* '-no-warn-unmatched-high' option, M32R: M32R-Opts. (line 111) 26748* '-nocpp' ignored (MIPS): MIPS Options. (line 351) 26749* '-noreplace' command-line option, Alpha: Alpha Options. (line 40) 26750* -o: o. (line 6) 26751* '-O' option, i386: i386-Options. (line 296) 26752* '-O' option, M32RX: M32R-Opts. (line 59) 26753* '-O' option, x86-64: i386-Options. (line 296) 26754* '-O0' option, i386: i386-Options. (line 296) 26755* '-O0' option, x86-64: i386-Options. (line 296) 26756* '-O1' option, i386: i386-Options. (line 296) 26757* '-O1' option, x86-64: i386-Options. (line 296) 26758* '-O2' option, i386: i386-Options. (line 296) 26759* '-O2' option, x86-64: i386-Options. (line 296) 26760* '-Os' option, i386: i386-Options. (line 296) 26761* '-Os' option, x86-64: i386-Options. (line 296) 26762* '-parallel' option, M32RX: M32R-Opts. (line 46) 26763* -R: R. (line 6) 26764* '-relax' command-line option, Alpha: Alpha Options. (line 32) 26765* '-replace' command-line option, Alpha: Alpha Options. (line 40) 26766* '-S', ignored on VAX: VAX-Opts. (line 11) 26767* '-sdcc' command-line option, Z80: Z80 Options. (line 37) 26768* '-T', ignored on VAX: VAX-Opts. (line 11) 26769* '-t', ignored on VAX: VAX-Opts. (line 36) 26770* -v: v. (line 6) 26771* '-V', redundant on VAX: VAX-Opts. (line 22) 26772* -version: v. (line 6) 26773* -W: W. (line 11) 26774* '-warn-explicit-parallel-conflicts' option, M32RX: M32R-Opts. 26775 (line 65) 26776* '-warn-unmatched-high' option, M32R: M32R-Opts. (line 105) 26777* '-Wnp' option, M32RX: M32R-Opts. (line 83) 26778* '-Wnuh' option, M32RX: M32R-Opts. (line 117) 26779* '-Wp' option, M32RX: M32R-Opts. (line 75) 26780* '-wsigned_overflow' command-line option, V850: V850 Options. 26781 (line 9) 26782* '-Wuh' option, M32RX: M32R-Opts. (line 114) 26783* '-wunsigned_overflow' command-line option, V850: V850 Options. 26784 (line 16) 26785* '-x' command-line option, MMIX: MMIX-Opts. (line 44) 26786* '-z8001' command-line option, Z8000: Z8000 Options. (line 6) 26787* '-z8002' command-line option, Z8000: Z8000 Options. (line 9) 26788* '.' (symbol): Dot. (line 6) 26789* '.align' directive, ARM: ARM Directives. (line 6) 26790* '.align' directive, TILE-Gx: TILE-Gx Directives. (line 6) 26791* '.align' directive, TILEPro: TILEPro Directives. (line 6) 26792* '.allow_suspicious_bundles' directive, TILE-Gx: TILE-Gx Directives. 26793 (line 10) 26794* '.allow_suspicious_bundles' directive, TILEPro: TILEPro Directives. 26795 (line 10) 26796* '.arch' directive, AArch64: AArch64 Directives. (line 6) 26797* '.arch' directive, ARM: ARM Directives. (line 13) 26798* '.arch' directive, TIC6X: TIC6X Directives. (line 10) 26799* '.arch_extension' directive, AArch64: AArch64 Directives. (line 13) 26800* '.arch_extension' directive, ARM: ARM Directives. (line 21) 26801* '.arc_attribute' directive, ARC: ARC Directives. (line 240) 26802* '.arm' directive, ARM: ARM Directives. (line 30) 26803* '.assume' directive, Z80: Z80 Directives. (line 12) 26804* '.attribute' directive, RISC-V: RISC-V-Directives. (line 100) 26805* '.big' directive, M32RX: M32R-Directives. (line 88) 26806* '.bss' directive, AArch64: AArch64 Directives. (line 21) 26807* '.bss' directive, ARM: ARM Directives. (line 33) 26808* '.c6xabi_attribute' directive, TIC6X: TIC6X Directives. (line 20) 26809* '.cantunwind' directive, ARM: ARM Directives. (line 36) 26810* '.cantunwind' directive, TIC6X: TIC6X Directives. (line 13) 26811* '.cfi_b_key_frame' directive, AArch64: AArch64 Directives. (line 99) 26812* '.code' directive, ARM: ARM Directives. (line 40) 26813* '.cpu' directive, AArch64: AArch64 Directives. (line 24) 26814* '.cpu' directive, ARM: ARM Directives. (line 44) 26815* '.dn' and '.qn' directives, ARM: ARM Directives. (line 52) 26816* '.dword' directive, AArch64: AArch64 Directives. (line 28) 26817* '.eabi_attribute' directive, ARM: ARM Directives. (line 76) 26818* '.ehtype' directive, TIC6X: TIC6X Directives. (line 31) 26819* '.endp' directive, TIC6X: TIC6X Directives. (line 34) 26820* '.even' directive, AArch64: AArch64 Directives. (line 31) 26821* '.even' directive, ARM: ARM Directives. (line 105) 26822* '.extend' directive, ARM: ARM Directives. (line 108) 26823* '.float16' directive, AArch64: AArch64 Directives. (line 35) 26824* '.float16' directive, ARM: ARM Directives. (line 114) 26825* '.float16_format' directive, ARM: ARM Directives. (line 122) 26826* '.fnend' directive, ARM: ARM Directives. (line 129) 26827* '.fnstart' directive, ARM: ARM Directives. (line 137) 26828* '.force_thumb' directive, ARM: ARM Directives. (line 140) 26829* '.fpu' directive, ARM: ARM Directives. (line 144) 26830* '.global': MIPS insn. (line 12) 26831* '.gnu_attribute 4, N' directive, MIPS: MIPS FP ABI History. 26832 (line 6) 26833* '.gnu_attribute Tag_GNU_MIPS_ABI_FP, N' directive, MIPS: MIPS FP ABI History. 26834 (line 6) 26835* '.handlerdata' directive, ARM: ARM Directives. (line 148) 26836* '.handlerdata' directive, TIC6X: TIC6X Directives. (line 39) 26837* '.insn': MIPS insn. (line 6) 26838* '.insn' directive, s390: s390 Directives. (line 11) 26839* '.inst' directive, AArch64: AArch64 Directives. (line 41) 26840* '.inst' directive, ARM: ARM Directives. (line 157) 26841* '.ldouble' directive, ARM: ARM Directives. (line 108) 26842* '.little' directive, M32RX: M32R-Directives. (line 82) 26843* '.long' directive, s390: s390 Directives. (line 16) 26844* '.ltorg' directive, AArch64: AArch64 Directives. (line 45) 26845* '.ltorg' directive, ARM: ARM Directives. (line 167) 26846* '.ltorg' directive, s390: s390 Directives. (line 79) 26847* '.m32r' directive, M32R: M32R-Directives. (line 66) 26848* '.m32r2' directive, M32R2: M32R-Directives. (line 77) 26849* '.m32rx' directive, M32RX: M32R-Directives. (line 72) 26850* '.machine' directive, s390: s390 Directives. (line 84) 26851* '.machinemode' directive, s390: s390 Directives. (line 101) 26852* '.module': MIPS assembly options. 26853 (line 6) 26854* '.module fp=NN' directive, MIPS: MIPS FP ABI Selection. 26855 (line 6) 26856* '.movsp' directive, ARM: ARM Directives. (line 181) 26857* '.nan' directive, MIPS: MIPS NaN Encodings. (line 6) 26858* '.nocmp' directive, TIC6X: TIC6X Directives. (line 47) 26859* '.no_pointers' directive, XStormy16: XStormy16 Directives. 26860 (line 14) 26861* .o: Object. (line 6) 26862* '.object_arch' directive, ARM: ARM Directives. (line 186) 26863* '.packed' directive, ARM: ARM Directives. (line 192) 26864* '.pad' directive, ARM: ARM Directives. (line 197) 26865* '.param' on HPPA: HPPA Directives. (line 19) 26866* '.personality' directive, ARM: ARM Directives. (line 202) 26867* '.personality' directive, TIC6X: TIC6X Directives. (line 55) 26868* '.personalityindex' directive, ARM: ARM Directives. (line 205) 26869* '.personalityindex' directive, TIC6X: TIC6X Directives. (line 51) 26870* '.pool' directive, AArch64: AArch64 Directives. (line 59) 26871* '.pool' directive, ARM: ARM Directives. (line 209) 26872* '.quad' directive, s390: s390 Directives. (line 16) 26873* '.req' directive, AArch64: AArch64 Directives. (line 62) 26874* '.req' directive, ARM: ARM Directives. (line 212) 26875* '.require_canonical_reg_names' directive, TILE-Gx: TILE-Gx Directives. 26876 (line 19) 26877* '.require_canonical_reg_names' directive, TILEPro: TILEPro Directives. 26878 (line 19) 26879* '.save' directive, ARM: ARM Directives. (line 217) 26880* '.scomm' directive, TIC6X: TIC6X Directives. (line 58) 26881* '.secrel32' directive, ARM: ARM Directives. (line 255) 26882* '.set arch=CPU': MIPS ISA. (line 18) 26883* '.set at': MIPS Macros. (line 41) 26884* '.set at=REG': MIPS Macros. (line 35) 26885* '.set autoextend': MIPS autoextend. (line 6) 26886* '.set crc': MIPS ASE Instruction Generation Overrides. 26887 (line 68) 26888* '.set doublefloat': MIPS Floating-Point. 26889 (line 12) 26890* '.set dsp': MIPS ASE Instruction Generation Overrides. 26891 (line 21) 26892* '.set dspr2': MIPS ASE Instruction Generation Overrides. 26893 (line 26) 26894* '.set dspr3': MIPS ASE Instruction Generation Overrides. 26895 (line 31) 26896* '.set ginv': MIPS ASE Instruction Generation Overrides. 26897 (line 72) 26898* '.set hardfloat': MIPS Floating-Point. 26899 (line 6) 26900* '.set insn32': MIPS assembly options. 26901 (line 18) 26902* '.set loongson-cam': MIPS ASE Instruction Generation Overrides. 26903 (line 81) 26904* '.set loongson-ext': MIPS ASE Instruction Generation Overrides. 26905 (line 86) 26906* '.set loongson-ext2': MIPS ASE Instruction Generation Overrides. 26907 (line 91) 26908* '.set loongson-mmi': MIPS ASE Instruction Generation Overrides. 26909 (line 76) 26910* '.set macro': MIPS Macros. (line 30) 26911* '.set mcu': MIPS ASE Instruction Generation Overrides. 26912 (line 42) 26913* '.set mdmx': MIPS ASE Instruction Generation Overrides. 26914 (line 16) 26915* '.set mips16e2': MIPS ASE Instruction Generation Overrides. 26916 (line 61) 26917* '.set mips3d': MIPS ASE Instruction Generation Overrides. 26918 (line 6) 26919* '.set mipsN': MIPS ISA. (line 6) 26920* '.set msa': MIPS ASE Instruction Generation Overrides. 26921 (line 47) 26922* '.set mt': MIPS ASE Instruction Generation Overrides. 26923 (line 37) 26924* '.set noat': MIPS Macros. (line 41) 26925* '.set noautoextend': MIPS autoextend. (line 6) 26926* '.set nocrc': MIPS ASE Instruction Generation Overrides. 26927 (line 68) 26928* '.set nodsp': MIPS ASE Instruction Generation Overrides. 26929 (line 21) 26930* '.set nodspr2': MIPS ASE Instruction Generation Overrides. 26931 (line 26) 26932* '.set nodspr3': MIPS ASE Instruction Generation Overrides. 26933 (line 31) 26934* '.set noginv': MIPS ASE Instruction Generation Overrides. 26935 (line 72) 26936* '.set noinsn32': MIPS assembly options. 26937 (line 18) 26938* '.set noloongson-cam': MIPS ASE Instruction Generation Overrides. 26939 (line 81) 26940* '.set noloongson-ext': MIPS ASE Instruction Generation Overrides. 26941 (line 86) 26942* '.set noloongson-ext2': MIPS ASE Instruction Generation Overrides. 26943 (line 91) 26944* '.set noloongson-mmi': MIPS ASE Instruction Generation Overrides. 26945 (line 76) 26946* '.set nomacro': MIPS Macros. (line 30) 26947* '.set nomcu': MIPS ASE Instruction Generation Overrides. 26948 (line 42) 26949* '.set nomdmx': MIPS ASE Instruction Generation Overrides. 26950 (line 16) 26951* '.set nomips16e2': MIPS ASE Instruction Generation Overrides. 26952 (line 61) 26953* '.set nomips3d': MIPS ASE Instruction Generation Overrides. 26954 (line 6) 26955* '.set nomsa': MIPS ASE Instruction Generation Overrides. 26956 (line 47) 26957* '.set nomt': MIPS ASE Instruction Generation Overrides. 26958 (line 37) 26959* '.set nosmartmips': MIPS ASE Instruction Generation Overrides. 26960 (line 11) 26961* '.set nosym32': MIPS Symbol Sizes. (line 6) 26962* '.set novirt': MIPS ASE Instruction Generation Overrides. 26963 (line 52) 26964* '.set noxpa': MIPS ASE Instruction Generation Overrides. 26965 (line 57) 26966* '.set pop': MIPS Option Stack. (line 6) 26967* '.set push': MIPS Option Stack. (line 6) 26968* '.set singlefloat': MIPS Floating-Point. 26969 (line 12) 26970* '.set smartmips': MIPS ASE Instruction Generation Overrides. 26971 (line 11) 26972* '.set softfloat': MIPS Floating-Point. 26973 (line 6) 26974* '.set sym32': MIPS Symbol Sizes. (line 6) 26975* '.set virt': MIPS ASE Instruction Generation Overrides. 26976 (line 52) 26977* '.set xpa': MIPS ASE Instruction Generation Overrides. 26978 (line 57) 26979* '.setfp' directive, ARM: ARM Directives. (line 241) 26980* '.short' directive, s390: s390 Directives. (line 16) 26981* '.syntax' directive, ARM: ARM Directives. (line 260) 26982* '.thumb' directive, ARM: ARM Directives. (line 264) 26983* '.thumb_func' directive, ARM: ARM Directives. (line 267) 26984* '.thumb_set' directive, ARM: ARM Directives. (line 278) 26985* '.tlsdescadd' directive, AArch64: AArch64 Directives. (line 70) 26986* '.tlsdesccall' directive, AArch64: AArch64 Directives. (line 73) 26987* '.tlsdescldr' directive, AArch64: AArch64 Directives. (line 76) 26988* '.tlsdescseq' directive, ARM: ARM Directives. (line 285) 26989* '.unreq' directive, AArch64: AArch64 Directives. (line 79) 26990* '.unreq' directive, ARM: ARM Directives. (line 290) 26991* '.unwind_raw' directive, ARM: ARM Directives. (line 301) 26992* '.v850' directive, V850: V850 Directives. (line 14) 26993* '.v850e' directive, V850: V850 Directives. (line 20) 26994* '.v850e1' directive, V850: V850 Directives. (line 26) 26995* '.v850e2' directive, V850: V850 Directives. (line 32) 26996* '.v850e2v3' directive, V850: V850 Directives. (line 38) 26997* '.v850e2v4' directive, V850: V850 Directives. (line 44) 26998* '.v850e3v5' directive, V850: V850 Directives. (line 50) 26999* '.variant_pcs' directive, AArch64: AArch64 Directives. (line 90) 27000* '.vsave' directive, ARM: ARM Directives. (line 308) 27001* '.xword' directive, AArch64: AArch64 Directives. (line 95) 27002* .z8001: Z8000 Directives. (line 11) 27003* .z8002: Z8000 Directives. (line 15) 27004* 16-bit code, i386: i386-16bit. (line 6) 27005* '16bit_pointers' directive, XStormy16: XStormy16 Directives. 27006 (line 6) 27007* '16byte' directive, Nios II: Nios II Directives. (line 28) 27008* '16byte' directive, PRU: PRU Directives. (line 25) 27009* '2byte' directive: 2byte. (line 6) 27010* '2byte' directive, Nios II: Nios II Directives. (line 19) 27011* '2byte' directive, PRU: PRU Directives. (line 16) 27012* '32bit_pointers' directive, XStormy16: XStormy16 Directives. 27013 (line 10) 27014* 3DNow!, i386: i386-SIMD. (line 6) 27015* 3DNow!, x86-64: i386-SIMD. (line 6) 27016* 430 support: MSP430-Dependent. (line 6) 27017* '4byte' directive: 4byte. (line 6) 27018* '4byte' directive, Nios II: Nios II Directives. (line 22) 27019* '4byte' directive, PRU: PRU Directives. (line 19) 27020* '8byte' directive: 8byte. (line 6) 27021* '8byte' directive, Nios II: Nios II Directives. (line 25) 27022* '8byte' directive, PRU: PRU Directives. (line 22) 27023* ':' (label): Statements. (line 31) 27024* @gotoff(SYMBOL), ARC modifier: ARC Modifiers. (line 20) 27025* @gotpc(SYMBOL), ARC modifier: ARC Modifiers. (line 16) 27026* '@hi' pseudo-op, XStormy16: XStormy16 Opcodes. (line 21) 27027* '@lo' pseudo-op, XStormy16: XStormy16 Opcodes. (line 10) 27028* @pcl(SYMBOL), ARC modifier: ARC Modifiers. (line 12) 27029* @plt(SYMBOL), ARC modifier: ARC Modifiers. (line 23) 27030* @sda(SYMBOL), ARC modifier: ARC Modifiers. (line 28) 27031* @word modifier, D10V: D10V-Word. (line 6) 27032* _ opcode prefix: Xtensa Opcodes. (line 9) 27033* __DYNAMIC__, ARC pre-defined symbol: ARC Symbols. (line 14) 27034* __GLOBAL_OFFSET_TABLE__, ARC pre-defined symbol: ARC Symbols. 27035 (line 11) 27036* a.out: Object. (line 6) 27037* 'a.out' symbol attributes: a.out Symbols. (line 6) 27038* AArch64 floating point (IEEE): AArch64 Floating Point. 27039 (line 6) 27040* AArch64 immediate character: AArch64-Chars. (line 13) 27041* AArch64 line comment character: AArch64-Chars. (line 6) 27042* AArch64 line separator: AArch64-Chars. (line 10) 27043* AArch64 machine directives: AArch64 Directives. (line 6) 27044* AArch64 opcodes: AArch64 Opcodes. (line 6) 27045* AArch64 options (none): AArch64 Options. (line 6) 27046* AArch64 register names: AArch64-Regs. (line 6) 27047* AArch64 relocations: AArch64-Relocations. 27048 (line 6) 27049* AArch64 support: AArch64-Dependent. (line 6) 27050* 'abort' directive: Abort. (line 6) 27051* 'ABORT' directive: ABORT (COFF). (line 6) 27052* absolute section: Ld Sections. (line 29) 27053* 'absolute-literals' directive: Absolute Literals Directive. 27054 (line 6) 27055* 'ADDI' instructions, relaxation: Xtensa Immediate Relaxation. 27056 (line 43) 27057* addition, permitted arguments: Infix Ops. (line 45) 27058* addresses: Expressions. (line 6) 27059* addresses, format of: Secs Background. (line 65) 27060* addressing modes, D10V: D10V-Addressing. (line 6) 27061* addressing modes, D30V: D30V-Addressing. (line 6) 27062* addressing modes, H8/300: H8/300-Addressing. (line 6) 27063* addressing modes, M680x0: M68K-Syntax. (line 21) 27064* addressing modes, M68HC11: M68HC11-Syntax. (line 29) 27065* addressing modes, S12Z: S12Z Addressing Modes. 27066 (line 6) 27067* addressing modes, SH: SH-Addressing. (line 6) 27068* addressing modes, XGATE: XGATE-Syntax. (line 28) 27069* addressing modes, Z8000: Z8000-Addressing. (line 6) 27070* 'ADR reg,<label>' pseudo op, ARM: ARM Opcodes. (line 25) 27071* 'ADRL reg,<label>' pseudo op, ARM: ARM Opcodes. (line 43) 27072* ADRP, ADD, LDR/STR group relocations, AArch64: AArch64-Relocations. 27073 (line 14) 27074* advancing location counter: Org. (line 6) 27075* 'align' directive: Align. (line 6) 27076* 'align' directive <1>: RISC-V-Directives. (line 8) 27077* 'align' directive, Nios II: Nios II Directives. (line 6) 27078* 'align' directive, OpenRISC: OpenRISC-Directives. 27079 (line 9) 27080* 'align' directive, PRU: PRU Directives. (line 6) 27081* 'align' directive, SPARC: Sparc-Directives. (line 9) 27082* 'align' directive, TIC54X: TIC54X-Directives. (line 6) 27083* aligned instruction bundle: Bundle directives. (line 9) 27084* alignment for NEON instructions: ARM-Neon-Alignment. (line 6) 27085* alignment of branch targets: Xtensa Automatic Alignment. 27086 (line 6) 27087* alignment of 'LOOP' instructions: Xtensa Automatic Alignment. 27088 (line 6) 27089* Alpha floating point (IEEE): Alpha Floating Point. 27090 (line 6) 27091* Alpha line comment character: Alpha-Chars. (line 6) 27092* Alpha line separator: Alpha-Chars. (line 11) 27093* Alpha notes: Alpha Notes. (line 6) 27094* Alpha options: Alpha Options. (line 6) 27095* Alpha registers: Alpha-Regs. (line 6) 27096* Alpha relocations: Alpha-Relocs. (line 6) 27097* Alpha support: Alpha-Dependent. (line 6) 27098* Alpha Syntax: Alpha Options. (line 60) 27099* Alpha-only directives: Alpha Directives. (line 9) 27100* Altera Nios II support: NiosII-Dependent. (line 6) 27101* altered difference tables: Word. (line 12) 27102* alternate syntax for the 680x0: M68K-Moto-Syntax. (line 6) 27103* ARC Branch Target Address: ARC-Regs. (line 60) 27104* ARC BTA saved on exception entry: ARC-Regs. (line 79) 27105* ARC Build configuration for: BTA Registers: ARC-Regs. (line 89) 27106* ARC Build configuration for: Core Registers: ARC-Regs. (line 97) 27107* ARC Build configuration for: Interrupts: ARC-Regs. (line 93) 27108* ARC Build Configuration Registers Version: ARC-Regs. (line 85) 27109* ARC C preprocessor macro separator: ARC-Chars. (line 31) 27110* ARC core general registers: ARC-Regs. (line 10) 27111* ARC DCCM RAM Configuration Register: ARC-Regs. (line 101) 27112* ARC Exception Cause Register: ARC-Regs. (line 63) 27113* ARC Exception Return Address: ARC-Regs. (line 76) 27114* ARC extension core registers: ARC-Regs. (line 38) 27115* ARC frame pointer: ARC-Regs. (line 17) 27116* ARC global pointer: ARC-Regs. (line 14) 27117* ARC interrupt link register: ARC-Regs. (line 27) 27118* ARC Interrupt Vector Base address: ARC-Regs. (line 66) 27119* ARC level 1 interrupt link register: ARC-Regs. (line 23) 27120* ARC level 2 interrupt link register: ARC-Regs. (line 31) 27121* ARC line comment character: ARC-Chars. (line 11) 27122* ARC line separator: ARC-Chars. (line 27) 27123* ARC link register: ARC-Regs. (line 35) 27124* ARC loop counter: ARC-Regs. (line 41) 27125* ARC machine directives: ARC Directives. (line 6) 27126* ARC opcodes: ARC Opcodes. (line 6) 27127* ARC options: ARC Options. (line 6) 27128* ARC Processor Identification register: ARC-Regs. (line 51) 27129* ARC Program Counter: ARC-Regs. (line 54) 27130* ARC register name prefix character: ARC-Chars. (line 7) 27131* ARC register names: ARC-Regs. (line 6) 27132* ARC Saved User Stack Pointer: ARC-Regs. (line 73) 27133* ARC stack pointer: ARC-Regs. (line 20) 27134* ARC Status register: ARC-Regs. (line 57) 27135* ARC STATUS32 saved on exception: ARC-Regs. (line 82) 27136* ARC Stored STATUS32 register on entry to level P0 interrupts: ARC-Regs. 27137 (line 69) 27138* ARC support: ARC-Dependent. (line 6) 27139* ARC symbol prefix character: ARC-Chars. (line 20) 27140* ARC word aligned program counter: ARC-Regs. (line 44) 27141* arch directive, i386: i386-Arch. (line 6) 27142* 'arch' directive, M680x0: M68K-Directives. (line 22) 27143* 'arch' directive, MSP 430: MSP430 Directives. (line 18) 27144* arch directive, x86-64: i386-Arch. (line 6) 27145* architecture options, IP2022: IP2K-Opts. (line 9) 27146* architecture options, IP2K: IP2K-Opts. (line 14) 27147* architecture options, M16C: M32C-Opts. (line 12) 27148* architecture options, M32C: M32C-Opts. (line 9) 27149* architecture options, M32R: M32R-Opts. (line 21) 27150* architecture options, M32R2: M32R-Opts. (line 17) 27151* architecture options, M32RX: M32R-Opts. (line 9) 27152* architecture options, M680x0: M68K-Opts. (line 99) 27153* Architecture variant option, CRIS: CRIS-Opts. (line 34) 27154* architectures, Meta: Meta Options. (line 6) 27155* architectures, PowerPC: PowerPC-Opts. (line 6) 27156* architectures, SCORE: SCORE-Opts. (line 6) 27157* architectures, SPARC: Sparc-Opts. (line 6) 27158* arguments for addition: Infix Ops. (line 45) 27159* arguments for subtraction: Infix Ops. (line 50) 27160* arguments in expressions: Arguments. (line 6) 27161* arithmetic functions: Operators. (line 6) 27162* arithmetic operands: Arguments. (line 6) 27163* ARM data relocations: ARM-Relocations. (line 6) 27164* ARM floating point (IEEE): ARM Floating Point. (line 6) 27165* ARM identifiers: ARM-Chars. (line 19) 27166* ARM immediate character: ARM-Chars. (line 17) 27167* ARM line comment character: ARM-Chars. (line 6) 27168* ARM line separator: ARM-Chars. (line 14) 27169* ARM machine directives: ARM Directives. (line 6) 27170* ARM opcodes: ARM Opcodes. (line 6) 27171* ARM options (none): ARM Options. (line 6) 27172* ARM register names: ARM-Regs. (line 6) 27173* ARM support: ARM-Dependent. (line 6) 27174* 'ascii' directive: Ascii. (line 6) 27175* 'asciz' directive: Asciz. (line 6) 27176* 'asg' directive, TIC54X: TIC54X-Directives. (line 18) 27177* assembler bugs, reporting: Bug Reporting. (line 6) 27178* assembler crash: Bug Criteria. (line 9) 27179* assembler directive .3byte, RX: RX-Directives. (line 9) 27180* assembler directive .arch, CRIS: CRIS-Pseudos. (line 50) 27181* assembler directive .dword, CRIS: CRIS-Pseudos. (line 12) 27182* assembler directive .far, M68HC11: M68HC11-Directives. (line 20) 27183* assembler directive .fetchalign, RX: RX-Directives. (line 13) 27184* assembler directive .interrupt, M68HC11: M68HC11-Directives. 27185 (line 26) 27186* assembler directive .mode, M68HC11: M68HC11-Directives. (line 16) 27187* assembler directive .relax, M68HC11: M68HC11-Directives. (line 10) 27188* assembler directive .syntax, CRIS: CRIS-Pseudos. (line 18) 27189* assembler directive .xrefb, M68HC11: M68HC11-Directives. (line 31) 27190* assembler directive BSPEC, MMIX: MMIX-Pseudos. (line 137) 27191* assembler directive BYTE, MMIX: MMIX-Pseudos. (line 101) 27192* assembler directive ESPEC, MMIX: MMIX-Pseudos. (line 137) 27193* assembler directive GREG, MMIX: MMIX-Pseudos. (line 53) 27194* assembler directive IS, MMIX: MMIX-Pseudos. (line 44) 27195* assembler directive LOC, MMIX: MMIX-Pseudos. (line 7) 27196* assembler directive LOCAL, MMIX: MMIX-Pseudos. (line 29) 27197* assembler directive OCTA, MMIX: MMIX-Pseudos. (line 113) 27198* assembler directive PREFIX, MMIX: MMIX-Pseudos. (line 125) 27199* assembler directive TETRA, MMIX: MMIX-Pseudos. (line 113) 27200* assembler directive WYDE, MMIX: MMIX-Pseudos. (line 113) 27201* assembler directives, CRIS: CRIS-Pseudos. (line 6) 27202* assembler directives, M68HC11: M68HC11-Directives. (line 6) 27203* assembler directives, M68HC12: M68HC11-Directives. (line 6) 27204* assembler directives, MMIX: MMIX-Pseudos. (line 6) 27205* assembler directives, RL78: RL78-Directives. (line 6) 27206* assembler directives, RX: RX-Directives. (line 6) 27207* assembler directives, XGATE: XGATE-Directives. (line 6) 27208* assembler internal logic error: As Sections. (line 13) 27209* assembler version: v. (line 6) 27210* assembler, and linker: Secs Background. (line 10) 27211* assembly listings, enabling: a. (line 6) 27212* assigning values to symbols: Setting Symbols. (line 6) 27213* assigning values to symbols <1>: Equ. (line 6) 27214* 'at' register, MIPS: MIPS Macros. (line 35) 27215* attributes, symbol: Symbol Attributes. (line 6) 27216* att_syntax pseudo op, i386: i386-Variations. (line 6) 27217* att_syntax pseudo op, x86-64: i386-Variations. (line 6) 27218* auxiliary attributes, COFF symbols: COFF Symbols. (line 19) 27219* auxiliary symbol information, COFF: Dim. (line 6) 27220* AVR line comment character: AVR-Chars. (line 6) 27221* AVR line separator: AVR-Chars. (line 14) 27222* AVR modifiers: AVR-Modifiers. (line 6) 27223* AVR opcode summary: AVR Opcodes. (line 6) 27224* AVR options (none): AVR Options. (line 6) 27225* AVR register names: AVR-Regs. (line 6) 27226* AVR support: AVR-Dependent. (line 6) 27227* 'A_DIR' environment variable, TIC54X: TIC54X-Env. (line 6) 27228* backslash ('\\'): Strings. (line 40) 27229* backspace ('\b'): Strings. (line 15) 27230* 'balign' directive: Balign. (line 6) 27231* 'balignl' directive: Balign. (line 29) 27232* 'balignw' directive: Balign. (line 29) 27233* 'bes' directive, TIC54X: TIC54X-Directives. (line 194) 27234* big endian output, MIPS: Overview. (line 855) 27235* big endian output, PJ: Overview. (line 759) 27236* big-endian output, MIPS: MIPS Options. (line 13) 27237* big-endian output, TIC6X: TIC6X Options. (line 46) 27238* bignums: Bignums. (line 6) 27239* binary constants, TIC54X: TIC54X-Constants. (line 8) 27240* binary files, including: Incbin. (line 6) 27241* binary integers: Integers. (line 6) 27242* bit names, IA-64: IA-64-Bits. (line 6) 27243* bitfields, not supported on VAX: VAX-no. (line 6) 27244* Blackfin directives: Blackfin Directives. 27245 (line 6) 27246* Blackfin options (none): Blackfin Options. (line 6) 27247* Blackfin support: Blackfin-Dependent. (line 6) 27248* Blackfin syntax: Blackfin Syntax. (line 6) 27249* block: Z8000 Directives. (line 54) 27250* BMI, i386: i386-BMI. (line 6) 27251* BMI, x86-64: i386-BMI. (line 6) 27252* BPF line comment character: BPF-Chars. (line 6) 27253* BPF opcodes: BPF Opcodes. (line 6) 27254* BPF options (none): BPF Options. (line 6) 27255* BPF register names: BPF-Regs. (line 6) 27256* BPF support: BPF-Dependent. (line 6) 27257* branch improvement, M680x0: M68K-Branch. (line 6) 27258* branch improvement, M68HC11: M68HC11-Branch. (line 6) 27259* branch improvement, VAX: VAX-branch. (line 6) 27260* branch instructions, relaxation: Xtensa Branch Relaxation. 27261 (line 6) 27262* Branch Target Address, ARC: ARC-Regs. (line 60) 27263* branch target alignment: Xtensa Automatic Alignment. 27264 (line 6) 27265* 'break' directive, TIC54X: TIC54X-Directives. (line 141) 27266* BSD syntax: PDP-11-Syntax. (line 6) 27267* BSS directive: RISC-V-Directives. (line 24) 27268* 'bss' directive, TIC54X: TIC54X-Directives. (line 27) 27269* bss section: Ld Sections. (line 20) 27270* bss section <1>: bss. (line 6) 27271* BTA saved on exception entry, ARC: ARC-Regs. (line 79) 27272* bug criteria: Bug Criteria. (line 6) 27273* bug reports: Bug Reporting. (line 6) 27274* bugs in assembler: Reporting Bugs. (line 6) 27275* Build configuration for: BTA Registers, ARC: ARC-Regs. (line 89) 27276* Build configuration for: Core Registers, ARC: ARC-Regs. (line 97) 27277* Build configuration for: Interrupts, ARC: ARC-Regs. (line 93) 27278* Build Configuration Registers Version, ARC: ARC-Regs. (line 85) 27279* Built-in symbols, CRIS: CRIS-Symbols. (line 6) 27280* builtin math functions, TIC54X: TIC54X-Builtins. (line 6) 27281* builtin subsym functions, TIC54X: TIC54X-Macros. (line 16) 27282* bundle: Bundle directives. (line 9) 27283* bundle-locked: Bundle directives. (line 39) 27284* 'bundle_align_mode' directive: Bundle directives. (line 9) 27285* 'bundle_lock' directive: Bundle directives. (line 31) 27286* 'bundle_unlock' directive: Bundle directives. (line 31) 27287* bus lock prefixes, i386: i386-Prefixes. (line 36) 27288* bval: Z8000 Directives. (line 30) 27289* 'byte' directive: Byte. (line 6) 27290* 'byte' directive, TIC54X: TIC54X-Directives. (line 34) 27291* C preprocessor macro separator, ARC: ARC-Chars. (line 31) 27292* C-SKY options: C-SKY Options. (line 6) 27293* C-SKY support: C-SKY-Dependent. (line 6) 27294* 'C54XDSP_DIR' environment variable, TIC54X: TIC54X-Env. (line 6) 27295* 'call' directive, Nios II: Nios II Relocations. 27296 (line 38) 27297* call instructions, i386: i386-Mnemonics. (line 114) 27298* call instructions, relaxation: Xtensa Call Relaxation. 27299 (line 6) 27300* call instructions, x86-64: i386-Mnemonics. (line 114) 27301* 'call_hiadj' directive, Nios II: Nios II Relocations. 27302 (line 38) 27303* 'call_lo' directive, Nios II: Nios II Relocations. 27304 (line 38) 27305* carriage return ('backslash-r'): Strings. (line 24) 27306* case sensitivity, Z80: Z80-Case. (line 6) 27307* 'cfi_endproc' directive: CFI directives. (line 40) 27308* 'cfi_fde_data' directive: CFI directives. (line 66) 27309* 'cfi_personality' directive: CFI directives. (line 47) 27310* 'cfi_personality_id' directive: CFI directives. (line 59) 27311* 'cfi_sections' directive: CFI directives. (line 9) 27312* 'cfi_startproc' directive: CFI directives. (line 30) 27313* 'char' directive, TIC54X: TIC54X-Directives. (line 34) 27314* character constant, Z80: Z80-Chars. (line 20) 27315* character constants: Characters. (line 6) 27316* character escape codes: Strings. (line 15) 27317* character escapes, Z80: Z80-Chars. (line 18) 27318* character, single: Chars. (line 6) 27319* characters used in symbols: Symbol Intro. (line 6) 27320* 'clink' directive, TIC54X: TIC54X-Directives. (line 43) 27321* 'code16' directive, i386: i386-16bit. (line 6) 27322* 'code16gcc' directive, i386: i386-16bit. (line 6) 27323* 'code32' directive, i386: i386-16bit. (line 6) 27324* 'code64' directive, i386: i386-16bit. (line 6) 27325* 'code64' directive, x86-64: i386-16bit. (line 6) 27326* COFF auxiliary symbol information: Dim. (line 6) 27327* COFF structure debugging: Tag. (line 6) 27328* COFF symbol attributes: COFF Symbols. (line 6) 27329* COFF symbol descriptor: Desc. (line 6) 27330* COFF symbol storage class: Scl. (line 6) 27331* COFF symbol type: Type. (line 11) 27332* COFF symbols, debugging: Def. (line 6) 27333* COFF value attribute: Val. (line 6) 27334* COMDAT: Linkonce. (line 6) 27335* 'comm' directive: Comm. (line 6) 27336* command line conventions: Command Line. (line 6) 27337* command-line options ignored, VAX: VAX-Opts. (line 6) 27338* command-line options, V850: V850 Options. (line 9) 27339* comment character, XStormy16: XStormy16-Chars. (line 11) 27340* comments: Comments. (line 6) 27341* comments, M680x0: M68K-Chars. (line 6) 27342* comments, removed by preprocessor: Preprocessing. (line 11) 27343* 'common' directive, SPARC: Sparc-Directives. (line 12) 27344* common sections: Linkonce. (line 6) 27345* common variable storage: bss. (line 6) 27346* comparison expressions: Infix Ops. (line 56) 27347* conditional assembly: If. (line 6) 27348* constant, single character: Chars. (line 6) 27349* constants: Constants. (line 6) 27350* constants, bignum: Bignums. (line 6) 27351* constants, character: Characters. (line 6) 27352* constants, converted by preprocessor: Preprocessing. (line 14) 27353* constants, floating point: Flonums. (line 6) 27354* constants, integer: Integers. (line 6) 27355* constants, number: Numbers. (line 6) 27356* constants, Sparc: Sparc-Constants. (line 6) 27357* constants, string: Strings. (line 6) 27358* constants, TIC54X: TIC54X-Constants. (line 6) 27359* conversion instructions, i386: i386-Mnemonics. (line 66) 27360* conversion instructions, x86-64: i386-Mnemonics. (line 66) 27361* coprocessor wait, i386: i386-Prefixes. (line 40) 27362* 'copy' directive, TIC54X: TIC54X-Directives. (line 52) 27363* core general registers, ARC: ARC-Regs. (line 10) 27364* 'cpu' directive, ARC: ARC Directives. (line 27) 27365* 'cpu' directive, M680x0: M68K-Directives. (line 30) 27366* 'cpu' directive, MSP 430: MSP430 Directives. (line 22) 27367* CR16 line comment character: CR16-Chars. (line 6) 27368* CR16 line separator: CR16-Chars. (line 12) 27369* CR16 Operand Qualifiers: CR16 Operand Qualifiers. 27370 (line 6) 27371* CR16 support: CR16-Dependent. (line 6) 27372* crash of assembler: Bug Criteria. (line 9) 27373* CRIS '--emulation=crisaout' command-line option: CRIS-Opts. 27374 (line 9) 27375* CRIS '--emulation=criself' command-line option: CRIS-Opts. (line 9) 27376* CRIS '--march=ARCHITECTURE' command-line option: CRIS-Opts. 27377 (line 34) 27378* CRIS '--mul-bug-abort' command-line option: CRIS-Opts. (line 63) 27379* CRIS '--no-mul-bug-abort' command-line option: CRIS-Opts. (line 63) 27380* CRIS '--no-underscore' command-line option: CRIS-Opts. (line 15) 27381* CRIS '--pic' command-line option: CRIS-Opts. (line 27) 27382* CRIS '--underscore' command-line option: CRIS-Opts. (line 15) 27383* CRIS '-N' command-line option: CRIS-Opts. (line 59) 27384* CRIS architecture variant option: CRIS-Opts. (line 34) 27385* CRIS assembler directive .arch: CRIS-Pseudos. (line 50) 27386* CRIS assembler directive .dword: CRIS-Pseudos. (line 12) 27387* CRIS assembler directive .syntax: CRIS-Pseudos. (line 18) 27388* CRIS assembler directives: CRIS-Pseudos. (line 6) 27389* CRIS built-in symbols: CRIS-Symbols. (line 6) 27390* CRIS instruction expansion: CRIS-Expand. (line 6) 27391* CRIS line comment characters: CRIS-Chars. (line 6) 27392* CRIS options: CRIS-Opts. (line 6) 27393* CRIS position-independent code: CRIS-Opts. (line 27) 27394* CRIS pseudo-op .arch: CRIS-Pseudos. (line 50) 27395* CRIS pseudo-op .dword: CRIS-Pseudos. (line 12) 27396* CRIS pseudo-op .syntax: CRIS-Pseudos. (line 18) 27397* CRIS pseudo-ops: CRIS-Pseudos. (line 6) 27398* CRIS register names: CRIS-Regs. (line 6) 27399* CRIS support: CRIS-Dependent. (line 6) 27400* CRIS symbols in position-independent code: CRIS-Pic. (line 6) 27401* 'ctbp' register, V850: V850-Regs. (line 90) 27402* 'ctoff' pseudo-op, V850: V850 Opcodes. (line 110) 27403* 'ctpc' register, V850: V850-Regs. (line 82) 27404* 'ctpsw' register, V850: V850-Regs. (line 84) 27405* current address: Dot. (line 6) 27406* current address, advancing: Org. (line 6) 27407* 'c_mode' directive, TIC54X: TIC54X-Directives. (line 49) 27408* D10V @word modifier: D10V-Word. (line 6) 27409* D10V addressing modes: D10V-Addressing. (line 6) 27410* D10V floating point: D10V-Float. (line 6) 27411* D10V line comment character: D10V-Chars. (line 6) 27412* D10V opcode summary: D10V-Opcodes. (line 6) 27413* D10V optimization: Overview. (line 638) 27414* D10V options: D10V-Opts. (line 6) 27415* D10V registers: D10V-Regs. (line 6) 27416* D10V size modifiers: D10V-Size. (line 6) 27417* D10V sub-instruction ordering: D10V-Chars. (line 14) 27418* D10V sub-instructions: D10V-Subs. (line 6) 27419* D10V support: D10V-Dependent. (line 6) 27420* D10V syntax: D10V-Syntax. (line 6) 27421* 'd24' directive, Z80: Z80 Directives. (line 32) 27422* D30V addressing modes: D30V-Addressing. (line 6) 27423* D30V floating point: D30V-Float. (line 6) 27424* D30V Guarded Execution: D30V-Guarded. (line 6) 27425* D30V line comment character: D30V-Chars. (line 6) 27426* D30V nops: Overview. (line 646) 27427* D30V nops after 32-bit multiply: Overview. (line 649) 27428* D30V opcode summary: D30V-Opcodes. (line 6) 27429* D30V optimization: Overview. (line 643) 27430* D30V options: D30V-Opts. (line 6) 27431* D30V registers: D30V-Regs. (line 6) 27432* D30V size modifiers: D30V-Size. (line 6) 27433* D30V sub-instruction ordering: D30V-Chars. (line 14) 27434* D30V sub-instructions: D30V-Subs. (line 6) 27435* D30V support: D30V-Dependent. (line 6) 27436* D30V syntax: D30V-Syntax. (line 6) 27437* 'd32' directive, Z80: Z80 Directives. (line 37) 27438* data alignment on SPARC: Sparc-Aligned-Data. (line 6) 27439* data and text sections, joining: R. (line 6) 27440* 'data' directive: Data. (line 6) 27441* 'data' directive, TIC54X: TIC54X-Directives. (line 59) 27442* Data directives: RISC-V-Directives. (line 12) 27443* data relocations, ARM: ARM-Relocations. (line 6) 27444* data section: Ld Sections. (line 9) 27445* 'data1' directive, M680x0: M68K-Directives. (line 9) 27446* 'data2' directive, M680x0: M68K-Directives. (line 12) 27447* 'db' directive, Z80: Z80 Directives. (line 18) 27448* 'dbpc' register, V850: V850-Regs. (line 86) 27449* 'dbpsw' register, V850: V850-Regs. (line 88) 27450* 'dc' directive: Dc. (line 6) 27451* 'dcb' directive: Dcb. (line 6) 27452* DCCM RAM Configuration Register, ARC: ARC-Regs. (line 101) 27453* debuggers, and symbol order: Symbols. (line 10) 27454* debugging COFF symbols: Def. (line 6) 27455* DEC syntax: PDP-11-Syntax. (line 6) 27456* decimal integers: Integers. (line 12) 27457* 'def' directive: Def. (line 6) 27458* 'def' directive, TIC54X: TIC54X-Directives. (line 101) 27459* 'def24' directive, Z80: Z80 Directives. (line 33) 27460* 'def32' directive, Z80: Z80 Directives. (line 38) 27461* 'defb' directive, Z80: Z80 Directives. (line 19) 27462* 'defl' directive, Z80: Z80 Directives. (line 47) 27463* 'defm' directive, Z80: Z80 Directives. (line 20) 27464* 'defs' directive, Z80: Z80 Directives. (line 43) 27465* 'defw' directive, Z80: Z80 Directives. (line 28) 27466* density instructions: Density Instructions. 27467 (line 6) 27468* dependency tracking: MD. (line 6) 27469* deprecated directives: Deprecated. (line 6) 27470* 'desc' directive: Desc. (line 6) 27471* descriptor, of 'a.out' symbol: Symbol Desc. (line 6) 27472* 'dfloat' directive, VAX: VAX-directives. (line 9) 27473* difference tables altered: Word. (line 12) 27474* difference tables, warning: K. (line 6) 27475* differences, mmixal: MMIX-mmixal. (line 6) 27476* 'dim' directive: Dim. (line 6) 27477* directives and instructions: Statements. (line 20) 27478* directives for PowerPC: PowerPC-Pseudo. (line 6) 27479* directives for SCORE: SCORE-Pseudo. (line 6) 27480* directives, Blackfin: Blackfin Directives. 27481 (line 6) 27482* directives, M32R: M32R-Directives. (line 6) 27483* directives, M680x0: M68K-Directives. (line 6) 27484* directives, machine independent: Pseudo Ops. (line 6) 27485* directives, Xtensa: Xtensa Directives. (line 6) 27486* directives, Z8000: Z8000 Directives. (line 6) 27487* Disable floating-point instructions: MIPS Floating-Point. 27488 (line 6) 27489* Disable single-precision floating-point operations: MIPS Floating-Point. 27490 (line 12) 27491* displacement sizing character, VAX: VAX-operands. (line 12) 27492* dollar local symbols: Symbol Names. (line 113) 27493* dot (symbol): Dot. (line 6) 27494* 'double' directive: Double. (line 6) 27495* 'double' directive, i386: i386-Float. (line 14) 27496* 'double' directive, M680x0: M68K-Float. (line 14) 27497* 'double' directive, M68HC11: M68HC11-Float. (line 14) 27498* 'double' directive, RX: RX-Float. (line 11) 27499* 'double' directive, TIC54X: TIC54X-Directives. (line 62) 27500* 'double' directive, VAX: VAX-float. (line 15) 27501* 'double' directive, x86-64: i386-Float. (line 14) 27502* 'double' directive, XGATE: XGATE-Float. (line 13) 27503* doublequote ('\"'): Strings. (line 43) 27504* 'drlist' directive, TIC54X: TIC54X-Directives. (line 71) 27505* 'drnolist' directive, TIC54X: TIC54X-Directives. (line 71) 27506* 'ds' directive: Ds. (line 6) 27507* 'ds' directive, Z80: Z80 Directives. (line 42) 27508* DTP-relative data directives: RISC-V-Directives. (line 18) 27509* 'dw' directive, Z80: Z80 Directives. (line 27) 27510* 'dword' directive, BPF: BPF Directives. (line 15) 27511* 'dword' directive, Nios II: Nios II Directives. (line 16) 27512* 'dword' directive, PRU: PRU Directives. (line 13) 27513* 'EB' command-line option, C-SKY: C-SKY Options. (line 18) 27514* 'EB' command-line option, Nios II: Nios II Options. (line 22) 27515* 'ecr' register, V850: V850-Regs. (line 78) 27516* eight-byte integer: Quad. (line 9) 27517* eight-byte integer <1>: 8byte. (line 6) 27518* 'eipc' register, V850: V850-Regs. (line 70) 27519* 'eipsw' register, V850: V850-Regs. (line 72) 27520* 'eject' directive: Eject. (line 6) 27521* 'EL' command-line option, C-SKY: C-SKY Options. (line 14) 27522* 'EL' command-line option, Nios II: Nios II Options. (line 25) 27523* ELF symbol type: Type. (line 22) 27524* 'else' directive: Else. (line 6) 27525* 'elseif' directive: Elseif. (line 6) 27526* empty expressions: Empty Exprs. (line 6) 27527* 'emsg' directive, TIC54X: TIC54X-Directives. (line 75) 27528* emulation: Overview. (line 1109) 27529* encoding options, i386: i386-Mnemonics. (line 38) 27530* encoding options, x86-64: i386-Mnemonics. (line 38) 27531* 'end' directive: End. (line 6) 27532* 'endef' directive: Endef. (line 6) 27533* 'endfunc' directive: Endfunc. (line 6) 27534* endianness, MIPS: Overview. (line 855) 27535* endianness, PJ: Overview. (line 759) 27536* 'endif' directive: Endif. (line 6) 27537* 'endloop' directive, TIC54X: TIC54X-Directives. (line 141) 27538* 'endm' directive: Macro. (line 137) 27539* 'endm' directive, TIC54X: TIC54X-Directives. (line 151) 27540* 'endproc' directive, OpenRISC: OpenRISC-Directives. 27541 (line 24) 27542* 'endstruct' directive, TIC54X: TIC54X-Directives. (line 214) 27543* 'endunion' directive, TIC54X: TIC54X-Directives. (line 248) 27544* environment settings, TIC54X: TIC54X-Env. (line 6) 27545* EOF, newline must precede: Statements. (line 14) 27546* 'ep' register, V850: V850-Regs. (line 66) 27547* Epiphany line comment character: Epiphany-Chars. (line 6) 27548* Epiphany line separator: Epiphany-Chars. (line 14) 27549* Epiphany options: Epiphany Options. (line 6) 27550* Epiphany support: Epiphany-Dependent. (line 6) 27551* 'equ' directive: Equ. (line 6) 27552* 'equ' directive, TIC54X: TIC54X-Directives. (line 189) 27553* 'equ' directive, Z80: Z80 Directives. (line 52) 27554* 'equiv' directive: Equiv. (line 6) 27555* 'eqv' directive: Eqv. (line 6) 27556* 'err' directive: Err. (line 6) 27557* error directive: Error. (line 6) 27558* error messages: Errors. (line 6) 27559* error on valid input: Bug Criteria. (line 12) 27560* errors, caused by warnings: W. (line 16) 27561* errors, continuing after: Z. (line 6) 27562* escape codes, character: Strings. (line 15) 27563* 'eval' directive, TIC54X: TIC54X-Directives. (line 22) 27564* even: Z8000 Directives. (line 57) 27565* 'even' directive, M680x0: M68K-Directives. (line 15) 27566* 'even' directive, TIC54X: TIC54X-Directives. (line 6) 27567* Exception Cause Register, ARC: ARC-Regs. (line 63) 27568* Exception Return Address, ARC: ARC-Regs. (line 76) 27569* 'exitm' directive: Macro. (line 140) 27570* expr (internal section): As Sections. (line 17) 27571* expression arguments: Arguments. (line 6) 27572* expressions: Expressions. (line 6) 27573* expressions, comparison: Infix Ops. (line 56) 27574* expressions, empty: Empty Exprs. (line 6) 27575* expressions, integer: Integer Exprs. (line 6) 27576* 'extAuxRegister' directive, ARC: ARC Directives. (line 105) 27577* 'extCondCode' directive, ARC: ARC Directives. (line 126) 27578* 'extCoreRegister' directive, ARC: ARC Directives. (line 137) 27579* 'extend' directive M680x0: M68K-Float. (line 17) 27580* 'extend' directive M68HC11: M68HC11-Float. (line 17) 27581* 'extend' directive XGATE: XGATE-Float. (line 16) 27582* extension core registers, ARC: ARC-Regs. (line 38) 27583* extension instructions, i386: i386-Mnemonics. (line 85) 27584* extension instructions, x86-64: i386-Mnemonics. (line 85) 27585* 'extern' directive: Extern. (line 6) 27586* 'extInstruction' directive, ARC: ARC Directives. (line 164) 27587* 'fail' directive: Fail. (line 6) 27588* 'far_mode' directive, TIC54X: TIC54X-Directives. (line 80) 27589* faster processing ('-f'): f. (line 6) 27590* fatal signal: Bug Criteria. (line 9) 27591* 'fclist' directive, TIC54X: TIC54X-Directives. (line 85) 27592* 'fcnolist' directive, TIC54X: TIC54X-Directives. (line 85) 27593* 'fepc' register, V850: V850-Regs. (line 74) 27594* 'fepsw' register, V850: V850-Regs. (line 76) 27595* 'ffloat' directive, VAX: VAX-directives. (line 13) 27596* 'field' directive, TIC54X: TIC54X-Directives. (line 89) 27597* 'file' directive: File. (line 6) 27598* 'file' directive, MSP 430: MSP430 Directives. (line 6) 27599* file name, logical: File. (line 13) 27600* file names and line numbers, in warnings/errors: Errors. (line 16) 27601* files, including: Include. (line 6) 27602* files, input: Input Files. (line 6) 27603* 'fill' directive: Fill. (line 6) 27604* filling memory: Skip. (line 6) 27605* filling memory <1>: Space. (line 6) 27606* filling memory with no-op instructions: Nop. (line 6) 27607* filling memory with no-op instructions <1>: Nops. (line 6) 27608* filling memory with zero bytes: Zero. (line 6) 27609* FLIX syntax: Xtensa Syntax. (line 6) 27610* 'float' directive: Float. (line 6) 27611* 'float' directive, i386: i386-Float. (line 14) 27612* 'float' directive, M680x0: M68K-Float. (line 11) 27613* 'float' directive, M68HC11: M68HC11-Float. (line 11) 27614* 'float' directive, RX: RX-Float. (line 8) 27615* 'float' directive, TIC54X: TIC54X-Directives. (line 62) 27616* 'float' directive, VAX: VAX-float. (line 15) 27617* 'float' directive, x86-64: i386-Float. (line 14) 27618* 'float' directive, XGATE: XGATE-Float. (line 10) 27619* floating point numbers: Flonums. (line 6) 27620* floating point numbers (double): Double. (line 6) 27621* floating point numbers (single): Float. (line 6) 27622* floating point numbers (single) <1>: Single. (line 6) 27623* floating point, AArch64 (IEEE): AArch64 Floating Point. 27624 (line 6) 27625* floating point, Alpha (IEEE): Alpha Floating Point. 27626 (line 6) 27627* floating point, ARM (IEEE): ARM Floating Point. (line 6) 27628* floating point, D10V: D10V-Float. (line 6) 27629* floating point, D30V: D30V-Float. (line 6) 27630* floating point, H8/300 (IEEE): H8/300 Floating Point. 27631 (line 6) 27632* floating point, HPPA (IEEE): HPPA Floating Point. 27633 (line 6) 27634* floating point, i386: i386-Float. (line 6) 27635* floating point, M680x0: M68K-Float. (line 6) 27636* floating point, M68HC11: M68HC11-Float. (line 6) 27637* floating point, MSP 430 (IEEE): MSP430 Floating Point. 27638 (line 6) 27639* floating point, OPENRISC (IEEE): OpenRISC-Float. (line 6) 27640* floating point, RX: RX-Float. (line 6) 27641* floating point, s390: s390 Floating Point. 27642 (line 6) 27643* floating point, SH (IEEE): SH Floating Point. (line 6) 27644* floating point, SPARC (IEEE): Sparc-Float. (line 6) 27645* floating point, V850 (IEEE): V850 Floating Point. 27646 (line 6) 27647* floating point, VAX: VAX-float. (line 6) 27648* floating point, WebAssembly (IEEE): WebAssembly-Floating-Point. 27649 (line 6) 27650* floating point, x86-64: i386-Float. (line 6) 27651* floating point, XGATE: XGATE-Float. (line 6) 27652* floating point, Z80: Z80 Floating Point. (line 6) 27653* flonums: Flonums. (line 6) 27654* 'force2bsr' command-line option, C-SKY: C-SKY Options. (line 43) 27655* format of error messages: Errors. (line 38) 27656* format of warning messages: Errors. (line 12) 27657* formfeed ('\f'): Strings. (line 18) 27658* four-byte integer: 4byte. (line 6) 27659* 'fpic' command-line option, C-SKY: C-SKY Options. (line 22) 27660* frame pointer, ARC: ARC-Regs. (line 17) 27661* 'func' directive: Func. (line 6) 27662* functions, in expressions: Operators. (line 6) 27663* 'gfloat' directive, VAX: VAX-directives. (line 17) 27664* global: Z8000 Directives. (line 21) 27665* 'global' directive: Global. (line 6) 27666* 'global' directive, TIC54X: TIC54X-Directives. (line 101) 27667* global pointer, ARC: ARC-Regs. (line 14) 27668* 'got' directive, Nios II: Nios II Relocations. 27669 (line 38) 27670* 'gotoff' directive, Nios II: Nios II Relocations. 27671 (line 38) 27672* 'gotoff_hiadj' directive, Nios II: Nios II Relocations. 27673 (line 38) 27674* 'gotoff_lo' directive, Nios II: Nios II Relocations. 27675 (line 38) 27676* 'got_hiadj' directive, Nios II: Nios II Relocations. 27677 (line 38) 27678* 'got_lo' directive, Nios II: Nios II Relocations. 27679 (line 38) 27680* 'gp' register, MIPS: MIPS Small Data. (line 6) 27681* 'gp' register, V850: V850-Regs. (line 14) 27682* 'gprel' directive, Nios II: Nios II Relocations. 27683 (line 26) 27684* grouping data: Sub-Sections. (line 6) 27685* H8/300 addressing modes: H8/300-Addressing. (line 6) 27686* H8/300 floating point (IEEE): H8/300 Floating Point. 27687 (line 6) 27688* H8/300 line comment character: H8/300-Chars. (line 6) 27689* H8/300 line separator: H8/300-Chars. (line 8) 27690* H8/300 machine directives (none): H8/300 Directives. (line 6) 27691* H8/300 opcode summary: H8/300 Opcodes. (line 6) 27692* H8/300 options: H8/300 Options. (line 6) 27693* H8/300 registers: H8/300-Regs. (line 6) 27694* H8/300 size suffixes: H8/300 Opcodes. (line 160) 27695* H8/300 support: H8/300-Dependent. (line 6) 27696* H8/300H, assembling for: H8/300 Directives. (line 8) 27697* 'half' directive, BPF: BPF Directives. (line 9) 27698* 'half' directive, Nios II: Nios II Directives. (line 10) 27699* 'half' directive, SPARC: Sparc-Directives. (line 17) 27700* 'half' directive, TIC54X: TIC54X-Directives. (line 109) 27701* hex character code ('\XD...'): Strings. (line 36) 27702* hexadecimal integers: Integers. (line 15) 27703* hexadecimal prefix, S12Z: S12Z Options. (line 17) 27704* hexadecimal prefix, Z80: Z80-Chars. (line 15) 27705* 'hfloat' directive, VAX: VAX-directives. (line 21) 27706* 'hi' directive, Nios II: Nios II Relocations. 27707 (line 20) 27708* 'hi' pseudo-op, V850: V850 Opcodes. (line 33) 27709* 'hi0' pseudo-op, V850: V850 Opcodes. (line 10) 27710* 'hiadj' directive, Nios II: Nios II Relocations. 27711 (line 6) 27712* 'hidden' directive: Hidden. (line 6) 27713* 'high' directive, M32R: M32R-Directives. (line 18) 27714* 'hilo' pseudo-op, V850: V850 Opcodes. (line 55) 27715* HPPA directives not supported: HPPA Directives. (line 11) 27716* HPPA floating point (IEEE): HPPA Floating Point. 27717 (line 6) 27718* HPPA Syntax: HPPA Options. (line 7) 27719* HPPA-only directives: HPPA Directives. (line 24) 27720* 'hword' directive: hword. (line 6) 27721* i386 16-bit code: i386-16bit. (line 6) 27722* i386 arch directive: i386-Arch. (line 6) 27723* i386 att_syntax pseudo op: i386-Variations. (line 6) 27724* i386 conversion instructions: i386-Mnemonics. (line 66) 27725* i386 extension instructions: i386-Mnemonics. (line 85) 27726* i386 floating point: i386-Float. (line 6) 27727* i386 immediate operands: i386-Variations. (line 15) 27728* i386 instruction naming: i386-Mnemonics. (line 9) 27729* i386 instruction prefixes: i386-Prefixes. (line 6) 27730* i386 intel_syntax pseudo op: i386-Variations. (line 6) 27731* i386 jump optimization: i386-Jumps. (line 6) 27732* i386 jump, call, return: i386-Variations. (line 45) 27733* i386 jump/call operands: i386-Variations. (line 15) 27734* i386 line comment character: i386-Chars. (line 6) 27735* i386 line separator: i386-Chars. (line 18) 27736* i386 memory references: i386-Memory. (line 6) 27737* i386 mnemonic compatibility: i386-Mnemonics. (line 120) 27738* i386 'mul', 'imul' instructions: i386-Notes. (line 6) 27739* i386 options: i386-Options. (line 6) 27740* i386 register operands: i386-Variations. (line 15) 27741* i386 registers: i386-Regs. (line 6) 27742* i386 sections: i386-Variations. (line 51) 27743* i386 size suffixes: i386-Variations. (line 28) 27744* i386 source, destination operands: i386-Variations. (line 21) 27745* i386 support: i386-Dependent. (line 6) 27746* i386 syntax compatibility: i386-Variations. (line 6) 27747* i80386 support: i386-Dependent. (line 6) 27748* IA-64 line comment character: IA-64-Chars. (line 6) 27749* IA-64 line separator: IA-64-Chars. (line 8) 27750* IA-64 options: IA-64 Options. (line 6) 27751* IA-64 Processor-status-Register bit names: IA-64-Bits. (line 6) 27752* IA-64 registers: IA-64-Regs. (line 6) 27753* IA-64 relocations: IA-64-Relocs. (line 6) 27754* IA-64 support: IA-64-Dependent. (line 6) 27755* IA-64 Syntax: IA-64 Options. (line 85) 27756* 'ident' directive: Ident. (line 6) 27757* identifiers, ARM: ARM-Chars. (line 19) 27758* identifiers, MSP 430: MSP430-Chars. (line 17) 27759* 'if' directive: If. (line 6) 27760* 'ifb' directive: If. (line 21) 27761* 'ifc' directive: If. (line 25) 27762* 'ifdef' directive: If. (line 16) 27763* 'ifeq' directive: If. (line 33) 27764* 'ifeqs' directive: If. (line 36) 27765* 'ifge' directive: If. (line 40) 27766* 'ifgt' directive: If. (line 44) 27767* 'ifle' directive: If. (line 48) 27768* 'iflt' directive: If. (line 52) 27769* 'ifnb' directive: If. (line 56) 27770* 'ifnc' directive: If. (line 61) 27771* 'ifndef' directive: If. (line 65) 27772* 'ifne' directive: If. (line 72) 27773* 'ifnes' directive: If. (line 76) 27774* 'ifnotdef' directive: If. (line 65) 27775* immediate character, AArch64: AArch64-Chars. (line 13) 27776* immediate character, ARM: ARM-Chars. (line 17) 27777* immediate character, M680x0: M68K-Chars. (line 13) 27778* immediate character, VAX: VAX-operands. (line 6) 27779* immediate fields, relaxation: Xtensa Immediate Relaxation. 27780 (line 6) 27781* immediate operands, i386: i386-Variations. (line 15) 27782* immediate operands, x86-64: i386-Variations. (line 15) 27783* 'imul' instruction, i386: i386-Notes. (line 6) 27784* 'imul' instruction, x86-64: i386-Notes. (line 6) 27785* 'incbin' directive: Incbin. (line 6) 27786* 'include' directive: Include. (line 6) 27787* 'include' directive search path: I. (line 6) 27788* indirect character, VAX: VAX-operands. (line 9) 27789* infix operators: Infix Ops. (line 6) 27790* inhibiting interrupts, i386: i386-Prefixes. (line 36) 27791* input: Input Files. (line 6) 27792* input file linenumbers: Input Files. (line 35) 27793* INSN directives: RISC-V-Directives. (line 92) 27794* instruction aliases, s390: s390 Aliases. (line 6) 27795* instruction bundle: Bundle directives. (line 9) 27796* instruction expansion, CRIS: CRIS-Expand. (line 6) 27797* instruction expansion, MMIX: MMIX-Expand. (line 6) 27798* instruction formats, risc-v: RISC-V-Formats. (line 6) 27799* instruction formats, s390: s390 Formats. (line 6) 27800* instruction marker, s390: s390 Instruction Marker. 27801 (line 6) 27802* instruction mnemonics, s390: s390 Mnemonics. (line 6) 27803* instruction naming, i386: i386-Mnemonics. (line 9) 27804* instruction naming, x86-64: i386-Mnemonics. (line 9) 27805* instruction operand modifier, s390: s390 Operand Modifier. 27806 (line 6) 27807* instruction operands, s390: s390 Operands. (line 6) 27808* instruction prefixes, i386: i386-Prefixes. (line 6) 27809* instruction set, M680x0: M68K-opcodes. (line 6) 27810* instruction set, M68HC11: M68HC11-opcodes. (line 6) 27811* instruction set, XGATE: XGATE-opcodes. (line 5) 27812* instruction summary, AVR: AVR Opcodes. (line 6) 27813* instruction summary, D10V: D10V-Opcodes. (line 6) 27814* instruction summary, D30V: D30V-Opcodes. (line 6) 27815* instruction summary, H8/300: H8/300 Opcodes. (line 6) 27816* instruction summary, LM32: LM32 Opcodes. (line 6) 27817* instruction summary, LM32 <1>: OpenRISC-Opcodes. (line 6) 27818* instruction summary, SH: SH Opcodes. (line 6) 27819* instruction summary, Z8000: Z8000 Opcodes. (line 6) 27820* instruction syntax, s390: s390 Syntax. (line 6) 27821* instructions and directives: Statements. (line 20) 27822* 'int' directive: Int. (line 6) 27823* 'int' directive, H8/300: H8/300 Directives. (line 6) 27824* 'int' directive, i386: i386-Float. (line 21) 27825* 'int' directive, TIC54X: TIC54X-Directives. (line 109) 27826* 'int' directive, x86-64: i386-Float. (line 21) 27827* integer expressions: Integer Exprs. (line 6) 27828* integer, 16-byte: Octa. (line 6) 27829* integer, 2-byte: 2byte. (line 6) 27830* integer, 4-byte: 4byte. (line 6) 27831* integer, 8-byte: Quad. (line 9) 27832* integer, 8-byte <1>: 8byte. (line 6) 27833* integers: Integers. (line 6) 27834* integers, 16-bit: hword. (line 6) 27835* integers, 32-bit: Int. (line 6) 27836* integers, binary: Integers. (line 6) 27837* integers, decimal: Integers. (line 12) 27838* integers, hexadecimal: Integers. (line 15) 27839* integers, octal: Integers. (line 9) 27840* integers, one byte: Byte. (line 6) 27841* intel_syntax pseudo op, i386: i386-Variations. (line 6) 27842* intel_syntax pseudo op, x86-64: i386-Variations. (line 6) 27843* internal assembler sections: As Sections. (line 6) 27844* 'internal' directive: Internal. (line 6) 27845* interrupt link register, ARC: ARC-Regs. (line 27) 27846* Interrupt Vector Base address, ARC: ARC-Regs. (line 66) 27847* invalid input: Bug Criteria. (line 14) 27848* invocation summary: Overview. (line 6) 27849* IP2K architecture options: IP2K-Opts. (line 9) 27850* IP2K architecture options <1>: IP2K-Opts. (line 14) 27851* IP2K line comment character: IP2K-Chars. (line 6) 27852* IP2K line separator: IP2K-Chars. (line 14) 27853* IP2K options: IP2K-Opts. (line 6) 27854* IP2K support: IP2K-Dependent. (line 6) 27855* 'irp' directive: Irp. (line 6) 27856* 'irpc' directive: Irpc. (line 6) 27857* joining text and data sections: R. (line 6) 27858* 'jsri2bsr' command-line option, C-SKY: C-SKY Options. (line 52) 27859* jump instructions, i386: i386-Mnemonics. (line 114) 27860* jump instructions, relaxation: Xtensa Jump Relaxation. 27861 (line 6) 27862* jump instructions, x86-64: i386-Mnemonics. (line 114) 27863* jump optimization, i386: i386-Jumps. (line 6) 27864* jump optimization, x86-64: i386-Jumps. (line 6) 27865* jump/call operands, i386: i386-Variations. (line 15) 27866* jump/call operands, x86-64: i386-Variations. (line 15) 27867* 'L16SI' instructions, relaxation: Xtensa Immediate Relaxation. 27868 (line 23) 27869* 'L16UI' instructions, relaxation: Xtensa Immediate Relaxation. 27870 (line 23) 27871* 'L32I' instructions, relaxation: Xtensa Immediate Relaxation. 27872 (line 23) 27873* 'L8UI' instructions, relaxation: Xtensa Immediate Relaxation. 27874 (line 23) 27875* label (':'): Statements. (line 31) 27876* 'label' directive, TIC54X: TIC54X-Directives. (line 121) 27877* labels: Labels. (line 6) 27878* labels, Z80: Z80-Labels. (line 6) 27879* 'largecomm' directive, ELF: i386-Directives. (line 17) 27880* 'lcomm' directive: Lcomm. (line 6) 27881* 'lcomm' directive <1>: ARC Directives. (line 9) 27882* 'lcomm' directive, COFF: i386-Directives. (line 6) 27883* 'lcommon' directive, ARC: ARC Directives. (line 24) 27884* ld: Object. (line 15) 27885* 'ldouble' directive M680x0: M68K-Float. (line 17) 27886* 'ldouble' directive M68HC11: M68HC11-Float. (line 17) 27887* 'ldouble' directive XGATE: XGATE-Float. (line 16) 27888* 'ldouble' directive, TIC54X: TIC54X-Directives. (line 62) 27889* 'LDR reg,=<expr>' pseudo op, AArch64: AArch64 Opcodes. (line 9) 27890* 'LDR reg,=<label>' pseudo op, ARM: ARM Opcodes. (line 15) 27891* LEB128 directives: RISC-V-Directives. (line 27) 27892* 'length' directive, TIC54X: TIC54X-Directives. (line 125) 27893* length of symbols: Symbol Intro. (line 19) 27894* level 1 interrupt link register, ARC: ARC-Regs. (line 23) 27895* level 2 interrupt link register, ARC: ARC-Regs. (line 31) 27896* 'lflags' directive (ignored): Lflags. (line 6) 27897* line: ARC-Chars. (line 30) 27898* line comment character: Comments. (line 19) 27899* line comment character, AArch64: AArch64-Chars. (line 6) 27900* line comment character, Alpha: Alpha-Chars. (line 6) 27901* line comment character, ARC: ARC-Chars. (line 11) 27902* line comment character, ARM: ARM-Chars. (line 6) 27903* line comment character, AVR: AVR-Chars. (line 6) 27904* line comment character, BPF: BPF-Chars. (line 6) 27905* line comment character, CR16: CR16-Chars. (line 6) 27906* line comment character, D10V: D10V-Chars. (line 6) 27907* line comment character, D30V: D30V-Chars. (line 6) 27908* line comment character, Epiphany: Epiphany-Chars. (line 6) 27909* line comment character, H8/300: H8/300-Chars. (line 6) 27910* line comment character, i386: i386-Chars. (line 6) 27911* line comment character, IA-64: IA-64-Chars. (line 6) 27912* line comment character, IP2K: IP2K-Chars. (line 6) 27913* line comment character, LM32: LM32-Chars. (line 6) 27914* line comment character, M32C: M32C-Chars. (line 6) 27915* line comment character, M680x0: M68K-Chars. (line 6) 27916* line comment character, M68HC11: M68HC11-Syntax. (line 17) 27917* line comment character, Meta: Meta-Chars. (line 6) 27918* line comment character, MicroBlaze: MicroBlaze-Chars. (line 6) 27919* line comment character, MIPS: MIPS-Chars. (line 6) 27920* line comment character, MSP 430: MSP430-Chars. (line 6) 27921* line comment character, Nios II: Nios II Chars. (line 6) 27922* line comment character, NS32K: NS32K-Chars. (line 6) 27923* line comment character, OpenRISC: OpenRISC-Chars. (line 6) 27924* line comment character, PJ: PJ-Chars. (line 6) 27925* line comment character, PowerPC: PowerPC-Chars. (line 6) 27926* line comment character, PRU: PRU Chars. (line 6) 27927* line comment character, RL78: RL78-Chars. (line 6) 27928* line comment character, RX: RX-Chars. (line 6) 27929* line comment character, S12Z: S12Z Syntax Overview. 27930 (line 32) 27931* line comment character, s390: s390 Characters. (line 6) 27932* line comment character, SCORE: SCORE-Chars. (line 6) 27933* line comment character, SH: SH-Chars. (line 6) 27934* line comment character, Sparc: Sparc-Chars. (line 6) 27935* line comment character, TIC54X: TIC54X-Chars. (line 6) 27936* line comment character, TIC6X: TIC6X Syntax. (line 6) 27937* line comment character, V850: V850-Chars. (line 6) 27938* line comment character, VAX: VAX-Chars. (line 6) 27939* line comment character, Visium: Visium Characters. (line 6) 27940* line comment character, WebAssembly: WebAssembly-Chars. (line 6) 27941* line comment character, XGATE: XGATE-Syntax. (line 16) 27942* line comment character, XStormy16: XStormy16-Chars. (line 6) 27943* line comment character, Z80: Z80-Chars. (line 6) 27944* line comment character, Z8000: Z8000-Chars. (line 6) 27945* line comment characters, CRIS: CRIS-Chars. (line 6) 27946* line comment characters, MMIX: MMIX-Chars. (line 6) 27947* 'line' directive: Line. (line 6) 27948* 'line' directive, MSP 430: MSP430 Directives. (line 14) 27949* line numbers, in input files: Input Files. (line 35) 27950* line separator character: Statements. (line 6) 27951* line separator character, Nios II: Nios II Chars. (line 6) 27952* line separator, AArch64: AArch64-Chars. (line 10) 27953* line separator, Alpha: Alpha-Chars. (line 11) 27954* line separator, ARC: ARC-Chars. (line 27) 27955* line separator, ARM: ARM-Chars. (line 14) 27956* line separator, AVR: AVR-Chars. (line 14) 27957* line separator, CR16: CR16-Chars. (line 12) 27958* line separator, Epiphany: Epiphany-Chars. (line 14) 27959* line separator, H8/300: H8/300-Chars. (line 8) 27960* line separator, i386: i386-Chars. (line 18) 27961* line separator, IA-64: IA-64-Chars. (line 8) 27962* line separator, IP2K: IP2K-Chars. (line 14) 27963* line separator, LM32: LM32-Chars. (line 12) 27964* line separator, M32C: M32C-Chars. (line 14) 27965* line separator, M680x0: M68K-Chars. (line 20) 27966* line separator, M68HC11: M68HC11-Syntax. (line 26) 27967* line separator, Meta: Meta-Chars. (line 8) 27968* line separator, MicroBlaze: MicroBlaze-Chars. (line 14) 27969* line separator, MIPS: MIPS-Chars. (line 14) 27970* line separator, MSP 430: MSP430-Chars. (line 14) 27971* line separator, NS32K: NS32K-Chars. (line 18) 27972* line separator, OpenRISC: OpenRISC-Chars. (line 9) 27973* line separator, PJ: PJ-Chars. (line 14) 27974* line separator, PowerPC: PowerPC-Chars. (line 18) 27975* line separator, RL78: RL78-Chars. (line 14) 27976* line separator, RX: RX-Chars. (line 14) 27977* line separator, S12Z: S12Z Syntax Overview. 27978 (line 41) 27979* line separator, s390: s390 Characters. (line 13) 27980* line separator, SCORE: SCORE-Chars. (line 14) 27981* line separator, SH: SH-Chars. (line 8) 27982* line separator, Sparc: Sparc-Chars. (line 14) 27983* line separator, TIC54X: TIC54X-Chars. (line 17) 27984* line separator, TIC6X: TIC6X Syntax. (line 13) 27985* line separator, V850: V850-Chars. (line 13) 27986* line separator, VAX: VAX-Chars. (line 14) 27987* line separator, Visium: Visium Characters. (line 14) 27988* line separator, XGATE: XGATE-Syntax. (line 25) 27989* line separator, XStormy16: XStormy16-Chars. (line 14) 27990* line separator, Z80: Z80-Chars. (line 13) 27991* line separator, Z8000: Z8000-Chars. (line 13) 27992* lines starting with '#': Comments. (line 33) 27993* link register, ARC: ARC-Regs. (line 35) 27994* linker: Object. (line 15) 27995* linker, and assembler: Secs Background. (line 10) 27996* 'linkonce' directive: Linkonce. (line 6) 27997* 'list' directive: List. (line 6) 27998* 'list' directive, TIC54X: TIC54X-Directives. (line 129) 27999* listing control, turning off: Nolist. (line 6) 28000* listing control, turning on: List. (line 6) 28001* listing control: new page: Eject. (line 6) 28002* listing control: paper size: Psize. (line 6) 28003* listing control: subtitle: Sbttl. (line 6) 28004* listing control: title line: Title. (line 6) 28005* listings, enabling: a. (line 6) 28006* 'literal' directive: Literal Directive. (line 6) 28007* literal pool entries, s390: s390 Literal Pool Entries. 28008 (line 6) 28009* 'literal_position' directive: Literal Position Directive. 28010 (line 6) 28011* 'literal_prefix' directive: Literal Prefix Directive. 28012 (line 6) 28013* little endian output, MIPS: Overview. (line 858) 28014* little endian output, PJ: Overview. (line 762) 28015* little-endian output, MIPS: MIPS Options. (line 13) 28016* little-endian output, TIC6X: TIC6X Options. (line 46) 28017* LM32 line comment character: LM32-Chars. (line 6) 28018* LM32 line separator: LM32-Chars. (line 12) 28019* LM32 modifiers: LM32-Modifiers. (line 6) 28020* LM32 opcode summary: LM32 Opcodes. (line 6) 28021* LM32 options (none): LM32 Options. (line 6) 28022* LM32 register names: LM32-Regs. (line 6) 28023* LM32 support: LM32-Dependent. (line 6) 28024* 'ln' directive: Ln. (line 6) 28025* 'lo' directive, Nios II: Nios II Relocations. 28026 (line 23) 28027* 'lo' pseudo-op, V850: V850 Opcodes. (line 22) 28028* 'loc' directive: Loc. (line 6) 28029* local common symbols: Lcomm. (line 6) 28030* 'local' directive: Local. (line 6) 28031* local labels: Symbol Names. (line 43) 28032* local symbol names: Symbol Names. (line 30) 28033* local symbols, retaining in output: L. (line 6) 28034* location counter: Dot. (line 6) 28035* location counter, advancing: Org. (line 6) 28036* location counter, Z80: Z80-Chars. (line 15) 28037* 'loc_mark_labels' directive: Loc_mark_labels. (line 6) 28038* logical file name: File. (line 13) 28039* logical line number: Line. (line 6) 28040* logical line numbers: Comments. (line 33) 28041* 'long' directive: Long. (line 6) 28042* 'long' directive, i386: i386-Float. (line 21) 28043* 'long' directive, TIC54X: TIC54X-Directives. (line 133) 28044* 'long' directive, x86-64: i386-Float. (line 21) 28045* 'longcall' pseudo-op, V850: V850 Opcodes. (line 122) 28046* 'longcalls' directive: Longcalls Directive. 28047 (line 6) 28048* 'longjump' pseudo-op, V850: V850 Opcodes. (line 128) 28049* Loongson Content Address Memory (CAM) generation override: MIPS ASE Instruction Generation Overrides. 28050 (line 81) 28051* Loongson EXTensions (EXT) instructions generation override: MIPS ASE Instruction Generation Overrides. 28052 (line 86) 28053* Loongson EXTensions R2 (EXT2) instructions generation override: MIPS ASE Instruction Generation Overrides. 28054 (line 91) 28055* Loongson MultiMedia extensions Instructions (MMI) generation override: MIPS ASE Instruction Generation Overrides. 28056 (line 76) 28057* loop counter, ARC: ARC-Regs. (line 41) 28058* 'loop' directive, TIC54X: TIC54X-Directives. (line 141) 28059* 'LOOP' instructions, alignment: Xtensa Automatic Alignment. 28060 (line 6) 28061* 'low' directive, M32R: M32R-Directives. (line 9) 28062* 'lp' register, V850: V850-Regs. (line 68) 28063* lval: Z8000 Directives. (line 27) 28064* LWP, i386: i386-LWP. (line 6) 28065* LWP, x86-64: i386-LWP. (line 6) 28066* M16C architecture option: M32C-Opts. (line 12) 28067* M32C architecture option: M32C-Opts. (line 9) 28068* M32C line comment character: M32C-Chars. (line 6) 28069* M32C line separator: M32C-Chars. (line 14) 28070* M32C modifiers: M32C-Modifiers. (line 6) 28071* M32C options: M32C-Opts. (line 6) 28072* M32C support: M32C-Dependent. (line 6) 28073* M32R architecture options: M32R-Opts. (line 9) 28074* M32R architecture options <1>: M32R-Opts. (line 17) 28075* M32R architecture options <2>: M32R-Opts. (line 21) 28076* M32R directives: M32R-Directives. (line 6) 28077* M32R options: M32R-Opts. (line 6) 28078* M32R support: M32R-Dependent. (line 6) 28079* M32R warnings: M32R-Warnings. (line 6) 28080* M680x0 addressing modes: M68K-Syntax. (line 21) 28081* M680x0 architecture options: M68K-Opts. (line 99) 28082* M680x0 branch improvement: M68K-Branch. (line 6) 28083* M680x0 directives: M68K-Directives. (line 6) 28084* M680x0 floating point: M68K-Float. (line 6) 28085* M680x0 immediate character: M68K-Chars. (line 13) 28086* M680x0 line comment character: M68K-Chars. (line 6) 28087* M680x0 line separator: M68K-Chars. (line 20) 28088* M680x0 opcodes: M68K-opcodes. (line 6) 28089* M680x0 options: M68K-Opts. (line 6) 28090* M680x0 pseudo-opcodes: M68K-Branch. (line 6) 28091* M680x0 size modifiers: M68K-Syntax. (line 8) 28092* M680x0 support: M68K-Dependent. (line 6) 28093* M680x0 syntax: M68K-Syntax. (line 8) 28094* M68HC11 addressing modes: M68HC11-Syntax. (line 29) 28095* M68HC11 and M68HC12 support: M68HC11-Dependent. (line 6) 28096* M68HC11 assembler directive .far: M68HC11-Directives. (line 20) 28097* M68HC11 assembler directive .interrupt: M68HC11-Directives. 28098 (line 26) 28099* M68HC11 assembler directive .mode: M68HC11-Directives. (line 16) 28100* M68HC11 assembler directive .relax: M68HC11-Directives. (line 10) 28101* M68HC11 assembler directive .xrefb: M68HC11-Directives. (line 31) 28102* M68HC11 assembler directives: M68HC11-Directives. (line 6) 28103* M68HC11 branch improvement: M68HC11-Branch. (line 6) 28104* M68HC11 floating point: M68HC11-Float. (line 6) 28105* M68HC11 line comment character: M68HC11-Syntax. (line 17) 28106* M68HC11 line separator: M68HC11-Syntax. (line 26) 28107* M68HC11 modifiers: M68HC11-Modifiers. (line 6) 28108* M68HC11 opcodes: M68HC11-opcodes. (line 6) 28109* M68HC11 options: M68HC11-Opts. (line 6) 28110* M68HC11 pseudo-opcodes: M68HC11-Branch. (line 6) 28111* M68HC11 syntax: M68HC11-Syntax. (line 6) 28112* M68HC12 assembler directives: M68HC11-Directives. (line 6) 28113* 'mA6' command-line option, ARC: ARC Options. (line 14) 28114* 'mA7' command-line option, ARC: ARC Options. (line 39) 28115* machine dependencies: Machine Dependencies. 28116 (line 6) 28117* machine directives, AArch64: AArch64 Directives. (line 6) 28118* machine directives, ARC: ARC Directives. (line 6) 28119* machine directives, ARM: ARM Directives. (line 6) 28120* machine directives, BPF: BPF Directives. (line 6) 28121* machine directives, H8/300 (none): H8/300 Directives. (line 6) 28122* machine directives, MSP 430: MSP430 Directives. (line 6) 28123* machine directives, Nios II: Nios II Directives. (line 6) 28124* machine directives, OPENRISC: OpenRISC-Directives. 28125 (line 6) 28126* machine directives, PRU: PRU Directives. (line 6) 28127* machine directives, RISC-V: RISC-V-Directives. (line 6) 28128* machine directives, SH: SH Directives. (line 6) 28129* machine directives, SPARC: Sparc-Directives. (line 6) 28130* machine directives, TIC54X: TIC54X-Directives. (line 6) 28131* machine directives, TIC6X: TIC6X Directives. (line 6) 28132* machine directives, TILE-Gx: TILE-Gx Directives. (line 6) 28133* machine directives, TILEPro: TILEPro Directives. (line 6) 28134* machine directives, V850: V850 Directives. (line 6) 28135* machine directives, VAX: VAX-directives. (line 6) 28136* machine directives, x86: i386-Directives. (line 6) 28137* machine directives, XStormy16: XStormy16 Directives. 28138 (line 6) 28139* machine independent directives: Pseudo Ops. (line 6) 28140* machine instructions (not covered): Manual. (line 14) 28141* machine relocations, Nios II: Nios II Relocations. 28142 (line 6) 28143* machine relocations, PRU: PRU Relocations. (line 6) 28144* machine-independent syntax: Syntax. (line 6) 28145* 'macro' directive: Macro. (line 28) 28146* 'macro' directive, TIC54X: TIC54X-Directives. (line 151) 28147* macros: Macro. (line 6) 28148* macros, count executed: Macro. (line 142) 28149* Macros, MSP 430: MSP430-Macros. (line 6) 28150* macros, TIC54X: TIC54X-Macros. (line 6) 28151* make rules: MD. (line 6) 28152* manual, structure and purpose: Manual. (line 6) 28153* 'marc600' command-line option, ARC: ARC Options. (line 14) 28154* 'mARC601' command-line option, ARC: ARC Options. (line 27) 28155* 'mARC700' command-line option, ARC: ARC Options. (line 39) 28156* 'march' command-line option, C-SKY: C-SKY Options. (line 6) 28157* 'march' command-line option, Nios II: Nios II Options. (line 28) 28158* math builtins, TIC54X: TIC54X-Builtins. (line 6) 28159* Maximum number of continuation lines: listing. (line 34) 28160* 'mbig-endian' command-line option, C-SKY: C-SKY Options. (line 18) 28161* 'mbranch-stub' command-line option, C-SKY: C-SKY Options. (line 34) 28162* 'mcache' command-line option, C-SKY: C-SKY Options. (line 100) 28163* 'mcp' command-line option, C-SKY: C-SKY Options. (line 97) 28164* 'mcpu' command-line option, C-SKY: C-SKY Options. (line 10) 28165* 'mdsp' command-line option, C-SKY: C-SKY Options. (line 109) 28166* 'medsp' command-line option, C-SKY: C-SKY Options. (line 112) 28167* 'melrw' command-line option, C-SKY: C-SKY Options. (line 64) 28168* 'mEM' command-line option, ARC: ARC Options. (line 42) 28169* memory references, i386: i386-Memory. (line 6) 28170* memory references, x86-64: i386-Memory. (line 6) 28171* memory-mapped registers, TIC54X: TIC54X-MMRegs. (line 6) 28172* merging text and data sections: R. (line 6) 28173* messages from assembler: Errors. (line 6) 28174* Meta architectures: Meta Options. (line 6) 28175* Meta line comment character: Meta-Chars. (line 6) 28176* Meta line separator: Meta-Chars. (line 8) 28177* Meta options: Meta Options. (line 6) 28178* Meta registers: Meta-Regs. (line 6) 28179* Meta support: Meta-Dependent. (line 6) 28180* 'mforce2bsr' command-line option, C-SKY: C-SKY Options. (line 43) 28181* 'mhard-float' command-line option, C-SKY: C-SKY Options. (line 91) 28182* 'mHS' command-line option, ARC: ARC Options. (line 64) 28183* MicroBlaze architectures: MicroBlaze-Dependent. 28184 (line 6) 28185* MicroBlaze directives: MicroBlaze Directives. 28186 (line 6) 28187* MicroBlaze line comment character: MicroBlaze-Chars. (line 6) 28188* MicroBlaze line separator: MicroBlaze-Chars. (line 14) 28189* MicroBlaze support: MicroBlaze-Dependent. 28190 (line 12) 28191* minus, permitted arguments: Infix Ops. (line 50) 28192* MIPS 32-bit microMIPS instruction generation override: MIPS assembly options. 28193 (line 18) 28194* MIPS architecture options: MIPS Options. (line 29) 28195* MIPS big-endian output: MIPS Options. (line 13) 28196* MIPS CPU override: MIPS ISA. (line 18) 28197* MIPS cyclic redundancy check (CRC) instruction generation override: MIPS ASE Instruction Generation Overrides. 28198 (line 68) 28199* MIPS directives to override command-line options: MIPS assembly options. 28200 (line 6) 28201* MIPS DSP Release 1 instruction generation override: MIPS ASE Instruction Generation Overrides. 28202 (line 21) 28203* MIPS DSP Release 2 instruction generation override: MIPS ASE Instruction Generation Overrides. 28204 (line 26) 28205* MIPS DSP Release 3 instruction generation override: MIPS ASE Instruction Generation Overrides. 28206 (line 31) 28207* MIPS endianness: Overview. (line 855) 28208* MIPS eXtended Physical Address (XPA) instruction generation override: MIPS ASE Instruction Generation Overrides. 28209 (line 57) 28210* MIPS Global INValidate (GINV) instruction generation override: MIPS ASE Instruction Generation Overrides. 28211 (line 72) 28212* MIPS IEEE 754 NaN data encoding selection: MIPS NaN Encodings. 28213 (line 6) 28214* MIPS ISA: Overview. (line 861) 28215* MIPS ISA override: MIPS ISA. (line 6) 28216* MIPS line comment character: MIPS-Chars. (line 6) 28217* MIPS line separator: MIPS-Chars. (line 14) 28218* MIPS little-endian output: MIPS Options. (line 13) 28219* MIPS MCU instruction generation override: MIPS ASE Instruction Generation Overrides. 28220 (line 42) 28221* MIPS MDMX instruction generation override: MIPS ASE Instruction Generation Overrides. 28222 (line 16) 28223* MIPS MIPS-3D instruction generation override: MIPS ASE Instruction Generation Overrides. 28224 (line 6) 28225* MIPS MT instruction generation override: MIPS ASE Instruction Generation Overrides. 28226 (line 37) 28227* MIPS option stack: MIPS Option Stack. (line 6) 28228* MIPS processor: MIPS-Dependent. (line 6) 28229* MIPS SIMD Architecture instruction generation override: MIPS ASE Instruction Generation Overrides. 28230 (line 47) 28231* MIPS16e2 instruction generation override: MIPS ASE Instruction Generation Overrides. 28232 (line 61) 28233* 'mistack' command-line option, C-SKY: C-SKY Options. (line 82) 28234* MIT: M68K-Syntax. (line 6) 28235* 'mjsri2bsr' command-line option, C-SKY: C-SKY Options. (line 52) 28236* 'mlabr' command-line option, C-SKY: C-SKY Options. (line 75) 28237* 'mlaf' command-line option, C-SKY: C-SKY Options. (line 69) 28238* 'mlib' directive, TIC54X: TIC54X-Directives. (line 157) 28239* 'mlink-relax' command-line option, PRU: PRU Options. (line 6) 28240* 'mlist' directive, TIC54X: TIC54X-Directives. (line 162) 28241* 'mliterals-after-br' command-line option, C-SKY: C-SKY Options. 28242 (line 75) 28243* 'mliterals-after-func' command-line option, C-SKY: C-SKY Options. 28244 (line 69) 28245* 'mlittle-endian' command-line option, C-SKY: C-SKY Options. 28246 (line 14) 28247* 'mljump' command-line option, C-SKY: C-SKY Options. (line 26) 28248* MMIX assembler directive BSPEC: MMIX-Pseudos. (line 137) 28249* MMIX assembler directive BYTE: MMIX-Pseudos. (line 101) 28250* MMIX assembler directive ESPEC: MMIX-Pseudos. (line 137) 28251* MMIX assembler directive GREG: MMIX-Pseudos. (line 53) 28252* MMIX assembler directive IS: MMIX-Pseudos. (line 44) 28253* MMIX assembler directive LOC: MMIX-Pseudos. (line 7) 28254* MMIX assembler directive LOCAL: MMIX-Pseudos. (line 29) 28255* MMIX assembler directive OCTA: MMIX-Pseudos. (line 113) 28256* MMIX assembler directive PREFIX: MMIX-Pseudos. (line 125) 28257* MMIX assembler directive TETRA: MMIX-Pseudos. (line 113) 28258* MMIX assembler directive WYDE: MMIX-Pseudos. (line 113) 28259* MMIX assembler directives: MMIX-Pseudos. (line 6) 28260* MMIX line comment characters: MMIX-Chars. (line 6) 28261* MMIX options: MMIX-Opts. (line 6) 28262* MMIX pseudo-op BSPEC: MMIX-Pseudos. (line 137) 28263* MMIX pseudo-op BYTE: MMIX-Pseudos. (line 101) 28264* MMIX pseudo-op ESPEC: MMIX-Pseudos. (line 137) 28265* MMIX pseudo-op GREG: MMIX-Pseudos. (line 53) 28266* MMIX pseudo-op IS: MMIX-Pseudos. (line 44) 28267* MMIX pseudo-op LOC: MMIX-Pseudos. (line 7) 28268* MMIX pseudo-op LOCAL: MMIX-Pseudos. (line 29) 28269* MMIX pseudo-op OCTA: MMIX-Pseudos. (line 113) 28270* MMIX pseudo-op PREFIX: MMIX-Pseudos. (line 125) 28271* MMIX pseudo-op TETRA: MMIX-Pseudos. (line 113) 28272* MMIX pseudo-op WYDE: MMIX-Pseudos. (line 113) 28273* MMIX pseudo-ops: MMIX-Pseudos. (line 6) 28274* MMIX register names: MMIX-Regs. (line 6) 28275* MMIX support: MMIX-Dependent. (line 6) 28276* mmixal differences: MMIX-mmixal. (line 6) 28277* 'mmp' command-line option, C-SKY: C-SKY Options. (line 94) 28278* 'mmregs' directive, TIC54X: TIC54X-Directives. (line 167) 28279* 'mmsg' directive, TIC54X: TIC54X-Directives. (line 75) 28280* MMX, i386: i386-SIMD. (line 6) 28281* MMX, x86-64: i386-SIMD. (line 6) 28282* mnemonic compatibility, i386: i386-Mnemonics. (line 120) 28283* mnemonic suffixes, i386: i386-Variations. (line 28) 28284* mnemonic suffixes, x86-64: i386-Variations. (line 28) 28285* mnemonics for opcodes, VAX: VAX-opcodes. (line 6) 28286* mnemonics, AVR: AVR Opcodes. (line 6) 28287* mnemonics, D10V: D10V-Opcodes. (line 6) 28288* mnemonics, D30V: D30V-Opcodes. (line 6) 28289* mnemonics, H8/300: H8/300 Opcodes. (line 6) 28290* mnemonics, LM32: LM32 Opcodes. (line 6) 28291* mnemonics, OpenRISC: OpenRISC-Opcodes. (line 6) 28292* mnemonics, SH: SH Opcodes. (line 6) 28293* mnemonics, Z8000: Z8000 Opcodes. (line 6) 28294* 'mno-branch-stub' command-line option, C-SKY: C-SKY Options. 28295 (line 34) 28296* 'mno-elrw' command-line option, C-SKY: C-SKY Options. (line 64) 28297* 'mno-force2bsr' command-line option, C-SKY: C-SKY Options. (line 43) 28298* 'mno-istack' command-line option, C-SKY: C-SKY Options. (line 82) 28299* 'mno-jsri2bsr' command-line option, C-SKY: C-SKY Options. (line 52) 28300* 'mno-labr' command-line option, C-SKY: C-SKY Options. (line 75) 28301* 'mno-laf' command-line option, C-SKY: C-SKY Options. (line 69) 28302* 'mno-link-relax' command-line option, PRU: PRU Options. (line 12) 28303* 'mno-literals-after-func' command-line option, C-SKY: C-SKY Options. 28304 (line 69) 28305* 'mno-ljump' command-line option, C-SKY: C-SKY Options. (line 26) 28306* 'mno-lrw' command-line option, C-SKY: C-SKY Options. (line 59) 28307* 'mno-warn-regname-label' command-line option, PRU: PRU Options. 28308 (line 16) 28309* 'mnolist' directive, TIC54X: TIC54X-Directives. (line 162) 28310* 'mnoliterals-after-br' command-line option, C-SKY: C-SKY Options. 28311 (line 75) 28312* 'mnolrw' command-line option, C-SKY: C-SKY Options. (line 59) 28313* 'mnps400' command-line option, ARC: ARC Options. (line 79) 28314* modifiers, M32C: M32C-Modifiers. (line 6) 28315* module layout, WebAssembly: WebAssembly-module-layout. 28316 (line 6) 28317* Motorola syntax for the 680x0: M68K-Moto-Syntax. (line 6) 28318* 'MOVI' instructions, relaxation: Xtensa Immediate Relaxation. 28319 (line 12) 28320* MOVN, MOVZ and MOVK group relocations, AArch64: AArch64-Relocations. 28321 (line 6) 28322* MOVW and MOVT relocations, ARM: ARM-Relocations. (line 21) 28323* MRI compatibility mode: M. (line 6) 28324* 'mri' directive: MRI. (line 6) 28325* MRI mode, temporarily: MRI. (line 6) 28326* 'msecurity' command-line option, C-SKY: C-SKY Options. (line 103) 28327* MSP 430 floating point (IEEE): MSP430 Floating Point. 28328 (line 6) 28329* MSP 430 identifiers: MSP430-Chars. (line 17) 28330* MSP 430 line comment character: MSP430-Chars. (line 6) 28331* MSP 430 line separator: MSP430-Chars. (line 14) 28332* MSP 430 machine directives: MSP430 Directives. (line 6) 28333* MSP 430 macros: MSP430-Macros. (line 6) 28334* MSP 430 opcodes: MSP430 Opcodes. (line 6) 28335* MSP 430 options (none): MSP430 Options. (line 6) 28336* MSP 430 profiling capability: MSP430 Profiling Capability. 28337 (line 6) 28338* MSP 430 register names: MSP430-Regs. (line 6) 28339* MSP 430 support: MSP430-Dependent. (line 6) 28340* MSP430 Assembler Extensions: MSP430-Ext. (line 6) 28341* 'mspabi_attribute' directive, MSP430: MSP430 Directives. (line 38) 28342* 'mtrust' command-line option, C-SKY: C-SKY Options. (line 106) 28343* 'mul' instruction, i386: i386-Notes. (line 6) 28344* 'mul' instruction, x86-64: i386-Notes. (line 6) 28345* 'mvdsp' command-line option, C-SKY: C-SKY Options. (line 115) 28346* N32K support: NS32K-Dependent. (line 6) 28347* name: Z8000 Directives. (line 18) 28348* named section: Section. (line 6) 28349* named sections: Ld Sections. (line 8) 28350* names, symbol: Symbol Names. (line 6) 28351* naming object file: o. (line 6) 28352* NDS32 options: NDS32 Options. (line 6) 28353* NDS32 processor: NDS32-Dependent. (line 6) 28354* new page, in listings: Eject. (line 6) 28355* 'newblock' directive, TIC54X: TIC54X-Directives. (line 173) 28356* newline ('\n'): Strings. (line 21) 28357* newline, required at file end: Statements. (line 14) 28358* Nios II line comment character: Nios II Chars. (line 6) 28359* Nios II line separator character: Nios II Chars. (line 6) 28360* Nios II machine directives: Nios II Directives. (line 6) 28361* Nios II machine relocations: Nios II Relocations. 28362 (line 6) 28363* Nios II opcodes: Nios II Opcodes. (line 6) 28364* Nios II options: Nios II Options. (line 6) 28365* Nios II support: NiosII-Dependent. (line 6) 28366* Nios support: NiosII-Dependent. (line 6) 28367* 'no-absolute-literals' directive: Absolute Literals Directive. 28368 (line 6) 28369* 'no-force2bsr' command-line option, C-SKY: C-SKY Options. (line 43) 28370* 'no-jsri2bsr' command-line option, C-SKY: C-SKY Options. (line 52) 28371* 'no-longcalls' directive: Longcalls Directive. 28372 (line 6) 28373* 'no-relax' command-line option, Nios II: Nios II Options. (line 19) 28374* 'no-schedule' directive: Schedule Directive. (line 6) 28375* 'no-transform' directive: Transform Directive. 28376 (line 6) 28377* 'nodelay' directive, OpenRISC: OpenRISC-Directives. 28378 (line 15) 28379* 'nolist' directive: Nolist. (line 6) 28380* 'nolist' directive, TIC54X: TIC54X-Directives. (line 129) 28381* 'nop' directive: Nop. (line 6) 28382* 'NOP' pseudo op, ARM: ARM Opcodes. (line 9) 28383* 'nops' directive: Nops. (line 6) 28384* notes for Alpha: Alpha Notes. (line 6) 28385* notes for WebAssembly: WebAssembly-Notes. (line 6) 28386* NS32K line comment character: NS32K-Chars. (line 6) 28387* NS32K line separator: NS32K-Chars. (line 18) 28388* null-terminated strings: Asciz. (line 6) 28389* number constants: Numbers. (line 6) 28390* number of macros executed: Macro. (line 142) 28391* numbered subsections: Sub-Sections. (line 6) 28392* numbers, 16-bit: hword. (line 6) 28393* numeric values: Expressions. (line 6) 28394* 'nword' directive, SPARC: Sparc-Directives. (line 20) 28395* Object Attribute, RISC-V: RISC-V-ATTRIBUTE. (line 6) 28396* object attributes: Object Attributes. (line 6) 28397* object file: Object. (line 6) 28398* object file format: Object Formats. (line 6) 28399* object file name: o. (line 6) 28400* object file, after errors: Z. (line 6) 28401* obsolescent directives: Deprecated. (line 6) 28402* 'octa' directive: Octa. (line 6) 28403* octal character code ('\DDD'): Strings. (line 30) 28404* octal integers: Integers. (line 9) 28405* 'offset' directive: Offset. (line 6) 28406* 'offset' directive, V850: V850 Directives. (line 6) 28407* opcode mnemonics, VAX: VAX-opcodes. (line 6) 28408* opcode names, TILE-Gx: TILE-Gx Opcodes. (line 6) 28409* opcode names, TILEPro: TILEPro Opcodes. (line 6) 28410* opcode names, Xtensa: Xtensa Opcodes. (line 6) 28411* opcode summary, AVR: AVR Opcodes. (line 6) 28412* opcode summary, D10V: D10V-Opcodes. (line 6) 28413* opcode summary, D30V: D30V-Opcodes. (line 6) 28414* opcode summary, H8/300: H8/300 Opcodes. (line 6) 28415* opcode summary, LM32: LM32 Opcodes. (line 6) 28416* opcode summary, OpenRISC: OpenRISC-Opcodes. (line 6) 28417* opcode summary, SH: SH Opcodes. (line 6) 28418* opcode summary, Z8000: Z8000 Opcodes. (line 6) 28419* opcodes for AArch64: AArch64 Opcodes. (line 6) 28420* opcodes for ARC: ARC Opcodes. (line 6) 28421* opcodes for ARM: ARM Opcodes. (line 6) 28422* opcodes for BPF: BPF Opcodes. (line 6) 28423* opcodes for MSP 430: MSP430 Opcodes. (line 6) 28424* opcodes for Nios II: Nios II Opcodes. (line 6) 28425* opcodes for PRU: PRU Opcodes. (line 6) 28426* opcodes for V850: V850 Opcodes. (line 6) 28427* opcodes, M680x0: M68K-opcodes. (line 6) 28428* opcodes, M68HC11: M68HC11-opcodes. (line 6) 28429* opcodes, WebAssembly: WebAssembly-Opcodes. 28430 (line 6) 28431* OPENRISC floating point (IEEE): OpenRISC-Float. (line 6) 28432* OpenRISC line comment character: OpenRISC-Chars. (line 6) 28433* OpenRISC line separator: OpenRISC-Chars. (line 9) 28434* OPENRISC machine directives: OpenRISC-Directives. 28435 (line 6) 28436* OpenRISC opcode summary: OpenRISC-Opcodes. (line 6) 28437* OpenRISC registers: OpenRISC-Regs. (line 6) 28438* OpenRISC relocations: OpenRISC-Relocs. (line 6) 28439* OPENRISC support: OpenRISC-Dependent. (line 6) 28440* OPENRISC syntax: OpenRISC-Dependent. (line 13) 28441* operand delimiters, i386: i386-Variations. (line 15) 28442* operand delimiters, x86-64: i386-Variations. (line 15) 28443* operand notation, VAX: VAX-operands. (line 6) 28444* operands in expressions: Arguments. (line 6) 28445* operator precedence: Infix Ops. (line 11) 28446* operators, in expressions: Operators. (line 6) 28447* operators, permitted arguments: Infix Ops. (line 6) 28448* optimization, D10V: Overview. (line 638) 28449* optimization, D30V: Overview. (line 643) 28450* optimizations: Xtensa Optimizations. 28451 (line 6) 28452* Option directive: RISC-V-Directives. (line 34) 28453* 'option' directive: RISC-V-Directives. (line 34) 28454* 'option' directive, TIC54X: TIC54X-Directives. (line 177) 28455* option summary: Overview. (line 6) 28456* options for AArch64 (none): AArch64 Options. (line 6) 28457* options for Alpha: Alpha Options. (line 6) 28458* options for ARC: ARC Options. (line 6) 28459* options for ARM (none): ARM Options. (line 6) 28460* options for AVR (none): AVR Options. (line 6) 28461* options for Blackfin (none): Blackfin Options. (line 6) 28462* options for BPF (none): BPF Options. (line 6) 28463* options for C-SKY: C-SKY Options. (line 6) 28464* options for i386: i386-Options. (line 6) 28465* options for IA-64: IA-64 Options. (line 6) 28466* options for LM32 (none): LM32 Options. (line 6) 28467* options for Meta: Meta Options. (line 6) 28468* options for MSP430 (none): MSP430 Options. (line 6) 28469* options for NDS32: NDS32 Options. (line 6) 28470* options for Nios II: Nios II Options. (line 6) 28471* options for PDP-11: PDP-11-Options. (line 6) 28472* options for PowerPC: PowerPC-Opts. (line 6) 28473* options for PRU: PRU Options. (line 6) 28474* options for s390: s390 Options. (line 6) 28475* options for SCORE: SCORE-Opts. (line 6) 28476* options for SPARC: Sparc-Opts. (line 6) 28477* options for TIC6X: TIC6X Options. (line 6) 28478* options for V850 (none): V850 Options. (line 6) 28479* options for VAX/VMS: VAX-Opts. (line 42) 28480* options for Visium: Visium Options. (line 6) 28481* options for x86-64: i386-Options. (line 6) 28482* options for Z80: Z80 Options. (line 6) 28483* options, all versions of assembler: Invoking. (line 6) 28484* options, command line: Command Line. (line 13) 28485* options, CRIS: CRIS-Opts. (line 6) 28486* options, D10V: D10V-Opts. (line 6) 28487* options, D30V: D30V-Opts. (line 6) 28488* options, Epiphany: Epiphany Options. (line 6) 28489* options, H8/300: H8/300 Options. (line 6) 28490* options, IP2K: IP2K-Opts. (line 6) 28491* options, M32C: M32C-Opts. (line 6) 28492* options, M32R: M32R-Opts. (line 6) 28493* options, M680x0: M68K-Opts. (line 6) 28494* options, M68HC11: M68HC11-Opts. (line 6) 28495* options, MMIX: MMIX-Opts. (line 6) 28496* options, PJ: PJ Options. (line 6) 28497* options, RL78: RL78-Opts. (line 6) 28498* options, RX: RX-Opts. (line 6) 28499* options, S12Z: S12Z Options. (line 6) 28500* options, SH: SH Options. (line 6) 28501* options, TIC54X: TIC54X-Opts. (line 6) 28502* options, XGATE: XGATE-Opts. (line 6) 28503* options, Z8000: Z8000 Options. (line 6) 28504* 'org' directive: Org. (line 6) 28505* other attribute, of 'a.out' symbol: Symbol Other. (line 6) 28506* output file: Object. (line 6) 28507* output section padding: no-pad-sections. (line 6) 28508* 'p2align' directive: P2align. (line 6) 28509* 'p2alignl' directive: P2align. (line 30) 28510* 'p2alignw' directive: P2align. (line 30) 28511* padding the location counter: Align. (line 6) 28512* padding the location counter given a power of two: P2align. 28513 (line 6) 28514* padding the location counter given number of bytes: Balign. 28515 (line 6) 28516* page, in listings: Eject. (line 6) 28517* paper size, for listings: Psize. (line 6) 28518* paths for '.include': I. (line 6) 28519* patterns, writing in memory: Fill. (line 6) 28520* PDP-11 comments: PDP-11-Syntax. (line 16) 28521* PDP-11 floating-point register syntax: PDP-11-Syntax. (line 13) 28522* PDP-11 general-purpose register syntax: PDP-11-Syntax. (line 10) 28523* PDP-11 instruction naming: PDP-11-Mnemonics. (line 6) 28524* PDP-11 line separator: PDP-11-Syntax. (line 19) 28525* PDP-11 support: PDP-11-Dependent. (line 6) 28526* PDP-11 syntax: PDP-11-Syntax. (line 6) 28527* PIC code generation for ARM: ARM Options. (line 376) 28528* PIC code generation for M32R: M32R-Opts. (line 42) 28529* 'pic' command-line option, C-SKY: C-SKY Options. (line 22) 28530* PIC selection, MIPS: MIPS Options. (line 21) 28531* PJ endianness: Overview. (line 759) 28532* PJ line comment character: PJ-Chars. (line 6) 28533* PJ line separator: PJ-Chars. (line 14) 28534* PJ options: PJ Options. (line 6) 28535* PJ support: PJ-Dependent. (line 6) 28536* plus, permitted arguments: Infix Ops. (line 45) 28537* 'pmem' directive, PRU: PRU Relocations. (line 6) 28538* 'popsection' directive: PopSection. (line 6) 28539* Position-independent code, CRIS: CRIS-Opts. (line 27) 28540* Position-independent code, symbols in, CRIS: CRIS-Pic. (line 6) 28541* PowerPC architectures: PowerPC-Opts. (line 6) 28542* PowerPC directives: PowerPC-Pseudo. (line 6) 28543* PowerPC line comment character: PowerPC-Chars. (line 6) 28544* PowerPC line separator: PowerPC-Chars. (line 18) 28545* PowerPC options: PowerPC-Opts. (line 6) 28546* PowerPC support: PPC-Dependent. (line 6) 28547* precedence of operators: Infix Ops. (line 11) 28548* precision, floating point: Flonums. (line 6) 28549* prefix operators: Prefix Ops. (line 6) 28550* prefixes, i386: i386-Prefixes. (line 6) 28551* preprocessing: Preprocessing. (line 6) 28552* preprocessing, turning on and off: Preprocessing. (line 28) 28553* 'previous' directive: Previous. (line 6) 28554* primary attributes, COFF symbols: COFF Symbols. (line 13) 28555* 'print' directive: Print. (line 6) 28556* 'proc' directive, OpenRISC: OpenRISC-Directives. 28557 (line 20) 28558* 'proc' directive, SPARC: Sparc-Directives. (line 25) 28559* Processor Identification register, ARC: ARC-Regs. (line 51) 28560* 'profiler' directive, MSP 430: MSP430 Directives. (line 26) 28561* profiling capability for MSP 430: MSP430 Profiling Capability. 28562 (line 6) 28563* Program Counter, ARC: ARC-Regs. (line 54) 28564* 'protected' directive: Protected. (line 6) 28565* PRU line comment character: PRU Chars. (line 6) 28566* PRU machine directives: PRU Directives. (line 6) 28567* PRU machine relocations: PRU Relocations. (line 6) 28568* PRU opcodes: PRU Opcodes. (line 6) 28569* PRU options: PRU Options. (line 6) 28570* PRU support: PRU-Dependent. (line 6) 28571* 'psect' directive, Z80: Z80 Directives. (line 58) 28572* pseudo map fd, BPF: BPF-Pseudo-Maps. (line 6) 28573* pseudo-op .arch, CRIS: CRIS-Pseudos. (line 50) 28574* pseudo-op .dword, CRIS: CRIS-Pseudos. (line 12) 28575* pseudo-op .syntax, CRIS: CRIS-Pseudos. (line 18) 28576* pseudo-op BSPEC, MMIX: MMIX-Pseudos. (line 137) 28577* pseudo-op BYTE, MMIX: MMIX-Pseudos. (line 101) 28578* pseudo-op ESPEC, MMIX: MMIX-Pseudos. (line 137) 28579* pseudo-op GREG, MMIX: MMIX-Pseudos. (line 53) 28580* pseudo-op IS, MMIX: MMIX-Pseudos. (line 44) 28581* pseudo-op LOC, MMIX: MMIX-Pseudos. (line 7) 28582* pseudo-op LOCAL, MMIX: MMIX-Pseudos. (line 29) 28583* pseudo-op OCTA, MMIX: MMIX-Pseudos. (line 113) 28584* pseudo-op PREFIX, MMIX: MMIX-Pseudos. (line 125) 28585* pseudo-op TETRA, MMIX: MMIX-Pseudos. (line 113) 28586* pseudo-op WYDE, MMIX: MMIX-Pseudos. (line 113) 28587* pseudo-opcodes for XStormy16: XStormy16 Opcodes. (line 6) 28588* pseudo-opcodes, M680x0: M68K-Branch. (line 6) 28589* pseudo-opcodes, M68HC11: M68HC11-Branch. (line 6) 28590* pseudo-ops for branch, VAX: VAX-branch. (line 6) 28591* pseudo-ops, CRIS: CRIS-Pseudos. (line 6) 28592* pseudo-ops, machine independent: Pseudo Ops. (line 6) 28593* pseudo-ops, MMIX: MMIX-Pseudos. (line 6) 28594* 'psize' directive: Psize. (line 6) 28595* PSR bits: IA-64-Bits. (line 6) 28596* 'pstring' directive, TIC54X: TIC54X-Directives. (line 206) 28597* 'psw' register, V850: V850-Regs. (line 80) 28598* 'purgem' directive: Purgem. (line 6) 28599* purpose of GNU assembler: GNU Assembler. (line 12) 28600* 'pushsection' directive: PushSection. (line 6) 28601* 'quad' directive: Quad. (line 6) 28602* 'quad' directive, i386: i386-Float. (line 21) 28603* 'quad' directive, x86-64: i386-Float. (line 21) 28604* real-mode code, i386: i386-16bit. (line 6) 28605* 'ref' directive, TIC54X: TIC54X-Directives. (line 101) 28606* 'refsym' directive, MSP 430: MSP430 Directives. (line 30) 28607* 'register' directive, SPARC: Sparc-Directives. (line 29) 28608* register name prefix character, ARC: ARC-Chars. (line 7) 28609* register names, AArch64: AArch64-Regs. (line 6) 28610* register names, Alpha: Alpha-Regs. (line 6) 28611* register names, ARC: ARC-Regs. (line 6) 28612* register names, ARM: ARM-Regs. (line 6) 28613* register names, AVR: AVR-Regs. (line 6) 28614* register names, BPF: BPF-Regs. (line 6) 28615* register names, CRIS: CRIS-Regs. (line 6) 28616* register names, H8/300: H8/300-Regs. (line 6) 28617* register names, IA-64: IA-64-Regs. (line 6) 28618* register names, LM32: LM32-Regs. (line 6) 28619* register names, MMIX: MMIX-Regs. (line 6) 28620* register names, MSP 430: MSP430-Regs. (line 6) 28621* register names, OpenRISC: OpenRISC-Regs. (line 6) 28622* register names, S12Z: S12Z Addressing Modes. 28623 (line 28) 28624* register names, Sparc: Sparc-Regs. (line 6) 28625* register names, TILE-Gx: TILE-Gx Registers. (line 6) 28626* register names, TILEPro: TILEPro Registers. (line 6) 28627* register names, V850: V850-Regs. (line 6) 28628* register names, VAX: VAX-operands. (line 17) 28629* register names, Visium: Visium Registers. (line 6) 28630* register names, Xtensa: Xtensa Registers. (line 6) 28631* register names, Z80: Z80-Regs. (line 6) 28632* register naming, s390: s390 Register. (line 6) 28633* register notation, S12Z: S12Z Register Notation. 28634 (line 6) 28635* register operands, i386: i386-Variations. (line 15) 28636* register operands, x86-64: i386-Variations. (line 15) 28637* registers, D10V: D10V-Regs. (line 6) 28638* registers, D30V: D30V-Regs. (line 6) 28639* registers, i386: i386-Regs. (line 6) 28640* registers, Meta: Meta-Regs. (line 6) 28641* registers, SH: SH-Regs. (line 6) 28642* registers, TIC54X memory-mapped: TIC54X-MMRegs. (line 6) 28643* registers, x86-64: i386-Regs. (line 6) 28644* registers, Z8000: Z8000-Regs. (line 6) 28645* 'relax-all' command-line option, Nios II: Nios II Options. (line 13) 28646* 'relax-section' command-line option, Nios II: Nios II Options. 28647 (line 6) 28648* relaxation: Xtensa Relaxation. (line 6) 28649* relaxation of 'ADDI' instructions: Xtensa Immediate Relaxation. 28650 (line 43) 28651* relaxation of branch instructions: Xtensa Branch Relaxation. 28652 (line 6) 28653* relaxation of call instructions: Xtensa Call Relaxation. 28654 (line 6) 28655* relaxation of immediate fields: Xtensa Immediate Relaxation. 28656 (line 6) 28657* relaxation of jump instructions: Xtensa Jump Relaxation. 28658 (line 6) 28659* relaxation of 'L16SI' instructions: Xtensa Immediate Relaxation. 28660 (line 23) 28661* relaxation of 'L16UI' instructions: Xtensa Immediate Relaxation. 28662 (line 23) 28663* relaxation of 'L32I' instructions: Xtensa Immediate Relaxation. 28664 (line 23) 28665* relaxation of 'L8UI' instructions: Xtensa Immediate Relaxation. 28666 (line 23) 28667* relaxation of 'MOVI' instructions: Xtensa Immediate Relaxation. 28668 (line 12) 28669* 'reloc' directive: Reloc. (line 6) 28670* relocation: Sections. (line 6) 28671* relocation example: Ld Sections. (line 40) 28672* relocations, AArch64: AArch64-Relocations. 28673 (line 6) 28674* relocations, Alpha: Alpha-Relocs. (line 6) 28675* relocations, OpenRISC: OpenRISC-Relocs. (line 6) 28676* relocations, Sparc: Sparc-Relocs. (line 6) 28677* relocations, WebAssembly: WebAssembly-Relocs. (line 6) 28678* repeat prefixes, i386: i386-Prefixes. (line 44) 28679* reporting bugs in assembler: Reporting Bugs. (line 6) 28680* 'rept' directive: Rept. (line 6) 28681* 'reserve' directive, SPARC: Sparc-Directives. (line 39) 28682* return instructions, i386: i386-Variations. (line 45) 28683* return instructions, x86-64: i386-Variations. (line 45) 28684* REX prefixes, i386: i386-Prefixes. (line 46) 28685* RISC-V instruction formats: RISC-V-Formats. (line 6) 28686* RISC-V machine directives: RISC-V-Directives. (line 6) 28687* RISC-V support: RISC-V-Dependent. (line 6) 28688* RL78 assembler directives: RL78-Directives. (line 6) 28689* RL78 line comment character: RL78-Chars. (line 6) 28690* RL78 line separator: RL78-Chars. (line 14) 28691* RL78 modifiers: RL78-Modifiers. (line 6) 28692* RL78 options: RL78-Opts. (line 6) 28693* RL78 support: RL78-Dependent. (line 6) 28694* rsect: Z8000 Directives. (line 51) 28695* RX assembler directive .3byte: RX-Directives. (line 9) 28696* RX assembler directive .fetchalign: RX-Directives. (line 13) 28697* RX assembler directives: RX-Directives. (line 6) 28698* RX floating point: RX-Float. (line 6) 28699* RX line comment character: RX-Chars. (line 6) 28700* RX line separator: RX-Chars. (line 14) 28701* RX modifiers: RX-Modifiers. (line 6) 28702* RX options: RX-Opts. (line 6) 28703* RX support: RX-Dependent. (line 6) 28704* S12Z addressing modes: S12Z Addressing Modes. 28705 (line 6) 28706* S12Z line separator: S12Z Syntax Overview. 28707 (line 41) 28708* S12Z options: S12Z Options. (line 6) 28709* S12Z support: S12Z-Dependent. (line 8) 28710* S12Z syntax: S12Z Syntax. (line 12) 28711* s390 floating point: s390 Floating Point. 28712 (line 6) 28713* s390 instruction aliases: s390 Aliases. (line 6) 28714* s390 instruction formats: s390 Formats. (line 6) 28715* s390 instruction marker: s390 Instruction Marker. 28716 (line 6) 28717* s390 instruction mnemonics: s390 Mnemonics. (line 6) 28718* s390 instruction operand modifier: s390 Operand Modifier. 28719 (line 6) 28720* s390 instruction operands: s390 Operands. (line 6) 28721* s390 instruction syntax: s390 Syntax. (line 6) 28722* s390 line comment character: s390 Characters. (line 6) 28723* s390 line separator: s390 Characters. (line 13) 28724* s390 literal pool entries: s390 Literal Pool Entries. 28725 (line 6) 28726* s390 options: s390 Options. (line 6) 28727* s390 register naming: s390 Register. (line 6) 28728* s390 support: S/390-Dependent. (line 6) 28729* Saved User Stack Pointer, ARC: ARC-Regs. (line 73) 28730* 'sblock' directive, TIC54X: TIC54X-Directives. (line 180) 28731* 'sbttl' directive: Sbttl. (line 6) 28732* 'schedule' directive: Schedule Directive. (line 6) 28733* 'scl' directive: Scl. (line 6) 28734* SCORE architectures: SCORE-Opts. (line 6) 28735* SCORE directives: SCORE-Pseudo. (line 6) 28736* SCORE line comment character: SCORE-Chars. (line 6) 28737* SCORE line separator: SCORE-Chars. (line 14) 28738* SCORE options: SCORE-Opts. (line 6) 28739* SCORE processor: SCORE-Dependent. (line 6) 28740* 'sdaoff' pseudo-op, V850: V850 Opcodes. (line 65) 28741* search path for '.include': I. (line 6) 28742* 'sect' directive, TIC54X: TIC54X-Directives. (line 186) 28743* 'section' directive (COFF version): Section. (line 16) 28744* 'section' directive (ELF version): Section. (line 67) 28745* 'section' directive, V850: V850 Directives. (line 9) 28746* section name substitution: Section. (line 71) 28747* section override prefixes, i386: i386-Prefixes. (line 23) 28748* Section Stack: PopSection. (line 6) 28749* Section Stack <1>: Previous. (line 6) 28750* Section Stack <2>: PushSection. (line 6) 28751* Section Stack <3>: Section. (line 62) 28752* Section Stack <4>: SubSection. (line 6) 28753* section-relative addressing: Secs Background. (line 65) 28754* sections: Sections. (line 6) 28755* sections in messages, internal: As Sections. (line 6) 28756* sections, i386: i386-Variations. (line 51) 28757* sections, named: Ld Sections. (line 8) 28758* sections, x86-64: i386-Variations. (line 51) 28759* 'seg' directive, SPARC: Sparc-Directives. (line 44) 28760* segm: Z8000 Directives. (line 10) 28761* 'set at' directive, Nios II: Nios II Directives. (line 35) 28762* 'set break' directive, Nios II: Nios II Directives. (line 43) 28763* 'set' directive: Set. (line 6) 28764* 'set' directive, Nios II: Nios II Directives. (line 57) 28765* 'set' directive, TIC54X: TIC54X-Directives. (line 189) 28766* 'set noat' directive, Nios II: Nios II Directives. (line 31) 28767* 'set nobreak' directive, Nios II: Nios II Directives. (line 39) 28768* 'set norelax' directive, Nios II: Nios II Directives. (line 46) 28769* 'set no_warn_regname_label' directive, PRU: PRU Directives. 28770 (line 28) 28771* 'set relaxall' directive, Nios II: Nios II Directives. (line 53) 28772* 'set relaxsection' directive, Nios II: Nios II Directives. (line 49) 28773* SH addressing modes: SH-Addressing. (line 6) 28774* SH floating point (IEEE): SH Floating Point. (line 6) 28775* SH line comment character: SH-Chars. (line 6) 28776* SH line separator: SH-Chars. (line 8) 28777* SH machine directives: SH Directives. (line 6) 28778* SH opcode summary: SH Opcodes. (line 6) 28779* SH options: SH Options. (line 6) 28780* SH registers: SH-Regs. (line 6) 28781* SH support: SH-Dependent. (line 6) 28782* 'shigh' directive, M32R: M32R-Directives. (line 26) 28783* 'short' directive: Short. (line 6) 28784* 'short' directive, TIC54X: TIC54X-Directives. (line 109) 28785* signatures, WebAssembly: WebAssembly-Signatures. 28786 (line 6) 28787* SIMD, i386: i386-SIMD. (line 6) 28788* SIMD, x86-64: i386-SIMD. (line 6) 28789* single character constant: Chars. (line 6) 28790* 'single' directive: Single. (line 6) 28791* 'single' directive, i386: i386-Float. (line 14) 28792* 'single' directive, x86-64: i386-Float. (line 14) 28793* single quote, Z80: Z80-Chars. (line 20) 28794* sixteen bit integers: hword. (line 6) 28795* sixteen byte integer: Octa. (line 6) 28796* 'size' directive (COFF version): Size. (line 11) 28797* 'size' directive (ELF version): Size. (line 19) 28798* size modifiers, D10V: D10V-Size. (line 6) 28799* size modifiers, D30V: D30V-Size. (line 6) 28800* size modifiers, M680x0: M68K-Syntax. (line 8) 28801* size prefixes, i386: i386-Prefixes. (line 27) 28802* size suffixes, H8/300: H8/300 Opcodes. (line 160) 28803* size, translations, Sparc: Sparc-Size-Translations. 28804 (line 6) 28805* sizes operands, i386: i386-Variations. (line 28) 28806* sizes operands, x86-64: i386-Variations. (line 28) 28807* 'skip' directive: Skip. (line 6) 28808* 'skip' directive, M680x0: M68K-Directives. (line 19) 28809* 'skip' directive, SPARC: Sparc-Directives. (line 48) 28810* 'sleb128' directive: Sleb128. (line 6) 28811* small data, MIPS: MIPS Small Data. (line 6) 28812* SmartMIPS instruction generation override: MIPS ASE Instruction Generation Overrides. 28813 (line 11) 28814* SOM symbol attributes: SOM Symbols. (line 6) 28815* source program: Input Files. (line 6) 28816* source, destination operands; i386: i386-Variations. (line 21) 28817* source, destination operands; x86-64: i386-Variations. (line 21) 28818* sp register: Xtensa Registers. (line 6) 28819* 'sp' register, V850: V850-Regs. (line 12) 28820* 'space' directive: Space. (line 6) 28821* 'space' directive, TIC54X: TIC54X-Directives. (line 194) 28822* space used, maximum for assembly: statistics. (line 6) 28823* SPARC architectures: Sparc-Opts. (line 6) 28824* Sparc constants: Sparc-Constants. (line 6) 28825* SPARC data alignment: Sparc-Aligned-Data. (line 6) 28826* SPARC floating point (IEEE): Sparc-Float. (line 6) 28827* Sparc line comment character: Sparc-Chars. (line 6) 28828* Sparc line separator: Sparc-Chars. (line 14) 28829* SPARC machine directives: Sparc-Directives. (line 6) 28830* SPARC options: Sparc-Opts. (line 6) 28831* Sparc registers: Sparc-Regs. (line 6) 28832* Sparc relocations: Sparc-Relocs. (line 6) 28833* Sparc size translations: Sparc-Size-Translations. 28834 (line 6) 28835* SPARC support: Sparc-Dependent. (line 6) 28836* SPARC syntax: Sparc-Aligned-Data. (line 21) 28837* special characters, M680x0: M68K-Chars. (line 6) 28838* special purpose registers, MSP 430: MSP430-Regs. (line 11) 28839* 'sslist' directive, TIC54X: TIC54X-Directives. (line 201) 28840* 'ssnolist' directive, TIC54X: TIC54X-Directives. (line 201) 28841* 'stabd' directive: Stab. (line 38) 28842* 'stabn' directive: Stab. (line 49) 28843* 'stabs' directive: Stab. (line 52) 28844* 'stabX' directives: Stab. (line 6) 28845* stack pointer, ARC: ARC-Regs. (line 20) 28846* standard assembler sections: Secs Background. (line 27) 28847* standard input, as input file: Command Line. (line 10) 28848* statement separator character: Statements. (line 6) 28849* statement separator, AArch64: AArch64-Chars. (line 10) 28850* statement separator, Alpha: Alpha-Chars. (line 11) 28851* statement separator, ARC: ARC-Chars. (line 27) 28852* statement separator, ARM: ARM-Chars. (line 14) 28853* statement separator, AVR: AVR-Chars. (line 14) 28854* statement separator, BPF: BPF-Chars. (line 10) 28855* statement separator, CR16: CR16-Chars. (line 12) 28856* statement separator, Epiphany: Epiphany-Chars. (line 14) 28857* statement separator, H8/300: H8/300-Chars. (line 8) 28858* statement separator, i386: i386-Chars. (line 18) 28859* statement separator, IA-64: IA-64-Chars. (line 8) 28860* statement separator, IP2K: IP2K-Chars. (line 14) 28861* statement separator, LM32: LM32-Chars. (line 12) 28862* statement separator, M32C: M32C-Chars. (line 14) 28863* statement separator, M68HC11: M68HC11-Syntax. (line 26) 28864* statement separator, Meta: Meta-Chars. (line 8) 28865* statement separator, MicroBlaze: MicroBlaze-Chars. (line 14) 28866* statement separator, MIPS: MIPS-Chars. (line 14) 28867* statement separator, MSP 430: MSP430-Chars. (line 14) 28868* statement separator, NS32K: NS32K-Chars. (line 18) 28869* statement separator, OpenRISC: OpenRISC-Chars. (line 9) 28870* statement separator, PJ: PJ-Chars. (line 14) 28871* statement separator, PowerPC: PowerPC-Chars. (line 18) 28872* statement separator, RL78: RL78-Chars. (line 14) 28873* statement separator, RX: RX-Chars. (line 14) 28874* statement separator, S12Z: S12Z Syntax Overview. 28875 (line 41) 28876* statement separator, s390: s390 Characters. (line 13) 28877* statement separator, SCORE: SCORE-Chars. (line 14) 28878* statement separator, SH: SH-Chars. (line 8) 28879* statement separator, Sparc: Sparc-Chars. (line 14) 28880* statement separator, TIC54X: TIC54X-Chars. (line 17) 28881* statement separator, TIC6X: TIC6X Syntax. (line 13) 28882* statement separator, V850: V850-Chars. (line 13) 28883* statement separator, VAX: VAX-Chars. (line 14) 28884* statement separator, Visium: Visium Characters. (line 14) 28885* statement separator, XGATE: XGATE-Syntax. (line 25) 28886* statement separator, XStormy16: XStormy16-Chars. (line 14) 28887* statement separator, Z80: Z80-Chars. (line 13) 28888* statement separator, Z8000: Z8000-Chars. (line 13) 28889* statements, structure of: Statements. (line 6) 28890* statistics, about assembly: statistics. (line 6) 28891* Status register, ARC: ARC-Regs. (line 57) 28892* STATUS32 saved on exception, ARC: ARC-Regs. (line 82) 28893* stopping the assembly: Abort. (line 6) 28894* Stored STATUS32 register on entry to level P0 interrupts, ARC: ARC-Regs. 28895 (line 69) 28896* string constants: Strings. (line 6) 28897* 'string' directive: String. (line 8) 28898* 'string' directive on HPPA: HPPA Directives. (line 137) 28899* 'string' directive, TIC54X: TIC54X-Directives. (line 206) 28900* string literals: Ascii. (line 6) 28901* string, copying to object file: String. (line 8) 28902* 'string16' directive: String. (line 8) 28903* string16, copying to object file: String. (line 8) 28904* 'string32' directive: String. (line 8) 28905* string32, copying to object file: String. (line 8) 28906* 'string64' directive: String. (line 8) 28907* string64, copying to object file: String. (line 8) 28908* 'string8' directive: String. (line 8) 28909* string8, copying to object file: String. (line 8) 28910* 'struct' directive: Struct. (line 6) 28911* 'struct' directive, TIC54X: TIC54X-Directives. (line 214) 28912* structure debugging, COFF: Tag. (line 6) 28913* sub-instruction ordering, D10V: D10V-Chars. (line 14) 28914* sub-instruction ordering, D30V: D30V-Chars. (line 14) 28915* sub-instructions, D10V: D10V-Subs. (line 6) 28916* sub-instructions, D30V: D30V-Subs. (line 6) 28917* subexpressions: Arguments. (line 24) 28918* 'subsection' directive: SubSection. (line 6) 28919* subsym builtins, TIC54X: TIC54X-Macros. (line 16) 28920* subtitles for listings: Sbttl. (line 6) 28921* subtraction, permitted arguments: Infix Ops. (line 50) 28922* summary of options: Overview. (line 6) 28923* support: HPPA-Dependent. (line 6) 28924* supporting files, including: Include. (line 6) 28925* suppressing warnings: W. (line 11) 28926* sval: Z8000 Directives. (line 33) 28927* symbol attributes: Symbol Attributes. (line 6) 28928* symbol attributes, 'a.out': a.out Symbols. (line 6) 28929* symbol attributes, COFF: COFF Symbols. (line 6) 28930* symbol attributes, SOM: SOM Symbols. (line 6) 28931* symbol descriptor, COFF: Desc. (line 6) 28932* symbol modifiers: AVR-Modifiers. (line 12) 28933* symbol modifiers <1>: LM32-Modifiers. (line 12) 28934* symbol modifiers <2>: M32C-Modifiers. (line 11) 28935* symbol modifiers <3>: M68HC11-Modifiers. (line 12) 28936* symbol modifiers, TILE-Gx: TILE-Gx Modifiers. (line 6) 28937* symbol modifiers, TILEPro: TILEPro Modifiers. (line 6) 28938* symbol names: Symbol Names. (line 6) 28939* symbol names, '$' in: D10V-Chars. (line 46) 28940* symbol names, '$' in <1>: D30V-Chars. (line 70) 28941* symbol names, '$' in <2>: Meta-Chars. (line 10) 28942* symbol names, '$' in <3>: SH-Chars. (line 15) 28943* symbol names, local: Symbol Names. (line 30) 28944* symbol names, temporary: Symbol Names. (line 43) 28945* symbol prefix character, ARC: ARC-Chars. (line 20) 28946* symbol storage class (COFF): Scl. (line 6) 28947* symbol type: Symbol Type. (line 6) 28948* symbol type, COFF: Type. (line 11) 28949* symbol type, ELF: Type. (line 22) 28950* symbol value: Symbol Value. (line 6) 28951* symbol value, setting: Set. (line 6) 28952* symbol values, assigning: Setting Symbols. (line 6) 28953* symbol versioning: Symver. (line 6) 28954* symbol, common: Comm. (line 6) 28955* symbol, making visible to linker: Global. (line 6) 28956* symbolic debuggers, information for: Stab. (line 6) 28957* symbols: Symbols. (line 6) 28958* Symbols in position-independent code, CRIS: CRIS-Pic. (line 6) 28959* symbols with uppercase, VAX/VMS: VAX-Opts. (line 42) 28960* symbols, assigning values to: Equ. (line 6) 28961* Symbols, built-in, CRIS: CRIS-Symbols. (line 6) 28962* Symbols, CRIS, built-in: CRIS-Symbols. (line 6) 28963* symbols, local common: Lcomm. (line 6) 28964* 'symver' directive: Symver. (line 6) 28965* syntax compatibility, i386: i386-Variations. (line 6) 28966* syntax compatibility, x86-64: i386-Variations. (line 6) 28967* syntax, AVR: AVR-Modifiers. (line 6) 28968* syntax, Blackfin: Blackfin Syntax. (line 6) 28969* syntax, D10V: D10V-Syntax. (line 6) 28970* syntax, D30V: D30V-Syntax. (line 6) 28971* syntax, LM32: LM32-Modifiers. (line 6) 28972* syntax, M680x0: M68K-Syntax. (line 8) 28973* syntax, M68HC11: M68HC11-Syntax. (line 6) 28974* syntax, M68HC11 <1>: M68HC11-Modifiers. (line 6) 28975* syntax, machine-independent: Syntax. (line 6) 28976* syntax, OPENRISC: OpenRISC-Dependent. (line 12) 28977* syntax, RL78: RL78-Modifiers. (line 6) 28978* syntax, RX: RX-Modifiers. (line 6) 28979* syntax, S12Z: S12Z Syntax. (line 11) 28980* syntax, SPARC: Sparc-Aligned-Data. (line 20) 28981* syntax, TILE-Gx: TILE-Gx Syntax. (line 6) 28982* syntax, TILEPro: TILEPro Syntax. (line 6) 28983* syntax, XGATE: XGATE-Syntax. (line 6) 28984* syntax, Xtensa assembler: Xtensa Syntax. (line 6) 28985* tab ('\t'): Strings. (line 27) 28986* 'tab' directive, TIC54X: TIC54X-Directives. (line 245) 28987* 'tag' directive: Tag. (line 6) 28988* 'tag' directive, TIC54X: TIC54X-Directives. (line 214) 28989* 'tag' directive, TIC54X <1>: TIC54X-Directives. (line 248) 28990* TBM, i386: i386-TBM. (line 6) 28991* TBM, x86-64: i386-TBM. (line 6) 28992* 'tdaoff' pseudo-op, V850: V850 Opcodes. (line 81) 28993* temporary symbol names: Symbol Names. (line 43) 28994* text and data sections, joining: R. (line 6) 28995* 'text' directive: Text. (line 6) 28996* text section: Ld Sections. (line 9) 28997* 'tfloat' directive, i386: i386-Float. (line 14) 28998* 'tfloat' directive, x86-64: i386-Float. (line 14) 28999* Thumb support: ARM-Dependent. (line 6) 29000* TIC54X builtin math functions: TIC54X-Builtins. (line 6) 29001* TIC54X line comment character: TIC54X-Chars. (line 6) 29002* TIC54X line separator: TIC54X-Chars. (line 17) 29003* TIC54X machine directives: TIC54X-Directives. (line 6) 29004* TIC54X memory-mapped registers: TIC54X-MMRegs. (line 6) 29005* TIC54X options: TIC54X-Opts. (line 6) 29006* TIC54X subsym builtins: TIC54X-Macros. (line 16) 29007* TIC54X support: TIC54X-Dependent. (line 6) 29008* TIC54X-specific macros: TIC54X-Macros. (line 6) 29009* TIC6X big-endian output: TIC6X Options. (line 46) 29010* TIC6X line comment character: TIC6X Syntax. (line 6) 29011* TIC6X line separator: TIC6X Syntax. (line 13) 29012* TIC6X little-endian output: TIC6X Options. (line 46) 29013* TIC6X machine directives: TIC6X Directives. (line 6) 29014* TIC6X options: TIC6X Options. (line 6) 29015* TIC6X support: TIC6X-Dependent. (line 6) 29016* TILE-Gx machine directives: TILE-Gx Directives. (line 6) 29017* TILE-Gx modifiers: TILE-Gx Modifiers. (line 6) 29018* TILE-Gx opcode names: TILE-Gx Opcodes. (line 6) 29019* TILE-Gx register names: TILE-Gx Registers. (line 6) 29020* TILE-Gx support: TILE-Gx-Dependent. (line 6) 29021* TILE-Gx syntax: TILE-Gx Syntax. (line 6) 29022* TILEPro machine directives: TILEPro Directives. (line 6) 29023* TILEPro modifiers: TILEPro Modifiers. (line 6) 29024* TILEPro opcode names: TILEPro Opcodes. (line 6) 29025* TILEPro register names: TILEPro Registers. (line 6) 29026* TILEPro support: TILEPro-Dependent. (line 6) 29027* TILEPro syntax: TILEPro Syntax. (line 6) 29028* time, total for assembly: statistics. (line 6) 29029* 'title' directive: Title. (line 6) 29030* 'tls_common' directive: Tls_common. (line 6) 29031* 'tls_gd' directive, Nios II: Nios II Relocations. 29032 (line 38) 29033* 'tls_ie' directive, Nios II: Nios II Relocations. 29034 (line 38) 29035* 'tls_ldm' directive, Nios II: Nios II Relocations. 29036 (line 38) 29037* 'tls_ldo' directive, Nios II: Nios II Relocations. 29038 (line 38) 29039* 'tls_le' directive, Nios II: Nios II Relocations. 29040 (line 38) 29041* TMS320C6X support: TIC6X-Dependent. (line 6) 29042* 'tp' register, V850: V850-Regs. (line 16) 29043* 'transform' directive: Transform Directive. 29044 (line 6) 29045* trusted compiler: f. (line 6) 29046* turning preprocessing on and off: Preprocessing. (line 28) 29047* two-byte integer: 2byte. (line 6) 29048* 'type' directive (COFF version): Type. (line 11) 29049* 'type' directive (ELF version): Type. (line 22) 29050* type of a symbol: Symbol Type. (line 6) 29051* 'ualong' directive, SH: SH Directives. (line 6) 29052* 'uaquad' directive, SH: SH Directives. (line 6) 29053* 'uaword' directive, SH: SH Directives. (line 6) 29054* 'ubyte' directive, TIC54X: TIC54X-Directives. (line 34) 29055* 'uchar' directive, TIC54X: TIC54X-Directives. (line 34) 29056* 'uhalf' directive, TIC54X: TIC54X-Directives. (line 109) 29057* 'uint' directive, TIC54X: TIC54X-Directives. (line 109) 29058* 'uleb128' directive: Uleb128. (line 6) 29059* 'ulong' directive, TIC54X: TIC54X-Directives. (line 133) 29060* undefined section: Ld Sections. (line 36) 29061* 'union' directive, TIC54X: TIC54X-Directives. (line 248) 29062* unsegm: Z8000 Directives. (line 14) 29063* 'usect' directive, TIC54X: TIC54X-Directives. (line 260) 29064* 'ushort' directive, TIC54X: TIC54X-Directives. (line 109) 29065* 'uword' directive, TIC54X: TIC54X-Directives. (line 109) 29066* V850 command-line options: V850 Options. (line 9) 29067* V850 floating point (IEEE): V850 Floating Point. 29068 (line 6) 29069* V850 line comment character: V850-Chars. (line 6) 29070* V850 line separator: V850-Chars. (line 13) 29071* V850 machine directives: V850 Directives. (line 6) 29072* V850 opcodes: V850 Opcodes. (line 6) 29073* V850 options (none): V850 Options. (line 6) 29074* V850 register names: V850-Regs. (line 6) 29075* V850 support: V850-Dependent. (line 6) 29076* 'val' directive: Val. (line 6) 29077* value attribute, COFF: Val. (line 6) 29078* 'value' directive: i386-Directives. (line 26) 29079* value of a symbol: Symbol Value. (line 6) 29080* 'var' directive, TIC54X: TIC54X-Directives. (line 270) 29081* VAX bitfields not supported: VAX-no. (line 6) 29082* VAX branch improvement: VAX-branch. (line 6) 29083* VAX command-line options ignored: VAX-Opts. (line 6) 29084* VAX displacement sizing character: VAX-operands. (line 12) 29085* VAX floating point: VAX-float. (line 6) 29086* VAX immediate character: VAX-operands. (line 6) 29087* VAX indirect character: VAX-operands. (line 9) 29088* VAX line comment character: VAX-Chars. (line 6) 29089* VAX line separator: VAX-Chars. (line 14) 29090* VAX machine directives: VAX-directives. (line 6) 29091* VAX opcode mnemonics: VAX-opcodes. (line 6) 29092* VAX operand notation: VAX-operands. (line 6) 29093* VAX register names: VAX-operands. (line 17) 29094* VAX support: Vax-Dependent. (line 6) 29095* Vax-11 C compatibility: VAX-Opts. (line 42) 29096* VAX/VMS options: VAX-Opts. (line 42) 29097* 'version' directive: Version. (line 6) 29098* 'version' directive, TIC54X: TIC54X-Directives. (line 274) 29099* version of assembler: v. (line 6) 29100* versions of symbols: Symver. (line 6) 29101* Virtualization instruction generation override: MIPS ASE Instruction Generation Overrides. 29102 (line 52) 29103* visibility: Hidden. (line 6) 29104* visibility <1>: Internal. (line 6) 29105* visibility <2>: Protected. (line 6) 29106* Visium line comment character: Visium Characters. (line 6) 29107* Visium line separator: Visium Characters. (line 14) 29108* Visium options: Visium Options. (line 6) 29109* Visium registers: Visium Registers. (line 6) 29110* Visium support: Visium-Dependent. (line 6) 29111* VMS (VAX) options: VAX-Opts. (line 42) 29112* 'vtable_entry' directive: VTableEntry. (line 6) 29113* 'vtable_inherit' directive: VTableInherit. (line 6) 29114* warning directive: Warning. (line 6) 29115* warning for altered difference tables: K. (line 6) 29116* warning messages: Errors. (line 6) 29117* warnings, causing error: W. (line 16) 29118* warnings, M32R: M32R-Warnings. (line 6) 29119* warnings, suppressing: W. (line 11) 29120* warnings, switching on: W. (line 19) 29121* 'weak' directive: Weak. (line 6) 29122* 'weakref' directive: Weakref. (line 6) 29123* WebAssembly floating point (IEEE): WebAssembly-Floating-Point. 29124 (line 6) 29125* WebAssembly line comment character: WebAssembly-Chars. (line 6) 29126* WebAssembly module layout: WebAssembly-module-layout. 29127 (line 6) 29128* WebAssembly notes: WebAssembly-Notes. (line 6) 29129* WebAssembly opcodes: WebAssembly-Opcodes. 29130 (line 6) 29131* WebAssembly relocations: WebAssembly-Relocs. (line 6) 29132* WebAssembly signatures: WebAssembly-Signatures. 29133 (line 6) 29134* WebAssembly support: WebAssembly-Dependent. 29135 (line 6) 29136* WebAssembly Syntax: WebAssembly-Syntax. (line 6) 29137* whitespace: Whitespace. (line 6) 29138* whitespace, removed by preprocessor: Preprocessing. (line 7) 29139* wide floating point directives, VAX: VAX-directives. (line 9) 29140* 'width' directive, TIC54X: TIC54X-Directives. (line 125) 29141* Width of continuation lines of disassembly output: listing. 29142 (line 21) 29143* Width of first line disassembly output: listing. (line 16) 29144* Width of source line output: listing. (line 28) 29145* 'wmsg' directive, TIC54X: TIC54X-Directives. (line 75) 29146* word aligned program counter, ARC: ARC-Regs. (line 44) 29147* 'word' directive: Word. (line 6) 29148* 'word' directive, BPF: BPF Directives. (line 12) 29149* 'word' directive, H8/300: H8/300 Directives. (line 6) 29150* 'word' directive, i386: i386-Float. (line 21) 29151* 'word' directive, Nios II: Nios II Directives. (line 13) 29152* 'word' directive, OpenRISC: OpenRISC-Directives. 29153 (line 12) 29154* 'word' directive, PRU: PRU Directives. (line 10) 29155* 'word' directive, SPARC: Sparc-Directives. (line 51) 29156* 'word' directive, TIC54X: TIC54X-Directives. (line 109) 29157* 'word' directive, x86-64: i386-Float. (line 21) 29158* writing patterns in memory: Fill. (line 6) 29159* wval: Z8000 Directives. (line 24) 29160* x86 machine directives: i386-Directives. (line 6) 29161* x86-64 arch directive: i386-Arch. (line 6) 29162* x86-64 att_syntax pseudo op: i386-Variations. (line 6) 29163* x86-64 conversion instructions: i386-Mnemonics. (line 66) 29164* x86-64 extension instructions: i386-Mnemonics. (line 85) 29165* x86-64 floating point: i386-Float. (line 6) 29166* x86-64 immediate operands: i386-Variations. (line 15) 29167* x86-64 instruction naming: i386-Mnemonics. (line 9) 29168* x86-64 intel_syntax pseudo op: i386-Variations. (line 6) 29169* x86-64 jump optimization: i386-Jumps. (line 6) 29170* x86-64 jump, call, return: i386-Variations. (line 45) 29171* x86-64 jump/call operands: i386-Variations. (line 15) 29172* x86-64 memory references: i386-Memory. (line 6) 29173* x86-64 options: i386-Options. (line 6) 29174* x86-64 register operands: i386-Variations. (line 15) 29175* x86-64 registers: i386-Regs. (line 6) 29176* x86-64 sections: i386-Variations. (line 51) 29177* x86-64 size suffixes: i386-Variations. (line 28) 29178* x86-64 source, destination operands: i386-Variations. (line 21) 29179* x86-64 support: i386-Dependent. (line 6) 29180* x86-64 syntax compatibility: i386-Variations. (line 6) 29181* 'xdef' directive, Z80: Z80 Directives. (line 62) 29182* 'xfloat' directive, TIC54X: TIC54X-Directives. (line 62) 29183* XGATE addressing modes: XGATE-Syntax. (line 28) 29184* XGATE assembler directives: XGATE-Directives. (line 6) 29185* XGATE floating point: XGATE-Float. (line 6) 29186* XGATE line comment character: XGATE-Syntax. (line 16) 29187* XGATE line separator: XGATE-Syntax. (line 25) 29188* XGATE opcodes: XGATE-opcodes. (line 6) 29189* XGATE options: XGATE-Opts. (line 6) 29190* XGATE support: XGATE-Dependent. (line 6) 29191* XGATE syntax: XGATE-Syntax. (line 6) 29192* 'xlong' directive, TIC54X: TIC54X-Directives. (line 133) 29193* 'xref' directive, Z80: Z80 Directives. (line 66) 29194* XStormy16 comment character: XStormy16-Chars. (line 11) 29195* XStormy16 line comment character: XStormy16-Chars. (line 6) 29196* XStormy16 line separator: XStormy16-Chars. (line 14) 29197* XStormy16 machine directives: XStormy16 Directives. 29198 (line 6) 29199* XStormy16 pseudo-opcodes: XStormy16 Opcodes. (line 6) 29200* XStormy16 support: XSTORMY16-Dependent. 29201 (line 6) 29202* Xtensa architecture: Xtensa-Dependent. (line 6) 29203* Xtensa assembler syntax: Xtensa Syntax. (line 6) 29204* Xtensa directives: Xtensa Directives. (line 6) 29205* Xtensa opcode names: Xtensa Opcodes. (line 6) 29206* Xtensa register names: Xtensa Registers. (line 6) 29207* 'xword' directive, SPARC: Sparc-Directives. (line 55) 29208* Z80 $: Z80-Chars. (line 15) 29209* Z80 ': Z80-Chars. (line 20) 29210* Z80 floating point: Z80 Floating Point. (line 6) 29211* Z80 labels: Z80-Labels. (line 6) 29212* Z80 line comment character: Z80-Chars. (line 6) 29213* Z80 line separator: Z80-Chars. (line 13) 29214* Z80 options: Z80 Options. (line 6) 29215* Z80 registers: Z80-Regs. (line 6) 29216* Z80 support: Z80-Dependent. (line 6) 29217* Z80 Syntax: Z80 Options. (line 67) 29218* Z80, case sensitivity: Z80-Case. (line 6) 29219* Z80, \: Z80-Chars. (line 18) 29220* Z80-only directives: Z80 Directives. (line 6) 29221* Z800 addressing modes: Z8000-Addressing. (line 6) 29222* Z8000 directives: Z8000 Directives. (line 6) 29223* Z8000 line comment character: Z8000-Chars. (line 6) 29224* Z8000 line separator: Z8000-Chars. (line 13) 29225* Z8000 opcode summary: Z8000 Opcodes. (line 6) 29226* Z8000 options: Z8000 Options. (line 6) 29227* Z8000 registers: Z8000-Regs. (line 6) 29228* Z8000 support: Z8000-Dependent. (line 6) 29229* 'zdaoff' pseudo-op, V850: V850 Opcodes. (line 98) 29230* 'zero' directive: Zero. (line 6) 29231* 'zero' register, V850: V850-Regs. (line 7) 29232* zero-terminated strings: Asciz. (line 6) 29233 29234 29235 29236Tag Table: 29237Node: Top733 29238Node: Overview1777 29239Node: Manual43559 29240Node: GNU Assembler44503 29241Node: Object Formats45674 29242Node: Command Line46126 29243Node: Input Files47212 29244Node: Object49193 29245Node: Errors50089 29246Node: Invoking51651 29247Node: a53657 29248Node: alternate55568 29249Node: D55740 29250Node: f55973 29251Node: I56482 29252Node: K57026 29253Node: L57330 29254Node: listing58069 29255Node: M59728 29256Node: MD63565 29257Node: no-pad-sections64005 29258Node: o64380 29259Node: R64807 29260Node: statistics65837 29261Node: traditional-format66244 29262Node: v66717 29263Node: W66992 29264Node: Z67899 29265Node: Syntax68421 29266Node: Preprocessing69013 29267Node: Whitespace70670 29268Node: Comments71066 29269Node: Symbol Intro73077 29270Node: Statements74061 29271Node: Constants76049 29272Node: Characters76680 29273Node: Strings77182 29274Node: Chars79355 29275Node: Numbers80207 29276Node: Integers80747 29277Node: Bignums81403 29278Node: Flonums81759 29279Node: Sections83376 29280Node: Secs Background83754 29281Node: Ld Sections88787 29282Node: As Sections91171 29283Node: Sub-Sections92081 29284Node: bss95229 29285Node: Symbols96179 29286Node: Labels96827 29287Node: Setting Symbols97558 29288Node: Symbol Names98112 29289Node: Dot103579 29290Node: Symbol Attributes104026 29291Node: Symbol Value104759 29292Node: Symbol Type105804 29293Node: a.out Symbols106192 29294Node: Symbol Desc106454 29295Node: Symbol Other106750 29296Node: COFF Symbols106919 29297Node: SOM Symbols107592 29298Node: Expressions108034 29299Node: Empty Exprs108783 29300Node: Integer Exprs109130 29301Node: Arguments109525 29302Node: Operators110631 29303Node: Prefix Ops110966 29304Node: Infix Ops111293 29305Node: Pseudo Ops113687 29306Node: Abort119927 29307Node: ABORT (COFF)120340 29308Node: Align120548 29309Node: Altmacro122944 29310Node: Ascii124275 29311Node: Asciz124584 29312Node: Attach_to_group124974 29313Node: Balign125388 29314Node: Bundle directives127397 29315Node: Byte130378 29316Node: CFI directives130639 29317Node: Comm139951 29318Ref: Comm-Footnote-1141551 29319Node: Data141913 29320Node: Dc142229 29321Node: Dcb143206 29322Node: Ds143999 29323Node: Def144829 29324Node: Desc145059 29325Node: Dim145559 29326Node: Double145816 29327Node: Eject146154 29328Node: Else146329 29329Node: Elseif146629 29330Node: End146923 29331Node: Endef147138 29332Node: Endfunc147315 29333Node: Endif147490 29334Node: Equ147751 29335Node: Equiv148266 29336Node: Eqv148822 29337Node: Err149186 29338Node: Error149497 29339Node: Exitm149942 29340Node: Extern150111 29341Node: Fail150372 29342Node: File150817 29343Node: Fill152923 29344Node: Float153887 29345Node: Func154229 29346Node: Global154819 29347Node: Gnu_attribute155576 29348Node: Hidden155801 29349Node: hword156387 29350Node: Ident156715 29351Node: If157289 29352Node: Incbin160350 29353Node: Include161044 29354Node: Int161595 29355Node: Internal161976 29356Node: Irp162623 29357Node: Irpc163502 29358Node: Lcomm164418 29359Node: Lflags165165 29360Node: Line165359 29361Node: Linkonce166275 29362Node: List167504 29363Node: Ln168111 29364Node: Loc168261 29365Node: Loc_mark_labels170566 29366Node: Local171050 29367Node: Long171662 29368Node: Macro171840 29369Node: MRI177771 29370Node: Noaltmacro178109 29371Node: Nolist178278 29372Node: Nop178706 29373Node: Nops179390 29374Node: Octa180245 29375Node: Offset180580 29376Node: Org180907 29377Node: P2align182192 29378Node: PopSection184246 29379Node: Previous184754 29380Node: Print186166 29381Node: Protected186395 29382Node: Psize187042 29383Node: Purgem187726 29384Node: PushSection187947 29385Node: Quad188691 29386Node: Reloc189145 29387Node: Rept189906 29388Node: Sbttl190468 29389Node: Scl190833 29390Node: Section191174 29391Ref: Section Name Substitutions193232 29392Node: Set201060 29393Node: Short202152 29394Node: Single202473 29395Node: Size202818 29396Node: Skip203484 29397Node: Sleb128203808 29398Node: Space204130 29399Node: Stab204771 29400Node: String206774 29401Node: Struct207766 29402Node: SubSection208489 29403Node: Symver209050 29404Node: Tag211931 29405Node: Text212311 29406Node: Title212631 29407Node: Tls_common213016 29408Node: Type213335 29409Node: Uleb128215803 29410Node: Val216127 29411Node: Version216377 29412Node: VTableEntry216651 29413Node: VTableInherit216941 29414Node: Warning217391 29415Node: Weak217625 29416Node: Weakref218294 29417Node: Word219259 29418Node: Zero221099 29419Node: 2byte221506 29420Node: 4byte222510 29421Node: 8byte222774 29422Node: Deprecated223051 29423Node: Object Attributes223286 29424Node: GNU Object Attributes225006 29425Node: Defining New Object Attributes229352 29426Node: Machine Dependencies230144 29427Node: AArch64-Dependent234179 29428Node: AArch64 Options234661 29429Node: AArch64 Extensions237650 29430Node: AArch64 Syntax243452 29431Node: AArch64-Chars243752 29432Node: AArch64-Regs244238 29433Node: AArch64-Relocations244532 29434Node: AArch64 Floating Point245606 29435Node: AArch64 Directives245831 29436Node: AArch64 Opcodes249758 29437Node: AArch64 Mapping Symbols250435 29438Node: Alpha-Dependent250816 29439Node: Alpha Notes251256 29440Node: Alpha Options251537 29441Node: Alpha Syntax254012 29442Node: Alpha-Chars254481 29443Node: Alpha-Regs254893 29444Node: Alpha-Relocs255280 29445Node: Alpha Floating Point261526 29446Node: Alpha Directives261748 29447Node: Alpha Opcodes267275 29448Node: ARC-Dependent267570 29449Node: ARC Options268015 29450Node: ARC Syntax271141 29451Node: ARC-Chars271369 29452Node: ARC-Regs272491 29453Node: ARC Directives275259 29454Node: ARC Modifiers283914 29455Node: ARC Symbols284924 29456Node: ARC Opcodes285478 29457Node: ARM-Dependent285724 29458Node: ARM Options286189 29459Node: ARM Syntax306370 29460Node: ARM-Instruction-Set306738 29461Node: ARM-Chars307953 29462Node: ARM-Regs308664 29463Node: ARM-Relocations308873 29464Node: ARM-Neon-Alignment310559 29465Node: ARM Floating Point311024 29466Node: ARM Directives311223 29467Ref: arm_fnend316382 29468Ref: arm_fnstart316701 29469Ref: arm_pad319109 29470Ref: arm_save319711 29471Ref: arm_setfp320412 29472Node: ARM Opcodes323698 29473Node: ARM Mapping Symbols326300 29474Node: ARM Unwinding Tutorial327109 29475Node: AVR-Dependent333309 29476Node: AVR Options333648 29477Node: AVR Syntax339966 29478Node: AVR-Chars340253 29479Node: AVR-Regs340812 29480Node: AVR-Modifiers341393 29481Node: AVR Opcodes343761 29482Node: AVR Pseudo Instructions349039 29483Node: Blackfin-Dependent350698 29484Node: Blackfin Options351009 29485Node: Blackfin Syntax351983 29486Node: Blackfin Directives358189 29487Node: BPF-Dependent358930 29488Node: BPF Options359247 29489Node: BPF Syntax359630 29490Node: BPF-Chars359898 29491Node: BPF-Regs360291 29492Node: BPF-Pseudo-Maps360803 29493Node: BPF Directives361223 29494Node: BPF Opcodes361637 29495Node: CR16-Dependent368195 29496Node: CR16 Operand Qualifiers368490 29497Node: CR16 Syntax371199 29498Node: CR16-Chars371385 29499Node: CRIS-Dependent371922 29500Node: CRIS-Opts372269 29501Ref: march-option373954 29502Node: CRIS-Expand375773 29503Node: CRIS-Symbols376956 29504Node: CRIS-Syntax378127 29505Node: CRIS-Chars378463 29506Node: CRIS-Pic379014 29507Ref: crispic379209 29508Node: CRIS-Regs382758 29509Node: CRIS-Pseudos383175 29510Ref: crisnous383952 29511Node: C-SKY-Dependent385240 29512Node: C-SKY Options385502 29513Node: C-SKY Syntax388487 29514Node: D10V-Dependent388732 29515Node: D10V-Opts389086 29516Node: D10V-Syntax390057 29517Node: D10V-Size390588 29518Node: D10V-Subs391561 29519Node: D10V-Chars392598 29520Node: D10V-Regs394411 29521Node: D10V-Addressing395440 29522Node: D10V-Word396120 29523Node: D10V-Float396637 29524Node: D10V-Opcodes396950 29525Node: D30V-Dependent397345 29526Node: D30V-Opts397702 29527Node: D30V-Syntax398380 29528Node: D30V-Size398914 29529Node: D30V-Subs399887 29530Node: D30V-Chars400924 29531Node: D30V-Guarded403534 29532Node: D30V-Regs404211 29533Node: D30V-Addressing405330 29534Node: D30V-Float405992 29535Node: D30V-Opcodes406305 29536Node: Epiphany-Dependent406700 29537Node: Epiphany Options406988 29538Node: Epiphany Syntax407387 29539Node: Epiphany-Chars407588 29540Node: H8/300-Dependent408142 29541Node: H8/300 Options408558 29542Node: H8/300 Syntax408998 29543Node: H8/300-Chars409299 29544Node: H8/300-Regs409598 29545Node: H8/300-Addressing410517 29546Node: H8/300 Floating Point411541 29547Node: H8/300 Directives411868 29548Node: H8/300 Opcodes412996 29549Node: HPPA-Dependent421315 29550Node: HPPA Notes421747 29551Node: HPPA Options422506 29552Node: HPPA Syntax422701 29553Node: HPPA Floating Point423971 29554Node: HPPA Directives424177 29555Node: HPPA Opcodes432859 29556Node: i386-Dependent433118 29557Node: i386-Options434501 29558Node: i386-Directives449512 29559Node: i386-Syntax450854 29560Node: i386-Variations451159 29561Node: i386-Chars454083 29562Node: i386-Mnemonics454812 29563Node: i386-Regs459818 29564Node: i386-Prefixes462476 29565Node: i386-Memory465236 29566Node: i386-Jumps468175 29567Node: i386-Float469298 29568Node: i386-SIMD471127 29569Node: i386-LWP472236 29570Node: i386-BMI473070 29571Node: i386-TBM473448 29572Node: i386-16bit473978 29573Node: i386-Arch476049 29574Node: i386-ISA479740 29575Node: i386-Bugs480611 29576Node: i386-Notes481361 29577Node: IA-64-Dependent482220 29578Node: IA-64 Options482521 29579Node: IA-64 Syntax485672 29580Node: IA-64-Chars486078 29581Node: IA-64-Regs486308 29582Node: IA-64-Bits487234 29583Node: IA-64-Relocs487764 29584Node: IA-64 Opcodes488235 29585Node: IP2K-Dependent488507 29586Node: IP2K-Opts488779 29587Node: IP2K-Syntax489278 29588Node: IP2K-Chars489452 29589Node: LM32-Dependent489995 29590Node: LM32 Options490290 29591Node: LM32 Syntax490923 29592Node: LM32-Regs491219 29593Node: LM32-Modifiers492160 29594Node: LM32-Chars493540 29595Node: LM32 Opcodes494048 29596Node: M32C-Dependent494352 29597Node: M32C-Opts494858 29598Node: M32C-Syntax495277 29599Node: M32C-Modifiers495512 29600Node: M32C-Chars497304 29601Node: M32R-Dependent497870 29602Node: M32R-Opts498191 29603Node: M32R-Directives502353 29604Node: M32R-Warnings506327 29605Node: M68K-Dependent509332 29606Node: M68K-Opts509799 29607Node: M68K-Syntax517221 29608Node: M68K-Moto-Syntax519061 29609Node: M68K-Float521645 29610Node: M68K-Directives522165 29611Node: M68K-opcodes523492 29612Node: M68K-Branch523718 29613Node: M68K-Chars527911 29614Node: M68HC11-Dependent528774 29615Node: M68HC11-Opts529305 29616Node: M68HC11-Syntax533617 29617Node: M68HC11-Modifiers536411 29618Node: M68HC11-Directives538238 29619Node: M68HC11-Float539612 29620Node: M68HC11-opcodes540140 29621Node: M68HC11-Branch540322 29622Node: S12Z-Dependent542771 29623Node: S12Z Options543114 29624Node: S12Z Syntax544098 29625Node: S12Z Syntax Overview544417 29626Node: S12Z Addressing Modes546079 29627Node: S12Z Register Notation549883 29628Node: Meta-Dependent551059 29629Node: Meta Options551341 29630Node: Meta Syntax552003 29631Node: Meta-Chars552215 29632Node: Meta-Regs552515 29633Node: MicroBlaze-Dependent552791 29634Node: MicroBlaze Directives553478 29635Node: MicroBlaze Syntax554869 29636Node: MicroBlaze-Chars555101 29637Node: MIPS-Dependent555653 29638Node: MIPS Options557087 29639Node: MIPS Macros576179 29640Ref: MIPS Macros-Footnote-1578893 29641Node: MIPS Symbol Sizes579036 29642Node: MIPS Small Data580708 29643Node: MIPS ISA582872 29644Node: MIPS assembly options584656 29645Node: MIPS autoextend585789 29646Node: MIPS insn586523 29647Node: MIPS FP ABIs587803 29648Node: MIPS FP ABI History588255 29649Node: MIPS FP ABI Variants589015 29650Node: MIPS FP ABI Selection591568 29651Node: MIPS FP ABI Compatibility592631 29652Node: MIPS NaN Encodings593441 29653Node: MIPS Option Stack595404 29654Node: MIPS ASE Instruction Generation Overrides596189 29655Node: MIPS Floating-Point600950 29656Node: MIPS Syntax601856 29657Node: MIPS-Chars602118 29658Node: MMIX-Dependent602660 29659Node: MMIX-Opts603040 29660Node: MMIX-Expand606646 29661Node: MMIX-Syntax607958 29662Ref: mmixsite608314 29663Node: MMIX-Chars609156 29664Node: MMIX-Symbols610029 29665Node: MMIX-Regs612100 29666Node: MMIX-Pseudos613125 29667Ref: MMIX-loc613267 29668Ref: MMIX-local614348 29669Ref: MMIX-is614881 29670Ref: MMIX-greg615153 29671Ref: GREG-base616071 29672Ref: MMIX-byte617390 29673Ref: MMIX-constants617862 29674Ref: MMIX-prefix618504 29675Ref: MMIX-spec618879 29676Node: MMIX-mmixal619213 29677Node: MSP430-Dependent622708 29678Node: MSP430 Options623177 29679Node: MSP430 Syntax626745 29680Node: MSP430-Macros627061 29681Node: MSP430-Chars627791 29682Node: MSP430-Regs628506 29683Node: MSP430-Ext629067 29684Node: MSP430 Floating Point630886 29685Node: MSP430 Directives631110 29686Node: MSP430 Opcodes632951 29687Node: MSP430 Profiling Capability633346 29688Node: NDS32-Dependent635674 29689Node: NDS32 Options636283 29690Node: NDS32 Syntax638166 29691Node: NDS32-Chars638434 29692Node: NDS32-Regs638901 29693Node: NDS32-Ops639755 29694Node: NiosII-Dependent643352 29695Node: Nios II Options643771 29696Node: Nios II Syntax645003 29697Node: Nios II Chars645209 29698Node: Nios II Relocations645400 29699Node: Nios II Directives646971 29700Node: Nios II Opcodes648533 29701Node: NS32K-Dependent648808 29702Node: NS32K Syntax649037 29703Node: NS32K-Chars649186 29704Node: OpenRISC-Dependent649926 29705Node: OpenRISC-Syntax650269 29706Node: OpenRISC-Chars650590 29707Node: OpenRISC-Regs650913 29708Node: OpenRISC-Relocs651926 29709Node: OpenRISC-Float656706 29710Node: OpenRISC-Directives656912 29711Node: OpenRISC-Opcodes657710 29712Node: PDP-11-Dependent658002 29713Node: PDP-11-Options658395 29714Node: PDP-11-Pseudos663454 29715Node: PDP-11-Syntax663799 29716Node: PDP-11-Mnemonics664631 29717Node: PDP-11-Synthetic664933 29718Node: PJ-Dependent665151 29719Node: PJ Options665414 29720Node: PJ Syntax665709 29721Node: PJ-Chars665874 29722Node: PPC-Dependent666423 29723Node: PowerPC-Opts666755 29724Node: PowerPC-Pseudo670546 29725Node: PowerPC-Syntax671167 29726Node: PowerPC-Chars671357 29727Node: PRU-Dependent672108 29728Node: PRU Options672491 29729Node: PRU Syntax673230 29730Node: PRU Chars673417 29731Node: PRU Relocations673572 29732Node: PRU Directives674123 29733Node: PRU Opcodes675026 29734Node: RISC-V-Dependent675443 29735Node: RISC-V-Options675871 29736Node: RISC-V-Directives678585 29737Node: RISC-V-Modifiers682383 29738Node: RISC-V-Formats686451 29739Node: RISC-V-ATTRIBUTE694134 29740Node: RL78-Dependent696096 29741Node: RL78-Opts696497 29742Node: RL78-Modifiers697331 29743Node: RL78-Directives698110 29744Node: RL78-Syntax698714 29745Node: RL78-Chars698910 29746Node: RX-Dependent699466 29747Node: RX-Opts699897 29748Node: RX-Modifiers704161 29749Node: RX-Directives705264 29750Node: RX-Float706003 29751Node: RX-Syntax706638 29752Node: RX-Chars706817 29753Node: S/390-Dependent707369 29754Node: s390 Options708221 29755Node: s390 Characters710396 29756Node: s390 Syntax710917 29757Node: s390 Register711819 29758Node: s390 Mnemonics712635 29759Node: s390 Operands715655 29760Node: s390 Formats718286 29761Node: s390 Aliases726133 29762Node: s390 Operand Modifier730098 29763Node: s390 Instruction Marker733901 29764Node: s390 Literal Pool Entries734915 29765Node: s390 Directives736848 29766Node: s390 Floating Point742305 29767Node: SCORE-Dependent742753 29768Node: SCORE-Opts743055 29769Node: SCORE-Pseudo744342 29770Node: SCORE-Syntax746424 29771Node: SCORE-Chars746606 29772Node: SH-Dependent747164 29773Node: SH Options747576 29774Node: SH Syntax748627 29775Node: SH-Chars748900 29776Node: SH-Regs749443 29777Node: SH-Addressing750057 29778Node: SH Floating Point750965 29779Node: SH Directives752062 29780Node: SH Opcodes752463 29781Node: Sparc-Dependent756784 29782Node: Sparc-Opts757193 29783Node: Sparc-Aligned-Data762906 29784Node: Sparc-Syntax763738 29785Node: Sparc-Chars764312 29786Node: Sparc-Regs764875 29787Node: Sparc-Constants770723 29788Node: Sparc-Relocs775483 29789Node: Sparc-Size-Translations780601 29790Node: Sparc-Float782251 29791Node: Sparc-Directives782446 29792Node: TIC54X-Dependent784408 29793Node: TIC54X-Opts785171 29794Node: TIC54X-Block786212 29795Node: TIC54X-Env786572 29796Node: TIC54X-Constants786920 29797Node: TIC54X-Subsyms787316 29798Node: TIC54X-Locals789220 29799Node: TIC54X-Builtins789960 29800Node: TIC54X-Ext792374 29801Node: TIC54X-Directives792945 29802Node: TIC54X-Macros803853 29803Node: TIC54X-MMRegs805940 29804Node: TIC54X-Syntax806177 29805Node: TIC54X-Chars806367 29806Node: TIC6X-Dependent807058 29807Node: TIC6X Options807361 29808Node: TIC6X Syntax809360 29809Node: TIC6X Directives810463 29810Node: TILE-Gx-Dependent812747 29811Node: TILE-Gx Options813057 29812Node: TILE-Gx Syntax813406 29813Node: TILE-Gx Opcodes815642 29814Node: TILE-Gx Registers815930 29815Node: TILE-Gx Modifiers816701 29816Node: TILE-Gx Directives821700 29817Node: TILEPro-Dependent822603 29818Node: TILEPro Options822912 29819Node: TILEPro Syntax823096 29820Node: TILEPro Opcodes825332 29821Node: TILEPro Registers825623 29822Node: TILEPro Modifiers826393 29823Node: TILEPro Directives831182 29824Node: V850-Dependent832085 29825Node: V850 Options832481 29826Node: V850 Syntax836759 29827Node: V850-Chars836999 29828Node: V850-Regs837543 29829Node: V850 Floating Point839053 29830Node: V850 Directives839259 29831Node: V850 Opcodes841325 29832Node: Vax-Dependent847204 29833Node: VAX-Opts847788 29834Node: VAX-float851509 29835Node: VAX-directives852142 29836Node: VAX-opcodes853002 29837Node: VAX-branch853391 29838Node: VAX-operands855895 29839Node: VAX-no856658 29840Node: VAX-Syntax856914 29841Node: VAX-Chars857080 29842Node: Visium-Dependent857634 29843Node: Visium Options857947 29844Node: Visium Syntax858413 29845Node: Visium Characters858658 29846Node: Visium Registers859239 29847Node: Visium Opcodes859511 29848Node: WebAssembly-Dependent859937 29849Node: WebAssembly-Notes860378 29850Node: WebAssembly-Syntax860664 29851Node: WebAssembly-Chars861230 29852Node: WebAssembly-Relocs861609 29853Node: WebAssembly-Signatures862335 29854Node: WebAssembly-Floating-Point862836 29855Node: WebAssembly-Opcodes863077 29856Node: WebAssembly-module-layout863710 29857Node: XGATE-Dependent864189 29858Node: XGATE-Opts864616 29859Node: XGATE-Syntax865605 29860Node: XGATE-Directives867684 29861Node: XGATE-Float867923 29862Node: XGATE-opcodes868420 29863Node: XSTORMY16-Dependent868532 29864Node: XStormy16 Syntax868878 29865Node: XStormy16-Chars869068 29866Node: XStormy16 Directives869681 29867Node: XStormy16 Opcodes870335 29868Node: Xtensa-Dependent871390 29869Node: Xtensa Options872121 29870Node: Xtensa Syntax876694 29871Node: Xtensa Opcodes878838 29872Node: Xtensa Registers880631 29873Node: Xtensa Optimizations881264 29874Node: Density Instructions881716 29875Node: Xtensa Automatic Alignment882818 29876Node: Xtensa Relaxation885265 29877Node: Xtensa Branch Relaxation886230 29878Node: Xtensa Call Relaxation887602 29879Node: Xtensa Jump Relaxation889383 29880Node: Xtensa Immediate Relaxation891483 29881Node: Xtensa Directives894058 29882Node: Schedule Directive895766 29883Node: Longcalls Directive896106 29884Node: Transform Directive896650 29885Node: Literal Directive897392 29886Ref: Literal Directive-Footnote-1900931 29887Node: Literal Position Directive901073 29888Node: Literal Prefix Directive902772 29889Node: Absolute Literals Directive903670 29890Node: Z80-Dependent904977 29891Node: Z80 Options905365 29892Node: Z80 Syntax907864 29893Node: Z80-Chars908572 29894Node: Z80-Regs909423 29895Node: Z80-Case909775 29896Node: Z80-Labels910239 29897Node: Z80 Floating Point910735 29898Node: Z80 Directives911204 29899Node: Z80 Opcodes913636 29900Node: Z8000-Dependent915262 29901Node: Z8000 Options916198 29902Node: Z8000 Syntax916415 29903Node: Z8000-Chars916705 29904Node: Z8000-Regs917187 29905Node: Z8000-Addressing917977 29906Node: Z8000 Directives919087 29907Node: Z8000 Opcodes920691 29908Node: Reporting Bugs930633 29909Node: Bug Criteria931359 29910Node: Bug Reporting932126 29911Node: Acknowledgements938759 29912Ref: Acknowledgements-Footnote-1943725 29913Node: GNU Free Documentation License943751 29914Node: AS Index968900 29915 29916End Tag Table 29917