Home | History | Annotate | Download | only in info
      1 This is as.info, produced by makeinfo version 4.8 from as.texinfo.
      2 
      3 INFO-DIR-SECTION Software development
      4 START-INFO-DIR-ENTRY
      5 * As: (as).                     The GNU assembler.
      6 * Gas: (as).                    The GNU assembler.
      7 END-INFO-DIR-ENTRY
      8 
      9    This file documents the GNU Assembler "as".
     10 
     11    Copyright (C) 1991-2014 Free Software Foundation, Inc.
     12 
     13    Permission is granted to copy, distribute and/or modify this document
     14 under the terms of the GNU Free Documentation License, Version 1.3 or
     15 any later version published by the Free Software Foundation; with no
     16 Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
     17 Texts.  A copy of the license is included in the section entitled "GNU
     18 Free Documentation License".
     19 
     20 
     21 File: as.info,  Node: Top,  Next: Overview,  Up: (dir)
     22 
     23 Using as
     24 ********
     25 
     26 This file is a user guide to the GNU assembler `as' (GNU Binutils)
     27 version 2.25.
     28 
     29    This document is distributed under the terms of the GNU Free
     30 Documentation License.  A copy of the license is included in the
     31 section entitled "GNU Free Documentation License".
     32 
     33 * Menu:
     34 
     35 * Overview::                    Overview
     36 * Invoking::                    Command-Line Options
     37 * Syntax::                      Syntax
     38 * Sections::                    Sections and Relocation
     39 * Symbols::                     Symbols
     40 * Expressions::                 Expressions
     41 * Pseudo Ops::                  Assembler Directives
     42 
     43 * Object Attributes::           Object Attributes
     44 * Machine Dependencies::        Machine Dependent Features
     45 * Reporting Bugs::              Reporting Bugs
     46 * Acknowledgements::            Who Did What
     47 * GNU Free Documentation License::  GNU Free Documentation License
     48 * AS Index::                    AS Index
     49 
     50 
     51 File: as.info,  Node: Overview,  Next: Invoking,  Prev: Top,  Up: Top
     52 
     53 1 Overview
     54 **********
     55 
     56 Here is a brief summary of how to invoke `as'.  For details, see *Note
     57 Command-Line Options: Invoking.
     58 
     59      as [-a[cdghlns][=FILE]] [-alternate] [-D]
     60       [-compress-debug-sections]  [-nocompress-debug-sections]
     61       [-debug-prefix-map OLD=NEW]
     62       [-defsym SYM=VAL] [-f] [-g] [-gstabs]
     63       [-gstabs+] [-gdwarf-2] [-gdwarf-sections]
     64       [-help] [-I DIR] [-J]
     65       [-K] [-L] [-listing-lhs-width=NUM]
     66       [-listing-lhs-width2=NUM] [-listing-rhs-width=NUM]
     67       [-listing-cont-lines=NUM] [-keep-locals] [-o
     68       OBJFILE] [-R] [-reduce-memory-overheads] [-statistics]
     69       [-v] [-version] [-version] [-W] [-warn]
     70       [-fatal-warnings] [-w] [-x] [-Z] [@FILE]
     71       [-size-check=[error|warning]]
     72       [-target-help] [TARGET-OPTIONS]
     73       [-|FILES ...]
     74 
     75      _Target AArch64 options:_
     76         [-EB|-EL]
     77         [-mabi=ABI]
     78 
     79      _Target Alpha options:_
     80         [-mCPU]
     81         [-mdebug | -no-mdebug]
     82         [-replace | -noreplace]
     83         [-relax] [-g] [-GSIZE]
     84         [-F] [-32addr]
     85 
     86      _Target ARC options:_
     87         [-marc[5|6|7|8]]
     88         [-EB|-EL]
     89 
     90      _Target ARM options:_
     91         [-mcpu=PROCESSOR[+EXTENSION...]]
     92         [-march=ARCHITECTURE[+EXTENSION...]]
     93         [-mfpu=FLOATING-POINT-FORMAT]
     94         [-mfloat-abi=ABI]
     95         [-meabi=VER]
     96         [-mthumb]
     97         [-EB|-EL]
     98         [-mapcs-32|-mapcs-26|-mapcs-float|
     99          -mapcs-reentrant]
    100         [-mthumb-interwork] [-k]
    101 
    102      _Target Blackfin options:_
    103         [-mcpu=PROCESSOR[-SIREVISION]]
    104         [-mfdpic]
    105         [-mno-fdpic]
    106         [-mnopic]
    107 
    108      _Target CRIS options:_
    109         [-underscore | -no-underscore]
    110         [-pic] [-N]
    111         [-emulation=criself | -emulation=crisaout]
    112         [-march=v0_v10 | -march=v10 | -march=v32 | -march=common_v10_v32]
    113 
    114      _Target D10V options:_
    115         [-O]
    116 
    117      _Target D30V options:_
    118         [-O|-n|-N]
    119 
    120      _Target EPIPHANY options:_
    121         [-mepiphany|-mepiphany16]
    122 
    123      _Target H8/300 options:_
    124         [-h-tick-hex]
    125 
    126      _Target i386 options:_
    127         [-32|-x32|-64] [-n]
    128         [-march=CPU[+EXTENSION...]] [-mtune=CPU]
    129 
    130      _Target i960 options:_
    131         [-ACA|-ACA_A|-ACB|-ACC|-AKA|-AKB|
    132          -AKC|-AMC]
    133         [-b] [-no-relax]
    134 
    135      _Target IA-64 options:_
    136         [-mconstant-gp|-mauto-pic]
    137         [-milp32|-milp64|-mlp64|-mp64]
    138         [-mle|mbe]
    139         [-mtune=itanium1|-mtune=itanium2]
    140         [-munwind-check=warning|-munwind-check=error]
    141         [-mhint.b=ok|-mhint.b=warning|-mhint.b=error]
    142         [-x|-xexplicit] [-xauto] [-xdebug]
    143 
    144      _Target IP2K options:_
    145         [-mip2022|-mip2022ext]
    146 
    147      _Target M32C options:_
    148         [-m32c|-m16c] [-relax] [-h-tick-hex]
    149 
    150      _Target M32R options:_
    151         [-m32rx|-[no-]warn-explicit-parallel-conflicts|
    152         -W[n]p]
    153 
    154      _Target M680X0 options:_
    155         [-l] [-m68000|-m68010|-m68020|...]
    156 
    157      _Target M68HC11 options:_
    158         [-m68hc11|-m68hc12|-m68hcs12|-mm9s12x|-mm9s12xg]
    159         [-mshort|-mlong]
    160         [-mshort-double|-mlong-double]
    161         [-force-long-branches] [-short-branches]
    162         [-strict-direct-mode] [-print-insn-syntax]
    163         [-print-opcodes] [-generate-example]
    164 
    165      _Target MCORE options:_
    166         [-jsri2bsr] [-sifilter] [-relax]
    167         [-mcpu=[210|340]]
    168 
    169      _Target Meta options:_
    170         [-mcpu=CPU] [-mfpu=CPU] [-mdsp=CPU]
    171      _Target MICROBLAZE options:_
    172 
    173      _Target MIPS options:_
    174         [-nocpp] [-EL] [-EB] [-O[OPTIMIZATION LEVEL]]
    175         [-g[DEBUG LEVEL]] [-G NUM] [-KPIC] [-call_shared]
    176         [-non_shared] [-xgot [-mvxworks-pic]
    177         [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32]
    178         [-mfp64] [-mgp64] [-mfpxx]
    179         [-modd-spreg] [-mno-odd-spreg]
    180         [-march=CPU] [-mtune=CPU] [-mips1] [-mips2]
    181         [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2]
    182         [-mips32r3] [-mips32r5] [-mips32r6] [-mips64] [-mips64r2]
    183         [-mips64r3] [-mips64r5] [-mips64r6]
    184         [-construct-floats] [-no-construct-floats]
    185         [-mnan=ENCODING]
    186         [-trap] [-no-break] [-break] [-no-trap]
    187         [-mips16] [-no-mips16]
    188         [-mmicromips] [-mno-micromips]
    189         [-msmartmips] [-mno-smartmips]
    190         [-mips3d] [-no-mips3d]
    191         [-mdmx] [-no-mdmx]
    192         [-mdsp] [-mno-dsp]
    193         [-mdspr2] [-mno-dspr2]
    194         [-mmsa] [-mno-msa]
    195         [-mxpa] [-mno-xpa]
    196         [-mmt] [-mno-mt]
    197         [-mmcu] [-mno-mcu]
    198         [-minsn32] [-mno-insn32]
    199         [-mfix7000] [-mno-fix7000]
    200         [-mfix-rm7000] [-mno-fix-rm7000]
    201         [-mfix-vr4120] [-mno-fix-vr4120]
    202         [-mfix-vr4130] [-mno-fix-vr4130]
    203         [-mdebug] [-no-mdebug]
    204         [-mpdr] [-mno-pdr]
    205 
    206      _Target MMIX options:_
    207         [-fixed-special-register-names] [-globalize-symbols]
    208         [-gnu-syntax] [-relax] [-no-predefined-symbols]
    209         [-no-expand] [-no-merge-gregs] [-x]
    210         [-linker-allocated-gregs]
    211 
    212      _Target Nios II options:_
    213         [-relax-all] [-relax-section] [-no-relax]
    214         [-EB] [-EL]
    215 
    216      _Target NDS32 options:_
    217          [-EL] [-EB] [-O] [-Os] [-mcpu=CPU]
    218          [-misa=ISA] [-mabi=ABI] [-mall-ext]
    219          [-m[no-]16-bit]  [-m[no-]perf-ext] [-m[no-]perf2-ext]
    220          [-m[no-]string-ext] [-m[no-]dsp-ext] [-m[no-]mac] [-m[no-]div]
    221          [-m[no-]audio-isa-ext] [-m[no-]fpu-sp-ext] [-m[no-]fpu-dp-ext]
    222          [-m[no-]fpu-fma] [-mfpu-freg=FREG] [-mreduced-regs]
    223          [-mfull-regs] [-m[no-]dx-regs] [-mpic] [-mno-relax]
    224          [-mb2bb]
    225 
    226      _Target PDP11 options:_
    227         [-mpic|-mno-pic] [-mall] [-mno-extensions]
    228         [-mEXTENSION|-mno-EXTENSION]
    229         [-mCPU] [-mMACHINE]
    230 
    231      _Target picoJava options:_
    232         [-mb|-me]
    233 
    234      _Target PowerPC options:_
    235         [-a32|-a64]
    236         [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604|-m403|-m405|
    237          -m440|-m464|-m476|-m7400|-m7410|-m7450|-m7455|-m750cl|-mppc64|
    238          -m620|-me500|-e500x2|-me500mc|-me500mc64|-me5500|-me6500|-mppc64bridge|
    239          -mbooke|-mpower4|-mpwr4|-mpower5|-mpwr5|-mpwr5x|-mpower6|-mpwr6|
    240          -mpower7|-mpwr7|-mpower8|-mpwr8|-ma2|-mcell|-mspe|-mtitan|-me300|-mcom]
    241         [-many] [-maltivec|-mvsx|-mhtm|-mvle]
    242         [-mregnames|-mno-regnames]
    243         [-mrelocatable|-mrelocatable-lib|-K PIC] [-memb]
    244         [-mlittle|-mlittle-endian|-le|-mbig|-mbig-endian|-be]
    245         [-msolaris|-mno-solaris]
    246         [-nops=COUNT]
    247 
    248      _Target RL78 options:_
    249         [-mg10]
    250         [-m32bit-doubles|-m64bit-doubles]
    251 
    252      _Target RX options:_
    253         [-mlittle-endian|-mbig-endian]
    254         [-m32bit-doubles|-m64bit-doubles]
    255         [-muse-conventional-section-names]
    256         [-msmall-data-limit]
    257         [-mpid]
    258         [-mrelax]
    259         [-mint-register=NUMBER]
    260         [-mgcc-abi|-mrx-abi]
    261 
    262      _Target s390 options:_
    263         [-m31|-m64] [-mesa|-mzarch] [-march=CPU]
    264         [-mregnames|-mno-regnames]
    265         [-mwarn-areg-zero]
    266 
    267      _Target SCORE options:_
    268         [-EB][-EL][-FIXDD][-NWARN]
    269         [-SCORE5][-SCORE5U][-SCORE7][-SCORE3]
    270         [-march=score7][-march=score3]
    271         [-USE_R1][-KPIC][-O0][-G NUM][-V]
    272 
    273      _Target SPARC options:_
    274         [-Av6|-Av7|-Av8|-Asparclet|-Asparclite
    275          -Av8plus|-Av8plusa|-Av9|-Av9a]
    276         [-xarch=v8plus|-xarch=v8plusa] [-bump]
    277         [-32|-64]
    278 
    279      _Target TIC54X options:_
    280       [-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf]
    281       [-merrors-to-file <FILENAME>|-me <FILENAME>]
    282 
    283 
    284      _Target TIC6X options:_
    285         [-march=ARCH] [-mbig-endian|-mlittle-endian]
    286         [-mdsbt|-mno-dsbt] [-mpid=no|-mpid=near|-mpid=far]
    287         [-mpic|-mno-pic]
    288 
    289      _Target TILE-Gx options:_
    290         [-m32|-m64][-EB][-EL]
    291 
    292 
    293      _Target Xtensa options:_
    294       [-[no-]text-section-literals] [-[no-]absolute-literals]
    295       [-[no-]target-align] [-[no-]longcalls]
    296       [-[no-]transform]
    297       [-rename-section OLDNAME=NEWNAME]
    298       [-[no-]trampolines]
    299 
    300 
    301      _Target Z80 options:_
    302        [-z80] [-r800]
    303        [ -ignore-undocumented-instructions] [-Wnud]
    304        [ -ignore-unportable-instructions] [-Wnup]
    305        [ -warn-undocumented-instructions] [-Wud]
    306        [ -warn-unportable-instructions] [-Wup]
    307        [ -forbid-undocumented-instructions] [-Fud]
    308        [ -forbid-unportable-instructions] [-Fup]
    309 
    310 `@FILE'
    311      Read command-line options from FILE.  The options read are
    312      inserted in place of the original @FILE option.  If FILE does not
    313      exist, or cannot be read, then the option will be treated
    314      literally, and not removed.
    315 
    316      Options in FILE are separated by whitespace.  A whitespace
    317      character may be included in an option by surrounding the entire
    318      option in either single or double quotes.  Any character
    319      (including a backslash) may be included by prefixing the character
    320      to be included with a backslash.  The FILE may itself contain
    321      additional @FILE options; any such options will be processed
    322      recursively.
    323 
    324 `-a[cdghlmns]'
    325      Turn on listings, in any of a variety of ways:
    326 
    327     `-ac'
    328           omit false conditionals
    329 
    330     `-ad'
    331           omit debugging directives
    332 
    333     `-ag'
    334           include general information, like as version and options
    335           passed
    336 
    337     `-ah'
    338           include high-level source
    339 
    340     `-al'
    341           include assembly
    342 
    343     `-am'
    344           include macro expansions
    345 
    346     `-an'
    347           omit forms processing
    348 
    349     `-as'
    350           include symbols
    351 
    352     `=file'
    353           set the name of the listing file
    354 
    355      You may combine these options; for example, use `-aln' for assembly
    356      listing without forms processing.  The `=file' option, if used,
    357      must be the last one.  By itself, `-a' defaults to `-ahls'.
    358 
    359 `--alternate'
    360      Begin in alternate macro mode.  *Note `.altmacro': Altmacro.
    361 
    362 `--compress-debug-sections'
    363      Compress DWARF debug sections using zlib.  The debug sections are
    364      renamed to begin with `.zdebug', and the resulting object file may
    365      not be compatible with older linkers and object file utilities.
    366 
    367 `--nocompress-debug-sections'
    368      Do not compress DWARF debug sections.  This is the default.
    369 
    370 `-D'
    371      Ignored.  This option is accepted for script compatibility with
    372      calls to other assemblers.
    373 
    374 `--debug-prefix-map OLD=NEW'
    375      When assembling files in directory `OLD', record debugging
    376      information describing them as in `NEW' instead.
    377 
    378 `--defsym SYM=VALUE'
    379      Define the symbol SYM to be VALUE before assembling the input file.
    380      VALUE must be an integer constant.  As in C, a leading `0x'
    381      indicates a hexadecimal value, and a leading `0' indicates an octal
    382      value.  The value of the symbol can be overridden inside a source
    383      file via the use of a `.set' pseudo-op.
    384 
    385 `-f'
    386      "fast"--skip whitespace and comment preprocessing (assume source is
    387      compiler output).
    388 
    389 `-g'
    390 `--gen-debug'
    391      Generate debugging information for each assembler source line
    392      using whichever debug format is preferred by the target.  This
    393      currently means either STABS, ECOFF or DWARF2.
    394 
    395 `--gstabs'
    396      Generate stabs debugging information for each assembler line.  This
    397      may help debugging assembler code, if the debugger can handle it.
    398 
    399 `--gstabs+'
    400      Generate stabs debugging information for each assembler line, with
    401      GNU extensions that probably only gdb can handle, and that could
    402      make other debuggers crash or refuse to read your program.  This
    403      may help debugging assembler code.  Currently the only GNU
    404      extension is the location of the current working directory at
    405      assembling time.
    406 
    407 `--gdwarf-2'
    408      Generate DWARF2 debugging information for each assembler line.
    409      This may help debugging assembler code, if the debugger can handle
    410      it.  Note--this option is only supported by some targets, not all
    411      of them.
    412 
    413 `--gdwarf-sections'
    414      Instead of creating a .debug_line section, create a series of
    415      .debug_line.FOO sections where FOO is the name of the
    416      corresponding code section.  For example a code section called
    417      .TEXT.FUNC will have its dwarf line number information placed into
    418      a section called .DEBUG_LINE.TEXT.FUNC.  If the code section is
    419      just called .TEXT then debug line section will still be called
    420      just .DEBUG_LINE without any suffix.
    421 
    422 `--size-check=error'
    423 `--size-check=warning'
    424      Issue an error or warning for invalid ELF .size directive.
    425 
    426 `--help'
    427      Print a summary of the command line options and exit.
    428 
    429 `--target-help'
    430      Print a summary of all target specific options and exit.
    431 
    432 `-I DIR'
    433      Add directory DIR to the search list for `.include' directives.
    434 
    435 `-J'
    436      Don't warn about signed overflow.
    437 
    438 `-K'
    439      Issue warnings when difference tables altered for long
    440      displacements.
    441 
    442 `-L'
    443 `--keep-locals'
    444      Keep (in the symbol table) local symbols.  These symbols start with
    445      system-specific local label prefixes, typically `.L' for ELF
    446      systems or `L' for traditional a.out systems.  *Note Symbol
    447      Names::.
    448 
    449 `--listing-lhs-width=NUMBER'
    450      Set the maximum width, in words, of the output data column for an
    451      assembler listing to NUMBER.
    452 
    453 `--listing-lhs-width2=NUMBER'
    454      Set the maximum width, in words, of the output data column for
    455      continuation lines in an assembler listing to NUMBER.
    456 
    457 `--listing-rhs-width=NUMBER'
    458      Set the maximum width of an input source line, as displayed in a
    459      listing, to NUMBER bytes.
    460 
    461 `--listing-cont-lines=NUMBER'
    462      Set the maximum number of lines printed in a listing for a single
    463      line of input to NUMBER + 1.
    464 
    465 `-o OBJFILE'
    466      Name the object-file output from `as' OBJFILE.
    467 
    468 `-R'
    469      Fold the data section into the text section.
    470 
    471      Set the default size of GAS's hash tables to a prime number close
    472      to NUMBER.  Increasing this value can reduce the length of time it
    473      takes the assembler to perform its tasks, at the expense of
    474      increasing the assembler's memory requirements.  Similarly
    475      reducing this value can reduce the memory requirements at the
    476      expense of speed.
    477 
    478 `--reduce-memory-overheads'
    479      This option reduces GAS's memory requirements, at the expense of
    480      making the assembly processes slower.  Currently this switch is a
    481      synonym for `--hash-size=4051', but in the future it may have
    482      other effects as well.
    483 
    484 `--statistics'
    485      Print the maximum space (in bytes) and total time (in seconds)
    486      used by assembly.
    487 
    488 `--strip-local-absolute'
    489      Remove local absolute symbols from the outgoing symbol table.
    490 
    491 `-v'
    492 `-version'
    493      Print the `as' version.
    494 
    495 `--version'
    496      Print the `as' version and exit.
    497 
    498 `-W'
    499 `--no-warn'
    500      Suppress warning messages.
    501 
    502 `--fatal-warnings'
    503      Treat warnings as errors.
    504 
    505 `--warn'
    506      Don't suppress warning messages or treat them as errors.
    507 
    508 `-w'
    509      Ignored.
    510 
    511 `-x'
    512      Ignored.
    513 
    514 `-Z'
    515      Generate an object file even after errors.
    516 
    517 `-- | FILES ...'
    518      Standard input, or source files to assemble.
    519 
    520 
    521    *Note AArch64 Options::, for the options available when as is
    522 configured for the 64-bit mode of the ARM Architecture (AArch64).
    523 
    524    *Note Alpha Options::, for the options available when as is
    525 configured for an Alpha processor.
    526 
    527    The following options are available when as is configured for an ARC
    528 processor.
    529 
    530 `-marc[5|6|7|8]'
    531      This option selects the core processor variant.
    532 
    533 `-EB | -EL'
    534      Select either big-endian (-EB) or little-endian (-EL) output.
    535 
    536    The following options are available when as is configured for the ARM
    537 processor family.
    538 
    539 `-mcpu=PROCESSOR[+EXTENSION...]'
    540      Specify which ARM processor variant is the target.
    541 
    542 `-march=ARCHITECTURE[+EXTENSION...]'
    543      Specify which ARM architecture variant is used by the target.
    544 
    545 `-mfpu=FLOATING-POINT-FORMAT'
    546      Select which Floating Point architecture is the target.
    547 
    548 `-mfloat-abi=ABI'
    549      Select which floating point ABI is in use.
    550 
    551 `-mthumb'
    552      Enable Thumb only instruction decoding.
    553 
    554 `-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant'
    555      Select which procedure calling convention is in use.
    556 
    557 `-EB | -EL'
    558      Select either big-endian (-EB) or little-endian (-EL) output.
    559 
    560 `-mthumb-interwork'
    561      Specify that the code has been generated with interworking between
    562      Thumb and ARM code in mind.
    563 
    564 `-mccs'
    565      Turns on CodeComposer Studio assembly syntax compatibility mode.
    566 
    567 `-k'
    568      Specify that PIC code has been generated.
    569 
    570    *Note Blackfin Options::, for the options available when as is
    571 configured for the Blackfin processor family.
    572 
    573    See the info pages for documentation of the CRIS-specific options.
    574 
    575    The following options are available when as is configured for a D10V
    576 processor.
    577 `-O'
    578      Optimize output by parallelizing instructions.
    579 
    580    The following options are available when as is configured for a D30V
    581 processor.
    582 `-O'
    583      Optimize output by parallelizing instructions.
    584 
    585 `-n'
    586      Warn when nops are generated.
    587 
    588 `-N'
    589      Warn when a nop after a 32-bit multiply instruction is generated.
    590 
    591    The following options are available when as is configured for the
    592 Adapteva EPIPHANY series.
    593 
    594    *Note Epiphany Options::, for the options available when as is
    595 configured for an Epiphany processor.
    596 
    597    *Note i386-Options::, for the options available when as is
    598 configured for an i386 processor.
    599 
    600    The following options are available when as is configured for the
    601 Intel 80960 processor.
    602 
    603 `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
    604      Specify which variant of the 960 architecture is the target.
    605 
    606 `-b'
    607      Add code to collect statistics about branches taken.
    608 
    609 `-no-relax'
    610      Do not alter compare-and-branch instructions for long
    611      displacements; error if necessary.
    612 
    613 
    614    The following options are available when as is configured for the
    615 Ubicom IP2K series.
    616 
    617 `-mip2022ext'
    618      Specifies that the extended IP2022 instructions are allowed.
    619 
    620 `-mip2022'
    621      Restores the default behaviour, which restricts the permitted
    622      instructions to just the basic IP2022 ones.
    623 
    624 
    625    The following options are available when as is configured for the
    626 Renesas M32C and M16C processors.
    627 
    628 `-m32c'
    629      Assemble M32C instructions.
    630 
    631 `-m16c'
    632      Assemble M16C instructions (the default).
    633 
    634 `-relax'
    635      Enable support for link-time relaxations.
    636 
    637 `-h-tick-hex'
    638      Support H'00 style hex constants in addition to 0x00 style.
    639 
    640 
    641    The following options are available when as is configured for the
    642 Renesas M32R (formerly Mitsubishi M32R) series.
    643 
    644 `--m32rx'
    645      Specify which processor in the M32R family is the target.  The
    646      default is normally the M32R, but this option changes it to the
    647      M32RX.
    648 
    649 `--warn-explicit-parallel-conflicts or --Wp'
    650      Produce warning messages when questionable parallel constructs are
    651      encountered.
    652 
    653 `--no-warn-explicit-parallel-conflicts or --Wnp'
    654      Do not produce warning messages when questionable parallel
    655      constructs are encountered.
    656 
    657 
    658    The following options are available when as is configured for the
    659 Motorola 68000 series.
    660 
    661 `-l'
    662      Shorten references to undefined symbols, to one word instead of
    663      two.
    664 
    665 `-m68000 | -m68008 | -m68010 | -m68020 | -m68030'
    666 `| -m68040 | -m68060 | -m68302 | -m68331 | -m68332'
    667 `| -m68333 | -m68340 | -mcpu32 | -m5200'
    668      Specify what processor in the 68000 family is the target.  The
    669      default is normally the 68020, but this can be changed at
    670      configuration time.
    671 
    672 `-m68881 | -m68882 | -mno-68881 | -mno-68882'
    673      The target machine does (or does not) have a floating-point
    674      coprocessor.  The default is to assume a coprocessor for 68020,
    675      68030, and cpu32.  Although the basic 68000 is not compatible with
    676      the 68881, a combination of the two can be specified, since it's
    677      possible to do emulation of the coprocessor instructions with the
    678      main processor.
    679 
    680 `-m68851 | -mno-68851'
    681      The target machine does (or does not) have a memory-management
    682      unit coprocessor.  The default is to assume an MMU for 68020 and
    683      up.
    684 
    685 
    686    *Note Nios II Options::, for the options available when as is
    687 configured for an Altera Nios II processor.
    688 
    689    For details about the PDP-11 machine dependent features options, see
    690 *Note PDP-11-Options::.
    691 
    692 `-mpic | -mno-pic'
    693      Generate position-independent (or position-dependent) code.  The
    694      default is `-mpic'.
    695 
    696 `-mall'
    697 `-mall-extensions'
    698      Enable all instruction set extensions.  This is the default.
    699 
    700 `-mno-extensions'
    701      Disable all instruction set extensions.
    702 
    703 `-mEXTENSION | -mno-EXTENSION'
    704      Enable (or disable) a particular instruction set extension.
    705 
    706 `-mCPU'
    707      Enable the instruction set extensions supported by a particular
    708      CPU, and disable all other extensions.
    709 
    710 `-mMACHINE'
    711      Enable the instruction set extensions supported by a particular
    712      machine model, and disable all other extensions.
    713 
    714    The following options are available when as is configured for a
    715 picoJava processor.
    716 
    717 `-mb'
    718      Generate "big endian" format output.
    719 
    720 `-ml'
    721      Generate "little endian" format output.
    722 
    723 
    724    The following options are available when as is configured for the
    725 Motorola 68HC11 or 68HC12 series.
    726 
    727 `-m68hc11 | -m68hc12 | -m68hcs12 | -mm9s12x | -mm9s12xg'
    728      Specify what processor is the target.  The default is defined by
    729      the configuration option when building the assembler.
    730 
    731 `--xgate-ramoffset'
    732      Instruct the linker to offset RAM addresses from S12X address
    733      space into XGATE address space.
    734 
    735 `-mshort'
    736      Specify to use the 16-bit integer ABI.
    737 
    738 `-mlong'
    739      Specify to use the 32-bit integer ABI.
    740 
    741 `-mshort-double'
    742      Specify to use the 32-bit double ABI.
    743 
    744 `-mlong-double'
    745      Specify to use the 64-bit double ABI.
    746 
    747 `--force-long-branches'
    748      Relative branches are turned into absolute ones. This concerns
    749      conditional branches, unconditional branches and branches to a sub
    750      routine.
    751 
    752 `-S | --short-branches'
    753      Do not turn relative branches into absolute ones when the offset
    754      is out of range.
    755 
    756 `--strict-direct-mode'
    757      Do not turn the direct addressing mode into extended addressing
    758      mode when the instruction does not support direct addressing mode.
    759 
    760 `--print-insn-syntax'
    761      Print the syntax of instruction in case of error.
    762 
    763 `--print-opcodes'
    764      Print the list of instructions with syntax and then exit.
    765 
    766 `--generate-example'
    767      Print an example of instruction for each possible instruction and
    768      then exit.  This option is only useful for testing `as'.
    769 
    770 
    771    The following options are available when `as' is configured for the
    772 SPARC architecture:
    773 
    774 `-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite'
    775 `-Av8plus | -Av8plusa | -Av9 | -Av9a'
    776      Explicitly select a variant of the SPARC architecture.
    777 
    778      `-Av8plus' and `-Av8plusa' select a 32 bit environment.  `-Av9'
    779      and `-Av9a' select a 64 bit environment.
    780 
    781      `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with
    782      UltraSPARC extensions.
    783 
    784 `-xarch=v8plus | -xarch=v8plusa'
    785      For compatibility with the Solaris v9 assembler.  These options are
    786      equivalent to -Av8plus and -Av8plusa, respectively.
    787 
    788 `-bump'
    789      Warn when the assembler switches to another architecture.
    790 
    791    The following options are available when as is configured for the
    792 'c54x architecture.
    793 
    794 `-mfar-mode'
    795      Enable extended addressing mode.  All addresses and relocations
    796      will assume extended addressing (usually 23 bits).
    797 
    798 `-mcpu=CPU_VERSION'
    799      Sets the CPU version being compiled for.
    800 
    801 `-merrors-to-file FILENAME'
    802      Redirect error output to a file, for broken systems which don't
    803      support such behaviour in the shell.
    804 
    805    The following options are available when as is configured for a MIPS
    806 processor.
    807 
    808 `-G NUM'
    809      This option sets the largest size of an object that can be
    810      referenced implicitly with the `gp' register.  It is only accepted
    811      for targets that use ECOFF format, such as a DECstation running
    812      Ultrix.  The default value is 8.
    813 
    814 `-EB'
    815      Generate "big endian" format output.
    816 
    817 `-EL'
    818      Generate "little endian" format output.
    819 
    820 `-mips1'
    821 `-mips2'
    822 `-mips3'
    823 `-mips4'
    824 `-mips5'
    825 `-mips32'
    826 `-mips32r2'
    827 `-mips32r3'
    828 `-mips32r5'
    829 `-mips32r6'
    830 `-mips64'
    831 `-mips64r2'
    832 `-mips64r3'
    833 `-mips64r5'
    834 `-mips64r6'
    835      Generate code for a particular MIPS Instruction Set Architecture
    836      level.  `-mips1' is an alias for `-march=r3000', `-mips2' is an
    837      alias for `-march=r6000', `-mips3' is an alias for `-march=r4000'
    838      and `-mips4' is an alias for `-march=r8000'.  `-mips5', `-mips32',
    839      `-mips32r2', `-mips32r3', `-mips32r5', `-mips32r6', `-mips64',
    840      `-mips64r2', `-mips64r3', `-mips64r5', and `-mips64r6' correspond
    841      to generic MIPS V, MIPS32, MIPS32 Release 2, MIPS32 Release 3,
    842      MIPS32 Release 5, MIPS32 Release 6, MIPS64, MIPS64 Release 2,
    843      MIPS64 Release 3, MIPS64 Release 5, and MIPS64 Release 6 ISA
    844      processors, respectively.
    845 
    846 `-march=CPU'
    847      Generate code for a particular MIPS CPU.
    848 
    849 `-mtune=CPU'
    850      Schedule and tune for a particular MIPS CPU.
    851 
    852 `-mfix7000'
    853 `-mno-fix7000'
    854      Cause nops to be inserted if the read of the destination register
    855      of an mfhi or mflo instruction occurs in the following two
    856      instructions.
    857 
    858 `-mfix-rm7000'
    859 `-mno-fix-rm7000'
    860      Cause nops to be inserted if a dmult or dmultu instruction is
    861      followed by a load instruction.
    862 
    863 `-mdebug'
    864 `-no-mdebug'
    865      Cause stabs-style debugging output to go into an ECOFF-style
    866      .mdebug section instead of the standard ELF .stabs sections.
    867 
    868 `-mpdr'
    869 `-mno-pdr'
    870      Control generation of `.pdr' sections.
    871 
    872 `-mgp32'
    873 `-mfp32'
    874      The register sizes are normally inferred from the ISA and ABI, but
    875      these flags force a certain group of registers to be treated as 32
    876      bits wide at all times.  `-mgp32' controls the size of
    877      general-purpose registers and `-mfp32' controls the size of
    878      floating-point registers.
    879 
    880 `-mgp64'
    881 `-mfp64'
    882      The register sizes are normally inferred from the ISA and ABI, but
    883      these flags force a certain group of registers to be treated as 64
    884      bits wide at all times.  `-mgp64' controls the size of
    885      general-purpose registers and `-mfp64' controls the size of
    886      floating-point registers.
    887 
    888 `-mfpxx'
    889      The register sizes are normally inferred from the ISA and ABI, but
    890      using this flag in combination with `-mabi=32' enables an ABI
    891      variant which will operate correctly with floating-point registers
    892      which are 32 or 64 bits wide.
    893 
    894 `-modd-spreg'
    895 `-mno-odd-spreg'
    896      Enable use of floating-point operations on odd-numbered
    897      single-precision registers when supported by the ISA.  `-mfpxx'
    898      implies `-mno-odd-spreg', otherwise the default is `-modd-spreg'.
    899 
    900 `-mips16'
    901 `-no-mips16'
    902      Generate code for the MIPS 16 processor.  This is equivalent to
    903      putting `.set mips16' at the start of the assembly file.
    904      `-no-mips16' turns off this option.
    905 
    906 `-mmicromips'
    907 `-mno-micromips'
    908      Generate code for the microMIPS processor.  This is equivalent to
    909      putting `.set micromips' at the start of the assembly file.
    910      `-mno-micromips' turns off this option.  This is equivalent to
    911      putting `.set nomicromips' at the start of the assembly file.
    912 
    913 `-msmartmips'
    914 `-mno-smartmips'
    915      Enables the SmartMIPS extension to the MIPS32 instruction set.
    916      This is equivalent to putting `.set smartmips' at the start of the
    917      assembly file.  `-mno-smartmips' turns off this option.
    918 
    919 `-mips3d'
    920 `-no-mips3d'
    921      Generate code for the MIPS-3D Application Specific Extension.
    922      This tells the assembler to accept MIPS-3D instructions.
    923      `-no-mips3d' turns off this option.
    924 
    925 `-mdmx'
    926 `-no-mdmx'
    927      Generate code for the MDMX Application Specific Extension.  This
    928      tells the assembler to accept MDMX instructions.  `-no-mdmx' turns
    929      off this option.
    930 
    931 `-mdsp'
    932 `-mno-dsp'
    933      Generate code for the DSP Release 1 Application Specific Extension.
    934      This tells the assembler to accept DSP Release 1 instructions.
    935      `-mno-dsp' turns off this option.
    936 
    937 `-mdspr2'
    938 `-mno-dspr2'
    939      Generate code for the DSP Release 2 Application Specific Extension.
    940      This option implies -mdsp.  This tells the assembler to accept DSP
    941      Release 2 instructions.  `-mno-dspr2' turns off this option.
    942 
    943 `-mmsa'
    944 `-mno-msa'
    945      Generate code for the MIPS SIMD Architecture Extension.  This
    946      tells the assembler to accept MSA instructions.  `-mno-msa' turns
    947      off this option.
    948 
    949 `-mxpa'
    950 `-mno-xpa'
    951      Generate code for the MIPS eXtended Physical Address (XPA)
    952      Extension.  This tells the assembler to accept XPA instructions.
    953      `-mno-xpa' turns off this option.
    954 
    955 `-mmt'
    956 `-mno-mt'
    957      Generate code for the MT Application Specific Extension.  This
    958      tells the assembler to accept MT instructions.  `-mno-mt' turns
    959      off this option.
    960 
    961 `-mmcu'
    962 `-mno-mcu'
    963      Generate code for the MCU Application Specific Extension.  This
    964      tells the assembler to accept MCU instructions.  `-mno-mcu' turns
    965      off this option.
    966 
    967 `-minsn32'
    968 `-mno-insn32'
    969      Only use 32-bit instruction encodings when generating code for the
    970      microMIPS processor.  This option inhibits the use of any 16-bit
    971      instructions.  This is equivalent to putting `.set insn32' at the
    972      start of the assembly file.  `-mno-insn32' turns off this option.
    973      This is equivalent to putting `.set noinsn32' at the start of the
    974      assembly file.  By default `-mno-insn32' is selected, allowing all
    975      instructions to be used.
    976 
    977 `--construct-floats'
    978 `--no-construct-floats'
    979      The `--no-construct-floats' option disables the construction of
    980      double width floating point constants by loading the two halves of
    981      the value into the two single width floating point registers that
    982      make up the double width register.  By default
    983      `--construct-floats' is selected, allowing construction of these
    984      floating point constants.
    985 
    986 `--relax-branch'
    987 `--no-relax-branch'
    988      The `--relax-branch' option enables the relaxation of out-of-range
    989      branches.  By default `--no-relax-branch' is selected, causing any
    990      out-of-range branches to produce an error.
    991 
    992 `-mnan=ENCODING'
    993      Select between the IEEE 754-2008 (`-mnan=2008') or the legacy
    994      (`-mnan=legacy') NaN encoding format.  The latter is the default.
    995 
    996 `--emulation=NAME'
    997      This option was formerly used to switch between ELF and ECOFF
    998      output on targets like IRIX 5 that supported both.  MIPS ECOFF
    999      support was removed in GAS 2.24, so the option now serves little
   1000      purpose.  It is retained for backwards compatibility.
   1001 
   1002      The available configuration names are: `mipself', `mipslelf' and
   1003      `mipsbelf'.  Choosing `mipself' now has no effect, since the output
   1004      is always ELF.  `mipslelf' and `mipsbelf' select little- and
   1005      big-endian output respectively, but `-EL' and `-EB' are now the
   1006      preferred options instead.
   1007 
   1008 `-nocpp'
   1009      `as' ignores this option.  It is accepted for compatibility with
   1010      the native tools.
   1011 
   1012 `--trap'
   1013 `--no-trap'
   1014 `--break'
   1015 `--no-break'
   1016      Control how to deal with multiplication overflow and division by
   1017      zero.  `--trap' or `--no-break' (which are synonyms) take a trap
   1018      exception (and only work for Instruction Set Architecture level 2
   1019      and higher); `--break' or `--no-trap' (also synonyms, and the
   1020      default) take a break exception.
   1021 
   1022 `-n'
   1023      When this option is used, `as' will issue a warning every time it
   1024      generates a nop instruction from a macro.
   1025 
   1026    The following options are available when as is configured for an
   1027 MCore processor.
   1028 
   1029 `-jsri2bsr'
   1030 `-nojsri2bsr'
   1031      Enable or disable the JSRI to BSR transformation.  By default this
   1032      is enabled.  The command line option `-nojsri2bsr' can be used to
   1033      disable it.
   1034 
   1035 `-sifilter'
   1036 `-nosifilter'
   1037      Enable or disable the silicon filter behaviour.  By default this
   1038      is disabled.  The default can be overridden by the `-sifilter'
   1039      command line option.
   1040 
   1041 `-relax'
   1042      Alter jump instructions for long displacements.
   1043 
   1044 `-mcpu=[210|340]'
   1045      Select the cpu type on the target hardware.  This controls which
   1046      instructions can be assembled.
   1047 
   1048 `-EB'
   1049      Assemble for a big endian target.
   1050 
   1051 `-EL'
   1052      Assemble for a little endian target.
   1053 
   1054 
   1055    *Note Meta Options::, for the options available when as is configured
   1056 for a Meta processor.
   1057 
   1058    See the info pages for documentation of the MMIX-specific options.
   1059 
   1060    *Note NDS32 Options::, for the options available when as is
   1061 configured for a NDS32 processor.
   1062 
   1063    *Note PowerPC-Opts::, for the options available when as is configured
   1064 for a PowerPC processor.
   1065 
   1066    See the info pages for documentation of the RX-specific options.
   1067 
   1068    The following options are available when as is configured for the
   1069 s390 processor family.
   1070 
   1071 `-m31'
   1072 `-m64'
   1073      Select the word size, either 31/32 bits or 64 bits.
   1074 
   1075 `-mesa'
   1076 
   1077 `-mzarch'
   1078      Select the architecture mode, either the Enterprise System
   1079      Architecture (esa) or the z/Architecture mode (zarch).
   1080 
   1081 `-march=PROCESSOR'
   1082      Specify which s390 processor variant is the target, `g6', `g6',
   1083      `z900', `z990', `z9-109', `z9-ec', `z10', `z196', or `zEC12'.
   1084 
   1085 `-mregnames'
   1086 `-mno-regnames'
   1087      Allow or disallow symbolic names for registers.
   1088 
   1089 `-mwarn-areg-zero'
   1090      Warn whenever the operand for a base or index register has been
   1091      specified but evaluates to zero.
   1092 
   1093    *Note TIC6X Options::, for the options available when as is
   1094 configured for a TMS320C6000 processor.
   1095 
   1096    *Note TILE-Gx Options::, for the options available when as is
   1097 configured for a TILE-Gx processor.
   1098 
   1099    *Note Xtensa Options::, for the options available when as is
   1100 configured for an Xtensa processor.
   1101 
   1102    The following options are available when as is configured for a Z80
   1103 family processor.
   1104 `-z80'
   1105      Assemble for Z80 processor.
   1106 
   1107 `-r800'
   1108      Assemble for R800 processor.
   1109 
   1110 `-ignore-undocumented-instructions'
   1111 `-Wnud'
   1112      Assemble undocumented Z80 instructions that also work on R800
   1113      without warning.
   1114 
   1115 `-ignore-unportable-instructions'
   1116 `-Wnup'
   1117      Assemble all undocumented Z80 instructions without warning.
   1118 
   1119 `-warn-undocumented-instructions'
   1120 `-Wud'
   1121      Issue a warning for undocumented Z80 instructions that also work
   1122      on R800.
   1123 
   1124 `-warn-unportable-instructions'
   1125 `-Wup'
   1126      Issue a warning for undocumented Z80 instructions that do not work
   1127      on R800.
   1128 
   1129 `-forbid-undocumented-instructions'
   1130 `-Fud'
   1131      Treat all undocumented instructions as errors.
   1132 
   1133 `-forbid-unportable-instructions'
   1134 `-Fup'
   1135      Treat undocumented Z80 instructions that do not work on R800 as
   1136      errors.
   1137 
   1138 * Menu:
   1139 
   1140 * Manual::                      Structure of this Manual
   1141 * GNU Assembler::               The GNU Assembler
   1142 * Object Formats::              Object File Formats
   1143 * Command Line::                Command Line
   1144 * Input Files::                 Input Files
   1145 * Object::                      Output (Object) File
   1146 * Errors::                      Error and Warning Messages
   1147 
   1148 
   1149 File: as.info,  Node: Manual,  Next: GNU Assembler,  Up: Overview
   1150 
   1151 1.1 Structure of this Manual
   1152 ============================
   1153 
   1154 This manual is intended to describe what you need to know to use GNU
   1155 `as'.  We cover the syntax expected in source files, including notation
   1156 for symbols, constants, and expressions; the directives that `as'
   1157 understands; and of course how to invoke `as'.
   1158 
   1159    This manual also describes some of the machine-dependent features of
   1160 various flavors of the assembler.
   1161 
   1162    On the other hand, this manual is _not_ intended as an introduction
   1163 to programming in assembly language--let alone programming in general!
   1164 In a similar vein, we make no attempt to introduce the machine
   1165 architecture; we do _not_ describe the instruction set, standard
   1166 mnemonics, registers or addressing modes that are standard to a
   1167 particular architecture.  You may want to consult the manufacturer's
   1168 machine architecture manual for this information.
   1169 
   1170 
   1171 File: as.info,  Node: GNU Assembler,  Next: Object Formats,  Prev: Manual,  Up: Overview
   1172 
   1173 1.2 The GNU Assembler
   1174 =====================
   1175 
   1176 GNU `as' is really a family of assemblers.  If you use (or have used)
   1177 the GNU assembler on one architecture, you should find a fairly similar
   1178 environment when you use it on another architecture.  Each version has
   1179 much in common with the others, including object file formats, most
   1180 assembler directives (often called "pseudo-ops") and assembler syntax.
   1181 
   1182    `as' is primarily intended to assemble the output of the GNU C
   1183 compiler `gcc' for use by the linker `ld'.  Nevertheless, we've tried
   1184 to make `as' assemble correctly everything that other assemblers for
   1185 the same machine would assemble.  Any exceptions are documented
   1186 explicitly (*note Machine Dependencies::).  This doesn't mean `as'
   1187 always uses the same syntax as another assembler for the same
   1188 architecture; for example, we know of several incompatible versions of
   1189 680x0 assembly language syntax.
   1190 
   1191    Unlike older assemblers, `as' is designed to assemble a source
   1192 program in one pass of the source file.  This has a subtle impact on the
   1193 `.org' directive (*note `.org': Org.).
   1194 
   1195 
   1196 File: as.info,  Node: Object Formats,  Next: Command Line,  Prev: GNU Assembler,  Up: Overview
   1197 
   1198 1.3 Object File Formats
   1199 =======================
   1200 
   1201 The GNU assembler can be configured to produce several alternative
   1202 object file formats.  For the most part, this does not affect how you
   1203 write assembly language programs; but directives for debugging symbols
   1204 are typically different in different file formats.  *Note Symbol
   1205 Attributes: Symbol Attributes.
   1206 
   1207 
   1208 File: as.info,  Node: Command Line,  Next: Input Files,  Prev: Object Formats,  Up: Overview
   1209 
   1210 1.4 Command Line
   1211 ================
   1212 
   1213 After the program name `as', the command line may contain options and
   1214 file names.  Options may appear in any order, and may be before, after,
   1215 or between file names.  The order of file names is significant.
   1216 
   1217    `--' (two hyphens) by itself names the standard input file
   1218 explicitly, as one of the files for `as' to assemble.
   1219 
   1220    Except for `--' any command line argument that begins with a hyphen
   1221 (`-') is an option.  Each option changes the behavior of `as'.  No
   1222 option changes the way another option works.  An option is a `-'
   1223 followed by one or more letters; the case of the letter is important.
   1224 All options are optional.
   1225 
   1226    Some options expect exactly one file name to follow them.  The file
   1227 name may either immediately follow the option's letter (compatible with
   1228 older assemblers) or it may be the next command argument (GNU
   1229 standard).  These two command lines are equivalent:
   1230 
   1231      as -o my-object-file.o mumble.s
   1232      as -omy-object-file.o mumble.s
   1233 
   1234 
   1235 File: as.info,  Node: Input Files,  Next: Object,  Prev: Command Line,  Up: Overview
   1236 
   1237 1.5 Input Files
   1238 ===============
   1239 
   1240 We use the phrase "source program", abbreviated "source", to describe
   1241 the program input to one run of `as'.  The program may be in one or
   1242 more files; how the source is partitioned into files doesn't change the
   1243 meaning of the source.
   1244 
   1245    The source program is a concatenation of the text in all the files,
   1246 in the order specified.
   1247 
   1248    Each time you run `as' it assembles exactly one source program.  The
   1249 source program is made up of one or more files.  (The standard input is
   1250 also a file.)
   1251 
   1252    You give `as' a command line that has zero or more input file names.
   1253 The input files are read (from left file name to right).  A command
   1254 line argument (in any position) that has no special meaning is taken to
   1255 be an input file name.
   1256 
   1257    If you give `as' no file names it attempts to read one input file
   1258 from the `as' standard input, which is normally your terminal.  You may
   1259 have to type <ctl-D> to tell `as' there is no more program to assemble.
   1260 
   1261    Use `--' if you need to explicitly name the standard input file in
   1262 your command line.
   1263 
   1264    If the source is empty, `as' produces a small, empty object file.
   1265 
   1266 Filenames and Line-numbers
   1267 --------------------------
   1268 
   1269 There are two ways of locating a line in the input file (or files) and
   1270 either may be used in reporting error messages.  One way refers to a
   1271 line number in a physical file; the other refers to a line number in a
   1272 "logical" file.  *Note Error and Warning Messages: Errors.
   1273 
   1274    "Physical files" are those files named in the command line given to
   1275 `as'.
   1276 
   1277    "Logical files" are simply names declared explicitly by assembler
   1278 directives; they bear no relation to physical files.  Logical file
   1279 names help error messages reflect the original source file, when `as'
   1280 source is itself synthesized from other files.  `as' understands the
   1281 `#' directives emitted by the `gcc' preprocessor.  See also *Note
   1282 `.file': File.
   1283 
   1284 
   1285 File: as.info,  Node: Object,  Next: Errors,  Prev: Input Files,  Up: Overview
   1286 
   1287 1.6 Output (Object) File
   1288 ========================
   1289 
   1290 Every time you run `as' it produces an output file, which is your
   1291 assembly language program translated into numbers.  This file is the
   1292 object file.  Its default name is `a.out'.  You can give it another
   1293 name by using the `-o' option.  Conventionally, object file names end
   1294 with `.o'.  The default name is used for historical reasons: older
   1295 assemblers were capable of assembling self-contained programs directly
   1296 into a runnable program.  (For some formats, this isn't currently
   1297 possible, but it can be done for the `a.out' format.)
   1298 
   1299    The object file is meant for input to the linker `ld'.  It contains
   1300 assembled program code, information to help `ld' integrate the
   1301 assembled program into a runnable file, and (optionally) symbolic
   1302 information for the debugger.
   1303 
   1304 
   1305 File: as.info,  Node: Errors,  Prev: Object,  Up: Overview
   1306 
   1307 1.7 Error and Warning Messages
   1308 ==============================
   1309 
   1310 `as' may write warnings and error messages to the standard error file
   1311 (usually your terminal).  This should not happen when  a compiler runs
   1312 `as' automatically.  Warnings report an assumption made so that `as'
   1313 could keep assembling a flawed program; errors report a grave problem
   1314 that stops the assembly.
   1315 
   1316    Warning messages have the format
   1317 
   1318      file_name:NNN:Warning Message Text
   1319 
   1320 (where NNN is a line number).  If a logical file name has been given
   1321 (*note `.file': File.) it is used for the filename, otherwise the name
   1322 of the current input file is used.  If a logical line number was given
   1323 (*note `.line': Line.)  then it is used to calculate the number printed,
   1324 otherwise the actual line in the current source file is printed.  The
   1325 message text is intended to be self explanatory (in the grand Unix
   1326 tradition).
   1327 
   1328    Error messages have the format
   1329      file_name:NNN:FATAL:Error Message Text
   1330    The file name and line number are derived as for warning messages.
   1331 The actual message text may be rather less explanatory because many of
   1332 them aren't supposed to happen.
   1333 
   1334 
   1335 File: as.info,  Node: Invoking,  Next: Syntax,  Prev: Overview,  Up: Top
   1336 
   1337 2 Command-Line Options
   1338 **********************
   1339 
   1340 This chapter describes command-line options available in _all_ versions
   1341 of the GNU assembler; see *Note Machine Dependencies::, for options
   1342 specific to particular machine architectures.
   1343 
   1344    If you are invoking `as' via the GNU C compiler, you can use the
   1345 `-Wa' option to pass arguments through to the assembler.  The assembler
   1346 arguments must be separated from each other (and the `-Wa') by commas.
   1347 For example:
   1348 
   1349      gcc -c -g -O -Wa,-alh,-L file.c
   1350 
   1351 This passes two options to the assembler: `-alh' (emit a listing to
   1352 standard output with high-level and assembly source) and `-L' (retain
   1353 local symbols in the symbol table).
   1354 
   1355    Usually you do not need to use this `-Wa' mechanism, since many
   1356 compiler command-line options are automatically passed to the assembler
   1357 by the compiler.  (You can call the GNU compiler driver with the `-v'
   1358 option to see precisely what options it passes to each compilation
   1359 pass, including the assembler.)
   1360 
   1361 * Menu:
   1362 
   1363 * a::             -a[cdghlns] enable listings
   1364 * alternate::     --alternate enable alternate macro syntax
   1365 * D::             -D for compatibility
   1366 * f::             -f to work faster
   1367 * I::             -I for .include search path
   1368 
   1369 * K::             -K for difference tables
   1370 
   1371 * L::             -L to retain local symbols
   1372 * listing::       --listing-XXX to configure listing output
   1373 * M::		  -M or --mri to assemble in MRI compatibility mode
   1374 * MD::            --MD for dependency tracking
   1375 * o::             -o to name the object file
   1376 * R::             -R to join data and text sections
   1377 * statistics::    --statistics to see statistics about assembly
   1378 * traditional-format:: --traditional-format for compatible output
   1379 * v::             -v to announce version
   1380 * W::             -W, --no-warn, --warn, --fatal-warnings to control warnings
   1381 * Z::             -Z to make object file even after errors
   1382 
   1383 
   1384 File: as.info,  Node: a,  Next: alternate,  Up: Invoking
   1385 
   1386 2.1 Enable Listings: `-a[cdghlns]'
   1387 ==================================
   1388 
   1389 These options enable listing output from the assembler.  By itself,
   1390 `-a' requests high-level, assembly, and symbols listing.  You can use
   1391 other letters to select specific options for the list: `-ah' requests a
   1392 high-level language listing, `-al' requests an output-program assembly
   1393 listing, and `-as' requests a symbol table listing.  High-level
   1394 listings require that a compiler debugging option like `-g' be used,
   1395 and that assembly listings (`-al') be requested also.
   1396 
   1397    Use the `-ag' option to print a first section with general assembly
   1398 information, like as version, switches passed, or time stamp.
   1399 
   1400    Use the `-ac' option to omit false conditionals from a listing.  Any
   1401 lines which are not assembled because of a false `.if' (or `.ifdef', or
   1402 any other conditional), or a true `.if' followed by an `.else', will be
   1403 omitted from the listing.
   1404 
   1405    Use the `-ad' option to omit debugging directives from the listing.
   1406 
   1407    Once you have specified one of these options, you can further control
   1408 listing output and its appearance using the directives `.list',
   1409 `.nolist', `.psize', `.eject', `.title', and `.sbttl'.  The `-an'
   1410 option turns off all forms processing.  If you do not request listing
   1411 output with one of the `-a' options, the listing-control directives
   1412 have no effect.
   1413 
   1414    The letters after `-a' may be combined into one option, _e.g._,
   1415 `-aln'.
   1416 
   1417    Note if the assembler source is coming from the standard input (e.g.,
   1418 because it is being created by `gcc' and the `-pipe' command line switch
   1419 is being used) then the listing will not contain any comments or
   1420 preprocessor directives.  This is because the listing code buffers
   1421 input source lines from stdin only after they have been preprocessed by
   1422 the assembler.  This reduces memory usage and makes the code more
   1423 efficient.
   1424 
   1425 
   1426 File: as.info,  Node: alternate,  Next: D,  Prev: a,  Up: Invoking
   1427 
   1428 2.2 `--alternate'
   1429 =================
   1430 
   1431 Begin in alternate macro mode, see *Note `.altmacro': Altmacro.
   1432 
   1433 
   1434 File: as.info,  Node: D,  Next: f,  Prev: alternate,  Up: Invoking
   1435 
   1436 2.3 `-D'
   1437 ========
   1438 
   1439 This option has no effect whatsoever, but it is accepted to make it more
   1440 likely that scripts written for other assemblers also work with `as'.
   1441 
   1442 
   1443 File: as.info,  Node: f,  Next: I,  Prev: D,  Up: Invoking
   1444 
   1445 2.4 Work Faster: `-f'
   1446 =====================
   1447 
   1448 `-f' should only be used when assembling programs written by a
   1449 (trusted) compiler.  `-f' stops the assembler from doing whitespace and
   1450 comment preprocessing on the input file(s) before assembling them.
   1451 *Note Preprocessing: Preprocessing.
   1452 
   1453      _Warning:_ if you use `-f' when the files actually need to be
   1454      preprocessed (if they contain comments, for example), `as' does
   1455      not work correctly.
   1456 
   1457 
   1458 File: as.info,  Node: I,  Next: K,  Prev: f,  Up: Invoking
   1459 
   1460 2.5 `.include' Search Path: `-I' PATH
   1461 =====================================
   1462 
   1463 Use this option to add a PATH to the list of directories `as' searches
   1464 for files specified in `.include' directives (*note `.include':
   1465 Include.).  You may use `-I' as many times as necessary to include a
   1466 variety of paths.  The current working directory is always searched
   1467 first; after that, `as' searches any `-I' directories in the same order
   1468 as they were specified (left to right) on the command line.
   1469 
   1470 
   1471 File: as.info,  Node: K,  Next: L,  Prev: I,  Up: Invoking
   1472 
   1473 2.6 Difference Tables: `-K'
   1474 ===========================
   1475 
   1476 `as' sometimes alters the code emitted for directives of the form
   1477 `.word SYM1-SYM2'.  *Note `.word': Word.  You can use the `-K' option
   1478 if you want a warning issued when this is done.
   1479 
   1480 
   1481 File: as.info,  Node: L,  Next: listing,  Prev: K,  Up: Invoking
   1482 
   1483 2.7 Include Local Symbols: `-L'
   1484 ===============================
   1485 
   1486 Symbols beginning with system-specific local label prefixes, typically
   1487 `.L' for ELF systems or `L' for traditional a.out systems, are called
   1488 "local symbols".  *Note Symbol Names::.  Normally you do not see such
   1489 symbols when debugging, because they are intended for the use of
   1490 programs (like compilers) that compose assembler programs, not for your
   1491 notice.  Normally both `as' and `ld' discard such symbols, so you do
   1492 not normally debug with them.
   1493 
   1494    This option tells `as' to retain those local symbols in the object
   1495 file.  Usually if you do this you also tell the linker `ld' to preserve
   1496 those symbols.
   1497 
   1498 
   1499 File: as.info,  Node: listing,  Next: M,  Prev: L,  Up: Invoking
   1500 
   1501 2.8 Configuring listing output: `--listing'
   1502 ===========================================
   1503 
   1504 The listing feature of the assembler can be enabled via the command
   1505 line switch `-a' (*note a::).  This feature combines the input source
   1506 file(s) with a hex dump of the corresponding locations in the output
   1507 object file, and displays them as a listing file.  The format of this
   1508 listing can be controlled by directives inside the assembler source
   1509 (i.e., `.list' (*note List::), `.title' (*note Title::), `.sbttl'
   1510 (*note Sbttl::), `.psize' (*note Psize::), and `.eject' (*note Eject::)
   1511 and also by the following switches:
   1512 
   1513 `--listing-lhs-width=`number''
   1514      Sets the maximum width, in words, of the first line of the hex
   1515      byte dump.  This dump appears on the left hand side of the listing
   1516      output.
   1517 
   1518 `--listing-lhs-width2=`number''
   1519      Sets the maximum width, in words, of any further lines of the hex
   1520      byte dump for a given input source line.  If this value is not
   1521      specified, it defaults to being the same as the value specified
   1522      for `--listing-lhs-width'.  If neither switch is used the default
   1523      is to one.
   1524 
   1525 `--listing-rhs-width=`number''
   1526      Sets the maximum width, in characters, of the source line that is
   1527      displayed alongside the hex dump.  The default value for this
   1528      parameter is 100.  The source line is displayed on the right hand
   1529      side of the listing output.
   1530 
   1531 `--listing-cont-lines=`number''
   1532      Sets the maximum number of continuation lines of hex dump that
   1533      will be displayed for a given single line of source input.  The
   1534      default value is 4.
   1535 
   1536 
   1537 File: as.info,  Node: M,  Next: MD,  Prev: listing,  Up: Invoking
   1538 
   1539 2.9 Assemble in MRI Compatibility Mode: `-M'
   1540 ============================================
   1541 
   1542 The `-M' or `--mri' option selects MRI compatibility mode.  This
   1543 changes the syntax and pseudo-op handling of `as' to make it compatible
   1544 with the `ASM68K' or the `ASM960' (depending upon the configured
   1545 target) assembler from Microtec Research.  The exact nature of the MRI
   1546 syntax will not be documented here; see the MRI manuals for more
   1547 information.  Note in particular that the handling of macros and macro
   1548 arguments is somewhat different.  The purpose of this option is to
   1549 permit assembling existing MRI assembler code using `as'.
   1550 
   1551    The MRI compatibility is not complete.  Certain operations of the
   1552 MRI assembler depend upon its object file format, and can not be
   1553 supported using other object file formats.  Supporting these would
   1554 require enhancing each object file format individually.  These are:
   1555 
   1556    * global symbols in common section
   1557 
   1558      The m68k MRI assembler supports common sections which are merged
   1559      by the linker.  Other object file formats do not support this.
   1560      `as' handles common sections by treating them as a single common
   1561      symbol.  It permits local symbols to be defined within a common
   1562      section, but it can not support global symbols, since it has no
   1563      way to describe them.
   1564 
   1565    * complex relocations
   1566 
   1567      The MRI assemblers support relocations against a negated section
   1568      address, and relocations which combine the start addresses of two
   1569      or more sections.  These are not support by other object file
   1570      formats.
   1571 
   1572    * `END' pseudo-op specifying start address
   1573 
   1574      The MRI `END' pseudo-op permits the specification of a start
   1575      address.  This is not supported by other object file formats.  The
   1576      start address may instead be specified using the `-e' option to
   1577      the linker, or in a linker script.
   1578 
   1579    * `IDNT', `.ident' and `NAME' pseudo-ops
   1580 
   1581      The MRI `IDNT', `.ident' and `NAME' pseudo-ops assign a module
   1582      name to the output file.  This is not supported by other object
   1583      file formats.
   1584 
   1585    * `ORG' pseudo-op
   1586 
   1587      The m68k MRI `ORG' pseudo-op begins an absolute section at a given
   1588      address.  This differs from the usual `as' `.org' pseudo-op, which
   1589      changes the location within the current section.  Absolute
   1590      sections are not supported by other object file formats.  The
   1591      address of a section may be assigned within a linker script.
   1592 
   1593    There are some other features of the MRI assembler which are not
   1594 supported by `as', typically either because they are difficult or
   1595 because they seem of little consequence.  Some of these may be
   1596 supported in future releases.
   1597 
   1598    * EBCDIC strings
   1599 
   1600      EBCDIC strings are not supported.
   1601 
   1602    * packed binary coded decimal
   1603 
   1604      Packed binary coded decimal is not supported.  This means that the
   1605      `DC.P' and `DCB.P' pseudo-ops are not supported.
   1606 
   1607    * `FEQU' pseudo-op
   1608 
   1609      The m68k `FEQU' pseudo-op is not supported.
   1610 
   1611    * `NOOBJ' pseudo-op
   1612 
   1613      The m68k `NOOBJ' pseudo-op is not supported.
   1614 
   1615    * `OPT' branch control options
   1616 
   1617      The m68k `OPT' branch control options--`B', `BRS', `BRB', `BRL',
   1618      and `BRW'--are ignored.  `as' automatically relaxes all branches,
   1619      whether forward or backward, to an appropriate size, so these
   1620      options serve no purpose.
   1621 
   1622    * `OPT' list control options
   1623 
   1624      The following m68k `OPT' list control options are ignored: `C',
   1625      `CEX', `CL', `CRE', `E', `G', `I', `M', `MEX', `MC', `MD', `X'.
   1626 
   1627    * other `OPT' options
   1628 
   1629      The following m68k `OPT' options are ignored: `NEST', `O', `OLD',
   1630      `OP', `P', `PCO', `PCR', `PCS', `R'.
   1631 
   1632    * `OPT' `D' option is default
   1633 
   1634      The m68k `OPT' `D' option is the default, unlike the MRI assembler.
   1635      `OPT NOD' may be used to turn it off.
   1636 
   1637    * `XREF' pseudo-op.
   1638 
   1639      The m68k `XREF' pseudo-op is ignored.
   1640 
   1641    * `.debug' pseudo-op
   1642 
   1643      The i960 `.debug' pseudo-op is not supported.
   1644 
   1645    * `.extended' pseudo-op
   1646 
   1647      The i960 `.extended' pseudo-op is not supported.
   1648 
   1649    * `.list' pseudo-op.
   1650 
   1651      The various options of the i960 `.list' pseudo-op are not
   1652      supported.
   1653 
   1654    * `.optimize' pseudo-op
   1655 
   1656      The i960 `.optimize' pseudo-op is not supported.
   1657 
   1658    * `.output' pseudo-op
   1659 
   1660      The i960 `.output' pseudo-op is not supported.
   1661 
   1662    * `.setreal' pseudo-op
   1663 
   1664      The i960 `.setreal' pseudo-op is not supported.
   1665 
   1666 
   1667 
   1668 File: as.info,  Node: MD,  Next: o,  Prev: M,  Up: Invoking
   1669 
   1670 2.10 Dependency Tracking: `--MD'
   1671 ================================
   1672 
   1673 `as' can generate a dependency file for the file it creates.  This file
   1674 consists of a single rule suitable for `make' describing the
   1675 dependencies of the main source file.
   1676 
   1677    The rule is written to the file named in its argument.
   1678 
   1679    This feature is used in the automatic updating of makefiles.
   1680 
   1681 
   1682 File: as.info,  Node: o,  Next: R,  Prev: MD,  Up: Invoking
   1683 
   1684 2.11 Name the Object File: `-o'
   1685 ===============================
   1686 
   1687 There is always one object file output when you run `as'.  By default
   1688 it has the name `a.out' (or `b.out', for Intel 960 targets only).  You
   1689 use this option (which takes exactly one filename) to give the object
   1690 file a different name.
   1691 
   1692    Whatever the object file is called, `as' overwrites any existing
   1693 file of the same name.
   1694 
   1695 
   1696 File: as.info,  Node: R,  Next: statistics,  Prev: o,  Up: Invoking
   1697 
   1698 2.12 Join Data and Text Sections: `-R'
   1699 ======================================
   1700 
   1701 `-R' tells `as' to write the object file as if all data-section data
   1702 lives in the text section.  This is only done at the very last moment:
   1703 your binary data are the same, but data section parts are relocated
   1704 differently.  The data section part of your object file is zero bytes
   1705 long because all its bytes are appended to the text section.  (*Note
   1706 Sections and Relocation: Sections.)
   1707 
   1708    When you specify `-R' it would be possible to generate shorter
   1709 address displacements (because we do not have to cross between text and
   1710 data section).  We refrain from doing this simply for compatibility with
   1711 older versions of `as'.  In future, `-R' may work this way.
   1712 
   1713    When `as' is configured for COFF or ELF output, this option is only
   1714 useful if you use sections named `.text' and `.data'.
   1715 
   1716    `-R' is not supported for any of the HPPA targets.  Using `-R'
   1717 generates a warning from `as'.
   1718 
   1719 
   1720 File: as.info,  Node: statistics,  Next: traditional-format,  Prev: R,  Up: Invoking
   1721 
   1722 2.13 Display Assembly Statistics: `--statistics'
   1723 ================================================
   1724 
   1725 Use `--statistics' to display two statistics about the resources used by
   1726 `as': the maximum amount of space allocated during the assembly (in
   1727 bytes), and the total execution time taken for the assembly (in CPU
   1728 seconds).
   1729 
   1730 
   1731 File: as.info,  Node: traditional-format,  Next: v,  Prev: statistics,  Up: Invoking
   1732 
   1733 2.14 Compatible Output: `--traditional-format'
   1734 ==============================================
   1735 
   1736 For some targets, the output of `as' is different in some ways from the
   1737 output of some existing assembler.  This switch requests `as' to use
   1738 the traditional format instead.
   1739 
   1740    For example, it disables the exception frame optimizations which
   1741 `as' normally does by default on `gcc' output.
   1742 
   1743 
   1744 File: as.info,  Node: v,  Next: W,  Prev: traditional-format,  Up: Invoking
   1745 
   1746 2.15 Announce Version: `-v'
   1747 ===========================
   1748 
   1749 You can find out what version of as is running by including the option
   1750 `-v' (which you can also spell as `-version') on the command line.
   1751 
   1752 
   1753 File: as.info,  Node: W,  Next: Z,  Prev: v,  Up: Invoking
   1754 
   1755 2.16 Control Warnings: `-W', `--warn', `--no-warn', `--fatal-warnings'
   1756 ======================================================================
   1757 
   1758 `as' should never give a warning or error message when assembling
   1759 compiler output.  But programs written by people often cause `as' to
   1760 give a warning that a particular assumption was made.  All such
   1761 warnings are directed to the standard error file.
   1762 
   1763    If you use the `-W' and `--no-warn' options, no warnings are issued.
   1764 This only affects the warning messages: it does not change any
   1765 particular of how `as' assembles your file.  Errors, which stop the
   1766 assembly, are still reported.
   1767 
   1768    If you use the `--fatal-warnings' option, `as' considers files that
   1769 generate warnings to be in error.
   1770 
   1771    You can switch these options off again by specifying `--warn', which
   1772 causes warnings to be output as usual.
   1773 
   1774 
   1775 File: as.info,  Node: Z,  Prev: W,  Up: Invoking
   1776 
   1777 2.17 Generate Object File in Spite of Errors: `-Z'
   1778 ==================================================
   1779 
   1780 After an error message, `as' normally produces no output.  If for some
   1781 reason you are interested in object file output even after `as' gives
   1782 an error message on your program, use the `-Z' option.  If there are
   1783 any errors, `as' continues anyways, and writes an object file after a
   1784 final warning message of the form `N errors, M warnings, generating bad
   1785 object file.'
   1786 
   1787 
   1788 File: as.info,  Node: Syntax,  Next: Sections,  Prev: Invoking,  Up: Top
   1789 
   1790 3 Syntax
   1791 ********
   1792 
   1793 This chapter describes the machine-independent syntax allowed in a
   1794 source file.  `as' syntax is similar to what many other assemblers use;
   1795 it is inspired by the BSD 4.2 assembler, except that `as' does not
   1796 assemble Vax bit-fields.
   1797 
   1798 * Menu:
   1799 
   1800 * Preprocessing::               Preprocessing
   1801 * Whitespace::                  Whitespace
   1802 * Comments::                    Comments
   1803 * Symbol Intro::                Symbols
   1804 * Statements::                  Statements
   1805 * Constants::                   Constants
   1806 
   1807 
   1808 File: as.info,  Node: Preprocessing,  Next: Whitespace,  Up: Syntax
   1809 
   1810 3.1 Preprocessing
   1811 =================
   1812 
   1813 The `as' internal preprocessor:
   1814    * adjusts and removes extra whitespace.  It leaves one space or tab
   1815      before the keywords on a line, and turns any other whitespace on
   1816      the line into a single space.
   1817 
   1818    * removes all comments, replacing them with a single space, or an
   1819      appropriate number of newlines.
   1820 
   1821    * converts character constants into the appropriate numeric values.
   1822 
   1823    It does not do macro processing, include file handling, or anything
   1824 else you may get from your C compiler's preprocessor.  You can do
   1825 include file processing with the `.include' directive (*note
   1826 `.include': Include.).  You can use the GNU C compiler driver to get
   1827 other "CPP" style preprocessing by giving the input file a `.S' suffix.
   1828 *Note Options Controlling the Kind of Output: (gcc.info)Overall
   1829 Options.
   1830 
   1831    Excess whitespace, comments, and character constants cannot be used
   1832 in the portions of the input text that are not preprocessed.
   1833 
   1834    If the first line of an input file is `#NO_APP' or if you use the
   1835 `-f' option, whitespace and comments are not removed from the input
   1836 file.  Within an input file, you can ask for whitespace and comment
   1837 removal in specific portions of the by putting a line that says `#APP'
   1838 before the text that may contain whitespace or comments, and putting a
   1839 line that says `#NO_APP' after this text.  This feature is mainly
   1840 intend to support `asm' statements in compilers whose output is
   1841 otherwise free of comments and whitespace.
   1842 
   1843 
   1844 File: as.info,  Node: Whitespace,  Next: Comments,  Prev: Preprocessing,  Up: Syntax
   1845 
   1846 3.2 Whitespace
   1847 ==============
   1848 
   1849 "Whitespace" is one or more blanks or tabs, in any order.  Whitespace
   1850 is used to separate symbols, and to make programs neater for people to
   1851 read.  Unless within character constants (*note Character Constants:
   1852 Characters.), any whitespace means the same as exactly one space.
   1853 
   1854 
   1855 File: as.info,  Node: Comments,  Next: Symbol Intro,  Prev: Whitespace,  Up: Syntax
   1856 
   1857 3.3 Comments
   1858 ============
   1859 
   1860 There are two ways of rendering comments to `as'.  In both cases the
   1861 comment is equivalent to one space.
   1862 
   1863    Anything from `/*' through the next `*/' is a comment.  This means
   1864 you may not nest these comments.
   1865 
   1866      /*
   1867        The only way to include a newline ('\n') in a comment
   1868        is to use this sort of comment.
   1869      */
   1870 
   1871      /* This sort of comment does not nest. */
   1872 
   1873    Anything from a "line comment" character up to the next newline is
   1874 considered a comment and is ignored.  The line comment character is
   1875 target specific, and some targets multiple comment characters.  Some
   1876 targets also have line comment characters that only work if they are
   1877 the first character on a line.  Some targets use a sequence of two
   1878 characters to introduce a line comment.  Some targets can also change
   1879 their line comment characters depending upon command line options that
   1880 have been used.  For more details see the _Syntax_ section in the
   1881 documentation for individual targets.
   1882 
   1883    If the line comment character is the hash sign (`#') then it still
   1884 has the special ability to enable and disable preprocessing (*note
   1885 Preprocessing::) and to specify logical line numbers:
   1886 
   1887    To be compatible with past assemblers, lines that begin with `#'
   1888 have a special interpretation.  Following the `#' should be an absolute
   1889 expression (*note Expressions::): the logical line number of the _next_
   1890 line.  Then a string (*note Strings: Strings.) is allowed: if present
   1891 it is a new logical file name.  The rest of the line, if any, should be
   1892 whitespace.
   1893 
   1894    If the first non-whitespace characters on the line are not numeric,
   1895 the line is ignored.  (Just like a comment.)
   1896 
   1897                                # This is an ordinary comment.
   1898      # 42-6 "new_file_name"    # New logical file name
   1899                                # This is logical line # 36.
   1900    This feature is deprecated, and may disappear from future versions
   1901 of `as'.
   1902 
   1903 
   1904 File: as.info,  Node: Symbol Intro,  Next: Statements,  Prev: Comments,  Up: Syntax
   1905 
   1906 3.4 Symbols
   1907 ===========
   1908 
   1909 A "symbol" is one or more characters chosen from the set of all letters
   1910 (both upper and lower case), digits and the three characters `_.$'.  On
   1911 most machines, you can also use `$' in symbol names; exceptions are
   1912 noted in *Note Machine Dependencies::.  No symbol may begin with a
   1913 digit.  Case is significant.  There is no length limit: all characters
   1914 are significant.  Multibyte characters are supported.  Symbols are
   1915 delimited by characters not in that set, or by the beginning of a file
   1916 (since the source program must end with a newline, the end of a file is
   1917 not a possible symbol delimiter).  *Note Symbols::.  
   1918 
   1919 
   1920 File: as.info,  Node: Statements,  Next: Constants,  Prev: Symbol Intro,  Up: Syntax
   1921 
   1922 3.5 Statements
   1923 ==============
   1924 
   1925 A "statement" ends at a newline character (`\n') or a "line separator
   1926 character".  The line separator character is target specific and
   1927 described in the _Syntax_ section of each target's documentation.  Not
   1928 all targets support a line separator character.  The newline or line
   1929 separator character is considered to be part of the preceding
   1930 statement.  Newlines and separators within character constants are an
   1931 exception: they do not end statements.
   1932 
   1933    It is an error to end any statement with end-of-file:  the last
   1934 character of any input file should be a newline.
   1935 
   1936    An empty statement is allowed, and may include whitespace.  It is
   1937 ignored.
   1938 
   1939    A statement begins with zero or more labels, optionally followed by a
   1940 key symbol which determines what kind of statement it is.  The key
   1941 symbol determines the syntax of the rest of the statement.  If the
   1942 symbol begins with a dot `.' then the statement is an assembler
   1943 directive: typically valid for any computer.  If the symbol begins with
   1944 a letter the statement is an assembly language "instruction": it
   1945 assembles into a machine language instruction.  Different versions of
   1946 `as' for different computers recognize different instructions.  In
   1947 fact, the same symbol may represent a different instruction in a
   1948 different computer's assembly language.
   1949 
   1950    A label is a symbol immediately followed by a colon (`:').
   1951 Whitespace before a label or after a colon is permitted, but you may not
   1952 have whitespace between a label's symbol and its colon. *Note Labels::.
   1953 
   1954    For HPPA targets, labels need not be immediately followed by a
   1955 colon, but the definition of a label must begin in column zero.  This
   1956 also implies that only one label may be defined on each line.
   1957 
   1958      label:     .directive    followed by something
   1959      another_label:           # This is an empty statement.
   1960                 instruction   operand_1, operand_2, ...
   1961 
   1962 
   1963 File: as.info,  Node: Constants,  Prev: Statements,  Up: Syntax
   1964 
   1965 3.6 Constants
   1966 =============
   1967 
   1968 A constant is a number, written so that its value is known by
   1969 inspection, without knowing any context.  Like this:
   1970      .byte  74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
   1971      .ascii "Ring the bell\7"                  # A string constant.
   1972      .octa  0x123456789abcdef0123456789ABCDEF0 # A bignum.
   1973      .float 0f-314159265358979323846264338327\
   1974      95028841971.693993751E-40                 # - pi, a flonum.
   1975 
   1976 * Menu:
   1977 
   1978 * Characters::                  Character Constants
   1979 * Numbers::                     Number Constants
   1980 
   1981 
   1982 File: as.info,  Node: Characters,  Next: Numbers,  Up: Constants
   1983 
   1984 3.6.1 Character Constants
   1985 -------------------------
   1986 
   1987 There are two kinds of character constants.  A "character" stands for
   1988 one character in one byte and its value may be used in numeric
   1989 expressions.  String constants (properly called string _literals_) are
   1990 potentially many bytes and their values may not be used in arithmetic
   1991 expressions.
   1992 
   1993 * Menu:
   1994 
   1995 * Strings::                     Strings
   1996 * Chars::                       Characters
   1997 
   1998 
   1999 File: as.info,  Node: Strings,  Next: Chars,  Up: Characters
   2000 
   2001 3.6.1.1 Strings
   2002 ...............
   2003 
   2004 A "string" is written between double-quotes.  It may contain
   2005 double-quotes or null characters.  The way to get special characters
   2006 into a string is to "escape" these characters: precede them with a
   2007 backslash `\' character.  For example `\\' represents one backslash:
   2008 the first `\' is an escape which tells `as' to interpret the second
   2009 character literally as a backslash (which prevents `as' from
   2010 recognizing the second `\' as an escape character).  The complete list
   2011 of escapes follows.
   2012 
   2013 `\b'
   2014      Mnemonic for backspace; for ASCII this is octal code 010.
   2015 
   2016 `\f'
   2017      Mnemonic for FormFeed; for ASCII this is octal code 014.
   2018 
   2019 `\n'
   2020      Mnemonic for newline; for ASCII this is octal code 012.
   2021 
   2022 `\r'
   2023      Mnemonic for carriage-Return; for ASCII this is octal code 015.
   2024 
   2025 `\t'
   2026      Mnemonic for horizontal Tab; for ASCII this is octal code 011.
   2027 
   2028 `\ DIGIT DIGIT DIGIT'
   2029      An octal character code.  The numeric code is 3 octal digits.  For
   2030      compatibility with other Unix systems, 8 and 9 are accepted as
   2031      digits: for example, `\008' has the value 010, and `\009' the
   2032      value 011.
   2033 
   2034 `\`x' HEX-DIGITS...'
   2035      A hex character code.  All trailing hex digits are combined.
   2036      Either upper or lower case `x' works.
   2037 
   2038 `\\'
   2039      Represents one `\' character.
   2040 
   2041 `\"'
   2042      Represents one `"' character.  Needed in strings to represent this
   2043      character, because an unescaped `"' would end the string.
   2044 
   2045 `\ ANYTHING-ELSE'
   2046      Any other character when escaped by `\' gives a warning, but
   2047      assembles as if the `\' was not present.  The idea is that if you
   2048      used an escape sequence you clearly didn't want the literal
   2049      interpretation of the following character.  However `as' has no
   2050      other interpretation, so `as' knows it is giving you the wrong
   2051      code and warns you of the fact.
   2052 
   2053    Which characters are escapable, and what those escapes represent,
   2054 varies widely among assemblers.  The current set is what we think the
   2055 BSD 4.2 assembler recognizes, and is a subset of what most C compilers
   2056 recognize.  If you are in doubt, do not use an escape sequence.
   2057 
   2058 
   2059 File: as.info,  Node: Chars,  Prev: Strings,  Up: Characters
   2060 
   2061 3.6.1.2 Characters
   2062 ..................
   2063 
   2064 A single character may be written as a single quote immediately
   2065 followed by that character.  The same escapes apply to characters as to
   2066 strings.  So if you want to write the character backslash, you must
   2067 write `'\\' where the first `\' escapes the second `\'.  As you can
   2068 see, the quote is an acute accent, not a grave accent.  A newline
   2069 immediately following an acute accent is taken as a literal character
   2070 and does not count as the end of a statement.  The value of a character
   2071 constant in a numeric expression is the machine's byte-wide code for
   2072 that character.  `as' assumes your character code is ASCII: `'A' means
   2073 65, `'B' means 66, and so on.
   2074 
   2075 
   2076 File: as.info,  Node: Numbers,  Prev: Characters,  Up: Constants
   2077 
   2078 3.6.2 Number Constants
   2079 ----------------------
   2080 
   2081 `as' distinguishes three kinds of numbers according to how they are
   2082 stored in the target machine.  _Integers_ are numbers that would fit
   2083 into an `int' in the C language.  _Bignums_ are integers, but they are
   2084 stored in more than 32 bits.  _Flonums_ are floating point numbers,
   2085 described below.
   2086 
   2087 * Menu:
   2088 
   2089 * Integers::                    Integers
   2090 * Bignums::                     Bignums
   2091 * Flonums::                     Flonums
   2092 
   2093 
   2094 File: as.info,  Node: Integers,  Next: Bignums,  Up: Numbers
   2095 
   2096 3.6.2.1 Integers
   2097 ................
   2098 
   2099 A binary integer is `0b' or `0B' followed by zero or more of the binary
   2100 digits `01'.
   2101 
   2102    An octal integer is `0' followed by zero or more of the octal digits
   2103 (`01234567').
   2104 
   2105    A decimal integer starts with a non-zero digit followed by zero or
   2106 more digits (`0123456789').
   2107 
   2108    A hexadecimal integer is `0x' or `0X' followed by one or more
   2109 hexadecimal digits chosen from `0123456789abcdefABCDEF'.
   2110 
   2111    Integers have the usual values.  To denote a negative integer, use
   2112 the prefix operator `-' discussed under expressions (*note Prefix
   2113 Operators: Prefix Ops.).
   2114 
   2115 
   2116 File: as.info,  Node: Bignums,  Next: Flonums,  Prev: Integers,  Up: Numbers
   2117 
   2118 3.6.2.2 Bignums
   2119 ...............
   2120 
   2121 A "bignum" has the same syntax and semantics as an integer except that
   2122 the number (or its negative) takes more than 32 bits to represent in
   2123 binary.  The distinction is made because in some places integers are
   2124 permitted while bignums are not.
   2125 
   2126 
   2127 File: as.info,  Node: Flonums,  Prev: Bignums,  Up: Numbers
   2128 
   2129 3.6.2.3 Flonums
   2130 ...............
   2131 
   2132 A "flonum" represents a floating point number.  The translation is
   2133 indirect: a decimal floating point number from the text is converted by
   2134 `as' to a generic binary floating point number of more than sufficient
   2135 precision.  This generic floating point number is converted to a
   2136 particular computer's floating point format (or formats) by a portion
   2137 of `as' specialized to that computer.
   2138 
   2139    A flonum is written by writing (in order)
   2140    * The digit `0'.  (`0' is optional on the HPPA.)
   2141 
   2142    * A letter, to tell `as' the rest of the number is a flonum.  `e' is
   2143      recommended.  Case is not important.
   2144 
   2145      On the H8/300, Renesas / SuperH SH, and AMD 29K architectures, the
   2146      letter must be one of the letters `DFPRSX' (in upper or lower
   2147      case).
   2148 
   2149      On the ARC, the letter must be one of the letters `DFRS' (in upper
   2150      or lower case).
   2151 
   2152      On the Intel 960 architecture, the letter must be one of the
   2153      letters `DFT' (in upper or lower case).
   2154 
   2155      On the HPPA architecture, the letter must be `E' (upper case only).
   2156 
   2157    * An optional sign: either `+' or `-'.
   2158 
   2159    * An optional "integer part": zero or more decimal digits.
   2160 
   2161    * An optional "fractional part": `.' followed by zero or more
   2162      decimal digits.
   2163 
   2164    * An optional exponent, consisting of:
   2165 
   2166         * An `E' or `e'.
   2167 
   2168         * Optional sign: either `+' or `-'.
   2169 
   2170         * One or more decimal digits.
   2171 
   2172 
   2173    At least one of the integer part or the fractional part must be
   2174 present.  The floating point number has the usual base-10 value.
   2175 
   2176    `as' does all processing using integers.  Flonums are computed
   2177 independently of any floating point hardware in the computer running
   2178 `as'.
   2179 
   2180 
   2181 File: as.info,  Node: Sections,  Next: Symbols,  Prev: Syntax,  Up: Top
   2182 
   2183 4 Sections and Relocation
   2184 *************************
   2185 
   2186 * Menu:
   2187 
   2188 * Secs Background::             Background
   2189 * Ld Sections::                 Linker Sections
   2190 * As Sections::                 Assembler Internal Sections
   2191 * Sub-Sections::                Sub-Sections
   2192 * bss::                         bss Section
   2193 
   2194 
   2195 File: as.info,  Node: Secs Background,  Next: Ld Sections,  Up: Sections
   2196 
   2197 4.1 Background
   2198 ==============
   2199 
   2200 Roughly, a section is a range of addresses, with no gaps; all data "in"
   2201 those addresses is treated the same for some particular purpose.  For
   2202 example there may be a "read only" section.
   2203 
   2204    The linker `ld' reads many object files (partial programs) and
   2205 combines their contents to form a runnable program.  When `as' emits an
   2206 object file, the partial program is assumed to start at address 0.
   2207 `ld' assigns the final addresses for the partial program, so that
   2208 different partial programs do not overlap.  This is actually an
   2209 oversimplification, but it suffices to explain how `as' uses sections.
   2210 
   2211    `ld' moves blocks of bytes of your program to their run-time
   2212 addresses.  These blocks slide to their run-time addresses as rigid
   2213 units; their length does not change and neither does the order of bytes
   2214 within them.  Such a rigid unit is called a _section_.  Assigning
   2215 run-time addresses to sections is called "relocation".  It includes the
   2216 task of adjusting mentions of object-file addresses so they refer to
   2217 the proper run-time addresses.  For the H8/300, and for the Renesas /
   2218 SuperH SH, `as' pads sections if needed to ensure they end on a word
   2219 (sixteen bit) boundary.
   2220 
   2221    An object file written by `as' has at least three sections, any of
   2222 which may be empty.  These are named "text", "data" and "bss" sections.
   2223 
   2224    When it generates COFF or ELF output, `as' can also generate
   2225 whatever other named sections you specify using the `.section'
   2226 directive (*note `.section': Section.).  If you do not use any
   2227 directives that place output in the `.text' or `.data' sections, these
   2228 sections still exist, but are empty.
   2229 
   2230    When `as' generates SOM or ELF output for the HPPA, `as' can also
   2231 generate whatever other named sections you specify using the `.space'
   2232 and `.subspace' directives.  See `HP9000 Series 800 Assembly Language
   2233 Reference Manual' (HP 92432-90001) for details on the `.space' and
   2234 `.subspace' assembler directives.
   2235 
   2236    Additionally, `as' uses different names for the standard text, data,
   2237 and bss sections when generating SOM output.  Program text is placed
   2238 into the `$CODE$' section, data into `$DATA$', and BSS into `$BSS$'.
   2239 
   2240    Within the object file, the text section starts at address `0', the
   2241 data section follows, and the bss section follows the data section.
   2242 
   2243    When generating either SOM or ELF output files on the HPPA, the text
   2244 section starts at address `0', the data section at address `0x4000000',
   2245 and the bss section follows the data section.
   2246 
   2247    To let `ld' know which data changes when the sections are relocated,
   2248 and how to change that data, `as' also writes to the object file
   2249 details of the relocation needed.  To perform relocation `ld' must
   2250 know, each time an address in the object file is mentioned:
   2251    * Where in the object file is the beginning of this reference to an
   2252      address?
   2253 
   2254    * How long (in bytes) is this reference?
   2255 
   2256    * Which section does the address refer to?  What is the numeric
   2257      value of
   2258           (ADDRESS) - (START-ADDRESS OF SECTION)?
   2259 
   2260    * Is the reference to an address "Program-Counter relative"?
   2261 
   2262    In fact, every address `as' ever uses is expressed as
   2263      (SECTION) + (OFFSET INTO SECTION)
   2264    Further, most expressions `as' computes have this section-relative
   2265 nature.  (For some object formats, such as SOM for the HPPA, some
   2266 expressions are symbol-relative instead.)
   2267 
   2268    In this manual we use the notation {SECNAME N} to mean "offset N
   2269 into section SECNAME."
   2270 
   2271    Apart from text, data and bss sections you need to know about the
   2272 "absolute" section.  When `ld' mixes partial programs, addresses in the
   2273 absolute section remain unchanged.  For example, address `{absolute 0}'
   2274 is "relocated" to run-time address 0 by `ld'.  Although the linker
   2275 never arranges two partial programs' data sections with overlapping
   2276 addresses after linking, _by definition_ their absolute sections must
   2277 overlap.  Address `{absolute 239}' in one part of a program is always
   2278 the same address when the program is running as address `{absolute
   2279 239}' in any other part of the program.
   2280 
   2281    The idea of sections is extended to the "undefined" section.  Any
   2282 address whose section is unknown at assembly time is by definition
   2283 rendered {undefined U}--where U is filled in later.  Since numbers are
   2284 always defined, the only way to generate an undefined address is to
   2285 mention an undefined symbol.  A reference to a named common block would
   2286 be such a symbol: its value is unknown at assembly time so it has
   2287 section _undefined_.
   2288 
   2289    By analogy the word _section_ is used to describe groups of sections
   2290 in the linked program.  `ld' puts all partial programs' text sections
   2291 in contiguous addresses in the linked program.  It is customary to
   2292 refer to the _text section_ of a program, meaning all the addresses of
   2293 all partial programs' text sections.  Likewise for data and bss
   2294 sections.
   2295 
   2296    Some sections are manipulated by `ld'; others are invented for use
   2297 of `as' and have no meaning except during assembly.
   2298 
   2299 
   2300 File: as.info,  Node: Ld Sections,  Next: As Sections,  Prev: Secs Background,  Up: Sections
   2301 
   2302 4.2 Linker Sections
   2303 ===================
   2304 
   2305 `ld' deals with just four kinds of sections, summarized below.
   2306 
   2307 *named sections*
   2308 *text section*
   2309 *data section*
   2310      These sections hold your program.  `as' and `ld' treat them as
   2311      separate but equal sections.  Anything you can say of one section
   2312      is true of another.  When the program is running, however, it is
   2313      customary for the text section to be unalterable.  The text
   2314      section is often shared among processes: it contains instructions,
   2315      constants and the like.  The data section of a running program is
   2316      usually alterable: for example, C variables would be stored in the
   2317      data section.
   2318 
   2319 *bss section*
   2320      This section contains zeroed bytes when your program begins
   2321      running.  It is used to hold uninitialized variables or common
   2322      storage.  The length of each partial program's bss section is
   2323      important, but because it starts out containing zeroed bytes there
   2324      is no need to store explicit zero bytes in the object file.  The
   2325      bss section was invented to eliminate those explicit zeros from
   2326      object files.
   2327 
   2328 *absolute section*
   2329      Address 0 of this section is always "relocated" to runtime address
   2330      0.  This is useful if you want to refer to an address that `ld'
   2331      must not change when relocating.  In this sense we speak of
   2332      absolute addresses being "unrelocatable": they do not change
   2333      during relocation.
   2334 
   2335 *undefined section*
   2336      This "section" is a catch-all for address references to objects
   2337      not in the preceding sections.
   2338 
   2339    An idealized example of three relocatable sections follows.  The
   2340 example uses the traditional section names `.text' and `.data'.  Memory
   2341 addresses are on the horizontal axis.
   2342 
   2343                            +-----+----+--+
   2344      partial program # 1:  |ttttt|dddd|00|
   2345                            +-----+----+--+
   2346 
   2347                            text   data bss
   2348                            seg.   seg. seg.
   2349 
   2350                            +---+---+---+
   2351      partial program # 2:  |TTT|DDD|000|
   2352                            +---+---+---+
   2353 
   2354                            +--+---+-----+--+----+---+-----+~~
   2355      linked program:       |  |TTT|ttttt|  |dddd|DDD|00000|
   2356                            +--+---+-----+--+----+---+-----+~~
   2357 
   2358          addresses:        0 ...
   2359 
   2360 
   2361 File: as.info,  Node: As Sections,  Next: Sub-Sections,  Prev: Ld Sections,  Up: Sections
   2362 
   2363 4.3 Assembler Internal Sections
   2364 ===============================
   2365 
   2366 These sections are meant only for the internal use of `as'.  They have
   2367 no meaning at run-time.  You do not really need to know about these
   2368 sections for most purposes; but they can be mentioned in `as' warning
   2369 messages, so it might be helpful to have an idea of their meanings to
   2370 `as'.  These sections are used to permit the value of every expression
   2371 in your assembly language program to be a section-relative address.
   2372 
   2373 ASSEMBLER-INTERNAL-LOGIC-ERROR!
   2374      An internal assembler logic error has been found.  This means
   2375      there is a bug in the assembler.
   2376 
   2377 expr section
   2378      The assembler stores complex expression internally as combinations
   2379      of symbols.  When it needs to represent an expression as a symbol,
   2380      it puts it in the expr section.
   2381 
   2382 
   2383 File: as.info,  Node: Sub-Sections,  Next: bss,  Prev: As Sections,  Up: Sections
   2384 
   2385 4.4 Sub-Sections
   2386 ================
   2387 
   2388 Assembled bytes conventionally fall into two sections: text and data.
   2389 You may have separate groups of data in named sections that you want to
   2390 end up near to each other in the object file, even though they are not
   2391 contiguous in the assembler source.  `as' allows you to use
   2392 "subsections" for this purpose.  Within each section, there can be
   2393 numbered subsections with values from 0 to 8192.  Objects assembled
   2394 into the same subsection go into the object file together with other
   2395 objects in the same subsection.  For example, a compiler might want to
   2396 store constants in the text section, but might not want to have them
   2397 interspersed with the program being assembled.  In this case, the
   2398 compiler could issue a `.text 0' before each section of code being
   2399 output, and a `.text 1' before each group of constants being output.
   2400 
   2401 Subsections are optional.  If you do not use subsections, everything
   2402 goes in subsection number zero.
   2403 
   2404    Each subsection is zero-padded up to a multiple of four bytes.
   2405 (Subsections may be padded a different amount on different flavors of
   2406 `as'.)
   2407 
   2408    Subsections appear in your object file in numeric order, lowest
   2409 numbered to highest.  (All this to be compatible with other people's
   2410 assemblers.)  The object file contains no representation of
   2411 subsections; `ld' and other programs that manipulate object files see
   2412 no trace of them.  They just see all your text subsections as a text
   2413 section, and all your data subsections as a data section.
   2414 
   2415    To specify which subsection you want subsequent statements assembled
   2416 into, use a numeric argument to specify it, in a `.text EXPRESSION' or
   2417 a `.data EXPRESSION' statement.  When generating COFF output, you can
   2418 also use an extra subsection argument with arbitrary named sections:
   2419 `.section NAME, EXPRESSION'.  When generating ELF output, you can also
   2420 use the `.subsection' directive (*note SubSection::) to specify a
   2421 subsection: `.subsection EXPRESSION'.  EXPRESSION should be an absolute
   2422 expression (*note Expressions::).  If you just say `.text' then `.text
   2423 0' is assumed.  Likewise `.data' means `.data 0'.  Assembly begins in
   2424 `text 0'.  For instance:
   2425      .text 0     # The default subsection is text 0 anyway.
   2426      .ascii "This lives in the first text subsection. *"
   2427      .text 1
   2428      .ascii "But this lives in the second text subsection."
   2429      .data 0
   2430      .ascii "This lives in the data section,"
   2431      .ascii "in the first data subsection."
   2432      .text 0
   2433      .ascii "This lives in the first text section,"
   2434      .ascii "immediately following the asterisk (*)."
   2435 
   2436    Each section has a "location counter" incremented by one for every
   2437 byte assembled into that section.  Because subsections are merely a
   2438 convenience restricted to `as' there is no concept of a subsection
   2439 location counter.  There is no way to directly manipulate a location
   2440 counter--but the `.align' directive changes it, and any label
   2441 definition captures its current value.  The location counter of the
   2442 section where statements are being assembled is said to be the "active"
   2443 location counter.
   2444 
   2445 
   2446 File: as.info,  Node: bss,  Prev: Sub-Sections,  Up: Sections
   2447 
   2448 4.5 bss Section
   2449 ===============
   2450 
   2451 The bss section is used for local common variable storage.  You may
   2452 allocate address space in the bss section, but you may not dictate data
   2453 to load into it before your program executes.  When your program starts
   2454 running, all the contents of the bss section are zeroed bytes.
   2455 
   2456    The `.lcomm' pseudo-op defines a symbol in the bss section; see
   2457 *Note `.lcomm': Lcomm.
   2458 
   2459    The `.comm' pseudo-op may be used to declare a common symbol, which
   2460 is another form of uninitialized symbol; see *Note `.comm': Comm.
   2461 
   2462    When assembling for a target which supports multiple sections, such
   2463 as ELF or COFF, you may switch into the `.bss' section and define
   2464 symbols as usual; see *Note `.section': Section.  You may only assemble
   2465 zero values into the section.  Typically the section will only contain
   2466 symbol definitions and `.skip' directives (*note `.skip': Skip.).
   2467 
   2468 
   2469 File: as.info,  Node: Symbols,  Next: Expressions,  Prev: Sections,  Up: Top
   2470 
   2471 5 Symbols
   2472 *********
   2473 
   2474 Symbols are a central concept: the programmer uses symbols to name
   2475 things, the linker uses symbols to link, and the debugger uses symbols
   2476 to debug.
   2477 
   2478      _Warning:_ `as' does not place symbols in the object file in the
   2479      same order they were declared.  This may break some debuggers.
   2480 
   2481 * Menu:
   2482 
   2483 * Labels::                      Labels
   2484 * Setting Symbols::             Giving Symbols Other Values
   2485 * Symbol Names::                Symbol Names
   2486 * Dot::                         The Special Dot Symbol
   2487 * Symbol Attributes::           Symbol Attributes
   2488 
   2489 
   2490 File: as.info,  Node: Labels,  Next: Setting Symbols,  Up: Symbols
   2491 
   2492 5.1 Labels
   2493 ==========
   2494 
   2495 A "label" is written as a symbol immediately followed by a colon `:'.
   2496 The symbol then represents the current value of the active location
   2497 counter, and is, for example, a suitable instruction operand.  You are
   2498 warned if you use the same symbol to represent two different locations:
   2499 the first definition overrides any other definitions.
   2500 
   2501    On the HPPA, the usual form for a label need not be immediately
   2502 followed by a colon, but instead must start in column zero.  Only one
   2503 label may be defined on a single line.  To work around this, the HPPA
   2504 version of `as' also provides a special directive `.label' for defining
   2505 labels more flexibly.
   2506 
   2507 
   2508 File: as.info,  Node: Setting Symbols,  Next: Symbol Names,  Prev: Labels,  Up: Symbols
   2509 
   2510 5.2 Giving Symbols Other Values
   2511 ===============================
   2512 
   2513 A symbol can be given an arbitrary value by writing a symbol, followed
   2514 by an equals sign `=', followed by an expression (*note Expressions::).
   2515 This is equivalent to using the `.set' directive.  *Note `.set': Set.
   2516 In the same way, using a double equals sign `='`=' here represents an
   2517 equivalent of the `.eqv' directive.  *Note `.eqv': Eqv.
   2518 
   2519    Blackfin does not support symbol assignment with `='.
   2520 
   2521 
   2522 File: as.info,  Node: Symbol Names,  Next: Dot,  Prev: Setting Symbols,  Up: Symbols
   2523 
   2524 5.3 Symbol Names
   2525 ================
   2526 
   2527 Symbol names begin with a letter or with one of `._'.  On most
   2528 machines, you can also use `$' in symbol names; exceptions are noted in
   2529 *Note Machine Dependencies::.  That character may be followed by any
   2530 string of digits, letters, dollar signs (unless otherwise noted for a
   2531 particular target machine), and underscores.
   2532 
   2533 Case of letters is significant: `foo' is a different symbol name than
   2534 `Foo'.
   2535 
   2536    Multibyte characters are supported.  To generate a symbol name
   2537 containing multibyte characters enclose it within double quotes and use
   2538 escape codes. cf *Note Strings::.  Generating a multibyte symbol name
   2539 from a label is not currently supported.
   2540 
   2541    Each symbol has exactly one name.  Each name in an assembly language
   2542 program refers to exactly one symbol.  You may use that symbol name any
   2543 number of times in a program.
   2544 
   2545 Local Symbol Names
   2546 ------------------
   2547 
   2548 A local symbol is any symbol beginning with certain local label
   2549 prefixes.  By default, the local label prefix is `.L' for ELF systems or
   2550 `L' for traditional a.out systems, but each target may have its own set
   2551 of local label prefixes.  On the HPPA local symbols begin with `L$'.
   2552 
   2553    Local symbols are defined and used within the assembler, but they are
   2554 normally not saved in object files.  Thus, they are not visible when
   2555 debugging.  You may use the `-L' option (*note Include Local Symbols:
   2556 `-L': L.) to retain the local symbols in the object files.
   2557 
   2558 Local Labels
   2559 ------------
   2560 
   2561 Local labels help compilers and programmers use names temporarily.
   2562 They create symbols which are guaranteed to be unique over the entire
   2563 scope of the input source code and which can be referred to by a simple
   2564 notation.  To define a local label, write a label of the form `N:'
   2565 (where N represents any positive integer).  To refer to the most recent
   2566 previous definition of that label write `Nb', using the same number as
   2567 when you defined the label.  To refer to the next definition of a local
   2568 label, write `Nf'--the `b' stands for "backwards" and the `f' stands
   2569 for "forwards".
   2570 
   2571    There is no restriction on how you can use these labels, and you can
   2572 reuse them too.  So that it is possible to repeatedly define the same
   2573 local label (using the same number `N'), although you can only refer to
   2574 the most recently defined local label of that number (for a backwards
   2575 reference) or the next definition of a specific local label for a
   2576 forward reference.  It is also worth noting that the first 10 local
   2577 labels (`0:'...`9:') are implemented in a slightly more efficient
   2578 manner than the others.
   2579 
   2580    Here is an example:
   2581 
   2582      1:        branch 1f
   2583      2:        branch 1b
   2584      1:        branch 2f
   2585      2:        branch 1b
   2586 
   2587    Which is the equivalent of:
   2588 
   2589      label_1:  branch label_3
   2590      label_2:  branch label_1
   2591      label_3:  branch label_4
   2592      label_4:  branch label_3
   2593 
   2594    Local label names are only a notational device.  They are immediately
   2595 transformed into more conventional symbol names before the assembler
   2596 uses them.  The symbol names are stored in the symbol table, appear in
   2597 error messages, and are optionally emitted to the object file.  The
   2598 names are constructed using these parts:
   2599 
   2600 `_local label prefix_'
   2601      All local symbols begin with the system-specific local label
   2602      prefix.  Normally both `as' and `ld' forget symbols that start
   2603      with the local label prefix.  These labels are used for symbols
   2604      you are never intended to see.  If you use the `-L' option then
   2605      `as' retains these symbols in the object file. If you also
   2606      instruct `ld' to retain these symbols, you may use them in
   2607      debugging.
   2608 
   2609 `NUMBER'
   2610      This is the number that was used in the local label definition.
   2611      So if the label is written `55:' then the number is `55'.
   2612 
   2613 `C-B'
   2614      This unusual character is included so you do not accidentally
   2615      invent a symbol of the same name.  The character has ASCII value
   2616      of `\002' (control-B).
   2617 
   2618 `_ordinal number_'
   2619      This is a serial number to keep the labels distinct.  The first
   2620      definition of `0:' gets the number `1'.  The 15th definition of
   2621      `0:' gets the number `15', and so on.  Likewise the first
   2622      definition of `1:' gets the number `1' and its 15th definition
   2623      gets `15' as well.
   2624 
   2625    So for example, the first `1:' may be named `.L1C-B1', and the 44th
   2626 `3:' may be named `.L3C-B44'.
   2627 
   2628 Dollar Local Labels
   2629 -------------------
   2630 
   2631 `as' also supports an even more local form of local labels called
   2632 dollar labels.  These labels go out of scope (i.e., they become
   2633 undefined) as soon as a non-local label is defined.  Thus they remain
   2634 valid for only a small region of the input source code.  Normal local
   2635 labels, by contrast, remain in scope for the entire file, or until they
   2636 are redefined by another occurrence of the same local label.
   2637 
   2638    Dollar labels are defined in exactly the same way as ordinary local
   2639 labels, except that they have a dollar sign suffix to their numeric
   2640 value, e.g., `55$:'.
   2641 
   2642    They can also be distinguished from ordinary local labels by their
   2643 transformed names which use ASCII character `\001' (control-A) as the
   2644 magic character to distinguish them from ordinary labels.  For example,
   2645 the fifth definition of `6$' may be named `.L6C-A5'.
   2646 
   2647 
   2648 File: as.info,  Node: Dot,  Next: Symbol Attributes,  Prev: Symbol Names,  Up: Symbols
   2649 
   2650 5.4 The Special Dot Symbol
   2651 ==========================
   2652 
   2653 The special symbol `.' refers to the current address that `as' is
   2654 assembling into.  Thus, the expression `melvin: .long .' defines
   2655 `melvin' to contain its own address.  Assigning a value to `.' is
   2656 treated the same as a `.org' directive.  Thus, the expression `.=.+4'
   2657 is the same as saying `.space 4'.
   2658 
   2659 
   2660 File: as.info,  Node: Symbol Attributes,  Prev: Dot,  Up: Symbols
   2661 
   2662 5.5 Symbol Attributes
   2663 =====================
   2664 
   2665 Every symbol has, as well as its name, the attributes "Value" and
   2666 "Type".  Depending on output format, symbols can also have auxiliary
   2667 attributes.
   2668 
   2669    If you use a symbol without defining it, `as' assumes zero for all
   2670 these attributes, and probably won't warn you.  This makes the symbol
   2671 an externally defined symbol, which is generally what you would want.
   2672 
   2673 * Menu:
   2674 
   2675 * Symbol Value::                Value
   2676 * Symbol Type::                 Type
   2677 
   2678 
   2679 * a.out Symbols::               Symbol Attributes: `a.out'
   2680 
   2681 * COFF Symbols::                Symbol Attributes for COFF
   2682 
   2683 * SOM Symbols::                Symbol Attributes for SOM
   2684 
   2685 
   2686 File: as.info,  Node: Symbol Value,  Next: Symbol Type,  Up: Symbol Attributes
   2687 
   2688 5.5.1 Value
   2689 -----------
   2690 
   2691 The value of a symbol is (usually) 32 bits.  For a symbol which labels a
   2692 location in the text, data, bss or absolute sections the value is the
   2693 number of addresses from the start of that section to the label.
   2694 Naturally for text, data and bss sections the value of a symbol changes
   2695 as `ld' changes section base addresses during linking.  Absolute
   2696 symbols' values do not change during linking: that is why they are
   2697 called absolute.
   2698 
   2699    The value of an undefined symbol is treated in a special way.  If it
   2700 is 0 then the symbol is not defined in this assembler source file, and
   2701 `ld' tries to determine its value from other files linked into the same
   2702 program.  You make this kind of symbol simply by mentioning a symbol
   2703 name without defining it.  A non-zero value represents a `.comm' common
   2704 declaration.  The value is how much common storage to reserve, in bytes
   2705 (addresses).  The symbol refers to the first address of the allocated
   2706 storage.
   2707 
   2708 
   2709 File: as.info,  Node: Symbol Type,  Next: a.out Symbols,  Prev: Symbol Value,  Up: Symbol Attributes
   2710 
   2711 5.5.2 Type
   2712 ----------
   2713 
   2714 The type attribute of a symbol contains relocation (section)
   2715 information, any flag settings indicating that a symbol is external, and
   2716 (optionally), other information for linkers and debuggers.  The exact
   2717 format depends on the object-code output format in use.
   2718 
   2719 
   2720 File: as.info,  Node: a.out Symbols,  Next: COFF Symbols,  Prev: Symbol Type,  Up: Symbol Attributes
   2721 
   2722 5.5.3 Symbol Attributes: `a.out'
   2723 --------------------------------
   2724 
   2725 * Menu:
   2726 
   2727 * Symbol Desc::                 Descriptor
   2728 * Symbol Other::                Other
   2729 
   2730 
   2731 File: as.info,  Node: Symbol Desc,  Next: Symbol Other,  Up: a.out Symbols
   2732 
   2733 5.5.3.1 Descriptor
   2734 ..................
   2735 
   2736 This is an arbitrary 16-bit value.  You may establish a symbol's
   2737 descriptor value by using a `.desc' statement (*note `.desc': Desc.).
   2738 A descriptor value means nothing to `as'.
   2739 
   2740 
   2741 File: as.info,  Node: Symbol Other,  Prev: Symbol Desc,  Up: a.out Symbols
   2742 
   2743 5.5.3.2 Other
   2744 .............
   2745 
   2746 This is an arbitrary 8-bit value.  It means nothing to `as'.
   2747 
   2748 
   2749 File: as.info,  Node: COFF Symbols,  Next: SOM Symbols,  Prev: a.out Symbols,  Up: Symbol Attributes
   2750 
   2751 5.5.4 Symbol Attributes for COFF
   2752 --------------------------------
   2753 
   2754 The COFF format supports a multitude of auxiliary symbol attributes;
   2755 like the primary symbol attributes, they are set between `.def' and
   2756 `.endef' directives.
   2757 
   2758 5.5.4.1 Primary Attributes
   2759 ..........................
   2760 
   2761 The symbol name is set with `.def'; the value and type, respectively,
   2762 with `.val' and `.type'.
   2763 
   2764 5.5.4.2 Auxiliary Attributes
   2765 ............................
   2766 
   2767 The `as' directives `.dim', `.line', `.scl', `.size', `.tag', and
   2768 `.weak' can generate auxiliary symbol table information for COFF.
   2769 
   2770 
   2771 File: as.info,  Node: SOM Symbols,  Prev: COFF Symbols,  Up: Symbol Attributes
   2772 
   2773 5.5.5 Symbol Attributes for SOM
   2774 -------------------------------
   2775 
   2776 The SOM format for the HPPA supports a multitude of symbol attributes
   2777 set with the `.EXPORT' and `.IMPORT' directives.
   2778 
   2779    The attributes are described in `HP9000 Series 800 Assembly Language
   2780 Reference Manual' (HP 92432-90001) under the `IMPORT' and `EXPORT'
   2781 assembler directive documentation.
   2782 
   2783 
   2784 File: as.info,  Node: Expressions,  Next: Pseudo Ops,  Prev: Symbols,  Up: Top
   2785 
   2786 6 Expressions
   2787 *************
   2788 
   2789 An "expression" specifies an address or numeric value.  Whitespace may
   2790 precede and/or follow an expression.
   2791 
   2792    The result of an expression must be an absolute number, or else an
   2793 offset into a particular section.  If an expression is not absolute,
   2794 and there is not enough information when `as' sees the expression to
   2795 know its section, a second pass over the source program might be
   2796 necessary to interpret the expression--but the second pass is currently
   2797 not implemented.  `as' aborts with an error message in this situation.
   2798 
   2799 * Menu:
   2800 
   2801 * Empty Exprs::                 Empty Expressions
   2802 * Integer Exprs::               Integer Expressions
   2803 
   2804 
   2805 File: as.info,  Node: Empty Exprs,  Next: Integer Exprs,  Up: Expressions
   2806 
   2807 6.1 Empty Expressions
   2808 =====================
   2809 
   2810 An empty expression has no value: it is just whitespace or null.
   2811 Wherever an absolute expression is required, you may omit the
   2812 expression, and `as' assumes a value of (absolute) 0.  This is
   2813 compatible with other assemblers.
   2814 
   2815 
   2816 File: as.info,  Node: Integer Exprs,  Prev: Empty Exprs,  Up: Expressions
   2817 
   2818 6.2 Integer Expressions
   2819 =======================
   2820 
   2821 An "integer expression" is one or more _arguments_ delimited by
   2822 _operators_.
   2823 
   2824 * Menu:
   2825 
   2826 * Arguments::                   Arguments
   2827 * Operators::                   Operators
   2828 * Prefix Ops::                  Prefix Operators
   2829 * Infix Ops::                   Infix Operators
   2830 
   2831 
   2832 File: as.info,  Node: Arguments,  Next: Operators,  Up: Integer Exprs
   2833 
   2834 6.2.1 Arguments
   2835 ---------------
   2836 
   2837 "Arguments" are symbols, numbers or subexpressions.  In other contexts
   2838 arguments are sometimes called "arithmetic operands".  In this manual,
   2839 to avoid confusing them with the "instruction operands" of the machine
   2840 language, we use the term "argument" to refer to parts of expressions
   2841 only, reserving the word "operand" to refer only to machine instruction
   2842 operands.
   2843 
   2844    Symbols are evaluated to yield {SECTION NNN} where SECTION is one of
   2845 text, data, bss, absolute, or undefined.  NNN is a signed, 2's
   2846 complement 32 bit integer.
   2847 
   2848    Numbers are usually integers.
   2849 
   2850    A number can be a flonum or bignum.  In this case, you are warned
   2851 that only the low order 32 bits are used, and `as' pretends these 32
   2852 bits are an integer.  You may write integer-manipulating instructions
   2853 that act on exotic constants, compatible with other assemblers.
   2854 
   2855    Subexpressions are a left parenthesis `(' followed by an integer
   2856 expression, followed by a right parenthesis `)'; or a prefix operator
   2857 followed by an argument.
   2858 
   2859 
   2860 File: as.info,  Node: Operators,  Next: Prefix Ops,  Prev: Arguments,  Up: Integer Exprs
   2861 
   2862 6.2.2 Operators
   2863 ---------------
   2864 
   2865 "Operators" are arithmetic functions, like `+' or `%'.  Prefix
   2866 operators are followed by an argument.  Infix operators appear between
   2867 their arguments.  Operators may be preceded and/or followed by
   2868 whitespace.
   2869 
   2870 
   2871 File: as.info,  Node: Prefix Ops,  Next: Infix Ops,  Prev: Operators,  Up: Integer Exprs
   2872 
   2873 6.2.3 Prefix Operator
   2874 ---------------------
   2875 
   2876 `as' has the following "prefix operators".  They each take one
   2877 argument, which must be absolute.
   2878 
   2879 `-'
   2880      "Negation".  Two's complement negation.
   2881 
   2882 `~'
   2883      "Complementation".  Bitwise not.
   2884 
   2885 
   2886 File: as.info,  Node: Infix Ops,  Prev: Prefix Ops,  Up: Integer Exprs
   2887 
   2888 6.2.4 Infix Operators
   2889 ---------------------
   2890 
   2891 "Infix operators" take two arguments, one on either side.  Operators
   2892 have precedence, but operations with equal precedence are performed left
   2893 to right.  Apart from `+' or `-', both arguments must be absolute, and
   2894 the result is absolute.
   2895 
   2896   1. Highest Precedence
   2897 
   2898     `*'
   2899           "Multiplication".
   2900 
   2901     `/'
   2902           "Division".  Truncation is the same as the C operator `/'
   2903 
   2904     `%'
   2905           "Remainder".
   2906 
   2907     `<<'
   2908           "Shift Left".  Same as the C operator `<<'.
   2909 
   2910     `>>'
   2911           "Shift Right".  Same as the C operator `>>'.
   2912 
   2913   2. Intermediate precedence
   2914 
   2915     `|'
   2916           "Bitwise Inclusive Or".
   2917 
   2918     `&'
   2919           "Bitwise And".
   2920 
   2921     `^'
   2922           "Bitwise Exclusive Or".
   2923 
   2924     `!'
   2925           "Bitwise Or Not".
   2926 
   2927   3. Low Precedence
   2928 
   2929     `+'
   2930           "Addition".  If either argument is absolute, the result has
   2931           the section of the other argument.  You may not add together
   2932           arguments from different sections.
   2933 
   2934     `-'
   2935           "Subtraction".  If the right argument is absolute, the result
   2936           has the section of the left argument.  If both arguments are
   2937           in the same section, the result is absolute.  You may not
   2938           subtract arguments from different sections.
   2939 
   2940     `=='
   2941           "Is Equal To"
   2942 
   2943     `<>'
   2944     `!='
   2945           "Is Not Equal To"
   2946 
   2947     `<'
   2948           "Is Less Than"
   2949 
   2950     `>'
   2951           "Is Greater Than"
   2952 
   2953     `>='
   2954           "Is Greater Than Or Equal To"
   2955 
   2956     `<='
   2957           "Is Less Than Or Equal To"
   2958 
   2959           The comparison operators can be used as infix operators.  A
   2960           true results has a value of -1 whereas a false result has a
   2961           value of 0.   Note, these operators perform signed
   2962           comparisons.
   2963 
   2964   4. Lowest Precedence
   2965 
   2966     `&&'
   2967           "Logical And".
   2968 
   2969     `||'
   2970           "Logical Or".
   2971 
   2972           These two logical operations can be used to combine the
   2973           results of sub expressions.  Note, unlike the comparison
   2974           operators a true result returns a value of 1 but a false
   2975           results does still return 0.  Also note that the logical or
   2976           operator has a slightly lower precedence than logical and.
   2977 
   2978 
   2979    In short, it's only meaningful to add or subtract the _offsets_ in an
   2980 address; you can only have a defined section in one of the two
   2981 arguments.
   2982 
   2983 
   2984 File: as.info,  Node: Pseudo Ops,  Next: Object Attributes,  Prev: Expressions,  Up: Top
   2985 
   2986 7 Assembler Directives
   2987 **********************
   2988 
   2989 All assembler directives have names that begin with a period (`.').
   2990 The rest of the name is letters, usually in lower case.
   2991 
   2992    This chapter discusses directives that are available regardless of
   2993 the target machine configuration for the GNU assembler.  Some machine
   2994 configurations provide additional directives.  *Note Machine
   2995 Dependencies::.
   2996 
   2997 * Menu:
   2998 
   2999 * Abort::                       `.abort'
   3000 
   3001 * ABORT (COFF)::                `.ABORT'
   3002 
   3003 * Align::                       `.align ABS-EXPR , ABS-EXPR'
   3004 * Altmacro::                    `.altmacro'
   3005 * Ascii::                       `.ascii "STRING"'...
   3006 * Asciz::                       `.asciz "STRING"'...
   3007 * Balign::                      `.balign ABS-EXPR , ABS-EXPR'
   3008 * Bundle directives::           `.bundle_align_mode ABS-EXPR', `.bundle_lock', `.bundle_unlock'
   3009 * Byte::                        `.byte EXPRESSIONS'
   3010 * CFI directives::		`.cfi_startproc [simple]', `.cfi_endproc', etc.
   3011 * Comm::                        `.comm SYMBOL , LENGTH '
   3012 * Data::                        `.data SUBSECTION'
   3013 
   3014 * Def::                         `.def NAME'
   3015 
   3016 * Desc::                        `.desc SYMBOL, ABS-EXPRESSION'
   3017 
   3018 * Dim::                         `.dim'
   3019 
   3020 * Double::                      `.double FLONUMS'
   3021 * Eject::                       `.eject'
   3022 * Else::                        `.else'
   3023 * Elseif::                      `.elseif'
   3024 * End::				`.end'
   3025 
   3026 * Endef::                       `.endef'
   3027 
   3028 * Endfunc::                     `.endfunc'
   3029 * Endif::                       `.endif'
   3030 * Equ::                         `.equ SYMBOL, EXPRESSION'
   3031 * Equiv::                       `.equiv SYMBOL, EXPRESSION'
   3032 * Eqv::                         `.eqv SYMBOL, EXPRESSION'
   3033 * Err::				`.err'
   3034 * Error::			`.error STRING'
   3035 * Exitm::			`.exitm'
   3036 * Extern::                      `.extern'
   3037 * Fail::			`.fail'
   3038 * File::                        `.file'
   3039 * Fill::                        `.fill REPEAT , SIZE , VALUE'
   3040 * Float::                       `.float FLONUMS'
   3041 * Func::                        `.func'
   3042 * Global::                      `.global SYMBOL', `.globl SYMBOL'
   3043 
   3044 * Gnu_attribute::               `.gnu_attribute TAG,VALUE'
   3045 * Hidden::                      `.hidden NAMES'
   3046 
   3047 * hword::                       `.hword EXPRESSIONS'
   3048 * Ident::                       `.ident'
   3049 * If::                          `.if ABSOLUTE EXPRESSION'
   3050 * Incbin::                      `.incbin "FILE"[,SKIP[,COUNT]]'
   3051 * Include::                     `.include "FILE"'
   3052 * Int::                         `.int EXPRESSIONS'
   3053 
   3054 * Internal::                    `.internal NAMES'
   3055 
   3056 * Irp::				`.irp SYMBOL,VALUES'...
   3057 * Irpc::			`.irpc SYMBOL,VALUES'...
   3058 * Lcomm::                       `.lcomm SYMBOL , LENGTH'
   3059 * Lflags::                      `.lflags'
   3060 
   3061 * Line::                        `.line LINE-NUMBER'
   3062 
   3063 * Linkonce::			`.linkonce [TYPE]'
   3064 * List::                        `.list'
   3065 * Ln::                          `.ln LINE-NUMBER'
   3066 * Loc::                         `.loc FILENO LINENO'
   3067 * Loc_mark_labels::             `.loc_mark_labels ENABLE'
   3068 
   3069 * Local::                       `.local NAMES'
   3070 
   3071 * Long::                        `.long EXPRESSIONS'
   3072 
   3073 * Macro::			`.macro NAME ARGS'...
   3074 * MRI::				`.mri VAL'
   3075 * Noaltmacro::                  `.noaltmacro'
   3076 * Nolist::                      `.nolist'
   3077 * Octa::                        `.octa BIGNUMS'
   3078 * Offset::			`.offset LOC'
   3079 * Org::                         `.org NEW-LC, FILL'
   3080 * P2align::                     `.p2align ABS-EXPR, ABS-EXPR, ABS-EXPR'
   3081 
   3082 * PopSection::                  `.popsection'
   3083 * Previous::                    `.previous'
   3084 
   3085 * Print::			`.print STRING'
   3086 
   3087 * Protected::                   `.protected NAMES'
   3088 
   3089 * Psize::                       `.psize LINES, COLUMNS'
   3090 * Purgem::			`.purgem NAME'
   3091 
   3092 * PushSection::                 `.pushsection NAME'
   3093 
   3094 * Quad::                        `.quad BIGNUMS'
   3095 * Reloc::			`.reloc OFFSET, RELOC_NAME[, EXPRESSION]'
   3096 * Rept::			`.rept COUNT'
   3097 * Sbttl::                       `.sbttl "SUBHEADING"'
   3098 
   3099 * Scl::                         `.scl CLASS'
   3100 
   3101 * Section::                     `.section NAME[, FLAGS]'
   3102 
   3103 * Set::                         `.set SYMBOL, EXPRESSION'
   3104 * Short::                       `.short EXPRESSIONS'
   3105 * Single::                      `.single FLONUMS'
   3106 
   3107 * Size::                        `.size [NAME , EXPRESSION]'
   3108 
   3109 * Skip::                        `.skip SIZE , FILL'
   3110 
   3111 * Sleb128::			`.sleb128 EXPRESSIONS'
   3112 
   3113 * Space::                       `.space SIZE , FILL'
   3114 
   3115 * Stab::                        `.stabd, .stabn, .stabs'
   3116 
   3117 * String::                      `.string "STR"', `.string8 "STR"', `.string16 "STR"', `.string32 "STR"', `.string64 "STR"'
   3118 * Struct::			`.struct EXPRESSION'
   3119 
   3120 * SubSection::                  `.subsection'
   3121 * Symver::                      `.symver NAME,NAME2@NODENAME'
   3122 
   3123 
   3124 * Tag::                         `.tag STRUCTNAME'
   3125 
   3126 * Text::                        `.text SUBSECTION'
   3127 * Title::                       `.title "HEADING"'
   3128 
   3129 * Type::                        `.type <INT | NAME , TYPE DESCRIPTION>'
   3130 
   3131 * Uleb128::                     `.uleb128 EXPRESSIONS'
   3132 
   3133 * Val::                         `.val ADDR'
   3134 
   3135 
   3136 * Version::                     `.version "STRING"'
   3137 * VTableEntry::                 `.vtable_entry TABLE, OFFSET'
   3138 * VTableInherit::               `.vtable_inherit CHILD, PARENT'
   3139 
   3140 * Warning::			`.warning STRING'
   3141 * Weak::                        `.weak NAMES'
   3142 * Weakref::                     `.weakref ALIAS, SYMBOL'
   3143 * Word::                        `.word EXPRESSIONS'
   3144 * Deprecated::                  Deprecated Directives
   3145 
   3146 
   3147 File: as.info,  Node: Abort,  Next: ABORT (COFF),  Up: Pseudo Ops
   3148 
   3149 7.1 `.abort'
   3150 ============
   3151 
   3152 This directive stops the assembly immediately.  It is for compatibility
   3153 with other assemblers.  The original idea was that the assembly
   3154 language source would be piped into the assembler.  If the sender of
   3155 the source quit, it could use this directive tells `as' to quit also.
   3156 One day `.abort' will not be supported.
   3157 
   3158 
   3159 File: as.info,  Node: ABORT (COFF),  Next: Align,  Prev: Abort,  Up: Pseudo Ops
   3160 
   3161 7.2 `.ABORT' (COFF)
   3162 ===================
   3163 
   3164 When producing COFF output, `as' accepts this directive as a synonym
   3165 for `.abort'.
   3166 
   3167 
   3168 File: as.info,  Node: Align,  Next: Altmacro,  Prev: ABORT (COFF),  Up: Pseudo Ops
   3169 
   3170 7.3 `.align ABS-EXPR, ABS-EXPR, ABS-EXPR'
   3171 =========================================
   3172 
   3173 Pad the location counter (in the current subsection) to a particular
   3174 storage boundary.  The first expression (which must be absolute) is the
   3175 alignment required, as described below.
   3176 
   3177    The second expression (also absolute) gives the fill value to be
   3178 stored in the padding bytes.  It (and the comma) may be omitted.  If it
   3179 is omitted, the padding bytes are normally zero.  However, on some
   3180 systems, if the section is marked as containing code and the fill value
   3181 is omitted, the space is filled with no-op instructions.
   3182 
   3183    The third expression is also absolute, and is also optional.  If it
   3184 is present, it is the maximum number of bytes that should be skipped by
   3185 this alignment directive.  If doing the alignment would require
   3186 skipping more bytes than the specified maximum, then the alignment is
   3187 not done at all.  You can omit the fill value (the second argument)
   3188 entirely by simply using two commas after the required alignment; this
   3189 can be useful if you want the alignment to be filled with no-op
   3190 instructions when appropriate.
   3191 
   3192    The way the required alignment is specified varies from system to
   3193 system.  For the arc, hppa, i386 using ELF, i860, iq2000, m68k, or1k,
   3194 s390, sparc, tic4x, tic80 and xtensa, the first expression is the
   3195 alignment request in bytes.  For example `.align 8' advances the
   3196 location counter until it is a multiple of 8.  If the location counter
   3197 is already a multiple of 8, no change is needed.  For the tic54x, the
   3198 first expression is the alignment request in words.
   3199 
   3200    For other systems, including ppc, i386 using a.out format, arm and
   3201 strongarm, it is the number of low-order zero bits the location counter
   3202 must have after advancement.  For example `.align 3' advances the
   3203 location counter until it a multiple of 8.  If the location counter is
   3204 already a multiple of 8, no change is needed.
   3205 
   3206    This inconsistency is due to the different behaviors of the various
   3207 native assemblers for these systems which GAS must emulate.  GAS also
   3208 provides `.balign' and `.p2align' directives, described later, which
   3209 have a consistent behavior across all architectures (but are specific
   3210 to GAS).
   3211 
   3212 
   3213 File: as.info,  Node: Altmacro,  Next: Ascii,  Prev: Align,  Up: Pseudo Ops
   3214 
   3215 7.4 `.altmacro'
   3216 ===============
   3217 
   3218 Enable alternate macro mode, enabling:
   3219 
   3220 `LOCAL NAME [ , ... ]'
   3221      One additional directive, `LOCAL', is available.  It is used to
   3222      generate a string replacement for each of the NAME arguments, and
   3223      replace any instances of NAME in each macro expansion.  The
   3224      replacement string is unique in the assembly, and different for
   3225      each separate macro expansion.  `LOCAL' allows you to write macros
   3226      that define symbols, without fear of conflict between separate
   3227      macro expansions.
   3228 
   3229 `String delimiters'
   3230      You can write strings delimited in these other ways besides
   3231      `"STRING"':
   3232 
   3233     `'STRING''
   3234           You can delimit strings with single-quote characters.
   3235 
   3236     `<STRING>'
   3237           You can delimit strings with matching angle brackets.
   3238 
   3239 `single-character string escape'
   3240      To include any single character literally in a string (even if the
   3241      character would otherwise have some special meaning), you can
   3242      prefix the character with `!' (an exclamation mark).  For example,
   3243      you can write `<4.3 !> 5.4!!>' to get the literal text `4.3 >
   3244      5.4!'.
   3245 
   3246 `Expression results as strings'
   3247      You can write `%EXPR' to evaluate the expression EXPR and use the
   3248      result as a string.
   3249 
   3250 
   3251 File: as.info,  Node: Ascii,  Next: Asciz,  Prev: Altmacro,  Up: Pseudo Ops
   3252 
   3253 7.5 `.ascii "STRING"'...
   3254 ========================
   3255 
   3256 `.ascii' expects zero or more string literals (*note Strings::)
   3257 separated by commas.  It assembles each string (with no automatic
   3258 trailing zero byte) into consecutive addresses.
   3259 
   3260 
   3261 File: as.info,  Node: Asciz,  Next: Balign,  Prev: Ascii,  Up: Pseudo Ops
   3262 
   3263 7.6 `.asciz "STRING"'...
   3264 ========================
   3265 
   3266 `.asciz' is just like `.ascii', but each string is followed by a zero
   3267 byte.  The "z" in `.asciz' stands for "zero".
   3268 
   3269 
   3270 File: as.info,  Node: Balign,  Next: Bundle directives,  Prev: Asciz,  Up: Pseudo Ops
   3271 
   3272 7.7 `.balign[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR'
   3273 ==============================================
   3274 
   3275 Pad the location counter (in the current subsection) to a particular
   3276 storage boundary.  The first expression (which must be absolute) is the
   3277 alignment request in bytes.  For example `.balign 8' advances the
   3278 location counter until it is a multiple of 8.  If the location counter
   3279 is already a multiple of 8, no change is needed.
   3280 
   3281    The second expression (also absolute) gives the fill value to be
   3282 stored in the padding bytes.  It (and the comma) may be omitted.  If it
   3283 is omitted, the padding bytes are normally zero.  However, on some
   3284 systems, if the section is marked as containing code and the fill value
   3285 is omitted, the space is filled with no-op instructions.
   3286 
   3287    The third expression is also absolute, and is also optional.  If it
   3288 is present, it is the maximum number of bytes that should be skipped by
   3289 this alignment directive.  If doing the alignment would require
   3290 skipping more bytes than the specified maximum, then the alignment is
   3291 not done at all.  You can omit the fill value (the second argument)
   3292 entirely by simply using two commas after the required alignment; this
   3293 can be useful if you want the alignment to be filled with no-op
   3294 instructions when appropriate.
   3295 
   3296    The `.balignw' and `.balignl' directives are variants of the
   3297 `.balign' directive.  The `.balignw' directive treats the fill pattern
   3298 as a two byte word value.  The `.balignl' directives treats the fill
   3299 pattern as a four byte longword value.  For example, `.balignw
   3300 4,0x368d' will align to a multiple of 4.  If it skips two bytes, they
   3301 will be filled in with the value 0x368d (the exact placement of the
   3302 bytes depends upon the endianness of the processor).  If it skips 1 or
   3303 3 bytes, the fill value is undefined.
   3304 
   3305 
   3306 File: as.info,  Node: Bundle directives,  Next: Byte,  Prev: Balign,  Up: Pseudo Ops
   3307 
   3308 7.8 `.bundle_align_mode ABS-EXPR'
   3309 =================================
   3310 
   3311 `.bundle_align_mode' enables or disables "aligned instruction bundle"
   3312 mode.  In this mode, sequences of adjacent instructions are grouped
   3313 into fixed-sized "bundles".  If the argument is zero, this mode is
   3314 disabled (which is the default state).  If the argument it not zero, it
   3315 gives the size of an instruction bundle as a power of two (as for the
   3316 `.p2align' directive, *note P2align::).
   3317 
   3318    For some targets, it's an ABI requirement that no instruction may
   3319 span a certain aligned boundary.  A "bundle" is simply a sequence of
   3320 instructions that starts on an aligned boundary.  For example, if
   3321 ABS-EXPR is `5' then the bundle size is 32, so each aligned chunk of 32
   3322 bytes is a bundle.  When aligned instruction bundle mode is in effect,
   3323 no single instruction may span a boundary between bundles.  If an
   3324 instruction would start too close to the end of a bundle for the length
   3325 of that particular instruction to fit within the bundle, then the space
   3326 at the end of that bundle is filled with no-op instructions so the
   3327 instruction starts in the next bundle.  As a corollary, it's an error
   3328 if any single instruction's encoding is longer than the bundle size.
   3329 
   3330 7.9 `.bundle_lock' and `.bundle_unlock'
   3331 =======================================
   3332 
   3333 The `.bundle_lock' and directive `.bundle_unlock' directives allow
   3334 explicit control over instruction bundle padding.  These directives are
   3335 only valid when `.bundle_align_mode' has been used to enable aligned
   3336 instruction bundle mode.  It's an error if they appear when
   3337 `.bundle_align_mode' has not been used at all, or when the last
   3338 directive was `.bundle_align_mode 0'.
   3339 
   3340    For some targets, it's an ABI requirement that certain instructions
   3341 may appear only as part of specified permissible sequences of multiple
   3342 instructions, all within the same bundle.  A pair of `.bundle_lock' and
   3343 `.bundle_unlock' directives define a "bundle-locked" instruction
   3344 sequence.  For purposes of aligned instruction bundle mode, a sequence
   3345 starting with `.bundle_lock' and ending with `.bundle_unlock' is
   3346 treated as a single instruction.  That is, the entire sequence must fit
   3347 into a single bundle and may not span a bundle boundary.  If necessary,
   3348 no-op instructions will be inserted before the first instruction of the
   3349 sequence so that the whole sequence starts on an aligned bundle
   3350 boundary.  It's an error if the sequence is longer than the bundle size.
   3351 
   3352    For convenience when using `.bundle_lock' and `.bundle_unlock'
   3353 inside assembler macros (*note Macro::), bundle-locked sequences may be
   3354 nested.  That is, a second `.bundle_lock' directive before the next
   3355 `.bundle_unlock' directive has no effect except that it must be matched
   3356 by another closing `.bundle_unlock' so that there is the same number of
   3357 `.bundle_lock' and `.bundle_unlock' directives.
   3358 
   3359 
   3360 File: as.info,  Node: Byte,  Next: CFI directives,  Prev: Bundle directives,  Up: Pseudo Ops
   3361 
   3362 7.10 `.byte EXPRESSIONS'
   3363 ========================
   3364 
   3365 `.byte' expects zero or more expressions, separated by commas.  Each
   3366 expression is assembled into the next byte.
   3367 
   3368 
   3369 File: as.info,  Node: CFI directives,  Next: Comm,  Prev: Byte,  Up: Pseudo Ops
   3370 
   3371 7.11 `.cfi_sections SECTION_LIST'
   3372 =================================
   3373 
   3374 `.cfi_sections' may be used to specify whether CFI directives should
   3375 emit `.eh_frame' section and/or `.debug_frame' section.  If
   3376 SECTION_LIST is `.eh_frame', `.eh_frame' is emitted, if SECTION_LIST is
   3377 `.debug_frame', `.debug_frame' is emitted.  To emit both use
   3378 `.eh_frame, .debug_frame'.  The default if this directive is not used
   3379 is `.cfi_sections .eh_frame'.
   3380 
   3381 7.12 `.cfi_startproc [simple]'
   3382 ==============================
   3383 
   3384 `.cfi_startproc' is used at the beginning of each function that should
   3385 have an entry in `.eh_frame'. It initializes some internal data
   3386 structures. Don't forget to close the function by `.cfi_endproc'.
   3387 
   3388    Unless `.cfi_startproc' is used along with parameter `simple' it
   3389 also emits some architecture dependent initial CFI instructions.
   3390 
   3391 7.13 `.cfi_endproc'
   3392 ===================
   3393 
   3394 `.cfi_endproc' is used at the end of a function where it closes its
   3395 unwind entry previously opened by `.cfi_startproc', and emits it to
   3396 `.eh_frame'.
   3397 
   3398 7.14 `.cfi_personality ENCODING [, EXP]'
   3399 ========================================
   3400 
   3401 `.cfi_personality' defines personality routine and its encoding.
   3402 ENCODING must be a constant determining how the personality should be
   3403 encoded.  If it is 255 (`DW_EH_PE_omit'), second argument is not
   3404 present, otherwise second argument should be a constant or a symbol
   3405 name.  When using indirect encodings, the symbol provided should be the
   3406 location where personality can be loaded from, not the personality
   3407 routine itself.  The default after `.cfi_startproc' is
   3408 `.cfi_personality 0xff', no personality routine.
   3409 
   3410 7.15 `.cfi_lsda ENCODING [, EXP]'
   3411 =================================
   3412 
   3413 `.cfi_lsda' defines LSDA and its encoding.  ENCODING must be a constant
   3414 determining how the LSDA should be encoded.  If it is 255
   3415 (`DW_EH_PE_omit'), second argument is not present, otherwise second
   3416 argument should be a constant or a symbol name.  The default after
   3417 `.cfi_startproc' is `.cfi_lsda 0xff', no LSDA.
   3418 
   3419 7.16 `.cfi_def_cfa REGISTER, OFFSET'
   3420 ====================================
   3421 
   3422 `.cfi_def_cfa' defines a rule for computing CFA as: take address from
   3423 REGISTER and add OFFSET to it.
   3424 
   3425 7.17 `.cfi_def_cfa_register REGISTER'
   3426 =====================================
   3427 
   3428 `.cfi_def_cfa_register' modifies a rule for computing CFA. From now on
   3429 REGISTER will be used instead of the old one. Offset remains the same.
   3430 
   3431 7.18 `.cfi_def_cfa_offset OFFSET'
   3432 =================================
   3433 
   3434 `.cfi_def_cfa_offset' modifies a rule for computing CFA. Register
   3435 remains the same, but OFFSET is new. Note that it is the absolute
   3436 offset that will be added to a defined register to compute CFA address.
   3437 
   3438 7.19 `.cfi_adjust_cfa_offset OFFSET'
   3439 ====================================
   3440 
   3441 Same as `.cfi_def_cfa_offset' but OFFSET is a relative value that is
   3442 added/substracted from the previous offset.
   3443 
   3444 7.20 `.cfi_offset REGISTER, OFFSET'
   3445 ===================================
   3446 
   3447 Previous value of REGISTER is saved at offset OFFSET from CFA.
   3448 
   3449 7.21 `.cfi_rel_offset REGISTER, OFFSET'
   3450 =======================================
   3451 
   3452 Previous value of REGISTER is saved at offset OFFSET from the current
   3453 CFA register.  This is transformed to `.cfi_offset' using the known
   3454 displacement of the CFA register from the CFA.  This is often easier to
   3455 use, because the number will match the code it's annotating.
   3456 
   3457 7.22 `.cfi_register REGISTER1, REGISTER2'
   3458 =========================================
   3459 
   3460 Previous value of REGISTER1 is saved in register REGISTER2.
   3461 
   3462 7.23 `.cfi_restore REGISTER'
   3463 ============================
   3464 
   3465 `.cfi_restore' says that the rule for REGISTER is now the same as it
   3466 was at the beginning of the function, after all initial instruction
   3467 added by `.cfi_startproc' were executed.
   3468 
   3469 7.24 `.cfi_undefined REGISTER'
   3470 ==============================
   3471 
   3472 From now on the previous value of REGISTER can't be restored anymore.
   3473 
   3474 7.25 `.cfi_same_value REGISTER'
   3475 ===============================
   3476 
   3477 Current value of REGISTER is the same like in the previous frame, i.e.
   3478 no restoration needed.
   3479 
   3480 7.26 `.cfi_remember_state',
   3481 ===========================
   3482 
   3483 First save all current rules for all registers by `.cfi_remember_state',
   3484 then totally screw them up by subsequent `.cfi_*' directives and when
   3485 everything is hopelessly bad, use `.cfi_restore_state' to restore the
   3486 previous saved state.
   3487 
   3488 7.27 `.cfi_return_column REGISTER'
   3489 ==================================
   3490 
   3491 Change return column REGISTER, i.e. the return address is either
   3492 directly in REGISTER or can be accessed by rules for REGISTER.
   3493 
   3494 7.28 `.cfi_signal_frame'
   3495 ========================
   3496 
   3497 Mark current function as signal trampoline.
   3498 
   3499 7.29 `.cfi_window_save'
   3500 =======================
   3501 
   3502 SPARC register window has been saved.
   3503 
   3504 7.30 `.cfi_escape' EXPRESSION[, ...]
   3505 ====================================
   3506 
   3507 Allows the user to add arbitrary bytes to the unwind info.  One might
   3508 use this to add OS-specific CFI opcodes, or generic CFI opcodes that
   3509 GAS does not yet support.
   3510 
   3511 7.31 `.cfi_val_encoded_addr REGISTER, ENCODING, LABEL'
   3512 ======================================================
   3513 
   3514 The current value of REGISTER is LABEL.  The value of LABEL will be
   3515 encoded in the output file according to ENCODING; see the description
   3516 of `.cfi_personality' for details on this encoding.
   3517 
   3518    The usefulness of equating a register to a fixed label is probably
   3519 limited to the return address register.  Here, it can be useful to mark
   3520 a code segment that has only one return address which is reached by a
   3521 direct branch and no copy of the return address exists in memory or
   3522 another register.
   3523 
   3524 
   3525 File: as.info,  Node: Comm,  Next: Data,  Prev: CFI directives,  Up: Pseudo Ops
   3526 
   3527 7.32 `.comm SYMBOL , LENGTH '
   3528 =============================
   3529 
   3530 `.comm' declares a common symbol named SYMBOL.  When linking, a common
   3531 symbol in one object file may be merged with a defined or common symbol
   3532 of the same name in another object file.  If `ld' does not see a
   3533 definition for the symbol-just one or more common symbols-then it will
   3534 allocate LENGTH bytes of uninitialized memory.  LENGTH must be an
   3535 absolute expression.  If `ld' sees multiple common symbols with the
   3536 same name, and they do not all have the same size, it will allocate
   3537 space using the largest size.
   3538 
   3539    When using ELF or (as a GNU extension) PE, the `.comm' directive
   3540 takes an optional third argument.  This is the desired alignment of the
   3541 symbol, specified for ELF as a byte boundary (for example, an alignment
   3542 of 16 means that the least significant 4 bits of the address should be
   3543 zero), and for PE as a power of two (for example, an alignment of 5
   3544 means aligned to a 32-byte boundary).  The alignment must be an
   3545 absolute expression, and it must be a power of two.  If `ld' allocates
   3546 uninitialized memory for the common symbol, it will use the alignment
   3547 when placing the symbol.  If no alignment is specified, `as' will set
   3548 the alignment to the largest power of two less than or equal to the
   3549 size of the symbol, up to a maximum of 16 on ELF, or the default
   3550 section alignment of 4 on PE(1).
   3551 
   3552    The syntax for `.comm' differs slightly on the HPPA.  The syntax is
   3553 `SYMBOL .comm, LENGTH'; SYMBOL is optional.
   3554 
   3555    ---------- Footnotes ----------
   3556 
   3557    (1) This is not the same as the executable image file alignment
   3558 controlled by `ld''s `--section-alignment' option; image file sections
   3559 in PE are aligned to multiples of 4096, which is far too large an
   3560 alignment for ordinary variables.  It is rather the default alignment
   3561 for (non-debug) sections within object (`*.o') files, which are less
   3562 strictly aligned.
   3563 
   3564 
   3565 File: as.info,  Node: Data,  Next: Def,  Prev: Comm,  Up: Pseudo Ops
   3566 
   3567 7.33 `.data SUBSECTION'
   3568 =======================
   3569 
   3570 `.data' tells `as' to assemble the following statements onto the end of
   3571 the data subsection numbered SUBSECTION (which is an absolute
   3572 expression).  If SUBSECTION is omitted, it defaults to zero.
   3573 
   3574 
   3575 File: as.info,  Node: Def,  Next: Desc,  Prev: Data,  Up: Pseudo Ops
   3576 
   3577 7.34 `.def NAME'
   3578 ================
   3579 
   3580 Begin defining debugging information for a symbol NAME; the definition
   3581 extends until the `.endef' directive is encountered.
   3582 
   3583 
   3584 File: as.info,  Node: Desc,  Next: Dim,  Prev: Def,  Up: Pseudo Ops
   3585 
   3586 7.35 `.desc SYMBOL, ABS-EXPRESSION'
   3587 ===================================
   3588 
   3589 This directive sets the descriptor of the symbol (*note Symbol
   3590 Attributes::) to the low 16 bits of an absolute expression.
   3591 
   3592    The `.desc' directive is not available when `as' is configured for
   3593 COFF output; it is only for `a.out' or `b.out' object format.  For the
   3594 sake of compatibility, `as' accepts it, but produces no output, when
   3595 configured for COFF.
   3596 
   3597 
   3598 File: as.info,  Node: Dim,  Next: Double,  Prev: Desc,  Up: Pseudo Ops
   3599 
   3600 7.36 `.dim'
   3601 ===========
   3602 
   3603 This directive is generated by compilers to include auxiliary debugging
   3604 information in the symbol table.  It is only permitted inside
   3605 `.def'/`.endef' pairs.
   3606 
   3607 
   3608 File: as.info,  Node: Double,  Next: Eject,  Prev: Dim,  Up: Pseudo Ops
   3609 
   3610 7.37 `.double FLONUMS'
   3611 ======================
   3612 
   3613 `.double' expects zero or more flonums, separated by commas.  It
   3614 assembles floating point numbers.  The exact kind of floating point
   3615 numbers emitted depends on how `as' is configured.  *Note Machine
   3616 Dependencies::.
   3617 
   3618 
   3619 File: as.info,  Node: Eject,  Next: Else,  Prev: Double,  Up: Pseudo Ops
   3620 
   3621 7.38 `.eject'
   3622 =============
   3623 
   3624 Force a page break at this point, when generating assembly listings.
   3625 
   3626 
   3627 File: as.info,  Node: Else,  Next: Elseif,  Prev: Eject,  Up: Pseudo Ops
   3628 
   3629 7.39 `.else'
   3630 ============
   3631 
   3632 `.else' is part of the `as' support for conditional assembly; see *Note
   3633 `.if': If.  It marks the beginning of a section of code to be assembled
   3634 if the condition for the preceding `.if' was false.
   3635 
   3636 
   3637 File: as.info,  Node: Elseif,  Next: End,  Prev: Else,  Up: Pseudo Ops
   3638 
   3639 7.40 `.elseif'
   3640 ==============
   3641 
   3642 `.elseif' is part of the `as' support for conditional assembly; see
   3643 *Note `.if': If.  It is shorthand for beginning a new `.if' block that
   3644 would otherwise fill the entire `.else' section.
   3645 
   3646 
   3647 File: as.info,  Node: End,  Next: Endef,  Prev: Elseif,  Up: Pseudo Ops
   3648 
   3649 7.41 `.end'
   3650 ===========
   3651 
   3652 `.end' marks the end of the assembly file.  `as' does not process
   3653 anything in the file past the `.end' directive.
   3654 
   3655 
   3656 File: as.info,  Node: Endef,  Next: Endfunc,  Prev: End,  Up: Pseudo Ops
   3657 
   3658 7.42 `.endef'
   3659 =============
   3660 
   3661 This directive flags the end of a symbol definition begun with `.def'.
   3662 
   3663 
   3664 File: as.info,  Node: Endfunc,  Next: Endif,  Prev: Endef,  Up: Pseudo Ops
   3665 
   3666 7.43 `.endfunc'
   3667 ===============
   3668 
   3669 `.endfunc' marks the end of a function specified with `.func'.
   3670 
   3671 
   3672 File: as.info,  Node: Endif,  Next: Equ,  Prev: Endfunc,  Up: Pseudo Ops
   3673 
   3674 7.44 `.endif'
   3675 =============
   3676 
   3677 `.endif' is part of the `as' support for conditional assembly; it marks
   3678 the end of a block of code that is only assembled conditionally.  *Note
   3679 `.if': If.
   3680 
   3681 
   3682 File: as.info,  Node: Equ,  Next: Equiv,  Prev: Endif,  Up: Pseudo Ops
   3683 
   3684 7.45 `.equ SYMBOL, EXPRESSION'
   3685 ==============================
   3686 
   3687 This directive sets the value of SYMBOL to EXPRESSION.  It is
   3688 synonymous with `.set'; see *Note `.set': Set.
   3689 
   3690    The syntax for `equ' on the HPPA is `SYMBOL .equ EXPRESSION'.
   3691 
   3692    The syntax for `equ' on the Z80 is `SYMBOL equ EXPRESSION'.  On the
   3693 Z80 it is an eror if SYMBOL is already defined, but the symbol is not
   3694 protected from later redefinition.  Compare *Note Equiv::.
   3695 
   3696 
   3697 File: as.info,  Node: Equiv,  Next: Eqv,  Prev: Equ,  Up: Pseudo Ops
   3698 
   3699 7.46 `.equiv SYMBOL, EXPRESSION'
   3700 ================================
   3701 
   3702 The `.equiv' directive is like `.equ' and `.set', except that the
   3703 assembler will signal an error if SYMBOL is already defined.  Note a
   3704 symbol which has been referenced but not actually defined is considered
   3705 to be undefined.
   3706 
   3707    Except for the contents of the error message, this is roughly
   3708 equivalent to
   3709      .ifdef SYM
   3710      .err
   3711      .endif
   3712      .equ SYM,VAL
   3713    plus it protects the symbol from later redefinition.
   3714 
   3715 
   3716 File: as.info,  Node: Eqv,  Next: Err,  Prev: Equiv,  Up: Pseudo Ops
   3717 
   3718 7.47 `.eqv SYMBOL, EXPRESSION'
   3719 ==============================
   3720 
   3721 The `.eqv' directive is like `.equiv', but no attempt is made to
   3722 evaluate the expression or any part of it immediately.  Instead each
   3723 time the resulting symbol is used in an expression, a snapshot of its
   3724 current value is taken.
   3725 
   3726 
   3727 File: as.info,  Node: Err,  Next: Error,  Prev: Eqv,  Up: Pseudo Ops
   3728 
   3729 7.48 `.err'
   3730 ===========
   3731 
   3732 If `as' assembles a `.err' directive, it will print an error message
   3733 and, unless the `-Z' option was used, it will not generate an object
   3734 file.  This can be used to signal an error in conditionally compiled
   3735 code.
   3736 
   3737 
   3738 File: as.info,  Node: Error,  Next: Exitm,  Prev: Err,  Up: Pseudo Ops
   3739 
   3740 7.49 `.error "STRING"'
   3741 ======================
   3742 
   3743 Similarly to `.err', this directive emits an error, but you can specify
   3744 a string that will be emitted as the error message.  If you don't
   3745 specify the message, it defaults to `".error directive invoked in
   3746 source file"'.  *Note Error and Warning Messages: Errors.
   3747 
   3748       .error "This code has not been assembled and tested."
   3749 
   3750 
   3751 File: as.info,  Node: Exitm,  Next: Extern,  Prev: Error,  Up: Pseudo Ops
   3752 
   3753 7.50 `.exitm'
   3754 =============
   3755 
   3756 Exit early from the current macro definition.  *Note Macro::.
   3757 
   3758 
   3759 File: as.info,  Node: Extern,  Next: Fail,  Prev: Exitm,  Up: Pseudo Ops
   3760 
   3761 7.51 `.extern'
   3762 ==============
   3763 
   3764 `.extern' is accepted in the source program--for compatibility with
   3765 other assemblers--but it is ignored.  `as' treats all undefined symbols
   3766 as external.
   3767 
   3768 
   3769 File: as.info,  Node: Fail,  Next: File,  Prev: Extern,  Up: Pseudo Ops
   3770 
   3771 7.52 `.fail EXPRESSION'
   3772 =======================
   3773 
   3774 Generates an error or a warning.  If the value of the EXPRESSION is 500
   3775 or more, `as' will print a warning message.  If the value is less than
   3776 500, `as' will print an error message.  The message will include the
   3777 value of EXPRESSION.  This can occasionally be useful inside complex
   3778 nested macros or conditional assembly.
   3779 
   3780 
   3781 File: as.info,  Node: File,  Next: Fill,  Prev: Fail,  Up: Pseudo Ops
   3782 
   3783 7.53 `.file'
   3784 ============
   3785 
   3786 There are two different versions of the `.file' directive.  Targets
   3787 that support DWARF2 line number information use the DWARF2 version of
   3788 `.file'.  Other targets use the default version.
   3789 
   3790 Default Version
   3791 ---------------
   3792 
   3793 This version of the `.file' directive tells `as' that we are about to
   3794 start a new logical file.  The syntax is:
   3795 
   3796      .file STRING
   3797 
   3798    STRING is the new file name.  In general, the filename is recognized
   3799 whether or not it is surrounded by quotes `"'; but if you wish to
   3800 specify an empty file name, you must give the quotes-`""'.  This
   3801 statement may go away in future: it is only recognized to be compatible
   3802 with old `as' programs.
   3803 
   3804 DWARF2 Version
   3805 --------------
   3806 
   3807 When emitting DWARF2 line number information, `.file' assigns filenames
   3808 to the `.debug_line' file name table.  The syntax is:
   3809 
   3810      .file FILENO FILENAME
   3811 
   3812    The FILENO operand should be a unique positive integer to use as the
   3813 index of the entry in the table.  The FILENAME operand is a C string
   3814 literal.
   3815 
   3816    The detail of filename indices is exposed to the user because the
   3817 filename table is shared with the `.debug_info' section of the DWARF2
   3818 debugging information, and thus the user must know the exact indices
   3819 that table entries will have.
   3820 
   3821 
   3822 File: as.info,  Node: Fill,  Next: Float,  Prev: File,  Up: Pseudo Ops
   3823 
   3824 7.54 `.fill REPEAT , SIZE , VALUE'
   3825 ==================================
   3826 
   3827 REPEAT, SIZE and VALUE are absolute expressions.  This emits REPEAT
   3828 copies of SIZE bytes.  REPEAT may be zero or more.  SIZE may be zero or
   3829 more, but if it is more than 8, then it is deemed to have the value 8,
   3830 compatible with other people's assemblers.  The contents of each REPEAT
   3831 bytes is taken from an 8-byte number.  The highest order 4 bytes are
   3832 zero.  The lowest order 4 bytes are VALUE rendered in the byte-order of
   3833 an integer on the computer `as' is assembling for.  Each SIZE bytes in
   3834 a repetition is taken from the lowest order SIZE bytes of this number.
   3835 Again, this bizarre behavior is compatible with other people's
   3836 assemblers.
   3837 
   3838    SIZE and VALUE are optional.  If the second comma and VALUE are
   3839 absent, VALUE is assumed zero.  If the first comma and following tokens
   3840 are absent, SIZE is assumed to be 1.
   3841 
   3842 
   3843 File: as.info,  Node: Float,  Next: Func,  Prev: Fill,  Up: Pseudo Ops
   3844 
   3845 7.55 `.float FLONUMS'
   3846 =====================
   3847 
   3848 This directive assembles zero or more flonums, separated by commas.  It
   3849 has the same effect as `.single'.  The exact kind of floating point
   3850 numbers emitted depends on how `as' is configured.  *Note Machine
   3851 Dependencies::.
   3852 
   3853 
   3854 File: as.info,  Node: Func,  Next: Global,  Prev: Float,  Up: Pseudo Ops
   3855 
   3856 7.56 `.func NAME[,LABEL]'
   3857 =========================
   3858 
   3859 `.func' emits debugging information to denote function NAME, and is
   3860 ignored unless the file is assembled with debugging enabled.  Only
   3861 `--gstabs[+]' is currently supported.  LABEL is the entry point of the
   3862 function and if omitted NAME prepended with the `leading char' is used.
   3863 `leading char' is usually `_' or nothing, depending on the target.  All
   3864 functions are currently defined to have `void' return type.  The
   3865 function must be terminated with `.endfunc'.
   3866 
   3867 
   3868 File: as.info,  Node: Global,  Next: Gnu_attribute,  Prev: Func,  Up: Pseudo Ops
   3869 
   3870 7.57 `.global SYMBOL', `.globl SYMBOL'
   3871 ======================================
   3872 
   3873 `.global' makes the symbol visible to `ld'.  If you define SYMBOL in
   3874 your partial program, its value is made available to other partial
   3875 programs that are linked with it.  Otherwise, SYMBOL takes its
   3876 attributes from a symbol of the same name from another file linked into
   3877 the same program.
   3878 
   3879    Both spellings (`.globl' and `.global') are accepted, for
   3880 compatibility with other assemblers.
   3881 
   3882    On the HPPA, `.global' is not always enough to make it accessible to
   3883 other partial programs.  You may need the HPPA-only `.EXPORT' directive
   3884 as well.  *Note HPPA Assembler Directives: HPPA Directives.
   3885 
   3886 
   3887 File: as.info,  Node: Gnu_attribute,  Next: Hidden,  Prev: Global,  Up: Pseudo Ops
   3888 
   3889 7.58 `.gnu_attribute TAG,VALUE'
   3890 ===============================
   3891 
   3892 Record a GNU object attribute for this file.  *Note Object Attributes::.
   3893 
   3894 
   3895 File: as.info,  Node: Hidden,  Next: hword,  Prev: Gnu_attribute,  Up: Pseudo Ops
   3896 
   3897 7.59 `.hidden NAMES'
   3898 ====================
   3899 
   3900 This is one of the ELF visibility directives.  The other two are
   3901 `.internal' (*note `.internal': Internal.) and `.protected' (*note
   3902 `.protected': Protected.).
   3903 
   3904    This directive overrides the named symbols default visibility (which
   3905 is set by their binding: local, global or weak).  The directive sets
   3906 the visibility to `hidden' which means that the symbols are not visible
   3907 to other components.  Such symbols are always considered to be
   3908 `protected' as well.
   3909 
   3910 
   3911 File: as.info,  Node: hword,  Next: Ident,  Prev: Hidden,  Up: Pseudo Ops
   3912 
   3913 7.60 `.hword EXPRESSIONS'
   3914 =========================
   3915 
   3916 This expects zero or more EXPRESSIONS, and emits a 16 bit number for
   3917 each.
   3918 
   3919    This directive is a synonym for `.short'; depending on the target
   3920 architecture, it may also be a synonym for `.word'.
   3921 
   3922 
   3923 File: as.info,  Node: Ident,  Next: If,  Prev: hword,  Up: Pseudo Ops
   3924 
   3925 7.61 `.ident'
   3926 =============
   3927 
   3928 This directive is used by some assemblers to place tags in object
   3929 files.  The behavior of this directive varies depending on the target.
   3930 When using the a.out object file format, `as' simply accepts the
   3931 directive for source-file compatibility with existing assemblers, but
   3932 does not emit anything for it.  When using COFF, comments are emitted
   3933 to the `.comment' or `.rdata' section, depending on the target.  When
   3934 using ELF, comments are emitted to the `.comment' section.
   3935 
   3936 
   3937 File: as.info,  Node: If,  Next: Incbin,  Prev: Ident,  Up: Pseudo Ops
   3938 
   3939 7.62 `.if ABSOLUTE EXPRESSION'
   3940 ==============================
   3941 
   3942 `.if' marks the beginning of a section of code which is only considered
   3943 part of the source program being assembled if the argument (which must
   3944 be an ABSOLUTE EXPRESSION) is non-zero.  The end of the conditional
   3945 section of code must be marked by `.endif' (*note `.endif': Endif.);
   3946 optionally, you may include code for the alternative condition, flagged
   3947 by `.else' (*note `.else': Else.).  If you have several conditions to
   3948 check, `.elseif' may be used to avoid nesting blocks if/else within
   3949 each subsequent `.else' block.
   3950 
   3951    The following variants of `.if' are also supported:
   3952 `.ifdef SYMBOL'
   3953      Assembles the following section of code if the specified SYMBOL
   3954      has been defined.  Note a symbol which has been referenced but not
   3955      yet defined is considered to be undefined.
   3956 
   3957 `.ifb TEXT'
   3958      Assembles the following section of code if the operand is blank
   3959      (empty).
   3960 
   3961 `.ifc STRING1,STRING2'
   3962      Assembles the following section of code if the two strings are the
   3963      same.  The strings may be optionally quoted with single quotes.
   3964      If they are not quoted, the first string stops at the first comma,
   3965      and the second string stops at the end of the line.  Strings which
   3966      contain whitespace should be quoted.  The string comparison is
   3967      case sensitive.
   3968 
   3969 `.ifeq ABSOLUTE EXPRESSION'
   3970      Assembles the following section of code if the argument is zero.
   3971 
   3972 `.ifeqs STRING1,STRING2'
   3973      Another form of `.ifc'.  The strings must be quoted using double
   3974      quotes.
   3975 
   3976 `.ifge ABSOLUTE EXPRESSION'
   3977      Assembles the following section of code if the argument is greater
   3978      than or equal to zero.
   3979 
   3980 `.ifgt ABSOLUTE EXPRESSION'
   3981      Assembles the following section of code if the argument is greater
   3982      than zero.
   3983 
   3984 `.ifle ABSOLUTE EXPRESSION'
   3985      Assembles the following section of code if the argument is less
   3986      than or equal to zero.
   3987 
   3988 `.iflt ABSOLUTE EXPRESSION'
   3989      Assembles the following section of code if the argument is less
   3990      than zero.
   3991 
   3992 `.ifnb TEXT'
   3993      Like `.ifb', but the sense of the test is reversed: this assembles
   3994      the following section of code if the operand is non-blank
   3995      (non-empty).
   3996 
   3997 `.ifnc STRING1,STRING2.'
   3998      Like `.ifc', but the sense of the test is reversed: this assembles
   3999      the following section of code if the two strings are not the same.
   4000 
   4001 `.ifndef SYMBOL'
   4002 `.ifnotdef SYMBOL'
   4003      Assembles the following section of code if the specified SYMBOL
   4004      has not been defined.  Both spelling variants are equivalent.
   4005      Note a symbol which has been referenced but not yet defined is
   4006      considered to be undefined.
   4007 
   4008 `.ifne ABSOLUTE EXPRESSION'
   4009      Assembles the following section of code if the argument is not
   4010      equal to zero (in other words, this is equivalent to `.if').
   4011 
   4012 `.ifnes STRING1,STRING2'
   4013      Like `.ifeqs', but the sense of the test is reversed: this
   4014      assembles the following section of code if the two strings are not
   4015      the same.
   4016 
   4017 
   4018 File: as.info,  Node: Incbin,  Next: Include,  Prev: If,  Up: Pseudo Ops
   4019 
   4020 7.63 `.incbin "FILE"[,SKIP[,COUNT]]'
   4021 ====================================
   4022 
   4023 The `incbin' directive includes FILE verbatim at the current location.
   4024 You can control the search paths used with the `-I' command-line option
   4025 (*note Command-Line Options: Invoking.).  Quotation marks are required
   4026 around FILE.
   4027 
   4028    The SKIP argument skips a number of bytes from the start of the
   4029 FILE.  The COUNT argument indicates the maximum number of bytes to
   4030 read.  Note that the data is not aligned in any way, so it is the user's
   4031 responsibility to make sure that proper alignment is provided both
   4032 before and after the `incbin' directive.
   4033 
   4034 
   4035 File: as.info,  Node: Include,  Next: Int,  Prev: Incbin,  Up: Pseudo Ops
   4036 
   4037 7.64 `.include "FILE"'
   4038 ======================
   4039 
   4040 This directive provides a way to include supporting files at specified
   4041 points in your source program.  The code from FILE is assembled as if
   4042 it followed the point of the `.include'; when the end of the included
   4043 file is reached, assembly of the original file continues.  You can
   4044 control the search paths used with the `-I' command-line option (*note
   4045 Command-Line Options: Invoking.).  Quotation marks are required around
   4046 FILE.
   4047 
   4048 
   4049 File: as.info,  Node: Int,  Next: Internal,  Prev: Include,  Up: Pseudo Ops
   4050 
   4051 7.65 `.int EXPRESSIONS'
   4052 =======================
   4053 
   4054 Expect zero or more EXPRESSIONS, of any section, separated by commas.
   4055 For each expression, emit a number that, at run time, is the value of
   4056 that expression.  The byte order and bit size of the number depends on
   4057 what kind of target the assembly is for.
   4058 
   4059 
   4060 File: as.info,  Node: Internal,  Next: Irp,  Prev: Int,  Up: Pseudo Ops
   4061 
   4062 7.66 `.internal NAMES'
   4063 ======================
   4064 
   4065 This is one of the ELF visibility directives.  The other two are
   4066 `.hidden' (*note `.hidden': Hidden.) and `.protected' (*note
   4067 `.protected': Protected.).
   4068 
   4069    This directive overrides the named symbols default visibility (which
   4070 is set by their binding: local, global or weak).  The directive sets
   4071 the visibility to `internal' which means that the symbols are
   4072 considered to be `hidden' (i.e., not visible to other components), and
   4073 that some extra, processor specific processing must also be performed
   4074 upon the  symbols as well.
   4075 
   4076 
   4077 File: as.info,  Node: Irp,  Next: Irpc,  Prev: Internal,  Up: Pseudo Ops
   4078 
   4079 7.67 `.irp SYMBOL,VALUES'...
   4080 ============================
   4081 
   4082 Evaluate a sequence of statements assigning different values to SYMBOL.
   4083 The sequence of statements starts at the `.irp' directive, and is
   4084 terminated by an `.endr' directive.  For each VALUE, SYMBOL is set to
   4085 VALUE, and the sequence of statements is assembled.  If no VALUE is
   4086 listed, the sequence of statements is assembled once, with SYMBOL set
   4087 to the null string.  To refer to SYMBOL within the sequence of
   4088 statements, use \SYMBOL.
   4089 
   4090    For example, assembling
   4091 
   4092              .irp    param,1,2,3
   4093              move    d\param,sp@-
   4094              .endr
   4095 
   4096    is equivalent to assembling
   4097 
   4098              move    d1,sp@-
   4099              move    d2,sp@-
   4100              move    d3,sp@-
   4101 
   4102    For some caveats with the spelling of SYMBOL, see also *Note Macro::.
   4103 
   4104 
   4105 File: as.info,  Node: Irpc,  Next: Lcomm,  Prev: Irp,  Up: Pseudo Ops
   4106 
   4107 7.68 `.irpc SYMBOL,VALUES'...
   4108 =============================
   4109 
   4110 Evaluate a sequence of statements assigning different values to SYMBOL.
   4111 The sequence of statements starts at the `.irpc' directive, and is
   4112 terminated by an `.endr' directive.  For each character in VALUE,
   4113 SYMBOL is set to the character, and the sequence of statements is
   4114 assembled.  If no VALUE is listed, the sequence of statements is
   4115 assembled once, with SYMBOL set to the null string.  To refer to SYMBOL
   4116 within the sequence of statements, use \SYMBOL.
   4117 
   4118    For example, assembling
   4119 
   4120              .irpc    param,123
   4121              move    d\param,sp@-
   4122              .endr
   4123 
   4124    is equivalent to assembling
   4125 
   4126              move    d1,sp@-
   4127              move    d2,sp@-
   4128              move    d3,sp@-
   4129 
   4130    For some caveats with the spelling of SYMBOL, see also the discussion
   4131 at *Note Macro::.
   4132 
   4133 
   4134 File: as.info,  Node: Lcomm,  Next: Lflags,  Prev: Irpc,  Up: Pseudo Ops
   4135 
   4136 7.69 `.lcomm SYMBOL , LENGTH'
   4137 =============================
   4138 
   4139 Reserve LENGTH (an absolute expression) bytes for a local common
   4140 denoted by SYMBOL.  The section and value of SYMBOL are those of the
   4141 new local common.  The addresses are allocated in the bss section, so
   4142 that at run-time the bytes start off zeroed.  SYMBOL is not declared
   4143 global (*note `.global': Global.), so is normally not visible to `ld'.
   4144 
   4145    Some targets permit a third argument to be used with `.lcomm'.  This
   4146 argument specifies the desired alignment of the symbol in the bss
   4147 section.
   4148 
   4149    The syntax for `.lcomm' differs slightly on the HPPA.  The syntax is
   4150 `SYMBOL .lcomm, LENGTH'; SYMBOL is optional.
   4151 
   4152 
   4153 File: as.info,  Node: Lflags,  Next: Line,  Prev: Lcomm,  Up: Pseudo Ops
   4154 
   4155 7.70 `.lflags'
   4156 ==============
   4157 
   4158 `as' accepts this directive, for compatibility with other assemblers,
   4159 but ignores it.
   4160 
   4161 
   4162 File: as.info,  Node: Line,  Next: Linkonce,  Prev: Lflags,  Up: Pseudo Ops
   4163 
   4164 7.71 `.line LINE-NUMBER'
   4165 ========================
   4166 
   4167 Change the logical line number.  LINE-NUMBER must be an absolute
   4168 expression.  The next line has that logical line number.  Therefore any
   4169 other statements on the current line (after a statement separator
   4170 character) are reported as on logical line number LINE-NUMBER - 1.  One
   4171 day `as' will no longer support this directive: it is recognized only
   4172 for compatibility with existing assembler programs.
   4173 
   4174 Even though this is a directive associated with the `a.out' or `b.out'
   4175 object-code formats, `as' still recognizes it when producing COFF
   4176 output, and treats `.line' as though it were the COFF `.ln' _if_ it is
   4177 found outside a `.def'/`.endef' pair.
   4178 
   4179    Inside a `.def', `.line' is, instead, one of the directives used by
   4180 compilers to generate auxiliary symbol information for debugging.
   4181 
   4182 
   4183 File: as.info,  Node: Linkonce,  Next: List,  Prev: Line,  Up: Pseudo Ops
   4184 
   4185 7.72 `.linkonce [TYPE]'
   4186 =======================
   4187 
   4188 Mark the current section so that the linker only includes a single copy
   4189 of it.  This may be used to include the same section in several
   4190 different object files, but ensure that the linker will only include it
   4191 once in the final output file.  The `.linkonce' pseudo-op must be used
   4192 for each instance of the section.  Duplicate sections are detected
   4193 based on the section name, so it should be unique.
   4194 
   4195    This directive is only supported by a few object file formats; as of
   4196 this writing, the only object file format which supports it is the
   4197 Portable Executable format used on Windows NT.
   4198 
   4199    The TYPE argument is optional.  If specified, it must be one of the
   4200 following strings.  For example:
   4201      .linkonce same_size
   4202    Not all types may be supported on all object file formats.
   4203 
   4204 `discard'
   4205      Silently discard duplicate sections.  This is the default.
   4206 
   4207 `one_only'
   4208      Warn if there are duplicate sections, but still keep only one copy.
   4209 
   4210 `same_size'
   4211      Warn if any of the duplicates have different sizes.
   4212 
   4213 `same_contents'
   4214      Warn if any of the duplicates do not have exactly the same
   4215      contents.
   4216 
   4217 
   4218 File: as.info,  Node: List,  Next: Ln,  Prev: Linkonce,  Up: Pseudo Ops
   4219 
   4220 7.73 `.list'
   4221 ============
   4222 
   4223 Control (in conjunction with the `.nolist' directive) whether or not
   4224 assembly listings are generated.  These two directives maintain an
   4225 internal counter (which is zero initially).   `.list' increments the
   4226 counter, and `.nolist' decrements it.  Assembly listings are generated
   4227 whenever the counter is greater than zero.
   4228 
   4229    By default, listings are disabled.  When you enable them (with the
   4230 `-a' command line option; *note Command-Line Options: Invoking.), the
   4231 initial value of the listing counter is one.
   4232 
   4233 
   4234 File: as.info,  Node: Ln,  Next: Loc,  Prev: List,  Up: Pseudo Ops
   4235 
   4236 7.74 `.ln LINE-NUMBER'
   4237 ======================
   4238 
   4239 `.ln' is a synonym for `.line'.
   4240 
   4241 
   4242 File: as.info,  Node: Loc,  Next: Loc_mark_labels,  Prev: Ln,  Up: Pseudo Ops
   4243 
   4244 7.75 `.loc FILENO LINENO [COLUMN] [OPTIONS]'
   4245 ============================================
   4246 
   4247 When emitting DWARF2 line number information, the `.loc' directive will
   4248 add a row to the `.debug_line' line number matrix corresponding to the
   4249 immediately following assembly instruction.  The FILENO, LINENO, and
   4250 optional COLUMN arguments will be applied to the `.debug_line' state
   4251 machine before the row is added.
   4252 
   4253    The OPTIONS are a sequence of the following tokens in any order:
   4254 
   4255 `basic_block'
   4256      This option will set the `basic_block' register in the
   4257      `.debug_line' state machine to `true'.
   4258 
   4259 `prologue_end'
   4260      This option will set the `prologue_end' register in the
   4261      `.debug_line' state machine to `true'.
   4262 
   4263 `epilogue_begin'
   4264      This option will set the `epilogue_begin' register in the
   4265      `.debug_line' state machine to `true'.
   4266 
   4267 `is_stmt VALUE'
   4268      This option will set the `is_stmt' register in the `.debug_line'
   4269      state machine to `value', which must be either 0 or 1.
   4270 
   4271 `isa VALUE'
   4272      This directive will set the `isa' register in the `.debug_line'
   4273      state machine to VALUE, which must be an unsigned integer.
   4274 
   4275 `discriminator VALUE'
   4276      This directive will set the `discriminator' register in the
   4277      `.debug_line' state machine to VALUE, which must be an unsigned
   4278      integer.
   4279 
   4280 
   4281 
   4282 File: as.info,  Node: Loc_mark_labels,  Next: Local,  Prev: Loc,  Up: Pseudo Ops
   4283 
   4284 7.76 `.loc_mark_labels ENABLE'
   4285 ==============================
   4286 
   4287 When emitting DWARF2 line number information, the `.loc_mark_labels'
   4288 directive makes the assembler emit an entry to the `.debug_line' line
   4289 number matrix with the `basic_block' register in the state machine set
   4290 whenever a code label is seen.  The ENABLE argument should be either 1
   4291 or 0, to enable or disable this function respectively.
   4292 
   4293 
   4294 File: as.info,  Node: Local,  Next: Long,  Prev: Loc_mark_labels,  Up: Pseudo Ops
   4295 
   4296 7.77 `.local NAMES'
   4297 ===================
   4298 
   4299 This directive, which is available for ELF targets, marks each symbol in
   4300 the comma-separated list of `names' as a local symbol so that it will
   4301 not be externally visible.  If the symbols do not already exist, they
   4302 will be created.
   4303 
   4304    For targets where the `.lcomm' directive (*note Lcomm::) does not
   4305 accept an alignment argument, which is the case for most ELF targets,
   4306 the `.local' directive can be used in combination with `.comm' (*note
   4307 Comm::) to define aligned local common data.
   4308 
   4309 
   4310 File: as.info,  Node: Long,  Next: Macro,  Prev: Local,  Up: Pseudo Ops
   4311 
   4312 7.78 `.long EXPRESSIONS'
   4313 ========================
   4314 
   4315 `.long' is the same as `.int'.  *Note `.int': Int.
   4316 
   4317 
   4318 File: as.info,  Node: Macro,  Next: MRI,  Prev: Long,  Up: Pseudo Ops
   4319 
   4320 7.79 `.macro'
   4321 =============
   4322 
   4323 The commands `.macro' and `.endm' allow you to define macros that
   4324 generate assembly output.  For example, this definition specifies a
   4325 macro `sum' that puts a sequence of numbers into memory:
   4326 
   4327              .macro  sum from=0, to=5
   4328              .long   \from
   4329              .if     \to-\from
   4330              sum     "(\from+1)",\to
   4331              .endif
   4332              .endm
   4333 
   4334 With that definition, `SUM 0,5' is equivalent to this assembly input:
   4335 
   4336              .long   0
   4337              .long   1
   4338              .long   2
   4339              .long   3
   4340              .long   4
   4341              .long   5
   4342 
   4343 `.macro MACNAME'
   4344 `.macro MACNAME MACARGS ...'
   4345      Begin the definition of a macro called MACNAME.  If your macro
   4346      definition requires arguments, specify their names after the macro
   4347      name, separated by commas or spaces.  You can qualify the macro
   4348      argument to indicate whether all invocations must specify a
   4349      non-blank value (through `:`req''), or whether it takes all of the
   4350      remaining arguments (through `:`vararg'').  You can supply a
   4351      default value for any macro argument by following the name with
   4352      `=DEFLT'.  You cannot define two macros with the same MACNAME
   4353      unless it has been subject to the `.purgem' directive (*note
   4354      Purgem::) between the two definitions.  For example, these are all
   4355      valid `.macro' statements:
   4356 
   4357     `.macro comm'
   4358           Begin the definition of a macro called `comm', which takes no
   4359           arguments.
   4360 
   4361     `.macro plus1 p, p1'
   4362     `.macro plus1 p p1'
   4363           Either statement begins the definition of a macro called
   4364           `plus1', which takes two arguments; within the macro
   4365           definition, write `\p' or `\p1' to evaluate the arguments.
   4366 
   4367     `.macro reserve_str p1=0 p2'
   4368           Begin the definition of a macro called `reserve_str', with two
   4369           arguments.  The first argument has a default value, but not
   4370           the second.  After the definition is complete, you can call
   4371           the macro either as `reserve_str A,B' (with `\p1' evaluating
   4372           to A and `\p2' evaluating to B), or as `reserve_str ,B' (with
   4373           `\p1' evaluating as the default, in this case `0', and `\p2'
   4374           evaluating to B).
   4375 
   4376     `.macro m p1:req, p2=0, p3:vararg'
   4377           Begin the definition of a macro called `m', with at least
   4378           three arguments.  The first argument must always have a value
   4379           specified, but not the second, which instead has a default
   4380           value. The third formal will get assigned all remaining
   4381           arguments specified at invocation time.
   4382 
   4383           When you call a macro, you can specify the argument values
   4384           either by position, or by keyword.  For example, `sum 9,17'
   4385           is equivalent to `sum to=17, from=9'.
   4386 
   4387 
   4388      Note that since each of the MACARGS can be an identifier exactly
   4389      as any other one permitted by the target architecture, there may be
   4390      occasional problems if the target hand-crafts special meanings to
   4391      certain characters when they occur in a special position.  For
   4392      example, if the colon (`:') is generally permitted to be part of a
   4393      symbol name, but the architecture specific code special-cases it
   4394      when occurring as the final character of a symbol (to denote a
   4395      label), then the macro parameter replacement code will have no way
   4396      of knowing that and consider the whole construct (including the
   4397      colon) an identifier, and check only this identifier for being the
   4398      subject to parameter substitution.  So for example this macro
   4399      definition:
   4400 
   4401           	.macro label l
   4402           \l:
   4403           	.endm
   4404 
   4405      might not work as expected.  Invoking `label foo' might not create
   4406      a label called `foo' but instead just insert the text `\l:' into
   4407      the assembler source, probably generating an error about an
   4408      unrecognised identifier.
   4409 
   4410      Similarly problems might occur with the period character (`.')
   4411      which is often allowed inside opcode names (and hence identifier
   4412      names).  So for example constructing a macro to build an opcode
   4413      from a base name and a length specifier like this:
   4414 
   4415           	.macro opcode base length
   4416                   \base.\length
   4417           	.endm
   4418 
   4419      and invoking it as `opcode store l' will not create a `store.l'
   4420      instruction but instead generate some kind of error as the
   4421      assembler tries to interpret the text `\base.\length'.
   4422 
   4423      There are several possible ways around this problem:
   4424 
   4425     `Insert white space'
   4426           If it is possible to use white space characters then this is
   4427           the simplest solution.  eg:
   4428 
   4429                	.macro label l
   4430                \l :
   4431                	.endm
   4432 
   4433     `Use `\()''
   4434           The string `\()' can be used to separate the end of a macro
   4435           argument from the following text.  eg:
   4436 
   4437                	.macro opcode base length
   4438                        \base\().\length
   4439                	.endm
   4440 
   4441     `Use the alternate macro syntax mode'
   4442           In the alternative macro syntax mode the ampersand character
   4443           (`&') can be used as a separator.  eg:
   4444 
   4445                	.altmacro
   4446                	.macro label l
   4447                l&:
   4448                	.endm
   4449 
   4450      Note: this problem of correctly identifying string parameters to
   4451      pseudo ops also applies to the identifiers used in `.irp' (*note
   4452      Irp::) and `.irpc' (*note Irpc::) as well.
   4453 
   4454 `.endm'
   4455      Mark the end of a macro definition.
   4456 
   4457 `.exitm'
   4458      Exit early from the current macro definition.
   4459 
   4460 `\@'
   4461      `as' maintains a counter of how many macros it has executed in
   4462      this pseudo-variable; you can copy that number to your output with
   4463      `\@', but _only within a macro definition_.
   4464 
   4465 `LOCAL NAME [ , ... ]'
   4466      _Warning: `LOCAL' is only available if you select "alternate macro
   4467      syntax" with `--alternate' or `.altmacro'._ *Note `.altmacro':
   4468      Altmacro.
   4469 
   4470 
   4471 File: as.info,  Node: MRI,  Next: Noaltmacro,  Prev: Macro,  Up: Pseudo Ops
   4472 
   4473 7.80 `.mri VAL'
   4474 ===============
   4475 
   4476 If VAL is non-zero, this tells `as' to enter MRI mode.  If VAL is zero,
   4477 this tells `as' to exit MRI mode.  This change affects code assembled
   4478 until the next `.mri' directive, or until the end of the file.  *Note
   4479 MRI mode: M.
   4480 
   4481 
   4482 File: as.info,  Node: Noaltmacro,  Next: Nolist,  Prev: MRI,  Up: Pseudo Ops
   4483 
   4484 7.81 `.noaltmacro'
   4485 ==================
   4486 
   4487 Disable alternate macro mode.  *Note Altmacro::.
   4488 
   4489 
   4490 File: as.info,  Node: Nolist,  Next: Octa,  Prev: Noaltmacro,  Up: Pseudo Ops
   4491 
   4492 7.82 `.nolist'
   4493 ==============
   4494 
   4495 Control (in conjunction with the `.list' directive) whether or not
   4496 assembly listings are generated.  These two directives maintain an
   4497 internal counter (which is zero initially).   `.list' increments the
   4498 counter, and `.nolist' decrements it.  Assembly listings are generated
   4499 whenever the counter is greater than zero.
   4500 
   4501 
   4502 File: as.info,  Node: Octa,  Next: Offset,  Prev: Nolist,  Up: Pseudo Ops
   4503 
   4504 7.83 `.octa BIGNUMS'
   4505 ====================
   4506 
   4507 This directive expects zero or more bignums, separated by commas.  For
   4508 each bignum, it emits a 16-byte integer.
   4509 
   4510    The term "octa" comes from contexts in which a "word" is two bytes;
   4511 hence _octa_-word for 16 bytes.
   4512 
   4513 
   4514 File: as.info,  Node: Offset,  Next: Org,  Prev: Octa,  Up: Pseudo Ops
   4515 
   4516 7.84 `.offset LOC'
   4517 ==================
   4518 
   4519 Set the location counter to LOC in the absolute section.  LOC must be
   4520 an absolute expression.  This directive may be useful for defining
   4521 symbols with absolute values.  Do not confuse it with the `.org'
   4522 directive.
   4523 
   4524 
   4525 File: as.info,  Node: Org,  Next: P2align,  Prev: Offset,  Up: Pseudo Ops
   4526 
   4527 7.85 `.org NEW-LC , FILL'
   4528 =========================
   4529 
   4530 Advance the location counter of the current section to NEW-LC.  NEW-LC
   4531 is either an absolute expression or an expression with the same section
   4532 as the current subsection.  That is, you can't use `.org' to cross
   4533 sections: if NEW-LC has the wrong section, the `.org' directive is
   4534 ignored.  To be compatible with former assemblers, if the section of
   4535 NEW-LC is absolute, `as' issues a warning, then pretends the section of
   4536 NEW-LC is the same as the current subsection.
   4537 
   4538    `.org' may only increase the location counter, or leave it
   4539 unchanged; you cannot use `.org' to move the location counter backwards.
   4540 
   4541    Because `as' tries to assemble programs in one pass, NEW-LC may not
   4542 be undefined.  If you really detest this restriction we eagerly await a
   4543 chance to share your improved assembler.
   4544 
   4545    Beware that the origin is relative to the start of the section, not
   4546 to the start of the subsection.  This is compatible with other people's
   4547 assemblers.
   4548 
   4549    When the location counter (of the current subsection) is advanced,
   4550 the intervening bytes are filled with FILL which should be an absolute
   4551 expression.  If the comma and FILL are omitted, FILL defaults to zero.
   4552 
   4553 
   4554 File: as.info,  Node: P2align,  Next: PopSection,  Prev: Org,  Up: Pseudo Ops
   4555 
   4556 7.86 `.p2align[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR'
   4557 ================================================
   4558 
   4559 Pad the location counter (in the current subsection) to a particular
   4560 storage boundary.  The first expression (which must be absolute) is the
   4561 number of low-order zero bits the location counter must have after
   4562 advancement.  For example `.p2align 3' advances the location counter
   4563 until it a multiple of 8.  If the location counter is already a
   4564 multiple of 8, no change is needed.
   4565 
   4566    The second expression (also absolute) gives the fill value to be
   4567 stored in the padding bytes.  It (and the comma) may be omitted.  If it
   4568 is omitted, the padding bytes are normally zero.  However, on some
   4569 systems, if the section is marked as containing code and the fill value
   4570 is omitted, the space is filled with no-op instructions.
   4571 
   4572    The third expression is also absolute, and is also optional.  If it
   4573 is present, it is the maximum number of bytes that should be skipped by
   4574 this alignment directive.  If doing the alignment would require
   4575 skipping more bytes than the specified maximum, then the alignment is
   4576 not done at all.  You can omit the fill value (the second argument)
   4577 entirely by simply using two commas after the required alignment; this
   4578 can be useful if you want the alignment to be filled with no-op
   4579 instructions when appropriate.
   4580 
   4581    The `.p2alignw' and `.p2alignl' directives are variants of the
   4582 `.p2align' directive.  The `.p2alignw' directive treats the fill
   4583 pattern as a two byte word value.  The `.p2alignl' directives treats the
   4584 fill pattern as a four byte longword value.  For example, `.p2alignw
   4585 2,0x368d' will align to a multiple of 4.  If it skips two bytes, they
   4586 will be filled in with the value 0x368d (the exact placement of the
   4587 bytes depends upon the endianness of the processor).  If it skips 1 or
   4588 3 bytes, the fill value is undefined.
   4589 
   4590 
   4591 File: as.info,  Node: PopSection,  Next: Previous,  Prev: P2align,  Up: Pseudo Ops
   4592 
   4593 7.87 `.popsection'
   4594 ==================
   4595 
   4596 This is one of the ELF section stack manipulation directives.  The
   4597 others are `.section' (*note Section::), `.subsection' (*note
   4598 SubSection::), `.pushsection' (*note PushSection::), and `.previous'
   4599 (*note Previous::).
   4600 
   4601    This directive replaces the current section (and subsection) with
   4602 the top section (and subsection) on the section stack.  This section is
   4603 popped off the stack.
   4604 
   4605 
   4606 File: as.info,  Node: Previous,  Next: Print,  Prev: PopSection,  Up: Pseudo Ops
   4607 
   4608 7.88 `.previous'
   4609 ================
   4610 
   4611 This is one of the ELF section stack manipulation directives.  The
   4612 others are `.section' (*note Section::), `.subsection' (*note
   4613 SubSection::), `.pushsection' (*note PushSection::), and `.popsection'
   4614 (*note PopSection::).
   4615 
   4616    This directive swaps the current section (and subsection) with most
   4617 recently referenced section/subsection pair prior to this one.  Multiple
   4618 `.previous' directives in a row will flip between two sections (and
   4619 their subsections).  For example:
   4620 
   4621      .section A
   4622       .subsection 1
   4623        .word 0x1234
   4624       .subsection 2
   4625        .word 0x5678
   4626      .previous
   4627       .word 0x9abc
   4628 
   4629    Will place 0x1234 and 0x9abc into subsection 1 and 0x5678 into
   4630 subsection 2 of section A.  Whilst:
   4631 
   4632      .section A
   4633      .subsection 1
   4634        # Now in section A subsection 1
   4635        .word 0x1234
   4636      .section B
   4637      .subsection 0
   4638        # Now in section B subsection 0
   4639        .word 0x5678
   4640      .subsection 1
   4641        # Now in section B subsection 1
   4642        .word 0x9abc
   4643      .previous
   4644        # Now in section B subsection 0
   4645        .word 0xdef0
   4646 
   4647    Will place 0x1234 into section A, 0x5678 and 0xdef0 into subsection
   4648 0 of section B and 0x9abc into subsection 1 of section B.
   4649 
   4650    In terms of the section stack, this directive swaps the current
   4651 section with the top section on the section stack.
   4652 
   4653 
   4654 File: as.info,  Node: Print,  Next: Protected,  Prev: Previous,  Up: Pseudo Ops
   4655 
   4656 7.89 `.print STRING'
   4657 ====================
   4658 
   4659 `as' will print STRING on the standard output during assembly.  You
   4660 must put STRING in double quotes.
   4661 
   4662 
   4663 File: as.info,  Node: Protected,  Next: Psize,  Prev: Print,  Up: Pseudo Ops
   4664 
   4665 7.90 `.protected NAMES'
   4666 =======================
   4667 
   4668 This is one of the ELF visibility directives.  The other two are
   4669 `.hidden' (*note Hidden::) and `.internal' (*note Internal::).
   4670 
   4671    This directive overrides the named symbols default visibility (which
   4672 is set by their binding: local, global or weak).  The directive sets
   4673 the visibility to `protected' which means that any references to the
   4674 symbols from within the components that defines them must be resolved
   4675 to the definition in that component, even if a definition in another
   4676 component would normally preempt this.
   4677 
   4678 
   4679 File: as.info,  Node: Psize,  Next: Purgem,  Prev: Protected,  Up: Pseudo Ops
   4680 
   4681 7.91 `.psize LINES , COLUMNS'
   4682 =============================
   4683 
   4684 Use this directive to declare the number of lines--and, optionally, the
   4685 number of columns--to use for each page, when generating listings.
   4686 
   4687    If you do not use `.psize', listings use a default line-count of 60.
   4688 You may omit the comma and COLUMNS specification; the default width is
   4689 200 columns.
   4690 
   4691    `as' generates formfeeds whenever the specified number of lines is
   4692 exceeded (or whenever you explicitly request one, using `.eject').
   4693 
   4694    If you specify LINES as `0', no formfeeds are generated save those
   4695 explicitly specified with `.eject'.
   4696 
   4697 
   4698 File: as.info,  Node: Purgem,  Next: PushSection,  Prev: Psize,  Up: Pseudo Ops
   4699 
   4700 7.92 `.purgem NAME'
   4701 ===================
   4702 
   4703 Undefine the macro NAME, so that later uses of the string will not be
   4704 expanded.  *Note Macro::.
   4705 
   4706 
   4707 File: as.info,  Node: PushSection,  Next: Quad,  Prev: Purgem,  Up: Pseudo Ops
   4708 
   4709 7.93 `.pushsection NAME [, SUBSECTION] [, "FLAGS"[, @TYPE[,ARGUMENTS]]]'
   4710 ========================================================================
   4711 
   4712 This is one of the ELF section stack manipulation directives.  The
   4713 others are `.section' (*note Section::), `.subsection' (*note
   4714 SubSection::), `.popsection' (*note PopSection::), and `.previous'
   4715 (*note Previous::).
   4716 
   4717    This directive pushes the current section (and subsection) onto the
   4718 top of the section stack, and then replaces the current section and
   4719 subsection with `name' and `subsection'. The optional `flags', `type'
   4720 and `arguments' are treated the same as in the `.section' (*note
   4721 Section::) directive.
   4722 
   4723 
   4724 File: as.info,  Node: Quad,  Next: Reloc,  Prev: PushSection,  Up: Pseudo Ops
   4725 
   4726 7.94 `.quad BIGNUMS'
   4727 ====================
   4728 
   4729 `.quad' expects zero or more bignums, separated by commas.  For each
   4730 bignum, it emits an 8-byte integer.  If the bignum won't fit in 8
   4731 bytes, it prints a warning message; and just takes the lowest order 8
   4732 bytes of the bignum.  
   4733 
   4734    The term "quad" comes from contexts in which a "word" is two bytes;
   4735 hence _quad_-word for 8 bytes.
   4736 
   4737 
   4738 File: as.info,  Node: Reloc,  Next: Rept,  Prev: Quad,  Up: Pseudo Ops
   4739 
   4740 7.95 `.reloc OFFSET, RELOC_NAME[, EXPRESSION]'
   4741 ==============================================
   4742 
   4743 Generate a relocation at OFFSET of type RELOC_NAME with value
   4744 EXPRESSION.  If OFFSET is a number, the relocation is generated in the
   4745 current section.  If OFFSET is an expression that resolves to a symbol
   4746 plus offset, the relocation is generated in the given symbol's section.
   4747 EXPRESSION, if present, must resolve to a symbol plus addend or to an
   4748 absolute value, but note that not all targets support an addend.  e.g.
   4749 ELF REL targets such as i386 store an addend in the section contents
   4750 rather than in the relocation.  This low level interface does not
   4751 support addends stored in the section.
   4752 
   4753 
   4754 File: as.info,  Node: Rept,  Next: Sbttl,  Prev: Reloc,  Up: Pseudo Ops
   4755 
   4756 7.96 `.rept COUNT'
   4757 ==================
   4758 
   4759 Repeat the sequence of lines between the `.rept' directive and the next
   4760 `.endr' directive COUNT times.
   4761 
   4762    For example, assembling
   4763 
   4764              .rept   3
   4765              .long   0
   4766              .endr
   4767 
   4768    is equivalent to assembling
   4769 
   4770              .long   0
   4771              .long   0
   4772              .long   0
   4773 
   4774 
   4775 File: as.info,  Node: Sbttl,  Next: Scl,  Prev: Rept,  Up: Pseudo Ops
   4776 
   4777 7.97 `.sbttl "SUBHEADING"'
   4778 ==========================
   4779 
   4780 Use SUBHEADING as the title (third line, immediately after the title
   4781 line) when generating assembly listings.
   4782 
   4783    This directive affects subsequent pages, as well as the current page
   4784 if it appears within ten lines of the top of a page.
   4785 
   4786 
   4787 File: as.info,  Node: Scl,  Next: Section,  Prev: Sbttl,  Up: Pseudo Ops
   4788 
   4789 7.98 `.scl CLASS'
   4790 =================
   4791 
   4792 Set the storage-class value for a symbol.  This directive may only be
   4793 used inside a `.def'/`.endef' pair.  Storage class may flag whether a
   4794 symbol is static or external, or it may record further symbolic
   4795 debugging information.
   4796 
   4797 
   4798 File: as.info,  Node: Section,  Next: Set,  Prev: Scl,  Up: Pseudo Ops
   4799 
   4800 7.99 `.section NAME'
   4801 ====================
   4802 
   4803 Use the `.section' directive to assemble the following code into a
   4804 section named NAME.
   4805 
   4806    This directive is only supported for targets that actually support
   4807 arbitrarily named sections; on `a.out' targets, for example, it is not
   4808 accepted, even with a standard `a.out' section name.
   4809 
   4810 COFF Version
   4811 ------------
   4812 
   4813    For COFF targets, the `.section' directive is used in one of the
   4814 following ways:
   4815 
   4816      .section NAME[, "FLAGS"]
   4817      .section NAME[, SUBSECTION]
   4818 
   4819    If the optional argument is quoted, it is taken as flags to use for
   4820 the section.  Each flag is a single character.  The following flags are
   4821 recognized:
   4822 `b'
   4823      bss section (uninitialized data)
   4824 
   4825 `n'
   4826      section is not loaded
   4827 
   4828 `w'
   4829      writable section
   4830 
   4831 `d'
   4832      data section
   4833 
   4834 `e'
   4835      exclude section from linking
   4836 
   4837 `r'
   4838      read-only section
   4839 
   4840 `x'
   4841      executable section
   4842 
   4843 `s'
   4844      shared section (meaningful for PE targets)
   4845 
   4846 `a'
   4847      ignored.  (For compatibility with the ELF version)
   4848 
   4849 `y'
   4850      section is not readable (meaningful for PE targets)
   4851 
   4852 `0-9'
   4853      single-digit power-of-two section alignment (GNU extension)
   4854 
   4855    If no flags are specified, the default flags depend upon the section
   4856 name.  If the section name is not recognized, the default will be for
   4857 the section to be loaded and writable.  Note the `n' and `w' flags
   4858 remove attributes from the section, rather than adding them, so if they
   4859 are used on their own it will be as if no flags had been specified at
   4860 all.
   4861 
   4862    If the optional argument to the `.section' directive is not quoted,
   4863 it is taken as a subsection number (*note Sub-Sections::).
   4864 
   4865 ELF Version
   4866 -----------
   4867 
   4868    This is one of the ELF section stack manipulation directives.  The
   4869 others are `.subsection' (*note SubSection::), `.pushsection' (*note
   4870 PushSection::), `.popsection' (*note PopSection::), and `.previous'
   4871 (*note Previous::).
   4872 
   4873    For ELF targets, the `.section' directive is used like this:
   4874 
   4875      .section NAME [, "FLAGS"[, @TYPE[,FLAG_SPECIFIC_ARGUMENTS]]]
   4876 
   4877    The optional FLAGS argument is a quoted string which may contain any
   4878 combination of the following characters:
   4879 `a'
   4880      section is allocatable
   4881 
   4882 `e'
   4883      section is excluded from executable and shared library.
   4884 
   4885 `w'
   4886      section is writable
   4887 
   4888 `x'
   4889      section is executable
   4890 
   4891 `M'
   4892      section is mergeable
   4893 
   4894 `S'
   4895      section contains zero terminated strings
   4896 
   4897 `G'
   4898      section is a member of a section group
   4899 
   4900 `T'
   4901      section is used for thread-local-storage
   4902 
   4903 `?'
   4904      section is a member of the previously-current section's group, if
   4905      any
   4906 
   4907    The optional TYPE argument may contain one of the following
   4908 constants:
   4909 `@progbits'
   4910      section contains data
   4911 
   4912 `@nobits'
   4913      section does not contain data (i.e., section only occupies space)
   4914 
   4915 `@note'
   4916      section contains data which is used by things other than the
   4917      program
   4918 
   4919 `@init_array'
   4920      section contains an array of pointers to init functions
   4921 
   4922 `@fini_array'
   4923      section contains an array of pointers to finish functions
   4924 
   4925 `@preinit_array'
   4926      section contains an array of pointers to pre-init functions
   4927 
   4928    Many targets only support the first three section types.
   4929 
   4930    Note on targets where the `@' character is the start of a comment (eg
   4931 ARM) then another character is used instead.  For example the ARM port
   4932 uses the `%' character.
   4933 
   4934    If FLAGS contains the `M' symbol then the TYPE argument must be
   4935 specified as well as an extra argument--ENTSIZE--like this:
   4936 
   4937      .section NAME , "FLAGS"M, @TYPE, ENTSIZE
   4938 
   4939    Sections with the `M' flag but not `S' flag must contain fixed size
   4940 constants, each ENTSIZE octets long. Sections with both `M' and `S'
   4941 must contain zero terminated strings where each character is ENTSIZE
   4942 bytes long. The linker may remove duplicates within sections with the
   4943 same name, same entity size and same flags.  ENTSIZE must be an
   4944 absolute expression.  For sections with both `M' and `S', a string
   4945 which is a suffix of a larger string is considered a duplicate.  Thus
   4946 `"def"' will be merged with `"abcdef"';  A reference to the first
   4947 `"def"' will be changed to a reference to `"abcdef"+3'.
   4948 
   4949    If FLAGS contains the `G' symbol then the TYPE argument must be
   4950 present along with an additional field like this:
   4951 
   4952      .section NAME , "FLAGS"G, @TYPE, GROUPNAME[, LINKAGE]
   4953 
   4954    The GROUPNAME field specifies the name of the section group to which
   4955 this particular section belongs.  The optional linkage field can
   4956 contain:
   4957 `comdat'
   4958      indicates that only one copy of this section should be retained
   4959 
   4960 `.gnu.linkonce'
   4961      an alias for comdat
   4962 
   4963    Note: if both the M and G flags are present then the fields for the
   4964 Merge flag should come first, like this:
   4965 
   4966      .section NAME , "FLAGS"MG, @TYPE, ENTSIZE, GROUPNAME[, LINKAGE]
   4967 
   4968    If FLAGS contains the `?' symbol then it may not also contain the
   4969 `G' symbol and the GROUPNAME or LINKAGE fields should not be present.
   4970 Instead, `?' says to consider the section that's current before this
   4971 directive.  If that section used `G', then the new section will use `G'
   4972 with those same GROUPNAME and LINKAGE fields implicitly.  If not, then
   4973 the `?' symbol has no effect.
   4974 
   4975    If no flags are specified, the default flags depend upon the section
   4976 name.  If the section name is not recognized, the default will be for
   4977 the section to have none of the above flags: it will not be allocated
   4978 in memory, nor writable, nor executable.  The section will contain data.
   4979 
   4980    For ELF targets, the assembler supports another type of `.section'
   4981 directive for compatibility with the Solaris assembler:
   4982 
   4983      .section "NAME"[, FLAGS...]
   4984 
   4985    Note that the section name is quoted.  There may be a sequence of
   4986 comma separated flags:
   4987 `#alloc'
   4988      section is allocatable
   4989 
   4990 `#write'
   4991      section is writable
   4992 
   4993 `#execinstr'
   4994      section is executable
   4995 
   4996 `#exclude'
   4997      section is excluded from executable and shared library.
   4998 
   4999 `#tls'
   5000      section is used for thread local storage
   5001 
   5002    This directive replaces the current section and subsection.  See the
   5003 contents of the gas testsuite directory `gas/testsuite/gas/elf' for
   5004 some examples of how this directive and the other section stack
   5005 directives work.
   5006 
   5007 
   5008 File: as.info,  Node: Set,  Next: Short,  Prev: Section,  Up: Pseudo Ops
   5009 
   5010 7.100 `.set SYMBOL, EXPRESSION'
   5011 ===============================
   5012 
   5013 Set the value of SYMBOL to EXPRESSION.  This changes SYMBOL's value and
   5014 type to conform to EXPRESSION.  If SYMBOL was flagged as external, it
   5015 remains flagged (*note Symbol Attributes::).
   5016 
   5017    You may `.set' a symbol many times in the same assembly.
   5018 
   5019    If you `.set' a global symbol, the value stored in the object file
   5020 is the last value stored into it.
   5021 
   5022    On Z80 `set' is a real instruction, use `SYMBOL defl EXPRESSION'
   5023 instead.
   5024 
   5025 
   5026 File: as.info,  Node: Short,  Next: Single,  Prev: Set,  Up: Pseudo Ops
   5027 
   5028 7.101 `.short EXPRESSIONS'
   5029 ==========================
   5030 
   5031 `.short' is normally the same as `.word'.  *Note `.word': Word.
   5032 
   5033    In some configurations, however, `.short' and `.word' generate
   5034 numbers of different lengths.  *Note Machine Dependencies::.
   5035 
   5036 
   5037 File: as.info,  Node: Single,  Next: Size,  Prev: Short,  Up: Pseudo Ops
   5038 
   5039 7.102 `.single FLONUMS'
   5040 =======================
   5041 
   5042 This directive assembles zero or more flonums, separated by commas.  It
   5043 has the same effect as `.float'.  The exact kind of floating point
   5044 numbers emitted depends on how `as' is configured.  *Note Machine
   5045 Dependencies::.
   5046 
   5047 
   5048 File: as.info,  Node: Size,  Next: Skip,  Prev: Single,  Up: Pseudo Ops
   5049 
   5050 7.103 `.size'
   5051 =============
   5052 
   5053 This directive is used to set the size associated with a symbol.
   5054 
   5055 COFF Version
   5056 ------------
   5057 
   5058    For COFF targets, the `.size' directive is only permitted inside
   5059 `.def'/`.endef' pairs.  It is used like this:
   5060 
   5061      .size EXPRESSION
   5062 
   5063 ELF Version
   5064 -----------
   5065 
   5066    For ELF targets, the `.size' directive is used like this:
   5067 
   5068      .size NAME , EXPRESSION
   5069 
   5070    This directive sets the size associated with a symbol NAME.  The
   5071 size in bytes is computed from EXPRESSION which can make use of label
   5072 arithmetic.  This directive is typically used to set the size of
   5073 function symbols.
   5074 
   5075 
   5076 File: as.info,  Node: Skip,  Next: Sleb128,  Prev: Size,  Up: Pseudo Ops
   5077 
   5078 7.104 `.skip SIZE , FILL'
   5079 =========================
   5080 
   5081 This directive emits SIZE bytes, each of value FILL.  Both SIZE and
   5082 FILL are absolute expressions.  If the comma and FILL are omitted, FILL
   5083 is assumed to be zero.  This is the same as `.space'.
   5084 
   5085 
   5086 File: as.info,  Node: Sleb128,  Next: Space,  Prev: Skip,  Up: Pseudo Ops
   5087 
   5088 7.105 `.sleb128 EXPRESSIONS'
   5089 ============================
   5090 
   5091 SLEB128 stands for "signed little endian base 128."  This is a compact,
   5092 variable length representation of numbers used by the DWARF symbolic
   5093 debugging format.  *Note `.uleb128': Uleb128.
   5094 
   5095 
   5096 File: as.info,  Node: Space,  Next: Stab,  Prev: Sleb128,  Up: Pseudo Ops
   5097 
   5098 7.106 `.space SIZE , FILL'
   5099 ==========================
   5100 
   5101 This directive emits SIZE bytes, each of value FILL.  Both SIZE and
   5102 FILL are absolute expressions.  If the comma and FILL are omitted, FILL
   5103 is assumed to be zero.  This is the same as `.skip'.
   5104 
   5105      _Warning:_ `.space' has a completely different meaning for HPPA
   5106      targets; use `.block' as a substitute.  See `HP9000 Series 800
   5107      Assembly Language Reference Manual' (HP 92432-90001) for the
   5108      meaning of the `.space' directive.  *Note HPPA Assembler
   5109      Directives: HPPA Directives, for a summary.
   5110 
   5111 
   5112 File: as.info,  Node: Stab,  Next: String,  Prev: Space,  Up: Pseudo Ops
   5113 
   5114 7.107 `.stabd, .stabn, .stabs'
   5115 ==============================
   5116 
   5117 There are three directives that begin `.stab'.  All emit symbols (*note
   5118 Symbols::), for use by symbolic debuggers.  The symbols are not entered
   5119 in the `as' hash table: they cannot be referenced elsewhere in the
   5120 source file.  Up to five fields are required:
   5121 
   5122 STRING
   5123      This is the symbol's name.  It may contain any character except
   5124      `\000', so is more general than ordinary symbol names.  Some
   5125      debuggers used to code arbitrarily complex structures into symbol
   5126      names using this field.
   5127 
   5128 TYPE
   5129      An absolute expression.  The symbol's type is set to the low 8
   5130      bits of this expression.  Any bit pattern is permitted, but `ld'
   5131      and debuggers choke on silly bit patterns.
   5132 
   5133 OTHER
   5134      An absolute expression.  The symbol's "other" attribute is set to
   5135      the low 8 bits of this expression.
   5136 
   5137 DESC
   5138      An absolute expression.  The symbol's descriptor is set to the low
   5139      16 bits of this expression.
   5140 
   5141 VALUE
   5142      An absolute expression which becomes the symbol's value.
   5143 
   5144    If a warning is detected while reading a `.stabd', `.stabn', or
   5145 `.stabs' statement, the symbol has probably already been created; you
   5146 get a half-formed symbol in your object file.  This is compatible with
   5147 earlier assemblers!
   5148 
   5149 `.stabd TYPE , OTHER , DESC'
   5150      The "name" of the symbol generated is not even an empty string.
   5151      It is a null pointer, for compatibility.  Older assemblers used a
   5152      null pointer so they didn't waste space in object files with empty
   5153      strings.
   5154 
   5155      The symbol's value is set to the location counter, relocatably.
   5156      When your program is linked, the value of this symbol is the
   5157      address of the location counter when the `.stabd' was assembled.
   5158 
   5159 `.stabn TYPE , OTHER , DESC , VALUE'
   5160      The name of the symbol is set to the empty string `""'.
   5161 
   5162 `.stabs STRING ,  TYPE , OTHER , DESC , VALUE'
   5163      All five fields are specified.
   5164 
   5165 
   5166 File: as.info,  Node: String,  Next: Struct,  Prev: Stab,  Up: Pseudo Ops
   5167 
   5168 7.108 `.string' "STR", `.string8' "STR", `.string16'
   5169 ====================================================
   5170 
   5171 "STR", `.string32' "STR", `.string64' "STR"
   5172 
   5173    Copy the characters in STR to the object file.  You may specify more
   5174 than one string to copy, separated by commas.  Unless otherwise
   5175 specified for a particular machine, the assembler marks the end of each
   5176 string with a 0 byte.  You can use any of the escape sequences
   5177 described in *Note Strings: Strings.
   5178 
   5179    The variants `string16', `string32' and `string64' differ from the
   5180 `string' pseudo opcode in that each 8-bit character from STR is copied
   5181 and expanded to 16, 32 or 64 bits respectively.  The expanded characters
   5182 are stored in target endianness byte order.
   5183 
   5184    Example:
   5185      	.string32 "BYE"
   5186      expands to:
   5187      	.string   "B\0\0\0Y\0\0\0E\0\0\0"  /* On little endian targets.  */
   5188      	.string   "\0\0\0B\0\0\0Y\0\0\0E"  /* On big endian targets.  */
   5189 
   5190 
   5191 File: as.info,  Node: Struct,  Next: SubSection,  Prev: String,  Up: Pseudo Ops
   5192 
   5193 7.109 `.struct EXPRESSION'
   5194 ==========================
   5195 
   5196 Switch to the absolute section, and set the section offset to
   5197 EXPRESSION, which must be an absolute expression.  You might use this
   5198 as follows:
   5199              .struct 0
   5200      field1:
   5201              .struct field1 + 4
   5202      field2:
   5203              .struct field2 + 4
   5204      field3:
   5205    This would define the symbol `field1' to have the value 0, the symbol
   5206 `field2' to have the value 4, and the symbol `field3' to have the value
   5207 8.  Assembly would be left in the absolute section, and you would need
   5208 to use a `.section' directive of some sort to change to some other
   5209 section before further assembly.
   5210 
   5211 
   5212 File: as.info,  Node: SubSection,  Next: Symver,  Prev: Struct,  Up: Pseudo Ops
   5213 
   5214 7.110 `.subsection NAME'
   5215 ========================
   5216 
   5217 This is one of the ELF section stack manipulation directives.  The
   5218 others are `.section' (*note Section::), `.pushsection' (*note
   5219 PushSection::), `.popsection' (*note PopSection::), and `.previous'
   5220 (*note Previous::).
   5221 
   5222    This directive replaces the current subsection with `name'.  The
   5223 current section is not changed.  The replaced subsection is put onto
   5224 the section stack in place of the then current top of stack subsection.
   5225 
   5226 
   5227 File: as.info,  Node: Symver,  Next: Tag,  Prev: SubSection,  Up: Pseudo Ops
   5228 
   5229 7.111 `.symver'
   5230 ===============
   5231 
   5232 Use the `.symver' directive to bind symbols to specific version nodes
   5233 within a source file.  This is only supported on ELF platforms, and is
   5234 typically used when assembling files to be linked into a shared library.
   5235 There are cases where it may make sense to use this in objects to be
   5236 bound into an application itself so as to override a versioned symbol
   5237 from a shared library.
   5238 
   5239    For ELF targets, the `.symver' directive can be used like this:
   5240      .symver NAME, NAME2@NODENAME
   5241    If the symbol NAME is defined within the file being assembled, the
   5242 `.symver' directive effectively creates a symbol alias with the name
   5243 NAME2@NODENAME, and in fact the main reason that we just don't try and
   5244 create a regular alias is that the @ character isn't permitted in
   5245 symbol names.  The NAME2 part of the name is the actual name of the
   5246 symbol by which it will be externally referenced.  The name NAME itself
   5247 is merely a name of convenience that is used so that it is possible to
   5248 have definitions for multiple versions of a function within a single
   5249 source file, and so that the compiler can unambiguously know which
   5250 version of a function is being mentioned.  The NODENAME portion of the
   5251 alias should be the name of a node specified in the version script
   5252 supplied to the linker when building a shared library.  If you are
   5253 attempting to override a versioned symbol from a shared library, then
   5254 NODENAME should correspond to the nodename of the symbol you are trying
   5255 to override.
   5256 
   5257    If the symbol NAME is not defined within the file being assembled,
   5258 all references to NAME will be changed to NAME2@NODENAME.  If no
   5259 reference to NAME is made, NAME2@NODENAME will be removed from the
   5260 symbol table.
   5261 
   5262    Another usage of the `.symver' directive is:
   5263      .symver NAME, NAME2@@NODENAME
   5264    In this case, the symbol NAME must exist and be defined within the
   5265 file being assembled. It is similar to NAME2@NODENAME. The difference
   5266 is NAME2@@NODENAME will also be used to resolve references to NAME2 by
   5267 the linker.
   5268 
   5269    The third usage of the `.symver' directive is:
   5270      .symver NAME, NAME2@@@NODENAME
   5271    When NAME is not defined within the file being assembled, it is
   5272 treated as NAME2@NODENAME. When NAME is defined within the file being
   5273 assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME.
   5274 
   5275 
   5276 File: as.info,  Node: Tag,  Next: Text,  Prev: Symver,  Up: Pseudo Ops
   5277 
   5278 7.112 `.tag STRUCTNAME'
   5279 =======================
   5280 
   5281 This directive is generated by compilers to include auxiliary debugging
   5282 information in the symbol table.  It is only permitted inside
   5283 `.def'/`.endef' pairs.  Tags are used to link structure definitions in
   5284 the symbol table with instances of those structures.
   5285 
   5286 
   5287 File: as.info,  Node: Text,  Next: Title,  Prev: Tag,  Up: Pseudo Ops
   5288 
   5289 7.113 `.text SUBSECTION'
   5290 ========================
   5291 
   5292 Tells `as' to assemble the following statements onto the end of the
   5293 text subsection numbered SUBSECTION, which is an absolute expression.
   5294 If SUBSECTION is omitted, subsection number zero is used.
   5295 
   5296 
   5297 File: as.info,  Node: Title,  Next: Type,  Prev: Text,  Up: Pseudo Ops
   5298 
   5299 7.114 `.title "HEADING"'
   5300 ========================
   5301 
   5302 Use HEADING as the title (second line, immediately after the source
   5303 file name and pagenumber) when generating assembly listings.
   5304 
   5305    This directive affects subsequent pages, as well as the current page
   5306 if it appears within ten lines of the top of a page.
   5307 
   5308 
   5309 File: as.info,  Node: Type,  Next: Uleb128,  Prev: Title,  Up: Pseudo Ops
   5310 
   5311 7.115 `.type'
   5312 =============
   5313 
   5314 This directive is used to set the type of a symbol.
   5315 
   5316 COFF Version
   5317 ------------
   5318 
   5319    For COFF targets, this directive is permitted only within
   5320 `.def'/`.endef' pairs.  It is used like this:
   5321 
   5322      .type INT
   5323 
   5324    This records the integer INT as the type attribute of a symbol table
   5325 entry.
   5326 
   5327 ELF Version
   5328 -----------
   5329 
   5330    For ELF targets, the `.type' directive is used like this:
   5331 
   5332      .type NAME , TYPE DESCRIPTION
   5333 
   5334    This sets the type of symbol NAME to be either a function symbol or
   5335 an object symbol.  There are five different syntaxes supported for the
   5336 TYPE DESCRIPTION field, in order to provide compatibility with various
   5337 other assemblers.
   5338 
   5339    Because some of the characters used in these syntaxes (such as `@'
   5340 and `#') are comment characters for some architectures, some of the
   5341 syntaxes below do not work on all architectures.  The first variant
   5342 will be accepted by the GNU assembler on all architectures so that
   5343 variant should be used for maximum portability, if you do not need to
   5344 assemble your code with other assemblers.
   5345 
   5346    The syntaxes supported are:
   5347 
   5348        .type <name> STT_<TYPE_IN_UPPER_CASE>
   5349        .type <name>,#<type>
   5350        .type <name>,@<type>
   5351        .type <name>,%<type>
   5352        .type <name>,"<type>"
   5353 
   5354    The types supported are:
   5355 
   5356 `STT_FUNC'
   5357 `function'
   5358      Mark the symbol as being a function name.
   5359 
   5360 `STT_GNU_IFUNC'
   5361 `gnu_indirect_function'
   5362      Mark the symbol as an indirect function when evaluated during reloc
   5363      processing.  (This is only supported on assemblers targeting GNU
   5364      systems).
   5365 
   5366 `STT_OBJECT'
   5367 `object'
   5368      Mark the symbol as being a data object.
   5369 
   5370 `STT_TLS'
   5371 `tls_object'
   5372      Mark the symbol as being a thead-local data object.
   5373 
   5374 `STT_COMMON'
   5375 `common'
   5376      Mark the symbol as being a common data object.
   5377 
   5378 `STT_NOTYPE'
   5379 `notype'
   5380      Does not mark the symbol in any way.  It is supported just for
   5381      completeness.
   5382 
   5383 `gnu_unique_object'
   5384      Marks the symbol as being a globally unique data object.  The
   5385      dynamic linker will make sure that in the entire process there is
   5386      just one symbol with this name and type in use.  (This is only
   5387      supported on assemblers targeting GNU systems).
   5388 
   5389 
   5390    Note: Some targets support extra types in addition to those listed
   5391 above.
   5392 
   5393 
   5394 File: as.info,  Node: Uleb128,  Next: Val,  Prev: Type,  Up: Pseudo Ops
   5395 
   5396 7.116 `.uleb128 EXPRESSIONS'
   5397 ============================
   5398 
   5399 ULEB128 stands for "unsigned little endian base 128."  This is a
   5400 compact, variable length representation of numbers used by the DWARF
   5401 symbolic debugging format.  *Note `.sleb128': Sleb128.
   5402 
   5403 
   5404 File: as.info,  Node: Val,  Next: Version,  Prev: Uleb128,  Up: Pseudo Ops
   5405 
   5406 7.117 `.val ADDR'
   5407 =================
   5408 
   5409 This directive, permitted only within `.def'/`.endef' pairs, records
   5410 the address ADDR as the value attribute of a symbol table entry.
   5411 
   5412 
   5413 File: as.info,  Node: Version,  Next: VTableEntry,  Prev: Val,  Up: Pseudo Ops
   5414 
   5415 7.118 `.version "STRING"'
   5416 =========================
   5417 
   5418 This directive creates a `.note' section and places into it an ELF
   5419 formatted note of type NT_VERSION.  The note's name is set to `string'.
   5420 
   5421 
   5422 File: as.info,  Node: VTableEntry,  Next: VTableInherit,  Prev: Version,  Up: Pseudo Ops
   5423 
   5424 7.119 `.vtable_entry TABLE, OFFSET'
   5425 ===================================
   5426 
   5427 This directive finds or creates a symbol `table' and creates a
   5428 `VTABLE_ENTRY' relocation for it with an addend of `offset'.
   5429 
   5430 
   5431 File: as.info,  Node: VTableInherit,  Next: Warning,  Prev: VTableEntry,  Up: Pseudo Ops
   5432 
   5433 7.120 `.vtable_inherit CHILD, PARENT'
   5434 =====================================
   5435 
   5436 This directive finds the symbol `child' and finds or creates the symbol
   5437 `parent' and then creates a `VTABLE_INHERIT' relocation for the parent
   5438 whose addend is the value of the child symbol.  As a special case the
   5439 parent name of `0' is treated as referring to the `*ABS*' section.
   5440 
   5441 
   5442 File: as.info,  Node: Warning,  Next: Weak,  Prev: VTableInherit,  Up: Pseudo Ops
   5443 
   5444 7.121 `.warning "STRING"'
   5445 =========================
   5446 
   5447 Similar to the directive `.error' (*note `.error "STRING"': Error.),
   5448 but just emits a warning.
   5449 
   5450 
   5451 File: as.info,  Node: Weak,  Next: Weakref,  Prev: Warning,  Up: Pseudo Ops
   5452 
   5453 7.122 `.weak NAMES'
   5454 ===================
   5455 
   5456 This directive sets the weak attribute on the comma separated list of
   5457 symbol `names'.  If the symbols do not already exist, they will be
   5458 created.
   5459 
   5460    On COFF targets other than PE, weak symbols are a GNU extension.
   5461 This directive sets the weak attribute on the comma separated list of
   5462 symbol `names'.  If the symbols do not already exist, they will be
   5463 created.
   5464 
   5465    On the PE target, weak symbols are supported natively as weak
   5466 aliases.  When a weak symbol is created that is not an alias, GAS
   5467 creates an alternate symbol to hold the default value.
   5468 
   5469 
   5470 File: as.info,  Node: Weakref,  Next: Word,  Prev: Weak,  Up: Pseudo Ops
   5471 
   5472 7.123 `.weakref ALIAS, TARGET'
   5473 ==============================
   5474 
   5475 This directive creates an alias to the target symbol that enables the
   5476 symbol to be referenced with weak-symbol semantics, but without
   5477 actually making it weak.  If direct references or definitions of the
   5478 symbol are present, then the symbol will not be weak, but if all
   5479 references to it are through weak references, the symbol will be marked
   5480 as weak in the symbol table.
   5481 
   5482    The effect is equivalent to moving all references to the alias to a
   5483 separate assembly source file, renaming the alias to the symbol in it,
   5484 declaring the symbol as weak there, and running a reloadable link to
   5485 merge the object files resulting from the assembly of the new source
   5486 file and the old source file that had the references to the alias
   5487 removed.
   5488 
   5489    The alias itself never makes to the symbol table, and is entirely
   5490 handled within the assembler.
   5491 
   5492 
   5493 File: as.info,  Node: Word,  Next: Deprecated,  Prev: Weakref,  Up: Pseudo Ops
   5494 
   5495 7.124 `.word EXPRESSIONS'
   5496 =========================
   5497 
   5498 This directive expects zero or more EXPRESSIONS, of any section,
   5499 separated by commas.
   5500 
   5501    The size of the number emitted, and its byte order, depend on what
   5502 target computer the assembly is for.
   5503 
   5504      _Warning: Special Treatment to support Compilers_
   5505 
   5506    Machines with a 32-bit address space, but that do less than 32-bit
   5507 addressing, require the following special treatment.  If the machine of
   5508 interest to you does 32-bit addressing (or doesn't require it; *note
   5509 Machine Dependencies::), you can ignore this issue.
   5510 
   5511    In order to assemble compiler output into something that works, `as'
   5512 occasionally does strange things to `.word' directives.  Directives of
   5513 the form `.word sym1-sym2' are often emitted by compilers as part of
   5514 jump tables.  Therefore, when `as' assembles a directive of the form
   5515 `.word sym1-sym2', and the difference between `sym1' and `sym2' does
   5516 not fit in 16 bits, `as' creates a "secondary jump table", immediately
   5517 before the next label.  This secondary jump table is preceded by a
   5518 short-jump to the first byte after the secondary table.  This
   5519 short-jump prevents the flow of control from accidentally falling into
   5520 the new table.  Inside the table is a long-jump to `sym2'.  The
   5521 original `.word' contains `sym1' minus the address of the long-jump to
   5522 `sym2'.
   5523 
   5524    If there were several occurrences of `.word sym1-sym2' before the
   5525 secondary jump table, all of them are adjusted.  If there was a `.word
   5526 sym3-sym4', that also did not fit in sixteen bits, a long-jump to
   5527 `sym4' is included in the secondary jump table, and the `.word'
   5528 directives are adjusted to contain `sym3' minus the address of the
   5529 long-jump to `sym4'; and so on, for as many entries in the original
   5530 jump table as necessary.
   5531 
   5532 
   5533 File: as.info,  Node: Deprecated,  Prev: Word,  Up: Pseudo Ops
   5534 
   5535 7.125 Deprecated Directives
   5536 ===========================
   5537 
   5538 One day these directives won't work.  They are included for
   5539 compatibility with older assemblers.
   5540 .abort
   5541 
   5542 .line
   5543 
   5544 
   5545 File: as.info,  Node: Object Attributes,  Next: Machine Dependencies,  Prev: Pseudo Ops,  Up: Top
   5546 
   5547 8 Object Attributes
   5548 *******************
   5549 
   5550 `as' assembles source files written for a specific architecture into
   5551 object files for that architecture.  But not all object files are alike.
   5552 Many architectures support incompatible variations.  For instance,
   5553 floating point arguments might be passed in floating point registers if
   5554 the object file requires hardware floating point support--or floating
   5555 point arguments might be passed in integer registers if the object file
   5556 supports processors with no hardware floating point unit.  Or, if two
   5557 objects are built for different generations of the same architecture,
   5558 the combination may require the newer generation at run-time.
   5559 
   5560    This information is useful during and after linking.  At link time,
   5561 `ld' can warn about incompatible object files.  After link time, tools
   5562 like `gdb' can use it to process the linked file correctly.
   5563 
   5564    Compatibility information is recorded as a series of object
   5565 attributes.  Each attribute has a "vendor", "tag", and "value".  The
   5566 vendor is a string, and indicates who sets the meaning of the tag.  The
   5567 tag is an integer, and indicates what property the attribute describes.
   5568 The value may be a string or an integer, and indicates how the
   5569 property affects this object.  Missing attributes are the same as
   5570 attributes with a zero value or empty string value.
   5571 
   5572    Object attributes were developed as part of the ABI for the ARM
   5573 Architecture.  The file format is documented in `ELF for the ARM
   5574 Architecture'.
   5575 
   5576 * Menu:
   5577 
   5578 * GNU Object Attributes::               GNU Object Attributes
   5579 * Defining New Object Attributes::      Defining New Object Attributes
   5580 
   5581 
   5582 File: as.info,  Node: GNU Object Attributes,  Next: Defining New Object Attributes,  Up: Object Attributes
   5583 
   5584 8.1 GNU Object Attributes
   5585 =========================
   5586 
   5587 The `.gnu_attribute' directive records an object attribute with vendor
   5588 `gnu'.
   5589 
   5590    Except for `Tag_compatibility', which has both an integer and a
   5591 string for its value, GNU attributes have a string value if the tag
   5592 number is odd and an integer value if the tag number is even.  The
   5593 second bit (`TAG & 2' is set for architecture-independent attributes
   5594 and clear for architecture-dependent ones.
   5595 
   5596 8.1.1 Common GNU attributes
   5597 ---------------------------
   5598 
   5599 These attributes are valid on all architectures.
   5600 
   5601 Tag_compatibility (32)
   5602      The compatibility attribute takes an integer flag value and a
   5603      vendor name.  If the flag value is 0, the file is compatible with
   5604      other toolchains.  If it is 1, then the file is only compatible
   5605      with the named toolchain.  If it is greater than 1, the file can
   5606      only be processed by other toolchains under some private
   5607      arrangement indicated by the flag value and the vendor name.
   5608 
   5609 8.1.2 MIPS Attributes
   5610 ---------------------
   5611 
   5612 Tag_GNU_MIPS_ABI_FP (4)
   5613      The floating-point ABI used by this object file.  The value will
   5614      be:
   5615 
   5616         * 0 for files not affected by the floating-point ABI.
   5617 
   5618         * 1 for files using the hardware floating-point ABI with a
   5619           standard double-precision FPU.
   5620 
   5621         * 2 for files using the hardware floating-point ABI with a
   5622           single-precision FPU.
   5623 
   5624         * 3 for files using the software floating-point ABI.
   5625 
   5626         * 4 for files using the deprecated hardware floating-point ABI
   5627           which used 64-bit floating-point registers, 32-bit
   5628           general-purpose registers and increased the number of
   5629           callee-saved floating-point registers.
   5630 
   5631         * 5 for files using the hardware floating-point ABI with a
   5632           double-precision FPU with either 32-bit or 64-bit
   5633           floating-point registers and 32-bit general-purpose registers.
   5634 
   5635         * 6 for files using the hardware floating-point ABI with 64-bit
   5636           floating-point registers and 32-bit general-purpose registers.
   5637 
   5638         * 7 for files using the hardware floating-point ABI with 64-bit
   5639           floating-point registers, 32-bit general-purpose registers
   5640           and a rule that forbids the direct use of odd-numbered
   5641           single-precision floating-point registers.
   5642 
   5643 8.1.3 PowerPC Attributes
   5644 ------------------------
   5645 
   5646 Tag_GNU_Power_ABI_FP (4)
   5647      The floating-point ABI used by this object file.  The value will
   5648      be:
   5649 
   5650         * 0 for files not affected by the floating-point ABI.
   5651 
   5652         * 1 for files using double-precision hardware floating-point
   5653           ABI.
   5654 
   5655         * 2 for files using the software floating-point ABI.
   5656 
   5657         * 3 for files using single-precision hardware floating-point
   5658           ABI.
   5659 
   5660 Tag_GNU_Power_ABI_Vector (8)
   5661      The vector ABI used by this object file.  The value will be:
   5662 
   5663         * 0 for files not affected by the vector ABI.
   5664 
   5665         * 1 for files using general purpose registers to pass vectors.
   5666 
   5667         * 2 for files using AltiVec registers to pass vectors.
   5668 
   5669         * 3 for files using SPE registers to pass vectors.
   5670 
   5671 
   5672 File: as.info,  Node: Defining New Object Attributes,  Prev: GNU Object Attributes,  Up: Object Attributes
   5673 
   5674 8.2 Defining New Object Attributes
   5675 ==================================
   5676 
   5677 If you want to define a new GNU object attribute, here are the places
   5678 you will need to modify.  New attributes should be discussed on the
   5679 `binutils' mailing list.
   5680 
   5681    * This manual, which is the official register of attributes.
   5682 
   5683    * The header for your architecture `include/elf', to define the tag.
   5684 
   5685    * The `bfd' support file for your architecture, to merge the
   5686      attribute and issue any appropriate link warnings.
   5687 
   5688    * Test cases in `ld/testsuite' for merging and link warnings.
   5689 
   5690    * `binutils/readelf.c' to display your attribute.
   5691 
   5692    * GCC, if you want the compiler to mark the attribute automatically.
   5693 
   5694 
   5695 File: as.info,  Node: Machine Dependencies,  Next: Reporting Bugs,  Prev: Object Attributes,  Up: Top
   5696 
   5697 9 Machine Dependent Features
   5698 ****************************
   5699 
   5700 The machine instruction sets are (almost by definition) different on
   5701 each machine where `as' runs.  Floating point representations vary as
   5702 well, and `as' often supports a few additional directives or
   5703 command-line options for compatibility with other assemblers on a
   5704 particular platform.  Finally, some versions of `as' support special
   5705 pseudo-instructions for branch optimization.
   5706 
   5707    This chapter discusses most of these differences, though it does not
   5708 include details on any machine's instruction set.  For details on that
   5709 subject, see the hardware manufacturer's manual.
   5710 
   5711 * Menu:
   5712 
   5713 
   5714 * AArch64-Dependent::		AArch64 Dependent Features
   5715 
   5716 * Alpha-Dependent::		Alpha Dependent Features
   5717 
   5718 * ARC-Dependent::               ARC Dependent Features
   5719 
   5720 * ARM-Dependent::               ARM Dependent Features
   5721 
   5722 * AVR-Dependent::               AVR Dependent Features
   5723 
   5724 * Blackfin-Dependent::		Blackfin Dependent Features
   5725 
   5726 * CR16-Dependent::              CR16 Dependent Features
   5727 
   5728 * CRIS-Dependent::              CRIS Dependent Features
   5729 
   5730 * D10V-Dependent::              D10V Dependent Features
   5731 
   5732 * D30V-Dependent::              D30V Dependent Features
   5733 
   5734 * Epiphany-Dependent::          EPIPHANY Dependent Features
   5735 
   5736 * H8/300-Dependent::            Renesas H8/300 Dependent Features
   5737 
   5738 * HPPA-Dependent::              HPPA Dependent Features
   5739 
   5740 * ESA/390-Dependent::           IBM ESA/390 Dependent Features
   5741 
   5742 * i386-Dependent::              Intel 80386 and AMD x86-64 Dependent Features
   5743 
   5744 * i860-Dependent::              Intel 80860 Dependent Features
   5745 
   5746 * i960-Dependent::              Intel 80960 Dependent Features
   5747 
   5748 * IA-64-Dependent::             Intel IA-64 Dependent Features
   5749 
   5750 * IP2K-Dependent::              IP2K Dependent Features
   5751 
   5752 * LM32-Dependent::              LM32 Dependent Features
   5753 
   5754 * M32C-Dependent::              M32C Dependent Features
   5755 
   5756 * M32R-Dependent::              M32R Dependent Features
   5757 
   5758 * M68K-Dependent::              M680x0 Dependent Features
   5759 
   5760 * M68HC11-Dependent::           M68HC11 and 68HC12 Dependent Features
   5761 
   5762 * Meta-Dependent ::             Meta Dependent Features
   5763 
   5764 * MicroBlaze-Dependent::	MICROBLAZE Dependent Features
   5765 
   5766 * MIPS-Dependent::              MIPS Dependent Features
   5767 
   5768 * MMIX-Dependent::              MMIX Dependent Features
   5769 
   5770 * MSP430-Dependent::		MSP430 Dependent Features
   5771 
   5772 * NDS32-Dependent::             Andes NDS32 Dependent Features
   5773 
   5774 * NiosII-Dependent::            Altera Nios II Dependent Features
   5775 
   5776 * NS32K-Dependent::		NS32K Dependent Features
   5777 
   5778 * SH-Dependent::                Renesas / SuperH SH Dependent Features
   5779 * SH64-Dependent::              SuperH SH64 Dependent Features
   5780 
   5781 * PDP-11-Dependent::            PDP-11 Dependent Features
   5782 
   5783 * PJ-Dependent::                picoJava Dependent Features
   5784 
   5785 * PPC-Dependent::               PowerPC Dependent Features
   5786 
   5787 * RL78-Dependent::              RL78 Dependent Features
   5788 
   5789 * RX-Dependent::                RX Dependent Features
   5790 
   5791 * S/390-Dependent::             IBM S/390 Dependent Features
   5792 
   5793 * SCORE-Dependent::             SCORE Dependent Features
   5794 
   5795 * Sparc-Dependent::             SPARC Dependent Features
   5796 
   5797 * TIC54X-Dependent::            TI TMS320C54x Dependent Features
   5798 
   5799 * TIC6X-Dependent ::            TI TMS320C6x Dependent Features
   5800 
   5801 * TILE-Gx-Dependent ::          Tilera TILE-Gx Dependent Features
   5802 
   5803 * TILEPro-Dependent ::          Tilera TILEPro Dependent Features
   5804 
   5805 * V850-Dependent::              V850 Dependent Features
   5806 
   5807 * XGATE-Dependent::             XGATE Features
   5808 
   5809 * XSTORMY16-Dependent::         XStormy16 Dependent Features
   5810 
   5811 * Xtensa-Dependent::            Xtensa Dependent Features
   5812 
   5813 * Z80-Dependent::               Z80 Dependent Features
   5814 
   5815 * Z8000-Dependent::             Z8000 Dependent Features
   5816 
   5817 * Vax-Dependent::               VAX Dependent Features
   5818 
   5819 
   5820 File: as.info,  Node: AArch64-Dependent,  Next: Alpha-Dependent,  Up: Machine Dependencies
   5821 
   5822 9.1 AArch64 Dependent Features
   5823 ==============================
   5824 
   5825 * Menu:
   5826 
   5827 * AArch64 Options::              Options
   5828 * AArch64 Extensions::		 Extensions
   5829 * AArch64 Syntax::               Syntax
   5830 * AArch64 Floating Point::       Floating Point
   5831 * AArch64 Directives::           AArch64 Machine Directives
   5832 * AArch64 Opcodes::              Opcodes
   5833 * AArch64 Mapping Symbols::      Mapping Symbols
   5834 
   5835 
   5836 File: as.info,  Node: AArch64 Options,  Next: AArch64 Extensions,  Up: AArch64-Dependent
   5837 
   5838 9.1.1 Options
   5839 -------------
   5840 
   5841 `-EB'
   5842      This option specifies that the output generated by the assembler
   5843      should be marked as being encoded for a big-endian processor.
   5844 
   5845 `-EL'
   5846      This option specifies that the output generated by the assembler
   5847      should be marked as being encoded for a little-endian processor.
   5848 
   5849 `-mabi=ABI'
   5850      Specify which ABI the source code uses.  The recognized arguments
   5851      are: `ilp32' and `lp64', which decides the generated object file
   5852      in ELF32 and ELF64 format respectively.  The default is `lp64'.
   5853 
   5854 `-mcpu=PROCESSOR[+EXTENSION...]'
   5855      This option specifies the target processor.  The assembler will
   5856      issue an error message if an attempt is made to assemble an
   5857      instruction which will not execute on the target processor.  The
   5858      following processor names are recognized: `cortex-a53',
   5859      `cortex-a57', `xgene1', and `xgene2'.  The special name `all' may
   5860      be used to allow the assembler to accept instructions valid for
   5861      any supported processor, including all optional extensions.
   5862 
   5863      In addition to the basic instruction set, the assembler can be
   5864      told to accept, or restrict, various extension mnemonics that
   5865      extend the processor.  *Note AArch64 Extensions::.
   5866 
   5867      If some implementations of a particular processor can have an
   5868      extension, then then those extensions are automatically enabled.
   5869      Consequently, you will not normally have to specify any additional
   5870      extensions.
   5871 
   5872 `-march=ARCHITECTURE[+EXTENSION...]'
   5873      This option specifies the target architecture.  The assembler will
   5874      issue an error message if an attempt is made to assemble an
   5875      instruction which will not execute on the target architecture.  The
   5876      only value for ARCHITECTURE is `armv8-a'.
   5877 
   5878      If both `-mcpu' and `-march' are specified, the assembler will use
   5879      the setting for `-mcpu'.  If neither are specified, the assembler
   5880      will default to `-mcpu=all'.
   5881 
   5882      The architecture option can be extended with the same instruction
   5883      set extension options as the `-mcpu' option.  Unlike `-mcpu',
   5884      extensions are not always enabled by default, *Note AArch64
   5885      Extensions::.
   5886 
   5887 `-mverbose-error'
   5888      This option enables verbose error messages for AArch64 gas.  This
   5889      option is enabled by default.
   5890 
   5891 `-mno-verbose-error'
   5892      This option disables verbose error messages in AArch64 gas.
   5893 
   5894 
   5895 
   5896 File: as.info,  Node: AArch64 Extensions,  Next: AArch64 Syntax,  Prev: AArch64 Options,  Up: AArch64-Dependent
   5897 
   5898 9.1.2 Architecture Extensions
   5899 -----------------------------
   5900 
   5901 The table below lists the permitted architecture extensions that are
   5902 supported by the assembler and the conditions under which they are
   5903 automatically enabled.
   5904 
   5905    Multiple extensions may be specified, separated by a `+'.  Extension
   5906 mnemonics may also be removed from those the assembler accepts.  This
   5907 is done by prepending `no' to the option that adds the extension.
   5908 Extensions that are removed must be listed after all extensions that
   5909 have been added.
   5910 
   5911    Enabling an extension that requires other extensions will
   5912 automatically cause those extensions to be enabled.  Similarly,
   5913 disabling an extension that is required by other extensions will
   5914 automatically cause those extensions to be disabled.
   5915 
   5916 Extension Minimum      Enabled by   Description
   5917           Architecture default      
   5918 ---------------------------------------------------------------------------- 
   5919 `crc'     ARMv8-A      No           Enable CRC instructions.
   5920 `crypto'  ARMv8-A      No           Enable cryptographic extensions.  This
   5921                                     implies `fp' and `simd'.
   5922 `fp'      ARMv8-A      ARMv8-A or   Enable floating-point extensions.
   5923                        later        
   5924 `simd'    ARMv8-A      ARMv8-A or   Enable Advanced SIMD extensions.  This
   5925                        later        implies `fp'.
   5926 
   5927 
   5928 File: as.info,  Node: AArch64 Syntax,  Next: AArch64 Floating Point,  Prev: AArch64 Extensions,  Up: AArch64-Dependent
   5929 
   5930 9.1.3 Syntax
   5931 ------------
   5932 
   5933 * Menu:
   5934 
   5935 * AArch64-Chars::                Special Characters
   5936 * AArch64-Regs::                 Register Names
   5937 * AArch64-Relocations::	     Relocations
   5938 
   5939 
   5940 File: as.info,  Node: AArch64-Chars,  Next: AArch64-Regs,  Up: AArch64 Syntax
   5941 
   5942 9.1.3.1 Special Characters
   5943 ..........................
   5944 
   5945 The presence of a `//' on a line indicates the start of a comment that
   5946 extends to the end of the current line.  If a `#' appears as the first
   5947 character of a line, the whole line is treated as a comment.
   5948 
   5949    The `;' character can be used instead of a newline to separate
   5950 statements.
   5951 
   5952    The `#' can be optionally used to indicate immediate operands.
   5953 
   5954 
   5955 File: as.info,  Node: AArch64-Regs,  Next: AArch64-Relocations,  Prev: AArch64-Chars,  Up: AArch64 Syntax
   5956 
   5957 9.1.3.2 Register Names
   5958 ......................
   5959 
   5960 Please refer to the section `4.4 Register Names' of `ARMv8 Instruction
   5961 Set Overview', which is available at `http://infocenter.arm.com'.
   5962 
   5963 
   5964 File: as.info,  Node: AArch64-Relocations,  Prev: AArch64-Regs,  Up: AArch64 Syntax
   5965 
   5966 9.1.3.3 Relocations
   5967 ...................
   5968 
   5969 Relocations for `MOVZ' and `MOVK' instructions can be generated by
   5970 prefixing the label with `#:abs_g2:' etc.  For example to load the
   5971 48-bit absolute address of FOO into x0:
   5972 
   5973              movz x0, #:abs_g2:foo		// bits 32-47, overflow check
   5974              movk x0, #:abs_g1_nc:foo	// bits 16-31, no overflow check
   5975              movk x0, #:abs_g0_nc:foo	// bits  0-15, no overflow check
   5976 
   5977    Relocations for `ADRP', and `ADD', `LDR' or `STR' instructions can
   5978 be generated by prefixing the label with `:pg_hi21:' and `#:lo12:'
   5979 respectively.
   5980 
   5981    For example to use 33-bit (+/-4GB) pc-relative addressing to load
   5982 the address of FOO into x0:
   5983 
   5984              adrp x0, :pg_hi21:foo
   5985              add  x0, x0, #:lo12:foo
   5986 
   5987    Or to load the value of FOO into x0:
   5988 
   5989              adrp x0, :pg_hi21:foo
   5990              ldr  x0, [x0, #:lo12:foo]
   5991 
   5992    Note that `:pg_hi21:' is optional.
   5993 
   5994              adrp x0, foo
   5995 
   5996    is equivalent to
   5997 
   5998              adrp x0, :pg_hi21:foo
   5999 
   6000 
   6001 File: as.info,  Node: AArch64 Floating Point,  Next: AArch64 Directives,  Prev: AArch64 Syntax,  Up: AArch64-Dependent
   6002 
   6003 9.1.4 Floating Point
   6004 --------------------
   6005 
   6006 The AArch64 architecture uses IEEE floating-point numbers.
   6007 
   6008 
   6009 File: as.info,  Node: AArch64 Directives,  Next: AArch64 Opcodes,  Prev: AArch64 Floating Point,  Up: AArch64-Dependent
   6010 
   6011 9.1.5 AArch64 Machine Directives
   6012 --------------------------------
   6013 
   6014 `.bss'
   6015      This directive switches to the `.bss' section.
   6016 
   6017 `.ltorg'
   6018      This directive causes the current contents of the literal pool to
   6019      be dumped into the current section (which is assumed to be the
   6020      .text section) at the current location (aligned to a word
   6021      boundary).  GAS maintains a separate literal pool for each section
   6022      and each sub-section.  The `.ltorg' directive will only affect the
   6023      literal pool of the current section and sub-section.  At the end
   6024      of assembly all remaining, un-empty literal pools will
   6025      automatically be dumped.
   6026 
   6027      Note - older versions of GAS would dump the current literal pool
   6028      any time a section change occurred.  This is no longer done, since
   6029      it prevents accurate control of the placement of literal pools.
   6030 
   6031 `.pool'
   6032      This is a synonym for .ltorg.
   6033 
   6034 `NAME .req REGISTER NAME'
   6035      This creates an alias for REGISTER NAME called NAME.  For example:
   6036 
   6037                   foo .req w0
   6038 
   6039 `.unreq ALIAS-NAME'
   6040      This undefines a register alias which was previously defined using
   6041      the `req' directive.  For example:
   6042 
   6043                   foo .req w0
   6044                   .unreq foo
   6045 
   6046      An error occurs if the name is undefined.  Note - this pseudo op
   6047      can be used to delete builtin in register name aliases (eg 'w0').
   6048      This should only be done if it is really necessary.
   6049 
   6050 
   6051 
   6052 File: as.info,  Node: AArch64 Opcodes,  Next: AArch64 Mapping Symbols,  Prev: AArch64 Directives,  Up: AArch64-Dependent
   6053 
   6054 9.1.6 Opcodes
   6055 -------------
   6056 
   6057 GAS implements all the standard AArch64 opcodes.  It also implements
   6058 several pseudo opcodes, including several synthetic load instructions.
   6059 
   6060 `LDR ='
   6061             ldr <register> , =<expression>
   6062 
   6063      The constant expression will be placed into the nearest literal
   6064      pool (if it not already there) and a PC-relative LDR instruction
   6065      will be generated.
   6066 
   6067 
   6068    For more information on the AArch64 instruction set and assembly
   6069 language notation, see `ARMv8 Instruction Set Overview' available at
   6070 `http://infocenter.arm.com'.
   6071 
   6072 
   6073 File: as.info,  Node: AArch64 Mapping Symbols,  Prev: AArch64 Opcodes,  Up: AArch64-Dependent
   6074 
   6075 9.1.7 Mapping Symbols
   6076 ---------------------
   6077 
   6078 The AArch64 ELF specification requires that special symbols be inserted
   6079 into object files to mark certain features:
   6080 
   6081 `$x'
   6082      At the start of a region of code containing AArch64 instructions.
   6083 
   6084 `$d'
   6085      At the start of a region of data.
   6086 
   6087 
   6088 
   6089 File: as.info,  Node: Alpha-Dependent,  Next: ARC-Dependent,  Prev: AArch64-Dependent,  Up: Machine Dependencies
   6090 
   6091 9.2 Alpha Dependent Features
   6092 ============================
   6093 
   6094 * Menu:
   6095 
   6096 * Alpha Notes::                Notes
   6097 * Alpha Options::              Options
   6098 * Alpha Syntax::               Syntax
   6099 * Alpha Floating Point::       Floating Point
   6100 * Alpha Directives::           Alpha Machine Directives
   6101 * Alpha Opcodes::              Opcodes
   6102 
   6103 
   6104 File: as.info,  Node: Alpha Notes,  Next: Alpha Options,  Up: Alpha-Dependent
   6105 
   6106 9.2.1 Notes
   6107 -----------
   6108 
   6109 The documentation here is primarily for the ELF object format.  `as'
   6110 also supports the ECOFF and EVAX formats, but features specific to
   6111 these formats are not yet documented.
   6112 
   6113 
   6114 File: as.info,  Node: Alpha Options,  Next: Alpha Syntax,  Prev: Alpha Notes,  Up: Alpha-Dependent
   6115 
   6116 9.2.2 Options
   6117 -------------
   6118 
   6119 `-mCPU'
   6120      This option specifies the target processor.  If an attempt is made
   6121      to assemble an instruction which will not execute on the target
   6122      processor, the assembler may either expand the instruction as a
   6123      macro or issue an error message.  This option is equivalent to the
   6124      `.arch' directive.
   6125 
   6126      The following processor names are recognized: `21064', `21064a',
   6127      `21066', `21068', `21164', `21164a', `21164pc', `21264', `21264a',
   6128      `21264b', `ev4', `ev5', `lca45', `ev5', `ev56', `pca56', `ev6',
   6129      `ev67', `ev68'.  The special name `all' may be used to allow the
   6130      assembler to accept instructions valid for any Alpha processor.
   6131 
   6132      In order to support existing practice in OSF/1 with respect to
   6133      `.arch', and existing practice within `MILO' (the Linux ARC
   6134      bootloader), the numbered processor names (e.g. 21064) enable the
   6135      processor-specific PALcode instructions, while the
   6136      "electro-vlasic" names (e.g. `ev4') do not.
   6137 
   6138 `-mdebug'
   6139 `-no-mdebug'
   6140      Enables or disables the generation of `.mdebug' encapsulation for
   6141      stabs directives and procedure descriptors.  The default is to
   6142      automatically enable `.mdebug' when the first stabs directive is
   6143      seen.
   6144 
   6145 `-relax'
   6146      This option forces all relocations to be put into the object file,
   6147      instead of saving space and resolving some relocations at assembly
   6148      time.  Note that this option does not propagate all symbol
   6149      arithmetic into the object file, because not all symbol arithmetic
   6150      can be represented.  However, the option can still be useful in
   6151      specific applications.
   6152 
   6153 `-replace'
   6154 `-noreplace'
   6155      Enables or disables the optimization of procedure calls, both at
   6156      assemblage and at link time.  These options are only available for
   6157      VMS targets and `-replace' is the default.  See section 1.4.1 of
   6158      the OpenVMS Linker Utility Manual.
   6159 
   6160 `-g'
   6161      This option is used when the compiler generates debug information.
   6162      When `gcc' is using `mips-tfile' to generate debug information
   6163      for ECOFF, local labels must be passed through to the object file.
   6164      Otherwise this option has no effect.
   6165 
   6166 `-GSIZE'
   6167      A local common symbol larger than SIZE is placed in `.bss', while
   6168      smaller symbols are placed in `.sbss'.
   6169 
   6170 `-F'
   6171 `-32addr'
   6172      These options are ignored for backward compatibility.
   6173 
   6174 
   6175 File: as.info,  Node: Alpha Syntax,  Next: Alpha Floating Point,  Prev: Alpha Options,  Up: Alpha-Dependent
   6176 
   6177 9.2.3 Syntax
   6178 ------------
   6179 
   6180 The assembler syntax closely follow the Alpha Reference Manual;
   6181 assembler directives and general syntax closely follow the OSF/1 and
   6182 OpenVMS syntax, with a few differences for ELF.
   6183 
   6184 * Menu:
   6185 
   6186 * Alpha-Chars::                Special Characters
   6187 * Alpha-Regs::                 Register Names
   6188 * Alpha-Relocs::               Relocations
   6189 
   6190 
   6191 File: as.info,  Node: Alpha-Chars,  Next: Alpha-Regs,  Up: Alpha Syntax
   6192 
   6193 9.2.3.1 Special Characters
   6194 ..........................
   6195 
   6196 `#' is the line comment character.  Note that if `#' is the first
   6197 character on a line then it can also be a logical line number directive
   6198 (*note Comments::) or a preprocessor control command (*note
   6199 Preprocessing::).
   6200 
   6201    `;' can be used instead of a newline to separate statements.
   6202 
   6203 
   6204 File: as.info,  Node: Alpha-Regs,  Next: Alpha-Relocs,  Prev: Alpha-Chars,  Up: Alpha Syntax
   6205 
   6206 9.2.3.2 Register Names
   6207 ......................
   6208 
   6209 The 32 integer registers are referred to as `$N' or `$rN'.  In
   6210 addition, registers 15, 28, 29, and 30 may be referred to by the
   6211 symbols `$fp', `$at', `$gp', and `$sp' respectively.
   6212 
   6213    The 32 floating-point registers are referred to as `$fN'.
   6214 
   6215 
   6216 File: as.info,  Node: Alpha-Relocs,  Prev: Alpha-Regs,  Up: Alpha Syntax
   6217 
   6218 9.2.3.3 Relocations
   6219 ...................
   6220 
   6221 Some of these relocations are available for ECOFF, but mostly only for
   6222 ELF.  They are modeled after the relocation format introduced in
   6223 Digital Unix 4.0, but there are additions.
   6224 
   6225    The format is `!TAG' or `!TAG!NUMBER' where TAG is the name of the
   6226 relocation.  In some cases NUMBER is used to relate specific
   6227 instructions.
   6228 
   6229    The relocation is placed at the end of the instruction like so:
   6230 
   6231      ldah  $0,a($29)    !gprelhigh
   6232      lda   $0,a($0)     !gprellow
   6233      ldq   $1,b($29)    !literal!100
   6234      ldl   $2,0($1)     !lituse_base!100
   6235 
   6236 `!literal'
   6237 `!literal!N'
   6238      Used with an `ldq' instruction to load the address of a symbol
   6239      from the GOT.
   6240 
   6241      A sequence number N is optional, and if present is used to pair
   6242      `lituse' relocations with this `literal' relocation.  The `lituse'
   6243      relocations are used by the linker to optimize the code based on
   6244      the final location of the symbol.
   6245 
   6246      Note that these optimizations are dependent on the data flow of the
   6247      program.  Therefore, if _any_ `lituse' is paired with a `literal'
   6248      relocation, then _all_ uses of the register set by the `literal'
   6249      instruction must also be marked with `lituse' relocations.  This
   6250      is because the original `literal' instruction may be deleted or
   6251      transformed into another instruction.
   6252 
   6253      Also note that there may be a one-to-many relationship between
   6254      `literal' and `lituse', but not a many-to-one.  That is, if there
   6255      are two code paths that load up the same address and feed the
   6256      value to a single use, then the use may not use a `lituse'
   6257      relocation.
   6258 
   6259 `!lituse_base!N'
   6260      Used with any memory format instruction (e.g. `ldl') to indicate
   6261      that the literal is used for an address load.  The offset field of
   6262      the instruction must be zero.  During relaxation, the code may be
   6263      altered to use a gp-relative load.
   6264 
   6265 `!lituse_jsr!N'
   6266      Used with a register branch format instruction (e.g. `jsr') to
   6267      indicate that the literal is used for a call.  During relaxation,
   6268      the code may be altered to use a direct branch (e.g. `bsr').
   6269 
   6270 `!lituse_jsrdirect!N'
   6271      Similar to `lituse_jsr', but also that this call cannot be vectored
   6272      through a PLT entry.  This is useful for functions with special
   6273      calling conventions which do not allow the normal call-clobbered
   6274      registers to be clobbered.
   6275 
   6276 `!lituse_bytoff!N'
   6277      Used with a byte mask instruction (e.g. `extbl') to indicate that
   6278      only the low 3 bits of the address are relevant.  During
   6279      relaxation, the code may be altered to use an immediate instead of
   6280      a register shift.
   6281 
   6282 `!lituse_addr!N'
   6283      Used with any other instruction to indicate that the original
   6284      address is in fact used, and the original `ldq' instruction may
   6285      not be altered or deleted.  This is useful in conjunction with
   6286      `lituse_jsr' to test whether a weak symbol is defined.
   6287 
   6288           ldq  $27,foo($29)   !literal!1
   6289           beq  $27,is_undef   !lituse_addr!1
   6290           jsr  $26,($27),foo  !lituse_jsr!1
   6291 
   6292 `!lituse_tlsgd!N'
   6293      Used with a register branch format instruction to indicate that the
   6294      literal is the call to `__tls_get_addr' used to compute the
   6295      address of the thread-local storage variable whose descriptor was
   6296      loaded with `!tlsgd!N'.
   6297 
   6298 `!lituse_tlsldm!N'
   6299      Used with a register branch format instruction to indicate that the
   6300      literal is the call to `__tls_get_addr' used to compute the
   6301      address of the base of the thread-local storage block for the
   6302      current module.  The descriptor for the module must have been
   6303      loaded with `!tlsldm!N'.
   6304 
   6305 `!gpdisp!N'
   6306      Used with `ldah' and `lda' to load the GP from the current
   6307      address, a-la the `ldgp' macro.  The source register for the
   6308      `ldah' instruction must contain the address of the `ldah'
   6309      instruction.  There must be exactly one `lda' instruction paired
   6310      with the `ldah' instruction, though it may appear anywhere in the
   6311      instruction stream.  The immediate operands must be zero.
   6312 
   6313           bsr  $26,foo
   6314           ldah $29,0($26)     !gpdisp!1
   6315           lda  $29,0($29)     !gpdisp!1
   6316 
   6317 `!gprelhigh'
   6318      Used with an `ldah' instruction to add the high 16 bits of a
   6319      32-bit displacement from the GP.
   6320 
   6321 `!gprellow'
   6322      Used with any memory format instruction to add the low 16 bits of a
   6323      32-bit displacement from the GP.
   6324 
   6325 `!gprel'
   6326      Used with any memory format instruction to add a 16-bit
   6327      displacement from the GP.
   6328 
   6329 `!samegp'
   6330      Used with any branch format instruction to skip the GP load at the
   6331      target address.  The referenced symbol must have the same GP as the
   6332      source object file, and it must be declared to either not use `$27'
   6333      or perform a standard GP load in the first two instructions via the
   6334      `.prologue' directive.
   6335 
   6336 `!tlsgd'
   6337 `!tlsgd!N'
   6338      Used with an `lda' instruction to load the address of a TLS
   6339      descriptor for a symbol in the GOT.
   6340 
   6341      The sequence number N is optional, and if present it used to pair
   6342      the descriptor load with both the `literal' loading the address of
   6343      the `__tls_get_addr' function and the `lituse_tlsgd' marking the
   6344      call to that function.
   6345 
   6346      For proper relaxation, both the `tlsgd', `literal' and `lituse'
   6347      relocations must be in the same extended basic block.  That is,
   6348      the relocation with the lowest address must be executed first at
   6349      runtime.
   6350 
   6351 `!tlsldm'
   6352 `!tlsldm!N'
   6353      Used with an `lda' instruction to load the address of a TLS
   6354      descriptor for the current module in the GOT.
   6355 
   6356      Similar in other respects to `tlsgd'.
   6357 
   6358 `!gotdtprel'
   6359      Used with an `ldq' instruction to load the offset of the TLS
   6360      symbol within its module's thread-local storage block.  Also known
   6361      as the dynamic thread pointer offset or dtp-relative offset.
   6362 
   6363 `!dtprelhi'
   6364 `!dtprello'
   6365 `!dtprel'
   6366      Like `gprel' relocations except they compute dtp-relative offsets.
   6367 
   6368 `!gottprel'
   6369      Used with an `ldq' instruction to load the offset of the TLS
   6370      symbol from the thread pointer.  Also known as the tp-relative
   6371      offset.
   6372 
   6373 `!tprelhi'
   6374 `!tprello'
   6375 `!tprel'
   6376      Like `gprel' relocations except they compute tp-relative offsets.
   6377 
   6378 
   6379 File: as.info,  Node: Alpha Floating Point,  Next: Alpha Directives,  Prev: Alpha Syntax,  Up: Alpha-Dependent
   6380 
   6381 9.2.4 Floating Point
   6382 --------------------
   6383 
   6384 The Alpha family uses both IEEE and VAX floating-point numbers.
   6385 
   6386 
   6387 File: as.info,  Node: Alpha Directives,  Next: Alpha Opcodes,  Prev: Alpha Floating Point,  Up: Alpha-Dependent
   6388 
   6389 9.2.5 Alpha Assembler Directives
   6390 --------------------------------
   6391 
   6392 `as' for the Alpha supports many additional directives for
   6393 compatibility with the native assembler.  This section describes them
   6394 only briefly.
   6395 
   6396    These are the additional directives in `as' for the Alpha:
   6397 
   6398 `.arch CPU'
   6399      Specifies the target processor.  This is equivalent to the `-mCPU'
   6400      command-line option.  *Note Options: Alpha Options, for a list of
   6401      values for CPU.
   6402 
   6403 `.ent FUNCTION[, N]'
   6404      Mark the beginning of FUNCTION.  An optional number may follow for
   6405      compatibility with the OSF/1 assembler, but is ignored.  When
   6406      generating `.mdebug' information, this will create a procedure
   6407      descriptor for the function.  In ELF, it will mark the symbol as a
   6408      function a-la the generic `.type' directive.
   6409 
   6410 `.end FUNCTION'
   6411      Mark the end of FUNCTION.  In ELF, it will set the size of the
   6412      symbol a-la the generic `.size' directive.
   6413 
   6414 `.mask MASK, OFFSET'
   6415      Indicate which of the integer registers are saved in the current
   6416      function's stack frame.  MASK is interpreted a bit mask in which
   6417      bit N set indicates that register N is saved.  The registers are
   6418      saved in a block located OFFSET bytes from the "canonical frame
   6419      address" (CFA) which is the value of the stack pointer on entry to
   6420      the function.  The registers are saved sequentially, except that
   6421      the return address register (normally `$26') is saved first.
   6422 
   6423      This and the other directives that describe the stack frame are
   6424      currently only used when generating `.mdebug' information.  They
   6425      may in the future be used to generate DWARF2 `.debug_frame' unwind
   6426      information for hand written assembly.
   6427 
   6428 `.fmask MASK, OFFSET'
   6429      Indicate which of the floating-point registers are saved in the
   6430      current stack frame.  The MASK and OFFSET parameters are
   6431      interpreted as with `.mask'.
   6432 
   6433 `.frame FRAMEREG, FRAMEOFFSET, RETREG[, ARGOFFSET]'
   6434      Describes the shape of the stack frame.  The frame pointer in use
   6435      is FRAMEREG; normally this is either `$fp' or `$sp'.  The frame
   6436      pointer is FRAMEOFFSET bytes below the CFA.  The return address is
   6437      initially located in RETREG until it is saved as indicated in
   6438      `.mask'.  For compatibility with OSF/1 an optional ARGOFFSET
   6439      parameter is accepted and ignored.  It is believed to indicate the
   6440      offset from the CFA to the saved argument registers.
   6441 
   6442 `.prologue N'
   6443      Indicate that the stack frame is set up and all registers have been
   6444      spilled.  The argument N indicates whether and how the function
   6445      uses the incoming "procedure vector" (the address of the called
   6446      function) in `$27'.  0 indicates that `$27' is not used; 1
   6447      indicates that the first two instructions of the function use `$27'
   6448      to perform a load of the GP register; 2 indicates that `$27' is
   6449      used in some non-standard way and so the linker cannot elide the
   6450      load of the procedure vector during relaxation.
   6451 
   6452 `.usepv FUNCTION, WHICH'
   6453      Used to indicate the use of the `$27' register, similar to
   6454      `.prologue', but without the other semantics of needing to be
   6455      inside an open `.ent'/`.end' block.
   6456 
   6457      The WHICH argument should be either `no', indicating that `$27' is
   6458      not used, or `std', indicating that the first two instructions of
   6459      the function perform a GP load.
   6460 
   6461      One might use this directive instead of `.prologue' if you are
   6462      also using dwarf2 CFI directives.
   6463 
   6464 `.gprel32 EXPRESSION'
   6465      Computes the difference between the address in EXPRESSION and the
   6466      GP for the current object file, and stores it in 4 bytes.  In
   6467      addition to being smaller than a full 8 byte address, this also
   6468      does not require a dynamic relocation when used in a shared
   6469      library.
   6470 
   6471 `.t_floating EXPRESSION'
   6472      Stores EXPRESSION as an IEEE double precision value.
   6473 
   6474 `.s_floating EXPRESSION'
   6475      Stores EXPRESSION as an IEEE single precision value.
   6476 
   6477 `.f_floating EXPRESSION'
   6478      Stores EXPRESSION as a VAX F format value.
   6479 
   6480 `.g_floating EXPRESSION'
   6481      Stores EXPRESSION as a VAX G format value.
   6482 
   6483 `.d_floating EXPRESSION'
   6484      Stores EXPRESSION as a VAX D format value.
   6485 
   6486 `.set FEATURE'
   6487      Enables or disables various assembler features.  Using the positive
   6488      name of the feature enables while using `noFEATURE' disables.
   6489 
   6490     `at'
   6491           Indicates that macro expansions may clobber the "assembler
   6492           temporary" (`$at' or `$28') register.  Some macros may not be
   6493           expanded without this and will generate an error message if
   6494           `noat' is in effect.  When `at' is in effect, a warning will
   6495           be generated if `$at' is used by the programmer.
   6496 
   6497     `macro'
   6498           Enables the expansion of macro instructions.  Note that
   6499           variants of real instructions, such as `br label' vs `br
   6500           $31,label' are considered alternate forms and not macros.
   6501 
   6502     `move'
   6503     `reorder'
   6504     `volatile'
   6505           These control whether and how the assembler may re-order
   6506           instructions.  Accepted for compatibility with the OSF/1
   6507           assembler, but `as' does not do instruction scheduling, so
   6508           these features are ignored.
   6509 
   6510    The following directives are recognized for compatibility with the
   6511 OSF/1 assembler but are ignored.
   6512 
   6513      .proc           .aproc
   6514      .reguse         .livereg
   6515      .option         .aent
   6516      .ugen           .eflag
   6517      .alias          .noalias
   6518 
   6519 
   6520 File: as.info,  Node: Alpha Opcodes,  Prev: Alpha Directives,  Up: Alpha-Dependent
   6521 
   6522 9.2.6 Opcodes
   6523 -------------
   6524 
   6525 For detailed information on the Alpha machine instruction set, see the
   6526 Alpha Architecture Handbook
   6527 (ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf).
   6528 
   6529 
   6530 File: as.info,  Node: ARC-Dependent,  Next: ARM-Dependent,  Prev: Alpha-Dependent,  Up: Machine Dependencies
   6531 
   6532 9.3 ARC Dependent Features
   6533 ==========================
   6534 
   6535 * Menu:
   6536 
   6537 * ARC Options::              Options
   6538 * ARC Syntax::               Syntax
   6539 * ARC Floating Point::       Floating Point
   6540 * ARC Directives::           ARC Machine Directives
   6541 * ARC Opcodes::              Opcodes
   6542 
   6543 
   6544 File: as.info,  Node: ARC Options,  Next: ARC Syntax,  Up: ARC-Dependent
   6545 
   6546 9.3.1 Options
   6547 -------------
   6548 
   6549 `-marc[5|6|7|8]'
   6550      This option selects the core processor variant.  Using `-marc' is
   6551      the same as `-marc6', which is also the default.
   6552 
   6553     `arc5'
   6554           Base instruction set.
   6555 
   6556     `arc6'
   6557           Jump-and-link (jl) instruction.  No requirement of an
   6558           instruction between setting flags and conditional jump.  For
   6559           example:
   6560 
   6561                  mov.f r0,r1
   6562                  beq   foo
   6563 
   6564     `arc7'
   6565           Break (brk) and sleep (sleep) instructions.
   6566 
   6567     `arc8'
   6568           Software interrupt (swi) instruction.
   6569 
   6570 
   6571      Note: the `.option' directive can to be used to select a core
   6572      variant from within assembly code.
   6573 
   6574 `-EB'
   6575      This option specifies that the output generated by the assembler
   6576      should be marked as being encoded for a big-endian processor.
   6577 
   6578 `-EL'
   6579      This option specifies that the output generated by the assembler
   6580      should be marked as being encoded for a little-endian processor -
   6581      this is the default.
   6582 
   6583 
   6584 
   6585 File: as.info,  Node: ARC Syntax,  Next: ARC Floating Point,  Prev: ARC Options,  Up: ARC-Dependent
   6586 
   6587 9.3.2 Syntax
   6588 ------------
   6589 
   6590 * Menu:
   6591 
   6592 * ARC-Chars::                Special Characters
   6593 * ARC-Regs::                 Register Names
   6594 
   6595 
   6596 File: as.info,  Node: ARC-Chars,  Next: ARC-Regs,  Up: ARC Syntax
   6597 
   6598 9.3.2.1 Special Characters
   6599 ..........................
   6600 
   6601 The presence of a `#' on a line indicates the start of a comment that
   6602 extends to the end of the current line.  Note that if a line starts
   6603 with a `#' character then it can also be a logical line number
   6604 directive (*note Comments::) or a preprocessor control command (*note
   6605 Preprocessing::).
   6606 
   6607    The ARC assembler does not support a line separator character.
   6608 
   6609 
   6610 File: as.info,  Node: ARC-Regs,  Prev: ARC-Chars,  Up: ARC Syntax
   6611 
   6612 9.3.2.2 Register Names
   6613 ......................
   6614 
   6615 *TODO*
   6616 
   6617 
   6618 File: as.info,  Node: ARC Floating Point,  Next: ARC Directives,  Prev: ARC Syntax,  Up: ARC-Dependent
   6619 
   6620 9.3.3 Floating Point
   6621 --------------------
   6622 
   6623 The ARC core does not currently have hardware floating point support.
   6624 Software floating point support is provided by `GCC' and uses IEEE
   6625 floating-point numbers.
   6626 
   6627 
   6628 File: as.info,  Node: ARC Directives,  Next: ARC Opcodes,  Prev: ARC Floating Point,  Up: ARC-Dependent
   6629 
   6630 9.3.4 ARC Machine Directives
   6631 ----------------------------
   6632 
   6633 The ARC version of `as' supports the following additional machine
   6634 directives:
   6635 
   6636 `.2byte EXPRESSIONS'
   6637      *TODO*
   6638 
   6639 `.3byte EXPRESSIONS'
   6640      *TODO*
   6641 
   6642 `.4byte EXPRESSIONS'
   6643      *TODO*
   6644 
   6645 `.extAuxRegister NAME,ADDRESS,MODE'
   6646      The ARCtangent A4 has extensible auxiliary register space.  The
   6647      auxiliary registers can be defined in the assembler source code by
   6648      using this directive.  The first parameter is the NAME of the new
   6649      auxiallry register.  The second parameter is the ADDRESS of the
   6650      register in the auxiliary register memory map for the variant of
   6651      the ARC.  The third parameter specifies the MODE in which the
   6652      register can be operated is and it can be one of:
   6653 
   6654     `r          (readonly)'
   6655 
   6656     `w          (write only)'
   6657 
   6658     `r|w        (read or write)'
   6659 
   6660      For example:
   6661 
   6662             .extAuxRegister mulhi,0x12,w
   6663 
   6664      This specifies an extension auxiliary register called _mulhi_
   6665      which is at address 0x12 in the memory space and which is only
   6666      writable.
   6667 
   6668 `.extCondCode SUFFIX,VALUE'
   6669      The condition codes on the ARCtangent A4 are extensible and can be
   6670      specified by means of this assembler directive.  They are specified
   6671      by the suffix and the value for the condition code.  They can be
   6672      used to specify extra condition codes with any values.  For
   6673      example:
   6674 
   6675             .extCondCode is_busy,0x14
   6676 
   6677              add.is_busy  r1,r2,r3
   6678              bis_busy     _main
   6679 
   6680 `.extCoreRegister NAME,REGNUM,MODE,SHORTCUT'
   6681      Specifies an extension core register NAME for the application.
   6682      This allows a register NAME with a valid REGNUM between 0 and 60,
   6683      with the following as valid values for MODE
   6684 
   6685     `_r_   (readonly)'
   6686 
   6687     `_w_   (write only)'
   6688 
   6689     `_r|w_ (read or write)'
   6690 
   6691      The other parameter gives a description of the register having a
   6692      SHORTCUT in the pipeline.  The valid values are:
   6693 
   6694     `can_shortcut'
   6695 
   6696     `cannot_shortcut'
   6697 
   6698      For example:
   6699 
   6700             .extCoreRegister mlo,57,r,can_shortcut
   6701 
   6702      This defines an extension core register mlo with the value 57 which
   6703      can shortcut the pipeline.
   6704 
   6705 `.extInstruction NAME,OPCODE,SUBOPCODE,SUFFIXCLASS,SYNTAXCLASS'
   6706      The ARCtangent A4 allows the user to specify extension
   6707      instructions.  The extension instructions are not macros.  The
   6708      assembler creates encodings for use of these instructions
   6709      according to the specification by the user.  The parameters are:
   6710 
   6711         * NAME Name of the extension instruction
   6712 
   6713         * OPCODE Opcode to be used. (Bits 27:31 in the encoding).
   6714           Valid values 0x10-0x1f or 0x03
   6715 
   6716         * SUBOPCODE Subopcode to be used.  Valid values are from
   6717           0x09-0x3f.  However the correct value also depends on
   6718           SYNTAXCLASS
   6719 
   6720         * SUFFIXCLASS Determines the kinds of suffixes to be allowed.
   6721           Valid values are `SUFFIX_NONE', `SUFFIX_COND', `SUFFIX_FLAG'
   6722           which indicates the absence or presence of conditional
   6723           suffixes and flag setting by the extension instruction.  It
   6724           is also possible to specify that an instruction sets the
   6725           flags and is conditional by using `SUFFIX_CODE' |
   6726           `SUFFIX_FLAG'.
   6727 
   6728         * SYNTAXCLASS Determines the syntax class for the instruction.
   6729           It can have the following values:
   6730 
   6731          ``SYNTAX_2OP':'
   6732                2 Operand Instruction
   6733 
   6734          ``SYNTAX_3OP':'
   6735                3 Operand Instruction
   6736 
   6737           In addition there could be modifiers for the syntax class as
   6738           described below:
   6739 
   6740                Syntax Class Modifiers are:
   6741 
   6742              - `OP1_MUST_BE_IMM': Modifies syntax class SYNTAX_3OP,
   6743                specifying that the first operand of a three-operand
   6744                instruction must be an immediate (i.e., the result is
   6745                discarded).  OP1_MUST_BE_IMM is used by bitwise ORing it
   6746                with SYNTAX_3OP as given in the example below.  This
   6747                could usually be used to set the flags using specific
   6748                instructions and not retain results.
   6749 
   6750              - `OP1_IMM_IMPLIED': Modifies syntax class SYNTAX_20P, it
   6751                specifies that there is an implied immediate destination
   6752                operand which does not appear in the syntax.  For
   6753                example, if the source code contains an instruction like:
   6754 
   6755                     inst r1,r2
   6756 
   6757                it really means that the first argument is an implied
   6758                immediate (that is, the result is discarded).  This is
   6759                the same as though the source code were: inst 0,r1,r2.
   6760                You use OP1_IMM_IMPLIED by bitwise ORing it with
   6761                SYNTAX_20P.
   6762 
   6763 
   6764      For example, defining 64-bit multiplier with immediate operands:
   6765 
   6766           .extInstruction mp64,0x14,0x0,SUFFIX_COND | SUFFIX_FLAG ,
   6767                           SYNTAX_3OP|OP1_MUST_BE_IMM
   6768 
   6769      The above specifies an extension instruction called mp64 which has
   6770      3 operands, sets the flags, can be used with a condition code, for
   6771      which the first operand is an immediate.  (Equivalent to
   6772      discarding the result of the operation).
   6773 
   6774            .extInstruction mul64,0x14,0x00,SUFFIX_COND, SYNTAX_2OP|OP1_IMM_IMPLIED
   6775 
   6776      This describes a 2 operand instruction with an implicit first
   6777      immediate operand.  The result of this operation would be
   6778      discarded.
   6779 
   6780 `.half EXPRESSIONS'
   6781      *TODO*
   6782 
   6783 `.long EXPRESSIONS'
   6784      *TODO*
   6785 
   6786 `.option ARC|ARC5|ARC6|ARC7|ARC8'
   6787      The `.option' directive must be followed by the desired core
   6788      version. Again `arc' is an alias for `arc6'.
   6789 
   6790      Note: the `.option' directive overrides the command line option
   6791      `-marc'; a warning is emitted when the version is not consistent
   6792      between the two - even for the implicit default core version
   6793      (arc6).
   6794 
   6795 `.short EXPRESSIONS'
   6796      *TODO*
   6797 
   6798 `.word EXPRESSIONS'
   6799      *TODO*
   6800 
   6801 
   6802 
   6803 File: as.info,  Node: ARC Opcodes,  Prev: ARC Directives,  Up: ARC-Dependent
   6804 
   6805 9.3.5 Opcodes
   6806 -------------
   6807 
   6808 For information on the ARC instruction set, see `ARC Programmers
   6809 Reference Manual', ARC International (www.arc.com)
   6810 
   6811 
   6812 File: as.info,  Node: ARM-Dependent,  Next: AVR-Dependent,  Prev: ARC-Dependent,  Up: Machine Dependencies
   6813 
   6814 9.4 ARM Dependent Features
   6815 ==========================
   6816 
   6817 * Menu:
   6818 
   6819 * ARM Options::              Options
   6820 * ARM Syntax::               Syntax
   6821 * ARM Floating Point::       Floating Point
   6822 * ARM Directives::           ARM Machine Directives
   6823 * ARM Opcodes::              Opcodes
   6824 * ARM Mapping Symbols::      Mapping Symbols
   6825 * ARM Unwinding Tutorial::   Unwinding
   6826 
   6827 
   6828 File: as.info,  Node: ARM Options,  Next: ARM Syntax,  Up: ARM-Dependent
   6829 
   6830 9.4.1 Options
   6831 -------------
   6832 
   6833 `-mcpu=PROCESSOR[+EXTENSION...]'
   6834      This option specifies the target processor.  The assembler will
   6835      issue an error message if an attempt is made to assemble an
   6836      instruction which will not execute on the target processor.  The
   6837      following processor names are recognized: `arm1', `arm2', `arm250',
   6838      `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
   6839      `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
   6840      `arm700i', `arm710', `arm710t', `arm720', `arm720t', `arm740t',
   6841      `arm710c', `arm7100', `arm7500', `arm7500fe', `arm7t', `arm7tdmi',
   6842      `arm7tdmi-s', `arm8', `arm810', `strongarm', `strongarm1',
   6843      `strongarm110', `strongarm1100', `strongarm1110', `arm9', `arm920',
   6844      `arm920t', `arm922t', `arm940t', `arm9tdmi', `fa526' (Faraday
   6845      FA526 processor), `fa626' (Faraday FA626 processor), `arm9e',
   6846      `arm926e', `arm926ej-s', `arm946e-r0', `arm946e', `arm946e-s',
   6847      `arm966e-r0', `arm966e', `arm966e-s', `arm968e-s', `arm10t',
   6848      `arm10tdmi', `arm10e', `arm1020', `arm1020t', `arm1020e',
   6849      `arm1022e', `arm1026ej-s', `fa606te' (Faraday FA606TE processor),
   6850      `fa616te' (Faraday FA616TE processor), `fa626te' (Faraday FA626TE
   6851      processor), `fmp626' (Faraday FMP626 processor), `fa726te'
   6852      (Faraday FA726TE processor), `arm1136j-s', `arm1136jf-s',
   6853      `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s',
   6854      `mpcore', `mpcorenovfp', `cortex-a5', `cortex-a7', `cortex-a8',
   6855      `cortex-a9', `cortex-a15', `cortex-r4', `cortex-r4f', `cortex-r5',
   6856      `cortex-r7', `cortex-m4', `cortex-m3', `cortex-m1', `cortex-m0',
   6857      `cortex-m0plus', `ep9312' (ARM920 with Cirrus Maverick
   6858      coprocessor), `i80200' (Intel XScale processor) `iwmmxt' (Intel(r)
   6859      XScale processor with Wireless MMX(tm) technology coprocessor) and
   6860      `xscale'.  The special name `all' may be used to allow the
   6861      assembler to accept instructions valid for any ARM processor.
   6862 
   6863      In addition to the basic instruction set, the assembler can be
   6864      told to accept various extension mnemonics that extend the
   6865      processor using the co-processor instruction space.  For example,
   6866      `-mcpu=arm920+maverick' is equivalent to specifying `-mcpu=ep9312'.
   6867 
   6868      Multiple extensions may be specified, separated by a `+'.  The
   6869      extensions should be specified in ascending alphabetical order.
   6870 
   6871      Some extensions may be restricted to particular architectures;
   6872      this is documented in the list of extensions below.
   6873 
   6874      Extension mnemonics may also be removed from those the assembler
   6875      accepts.  This is done be prepending `no' to the option that adds
   6876      the extension.  Extensions that are removed should be listed after
   6877      all extensions which have been added, again in ascending
   6878      alphabetical order.  For example, `-mcpu=ep9312+nomaverick' is
   6879      equivalent to specifying `-mcpu=arm920'.
   6880 
   6881      The following extensions are currently supported: `crypto'
   6882      (Cryptography Extensions for v8-A architecture, implies `fp+simd'),
   6883      `fp' (Floating Point Extensions for v8-A architecture), `idiv'
   6884      (Integer Divide Extensions for v7-A and v7-R architectures),
   6885      `iwmmxt', `iwmmxt2', `maverick', `mp' (Multiprocessing Extensions
   6886      for v7-A and v7-R architectures), `os' (Operating System for v6M
   6887      architecture), `sec' (Security Extensions for v6K and v7-A
   6888      architectures), `simd' (Advanced SIMD Extensions for v8-A
   6889      architecture, implies `fp'), `virt' (Virtualization Extensions for
   6890      v7-A architecture, implies `idiv'), and `xscale'.
   6891 
   6892 `-march=ARCHITECTURE[+EXTENSION...]'
   6893      This option specifies the target architecture.  The assembler will
   6894      issue an error message if an attempt is made to assemble an
   6895      instruction which will not execute on the target architecture.
   6896      The following architecture names are recognized: `armv1', `armv2',
   6897      `armv2a', `armv2s', `armv3', `armv3m', `armv4', `armv4xm',
   6898      `armv4t', `armv4txm', `armv5', `armv5t', `armv5txm', `armv5te',
   6899      `armv5texp', `armv6', `armv6j', `armv6k', `armv6z', `armv6zk',
   6900      `armv6-m', `armv6s-m', `armv7', `armv7-a', `armv7ve', `armv7-r',
   6901      `armv7-m', `armv7e-m', `armv8-a', `iwmmxt' and `xscale'.  If both
   6902      `-mcpu' and `-march' are specified, the assembler will use the
   6903      setting for `-mcpu'.
   6904 
   6905      The architecture option can be extended with the same instruction
   6906      set extension options as the `-mcpu' option.
   6907 
   6908 `-mfpu=FLOATING-POINT-FORMAT'
   6909      This option specifies the floating point format to assemble for.
   6910      The assembler will issue an error message if an attempt is made to
   6911      assemble an instruction which will not execute on the target
   6912      floating point unit.  The following format options are recognized:
   6913      `softfpa', `fpe', `fpe2', `fpe3', `fpa', `fpa10', `fpa11',
   6914      `arm7500fe', `softvfp', `softvfp+vfp', `vfp', `vfp10', `vfp10-r0',
   6915      `vfp9', `vfpxd', `vfpv2', `vfpv3', `vfpv3-fp16', `vfpv3-d16',
   6916      `vfpv3-d16-fp16', `vfpv3xd', `vfpv3xd-d16', `vfpv4', `vfpv4-d16',
   6917      `fpv4-sp-d16', `fp-armv8', `arm1020t', `arm1020e', `arm1136jf-s',
   6918      `maverick', `neon', `neon-vfpv4', `neon-fp-armv8', and
   6919      `crypto-neon-fp-armv8'.
   6920 
   6921      In addition to determining which instructions are assembled, this
   6922      option also affects the way in which the `.double' assembler
   6923      directive behaves when assembling little-endian code.
   6924 
   6925      The default is dependent on the processor selected.  For
   6926      Architecture 5 or later, the default is to assembler for VFP
   6927      instructions; for earlier architectures the default is to assemble
   6928      for FPA instructions.
   6929 
   6930 `-mthumb'
   6931      This option specifies that the assembler should start assembling
   6932      Thumb instructions; that is, it should behave as though the file
   6933      starts with a `.code 16' directive.
   6934 
   6935 `-mthumb-interwork'
   6936      This option specifies that the output generated by the assembler
   6937      should be marked as supporting interworking.
   6938 
   6939 `-mimplicit-it=never'
   6940 `-mimplicit-it=always'
   6941 `-mimplicit-it=arm'
   6942 `-mimplicit-it=thumb'
   6943      The `-mimplicit-it' option controls the behavior of the assembler
   6944      when conditional instructions are not enclosed in IT blocks.
   6945      There are four possible behaviors.  If `never' is specified, such
   6946      constructs cause a warning in ARM code and an error in Thumb-2
   6947      code.  If `always' is specified, such constructs are accepted in
   6948      both ARM and Thumb-2 code, where the IT instruction is added
   6949      implicitly.  If `arm' is specified, such constructs are accepted
   6950      in ARM code and cause an error in Thumb-2 code.  If `thumb' is
   6951      specified, such constructs cause a warning in ARM code and are
   6952      accepted in Thumb-2 code.  If you omit this option, the behavior
   6953      is equivalent to `-mimplicit-it=arm'.
   6954 
   6955 `-mapcs-26'
   6956 `-mapcs-32'
   6957      These options specify that the output generated by the assembler
   6958      should be marked as supporting the indicated version of the Arm
   6959      Procedure.  Calling Standard.
   6960 
   6961 `-matpcs'
   6962      This option specifies that the output generated by the assembler
   6963      should be marked as supporting the Arm/Thumb Procedure Calling
   6964      Standard.  If enabled this option will cause the assembler to
   6965      create an empty debugging section in the object file called
   6966      .arm.atpcs.  Debuggers can use this to determine the ABI being
   6967      used by.
   6968 
   6969 `-mapcs-float'
   6970      This indicates the floating point variant of the APCS should be
   6971      used.  In this variant floating point arguments are passed in FP
   6972      registers rather than integer registers.
   6973 
   6974 `-mapcs-reentrant'
   6975      This indicates that the reentrant variant of the APCS should be
   6976      used.  This variant supports position independent code.
   6977 
   6978 `-mfloat-abi=ABI'
   6979      This option specifies that the output generated by the assembler
   6980      should be marked as using specified floating point ABI.  The
   6981      following values are recognized: `soft', `softfp' and `hard'.
   6982 
   6983 `-meabi=VER'
   6984      This option specifies which EABI version the produced object files
   6985      should conform to.  The following values are recognized: `gnu', `4'
   6986      and `5'.
   6987 
   6988 `-EB'
   6989      This option specifies that the output generated by the assembler
   6990      should be marked as being encoded for a big-endian processor.
   6991 
   6992 `-EL'
   6993      This option specifies that the output generated by the assembler
   6994      should be marked as being encoded for a little-endian processor.
   6995 
   6996 `-k'
   6997      This option specifies that the output of the assembler should be
   6998      marked as position-independent code (PIC).
   6999 
   7000 `--fix-v4bx'
   7001      Allow `BX' instructions in ARMv4 code.  This is intended for use
   7002      with the linker option of the same name.
   7003 
   7004 `-mwarn-deprecated'
   7005 `-mno-warn-deprecated'
   7006      Enable or disable warnings about using deprecated options or
   7007      features.  The default is to warn.
   7008 
   7009 `-mccs'
   7010      Turns on CodeComposer Studio assembly syntax compatibility mode.
   7011 
   7012 
   7013 
   7014 File: as.info,  Node: ARM Syntax,  Next: ARM Floating Point,  Prev: ARM Options,  Up: ARM-Dependent
   7015 
   7016 9.4.2 Syntax
   7017 ------------
   7018 
   7019 * Menu:
   7020 
   7021 * ARM-Instruction-Set::      Instruction Set
   7022 * ARM-Chars::                Special Characters
   7023 * ARM-Regs::                 Register Names
   7024 * ARM-Relocations::	     Relocations
   7025 * ARM-Neon-Alignment::	     NEON Alignment Specifiers
   7026 
   7027 
   7028 File: as.info,  Node: ARM-Instruction-Set,  Next: ARM-Chars,  Up: ARM Syntax
   7029 
   7030 9.4.2.1 Instruction Set Syntax
   7031 ..............................
   7032 
   7033 Two slightly different syntaxes are support for ARM and THUMB
   7034 instructions.  The default, `divided', uses the old style where ARM and
   7035 THUMB instructions had their own, separate syntaxes.  The new,
   7036 `unified' syntax, which can be selected via the `.syntax' directive,
   7037 and has the following main features:
   7038 
   7039    * Immediate operands do not require a `#' prefix.
   7040 
   7041    * The `IT' instruction may appear, and if it does it is validated
   7042      against subsequent conditional affixes.  In ARM mode it does not
   7043      generate machine code, in THUMB mode it does.
   7044 
   7045    * For ARM instructions the conditional affixes always appear at the
   7046      end of the instruction.  For THUMB instructions conditional
   7047      affixes can be used, but only inside the scope of an `IT'
   7048      instruction.
   7049 
   7050    * All of the instructions new to the V6T2 architecture (and later)
   7051      are available.  (Only a few such instructions can be written in the
   7052      `divided' syntax).
   7053 
   7054    * The `.N' and `.W' suffixes are recognized and honored.
   7055 
   7056    * All instructions set the flags if and only if they have an `s'
   7057      affix.
   7058 
   7059 
   7060 File: as.info,  Node: ARM-Chars,  Next: ARM-Regs,  Prev: ARM-Instruction-Set,  Up: ARM Syntax
   7061 
   7062 9.4.2.2 Special Characters
   7063 ..........................
   7064 
   7065 The presence of a `@' anywhere on a line indicates the start of a
   7066 comment that extends to the end of that line.
   7067 
   7068    If a `#' appears as the first character of a line then the whole
   7069 line is treated as a comment, but in this case the line could also be a
   7070 logical line number directive (*note Comments::) or a preprocessor
   7071 control command (*note Preprocessing::).
   7072 
   7073    The `;' character can be used instead of a newline to separate
   7074 statements.
   7075 
   7076    Either `#' or `$' can be used to indicate immediate operands.
   7077 
   7078    *TODO* Explain about /data modifier on symbols.
   7079 
   7080 
   7081 File: as.info,  Node: ARM-Regs,  Next: ARM-Relocations,  Prev: ARM-Chars,  Up: ARM Syntax
   7082 
   7083 9.4.2.3 Register Names
   7084 ......................
   7085 
   7086 *TODO* Explain about ARM register naming, and the predefined names.
   7087 
   7088 
   7089 File: as.info,  Node: ARM-Relocations,  Next: ARM-Neon-Alignment,  Prev: ARM-Regs,  Up: ARM Syntax
   7090 
   7091 9.4.2.4 ARM relocation generation
   7092 .................................
   7093 
   7094 Specific data relocations can be generated by putting the relocation
   7095 name in parentheses after the symbol name.  For example:
   7096 
   7097              .word foo(TARGET1)
   7098 
   7099    This will generate an `R_ARM_TARGET1' relocation against the symbol
   7100 FOO.  The following relocations are supported: `GOT', `GOTOFF',
   7101 `TARGET1', `TARGET2', `SBREL', `TLSGD', `TLSLDM', `TLSLDO', `TLSDESC',
   7102 `TLSCALL', `GOTTPOFF', `GOT_PREL' and `TPOFF'.
   7103 
   7104    For compatibility with older toolchains the assembler also accepts
   7105 `(PLT)' after branch targets.  On legacy targets this will generate the
   7106 deprecated `R_ARM_PLT32' relocation.  On EABI targets it will encode
   7107 either the `R_ARM_CALL' or `R_ARM_JUMP24' relocation, as appropriate.
   7108 
   7109    Relocations for `MOVW' and `MOVT' instructions can be generated by
   7110 prefixing the value with `#:lower16:' and `#:upper16' respectively.
   7111 For example to load the 32-bit address of foo into r0:
   7112 
   7113              MOVW r0, #:lower16:foo
   7114              MOVT r0, #:upper16:foo
   7115 
   7116 
   7117 File: as.info,  Node: ARM-Neon-Alignment,  Prev: ARM-Relocations,  Up: ARM Syntax
   7118 
   7119 9.4.2.5 NEON Alignment Specifiers
   7120 .................................
   7121 
   7122 Some NEON load/store instructions allow an optional address alignment
   7123 qualifier.  The ARM documentation specifies that this is indicated by
   7124 `@ ALIGN'. However GAS already interprets the `@' character as a "line
   7125 comment" start, so `: ALIGN' is used instead.  For example:
   7126 
   7127              vld1.8 {q0}, [r0, :128]
   7128 
   7129 
   7130 File: as.info,  Node: ARM Floating Point,  Next: ARM Directives,  Prev: ARM Syntax,  Up: ARM-Dependent
   7131 
   7132 9.4.3 Floating Point
   7133 --------------------
   7134 
   7135 The ARM family uses IEEE floating-point numbers.
   7136 
   7137 
   7138 File: as.info,  Node: ARM Directives,  Next: ARM Opcodes,  Prev: ARM Floating Point,  Up: ARM-Dependent
   7139 
   7140 9.4.4 ARM Machine Directives
   7141 ----------------------------
   7142 
   7143 `.2byte EXPRESSION [, EXPRESSION]*'
   7144 `.4byte EXPRESSION [, EXPRESSION]*'
   7145 `.8byte EXPRESSION [, EXPRESSION]*'
   7146      These directives write 2, 4 or 8 byte values to the output section.
   7147 
   7148 `.align EXPRESSION [, EXPRESSION]'
   7149      This is the generic .ALIGN directive.  For the ARM however if the
   7150      first argument is zero (ie no alignment is needed) the assembler
   7151      will behave as if the argument had been 2 (ie pad to the next four
   7152      byte boundary).  This is for compatibility with ARM's own
   7153      assembler.
   7154 
   7155 `.arch NAME'
   7156      Select the target architecture.  Valid values for NAME are the
   7157      same as for the `-march' commandline option.
   7158 
   7159      Specifying `.arch' clears any previously selected architecture
   7160      extensions.
   7161 
   7162 `.arch_extension NAME'
   7163      Add or remove an architecture extension to the target
   7164      architecture.  Valid values for NAME are the same as those
   7165      accepted as architectural extensions by the `-mcpu' commandline
   7166      option.
   7167 
   7168      `.arch_extension' may be used multiple times to add or remove
   7169      extensions incrementally to the architecture being compiled for.
   7170 
   7171 `.arm'
   7172      This performs the same action as .CODE 32.
   7173 
   7174 `.bss'
   7175      This directive switches to the `.bss' section.
   7176 
   7177 `.cantunwind'
   7178      Prevents unwinding through the current function.  No personality
   7179      routine or exception table data is required or permitted.
   7180 
   7181 `.code `[16|32]''
   7182      This directive selects the instruction set being generated. The
   7183      value 16 selects Thumb, with the value 32 selecting ARM.
   7184 
   7185 `.cpu NAME'
   7186      Select the target processor.  Valid values for NAME are the same as
   7187      for the `-mcpu' commandline option.
   7188 
   7189      Specifying `.cpu' clears any previously selected architecture
   7190      extensions.
   7191 
   7192 `NAME .dn REGISTER NAME [.TYPE] [[INDEX]]'
   7193 `NAME .qn REGISTER NAME [.TYPE] [[INDEX]]'
   7194      The `dn' and `qn' directives are used to create typed and/or
   7195      indexed register aliases for use in Advanced SIMD Extension (Neon)
   7196      instructions.  The former should be used to create aliases of
   7197      double-precision registers, and the latter to create aliases of
   7198      quad-precision registers.
   7199 
   7200      If these directives are used to create typed aliases, those
   7201      aliases can be used in Neon instructions instead of writing types
   7202      after the mnemonic or after each operand.  For example:
   7203 
   7204                   x .dn d2.f32
   7205                   y .dn d3.f32
   7206                   z .dn d4.f32[1]
   7207                   vmul x,y,z
   7208 
   7209      This is equivalent to writing the following:
   7210 
   7211                   vmul.f32 d2,d3,d4[1]
   7212 
   7213      Aliases created using `dn' or `qn' can be destroyed using `unreq'.
   7214 
   7215 `.eabi_attribute TAG, VALUE'
   7216      Set the EABI object attribute TAG to VALUE.
   7217 
   7218      The TAG is either an attribute number, or one of the following:
   7219      `Tag_CPU_raw_name', `Tag_CPU_name', `Tag_CPU_arch',
   7220      `Tag_CPU_arch_profile', `Tag_ARM_ISA_use', `Tag_THUMB_ISA_use',
   7221      `Tag_FP_arch', `Tag_WMMX_arch', `Tag_Advanced_SIMD_arch',
   7222      `Tag_PCS_config', `Tag_ABI_PCS_R9_use', `Tag_ABI_PCS_RW_data',
   7223      `Tag_ABI_PCS_RO_data', `Tag_ABI_PCS_GOT_use',
   7224      `Tag_ABI_PCS_wchar_t', `Tag_ABI_FP_rounding',
   7225      `Tag_ABI_FP_denormal', `Tag_ABI_FP_exceptions',
   7226      `Tag_ABI_FP_user_exceptions', `Tag_ABI_FP_number_model',
   7227      `Tag_ABI_align_needed', `Tag_ABI_align_preserved',
   7228      `Tag_ABI_enum_size', `Tag_ABI_HardFP_use', `Tag_ABI_VFP_args',
   7229      `Tag_ABI_WMMX_args', `Tag_ABI_optimization_goals',
   7230      `Tag_ABI_FP_optimization_goals', `Tag_compatibility',
   7231      `Tag_CPU_unaligned_access', `Tag_FP_HP_extension',
   7232      `Tag_ABI_FP_16bit_format', `Tag_MPextension_use', `Tag_DIV_use',
   7233      `Tag_nodefaults', `Tag_also_compatible_with', `Tag_conformance',
   7234      `Tag_T2EE_use', `Tag_Virtualization_use'
   7235 
   7236      The VALUE is either a `number', `"string"', or `number, "string"'
   7237      depending on the tag.
   7238 
   7239      Note - the following legacy values are also accepted by TAG:
   7240      `Tag_VFP_arch', `Tag_ABI_align8_needed',
   7241      `Tag_ABI_align8_preserved', `Tag_VFP_HP_extension',
   7242 
   7243 `.even'
   7244      This directive aligns to an even-numbered address.
   7245 
   7246 `.extend  EXPRESSION [, EXPRESSION]*'
   7247 `.ldouble  EXPRESSION [, EXPRESSION]*'
   7248      These directives write 12byte long double floating-point values to
   7249      the output section.  These are not compatible with current ARM
   7250      processors or ABIs.
   7251 
   7252 `.fnend'
   7253      Marks the end of a function with an unwind table entry.  The
   7254      unwind index table entry is created when this directive is
   7255      processed.
   7256 
   7257      If no personality routine has been specified then standard
   7258      personality routine 0 or 1 will be used, depending on the number
   7259      of unwind opcodes required.
   7260 
   7261 `.fnstart'
   7262      Marks the start of a function with an unwind table entry.
   7263 
   7264 `.force_thumb'
   7265      This directive forces the selection of Thumb instructions, even if
   7266      the target processor does not support those instructions
   7267 
   7268 `.fpu NAME'
   7269      Select the floating-point unit to assemble for.  Valid values for
   7270      NAME are the same as for the `-mfpu' commandline option.
   7271 
   7272 `.handlerdata'
   7273      Marks the end of the current function, and the start of the
   7274      exception table entry for that function.  Anything between this
   7275      directive and the `.fnend' directive will be added to the
   7276      exception table entry.
   7277 
   7278      Must be preceded by a `.personality' or `.personalityindex'
   7279      directive.
   7280 
   7281 `.inst OPCODE [ , ... ]'
   7282 `.inst.n OPCODE [ , ... ]'
   7283 `.inst.w OPCODE [ , ... ]'
   7284      Generates the instruction corresponding to the numerical value
   7285      OPCODE.  `.inst.n' and `.inst.w' allow the Thumb instruction size
   7286      to be specified explicitly, overriding the normal encoding rules.
   7287 
   7288 `.ldouble  EXPRESSION [, EXPRESSION]*'
   7289      See `.extend'.
   7290 
   7291 `.ltorg'
   7292      This directive causes the current contents of the literal pool to
   7293      be dumped into the current section (which is assumed to be the
   7294      .text section) at the current location (aligned to a word
   7295      boundary).  `GAS' maintains a separate literal pool for each
   7296      section and each sub-section.  The `.ltorg' directive will only
   7297      affect the literal pool of the current section and sub-section.
   7298      At the end of assembly all remaining, un-empty literal pools will
   7299      automatically be dumped.
   7300 
   7301      Note - older versions of `GAS' would dump the current literal pool
   7302      any time a section change occurred.  This is no longer done, since
   7303      it prevents accurate control of the placement of literal pools.
   7304 
   7305 `.movsp REG [, #OFFSET]'
   7306      Tell the unwinder that REG contains an offset from the current
   7307      stack pointer.  If OFFSET is not specified then it is assumed to be
   7308      zero.
   7309 
   7310 `.object_arch NAME'
   7311      Override the architecture recorded in the EABI object attribute
   7312      section.  Valid values for NAME are the same as for the `.arch'
   7313      directive.  Typically this is useful when code uses runtime
   7314      detection of CPU features.
   7315 
   7316 `.packed  EXPRESSION [, EXPRESSION]*'
   7317      This directive writes 12-byte packed floating-point values to the
   7318      output section.  These are not compatible with current ARM
   7319      processors or ABIs.
   7320 
   7321 `.pad #COUNT'
   7322      Generate unwinder annotations for a stack adjustment of COUNT
   7323      bytes.  A positive value indicates the function prologue allocated
   7324      stack space by decrementing the stack pointer.
   7325 
   7326 `.personality NAME'
   7327      Sets the personality routine for the current function to NAME.
   7328 
   7329 `.personalityindex INDEX'
   7330      Sets the personality routine for the current function to the EABI
   7331      standard routine number INDEX
   7332 
   7333 `.pool'
   7334      This is a synonym for .ltorg.
   7335 
   7336 `NAME .req REGISTER NAME'
   7337      This creates an alias for REGISTER NAME called NAME.  For example:
   7338 
   7339                   foo .req r0
   7340 
   7341 `.save REGLIST'
   7342      Generate unwinder annotations to restore the registers in REGLIST.
   7343      The format of REGLIST is the same as the corresponding
   7344      store-multiple instruction.
   7345 
   7346      _core registers_
   7347             .save {r4, r5, r6, lr}
   7348             stmfd sp!, {r4, r5, r6, lr}
   7349      _FPA registers_
   7350             .save f4, 2
   7351             sfmfd f4, 2, [sp]!
   7352      _VFP registers_
   7353             .save {d8, d9, d10}
   7354             fstmdx sp!, {d8, d9, d10}
   7355      _iWMMXt registers_
   7356             .save {wr10, wr11}
   7357             wstrd wr11, [sp, #-8]!
   7358             wstrd wr10, [sp, #-8]!
   7359           or
   7360             .save wr11
   7361             wstrd wr11, [sp, #-8]!
   7362             .save wr10
   7363             wstrd wr10, [sp, #-8]!
   7364 
   7365 `.setfp FPREG, SPREG [, #OFFSET]'
   7366      Make all unwinder annotations relative to a frame pointer.
   7367      Without this the unwinder will use offsets from the stack pointer.
   7368 
   7369      The syntax of this directive is the same as the `add' or `mov'
   7370      instruction used to set the frame pointer.  SPREG must be either
   7371      `sp' or mentioned in a previous `.movsp' directive.
   7372 
   7373           .movsp ip
   7374           mov ip, sp
   7375           ...
   7376           .setfp fp, ip, #4
   7377           add fp, ip, #4
   7378 
   7379 `.secrel32 EXPRESSION [, EXPRESSION]*'
   7380      This directive emits relocations that evaluate to the
   7381      section-relative offset of each expression's symbol.  This
   7382      directive is only supported for PE targets.
   7383 
   7384 `.syntax [`unified' | `divided']'
   7385      This directive sets the Instruction Set Syntax as described in the
   7386      *Note ARM-Instruction-Set:: section.
   7387 
   7388 `.thumb'
   7389      This performs the same action as .CODE 16.
   7390 
   7391 `.thumb_func'
   7392      This directive specifies that the following symbol is the name of a
   7393      Thumb encoded function.  This information is necessary in order to
   7394      allow the assembler and linker to generate correct code for
   7395      interworking between Arm and Thumb instructions and should be used
   7396      even if interworking is not going to be performed.  The presence
   7397      of this directive also implies `.thumb'
   7398 
   7399      This directive is not neccessary when generating EABI objects.  On
   7400      these targets the encoding is implicit when generating Thumb code.
   7401 
   7402 `.thumb_set'
   7403      This performs the equivalent of a `.set' directive in that it
   7404      creates a symbol which is an alias for another symbol (possibly
   7405      not yet defined).  This directive also has the added property in
   7406      that it marks the aliased symbol as being a thumb function entry
   7407      point, in the same way that the `.thumb_func' directive does.
   7408 
   7409 `.tlsdescseq TLS-VARIABLE'
   7410      This directive is used to annotate parts of an inlined TLS
   7411      descriptor trampoline.  Normally the trampoline is provided by the
   7412      linker, and this directive is not needed.
   7413 
   7414 `.unreq ALIAS-NAME'
   7415      This undefines a register alias which was previously defined using
   7416      the `req', `dn' or `qn' directives.  For example:
   7417 
   7418                   foo .req r0
   7419                   .unreq foo
   7420 
   7421      An error occurs if the name is undefined.  Note - this pseudo op
   7422      can be used to delete builtin in register name aliases (eg 'r0').
   7423      This should only be done if it is really necessary.
   7424 
   7425 `.unwind_raw OFFSET, BYTE1, ...'
   7426      Insert one of more arbitary unwind opcode bytes, which are known
   7427      to adjust the stack pointer by OFFSET bytes.
   7428 
   7429      For example `.unwind_raw 4, 0xb1, 0x01' is equivalent to `.save
   7430      {r0}'
   7431 
   7432 `.vsave VFP-REGLIST'
   7433      Generate unwinder annotations to restore the VFP registers in
   7434      VFP-REGLIST using FLDMD.  Also works for VFPv3 registers that are
   7435      to be restored using VLDM.  The format of VFP-REGLIST is the same
   7436      as the corresponding store-multiple instruction.
   7437 
   7438      _VFP registers_
   7439             .vsave {d8, d9, d10}
   7440             fstmdd sp!, {d8, d9, d10}
   7441      _VFPv3 registers_
   7442             .vsave {d15, d16, d17}
   7443             vstm sp!, {d15, d16, d17}
   7444 
   7445      Since FLDMX and FSTMX are now deprecated, this directive should be
   7446      used in favour of `.save' for saving VFP registers for ARMv6 and
   7447      above.
   7448 
   7449 
   7450 
   7451 File: as.info,  Node: ARM Opcodes,  Next: ARM Mapping Symbols,  Prev: ARM Directives,  Up: ARM-Dependent
   7452 
   7453 9.4.5 Opcodes
   7454 -------------
   7455 
   7456 `as' implements all the standard ARM opcodes.  It also implements
   7457 several pseudo opcodes, including several synthetic load instructions.
   7458 
   7459 `NOP'
   7460             nop
   7461 
   7462      This pseudo op will always evaluate to a legal ARM instruction
   7463      that does nothing.  Currently it will evaluate to MOV r0, r0.
   7464 
   7465 `LDR'
   7466             ldr <register> , = <expression>
   7467 
   7468      If expression evaluates to a numeric constant then a MOV or MVN
   7469      instruction will be used in place of the LDR instruction, if the
   7470      constant can be generated by either of these instructions.
   7471      Otherwise the constant will be placed into the nearest literal
   7472      pool (if it not already there) and a PC relative LDR instruction
   7473      will be generated.
   7474 
   7475 `ADR'
   7476             adr <register> <label>
   7477 
   7478      This instruction will load the address of LABEL into the indicated
   7479      register.  The instruction will evaluate to a PC relative ADD or
   7480      SUB instruction depending upon where the label is located.  If the
   7481      label is out of range, or if it is not defined in the same file
   7482      (and section) as the ADR instruction, then an error will be
   7483      generated.  This instruction will not make use of the literal pool.
   7484 
   7485 `ADRL'
   7486             adrl <register> <label>
   7487 
   7488      This instruction will load the address of LABEL into the indicated
   7489      register.  The instruction will evaluate to one or two PC relative
   7490      ADD or SUB instructions depending upon where the label is located.
   7491      If a second instruction is not needed a NOP instruction will be
   7492      generated in its place, so that this instruction is always 8 bytes
   7493      long.
   7494 
   7495      If the label is out of range, or if it is not defined in the same
   7496      file (and section) as the ADRL instruction, then an error will be
   7497      generated.  This instruction will not make use of the literal pool.
   7498 
   7499 
   7500    For information on the ARM or Thumb instruction sets, see `ARM
   7501 Software Development Toolkit Reference Manual', Advanced RISC Machines
   7502 Ltd.
   7503 
   7504 
   7505 File: as.info,  Node: ARM Mapping Symbols,  Next: ARM Unwinding Tutorial,  Prev: ARM Opcodes,  Up: ARM-Dependent
   7506 
   7507 9.4.6 Mapping Symbols
   7508 ---------------------
   7509 
   7510 The ARM ELF specification requires that special symbols be inserted
   7511 into object files to mark certain features:
   7512 
   7513 `$a'
   7514      At the start of a region of code containing ARM instructions.
   7515 
   7516 `$t'
   7517      At the start of a region of code containing THUMB instructions.
   7518 
   7519 `$d'
   7520      At the start of a region of data.
   7521 
   7522 
   7523    The assembler will automatically insert these symbols for you - there
   7524 is no need to code them yourself.  Support for tagging symbols ($b, $f,
   7525 $p and $m) which is also mentioned in the current ARM ELF specification
   7526 is not implemented.  This is because they have been dropped from the
   7527 new EABI and so tools cannot rely upon their presence.
   7528 
   7529 
   7530 File: as.info,  Node: ARM Unwinding Tutorial,  Prev: ARM Mapping Symbols,  Up: ARM-Dependent
   7531 
   7532 9.4.7 Unwinding
   7533 ---------------
   7534 
   7535 The ABI for the ARM Architecture specifies a standard format for
   7536 exception unwind information.  This information is used when an
   7537 exception is thrown to determine where control should be transferred.
   7538 In particular, the unwind information is used to determine which
   7539 function called the function that threw the exception, and which
   7540 function called that one, and so forth.  This information is also used
   7541 to restore the values of callee-saved registers in the function
   7542 catching the exception.
   7543 
   7544    If you are writing functions in assembly code, and those functions
   7545 call other functions that throw exceptions, you must use assembly
   7546 pseudo ops to ensure that appropriate exception unwind information is
   7547 generated.  Otherwise, if one of the functions called by your assembly
   7548 code throws an exception, the run-time library will be unable to unwind
   7549 the stack through your assembly code and your program will not behave
   7550 correctly.
   7551 
   7552    To illustrate the use of these pseudo ops, we will examine the code
   7553 that G++ generates for the following C++ input:
   7554 
   7555 
   7556 void callee (int *);
   7557 
   7558 int
   7559 caller ()
   7560 {
   7561   int i;
   7562   callee (&i);
   7563   return i;
   7564 }
   7565 
   7566    This example does not show how to throw or catch an exception from
   7567 assembly code.  That is a much more complex operation and should always
   7568 be done in a high-level language, such as C++, that directly supports
   7569 exceptions.
   7570 
   7571    The code generated by one particular version of G++ when compiling
   7572 the example above is:
   7573 
   7574 
   7575 _Z6callerv:
   7576 	.fnstart
   7577 .LFB2:
   7578 	@ Function supports interworking.
   7579 	@ args = 0, pretend = 0, frame = 8
   7580 	@ frame_needed = 1, uses_anonymous_args = 0
   7581 	stmfd	sp!, {fp, lr}
   7582 	.save {fp, lr}
   7583 .LCFI0:
   7584 	.setfp fp, sp, #4
   7585 	add	fp, sp, #4
   7586 .LCFI1:
   7587 	.pad #8
   7588 	sub	sp, sp, #8
   7589 .LCFI2:
   7590 	sub	r3, fp, #8
   7591 	mov	r0, r3
   7592 	bl	_Z6calleePi
   7593 	ldr	r3, [fp, #-8]
   7594 	mov	r0, r3
   7595 	sub	sp, fp, #4
   7596 	ldmfd	sp!, {fp, lr}
   7597 	bx	lr
   7598 .LFE2:
   7599 	.fnend
   7600 
   7601    Of course, the sequence of instructions varies based on the options
   7602 you pass to GCC and on the version of GCC in use.  The exact
   7603 instructions are not important since we are focusing on the pseudo ops
   7604 that are used to generate unwind information.
   7605 
   7606    An important assumption made by the unwinder is that the stack frame
   7607 does not change during the body of the function.  In particular, since
   7608 we assume that the assembly code does not itself throw an exception,
   7609 the only point where an exception can be thrown is from a call, such as
   7610 the `bl' instruction above.  At each call site, the same saved
   7611 registers (including `lr', which indicates the return address) must be
   7612 located in the same locations relative to the frame pointer.
   7613 
   7614    The `.fnstart' (*note .fnstart pseudo op: arm_fnstart.) pseudo op
   7615 appears immediately before the first instruction of the function while
   7616 the `.fnend' (*note .fnend pseudo op: arm_fnend.) pseudo op appears
   7617 immediately after the last instruction of the function.  These pseudo
   7618 ops specify the range of the function.
   7619 
   7620    Only the order of the other pseudos ops (e.g., `.setfp' or `.pad')
   7621 matters; their exact locations are irrelevant.  In the example above,
   7622 the compiler emits the pseudo ops with particular instructions.  That
   7623 makes it easier to understand the code, but it is not required for
   7624 correctness.  It would work just as well to emit all of the pseudo ops
   7625 other than `.fnend' in the same order, but immediately after `.fnstart'.
   7626 
   7627    The `.save' (*note .save pseudo op: arm_save.) pseudo op indicates
   7628 registers that have been saved to the stack so that they can be
   7629 restored before the function returns.  The argument to the `.save'
   7630 pseudo op is a list of registers to save.  If a register is
   7631 "callee-saved" (as specified by the ABI) and is modified by the
   7632 function you are writing, then your code must save the value before it
   7633 is modified and restore the original value before the function returns.
   7634 If an exception is thrown, the run-time library restores the values of
   7635 these registers from their locations on the stack before returning
   7636 control to the exception handler.  (Of course, if an exception is not
   7637 thrown, the function that contains the `.save' pseudo op restores these
   7638 registers in the function epilogue, as is done with the `ldmfd'
   7639 instruction above.)
   7640 
   7641    You do not have to save callee-saved registers at the very beginning
   7642 of the function and you do not need to use the `.save' pseudo op
   7643 immediately following the point at which the registers are saved.
   7644 However, if you modify a callee-saved register, you must save it on the
   7645 stack before modifying it and before calling any functions which might
   7646 throw an exception.  And, you must use the `.save' pseudo op to
   7647 indicate that you have done so.
   7648 
   7649    The `.pad' (*note .pad: arm_pad.) pseudo op indicates a modification
   7650 of the stack pointer that does not save any registers.  The argument is
   7651 the number of bytes (in decimal) that are subtracted from the stack
   7652 pointer.  (On ARM CPUs, the stack grows downwards, so subtracting from
   7653 the stack pointer increases the size of the stack.)
   7654 
   7655    The `.setfp' (*note .setfp pseudo op: arm_setfp.) pseudo op
   7656 indicates the register that contains the frame pointer.  The first
   7657 argument is the register that is set, which is typically `fp'.  The
   7658 second argument indicates the register from which the frame pointer
   7659 takes its value.  The third argument, if present, is the value (in
   7660 decimal) added to the register specified by the second argument to
   7661 compute the value of the frame pointer.  You should not modify the
   7662 frame pointer in the body of the function.
   7663 
   7664    If you do not use a frame pointer, then you should not use the
   7665 `.setfp' pseudo op.  If you do not use a frame pointer, then you should
   7666 avoid modifying the stack pointer outside of the function prologue.
   7667 Otherwise, the run-time library will be unable to find saved registers
   7668 when it is unwinding the stack.
   7669 
   7670    The pseudo ops described above are sufficient for writing assembly
   7671 code that calls functions which may throw exceptions.  If you need to
   7672 know more about the object-file format used to represent unwind
   7673 information, you may consult the `Exception Handling ABI for the ARM
   7674 Architecture' available from `http://infocenter.arm.com'.
   7675 
   7676 
   7677 File: as.info,  Node: AVR-Dependent,  Next: Blackfin-Dependent,  Prev: ARM-Dependent,  Up: Machine Dependencies
   7678 
   7679 9.5 AVR Dependent Features
   7680 ==========================
   7681 
   7682 * Menu:
   7683 
   7684 * AVR Options::              Options
   7685 * AVR Syntax::               Syntax
   7686 * AVR Opcodes::              Opcodes
   7687 
   7688 
   7689 File: as.info,  Node: AVR Options,  Next: AVR Syntax,  Up: AVR-Dependent
   7690 
   7691 9.5.1 Options
   7692 -------------
   7693 
   7694 `-mmcu=MCU'
   7695      Specify ATMEL AVR instruction set or MCU type.
   7696 
   7697      Instruction set avr1 is for the minimal AVR core, not supported by
   7698      the C compiler, only for assembler programs (MCU types: at90s1200,
   7699      attiny11, attiny12, attiny15, attiny28).
   7700 
   7701      Instruction set avr2 (default) is for the classic AVR core with up
   7702      to 8K program memory space (MCU types: at90s2313, at90s2323,
   7703      at90s2333, at90s2343, attiny22, attiny26, at90s4414, at90s4433,
   7704      at90s4434, at90s8515, at90c8534, at90s8535).
   7705 
   7706      Instruction set avr25 is for the classic AVR core with up to 8K
   7707      program memory space plus the MOVW instruction (MCU types:
   7708      attiny13, attiny13a, attiny2313, attiny2313a, attiny24, attiny24a,
   7709      attiny4313, attiny44, attiny44a, attiny84, attiny84a, attiny25,
   7710      attiny45, attiny85, attiny261, attiny261a, attiny461, attiny461a,
   7711      attiny861, attiny861a, attiny87, attiny43u, attiny48, attiny88,
   7712      attiny828, at86rf401, ata6289, ata5272).
   7713 
   7714      Instruction set avr3 is for the classic AVR core with up to 128K
   7715      program memory space (MCU types: at43usb355, at76c711).
   7716 
   7717      Instruction set avr31 is for the classic AVR core with exactly
   7718      128K program memory space (MCU types: atmega103, at43usb320).
   7719 
   7720      Instruction set avr35 is for classic AVR core plus MOVW, CALL, and
   7721      JMP instructions (MCU types: attiny167, attiny1634, at90usb82,
   7722      at90usb162, atmega8u2, atmega16u2, atmega32u2, ata5505).
   7723 
   7724      Instruction set avr4 is for the enhanced AVR core with up to 8K
   7725      program memory space (MCU types: atmega48, atmega48a, atmega48pa,
   7726      atmega48p, atmega8, atmega8a, atmega88, atmega88a, atmega88p,
   7727      atmega88pa, atmega8515, atmega8535, atmega8hva, at90pwm1,
   7728      at90pwm2, at90pwm2b, at90pwm3, at90pwm3b, at90pwm81, ata6285,
   7729      ata6286).
   7730 
   7731      Instruction set avr5 is for the enhanced AVR core with up to 128K
   7732      program memory space (MCU types: at90pwm161, atmega16, atmega16a,
   7733      atmega161, atmega162, atmega163, atmega164a, atmega164p,
   7734      atmega164pa, atmega165, atmega165a, atmega165p, atmega165pa,
   7735      atmega168, atmega168a, atmega168p, atmega168pa, atmega169,
   7736      atmega169a, atmega169p, atmega169pa, atmega32, atmega323,
   7737      atmega324a, atmega324p, atmega324pa, atmega325, atmega325a,
   7738      atmega32, atmega32a, atmega323, atmega324a, atmega324p,
   7739      atmega324pa, atmega325, atmega325a, atmega325p, atmega325p,
   7740      atmega325pa, atmega3250, atmega3250a, atmega3250p, atmega3250pa,
   7741      atmega328, atmega328p, atmega329, atmega329a, atmega329p,
   7742      atmega329pa, atmega3290a, atmega3290p, atmega3290pa, atmega406,
   7743      atmega64, atmega64a, atmega64rfr2, atmega644rfr2, atmega640,
   7744      atmega644, atmega644a, atmega644p, atmega644pa, atmega645,
   7745      atmega645a, atmega645p, atmega6450, atmega6450a, atmega6450p,
   7746      atmega649, atmega649a, atmega649p, atmega6490, atmega6490a,
   7747      atmega6490p, atmega16hva, atmega16hva2, atmega16hvb,
   7748      atmega16hvbrevb, atmega32hvb, atmega32hvbrevb, atmega64hve,
   7749      at90can32, at90can64, at90pwm161, at90pwm216, at90pwm316,
   7750      atmega32c1, atmega64c1, atmega16m1, atmega32m1, atmega64m1,
   7751      atmega16u4, atmega32u4, atmega32u6, at90usb646, at90usb647, at94k,
   7752      at90scr100, ata5790, ata5795).
   7753 
   7754      Instruction set avr51 is for the enhanced AVR core with exactly
   7755      128K program memory space (MCU types: atmega128, atmega128a,
   7756      atmega1280, atmega1281, atmega1284, atmega1284p, atmega128rfa1,
   7757      atmega128rfr2, atmega1284rfr2, at90can128, at90usb1286,
   7758      at90usb1287, m3000).
   7759 
   7760      Instruction set avr6 is for the enhanced AVR core with a 3-byte PC
   7761      (MCU types: atmega2560, atmega2561, atmega256rfr2, atmega2564rfr2).
   7762 
   7763      Instruction set avrxmega2 is for the XMEGA AVR core with 8K to 64K
   7764      program memory space and less than 64K data space (MCU types:
   7765      atxmega16a4, atxmega16a4u, atxmega16c4, atxmega16d4, atxmega16x1,
   7766      atxmega32a4, atxmega32a4u, atxmega32c4, atxmega32d4, atxmega16e5,
   7767      atxmega8e5, atxmega32e5, atxmega32x1).
   7768 
   7769      Instruction set avrxmega3 is for the XMEGA AVR core with 8K to 64K
   7770      program memory space and greater than 64K data space (MCU types:
   7771      none).
   7772 
   7773      Instruction set avrxmega4 is for the XMEGA AVR core with up to 64K
   7774      program memory space and less than 64K data space (MCU types:
   7775      atxmega64a3, atxmega64a3u, atxmega64a4u, atxmega64b1, atxmega64b3,
   7776      atxmega64c3, atxmega64d3, atxmega64d4).
   7777 
   7778      Instruction set avrxmega5 is for the XMEGA AVR core with up to 64K
   7779      program memory space and greater than 64K data space (MCU types:
   7780      atxmega64a1, atxmega64a1u).
   7781 
   7782      Instruction set avrxmega6 is for the XMEGA AVR core with larger
   7783      than 64K program memory space and less than 64K data space (MCU
   7784      types: atxmega128a3, atxmega128a3u, atxmega128c3, atxmega128d3,
   7785      atxmega128d4, atxmega192a3, atxmega192a3u, atxmega128b1,
   7786      atxmega128b3, atxmega192c3, atxmega192d3, atxmega256a3,
   7787      atxmega256a3u, atxmega256a3b, atxmega256a3bu, atxmega256c3,
   7788      atxmega256d3, atxmega384c3, atxmega256d3).
   7789 
   7790      Instruction set avrxmega7 is for the XMEGA AVR core with larger
   7791      than 64K program memory space and greater than 64K data space (MCU
   7792      types: atxmega128a1, atxmega128a1u, atxmega128a4u).
   7793 
   7794      Instruction set avrtiny is for the ATtiny4/5/9/10/20/40
   7795      microcontrollers.
   7796 
   7797 `-mall-opcodes'
   7798      Accept all AVR opcodes, even if not supported by `-mmcu'.
   7799 
   7800 `-mno-skip-bug'
   7801      This option disable warnings for skipping two-word instructions.
   7802 
   7803 `-mno-wrap'
   7804      This option reject `rjmp/rcall' instructions with 8K wrap-around.
   7805 
   7806 `-mrmw'
   7807      Accept Read-Modify-Write (`XCH,LAC,LAS,LAT') instructions.
   7808 
   7809 
   7810 
   7811 File: as.info,  Node: AVR Syntax,  Next: AVR Opcodes,  Prev: AVR Options,  Up: AVR-Dependent
   7812 
   7813 9.5.2 Syntax
   7814 ------------
   7815 
   7816 * Menu:
   7817 
   7818 * AVR-Chars::                Special Characters
   7819 * AVR-Regs::                 Register Names
   7820 * AVR-Modifiers::            Relocatable Expression Modifiers
   7821 
   7822 
   7823 File: as.info,  Node: AVR-Chars,  Next: AVR-Regs,  Up: AVR Syntax
   7824 
   7825 9.5.2.1 Special Characters
   7826 ..........................
   7827 
   7828 The presence of a `;' anywhere on a line indicates the start of a
   7829 comment that extends to the end of that line.
   7830 
   7831    If a `#' appears as the first character of a line, the whole line is
   7832 treated as a comment, but in this case the line can also be a logical
   7833 line number directive (*note Comments::) or a preprocessor control
   7834 command (*note Preprocessing::).
   7835 
   7836    The `$' character can be used instead of a newline to separate
   7837 statements.
   7838 
   7839 
   7840 File: as.info,  Node: AVR-Regs,  Next: AVR-Modifiers,  Prev: AVR-Chars,  Up: AVR Syntax
   7841 
   7842 9.5.2.2 Register Names
   7843 ......................
   7844 
   7845 The AVR has 32 x 8-bit general purpose working registers `r0', `r1',
   7846 ... `r31'.  Six of the 32 registers can be used as three 16-bit
   7847 indirect address register pointers for Data Space addressing. One of
   7848 the these address pointers can also be used as an address pointer for
   7849 look up tables in Flash program memory. These added function registers
   7850 are the 16-bit `X', `Y' and `Z' - registers.
   7851 
   7852      X = r26:r27
   7853      Y = r28:r29
   7854      Z = r30:r31
   7855 
   7856 
   7857 File: as.info,  Node: AVR-Modifiers,  Prev: AVR-Regs,  Up: AVR Syntax
   7858 
   7859 9.5.2.3 Relocatable Expression Modifiers
   7860 ........................................
   7861 
   7862 The assembler supports several modifiers when using relocatable
   7863 addresses in AVR instruction operands.  The general syntax is the
   7864 following:
   7865 
   7866      modifier(relocatable-expression)
   7867 
   7868 `lo8'
   7869      This modifier allows you to use bits 0 through 7 of an address
   7870      expression as 8 bit relocatable expression.
   7871 
   7872 `hi8'
   7873      This modifier allows you to use bits 7 through 15 of an address
   7874      expression as 8 bit relocatable expression.  This is useful with,
   7875      for example, the AVR `ldi' instruction and `lo8' modifier.
   7876 
   7877      For example
   7878 
   7879           ldi r26, lo8(sym+10)
   7880           ldi r27, hi8(sym+10)
   7881 
   7882 `hh8'
   7883      This modifier allows you to use bits 16 through 23 of an address
   7884      expression as 8 bit relocatable expression.  Also, can be useful
   7885      for loading 32 bit constants.
   7886 
   7887 `hlo8'
   7888      Synonym of `hh8'.
   7889 
   7890 `hhi8'
   7891      This modifier allows you to use bits 24 through 31 of an
   7892      expression as 8 bit expression. This is useful with, for example,
   7893      the AVR `ldi' instruction and `lo8', `hi8', `hlo8', `hhi8',
   7894      modifier.
   7895 
   7896      For example
   7897 
   7898           ldi r26, lo8(285774925)
   7899           ldi r27, hi8(285774925)
   7900           ldi r28, hlo8(285774925)
   7901           ldi r29, hhi8(285774925)
   7902           ; r29,r28,r27,r26 = 285774925
   7903 
   7904 `pm_lo8'
   7905      This modifier allows you to use bits 0 through 7 of an address
   7906      expression as 8 bit relocatable expression.  This modifier useful
   7907      for addressing data or code from Flash/Program memory. The using
   7908      of `pm_lo8' similar to `lo8'.
   7909 
   7910 `pm_hi8'
   7911      This modifier allows you to use bits 8 through 15 of an address
   7912      expression as 8 bit relocatable expression.  This modifier useful
   7913      for addressing data or code from Flash/Program memory.
   7914 
   7915 `pm_hh8'
   7916      This modifier allows you to use bits 15 through 23 of an address
   7917      expression as 8 bit relocatable expression.  This modifier useful
   7918      for addressing data or code from Flash/Program memory.
   7919 
   7920 
   7921 
   7922 File: as.info,  Node: AVR Opcodes,  Prev: AVR Syntax,  Up: AVR-Dependent
   7923 
   7924 9.5.3 Opcodes
   7925 -------------
   7926 
   7927 For detailed information on the AVR machine instruction set, see
   7928 `www.atmel.com/products/AVR'.
   7929 
   7930    `as' implements all the standard AVR opcodes.  The following table
   7931 summarizes the AVR opcodes, and their arguments.
   7932 
   7933      Legend:
   7934         r   any register
   7935         d   `ldi' register (r16-r31)
   7936         v   `movw' even register (r0, r2, ..., r28, r30)
   7937         a   `fmul' register (r16-r23)
   7938         w   `adiw' register (r24,r26,r28,r30)
   7939         e   pointer registers (X,Y,Z)
   7940         b   base pointer register and displacement ([YZ]+disp)
   7941         z   Z pointer register (for [e]lpm Rd,Z[+])
   7942         M   immediate value from 0 to 255
   7943         n   immediate value from 0 to 255 ( n = ~M ). Relocation impossible
   7944         s   immediate value from 0 to 7
   7945         P   Port address value from 0 to 63. (in, out)
   7946         p   Port address value from 0 to 31. (cbi, sbi, sbic, sbis)
   7947         K   immediate value from 0 to 63 (used in `adiw', `sbiw')
   7948         i   immediate value
   7949         l   signed pc relative offset from -64 to 63
   7950         L   signed pc relative offset from -2048 to 2047
   7951         h   absolute code address (call, jmp)
   7952         S   immediate value from 0 to 7 (S = s << 4)
   7953         ?   use this opcode entry if no parameters, else use next opcode entry
   7954 
   7955      1001010010001000   clc
   7956      1001010011011000   clh
   7957      1001010011111000   cli
   7958      1001010010101000   cln
   7959      1001010011001000   cls
   7960      1001010011101000   clt
   7961      1001010010111000   clv
   7962      1001010010011000   clz
   7963      1001010000001000   sec
   7964      1001010001011000   seh
   7965      1001010001111000   sei
   7966      1001010000101000   sen
   7967      1001010001001000   ses
   7968      1001010001101000   set
   7969      1001010000111000   sev
   7970      1001010000011000   sez
   7971      100101001SSS1000   bclr    S
   7972      100101000SSS1000   bset    S
   7973      1001010100001001   icall
   7974      1001010000001001   ijmp
   7975      1001010111001000   lpm     ?
   7976      1001000ddddd010+   lpm     r,z
   7977      1001010111011000   elpm    ?
   7978      1001000ddddd011+   elpm    r,z
   7979      0000000000000000   nop
   7980      1001010100001000   ret
   7981      1001010100011000   reti
   7982      1001010110001000   sleep
   7983      1001010110011000   break
   7984      1001010110101000   wdr
   7985      1001010111101000   spm
   7986      000111rdddddrrrr   adc     r,r
   7987      000011rdddddrrrr   add     r,r
   7988      001000rdddddrrrr   and     r,r
   7989      000101rdddddrrrr   cp      r,r
   7990      000001rdddddrrrr   cpc     r,r
   7991      000100rdddddrrrr   cpse    r,r
   7992      001001rdddddrrrr   eor     r,r
   7993      001011rdddddrrrr   mov     r,r
   7994      100111rdddddrrrr   mul     r,r
   7995      001010rdddddrrrr   or      r,r
   7996      000010rdddddrrrr   sbc     r,r
   7997      000110rdddddrrrr   sub     r,r
   7998      001001rdddddrrrr   clr     r
   7999      000011rdddddrrrr   lsl     r
   8000      000111rdddddrrrr   rol     r
   8001      001000rdddddrrrr   tst     r
   8002      0111KKKKddddKKKK   andi    d,M
   8003      0111KKKKddddKKKK   cbr     d,n
   8004      1110KKKKddddKKKK   ldi     d,M
   8005      11101111dddd1111   ser     d
   8006      0110KKKKddddKKKK   ori     d,M
   8007      0110KKKKddddKKKK   sbr     d,M
   8008      0011KKKKddddKKKK   cpi     d,M
   8009      0100KKKKddddKKKK   sbci    d,M
   8010      0101KKKKddddKKKK   subi    d,M
   8011      1111110rrrrr0sss   sbrc    r,s
   8012      1111111rrrrr0sss   sbrs    r,s
   8013      1111100ddddd0sss   bld     r,s
   8014      1111101ddddd0sss   bst     r,s
   8015      10110PPdddddPPPP   in      r,P
   8016      10111PPrrrrrPPPP   out     P,r
   8017      10010110KKddKKKK   adiw    w,K
   8018      10010111KKddKKKK   sbiw    w,K
   8019      10011000pppppsss   cbi     p,s
   8020      10011010pppppsss   sbi     p,s
   8021      10011001pppppsss   sbic    p,s
   8022      10011011pppppsss   sbis    p,s
   8023      111101lllllll000   brcc    l
   8024      111100lllllll000   brcs    l
   8025      111100lllllll001   breq    l
   8026      111101lllllll100   brge    l
   8027      111101lllllll101   brhc    l
   8028      111100lllllll101   brhs    l
   8029      111101lllllll111   brid    l
   8030      111100lllllll111   brie    l
   8031      111100lllllll000   brlo    l
   8032      111100lllllll100   brlt    l
   8033      111100lllllll010   brmi    l
   8034      111101lllllll001   brne    l
   8035      111101lllllll010   brpl    l
   8036      111101lllllll000   brsh    l
   8037      111101lllllll110   brtc    l
   8038      111100lllllll110   brts    l
   8039      111101lllllll011   brvc    l
   8040      111100lllllll011   brvs    l
   8041      111101lllllllsss   brbc    s,l
   8042      111100lllllllsss   brbs    s,l
   8043      1101LLLLLLLLLLLL   rcall   L
   8044      1100LLLLLLLLLLLL   rjmp    L
   8045      1001010hhhhh111h   call    h
   8046      1001010hhhhh110h   jmp     h
   8047      1001010rrrrr0101   asr     r
   8048      1001010rrrrr0000   com     r
   8049      1001010rrrrr1010   dec     r
   8050      1001010rrrrr0011   inc     r
   8051      1001010rrrrr0110   lsr     r
   8052      1001010rrrrr0001   neg     r
   8053      1001000rrrrr1111   pop     r
   8054      1001001rrrrr1111   push    r
   8055      1001010rrrrr0111   ror     r
   8056      1001010rrrrr0010   swap    r
   8057      00000001ddddrrrr   movw    v,v
   8058      00000010ddddrrrr   muls    d,d
   8059      000000110ddd0rrr   mulsu   a,a
   8060      000000110ddd1rrr   fmul    a,a
   8061      000000111ddd0rrr   fmuls   a,a
   8062      000000111ddd1rrr   fmulsu  a,a
   8063      1001001ddddd0000   sts     i,r
   8064      1001000ddddd0000   lds     r,i
   8065      10o0oo0dddddbooo   ldd     r,b
   8066      100!000dddddee-+   ld      r,e
   8067      10o0oo1rrrrrbooo   std     b,r
   8068      100!001rrrrree-+   st      e,r
   8069      1001010100011001   eicall
   8070      1001010000011001   eijmp
   8071 
   8072 
   8073 File: as.info,  Node: Blackfin-Dependent,  Next: CR16-Dependent,  Prev: AVR-Dependent,  Up: Machine Dependencies
   8074 
   8075 9.6 Blackfin Dependent Features
   8076 ===============================
   8077 
   8078 * Menu:
   8079 
   8080 * Blackfin Options::		Blackfin Options
   8081 * Blackfin Syntax::		Blackfin Syntax
   8082 * Blackfin Directives::		Blackfin Directives
   8083 
   8084 
   8085 File: as.info,  Node: Blackfin Options,  Next: Blackfin Syntax,  Up: Blackfin-Dependent
   8086 
   8087 9.6.1 Options
   8088 -------------
   8089 
   8090 `-mcpu=PROCESSOR[-SIREVISION]'
   8091      This option specifies the target processor.  The optional
   8092      SIREVISION is not used in assembler.  It's here such that GCC can
   8093      easily pass down its `-mcpu=' option.  The assembler will issue an
   8094      error message if an attempt is made to assemble an instruction
   8095      which will not execute on the target processor.  The following
   8096      processor names are recognized: `bf504', `bf506', `bf512', `bf514',
   8097      `bf516', `bf518', `bf522', `bf523', `bf524', `bf525', `bf526',
   8098      `bf527', `bf531', `bf532', `bf533', `bf534', `bf535' (not
   8099      implemented yet), `bf536', `bf537', `bf538', `bf539', `bf542',
   8100      `bf542m', `bf544', `bf544m', `bf547', `bf547m', `bf548', `bf548m',
   8101      `bf549', `bf549m', `bf561', and `bf592'.
   8102 
   8103 `-mfdpic'
   8104      Assemble for the FDPIC ABI.
   8105 
   8106 `-mno-fdpic'
   8107 `-mnopic'
   8108      Disable -mfdpic.
   8109 
   8110 
   8111 File: as.info,  Node: Blackfin Syntax,  Next: Blackfin Directives,  Prev: Blackfin Options,  Up: Blackfin-Dependent
   8112 
   8113 9.6.2 Syntax
   8114 ------------
   8115 
   8116 `Special Characters'
   8117      Assembler input is free format and may appear anywhere on the line.
   8118      One instruction may extend across multiple lines or more than one
   8119      instruction may appear on the same line.  White space (space, tab,
   8120      comments or newline) may appear anywhere between tokens.  A token
   8121      must not have embedded spaces.  Tokens include numbers, register
   8122      names, keywords, user identifiers, and also some multicharacter
   8123      special symbols like "+=", "/*" or "||".
   8124 
   8125      Comments are introduced by the `#' character and extend to the end
   8126      of the current line.  If the `#' appears as the first character of
   8127      a line, the whole line is treated as a comment, but in this case
   8128      the line can also be a logical line number directive (*note
   8129      Comments::) or a preprocessor control command (*note
   8130      Preprocessing::).
   8131 
   8132 `Instruction Delimiting'
   8133      A semicolon must terminate every instruction.  Sometimes a complete
   8134      instruction will consist of more than one operation.  There are two
   8135      cases where this occurs.  The first is when two general operations
   8136      are combined.  Normally a comma separates the different parts, as
   8137      in
   8138 
   8139           a0= r3.h * r2.l, a1 = r3.l * r2.h ;
   8140 
   8141      The second case occurs when a general instruction is combined with
   8142      one or two memory references for joint issue.  The latter portions
   8143      are set off by a "||" token.
   8144 
   8145           a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++];
   8146 
   8147      Multiple instructions can occur on the same line.  Each must be
   8148      terminated by a semicolon character.
   8149 
   8150 `Register Names'
   8151      The assembler treats register names and instruction keywords in a
   8152      case insensitive manner.  User identifiers are case sensitive.
   8153      Thus, R3.l, R3.L, r3.l and r3.L are all equivalent input to the
   8154      assembler.
   8155 
   8156      Register names are reserved and may not be used as program
   8157      identifiers.
   8158 
   8159      Some operations (such as "Move Register") require a register pair.
   8160      Register pairs are always data registers and are denoted using a
   8161      colon, eg., R3:2.  The larger number must be written firsts.  Note
   8162      that the hardware only supports odd-even pairs, eg., R7:6, R5:4,
   8163      R3:2, and R1:0.
   8164 
   8165      Some instructions (such as -SP (Push Multiple)) require a group of
   8166      adjacent registers.  Adjacent registers are denoted in the syntax
   8167      by the range enclosed in parentheses and separated by a colon,
   8168      eg., (R7:3).  Again, the larger number appears first.
   8169 
   8170      Portions of a particular register may be individually specified.
   8171      This is written with a dot (".") following the register name and
   8172      then a letter denoting the desired portion.  For 32-bit registers,
   8173      ".H" denotes the most significant ("High") portion.  ".L" denotes
   8174      the least-significant portion.  The subdivisions of the 40-bit
   8175      registers are described later.
   8176 
   8177 `Accumulators'
   8178      The set of 40-bit registers A1 and A0 that normally contain data
   8179      that is being manipulated.  Each accumulator can be accessed in
   8180      four ways.
   8181 
   8182     `one 40-bit register'
   8183           The register will be referred to as A1 or A0.
   8184 
   8185     `one 32-bit register'
   8186           The registers are designated as A1.W or A0.W.
   8187 
   8188     `two 16-bit registers'
   8189           The registers are designated as A1.H, A1.L, A0.H or A0.L.
   8190 
   8191     `one 8-bit register'
   8192           The registers are designated as A1.X or A0.X for the bits that
   8193           extend beyond bit 31.
   8194 
   8195 `Data Registers'
   8196      The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7)
   8197      that normally contain data for manipulation.  These are
   8198      abbreviated as D-register or Dreg.  Data registers can be accessed
   8199      as 32-bit registers or as two independent 16-bit registers.  The
   8200      least significant 16 bits of each register is called the "low"
   8201      half and is designated with ".L" following the register name.  The
   8202      most significant 16 bits are called the "high" half and is
   8203      designated with ".H" following the name.
   8204 
   8205              R7.L, r2.h, r4.L, R0.H
   8206 
   8207 `Pointer Registers'
   8208      The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP)
   8209      that normally contain byte addresses of data structures.  These are
   8210      abbreviated as P-register or Preg.
   8211 
   8212           p2, p5, fp, sp
   8213 
   8214 `Stack Pointer SP'
   8215      The stack pointer contains the 32-bit address of the last occupied
   8216      byte location in the stack.  The stack grows by decrementing the
   8217      stack pointer.
   8218 
   8219 `Frame Pointer FP'
   8220      The frame pointer contains the 32-bit address of the previous frame
   8221      pointer in the stack.  It is located at the top of a frame.
   8222 
   8223 `Loop Top'
   8224      LT0 and LT1.  These registers contain the 32-bit address of the
   8225      top of a zero overhead loop.
   8226 
   8227 `Loop Count'
   8228      LC0 and LC1.  These registers contain the 32-bit counter of the
   8229      zero overhead loop executions.
   8230 
   8231 `Loop Bottom'
   8232      LB0 and LB1.  These registers contain the 32-bit address of the
   8233      bottom of a zero overhead loop.
   8234 
   8235 `Index Registers'
   8236      The set of 32-bit registers (I0, I1, I2, I3) that normally contain
   8237      byte addresses of data structures.  Abbreviated I-register or Ireg.
   8238 
   8239 `Modify Registers'
   8240      The set of 32-bit registers (M0, M1, M2, M3) that normally contain
   8241      offset values that are added and subtracted to one of the index
   8242      registers.  Abbreviated as Mreg.
   8243 
   8244 `Length Registers'
   8245      The set of 32-bit registers (L0, L1, L2, L3) that normally contain
   8246      the length in bytes of the circular buffer.  Abbreviated as Lreg.
   8247      Clear the Lreg to disable circular addressing for the
   8248      corresponding Ireg.
   8249 
   8250 `Base Registers'
   8251      The set of 32-bit registers (B0, B1, B2, B3) that normally contain
   8252      the base address in bytes of the circular buffer.  Abbreviated as
   8253      Breg.
   8254 
   8255 `Floating Point'
   8256      The Blackfin family has no hardware floating point but the .float
   8257      directive generates ieee floating point numbers for use with
   8258      software floating point libraries.
   8259 
   8260 `Blackfin Opcodes'
   8261      For detailed information on the Blackfin machine instruction set,
   8262      see the Blackfin(r) Processor Instruction Set Reference.
   8263 
   8264 
   8265 
   8266 File: as.info,  Node: Blackfin Directives,  Prev: Blackfin Syntax,  Up: Blackfin-Dependent
   8267 
   8268 9.6.3 Directives
   8269 ----------------
   8270 
   8271 The following directives are provided for compatibility with the VDSP
   8272 assembler.
   8273 
   8274 `.byte2'
   8275      Initializes a two byte data object.
   8276 
   8277      This maps to the `.short' directive.
   8278 
   8279 `.byte4'
   8280      Initializes a four byte data object.
   8281 
   8282      This maps to the `.int' directive.
   8283 
   8284 `.db'
   8285      Initializes a single byte data object.
   8286 
   8287      This directive is a synonym for `.byte'.
   8288 
   8289 `.dw'
   8290      Initializes a two byte data object.
   8291 
   8292      This directive is a synonym for `.byte2'.
   8293 
   8294 `.dd'
   8295      Initializes a four byte data object.
   8296 
   8297      This directive is a synonym for `.byte4'.
   8298 
   8299 `.var'
   8300      Define and initialize a 32 bit data object.
   8301 
   8302 
   8303 File: as.info,  Node: CR16-Dependent,  Next: CRIS-Dependent,  Prev: Blackfin-Dependent,  Up: Machine Dependencies
   8304 
   8305 9.7 CR16 Dependent Features
   8306 ===========================
   8307 
   8308 * Menu:
   8309 
   8310 * CR16 Operand Qualifiers::     CR16 Machine Operand Qualifiers
   8311 * CR16 Syntax::                 Syntax for the CR16
   8312 
   8313 
   8314 File: as.info,  Node: CR16 Operand Qualifiers,  Next: CR16 Syntax,  Up: CR16-Dependent
   8315 
   8316 9.7.1 CR16 Operand Qualifiers
   8317 -----------------------------
   8318 
   8319 The National Semiconductor CR16 target of `as' has a few machine
   8320 dependent operand qualifiers.
   8321 
   8322    Operand expression type qualifier is an optional field in the
   8323 instruction operand, to determines the type of the expression field of
   8324 an operand. The `@' is required. CR16 architecture uses one of the
   8325 following expression qualifiers:
   8326 
   8327 `s'
   8328      - `Specifies expression operand type as small'
   8329 
   8330 `m'
   8331      - `Specifies expression operand type as medium'
   8332 
   8333 `l'
   8334      - `Specifies expression operand type as large'
   8335 
   8336 `c'
   8337      - `Specifies the CR16 Assembler generates a relocation entry for
   8338      the operand, where pc has implied bit, the expression is adjusted
   8339      accordingly. The linker uses the relocation entry to update the
   8340      operand address at link time.'
   8341 
   8342 `got/GOT'
   8343      - `Specifies the CR16 Assembler generates a relocation entry for
   8344      the operand, offset from Global Offset Table. The linker uses this
   8345      relocation entry to update the operand address at link time'
   8346 
   8347 `cgot/cGOT'
   8348      - `Specifies the CompactRISC Assembler generates a relocation
   8349      entry for the operand, where pc has implied bit, the expression is
   8350      adjusted accordingly. The linker uses the relocation entry to
   8351      update the operand address at link time.'
   8352 
   8353    CR16 target operand qualifiers and its size (in bits):
   8354 
   8355 `Immediate Operand: s'
   8356      4 bits.
   8357 
   8358 `Immediate Operand: m'
   8359      16 bits, for movb and movw instructions.
   8360 
   8361 `Immediate Operand: m'
   8362      20 bits, movd instructions.
   8363 
   8364 `Immediate Operand: l'
   8365      32 bits.
   8366 
   8367 `Absolute Operand: s'
   8368      Illegal specifier for this operand.
   8369 
   8370 `Absolute Operand: m'
   8371      20 bits, movd instructions.
   8372 
   8373 `Displacement Operand: s'
   8374      8 bits.
   8375 
   8376 `Displacement Operand: m'
   8377      16 bits.
   8378 
   8379 `Displacement Operand: l'
   8380      24 bits.
   8381 
   8382 
   8383    For example:
   8384      1   `movw $_myfun@c,r1'
   8385 
   8386          This loads the address of _myfun, shifted right by 1, into r1.
   8387 
   8388      2   `movd $_myfun@c,(r2,r1)'
   8389 
   8390          This loads the address of _myfun, shifted right by 1, into register-pair r2-r1.
   8391 
   8392      3   `_myfun_ptr:'
   8393          `.long _myfun@c'
   8394          `loadd _myfun_ptr, (r1,r0)'
   8395          `jal (r1,r0)'
   8396 
   8397          This .long directive, the address of _myfunc, shifted right by 1 at link time.
   8398 
   8399      4   `loadd  _data1@GOT(r12), (r1,r0)'
   8400 
   8401          This loads the address of _data1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r2-r1.
   8402 
   8403      5   `loadd  _myfunc@cGOT(r12), (r1,r0)'
   8404 
   8405          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.
   8406 
   8407 
   8408 File: as.info,  Node: CR16 Syntax,  Prev: CR16 Operand Qualifiers,  Up: CR16-Dependent
   8409 
   8410 9.7.2 CR16 Syntax
   8411 -----------------
   8412 
   8413 * Menu:
   8414 
   8415 * CR16-Chars::                Special Characters
   8416 
   8417 
   8418 File: as.info,  Node: CR16-Chars,  Up: CR16 Syntax
   8419 
   8420 9.7.2.1 Special Characters
   8421 ..........................
   8422 
   8423 The presence of a `#' on a line indicates the start of a comment that
   8424 extends to the end of the current line.  If the `#' appears as the
   8425 first character of a line, the whole line is treated as a comment, but
   8426 in this case the line can also be a logical line number directive
   8427 (*note Comments::) or a preprocessor control command (*note
   8428 Preprocessing::).
   8429 
   8430    The `;' character can be used to separate statements on the same
   8431 line.
   8432 
   8433 
   8434 File: as.info,  Node: CRIS-Dependent,  Next: D10V-Dependent,  Prev: CR16-Dependent,  Up: Machine Dependencies
   8435 
   8436 9.8 CRIS Dependent Features
   8437 ===========================
   8438 
   8439 * Menu:
   8440 
   8441 * CRIS-Opts::              Command-line Options
   8442 * CRIS-Expand::            Instruction expansion
   8443 * CRIS-Symbols::           Symbols
   8444 * CRIS-Syntax::            Syntax
   8445 
   8446 
   8447 File: as.info,  Node: CRIS-Opts,  Next: CRIS-Expand,  Up: CRIS-Dependent
   8448 
   8449 9.8.1 Command-line Options
   8450 --------------------------
   8451 
   8452 The CRIS version of `as' has these machine-dependent command-line
   8453 options.
   8454 
   8455    The format of the generated object files can be either ELF or a.out,
   8456 specified by the command-line options `--emulation=crisaout' and
   8457 `--emulation=criself'.  The default is ELF (criself), unless `as' has
   8458 been configured specifically for a.out by using the configuration name
   8459 `cris-axis-aout'.
   8460 
   8461    There are two different link-incompatible ELF object file variants
   8462 for CRIS, for use in environments where symbols are expected to be
   8463 prefixed by a leading `_' character and for environments without such a
   8464 symbol prefix.  The variant used for GNU/Linux port has no symbol
   8465 prefix.  Which variant to produce is specified by either of the options
   8466 `--underscore' and `--no-underscore'.  The default is `--underscore'.
   8467 Since symbols in CRIS a.out objects are expected to have a `_' prefix,
   8468 specifying `--no-underscore' when generating a.out objects is an error.
   8469 Besides the object format difference, the effect of this option is to
   8470 parse register names differently (*note crisnous::).  The
   8471 `--no-underscore' option makes a `$' register prefix mandatory.
   8472 
   8473    The option `--pic' must be passed to `as' in order to recognize the
   8474 symbol syntax used for ELF (SVR4 PIC) position-independent-code (*note
   8475 crispic::).  This will also affect expansion of instructions.  The
   8476 expansion with `--pic' will use PC-relative rather than (slightly
   8477 faster) absolute addresses in those expansions.  This option is only
   8478 valid when generating ELF format object files.
   8479 
   8480    The option `--march=ARCHITECTURE' specifies the recognized
   8481 instruction set and recognized register names.  It also controls the
   8482 architecture type of the object file.  Valid values for ARCHITECTURE
   8483 are:
   8484 `v0_v10'
   8485      All instructions and register names for any architecture variant
   8486      in the set v0...v10 are recognized.  This is the default if the
   8487      target is configured as cris-*.
   8488 
   8489 `v10'
   8490      Only instructions and register names for CRIS v10 (as found in
   8491      ETRAX 100 LX) are recognized.  This is the default if the target
   8492      is configured as crisv10-*.
   8493 
   8494 `v32'
   8495      Only instructions and register names for CRIS v32 (code name
   8496      Guinness) are recognized.  This is the default if the target is
   8497      configured as crisv32-*.  This value implies `--no-mul-bug-abort'.
   8498      (A subsequent `--mul-bug-abort' will turn it back on.)
   8499 
   8500 `common_v10_v32'
   8501      Only instructions with register names and addressing modes with
   8502      opcodes common to the v10 and v32 are recognized.
   8503 
   8504    When `-N' is specified, `as' will emit a warning when a 16-bit
   8505 branch instruction is expanded into a 32-bit multiple-instruction
   8506 construct (*note CRIS-Expand::).
   8507 
   8508    Some versions of the CRIS v10, for example in the Etrax 100 LX,
   8509 contain a bug that causes destabilizing memory accesses when a multiply
   8510 instruction is executed with certain values in the first operand just
   8511 before a cache-miss.  When the `--mul-bug-abort' command line option is
   8512 active (the default value), `as' will refuse to assemble a file
   8513 containing a multiply instruction at a dangerous offset, one that could
   8514 be the last on a cache-line, or is in a section with insufficient
   8515 alignment.  This placement checking does not catch any case where the
   8516 multiply instruction is dangerously placed because it is located in a
   8517 delay-slot.  The `--mul-bug-abort' command line option turns off the
   8518 checking.
   8519 
   8520 
   8521 File: as.info,  Node: CRIS-Expand,  Next: CRIS-Symbols,  Prev: CRIS-Opts,  Up: CRIS-Dependent
   8522 
   8523 9.8.2 Instruction expansion
   8524 ---------------------------
   8525 
   8526 `as' will silently choose an instruction that fits the operand size for
   8527 `[register+constant]' operands.  For example, the offset `127' in
   8528 `move.d [r3+127],r4' fits in an instruction using a signed-byte offset.
   8529 Similarly, `move.d [r2+32767],r1' will generate an instruction using a
   8530 16-bit offset.  For symbolic expressions and constants that do not fit
   8531 in 16 bits including the sign bit, a 32-bit offset is generated.
   8532 
   8533    For branches, `as' will expand from a 16-bit branch instruction into
   8534 a sequence of instructions that can reach a full 32-bit address.  Since
   8535 this does not correspond to a single instruction, such expansions can
   8536 optionally be warned about.  *Note CRIS-Opts::.
   8537 
   8538    If the operand is found to fit the range, a `lapc' mnemonic will
   8539 translate to a `lapcq' instruction.  Use `lapc.d' to force the 32-bit
   8540 `lapc' instruction.
   8541 
   8542    Similarly, the `addo' mnemonic will translate to the shortest
   8543 fitting instruction of `addoq', `addo.w' and `addo.d', when used with a
   8544 operand that is a constant known at assembly time.
   8545 
   8546 
   8547 File: as.info,  Node: CRIS-Symbols,  Next: CRIS-Syntax,  Prev: CRIS-Expand,  Up: CRIS-Dependent
   8548 
   8549 9.8.3 Symbols
   8550 -------------
   8551 
   8552 Some symbols are defined by the assembler.  They're intended to be used
   8553 in conditional assembly, for example:
   8554       .if ..asm.arch.cris.v32
   8555       CODE FOR CRIS V32
   8556       .elseif ..asm.arch.cris.common_v10_v32
   8557       CODE COMMON TO CRIS V32 AND CRIS V10
   8558       .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10
   8559       CODE FOR V10
   8560       .else
   8561       .error "Code needs to be added here."
   8562       .endif
   8563 
   8564    These symbols are defined in the assembler, reflecting command-line
   8565 options, either when specified or the default.  They are always
   8566 defined, to 0 or 1.
   8567 `..asm.arch.cris.any_v0_v10'
   8568      This symbol is non-zero when `--march=v0_v10' is specified or the
   8569      default.
   8570 
   8571 `..asm.arch.cris.common_v10_v32'
   8572      Set according to the option `--march=common_v10_v32'.
   8573 
   8574 `..asm.arch.cris.v10'
   8575      Reflects the option `--march=v10'.
   8576 
   8577 `..asm.arch.cris.v32'
   8578      Corresponds to `--march=v10'.
   8579 
   8580    Speaking of symbols, when a symbol is used in code, it can have a
   8581 suffix modifying its value for use in position-independent code. *Note
   8582 CRIS-Pic::.
   8583 
   8584 
   8585 File: as.info,  Node: CRIS-Syntax,  Prev: CRIS-Symbols,  Up: CRIS-Dependent
   8586 
   8587 9.8.4 Syntax
   8588 ------------
   8589 
   8590 There are different aspects of the CRIS assembly syntax.
   8591 
   8592 * Menu:
   8593 
   8594 * CRIS-Chars::		        Special Characters
   8595 * CRIS-Pic::			Position-Independent Code Symbols
   8596 * CRIS-Regs::			Register Names
   8597 * CRIS-Pseudos::		Assembler Directives
   8598 
   8599 
   8600 File: as.info,  Node: CRIS-Chars,  Next: CRIS-Pic,  Up: CRIS-Syntax
   8601 
   8602 9.8.4.1 Special Characters
   8603 ..........................
   8604 
   8605 The character `#' is a line comment character.  It starts a comment if
   8606 and only if it is placed at the beginning of a line.
   8607 
   8608    A `;' character starts a comment anywhere on the line, causing all
   8609 characters up to the end of the line to be ignored.
   8610 
   8611    A `@' character is handled as a line separator equivalent to a
   8612 logical new-line character (except in a comment), so separate
   8613 instructions can be specified on a single line.
   8614 
   8615 
   8616 File: as.info,  Node: CRIS-Pic,  Next: CRIS-Regs,  Prev: CRIS-Chars,  Up: CRIS-Syntax
   8617 
   8618 9.8.4.2 Symbols in position-independent code
   8619 ............................................
   8620 
   8621 When generating position-independent code (SVR4 PIC) for use in
   8622 cris-axis-linux-gnu or crisv32-axis-linux-gnu shared libraries, symbol
   8623 suffixes are used to specify what kind of run-time symbol lookup will
   8624 be used, expressed in the object as different _relocation types_.
   8625 Usually, all absolute symbol values must be located in a table, the
   8626 _global offset table_, leaving the code position-independent;
   8627 independent of values of global symbols and independent of the address
   8628 of the code.  The suffix modifies the value of the symbol, into for
   8629 example an index into the global offset table where the real symbol
   8630 value is entered, or a PC-relative value, or a value relative to the
   8631 start of the global offset table.  All symbol suffixes start with the
   8632 character `:' (omitted in the list below).  Every symbol use in code or
   8633 a read-only section must therefore have a PIC suffix to enable a useful
   8634 shared library to be created.  Usually, these constructs must not be
   8635 used with an additive constant offset as is usually allowed, i.e. no 4
   8636 as in `symbol + 4' is allowed.  This restriction is checked at
   8637 link-time, not at assembly-time.
   8638 
   8639 `GOT'
   8640      Attaching this suffix to a symbol in an instruction causes the
   8641      symbol to be entered into the global offset table.  The value is a
   8642      32-bit index for that symbol into the global offset table.  The
   8643      name of the corresponding relocation is `R_CRIS_32_GOT'.  Example:
   8644      `move.d [$r0+extsym:GOT],$r9'
   8645 
   8646 `GOT16'
   8647      Same as for `GOT', but the value is a 16-bit index into the global
   8648      offset table.  The corresponding relocation is `R_CRIS_16_GOT'.
   8649      Example: `move.d [$r0+asymbol:GOT16],$r10'
   8650 
   8651 `PLT'
   8652      This suffix is used for function symbols.  It causes a _procedure
   8653      linkage table_, an array of code stubs, to be created at the time
   8654      the shared object is created or linked against, together with a
   8655      global offset table entry.  The value is a pc-relative offset to
   8656      the corresponding stub code in the procedure linkage table.  This
   8657      arrangement causes the run-time symbol resolver to be called to
   8658      look up and set the value of the symbol the first time the
   8659      function is called (at latest; depending environment variables).
   8660      It is only safe to leave the symbol unresolved this way if all
   8661      references are function calls.  The name of the relocation is
   8662      `R_CRIS_32_PLT_PCREL'.  Example: `add.d fnname:PLT,$pc'
   8663 
   8664 `PLTG'
   8665      Like PLT, but the value is relative to the beginning of the global
   8666      offset table.  The relocation is `R_CRIS_32_PLT_GOTREL'.  Example:
   8667      `move.d fnname:PLTG,$r3'
   8668 
   8669 `GOTPLT'
   8670      Similar to `PLT', but the value of the symbol is a 32-bit index
   8671      into the global offset table.  This is somewhat of a mix between
   8672      the effect of the `GOT' and the `PLT' suffix; the difference to
   8673      `GOT' is that there will be a procedure linkage table entry
   8674      created, and that the symbol is assumed to be a function entry and
   8675      will be resolved by the run-time resolver as with `PLT'.  The
   8676      relocation is `R_CRIS_32_GOTPLT'.  Example: `jsr
   8677      [$r0+fnname:GOTPLT]'
   8678 
   8679 `GOTPLT16'
   8680      A variant of `GOTPLT' giving a 16-bit value.  Its relocation name
   8681      is `R_CRIS_16_GOTPLT'.  Example: `jsr [$r0+fnname:GOTPLT16]'
   8682 
   8683 `GOTOFF'
   8684      This suffix must only be attached to a local symbol, but may be
   8685      used in an expression adding an offset.  The value is the address
   8686      of the symbol relative to the start of the global offset table.
   8687      The relocation name is `R_CRIS_32_GOTREL'.  Example: `move.d
   8688      [$r0+localsym:GOTOFF],r3'
   8689 
   8690 
   8691 File: as.info,  Node: CRIS-Regs,  Next: CRIS-Pseudos,  Prev: CRIS-Pic,  Up: CRIS-Syntax
   8692 
   8693 9.8.4.3 Register names
   8694 ......................
   8695 
   8696 A `$' character may always prefix a general or special register name in
   8697 an instruction operand but is mandatory when the option
   8698 `--no-underscore' is specified or when the `.syntax register_prefix'
   8699 directive is in effect (*note crisnous::).  Register names are
   8700 case-insensitive.
   8701 
   8702 
   8703 File: as.info,  Node: CRIS-Pseudos,  Prev: CRIS-Regs,  Up: CRIS-Syntax
   8704 
   8705 9.8.4.4 Assembler Directives
   8706 ............................
   8707 
   8708 There are a few CRIS-specific pseudo-directives in addition to the
   8709 generic ones.  *Note Pseudo Ops::.  Constants emitted by
   8710 pseudo-directives are in little-endian order for CRIS.  There is no
   8711 support for floating-point-specific directives for CRIS.
   8712 
   8713 `.dword EXPRESSIONS'
   8714      The `.dword' directive is a synonym for `.int', expecting zero or
   8715      more EXPRESSIONS, separated by commas.  For each expression, a
   8716      32-bit little-endian constant is emitted.
   8717 
   8718 `.syntax ARGUMENT'
   8719      The `.syntax' directive takes as ARGUMENT one of the following
   8720      case-sensitive choices.
   8721 
   8722     `no_register_prefix'
   8723           The `.syntax no_register_prefix' directive makes a `$'
   8724           character prefix on all registers optional.  It overrides a
   8725           previous setting, including the corresponding effect of the
   8726           option `--no-underscore'.  If this directive is used when
   8727           ordinary symbols do not have a `_' character prefix, care
   8728           must be taken to avoid ambiguities whether an operand is a
   8729           register or a symbol; using symbols with names the same as
   8730           general or special registers then invoke undefined behavior.
   8731 
   8732     `register_prefix'
   8733           This directive makes a `$' character prefix on all registers
   8734           mandatory.  It overrides a previous setting, including the
   8735           corresponding effect of the option `--underscore'.
   8736 
   8737     `leading_underscore'
   8738           This is an assertion directive, emitting an error if the
   8739           `--no-underscore' option is in effect.
   8740 
   8741     `no_leading_underscore'
   8742           This is the opposite of the `.syntax leading_underscore'
   8743           directive and emits an error if the option `--underscore' is
   8744           in effect.
   8745 
   8746 `.arch ARGUMENT'
   8747      This is an assertion directive, giving an error if the specified
   8748      ARGUMENT is not the same as the specified or default value for the
   8749      `--march=ARCHITECTURE' option (*note march-option::).
   8750 
   8751 
   8752 
   8753 File: as.info,  Node: D10V-Dependent,  Next: D30V-Dependent,  Prev: CRIS-Dependent,  Up: Machine Dependencies
   8754 
   8755 9.9 D10V Dependent Features
   8756 ===========================
   8757 
   8758 * Menu:
   8759 
   8760 * D10V-Opts::                   D10V Options
   8761 * D10V-Syntax::                 Syntax
   8762 * D10V-Float::                  Floating Point
   8763 * D10V-Opcodes::                Opcodes
   8764 
   8765 
   8766 File: as.info,  Node: D10V-Opts,  Next: D10V-Syntax,  Up: D10V-Dependent
   8767 
   8768 9.9.1 D10V Options
   8769 ------------------
   8770 
   8771 The Mitsubishi D10V version of `as' has a few machine dependent options.
   8772 
   8773 `-O'
   8774      The D10V can often execute two sub-instructions in parallel. When
   8775      this option is used, `as' will attempt to optimize its output by
   8776      detecting when instructions can be executed in parallel.
   8777 
   8778 `--nowarnswap'
   8779      To optimize execution performance, `as' will sometimes swap the
   8780      order of instructions. Normally this generates a warning. When
   8781      this option is used, no warning will be generated when
   8782      instructions are swapped.
   8783 
   8784 `--gstabs-packing'
   8785 `--no-gstabs-packing'
   8786      `as' packs adjacent short instructions into a single packed
   8787      instruction. `--no-gstabs-packing' turns instruction packing off if
   8788      `--gstabs' is specified as well; `--gstabs-packing' (the default)
   8789      turns instruction packing on even when `--gstabs' is specified.
   8790 
   8791 
   8792 File: as.info,  Node: D10V-Syntax,  Next: D10V-Float,  Prev: D10V-Opts,  Up: D10V-Dependent
   8793 
   8794 9.9.2 Syntax
   8795 ------------
   8796 
   8797 The D10V syntax is based on the syntax in Mitsubishi's D10V
   8798 architecture manual.  The differences are detailed below.
   8799 
   8800 * Menu:
   8801 
   8802 * D10V-Size::                 Size Modifiers
   8803 * D10V-Subs::                 Sub-Instructions
   8804 * D10V-Chars::                Special Characters
   8805 * D10V-Regs::                 Register Names
   8806 * D10V-Addressing::           Addressing Modes
   8807 * D10V-Word::                 @WORD Modifier
   8808 
   8809 
   8810 File: as.info,  Node: D10V-Size,  Next: D10V-Subs,  Up: D10V-Syntax
   8811 
   8812 9.9.2.1 Size Modifiers
   8813 ......................
   8814 
   8815 The D10V version of `as' uses the instruction names in the D10V
   8816 Architecture Manual.  However, the names in the manual are sometimes
   8817 ambiguous.  There are instruction names that can assemble to a short or
   8818 long form opcode.  How does the assembler pick the correct form?  `as'
   8819 will always pick the smallest form if it can.  When dealing with a
   8820 symbol that is not defined yet when a line is being assembled, it will
   8821 always use the long form.  If you need to force the assembler to use
   8822 either the short or long form of the instruction, you can append either
   8823 `.s' (short) or `.l' (long) to it.  For example, if you are writing an
   8824 assembly program and you want to do a branch to a symbol that is
   8825 defined later in your program, you can write `bra.s   foo'.  Objdump
   8826 and GDB will always append `.s' or `.l' to instructions which have both
   8827 short and long forms.
   8828 
   8829 
   8830 File: as.info,  Node: D10V-Subs,  Next: D10V-Chars,  Prev: D10V-Size,  Up: D10V-Syntax
   8831 
   8832 9.9.2.2 Sub-Instructions
   8833 ........................
   8834 
   8835 The D10V assembler takes as input a series of instructions, either
   8836 one-per-line, or in the special two-per-line format described in the
   8837 next section.  Some of these instructions will be short-form or
   8838 sub-instructions.  These sub-instructions can be packed into a single
   8839 instruction.  The assembler will do this automatically.  It will also
   8840 detect when it should not pack instructions.  For example, when a label
   8841 is defined, the next instruction will never be packaged with the
   8842 previous one.  Whenever a branch and link instruction is called, it
   8843 will not be packaged with the next instruction so the return address
   8844 will be valid.  Nops are automatically inserted when necessary.
   8845 
   8846    If you do not want the assembler automatically making these
   8847 decisions, you can control the packaging and execution type (parallel
   8848 or sequential) with the special execution symbols described in the next
   8849 section.
   8850 
   8851 
   8852 File: as.info,  Node: D10V-Chars,  Next: D10V-Regs,  Prev: D10V-Subs,  Up: D10V-Syntax
   8853 
   8854 9.9.2.3 Special Characters
   8855 ..........................
   8856 
   8857 A semicolon (`;') can be used anywhere on a line to start a comment
   8858 that extends to the end of the line.
   8859 
   8860    If a `#' appears as the first character of a line, the whole line is
   8861 treated as a comment, but in this case the line could also be a logical
   8862 line number directive (*note Comments::) or a preprocessor control
   8863 command (*note Preprocessing::).
   8864 
   8865    Sub-instructions may be executed in order, in reverse-order, or in
   8866 parallel.  Instructions listed in the standard one-per-line format will
   8867 be executed sequentially.  To specify the executing order, use the
   8868 following symbols:
   8869 `->'
   8870      Sequential with instruction on the left first.
   8871 
   8872 `<-'
   8873      Sequential with instruction on the right first.
   8874 
   8875 `||'
   8876      Parallel
   8877    The D10V syntax allows either one instruction per line, one
   8878 instruction per line with the execution symbol, or two instructions per
   8879 line.  For example
   8880 `abs       a1      ->      abs     r0'
   8881      Execute these sequentially.  The instruction on the right is in
   8882      the right container and is executed second.
   8883 
   8884 `abs       r0      <-      abs     a1'
   8885      Execute these reverse-sequentially.  The instruction on the right
   8886      is in the right container, and is executed first.
   8887 
   8888 `ld2w    r2,@r8+         ||      mac     a0,r0,r7'
   8889      Execute these in parallel.
   8890 
   8891 `ld2w    r2,@r8+         ||'
   8892 `mac     a0,r0,r7'
   8893      Two-line format. Execute these in parallel.
   8894 
   8895 `ld2w    r2,@r8+'
   8896 `mac     a0,r0,r7'
   8897      Two-line format. Execute these sequentially.  Assembler will put
   8898      them in the proper containers.
   8899 
   8900 `ld2w    r2,@r8+         ->'
   8901 `mac     a0,r0,r7'
   8902      Two-line format. Execute these sequentially.  Same as above but
   8903      second instruction will always go into right container.
   8904    Since `$' has no special meaning, you may use it in symbol names.
   8905 
   8906 
   8907 File: as.info,  Node: D10V-Regs,  Next: D10V-Addressing,  Prev: D10V-Chars,  Up: D10V-Syntax
   8908 
   8909 9.9.2.4 Register Names
   8910 ......................
   8911 
   8912 You can use the predefined symbols `r0' through `r15' to refer to the
   8913 D10V registers.  You can also use `sp' as an alias for `r15'.  The
   8914 accumulators are `a0' and `a1'.  There are special register-pair names
   8915 that may optionally be used in opcodes that require even-numbered
   8916 registers. Register names are not case sensitive.
   8917 
   8918    Register Pairs
   8919 `r0-r1'
   8920 
   8921 `r2-r3'
   8922 
   8923 `r4-r5'
   8924 
   8925 `r6-r7'
   8926 
   8927 `r8-r9'
   8928 
   8929 `r10-r11'
   8930 
   8931 `r12-r13'
   8932 
   8933 `r14-r15'
   8934 
   8935    The D10V also has predefined symbols for these control registers and
   8936 status bits:
   8937 `psw'
   8938      Processor Status Word
   8939 
   8940 `bpsw'
   8941      Backup Processor Status Word
   8942 
   8943 `pc'
   8944      Program Counter
   8945 
   8946 `bpc'
   8947      Backup Program Counter
   8948 
   8949 `rpt_c'
   8950      Repeat Count
   8951 
   8952 `rpt_s'
   8953      Repeat Start address
   8954 
   8955 `rpt_e'
   8956      Repeat End address
   8957 
   8958 `mod_s'
   8959      Modulo Start address
   8960 
   8961 `mod_e'
   8962      Modulo End address
   8963 
   8964 `iba'
   8965      Instruction Break Address
   8966 
   8967 `f0'
   8968      Flag 0
   8969 
   8970 `f1'
   8971      Flag 1
   8972 
   8973 `c'
   8974      Carry flag
   8975 
   8976 
   8977 File: as.info,  Node: D10V-Addressing,  Next: D10V-Word,  Prev: D10V-Regs,  Up: D10V-Syntax
   8978 
   8979 9.9.2.5 Addressing Modes
   8980 ........................
   8981 
   8982 `as' understands the following addressing modes for the D10V.  `RN' in
   8983 the following refers to any of the numbered registers, but _not_ the
   8984 control registers.
   8985 `RN'
   8986      Register direct
   8987 
   8988 `@RN'
   8989      Register indirect
   8990 
   8991 `@RN+'
   8992      Register indirect with post-increment
   8993 
   8994 `@RN-'
   8995      Register indirect with post-decrement
   8996 
   8997 `@-SP'
   8998      Register indirect with pre-decrement
   8999 
   9000 `@(DISP, RN)'
   9001      Register indirect with displacement
   9002 
   9003 `ADDR'
   9004      PC relative address (for branch or rep).
   9005 
   9006 `#IMM'
   9007      Immediate data (the `#' is optional and ignored)
   9008 
   9009 
   9010 File: as.info,  Node: D10V-Word,  Prev: D10V-Addressing,  Up: D10V-Syntax
   9011 
   9012 9.9.2.6 @WORD Modifier
   9013 ......................
   9014 
   9015 Any symbol followed by `@word' will be replaced by the symbol's value
   9016 shifted right by 2.  This is used in situations such as loading a
   9017 register with the address of a function (or any other code fragment).
   9018 For example, if you want to load a register with the location of the
   9019 function `main' then jump to that function, you could do it as follows:
   9020      ldi     r2, main@word
   9021      jmp     r2
   9022 
   9023 
   9024 File: as.info,  Node: D10V-Float,  Next: D10V-Opcodes,  Prev: D10V-Syntax,  Up: D10V-Dependent
   9025 
   9026 9.9.3 Floating Point
   9027 --------------------
   9028 
   9029 The D10V has no hardware floating point, but the `.float' and `.double'
   9030 directives generates IEEE floating-point numbers for compatibility with
   9031 other development tools.
   9032 
   9033 
   9034 File: as.info,  Node: D10V-Opcodes,  Prev: D10V-Float,  Up: D10V-Dependent
   9035 
   9036 9.9.4 Opcodes
   9037 -------------
   9038 
   9039 For detailed information on the D10V machine instruction set, see `D10V
   9040 Architecture: A VLIW Microprocessor for Multimedia Applications'
   9041 (Mitsubishi Electric Corp.).  `as' implements all the standard D10V
   9042 opcodes.  The only changes are those described in the section on size
   9043 modifiers
   9044 
   9045 
   9046 File: as.info,  Node: D30V-Dependent,  Next: Epiphany-Dependent,  Prev: D10V-Dependent,  Up: Machine Dependencies
   9047 
   9048 9.10 D30V Dependent Features
   9049 ============================
   9050 
   9051 * Menu:
   9052 
   9053 * D30V-Opts::                   D30V Options
   9054 * D30V-Syntax::                 Syntax
   9055 * D30V-Float::                  Floating Point
   9056 * D30V-Opcodes::                Opcodes
   9057 
   9058 
   9059 File: as.info,  Node: D30V-Opts,  Next: D30V-Syntax,  Up: D30V-Dependent
   9060 
   9061 9.10.1 D30V Options
   9062 -------------------
   9063 
   9064 The Mitsubishi D30V version of `as' has a few machine dependent options.
   9065 
   9066 `-O'
   9067      The D30V can often execute two sub-instructions in parallel. When
   9068      this option is used, `as' will attempt to optimize its output by
   9069      detecting when instructions can be executed in parallel.
   9070 
   9071 `-n'
   9072      When this option is used, `as' will issue a warning every time it
   9073      adds a nop instruction.
   9074 
   9075 `-N'
   9076      When this option is used, `as' will issue a warning if it needs to
   9077      insert a nop after a 32-bit multiply before a load or 16-bit
   9078      multiply instruction.
   9079 
   9080 
   9081 File: as.info,  Node: D30V-Syntax,  Next: D30V-Float,  Prev: D30V-Opts,  Up: D30V-Dependent
   9082 
   9083 9.10.2 Syntax
   9084 -------------
   9085 
   9086 The D30V syntax is based on the syntax in Mitsubishi's D30V
   9087 architecture manual.  The differences are detailed below.
   9088 
   9089 * Menu:
   9090 
   9091 * D30V-Size::                 Size Modifiers
   9092 * D30V-Subs::                 Sub-Instructions
   9093 * D30V-Chars::                Special Characters
   9094 * D30V-Guarded::              Guarded Execution
   9095 * D30V-Regs::                 Register Names
   9096 * D30V-Addressing::           Addressing Modes
   9097 
   9098 
   9099 File: as.info,  Node: D30V-Size,  Next: D30V-Subs,  Up: D30V-Syntax
   9100 
   9101 9.10.2.1 Size Modifiers
   9102 .......................
   9103 
   9104 The D30V version of `as' uses the instruction names in the D30V
   9105 Architecture Manual.  However, the names in the manual are sometimes
   9106 ambiguous.  There are instruction names that can assemble to a short or
   9107 long form opcode.  How does the assembler pick the correct form?  `as'
   9108 will always pick the smallest form if it can.  When dealing with a
   9109 symbol that is not defined yet when a line is being assembled, it will
   9110 always use the long form.  If you need to force the assembler to use
   9111 either the short or long form of the instruction, you can append either
   9112 `.s' (short) or `.l' (long) to it.  For example, if you are writing an
   9113 assembly program and you want to do a branch to a symbol that is
   9114 defined later in your program, you can write `bra.s foo'.  Objdump and
   9115 GDB will always append `.s' or `.l' to instructions which have both
   9116 short and long forms.
   9117 
   9118 
   9119 File: as.info,  Node: D30V-Subs,  Next: D30V-Chars,  Prev: D30V-Size,  Up: D30V-Syntax
   9120 
   9121 9.10.2.2 Sub-Instructions
   9122 .........................
   9123 
   9124 The D30V assembler takes as input a series of instructions, either
   9125 one-per-line, or in the special two-per-line format described in the
   9126 next section.  Some of these instructions will be short-form or
   9127 sub-instructions.  These sub-instructions can be packed into a single
   9128 instruction.  The assembler will do this automatically.  It will also
   9129 detect when it should not pack instructions.  For example, when a label
   9130 is defined, the next instruction will never be packaged with the
   9131 previous one.  Whenever a branch and link instruction is called, it
   9132 will not be packaged with the next instruction so the return address
   9133 will be valid.  Nops are automatically inserted when necessary.
   9134 
   9135    If you do not want the assembler automatically making these
   9136 decisions, you can control the packaging and execution type (parallel
   9137 or sequential) with the special execution symbols described in the next
   9138 section.
   9139 
   9140 
   9141 File: as.info,  Node: D30V-Chars,  Next: D30V-Guarded,  Prev: D30V-Subs,  Up: D30V-Syntax
   9142 
   9143 9.10.2.3 Special Characters
   9144 ...........................
   9145 
   9146 A semicolon (`;') can be used anywhere on a line to start a comment
   9147 that extends to the end of the line.
   9148 
   9149    If a `#' appears as the first character of a line, the whole line is
   9150 treated as a comment, but in this case the line could also be a logical
   9151 line number directive (*note Comments::) or a preprocessor control
   9152 command (*note Preprocessing::).
   9153 
   9154    Sub-instructions may be executed in order, in reverse-order, or in
   9155 parallel.  Instructions listed in the standard one-per-line format will
   9156 be executed sequentially unless you use the `-O' option.
   9157 
   9158    To specify the executing order, use the following symbols:
   9159 `->'
   9160      Sequential with instruction on the left first.
   9161 
   9162 `<-'
   9163      Sequential with instruction on the right first.
   9164 
   9165 `||'
   9166      Parallel
   9167 
   9168    The D30V syntax allows either one instruction per line, one
   9169 instruction per line with the execution symbol, or two instructions per
   9170 line.  For example
   9171 `abs r2,r3 -> abs r4,r5'
   9172      Execute these sequentially.  The instruction on the right is in
   9173      the right container and is executed second.
   9174 
   9175 `abs r2,r3 <- abs r4,r5'
   9176      Execute these reverse-sequentially.  The instruction on the right
   9177      is in the right container, and is executed first.
   9178 
   9179 `abs r2,r3 || abs r4,r5'
   9180      Execute these in parallel.
   9181 
   9182 `ldw r2,@(r3,r4) ||'
   9183 `mulx r6,r8,r9'
   9184      Two-line format. Execute these in parallel.
   9185 
   9186 `mulx a0,r8,r9'
   9187 `stw r2,@(r3,r4)'
   9188      Two-line format. Execute these sequentially unless `-O' option is
   9189      used.  If the `-O' option is used, the assembler will determine if
   9190      the instructions could be done in parallel (the above two
   9191      instructions can be done in parallel), and if so, emit them as
   9192      parallel instructions.  The assembler will put them in the proper
   9193      containers.  In the above example, the assembler will put the
   9194      `stw' instruction in left container and the `mulx' instruction in
   9195      the right container.
   9196 
   9197 `stw r2,@(r3,r4) ->'
   9198 `mulx a0,r8,r9'
   9199      Two-line format.  Execute the `stw' instruction followed by the
   9200      `mulx' instruction sequentially.  The first instruction goes in the
   9201      left container and the second instruction goes into right
   9202      container.  The assembler will give an error if the machine
   9203      ordering constraints are violated.
   9204 
   9205 `stw r2,@(r3,r4) <-'
   9206 `mulx a0,r8,r9'
   9207      Same as previous example, except that the `mulx' instruction is
   9208      executed before the `stw' instruction.
   9209 
   9210    Since `$' has no special meaning, you may use it in symbol names.
   9211 
   9212 
   9213 File: as.info,  Node: D30V-Guarded,  Next: D30V-Regs,  Prev: D30V-Chars,  Up: D30V-Syntax
   9214 
   9215 9.10.2.4 Guarded Execution
   9216 ..........................
   9217 
   9218 `as' supports the full range of guarded execution directives for each
   9219 instruction.  Just append the directive after the instruction proper.
   9220 The directives are:
   9221 
   9222 `/tx'
   9223      Execute the instruction if flag f0 is true.
   9224 
   9225 `/fx'
   9226      Execute the instruction if flag f0 is false.
   9227 
   9228 `/xt'
   9229      Execute the instruction if flag f1 is true.
   9230 
   9231 `/xf'
   9232      Execute the instruction if flag f1 is false.
   9233 
   9234 `/tt'
   9235      Execute the instruction if both flags f0 and f1 are true.
   9236 
   9237 `/tf'
   9238      Execute the instruction if flag f0 is true and flag f1 is false.
   9239 
   9240 
   9241 File: as.info,  Node: D30V-Regs,  Next: D30V-Addressing,  Prev: D30V-Guarded,  Up: D30V-Syntax
   9242 
   9243 9.10.2.5 Register Names
   9244 .......................
   9245 
   9246 You can use the predefined symbols `r0' through `r63' to refer to the
   9247 D30V registers.  You can also use `sp' as an alias for `r63' and `link'
   9248 as an alias for `r62'.  The accumulators are `a0' and `a1'.
   9249 
   9250    The D30V also has predefined symbols for these control registers and
   9251 status bits:
   9252 `psw'
   9253      Processor Status Word
   9254 
   9255 `bpsw'
   9256      Backup Processor Status Word
   9257 
   9258 `pc'
   9259      Program Counter
   9260 
   9261 `bpc'
   9262      Backup Program Counter
   9263 
   9264 `rpt_c'
   9265      Repeat Count
   9266 
   9267 `rpt_s'
   9268      Repeat Start address
   9269 
   9270 `rpt_e'
   9271      Repeat End address
   9272 
   9273 `mod_s'
   9274      Modulo Start address
   9275 
   9276 `mod_e'
   9277      Modulo End address
   9278 
   9279 `iba'
   9280      Instruction Break Address
   9281 
   9282 `f0'
   9283      Flag 0
   9284 
   9285 `f1'
   9286      Flag 1
   9287 
   9288 `f2'
   9289      Flag 2
   9290 
   9291 `f3'
   9292      Flag 3
   9293 
   9294 `f4'
   9295      Flag 4
   9296 
   9297 `f5'
   9298      Flag 5
   9299 
   9300 `f6'
   9301      Flag 6
   9302 
   9303 `f7'
   9304      Flag 7
   9305 
   9306 `s'
   9307      Same as flag 4 (saturation flag)
   9308 
   9309 `v'
   9310      Same as flag 5 (overflow flag)
   9311 
   9312 `va'
   9313      Same as flag 6 (sticky overflow flag)
   9314 
   9315 `c'
   9316      Same as flag 7 (carry/borrow flag)
   9317 
   9318 `b'
   9319      Same as flag 7 (carry/borrow flag)
   9320 
   9321 
   9322 File: as.info,  Node: D30V-Addressing,  Prev: D30V-Regs,  Up: D30V-Syntax
   9323 
   9324 9.10.2.6 Addressing Modes
   9325 .........................
   9326 
   9327 `as' understands the following addressing modes for the D30V.  `RN' in
   9328 the following refers to any of the numbered registers, but _not_ the
   9329 control registers.
   9330 `RN'
   9331      Register direct
   9332 
   9333 `@RN'
   9334      Register indirect
   9335 
   9336 `@RN+'
   9337      Register indirect with post-increment
   9338 
   9339 `@RN-'
   9340      Register indirect with post-decrement
   9341 
   9342 `@-SP'
   9343      Register indirect with pre-decrement
   9344 
   9345 `@(DISP, RN)'
   9346      Register indirect with displacement
   9347 
   9348 `ADDR'
   9349      PC relative address (for branch or rep).
   9350 
   9351 `#IMM'
   9352      Immediate data (the `#' is optional and ignored)
   9353 
   9354 
   9355 File: as.info,  Node: D30V-Float,  Next: D30V-Opcodes,  Prev: D30V-Syntax,  Up: D30V-Dependent
   9356 
   9357 9.10.3 Floating Point
   9358 ---------------------
   9359 
   9360 The D30V has no hardware floating point, but the `.float' and `.double'
   9361 directives generates IEEE floating-point numbers for compatibility with
   9362 other development tools.
   9363 
   9364 
   9365 File: as.info,  Node: D30V-Opcodes,  Prev: D30V-Float,  Up: D30V-Dependent
   9366 
   9367 9.10.4 Opcodes
   9368 --------------
   9369 
   9370 For detailed information on the D30V machine instruction set, see `D30V
   9371 Architecture: A VLIW Microprocessor for Multimedia Applications'
   9372 (Mitsubishi Electric Corp.).  `as' implements all the standard D30V
   9373 opcodes.  The only changes are those described in the section on size
   9374 modifiers
   9375 
   9376 
   9377 File: as.info,  Node: Epiphany-Dependent,  Next: H8/300-Dependent,  Prev: D30V-Dependent,  Up: Machine Dependencies
   9378 
   9379 9.11 Epiphany Dependent Features
   9380 ================================
   9381 
   9382 * Menu:
   9383 
   9384 * Epiphany Options::              Options
   9385 * Epiphany Syntax::               Epiphany Syntax
   9386 
   9387 
   9388 File: as.info,  Node: Epiphany Options,  Next: Epiphany Syntax,  Up: Epiphany-Dependent
   9389 
   9390 9.11.1 Options
   9391 --------------
   9392 
   9393 `as' has two additional command-line options for the Epiphany
   9394 architecture.
   9395 
   9396 `-mepiphany'
   9397      Specifies that the both 32 and 16 bit instructions are allowed.
   9398      This is the default behavior.
   9399 
   9400 `-mepiphany16'
   9401      Restricts the permitted instructions to just the 16 bit set.
   9402 
   9403 
   9404 File: as.info,  Node: Epiphany Syntax,  Prev: Epiphany Options,  Up: Epiphany-Dependent
   9405 
   9406 9.11.2 Epiphany Syntax
   9407 ----------------------
   9408 
   9409 * Menu:
   9410 
   9411 * Epiphany-Chars::                Special Characters
   9412 
   9413 
   9414 File: as.info,  Node: Epiphany-Chars,  Up: Epiphany Syntax
   9415 
   9416 9.11.2.1 Special Characters
   9417 ...........................
   9418 
   9419 The presence of a `;' on a line indicates the start of a comment that
   9420 extends to the end of the current line.
   9421 
   9422    If a `#' appears as the first character of a line then the whole
   9423 line is treated as a comment, but in this case the line could also be a
   9424 logical line number directive (*note Comments::) or a preprocessor
   9425 control command (*note Preprocessing::).
   9426 
   9427    The ``' character can be used to separate statements on the same
   9428 line.
   9429 
   9430 
   9431 File: as.info,  Node: H8/300-Dependent,  Next: HPPA-Dependent,  Prev: Epiphany-Dependent,  Up: Machine Dependencies
   9432 
   9433 9.12 H8/300 Dependent Features
   9434 ==============================
   9435 
   9436 * Menu:
   9437 
   9438 * H8/300 Options::              Options
   9439 * H8/300 Syntax::               Syntax
   9440 * H8/300 Floating Point::       Floating Point
   9441 * H8/300 Directives::           H8/300 Machine Directives
   9442 * H8/300 Opcodes::              Opcodes
   9443 
   9444 
   9445 File: as.info,  Node: H8/300 Options,  Next: H8/300 Syntax,  Up: H8/300-Dependent
   9446 
   9447 9.12.1 Options
   9448 --------------
   9449 
   9450 The Renesas H8/300 version of `as' has one machine-dependent option:
   9451 
   9452 `-h-tick-hex'
   9453      Support H'00 style hex constants in addition to 0x00 style.
   9454 
   9455 
   9456 
   9457 File: as.info,  Node: H8/300 Syntax,  Next: H8/300 Floating Point,  Prev: H8/300 Options,  Up: H8/300-Dependent
   9458 
   9459 9.12.2 Syntax
   9460 -------------
   9461 
   9462 * Menu:
   9463 
   9464 * H8/300-Chars::                Special Characters
   9465 * H8/300-Regs::                 Register Names
   9466 * H8/300-Addressing::           Addressing Modes
   9467 
   9468 
   9469 File: as.info,  Node: H8/300-Chars,  Next: H8/300-Regs,  Up: H8/300 Syntax
   9470 
   9471 9.12.2.1 Special Characters
   9472 ...........................
   9473 
   9474 `;' is the line comment character.
   9475 
   9476    `$' can be used instead of a newline to separate statements.
   9477 Therefore _you may not use `$' in symbol names_ on the H8/300.
   9478 
   9479 
   9480 File: as.info,  Node: H8/300-Regs,  Next: H8/300-Addressing,  Prev: H8/300-Chars,  Up: H8/300 Syntax
   9481 
   9482 9.12.2.2 Register Names
   9483 .......................
   9484 
   9485 You can use predefined symbols of the form `rNh' and `rNl' to refer to
   9486 the H8/300 registers as sixteen 8-bit general-purpose registers.  N is
   9487 a digit from `0' to `7'); for instance, both `r0h' and `r7l' are valid
   9488 register names.
   9489 
   9490    You can also use the eight predefined symbols `rN' to refer to the
   9491 H8/300 registers as 16-bit registers (you must use this form for
   9492 addressing).
   9493 
   9494    On the H8/300H, you can also use the eight predefined symbols `erN'
   9495 (`er0' ... `er7') to refer to the 32-bit general purpose registers.
   9496 
   9497    The two control registers are called `pc' (program counter; a 16-bit
   9498 register, except on the H8/300H where it is 24 bits) and `ccr'
   9499 (condition code register; an 8-bit register).  `r7' is used as the
   9500 stack pointer, and can also be called `sp'.
   9501 
   9502 
   9503 File: as.info,  Node: H8/300-Addressing,  Prev: H8/300-Regs,  Up: H8/300 Syntax
   9504 
   9505 9.12.2.3 Addressing Modes
   9506 .........................
   9507 
   9508 as understands the following addressing modes for the H8/300:
   9509 `rN'
   9510      Register direct
   9511 
   9512 `@rN'
   9513      Register indirect
   9514 
   9515 `@(D, rN)'
   9516 `@(D:16, rN)'
   9517 `@(D:24, rN)'
   9518      Register indirect: 16-bit or 24-bit displacement D from register
   9519      N.  (24-bit displacements are only meaningful on the H8/300H.)
   9520 
   9521 `@rN+'
   9522      Register indirect with post-increment
   9523 
   9524 `@-rN'
   9525      Register indirect with pre-decrement
   9526 
   9527 ``@'AA'
   9528 ``@'AA:8'
   9529 ``@'AA:16'
   9530 ``@'AA:24'
   9531      Absolute address `aa'.  (The address size `:24' only makes sense
   9532      on the H8/300H.)
   9533 
   9534 `#XX'
   9535 `#XX:8'
   9536 `#XX:16'
   9537 `#XX:32'
   9538      Immediate data XX.  You may specify the `:8', `:16', or `:32' for
   9539      clarity, if you wish; but `as' neither requires this nor uses
   9540      it--the data size required is taken from context.
   9541 
   9542 ``@'`@'AA'
   9543 ``@'`@'AA:8'
   9544      Memory indirect.  You may specify the `:8' for clarity, if you
   9545      wish; but `as' neither requires this nor uses it.
   9546 
   9547 
   9548 File: as.info,  Node: H8/300 Floating Point,  Next: H8/300 Directives,  Prev: H8/300 Syntax,  Up: H8/300-Dependent
   9549 
   9550 9.12.3 Floating Point
   9551 ---------------------
   9552 
   9553 The H8/300 family has no hardware floating point, but the `.float'
   9554 directive generates IEEE floating-point numbers for compatibility with
   9555 other development tools.
   9556 
   9557 
   9558 File: as.info,  Node: H8/300 Directives,  Next: H8/300 Opcodes,  Prev: H8/300 Floating Point,  Up: H8/300-Dependent
   9559 
   9560 9.12.4 H8/300 Machine Directives
   9561 --------------------------------
   9562 
   9563 `as' has the following machine-dependent directives for the H8/300:
   9564 
   9565 `.h8300h'
   9566      Recognize and emit additional instructions for the H8/300H
   9567      variant, and also make `.int' emit 32-bit numbers rather than the
   9568      usual (16-bit) for the H8/300 family.
   9569 
   9570 `.h8300s'
   9571      Recognize and emit additional instructions for the H8S variant, and
   9572      also make `.int' emit 32-bit numbers rather than the usual (16-bit)
   9573      for the H8/300 family.
   9574 
   9575 `.h8300hn'
   9576      Recognize and emit additional instructions for the H8/300H variant
   9577      in normal mode, and also make `.int' emit 32-bit numbers rather
   9578      than the usual (16-bit) for the H8/300 family.
   9579 
   9580 `.h8300sn'
   9581      Recognize and emit additional instructions for the H8S variant in
   9582      normal mode, and also make `.int' emit 32-bit numbers rather than
   9583      the usual (16-bit) for the H8/300 family.
   9584 
   9585    On the H8/300 family (including the H8/300H) `.word' directives
   9586 generate 16-bit numbers.
   9587 
   9588 
   9589 File: as.info,  Node: H8/300 Opcodes,  Prev: H8/300 Directives,  Up: H8/300-Dependent
   9590 
   9591 9.12.5 Opcodes
   9592 --------------
   9593 
   9594 For detailed information on the H8/300 machine instruction set, see
   9595 `H8/300 Series Programming Manual'.  For information specific to the
   9596 H8/300H, see `H8/300H Series Programming Manual' (Renesas).
   9597 
   9598    `as' implements all the standard H8/300 opcodes.  No additional
   9599 pseudo-instructions are needed on this family.
   9600 
   9601    The following table summarizes the H8/300 opcodes, and their
   9602 arguments.  Entries marked `*' are opcodes used only on the H8/300H.
   9603 
   9604               Legend:
   9605                  Rs   source register
   9606                  Rd   destination register
   9607                  abs  absolute address
   9608                  imm  immediate data
   9609               disp:N  N-bit displacement from a register
   9610              pcrel:N  N-bit displacement relative to program counter
   9611 
   9612         add.b #imm,rd              *  andc #imm,ccr
   9613         add.b rs,rd                   band #imm,rd
   9614         add.w rs,rd                   band #imm,@rd
   9615      *  add.w #imm,rd                 band #imm,@abs:8
   9616      *  add.l rs,rd                   bra  pcrel:8
   9617      *  add.l #imm,rd              *  bra  pcrel:16
   9618         adds #imm,rd                  bt   pcrel:8
   9619         addx #imm,rd               *  bt   pcrel:16
   9620         addx rs,rd                    brn  pcrel:8
   9621         and.b #imm,rd              *  brn  pcrel:16
   9622         and.b rs,rd                   bf   pcrel:8
   9623      *  and.w rs,rd                *  bf   pcrel:16
   9624      *  and.w #imm,rd                 bhi  pcrel:8
   9625      *  and.l #imm,rd              *  bhi  pcrel:16
   9626      *  and.l rs,rd                   bls  pcrel:8
   9627 
   9628      *  bls  pcrel:16                 bld  #imm,rd
   9629         bcc  pcrel:8                  bld  #imm,@rd
   9630      *  bcc  pcrel:16                 bld  #imm,@abs:8
   9631         bhs  pcrel:8                  bnot #imm,rd
   9632      *  bhs  pcrel:16                 bnot #imm,@rd
   9633         bcs  pcrel:8                  bnot #imm,@abs:8
   9634      *  bcs  pcrel:16                 bnot rs,rd
   9635         blo  pcrel:8                  bnot rs,@rd
   9636      *  blo  pcrel:16                 bnot rs,@abs:8
   9637         bne  pcrel:8                  bor  #imm,rd
   9638      *  bne  pcrel:16                 bor  #imm,@rd
   9639         beq  pcrel:8                  bor  #imm,@abs:8
   9640      *  beq  pcrel:16                 bset #imm,rd
   9641         bvc  pcrel:8                  bset #imm,@rd
   9642      *  bvc  pcrel:16                 bset #imm,@abs:8
   9643         bvs  pcrel:8                  bset rs,rd
   9644      *  bvs  pcrel:16                 bset rs,@rd
   9645         bpl  pcrel:8                  bset rs,@abs:8
   9646      *  bpl  pcrel:16                 bsr  pcrel:8
   9647         bmi  pcrel:8                  bsr  pcrel:16
   9648      *  bmi  pcrel:16                 bst  #imm,rd
   9649         bge  pcrel:8                  bst  #imm,@rd
   9650      *  bge  pcrel:16                 bst  #imm,@abs:8
   9651         blt  pcrel:8                  btst #imm,rd
   9652      *  blt  pcrel:16                 btst #imm,@rd
   9653         bgt  pcrel:8                  btst #imm,@abs:8
   9654      *  bgt  pcrel:16                 btst rs,rd
   9655         ble  pcrel:8                  btst rs,@rd
   9656      *  ble  pcrel:16                 btst rs,@abs:8
   9657         bclr #imm,rd                  bxor #imm,rd
   9658         bclr #imm,@rd                 bxor #imm,@rd
   9659         bclr #imm,@abs:8              bxor #imm,@abs:8
   9660         bclr rs,rd                    cmp.b #imm,rd
   9661         bclr rs,@rd                   cmp.b rs,rd
   9662         bclr rs,@abs:8                cmp.w rs,rd
   9663         biand #imm,rd                 cmp.w rs,rd
   9664         biand #imm,@rd             *  cmp.w #imm,rd
   9665         biand #imm,@abs:8          *  cmp.l #imm,rd
   9666         bild #imm,rd               *  cmp.l rs,rd
   9667         bild #imm,@rd                 daa  rs
   9668         bild #imm,@abs:8              das  rs
   9669         bior #imm,rd                  dec.b rs
   9670         bior #imm,@rd              *  dec.w #imm,rd
   9671         bior #imm,@abs:8           *  dec.l #imm,rd
   9672         bist #imm,rd                  divxu.b rs,rd
   9673         bist #imm,@rd              *  divxu.w rs,rd
   9674         bist #imm,@abs:8           *  divxs.b rs,rd
   9675         bixor #imm,rd              *  divxs.w rs,rd
   9676         bixor #imm,@rd                eepmov
   9677         bixor #imm,@abs:8          *  eepmovw
   9678 
   9679      *  exts.w rd                     mov.w rs,@abs:16
   9680      *  exts.l rd                  *  mov.l #imm,rd
   9681      *  extu.w rd                  *  mov.l rs,rd
   9682      *  extu.l rd                  *  mov.l @rs,rd
   9683         inc  rs                    *  mov.l @(disp:16,rs),rd
   9684      *  inc.w #imm,rd              *  mov.l @(disp:24,rs),rd
   9685      *  inc.l #imm,rd              *  mov.l @rs+,rd
   9686         jmp  @rs                   *  mov.l @abs:16,rd
   9687         jmp  abs                   *  mov.l @abs:24,rd
   9688         jmp  @@abs:8               *  mov.l rs,@rd
   9689         jsr  @rs                   *  mov.l rs,@(disp:16,rd)
   9690         jsr  abs                   *  mov.l rs,@(disp:24,rd)
   9691         jsr  @@abs:8               *  mov.l rs,@-rd
   9692         ldc  #imm,ccr              *  mov.l rs,@abs:16
   9693         ldc  rs,ccr                *  mov.l rs,@abs:24
   9694      *  ldc  @abs:16,ccr              movfpe @abs:16,rd
   9695      *  ldc  @abs:24,ccr              movtpe rs,@abs:16
   9696      *  ldc  @(disp:16,rs),ccr        mulxu.b rs,rd
   9697      *  ldc  @(disp:24,rs),ccr     *  mulxu.w rs,rd
   9698      *  ldc  @rs+,ccr              *  mulxs.b rs,rd
   9699      *  ldc  @rs,ccr               *  mulxs.w rs,rd
   9700      *  mov.b @(disp:24,rs),rd        neg.b rs
   9701      *  mov.b rs,@(disp:24,rd)     *  neg.w rs
   9702         mov.b @abs:16,rd           *  neg.l rs
   9703         mov.b rs,rd                   nop
   9704         mov.b @abs:8,rd               not.b rs
   9705         mov.b rs,@abs:8            *  not.w rs
   9706         mov.b rs,rd                *  not.l rs
   9707         mov.b #imm,rd                 or.b #imm,rd
   9708         mov.b @rs,rd                  or.b rs,rd
   9709         mov.b @(disp:16,rs),rd     *  or.w #imm,rd
   9710         mov.b @rs+,rd              *  or.w rs,rd
   9711         mov.b @abs:8,rd            *  or.l #imm,rd
   9712         mov.b rs,@rd               *  or.l rs,rd
   9713         mov.b rs,@(disp:16,rd)        orc  #imm,ccr
   9714         mov.b rs,@-rd                 pop.w rs
   9715         mov.b rs,@abs:8            *  pop.l rs
   9716         mov.w rs,@rd                  push.w rs
   9717      *  mov.w @(disp:24,rs),rd     *  push.l rs
   9718      *  mov.w rs,@(disp:24,rd)        rotl.b rs
   9719      *  mov.w @abs:24,rd           *  rotl.w rs
   9720      *  mov.w rs,@abs:24           *  rotl.l rs
   9721         mov.w rs,rd                   rotr.b rs
   9722         mov.w #imm,rd              *  rotr.w rs
   9723         mov.w @rs,rd               *  rotr.l rs
   9724         mov.w @(disp:16,rs),rd        rotxl.b rs
   9725         mov.w @rs+,rd              *  rotxl.w rs
   9726         mov.w @abs:16,rd           *  rotxl.l rs
   9727         mov.w rs,@(disp:16,rd)        rotxr.b rs
   9728         mov.w rs,@-rd              *  rotxr.w rs
   9729 
   9730      *  rotxr.l rs                 *  stc  ccr,@(disp:24,rd)
   9731         bpt                        *  stc  ccr,@-rd
   9732         rte                        *  stc  ccr,@abs:16
   9733         rts                        *  stc  ccr,@abs:24
   9734         shal.b rs                     sub.b rs,rd
   9735      *  shal.w rs                     sub.w rs,rd
   9736      *  shal.l rs                  *  sub.w #imm,rd
   9737         shar.b rs                  *  sub.l rs,rd
   9738      *  shar.w rs                  *  sub.l #imm,rd
   9739      *  shar.l rs                     subs #imm,rd
   9740         shll.b rs                     subx #imm,rd
   9741      *  shll.w rs                     subx rs,rd
   9742      *  shll.l rs                  *  trapa #imm
   9743         shlr.b rs                     xor  #imm,rd
   9744      *  shlr.w rs                     xor  rs,rd
   9745      *  shlr.l rs                  *  xor.w #imm,rd
   9746         sleep                      *  xor.w rs,rd
   9747         stc  ccr,rd                *  xor.l #imm,rd
   9748      *  stc  ccr,@rs               *  xor.l rs,rd
   9749      *  stc  ccr,@(disp:16,rd)        xorc #imm,ccr
   9750 
   9751    Four H8/300 instructions (`add', `cmp', `mov', `sub') are defined
   9752 with variants using the suffixes `.b', `.w', and `.l' to specify the
   9753 size of a memory operand.  `as' supports these suffixes, but does not
   9754 require them; since one of the operands is always a register, `as' can
   9755 deduce the correct size.
   9756 
   9757    For example, since `r0' refers to a 16-bit register,
   9758      mov    r0,@foo
   9759 is equivalent to
   9760      mov.w  r0,@foo
   9761 
   9762    If you use the size suffixes, `as' issues a warning when the suffix
   9763 and the register size do not match.
   9764 
   9765 
   9766 File: as.info,  Node: HPPA-Dependent,  Next: ESA/390-Dependent,  Prev: H8/300-Dependent,  Up: Machine Dependencies
   9767 
   9768 9.13 HPPA Dependent Features
   9769 ============================
   9770 
   9771 * Menu:
   9772 
   9773 * HPPA Notes::                Notes
   9774 * HPPA Options::              Options
   9775 * HPPA Syntax::               Syntax
   9776 * HPPA Floating Point::       Floating Point
   9777 * HPPA Directives::           HPPA Machine Directives
   9778 * HPPA Opcodes::              Opcodes
   9779 
   9780 
   9781 File: as.info,  Node: HPPA Notes,  Next: HPPA Options,  Up: HPPA-Dependent
   9782 
   9783 9.13.1 Notes
   9784 ------------
   9785 
   9786 As a back end for GNU CC `as' has been throughly tested and should work
   9787 extremely well.  We have tested it only minimally on hand written
   9788 assembly code and no one has tested it much on the assembly output from
   9789 the HP compilers.
   9790 
   9791    The format of the debugging sections has changed since the original
   9792 `as' port (version 1.3X) was released; therefore, you must rebuild all
   9793 HPPA objects and libraries with the new assembler so that you can debug
   9794 the final executable.
   9795 
   9796    The HPPA `as' port generates a small subset of the relocations
   9797 available in the SOM and ELF object file formats.  Additional relocation
   9798 support will be added as it becomes necessary.
   9799 
   9800 
   9801 File: as.info,  Node: HPPA Options,  Next: HPPA Syntax,  Prev: HPPA Notes,  Up: HPPA-Dependent
   9802 
   9803 9.13.2 Options
   9804 --------------
   9805 
   9806 `as' has no machine-dependent command-line options for the HPPA.
   9807 
   9808 
   9809 File: as.info,  Node: HPPA Syntax,  Next: HPPA Floating Point,  Prev: HPPA Options,  Up: HPPA-Dependent
   9810 
   9811 9.13.3 Syntax
   9812 -------------
   9813 
   9814 The assembler syntax closely follows the HPPA instruction set reference
   9815 manual; assembler directives and general syntax closely follow the HPPA
   9816 assembly language reference manual, with a few noteworthy differences.
   9817 
   9818    First, a colon may immediately follow a label definition.  This is
   9819 simply for compatibility with how most assembly language programmers
   9820 write code.
   9821 
   9822    Some obscure expression parsing problems may affect hand written
   9823 code which uses the `spop' instructions, or code which makes significant
   9824 use of the `!' line separator.
   9825 
   9826    `as' is much less forgiving about missing arguments and other
   9827 similar oversights than the HP assembler.  `as' notifies you of missing
   9828 arguments as syntax errors; this is regarded as a feature, not a bug.
   9829 
   9830    Finally, `as' allows you to use an external symbol without
   9831 explicitly importing the symbol.  _Warning:_ in the future this will be
   9832 an error for HPPA targets.
   9833 
   9834    Special characters for HPPA targets include:
   9835 
   9836    `;' is the line comment character.
   9837 
   9838    `!' can be used instead of a newline to separate statements.
   9839 
   9840    Since `$' has no special meaning, you may use it in symbol names.
   9841 
   9842 
   9843 File: as.info,  Node: HPPA Floating Point,  Next: HPPA Directives,  Prev: HPPA Syntax,  Up: HPPA-Dependent
   9844 
   9845 9.13.4 Floating Point
   9846 ---------------------
   9847 
   9848 The HPPA family uses IEEE floating-point numbers.
   9849 
   9850 
   9851 File: as.info,  Node: HPPA Directives,  Next: HPPA Opcodes,  Prev: HPPA Floating Point,  Up: HPPA-Dependent
   9852 
   9853 9.13.5 HPPA Assembler Directives
   9854 --------------------------------
   9855 
   9856 `as' for the HPPA supports many additional directives for compatibility
   9857 with the native assembler.  This section describes them only briefly.
   9858 For detailed information on HPPA-specific assembler directives, see
   9859 `HP9000 Series 800 Assembly Language Reference Manual' (HP 92432-90001).
   9860 
   9861    `as' does _not_ support the following assembler directives described
   9862 in the HP manual:
   9863 
   9864      .endm           .liston
   9865      .enter          .locct
   9866      .leave          .macro
   9867      .listoff
   9868 
   9869    Beyond those implemented for compatibility, `as' supports one
   9870 additional assembler directive for the HPPA: `.param'.  It conveys
   9871 register argument locations for static functions.  Its syntax closely
   9872 follows the `.export' directive.
   9873 
   9874    These are the additional directives in `as' for the HPPA:
   9875 
   9876 `.block N'
   9877 `.blockz N'
   9878      Reserve N bytes of storage, and initialize them to zero.
   9879 
   9880 `.call'
   9881      Mark the beginning of a procedure call.  Only the special case
   9882      with _no arguments_ is allowed.
   9883 
   9884 `.callinfo [ PARAM=VALUE, ... ]  [ FLAG, ... ]'
   9885      Specify a number of parameters and flags that define the
   9886      environment for a procedure.
   9887 
   9888      PARAM may be any of `frame' (frame size), `entry_gr' (end of
   9889      general register range), `entry_fr' (end of float register range),
   9890      `entry_sr' (end of space register range).
   9891 
   9892      The values for FLAG are `calls' or `caller' (proc has
   9893      subroutines), `no_calls' (proc does not call subroutines),
   9894      `save_rp' (preserve return pointer), `save_sp' (proc preserves
   9895      stack pointer), `no_unwind' (do not unwind this proc), `hpux_int'
   9896      (proc is interrupt routine).
   9897 
   9898 `.code'
   9899      Assemble into the standard section called `$TEXT$', subsection
   9900      `$CODE$'.
   9901 
   9902 `.copyright "STRING"'
   9903      In the SOM object format, insert STRING into the object code,
   9904      marked as a copyright string.
   9905 
   9906 `.copyright "STRING"'
   9907      In the ELF object format, insert STRING into the object code,
   9908      marked as a version string.
   9909 
   9910 `.enter'
   9911      Not yet supported; the assembler rejects programs containing this
   9912      directive.
   9913 
   9914 `.entry'
   9915      Mark the beginning of a procedure.
   9916 
   9917 `.exit'
   9918      Mark the end of a procedure.
   9919 
   9920 `.export NAME [ ,TYP ]  [ ,PARAM=R ]'
   9921      Make a procedure NAME available to callers.  TYP, if present, must
   9922      be one of `absolute', `code' (ELF only, not SOM), `data', `entry',
   9923      `data', `entry', `millicode', `plabel', `pri_prog', or `sec_prog'.
   9924 
   9925      PARAM, if present, provides either relocation information for the
   9926      procedure arguments and result, or a privilege level.  PARAM may be
   9927      `argwN' (where N ranges from `0' to `3', and indicates one of four
   9928      one-word arguments); `rtnval' (the procedure's result); or
   9929      `priv_lev' (privilege level).  For arguments or the result, R
   9930      specifies how to relocate, and must be one of `no' (not
   9931      relocatable), `gr' (argument is in general register), `fr' (in
   9932      floating point register), or `fu' (upper half of float register).
   9933      For `priv_lev', R is an integer.
   9934 
   9935 `.half N'
   9936      Define a two-byte integer constant N; synonym for the portable
   9937      `as' directive `.short'.
   9938 
   9939 `.import NAME [ ,TYP ]'
   9940      Converse of `.export'; make a procedure available to call.  The
   9941      arguments use the same conventions as the first two arguments for
   9942      `.export'.
   9943 
   9944 `.label NAME'
   9945      Define NAME as a label for the current assembly location.
   9946 
   9947 `.leave'
   9948      Not yet supported; the assembler rejects programs containing this
   9949      directive.
   9950 
   9951 `.origin LC'
   9952      Advance location counter to LC. Synonym for the `as' portable
   9953      directive `.org'.
   9954 
   9955 `.param NAME [ ,TYP ]  [ ,PARAM=R ]'
   9956      Similar to `.export', but used for static procedures.
   9957 
   9958 `.proc'
   9959      Use preceding the first statement of a procedure.
   9960 
   9961 `.procend'
   9962      Use following the last statement of a procedure.
   9963 
   9964 `LABEL .reg EXPR'
   9965      Synonym for `.equ'; define LABEL with the absolute expression EXPR
   9966      as its value.
   9967 
   9968 `.space SECNAME [ ,PARAMS ]'
   9969      Switch to section SECNAME, creating a new section by that name if
   9970      necessary.  You may only use PARAMS when creating a new section,
   9971      not when switching to an existing one.  SECNAME may identify a
   9972      section by number rather than by name.
   9973 
   9974      If specified, the list PARAMS declares attributes of the section,
   9975      identified by keywords.  The keywords recognized are `spnum=EXP'
   9976      (identify this section by the number EXP, an absolute expression),
   9977      `sort=EXP' (order sections according to this sort key when linking;
   9978      EXP is an absolute expression), `unloadable' (section contains no
   9979      loadable data), `notdefined' (this section defined elsewhere), and
   9980      `private' (data in this section not available to other programs).
   9981 
   9982 `.spnum SECNAM'
   9983      Allocate four bytes of storage, and initialize them with the
   9984      section number of the section named SECNAM.  (You can define the
   9985      section number with the HPPA `.space' directive.)
   9986 
   9987 `.string "STR"'
   9988      Copy the characters in the string STR to the object file.  *Note
   9989      Strings: Strings, for information on escape sequences you can use
   9990      in `as' strings.
   9991 
   9992      _Warning!_ The HPPA version of `.string' differs from the usual
   9993      `as' definition: it does _not_ write a zero byte after copying STR.
   9994 
   9995 `.stringz "STR"'
   9996      Like `.string', but appends a zero byte after copying STR to object
   9997      file.
   9998 
   9999 `.subspa NAME [ ,PARAMS ]'
   10000 `.nsubspa NAME [ ,PARAMS ]'
   10001      Similar to `.space', but selects a subsection NAME within the
   10002      current section.  You may only specify PARAMS when you create a
   10003      subsection (in the first instance of `.subspa' for this NAME).
   10004 
   10005      If specified, the list PARAMS declares attributes of the
   10006      subsection, identified by keywords.  The keywords recognized are
   10007      `quad=EXPR' ("quadrant" for this subsection), `align=EXPR'
   10008      (alignment for beginning of this subsection; a power of two),
   10009      `access=EXPR' (value for "access rights" field), `sort=EXPR'
   10010      (sorting order for this subspace in link), `code_only' (subsection
   10011      contains only code), `unloadable' (subsection cannot be loaded
   10012      into memory), `comdat' (subsection is comdat), `common'
   10013      (subsection is common block), `dup_comm' (subsection may have
   10014      duplicate names), or `zero' (subsection is all zeros, do not write
   10015      in object file).
   10016 
   10017      `.nsubspa' always creates a new subspace with the given name, even
   10018      if one with the same name already exists.
   10019 
   10020      `comdat', `common' and `dup_comm' can be used to implement various
   10021      flavors of one-only support when using the SOM linker.  The SOM
   10022      linker only supports specific combinations of these flags.  The
   10023      details are not documented.  A brief description is provided here.
   10024 
   10025      `comdat' provides a form of linkonce support.  It is useful for
   10026      both code and data subspaces.  A `comdat' subspace has a key symbol
   10027      marked by the `is_comdat' flag or `ST_COMDAT'.  Only the first
   10028      subspace for any given key is selected.  The key symbol becomes
   10029      universal in shared links.  This is similar to the behavior of
   10030      `secondary_def' symbols.
   10031 
   10032      `common' provides Fortran named common support.  It is only useful
   10033      for data subspaces.  Symbols with the flag `is_common' retain this
   10034      flag in shared links.  Referencing a `is_common' symbol in a shared
   10035      library from outside the library doesn't work.  Thus, `is_common'
   10036      symbols must be output whenever they are needed.
   10037 
   10038      `common' and `dup_comm' together provide Cobol common support.
   10039      The subspaces in this case must all be the same length.
   10040      Otherwise, this support is similar to the Fortran common support.
   10041 
   10042      `dup_comm' by itself provides a type of one-only support for code.
   10043      Only the first `dup_comm' subspace is selected.  There is a rather
   10044      complex algorithm to compare subspaces.  Code symbols marked with
   10045      the `dup_common' flag are hidden.  This support was intended for
   10046      "C++ duplicate inlines".
   10047 
   10048      A simplified technique is used to mark the flags of symbols based
   10049      on the flags of their subspace.  A symbol with the scope
   10050      SS_UNIVERSAL and type ST_ENTRY, ST_CODE or ST_DATA is marked with
   10051      the corresponding settings of `comdat', `common' and `dup_comm'
   10052      from the subspace, respectively.  This avoids having to introduce
   10053      additional directives to mark these symbols.  The HP assembler
   10054      sets `is_common' from `common'.  However, it doesn't set the
   10055      `dup_common' from `dup_comm'.  It doesn't have `comdat' support.
   10056 
   10057 `.version "STR"'
   10058      Write STR as version identifier in object code.
   10059 
   10060 
   10061 File: as.info,  Node: HPPA Opcodes,  Prev: HPPA Directives,  Up: HPPA-Dependent
   10062 
   10063 9.13.6 Opcodes
   10064 --------------
   10065 
   10066 For detailed information on the HPPA machine instruction set, see
   10067 `PA-RISC Architecture and Instruction Set Reference Manual' (HP
   10068 09740-90039).
   10069 
   10070 
   10071 File: as.info,  Node: ESA/390-Dependent,  Next: i386-Dependent,  Prev: HPPA-Dependent,  Up: Machine Dependencies
   10072 
   10073 9.14 ESA/390 Dependent Features
   10074 ===============================
   10075 
   10076 * Menu:
   10077 
   10078 * ESA/390 Notes::                Notes
   10079 * ESA/390 Options::              Options
   10080 * ESA/390 Syntax::               Syntax
   10081 * ESA/390 Floating Point::       Floating Point
   10082 * ESA/390 Directives::           ESA/390 Machine Directives
   10083 * ESA/390 Opcodes::              Opcodes
   10084 
   10085 
   10086 File: as.info,  Node: ESA/390 Notes,  Next: ESA/390 Options,  Up: ESA/390-Dependent
   10087 
   10088 9.14.1 Notes
   10089 ------------
   10090 
   10091 The ESA/390 `as' port is currently intended to be a back-end for the
   10092 GNU CC compiler.  It is not HLASM compatible, although it does support
   10093 a subset of some of the HLASM directives.  The only supported binary
   10094 file format is ELF; none of the usual MVS/VM/OE/USS object file
   10095 formats, such as ESD or XSD, are supported.
   10096 
   10097    When used with the GNU CC compiler, the ESA/390 `as' will produce
   10098 correct, fully relocated, functional binaries, and has been used to
   10099 compile and execute large projects.  However, many aspects should still
   10100 be considered experimental; these include shared library support,
   10101 dynamically loadable objects, and any relocation other than the 31-bit
   10102 relocation.
   10103 
   10104 
   10105 File: as.info,  Node: ESA/390 Options,  Next: ESA/390 Syntax,  Prev: ESA/390 Notes,  Up: ESA/390-Dependent
   10106 
   10107 9.14.2 Options
   10108 --------------
   10109 
   10110 `as' has no machine-dependent command-line options for the ESA/390.
   10111 
   10112 
   10113 File: as.info,  Node: ESA/390 Syntax,  Next: ESA/390 Floating Point,  Prev: ESA/390 Options,  Up: ESA/390-Dependent
   10114 
   10115 9.14.3 Syntax
   10116 -------------
   10117 
   10118 The opcode/operand syntax follows the ESA/390 Principles of Operation
   10119 manual; assembler directives and general syntax are loosely based on the
   10120 prevailing AT&T/SVR4/ELF/Solaris style notation.  HLASM-style directives
   10121 are _not_ supported for the most part, with the exception of those
   10122 described herein.
   10123 
   10124    A leading dot in front of directives is optional, and the case of
   10125 directives is ignored; thus for example, .using and USING have the same
   10126 effect.
   10127 
   10128    A colon may immediately follow a label definition.  This is simply
   10129 for compatibility with how most assembly language programmers write
   10130 code.
   10131 
   10132    `#' is the line comment character.
   10133 
   10134    `;' can be used instead of a newline to separate statements.
   10135 
   10136    Since `$' has no special meaning, you may use it in symbol names.
   10137 
   10138    Registers can be given the symbolic names r0..r15, fp0, fp2, fp4,
   10139 fp6.  By using thesse symbolic names, `as' can detect simple syntax
   10140 errors. The name rarg or r.arg is a synonym for r11, rtca or r.tca for
   10141 r12, sp, r.sp, dsa r.dsa for r13, lr or r.lr for r14, rbase or r.base
   10142 for r3 and rpgt or r.pgt for r4.
   10143 
   10144    `*' is the current location counter.  Unlike `.' it is always
   10145 relative to the last USING directive.  Note that this means that
   10146 expressions cannot use multiplication, as any occurrence of `*' will be
   10147 interpreted as a location counter.
   10148 
   10149    All labels are relative to the last USING.  Thus, branches to a label
   10150 always imply the use of base+displacement.
   10151 
   10152    Many of the usual forms of address constants / address literals are
   10153 supported.  Thus,
   10154      	.using	*,r3
   10155      	L	r15,=A(some_routine)
   10156      	LM	r6,r7,=V(some_longlong_extern)
   10157      	A	r1,=F'12'
   10158      	AH	r0,=H'42'
   10159      	ME	r6,=E'3.1416'
   10160      	MD	r6,=D'3.14159265358979'
   10161      	O	r6,=XL4'cacad0d0'
   10162      	.ltorg
   10163    should all behave as expected: that is, an entry in the literal pool
   10164 will be created (or reused if it already exists), and the instruction
   10165 operands will be the displacement into the literal pool using the
   10166 current base register (as last declared with the `.using' directive).
   10167 
   10168 
   10169 File: as.info,  Node: ESA/390 Floating Point,  Next: ESA/390 Directives,  Prev: ESA/390 Syntax,  Up: ESA/390-Dependent
   10170 
   10171 9.14.4 Floating Point
   10172 ---------------------
   10173 
   10174 The assembler generates only IEEE floating-point numbers.  The older
   10175 floating point formats are not supported.
   10176 
   10177 
   10178 File: as.info,  Node: ESA/390 Directives,  Next: ESA/390 Opcodes,  Prev: ESA/390 Floating Point,  Up: ESA/390-Dependent
   10179 
   10180 9.14.5 ESA/390 Assembler Directives
   10181 -----------------------------------
   10182 
   10183 `as' for the ESA/390 supports all of the standard ELF/SVR4 assembler
   10184 directives that are documented in the main part of this documentation.
   10185 Several additional directives are supported in order to implement the
   10186 ESA/390 addressing model.  The most important of these are `.using' and
   10187 `.ltorg'
   10188 
   10189    These are the additional directives in `as' for the ESA/390:
   10190 
   10191 `.dc'
   10192      A small subset of the usual DC directive is supported.
   10193 
   10194 `.drop REGNO'
   10195      Stop using REGNO as the base register.  The REGNO must have been
   10196      previously declared with a `.using' directive in the same section
   10197      as the current section.
   10198 
   10199 `.ebcdic STRING'
   10200      Emit the EBCDIC equivalent of the indicated string.  The emitted
   10201      string will be null terminated.  Note that the directives
   10202      `.string' etc. emit ascii strings by default.
   10203 
   10204 `EQU'
   10205      The standard HLASM-style EQU directive is not supported; however,
   10206      the standard `as' directive .equ can be used to the same effect.
   10207 
   10208 `.ltorg'
   10209      Dump the literal pool accumulated so far; begin a new literal pool.
   10210      The literal pool will be written in the current section; in order
   10211      to generate correct assembly, a `.using' must have been previously
   10212      specified in the same section.
   10213 
   10214 `.using EXPR,REGNO'
   10215      Use REGNO as the base register for all subsequent RX, RS, and SS
   10216      form instructions. The EXPR will be evaluated to obtain the base
   10217      address; usually, EXPR will merely be `*'.
   10218 
   10219      This assembler allows two `.using' directives to be simultaneously
   10220      outstanding, one in the `.text' section, and one in another section
   10221      (typically, the `.data' section).  This feature allows dynamically
   10222      loaded objects to be implemented in a relatively straightforward
   10223      way.  A `.using' directive must always be specified in the `.text'
   10224      section; this will specify the base register that will be used for
   10225      branches in the `.text' section.  A second `.using' may be
   10226      specified in another section; this will specify the base register
   10227      that is used for non-label address literals.  When a second
   10228      `.using' is specified, then the subsequent `.ltorg' must be put in
   10229      the same section; otherwise an error will result.
   10230 
   10231      Thus, for example, the following code uses `r3' to address branch
   10232      targets and `r4' to address the literal pool, which has been
   10233      written to the `.data' section.  The is, the constants
   10234      `=A(some_routine)', `=H'42'' and `=E'3.1416'' will all appear in
   10235      the `.data' section.
   10236 
   10237           .data
   10238           	.using  LITPOOL,r4
   10239           .text
   10240           	BASR	r3,0
   10241           	.using	*,r3
   10242                   B       START
   10243           	.long	LITPOOL
   10244           START:
   10245           	L	r4,4(,r3)
   10246           	L	r15,=A(some_routine)
   10247           	LTR	r15,r15
   10248           	BNE	LABEL
   10249           	AH	r0,=H'42'
   10250           LABEL:
   10251           	ME	r6,=E'3.1416'
   10252           .data
   10253           LITPOOL:
   10254           	.ltorg
   10255 
   10256      Note that this dual-`.using' directive semantics extends and is
   10257      not compatible with HLASM semantics.  Note that this assembler
   10258      directive does not support the full range of HLASM semantics.
   10259 
   10260 
   10261 
   10262 File: as.info,  Node: ESA/390 Opcodes,  Prev: ESA/390 Directives,  Up: ESA/390-Dependent
   10263 
   10264 9.14.6 Opcodes
   10265 --------------
   10266 
   10267 For detailed information on the ESA/390 machine instruction set, see
   10268 `ESA/390 Principles of Operation' (IBM Publication Number DZ9AR004).
   10269 
   10270 
   10271 File: as.info,  Node: i386-Dependent,  Next: i860-Dependent,  Prev: ESA/390-Dependent,  Up: Machine Dependencies
   10272 
   10273 9.15 80386 Dependent Features
   10274 =============================
   10275 
   10276    The i386 version `as' supports both the original Intel 386
   10277 architecture in both 16 and 32-bit mode as well as AMD x86-64
   10278 architecture extending the Intel architecture to 64-bits.
   10279 
   10280 * Menu:
   10281 
   10282 * i386-Options::                Options
   10283 * i386-Directives::             X86 specific directives
   10284 * i386-Syntax::                 Syntactical considerations
   10285 * i386-Mnemonics::              Instruction Naming
   10286 * i386-Regs::                   Register Naming
   10287 * i386-Prefixes::               Instruction Prefixes
   10288 * i386-Memory::                 Memory References
   10289 * i386-Jumps::                  Handling of Jump Instructions
   10290 * i386-Float::                  Floating Point
   10291 * i386-SIMD::                   Intel's MMX and AMD's 3DNow! SIMD Operations
   10292 * i386-LWP::                    AMD's Lightweight Profiling Instructions
   10293 * i386-BMI::                    Bit Manipulation Instruction
   10294 * i386-TBM::                    AMD's Trailing Bit Manipulation Instructions
   10295 * i386-16bit::                  Writing 16-bit Code
   10296 * i386-Arch::                   Specifying an x86 CPU architecture
   10297 * i386-Bugs::                   AT&T Syntax bugs
   10298 * i386-Notes::                  Notes
   10299 
   10300 
   10301 File: as.info,  Node: i386-Options,  Next: i386-Directives,  Up: i386-Dependent
   10302 
   10303 9.15.1 Options
   10304 --------------
   10305 
   10306 The i386 version of `as' has a few machine dependent options:
   10307 
   10308 `--32 | --x32 | --64'
   10309      Select the word size, either 32 bits or 64 bits.  `--32' implies
   10310      Intel i386 architecture, while `--x32' and `--64' imply AMD x86-64
   10311      architecture with 32-bit or 64-bit word-size respectively.
   10312 
   10313      These options are only available with the ELF object file format,
   10314      and require that the necessary BFD support has been included (on a
   10315      32-bit platform you have to add -enable-64-bit-bfd to configure
   10316      enable 64-bit usage and use x86-64 as target platform).
   10317 
   10318 `-n'
   10319      By default, x86 GAS replaces multiple nop instructions used for
   10320      alignment within code sections with multi-byte nop instructions
   10321      such as leal 0(%esi,1),%esi.  This switch disables the
   10322      optimization.
   10323 
   10324 `--divide'
   10325      On SVR4-derived platforms, the character `/' is treated as a
   10326      comment character, which means that it cannot be used in
   10327      expressions.  The `--divide' option turns `/' into a normal
   10328      character.  This does not disable `/' at the beginning of a line
   10329      starting a comment, or affect using `#' for starting a comment.
   10330 
   10331 `-march=CPU[+EXTENSION...]'
   10332      This option specifies the target processor.  The assembler will
   10333      issue an error message if an attempt is made to assemble an
   10334      instruction which will not execute on the target processor.  The
   10335      following processor names are recognized: `i8086', `i186', `i286',
   10336      `i386', `i486', `i586', `i686', `pentium', `pentiumpro',
   10337      `pentiumii', `pentiumiii', `pentium4', `prescott', `nocona',
   10338      `core', `core2', `corei7', `l1om', `k1om', `k6', `k6_2', `athlon',
   10339      `opteron', `k8', `amdfam10', `bdver1', `bdver2', `bdver3',
   10340      `bdver4', `btver1', `btver2', `generic32' and `generic64'.
   10341 
   10342      In addition to the basic instruction set, the assembler can be
   10343      told to accept various extension mnemonics.  For example,
   10344      `-march=i686+sse4+vmx' extends I686 with SSE4 and VMX.  The
   10345      following extensions are currently supported: `8087', `287', `387',
   10346      `no87', `mmx', `nommx', `sse', `sse2', `sse3', `ssse3', `sse4.1',
   10347      `sse4.2', `sse4', `nosse', `avx', `avx2', `adx', `rdseed',
   10348      `prfchw', `smap', `mpx', `sha', `prefetchwt1', `clflushopt', `se1',
   10349      `clwb', `pcommit', `avx512f', `avx512cd', `avx512er', `avx512pf',
   10350      `avx512vl', `avx512bw', `avx512dq', `avx512ifma', `avx512vbmi',
   10351      `noavx', `vmx', `vmfunc', `smx', `xsave', `xsaveopt', `xsavec',
   10352      `xsaves', `aes', `pclmul', `fsgsbase', `rdrnd', `f16c', `bmi2',
   10353      `fma', `movbe', `ept', `lzcnt', `hle', `rtm', `invpcid', `clflush',
   10354      `lwp', `fma4', `xop', `cx16', `syscall', `rdtscp', `3dnow',
   10355      `3dnowa', `sse4a', `sse5', `svme', `abm' and `padlock'.  Note that
   10356      rather than extending a basic instruction set, the extension
   10357      mnemonics starting with `no' revoke the respective functionality.
   10358 
   10359      When the `.arch' directive is used with `-march', the `.arch'
   10360      directive will take precedent.
   10361 
   10362 `-mtune=CPU'
   10363      This option specifies a processor to optimize for. When used in
   10364      conjunction with the `-march' option, only instructions of the
   10365      processor specified by the `-march' option will be generated.
   10366 
   10367      Valid CPU values are identical to the processor list of
   10368      `-march=CPU'.
   10369 
   10370 `-msse2avx'
   10371      This option specifies that the assembler should encode SSE
   10372      instructions with VEX prefix.
   10373 
   10374 `-msse-check=NONE'
   10375 `-msse-check=WARNING'
   10376 `-msse-check=ERROR'
   10377      These options control if the assembler should check SSE
   10378      instructions.  `-msse-check=NONE' will make the assembler not to
   10379      check SSE instructions,  which is the default.
   10380      `-msse-check=WARNING' will make the assembler issue a warning for
   10381      any SSE instruction.  `-msse-check=ERROR' will make the assembler
   10382      issue an error for any SSE instruction.
   10383 
   10384 `-mavxscalar=128'
   10385 `-mavxscalar=256'
   10386      These options control how the assembler should encode scalar AVX
   10387      instructions.  `-mavxscalar=128' will encode scalar AVX
   10388      instructions with 128bit vector length, which is the default.
   10389      `-mavxscalar=256' will encode scalar AVX instructions with 256bit
   10390      vector length.
   10391 
   10392 `-mevexlig=128'
   10393 `-mevexlig=256'
   10394 `-mevexlig=512'
   10395      These options control how the assembler should encode
   10396      length-ignored (LIG) EVEX instructions.  `-mevexlig=128' will
   10397      encode LIG EVEX instructions with 128bit vector length, which is
   10398      the default.  `-mevexlig=256' and `-mevexlig=512' will encode LIG
   10399      EVEX instructions with 256bit and 512bit vector length,
   10400      respectively.
   10401 
   10402 `-mevexwig=0'
   10403 `-mevexwig=1'
   10404      These options control how the assembler should encode w-ignored
   10405      (WIG) EVEX instructions.  `-mevexwig=0' will encode WIG EVEX
   10406      instructions with evex.w = 0, which is the default.  `-mevexwig=1'
   10407      will encode WIG EVEX instructions with evex.w = 1.
   10408 
   10409 `-mmnemonic=ATT'
   10410 `-mmnemonic=INTEL'
   10411      This option specifies instruction mnemonic for matching
   10412      instructions.  The `.att_mnemonic' and `.intel_mnemonic'
   10413      directives will take precedent.
   10414 
   10415 `-msyntax=ATT'
   10416 `-msyntax=INTEL'
   10417      This option specifies instruction syntax when processing
   10418      instructions.  The `.att_syntax' and `.intel_syntax' directives
   10419      will take precedent.
   10420 
   10421 `-mnaked-reg'
   10422      This opetion specifies that registers don't require a `%' prefix.
   10423      The `.att_syntax' and `.intel_syntax' directives will take
   10424      precedent.
   10425 
   10426 `-madd-bnd-prefix'
   10427      This option forces the assembler to add BND prefix to all
   10428      branches, even if such prefix was not explicitly specified in the
   10429      source code.
   10430 
   10431 `-mbig-obj'
   10432      On x86-64 PE/COFF target this option forces the use of big object
   10433      file format, which allows more than 32768 sections.
   10434 
   10435 `-momit-lock-prefix=NO'
   10436 `-momit-lock-prefix=YES'
   10437      These options control how the assembler should encode lock prefix.
   10438      This option is intended as a workaround for processors, that fail
   10439      on lock prefix. This option can only be safely used with
   10440      single-core, single-thread computers `-momit-lock-prefix=YES' will
   10441      omit all lock prefixes.  `-momit-lock-prefix=NO' will encode lock
   10442      prefix as usual, which is the default.
   10443 
   10444 `-mevexrcig=RNE'
   10445 `-mevexrcig=RD'
   10446 `-mevexrcig=RU'
   10447 `-mevexrcig=RZ'
   10448      These options control how the assembler should encode SAE-only
   10449      EVEX instructions.  `-mevexrcig=RNE' will encode RC bits of EVEX
   10450      instruction with 00, which is the default.  `-mevexrcig=RD',
   10451      `-mevexrcig=RU' and `-mevexrcig=RZ' will encode SAE-only EVEX
   10452      instructions with 01, 10 and 11 RC bits, respectively.
   10453 
   10454 
   10455 
   10456 File: as.info,  Node: i386-Directives,  Next: i386-Syntax,  Prev: i386-Options,  Up: i386-Dependent
   10457 
   10458 9.15.2 x86 specific Directives
   10459 ------------------------------
   10460 
   10461 `.lcomm SYMBOL , LENGTH[, ALIGNMENT]'
   10462      Reserve LENGTH (an absolute expression) bytes for a local common
   10463      denoted by SYMBOL.  The section and value of SYMBOL are those of
   10464      the new local common.  The addresses are allocated in the bss
   10465      section, so that at run-time the bytes start off zeroed.  Since
   10466      SYMBOL is not declared global, it is normally not visible to `ld'.
   10467      The optional third parameter, ALIGNMENT, specifies the desired
   10468      alignment of the symbol in the bss section.
   10469 
   10470      This directive is only available for COFF based x86 targets.
   10471 
   10472 
   10473 
   10474 File: as.info,  Node: i386-Syntax,  Next: i386-Mnemonics,  Prev: i386-Directives,  Up: i386-Dependent
   10475 
   10476 9.15.3 i386 Syntactical Considerations
   10477 --------------------------------------
   10478 
   10479 * Menu:
   10480 
   10481 * i386-Variations::           AT&T Syntax versus Intel Syntax
   10482 * i386-Chars::                Special Characters
   10483 
   10484 
   10485 File: as.info,  Node: i386-Variations,  Next: i386-Chars,  Up: i386-Syntax
   10486 
   10487 9.15.3.1 AT&T Syntax versus Intel Syntax
   10488 ........................................
   10489 
   10490 `as' now supports assembly using Intel assembler syntax.
   10491 `.intel_syntax' selects Intel mode, and `.att_syntax' switches back to
   10492 the usual AT&T mode for compatibility with the output of `gcc'.  Either
   10493 of these directives may have an optional argument, `prefix', or
   10494 `noprefix' specifying whether registers require a `%' prefix.  AT&T
   10495 System V/386 assembler syntax is quite different from Intel syntax.  We
   10496 mention these differences because almost all 80386 documents use Intel
   10497 syntax.  Notable differences between the two syntaxes are:
   10498 
   10499    * AT&T immediate operands are preceded by `$'; Intel immediate
   10500      operands are undelimited (Intel `push 4' is AT&T `pushl $4').
   10501      AT&T register operands are preceded by `%'; Intel register operands
   10502      are undelimited.  AT&T absolute (as opposed to PC relative)
   10503      jump/call operands are prefixed by `*'; they are undelimited in
   10504      Intel syntax.
   10505 
   10506    * AT&T and Intel syntax use the opposite order for source and
   10507      destination operands.  Intel `add eax, 4' is `addl $4, %eax'.  The
   10508      `source, dest' convention is maintained for compatibility with
   10509      previous Unix assemblers.  Note that `bound', `invlpga', and
   10510      instructions with 2 immediate operands, such as the `enter'
   10511      instruction, do _not_ have reversed order.  *Note i386-Bugs::.
   10512 
   10513    * In AT&T syntax the size of memory operands is determined from the
   10514      last character of the instruction mnemonic.  Mnemonic suffixes of
   10515      `b', `w', `l' and `q' specify byte (8-bit), word (16-bit), long
   10516      (32-bit) and quadruple word (64-bit) memory references.  Intel
   10517      syntax accomplishes this by prefixing memory operands (_not_ the
   10518      instruction mnemonics) with `byte ptr', `word ptr', `dword ptr'
   10519      and `qword ptr'.  Thus, Intel `mov al, byte ptr FOO' is `movb FOO,
   10520      %al' in AT&T syntax.
   10521 
   10522      In 64-bit code, `movabs' can be used to encode the `mov'
   10523      instruction with the 64-bit displacement or immediate operand.
   10524 
   10525    * Immediate form long jumps and calls are `lcall/ljmp $SECTION,
   10526      $OFFSET' in AT&T syntax; the Intel syntax is `call/jmp far
   10527      SECTION:OFFSET'.  Also, the far return instruction is `lret
   10528      $STACK-ADJUST' in AT&T syntax; Intel syntax is `ret far
   10529      STACK-ADJUST'.
   10530 
   10531    * The AT&T assembler does not provide support for multiple section
   10532      programs.  Unix style systems expect all programs to be single
   10533      sections.
   10534 
   10535 
   10536 File: as.info,  Node: i386-Chars,  Prev: i386-Variations,  Up: i386-Syntax
   10537 
   10538 9.15.3.2 Special Characters
   10539 ...........................
   10540 
   10541 The presence of a `#' appearing anywhere on a line indicates the start
   10542 of a comment that extends to the end of that line.
   10543 
   10544    If a `#' appears as the first character of a line then the whole
   10545 line is treated as a comment, but in this case the line can also be a
   10546 logical line number directive (*note Comments::) or a preprocessor
   10547 control command (*note Preprocessing::).
   10548 
   10549    If the `--divide' command line option has not been specified then
   10550 the `/' character appearing anywhere on a line also introduces a line
   10551 comment.
   10552 
   10553    The `;' character can be used to separate statements on the same
   10554 line.
   10555 
   10556 
   10557 File: as.info,  Node: i386-Mnemonics,  Next: i386-Regs,  Prev: i386-Syntax,  Up: i386-Dependent
   10558 
   10559 9.15.4 Instruction Naming
   10560 -------------------------
   10561 
   10562 Instruction mnemonics are suffixed with one character modifiers which
   10563 specify the size of operands.  The letters `b', `w', `l' and `q'
   10564 specify byte, word, long and quadruple word operands.  If no suffix is
   10565 specified by an instruction then `as' tries to fill in the missing
   10566 suffix based on the destination register operand (the last one by
   10567 convention).  Thus, `mov %ax, %bx' is equivalent to `movw %ax, %bx';
   10568 also, `mov $1, %bx' is equivalent to `movw $1, bx'.  Note that this is
   10569 incompatible with the AT&T Unix assembler which assumes that a missing
   10570 mnemonic suffix implies long operand size.  (This incompatibility does
   10571 not affect compiler output since compilers always explicitly specify
   10572 the mnemonic suffix.)
   10573 
   10574    Almost all instructions have the same names in AT&T and Intel format.
   10575 There are a few exceptions.  The sign extend and zero extend
   10576 instructions need two sizes to specify them.  They need a size to
   10577 sign/zero extend _from_ and a size to zero extend _to_.  This is
   10578 accomplished by using two instruction mnemonic suffixes in AT&T syntax.
   10579 Base names for sign extend and zero extend are `movs...' and `movz...'
   10580 in AT&T syntax (`movsx' and `movzx' in Intel syntax).  The instruction
   10581 mnemonic suffixes are tacked on to this base name, the _from_ suffix
   10582 before the _to_ suffix.  Thus, `movsbl %al, %edx' is AT&T syntax for
   10583 "move sign extend _from_ %al _to_ %edx."  Possible suffixes, thus, are
   10584 `bl' (from byte to long), `bw' (from byte to word), `wl' (from word to
   10585 long), `bq' (from byte to quadruple word), `wq' (from word to quadruple
   10586 word), and `lq' (from long to quadruple word).
   10587 
   10588    Different encoding options can be specified via optional mnemonic
   10589 suffix.  `.s' suffix swaps 2 register operands in encoding when moving
   10590 from one register to another.  `.d8' or `.d32' suffix prefers 8bit or
   10591 32bit displacement in encoding.
   10592 
   10593    The Intel-syntax conversion instructions
   10594 
   10595    * `cbw' -- sign-extend byte in `%al' to word in `%ax',
   10596 
   10597    * `cwde' -- sign-extend word in `%ax' to long in `%eax',
   10598 
   10599    * `cwd' -- sign-extend word in `%ax' to long in `%dx:%ax',
   10600 
   10601    * `cdq' -- sign-extend dword in `%eax' to quad in `%edx:%eax',
   10602 
   10603    * `cdqe' -- sign-extend dword in `%eax' to quad in `%rax' (x86-64
   10604      only),
   10605 
   10606    * `cqo' -- sign-extend quad in `%rax' to octuple in `%rdx:%rax'
   10607      (x86-64 only),
   10608 
   10609 are called `cbtw', `cwtl', `cwtd', `cltd', `cltq', and `cqto' in AT&T
   10610 naming.  `as' accepts either naming for these instructions.
   10611 
   10612    Far call/jump instructions are `lcall' and `ljmp' in AT&T syntax,
   10613 but are `call far' and `jump far' in Intel convention.
   10614 
   10615 9.15.5 AT&T Mnemonic versus Intel Mnemonic
   10616 ------------------------------------------
   10617 
   10618 `as' supports assembly using Intel mnemonic.  `.intel_mnemonic' selects
   10619 Intel mnemonic with Intel syntax, and `.att_mnemonic' switches back to
   10620 the usual AT&T mnemonic with AT&T syntax for compatibility with the
   10621 output of `gcc'.  Several x87 instructions, `fadd', `fdiv', `fdivp',
   10622 `fdivr', `fdivrp', `fmul', `fsub', `fsubp', `fsubr' and `fsubrp',  are
   10623 implemented in AT&T System V/386 assembler with different mnemonics
   10624 from those in Intel IA32 specification.  `gcc' generates those
   10625 instructions with AT&T mnemonic.
   10626 
   10627 
   10628 File: as.info,  Node: i386-Regs,  Next: i386-Prefixes,  Prev: i386-Mnemonics,  Up: i386-Dependent
   10629 
   10630 9.15.6 Register Naming
   10631 ----------------------
   10632 
   10633 Register operands are always prefixed with `%'.  The 80386 registers
   10634 consist of
   10635 
   10636    * the 8 32-bit registers `%eax' (the accumulator), `%ebx', `%ecx',
   10637      `%edx', `%edi', `%esi', `%ebp' (the frame pointer), and `%esp'
   10638      (the stack pointer).
   10639 
   10640    * the 8 16-bit low-ends of these: `%ax', `%bx', `%cx', `%dx', `%di',
   10641      `%si', `%bp', and `%sp'.
   10642 
   10643    * the 8 8-bit registers: `%ah', `%al', `%bh', `%bl', `%ch', `%cl',
   10644      `%dh', and `%dl' (These are the high-bytes and low-bytes of `%ax',
   10645      `%bx', `%cx', and `%dx')
   10646 
   10647    * the 6 section registers `%cs' (code section), `%ds' (data
   10648      section), `%ss' (stack section), `%es', `%fs', and `%gs'.
   10649 
   10650    * the 3 processor control registers `%cr0', `%cr2', and `%cr3'.
   10651 
   10652    * the 6 debug registers `%db0', `%db1', `%db2', `%db3', `%db6', and
   10653      `%db7'.
   10654 
   10655    * the 2 test registers `%tr6' and `%tr7'.
   10656 
   10657    * the 8 floating point register stack `%st' or equivalently
   10658      `%st(0)', `%st(1)', `%st(2)', `%st(3)', `%st(4)', `%st(5)',
   10659      `%st(6)', and `%st(7)'.  These registers are overloaded by 8 MMX
   10660      registers `%mm0', `%mm1', `%mm2', `%mm3', `%mm4', `%mm5', `%mm6'
   10661      and `%mm7'.
   10662 
   10663    * the 8 SSE registers registers `%xmm0', `%xmm1', `%xmm2', `%xmm3',
   10664      `%xmm4', `%xmm5', `%xmm6' and `%xmm7'.
   10665 
   10666    The AMD x86-64 architecture extends the register set by:
   10667 
   10668    * enhancing the 8 32-bit registers to 64-bit: `%rax' (the
   10669      accumulator), `%rbx', `%rcx', `%rdx', `%rdi', `%rsi', `%rbp' (the
   10670      frame pointer), `%rsp' (the stack pointer)
   10671 
   10672    * the 8 extended registers `%r8'-`%r15'.
   10673 
   10674    * the 8 32-bit low ends of the extended registers: `%r8d'-`%r15d'
   10675 
   10676    * the 8 16-bit low ends of the extended registers: `%r8w'-`%r15w'
   10677 
   10678    * the 8 8-bit low ends of the extended registers: `%r8b'-`%r15b'
   10679 
   10680    * the 4 8-bit registers: `%sil', `%dil', `%bpl', `%spl'.
   10681 
   10682    * the 8 debug registers: `%db8'-`%db15'.
   10683 
   10684    * the 8 SSE registers: `%xmm8'-`%xmm15'.
   10685 
   10686 
   10687 File: as.info,  Node: i386-Prefixes,  Next: i386-Memory,  Prev: i386-Regs,  Up: i386-Dependent
   10688 
   10689 9.15.7 Instruction Prefixes
   10690 ---------------------------
   10691 
   10692 Instruction prefixes are used to modify the following instruction.  They
   10693 are used to repeat string instructions, to provide section overrides, to
   10694 perform bus lock operations, and to change operand and address sizes.
   10695 (Most instructions that normally operate on 32-bit operands will use
   10696 16-bit operands if the instruction has an "operand size" prefix.)
   10697 Instruction prefixes are best written on the same line as the
   10698 instruction they act upon. For example, the `scas' (scan string)
   10699 instruction is repeated with:
   10700 
   10701              repne scas %es:(%edi),%al
   10702 
   10703    You may also place prefixes on the lines immediately preceding the
   10704 instruction, but this circumvents checks that `as' does with prefixes,
   10705 and will not work with all prefixes.
   10706 
   10707    Here is a list of instruction prefixes:
   10708 
   10709    * Section override prefixes `cs', `ds', `ss', `es', `fs', `gs'.
   10710      These are automatically added by specifying using the
   10711      SECTION:MEMORY-OPERAND form for memory references.
   10712 
   10713    * Operand/Address size prefixes `data16' and `addr16' change 32-bit
   10714      operands/addresses into 16-bit operands/addresses, while `data32'
   10715      and `addr32' change 16-bit ones (in a `.code16' section) into
   10716      32-bit operands/addresses.  These prefixes _must_ appear on the
   10717      same line of code as the instruction they modify. For example, in
   10718      a 16-bit `.code16' section, you might write:
   10719 
   10720                   addr32 jmpl *(%ebx)
   10721 
   10722    * The bus lock prefix `lock' inhibits interrupts during execution of
   10723      the instruction it precedes.  (This is only valid with certain
   10724      instructions; see a 80386 manual for details).
   10725 
   10726    * The wait for coprocessor prefix `wait' waits for the coprocessor to
   10727      complete the current instruction.  This should never be needed for
   10728      the 80386/80387 combination.
   10729 
   10730    * The `rep', `repe', and `repne' prefixes are added to string
   10731      instructions to make them repeat `%ecx' times (`%cx' times if the
   10732      current address size is 16-bits).  
   10733 
   10734    * The `rex' family of prefixes is used by x86-64 to encode
   10735      extensions to i386 instruction set.  The `rex' prefix has four
   10736      bits -- an operand size overwrite (`64') used to change operand
   10737      size from 32-bit to 64-bit and X, Y and Z extensions bits used to
   10738      extend the register set.
   10739 
   10740      You may write the `rex' prefixes directly. The `rex64xyz'
   10741      instruction emits `rex' prefix with all the bits set.  By omitting
   10742      the `64', `x', `y' or `z' you may write other prefixes as well.
   10743      Normally, there is no need to write the prefixes explicitly, since
   10744      gas will automatically generate them based on the instruction
   10745      operands.
   10746 
   10747 
   10748 File: as.info,  Node: i386-Memory,  Next: i386-Jumps,  Prev: i386-Prefixes,  Up: i386-Dependent
   10749 
   10750 9.15.8 Memory References
   10751 ------------------------
   10752 
   10753 An Intel syntax indirect memory reference of the form
   10754 
   10755      SECTION:[BASE + INDEX*SCALE + DISP]
   10756 
   10757 is translated into the AT&T syntax
   10758 
   10759      SECTION:DISP(BASE, INDEX, SCALE)
   10760 
   10761 where BASE and INDEX are the optional 32-bit base and index registers,
   10762 DISP is the optional displacement, and SCALE, taking the values 1, 2,
   10763 4, and 8, multiplies INDEX to calculate the address of the operand.  If
   10764 no SCALE is specified, SCALE is taken to be 1.  SECTION specifies the
   10765 optional section register for the memory operand, and may override the
   10766 default section register (see a 80386 manual for section register
   10767 defaults). Note that section overrides in AT&T syntax _must_ be
   10768 preceded by a `%'.  If you specify a section override which coincides
   10769 with the default section register, `as' does _not_ output any section
   10770 register override prefixes to assemble the given instruction.  Thus,
   10771 section overrides can be specified to emphasize which section register
   10772 is used for a given memory operand.
   10773 
   10774    Here are some examples of Intel and AT&T style memory references:
   10775 
   10776 AT&T: `-4(%ebp)', Intel:  `[ebp - 4]'
   10777      BASE is `%ebp'; DISP is `-4'. SECTION is missing, and the default
   10778      section is used (`%ss' for addressing with `%ebp' as the base
   10779      register).  INDEX, SCALE are both missing.
   10780 
   10781 AT&T: `foo(,%eax,4)', Intel: `[foo + eax*4]'
   10782      INDEX is `%eax' (scaled by a SCALE 4); DISP is `foo'.  All other
   10783      fields are missing.  The section register here defaults to `%ds'.
   10784 
   10785 AT&T: `foo(,1)'; Intel `[foo]'
   10786      This uses the value pointed to by `foo' as a memory operand.  Note
   10787      that BASE and INDEX are both missing, but there is only _one_ `,'.
   10788      This is a syntactic exception.
   10789 
   10790 AT&T: `%gs:foo'; Intel `gs:foo'
   10791      This selects the contents of the variable `foo' with section
   10792      register SECTION being `%gs'.
   10793 
   10794    Absolute (as opposed to PC relative) call and jump operands must be
   10795 prefixed with `*'.  If no `*' is specified, `as' always chooses PC
   10796 relative addressing for jump/call labels.
   10797 
   10798    Any instruction that has a memory operand, but no register operand,
   10799 _must_ specify its size (byte, word, long, or quadruple) with an
   10800 instruction mnemonic suffix (`b', `w', `l' or `q', respectively).
   10801 
   10802    The x86-64 architecture adds an RIP (instruction pointer relative)
   10803 addressing.  This addressing mode is specified by using `rip' as a base
   10804 register.  Only constant offsets are valid. For example:
   10805 
   10806 AT&T: `1234(%rip)', Intel: `[rip + 1234]'
   10807      Points to the address 1234 bytes past the end of the current
   10808      instruction.
   10809 
   10810 AT&T: `symbol(%rip)', Intel: `[rip + symbol]'
   10811      Points to the `symbol' in RIP relative way, this is shorter than
   10812      the default absolute addressing.
   10813 
   10814    Other addressing modes remain unchanged in x86-64 architecture,
   10815 except registers used are 64-bit instead of 32-bit.
   10816 
   10817 
   10818 File: as.info,  Node: i386-Jumps,  Next: i386-Float,  Prev: i386-Memory,  Up: i386-Dependent
   10819 
   10820 9.15.9 Handling of Jump Instructions
   10821 ------------------------------------
   10822 
   10823 Jump instructions are always optimized to use the smallest possible
   10824 displacements.  This is accomplished by using byte (8-bit) displacement
   10825 jumps whenever the target is sufficiently close.  If a byte displacement
   10826 is insufficient a long displacement is used.  We do not support word
   10827 (16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump
   10828 instruction with the `data16' instruction prefix), since the 80386
   10829 insists upon masking `%eip' to 16 bits after the word displacement is
   10830 added. (See also *note i386-Arch::)
   10831 
   10832    Note that the `jcxz', `jecxz', `loop', `loopz', `loope', `loopnz'
   10833 and `loopne' instructions only come in byte displacements, so that if
   10834 you use these instructions (`gcc' does not use them) you may get an
   10835 error message (and incorrect code).  The AT&T 80386 assembler tries to
   10836 get around this problem by expanding `jcxz foo' to
   10837 
   10838               jcxz cx_zero
   10839               jmp cx_nonzero
   10840      cx_zero: jmp foo
   10841      cx_nonzero:
   10842 
   10843 
   10844 File: as.info,  Node: i386-Float,  Next: i386-SIMD,  Prev: i386-Jumps,  Up: i386-Dependent
   10845 
   10846 9.15.10 Floating Point
   10847 ----------------------
   10848 
   10849 All 80387 floating point types except packed BCD are supported.  (BCD
   10850 support may be added without much difficulty).  These data types are
   10851 16-, 32-, and 64- bit integers, and single (32-bit), double (64-bit),
   10852 and extended (80-bit) precision floating point.  Each supported type
   10853 has an instruction mnemonic suffix and a constructor associated with
   10854 it.  Instruction mnemonic suffixes specify the operand's data type.
   10855 Constructors build these data types into memory.
   10856 
   10857    * Floating point constructors are `.float' or `.single', `.double',
   10858      and `.tfloat' for 32-, 64-, and 80-bit formats.  These correspond
   10859      to instruction mnemonic suffixes `s', `l', and `t'. `t' stands for
   10860      80-bit (ten byte) real.  The 80387 only supports this format via
   10861      the `fldt' (load 80-bit real to stack top) and `fstpt' (store
   10862      80-bit real and pop stack) instructions.
   10863 
   10864    * Integer constructors are `.word', `.long' or `.int', and `.quad'
   10865      for the 16-, 32-, and 64-bit integer formats.  The corresponding
   10866      instruction mnemonic suffixes are `s' (single), `l' (long), and
   10867      `q' (quad).  As with the 80-bit real format, the 64-bit `q' format
   10868      is only present in the `fildq' (load quad integer to stack top)
   10869      and `fistpq' (store quad integer and pop stack) instructions.
   10870 
   10871    Register to register operations should not use instruction mnemonic
   10872 suffixes.  `fstl %st, %st(1)' will give a warning, and be assembled as
   10873 if you wrote `fst %st, %st(1)', since all register to register
   10874 operations use 80-bit floating point operands. (Contrast this with
   10875 `fstl %st, mem', which converts `%st' from 80-bit to 64-bit floating
   10876 point format, then stores the result in the 4 byte location `mem')
   10877 
   10878 
   10879 File: as.info,  Node: i386-SIMD,  Next: i386-LWP,  Prev: i386-Float,  Up: i386-Dependent
   10880 
   10881 9.15.11 Intel's MMX and AMD's 3DNow! SIMD Operations
   10882 ----------------------------------------------------
   10883 
   10884 `as' supports Intel's MMX instruction set (SIMD instructions for
   10885 integer data), available on Intel's Pentium MMX processors and Pentium
   10886 II processors, AMD's K6 and K6-2 processors, Cyrix' M2 processor, and
   10887 probably others.  It also supports AMD's 3DNow!  instruction set (SIMD
   10888 instructions for 32-bit floating point data) available on AMD's K6-2
   10889 processor and possibly others in the future.
   10890 
   10891    Currently, `as' does not support Intel's floating point SIMD, Katmai
   10892 (KNI).
   10893 
   10894    The eight 64-bit MMX operands, also used by 3DNow!, are called
   10895 `%mm0', `%mm1', ... `%mm7'.  They contain eight 8-bit integers, four
   10896 16-bit integers, two 32-bit integers, one 64-bit integer, or two 32-bit
   10897 floating point values.  The MMX registers cannot be used at the same
   10898 time as the floating point stack.
   10899 
   10900    See Intel and AMD documentation, keeping in mind that the operand
   10901 order in instructions is reversed from the Intel syntax.
   10902 
   10903 
   10904 File: as.info,  Node: i386-LWP,  Next: i386-BMI,  Prev: i386-SIMD,  Up: i386-Dependent
   10905 
   10906 9.15.12 AMD's Lightweight Profiling Instructions
   10907 ------------------------------------------------
   10908 
   10909 `as' supports AMD's Lightweight Profiling (LWP) instruction set,
   10910 available on AMD's Family 15h (Orochi) processors.
   10911 
   10912    LWP enables applications to collect and manage performance data, and
   10913 react to performance events.  The collection of performance data
   10914 requires no context switches.  LWP runs in the context of a thread and
   10915 so several counters can be used independently across multiple threads.
   10916 LWP can be used in both 64-bit and legacy 32-bit modes.
   10917 
   10918    For detailed information on the LWP instruction set, see the `AMD
   10919 Lightweight Profiling Specification' available at Lightweight Profiling
   10920 Specification (http://developer.amd.com/cpu/LWP).
   10921 
   10922 
   10923 File: as.info,  Node: i386-BMI,  Next: i386-TBM,  Prev: i386-LWP,  Up: i386-Dependent
   10924 
   10925 9.15.13 Bit Manipulation Instructions
   10926 -------------------------------------
   10927 
   10928 `as' supports the Bit Manipulation (BMI) instruction set.
   10929 
   10930    BMI instructions provide several instructions implementing individual
   10931 bit manipulation operations such as isolation, masking, setting, or
   10932 resetting.
   10933 
   10934 
   10935 File: as.info,  Node: i386-TBM,  Next: i386-16bit,  Prev: i386-BMI,  Up: i386-Dependent
   10936 
   10937 9.15.14 AMD's Trailing Bit Manipulation Instructions
   10938 ----------------------------------------------------
   10939 
   10940 `as' supports AMD's Trailing Bit Manipulation (TBM) instruction set,
   10941 available on AMD's BDVER2 processors (Trinity and Viperfish).
   10942 
   10943    TBM instructions provide instructions implementing individual bit
   10944 manipulation operations such as isolating, masking, setting, resetting,
   10945 complementing, and operations on trailing zeros and ones.
   10946 
   10947 
   10948 File: as.info,  Node: i386-16bit,  Next: i386-Arch,  Prev: i386-TBM,  Up: i386-Dependent
   10949 
   10950 9.15.15 Writing 16-bit Code
   10951 ---------------------------
   10952 
   10953 While `as' normally writes only "pure" 32-bit i386 code or 64-bit
   10954 x86-64 code depending on the default configuration, it also supports
   10955 writing code to run in real mode or in 16-bit protected mode code
   10956 segments.  To do this, put a `.code16' or `.code16gcc' directive before
   10957 the assembly language instructions to be run in 16-bit mode.  You can
   10958 switch `as' to writing 32-bit code with the `.code32' directive or
   10959 64-bit code with the `.code64' directive.
   10960 
   10961    `.code16gcc' provides experimental support for generating 16-bit
   10962 code from gcc, and differs from `.code16' in that `call', `ret',
   10963 `enter', `leave', `push', `pop', `pusha', `popa', `pushf', and `popf'
   10964 instructions default to 32-bit size.  This is so that the stack pointer
   10965 is manipulated in the same way over function calls, allowing access to
   10966 function parameters at the same stack offsets as in 32-bit mode.
   10967 `.code16gcc' also automatically adds address size prefixes where
   10968 necessary to use the 32-bit addressing modes that gcc generates.
   10969 
   10970    The code which `as' generates in 16-bit mode will not necessarily
   10971 run on a 16-bit pre-80386 processor.  To write code that runs on such a
   10972 processor, you must refrain from using _any_ 32-bit constructs which
   10973 require `as' to output address or operand size prefixes.
   10974 
   10975    Note that writing 16-bit code instructions by explicitly specifying a
   10976 prefix or an instruction mnemonic suffix within a 32-bit code section
   10977 generates different machine instructions than those generated for a
   10978 16-bit code segment.  In a 32-bit code section, the following code
   10979 generates the machine opcode bytes `66 6a 04', which pushes the value
   10980 `4' onto the stack, decrementing `%esp' by 2.
   10981 
   10982              pushw $4
   10983 
   10984    The same code in a 16-bit code section would generate the machine
   10985 opcode bytes `6a 04' (i.e., without the operand size prefix), which is
   10986 correct since the processor default operand size is assumed to be 16
   10987 bits in a 16-bit code section.
   10988 
   10989 
   10990 File: as.info,  Node: i386-Bugs,  Next: i386-Notes,  Prev: i386-Arch,  Up: i386-Dependent
   10991 
   10992 9.15.16 AT&T Syntax bugs
   10993 ------------------------
   10994 
   10995 The UnixWare assembler, and probably other AT&T derived ix86 Unix
   10996 assemblers, generate floating point instructions with reversed source
   10997 and destination registers in certain cases.  Unfortunately, gcc and
   10998 possibly many other programs use this reversed syntax, so we're stuck
   10999 with it.
   11000 
   11001    For example
   11002 
   11003              fsub %st,%st(3)
   11004    results in `%st(3)' being updated to `%st - %st(3)' rather than the
   11005 expected `%st(3) - %st'.  This happens with all the non-commutative
   11006 arithmetic floating point operations with two register operands where
   11007 the source register is `%st' and the destination register is `%st(i)'.
   11008 
   11009 
   11010 File: as.info,  Node: i386-Arch,  Next: i386-Bugs,  Prev: i386-16bit,  Up: i386-Dependent
   11011 
   11012 9.15.17 Specifying CPU Architecture
   11013 -----------------------------------
   11014 
   11015 `as' may be told to assemble for a particular CPU (sub-)architecture
   11016 with the `.arch CPU_TYPE' directive.  This directive enables a warning
   11017 when gas detects an instruction that is not supported on the CPU
   11018 specified.  The choices for CPU_TYPE are:
   11019 
   11020 `i8086'        `i186'         `i286'         `i386'
   11021 `i486'         `i586'         `i686'         `pentium'
   11022 `pentiumpro'   `pentiumii'    `pentiumiii'   `pentium4'
   11023 `prescott'     `nocona'       `core'         `core2'
   11024 `corei7'       `l1om'         `k1om'         
   11025 `k6'           `k6_2'         `athlon'       `k8'
   11026 `amdfam10'     `bdver1'       `bdver2'       `bdver3'
   11027 `bdver4'       `btver1'       `btver2'       
   11028 `generic32'    `generic64'                   
   11029 `.mmx'         `.sse'         `.sse2'        `.sse3'
   11030 `.ssse3'       `.sse4.1'      `.sse4.2'      `.sse4'
   11031 `.avx'         `.vmx'         `.smx'         `.ept'
   11032 `.clflush'     `.movbe'       `.xsave'       `.xsaveopt'
   11033 `.aes'         `.pclmul'      `.fma'         `.fsgsbase'
   11034 `.rdrnd'       `.f16c'        `.avx2'        `.bmi2'
   11035 `.lzcnt'       `.invpcid'     `.vmfunc'      `.hle'
   11036 `.rtm'         `.adx'         `.rdseed'      `.prfchw'
   11037 `.smap'        `.mpx'         `.sha'         `.prefetchwt1'
   11038 `.clflushopt'  `.xsavec'      `.xsaves'      `.se1'
   11039 `.avx512f'     `.avx512cd'    `.avx512er'    `.avx512pf'
   11040 `.avx512vl'    `.avx512bw'    `.avx512dq'    `.avx512ifma'
   11041 `.avx512vbmi'  `.clwb'        `.pcommit'     
   11042 `.3dnow'       `.3dnowa'      `.sse4a'       `.sse5'
   11043 `.syscall'     `.rdtscp'      `.svme'        `.abm'
   11044 `.lwp'         `.fma4'        `.xop'         `.cx16'
   11045 `.padlock'                                   
   11046 
   11047    Apart from the warning, there are only two other effects on `as'
   11048 operation;  Firstly, if you specify a CPU other than `i486', then shift
   11049 by one instructions such as `sarl $1, %eax' will automatically use a
   11050 two byte opcode sequence.  The larger three byte opcode sequence is
   11051 used on the 486 (and when no architecture is specified) because it
   11052 executes faster on the 486.  Note that you can explicitly request the
   11053 two byte opcode by writing `sarl %eax'.  Secondly, if you specify
   11054 `i8086', `i186', or `i286', _and_ `.code16' or `.code16gcc' then byte
   11055 offset conditional jumps will be promoted when necessary to a two
   11056 instruction sequence consisting of a conditional jump of the opposite
   11057 sense around an unconditional jump to the target.
   11058 
   11059    Following the CPU architecture (but not a sub-architecture, which
   11060 are those starting with a dot), you may specify `jumps' or `nojumps' to
   11061 control automatic promotion of conditional jumps. `jumps' is the
   11062 default, and enables jump promotion;  All external jumps will be of the
   11063 long variety, and file-local jumps will be promoted as necessary.
   11064 (*note i386-Jumps::)  `nojumps' leaves external conditional jumps as
   11065 byte offset jumps, and warns about file-local conditional jumps that
   11066 `as' promotes.  Unconditional jumps are treated as for `jumps'.
   11067 
   11068    For example
   11069 
   11070       .arch i8086,nojumps
   11071 
   11072 
   11073 File: as.info,  Node: i386-Notes,  Prev: i386-Bugs,  Up: i386-Dependent
   11074 
   11075 9.15.18 Notes
   11076 -------------
   11077 
   11078 There is some trickery concerning the `mul' and `imul' instructions
   11079 that deserves mention.  The 16-, 32-, 64- and 128-bit expanding
   11080 multiplies (base opcode `0xf6'; extension 4 for `mul' and 5 for `imul')
   11081 can be output only in the one operand form.  Thus, `imul %ebx, %eax'
   11082 does _not_ select the expanding multiply; the expanding multiply would
   11083 clobber the `%edx' register, and this would confuse `gcc' output.  Use
   11084 `imul %ebx' to get the 64-bit product in `%edx:%eax'.
   11085 
   11086    We have added a two operand form of `imul' when the first operand is
   11087 an immediate mode expression and the second operand is a register.
   11088 This is just a shorthand, so that, multiplying `%eax' by 69, for
   11089 example, can be done with `imul $69, %eax' rather than `imul $69, %eax,
   11090 %eax'.
   11091 
   11092 
   11093 File: as.info,  Node: i860-Dependent,  Next: i960-Dependent,  Prev: i386-Dependent,  Up: Machine Dependencies
   11094 
   11095 9.16 Intel i860 Dependent Features
   11096 ==================================
   11097 
   11098 * Menu:
   11099 
   11100 * Notes-i860::                  i860 Notes
   11101 * Options-i860::                i860 Command-line Options
   11102 * Directives-i860::             i860 Machine Directives
   11103 * Opcodes for i860::            i860 Opcodes
   11104 * Syntax of i860::              i860 Syntax
   11105 
   11106 
   11107 File: as.info,  Node: Notes-i860,  Next: Options-i860,  Up: i860-Dependent
   11108 
   11109 9.16.1 i860 Notes
   11110 -----------------
   11111 
   11112 This is a fairly complete i860 assembler which is compatible with the
   11113 UNIX System V/860 Release 4 assembler. However, it does not currently
   11114 support SVR4 PIC (i.e., `@GOT, @GOTOFF, @PLT').
   11115 
   11116    Like the SVR4/860 assembler, the output object format is ELF32.
   11117 Currently, this is the only supported object format. If there is
   11118 sufficient interest, other formats such as COFF may be implemented.
   11119 
   11120    Both the Intel and AT&T/SVR4 syntaxes are supported, with the latter
   11121 being the default.  One difference is that AT&T syntax requires the '%'
   11122 prefix on register names while Intel syntax does not.  Another
   11123 difference is in the specification of relocatable expressions.  The
   11124 Intel syntax is `ha%expression' whereas the SVR4 syntax is
   11125 `[expression]@ha' (and similarly for the "l" and "h" selectors).
   11126 
   11127 
   11128 File: as.info,  Node: Options-i860,  Next: Directives-i860,  Prev: Notes-i860,  Up: i860-Dependent
   11129 
   11130 9.16.2 i860 Command-line Options
   11131 --------------------------------
   11132 
   11133 9.16.2.1 SVR4 compatibility options
   11134 ...................................
   11135 
   11136 `-V'
   11137      Print assembler version.
   11138 
   11139 `-Qy'
   11140      Ignored.
   11141 
   11142 `-Qn'
   11143      Ignored.
   11144 
   11145 9.16.2.2 Other options
   11146 ......................
   11147 
   11148 `-EL'
   11149      Select little endian output (this is the default).
   11150 
   11151 `-EB'
   11152      Select big endian output. Note that the i860 always reads
   11153      instructions as little endian data, so this option only effects
   11154      data and not instructions.
   11155 
   11156 `-mwarn-expand'
   11157      Emit a warning message if any pseudo-instruction expansions
   11158      occurred.  For example, a `or' instruction with an immediate
   11159      larger than 16-bits will be expanded into two instructions. This
   11160      is a very undesirable feature to rely on, so this flag can help
   11161      detect any code where it happens. One use of it, for instance, has
   11162      been to find and eliminate any place where `gcc' may emit these
   11163      pseudo-instructions.
   11164 
   11165 `-mxp'
   11166      Enable support for the i860XP instructions and control registers.
   11167      By default, this option is disabled so that only the base
   11168      instruction set (i.e., i860XR) is supported.
   11169 
   11170 `-mintel-syntax'
   11171      The i860 assembler defaults to AT&T/SVR4 syntax.  This option
   11172      enables the Intel syntax.
   11173 
   11174 
   11175 File: as.info,  Node: Directives-i860,  Next: Opcodes for i860,  Prev: Options-i860,  Up: i860-Dependent
   11176 
   11177 9.16.3 i860 Machine Directives
   11178 ------------------------------
   11179 
   11180 `.dual'
   11181      Enter dual instruction mode. While this directive is supported, the
   11182      preferred way to use dual instruction mode is to explicitly code
   11183      the dual bit with the `d.' prefix.
   11184 
   11185 `.enddual'
   11186      Exit dual instruction mode. While this directive is supported, the
   11187      preferred way to use dual instruction mode is to explicitly code
   11188      the dual bit with the `d.' prefix.
   11189 
   11190 `.atmp'
   11191      Change the temporary register used when expanding pseudo
   11192      operations. The default register is `r31'.
   11193 
   11194    The `.dual', `.enddual', and `.atmp' directives are available only
   11195 in the Intel syntax mode.
   11196 
   11197    Both syntaxes allow for the standard `.align' directive.  However,
   11198 the Intel syntax additionally allows keywords for the alignment
   11199 parameter: "`.align type'", where `type' is one of `.short', `.long',
   11200 `.quad', `.single', `.double' representing alignments of 2, 4, 16, 4,
   11201 and 8, respectively.
   11202 
   11203 
   11204 File: as.info,  Node: Opcodes for i860,  Next: Syntax of i860,  Prev: Directives-i860,  Up: i860-Dependent
   11205 
   11206 9.16.4 i860 Opcodes
   11207 -------------------
   11208 
   11209 All of the Intel i860XR and i860XP machine instructions are supported.
   11210 Please see either _i860 Microprocessor Programmer's Reference Manual_
   11211 or _i860 Microprocessor Architecture_ for more information.
   11212 
   11213 9.16.4.1 Other instruction support (pseudo-instructions)
   11214 ........................................................
   11215 
   11216 For compatibility with some other i860 assemblers, a number of
   11217 pseudo-instructions are supported. While these are supported, they are
   11218 a very undesirable feature that should be avoided - in particular, when
   11219 they result in an expansion to multiple actual i860 instructions. Below
   11220 are the pseudo-instructions that result in expansions.
   11221    * Load large immediate into general register:
   11222 
   11223      The pseudo-instruction `mov imm,%rn' (where the immediate does not
   11224      fit within a signed 16-bit field) will be expanded into:
   11225           orh large_imm@h,%r0,%rn
   11226           or large_imm@l,%rn,%rn
   11227 
   11228    * Load/store with relocatable address expression:
   11229 
   11230      For example, the pseudo-instruction `ld.b addr_exp(%rx),%rn' will
   11231      be expanded into:
   11232           orh addr_exp@ha,%rx,%r31
   11233           ld.l addr_exp@l(%r31),%rn
   11234 
   11235      The analogous expansions apply to `ld.x, st.x, fld.x, pfld.x,
   11236      fst.x', and `pst.x' as well.
   11237 
   11238    * Signed large immediate with add/subtract:
   11239 
   11240      If any of the arithmetic operations `adds, addu, subs, subu' are
   11241      used with an immediate larger than 16-bits (signed), then they
   11242      will be expanded.  For instance, the pseudo-instruction `adds
   11243      large_imm,%rx,%rn' expands to:
   11244           orh large_imm@h,%r0,%r31
   11245           or large_imm@l,%r31,%r31
   11246           adds %r31,%rx,%rn
   11247 
   11248    * Unsigned large immediate with logical operations:
   11249 
   11250      Logical operations (`or, andnot, or, xor') also result in
   11251      expansions.  The pseudo-instruction `or large_imm,%rx,%rn' results
   11252      in:
   11253           orh large_imm@h,%rx,%r31
   11254           or large_imm@l,%r31,%rn
   11255 
   11256      Similarly for the others, except for `and' which expands to:
   11257           andnot (-1 - large_imm)@h,%rx,%r31
   11258           andnot (-1 - large_imm)@l,%r31,%rn
   11259 
   11260 
   11261 File: as.info,  Node: Syntax of i860,  Prev: Opcodes for i860,  Up: i860-Dependent
   11262 
   11263 9.16.5 i860 Syntax
   11264 ------------------
   11265 
   11266 * Menu:
   11267 
   11268 * i860-Chars::                Special Characters
   11269 
   11270 
   11271 File: as.info,  Node: i860-Chars,  Up: Syntax of i860
   11272 
   11273 9.16.5.1 Special Characters
   11274 ...........................
   11275 
   11276 The presence of a `#' appearing anywhere on a line indicates the start
   11277 of a comment that extends to the end of that line.
   11278 
   11279    If a `#' appears as the first character of a line then the whole
   11280 line is treated as a comment, but in this case the line can also be a
   11281 logical line number directive (*note Comments::) or a preprocessor
   11282 control command (*note Preprocessing::).
   11283 
   11284    The `;' character can be used to separate statements on the same
   11285 line.
   11286 
   11287 
   11288 File: as.info,  Node: i960-Dependent,  Next: IA-64-Dependent,  Prev: i860-Dependent,  Up: Machine Dependencies
   11289 
   11290 9.17 Intel 80960 Dependent Features
   11291 ===================================
   11292 
   11293 * Menu:
   11294 
   11295 * Options-i960::                i960 Command-line Options
   11296 * Floating Point-i960::         Floating Point
   11297 * Directives-i960::             i960 Machine Directives
   11298 * Opcodes for i960::            i960 Opcodes
   11299 * Syntax of i960::              i960 Syntax
   11300 
   11301 
   11302 File: as.info,  Node: Options-i960,  Next: Floating Point-i960,  Up: i960-Dependent
   11303 
   11304 9.17.1 i960 Command-line Options
   11305 --------------------------------
   11306 
   11307 `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
   11308      Select the 80960 architecture.  Instructions or features not
   11309      supported by the selected architecture cause fatal errors.
   11310 
   11311      `-ACA' is equivalent to `-ACA_A'; `-AKC' is equivalent to `-AMC'.
   11312      Synonyms are provided for compatibility with other tools.
   11313 
   11314      If you do not specify any of these options, `as' generates code
   11315      for any instruction or feature that is supported by _some_ version
   11316      of the 960 (even if this means mixing architectures!).  In
   11317      principle, `as' attempts to deduce the minimal sufficient
   11318      processor type if none is specified; depending on the object code
   11319      format, the processor type may be recorded in the object file.  If
   11320      it is critical that the `as' output match a specific architecture,
   11321      specify that architecture explicitly.
   11322 
   11323 `-b'
   11324      Add code to collect information about conditional branches taken,
   11325      for later optimization using branch prediction bits.  (The
   11326      conditional branch instructions have branch prediction bits in the
   11327      CA, CB, and CC architectures.)  If BR represents a conditional
   11328      branch instruction, the following represents the code generated by
   11329      the assembler when `-b' is specified:
   11330 
   11331                   call    INCREMENT ROUTINE
   11332                   .word   0       # pre-counter
   11333           Label:  BR
   11334                   call    INCREMENT ROUTINE
   11335                   .word   0       # post-counter
   11336 
   11337      The counter following a branch records the number of times that
   11338      branch was _not_ taken; the difference between the two counters is
   11339      the number of times the branch _was_ taken.
   11340 
   11341      A table of every such `Label' is also generated, so that the
   11342      external postprocessor `gbr960' (supplied by Intel) can locate all
   11343      the counters.  This table is always labeled `__BRANCH_TABLE__';
   11344      this is a local symbol to permit collecting statistics for many
   11345      separate object files.  The table is word aligned, and begins with
   11346      a two-word header.  The first word, initialized to 0, is used in
   11347      maintaining linked lists of branch tables.  The second word is a
   11348      count of the number of entries in the table, which follow
   11349      immediately: each is a word, pointing to one of the labels
   11350      illustrated above.
   11351 
   11352            +------------+------------+------------+ ... +------------+
   11353            |            |            |            |     |            |
   11354            |  *NEXT     |  COUNT: N  | *BRLAB 1   |     | *BRLAB N   |
   11355            |            |            |            |     |            |
   11356            +------------+------------+------------+ ... +------------+
   11357 
   11358                          __BRANCH_TABLE__ layout
   11359 
   11360      The first word of the header is used to locate multiple branch
   11361      tables, since each object file may contain one. Normally the links
   11362      are maintained with a call to an initialization routine, placed at
   11363      the beginning of each function in the file.  The GNU C compiler
   11364      generates these calls automatically when you give it a `-b' option.
   11365      For further details, see the documentation of `gbr960'.
   11366 
   11367 `-no-relax'
   11368      Normally, Compare-and-Branch instructions with targets that require
   11369      displacements greater than 13 bits (or that have external targets)
   11370      are replaced with the corresponding compare (or `chkbit') and
   11371      branch instructions.  You can use the `-no-relax' option to
   11372      specify that `as' should generate errors instead, if the target
   11373      displacement is larger than 13 bits.
   11374 
   11375      This option does not affect the Compare-and-Jump instructions; the
   11376      code emitted for them is _always_ adjusted when necessary
   11377      (depending on displacement size), regardless of whether you use
   11378      `-no-relax'.
   11379 
   11380 
   11381 File: as.info,  Node: Floating Point-i960,  Next: Directives-i960,  Prev: Options-i960,  Up: i960-Dependent
   11382 
   11383 9.17.2 Floating Point
   11384 ---------------------
   11385 
   11386 `as' generates IEEE floating-point numbers for the directives `.float',
   11387 `.double', `.extended', and `.single'.
   11388 
   11389 
   11390 File: as.info,  Node: Directives-i960,  Next: Opcodes for i960,  Prev: Floating Point-i960,  Up: i960-Dependent
   11391 
   11392 9.17.3 i960 Machine Directives
   11393 ------------------------------
   11394 
   11395 `.bss SYMBOL, LENGTH, ALIGN'
   11396      Reserve LENGTH bytes in the bss section for a local SYMBOL,
   11397      aligned to the power of two specified by ALIGN.  LENGTH and ALIGN
   11398      must be positive absolute expressions.  This directive differs
   11399      from `.lcomm' only in that it permits you to specify an alignment.
   11400      *Note `.lcomm': Lcomm.
   11401 
   11402 `.extended FLONUMS'
   11403      `.extended' expects zero or more flonums, separated by commas; for
   11404      each flonum, `.extended' emits an IEEE extended-format (80-bit)
   11405      floating-point number.
   11406 
   11407 `.leafproc CALL-LAB, BAL-LAB'
   11408      You can use the `.leafproc' directive in conjunction with the
   11409      optimized `callj' instruction to enable faster calls of leaf
   11410      procedures.  If a procedure is known to call no other procedures,
   11411      you may define an entry point that skips procedure prolog code
   11412      (and that does not depend on system-supplied saved context), and
   11413      declare it as the BAL-LAB using `.leafproc'.  If the procedure
   11414      also has an entry point that goes through the normal prolog, you
   11415      can specify that entry point as CALL-LAB.
   11416 
   11417      A `.leafproc' declaration is meant for use in conjunction with the
   11418      optimized call instruction `callj'; the directive records the data
   11419      needed later to choose between converting the `callj' into a `bal'
   11420      or a `call'.
   11421 
   11422      CALL-LAB is optional; if only one argument is present, or if the
   11423      two arguments are identical, the single argument is assumed to be
   11424      the `bal' entry point.
   11425 
   11426 `.sysproc NAME, INDEX'
   11427      The `.sysproc' directive defines a name for a system procedure.
   11428      After you define it using `.sysproc', you can use NAME to refer to
   11429      the system procedure identified by INDEX when calling procedures
   11430      with the optimized call instruction `callj'.
   11431 
   11432      Both arguments are required; INDEX must be between 0 and 31
   11433      (inclusive).
   11434 
   11435 
   11436 File: as.info,  Node: Opcodes for i960,  Next: Syntax of i960,  Prev: Directives-i960,  Up: i960-Dependent
   11437 
   11438 9.17.4 i960 Opcodes
   11439 -------------------
   11440 
   11441 All Intel 960 machine instructions are supported; *note i960
   11442 Command-line Options: Options-i960. for a discussion of selecting the
   11443 instruction subset for a particular 960 architecture.
   11444 
   11445    Some opcodes are processed beyond simply emitting a single
   11446 corresponding instruction: `callj', and Compare-and-Branch or
   11447 Compare-and-Jump instructions with target displacements larger than 13
   11448 bits.
   11449 
   11450 * Menu:
   11451 
   11452 * callj-i960::                  `callj'
   11453 * Compare-and-branch-i960::     Compare-and-Branch
   11454 
   11455 
   11456 File: as.info,  Node: callj-i960,  Next: Compare-and-branch-i960,  Up: Opcodes for i960
   11457 
   11458 9.17.4.1 `callj'
   11459 ................
   11460 
   11461 You can write `callj' to have the assembler or the linker determine the
   11462 most appropriate form of subroutine call: `call', `bal', or `calls'.
   11463 If the assembly source contains enough information--a `.leafproc' or
   11464 `.sysproc' directive defining the operand--then `as' translates the
   11465 `callj'; if not, it simply emits the `callj', leaving it for the linker
   11466 to resolve.
   11467 
   11468 
   11469 File: as.info,  Node: Compare-and-branch-i960,  Prev: callj-i960,  Up: Opcodes for i960
   11470 
   11471 9.17.4.2 Compare-and-Branch
   11472 ...........................
   11473 
   11474 The 960 architectures provide combined Compare-and-Branch instructions
   11475 that permit you to store the branch target in the lower 13 bits of the
   11476 instruction word itself.  However, if you specify a branch target far
   11477 enough away that its address won't fit in 13 bits, the assembler can
   11478 either issue an error, or convert your Compare-and-Branch instruction
   11479 into separate instructions to do the compare and the branch.
   11480 
   11481    Whether `as' gives an error or expands the instruction depends on
   11482 two choices you can make: whether you use the `-no-relax' option, and
   11483 whether you use a "Compare and Branch" instruction or a "Compare and
   11484 Jump" instruction.  The "Jump" instructions are _always_ expanded if
   11485 necessary; the "Branch" instructions are expanded when necessary
   11486 _unless_ you specify `-no-relax'--in which case `as' gives an error
   11487 instead.
   11488 
   11489    These are the Compare-and-Branch instructions, their "Jump" variants,
   11490 and the instruction pairs they may expand into:
   11491 
   11492              Compare and
   11493           Branch      Jump       Expanded to
   11494           ------    ------       ------------
   11495              bbc                 chkbit; bno
   11496              bbs                 chkbit; bo
   11497           cmpibe    cmpije       cmpi; be
   11498           cmpibg    cmpijg       cmpi; bg
   11499          cmpibge   cmpijge       cmpi; bge
   11500           cmpibl    cmpijl       cmpi; bl
   11501          cmpible   cmpijle       cmpi; ble
   11502          cmpibno   cmpijno       cmpi; bno
   11503          cmpibne   cmpijne       cmpi; bne
   11504           cmpibo    cmpijo       cmpi; bo
   11505           cmpobe    cmpoje       cmpo; be
   11506           cmpobg    cmpojg       cmpo; bg
   11507          cmpobge   cmpojge       cmpo; bge
   11508           cmpobl    cmpojl       cmpo; bl
   11509          cmpoble   cmpojle       cmpo; ble
   11510          cmpobne   cmpojne       cmpo; bne
   11511 
   11512 
   11513 File: as.info,  Node: Syntax of i960,  Prev: Opcodes for i960,  Up: i960-Dependent
   11514 
   11515 9.17.5 Syntax for the i960
   11516 --------------------------
   11517 
   11518 * Menu:
   11519 
   11520 * i960-Chars::                Special Characters
   11521 
   11522 
   11523 File: as.info,  Node: i960-Chars,  Up: Syntax of i960
   11524 
   11525 9.17.5.1 Special Characters
   11526 ...........................
   11527 
   11528 The presence of a `#' on a line indicates the start of a comment that
   11529 extends to the end of the current line.
   11530 
   11531    If a `#' appears as the first character of a line, the whole line is
   11532 treated as a comment, but in this case the line can also be a logical
   11533 line number directive (*note Comments::) or a preprocessor control
   11534 command (*note Preprocessing::).
   11535 
   11536    The `;' character can be used to separate statements on the same
   11537 line.
   11538 
   11539 
   11540 File: as.info,  Node: IA-64-Dependent,  Next: IP2K-Dependent,  Prev: i960-Dependent,  Up: Machine Dependencies
   11541 
   11542 9.18 IA-64 Dependent Features
   11543 =============================
   11544 
   11545 * Menu:
   11546 
   11547 * IA-64 Options::              Options
   11548 * IA-64 Syntax::               Syntax
   11549 * IA-64 Opcodes::              Opcodes
   11550 
   11551 
   11552 File: as.info,  Node: IA-64 Options,  Next: IA-64 Syntax,  Up: IA-64-Dependent
   11553 
   11554 9.18.1 Options
   11555 --------------
   11556 
   11557 `-mconstant-gp'
   11558      This option instructs the assembler to mark the resulting object
   11559      file as using the "constant GP" model.  With this model, it is
   11560      assumed that the entire program uses a single global pointer (GP)
   11561      value.  Note that this option does not in any fashion affect the
   11562      machine code emitted by the assembler.  All it does is turn on the
   11563      EF_IA_64_CONS_GP flag in the ELF file header.
   11564 
   11565 `-mauto-pic'
   11566      This option instructs the assembler to mark the resulting object
   11567      file as using the "constant GP without function descriptor" data
   11568      model.  This model is like the "constant GP" model, except that it
   11569      additionally does away with function descriptors.  What this means
   11570      is that the address of a function refers directly to the
   11571      function's code entry-point.  Normally, such an address would
   11572      refer to a function descriptor, which contains both the code
   11573      entry-point and the GP-value needed by the function.  Note that
   11574      this option does not in any fashion affect the machine code
   11575      emitted by the assembler.  All it does is turn on the
   11576      EF_IA_64_NOFUNCDESC_CONS_GP flag in the ELF file header.
   11577 
   11578 `-milp32'
   11579 `-milp64'
   11580 `-mlp64'
   11581 `-mp64'
   11582      These options select the data model.  The assembler defaults to
   11583      `-mlp64' (LP64 data model).
   11584 
   11585 `-mle'
   11586 `-mbe'
   11587      These options select the byte order.  The `-mle' option selects
   11588      little-endian byte order (default) and `-mbe' selects big-endian
   11589      byte order.  Note that IA-64 machine code always uses
   11590      little-endian byte order.
   11591 
   11592 `-mtune=itanium1'
   11593 `-mtune=itanium2'
   11594      Tune for a particular IA-64 CPU, ITANIUM1 or ITANIUM2. The default
   11595      is ITANIUM2.
   11596 
   11597 `-munwind-check=warning'
   11598 `-munwind-check=error'
   11599      These options control what the assembler will do when performing
   11600      consistency checks on unwind directives.  `-munwind-check=warning'
   11601      will make the assembler issue a warning when an unwind directive
   11602      check fails.  This is the default.  `-munwind-check=error' will
   11603      make the assembler issue an error when an unwind directive check
   11604      fails.
   11605 
   11606 `-mhint.b=ok'
   11607 `-mhint.b=warning'
   11608 `-mhint.b=error'
   11609      These options control what the assembler will do when the `hint.b'
   11610      instruction is used.  `-mhint.b=ok' will make the assembler accept
   11611      `hint.b'.  `-mint.b=warning' will make the assembler issue a
   11612      warning when `hint.b' is used.  `-mhint.b=error' will make the
   11613      assembler treat `hint.b' as an error, which is the default.
   11614 
   11615 `-x'
   11616 `-xexplicit'
   11617      These options turn on dependency violation checking.
   11618 
   11619 `-xauto'
   11620      This option instructs the assembler to automatically insert stop
   11621      bits where necessary to remove dependency violations.  This is the
   11622      default mode.
   11623 
   11624 `-xnone'
   11625      This option turns off dependency violation checking.
   11626 
   11627 `-xdebug'
   11628      This turns on debug output intended to help tracking down bugs in
   11629      the dependency violation checker.
   11630 
   11631 `-xdebugn'
   11632      This is a shortcut for -xnone -xdebug.
   11633 
   11634 `-xdebugx'
   11635      This is a shortcut for -xexplicit -xdebug.
   11636 
   11637 
   11638 
   11639 File: as.info,  Node: IA-64 Syntax,  Next: IA-64 Opcodes,  Prev: IA-64 Options,  Up: IA-64-Dependent
   11640 
   11641 9.18.2 Syntax
   11642 -------------
   11643 
   11644 The assembler syntax closely follows the IA-64 Assembly Language
   11645 Reference Guide.
   11646 
   11647 * Menu:
   11648 
   11649 * IA-64-Chars::                Special Characters
   11650 * IA-64-Regs::                 Register Names
   11651 * IA-64-Bits::                 Bit Names
   11652 * IA-64-Relocs::               Relocations
   11653 
   11654 
   11655 File: as.info,  Node: IA-64-Chars,  Next: IA-64-Regs,  Up: IA-64 Syntax
   11656 
   11657 9.18.2.1 Special Characters
   11658 ...........................
   11659 
   11660 `//' is the line comment token.
   11661 
   11662    `;' can be used instead of a newline to separate statements.
   11663 
   11664 
   11665 File: as.info,  Node: IA-64-Regs,  Next: IA-64-Bits,  Prev: IA-64-Chars,  Up: IA-64 Syntax
   11666 
   11667 9.18.2.2 Register Names
   11668 .......................
   11669 
   11670 The 128 integer registers are referred to as `rN'.  The 128
   11671 floating-point registers are referred to as `fN'.  The 128 application
   11672 registers are referred to as `arN'.  The 128 control registers are
   11673 referred to as `crN'.  The 64 one-bit predicate registers are referred
   11674 to as `pN'.  The 8 branch registers are referred to as `bN'.  In
   11675 addition, the assembler defines a number of aliases: `gp' (`r1'), `sp'
   11676 (`r12'), `rp' (`b0'), `ret0' (`r8'), `ret1' (`r9'), `ret2' (`r10'),
   11677 `ret3' (`r9'), `fargN' (`f8+N'), and `fretN' (`f8+N').
   11678 
   11679    For convenience, the assembler also defines aliases for all named
   11680 application and control registers.  For example, `ar.bsp' refers to the
   11681 register backing store pointer (`ar17').  Similarly, `cr.eoi' refers to
   11682 the end-of-interrupt register (`cr67').
   11683 
   11684 
   11685 File: as.info,  Node: IA-64-Bits,  Next: IA-64-Relocs,  Prev: IA-64-Regs,  Up: IA-64 Syntax
   11686 
   11687 9.18.2.3 IA-64 Processor-Status-Register (PSR) Bit Names
   11688 ........................................................
   11689 
   11690 The assembler defines bit masks for each of the bits in the IA-64
   11691 processor status register.  For example, `psr.ic' corresponds to a
   11692 value of 0x2000.  These masks are primarily intended for use with the
   11693 `ssm'/`sum' and `rsm'/`rum' instructions, but they can be used anywhere
   11694 else where an integer constant is expected.
   11695 
   11696 
   11697 File: as.info,  Node: IA-64-Relocs,  Prev: IA-64-Bits,  Up: IA-64 Syntax
   11698 
   11699 9.18.2.4 Relocations
   11700 ....................
   11701 
   11702 In addition to the standard IA-64 relocations, the following
   11703 relocations are implemented by `as':
   11704 
   11705 `@slotcount(V)'
   11706      Convert the address offset V into a slot count.  This pseudo
   11707      function is available only on VMS.  The expression V must be known
   11708      at assembly time: it can't reference undefined symbols or symbols
   11709      in different sections.
   11710 
   11711 
   11712 File: as.info,  Node: IA-64 Opcodes,  Prev: IA-64 Syntax,  Up: IA-64-Dependent
   11713 
   11714 9.18.3 Opcodes
   11715 --------------
   11716 
   11717 For detailed information on the IA-64 machine instruction set, see the
   11718 IA-64 Architecture Handbook
   11719 (http://developer.intel.com/design/itanium/arch_spec.htm).
   11720 
   11721 
   11722 File: as.info,  Node: IP2K-Dependent,  Next: LM32-Dependent,  Prev: IA-64-Dependent,  Up: Machine Dependencies
   11723 
   11724 9.19 IP2K Dependent Features
   11725 ============================
   11726 
   11727 * Menu:
   11728 
   11729 * IP2K-Opts::                   IP2K Options
   11730 * IP2K-Syntax::                 IP2K Syntax
   11731 
   11732 
   11733 File: as.info,  Node: IP2K-Opts,  Next: IP2K-Syntax,  Up: IP2K-Dependent
   11734 
   11735 9.19.1 IP2K Options
   11736 -------------------
   11737 
   11738 The Ubicom IP2K version of `as' has a few machine dependent options:
   11739 
   11740 `-mip2022ext'
   11741      `as' can assemble the extended IP2022 instructions, but it will
   11742      only do so if this is specifically allowed via this command line
   11743      option.
   11744 
   11745 `-mip2022'
   11746      This option restores the assembler's default behaviour of not
   11747      permitting the extended IP2022 instructions to be assembled.
   11748 
   11749 
   11750 
   11751 File: as.info,  Node: IP2K-Syntax,  Prev: IP2K-Opts,  Up: IP2K-Dependent
   11752 
   11753 9.19.2 IP2K Syntax
   11754 ------------------
   11755 
   11756 * Menu:
   11757 
   11758 * IP2K-Chars::                Special Characters
   11759 
   11760 
   11761 File: as.info,  Node: IP2K-Chars,  Up: IP2K-Syntax
   11762 
   11763 9.19.2.1 Special Characters
   11764 ...........................
   11765 
   11766 The presence of a `;' on a line indicates the start of a comment that
   11767 extends to the end of the current line.
   11768 
   11769    If a `#' appears as the first character of a line, the whole line is
   11770 treated as a comment, but in this case the line can also be a logical
   11771 line number directive (*note Comments::) or a preprocessor control
   11772 command (*note Preprocessing::).
   11773 
   11774    The IP2K assembler does not currently support a line separator
   11775 character.
   11776 
   11777 
   11778 File: as.info,  Node: LM32-Dependent,  Next: M32C-Dependent,  Prev: IP2K-Dependent,  Up: Machine Dependencies
   11779 
   11780 9.20 LM32 Dependent Features
   11781 ============================
   11782 
   11783 * Menu:
   11784 
   11785 * LM32 Options::              Options
   11786 * LM32 Syntax::               Syntax
   11787 * LM32 Opcodes::              Opcodes
   11788 
   11789 
   11790 File: as.info,  Node: LM32 Options,  Next: LM32 Syntax,  Up: LM32-Dependent
   11791 
   11792 9.20.1 Options
   11793 --------------
   11794 
   11795 `-mmultiply-enabled'
   11796      Enable multiply instructions.
   11797 
   11798 `-mdivide-enabled'
   11799      Enable divide instructions.
   11800 
   11801 `-mbarrel-shift-enabled'
   11802      Enable barrel-shift instructions.
   11803 
   11804 `-msign-extend-enabled'
   11805      Enable sign extend instructions.
   11806 
   11807 `-muser-enabled'
   11808      Enable user defined instructions.
   11809 
   11810 `-micache-enabled'
   11811      Enable instruction cache related CSRs.
   11812 
   11813 `-mdcache-enabled'
   11814      Enable data cache related CSRs.
   11815 
   11816 `-mbreak-enabled'
   11817      Enable break instructions.
   11818 
   11819 `-mall-enabled'
   11820      Enable all instructions and CSRs.
   11821 
   11822 
   11823 
   11824 File: as.info,  Node: LM32 Syntax,  Next: LM32 Opcodes,  Prev: LM32 Options,  Up: LM32-Dependent
   11825 
   11826 9.20.2 Syntax
   11827 -------------
   11828 
   11829 * Menu:
   11830 
   11831 * LM32-Regs::                 Register Names
   11832 * LM32-Modifiers::            Relocatable Expression Modifiers
   11833 * LM32-Chars::                Special Characters
   11834 
   11835 
   11836 File: as.info,  Node: LM32-Regs,  Next: LM32-Modifiers,  Up: LM32 Syntax
   11837 
   11838 9.20.2.1 Register Names
   11839 .......................
   11840 
   11841 LM32 has 32 x 32-bit general purpose registers `r0', `r1', ... `r31'.
   11842 
   11843    The following aliases are defined: `gp' - `r26', `fp' - `r27', `sp'
   11844 - `r28', `ra' - `r29', `ea' - `r30', `ba' - `r31'.
   11845 
   11846    LM32 has the following Control and Status Registers (CSRs).
   11847 
   11848 `IE'
   11849      Interrupt enable.
   11850 
   11851 `IM'
   11852      Interrupt mask.
   11853 
   11854 `IP'
   11855      Interrupt pending.
   11856 
   11857 `ICC'
   11858      Instruction cache control.
   11859 
   11860 `DCC'
   11861      Data cache control.
   11862 
   11863 `CC'
   11864      Cycle counter.
   11865 
   11866 `CFG'
   11867      Configuration.
   11868 
   11869 `EBA'
   11870      Exception base address.
   11871 
   11872 `DC'
   11873      Debug control.
   11874 
   11875 `DEBA'
   11876      Debug exception base address.
   11877 
   11878 `JTX'
   11879      JTAG transmit.
   11880 
   11881 `JRX'
   11882      JTAG receive.
   11883 
   11884 `BP0'
   11885      Breakpoint 0.
   11886 
   11887 `BP1'
   11888      Breakpoint 1.
   11889 
   11890 `BP2'
   11891      Breakpoint 2.
   11892 
   11893 `BP3'
   11894      Breakpoint 3.
   11895 
   11896 `WP0'
   11897      Watchpoint 0.
   11898 
   11899 `WP1'
   11900      Watchpoint 1.
   11901 
   11902 `WP2'
   11903      Watchpoint 2.
   11904 
   11905 `WP3'
   11906      Watchpoint 3.
   11907 
   11908 
   11909 File: as.info,  Node: LM32-Modifiers,  Next: LM32-Chars,  Prev: LM32-Regs,  Up: LM32 Syntax
   11910 
   11911 9.20.2.2 Relocatable Expression Modifiers
   11912 .........................................
   11913 
   11914 The assembler supports several modifiers when using relocatable
   11915 addresses in LM32 instruction operands.  The general syntax is the
   11916 following:
   11917 
   11918      modifier(relocatable-expression)
   11919 
   11920 `lo'
   11921      This modifier allows you to use bits 0 through 15 of an address
   11922      expression as 16 bit relocatable expression.
   11923 
   11924 `hi'
   11925      This modifier allows you to use bits 16 through 23 of an address
   11926      expression as 16 bit relocatable expression.
   11927 
   11928      For example
   11929 
   11930           ori  r4, r4, lo(sym+10)
   11931           orhi r4, r4, hi(sym+10)
   11932 
   11933 `gp'
   11934      This modified creates a 16-bit relocatable expression that is the
   11935      offset of the symbol from the global pointer.
   11936 
   11937           mva r4, gp(sym)
   11938 
   11939 `got'
   11940      This modifier places a symbol in the GOT and creates a 16-bit
   11941      relocatable expression that is the offset into the GOT of this
   11942      symbol.
   11943 
   11944           lw r4, (gp+got(sym))
   11945 
   11946 `gotofflo16'
   11947      This modifier allows you to use the bits 0 through 15 of an
   11948      address which is an offset from the GOT.
   11949 
   11950 `gotoffhi16'
   11951      This modifier allows you to use the bits 16 through 31 of an
   11952      address which is an offset from the GOT.
   11953 
   11954           orhi r4, r4, gotoffhi16(lsym)
   11955           addi r4, r4, gotofflo16(lsym)
   11956 
   11957 
   11958 
   11959 File: as.info,  Node: LM32-Chars,  Prev: LM32-Modifiers,  Up: LM32 Syntax
   11960 
   11961 9.20.2.3 Special Characters
   11962 ...........................
   11963 
   11964 The presence of a `#' on a line indicates the start of a comment that
   11965 extends to the end of the current line.  Note that if a line starts
   11966 with a `#' character then it can also be a logical line number
   11967 directive (*note Comments::) or a preprocessor control command (*note
   11968 Preprocessing::).
   11969 
   11970    A semicolon (`;') can be used to separate multiple statements on the
   11971 same line.
   11972 
   11973 
   11974 File: as.info,  Node: LM32 Opcodes,  Prev: LM32 Syntax,  Up: LM32-Dependent
   11975 
   11976 9.20.3 Opcodes
   11977 --------------
   11978 
   11979 For detailed information on the LM32 machine instruction set, see
   11980 `http://www.latticesemi.com/products/intellectualproperty/ipcores/mico32/'.
   11981 
   11982    `as' implements all the standard LM32 opcodes.
   11983 
   11984 
   11985 File: as.info,  Node: M32C-Dependent,  Next: M32R-Dependent,  Prev: LM32-Dependent,  Up: Machine Dependencies
   11986 
   11987 9.21 M32C Dependent Features
   11988 ============================
   11989 
   11990    `as' can assemble code for several different members of the Renesas
   11991 M32C family.  Normally the default is to assemble code for the M16C
   11992 microprocessor.  The `-m32c' option may be used to change the default
   11993 to the M32C microprocessor.
   11994 
   11995 * Menu:
   11996 
   11997 * M32C-Opts::                   M32C Options
   11998 * M32C-Syntax::                 M32C Syntax
   11999 
   12000 
   12001 File: as.info,  Node: M32C-Opts,  Next: M32C-Syntax,  Up: M32C-Dependent
   12002 
   12003 9.21.1 M32C Options
   12004 -------------------
   12005 
   12006 The Renesas M32C version of `as' has these machine-dependent options:
   12007 
   12008 `-m32c'
   12009      Assemble M32C instructions.
   12010 
   12011 `-m16c'
   12012      Assemble M16C instructions (default).
   12013 
   12014 `-relax'
   12015      Enable support for link-time relaxations.
   12016 
   12017 `-h-tick-hex'
   12018      Support H'00 style hex constants in addition to 0x00 style.
   12019 
   12020 
   12021 
   12022 File: as.info,  Node: M32C-Syntax,  Prev: M32C-Opts,  Up: M32C-Dependent
   12023 
   12024 9.21.2 M32C Syntax
   12025 ------------------
   12026 
   12027 * Menu:
   12028 
   12029 * M32C-Modifiers::              Symbolic Operand Modifiers
   12030 * M32C-Chars::                  Special Characters
   12031 
   12032 
   12033 File: as.info,  Node: M32C-Modifiers,  Next: M32C-Chars,  Up: M32C-Syntax
   12034 
   12035 9.21.2.1 Symbolic Operand Modifiers
   12036 ...................................
   12037 
   12038 The assembler supports several modifiers when using symbol addresses in
   12039 M32C instruction operands.  The general syntax is the following:
   12040 
   12041      %modifier(symbol)
   12042 
   12043 `%dsp8'
   12044 `%dsp16'
   12045      These modifiers override the assembler's assumptions about how big
   12046      a symbol's address is.  Normally, when it sees an operand like
   12047      `sym[a0]' it assumes `sym' may require the widest displacement
   12048      field (16 bits for `-m16c', 24 bits for `-m32c').  These modifiers
   12049      tell it to assume the address will fit in an 8 or 16 bit
   12050      (respectively) unsigned displacement.  Note that, of course, if it
   12051      doesn't actually fit you will get linker errors.  Example:
   12052 
   12053           mov.w %dsp8(sym)[a0],r1
   12054           mov.b #0,%dsp8(sym)[a0]
   12055 
   12056 `%hi8'
   12057      This modifier allows you to load bits 16 through 23 of a 24 bit
   12058      address into an 8 bit register.  This is useful with, for example,
   12059      the M16C `smovf' instruction, which expects a 20 bit address in
   12060      `r1h' and `a0'.  Example:
   12061 
   12062           mov.b #%hi8(sym),r1h
   12063           mov.w #%lo16(sym),a0
   12064           smovf.b
   12065 
   12066 `%lo16'
   12067      Likewise, this modifier allows you to load bits 0 through 15 of a
   12068      24 bit address into a 16 bit register.
   12069 
   12070 `%hi16'
   12071      This modifier allows you to load bits 16 through 31 of a 32 bit
   12072      address into a 16 bit register.  While the M32C family only has 24
   12073      bits of address space, it does support addresses in pairs of 16 bit
   12074      registers (like `a1a0' for the `lde' instruction).  This modifier
   12075      is for loading the upper half in such cases.  Example:
   12076 
   12077           mov.w #%hi16(sym),a1
   12078           mov.w #%lo16(sym),a0
   12079           ...
   12080           lde.w [a1a0],r1
   12081 
   12082 
   12083 
   12084 File: as.info,  Node: M32C-Chars,  Prev: M32C-Modifiers,  Up: M32C-Syntax
   12085 
   12086 9.21.2.2 Special Characters
   12087 ...........................
   12088 
   12089 The presence of a `;' character on a line indicates the start of a
   12090 comment that extends to the end of that line.
   12091 
   12092    If a `#' appears as the first character of a line, the whole line is
   12093 treated as a comment, but in this case the line can also be a logical
   12094 line number directive (*note Comments::) or a preprocessor control
   12095 command (*note Preprocessing::).
   12096 
   12097    The `|' character can be used to separate statements on the same
   12098 line.
   12099 
   12100 
   12101 File: as.info,  Node: M32R-Dependent,  Next: M68K-Dependent,  Prev: M32C-Dependent,  Up: Machine Dependencies
   12102 
   12103 9.22 M32R Dependent Features
   12104 ============================
   12105 
   12106 * Menu:
   12107 
   12108 * M32R-Opts::                   M32R Options
   12109 * M32R-Directives::             M32R Directives
   12110 * M32R-Warnings::               M32R Warnings
   12111 
   12112 
   12113 File: as.info,  Node: M32R-Opts,  Next: M32R-Directives,  Up: M32R-Dependent
   12114 
   12115 9.22.1 M32R Options
   12116 -------------------
   12117 
   12118 The Renease M32R version of `as' has a few machine dependent options:
   12119 
   12120 `-m32rx'
   12121      `as' can assemble code for several different members of the
   12122      Renesas M32R family.  Normally the default is to assemble code for
   12123      the M32R microprocessor.  This option may be used to change the
   12124      default to the M32RX microprocessor, which adds some more
   12125      instructions to the basic M32R instruction set, and some
   12126      additional parameters to some of the original instructions.
   12127 
   12128 `-m32r2'
   12129      This option changes the target processor to the M32R2
   12130      microprocessor.
   12131 
   12132 `-m32r'
   12133      This option can be used to restore the assembler's default
   12134      behaviour of assembling for the M32R microprocessor.  This can be
   12135      useful if the default has been changed by a previous command line
   12136      option.
   12137 
   12138 `-little'
   12139      This option tells the assembler to produce little-endian code and
   12140      data.  The default is dependent upon how the toolchain was
   12141      configured.
   12142 
   12143 `-EL'
   12144      This is a synonym for _-little_.
   12145 
   12146 `-big'
   12147      This option tells the assembler to produce big-endian code and
   12148      data.
   12149 
   12150 `-EB'
   12151      This is a synonum for _-big_.
   12152 
   12153 `-KPIC'
   12154      This option specifies that the output of the assembler should be
   12155      marked as position-independent code (PIC).
   12156 
   12157 `-parallel'
   12158      This option tells the assembler to attempts to combine two
   12159      sequential instructions into a single, parallel instruction, where
   12160      it is legal to do so.
   12161 
   12162 `-no-parallel'
   12163      This option disables a previously enabled _-parallel_ option.
   12164 
   12165 `-no-bitinst'
   12166      This option disables the support for the extended bit-field
   12167      instructions provided by the M32R2.  If this support needs to be
   12168      re-enabled the _-bitinst_ switch can be used to restore it.
   12169 
   12170 `-O'
   12171      This option tells the assembler to attempt to optimize the
   12172      instructions that it produces.  This includes filling delay slots
   12173      and converting sequential instructions into parallel ones.  This
   12174      option implies _-parallel_.
   12175 
   12176 `-warn-explicit-parallel-conflicts'
   12177      Instructs `as' to produce warning messages when questionable
   12178      parallel instructions are encountered.  This option is enabled by
   12179      default, but `gcc' disables it when it invokes `as' directly.
   12180      Questionable instructions are those whose behaviour would be
   12181      different if they were executed sequentially.  For example the
   12182      code fragment `mv r1, r2 || mv r3, r1' produces a different result
   12183      from `mv r1, r2 \n mv r3, r1' since the former moves r1 into r3
   12184      and then r2 into r1, whereas the later moves r2 into r1 and r3.
   12185 
   12186 `-Wp'
   12187      This is a shorter synonym for the
   12188      _-warn-explicit-parallel-conflicts_ option.
   12189 
   12190 `-no-warn-explicit-parallel-conflicts'
   12191      Instructs `as' not to produce warning messages when questionable
   12192      parallel instructions are encountered.
   12193 
   12194 `-Wnp'
   12195      This is a shorter synonym for the
   12196      _-no-warn-explicit-parallel-conflicts_ option.
   12197 
   12198 `-ignore-parallel-conflicts'
   12199      This option tells the assembler's to stop checking parallel
   12200      instructions for constraint violations.  This ability is provided
   12201      for hardware vendors testing chip designs and should not be used
   12202      under normal circumstances.
   12203 
   12204 `-no-ignore-parallel-conflicts'
   12205      This option restores the assembler's default behaviour of checking
   12206      parallel instructions to detect constraint violations.
   12207 
   12208 `-Ip'
   12209      This is a shorter synonym for the _-ignore-parallel-conflicts_
   12210      option.
   12211 
   12212 `-nIp'
   12213      This is a shorter synonym for the _-no-ignore-parallel-conflicts_
   12214      option.
   12215 
   12216 `-warn-unmatched-high'
   12217      This option tells the assembler to produce a warning message if a
   12218      `.high' pseudo op is encountered without a matching `.low' pseudo
   12219      op.  The presence of such an unmatched pseudo op usually indicates
   12220      a programming error.
   12221 
   12222 `-no-warn-unmatched-high'
   12223      Disables a previously enabled _-warn-unmatched-high_ option.
   12224 
   12225 `-Wuh'
   12226      This is a shorter synonym for the _-warn-unmatched-high_ option.
   12227 
   12228 `-Wnuh'
   12229      This is a shorter synonym for the _-no-warn-unmatched-high_ option.
   12230 
   12231 
   12232 
   12233 File: as.info,  Node: M32R-Directives,  Next: M32R-Warnings,  Prev: M32R-Opts,  Up: M32R-Dependent
   12234 
   12235 9.22.2 M32R Directives
   12236 ----------------------
   12237 
   12238 The Renease M32R version of `as' has a few architecture specific
   12239 directives:
   12240 
   12241 `low EXPRESSION'
   12242      The `low' directive computes the value of its expression and
   12243      places the lower 16-bits of the result into the immediate-field of
   12244      the instruction.  For example:
   12245 
   12246              or3   r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678
   12247              add3, r0, r0, #low(fred)   ; compute r0 = r0 + low 16-bits of address of fred
   12248 
   12249 `high EXPRESSION'
   12250      The `high' directive computes the value of its expression and
   12251      places the upper 16-bits of the result into the immediate-field of
   12252      the instruction.  For example:
   12253 
   12254              seth  r0, #high(0x12345678) ; compute r0 = 0x12340000
   12255              seth, r0, #high(fred)       ; compute r0 = upper 16-bits of address of fred
   12256 
   12257 `shigh EXPRESSION'
   12258      The `shigh' directive is very similar to the `high' directive.  It
   12259      also computes the value of its expression and places the upper
   12260      16-bits of the result into the immediate-field of the instruction.
   12261      The difference is that `shigh' also checks to see if the lower
   12262      16-bits could be interpreted as a signed number, and if so it
   12263      assumes that a borrow will occur from the upper-16 bits.  To
   12264      compensate for this the `shigh' directive pre-biases the upper 16
   12265      bit value by adding one to it.  For example:
   12266 
   12267      For example:
   12268 
   12269              seth  r0, #shigh(0x12345678) ; compute r0 = 0x12340000
   12270              seth  r0, #shigh(0x00008000) ; compute r0 = 0x00010000
   12271 
   12272      In the second example the lower 16-bits are 0x8000.  If these are
   12273      treated as a signed value and sign extended to 32-bits then the
   12274      value becomes 0xffff8000.  If this value is then added to
   12275      0x00010000 then the result is 0x00008000.
   12276 
   12277      This behaviour is to allow for the different semantics of the
   12278      `or3' and `add3' instructions.  The `or3' instruction treats its
   12279      16-bit immediate argument as unsigned whereas the `add3' treats
   12280      its 16-bit immediate as a signed value.  So for example:
   12281 
   12282              seth  r0, #shigh(0x00008000)
   12283              add3  r0, r0, #low(0x00008000)
   12284 
   12285      Produces the correct result in r0, whereas:
   12286 
   12287              seth  r0, #shigh(0x00008000)
   12288              or3   r0, r0, #low(0x00008000)
   12289 
   12290      Stores 0xffff8000 into r0.
   12291 
   12292      Note - the `shigh' directive does not know where in the assembly
   12293      source code the lower 16-bits of the value are going set, so it
   12294      cannot check to make sure that an `or3' instruction is being used
   12295      rather than an `add3' instruction.  It is up to the programmer to
   12296      make sure that correct directives are used.
   12297 
   12298 `.m32r'
   12299      The directive performs a similar thing as the _-m32r_ command line
   12300      option.  It tells the assembler to only accept M32R instructions
   12301      from now on.  An instructions from later M32R architectures are
   12302      refused.
   12303 
   12304 `.m32rx'
   12305      The directive performs a similar thing as the _-m32rx_ command
   12306      line option.  It tells the assembler to start accepting the extra
   12307      instructions in the M32RX ISA as well as the ordinary M32R ISA.
   12308 
   12309 `.m32r2'
   12310      The directive performs a similar thing as the _-m32r2_ command
   12311      line option.  It tells the assembler to start accepting the extra
   12312      instructions in the M32R2 ISA as well as the ordinary M32R ISA.
   12313 
   12314 `.little'
   12315      The directive performs a similar thing as the _-little_ command
   12316      line option.  It tells the assembler to start producing
   12317      little-endian code and data.  This option should be used with care
   12318      as producing mixed-endian binary files is fraught with danger.
   12319 
   12320 `.big'
   12321      The directive performs a similar thing as the _-big_ command line
   12322      option.  It tells the assembler to start producing big-endian code
   12323      and data.  This option should be used with care as producing
   12324      mixed-endian binary files is fraught with danger.
   12325 
   12326 
   12327 
   12328 File: as.info,  Node: M32R-Warnings,  Prev: M32R-Directives,  Up: M32R-Dependent
   12329 
   12330 9.22.3 M32R Warnings
   12331 --------------------
   12332 
   12333 There are several warning and error messages that can be produced by
   12334 `as' which are specific to the M32R:
   12335 
   12336 `output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?'
   12337      This message is only produced if warnings for explicit parallel
   12338      conflicts have been enabled.  It indicates that the assembler has
   12339      encountered a parallel instruction in which the destination
   12340      register of the left hand instruction is used as an input register
   12341      in the right hand instruction.  For example in this code fragment
   12342      `mv r1, r2 || neg r3, r1' register r1 is the destination of the
   12343      move instruction and the input to the neg instruction.
   12344 
   12345 `output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?'
   12346      This message is only produced if warnings for explicit parallel
   12347      conflicts have been enabled.  It indicates that the assembler has
   12348      encountered a parallel instruction in which the destination
   12349      register of the right hand instruction is used as an input
   12350      register in the left hand instruction.  For example in this code
   12351      fragment `mv r1, r2 || neg r2, r3' register r2 is the destination
   12352      of the neg instruction and the input to the move instruction.
   12353 
   12354 `instruction `...' is for the M32RX only'
   12355      This message is produced when the assembler encounters an
   12356      instruction which is only supported by the M32Rx processor, and
   12357      the `-m32rx' command line flag has not been specified to allow
   12358      assembly of such instructions.
   12359 
   12360 `unknown instruction `...''
   12361      This message is produced when the assembler encounters an
   12362      instruction which it does not recognize.
   12363 
   12364 `only the NOP instruction can be issued in parallel on the m32r'
   12365      This message is produced when the assembler encounters a parallel
   12366      instruction which does not involve a NOP instruction and the
   12367      `-m32rx' command line flag has not been specified.  Only the M32Rx
   12368      processor is able to execute two instructions in parallel.
   12369 
   12370 `instruction `...' cannot be executed in parallel.'
   12371      This message is produced when the assembler encounters a parallel
   12372      instruction which is made up of one or two instructions which
   12373      cannot be executed in parallel.
   12374 
   12375 `Instructions share the same execution pipeline'
   12376      This message is produced when the assembler encounters a parallel
   12377      instruction whoes components both use the same execution pipeline.
   12378 
   12379 `Instructions write to the same destination register.'
   12380      This message is produced when the assembler encounters a parallel
   12381      instruction where both components attempt to modify the same
   12382      register.  For example these code fragments will produce this
   12383      message: `mv r1, r2 || neg r1, r3' `jl r0 || mv r14, r1' `st r2,
   12384      @-r1 || mv r1, r3' `mv r1, r2 || ld r0, @r1+' `cmp r1, r2 || addx
   12385      r3, r4' (Both write to the condition bit)
   12386 
   12387 
   12388 
   12389 File: as.info,  Node: M68K-Dependent,  Next: M68HC11-Dependent,  Prev: M32R-Dependent,  Up: Machine Dependencies
   12390 
   12391 9.23 M680x0 Dependent Features
   12392 ==============================
   12393 
   12394 * Menu:
   12395 
   12396 * M68K-Opts::                   M680x0 Options
   12397 * M68K-Syntax::                 Syntax
   12398 * M68K-Moto-Syntax::            Motorola Syntax
   12399 * M68K-Float::                  Floating Point
   12400 * M68K-Directives::             680x0 Machine Directives
   12401 * M68K-opcodes::                Opcodes
   12402 
   12403 
   12404 File: as.info,  Node: M68K-Opts,  Next: M68K-Syntax,  Up: M68K-Dependent
   12405 
   12406 9.23.1 M680x0 Options
   12407 ---------------------
   12408 
   12409 The Motorola 680x0 version of `as' has a few machine dependent options:
   12410 
   12411 `-march=ARCHITECTURE'
   12412      This option specifies a target architecture.  The following
   12413      architectures are recognized: `68000', `68010', `68020', `68030',
   12414      `68040', `68060', `cpu32', `isaa', `isaaplus', `isab', `isac' and
   12415      `cfv4e'.
   12416 
   12417 `-mcpu=CPU'
   12418      This option specifies a target cpu.  When used in conjunction with
   12419      the `-march' option, the cpu must be within the specified
   12420      architecture.  Also, the generic features of the architecture are
   12421      used for instruction generation, rather than those of the specific
   12422      chip.
   12423 
   12424 `-m[no-]68851'
   12425 `-m[no-]68881'
   12426 `-m[no-]div'
   12427 `-m[no-]usp'
   12428 `-m[no-]float'
   12429 `-m[no-]mac'
   12430 `-m[no-]emac'
   12431      Enable or disable various architecture specific features.  If a
   12432      chip or architecture by default supports an option (for instance
   12433      `-march=isaaplus' includes the `-mdiv' option), explicitly
   12434      disabling the option will override the default.
   12435 
   12436 `-l'
   12437      You can use the `-l' option to shorten the size of references to
   12438      undefined symbols.  If you do not use the `-l' option, references
   12439      to undefined symbols are wide enough for a full `long' (32 bits).
   12440      (Since `as' cannot know where these symbols end up, `as' can only
   12441      allocate space for the linker to fill in later.  Since `as' does
   12442      not know how far away these symbols are, it allocates as much
   12443      space as it can.)  If you use this option, the references are only
   12444      one word wide (16 bits).  This may be useful if you want the
   12445      object file to be as small as possible, and you know that the
   12446      relevant symbols are always less than 17 bits away.
   12447 
   12448 `--register-prefix-optional'
   12449      For some configurations, especially those where the compiler
   12450      normally does not prepend an underscore to the names of user
   12451      variables, the assembler requires a `%' before any use of a
   12452      register name.  This is intended to let the assembler distinguish
   12453      between C variables and functions named `a0' through `a7', and so
   12454      on.  The `%' is always accepted, but is not required for certain
   12455      configurations, notably `sun3'.  The `--register-prefix-optional'
   12456      option may be used to permit omitting the `%' even for
   12457      configurations for which it is normally required.  If this is
   12458      done, it will generally be impossible to refer to C variables and
   12459      functions with the same names as register names.
   12460 
   12461 `--bitwise-or'
   12462      Normally the character `|' is treated as a comment character, which
   12463      means that it can not be used in expressions.  The `--bitwise-or'
   12464      option turns `|' into a normal character.  In this mode, you must
   12465      either use C style comments, or start comments with a `#' character
   12466      at the beginning of a line.
   12467 
   12468 `--base-size-default-16  --base-size-default-32'
   12469      If you use an addressing mode with a base register without
   12470      specifying the size, `as' will normally use the full 32 bit value.
   12471      For example, the addressing mode `%a0@(%d0)' is equivalent to
   12472      `%a0@(%d0:l)'.  You may use the `--base-size-default-16' option to
   12473      tell `as' to default to using the 16 bit value.  In this case,
   12474      `%a0@(%d0)' is equivalent to `%a0@(%d0:w)'.  You may use the
   12475      `--base-size-default-32' option to restore the default behaviour.
   12476 
   12477 `--disp-size-default-16  --disp-size-default-32'
   12478      If you use an addressing mode with a displacement, and the value
   12479      of the displacement is not known, `as' will normally assume that
   12480      the value is 32 bits.  For example, if the symbol `disp' has not
   12481      been defined, `as' will assemble the addressing mode
   12482      `%a0@(disp,%d0)' as though `disp' is a 32 bit value.  You may use
   12483      the `--disp-size-default-16' option to tell `as' to instead assume
   12484      that the displacement is 16 bits.  In this case, `as' will
   12485      assemble `%a0@(disp,%d0)' as though `disp' is a 16 bit value.  You
   12486      may use the `--disp-size-default-32' option to restore the default
   12487      behaviour.
   12488 
   12489 `--pcrel'
   12490      Always keep branches PC-relative.  In the M680x0 architecture all
   12491      branches are defined as PC-relative.  However, on some processors
   12492      they are limited to word displacements maximum.  When `as' needs a
   12493      long branch that is not available, it normally emits an absolute
   12494      jump instead.  This option disables this substitution.  When this
   12495      option is given and no long branches are available, only word
   12496      branches will be emitted.  An error message will be generated if a
   12497      word branch cannot reach its target.  This option has no effect on
   12498      68020 and other processors that have long branches.  *note Branch
   12499      Improvement: M68K-Branch.
   12500 
   12501 `-m68000'
   12502      `as' can assemble code for several different members of the
   12503      Motorola 680x0 family.  The default depends upon how `as' was
   12504      configured when it was built; normally, the default is to assemble
   12505      code for the 68020 microprocessor.  The following options may be
   12506      used to change the default.  These options control which
   12507      instructions and addressing modes are permitted.  The members of
   12508      the 680x0 family are very similar.  For detailed information about
   12509      the differences, see the Motorola manuals.
   12510 
   12511     `-m68000'
   12512     `-m68ec000'
   12513     `-m68hc000'
   12514     `-m68hc001'
   12515     `-m68008'
   12516     `-m68302'
   12517     `-m68306'
   12518     `-m68307'
   12519     `-m68322'
   12520     `-m68356'
   12521           Assemble for the 68000. `-m68008', `-m68302', and so on are
   12522           synonyms for `-m68000', since the chips are the same from the
   12523           point of view of the assembler.
   12524 
   12525     `-m68010'
   12526           Assemble for the 68010.
   12527 
   12528     `-m68020'
   12529     `-m68ec020'
   12530           Assemble for the 68020.  This is normally the default.
   12531 
   12532     `-m68030'
   12533     `-m68ec030'
   12534           Assemble for the 68030.
   12535 
   12536     `-m68040'
   12537     `-m68ec040'
   12538           Assemble for the 68040.
   12539 
   12540     `-m68060'
   12541     `-m68ec060'
   12542           Assemble for the 68060.
   12543 
   12544     `-mcpu32'
   12545     `-m68330'
   12546     `-m68331'
   12547     `-m68332'
   12548     `-m68333'
   12549     `-m68334'
   12550     `-m68336'
   12551     `-m68340'
   12552     `-m68341'
   12553     `-m68349'
   12554     `-m68360'
   12555           Assemble for the CPU32 family of chips.
   12556 
   12557     `-m5200'
   12558     `-m5202'
   12559     `-m5204'
   12560     `-m5206'
   12561     `-m5206e'
   12562     `-m521x'
   12563     `-m5249'
   12564     `-m528x'
   12565     `-m5307'
   12566     `-m5407'
   12567     `-m547x'
   12568     `-m548x'
   12569     `-mcfv4'
   12570     `-mcfv4e'
   12571           Assemble for the ColdFire family of chips.
   12572 
   12573     `-m68881'
   12574     `-m68882'
   12575           Assemble 68881 floating point instructions.  This is the
   12576           default for the 68020, 68030, and the CPU32.  The 68040 and
   12577           68060 always support floating point instructions.
   12578 
   12579     `-mno-68881'
   12580           Do not assemble 68881 floating point instructions.  This is
   12581           the default for 68000 and the 68010.  The 68040 and 68060
   12582           always support floating point instructions, even if this
   12583           option is used.
   12584 
   12585     `-m68851'
   12586           Assemble 68851 MMU instructions.  This is the default for the
   12587           68020, 68030, and 68060.  The 68040 accepts a somewhat
   12588           different set of MMU instructions; `-m68851' and `-m68040'
   12589           should not be used together.
   12590 
   12591     `-mno-68851'
   12592           Do not assemble 68851 MMU instructions.  This is the default
   12593           for the 68000, 68010, and the CPU32.  The 68040 accepts a
   12594           somewhat different set of MMU instructions.
   12595 
   12596 
   12597 File: as.info,  Node: M68K-Syntax,  Next: M68K-Moto-Syntax,  Prev: M68K-Opts,  Up: M68K-Dependent
   12598 
   12599 9.23.2 Syntax
   12600 -------------
   12601 
   12602 This syntax for the Motorola 680x0 was developed at MIT.
   12603 
   12604    The 680x0 version of `as' uses instructions names and syntax
   12605 compatible with the Sun assembler.  Intervening periods are ignored;
   12606 for example, `movl' is equivalent to `mov.l'.
   12607 
   12608    In the following table APC stands for any of the address registers
   12609 (`%a0' through `%a7'), the program counter (`%pc'), the zero-address
   12610 relative to the program counter (`%zpc'), a suppressed address register
   12611 (`%za0' through `%za7'), or it may be omitted entirely.  The use of
   12612 SIZE means one of `w' or `l', and it may be omitted, along with the
   12613 leading colon, unless a scale is also specified.  The use of SCALE
   12614 means one of `1', `2', `4', or `8', and it may always be omitted along
   12615 with the leading colon.
   12616 
   12617    The following addressing modes are understood:
   12618 "Immediate"
   12619      `#NUMBER'
   12620 
   12621 "Data Register"
   12622      `%d0' through `%d7'
   12623 
   12624 "Address Register"
   12625      `%a0' through `%a7'
   12626      `%a7' is also known as `%sp', i.e., the Stack Pointer.  `%a6' is
   12627      also known as `%fp', the Frame Pointer.
   12628 
   12629 "Address Register Indirect"
   12630      `%a0@' through `%a7@'
   12631 
   12632 "Address Register Postincrement"
   12633      `%a0@+' through `%a7@+'
   12634 
   12635 "Address Register Predecrement"
   12636      `%a0@-' through `%a7@-'
   12637 
   12638 "Indirect Plus Offset"
   12639      `APC@(NUMBER)'
   12640 
   12641 "Index"
   12642      `APC@(NUMBER,REGISTER:SIZE:SCALE)'
   12643 
   12644      The NUMBER may be omitted.
   12645 
   12646 "Postindex"
   12647      `APC@(NUMBER)@(ONUMBER,REGISTER:SIZE:SCALE)'
   12648 
   12649      The ONUMBER or the REGISTER, but not both, may be omitted.
   12650 
   12651 "Preindex"
   12652      `APC@(NUMBER,REGISTER:SIZE:SCALE)@(ONUMBER)'
   12653 
   12654      The NUMBER may be omitted.  Omitting the REGISTER produces the
   12655      Postindex addressing mode.
   12656 
   12657 "Absolute"
   12658      `SYMBOL', or `DIGITS', optionally followed by `:b', `:w', or `:l'.
   12659 
   12660 
   12661 File: as.info,  Node: M68K-Moto-Syntax,  Next: M68K-Float,  Prev: M68K-Syntax,  Up: M68K-Dependent
   12662 
   12663 9.23.3 Motorola Syntax
   12664 ----------------------
   12665 
   12666 The standard Motorola syntax for this chip differs from the syntax
   12667 already discussed (*note Syntax: M68K-Syntax.).  `as' can accept
   12668 Motorola syntax for operands, even if MIT syntax is used for other
   12669 operands in the same instruction.  The two kinds of syntax are fully
   12670 compatible.
   12671 
   12672    In the following table APC stands for any of the address registers
   12673 (`%a0' through `%a7'), the program counter (`%pc'), the zero-address
   12674 relative to the program counter (`%zpc'), or a suppressed address
   12675 register (`%za0' through `%za7').  The use of SIZE means one of `w' or
   12676 `l', and it may always be omitted along with the leading dot.  The use
   12677 of SCALE means one of `1', `2', `4', or `8', and it may always be
   12678 omitted along with the leading asterisk.
   12679 
   12680    The following additional addressing modes are understood:
   12681 
   12682 "Address Register Indirect"
   12683      `(%a0)' through `(%a7)'
   12684      `%a7' is also known as `%sp', i.e., the Stack Pointer.  `%a6' is
   12685      also known as `%fp', the Frame Pointer.
   12686 
   12687 "Address Register Postincrement"
   12688      `(%a0)+' through `(%a7)+'
   12689 
   12690 "Address Register Predecrement"
   12691      `-(%a0)' through `-(%a7)'
   12692 
   12693 "Indirect Plus Offset"
   12694      `NUMBER(%A0)' through `NUMBER(%A7)', or `NUMBER(%PC)'.
   12695 
   12696      The NUMBER may also appear within the parentheses, as in
   12697      `(NUMBER,%A0)'.  When used with the PC, the NUMBER may be omitted
   12698      (with an address register, omitting the NUMBER produces Address
   12699      Register Indirect mode).
   12700 
   12701 "Index"
   12702      `NUMBER(APC,REGISTER.SIZE*SCALE)'
   12703 
   12704      The NUMBER may be omitted, or it may appear within the
   12705      parentheses.  The APC may be omitted.  The REGISTER and the APC
   12706      may appear in either order.  If both APC and REGISTER are address
   12707      registers, and the SIZE and SCALE are omitted, then the first
   12708      register is taken as the base register, and the second as the
   12709      index register.
   12710 
   12711 "Postindex"
   12712      `([NUMBER,APC],REGISTER.SIZE*SCALE,ONUMBER)'
   12713 
   12714      The ONUMBER, or the REGISTER, or both, may be omitted.  Either the
   12715      NUMBER or the APC may be omitted, but not both.
   12716 
   12717 "Preindex"
   12718      `([NUMBER,APC,REGISTER.SIZE*SCALE],ONUMBER)'
   12719 
   12720      The NUMBER, or the APC, or the REGISTER, or any two of them, may
   12721      be omitted.  The ONUMBER may be omitted.  The REGISTER and the APC
   12722      may appear in either order.  If both APC and REGISTER are address
   12723      registers, and the SIZE and SCALE are omitted, then the first
   12724      register is taken as the base register, and the second as the
   12725      index register.
   12726 
   12727 
   12728 File: as.info,  Node: M68K-Float,  Next: M68K-Directives,  Prev: M68K-Moto-Syntax,  Up: M68K-Dependent
   12729 
   12730 9.23.4 Floating Point
   12731 ---------------------
   12732 
   12733 Packed decimal (P) format floating literals are not supported.  Feel
   12734 free to add the code!
   12735 
   12736    The floating point formats generated by directives are these.
   12737 
   12738 `.float'
   12739      `Single' precision floating point constants.
   12740 
   12741 `.double'
   12742      `Double' precision floating point constants.
   12743 
   12744 `.extend'
   12745 `.ldouble'
   12746      `Extended' precision (`long double') floating point constants.
   12747 
   12748 
   12749 File: as.info,  Node: M68K-Directives,  Next: M68K-opcodes,  Prev: M68K-Float,  Up: M68K-Dependent
   12750 
   12751 9.23.5 680x0 Machine Directives
   12752 -------------------------------
   12753 
   12754 In order to be compatible with the Sun assembler the 680x0 assembler
   12755 understands the following directives.
   12756 
   12757 `.data1'
   12758      This directive is identical to a `.data 1' directive.
   12759 
   12760 `.data2'
   12761      This directive is identical to a `.data 2' directive.
   12762 
   12763 `.even'
   12764      This directive is a special case of the `.align' directive; it
   12765      aligns the output to an even byte boundary.
   12766 
   12767 `.skip'
   12768      This directive is identical to a `.space' directive.
   12769 
   12770 `.arch NAME'
   12771      Select the target architecture and extension features.  Valid
   12772      values for NAME are the same as for the `-march' command line
   12773      option.  This directive cannot be specified after any instructions
   12774      have been assembled.  If it is given multiple times, or in
   12775      conjunction with the `-march' option, all uses must be for the
   12776      same architecture and extension set.
   12777 
   12778 `.cpu NAME'
   12779      Select the target cpu.  Valid valuse for NAME are the same as for
   12780      the `-mcpu' command line option.  This directive cannot be
   12781      specified after any instructions have been assembled.  If it is
   12782      given multiple times, or in conjunction with the `-mopt' option,
   12783      all uses must be for the same cpu.
   12784 
   12785 
   12786 
   12787 File: as.info,  Node: M68K-opcodes,  Prev: M68K-Directives,  Up: M68K-Dependent
   12788 
   12789 9.23.6 Opcodes
   12790 --------------
   12791 
   12792 * Menu:
   12793 
   12794 * M68K-Branch::                 Branch Improvement
   12795 * M68K-Chars::                  Special Characters
   12796 
   12797 
   12798 File: as.info,  Node: M68K-Branch,  Next: M68K-Chars,  Up: M68K-opcodes
   12799 
   12800 9.23.6.1 Branch Improvement
   12801 ...........................
   12802 
   12803 Certain pseudo opcodes are permitted for branch instructions.  They
   12804 expand to the shortest branch instruction that reach the target.
   12805 Generally these mnemonics are made by substituting `j' for `b' at the
   12806 start of a Motorola mnemonic.
   12807 
   12808    The following table summarizes the pseudo-operations.  A `*' flags
   12809 cases that are more fully described after the table:
   12810 
   12811                Displacement
   12812                +------------------------------------------------------------
   12813                |                68020           68000/10, not PC-relative OK
   12814      Pseudo-Op |BYTE    WORD    LONG            ABSOLUTE LONG JUMP    **
   12815                +------------------------------------------------------------
   12816           jbsr |bsrs    bsrw    bsrl            jsr
   12817            jra |bras    braw    bral            jmp
   12818      *     jXX |bXXs    bXXw    bXXl            bNXs;jmp
   12819      *    dbXX | N/A    dbXXw   dbXX;bras;bral  dbXX;bras;jmp
   12820           fjXX | N/A    fbXXw   fbXXl            N/A
   12821 
   12822      XX: condition
   12823      NX: negative of condition XX
   12824                        `*'--see full description below
   12825          `**'--this expansion mode is disallowed by `--pcrel'
   12826 
   12827 `jbsr'
   12828 `jra'
   12829      These are the simplest jump pseudo-operations; they always map to
   12830      one particular machine instruction, depending on the displacement
   12831      to the branch target.  This instruction will be a byte or word
   12832      branch is that is sufficient.  Otherwise, a long branch will be
   12833      emitted if available.  If no long branches are available and the
   12834      `--pcrel' option is not given, an absolute long jump will be
   12835      emitted instead.  If no long branches are available, the `--pcrel'
   12836      option is given, and a word branch cannot reach the target, an
   12837      error message is generated.
   12838 
   12839      In addition to standard branch operands, `as' allows these
   12840      pseudo-operations to have all operands that are allowed for jsr
   12841      and jmp, substituting these instructions if the operand given is
   12842      not valid for a branch instruction.
   12843 
   12844 `jXX'
   12845      Here, `jXX' stands for an entire family of pseudo-operations,
   12846      where XX is a conditional branch or condition-code test.  The full
   12847      list of pseudo-ops in this family is:
   12848            jhi   jls   jcc   jcs   jne   jeq   jvc
   12849            jvs   jpl   jmi   jge   jlt   jgt   jle
   12850 
   12851      Usually, each of these pseudo-operations expands to a single branch
   12852      instruction.  However, if a word branch is not sufficient, no long
   12853      branches are available, and the `--pcrel' option is not given, `as'
   12854      issues a longer code fragment in terms of NX, the opposite
   12855      condition to XX.  For example, under these conditions:
   12856               jXX foo
   12857      gives
   12858                bNXs oof
   12859                jmp foo
   12860            oof:
   12861 
   12862 `dbXX'
   12863      The full family of pseudo-operations covered here is
   12864            dbhi   dbls   dbcc   dbcs   dbne   dbeq   dbvc
   12865            dbvs   dbpl   dbmi   dbge   dblt   dbgt   dble
   12866            dbf    dbra   dbt
   12867 
   12868      Motorola `dbXX' instructions allow word displacements only.  When
   12869      a word displacement is sufficient, each of these pseudo-operations
   12870      expands to the corresponding Motorola instruction.  When a word
   12871      displacement is not sufficient and long branches are available,
   12872      when the source reads `dbXX foo', `as' emits
   12873                dbXX oo1
   12874                bras oo2
   12875            oo1:bral foo
   12876            oo2:
   12877 
   12878      If, however, long branches are not available and the `--pcrel'
   12879      option is not given, `as' emits
   12880                dbXX oo1
   12881                bras oo2
   12882            oo1:jmp foo
   12883            oo2:
   12884 
   12885 `fjXX'
   12886      This family includes
   12887            fjne   fjeq   fjge   fjlt   fjgt   fjle   fjf
   12888            fjt    fjgl   fjgle  fjnge  fjngl  fjngle fjngt
   12889            fjnle  fjnlt  fjoge  fjogl  fjogt  fjole  fjolt
   12890            fjor   fjseq  fjsf   fjsne  fjst   fjueq  fjuge
   12891            fjugt  fjule  fjult  fjun
   12892 
   12893      Each of these pseudo-operations always expands to a single Motorola
   12894      coprocessor branch instruction, word or long.  All Motorola
   12895      coprocessor branch instructions allow both word and long
   12896      displacements.
   12897 
   12898 
   12899 
   12900 File: as.info,  Node: M68K-Chars,  Prev: M68K-Branch,  Up: M68K-opcodes
   12901 
   12902 9.23.6.2 Special Characters
   12903 ...........................
   12904 
   12905 Line comments are introduced by the `|' character appearing anywhere on
   12906 a line, unless the `--bitwise-or' command line option has been
   12907 specified.
   12908 
   12909    An asterisk (`*') as the first character on a line marks the start
   12910 of a line comment as well.
   12911 
   12912    A hash character (`#') as the first character on a line also marks
   12913 the start of a line comment, but in this case it could also be a
   12914 logical line number directive (*note Comments::) or a preprocessor
   12915 control command (*note Preprocessing::).  If the hash character appears
   12916 elsewhere on a line it is used to introduce an immediate value.  (This
   12917 is for compatibility with Sun's assembler).
   12918 
   12919    Multiple statements on the same line can appear if they are separated
   12920 by the `;' character.
   12921 
   12922 
   12923 File: as.info,  Node: M68HC11-Dependent,  Next: Meta-Dependent,  Prev: M68K-Dependent,  Up: Machine Dependencies
   12924 
   12925 9.24 M68HC11 and M68HC12 Dependent Features
   12926 ===========================================
   12927 
   12928 * Menu:
   12929 
   12930 * M68HC11-Opts::                   M68HC11 and M68HC12 Options
   12931 * M68HC11-Syntax::                 Syntax
   12932 * M68HC11-Modifiers::              Symbolic Operand Modifiers
   12933 * M68HC11-Directives::             Assembler Directives
   12934 * M68HC11-Float::                  Floating Point
   12935 * M68HC11-opcodes::                Opcodes
   12936 
   12937 
   12938 File: as.info,  Node: M68HC11-Opts,  Next: M68HC11-Syntax,  Up: M68HC11-Dependent
   12939 
   12940 9.24.1 M68HC11 and M68HC12 Options
   12941 ----------------------------------
   12942 
   12943 The Motorola 68HC11 and 68HC12 version of `as' have a few machine
   12944 dependent options.
   12945 
   12946 `-m68hc11'
   12947      This option switches the assembler into the M68HC11 mode. In this
   12948      mode, the assembler only accepts 68HC11 operands and mnemonics. It
   12949      produces code for the 68HC11.
   12950 
   12951 `-m68hc12'
   12952      This option switches the assembler into the M68HC12 mode. In this
   12953      mode, the assembler also accepts 68HC12 operands and mnemonics. It
   12954      produces code for the 68HC12. A few 68HC11 instructions are
   12955      replaced by some 68HC12 instructions as recommended by Motorola
   12956      specifications.
   12957 
   12958 `-m68hcs12'
   12959      This option switches the assembler into the M68HCS12 mode.  This
   12960      mode is similar to `-m68hc12' but specifies to assemble for the
   12961      68HCS12 series.  The only difference is on the assembling of the
   12962      `movb' and `movw' instruction when a PC-relative operand is used.
   12963 
   12964 `-mm9s12x'
   12965      This option switches the assembler into the M9S12X mode.  This
   12966      mode is similar to `-m68hc12' but specifies to assemble for the
   12967      S12X series which is a superset of the HCS12.
   12968 
   12969 `-mm9s12xg'
   12970      This option switches the assembler into the XGATE mode for the RISC
   12971      co-processor featured on some S12X-family chips.
   12972 
   12973 `--xgate-ramoffset'
   12974      This option instructs the linker to offset RAM addresses from S12X
   12975      address space into XGATE address space.
   12976 
   12977 `-mshort'
   12978      This option controls the ABI and indicates to use a 16-bit integer
   12979      ABI.  It has no effect on the assembled instructions.  This is the
   12980      default.
   12981 
   12982 `-mlong'
   12983      This option controls the ABI and indicates to use a 32-bit integer
   12984      ABI.
   12985 
   12986 `-mshort-double'
   12987      This option controls the ABI and indicates to use a 32-bit float
   12988      ABI.  This is the default.
   12989 
   12990 `-mlong-double'
   12991      This option controls the ABI and indicates to use a 64-bit float
   12992      ABI.
   12993 
   12994 `--strict-direct-mode'
   12995      You can use the `--strict-direct-mode' option to disable the
   12996      automatic translation of direct page mode addressing into extended
   12997      mode when the instruction does not support direct mode.  For
   12998      example, the `clr' instruction does not support direct page mode
   12999      addressing. When it is used with the direct page mode, `as' will
   13000      ignore it and generate an absolute addressing.  This option
   13001      prevents `as' from doing this, and the wrong usage of the direct
   13002      page mode will raise an error.
   13003 
   13004 `--short-branches'
   13005      The `--short-branches' option turns off the translation of
   13006      relative branches into absolute branches when the branch offset is
   13007      out of range. By default `as' transforms the relative branch
   13008      (`bsr', `bgt', `bge', `beq', `bne', `ble', `blt', `bhi', `bcc',
   13009      `bls', `bcs', `bmi', `bvs', `bvs', `bra') into an absolute branch
   13010      when the offset is out of the -128 .. 127 range.  In that case,
   13011      the `bsr' instruction is translated into a `jsr', the `bra'
   13012      instruction is translated into a `jmp' and the conditional
   13013      branches instructions are inverted and followed by a `jmp'. This
   13014      option disables these translations and `as' will generate an error
   13015      if a relative branch is out of range. This option does not affect
   13016      the optimization associated to the `jbra', `jbsr' and `jbXX'
   13017      pseudo opcodes.
   13018 
   13019 `--force-long-branches'
   13020      The `--force-long-branches' option forces the translation of
   13021      relative branches into absolute branches. This option does not
   13022      affect the optimization associated to the `jbra', `jbsr' and
   13023      `jbXX' pseudo opcodes.
   13024 
   13025 `--print-insn-syntax'
   13026      You can use the `--print-insn-syntax' option to obtain the syntax
   13027      description of the instruction when an error is detected.
   13028 
   13029 `--print-opcodes'
   13030      The `--print-opcodes' option prints the list of all the
   13031      instructions with their syntax. The first item of each line
   13032      represents the instruction name and the rest of the line indicates
   13033      the possible operands for that instruction. The list is printed in
   13034      alphabetical order. Once the list is printed `as' exits.
   13035 
   13036 `--generate-example'
   13037      The `--generate-example' option is similar to `--print-opcodes'
   13038      but it generates an example for each instruction instead.
   13039 
   13040 
   13041 File: as.info,  Node: M68HC11-Syntax,  Next: M68HC11-Modifiers,  Prev: M68HC11-Opts,  Up: M68HC11-Dependent
   13042 
   13043 9.24.2 Syntax
   13044 -------------
   13045 
   13046 In the M68HC11 syntax, the instruction name comes first and it may be
   13047 followed by one or several operands (up to three). Operands are
   13048 separated by comma (`,'). In the normal mode, `as' will complain if too
   13049 many operands are specified for a given instruction. In the MRI mode
   13050 (turned on with `-M' option), it will treat them as comments. Example:
   13051 
   13052      inx
   13053      lda  #23
   13054      bset 2,x #4
   13055      brclr *bot #8 foo
   13056 
   13057    The presence of a `;' character or a `!' character anywhere on a
   13058 line indicates the start of a comment that extends to the end of that
   13059 line.
   13060 
   13061    A `*' or a `#' character at the start of a line also introduces a
   13062 line comment, but these characters do not work elsewhere on the line.
   13063 If the first character of the line is a `#' then as well as starting a
   13064 comment, the line could also be logical line number directive (*note
   13065 Comments::) or a preprocessor control command (*note Preprocessing::).
   13066 
   13067    The M68HC11 assembler does not currently support a line separator
   13068 character.
   13069 
   13070    The following addressing modes are understood for 68HC11 and 68HC12:
   13071 "Immediate"
   13072      `#NUMBER'
   13073 
   13074 "Address Register"
   13075      `NUMBER,X', `NUMBER,Y'
   13076 
   13077      The NUMBER may be omitted in which case 0 is assumed.
   13078 
   13079 "Direct Addressing mode"
   13080      `*SYMBOL', or `*DIGITS'
   13081 
   13082 "Absolute"
   13083      `SYMBOL', or `DIGITS'
   13084 
   13085    The M68HC12 has other more complex addressing modes. All of them are
   13086 supported and they are represented below:
   13087 
   13088 "Constant Offset Indexed Addressing Mode"
   13089      `NUMBER,REG'
   13090 
   13091      The NUMBER may be omitted in which case 0 is assumed.  The
   13092      register can be either `X', `Y', `SP' or `PC'.  The assembler will
   13093      use the smaller post-byte definition according to the constant
   13094      value (5-bit constant offset, 9-bit constant offset or 16-bit
   13095      constant offset).  If the constant is not known by the assembler
   13096      it will use the 16-bit constant offset post-byte and the value
   13097      will be resolved at link time.
   13098 
   13099 "Offset Indexed Indirect"
   13100      `[NUMBER,REG]'
   13101 
   13102      The register can be either `X', `Y', `SP' or `PC'.
   13103 
   13104 "Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement"
   13105      `NUMBER,-REG' `NUMBER,+REG' `NUMBER,REG-' `NUMBER,REG+'
   13106 
   13107      The number must be in the range `-8'..`+8' and must not be 0.  The
   13108      register can be either `X', `Y', `SP' or `PC'.
   13109 
   13110 "Accumulator Offset"
   13111      `ACC,REG'
   13112 
   13113      The accumulator register can be either `A', `B' or `D'.  The
   13114      register can be either `X', `Y', `SP' or `PC'.
   13115 
   13116 "Accumulator D offset indexed-indirect"
   13117      `[D,REG]'
   13118 
   13119      The register can be either `X', `Y', `SP' or `PC'.
   13120 
   13121 
   13122    For example:
   13123 
   13124      ldab 1024,sp
   13125      ldd [10,x]
   13126      orab 3,+x
   13127      stab -2,y-
   13128      ldx a,pc
   13129      sty [d,sp]
   13130 
   13131 
   13132 File: as.info,  Node: M68HC11-Modifiers,  Next: M68HC11-Directives,  Prev: M68HC11-Syntax,  Up: M68HC11-Dependent
   13133 
   13134 9.24.3 Symbolic Operand Modifiers
   13135 ---------------------------------
   13136 
   13137 The assembler supports several modifiers when using symbol addresses in
   13138 68HC11 and 68HC12 instruction operands.  The general syntax is the
   13139 following:
   13140 
   13141      %modifier(symbol)
   13142 
   13143 `%addr'
   13144      This modifier indicates to the assembler and linker to use the
   13145      16-bit physical address corresponding to the symbol.  This is
   13146      intended to be used on memory window systems to map a symbol in
   13147      the memory bank window.  If the symbol is in a memory expansion
   13148      part, the physical address corresponds to the symbol address
   13149      within the memory bank window.  If the symbol is not in a memory
   13150      expansion part, this is the symbol address (using or not using the
   13151      %addr modifier has no effect in that case).
   13152 
   13153 `%page'
   13154      This modifier indicates to use the memory page number corresponding
   13155      to the symbol.  If the symbol is in a memory expansion part, its
   13156      page number is computed by the linker as a number used to map the
   13157      page containing the symbol in the memory bank window.  If the
   13158      symbol is not in a memory expansion part, the page number is 0.
   13159 
   13160 `%hi'
   13161      This modifier indicates to use the 8-bit high part of the physical
   13162      address of the symbol.
   13163 
   13164 `%lo'
   13165      This modifier indicates to use the 8-bit low part of the physical
   13166      address of the symbol.
   13167 
   13168 
   13169    For example a 68HC12 call to a function `foo_example' stored in
   13170 memory expansion part could be written as follows:
   13171 
   13172      call %addr(foo_example),%page(foo_example)
   13173 
   13174    and this is equivalent to
   13175 
   13176      call foo_example
   13177 
   13178    And for 68HC11 it could be written as follows:
   13179 
   13180      ldab #%page(foo_example)
   13181      stab _page_switch
   13182      jsr  %addr(foo_example)
   13183 
   13184 
   13185 File: as.info,  Node: M68HC11-Directives,  Next: M68HC11-Float,  Prev: M68HC11-Modifiers,  Up: M68HC11-Dependent
   13186 
   13187 9.24.4 Assembler Directives
   13188 ---------------------------
   13189 
   13190 The 68HC11 and 68HC12 version of `as' have the following specific
   13191 assembler directives:
   13192 
   13193 `.relax'
   13194      The relax directive is used by the `GNU Compiler' to emit a
   13195      specific relocation to mark a group of instructions for linker
   13196      relaxation.  The sequence of instructions within the group must be
   13197      known to the linker so that relaxation can be performed.
   13198 
   13199 `.mode [mshort|mlong|mshort-double|mlong-double]'
   13200      This directive specifies the ABI.  It overrides the `-mshort',
   13201      `-mlong', `-mshort-double' and `-mlong-double' options.
   13202 
   13203 `.far SYMBOL'
   13204      This directive marks the symbol as a `far' symbol meaning that it
   13205      uses a `call/rtc' calling convention as opposed to `jsr/rts'.
   13206      During a final link, the linker will identify references to the
   13207      `far' symbol and will verify the proper calling convention.
   13208 
   13209 `.interrupt SYMBOL'
   13210      This directive marks the symbol as an interrupt entry point.  This
   13211      information is then used by the debugger to correctly unwind the
   13212      frame across interrupts.
   13213 
   13214 `.xrefb SYMBOL'
   13215      This directive is defined for compatibility with the
   13216      `Specification for Motorola 8 and 16-Bit Assembly Language Input
   13217      Standard' and is ignored.
   13218 
   13219 
   13220 
   13221 File: as.info,  Node: M68HC11-Float,  Next: M68HC11-opcodes,  Prev: M68HC11-Directives,  Up: M68HC11-Dependent
   13222 
   13223 9.24.5 Floating Point
   13224 ---------------------
   13225 
   13226 Packed decimal (P) format floating literals are not supported.  Feel
   13227 free to add the code!
   13228 
   13229    The floating point formats generated by directives are these.
   13230 
   13231 `.float'
   13232      `Single' precision floating point constants.
   13233 
   13234 `.double'
   13235      `Double' precision floating point constants.
   13236 
   13237 `.extend'
   13238 `.ldouble'
   13239      `Extended' precision (`long double') floating point constants.
   13240 
   13241 
   13242 File: as.info,  Node: M68HC11-opcodes,  Prev: M68HC11-Float,  Up: M68HC11-Dependent
   13243 
   13244 9.24.6 Opcodes
   13245 --------------
   13246 
   13247 * Menu:
   13248 
   13249 * M68HC11-Branch::                 Branch Improvement
   13250 
   13251 
   13252 File: as.info,  Node: M68HC11-Branch,  Up: M68HC11-opcodes
   13253 
   13254 9.24.6.1 Branch Improvement
   13255 ...........................
   13256 
   13257 Certain pseudo opcodes are permitted for branch instructions.  They
   13258 expand to the shortest branch instruction that reach the target.
   13259 Generally these mnemonics are made by prepending `j' to the start of
   13260 Motorola mnemonic. These pseudo opcodes are not affected by the
   13261 `--short-branches' or `--force-long-branches' options.
   13262 
   13263    The following table summarizes the pseudo-operations.
   13264 
   13265                              Displacement Width
   13266           +-------------------------------------------------------------+
   13267           |                     Options                                 |
   13268           |    --short-branches           --force-long-branches         |
   13269           +--------------------------+----------------------------------+
   13270        Op |BYTE             WORD     | BYTE          WORD               |
   13271           +--------------------------+----------------------------------+
   13272       bsr | bsr <pc-rel>    <error>  |               jsr <abs>          |
   13273       bra | bra <pc-rel>    <error>  |               jmp <abs>          |
   13274      jbsr | bsr <pc-rel>   jsr <abs> | bsr <pc-rel>  jsr <abs>          |
   13275      jbra | bra <pc-rel>   jmp <abs> | bra <pc-rel>  jmp <abs>          |
   13276       bXX | bXX <pc-rel>    <error>  |               bNX +3; jmp <abs>  |
   13277      jbXX | bXX <pc-rel>   bNX +3;   | bXX <pc-rel>  bNX +3; jmp <abs>  |
   13278           |                jmp <abs> |                                  |
   13279           +--------------------------+----------------------------------+
   13280      XX: condition
   13281      NX: negative of condition XX
   13282 
   13283 `jbsr'
   13284 `jbra'
   13285      These are the simplest jump pseudo-operations; they always map to
   13286      one particular machine instruction, depending on the displacement
   13287      to the branch target.
   13288 
   13289 `jbXX'
   13290      Here, `jbXX' stands for an entire family of pseudo-operations,
   13291      where XX is a conditional branch or condition-code test.  The full
   13292      list of pseudo-ops in this family is:
   13293            jbcc   jbeq   jbge   jbgt   jbhi   jbvs   jbpl  jblo
   13294            jbcs   jbne   jblt   jble   jbls   jbvc   jbmi
   13295 
   13296      For the cases of non-PC relative displacements and long
   13297      displacements, `as' issues a longer code fragment in terms of NX,
   13298      the opposite condition to XX.  For example, for the non-PC
   13299      relative case:
   13300               jbXX foo
   13301      gives
   13302                bNXs oof
   13303                jmp foo
   13304            oof:
   13305 
   13306 
   13307 
   13308 File: as.info,  Node: Meta-Dependent,  Next: MicroBlaze-Dependent,  Prev: M68HC11-Dependent,  Up: Machine Dependencies
   13309 
   13310 9.25 Meta Dependent Features
   13311 ============================
   13312 
   13313 * Menu:
   13314 
   13315 * Meta Options::                Options
   13316 * Meta Syntax::                 Meta Assembler Syntax
   13317 
   13318 
   13319 File: as.info,  Node: Meta Options,  Next: Meta Syntax,  Up: Meta-Dependent
   13320 
   13321 9.25.1 Options
   13322 --------------
   13323 
   13324 The Imagination Technologies Meta architecture is implemented in a
   13325 number of versions, with each new version adding new features such as
   13326 instructions and registers. For precise details of what instructions
   13327 each core supports, please see the chip's technical reference manual.
   13328 
   13329    The following table lists all available Meta options.
   13330 
   13331 `-mcpu=metac11'
   13332      Generate code for Meta 1.1.
   13333 
   13334 `-mcpu=metac12'
   13335      Generate code for Meta 1.2.
   13336 
   13337 `-mcpu=metac21'
   13338      Generate code for Meta 2.1.
   13339 
   13340 `-mfpu=metac21'
   13341      Allow code to use FPU hardware of Meta 2.1.
   13342 
   13343 
   13344 
   13345 File: as.info,  Node: Meta Syntax,  Prev: Meta Options,  Up: Meta-Dependent
   13346 
   13347 9.25.2 Syntax
   13348 -------------
   13349 
   13350 * Menu:
   13351 
   13352 * Meta-Chars::                Special Characters
   13353 * Meta-Regs::                 Register Names
   13354 
   13355 
   13356 File: as.info,  Node: Meta-Chars,  Next: Meta-Regs,  Up: Meta Syntax
   13357 
   13358 9.25.2.1 Special Characters
   13359 ...........................
   13360 
   13361 `!' is the line comment character.
   13362 
   13363    You can use `;' instead of a newline to separate statements.
   13364 
   13365    Since `$' has no special meaning, you may use it in symbol names.
   13366 
   13367 
   13368 File: as.info,  Node: Meta-Regs,  Prev: Meta-Chars,  Up: Meta Syntax
   13369 
   13370 9.25.2.2 Register Names
   13371 .......................
   13372 
   13373 Registers can be specified either using their mnemonic names, such as
   13374 `D0Re0', or using the unit plus register number separated by a `.',
   13375 such as `D0.0'.
   13376 
   13377 
   13378 File: as.info,  Node: MicroBlaze-Dependent,  Next: MIPS-Dependent,  Prev: Meta-Dependent,  Up: Machine Dependencies
   13379 
   13380 9.26 MicroBlaze Dependent Features
   13381 ==================================
   13382 
   13383    The Xilinx MicroBlaze processor family includes several variants,
   13384 all using the same core instruction set.  This chapter covers features
   13385 of the GNU assembler that are specific to the MicroBlaze architecture.
   13386 For details about the MicroBlaze instruction set, please see the
   13387 `MicroBlaze Processor Reference Guide (UG081)' available at
   13388 www.xilinx.com.
   13389 
   13390 * Menu:
   13391 
   13392 * MicroBlaze Directives::           Directives for MicroBlaze Processors.
   13393 * MicroBlaze Syntax::               Syntax for the MicroBlaze
   13394 
   13395 
   13396 File: as.info,  Node: MicroBlaze Directives,  Next: MicroBlaze Syntax,  Up: MicroBlaze-Dependent
   13397 
   13398 9.26.1 Directives
   13399 -----------------
   13400 
   13401 A number of assembler directives are available for MicroBlaze.
   13402 
   13403 `.data8 EXPRESSION,...'
   13404      This directive is an alias for `.byte'. Each expression is
   13405      assembled into an eight-bit value.
   13406 
   13407 `.data16 EXPRESSION,...'
   13408      This directive is an alias for `.hword'. Each expression is
   13409      assembled into an 16-bit value.
   13410 
   13411 `.data32 EXPRESSION,...'
   13412      This directive is an alias for `.word'. Each expression is
   13413      assembled into an 32-bit value.
   13414 
   13415 `.ent NAME[,LABEL]'
   13416      This directive is an alias for `.func' denoting the start of
   13417      function NAME at (optional) LABEL.
   13418 
   13419 `.end NAME[,LABEL]'
   13420      This directive is an alias for `.endfunc' denoting the end of
   13421      function NAME.
   13422 
   13423 `.gpword LABEL,...'
   13424      This directive is an alias for `.rva'.  The resolved address of
   13425      LABEL is stored in the data section.
   13426 
   13427 `.weakext LABEL'
   13428      Declare that LABEL is a weak external symbol.
   13429 
   13430 `.rodata'
   13431      Switch to .rodata section. Equivalent to `.section .rodata'
   13432 
   13433 `.sdata2'
   13434      Switch to .sdata2 section. Equivalent to `.section .sdata2'
   13435 
   13436 `.sdata'
   13437      Switch to .sdata section. Equivalent to `.section .sdata'
   13438 
   13439 `.bss'
   13440      Switch to .bss section. Equivalent to `.section .bss'
   13441 
   13442 `.sbss'
   13443      Switch to .sbss section. Equivalent to `.section .sbss'
   13444 
   13445 
   13446 File: as.info,  Node: MicroBlaze Syntax,  Prev: MicroBlaze Directives,  Up: MicroBlaze-Dependent
   13447 
   13448 9.26.2 Syntax for the MicroBlaze
   13449 --------------------------------
   13450 
   13451 * Menu:
   13452 
   13453 * MicroBlaze-Chars::                Special Characters
   13454 
   13455 
   13456 File: as.info,  Node: MicroBlaze-Chars,  Up: MicroBlaze Syntax
   13457 
   13458 9.26.2.1 Special Characters
   13459 ...........................
   13460 
   13461 The presence of a `#' on a line indicates the start of a comment that
   13462 extends to the end of the current line.
   13463 
   13464    If a `#' appears as the first character of a line, the whole line is
   13465 treated as a comment, but in this case the line can also be a logical
   13466 line number directive (*note Comments::) or a preprocessor control
   13467 command (*note Preprocessing::).
   13468 
   13469    The `;' character can be used to separate statements on the same
   13470 line.
   13471 
   13472 
   13473 File: as.info,  Node: MIPS-Dependent,  Next: MMIX-Dependent,  Prev: MicroBlaze-Dependent,  Up: Machine Dependencies
   13474 
   13475 9.27 MIPS Dependent Features
   13476 ============================
   13477 
   13478    GNU `as' for MIPS architectures supports several different MIPS
   13479 processors, and MIPS ISA levels I through V, MIPS32, and MIPS64.  For
   13480 information about the MIPS instruction set, see `MIPS RISC
   13481 Architecture', by Kane and Heindrich (Prentice-Hall).  For an overview
   13482 of MIPS assembly conventions, see "Appendix D: Assembly Language
   13483 Programming" in the same work.
   13484 
   13485 * Menu:
   13486 
   13487 * MIPS Options::   	Assembler options
   13488 * MIPS Macros:: 	High-level assembly macros
   13489 * MIPS Symbol Sizes::	Directives to override the size of symbols
   13490 * MIPS Small Data:: 	Controlling the use of small data accesses
   13491 * MIPS ISA::    	Directives to override the ISA level
   13492 * MIPS assembly options:: Directives to control code generation
   13493 * MIPS autoextend::	Directives for extending MIPS 16 bit instructions
   13494 * MIPS insn::		Directive to mark data as an instruction
   13495 * MIPS FP ABIs::	Marking which FP ABI is in use
   13496 * MIPS NaN Encodings::	Directives to record which NaN encoding is being used
   13497 * MIPS Option Stack::	Directives to save and restore options
   13498 * MIPS ASE Instruction Generation Overrides:: Directives to control
   13499   			generation of MIPS ASE instructions
   13500 * MIPS Floating-Point:: Directives to override floating-point options
   13501 * MIPS Syntax::         MIPS specific syntactical considerations
   13502 
   13503 
   13504 File: as.info,  Node: MIPS Options,  Next: MIPS Macros,  Up: MIPS-Dependent
   13505 
   13506 9.27.1 Assembler options
   13507 ------------------------
   13508 
   13509 The MIPS configurations of GNU `as' support these special options:
   13510 
   13511 `-G NUM'
   13512      Set the "small data" limit to N bytes.  The default limit is 8
   13513      bytes.  *Note Controlling the use of small data accesses: MIPS
   13514      Small Data.
   13515 
   13516 `-EB'
   13517 `-EL'
   13518      Any MIPS configuration of `as' can select big-endian or
   13519      little-endian output at run time (unlike the other GNU development
   13520      tools, which must be configured for one or the other).  Use `-EB'
   13521      to select big-endian output, and `-EL' for little-endian.
   13522 
   13523 `-KPIC'
   13524      Generate SVR4-style PIC.  This option tells the assembler to
   13525      generate SVR4-style position-independent macro expansions.  It
   13526      also tells the assembler to mark the output file as PIC.
   13527 
   13528 `-mvxworks-pic'
   13529      Generate VxWorks PIC.  This option tells the assembler to generate
   13530      VxWorks-style position-independent macro expansions.
   13531 
   13532 `-mips1'
   13533 `-mips2'
   13534 `-mips3'
   13535 `-mips4'
   13536 `-mips5'
   13537 `-mips32'
   13538 `-mips32r2'
   13539 `-mips32r3'
   13540 `-mips32r5'
   13541 `-mips32r6'
   13542 `-mips64'
   13543 `-mips64r2'
   13544 `-mips64r3'
   13545 `-mips64r5'
   13546 `-mips64r6'
   13547      Generate code for a particular MIPS Instruction Set Architecture
   13548      level.  `-mips1' corresponds to the R2000 and R3000 processors,
   13549      `-mips2' to the R6000 processor, `-mips3' to the R4000 processor,
   13550      and `-mips4' to the R8000 and R10000 processors.  `-mips5',
   13551      `-mips32', `-mips32r2', `-mips32r3', `-mips32r5', `-mips32r6',
   13552      `-mips64', `-mips64r2', `-mips64r3', `-mips64r5', and `-mips64r6'
   13553      correspond to generic MIPS V, MIPS32, MIPS32 Release 2, MIPS32
   13554      Release 3, MIPS32 Release 5, MIPS32 Release 6, MIPS64, and MIPS64
   13555      Release 2, MIPS64 Release 3, MIPS64 Release 5, and MIPS64 Release
   13556      6 ISA processors, respectively.  You can also switch instruction
   13557      sets during the assembly; see *Note Directives to override the ISA
   13558      level: MIPS ISA.
   13559 
   13560 `-mgp32'
   13561 `-mfp32'
   13562      Some macros have different expansions for 32-bit and 64-bit
   13563      registers.  The register sizes are normally inferred from the ISA
   13564      and ABI, but these flags force a certain group of registers to be
   13565      treated as 32 bits wide at all times.  `-mgp32' controls the size
   13566      of general-purpose registers and `-mfp32' controls the size of
   13567      floating-point registers.
   13568 
   13569      The `.set gp=32' and `.set fp=32' directives allow the size of
   13570      registers to be changed for parts of an object. The default value
   13571      is restored by `.set gp=default' and `.set fp=default'.
   13572 
   13573      On some MIPS variants there is a 32-bit mode flag; when this flag
   13574      is set, 64-bit instructions generate a trap.  Also, some 32-bit
   13575      OSes only save the 32-bit registers on a context switch, so it is
   13576      essential never to use the 64-bit registers.
   13577 
   13578 `-mgp64'
   13579 `-mfp64'
   13580      Assume that 64-bit registers are available.  This is provided in
   13581      the interests of symmetry with `-mgp32' and `-mfp32'.
   13582 
   13583      The `.set gp=64' and `.set fp=64' directives allow the size of
   13584      registers to be changed for parts of an object. The default value
   13585      is restored by `.set gp=default' and `.set fp=default'.
   13586 
   13587 `-mfpxx'
   13588      Make no assumptions about whether 32-bit or 64-bit floating-point
   13589      registers are available. This is provided to support having modules
   13590      compatible with either `-mfp32' or `-mfp64'. This option can only
   13591      be used with MIPS II and above.
   13592 
   13593      The `.set fp=xx' directive allows a part of an object to be marked
   13594      as not making assumptions about 32-bit or 64-bit FP registers.  The
   13595      default value is restored by `.set fp=default'.
   13596 
   13597 `-modd-spreg'
   13598 `-mno-odd-spreg'
   13599      Enable use of floating-point operations on odd-numbered
   13600      single-precision registers when supported by the ISA.  `-mfpxx'
   13601      implies `-mno-odd-spreg', otherwise the default is `-modd-spreg'
   13602 
   13603 `-mips16'
   13604 `-no-mips16'
   13605      Generate code for the MIPS 16 processor.  This is equivalent to
   13606      putting `.set mips16' at the start of the assembly file.
   13607      `-no-mips16' turns off this option.
   13608 
   13609 `-mmicromips'
   13610 `-mno-micromips'
   13611      Generate code for the microMIPS processor.  This is equivalent to
   13612      putting `.set micromips' at the start of the assembly file.
   13613      `-mno-micromips' turns off this option.  This is equivalent to
   13614      putting `.set nomicromips' at the start of the assembly file.
   13615 
   13616 `-msmartmips'
   13617 `-mno-smartmips'
   13618      Enables the SmartMIPS extensions to the MIPS32 instruction set,
   13619      which provides a number of new instructions which target smartcard
   13620      and cryptographic applications.  This is equivalent to putting
   13621      `.set smartmips' at the start of the assembly file.
   13622      `-mno-smartmips' turns off this option.
   13623 
   13624 `-mips3d'
   13625 `-no-mips3d'
   13626      Generate code for the MIPS-3D Application Specific Extension.
   13627      This tells the assembler to accept MIPS-3D instructions.
   13628      `-no-mips3d' turns off this option.
   13629 
   13630 `-mdmx'
   13631 `-no-mdmx'
   13632      Generate code for the MDMX Application Specific Extension.  This
   13633      tells the assembler to accept MDMX instructions.  `-no-mdmx' turns
   13634      off this option.
   13635 
   13636 `-mdsp'
   13637 `-mno-dsp'
   13638      Generate code for the DSP Release 1 Application Specific Extension.
   13639      This tells the assembler to accept DSP Release 1 instructions.
   13640      `-mno-dsp' turns off this option.
   13641 
   13642 `-mdspr2'
   13643 `-mno-dspr2'
   13644      Generate code for the DSP Release 2 Application Specific Extension.
   13645      This option implies -mdsp.  This tells the assembler to accept DSP
   13646      Release 2 instructions.  `-mno-dspr2' turns off this option.
   13647 
   13648 `-mmt'
   13649 `-mno-mt'
   13650      Generate code for the MT Application Specific Extension.  This
   13651      tells the assembler to accept MT instructions.  `-mno-mt' turns
   13652      off this option.
   13653 
   13654 `-mmcu'
   13655 `-mno-mcu'
   13656      Generate code for the MCU Application Specific Extension.  This
   13657      tells the assembler to accept MCU instructions.  `-mno-mcu' turns
   13658      off this option.
   13659 
   13660 `-mmsa'
   13661 `-mno-msa'
   13662      Generate code for the MIPS SIMD Architecture Extension.  This
   13663      tells the assembler to accept MSA instructions.  `-mno-msa' turns
   13664      off this option.
   13665 
   13666 `-mxpa'
   13667 `-mno-xpa'
   13668      Generate code for the MIPS eXtended Physical Address (XPA)
   13669      Extension.  This tells the assembler to accept XPA instructions.
   13670      `-mno-xpa' turns off this option.
   13671 
   13672 `-mvirt'
   13673 `-mno-virt'
   13674      Generate code for the Virtualization Application Specific
   13675      Extension.  This tells the assembler to accept Virtualization
   13676      instructions.  `-mno-virt' turns off this option.
   13677 
   13678 `-minsn32'
   13679 `-mno-insn32'
   13680      Only use 32-bit instruction encodings when generating code for the
   13681      microMIPS processor.  This option inhibits the use of any 16-bit
   13682      instructions.  This is equivalent to putting `.set insn32' at the
   13683      start of the assembly file.  `-mno-insn32' turns off this option.
   13684      This is equivalent to putting `.set noinsn32' at the start of the
   13685      assembly file.  By default `-mno-insn32' is selected, allowing all
   13686      instructions to be used.
   13687 
   13688 `-mfix7000'
   13689 `-mno-fix7000'
   13690      Cause nops to be inserted if the read of the destination register
   13691      of an mfhi or mflo instruction occurs in the following two
   13692      instructions.
   13693 
   13694 `-mfix-rm7000'
   13695 `-mno-fix-rm7000'
   13696      Cause nops to be inserted if a dmult or dmultu instruction is
   13697      followed by a load instruction.
   13698 
   13699 `-mfix-loongson2f-jump'
   13700 `-mno-fix-loongson2f-jump'
   13701      Eliminate instruction fetch from outside 256M region to work
   13702      around the Loongson2F `jump' instructions.  Without it, under
   13703      extreme cases, the kernel may crash.  The issue has been solved in
   13704      latest processor batches, but this fix has no side effect to them.
   13705 
   13706 `-mfix-loongson2f-nop'
   13707 `-mno-fix-loongson2f-nop'
   13708      Replace nops by `or at,at,zero' to work around the Loongson2F
   13709      `nop' errata.  Without it, under extreme cases, the CPU might
   13710      deadlock.  The issue has been solved in later Loongson2F batches,
   13711      but this fix has no side effect to them.
   13712 
   13713 `-mfix-vr4120'
   13714 `-mno-fix-vr4120'
   13715      Insert nops to work around certain VR4120 errata.  This option is
   13716      intended to be used on GCC-generated code: it is not designed to
   13717      catch all problems in hand-written assembler code.
   13718 
   13719 `-mfix-vr4130'
   13720 `-mno-fix-vr4130'
   13721      Insert nops to work around the VR4130 `mflo'/`mfhi' errata.
   13722 
   13723 `-mfix-24k'
   13724 `-mno-fix-24k'
   13725      Insert nops to work around the 24K `eret'/`deret' errata.
   13726 
   13727 `-mfix-cn63xxp1'
   13728 `-mno-fix-cn63xxp1'
   13729      Replace `pref' hints 0 - 4 and 6 - 24 with hint 28 to work around
   13730      certain CN63XXP1 errata.
   13731 
   13732 `-m4010'
   13733 `-no-m4010'
   13734      Generate code for the LSI R4010 chip.  This tells the assembler to
   13735      accept the R4010-specific instructions (`addciu', `ffc', etc.),
   13736      and to not schedule `nop' instructions around accesses to the `HI'
   13737      and `LO' registers.  `-no-m4010' turns off this option.
   13738 
   13739 `-m4650'
   13740 `-no-m4650'
   13741      Generate code for the MIPS R4650 chip.  This tells the assembler
   13742      to accept the `mad' and `madu' instruction, and to not schedule
   13743      `nop' instructions around accesses to the `HI' and `LO' registers.
   13744      `-no-m4650' turns off this option.
   13745 
   13746 `-m3900'
   13747 `-no-m3900'
   13748 `-m4100'
   13749 `-no-m4100'
   13750      For each option `-mNNNN', generate code for the MIPS RNNNN chip.
   13751      This tells the assembler to accept instructions specific to that
   13752      chip, and to schedule for that chip's hazards.
   13753 
   13754 `-march=CPU'
   13755      Generate code for a particular MIPS CPU.  It is exactly equivalent
   13756      to `-mCPU', except that there are more value of CPU understood.
   13757      Valid CPU value are:
   13758 
   13759           2000, 3000, 3900, 4000, 4010, 4100, 4111, vr4120, vr4130,
   13760           vr4181, 4300, 4400, 4600, 4650, 5000, rm5200, rm5230, rm5231,
   13761           rm5261, rm5721, vr5400, vr5500, 6000, rm7000, 8000, rm9000,
   13762           10000, 12000, 14000, 16000, 4kc, 4km, 4kp, 4ksc, 4kec, 4kem,
   13763           4kep, 4ksd, m4k, m4kp, m14k, m14kc, m14ke, m14kec, 24kc,
   13764           24kf2_1, 24kf, 24kf1_1, 24kec, 24kef2_1, 24kef, 24kef1_1,
   13765           34kc, 34kf2_1, 34kf, 34kf1_1, 34kn, 74kc, 74kf2_1, 74kf,
   13766           74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf, 1004kf1_1, p5600,
   13767           5kc, 5kf, 20kc, 25kf, sb1, sb1a, loongson2e, loongson2f,
   13768           loongson3a, octeon, octeon+, octeon2, xlr, xlp
   13769 
   13770      For compatibility reasons, `Nx' and `Bfx' are accepted as synonyms
   13771      for `Nf1_1'.  These values are deprecated.
   13772 
   13773 `-mtune=CPU'
   13774      Schedule and tune for a particular MIPS CPU.  Valid CPU values are
   13775      identical to `-march=CPU'.
   13776 
   13777 `-mabi=ABI'
   13778      Record which ABI the source code uses.  The recognized arguments
   13779      are: `32', `n32', `o64', `64' and `eabi'.
   13780 
   13781 `-msym32'
   13782 `-mno-sym32'
   13783      Equivalent to adding `.set sym32' or `.set nosym32' to the
   13784      beginning of the assembler input.  *Note MIPS Symbol Sizes::.
   13785 
   13786 `-nocpp'
   13787      This option is ignored.  It is accepted for command-line
   13788      compatibility with other assemblers, which use it to turn off C
   13789      style preprocessing.  With GNU `as', there is no need for
   13790      `-nocpp', because the GNU assembler itself never runs the C
   13791      preprocessor.
   13792 
   13793 `-msoft-float'
   13794 `-mhard-float'
   13795      Disable or enable floating-point instructions.  Note that by
   13796      default floating-point instructions are always allowed even with
   13797      CPU targets that don't have support for these instructions.
   13798 
   13799 `-msingle-float'
   13800 `-mdouble-float'
   13801      Disable or enable double-precision floating-point operations.  Note
   13802      that by default double-precision floating-point operations are
   13803      always allowed even with CPU targets that don't have support for
   13804      these operations.
   13805 
   13806 `--construct-floats'
   13807 `--no-construct-floats'
   13808      The `--no-construct-floats' option disables the construction of
   13809      double width floating point constants by loading the two halves of
   13810      the value into the two single width floating point registers that
   13811      make up the double width register.  This feature is useful if the
   13812      processor support the FR bit in its status  register, and this bit
   13813      is known (by the programmer) to be set.  This bit prevents the
   13814      aliasing of the double width register by the single width
   13815      registers.
   13816 
   13817      By default `--construct-floats' is selected, allowing construction
   13818      of these floating point constants.
   13819 
   13820 `--relax-branch'
   13821 `--no-relax-branch'
   13822      The `--relax-branch' option enables the relaxation of out-of-range
   13823      branches.  Any branches whose target cannot be reached directly are
   13824      converted to a small instruction sequence including an
   13825      inverse-condition branch to the physically next instruction, and a
   13826      jump to the original target is inserted between the two
   13827      instructions.  In PIC code the jump will involve further
   13828      instructions for address calculation.
   13829 
   13830      The `BC1ANY2F', `BC1ANY2T', `BC1ANY4F', `BC1ANY4T', `BPOSGE32' and
   13831      `BPOSGE64' instructions are excluded from relaxation, because they
   13832      have no complementing counterparts.  They could be relaxed with
   13833      the use of a longer sequence involving another branch, however
   13834      this has not been implemented and if their target turns out of
   13835      reach, they produce an error even if branch relaxation is enabled.
   13836 
   13837      Also no MIPS16 branches are ever relaxed.
   13838 
   13839      By default `--no-relax-branch' is selected, causing any
   13840      out-of-range branches to produce an error.
   13841 
   13842 `-mnan=ENCODING'
   13843      This option indicates whether the source code uses the IEEE 2008
   13844      NaN encoding (`-mnan=2008') or the original MIPS encoding
   13845      (`-mnan=legacy').  It is equivalent to adding a `.nan' directive
   13846      to the beginning of the source file.  *Note MIPS NaN Encodings::.
   13847 
   13848      `-mnan=legacy' is the default if no `-mnan' option or `.nan'
   13849      directive is used.
   13850 
   13851 `--trap'
   13852 `--no-break'
   13853      `as' automatically macro expands certain division and
   13854      multiplication instructions to check for overflow and division by
   13855      zero.  This option causes `as' to generate code to take a trap
   13856      exception rather than a break exception when an error is detected.
   13857      The trap instructions are only supported at Instruction Set
   13858      Architecture level 2 and higher.
   13859 
   13860 `--break'
   13861 `--no-trap'
   13862      Generate code to take a break exception rather than a trap
   13863      exception when an error is detected.  This is the default.
   13864 
   13865 `-mpdr'
   13866 `-mno-pdr'
   13867      Control generation of `.pdr' sections.  Off by default on IRIX, on
   13868      elsewhere.
   13869 
   13870 `-mshared'
   13871 `-mno-shared'
   13872      When generating code using the Unix calling conventions (selected
   13873      by `-KPIC' or `-mcall_shared'), gas will normally generate code
   13874      which can go into a shared library.  The `-mno-shared' option
   13875      tells gas to generate code which uses the calling convention, but
   13876      can not go into a shared library.  The resulting code is slightly
   13877      more efficient.  This option only affects the handling of the
   13878      `.cpload' and `.cpsetup' pseudo-ops.
   13879 
   13880 
   13881 File: as.info,  Node: MIPS Macros,  Next: MIPS Symbol Sizes,  Prev: MIPS Options,  Up: MIPS-Dependent
   13882 
   13883 9.27.2 High-level assembly macros
   13884 ---------------------------------
   13885 
   13886 MIPS assemblers have traditionally provided a wider range of
   13887 instructions than the MIPS architecture itself.  These extra
   13888 instructions are usually referred to as "macro" instructions (1).
   13889 
   13890    Some MIPS macro instructions extend an underlying architectural
   13891 instruction while others are entirely new.  An example of the former
   13892 type is `and', which allows the third operand to be either a register
   13893 or an arbitrary immediate value.  Examples of the latter type include
   13894 `bgt', which branches to the third operand when the first operand is
   13895 greater than the second operand, and `ulh', which implements an
   13896 unaligned 2-byte load.
   13897 
   13898    One of the most common extensions provided by macros is to expand
   13899 memory offsets to the full address range (32 or 64 bits) and to allow
   13900 symbolic offsets such as `my_data + 4' to be used in place of integer
   13901 constants.  For example, the architectural instruction `lbu' allows
   13902 only a signed 16-bit offset, whereas the macro `lbu' allows code such
   13903 as `lbu $4,array+32769($5)'.  The implementation of these symbolic
   13904 offsets depends on several factors, such as whether the assembler is
   13905 generating SVR4-style PIC (selected by `-KPIC', *note Assembler
   13906 options: MIPS Options.), the size of symbols (*note Directives to
   13907 override the size of symbols: MIPS Symbol Sizes.), and the small data
   13908 limit (*note Controlling the use of small data accesses: MIPS Small
   13909 Data.).
   13910 
   13911    Sometimes it is undesirable to have one assembly instruction expand
   13912 to several machine instructions.  The directive `.set nomacro' tells
   13913 the assembler to warn when this happens.  `.set macro' restores the
   13914 default behavior.
   13915 
   13916    Some macro instructions need a temporary register to store
   13917 intermediate results.  This register is usually `$1', also known as
   13918 `$at', but it can be changed to any core register REG using `.set
   13919 at=REG'.  Note that `$at' always refers to `$1' regardless of which
   13920 register is being used as the temporary register.
   13921 
   13922    Implicit uses of the temporary register in macros could interfere
   13923 with explicit uses in the assembly code.  The assembler therefore warns
   13924 whenever it sees an explicit use of the temporary register.  The
   13925 directive `.set noat' silences this warning while `.set at' restores
   13926 the default behavior.  It is safe to use `.set noat' while `.set
   13927 nomacro' is in effect since single-instruction macros never need a
   13928 temporary register.
   13929 
   13930    Note that while the GNU assembler provides these macros for
   13931 compatibility, it does not make any attempt to optimize them with the
   13932 surrounding code.
   13933 
   13934    ---------- Footnotes ----------
   13935 
   13936    (1) The term "macro" is somewhat overloaded here, since these macros
   13937 have no relation to those defined by `.macro', *note `.macro': Macro.
   13938 
   13939 
   13940 File: as.info,  Node: MIPS Symbol Sizes,  Next: MIPS Small Data,  Prev: MIPS Macros,  Up: MIPS-Dependent
   13941 
   13942 9.27.3 Directives to override the size of symbols
   13943 -------------------------------------------------
   13944 
   13945 The n64 ABI allows symbols to have any 64-bit value.  Although this
   13946 provides a great deal of flexibility, it means that some macros have
   13947 much longer expansions than their 32-bit counterparts.  For example,
   13948 the non-PIC expansion of `dla $4,sym' is usually:
   13949 
   13950      lui     $4,%highest(sym)
   13951      lui     $1,%hi(sym)
   13952      daddiu  $4,$4,%higher(sym)
   13953      daddiu  $1,$1,%lo(sym)
   13954      dsll32  $4,$4,0
   13955      daddu   $4,$4,$1
   13956 
   13957    whereas the 32-bit expansion is simply:
   13958 
   13959      lui     $4,%hi(sym)
   13960      daddiu  $4,$4,%lo(sym)
   13961 
   13962    n64 code is sometimes constructed in such a way that all symbolic
   13963 constants are known to have 32-bit values, and in such cases, it's
   13964 preferable to use the 32-bit expansion instead of the 64-bit expansion.
   13965 
   13966    You can use the `.set sym32' directive to tell the assembler that,
   13967 from this point on, all expressions of the form `SYMBOL' or `SYMBOL +
   13968 OFFSET' have 32-bit values.  For example:
   13969 
   13970      .set sym32
   13971      dla     $4,sym
   13972      lw      $4,sym+16
   13973      sw      $4,sym+0x8000($4)
   13974 
   13975    will cause the assembler to treat `sym', `sym+16' and `sym+0x8000'
   13976 as 32-bit values.  The handling of non-symbolic addresses is not
   13977 affected.
   13978 
   13979    The directive `.set nosym32' ends a `.set sym32' block and reverts
   13980 to the normal behavior.  It is also possible to change the symbol size
   13981 using the command-line options `-msym32' and `-mno-sym32'.
   13982 
   13983    These options and directives are always accepted, but at present,
   13984 they have no effect for anything other than n64.
   13985 
   13986 
   13987 File: as.info,  Node: MIPS Small Data,  Next: MIPS ISA,  Prev: MIPS Symbol Sizes,  Up: MIPS-Dependent
   13988 
   13989 9.27.4 Controlling the use of small data accesses
   13990 -------------------------------------------------
   13991 
   13992 It often takes several instructions to load the address of a symbol.
   13993 For example, when `addr' is a 32-bit symbol, the non-PIC expansion of
   13994 `dla $4,addr' is usually:
   13995 
   13996      lui     $4,%hi(addr)
   13997      daddiu  $4,$4,%lo(addr)
   13998 
   13999    The sequence is much longer when `addr' is a 64-bit symbol.  *Note
   14000 Directives to override the size of symbols: MIPS Symbol Sizes.
   14001 
   14002    In order to cut down on this overhead, most embedded MIPS systems
   14003 set aside a 64-kilobyte "small data" area and guarantee that all data
   14004 of size N and smaller will be placed in that area.  The limit N is
   14005 passed to both the assembler and the linker using the command-line
   14006 option `-G N', *note Assembler options: MIPS Options.  Note that the
   14007 same value of N must be used when linking and when assembling all input
   14008 files to the link; any inconsistency could cause a relocation overflow
   14009 error.
   14010 
   14011    The size of an object in the `.bss' section is set by the `.comm' or
   14012 `.lcomm' directive that defines it.  The size of an external object may
   14013 be set with the `.extern' directive.  For example, `.extern sym,4'
   14014 declares that the object at `sym' is 4 bytes in length, while leaving
   14015 `sym' otherwise undefined.
   14016 
   14017    When no `-G' option is given, the default limit is 8 bytes.  The
   14018 option `-G 0' prevents any data from being automatically classified as
   14019 small.
   14020 
   14021    It is also possible to mark specific objects as small by putting them
   14022 in the special sections `.sdata' and `.sbss', which are "small"
   14023 counterparts of `.data' and `.bss' respectively.  The toolchain will
   14024 treat such data as small regardless of the `-G' setting.
   14025 
   14026    On startup, systems that support a small data area are expected to
   14027 initialize register `$28', also known as `$gp', in such a way that
   14028 small data can be accessed using a 16-bit offset from that register.
   14029 For example, when `addr' is small data, the `dla $4,addr' instruction
   14030 above is equivalent to:
   14031 
   14032      daddiu  $4,$28,%gp_rel(addr)
   14033 
   14034    Small data is not supported for SVR4-style PIC.
   14035 
   14036 
   14037 File: as.info,  Node: MIPS ISA,  Next: MIPS assembly options,  Prev: MIPS Small Data,  Up: MIPS-Dependent
   14038 
   14039 9.27.5 Directives to override the ISA level
   14040 -------------------------------------------
   14041 
   14042 GNU `as' supports an additional directive to change the MIPS
   14043 Instruction Set Architecture level on the fly: `.set mipsN'.  N should
   14044 be a number from 0 to 5, or 32, 32r2, 32r3, 32r5, 32r6, 64, 64r2, 64r3,
   14045 64r5 or 64r6.  The values other than 0 make the assembler accept
   14046 instructions for the corresponding ISA level, from that point on in the
   14047 assembly.  `.set mipsN' affects not only which instructions are
   14048 permitted, but also how certain macros are expanded.  `.set mips0'
   14049 restores the ISA level to its original level: either the level you
   14050 selected with command line options, or the default for your
   14051 configuration.  You can use this feature to permit specific MIPS III
   14052 instructions while assembling in 32 bit mode.  Use this directive with
   14053 care!
   14054 
   14055    The `.set arch=CPU' directive provides even finer control.  It
   14056 changes the effective CPU target and allows the assembler to use
   14057 instructions specific to a particular CPU.  All CPUs supported by the
   14058 `-march' command line option are also selectable by this directive.
   14059 The original value is restored by `.set arch=default'.
   14060 
   14061    The directive `.set mips16' puts the assembler into MIPS 16 mode, in
   14062 which it will assemble instructions for the MIPS 16 processor.  Use
   14063 `.set nomips16' to return to normal 32 bit mode.
   14064 
   14065    Traditional MIPS assemblers do not support this directive.
   14066 
   14067    The directive `.set micromips' puts the assembler into microMIPS
   14068 mode, in which it will assemble instructions for the microMIPS
   14069 processor.  Use `.set nomicromips' to return to normal 32 bit mode.
   14070 
   14071    Traditional MIPS assemblers do not support this directive.
   14072 
   14073 
   14074 File: as.info,  Node: MIPS assembly options,  Next: MIPS autoextend,  Prev: MIPS ISA,  Up: MIPS-Dependent
   14075 
   14076 9.27.6 Directives to control code generation
   14077 --------------------------------------------
   14078 
   14079 The `.module' directive allows command line options to be set directly
   14080 from assembly.  The format of the directive matches the `.set'
   14081 directive but only those options which are relevant to a whole module
   14082 are supported.  The effect of a `.module' directive is the same as the
   14083 corresponding command line option.  Where `.set' directives support
   14084 returning to a default then the `.module' directives do not as they
   14085 define the defaults.
   14086 
   14087    These module-level directives must appear first in assembly.
   14088 
   14089    Traditional MIPS assemblers do not support this directive.
   14090 
   14091    The directive `.set insn32' makes the assembler only use 32-bit
   14092 instruction encodings when generating code for the microMIPS processor.
   14093 This directive inhibits the use of any 16-bit instructions from that
   14094 point on in the assembly.  The `.set noinsn32' directive allows 16-bit
   14095 instructions to be accepted.
   14096 
   14097    Traditional MIPS assemblers do not support this directive.
   14098 
   14099 
   14100 File: as.info,  Node: MIPS autoextend,  Next: MIPS insn,  Prev: MIPS assembly options,  Up: MIPS-Dependent
   14101 
   14102 9.27.7 Directives for extending MIPS 16 bit instructions
   14103 --------------------------------------------------------
   14104 
   14105 By default, MIPS 16 instructions are automatically extended to 32 bits
   14106 when necessary.  The directive `.set noautoextend' will turn this off.
   14107 When `.set noautoextend' is in effect, any 32 bit instruction must be
   14108 explicitly extended with the `.e' modifier (e.g., `li.e $4,1000').  The
   14109 directive `.set autoextend' may be used to once again automatically
   14110 extend instructions when necessary.
   14111 
   14112    This directive is only meaningful when in MIPS 16 mode.  Traditional
   14113 MIPS assemblers do not support this directive.
   14114 
   14115 
   14116 File: as.info,  Node: MIPS insn,  Next: MIPS FP ABIs,  Prev: MIPS autoextend,  Up: MIPS-Dependent
   14117 
   14118 9.27.8 Directive to mark data as an instruction
   14119 -----------------------------------------------
   14120 
   14121 The `.insn' directive tells `as' that the following data is actually
   14122 instructions.  This makes a difference in MIPS 16 and microMIPS modes:
   14123 when loading the address of a label which precedes instructions, `as'
   14124 automatically adds 1 to the value, so that jumping to the loaded
   14125 address will do the right thing.
   14126 
   14127    The `.global' and `.globl' directives supported by `as' will by
   14128 default mark the symbol as pointing to a region of data not code.  This
   14129 means that, for example, any instructions following such a symbol will
   14130 not be disassembled by `objdump' as it will regard them as data.  To
   14131 change this behavior an optional section name can be placed after the
   14132 symbol name in the `.global' directive.  If this section exists and is
   14133 known to be a code section, then the symbol will be marked as pointing
   14134 at code not data.  Ie the syntax for the directive is:
   14135 
   14136    `.global SYMBOL[ SECTION][, SYMBOL[ SECTION]] ...',
   14137 
   14138    Here is a short example:
   14139 
   14140              .global foo .text, bar, baz .data
   14141      foo:
   14142              nop
   14143      bar:
   14144              .word 0x0
   14145      baz:
   14146              .word 0x1
   14147 
   14148 
   14149 File: as.info,  Node: MIPS FP ABIs,  Next: MIPS NaN Encodings,  Prev: MIPS insn,  Up: MIPS-Dependent
   14150 
   14151 9.27.9 Directives to control the FP ABI
   14152 ---------------------------------------
   14153 
   14154 * Menu:
   14155 
   14156 * MIPS FP ABI History::                History of FP ABIs
   14157 * MIPS FP ABI Variants::               Supported FP ABIs
   14158 * MIPS FP ABI Selection::              Automatic selection of FP ABI
   14159 * MIPS FP ABI Compatibility::          Linking different FP ABI variants
   14160 
   14161 
   14162 File: as.info,  Node: MIPS FP ABI History,  Next: MIPS FP ABI Variants,  Up: MIPS FP ABIs
   14163 
   14164 9.27.9.1 History of FP ABIs
   14165 ...........................
   14166 
   14167 The MIPS ABIs support a variety of different floating-point extensions
   14168 where calling-convention and register sizes vary for floating-point
   14169 data.  The extensions exist to support a wide variety of optional
   14170 architecture features.  The resulting ABI variants are generally
   14171 incompatible with each other and must be tracked carefully.
   14172 
   14173    Traditionally the use of an explicit `.gnu_attribute 4, N' directive
   14174 is used to indicate which ABI is in use by a specific module.  It was
   14175 then left to the user to ensure that command line options and the
   14176 selected ABI were compatible with some potential for inconsistencies.
   14177 
   14178 
   14179 File: as.info,  Node: MIPS FP ABI Variants,  Next: MIPS FP ABI Selection,  Prev: MIPS FP ABI History,  Up: MIPS FP ABIs
   14180 
   14181 9.27.9.2 Supported FP ABIs
   14182 ..........................
   14183 
   14184 The supported floating-point ABI variants are:
   14185 
   14186 `0 - No floating-point'
   14187      This variant is used to indicate that floating-point is not used
   14188      within the module at all and therefore has no impact on the ABI.
   14189      This is the default.
   14190 
   14191 `1 - Double-precision'
   14192      This variant indicates that double-precision support is used.  For
   14193      64-bit ABIs this means that 64-bit wide floating-point registers
   14194      are required.  For 32-bit ABIs this means that 32-bit wide
   14195      floating-point registers are required and double-precision
   14196      operations use pairs of registers.
   14197 
   14198 `2 - Single-precision'
   14199      This variant indicates that single-precision support is used.
   14200      Double precision operations will be supported via soft-float
   14201      routines.
   14202 
   14203 `3 - Soft-float'
   14204      This variant indicates that although floating-point support is
   14205      used all operations are emulated in software.  This means the ABI
   14206      is modified to pass all floating-point data in general-purpose
   14207      registers.
   14208 
   14209 `4 - Deprecated'
   14210      This variant existed as an initial attempt at supporting 64-bit
   14211      wide floating-point registers for O32 ABI on a MIPS32r2 CPU.  This
   14212      has been superseded by 5, 6 and 7.
   14213 
   14214 `5 - Double-precision 32-bit CPU, 32-bit or 64-bit FPU'
   14215      This variant is used by 32-bit ABIs to indicate that the
   14216      floating-point code in the module has been designed to operate
   14217      correctly with either 32-bit wide or 64-bit wide floating-point
   14218      registers.  Double-precision support is used.  Only O32 currently
   14219      supports this variant and requires a minimum architecture of MIPS
   14220      II.
   14221 
   14222 `6 - Double-precision 32-bit FPU, 64-bit FPU'
   14223      This variant is used by 32-bit ABIs to indicate that the
   14224      floating-point code in the module requires 64-bit wide
   14225      floating-point registers.  Double-precision support is used.  Only
   14226      O32 currently supports this variant and requires a minimum
   14227      architecture of MIPS32r2.
   14228 
   14229 `7 - Double-precision compat 32-bit FPU, 64-bit FPU'
   14230      This variant is used by 32-bit ABIs to indicate that the
   14231      floating-point code in the module requires 64-bit wide
   14232      floating-point registers.  Double-precision support is used.  This
   14233      differs from the previous ABI as it restricts use of odd-numbered
   14234      single-precision registers.  Only O32 currently supports this
   14235      variant and requires a minimum architecture of MIPS32r2.
   14236 
   14237 
   14238 File: as.info,  Node: MIPS FP ABI Selection,  Next: MIPS FP ABI Compatibility,  Prev: MIPS FP ABI Variants,  Up: MIPS FP ABIs
   14239 
   14240 9.27.9.3 Automatic selection of FP ABI
   14241 ......................................
   14242 
   14243 In order to simplify and add safety to the process of selecting the
   14244 correct floating-point ABI, the assembler will automatically infer the
   14245 correct `.gnu_attribute 4, N' directive based on command line options
   14246 and `.module' overrides.  Where an explicit `.gnu_attribute 4, N'
   14247 directive has been seen then a warning will be raised if it does not
   14248 match an inferred setting.
   14249 
   14250    The floating-point ABI is inferred as follows.  If `-msoft-float'
   14251 has been used the module will be marked as soft-float.  If
   14252 `-msingle-float' has been used then the module will be marked as
   14253 single-precision.  The remaining ABIs are then selected based on the FP
   14254 register width.  Double-precision is selected if the width of GP and FP
   14255 registers match and the special double-precision variants for 32-bit
   14256 ABIs are then selected depending on `-mfpxx', `-mfp64' and
   14257 `-mno-odd-spreg'.
   14258 
   14259 
   14260 File: as.info,  Node: MIPS FP ABI Compatibility,  Prev: MIPS FP ABI Selection,  Up: MIPS FP ABIs
   14261 
   14262 9.27.9.4 Linking different FP ABI variants
   14263 ..........................................
   14264 
   14265 Modules using the default FP ABI (no floating-point) can be linked with
   14266 any other (singular) FP ABI variant.
   14267 
   14268    Special compatibility support exists for O32 with the four
   14269 double-precision FP ABI variants.  The `-mfpxx' FP ABI is specifically
   14270 designed to be compatible with the standard double-precision ABI and the
   14271 `-mfp64' FP ABIs.  This makes it desirable for O32 modules to be built
   14272 as `-mfpxx' to ensure the maximum compatibility with other modules
   14273 produced for more specific needs.  The only FP ABIs which cannot be
   14274 linked together are the standard double-precision ABI and the full
   14275 `-mfp64' ABI with `-modd-spreg'.
   14276 
   14277 
   14278 File: as.info,  Node: MIPS NaN Encodings,  Next: MIPS Option Stack,  Prev: MIPS FP ABIs,  Up: MIPS-Dependent
   14279 
   14280 9.27.10 Directives to record which NaN encoding is being used
   14281 -------------------------------------------------------------
   14282 
   14283 The IEEE 754 floating-point standard defines two types of not-a-number
   14284 (NaN) data: "signalling" NaNs and "quiet" NaNs.  The original version
   14285 of the standard did not specify how these two types should be
   14286 distinguished.  Most implementations followed the i387 model, in which
   14287 the first bit of the significand is set for quiet NaNs and clear for
   14288 signalling NaNs.  However, the original MIPS implementation assigned the
   14289 opposite meaning to the bit, so that it was set for signalling NaNs and
   14290 clear for quiet NaNs.
   14291 
   14292    The 2008 revision of the standard formally suggested the i387 choice
   14293 and as from Sep 2012 the current release of the MIPS architecture
   14294 therefore optionally supports that form.  Code that uses one NaN
   14295 encoding would usually be incompatible with code that uses the other
   14296 NaN encoding, so MIPS ELF objects have a flag (`EF_MIPS_NAN2008') to
   14297 record which encoding is being used.
   14298 
   14299    Assembly files can use the `.nan' directive to select between the
   14300 two encodings.  `.nan 2008' says that the assembly file uses the IEEE
   14301 754-2008 encoding while `.nan legacy' says that the file uses the
   14302 original MIPS encoding.  If several `.nan' directives are given, the
   14303 final setting is the one that is used.
   14304 
   14305    The command-line options `-mnan=legacy' and `-mnan=2008' can be used
   14306 instead of `.nan legacy' and `.nan 2008' respectively.  However, any
   14307 `.nan' directive overrides the command-line setting.
   14308 
   14309    `.nan legacy' is the default if no `.nan' directive or `-mnan'
   14310 option is given.
   14311 
   14312    Note that GNU `as' does not produce NaNs itself and therefore these
   14313 directives do not affect code generation.  They simply control the
   14314 setting of the `EF_MIPS_NAN2008' flag.
   14315 
   14316    Traditional MIPS assemblers do not support these directives.
   14317 
   14318 
   14319 File: as.info,  Node: MIPS Option Stack,  Next: MIPS ASE Instruction Generation Overrides,  Prev: MIPS NaN Encodings,  Up: MIPS-Dependent
   14320 
   14321 9.27.11 Directives to save and restore options
   14322 ----------------------------------------------
   14323 
   14324 The directives `.set push' and `.set pop' may be used to save and
   14325 restore the current settings for all the options which are controlled
   14326 by `.set'.  The `.set push' directive saves the current settings on a
   14327 stack.  The `.set pop' directive pops the stack and restores the
   14328 settings.
   14329 
   14330    These directives can be useful inside an macro which must change an
   14331 option such as the ISA level or instruction reordering but does not want
   14332 to change the state of the code which invoked the macro.
   14333 
   14334    Traditional MIPS assemblers do not support these directives.
   14335 
   14336 
   14337 File: as.info,  Node: MIPS ASE Instruction Generation Overrides,  Next: MIPS Floating-Point,  Prev: MIPS Option Stack,  Up: MIPS-Dependent
   14338 
   14339 9.27.12 Directives to control generation of MIPS ASE instructions
   14340 -----------------------------------------------------------------
   14341 
   14342 The directive `.set mips3d' makes the assembler accept instructions
   14343 from the MIPS-3D Application Specific Extension from that point on in
   14344 the assembly.  The `.set nomips3d' directive prevents MIPS-3D
   14345 instructions from being accepted.
   14346 
   14347    The directive `.set smartmips' makes the assembler accept
   14348 instructions from the SmartMIPS Application Specific Extension to the
   14349 MIPS32 ISA from that point on in the assembly.  The `.set nosmartmips'
   14350 directive prevents SmartMIPS instructions from being accepted.
   14351 
   14352    The directive `.set mdmx' makes the assembler accept instructions
   14353 from the MDMX Application Specific Extension from that point on in the
   14354 assembly.  The `.set nomdmx' directive prevents MDMX instructions from
   14355 being accepted.
   14356 
   14357    The directive `.set dsp' makes the assembler accept instructions
   14358 from the DSP Release 1 Application Specific Extension from that point
   14359 on in the assembly.  The `.set nodsp' directive prevents DSP Release 1
   14360 instructions from being accepted.
   14361 
   14362    The directive `.set dspr2' makes the assembler accept instructions
   14363 from the DSP Release 2 Application Specific Extension from that point
   14364 on in the assembly.  This directive implies `.set dsp'.  The `.set
   14365 nodspr2' directive prevents DSP Release 2 instructions from being
   14366 accepted.
   14367 
   14368    The directive `.set mt' makes the assembler accept instructions from
   14369 the MT Application Specific Extension from that point on in the
   14370 assembly.  The `.set nomt' directive prevents MT instructions from
   14371 being accepted.
   14372 
   14373    The directive `.set mcu' makes the assembler accept instructions
   14374 from the MCU Application Specific Extension from that point on in the
   14375 assembly.  The `.set nomcu' directive prevents MCU instructions from
   14376 being accepted.
   14377 
   14378    The directive `.set msa' makes the assembler accept instructions
   14379 from the MIPS SIMD Architecture Extension from that point on in the
   14380 assembly.  The `.set nomsa' directive prevents MSA instructions from
   14381 being accepted.
   14382 
   14383    The directive `.set virt' makes the assembler accept instructions
   14384 from the Virtualization Application Specific Extension from that point
   14385 on in the assembly.  The `.set novirt' directive prevents Virtualization
   14386 instructions from being accepted.
   14387 
   14388    The directive `.set xpa' makes the assembler accept instructions
   14389 from the XPA Extension from that point on in the assembly.  The `.set
   14390 noxpa' directive prevents XPA instructions from being accepted.
   14391 
   14392    Traditional MIPS assemblers do not support these directives.
   14393 
   14394 
   14395 File: as.info,  Node: MIPS Floating-Point,  Next: MIPS Syntax,  Prev: MIPS ASE Instruction Generation Overrides,  Up: MIPS-Dependent
   14396 
   14397 9.27.13 Directives to override floating-point options
   14398 -----------------------------------------------------
   14399 
   14400 The directives `.set softfloat' and `.set hardfloat' provide finer
   14401 control of disabling and enabling float-point instructions.  These
   14402 directives always override the default (that hard-float instructions
   14403 are accepted) or the command-line options (`-msoft-float' and
   14404 `-mhard-float').
   14405 
   14406    The directives `.set singlefloat' and `.set doublefloat' provide
   14407 finer control of disabling and enabling double-precision float-point
   14408 operations.  These directives always override the default (that
   14409 double-precision operations are accepted) or the command-line options
   14410 (`-msingle-float' and `-mdouble-float').
   14411 
   14412    Traditional MIPS assemblers do not support these directives.
   14413 
   14414 
   14415 File: as.info,  Node: MIPS Syntax,  Prev: MIPS Floating-Point,  Up: MIPS-Dependent
   14416 
   14417 9.27.14 Syntactical considerations for the MIPS assembler
   14418 ---------------------------------------------------------
   14419 
   14420 * Menu:
   14421 
   14422 * MIPS-Chars::                Special Characters
   14423 
   14424 
   14425 File: as.info,  Node: MIPS-Chars,  Up: MIPS Syntax
   14426 
   14427 9.27.14.1 Special Characters
   14428 ............................
   14429 
   14430 The presence of a `#' on a line indicates the start of a comment that
   14431 extends to the end of the current line.
   14432 
   14433    If a `#' appears as the first character of a line, the whole line is
   14434 treated as a comment, but in this case the line can also be a logical
   14435 line number directive (*note Comments::) or a preprocessor control
   14436 command (*note Preprocessing::).
   14437 
   14438    The `;' character can be used to separate statements on the same
   14439 line.
   14440 
   14441 
   14442 File: as.info,  Node: MMIX-Dependent,  Next: MSP430-Dependent,  Prev: MIPS-Dependent,  Up: Machine Dependencies
   14443 
   14444 9.28 MMIX Dependent Features
   14445 ============================
   14446 
   14447 * Menu:
   14448 
   14449 * MMIX-Opts::              Command-line Options
   14450 * MMIX-Expand::            Instruction expansion
   14451 * MMIX-Syntax::            Syntax
   14452 * MMIX-mmixal::		   Differences to `mmixal' syntax and semantics
   14453 
   14454 
   14455 File: as.info,  Node: MMIX-Opts,  Next: MMIX-Expand,  Up: MMIX-Dependent
   14456 
   14457 9.28.1 Command-line Options
   14458 ---------------------------
   14459 
   14460 The MMIX version of `as' has some machine-dependent options.
   14461 
   14462    When `--fixed-special-register-names' is specified, only the register
   14463 names specified in *Note MMIX-Regs:: are recognized in the instructions
   14464 `PUT' and `GET'.
   14465 
   14466    You can use the `--globalize-symbols' to make all symbols global.
   14467 This option is useful when splitting up a `mmixal' program into several
   14468 files.
   14469 
   14470    The `--gnu-syntax' turns off most syntax compatibility with
   14471 `mmixal'.  Its usability is currently doubtful.
   14472 
   14473    The `--relax' option is not fully supported, but will eventually make
   14474 the object file prepared for linker relaxation.
   14475 
   14476    If you want to avoid inadvertently calling a predefined symbol and
   14477 would rather get an error, for example when using `as' with a compiler
   14478 or other machine-generated code, specify `--no-predefined-syms'.  This
   14479 turns off built-in predefined definitions of all such symbols,
   14480 including rounding-mode symbols, segment symbols, `BIT' symbols, and
   14481 `TRAP' symbols used in `mmix' "system calls".  It also turns off
   14482 predefined special-register names, except when used in `PUT' and `GET'
   14483 instructions.
   14484 
   14485    By default, some instructions are expanded to fit the size of the
   14486 operand or an external symbol (*note MMIX-Expand::).  By passing
   14487 `--no-expand', no such expansion will be done, instead causing errors
   14488 at link time if the operand does not fit.
   14489 
   14490    The `mmixal' documentation (*note mmixsite::) specifies that global
   14491 registers allocated with the `GREG' directive (*note MMIX-greg::) and
   14492 initialized to the same non-zero value, will refer to the same global
   14493 register.  This isn't strictly enforceable in `as' since the final
   14494 addresses aren't known until link-time, but it will do an effort unless
   14495 the `--no-merge-gregs' option is specified.  (Register merging isn't
   14496 yet implemented in `ld'.)
   14497 
   14498    `as' will warn every time it expands an instruction to fit an
   14499 operand unless the option `-x' is specified.  It is believed that this
   14500 behaviour is more useful than just mimicking `mmixal''s behaviour, in
   14501 which instructions are only expanded if the `-x' option is specified,
   14502 and assembly fails otherwise, when an instruction needs to be expanded.
   14503 It needs to be kept in mind that `mmixal' is both an assembler and
   14504 linker, while `as' will expand instructions that at link stage can be
   14505 contracted.  (Though linker relaxation isn't yet implemented in `ld'.)
   14506 The option `-x' also imples `--linker-allocated-gregs'.
   14507 
   14508    If instruction expansion is enabled, `as' can expand a `PUSHJ'
   14509 instruction into a series of instructions.  The shortest expansion is
   14510 to not expand it, but just mark the call as redirectable to a stub,
   14511 which `ld' creates at link-time, but only if the original `PUSHJ'
   14512 instruction is found not to reach the target.  The stub consists of the
   14513 necessary instructions to form a jump to the target.  This happens if
   14514 `as' can assert that the `PUSHJ' instruction can reach such a stub.
   14515 The option `--no-pushj-stubs' disables this shorter expansion, and the
   14516 longer series of instructions is then created at assembly-time.  The
   14517 option `--no-stubs' is a synonym, intended for compatibility with
   14518 future releases, where generation of stubs for other instructions may
   14519 be implemented.
   14520 
   14521    Usually a two-operand-expression (*note GREG-base::) without a
   14522 matching `GREG' directive is treated as an error by `as'.  When the
   14523 option `--linker-allocated-gregs' is in effect, they are instead passed
   14524 through to the linker, which will allocate as many global registers as
   14525 is needed.
   14526 
   14527 
   14528 File: as.info,  Node: MMIX-Expand,  Next: MMIX-Syntax,  Prev: MMIX-Opts,  Up: MMIX-Dependent
   14529 
   14530 9.28.2 Instruction expansion
   14531 ----------------------------
   14532 
   14533 When `as' encounters an instruction with an operand that is either not
   14534 known or does not fit the operand size of the instruction, `as' (and
   14535 `ld') will expand the instruction into a sequence of instructions
   14536 semantically equivalent to the operand fitting the instruction.
   14537 Expansion will take place for the following instructions:
   14538 
   14539 `GETA'
   14540      Expands to a sequence of four instructions: `SETL', `INCML',
   14541      `INCMH' and `INCH'.  The operand must be a multiple of four.
   14542 
   14543 Conditional branches
   14544      A branch instruction is turned into a branch with the complemented
   14545      condition and prediction bit over five instructions; four
   14546      instructions setting `$255' to the operand value, which like with
   14547      `GETA' must be a multiple of four, and a final `GO $255,$255,0'.
   14548 
   14549 `PUSHJ'
   14550      Similar to expansion for conditional branches; four instructions
   14551      set `$255' to the operand value, followed by a `PUSHGO
   14552      $255,$255,0'.
   14553 
   14554 `JMP'
   14555      Similar to conditional branches and `PUSHJ'.  The final instruction
   14556      is `GO $255,$255,0'.
   14557 
   14558    The linker `ld' is expected to shrink these expansions for code
   14559 assembled with `--relax' (though not currently implemented).
   14560 
   14561 
   14562 File: as.info,  Node: MMIX-Syntax,  Next: MMIX-mmixal,  Prev: MMIX-Expand,  Up: MMIX-Dependent
   14563 
   14564 9.28.3 Syntax
   14565 -------------
   14566 
   14567 The assembly syntax is supposed to be upward compatible with that
   14568 described in Sections 1.3 and 1.4 of `The Art of Computer Programming,
   14569 Volume 1'.  Draft versions of those chapters as well as other MMIX
   14570 information is located at
   14571 `http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html'.  Most code
   14572 examples from the mmixal package located there should work unmodified
   14573 when assembled and linked as single files, with a few noteworthy
   14574 exceptions (*note MMIX-mmixal::).
   14575 
   14576    Before an instruction is emitted, the current location is aligned to
   14577 the next four-byte boundary.  If a label is defined at the beginning of
   14578 the line, its value will be the aligned value.
   14579 
   14580    In addition to the traditional hex-prefix `0x', a hexadecimal number
   14581 can also be specified by the prefix character `#'.
   14582 
   14583    After all operands to an MMIX instruction or directive have been
   14584 specified, the rest of the line is ignored, treated as a comment.
   14585 
   14586 * Menu:
   14587 
   14588 * MMIX-Chars::		        Special Characters
   14589 * MMIX-Symbols::		Symbols
   14590 * MMIX-Regs::			Register Names
   14591 * MMIX-Pseudos::		Assembler Directives
   14592 
   14593 
   14594 File: as.info,  Node: MMIX-Chars,  Next: MMIX-Symbols,  Up: MMIX-Syntax
   14595 
   14596 9.28.3.1 Special Characters
   14597 ...........................
   14598 
   14599 The characters `*' and `#' are line comment characters; each start a
   14600 comment at the beginning of a line, but only at the beginning of a
   14601 line.  A `#' prefixes a hexadecimal number if found elsewhere on a
   14602 line.  If a `#' appears at the start of a line the whole line is
   14603 treated as a comment, but the line can also act as a logical line
   14604 number directive (*note Comments::) or a preprocessor control command
   14605 (*note Preprocessing::).
   14606 
   14607    Two other characters, `%' and `!', each start a comment anywhere on
   14608 the line.  Thus you can't use the `modulus' and `not' operators in
   14609 expressions normally associated with these two characters.
   14610 
   14611    A `;' is a line separator, treated as a new-line, so separate
   14612 instructions can be specified on a single line.
   14613 
   14614 
   14615 File: as.info,  Node: MMIX-Symbols,  Next: MMIX-Regs,  Prev: MMIX-Chars,  Up: MMIX-Syntax
   14616 
   14617 9.28.3.2 Symbols
   14618 ................
   14619 
   14620 The character `:' is permitted in identifiers.  There are two
   14621 exceptions to it being treated as any other symbol character: if a
   14622 symbol begins with `:', it means that the symbol is in the global
   14623 namespace and that the current prefix should not be prepended to that
   14624 symbol (*note MMIX-prefix::).  The `:' is then not considered part of
   14625 the symbol.  For a symbol in the label position (first on a line), a `:'
   14626 at the end of a symbol is silently stripped off.  A label is permitted,
   14627 but not required, to be followed by a `:', as with many other assembly
   14628 formats.
   14629 
   14630    The character `@' in an expression, is a synonym for `.', the
   14631 current location.
   14632 
   14633    In addition to the common forward and backward local symbol formats
   14634 (*note Symbol Names::), they can be specified with upper-case `B' and
   14635 `F', as in `8B' and `9F'.  A local label defined for the current
   14636 position is written with a `H' appended to the number:
   14637      3H LDB $0,$1,2
   14638    This and traditional local-label formats cannot be mixed: a label
   14639 must be defined and referred to using the same format.
   14640 
   14641    There's a minor caveat: just as for the ordinary local symbols, the
   14642 local symbols are translated into ordinary symbols using control
   14643 characters are to hide the ordinal number of the symbol.
   14644 Unfortunately, these symbols are not translated back in error messages.
   14645 Thus you may see confusing error messages when local symbols are used.
   14646 Control characters `\003' (control-C) and `\004' (control-D) are used
   14647 for the MMIX-specific local-symbol syntax.
   14648 
   14649    The symbol `Main' is handled specially; it is always global.
   14650 
   14651    By defining the symbols `__.MMIX.start..text' and
   14652 `__.MMIX.start..data', the address of respectively the `.text' and
   14653 `.data' segments of the final program can be defined, though when
   14654 linking more than one object file, the code or data in the object file
   14655 containing the symbol is not guaranteed to be start at that position;
   14656 just the final executable.  *Note MMIX-loc::.
   14657 
   14658 
   14659 File: as.info,  Node: MMIX-Regs,  Next: MMIX-Pseudos,  Prev: MMIX-Symbols,  Up: MMIX-Syntax
   14660 
   14661 9.28.3.3 Register names
   14662 .......................
   14663 
   14664 Local and global registers are specified as `$0' to `$255'.  The
   14665 recognized special register names are `rJ', `rA', `rB', `rC', `rD',
   14666 `rE', `rF', `rG', `rH', `rI', `rK', `rL', `rM', `rN', `rO', `rP', `rQ',
   14667 `rR', `rS', `rT', `rU', `rV', `rW', `rX', `rY', `rZ', `rBB', `rTT',
   14668 `rWW', `rXX', `rYY' and `rZZ'.  A leading `:' is optional for special
   14669 register names.
   14670 
   14671    Local and global symbols can be equated to register names and used in
   14672 place of ordinary registers.
   14673 
   14674    Similarly for special registers, local and global symbols can be
   14675 used.  Also, symbols equated from numbers and constant expressions are
   14676 allowed in place of a special register, except when either of the
   14677 options `--no-predefined-syms' and `--fixed-special-register-names' are
   14678 specified.  Then only the special register names above are allowed for
   14679 the instructions having a special register operand; `GET' and `PUT'.
   14680 
   14681 
   14682 File: as.info,  Node: MMIX-Pseudos,  Prev: MMIX-Regs,  Up: MMIX-Syntax
   14683 
   14684 9.28.3.4 Assembler Directives
   14685 .............................
   14686 
   14687 `LOC'
   14688      The `LOC' directive sets the current location to the value of the
   14689      operand field, which may include changing sections.  If the
   14690      operand is a constant, the section is set to either `.data' if the
   14691      value is `0x2000000000000000' or larger, else it is set to `.text'.
   14692      Within a section, the current location may only be changed to
   14693      monotonically higher addresses.  A LOC expression must be a
   14694      previously defined symbol or a "pure" constant.
   14695 
   14696      An example, which sets the label PREV to the current location, and
   14697      updates the current location to eight bytes forward:
   14698           prev LOC @+8
   14699 
   14700      When a LOC has a constant as its operand, a symbol
   14701      `__.MMIX.start..text' or `__.MMIX.start..data' is defined
   14702      depending on the address as mentioned above.  Each such symbol is
   14703      interpreted as special by the linker, locating the section at that
   14704      address.  Note that if multiple files are linked, the first object
   14705      file with that section will be mapped to that address (not
   14706      necessarily the file with the LOC definition).
   14707 
   14708 `LOCAL'
   14709      Example:
   14710            LOCAL external_symbol
   14711            LOCAL 42
   14712            .local asymbol
   14713 
   14714      This directive-operation generates a link-time assertion that the
   14715      operand does not correspond to a global register.  The operand is
   14716      an expression that at link-time resolves to a register symbol or a
   14717      number.  A number is treated as the register having that number.
   14718      There is one restriction on the use of this directive: the
   14719      pseudo-directive must be placed in a section with contents, code
   14720      or data.
   14721 
   14722 `IS'
   14723      The `IS' directive:
   14724           asymbol IS an_expression
   14725      sets the symbol `asymbol' to `an_expression'.  A symbol may not be
   14726      set more than once using this directive.  Local labels may be set
   14727      using this directive, for example:
   14728           5H IS @+4
   14729 
   14730 `GREG'
   14731      This directive reserves a global register, gives it an initial
   14732      value and optionally gives it a symbolic name.  Some examples:
   14733 
   14734           areg GREG
   14735           breg GREG data_value
   14736                GREG data_buffer
   14737                .greg creg, another_data_value
   14738 
   14739      The symbolic register name can be used in place of a (non-special)
   14740      register.  If a value isn't provided, it defaults to zero.  Unless
   14741      the option `--no-merge-gregs' is specified, non-zero registers
   14742      allocated with this directive may be eliminated by `as'; another
   14743      register with the same value used in its place.  Any of the
   14744      instructions `CSWAP', `GO', `LDA', `LDBU', `LDB', `LDHT', `LDOU',
   14745      `LDO', `LDSF', `LDTU', `LDT', `LDUNC', `LDVTS', `LDWU', `LDW',
   14746      `PREGO', `PRELD', `PREST', `PUSHGO', `STBU', `STB', `STCO', `STHT',
   14747      `STOU', `STSF', `STTU', `STT', `STUNC', `SYNCD', `SYNCID', can
   14748      have a value nearby an initial value in place of its second and
   14749      third operands.  Here, "nearby" is defined as within the range
   14750      0...255 from the initial value of such an allocated register.
   14751 
   14752           buffer1 BYTE 0,0,0,0,0
   14753           buffer2 BYTE 0,0,0,0,0
   14754            ...
   14755            GREG buffer1
   14756            LDOU $42,buffer2
   14757      In the example above, the `Y' field of the `LDOUI' instruction
   14758      (LDOU with a constant Z) will be replaced with the global register
   14759      allocated for `buffer1', and the `Z' field will have the value 5,
   14760      the offset from `buffer1' to `buffer2'.  The result is equivalent
   14761      to this code:
   14762           buffer1 BYTE 0,0,0,0,0
   14763           buffer2 BYTE 0,0,0,0,0
   14764            ...
   14765           tmpreg GREG buffer1
   14766            LDOU $42,tmpreg,(buffer2-buffer1)
   14767 
   14768      Global registers allocated with this directive are allocated in
   14769      order higher-to-lower within a file.  Other than that, the exact
   14770      order of register allocation and elimination is undefined.  For
   14771      example, the order is undefined when more than one file with such
   14772      directives are linked together.  With the options `-x' and
   14773      `--linker-allocated-gregs', `GREG' directives for two-operand
   14774      cases like the one mentioned above can be omitted.  Sufficient
   14775      global registers will then be allocated by the linker.
   14776 
   14777 `BYTE'
   14778      The `BYTE' directive takes a series of operands separated by a
   14779      comma.  If an operand is a string (*note Strings::), each
   14780      character of that string is emitted as a byte.  Other operands
   14781      must be constant expressions without forward references, in the
   14782      range 0...255.  If you need operands having expressions with
   14783      forward references, use `.byte' (*note Byte::).  An operand can be
   14784      omitted, defaulting to a zero value.
   14785 
   14786 `WYDE'
   14787 `TETRA'
   14788 `OCTA'
   14789      The directives `WYDE', `TETRA' and `OCTA' emit constants of two,
   14790      four and eight bytes size respectively.  Before anything else
   14791      happens for the directive, the current location is aligned to the
   14792      respective constant-size boundary.  If a label is defined at the
   14793      beginning of the line, its value will be that after the alignment.
   14794      A single operand can be omitted, defaulting to a zero value
   14795      emitted for the directive.  Operands can be expressed as strings
   14796      (*note Strings::), in which case each character in the string is
   14797      emitted as a separate constant of the size indicated by the
   14798      directive.
   14799 
   14800 `PREFIX'
   14801      The `PREFIX' directive sets a symbol name prefix to be prepended to
   14802      all symbols (except local symbols, *note MMIX-Symbols::), that are
   14803      not prefixed with `:', until the next `PREFIX' directive.  Such
   14804      prefixes accumulate.  For example,
   14805            PREFIX a
   14806            PREFIX b
   14807           c IS 0
   14808      defines a symbol `abc' with the value 0.
   14809 
   14810 `BSPEC'
   14811 `ESPEC'
   14812      A pair of `BSPEC' and `ESPEC' directives delimit a section of
   14813      special contents (without specified semantics).  Example:
   14814            BSPEC 42
   14815            TETRA 1,2,3
   14816            ESPEC
   14817      The single operand to `BSPEC' must be number in the range 0...255.
   14818      The `BSPEC' number 80 is used by the GNU binutils implementation.
   14819 
   14820 
   14821 File: as.info,  Node: MMIX-mmixal,  Prev: MMIX-Syntax,  Up: MMIX-Dependent
   14822 
   14823 9.28.4 Differences to `mmixal'
   14824 ------------------------------
   14825 
   14826 The binutils `as' and `ld' combination has a few differences in
   14827 function compared to `mmixal' (*note mmixsite::).
   14828 
   14829    The replacement of a symbol with a GREG-allocated register (*note
   14830 GREG-base::) is not handled the exactly same way in `as' as in
   14831 `mmixal'.  This is apparent in the `mmixal' example file `inout.mms',
   14832 where different registers with different offsets, eventually yielding
   14833 the same address, are used in the first instruction.  This type of
   14834 difference should however not affect the function of any program unless
   14835 it has specific assumptions about the allocated register number.
   14836 
   14837    Line numbers (in the `mmo' object format) are currently not
   14838 supported.
   14839 
   14840    Expression operator precedence is not that of mmixal: operator
   14841 precedence is that of the C programming language.  It's recommended to
   14842 use parentheses to explicitly specify wanted operator precedence
   14843 whenever more than one type of operators are used.
   14844 
   14845    The serialize unary operator `&', the fractional division operator
   14846 `//', the logical not operator `!' and the modulus operator `%' are not
   14847 available.
   14848 
   14849    Symbols are not global by default, unless the option
   14850 `--globalize-symbols' is passed.  Use the `.global' directive to
   14851 globalize symbols (*note Global::).
   14852 
   14853    Operand syntax is a bit stricter with `as' than `mmixal'.  For
   14854 example, you can't say `addu 1,2,3', instead you must write `addu
   14855 $1,$2,3'.
   14856 
   14857    You can't LOC to a lower address than those already visited (i.e.,
   14858 "backwards").
   14859 
   14860    A LOC directive must come before any emitted code.
   14861 
   14862    Predefined symbols are visible as file-local symbols after use.  (In
   14863 the ELF file, that is--the linked mmo file has no notion of a file-local
   14864 symbol.)
   14865 
   14866    Some mapping of constant expressions to sections in LOC expressions
   14867 is attempted, but that functionality is easily confused and should be
   14868 avoided unless compatibility with `mmixal' is required.  A LOC
   14869 expression to `0x2000000000000000' or higher, maps to the `.data'
   14870 section and lower addresses map to the `.text' section (*note
   14871 MMIX-loc::).
   14872 
   14873    The code and data areas are each contiguous.  Sparse programs with
   14874 far-away LOC directives will take up the same amount of space as a
   14875 contiguous program with zeros filled in the gaps between the LOC
   14876 directives.  If you need sparse programs, you might try and get the
   14877 wanted effect with a linker script and splitting up the code parts into
   14878 sections (*note Section::).  Assembly code for this, to be compatible
   14879 with `mmixal', would look something like:
   14880       .if 0
   14881       LOC away_expression
   14882       .else
   14883       .section away,"ax"
   14884       .fi
   14885    `as' will not execute the LOC directive and `mmixal' ignores the
   14886 lines with `.'.  This construct can be used generally to help
   14887 compatibility.
   14888 
   14889    Symbols can't be defined twice-not even to the same value.
   14890 
   14891    Instruction mnemonics are recognized case-insensitive, though the
   14892 `IS' and `GREG' pseudo-operations must be specified in upper-case
   14893 characters.
   14894 
   14895    There's no unicode support.
   14896 
   14897    The following is a list of programs in `mmix.tar.gz', available at
   14898 `http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html', last
   14899 checked with the version dated 2001-08-25 (md5sum
   14900 c393470cfc86fac040487d22d2bf0172) that assemble with `mmixal' but do
   14901 not assemble with `as':
   14902 
   14903 `silly.mms'
   14904      LOC to a previous address.
   14905 
   14906 `sim.mms'
   14907      Redefines symbol `Done'.
   14908 
   14909 `test.mms'
   14910      Uses the serial operator `&'.
   14911 
   14912 
   14913 File: as.info,  Node: MSP430-Dependent,  Next: NDS32-Dependent,  Prev: MMIX-Dependent,  Up: Machine Dependencies
   14914 
   14915 9.29 MSP 430 Dependent Features
   14916 ===============================
   14917 
   14918 * Menu:
   14919 
   14920 * MSP430 Options::              Options
   14921 * MSP430 Syntax::               Syntax
   14922 * MSP430 Floating Point::       Floating Point
   14923 * MSP430 Directives::           MSP 430 Machine Directives
   14924 * MSP430 Opcodes::              Opcodes
   14925 * MSP430 Profiling Capability::	Profiling Capability
   14926 
   14927 
   14928 File: as.info,  Node: MSP430 Options,  Next: MSP430 Syntax,  Up: MSP430-Dependent
   14929 
   14930 9.29.1 Options
   14931 --------------
   14932 
   14933 `-mmcu'
   14934      selects the mcu architecture.  If the architecture is 430Xv2 then
   14935      this also enables NOP generation unless the `-mN' is also
   14936      specified.
   14937 
   14938 `-mcpu'
   14939      selects the cpu architecture.  If the architecture is 430Xv2 then
   14940      this also enables NOP generation unless the `-mN' is also
   14941      specified.
   14942 
   14943 `-mP'
   14944      enables polymorph instructions handler.
   14945 
   14946 `-mQ'
   14947      enables relaxation at assembly time. DANGEROUS!
   14948 
   14949 `-ml'
   14950      indicates that the input uses the large code model.
   14951 
   14952 `-mn'
   14953      enables the generation of a NOP instruction following any
   14954      instruction that might change the interrupts enabled/disabled
   14955      state.  The pipelined nature of the MSP430 core means that any
   14956      instruction that changes the interrupt state (`EINT', `DINT', `BIC
   14957      #8, SR', `BIS #8, SR' or `MOV.W <>, SR') must be followed by a NOP
   14958      instruction in order to ensure the correct processing of
   14959      interrupts.  By default it is up to the programmer to supply these
   14960      NOP instructions, but this command line option enables the
   14961      automatic insertion by the assembler, if they are missing.
   14962 
   14963 `-mN'
   14964      disables the generation of a NOP instruction following any
   14965      instruction that might change the interrupts enabled/disabled
   14966      state.  This is the default behaviour.
   14967 
   14968 `-my'
   14969      tells the assembler to generate a warning message if a NOP does not
   14970      immediately forllow an instruction that enables or disables
   14971      interrupts.  This is the default.
   14972 
   14973      Note that this option can be stacked with the `-mn' option so that
   14974      the assembler will both warn about missing NOP instructions and
   14975      then insert them automatically.
   14976 
   14977 `-mY'
   14978      disables warnings about missing NOP instructions.
   14979 
   14980 `-md'
   14981      mark the object file as one that requires data to copied from ROM
   14982      to RAM at execution startup.  Disabled by default.
   14983 
   14984 
   14985 
   14986 File: as.info,  Node: MSP430 Syntax,  Next: MSP430 Floating Point,  Prev: MSP430 Options,  Up: MSP430-Dependent
   14987 
   14988 9.29.2 Syntax
   14989 -------------
   14990 
   14991 * Menu:
   14992 
   14993 * MSP430-Macros::		Macros
   14994 * MSP430-Chars::                Special Characters
   14995 * MSP430-Regs::                 Register Names
   14996 * MSP430-Ext::			Assembler Extensions
   14997 
   14998 
   14999 File: as.info,  Node: MSP430-Macros,  Next: MSP430-Chars,  Up: MSP430 Syntax
   15000 
   15001 9.29.2.1 Macros
   15002 ...............
   15003 
   15004 The macro syntax used on the MSP 430 is like that described in the MSP
   15005 430 Family Assembler Specification.  Normal `as' macros should still
   15006 work.
   15007 
   15008    Additional built-in macros are:
   15009 
   15010 `llo(exp)'
   15011      Extracts least significant word from 32-bit expression 'exp'.
   15012 
   15013 `lhi(exp)'
   15014      Extracts most significant word from 32-bit expression 'exp'.
   15015 
   15016 `hlo(exp)'
   15017      Extracts 3rd word from 64-bit expression 'exp'.
   15018 
   15019 `hhi(exp)'
   15020      Extracts 4rd word from 64-bit expression 'exp'.
   15021 
   15022 
   15023    They normally being used as an immediate source operand.
   15024          mov	#llo(1), r10	;	== mov	#1, r10
   15025          mov	#lhi(1), r10	;	== mov	#0, r10
   15026 
   15027 
   15028 File: as.info,  Node: MSP430-Chars,  Next: MSP430-Regs,  Prev: MSP430-Macros,  Up: MSP430 Syntax
   15029 
   15030 9.29.2.2 Special Characters
   15031 ...........................
   15032 
   15033 A semicolon (`;') appearing anywhere on a line starts a comment that
   15034 extends to the end of that line.
   15035 
   15036    If a `#' appears as the first character of a line then the whole
   15037 line is treated as a comment, but it can also be a logical line number
   15038 directive (*note Comments::) or a preprocessor control command (*note
   15039 Preprocessing::).
   15040 
   15041    Multiple statements can appear on the same line provided that they
   15042 are separated by the `{' character.
   15043 
   15044    The character `$' in jump instructions indicates current location and
   15045 implemented only for TI syntax compatibility.
   15046 
   15047 
   15048 File: as.info,  Node: MSP430-Regs,  Next: MSP430-Ext,  Prev: MSP430-Chars,  Up: MSP430 Syntax
   15049 
   15050 9.29.2.3 Register Names
   15051 .......................
   15052 
   15053 General-purpose registers are represented by predefined symbols of the
   15054 form `rN' (for global registers), where N represents a number between
   15055 `0' and `15'.  The leading letters may be in either upper or lower
   15056 case; for example, `r13' and `R7' are both valid register names.
   15057 
   15058    Register names `PC', `SP' and `SR' cannot be used as register names
   15059 and will be treated as variables. Use `r0', `r1', and `r2' instead.
   15060 
   15061 
   15062 File: as.info,  Node: MSP430-Ext,  Prev: MSP430-Regs,  Up: MSP430 Syntax
   15063 
   15064 9.29.2.4 Assembler Extensions
   15065 .............................
   15066 
   15067 `@rN'
   15068      As destination operand being treated as `0(rn)'
   15069 
   15070 `0(rN)'
   15071      As source operand being treated as `@rn'
   15072 
   15073 `jCOND +N'
   15074      Skips next N bytes followed by jump instruction and equivalent to
   15075      `jCOND $+N+2'
   15076 
   15077 
   15078    Also, there are some instructions, which cannot be found in other
   15079 assemblers.  These are branch instructions, which has different opcodes
   15080 upon jump distance.  They all got PC relative addressing mode.
   15081 
   15082 `beq label'
   15083      A polymorph instruction which is `jeq label' in case if jump
   15084      distance within allowed range for cpu's jump instruction. If not,
   15085      this unrolls into a sequence of
   15086             jne $+6
   15087             br  label
   15088 
   15089 `bne label'
   15090      A polymorph instruction which is `jne label' or `jeq +4; br label'
   15091 
   15092 `blt label'
   15093      A polymorph instruction which is `jl label' or `jge +4; br label'
   15094 
   15095 `bltn label'
   15096      A polymorph instruction which is `jn label' or `jn +2; jmp +4; br
   15097      label'
   15098 
   15099 `bltu label'
   15100      A polymorph instruction which is `jlo label' or `jhs +2; br label'
   15101 
   15102 `bge label'
   15103      A polymorph instruction which is `jge label' or `jl +4; br label'
   15104 
   15105 `bgeu label'
   15106      A polymorph instruction which is `jhs label' or `jlo +4; br label'
   15107 
   15108 `bgt label'
   15109      A polymorph instruction which is `jeq +2; jge label' or `jeq +6;
   15110      jl  +4; br label'
   15111 
   15112 `bgtu label'
   15113      A polymorph instruction which is `jeq +2; jhs label' or `jeq +6;
   15114      jlo +4; br label'
   15115 
   15116 `bleu label'
   15117      A polymorph instruction which is `jeq label; jlo label' or `jeq
   15118      +2; jhs +4; br label'
   15119 
   15120 `ble label'
   15121      A polymorph instruction which is `jeq label; jl  label' or `jeq
   15122      +2; jge +4; br label'
   15123 
   15124 `jump label'
   15125      A polymorph instruction which is `jmp label' or `br label'
   15126 
   15127 
   15128 File: as.info,  Node: MSP430 Floating Point,  Next: MSP430 Directives,  Prev: MSP430 Syntax,  Up: MSP430-Dependent
   15129 
   15130 9.29.3 Floating Point
   15131 ---------------------
   15132 
   15133 The MSP 430 family uses IEEE 32-bit floating-point numbers.
   15134 
   15135 
   15136 File: as.info,  Node: MSP430 Directives,  Next: MSP430 Opcodes,  Prev: MSP430 Floating Point,  Up: MSP430-Dependent
   15137 
   15138 9.29.4 MSP 430 Machine Directives
   15139 ---------------------------------
   15140 
   15141 `.file'
   15142      This directive is ignored; it is accepted for compatibility with
   15143      other MSP 430 assemblers.
   15144 
   15145           _Warning:_ in other versions of the GNU assembler, `.file' is
   15146           used for the directive called `.app-file' in the MSP 430
   15147           support.
   15148 
   15149 `.line'
   15150      This directive is ignored; it is accepted for compatibility with
   15151      other MSP 430 assemblers.
   15152 
   15153 `.arch'
   15154      Sets the target microcontroller in the same way as the `-mmcu'
   15155      command line option.
   15156 
   15157 `.cpu'
   15158      Sets the target architecture in the same way as the `-mcpu'
   15159      command line option.
   15160 
   15161 `.profiler'
   15162      This directive instructs assembler to add new profile entry to the
   15163      object file.
   15164 
   15165 `.refsym'
   15166      This directive instructs assembler to add an undefined reference to
   15167      the symbol following the directive.  The maximum symbol name
   15168      length is 1023 characters.  No relocation is created for this
   15169      symbol; it will exist purely for pulling in object files from
   15170      archives.  Note that this reloc is not sufficient to prevent
   15171      garbage collection; use a KEEP() directive in the linker file to
   15172      preserve such objects.
   15173 
   15174 
   15175 
   15176 File: as.info,  Node: MSP430 Opcodes,  Next: MSP430 Profiling Capability,  Prev: MSP430 Directives,  Up: MSP430-Dependent
   15177 
   15178 9.29.5 Opcodes
   15179 --------------
   15180 
   15181 `as' implements all the standard MSP 430 opcodes.  No additional
   15182 pseudo-instructions are needed on this family.
   15183 
   15184    For information on the 430 machine instruction set, see `MSP430
   15185 User's Manual, document slau049d', Texas Instrument, Inc.
   15186 
   15187 
   15188 File: as.info,  Node: MSP430 Profiling Capability,  Prev: MSP430 Opcodes,  Up: MSP430-Dependent
   15189 
   15190 9.29.6 Profiling Capability
   15191 ---------------------------
   15192 
   15193 It is a performance hit to use gcc's profiling approach for this tiny
   15194 target.  Even more - jtag hardware facility does not perform any
   15195 profiling functions.  However we've got gdb's built-in simulator where
   15196 we can do anything.
   15197 
   15198    We define new section `.profiler' which holds all profiling
   15199 information.  We define new pseudo operation `.profiler' which will
   15200 instruct assembler to add new profile entry to the object file. Profile
   15201 should take place at the present address.
   15202 
   15203    Pseudo operation format:
   15204 
   15205    `.profiler flags,function_to_profile [, cycle_corrector, extra]'
   15206 
   15207    where:
   15208 
   15209           `flags' is a combination of the following characters:
   15210 
   15211     `s'
   15212           function entry
   15213 
   15214     `x'
   15215           function exit
   15216 
   15217     `i'
   15218           function is in init section
   15219 
   15220     `f'
   15221           function is in fini section
   15222 
   15223     `l'
   15224           library call
   15225 
   15226     `c'
   15227           libc standard call
   15228 
   15229     `d'
   15230           stack value demand
   15231 
   15232     `I'
   15233           interrupt service routine
   15234 
   15235     `P'
   15236           prologue start
   15237 
   15238     `p'
   15239           prologue end
   15240 
   15241     `E'
   15242           epilogue start
   15243 
   15244     `e'
   15245           epilogue end
   15246 
   15247     `j'
   15248           long jump / sjlj unwind
   15249 
   15250     `a'
   15251           an arbitrary code fragment
   15252 
   15253     `t'
   15254           extra parameter saved (a constant value like frame size)
   15255 
   15256 `function_to_profile'
   15257      a function address
   15258 
   15259 `cycle_corrector'
   15260      a value which should be added to the cycle counter, zero if
   15261      omitted.
   15262 
   15263 `extra'
   15264      any extra parameter, zero if omitted.
   15265 
   15266 
   15267    For example:
   15268      .global fxx
   15269      .type fxx,@function
   15270      fxx:
   15271      .LFrameOffset_fxx=0x08
   15272      .profiler "scdP", fxx     ; function entry.
   15273      			  ; we also demand stack value to be saved
   15274        push r11
   15275        push r10
   15276        push r9
   15277        push r8
   15278      .profiler "cdpt",fxx,0, .LFrameOffset_fxx  ; check stack value at this point
   15279      					  ; (this is a prologue end)
   15280      					  ; note, that spare var filled with
   15281      					  ; the farme size
   15282        mov r15,r8
   15283      ...
   15284      .profiler cdE,fxx         ; check stack
   15285        pop r8
   15286        pop r9
   15287        pop r10
   15288        pop r11
   15289      .profiler xcde,fxx,3      ; exit adds 3 to the cycle counter
   15290        ret                     ; cause 'ret' insn takes 3 cycles
   15291 
   15292 
   15293 File: as.info,  Node: NDS32-Dependent,  Next: NiosII-Dependent,  Prev: MSP430-Dependent,  Up: Machine Dependencies
   15294 
   15295 9.30 NDS32 Dependent Features
   15296 =============================
   15297 
   15298    The NDS32 processors family includes high-performance and low-power
   15299 32-bit processors for high-end to low-end.  GNU `as' for NDS32
   15300 architectures supports NDS32 ISA version 3.  For detail about NDS32
   15301 instruction set, please see the AndeStar ISA User Manual which is
   15302 availible at http://www.andestech.com/en/index/index.htm
   15303 
   15304 * Menu:
   15305 
   15306 * NDS32 Options::         Assembler options
   15307 * NDS32 Syntax::          High-level assembly macros
   15308 
   15309 
   15310 File: as.info,  Node: NDS32 Options,  Next: NDS32 Syntax,  Up: NDS32-Dependent
   15311 
   15312 9.30.1 NDS32 Options
   15313 --------------------
   15314 
   15315 The NDS32 configurations of GNU `as' support these special options:
   15316 
   15317 `-O1'
   15318      Optimize for performance.
   15319 
   15320 `-Os'
   15321      Optimize for space.
   15322 
   15323 `-EL'
   15324      Produce little endian data output.
   15325 
   15326 `-EB'
   15327      Produce little endian data output.
   15328 
   15329 `-mpic'
   15330      Generate PIC.
   15331 
   15332 `-mno-fp-as-gp-relax'
   15333      Suppress fp-as-gp relaxation for this file.
   15334 
   15335 `-mb2bb-relax'
   15336      Back-to-back branch optimization.
   15337 
   15338 `-mno-all-relax'
   15339      Suppress all relaxation for this file.
   15340 
   15341 `-march=<arch name>'
   15342      Assemble for architecture <arch name> which could be v3, v3j, v3m,
   15343      v3f, v3s, v2, v2j, v2f, v2s.
   15344 
   15345 `-mbaseline=<baseline>'
   15346      Assemble for baseline <baseline> which could be v2, v3, v3m.
   15347 
   15348 `-mfpu-freg=FREG'
   15349      Specify a FPU configuration.
   15350     `0      8 SP /  4 DP registers'
   15351 
   15352     `1     16 SP /  8 DP registers'
   15353 
   15354     `2     32 SP / 16 DP registers'
   15355 
   15356     `3     32 SP / 32 DP registers'
   15357 
   15358 `-mabi=ABI'
   15359      Specify a abi version <abi> could be v1, v2, v2fp, v2fpp.
   15360 
   15361 `-m[no-]mac'
   15362      Enable/Disable Multiply instructions support.
   15363 
   15364 `-m[no-]div'
   15365      Enable/Disable Divide instructions support.
   15366 
   15367 `-m[no-]16bit-ext'
   15368      Enable/Disable 16-bit extension
   15369 
   15370 `-m[no-]dx-regs'
   15371      Enable/Disable d0/d1 registers
   15372 
   15373 `-m[no-]perf-ext'
   15374      Enable/Disable Performance extension
   15375 
   15376 `-m[no-]perf2-ext'
   15377      Enable/Disable Performance extension 2
   15378 
   15379 `-m[no-]string-ext'
   15380      Enable/Disable String extension
   15381 
   15382 `-m[no-]reduced-regs'
   15383      Enable/Disable Reduced Register configuration (GPR16) option
   15384 
   15385 `-m[no-]audio-isa-ext'
   15386      Enable/Disable AUDIO ISA extension
   15387 
   15388 `-m[no-]fpu-sp-ext'
   15389      Enable/Disable FPU SP extension
   15390 
   15391 `-m[no-]fpu-dp-ext'
   15392      Enable/Disable FPU DP extension
   15393 
   15394 `-m[no-]fpu-fma'
   15395      Enable/Disable FPU fused-multiply-add instructions
   15396 
   15397 `-mall-ext'
   15398      Turn on all extensions and instructions support
   15399 
   15400 
   15401 File: as.info,  Node: NDS32 Syntax,  Prev: NDS32 Options,  Up: NDS32-Dependent
   15402 
   15403 9.30.2 Syntax
   15404 -------------
   15405 
   15406 * Menu:
   15407 
   15408 * NDS32-Chars::                Special Characters
   15409 * NDS32-Regs::                 Register Names
   15410 * NDS32-Ops::                  Pseudo Instructions
   15411 
   15412 
   15413 File: as.info,  Node: NDS32-Chars,  Next: NDS32-Regs,  Up: NDS32 Syntax
   15414 
   15415 9.30.2.1 Special Characters
   15416 ...........................
   15417 
   15418 Use `#' at column 1 and `!' anywhere in the line except inside quotes.
   15419 
   15420    Multiple instructions in a line are allowed though not recommended
   15421 and should be separated by `;'.
   15422 
   15423    Assembler is not case-sensitive in general except user defined label.
   15424 For example, `jral F1' is different from `jral f1' while it is the same
   15425 as `JRAL F1'.
   15426 
   15427 
   15428 File: as.info,  Node: NDS32-Regs,  Next: NDS32-Ops,  Prev: NDS32-Chars,  Up: NDS32 Syntax
   15429 
   15430 9.30.2.2 Register Names
   15431 .......................
   15432 
   15433 `General purpose registers (GPR)'
   15434      There are 32 32-bit general purpose registers $r0 to $r31.
   15435 
   15436 `Accumulators d0 and d1'
   15437      64-bit accumulators: $d0.hi, $d0.lo, $d1.hi, and $d1.lo.
   15438 
   15439 `Assembler reserved register $ta'
   15440      Register $ta ($r15) is reserved for assembler using.
   15441 
   15442 `Operating system reserved registers $p0 and $p1'
   15443      Registers $p0 ($r26) and $p1 ($r27) are used by operating system
   15444      as scratch registers.
   15445 
   15446 `Frame pointer $fp'
   15447      Register $r28 is regarded as the frame pointer.
   15448 
   15449 `Global pointer'
   15450      Register $r29 is regarded as the global pointer.
   15451 
   15452 `Link pointer'
   15453      Register $r30 is regarded as the link pointer.
   15454 
   15455 `Stack pointer'
   15456      Register $r31 is regarded as the stack pointer.
   15457 
   15458 
   15459 File: as.info,  Node: NDS32-Ops,  Prev: NDS32-Regs,  Up: NDS32 Syntax
   15460 
   15461 9.30.2.3 Pseudo Instructions
   15462 ............................
   15463 
   15464 `li rt5,imm32'
   15465      load 32-bit integer into register rt5.  `sethi rt5,hi20(imm32)'
   15466      and then `ori rt5,reg,lo12(imm32)'.
   15467 
   15468 `la rt5,var'
   15469      Load 32-bit address of var into register rt5.  `sethi
   15470      rt5,hi20(var)' and then `ori reg,rt5,lo12(var)'
   15471 
   15472 `l.[bhw] rt5,var'
   15473      Load value of var into register rt5.  `sethi $ta,hi20(var)' and
   15474      then `l[bhw]i rt5,[$ta+lo12(var)]'
   15475 
   15476 `l.[bh]s rt5,var'
   15477      Load value of var into register rt5.  `sethi $ta,hi20(var)' and
   15478      then `l[bh]si rt5,[$ta+lo12(var)]'
   15479 
   15480 `l.[bhw]p rt5,var,inc'
   15481      Load value of var into register rt5 and increment $ta by amount
   15482      inc.  `la $ta,var' and then `l[bhw]i.bi rt5,[$ta],inc'
   15483 
   15484 `l.[bhw]pc rt5,inc'
   15485      Continue loading value of var into register rt5 and increment $ta
   15486      by amount inc.  `l[bhw]i.bi rt5,[$ta],inc.'
   15487 
   15488 `l.[bh]sp rt5,var,inc'
   15489      Load value of var into register rt5 and increment $ta by amount
   15490      inc.  `la $ta,var' and then `l[bh]si.bi rt5,[$ta],inc'
   15491 
   15492 `l.[bh]spc rt5,inc'
   15493      Continue loading value of var into register rt5 and increment $ta
   15494      by amount inc.  `l[bh]si.bi rt5,[$ta],inc.'
   15495 
   15496 `s.[bhw] rt5,var'
   15497      Store register rt5 to var.  `sethi $ta,hi20(var)' and then
   15498      `s[bhw]i rt5,[$ta+lo12(var)]'
   15499 
   15500 `s.[bhw]p rt5,var,inc'
   15501      Store register rt5 to var and increment $ta by amount inc.  `la
   15502      $ta,var' and then `s[bhw]i.bi rt5,[$ta],inc'
   15503 
   15504 `s.[bhw]pc rt5,inc'
   15505      Continue storing register rt5 to var and increment $ta by amount
   15506      inc.  `s[bhw]i.bi rt5,[$ta],inc.'
   15507 
   15508 `not rt5,ra5'
   15509      Alias of `nor rt5,ra5,ra5'.
   15510 
   15511 `neg rt5,ra5'
   15512      Alias of `subri rt5,ra5,0'.
   15513 
   15514 `br rb5'
   15515      Depending on how it is assembled, it is translated into `r5 rb5'
   15516      or `jr rb5'.
   15517 
   15518 `b label'
   15519      Branch to label depending on how it is assembled, it is translated
   15520      into `j8 label', `j label', or "`la $ta,label' `br $ta'".
   15521 
   15522 `bral rb5'
   15523      Alias of jral br5 depending on how it is assembled, it is
   15524      translated into `jral5 rb5' or `jral rb5'.
   15525 
   15526 `bal fname'
   15527      Alias of jal fname depending on how it is assembled, it is
   15528      translated into `jal fname' or "`la $ta,fname' `bral $ta'".
   15529 
   15530 `call fname'
   15531      Call function fname same as `jal fname'.
   15532 
   15533 `move rt5,ra5'
   15534      For 16-bit, this is `mov55 rt5,ra5'.  For no 16-bit, this is `ori
   15535      rt5,ra5,0'.
   15536 
   15537 `move rt5,var'
   15538      This is the same as `l.w rt5,var'.
   15539 
   15540 `move rt5,imm32'
   15541      This is the same as `li rt5,imm32'.
   15542 
   15543 `pushm ra5,rb5'
   15544      Push contents of registers from ra5 to rb5 into stack.
   15545 
   15546 `push ra5'
   15547      Push content of register ra5 into stack. (same `pushm ra5,ra5').
   15548 
   15549 `push.d var'
   15550      Push value of double-word variable var into stack.
   15551 
   15552 `push.w var'
   15553      Push value of word variable var into stack.
   15554 
   15555 `push.h var'
   15556      Push value of half-word variable var into stack.
   15557 
   15558 `push.b var'
   15559      Push value of byte variable var into stack.
   15560 
   15561 `pusha var'
   15562      Push 32-bit address of variable var into stack.
   15563 
   15564 `pushi imm32'
   15565      Push 32-bit immediate value into stack.
   15566 
   15567 `popm ra5,rb5'
   15568      Pop top of stack values into registers ra5 to rb5.
   15569 
   15570 `pop rt5'
   15571      Pop top of stack value into register. (same as `popm rt5,rt5'.)
   15572 
   15573 `pop.d var,ra5'
   15574      Pop value of double-word variable var from stack using register ra5
   15575      as 2nd scratch register. (1st is $ta)
   15576 
   15577 `pop.w var,ra5'
   15578      Pop value of word variable var from stack using register ra5.
   15579 
   15580 `pop.h var,ra5'
   15581      Pop value of half-word variable var from stack using register ra5.
   15582 
   15583 `pop.b var,ra5'
   15584      Pop value of byte variable var from stack using register ra5.
   15585 
   15586 
   15587 
   15588 File: as.info,  Node: NiosII-Dependent,  Next: NS32K-Dependent,  Prev: NDS32-Dependent,  Up: Machine Dependencies
   15589 
   15590 9.31 Nios II Dependent Features
   15591 ===============================
   15592 
   15593 * Menu:
   15594 
   15595 * Nios II Options::              Options
   15596 * Nios II Syntax::               Syntax
   15597 * Nios II Relocations::          Relocations
   15598 * Nios II Directives::           Nios II Machine Directives
   15599 * Nios II Opcodes::              Opcodes
   15600 
   15601 
   15602 File: as.info,  Node: Nios II Options,  Next: Nios II Syntax,  Up: NiosII-Dependent
   15603 
   15604 9.31.1 Options
   15605 --------------
   15606 
   15607 `-relax-section'
   15608      Replace identified out-of-range branches with PC-relative `jmp'
   15609      sequences when possible.  The generated code sequences are suitable
   15610      for use in position-independent code, but there is a practical
   15611      limit on the extended branch range because of the length of the
   15612      sequences.  This option is the default.
   15613 
   15614 `-relax-all'
   15615      Replace branch instructions not determinable to be in range and
   15616      all call instructions with `jmp' and `callr' sequences
   15617      (respectively).  This option generates absolute relocations
   15618      against the target symbols and is not appropriate for
   15619      position-independent code.
   15620 
   15621 `-no-relax'
   15622      Do not replace any branches or calls.
   15623 
   15624 `-EB'
   15625      Generate big-endian output.
   15626 
   15627 `-EL'
   15628      Generate little-endian output.  This is the default.
   15629 
   15630 
   15631 
   15632 File: as.info,  Node: Nios II Syntax,  Next: Nios II Relocations,  Prev: Nios II Options,  Up: NiosII-Dependent
   15633 
   15634 9.31.2 Syntax
   15635 -------------
   15636 
   15637 * Menu:
   15638 
   15639 * Nios II Chars::                Special Characters
   15640 
   15641 
   15642 File: as.info,  Node: Nios II Chars,  Up: Nios II Syntax
   15643 
   15644 9.31.2.1 Special Characters
   15645 ...........................
   15646 
   15647 `#' is the line comment character.  `;' is the line separator character.
   15648 
   15649 
   15650 File: as.info,  Node: Nios II Relocations,  Next: Nios II Directives,  Prev: Nios II Syntax,  Up: NiosII-Dependent
   15651 
   15652 9.31.3 Nios II Machine Relocations
   15653 ----------------------------------
   15654 
   15655 `%hiadj(EXPRESSION)'
   15656      Extract the upper 16 bits of EXPRESSION and add one if the 15th
   15657      bit is set.
   15658 
   15659      The value of `%hiadj(EXPRESSION)' is:
   15660           ((EXPRESSION >> 16) & 0xffff) + ((EXPRESSION >> 15) & 0x01)
   15661 
   15662      The `%hiadj' relocation is intended to be used with the `addi',
   15663      `ld' or `st' instructions along with a `%lo', in order to load a
   15664      32-bit constant.
   15665 
   15666           movhi r2, %hiadj(symbol)
   15667           addi r2, r2, %lo(symbol)
   15668 
   15669 `%hi(EXPRESSION)'
   15670      Extract the upper 16 bits of EXPRESSION.
   15671 
   15672 `%lo(EXPRESSION)'
   15673      Extract the lower 16 bits of EXPRESSION.
   15674 
   15675 `%gprel(EXPRESSION)'
   15676      Subtract the value of the symbol `_gp' from EXPRESSION.
   15677 
   15678      The intention of the `%gprel' relocation is to have a fast small
   15679      area of memory which only takes a 16-bit immediate to access.
   15680 
   15681           	.section .sdata
   15682           fastint:
   15683           	.int 123
   15684           	.section .text
   15685           	ldw r4, %gprel(fastint)(gp)
   15686 
   15687 `%call(EXPRESSION)'
   15688 
   15689 `%call_lo(EXPRESSION)'
   15690 
   15691 `%call_hiadj(EXPRESSION)'
   15692 `%got(EXPRESSION)'
   15693 `%got_lo(EXPRESSION)'
   15694 `%got_hiadj(EXPRESSION)'
   15695 `%gotoff(EXPRESSION)'
   15696 `%gotoff_lo(EXPRESSION)'
   15697 `%gotoff_hiadj(EXPRESSION)'
   15698 `%tls_gd(EXPRESSION)'
   15699 `%tls_ie(EXPRESSION)'
   15700 `%tls_le(EXPRESSION)'
   15701 `%tls_ldm(EXPRESSION)'
   15702 `%tls_ldo(EXPRESSION)'
   15703      These relocations support the ABI for Linux Systems documented in
   15704      the `Nios II Processor Reference Handbook'.
   15705 
   15706 
   15707 File: as.info,  Node: Nios II Directives,  Next: Nios II Opcodes,  Prev: Nios II Relocations,  Up: NiosII-Dependent
   15708 
   15709 9.31.4 Nios II Machine Directives
   15710 ---------------------------------
   15711 
   15712 `.align EXPRESSION [, EXPRESSION]'
   15713      This is the generic `.align' directive, however this aligns to a
   15714      power of two.
   15715 
   15716 `.half EXPRESSION'
   15717      Create an aligned constant 2 bytes in size.
   15718 
   15719 `.word EXPRESSION'
   15720      Create an aligned constant 4 bytes in size.
   15721 
   15722 `.dword EXPRESSION'
   15723      Create an aligned constant 8 bytes in size.
   15724 
   15725 `.2byte EXPRESSION'
   15726      Create an unaligned constant 2 bytes in size.
   15727 
   15728 `.4byte EXPRESSION'
   15729      Create an unaligned constant 4 bytes in size.
   15730 
   15731 `.8byte EXPRESSION'
   15732      Create an unaligned constant 8 bytes in size.
   15733 
   15734 `.16byte EXPRESSION'
   15735      Create an unaligned constant 16 bytes in size.
   15736 
   15737 `.set noat'
   15738      Allows assembly code to use `at' register without warning.  Macro
   15739      or relaxation expansions generate warnings.
   15740 
   15741 `.set at'
   15742      Assembly code using `at' register generates warnings, and macro
   15743      expansion and relaxation are enabled.
   15744 
   15745 `.set nobreak'
   15746      Allows assembly code to use `ba' and `bt' registers without
   15747      warning.
   15748 
   15749 `.set break'
   15750      Turns warnings back on for using `ba' and `bt' registers.
   15751 
   15752 `.set norelax'
   15753      Do not replace any branches or calls.
   15754 
   15755 `.set relaxsection'
   15756      Replace identified out-of-range branches with `jmp' sequences
   15757      (default).
   15758 
   15759 `.set relaxsection'
   15760      Replace all branch and call instructions with `jmp' and `callr'
   15761      sequences.
   15762 
   15763 `.set ...'
   15764      All other `.set' are the normal use.
   15765 
   15766 
   15767 
   15768 File: as.info,  Node: Nios II Opcodes,  Prev: Nios II Directives,  Up: NiosII-Dependent
   15769 
   15770 9.31.5 Opcodes
   15771 --------------
   15772 
   15773 `as' implements all the standard Nios II opcodes documented in the
   15774 `Nios II Processor Reference Handbook', including the assembler
   15775 pseudo-instructions.
   15776 
   15777 
   15778 File: as.info,  Node: NS32K-Dependent,  Next: SH-Dependent,  Prev: NiosII-Dependent,  Up: Machine Dependencies
   15779 
   15780 9.32 NS32K Dependent Features
   15781 =============================
   15782 
   15783 * Menu:
   15784 
   15785 * NS32K Syntax::               Syntax
   15786 
   15787 
   15788 File: as.info,  Node: NS32K Syntax,  Up: NS32K-Dependent
   15789 
   15790 9.32.1 Syntax
   15791 -------------
   15792 
   15793 * Menu:
   15794 
   15795 * NS32K-Chars::                Special Characters
   15796 
   15797 
   15798 File: as.info,  Node: NS32K-Chars,  Up: NS32K Syntax
   15799 
   15800 9.32.1.1 Special Characters
   15801 ...........................
   15802 
   15803 The presence of a `#' appearing anywhere on a line indicates the start
   15804 of a comment that extends to the end of that line.
   15805 
   15806    If a `#' appears as the first character of a line then the whole
   15807 line is treated as a comment, but in this case the line can also be a
   15808 logical line number directive (*note Comments::) or a preprocessor
   15809 control command (*note Preprocessing::).
   15810 
   15811    If Sequent compatibility has been configured into the assembler then
   15812 the `|' character appearing as the first character on a line will also
   15813 indicate the start of a line comment.
   15814 
   15815    The `;' character can be used to separate statements on the same
   15816 line.
   15817 
   15818 
   15819 File: as.info,  Node: PDP-11-Dependent,  Next: PJ-Dependent,  Prev: SH64-Dependent,  Up: Machine Dependencies
   15820 
   15821 9.33 PDP-11 Dependent Features
   15822 ==============================
   15823 
   15824 * Menu:
   15825 
   15826 * PDP-11-Options::		Options
   15827 * PDP-11-Pseudos::		Assembler Directives
   15828 * PDP-11-Syntax::		DEC Syntax versus BSD Syntax
   15829 * PDP-11-Mnemonics::		Instruction Naming
   15830 * PDP-11-Synthetic::		Synthetic Instructions
   15831 
   15832 
   15833 File: as.info,  Node: PDP-11-Options,  Next: PDP-11-Pseudos,  Up: PDP-11-Dependent
   15834 
   15835 9.33.1 Options
   15836 --------------
   15837 
   15838 The PDP-11 version of `as' has a rich set of machine dependent options.
   15839 
   15840 9.33.1.1 Code Generation Options
   15841 ................................
   15842 
   15843 `-mpic | -mno-pic'
   15844      Generate position-independent (or position-dependent) code.
   15845 
   15846      The default is to generate position-independent code.
   15847 
   15848 9.33.1.2 Instruction Set Extension Options
   15849 ..........................................
   15850 
   15851 These options enables or disables the use of extensions over the base
   15852 line instruction set as introduced by the first PDP-11 CPU: the KA11.
   15853 Most options come in two variants: a `-m'EXTENSION that enables
   15854 EXTENSION, and a `-mno-'EXTENSION that disables EXTENSION.
   15855 
   15856    The default is to enable all extensions.
   15857 
   15858 `-mall | -mall-extensions'
   15859      Enable all instruction set extensions.
   15860 
   15861 `-mno-extensions'
   15862      Disable all instruction set extensions.
   15863 
   15864 `-mcis | -mno-cis'
   15865      Enable (or disable) the use of the commercial instruction set,
   15866      which consists of these instructions: `ADDNI', `ADDN', `ADDPI',
   15867      `ADDP', `ASHNI', `ASHN', `ASHPI', `ASHP', `CMPCI', `CMPC',
   15868      `CMPNI', `CMPN', `CMPPI', `CMPP', `CVTLNI', `CVTLN', `CVTLPI',
   15869      `CVTLP', `CVTNLI', `CVTNL', `CVTNPI', `CVTNP', `CVTPLI', `CVTPL',
   15870      `CVTPNI', `CVTPN', `DIVPI', `DIVP', `L2DR', `L3DR', `LOCCI',
   15871      `LOCC', `MATCI', `MATC', `MOVCI', `MOVC', `MOVRCI', `MOVRC',
   15872      `MOVTCI', `MOVTC', `MULPI', `MULP', `SCANCI', `SCANC', `SKPCI',
   15873      `SKPC', `SPANCI', `SPANC', `SUBNI', `SUBN', `SUBPI', and `SUBP'.
   15874 
   15875 `-mcsm | -mno-csm'
   15876      Enable (or disable) the use of the `CSM' instruction.
   15877 
   15878 `-meis | -mno-eis'
   15879      Enable (or disable) the use of the extended instruction set, which
   15880      consists of these instructions: `ASHC', `ASH', `DIV', `MARK',
   15881      `MUL', `RTT', `SOB' `SXT', and `XOR'.
   15882 
   15883 `-mfis | -mkev11'
   15884 `-mno-fis | -mno-kev11'
   15885      Enable (or disable) the use of the KEV11 floating-point
   15886      instructions: `FADD', `FDIV', `FMUL', and `FSUB'.
   15887 
   15888 `-mfpp | -mfpu | -mfp-11'
   15889 `-mno-fpp | -mno-fpu | -mno-fp-11'
   15890      Enable (or disable) the use of FP-11 floating-point instructions:
   15891      `ABSF', `ADDF', `CFCC', `CLRF', `CMPF', `DIVF', `LDCFF', `LDCIF',
   15892      `LDEXP', `LDF', `LDFPS', `MODF', `MULF', `NEGF', `SETD', `SETF',
   15893      `SETI', `SETL', `STCFF', `STCFI', `STEXP', `STF', `STFPS', `STST',
   15894      `SUBF', and `TSTF'.
   15895 
   15896 `-mlimited-eis | -mno-limited-eis'
   15897      Enable (or disable) the use of the limited extended instruction
   15898      set: `MARK', `RTT', `SOB', `SXT', and `XOR'.
   15899 
   15900      The -mno-limited-eis options also implies -mno-eis.
   15901 
   15902 `-mmfpt | -mno-mfpt'
   15903      Enable (or disable) the use of the `MFPT' instruction.
   15904 
   15905 `-mmultiproc | -mno-multiproc'
   15906      Enable (or disable) the use of multiprocessor instructions:
   15907      `TSTSET' and `WRTLCK'.
   15908 
   15909 `-mmxps | -mno-mxps'
   15910      Enable (or disable) the use of the `MFPS' and `MTPS' instructions.
   15911 
   15912 `-mspl | -mno-spl'
   15913      Enable (or disable) the use of the `SPL' instruction.
   15914 
   15915      Enable (or disable) the use of the microcode instructions: `LDUB',
   15916      `MED', and `XFC'.
   15917 
   15918 9.33.1.3 CPU Model Options
   15919 ..........................
   15920 
   15921 These options enable the instruction set extensions supported by a
   15922 particular CPU, and disables all other extensions.
   15923 
   15924 `-mka11'
   15925      KA11 CPU.  Base line instruction set only.
   15926 
   15927 `-mkb11'
   15928      KB11 CPU.  Enable extended instruction set and `SPL'.
   15929 
   15930 `-mkd11a'
   15931      KD11-A CPU.  Enable limited extended instruction set.
   15932 
   15933 `-mkd11b'
   15934      KD11-B CPU.  Base line instruction set only.
   15935 
   15936 `-mkd11d'
   15937      KD11-D CPU.  Base line instruction set only.
   15938 
   15939 `-mkd11e'
   15940      KD11-E CPU.  Enable extended instruction set, `MFPS', and `MTPS'.
   15941 
   15942 `-mkd11f | -mkd11h | -mkd11q'
   15943      KD11-F, KD11-H, or KD11-Q CPU.  Enable limited extended
   15944      instruction set, `MFPS', and `MTPS'.
   15945 
   15946 `-mkd11k'
   15947      KD11-K CPU.  Enable extended instruction set, `LDUB', `MED',
   15948      `MFPS', `MFPT', `MTPS', and `XFC'.
   15949 
   15950 `-mkd11z'
   15951      KD11-Z CPU.  Enable extended instruction set, `CSM', `MFPS',
   15952      `MFPT', `MTPS', and `SPL'.
   15953 
   15954 `-mf11'
   15955      F11 CPU.  Enable extended instruction set, `MFPS', `MFPT', and
   15956      `MTPS'.
   15957 
   15958 `-mj11'
   15959      J11 CPU.  Enable extended instruction set, `CSM', `MFPS', `MFPT',
   15960      `MTPS', `SPL', `TSTSET', and `WRTLCK'.
   15961 
   15962 `-mt11'
   15963      T11 CPU.  Enable limited extended instruction set, `MFPS', and
   15964      `MTPS'.
   15965 
   15966 9.33.1.4 Machine Model Options
   15967 ..............................
   15968 
   15969 These options enable the instruction set extensions supported by a
   15970 particular machine model, and disables all other extensions.
   15971 
   15972 `-m11/03'
   15973      Same as `-mkd11f'.
   15974 
   15975 `-m11/04'
   15976      Same as `-mkd11d'.
   15977 
   15978 `-m11/05 | -m11/10'
   15979      Same as `-mkd11b'.
   15980 
   15981 `-m11/15 | -m11/20'
   15982      Same as `-mka11'.
   15983 
   15984 `-m11/21'
   15985      Same as `-mt11'.
   15986 
   15987 `-m11/23 | -m11/24'
   15988      Same as `-mf11'.
   15989 
   15990 `-m11/34'
   15991      Same as `-mkd11e'.
   15992 
   15993 `-m11/34a'
   15994      Ame as `-mkd11e' `-mfpp'.
   15995 
   15996 `-m11/35 | -m11/40'
   15997      Same as `-mkd11a'.
   15998 
   15999 `-m11/44'
   16000      Same as `-mkd11z'.
   16001 
   16002 `-m11/45 | -m11/50 | -m11/55 | -m11/70'
   16003      Same as `-mkb11'.
   16004 
   16005 `-m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94'
   16006      Same as `-mj11'.
   16007 
   16008 `-m11/60'
   16009      Same as `-mkd11k'.
   16010 
   16011 
   16012 File: as.info,  Node: PDP-11-Pseudos,  Next: PDP-11-Syntax,  Prev: PDP-11-Options,  Up: PDP-11-Dependent
   16013 
   16014 9.33.2 Assembler Directives
   16015 ---------------------------
   16016 
   16017 The PDP-11 version of `as' has a few machine dependent assembler
   16018 directives.
   16019 
   16020 `.bss'
   16021      Switch to the `bss' section.
   16022 
   16023 `.even'
   16024      Align the location counter to an even number.
   16025 
   16026 
   16027 File: as.info,  Node: PDP-11-Syntax,  Next: PDP-11-Mnemonics,  Prev: PDP-11-Pseudos,  Up: PDP-11-Dependent
   16028 
   16029 9.33.3 PDP-11 Assembly Language Syntax
   16030 --------------------------------------
   16031 
   16032 `as' supports both DEC syntax and BSD syntax.  The only difference is
   16033 that in DEC syntax, a `#' character is used to denote an immediate
   16034 constants, while in BSD syntax the character for this purpose is `$'.
   16035 
   16036    general-purpose registers are named `r0' through `r7'.  Mnemonic
   16037 alternatives for `r6' and `r7' are `sp' and `pc', respectively.
   16038 
   16039    Floating-point registers are named `ac0' through `ac3', or
   16040 alternatively `fr0' through `fr3'.
   16041 
   16042    Comments are started with a `#' or a `/' character, and extend to
   16043 the end of the line.  (FIXME: clash with immediates?)
   16044 
   16045    Multiple statements on the same line can be separated by the `;'
   16046 character.
   16047 
   16048 
   16049 File: as.info,  Node: PDP-11-Mnemonics,  Next: PDP-11-Synthetic,  Prev: PDP-11-Syntax,  Up: PDP-11-Dependent
   16050 
   16051 9.33.4 Instruction Naming
   16052 -------------------------
   16053 
   16054 Some instructions have alternative names.
   16055 
   16056 `BCC'
   16057      `BHIS'
   16058 
   16059 `BCS'
   16060      `BLO'
   16061 
   16062 `L2DR'
   16063      `L2D'
   16064 
   16065 `L3DR'
   16066      `L3D'
   16067 
   16068 `SYS'
   16069      `TRAP'
   16070 
   16071 
   16072 File: as.info,  Node: PDP-11-Synthetic,  Prev: PDP-11-Mnemonics,  Up: PDP-11-Dependent
   16073 
   16074 9.33.5 Synthetic Instructions
   16075 -----------------------------
   16076 
   16077 The `JBR' and `J'CC synthetic instructions are not supported yet.
   16078 
   16079 
   16080 File: as.info,  Node: PJ-Dependent,  Next: PPC-Dependent,  Prev: PDP-11-Dependent,  Up: Machine Dependencies
   16081 
   16082 9.34 picoJava Dependent Features
   16083 ================================
   16084 
   16085 * Menu:
   16086 
   16087 * PJ Options::              Options
   16088 * PJ Syntax::               PJ Syntax
   16089 
   16090 
   16091 File: as.info,  Node: PJ Options,  Next: PJ Syntax,  Up: PJ-Dependent
   16092 
   16093 9.34.1 Options
   16094 --------------
   16095 
   16096 `as' has two additional command-line options for the picoJava
   16097 architecture.
   16098 `-ml'
   16099      This option selects little endian data output.
   16100 
   16101 `-mb'
   16102      This option selects big endian data output.
   16103 
   16104 
   16105 File: as.info,  Node: PJ Syntax,  Prev: PJ Options,  Up: PJ-Dependent
   16106 
   16107 9.34.2 PJ Syntax
   16108 ----------------
   16109 
   16110 * Menu:
   16111 
   16112 * PJ-Chars::                Special Characters
   16113 
   16114 
   16115 File: as.info,  Node: PJ-Chars,  Up: PJ Syntax
   16116 
   16117 9.34.2.1 Special Characters
   16118 ...........................
   16119 
   16120 The presence of a `!' or `/' on a line indicates the start of a comment
   16121 that extends to the end of the current line.
   16122 
   16123    If a `#' appears as the first character of a line then the whole
   16124 line is treated as a comment, but in this case the line could also be a
   16125 logical line number directive (*note Comments::) or a preprocessor
   16126 control command (*note Preprocessing::).
   16127 
   16128    The `;' character can be used to separate statements on the same
   16129 line.
   16130 
   16131 
   16132 File: as.info,  Node: PPC-Dependent,  Next: RL78-Dependent,  Prev: PJ-Dependent,  Up: Machine Dependencies
   16133 
   16134 9.35 PowerPC Dependent Features
   16135 ===============================
   16136 
   16137 * Menu:
   16138 
   16139 * PowerPC-Opts::                Options
   16140 * PowerPC-Pseudo::              PowerPC Assembler Directives
   16141 * PowerPC-Syntax::              PowerPC Syntax
   16142 
   16143 
   16144 File: as.info,  Node: PowerPC-Opts,  Next: PowerPC-Pseudo,  Up: PPC-Dependent
   16145 
   16146 9.35.1 Options
   16147 --------------
   16148 
   16149 The PowerPC chip family includes several successive levels, using the
   16150 same core instruction set, but including a few additional instructions
   16151 at each level.  There are exceptions to this however.  For details on
   16152 what instructions each variant supports, please see the chip's
   16153 architecture reference manual.
   16154 
   16155    The following table lists all available PowerPC options.
   16156 
   16157 `-a32'
   16158      Generate ELF32 or XCOFF32.
   16159 
   16160 `-a64'
   16161      Generate ELF64 or XCOFF64.
   16162 
   16163 `-K PIC'
   16164      Set EF_PPC_RELOCATABLE_LIB in ELF flags.
   16165 
   16166 `-mpwrx | -mpwr2'
   16167      Generate code for POWER/2 (RIOS2).
   16168 
   16169 `-mpwr'
   16170      Generate code for POWER (RIOS1)
   16171 
   16172 `-m601'
   16173      Generate code for PowerPC 601.
   16174 
   16175 `-mppc, -mppc32, -m603, -m604'
   16176      Generate code for PowerPC 603/604.
   16177 
   16178 `-m403, -m405'
   16179      Generate code for PowerPC 403/405.
   16180 
   16181 `-m440'
   16182      Generate code for PowerPC 440.  BookE and some 405 instructions.
   16183 
   16184 `-m464'
   16185      Generate code for PowerPC 464.
   16186 
   16187 `-m476'
   16188      Generate code for PowerPC 476.
   16189 
   16190 `-m7400, -m7410, -m7450, -m7455'
   16191      Generate code for PowerPC 7400/7410/7450/7455.
   16192 
   16193 `-m750cl'
   16194      Generate code for PowerPC 750CL.
   16195 
   16196 `-mppc64, -m620'
   16197      Generate code for PowerPC 620/625/630.
   16198 
   16199 `-me500, -me500x2'
   16200      Generate code for Motorola e500 core complex.
   16201 
   16202 `-me500mc'
   16203      Generate code for Freescale e500mc core complex.
   16204 
   16205 `-me500mc64'
   16206      Generate code for Freescale e500mc64 core complex.
   16207 
   16208 `-me5500'
   16209      Generate code for Freescale e5500 core complex.
   16210 
   16211 `-me6500'
   16212      Generate code for Freescale e6500 core complex.
   16213 
   16214 `-mspe'
   16215      Generate code for Motorola SPE instructions.
   16216 
   16217 `-mtitan'
   16218      Generate code for AppliedMicro Titan core complex.
   16219 
   16220 `-mppc64bridge'
   16221      Generate code for PowerPC 64, including bridge insns.
   16222 
   16223 `-mbooke'
   16224      Generate code for 32-bit BookE.
   16225 
   16226 `-ma2'
   16227      Generate code for A2 architecture.
   16228 
   16229 `-me300'
   16230      Generate code for PowerPC e300 family.
   16231 
   16232 `-maltivec'
   16233      Generate code for processors with AltiVec instructions.
   16234 
   16235 `-mvle'
   16236      Generate code for Freescale PowerPC VLE instructions.
   16237 
   16238 `-mvsx'
   16239      Generate code for processors with Vector-Scalar (VSX) instructions.
   16240 
   16241 `-mhtm'
   16242      Generate code for processors with Hardware Transactional Memory
   16243      instructions.
   16244 
   16245 `-mpower4, -mpwr4'
   16246      Generate code for Power4 architecture.
   16247 
   16248 `-mpower5, -mpwr5, -mpwr5x'
   16249      Generate code for Power5 architecture.
   16250 
   16251 `-mpower6, -mpwr6'
   16252      Generate code for Power6 architecture.
   16253 
   16254 `-mpower7, -mpwr7'
   16255      Generate code for Power7 architecture.
   16256 
   16257 `-mpower8, -mpwr8'
   16258      Generate code for Power8 architecture.
   16259 
   16260 `-mcell'
   16261 
   16262 `-mcell'
   16263      Generate code for Cell Broadband Engine architecture.
   16264 
   16265 `-mcom'
   16266      Generate code Power/PowerPC common instructions.
   16267 
   16268 `-many'
   16269      Generate code for any architecture (PWR/PWRX/PPC).
   16270 
   16271 `-mregnames'
   16272      Allow symbolic names for registers.
   16273 
   16274 `-mno-regnames'
   16275      Do not allow symbolic names for registers.
   16276 
   16277 `-mrelocatable'
   16278      Support for GCC's -mrelocatable option.
   16279 
   16280 `-mrelocatable-lib'
   16281      Support for GCC's -mrelocatable-lib option.
   16282 
   16283 `-memb'
   16284      Set PPC_EMB bit in ELF flags.
   16285 
   16286 `-mlittle, -mlittle-endian, -le'
   16287      Generate code for a little endian machine.
   16288 
   16289 `-mbig, -mbig-endian, -be'
   16290      Generate code for a big endian machine.
   16291 
   16292 `-msolaris'
   16293      Generate code for Solaris.
   16294 
   16295 `-mno-solaris'
   16296      Do not generate code for Solaris.
   16297 
   16298 `-nops=COUNT'
   16299      If an alignment directive inserts more than COUNT nops, put a
   16300      branch at the beginning to skip execution of the nops.
   16301 
   16302 
   16303 File: as.info,  Node: PowerPC-Pseudo,  Next: PowerPC-Syntax,  Prev: PowerPC-Opts,  Up: PPC-Dependent
   16304 
   16305 9.35.2 PowerPC Assembler Directives
   16306 -----------------------------------
   16307 
   16308 A number of assembler directives are available for PowerPC.  The
   16309 following table is far from complete.
   16310 
   16311 `.machine "string"'
   16312      This directive allows you to change the machine for which code is
   16313      generated.  `"string"' may be any of the -m cpu selection options
   16314      (without the -m) enclosed in double quotes, `"push"', or `"pop"'.
   16315      `.machine "push"' saves the currently selected cpu, which may be
   16316      restored with `.machine "pop"'.
   16317 
   16318 
   16319 File: as.info,  Node: PowerPC-Syntax,  Prev: PowerPC-Pseudo,  Up: PPC-Dependent
   16320 
   16321 9.35.3 PowerPC Syntax
   16322 ---------------------
   16323 
   16324 * Menu:
   16325 
   16326 * PowerPC-Chars::                Special Characters
   16327 
   16328 
   16329 File: as.info,  Node: PowerPC-Chars,  Up: PowerPC-Syntax
   16330 
   16331 9.35.3.1 Special Characters
   16332 ...........................
   16333 
   16334 The presence of a `#' on a line indicates the start of a comment that
   16335 extends to the end of the current line.
   16336 
   16337    If a `#' appears as the first character of a line then the whole
   16338 line is treated as a comment, but in this case the line could also be a
   16339 logical line number directive (*note Comments::) or a preprocessor
   16340 control command (*note Preprocessing::).
   16341 
   16342    If the assembler has been configured for the ppc-*-solaris* target
   16343 then the `!' character also acts as a line comment character.  This can
   16344 be disabled via the `-mno-solaris' command line option.
   16345 
   16346    The `;' character can be used to separate statements on the same
   16347 line.
   16348 
   16349 
   16350 File: as.info,  Node: RL78-Dependent,  Next: RX-Dependent,  Prev: PPC-Dependent,  Up: Machine Dependencies
   16351 
   16352 9.36 RL78 Dependent Features
   16353 ============================
   16354 
   16355 * Menu:
   16356 
   16357 * RL78-Opts::                   RL78 Assembler Command Line Options
   16358 * RL78-Modifiers::              Symbolic Operand Modifiers
   16359 * RL78-Directives::             Assembler Directives
   16360 * RL78-Syntax::                 Syntax
   16361 
   16362 
   16363 File: as.info,  Node: RL78-Opts,  Next: RL78-Modifiers,  Up: RL78-Dependent
   16364 
   16365 9.36.1 RL78 Options
   16366 -------------------
   16367 
   16368 `relax'
   16369      Enable support for link-time relaxation.
   16370 
   16371 `mg10'
   16372      Mark the generated binary as targeting the G10 variant of the RL78
   16373      architecture.
   16374 
   16375 `m32bit-doubles'
   16376      Mark the generated binary as one that uses 32-bits to hold the
   16377      `double' floating point type.  This is the default.
   16378 
   16379 `m64bit-doubles'
   16380      Mark the generated binary as one that uses 64-bits to hold the
   16381      `double' floating point type.
   16382 
   16383 
   16384 
   16385 File: as.info,  Node: RL78-Modifiers,  Next: RL78-Directives,  Prev: RL78-Opts,  Up: RL78-Dependent
   16386 
   16387 9.36.2 Symbolic Operand Modifiers
   16388 ---------------------------------
   16389 
   16390 The RL78 has three modifiers that adjust the relocations used by the
   16391 linker:
   16392 
   16393 `%lo16()'
   16394      When loading a 20-bit (or wider) address into registers, this
   16395      modifier selects the 16 least significant bits.
   16396 
   16397             movw ax,#%lo16(_sym)
   16398 
   16399 `%hi16()'
   16400      When loading a 20-bit (or wider) address into registers, this
   16401      modifier selects the 16 most significant bits.
   16402 
   16403             movw ax,#%hi16(_sym)
   16404 
   16405 `%hi8()'
   16406      When loading a 20-bit (or wider) address into registers, this
   16407      modifier selects the 8 bits that would go into CS or ES (i.e. bits
   16408      23..16).
   16409 
   16410             mov es, #%hi8(_sym)
   16411 
   16412 
   16413 
   16414 File: as.info,  Node: RL78-Directives,  Next: RL78-Syntax,  Prev: RL78-Modifiers,  Up: RL78-Dependent
   16415 
   16416 9.36.3 Assembler Directives
   16417 ---------------------------
   16418 
   16419 In addition to the common directives, the RL78 adds these:
   16420 
   16421 `.double'
   16422      Output a constant in "double" format, which is either a 32-bit or
   16423      a 64-bit floating point value, depending upon the setting of the
   16424      `-m32bit-doubles'|`-m64bit-doubles' command line option.
   16425 
   16426 `.bss'
   16427      Select the BSS section.
   16428 
   16429 `.3byte'
   16430      Output a constant value in a three byte format.
   16431 
   16432 `.int'
   16433 `.word'
   16434      Output a constant value in a four byte format.
   16435 
   16436 
   16437 
   16438 File: as.info,  Node: RL78-Syntax,  Prev: RL78-Directives,  Up: RL78-Dependent
   16439 
   16440 9.36.4 Syntax for the RL78
   16441 --------------------------
   16442 
   16443 * Menu:
   16444 
   16445 * RL78-Chars::                Special Characters
   16446 
   16447 
   16448 File: as.info,  Node: RL78-Chars,  Up: RL78-Syntax
   16449 
   16450 9.36.4.1 Special Characters
   16451 ...........................
   16452 
   16453 The presence of a `;' appearing anywhere on a line indicates the start
   16454 of a comment that extends to the end of that line.
   16455 
   16456    If a `#' appears as the first character of a line then the whole
   16457 line is treated as a comment, but in this case the line can also be a
   16458 logical line number directive (*note Comments::) or a preprocessor
   16459 control command (*note Preprocessing::).
   16460 
   16461    The `|' character can be used to separate statements on the same
   16462 line.
   16463 
   16464 
   16465 File: as.info,  Node: RX-Dependent,  Next: S/390-Dependent,  Prev: RL78-Dependent,  Up: Machine Dependencies
   16466 
   16467 9.37 RX Dependent Features
   16468 ==========================
   16469 
   16470 * Menu:
   16471 
   16472 * RX-Opts::                   RX Assembler Command Line Options
   16473 * RX-Modifiers::              Symbolic Operand Modifiers
   16474 * RX-Directives::             Assembler Directives
   16475 * RX-Float::                  Floating Point
   16476 * RX-Syntax::                 Syntax
   16477 
   16478 
   16479 File: as.info,  Node: RX-Opts,  Next: RX-Modifiers,  Up: RX-Dependent
   16480 
   16481 9.37.1 RX Options
   16482 -----------------
   16483 
   16484 The Renesas RX port of `as' has a few target specfic command line
   16485 options:
   16486 
   16487 `-m32bit-doubles'
   16488      This option controls the ABI and indicates to use a 32-bit float
   16489      ABI.  It has no effect on the assembled instructions, but it does
   16490      influence the behaviour of the `.double' pseudo-op.  This is the
   16491      default.
   16492 
   16493 `-m64bit-doubles'
   16494      This option controls the ABI and indicates to use a 64-bit float
   16495      ABI.  It has no effect on the assembled instructions, but it does
   16496      influence the behaviour of the `.double' pseudo-op.
   16497 
   16498 `-mbig-endian'
   16499      This option controls the ABI and indicates to use a big-endian data
   16500      ABI.  It has no effect on the assembled instructions, but it does
   16501      influence the behaviour of the `.short', `.hword', `.int',
   16502      `.word', `.long', `.quad' and `.octa' pseudo-ops.
   16503 
   16504 `-mlittle-endian'
   16505      This option controls the ABI and indicates to use a little-endian
   16506      data ABI.  It has no effect on the assembled instructions, but it
   16507      does influence the behaviour of the `.short', `.hword', `.int',
   16508      `.word', `.long', `.quad' and `.octa' pseudo-ops.  This is the
   16509      default.
   16510 
   16511 `-muse-conventional-section-names'
   16512      This option controls the default names given to the code (.text),
   16513      initialised data (.data) and uninitialised data sections (.bss).
   16514 
   16515 `-muse-renesas-section-names'
   16516      This option controls the default names given to the code (.P),
   16517      initialised data (.D_1) and uninitialised data sections (.B_1).
   16518      This is the default.
   16519 
   16520 `-msmall-data-limit'
   16521      This option tells the assembler that the small data limit feature
   16522      of the RX port of GCC is being used.  This results in the assembler
   16523      generating an undefined reference to a symbol called `__gp' for
   16524      use by the relocations that are needed to support the small data
   16525      limit feature.   This option is not enabled by default as it would
   16526      otherwise pollute the symbol table.
   16527 
   16528 `-mpid'
   16529      This option tells the assembler that the position independent data
   16530      of the RX port of GCC is being used.  This results in the assembler
   16531      generating an undefined reference to a symbol called `__pid_base',
   16532      and also setting the RX_PID flag bit in the e_flags field of the
   16533      ELF header of the object file.
   16534 
   16535 `-mint-register=NUM'
   16536      This option tells the assembler how many registers have been
   16537      reserved for use by interrupt handlers.  This is needed in order
   16538      to compute the correct values for the `%gpreg' and `%pidreg' meta
   16539      registers.
   16540 
   16541 `-mgcc-abi'
   16542      This option tells the assembler that the old GCC ABI is being used
   16543      by the assembled code.  With this version of the ABI function
   16544      arguments that are passed on the stack are aligned to a 32-bit
   16545      boundary.
   16546 
   16547 `-mrx-abi'
   16548      This option tells the assembler that the official RX ABI is being
   16549      used by the assembled code.  With this version of the ABI function
   16550      arguments that are passed on the stack are aligned to their natural
   16551      alignments.  This option is the default.
   16552 
   16553 `-mcpu=NAME'
   16554      This option tells the assembler the target CPU type.  Currently the
   16555      `rx200', `rx600' and `rx610' are recognised as valid cpu names.
   16556      Attempting to assemble an instruction not supported by the
   16557      indicated cpu type will result in an error message being generated.
   16558 
   16559 
   16560 
   16561 File: as.info,  Node: RX-Modifiers,  Next: RX-Directives,  Prev: RX-Opts,  Up: RX-Dependent
   16562 
   16563 9.37.2 Symbolic Operand Modifiers
   16564 ---------------------------------
   16565 
   16566 The assembler supports one modifier when using symbol addresses in RX
   16567 instruction operands.  The general syntax is the following:
   16568 
   16569      %gp(symbol)
   16570 
   16571    The modifier returns the offset from the __GP symbol to the
   16572 specified symbol as a 16-bit value.  The intent is that this offset
   16573 should be used in a register+offset move instruction when generating
   16574 references to small data.  Ie, like this:
   16575 
   16576        mov.W	 %gp(_foo)[%gpreg], r1
   16577 
   16578    The assembler also supports two meta register names which can be used
   16579 to refer to registers whose values may not be known to the programmer.
   16580 These meta register names are:
   16581 
   16582 `%gpreg'
   16583      The small data address register.
   16584 
   16585 `%pidreg'
   16586      The PID base address register.
   16587 
   16588 
   16589    Both registers normally have the value r13, but this can change if
   16590 some registers have been reserved for use by interrupt handlers or if
   16591 both the small data limit and position independent data features are
   16592 being used at the same time.
   16593 
   16594 
   16595 File: as.info,  Node: RX-Directives,  Next: RX-Float,  Prev: RX-Modifiers,  Up: RX-Dependent
   16596 
   16597 9.37.3 Assembler Directives
   16598 ---------------------------
   16599 
   16600 The RX version of `as' has the following specific assembler directives:
   16601 
   16602 `.3byte'
   16603      Inserts a 3-byte value into the output file at the current
   16604      location.
   16605 
   16606 `.fetchalign'
   16607      If the next opcode following this directive spans a fetch line
   16608      boundary (8 byte boundary), the opcode is aligned to that boundary.
   16609      If the next opcode does not span a fetch line, this directive has
   16610      no effect.  Note that one or more labels may be between this
   16611      directive and the opcode; those labels are aligned as well.  Any
   16612      inserted bytes due to alignment will form a NOP opcode.
   16613 
   16614 
   16615 
   16616 File: as.info,  Node: RX-Float,  Next: RX-Syntax,  Prev: RX-Directives,  Up: RX-Dependent
   16617 
   16618 9.37.4 Floating Point
   16619 ---------------------
   16620 
   16621 The floating point formats generated by directives are these.
   16622 
   16623 `.float'
   16624      `Single' precision (32-bit) floating point constants.
   16625 
   16626 `.double'
   16627      If the `-m64bit-doubles' command line option has been specified
   16628      then then `double' directive generates `double' precision (64-bit)
   16629      floating point constants, otherwise it generates `single'
   16630      precision (32-bit) floating point constants.  To force the
   16631      generation of 64-bit floating point constants used the `dc.d'
   16632      directive instead.
   16633 
   16634 
   16635 
   16636 File: as.info,  Node: RX-Syntax,  Prev: RX-Float,  Up: RX-Dependent
   16637 
   16638 9.37.5 Syntax for the RX
   16639 ------------------------
   16640 
   16641 * Menu:
   16642 
   16643 * RX-Chars::                Special Characters
   16644 
   16645 
   16646 File: as.info,  Node: RX-Chars,  Up: RX-Syntax
   16647 
   16648 9.37.5.1 Special Characters
   16649 ...........................
   16650 
   16651 The presence of a `;' appearing anywhere on a line indicates the start
   16652 of a comment that extends to the end of that line.
   16653 
   16654    If a `#' appears as the first character of a line then the whole
   16655 line is treated as a comment, but in this case the line can also be a
   16656 logical line number directive (*note Comments::) or a preprocessor
   16657 control command (*note Preprocessing::).
   16658 
   16659    The `!' character can be used to separate statements on the same
   16660 line.
   16661 
   16662 
   16663 File: as.info,  Node: S/390-Dependent,  Next: SCORE-Dependent,  Prev: RX-Dependent,  Up: Machine Dependencies
   16664 
   16665 9.38 IBM S/390 Dependent Features
   16666 =================================
   16667 
   16668    The s390 version of `as' supports two architectures modes and seven
   16669 chip levels. The architecture modes are the Enterprise System
   16670 Architecture (ESA) and the newer z/Architecture mode. The chip levels
   16671 are g5, g6, z900, z990, z9-109, z9-ec, z10, z196, and zEC12.
   16672 
   16673 * Menu:
   16674 
   16675 * s390 Options::                Command-line Options.
   16676 * s390 Characters::		Special Characters.
   16677 * s390 Syntax::                 Assembler Instruction syntax.
   16678 * s390 Directives::             Assembler Directives.
   16679 * s390 Floating Point::         Floating Point.
   16680 
   16681 
   16682 File: as.info,  Node: s390 Options,  Next: s390 Characters,  Up: S/390-Dependent
   16683 
   16684 9.38.1 Options
   16685 --------------
   16686 
   16687 The following table lists all available s390 specific options:
   16688 
   16689 `-m31 | -m64'
   16690      Select 31- or 64-bit ABI implying a word size of 32- or 64-bit.
   16691 
   16692      These options are only available with the ELF object file format,
   16693      and require that the necessary BFD support has been included (on a
   16694      31-bit platform you must add -enable-64-bit-bfd on the call to the
   16695      configure script to enable 64-bit usage and use s390x as target
   16696      platform).
   16697 
   16698 `-mesa | -mzarch'
   16699      Select the architecture mode, either the Enterprise System
   16700      Architecture (esa) mode or the z/Architecture mode (zarch).
   16701 
   16702      The 64-bit instructions are only available with the z/Architecture
   16703      mode.  The combination of `-m64' and `-mesa' results in a warning
   16704      message.
   16705 
   16706 `-march=CPU'
   16707      This option specifies the target processor. The following
   16708      processor names are recognized: `g5', `g6', `z900', `z990',
   16709      `z9-109', `z9-ec', `z10' and `z196'.  Assembling an instruction
   16710      that is not supported on the target processor results in an error
   16711      message. Do not specify `g5' or `g6' with `-mzarch'.
   16712 
   16713 `-mregnames'
   16714      Allow symbolic names for registers.
   16715 
   16716 `-mno-regnames'
   16717      Do not allow symbolic names for registers.
   16718 
   16719 `-mwarn-areg-zero'
   16720      Warn whenever the operand for a base or index register has been
   16721      specified but evaluates to zero. This can indicate the misuse of
   16722      general purpose register 0 as an address register.
   16723 
   16724 
   16725 
   16726 File: as.info,  Node: s390 Characters,  Next: s390 Syntax,  Prev: s390 Options,  Up: S/390-Dependent
   16727 
   16728 9.38.2 Special Characters
   16729 -------------------------
   16730 
   16731 `#' is the line comment character.
   16732 
   16733    If a `#' appears as the first character of a line then the whole
   16734 line is treated as a comment, but in this case the line could also be a
   16735 logical line number directive (*note Comments::) or a preprocessor
   16736 control command (*note Preprocessing::).
   16737 
   16738    The `;' character can be used instead of a newline to separate
   16739 statements.
   16740 
   16741 
   16742 File: as.info,  Node: s390 Syntax,  Next: s390 Directives,  Prev: s390 Characters,  Up: S/390-Dependent
   16743 
   16744 9.38.3 Instruction syntax
   16745 -------------------------
   16746 
   16747 The assembler syntax closely follows the syntax outlined in Enterprise
   16748 Systems Architecture/390 Principles of Operation (SA22-7201) and the
   16749 z/Architecture Principles of Operation (SA22-7832).
   16750 
   16751    Each instruction has two major parts, the instruction mnemonic and
   16752 the instruction operands. The instruction format varies.
   16753 
   16754 * Menu:
   16755 
   16756 * s390 Register::               Register Naming
   16757 * s390 Mnemonics::              Instruction Mnemonics
   16758 * s390 Operands::               Instruction Operands
   16759 * s390 Formats::                Instruction Formats
   16760 * s390 Aliases::		Instruction Aliases
   16761 * s390 Operand Modifier::       Instruction Operand Modifier
   16762 * s390 Instruction Marker::     Instruction Marker
   16763 * s390 Literal Pool Entries::   Literal Pool Entries
   16764 
   16765 
   16766 File: as.info,  Node: s390 Register,  Next: s390 Mnemonics,  Up: s390 Syntax
   16767 
   16768 9.38.3.1 Register naming
   16769 ........................
   16770 
   16771 The `as' recognizes a number of predefined symbols for the various
   16772 processor registers. A register specification in one of the instruction
   16773 formats is an unsigned integer between 0 and 15. The specific
   16774 instruction and the position of the register in the instruction format
   16775 denotes the type of the register. The register symbols are prefixed with
   16776 `%':
   16777 
   16778      %rN   the 16 general purpose registers, 0 <= N <= 15
   16779      %fN   the 16 floating point registers, 0 <= N <= 15
   16780      %aN   the 16 access registers, 0 <= N <= 15
   16781      %cN   the 16 control registers, 0 <= N <= 15
   16782      %lit  an alias for the general purpose register %r13
   16783      %sp   an alias for the general purpose register %r15
   16784 
   16785 
   16786 File: as.info,  Node: s390 Mnemonics,  Next: s390 Operands,  Prev: s390 Register,  Up: s390 Syntax
   16787 
   16788 9.38.3.2 Instruction Mnemonics
   16789 ..............................
   16790 
   16791 All instructions documented in the Principles of Operation are supported
   16792 with the mnemonic and order of operands as described.  The instruction
   16793 mnemonic identifies the instruction format (*Note s390 Formats::) and
   16794 the specific operation code for the instruction.  For example, the `lr'
   16795 mnemonic denotes the instruction format `RR' with the operation code
   16796 `0x18'.
   16797 
   16798    The definition of the various mnemonics follows a scheme, where the
   16799 first character usually hint at the type of the instruction:
   16800 
   16801      a          add instruction, for example `al' for add logical 32-bit
   16802      b          branch instruction, for example `bc' for branch on condition
   16803      c          compare or convert instruction, for example `cr' for compare
   16804                 register 32-bit
   16805      d          divide instruction, for example `dlr' devide logical register
   16806                 64-bit to 32-bit
   16807      i          insert instruction, for example `ic' insert character
   16808      l          load instruction, for example `ltr' load and test register
   16809      mv         move instruction, for example `mvc' move character
   16810      m          multiply instruction, for example `mh' multiply halfword
   16811      n          and instruction, for example `ni' and immediate
   16812      o          or instruction, for example `oc' or character
   16813      sla, sll   shift left single instruction
   16814      sra, srl   shift right single instruction
   16815      st         store instruction, for example `stm' store multiple
   16816      s          subtract instruction, for example `slr' subtract
   16817                 logical 32-bit
   16818      t          test or translate instruction, of example `tm' test under mask
   16819      x          exclusive or instruction, for example `xc' exclusive or
   16820                 character
   16821 
   16822    Certain characters at the end of the mnemonic may describe a property
   16823 of the instruction:
   16824 
   16825      c   the instruction uses a 8-bit character operand
   16826      f   the instruction extends a 32-bit operand to 64 bit
   16827      g   the operands are treated as 64-bit values
   16828      h   the operand uses a 16-bit halfword operand
   16829      i   the instruction uses an immediate operand
   16830      l   the instruction uses unsigned, logical operands
   16831      m   the instruction uses a mask or operates on multiple values
   16832      r   if r is the last character, the instruction operates on registers
   16833      y   the instruction uses 20-bit displacements
   16834 
   16835    There are many exceptions to the scheme outlined in the above lists,
   16836 in particular for the priviledged instructions. For non-priviledged
   16837 instruction it works quite well, for example the instruction `clgfr' c:
   16838 compare instruction, l: unsigned operands, g: 64-bit operands, f: 32-
   16839 to 64-bit extension, r: register operands. The instruction compares an
   16840 64-bit value in a register with the zero extended 32-bit value from a
   16841 second register.  For a complete list of all mnemonics see appendix B
   16842 in the Principles of Operation.
   16843 
   16844 
   16845 File: as.info,  Node: s390 Operands,  Next: s390 Formats,  Prev: s390 Mnemonics,  Up: s390 Syntax
   16846 
   16847 9.38.3.3 Instruction Operands
   16848 .............................
   16849 
   16850 Instruction operands can be grouped into three classes, operands located
   16851 in registers, immediate operands, and operands in storage.
   16852 
   16853    A register operand can be located in general, floating-point, access,
   16854 or control register. The register is identified by a four-bit field.
   16855 The field containing the register operand is called the R field.
   16856 
   16857    Immediate operands are contained within the instruction and can have
   16858 8, 16 or 32 bits. The field containing the immediate operand is called
   16859 the I field. Dependent on the instruction the I field is either signed
   16860 or unsigned.
   16861 
   16862    A storage operand consists of an address and a length. The address
   16863 of a storage operands can be specified in any of these ways:
   16864 
   16865    * The content of a single general R
   16866 
   16867    * The sum of the content of a general register called the base
   16868      register B plus the content of a displacement field D
   16869 
   16870    * The sum of the contents of two general registers called the index
   16871      register X and the base register B plus the content of a
   16872      displacement field
   16873 
   16874    * The sum of the current instruction address and a 32-bit signed
   16875      immediate field multiplied by two.
   16876 
   16877    The length of a storage operand can be:
   16878 
   16879    * Implied by the instruction
   16880 
   16881    * Specified by a bitmask
   16882 
   16883    * Specified by a four-bit or eight-bit length field L
   16884 
   16885    * Specified by the content of a general register
   16886 
   16887    The notation for storage operand addresses formed from multiple
   16888 fields is as follows:
   16889 
   16890 `Dn(Bn)'
   16891      the address for operand number n is formed from the content of
   16892      general register Bn called the base register and the displacement
   16893      field Dn.
   16894 
   16895 `Dn(Xn,Bn)'
   16896      the address for operand number n is formed from the content of
   16897      general register Xn called the index register, general register Bn
   16898      called the base register and the displacement field Dn.
   16899 
   16900 `Dn(Ln,Bn)'
   16901      the address for operand number n is formed from the content of
   16902      general regiser Bn called the base register and the displacement
   16903      field Dn.  The length of the operand n is specified by the field
   16904      Ln.
   16905 
   16906    The base registers Bn and the index registers Xn of a storage
   16907 operand can be skipped. If Bn and Xn are skipped, a zero will be stored
   16908 to the operand field. The notation changes as follows:
   16909 
   16910      full notation        short notation
   16911      ------------------------------------------ 
   16912      Dn(0,Bn)             Dn(Bn)
   16913      Dn(0,0)              Dn
   16914      Dn(0)                Dn
   16915      Dn(Ln,0)             Dn(Ln)
   16916 
   16917 
   16918 File: as.info,  Node: s390 Formats,  Next: s390 Aliases,  Prev: s390 Operands,  Up: s390 Syntax
   16919 
   16920 9.38.3.4 Instruction Formats
   16921 ............................
   16922 
   16923 The Principles of Operation manuals lists 26 instruction formats where
   16924 some of the formats have multiple variants. For the `.insn' pseudo
   16925 directive the assembler recognizes some of the formats.  Typically, the
   16926 most general variant of the instruction format is used by the `.insn'
   16927 directive.
   16928 
   16929    The following table lists the abbreviations used in the table of
   16930 instruction formats:
   16931 
   16932      OpCode / OpCd   Part of the op code.
   16933      Bx              Base register number for operand x.
   16934      Dx              Displacement for operand x.
   16935      DLx             Displacement lower 12 bits for operand x.
   16936      DHx             Displacement higher 8-bits for operand x.
   16937      Rx              Register number for operand x.
   16938      Xx              Index register number for operand x.
   16939      Ix              Signed immediate for operand x.
   16940      Ux              Unsigned immediate for operand x.
   16941 
   16942    An instruction is two, four, or six bytes in length and must be
   16943 aligned on a 2 byte boundary. The first two bits of the instruction
   16944 specify the length of the instruction, 00 indicates a two byte
   16945 instruction, 01 and 10 indicates a four byte instruction, and 11
   16946 indicates a six byte instruction.
   16947 
   16948    The following table lists the s390 instruction formats that are
   16949 available with the `.insn' pseudo directive:
   16950 
   16951 `E format'
   16952 
   16953      +-------------+
   16954      |    OpCode   |
   16955      +-------------+
   16956      0            15
   16957 
   16958 `RI format: <insn> R1,I2'
   16959 
   16960      +--------+----+----+------------------+
   16961      | OpCode | R1 |OpCd|        I2        |
   16962      +--------+----+----+------------------+
   16963      0        8    12   16                31
   16964 
   16965 `RIE format: <insn> R1,R3,I2'
   16966 
   16967      +--------+----+----+------------------+--------+--------+
   16968      | OpCode | R1 | R3 |        I2        |////////| OpCode |
   16969      +--------+----+----+------------------+--------+--------+
   16970      0        8    12   16                 32       40      47
   16971 
   16972 `RIL format: <insn> R1,I2'
   16973 
   16974      +--------+----+----+------------------------------------+
   16975      | OpCode | R1 |OpCd|                  I2                |
   16976      +--------+----+----+------------------------------------+
   16977      0        8    12   16                                  47
   16978 
   16979 `RILU format: <insn> R1,U2'
   16980 
   16981      +--------+----+----+------------------------------------+
   16982      | OpCode | R1 |OpCd|                  U2                |
   16983      +--------+----+----+------------------------------------+
   16984      0        8    12   16                                  47
   16985 
   16986 `RIS format: <insn> R1,I2,M3,D4(B4)'
   16987 
   16988      +--------+----+----+----+-------------+--------+--------+
   16989      | OpCode | R1 | M3 | B4 |     D4      |   I2   | Opcode |
   16990      +--------+----+----+----+-------------+--------+--------+
   16991      0        8    12   16   20            32       36      47
   16992 
   16993 `RR format: <insn> R1,R2'
   16994 
   16995      +--------+----+----+
   16996      | OpCode | R1 | R2 |
   16997      +--------+----+----+
   16998      0        8    12  15
   16999 
   17000 `RRE format: <insn> R1,R2'
   17001 
   17002      +------------------+--------+----+----+
   17003      |      OpCode      |////////| R1 | R2 |
   17004      +------------------+--------+----+----+
   17005      0                  16       24   28  31
   17006 
   17007 `RRF format: <insn> R1,R2,R3,M4'
   17008 
   17009      +------------------+----+----+----+----+
   17010      |      OpCode      | R3 | M4 | R1 | R2 |
   17011      +------------------+----+----+----+----+
   17012      0                  16   20   24   28  31
   17013 
   17014 `RRS format: <insn> R1,R2,M3,D4(B4)'
   17015 
   17016      +--------+----+----+----+-------------+----+----+--------+
   17017      | OpCode | R1 | R3 | B4 |     D4      | M3 |////| OpCode |
   17018      +--------+----+----+----+-------------+----+----+--------+
   17019      0        8    12   16   20            32   36   40      47
   17020 
   17021 `RS format: <insn> R1,R3,D2(B2)'
   17022 
   17023      +--------+----+----+----+-------------+
   17024      | OpCode | R1 | R3 | B2 |     D2      |
   17025      +--------+----+----+----+-------------+
   17026      0        8    12   16   20           31
   17027 
   17028 `RSE format: <insn> R1,R3,D2(B2)'
   17029 
   17030      +--------+----+----+----+-------------+--------+--------+
   17031      | OpCode | R1 | R3 | B2 |     D2      |////////| OpCode |
   17032      +--------+----+----+----+-------------+--------+--------+
   17033      0        8    12   16   20            32       40      47
   17034 
   17035 `RSI format: <insn> R1,R3,I2'
   17036 
   17037      +--------+----+----+------------------------------------+
   17038      | OpCode | R1 | R3 |                  I2                |
   17039      +--------+----+----+------------------------------------+
   17040      0        8    12   16                                  47
   17041 
   17042 `RSY format: <insn> R1,R3,D2(B2)'
   17043 
   17044      +--------+----+----+----+-------------+--------+--------+
   17045      | OpCode | R1 | R3 | B2 |    DL2      |  DH2   | OpCode |
   17046      +--------+----+----+----+-------------+--------+--------+
   17047      0        8    12   16   20            32       40      47
   17048 
   17049 `RX format: <insn> R1,D2(X2,B2)'
   17050 
   17051      +--------+----+----+----+-------------+
   17052      | OpCode | R1 | X2 | B2 |     D2      |
   17053      +--------+----+----+----+-------------+
   17054      0        8    12   16   20           31
   17055 
   17056 `RXE format: <insn> R1,D2(X2,B2)'
   17057 
   17058      +--------+----+----+----+-------------+--------+--------+
   17059      | OpCode | R1 | X2 | B2 |     D2      |////////| OpCode |
   17060      +--------+----+----+----+-------------+--------+--------+
   17061      0        8    12   16   20            32       40      47
   17062 
   17063 `RXF format: <insn> R1,R3,D2(X2,B2)'
   17064 
   17065      +--------+----+----+----+-------------+----+---+--------+
   17066      | OpCode | R3 | X2 | B2 |     D2      | R1 |///| OpCode |
   17067      +--------+----+----+----+-------------+----+---+--------+
   17068      0        8    12   16   20            32   36  40      47
   17069 
   17070 `RXY format: <insn> R1,D2(X2,B2)'
   17071 
   17072      +--------+----+----+----+-------------+--------+--------+
   17073      | OpCode | R1 | X2 | B2 |     DL2     |   DH2  | OpCode |
   17074      +--------+----+----+----+-------------+--------+--------+
   17075      0        8    12   16   20            32   36   40      47
   17076 
   17077 `S format: <insn> D2(B2)'
   17078 
   17079      +------------------+----+-------------+
   17080      |      OpCode      | B2 |     D2      |
   17081      +------------------+----+-------------+
   17082      0                  16   20           31
   17083 
   17084 `SI format: <insn> D1(B1),I2'
   17085 
   17086      +--------+---------+----+-------------+
   17087      | OpCode |   I2    | B1 |     D1      |
   17088      +--------+---------+----+-------------+
   17089      0        8         16   20           31
   17090 
   17091 `SIY format: <insn> D1(B1),U2'
   17092 
   17093      +--------+---------+----+-------------+--------+--------+
   17094      | OpCode |   I2    | B1 |     DL1     |  DH1   | OpCode |
   17095      +--------+---------+----+-------------+--------+--------+
   17096      0        8         16   20            32   36   40      47
   17097 
   17098 `SIL format: <insn> D1(B1),I2'
   17099 
   17100      +------------------+----+-------------+-----------------+
   17101      |      OpCode      | B1 |      D1     |       I2        |
   17102      +------------------+----+-------------+-----------------+
   17103      0                  16   20            32               47
   17104 
   17105 `SS format: <insn> D1(R1,B1),D2(B3),R3'
   17106 
   17107      +--------+----+----+----+-------------+----+------------+
   17108      | OpCode | R1 | R3 | B1 |     D1      | B2 |     D2     |
   17109      +--------+----+----+----+-------------+----+------------+
   17110      0        8    12   16   20            32   36          47
   17111 
   17112 `SSE format: <insn> D1(B1),D2(B2)'
   17113 
   17114      +------------------+----+-------------+----+------------+
   17115      |      OpCode      | B1 |     D1      | B2 |     D2     |
   17116      +------------------+----+-------------+----+------------+
   17117      0        8    12   16   20            32   36           47
   17118 
   17119 `SSF format: <insn> D1(B1),D2(B2),R3'
   17120 
   17121      +--------+----+----+----+-------------+----+------------+
   17122      | OpCode | R3 |OpCd| B1 |     D1      | B2 |     D2     |
   17123      +--------+----+----+----+-------------+----+------------+
   17124      0        8    12   16   20            32   36           47
   17125 
   17126 
   17127    For the complete list of all instruction format variants see the
   17128 Principles of Operation manuals.
   17129 
   17130 
   17131 File: as.info,  Node: s390 Aliases,  Next: s390 Operand Modifier,  Prev: s390 Formats,  Up: s390 Syntax
   17132 
   17133 9.38.3.5 Instruction Aliases
   17134 ............................
   17135 
   17136 A specific bit pattern can have multiple mnemonics, for example the bit
   17137 pattern `0xa7000000' has the mnemonics `tmh' and `tmlh'. In addition,
   17138 there are a number of mnemonics recognized by `as' that are not present
   17139 in the Principles of Operation.  These are the short forms of the
   17140 branch instructions, where the condition code mask operand is encoded
   17141 in the mnemonic. This is relevant for the branch instructions, the
   17142 compare and branch instructions, and the compare and trap instructions.
   17143 
   17144    For the branch instructions there are 20 condition code strings that
   17145 can be used as part of the mnemonic in place of a mask operand in the
   17146 instruction format:
   17147 
   17148      instruction          short form
   17149      ------------------------------------------ 
   17150      bcr   M1,R2          b<m>r  R2
   17151      bc    M1,D2(X2,B2)   b<m>   D2(X2,B2)
   17152      brc   M1,I2          j<m>   I2
   17153      brcl  M1,I2          jg<m>  I2
   17154 
   17155    In the mnemonic for a branch instruction the condition code string
   17156 <m> can be any of the following:
   17157 
   17158      o     jump on overflow / if ones
   17159      h     jump on A high
   17160      p     jump on plus
   17161      nle   jump on not low or equal
   17162      l     jump on A low
   17163      m     jump on minus
   17164      nhe   jump on not high or equal
   17165      lh    jump on low or high
   17166      ne    jump on A not equal B
   17167      nz    jump on not zero / if not zeros
   17168      e     jump on A equal B
   17169      z     jump on zero / if zeroes
   17170      nlh   jump on not low or high
   17171      he    jump on high or equal
   17172      nl    jump on A not low
   17173      nm    jump on not minus / if not mixed
   17174      le    jump on low or equal
   17175      nh    jump on A not high
   17176      np    jump on not plus
   17177      no    jump on not overflow / if not ones
   17178 
   17179    For the compare and branch, and compare and trap instructions there
   17180 are 12 condition code strings that can be used as part of the mnemonic
   17181 in place of a mask operand in the instruction format:
   17182 
   17183      instruction                 short form
   17184      -------------------------------------------------------- 
   17185      crb    R1,R2,M3,D4(B4)      crb<m>    R1,R2,D4(B4)
   17186      cgrb   R1,R2,M3,D4(B4)      cgrb<m>   R1,R2,D4(B4)
   17187      crj    R1,R2,M3,I4          crj<m>    R1,R2,I4
   17188      cgrj   R1,R2,M3,I4          cgrj<m>   R1,R2,I4
   17189      cib    R1,I2,M3,D4(B4)      cib<m>    R1,I2,D4(B4)
   17190      cgib   R1,I2,M3,D4(B4)      cgib<m>   R1,I2,D4(B4)
   17191      cij    R1,I2,M3,I4          cij<m>    R1,I2,I4
   17192      cgij   R1,I2,M3,I4          cgij<m>   R1,I2,I4
   17193      crt    R1,R2,M3             crt<m>    R1,R2
   17194      cgrt   R1,R2,M3             cgrt<m>   R1,R2
   17195      cit    R1,I2,M3             cit<m>    R1,I2
   17196      cgit   R1,I2,M3             cgit<m>   R1,I2
   17197      clrb   R1,R2,M3,D4(B4)      clrb<m>   R1,R2,D4(B4)
   17198      clgrb  R1,R2,M3,D4(B4)      clgrb<m>  R1,R2,D4(B4)
   17199      clrj   R1,R2,M3,I4          clrj<m>   R1,R2,I4
   17200      clgrj  R1,R2,M3,I4          clgrj<m>  R1,R2,I4
   17201      clib   R1,I2,M3,D4(B4)      clib<m>   R1,I2,D4(B4)
   17202      clgib  R1,I2,M3,D4(B4)      clgib<m>  R1,I2,D4(B4)
   17203      clij   R1,I2,M3,I4          clij<m>   R1,I2,I4
   17204      clgij  R1,I2,M3,I4          clgij<m>  R1,I2,I4
   17205      clrt   R1,R2,M3             clrt<m>   R1,R2
   17206      clgrt  R1,R2,M3             clgrt<m>  R1,R2
   17207      clfit  R1,I2,M3             clfit<m>  R1,I2
   17208      clgit  R1,I2,M3             clgit<m>  R1,I2
   17209 
   17210    In the mnemonic for a compare and branch and compare and trap
   17211 instruction the condition code string <m> can be any of the following:
   17212 
   17213      h     jump on A high
   17214      nle   jump on not low or equal
   17215      l     jump on A low
   17216      nhe   jump on not high or equal
   17217      ne    jump on A not equal B
   17218      lh    jump on low or high
   17219      e     jump on A equal B
   17220      nlh   jump on not low or high
   17221      nl    jump on A not low
   17222      he    jump on high or equal
   17223      nh    jump on A not high
   17224      le    jump on low or equal
   17225 
   17226 
   17227 File: as.info,  Node: s390 Operand Modifier,  Next: s390 Instruction Marker,  Prev: s390 Aliases,  Up: s390 Syntax
   17228 
   17229 9.38.3.6 Instruction Operand Modifier
   17230 .....................................
   17231 
   17232 If a symbol modifier is attached to a symbol in an expression for an
   17233 instruction operand field, the symbol term is replaced with a reference
   17234 to an object in the global offset table (GOT) or the procedure linkage
   17235 table (PLT). The following expressions are allowed: `symbol@modifier +
   17236 constant', `symbol@modifier + label + constant', and `symbol@modifier -
   17237 label + constant'.  The term `symbol' is the symbol that will be
   17238 entered into the GOT or PLT, `label' is a local label, and `constant'
   17239 is an arbitrary expression that the assembler can evaluate to a
   17240 constant value.
   17241 
   17242    The term `(symbol + constant1)@modifier +/- label + constant2' is
   17243 also accepted but a warning message is printed and the term is
   17244 converted to `symbol@modifier +/- label + constant1 + constant2'.
   17245 
   17246 `@got'
   17247 `@got12'
   17248      The @got modifier can be used for displacement fields, 16-bit
   17249      immediate fields and 32-bit pc-relative immediate fields. The
   17250      @got12 modifier is synonym to @got. The symbol is added to the
   17251      GOT. For displacement fields and 16-bit immediate fields the
   17252      symbol term is replaced with the offset from the start of the GOT
   17253      to the GOT slot for the symbol.  For a 32-bit pc-relative field
   17254      the pc-relative offset to the GOT slot from the current
   17255      instruction address is used.
   17256 
   17257 `@gotent'
   17258      The @gotent modifier can be used for 32-bit pc-relative immediate
   17259      fields.  The symbol is added to the GOT and the symbol term is
   17260      replaced with the pc-relative offset from the current instruction
   17261      to the GOT slot for the symbol.
   17262 
   17263 `@gotoff'
   17264      The @gotoff modifier can be used for 16-bit immediate fields. The
   17265      symbol term is replaced with the offset from the start of the GOT
   17266      to the address of the symbol.
   17267 
   17268 `@gotplt'
   17269      The @gotplt modifier can be used for displacement fields, 16-bit
   17270      immediate fields, and 32-bit pc-relative immediate fields. A
   17271      procedure linkage table entry is generated for the symbol and a
   17272      jump slot for the symbol is added to the GOT. For displacement
   17273      fields and 16-bit immediate fields the symbol term is replaced
   17274      with the offset from the start of the GOT to the jump slot for the
   17275      symbol. For a 32-bit pc-relative field the pc-relative offset to
   17276      the jump slot from the current instruction address is used.
   17277 
   17278 `@plt'
   17279      The @plt modifier can be used for 16-bit and 32-bit pc-relative
   17280      immediate fields. A procedure linkage table entry is generated for
   17281      the symbol.  The symbol term is replaced with the relative offset
   17282      from the current instruction to the PLT entry for the symbol.
   17283 
   17284 `@pltoff'
   17285      The @pltoff modifier can be used for 16-bit immediate fields. The
   17286      symbol term is replaced with the offset from the start of the PLT
   17287      to the address of the symbol.
   17288 
   17289 `@gotntpoff'
   17290      The @gotntpoff modifier can be used for displacement fields. The
   17291      symbol is added to the static TLS block and the negated offset to
   17292      the symbol in the static TLS block is added to the GOT. The symbol
   17293      term is replaced with the offset to the GOT slot from the start of
   17294      the GOT.
   17295 
   17296 `@indntpoff'
   17297      The @indntpoff modifier can be used for 32-bit pc-relative
   17298      immediate fields. The symbol is added to the static TLS block and
   17299      the negated offset to the symbol in the static TLS block is added
   17300      to the GOT. The symbol term is replaced with the pc-relative
   17301      offset to the GOT slot from the current instruction address.
   17302 
   17303    For more information about the thread local storage modifiers
   17304 `gotntpoff' and `indntpoff' see the ELF extension documentation `ELF
   17305 Handling For Thread-Local Storage'.
   17306 
   17307 
   17308 File: as.info,  Node: s390 Instruction Marker,  Next: s390 Literal Pool Entries,  Prev: s390 Operand Modifier,  Up: s390 Syntax
   17309 
   17310 9.38.3.7 Instruction Marker
   17311 ...........................
   17312 
   17313 The thread local storage instruction markers are used by the linker to
   17314 perform code optimization.
   17315 
   17316 `:tls_load'
   17317      The :tls_load marker is used to flag the load instruction in the
   17318      initial exec TLS model that retrieves the offset from the thread
   17319      pointer to a thread local storage variable from the GOT.
   17320 
   17321 `:tls_gdcall'
   17322      The :tls_gdcall marker is used to flag the branch-and-save
   17323      instruction to the __tls_get_offset function in the global dynamic
   17324      TLS model.
   17325 
   17326 `:tls_ldcall'
   17327      The :tls_ldcall marker is used to flag the branch-and-save
   17328      instruction to the __tls_get_offset function in the local dynamic
   17329      TLS model.
   17330 
   17331    For more information about the thread local storage instruction
   17332 marker and the linker optimizations see the ELF extension documentation
   17333 `ELF Handling For Thread-Local Storage'.
   17334 
   17335 
   17336 File: as.info,  Node: s390 Literal Pool Entries,  Prev: s390 Instruction Marker,  Up: s390 Syntax
   17337 
   17338 9.38.3.8 Literal Pool Entries
   17339 .............................
   17340 
   17341 A literal pool is a collection of values. To access the values a pointer
   17342 to the literal pool is loaded to a register, the literal pool register.
   17343 Usually, register %r13 is used as the literal pool register (*Note s390
   17344 Register::). Literal pool entries are created by adding the suffix
   17345 :lit1, :lit2, :lit4, or :lit8 to the end of an expression for an
   17346 instruction operand. The expression is added to the literal pool and the
   17347 operand is replaced with the offset to the literal in the literal pool.
   17348 
   17349 `:lit1'
   17350      The literal pool entry is created as an 8-bit value. An operand
   17351      modifier must not be used for the original expression.
   17352 
   17353 `:lit2'
   17354      The literal pool entry is created as a 16 bit value. The operand
   17355      modifier @got may be used in the original expression. The term
   17356      `x@got:lit2' will put the got offset for the global symbol x to
   17357      the literal pool as 16 bit value.
   17358 
   17359 `:lit4'
   17360      The literal pool entry is created as a 32-bit value. The operand
   17361      modifier @got and @plt may be used in the original expression. The
   17362      term `x@got:lit4' will put the got offset for the global symbol x
   17363      to the literal pool as a 32-bit value. The term `x@plt:lit4' will
   17364      put the plt offset for the global symbol x to the literal pool as
   17365      a 32-bit value.
   17366 
   17367 `:lit8'
   17368      The literal pool entry is created as a 64-bit value. The operand
   17369      modifier @got and @plt may be used in the original expression. The
   17370      term `x@got:lit8' will put the got offset for the global symbol x
   17371      to the literal pool as a 64-bit value. The term `x@plt:lit8' will
   17372      put the plt offset for the global symbol x to the literal pool as
   17373      a 64-bit value.
   17374 
   17375    The assembler directive `.ltorg' is used to emit all literal pool
   17376 entries to the current position.
   17377 
   17378 
   17379 File: as.info,  Node: s390 Directives,  Next: s390 Floating Point,  Prev: s390 Syntax,  Up: S/390-Dependent
   17380 
   17381 9.38.4 Assembler Directives
   17382 ---------------------------
   17383 
   17384 `as' for s390 supports all of the standard ELF assembler directives as
   17385 outlined in the main part of this document.  Some directives have been
   17386 extended and there are some additional directives, which are only
   17387 available for the s390 `as'.
   17388 
   17389 `.insn'
   17390      This directive permits the numeric representation of an
   17391      instructions and makes the assembler insert the operands according
   17392      to one of the instructions formats for `.insn' (*Note s390
   17393      Formats::).  For example, the instruction `l %r1,24(%r15)' could
   17394      be written as `.insn rx,0x58000000,%r1,24(%r15)'.  
   17395 
   17396 `.short'
   17397 `.long'
   17398 `.quad'
   17399      This directive places one or more 16-bit (.short), 32-bit (.long),
   17400      or 64-bit (.quad) values into the current section. If an ELF or
   17401      TLS modifier is used only the following expressions are allowed:
   17402      `symbol@modifier + constant', `symbol@modifier + label +
   17403      constant', and `symbol@modifier - label + constant'.  The
   17404      following modifiers are available:
   17405     `@got'
   17406     `@got12'
   17407           The @got modifier can be used for .short, .long and .quad.
   17408           The @got12 modifier is synonym to @got. The symbol is added
   17409           to the GOT. The symbol term is replaced with offset from the
   17410           start of the GOT to the GOT slot for the symbol.
   17411 
   17412     `@gotoff'
   17413           The @gotoff modifier can be used for .short, .long and .quad.
   17414           The symbol term is replaced with the offset from the start of
   17415           the GOT to the address of the symbol.
   17416 
   17417     `@gotplt'
   17418           The @gotplt modifier can be used for .long and .quad. A
   17419           procedure linkage table entry is generated for the symbol and
   17420           a jump slot for the symbol is added to the GOT. The symbol
   17421           term is replaced with the offset from the start of the GOT to
   17422           the jump slot for the symbol.
   17423 
   17424     `@plt'
   17425           The @plt modifier can be used for .long and .quad. A
   17426           procedure linkage table entry us generated for the symbol.
   17427           The symbol term is replaced with the address of the PLT entry
   17428           for the symbol.
   17429 
   17430     `@pltoff'
   17431           The @pltoff modifier can be used for .short, .long and .quad.
   17432           The symbol term is replaced with the offset from the start of
   17433           the PLT to the address of the symbol.
   17434 
   17435     `@tlsgd'
   17436     `@tlsldm'
   17437           The @tlsgd and @tlsldm modifier can be used for .long and
   17438           .quad. A tls_index structure for the symbol is added to the
   17439           GOT. The symbol term is replaced with the offset from the
   17440           start of the GOT to the tls_index structure.
   17441 
   17442     `@gotntpoff'
   17443     `@indntpoff'
   17444           The @gotntpoff and @indntpoff modifier can be used for .long
   17445           and .quad.  The symbol is added to the static TLS block and
   17446           the negated offset to the symbol in the static TLS block is
   17447           added to the GOT. For @gotntpoff the symbol term is replaced
   17448           with the offset from the start of the GOT to the GOT slot,
   17449           for @indntpoff the symbol term is replaced with the address
   17450           of the GOT slot.
   17451 
   17452     `@dtpoff'
   17453           The @dtpoff modifier can be used for .long and .quad. The
   17454           symbol term is replaced with the offset of the symbol
   17455           relative to the start of the TLS block it is contained in.
   17456 
   17457     `@ntpoff'
   17458           The @ntpoff modifier can be used for .long and .quad. The
   17459           symbol term is replaced with the offset of the symbol
   17460           relative to the TCB pointer.
   17461 
   17462      For more information about the thread local storage modifiers see
   17463      the ELF extension documentation `ELF Handling For Thread-Local
   17464      Storage'.
   17465 
   17466 `.ltorg'
   17467      This directive causes the current contents of the literal pool to
   17468      be dumped to the current location (*Note s390 Literal Pool
   17469      Entries::).
   17470 
   17471 `.machine string'
   17472      This directive allows you to change the machine for which code is
   17473      generated.  `string' may be any of the `-march=' selection options
   17474      (without the -march=), `push', or `pop'.  `.machine push' saves
   17475      the currently selected cpu, which may be restored with `.machine
   17476      pop'.  Be aware that the cpu string has to be put into double
   17477      quotes in case it contains characters not appropriate for
   17478      identifiers.  So you have to write `"z9-109"' instead of just
   17479      `z9-109'.
   17480 
   17481 `.machinemode string'
   17482      This directive allows to change the architecture mode for which
   17483      code is being generated.  `string' may be `esa', `zarch',
   17484      `zarch_nohighgprs', `push', or `pop'.  `.machinemode
   17485      zarch_nohighgprs' can be used to prevent the `highgprs' flag from
   17486      being set in the ELF header of the output file.  This is useful in
   17487      situations where the code is gated with a runtime check which
   17488      makes sure that the code is only executed on kernels providing the
   17489      `highgprs' feature.  `.machinemode push' saves the currently
   17490      selected mode, which may be restored with `.machinemode pop'.
   17491 
   17492 
   17493 File: as.info,  Node: s390 Floating Point,  Prev: s390 Directives,  Up: S/390-Dependent
   17494 
   17495 9.38.5 Floating Point
   17496 ---------------------
   17497 
   17498 The assembler recognizes both the IEEE floating-point instruction and
   17499 the hexadecimal floating-point instructions. The floating-point
   17500 constructors `.float', `.single', and `.double' always emit the IEEE
   17501 format. To assemble hexadecimal floating-point constants the `.long'
   17502 and `.quad' directives must be used.
   17503 
   17504 
   17505 File: as.info,  Node: SCORE-Dependent,  Next: Sparc-Dependent,  Prev: S/390-Dependent,  Up: Machine Dependencies
   17506 
   17507 9.39 SCORE Dependent Features
   17508 =============================
   17509 
   17510 * Menu:
   17511 
   17512 * SCORE-Opts::   	Assembler options
   17513 * SCORE-Pseudo::        SCORE Assembler Directives
   17514 * SCORE-Syntax::        Syntax
   17515 
   17516 
   17517 File: as.info,  Node: SCORE-Opts,  Next: SCORE-Pseudo,  Up: SCORE-Dependent
   17518 
   17519 9.39.1 Options
   17520 --------------
   17521 
   17522 The following table lists all available SCORE options.
   17523 
   17524 `-G NUM'
   17525      This option sets the largest size of an object that can be
   17526      referenced implicitly with the `gp' register. The default value is
   17527      8.
   17528 
   17529 `-EB'
   17530      Assemble code for a big-endian cpu
   17531 
   17532 `-EL'
   17533      Assemble code for a little-endian cpu
   17534 
   17535 `-FIXDD'
   17536      Assemble code for fix data dependency
   17537 
   17538 `-NWARN'
   17539      Assemble code for no warning message for fix data dependency
   17540 
   17541 `-SCORE5'
   17542      Assemble code for target is SCORE5
   17543 
   17544 `-SCORE5U'
   17545      Assemble code for target is SCORE5U
   17546 
   17547 `-SCORE7'
   17548      Assemble code for target is SCORE7, this is default setting
   17549 
   17550 `-SCORE3'
   17551      Assemble code for target is SCORE3
   17552 
   17553 `-march=score7'
   17554      Assemble code for target is SCORE7, this is default setting
   17555 
   17556 `-march=score3'
   17557      Assemble code for target is SCORE3
   17558 
   17559 `-USE_R1'
   17560      Assemble code for no warning message when using temp register r1
   17561 
   17562 `-KPIC'
   17563      Generate code for PIC.  This option tells the assembler to generate
   17564      score position-independent macro expansions.  It also tells the
   17565      assembler to mark the output file as PIC.
   17566 
   17567 `-O0'
   17568      Assembler will not perform any optimizations
   17569 
   17570 `-V'
   17571      Sunplus release version
   17572 
   17573 
   17574 
   17575 File: as.info,  Node: SCORE-Pseudo,  Next: SCORE-Syntax,  Prev: SCORE-Opts,  Up: SCORE-Dependent
   17576 
   17577 9.39.2 SCORE Assembler Directives
   17578 ---------------------------------
   17579 
   17580 A number of assembler directives are available for SCORE.  The
   17581 following table is far from complete.
   17582 
   17583 `.set nwarn'
   17584      Let the assembler not to generate warnings if the source machine
   17585      language instructions happen data dependency.
   17586 
   17587 `.set fixdd'
   17588      Let the assembler to insert bubbles (32 bit nop instruction / 16
   17589      bit nop! Instruction) if the source machine language instructions
   17590      happen data dependency.
   17591 
   17592 `.set nofixdd'
   17593      Let the assembler to generate warnings if the source machine
   17594      language instructions happen data dependency. (Default)
   17595 
   17596 `.set r1'
   17597      Let the assembler not to generate warnings if the source program
   17598      uses r1. allow user to use r1
   17599 
   17600 `set nor1'
   17601      Let the assembler to generate warnings if the source program uses
   17602      r1. (Default)
   17603 
   17604 `.sdata'
   17605      Tell the assembler to add subsequent data into the sdata section
   17606 
   17607 `.rdata'
   17608      Tell the assembler to add subsequent data into the rdata section
   17609 
   17610 `.frame "frame-register", "offset", "return-pc-register"'
   17611      Describe a stack frame. "frame-register" is the frame register,
   17612      "offset" is the distance from the frame register to the virtual
   17613      frame pointer, "return-pc-register" is the return program register.
   17614      You must use ".ent" before ".frame" and only one ".frame" can be
   17615      used per ".ent".
   17616 
   17617 `.mask "bitmask", "frameoffset"'
   17618      Indicate which of the integer registers are saved in the current
   17619      function's stack frame, this is for the debugger to explain the
   17620      frame chain.
   17621 
   17622 `.ent "proc-name"'
   17623      Set the beginning of the procedure "proc_name". Use this directive
   17624      when you want to generate information for the debugger.
   17625 
   17626 `.end proc-name'
   17627      Set the end of a procedure. Use this directive to generate
   17628      information for the debugger.
   17629 
   17630 `.bss'
   17631      Switch the destination of following statements into the bss
   17632      section, which is used for data that is uninitialized anywhere.
   17633 
   17634 
   17635 
   17636 File: as.info,  Node: SCORE-Syntax,  Prev: SCORE-Pseudo,  Up: SCORE-Dependent
   17637 
   17638 9.39.3 SCORE Syntax
   17639 -------------------
   17640 
   17641 * Menu:
   17642 
   17643 * SCORE-Chars::                Special Characters
   17644 
   17645 
   17646 File: as.info,  Node: SCORE-Chars,  Up: SCORE-Syntax
   17647 
   17648 9.39.3.1 Special Characters
   17649 ...........................
   17650 
   17651 The presence of a `#' appearing anywhere on a line indicates the start
   17652 of a comment that extends to the end of that line.
   17653 
   17654    If a `#' appears as the first character of a line then the whole
   17655 line is treated as a comment, but in this case the line can also be a
   17656 logical line number directive (*note Comments::) or a preprocessor
   17657 control command (*note Preprocessing::).
   17658 
   17659    The `;' character can be used to separate statements on the same
   17660 line.
   17661 
   17662 
   17663 File: as.info,  Node: SH-Dependent,  Next: SH64-Dependent,  Prev: NS32K-Dependent,  Up: Machine Dependencies
   17664 
   17665 9.40 Renesas / SuperH SH Dependent Features
   17666 ===========================================
   17667 
   17668 * Menu:
   17669 
   17670 * SH Options::              Options
   17671 * SH Syntax::               Syntax
   17672 * SH Floating Point::       Floating Point
   17673 * SH Directives::           SH Machine Directives
   17674 * SH Opcodes::              Opcodes
   17675 
   17676 
   17677 File: as.info,  Node: SH Options,  Next: SH Syntax,  Up: SH-Dependent
   17678 
   17679 9.40.1 Options
   17680 --------------
   17681 
   17682 `as' has following command-line options for the Renesas (formerly
   17683 Hitachi) / SuperH SH family.
   17684 
   17685 `--little'
   17686      Generate little endian code.
   17687 
   17688 `--big'
   17689      Generate big endian code.
   17690 
   17691 `--relax'
   17692      Alter jump instructions for long displacements.
   17693 
   17694 `--small'
   17695      Align sections to 4 byte boundaries, not 16.
   17696 
   17697 `--dsp'
   17698      Enable sh-dsp insns, and disable sh3e / sh4 insns.
   17699 
   17700 `--renesas'
   17701      Disable optimization with section symbol for compatibility with
   17702      Renesas assembler.
   17703 
   17704 `--allow-reg-prefix'
   17705      Allow '$' as a register name prefix.
   17706 
   17707 `--fdpic'
   17708      Generate an FDPIC object file.
   17709 
   17710 `--isa=sh4 | sh4a'
   17711      Specify the sh4 or sh4a instruction set.
   17712 
   17713 `--isa=dsp'
   17714      Enable sh-dsp insns, and disable sh3e / sh4 insns.
   17715 
   17716 `--isa=fp'
   17717      Enable sh2e, sh3e, sh4, and sh4a insn sets.
   17718 
   17719 `--isa=all'
   17720      Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
   17721 
   17722 `-h-tick-hex'
   17723      Support H'00 style hex constants in addition to 0x00 style.
   17724 
   17725 
   17726 
   17727 File: as.info,  Node: SH Syntax,  Next: SH Floating Point,  Prev: SH Options,  Up: SH-Dependent
   17728 
   17729 9.40.2 Syntax
   17730 -------------
   17731 
   17732 * Menu:
   17733 
   17734 * SH-Chars::                Special Characters
   17735 * SH-Regs::                 Register Names
   17736 * SH-Addressing::           Addressing Modes
   17737 
   17738 
   17739 File: as.info,  Node: SH-Chars,  Next: SH-Regs,  Up: SH Syntax
   17740 
   17741 9.40.2.1 Special Characters
   17742 ...........................
   17743 
   17744 `!' is the line comment character.
   17745 
   17746    You can use `;' instead of a newline to separate statements.
   17747 
   17748    If a `#' appears as the first character of a line then the whole
   17749 line is treated as a comment, but in this case the line could also be a
   17750 logical line number directive (*note Comments::) or a preprocessor
   17751 control command (*note Preprocessing::).
   17752 
   17753    Since `$' has no special meaning, you may use it in symbol names.
   17754 
   17755 
   17756 File: as.info,  Node: SH-Regs,  Next: SH-Addressing,  Prev: SH-Chars,  Up: SH Syntax
   17757 
   17758 9.40.2.2 Register Names
   17759 .......................
   17760 
   17761 You can use the predefined symbols `r0', `r1', `r2', `r3', `r4', `r5',
   17762 `r6', `r7', `r8', `r9', `r10', `r11', `r12', `r13', `r14', and `r15' to
   17763 refer to the SH registers.
   17764 
   17765    The SH also has these control registers:
   17766 
   17767 `pr'
   17768      procedure register (holds return address)
   17769 
   17770 `pc'
   17771      program counter
   17772 
   17773 `mach'
   17774 `macl'
   17775      high and low multiply accumulator registers
   17776 
   17777 `sr'
   17778      status register
   17779 
   17780 `gbr'
   17781      global base register
   17782 
   17783 `vbr'
   17784      vector base register (for interrupt vectors)
   17785 
   17786 
   17787 File: as.info,  Node: SH-Addressing,  Prev: SH-Regs,  Up: SH Syntax
   17788 
   17789 9.40.2.3 Addressing Modes
   17790 .........................
   17791 
   17792 `as' understands the following addressing modes for the SH.  `RN' in
   17793 the following refers to any of the numbered registers, but _not_ the
   17794 control registers.
   17795 
   17796 `RN'
   17797      Register direct
   17798 
   17799 `@RN'
   17800      Register indirect
   17801 
   17802 `@-RN'
   17803      Register indirect with pre-decrement
   17804 
   17805 `@RN+'
   17806      Register indirect with post-increment
   17807 
   17808 `@(DISP, RN)'
   17809      Register indirect with displacement
   17810 
   17811 `@(R0, RN)'
   17812      Register indexed
   17813 
   17814 `@(DISP, GBR)'
   17815      `GBR' offset
   17816 
   17817 `@(R0, GBR)'
   17818      GBR indexed
   17819 
   17820 `ADDR'
   17821 `@(DISP, PC)'
   17822      PC relative address (for branch or for addressing memory).  The
   17823      `as' implementation allows you to use the simpler form ADDR
   17824      anywhere a PC relative address is called for; the alternate form
   17825      is supported for compatibility with other assemblers.
   17826 
   17827 `#IMM'
   17828      Immediate data
   17829 
   17830 
   17831 File: as.info,  Node: SH Floating Point,  Next: SH Directives,  Prev: SH Syntax,  Up: SH-Dependent
   17832 
   17833 9.40.3 Floating Point
   17834 ---------------------
   17835 
   17836 SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other
   17837 SH groups can use `.float' directive to generate IEEE floating-point
   17838 numbers.
   17839 
   17840    SH2E and SH3E support single-precision floating point calculations as
   17841 well as entirely PCAPI compatible emulation of double-precision
   17842 floating point calculations. SH2E and SH3E instructions are a subset of
   17843 the floating point calculations conforming to the IEEE754 standard.
   17844 
   17845    In addition to single-precision and double-precision floating-point
   17846 operation capability, the on-chip FPU of SH4 has a 128-bit graphic
   17847 engine that enables 32-bit floating-point data to be processed 128 bits
   17848 at a time. It also supports 4 * 4 array operations and inner product
   17849 operations. Also, a superscalar architecture is employed that enables
   17850 simultaneous execution of two instructions (including FPU
   17851 instructions), providing performance of up to twice that of
   17852 conventional architectures at the same frequency.
   17853 
   17854 
   17855 File: as.info,  Node: SH Directives,  Next: SH Opcodes,  Prev: SH Floating Point,  Up: SH-Dependent
   17856 
   17857 9.40.4 SH Machine Directives
   17858 ----------------------------
   17859 
   17860 `uaword'
   17861 `ualong'
   17862 `uaquad'
   17863      `as' will issue a warning when a misaligned `.word', `.long', or
   17864      `.quad' directive is used.  You may use `.uaword', `.ualong', or
   17865      `.uaquad' to indicate that the value is intentionally misaligned.
   17866 
   17867 
   17868 File: as.info,  Node: SH Opcodes,  Prev: SH Directives,  Up: SH-Dependent
   17869 
   17870 9.40.5 Opcodes
   17871 --------------
   17872 
   17873 For detailed information on the SH machine instruction set, see
   17874 `SH-Microcomputer User's Manual' (Renesas) or `SH-4 32-bit CPU Core
   17875 Architecture' (SuperH) and `SuperH (SH) 64-Bit RISC Series' (SuperH).
   17876 
   17877    `as' implements all the standard SH opcodes.  No additional
   17878 pseudo-instructions are needed on this family.  Note, however, that
   17879 because `as' supports a simpler form of PC-relative addressing, you may
   17880 simply write (for example)
   17881 
   17882      mov.l  bar,r0
   17883 
   17884 where other assemblers might require an explicit displacement to `bar'
   17885 from the program counter:
   17886 
   17887      mov.l  @(DISP, PC)
   17888 
   17889    Here is a summary of SH opcodes:
   17890 
   17891      Legend:
   17892      Rn        a numbered register
   17893      Rm        another numbered register
   17894      #imm      immediate data
   17895      disp      displacement
   17896      disp8     8-bit displacement
   17897      disp12    12-bit displacement
   17898 
   17899      add #imm,Rn                    lds.l @Rn+,PR
   17900      add Rm,Rn                      mac.w @Rm+,@Rn+
   17901      addc Rm,Rn                     mov #imm,Rn
   17902      addv Rm,Rn                     mov Rm,Rn
   17903      and #imm,R0                    mov.b Rm,@(R0,Rn)
   17904      and Rm,Rn                      mov.b Rm,@-Rn
   17905      and.b #imm,@(R0,GBR)           mov.b Rm,@Rn
   17906      bf disp8                       mov.b @(disp,Rm),R0
   17907      bra disp12                     mov.b @(disp,GBR),R0
   17908      bsr disp12                     mov.b @(R0,Rm),Rn
   17909      bt disp8                       mov.b @Rm+,Rn
   17910      clrmac                         mov.b @Rm,Rn
   17911      clrt                           mov.b R0,@(disp,Rm)
   17912      cmp/eq #imm,R0                 mov.b R0,@(disp,GBR)
   17913      cmp/eq Rm,Rn                   mov.l Rm,@(disp,Rn)
   17914      cmp/ge Rm,Rn                   mov.l Rm,@(R0,Rn)
   17915      cmp/gt Rm,Rn                   mov.l Rm,@-Rn
   17916      cmp/hi Rm,Rn                   mov.l Rm,@Rn
   17917      cmp/hs Rm,Rn                   mov.l @(disp,Rn),Rm
   17918      cmp/pl Rn                      mov.l @(disp,GBR),R0
   17919      cmp/pz Rn                      mov.l @(disp,PC),Rn
   17920      cmp/str Rm,Rn                  mov.l @(R0,Rm),Rn
   17921      div0s Rm,Rn                    mov.l @Rm+,Rn
   17922      div0u                          mov.l @Rm,Rn
   17923      div1 Rm,Rn                     mov.l R0,@(disp,GBR)
   17924      exts.b Rm,Rn                   mov.w Rm,@(R0,Rn)
   17925      exts.w Rm,Rn                   mov.w Rm,@-Rn
   17926      extu.b Rm,Rn                   mov.w Rm,@Rn
   17927      extu.w Rm,Rn                   mov.w @(disp,Rm),R0
   17928      jmp @Rn                        mov.w @(disp,GBR),R0
   17929      jsr @Rn                        mov.w @(disp,PC),Rn
   17930      ldc Rn,GBR                     mov.w @(R0,Rm),Rn
   17931      ldc Rn,SR                      mov.w @Rm+,Rn
   17932      ldc Rn,VBR                     mov.w @Rm,Rn
   17933      ldc.l @Rn+,GBR                 mov.w R0,@(disp,Rm)
   17934      ldc.l @Rn+,SR                  mov.w R0,@(disp,GBR)
   17935      ldc.l @Rn+,VBR                 mova @(disp,PC),R0
   17936      lds Rn,MACH                    movt Rn
   17937      lds Rn,MACL                    muls Rm,Rn
   17938      lds Rn,PR                      mulu Rm,Rn
   17939      lds.l @Rn+,MACH                neg Rm,Rn
   17940      lds.l @Rn+,MACL                negc Rm,Rn
   17941 
   17942      nop                            stc VBR,Rn
   17943      not Rm,Rn                      stc.l GBR,@-Rn
   17944      or #imm,R0                     stc.l SR,@-Rn
   17945      or Rm,Rn                       stc.l VBR,@-Rn
   17946      or.b #imm,@(R0,GBR)            sts MACH,Rn
   17947      rotcl Rn                       sts MACL,Rn
   17948      rotcr Rn                       sts PR,Rn
   17949      rotl Rn                        sts.l MACH,@-Rn
   17950      rotr Rn                        sts.l MACL,@-Rn
   17951      rte                            sts.l PR,@-Rn
   17952      rts                            sub Rm,Rn
   17953      sett                           subc Rm,Rn
   17954      shal Rn                        subv Rm,Rn
   17955      shar Rn                        swap.b Rm,Rn
   17956      shll Rn                        swap.w Rm,Rn
   17957      shll16 Rn                      tas.b @Rn
   17958      shll2 Rn                       trapa #imm
   17959      shll8 Rn                       tst #imm,R0
   17960      shlr Rn                        tst Rm,Rn
   17961      shlr16 Rn                      tst.b #imm,@(R0,GBR)
   17962      shlr2 Rn                       xor #imm,R0
   17963      shlr8 Rn                       xor Rm,Rn
   17964      sleep                          xor.b #imm,@(R0,GBR)
   17965      stc GBR,Rn                     xtrct Rm,Rn
   17966      stc SR,Rn
   17967 
   17968 
   17969 File: as.info,  Node: SH64-Dependent,  Next: PDP-11-Dependent,  Prev: SH-Dependent,  Up: Machine Dependencies
   17970 
   17971 9.41 SuperH SH64 Dependent Features
   17972 ===================================
   17973 
   17974 * Menu:
   17975 
   17976 * SH64 Options::              Options
   17977 * SH64 Syntax::               Syntax
   17978 * SH64 Directives::           SH64 Machine Directives
   17979 * SH64 Opcodes::              Opcodes
   17980 
   17981 
   17982 File: as.info,  Node: SH64 Options,  Next: SH64 Syntax,  Up: SH64-Dependent
   17983 
   17984 9.41.1 Options
   17985 --------------
   17986 
   17987 `-isa=sh4 | sh4a'
   17988      Specify the sh4 or sh4a instruction set.
   17989 
   17990 `-isa=dsp'
   17991      Enable sh-dsp insns, and disable sh3e / sh4 insns.
   17992 
   17993 `-isa=fp'
   17994      Enable sh2e, sh3e, sh4, and sh4a insn sets.
   17995 
   17996 `-isa=all'
   17997      Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
   17998 
   17999 `-isa=shmedia | -isa=shcompact'
   18000      Specify the default instruction set.  `SHmedia' specifies the
   18001      32-bit opcodes, and `SHcompact' specifies the 16-bit opcodes
   18002      compatible with previous SH families.  The default depends on the
   18003      ABI selected; the default for the 64-bit ABI is SHmedia, and the
   18004      default for the 32-bit ABI is SHcompact.  If neither the ABI nor
   18005      the ISA is specified, the default is 32-bit SHcompact.
   18006 
   18007      Note that the `.mode' pseudo-op is not permitted if the ISA is not
   18008      specified on the command line.
   18009 
   18010 `-abi=32 | -abi=64'
   18011      Specify the default ABI.  If the ISA is specified and the ABI is
   18012      not, the default ABI depends on the ISA, with SHmedia defaulting
   18013      to 64-bit and SHcompact defaulting to 32-bit.
   18014 
   18015      Note that the `.abi' pseudo-op is not permitted if the ABI is not
   18016      specified on the command line.  When the ABI is specified on the
   18017      command line, any `.abi' pseudo-ops in the source must match it.
   18018 
   18019 `-shcompact-const-crange'
   18020      Emit code-range descriptors for constants in SHcompact code
   18021      sections.
   18022 
   18023 `-no-mix'
   18024      Disallow SHmedia code in the same section as constants and
   18025      SHcompact code.
   18026 
   18027 `-no-expand'
   18028      Do not expand MOVI, PT, PTA or PTB instructions.
   18029 
   18030 `-expand-pt32'
   18031      With -abi=64, expand PT, PTA and PTB instructions to 32 bits only.
   18032 
   18033 `-h-tick-hex'
   18034      Support H'00 style hex constants in addition to 0x00 style.
   18035 
   18036 
   18037 
   18038 File: as.info,  Node: SH64 Syntax,  Next: SH64 Directives,  Prev: SH64 Options,  Up: SH64-Dependent
   18039 
   18040 9.41.2 Syntax
   18041 -------------
   18042 
   18043 * Menu:
   18044 
   18045 * SH64-Chars::                Special Characters
   18046 * SH64-Regs::                 Register Names
   18047 * SH64-Addressing::           Addressing Modes
   18048 
   18049 
   18050 File: as.info,  Node: SH64-Chars,  Next: SH64-Regs,  Up: SH64 Syntax
   18051 
   18052 9.41.2.1 Special Characters
   18053 ...........................
   18054 
   18055 `!' is the line comment character.
   18056 
   18057    If a `#' appears as the first character of a line then the whole
   18058 line is treated as a comment, but in this case the line could also be a
   18059 logical line number directive (*note Comments::) or a preprocessor
   18060 control command (*note Preprocessing::).
   18061 
   18062    You can use `;' instead of a newline to separate statements.
   18063 
   18064    Since `$' has no special meaning, you may use it in symbol names.
   18065 
   18066 
   18067 File: as.info,  Node: SH64-Regs,  Next: SH64-Addressing,  Prev: SH64-Chars,  Up: SH64 Syntax
   18068 
   18069 9.41.2.2 Register Names
   18070 .......................
   18071 
   18072 You can use the predefined symbols `r0' through `r63' to refer to the
   18073 SH64 general registers, `cr0' through `cr63' for control registers,
   18074 `tr0' through `tr7' for target address registers, `fr0' through `fr63'
   18075 for single-precision floating point registers, `dr0' through `dr62'
   18076 (even numbered registers only) for double-precision floating point
   18077 registers, `fv0' through `fv60' (multiples of four only) for
   18078 single-precision floating point vectors, `fp0' through `fp62' (even
   18079 numbered registers only) for single-precision floating point pairs,
   18080 `mtrx0' through `mtrx48' (multiples of 16 only) for 4x4 matrices of
   18081 single-precision floating point registers, `pc' for the program
   18082 counter, and `fpscr' for the floating point status and control register.
   18083 
   18084    You can also refer to the control registers by the mnemonics `sr',
   18085 `ssr', `pssr', `intevt', `expevt', `pexpevt', `tra', `spc', `pspc',
   18086 `resvec', `vbr', `tea', `dcr', `kcr0', `kcr1', `ctc', and `usr'.
   18087 
   18088 
   18089 File: as.info,  Node: SH64-Addressing,  Prev: SH64-Regs,  Up: SH64 Syntax
   18090 
   18091 9.41.2.3 Addressing Modes
   18092 .........................
   18093 
   18094 SH64 operands consist of either a register or immediate value.  The
   18095 immediate value can be a constant or label reference (or portion of a
   18096 label reference), as in this example:
   18097 
   18098      	movi	4,r2
   18099      	pt	function, tr4
   18100      	movi	(function >> 16) & 65535,r0
   18101      	shori	function & 65535, r0
   18102      	ld.l	r0,4,r0
   18103 
   18104    Instruction label references can reference labels in either SHmedia
   18105 or SHcompact.  To differentiate between the two, labels in SHmedia
   18106 sections will always have the least significant bit set (i.e. they will
   18107 be odd), which SHcompact labels will have the least significant bit
   18108 reset (i.e. they will be even).  If you need to reference the actual
   18109 address of a label, you can use the `datalabel' modifier, as in this
   18110 example:
   18111 
   18112      	.long	function
   18113      	.long	datalabel function
   18114 
   18115    In that example, the first longword may or may not have the least
   18116 significant bit set depending on whether the label is an SHmedia label
   18117 or an SHcompact label.  The second longword will be the actual address
   18118 of the label, regardless of what type of label it is.
   18119 
   18120 
   18121 File: as.info,  Node: SH64 Directives,  Next: SH64 Opcodes,  Prev: SH64 Syntax,  Up: SH64-Dependent
   18122 
   18123 9.41.3 SH64 Machine Directives
   18124 ------------------------------
   18125 
   18126 In addition to the SH directives, the SH64 provides the following
   18127 directives:
   18128 
   18129 `.mode [shmedia|shcompact]'
   18130 `.isa [shmedia|shcompact]'
   18131      Specify the ISA for the following instructions (the two directives
   18132      are equivalent).  Note that programs such as `objdump' rely on
   18133      symbolic labels to determine when such mode switches occur (by
   18134      checking the least significant bit of the label's address), so
   18135      such mode/isa changes should always be followed by a label (in
   18136      practice, this is true anyway).  Note that you cannot use these
   18137      directives if you didn't specify an ISA on the command line.
   18138 
   18139 `.abi [32|64]'
   18140      Specify the ABI for the following instructions.  Note that you
   18141      cannot use this directive unless you specified an ABI on the
   18142      command line, and the ABIs specified must match.
   18143 
   18144 
   18145 
   18146 File: as.info,  Node: SH64 Opcodes,  Prev: SH64 Directives,  Up: SH64-Dependent
   18147 
   18148 9.41.4 Opcodes
   18149 --------------
   18150 
   18151 For detailed information on the SH64 machine instruction set, see
   18152 `SuperH 64 bit RISC Series Architecture Manual' (SuperH, Inc.).
   18153 
   18154    `as' implements all the standard SH64 opcodes.  In addition, the
   18155 following pseudo-opcodes may be expanded into one or more alternate
   18156 opcodes:
   18157 
   18158 `movi'
   18159      If the value doesn't fit into a standard `movi' opcode, `as' will
   18160      replace the `movi' with a sequence of `movi' and `shori' opcodes.
   18161 
   18162 `pt'
   18163      This expands to a sequence of `movi' and `shori' opcode, followed
   18164      by a `ptrel' opcode, or to a `pta' or `ptb' opcode, depending on
   18165      the label referenced.
   18166 
   18167 
   18168 
   18169 File: as.info,  Node: Sparc-Dependent,  Next: TIC54X-Dependent,  Prev: SCORE-Dependent,  Up: Machine Dependencies
   18170 
   18171 9.42 SPARC Dependent Features
   18172 =============================
   18173 
   18174 * Menu:
   18175 
   18176 * Sparc-Opts::                  Options
   18177 * Sparc-Aligned-Data::		Option to enforce aligned data
   18178 * Sparc-Syntax::		Syntax
   18179 * Sparc-Float::                 Floating Point
   18180 * Sparc-Directives::            Sparc Machine Directives
   18181 
   18182 
   18183 File: as.info,  Node: Sparc-Opts,  Next: Sparc-Aligned-Data,  Up: Sparc-Dependent
   18184 
   18185 9.42.1 Options
   18186 --------------
   18187 
   18188 The SPARC chip family includes several successive versions, using the
   18189 same core instruction set, but including a few additional instructions
   18190 at each version.  There are exceptions to this however.  For details on
   18191 what instructions each variant supports, please see the chip's
   18192 architecture reference manual.
   18193 
   18194    By default, `as' assumes the core instruction set (SPARC v6), but
   18195 "bumps" the architecture level as needed: it switches to successively
   18196 higher architectures as it encounters instructions that only exist in
   18197 the higher levels.
   18198 
   18199    If not configured for SPARC v9 (`sparc64-*-*') GAS will not bump
   18200 past sparclite by default, an option must be passed to enable the v9
   18201 instructions.
   18202 
   18203    GAS treats sparclite as being compatible with v8, unless an
   18204 architecture is explicitly requested.  SPARC v9 is always incompatible
   18205 with sparclite.
   18206 
   18207 `-Av6 | -Av7 | -Av8 | -Aleon | -Asparclet | -Asparclite'
   18208 `-Av8plus | -Av8plusa | -Av8plusb | -Av8plusc | -Av8plusd | -Av8plusv'
   18209 `-Av9 | -Av9a | -Av9b | -Av9c | -Av9d | -Av9e | -Av9v | -Av9m'
   18210 `-Asparc | -Asparcvis | -Asparcvis2 | -Asparcfmaf | -Asparcima'
   18211 `-Asparcvis3 | -Asparcvis3r'
   18212      Use one of the `-A' options to select one of the SPARC
   18213      architectures explicitly.  If you select an architecture
   18214      explicitly, `as' reports a fatal error if it encounters an
   18215      instruction or feature requiring an incompatible or higher level.
   18216 
   18217      `-Av8plus', `-Av8plusa', `-Av8plusb', `-Av8plusc', `-Av8plusd',
   18218      and `-Av8plusv' select a 32 bit environment.
   18219 
   18220      `-Av9', `-Av9a', `-Av9b', `-Av9c', `-Av9d', `-Av9e', `-Av9v' and
   18221      `-Av9m' select a 64 bit environment and are not available unless
   18222      GAS is explicitly configured with 64 bit environment support.
   18223 
   18224      `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with
   18225      UltraSPARC VIS 1.0 extensions.
   18226 
   18227      `-Av8plusb' and `-Av9b' enable the UltraSPARC VIS 2.0 instructions,
   18228      as well as the instructions enabled by `-Av8plusa' and `-Av9a'.
   18229 
   18230      `-Av8plusc' and `-Av9c' enable the UltraSPARC Niagara instructions,
   18231      as well as the instructions enabled by `-Av8plusb' and `-Av9b'.
   18232 
   18233      `-Av8plusd' and `-Av9d' enable the floating point fused
   18234      multiply-add, VIS 3.0, and HPC extension instructions, as well as
   18235      the instructions enabled by `-Av8plusc' and `-Av9c'.
   18236 
   18237      `-Av8pluse' and `-Av9e' enable the cryptographic instructions, as
   18238      well as the instructions enabled by `-Av8plusd' and `-Av9d'.
   18239 
   18240      `-Av8plusv' and `-Av9v' enable floating point unfused
   18241      multiply-add, and integer multiply-add, as well as the instructions
   18242      enabled by `-Av8pluse' and `-Av9e'.
   18243 
   18244      `-Av8plusm' and `-Av9m' enable the VIS 4.0, subtract extended,
   18245      xmpmul, xmontmul and xmontsqr instructions, as well as the
   18246      instructions enabled by `-Av8plusv' and `-Av9v'.
   18247 
   18248      `-Asparc' specifies a v9 environment.  It is equivalent to `-Av9'
   18249      if the word size is 64-bit, and `-Av8plus' otherwise.
   18250 
   18251      `-Asparcvis' specifies a v9a environment.  It is equivalent to
   18252      `-Av9a' if the word size is 64-bit, and `-Av8plusa' otherwise.
   18253 
   18254      `-Asparcvis2' specifies a v9b environment.  It is equivalent to
   18255      `-Av9b' if the word size is 64-bit, and `-Av8plusb' otherwise.
   18256 
   18257      `-Asparcfmaf' specifies a v9b environment with the floating point
   18258      fused multiply-add instructions enabled.
   18259 
   18260      `-Asparcima' specifies a v9b environment with the integer
   18261      multiply-add instructions enabled.
   18262 
   18263      `-Asparcvis3' specifies a v9b environment with the VIS 3.0, HPC ,
   18264      and floating point fused multiply-add instructions enabled.
   18265 
   18266      `-Asparcvis3r' specifies a v9b environment with the VIS 3.0, HPC,
   18267      and floating point unfused multiply-add instructions enabled.
   18268 
   18269      `-Asparc5' is equivalent to `-Av9m'.
   18270 
   18271 `-xarch=v8plus | -xarch=v8plusa | -xarch=v8plusb | -xarch=v8plusc'
   18272 `-xarch=v8plusd | -xarch=v8plusv | -xarch=v9 | -xarch=v9a'
   18273 `-xarch=v9b | -xarch=v9c | -xarch=v9d | -xarch=v9e | -xarch=v9v | -xarch=v9m'
   18274 `-xarch=sparc | -xarch=sparcvis | -xarch=sparcvis2'
   18275 `-xarch=sparcfmaf | -xarch=sparcima | -xarch=sparcvis3'
   18276 `-xarch=sparcvis3r | -xarch=sparc5'
   18277      For compatibility with the SunOS v9 assembler.  These options are
   18278      equivalent to -Av8plus, -Av8plusa, -Av8plusb, -Av8plusc, -Av8plusd,
   18279      -Av8plusv, -Av9, -Av9a, -Av9b, -Av9c, -Av9d, -Av9e, -Av9v, -Av9m,
   18280      -Asparc, -Asparcvis, -Asparcvis2, -Asparcfmaf, -Asparcima,
   18281      -Asparcvis3, and -Asparcvis3r, respectively.
   18282 
   18283 `-bump'
   18284      Warn whenever it is necessary to switch to another level.  If an
   18285      architecture level is explicitly requested, GAS will not issue
   18286      warnings until that level is reached, and will then bump the level
   18287      as required (except between incompatible levels).
   18288 
   18289 `-32 | -64'
   18290      Select the word size, either 32 bits or 64 bits.  These options
   18291      are only available with the ELF object file format, and require
   18292      that the necessary BFD support has been included.
   18293 
   18294 
   18295 File: as.info,  Node: Sparc-Aligned-Data,  Next: Sparc-Syntax,  Prev: Sparc-Opts,  Up: Sparc-Dependent
   18296 
   18297 9.42.2 Enforcing aligned data
   18298 -----------------------------
   18299 
   18300 SPARC GAS normally permits data to be misaligned.  For example, it
   18301 permits the `.long' pseudo-op to be used on a byte boundary.  However,
   18302 the native SunOS assemblers issue an error when they see misaligned
   18303 data.
   18304 
   18305    You can use the `--enforce-aligned-data' option to make SPARC GAS
   18306 also issue an error about misaligned data, just as the SunOS assemblers
   18307 do.
   18308 
   18309    The `--enforce-aligned-data' option is not the default because gcc
   18310 issues misaligned data pseudo-ops when it initializes certain packed
   18311 data structures (structures defined using the `packed' attribute).  You
   18312 may have to assemble with GAS in order to initialize packed data
   18313 structures in your own code.
   18314 
   18315 
   18316 File: as.info,  Node: Sparc-Syntax,  Next: Sparc-Float,  Prev: Sparc-Aligned-Data,  Up: Sparc-Dependent
   18317 
   18318 9.42.3 Sparc Syntax
   18319 -------------------
   18320 
   18321 The assembler syntax closely follows The Sparc Architecture Manual,
   18322 versions 8 and 9, as well as most extensions defined by Sun for their
   18323 UltraSPARC and Niagara line of processors.
   18324 
   18325 * Menu:
   18326 
   18327 * Sparc-Chars::                Special Characters
   18328 * Sparc-Regs::                 Register Names
   18329 * Sparc-Constants::            Constant Names
   18330 * Sparc-Relocs::               Relocations
   18331 * Sparc-Size-Translations::    Size Translations
   18332 
   18333 
   18334 File: as.info,  Node: Sparc-Chars,  Next: Sparc-Regs,  Up: Sparc-Syntax
   18335 
   18336 9.42.3.1 Special Characters
   18337 ...........................
   18338 
   18339 A `!' character appearing anywhere on a line indicates the start of a
   18340 comment that extends to the end of that line.
   18341 
   18342    If a `#' appears as the first character of a line then the whole
   18343 line is treated as a comment, but in this case the line could also be a
   18344 logical line number directive (*note Comments::) or a preprocessor
   18345 control command (*note Preprocessing::).
   18346 
   18347    `;' can be used instead of a newline to separate statements.
   18348 
   18349 
   18350 File: as.info,  Node: Sparc-Regs,  Next: Sparc-Constants,  Prev: Sparc-Chars,  Up: Sparc-Syntax
   18351 
   18352 9.42.3.2 Register Names
   18353 .......................
   18354 
   18355 The Sparc integer register file is broken down into global, outgoing,
   18356 local, and incoming.
   18357 
   18358    * The 8 global registers are referred to as `%gN'.
   18359 
   18360    * The 8 outgoing registers are referred to as `%oN'.
   18361 
   18362    * The 8 local registers are referred to as `%lN'.
   18363 
   18364    * The 8 incoming registers are referred to as `%iN'.
   18365 
   18366    * The frame pointer register `%i6' can be referenced using the alias
   18367      `%fp'.
   18368 
   18369    * The stack pointer register `%o6' can be referenced using the alias
   18370      `%sp'.
   18371 
   18372    Floating point registers are simply referred to as `%fN'.  When
   18373 assembling for pre-V9, only 32 floating point registers are available.
   18374 For V9 and later there are 64, but there are restrictions when
   18375 referencing the upper 32 registers.  They can only be accessed as
   18376 double or quad, and thus only even or quad numbered accesses are
   18377 allowed.  For example, `%f34' is a legal floating point register, but
   18378 `%f35' is not.
   18379 
   18380    Certain V9 instructions allow access to ancillary state registers.
   18381 Most simply they can be referred to as `%asrN' where N can be from 16
   18382 to 31.  However, there are some aliases defined to reference ASR
   18383 registers defined for various UltraSPARC processors:
   18384 
   18385    * The tick compare register is referred to as `%tick_cmpr'.
   18386 
   18387    * The system tick register is referred to as `%stick'.  An alias,
   18388      `%sys_tick', exists but is deprecated and should not be used by
   18389      new software.
   18390 
   18391    * The system tick compare register is referred to as `%stick_cmpr'.
   18392      An alias, `%sys_tick_cmpr', exists but is deprecated and should
   18393      not be used by new software.
   18394 
   18395    * The software interrupt register is referred to as `%softint'.
   18396 
   18397    * The set software interrupt register is referred to as
   18398      `%set_softint'.  The mnemonic `%softint_set' is provided as an
   18399      alias.
   18400 
   18401    * The clear software interrupt register is referred to as
   18402      `%clear_softint'.  The mnemonic `%softint_clear' is provided as an
   18403      alias.
   18404 
   18405    * The performance instrumentation counters register is referred to as
   18406      `%pic'.
   18407 
   18408    * The performance control register is referred to as `%pcr'.
   18409 
   18410    * The graphics status register is referred to as `%gsr'.
   18411 
   18412    * The V9 dispatch control register is referred to as `%dcr'.
   18413 
   18414    Various V9 branch and conditional move instructions allow
   18415 specification of which set of integer condition codes to test.  These
   18416 are referred to as `%xcc' and `%icc'.
   18417 
   18418    In V9, there are 4 sets of floating point condition codes which are
   18419 referred to as `%fccN'.
   18420 
   18421    Several special privileged and non-privileged registers exist:
   18422 
   18423    * The V9 address space identifier register is referred to as `%asi'.
   18424 
   18425    * The V9 restorable windows register is referred to as `%canrestore'.
   18426 
   18427    * The V9 savable windows register is referred to as `%cansave'.
   18428 
   18429    * The V9 clean windows register is referred to as `%cleanwin'.
   18430 
   18431    * The V9 current window pointer register is referred to as `%cwp'.
   18432 
   18433    * The floating-point queue register is referred to as `%fq'.
   18434 
   18435    * The V8 co-processor queue register is referred to as `%cq'.
   18436 
   18437    * The floating point status register is referred to as `%fsr'.
   18438 
   18439    * The other windows register is referred to as `%otherwin'.
   18440 
   18441    * The V9 program counter register is referred to as `%pc'.
   18442 
   18443    * The V9 next program counter register is referred to as `%npc'.
   18444 
   18445    * The V9 processor interrupt level register is referred to as `%pil'.
   18446 
   18447    * The V9 processor state register is referred to as `%pstate'.
   18448 
   18449    * The trap base address register is referred to as `%tba'.
   18450 
   18451    * The V9 tick register is referred to as `%tick'.
   18452 
   18453    * The V9 trap level is referred to as `%tl'.
   18454 
   18455    * The V9 trap program counter is referred to as `%tpc'.
   18456 
   18457    * The V9 trap next program counter is referred to as `%tnpc'.
   18458 
   18459    * The V9 trap state is referred to as `%tstate'.
   18460 
   18461    * The V9 trap type is referred to as `%tt'.
   18462 
   18463    * The V9 condition codes is referred to as `%ccr'.
   18464 
   18465    * The V9 floating-point registers state is referred to as `%fprs'.
   18466 
   18467    * The V9 version register is referred to as `%ver'.
   18468 
   18469    * The V9 window state register is referred to as `%wstate'.
   18470 
   18471    * The Y register is referred to as `%y'.
   18472 
   18473    * The V8 window invalid mask register is referred to as `%wim'.
   18474 
   18475    * The V8 processor state register is referred to as `%psr'.
   18476 
   18477    * The V9 global register level register is referred to as `%gl'.
   18478 
   18479    Several special register names exist for hypervisor mode code:
   18480 
   18481    * The hyperprivileged processor state register is referred to as
   18482      `%hpstate'.
   18483 
   18484    * The hyperprivileged trap state register is referred to as
   18485      `%htstate'.
   18486 
   18487    * The hyperprivileged interrupt pending register is referred to as
   18488      `%hintp'.
   18489 
   18490    * The hyperprivileged trap base address register is referred to as
   18491      `%htba'.
   18492 
   18493    * The hyperprivileged implementation version register is referred to
   18494      as `%hver'.
   18495 
   18496    * The hyperprivileged system tick offset register is referred to as
   18497      `%hstick_offset'.  Note that there is no `%hstick' register, the
   18498      normal `%stick' is used.
   18499 
   18500    * The hyperprivileged system tick enable register is referred to as
   18501      `%hstick_enable'.
   18502 
   18503    * The hyperprivileged system tick compare register is referred to as
   18504      `%hstick_cmpr'.
   18505 
   18506 
   18507 File: as.info,  Node: Sparc-Constants,  Next: Sparc-Relocs,  Prev: Sparc-Regs,  Up: Sparc-Syntax
   18508 
   18509 9.42.3.3 Constants
   18510 ..................
   18511 
   18512 Several Sparc instructions take an immediate operand field for which
   18513 mnemonic names exist.  Two such examples are `membar' and `prefetch'.
   18514 Another example are the set of V9 memory access instruction that allow
   18515 specification of an address space identifier.
   18516 
   18517    The `membar' instruction specifies a memory barrier that is the
   18518 defined by the operand which is a bitmask.  The supported mask
   18519 mnemonics are:
   18520 
   18521    * `#Sync' requests that all operations (including nonmemory
   18522      reference operations) appearing prior to the `membar' must have
   18523      been performed and the effects of any exceptions become visible
   18524      before any instructions after the `membar' may be initiated.  This
   18525      corresponds to `membar' cmask field bit 2.
   18526 
   18527    * `#MemIssue' requests that all memory reference operations
   18528      appearing prior to the `membar' must have been performed before
   18529      any memory operation after the `membar' may be initiated.  This
   18530      corresponds to `membar' cmask field bit 1.
   18531 
   18532    * `#Lookaside' requests that a store appearing prior to the `membar'
   18533      must complete before any load following the `membar' referencing
   18534      the same address can be initiated.  This corresponds to `membar'
   18535      cmask field bit 0.
   18536 
   18537    * `#StoreStore' defines that the effects of all stores appearing
   18538      prior to the `membar' instruction must be visible to all
   18539      processors before the effect of any stores following the `membar'.
   18540      Equivalent to the deprecated `stbar' instruction.  This
   18541      corresponds to `membar' mmask field bit 3.
   18542 
   18543    * `#LoadStore' defines all loads appearing prior to the `membar'
   18544      instruction must have been performed before the effect of any
   18545      stores following the `membar' is visible to any other processor.
   18546      This corresponds to `membar' mmask field bit 2.
   18547 
   18548    * `#StoreLoad' defines that the effects of all stores appearing
   18549      prior to the `membar' instruction must be visible to all
   18550      processors before loads following the `membar' may be performed.
   18551      This corresponds to `membar' mmask field bit 1.
   18552 
   18553    * `#LoadLoad' defines that all loads appearing prior to the `membar'
   18554      instruction must have been performed before any loads following
   18555      the `membar' may be performed.  This corresponds to `membar' mmask
   18556      field bit 0.
   18557 
   18558 
   18559    These values can be ored together, for example:
   18560 
   18561      membar #Sync
   18562      membar #StoreLoad | #LoadLoad
   18563      membar #StoreLoad | #StoreStore
   18564 
   18565    The `prefetch' and `prefetcha' instructions take a prefetch function
   18566 code.  The following prefetch function code constant mnemonics are
   18567 available:
   18568 
   18569    * `#n_reads' requests a prefetch for several reads, and corresponds
   18570      to a prefetch function code of 0.
   18571 
   18572      `#one_read' requests a prefetch for one read, and corresponds to a
   18573      prefetch function code of 1.
   18574 
   18575      `#n_writes' requests a prefetch for several writes (and possibly
   18576      reads), and corresponds to a prefetch function code of 2.
   18577 
   18578      `#one_write' requests a prefetch for one write, and corresponds to
   18579      a prefetch function code of 3.
   18580 
   18581      `#page' requests a prefetch page, and corresponds to a prefetch
   18582      function code of 4.
   18583 
   18584      `#invalidate' requests a prefetch invalidate, and corresponds to a
   18585      prefetch function code of 16.
   18586 
   18587      `#unified' requests a prefetch to the nearest unified cache, and
   18588      corresponds to a prefetch function code of 17.
   18589 
   18590      `#n_reads_strong' requests a strong prefetch for several reads,
   18591      and corresponds to a prefetch function code of 20.
   18592 
   18593      `#one_read_strong' requests a strong prefetch for one read, and
   18594      corresponds to a prefetch function code of 21.
   18595 
   18596      `#n_writes_strong' requests a strong prefetch for several writes,
   18597      and corresponds to a prefetch function code of 22.
   18598 
   18599      `#one_write_strong' requests a strong prefetch for one write, and
   18600      corresponds to a prefetch function code of 23.
   18601 
   18602      Onle one prefetch code may be specified.  Here are some examples:
   18603 
   18604           prefetch  [%l0 + %l2], #one_read
   18605           prefetch  [%g2 + 8], #n_writes
   18606           prefetcha [%g1] 0x8, #unified
   18607           prefetcha [%o0 + 0x10] %asi, #n_reads
   18608 
   18609      The actual behavior of a given prefetch function code is processor
   18610      specific.  If a processor does not implement a given prefetch
   18611      function code, it will treat the prefetch instruction as a nop.
   18612 
   18613      For instructions that accept an immediate address space identifier,
   18614      `as' provides many mnemonics corresponding to V9 defined as well
   18615      as UltraSPARC and Niagara extended values.  For example, `#ASI_P'
   18616      and `#ASI_BLK_INIT_QUAD_LDD_AIUS'.  See the V9 and processor
   18617      specific manuals for details.
   18618 
   18619 
   18620 
   18621 File: as.info,  Node: Sparc-Relocs,  Next: Sparc-Size-Translations,  Prev: Sparc-Constants,  Up: Sparc-Syntax
   18622 
   18623 9.42.3.4 Relocations
   18624 ....................
   18625 
   18626 ELF relocations are available as defined in the 32-bit and 64-bit Sparc
   18627 ELF specifications.
   18628 
   18629    `R_SPARC_HI22' is obtained using `%hi' and `R_SPARC_LO10' is
   18630 obtained using `%lo'.  Likewise `R_SPARC_HIX22' is obtained from `%hix'
   18631 and `R_SPARC_LOX10' is obtained using `%lox'.  For example:
   18632 
   18633      sethi %hi(symbol), %g1
   18634      or    %g1, %lo(symbol), %g1
   18635 
   18636      sethi %hix(symbol), %g1
   18637      xor   %g1, %lox(symbol), %g1
   18638 
   18639    These "high" mnemonics extract bits 31:10 of their operand, and the
   18640 "low" mnemonics extract bits 9:0 of their operand.
   18641 
   18642    V9 code model relocations can be requested as follows:
   18643 
   18644    * `R_SPARC_HH22' is requested using `%hh'.  It can also be generated
   18645      using `%uhi'.
   18646 
   18647    * `R_SPARC_HM10' is requested using `%hm'.  It can also be generated
   18648      using `%ulo'.
   18649 
   18650    * `R_SPARC_LM22' is requested using `%lm'.
   18651 
   18652    * `R_SPARC_H44' is requested using `%h44'.
   18653 
   18654    * `R_SPARC_M44' is requested using `%m44'.
   18655 
   18656    * `R_SPARC_L44' is requested using `%l44' or `%l34'.
   18657 
   18658    * `R_SPARC_H34' is requested using `%h34'.
   18659 
   18660    The `%l34' generates a `R_SPARC_L44' relocation because it
   18661 calculates the necessary value, and therefore no explicit `R_SPARC_L34'
   18662 relocation needed to be created for this purpose.
   18663 
   18664    The `%h34' and `%l34' relocations are used for the abs34 code model.
   18665 Here is an example abs34 address generation sequence:
   18666 
   18667      sethi %h34(symbol), %g1
   18668      sllx  %g1, 2, %g1
   18669      or    %g1, %l34(symbol), %g1
   18670 
   18671    The PC relative relocation `R_SPARC_PC22' can be obtained by
   18672 enclosing an operand inside of `%pc22'.  Likewise, the `R_SPARC_PC10'
   18673 relocation can be obtained using `%pc10'.  These are mostly used when
   18674 assembling PIC code.  For example, the standard PIC sequence on Sparc
   18675 to get the base of the global offset table, PC relative, into a
   18676 register, can be performed as:
   18677 
   18678      sethi %pc22(_GLOBAL_OFFSET_TABLE_-4), %l7
   18679      add   %l7, %pc10(_GLOBAL_OFFSET_TABLE_+4), %l7
   18680 
   18681    Several relocations exist to allow the link editor to potentially
   18682 optimize GOT data references.  The `R_SPARC_GOTDATA_OP_HIX22'
   18683 relocation can obtained by enclosing an operand inside of
   18684 `%gdop_hix22'.  The `R_SPARC_GOTDATA_OP_LOX10' relocation can obtained
   18685 by enclosing an operand inside of `%gdop_lox10'.  Likewise,
   18686 `R_SPARC_GOTDATA_OP' can be obtained by enclosing an operand inside of
   18687 `%gdop'.  For example, assuming the GOT base is in register `%l7':
   18688 
   18689      sethi %gdop_hix22(symbol), %l1
   18690      xor   %l1, %gdop_lox10(symbol), %l1
   18691      ld    [%l7 + %l1], %l2, %gdop(symbol)
   18692 
   18693    There are many relocations that can be requested for access to
   18694 thread local storage variables.  All of the Sparc TLS mnemonics are
   18695 supported:
   18696 
   18697    * `R_SPARC_TLS_GD_HI22' is requested using `%tgd_hi22'.
   18698 
   18699    * `R_SPARC_TLS_GD_LO10' is requested using `%tgd_lo10'.
   18700 
   18701    * `R_SPARC_TLS_GD_ADD' is requested using `%tgd_add'.
   18702 
   18703    * `R_SPARC_TLS_GD_CALL' is requested using `%tgd_call'.
   18704 
   18705    * `R_SPARC_TLS_LDM_HI22' is requested using `%tldm_hi22'.
   18706 
   18707    * `R_SPARC_TLS_LDM_LO10' is requested using `%tldm_lo10'.
   18708 
   18709    * `R_SPARC_TLS_LDM_ADD' is requested using `%tldm_add'.
   18710 
   18711    * `R_SPARC_TLS_LDM_CALL' is requested using `%tldm_call'.
   18712 
   18713    * `R_SPARC_TLS_LDO_HIX22' is requested using `%tldo_hix22'.
   18714 
   18715    * `R_SPARC_TLS_LDO_LOX10' is requested using `%tldo_lox10'.
   18716 
   18717    * `R_SPARC_TLS_LDO_ADD' is requested using `%tldo_add'.
   18718 
   18719    * `R_SPARC_TLS_IE_HI22' is requested using `%tie_hi22'.
   18720 
   18721    * `R_SPARC_TLS_IE_LO10' is requested using `%tie_lo10'.
   18722 
   18723    * `R_SPARC_TLS_IE_LD' is requested using `%tie_ld'.
   18724 
   18725    * `R_SPARC_TLS_IE_LDX' is requested using `%tie_ldx'.
   18726 
   18727    * `R_SPARC_TLS_IE_ADD' is requested using `%tie_add'.
   18728 
   18729    * `R_SPARC_TLS_LE_HIX22' is requested using `%tle_hix22'.
   18730 
   18731    * `R_SPARC_TLS_LE_LOX10' is requested using `%tle_lox10'.
   18732 
   18733    Here are some example TLS model sequences.
   18734 
   18735    First, General Dynamic:
   18736 
   18737      sethi  %tgd_hi22(symbol), %l1
   18738      add    %l1, %tgd_lo10(symbol), %l1
   18739      add    %l7, %l1, %o0, %tgd_add(symbol)
   18740      call   __tls_get_addr, %tgd_call(symbol)
   18741      nop
   18742 
   18743    Local Dynamic:
   18744 
   18745      sethi  %tldm_hi22(symbol), %l1
   18746      add    %l1, %tldm_lo10(symbol), %l1
   18747      add    %l7, %l1, %o0, %tldm_add(symbol)
   18748      call   __tls_get_addr, %tldm_call(symbol)
   18749      nop
   18750 
   18751      sethi  %tldo_hix22(symbol), %l1
   18752      xor    %l1, %tldo_lox10(symbol), %l1
   18753      add    %o0, %l1, %l1, %tldo_add(symbol)
   18754 
   18755    Initial Exec:
   18756 
   18757      sethi  %tie_hi22(symbol), %l1
   18758      add    %l1, %tie_lo10(symbol), %l1
   18759      ld     [%l7 + %l1], %o0, %tie_ld(symbol)
   18760      add    %g7, %o0, %o0, %tie_add(symbol)
   18761 
   18762      sethi  %tie_hi22(symbol), %l1
   18763      add    %l1, %tie_lo10(symbol), %l1
   18764      ldx    [%l7 + %l1], %o0, %tie_ldx(symbol)
   18765      add    %g7, %o0, %o0, %tie_add(symbol)
   18766 
   18767    And finally, Local Exec:
   18768 
   18769      sethi  %tle_hix22(symbol), %l1
   18770      add    %l1, %tle_lox10(symbol), %l1
   18771      add    %g7, %l1, %l1
   18772 
   18773    When assembling for 64-bit, and a secondary constant addend is
   18774 specified in an address expression that would normally generate an
   18775 `R_SPARC_LO10' relocation, the assembler will emit an `R_SPARC_OLO10'
   18776 instead.
   18777 
   18778 
   18779 File: as.info,  Node: Sparc-Size-Translations,  Prev: Sparc-Relocs,  Up: Sparc-Syntax
   18780 
   18781 9.42.3.5 Size Translations
   18782 ..........................
   18783 
   18784 Often it is desirable to write code in an operand size agnostic manner.
   18785 `as' provides support for this via operand size opcode translations.
   18786 Translations are supported for loads, stores, shifts, compare-and-swap
   18787 atomics, and the `clr' synthetic instruction.
   18788 
   18789    If generating 32-bit code, `as' will generate the 32-bit opcode.
   18790 Whereas if 64-bit code is being generated, the 64-bit opcode will be
   18791 emitted.  For example `ldn' will be transformed into `ld' for 32-bit
   18792 code and `ldx' for 64-bit code.
   18793 
   18794    Here is an example meant to demonstrate all the supported opcode
   18795 translations:
   18796 
   18797      ldn   [%o0], %o1
   18798      ldna  [%o0] %asi, %o2
   18799      stn   %o1, [%o0]
   18800      stna  %o2, [%o0] %asi
   18801      slln  %o3, 3, %o3
   18802      srln  %o4, 8, %o4
   18803      sran  %o5, 12, %o5
   18804      casn  [%o0], %o1, %o2
   18805      casna [%o0] %asi, %o1, %o2
   18806      clrn  %g1
   18807 
   18808    In 32-bit mode `as' will emit:
   18809 
   18810      ld   [%o0], %o1
   18811      lda  [%o0] %asi, %o2
   18812      st   %o1, [%o0]
   18813      sta  %o2, [%o0] %asi
   18814      sll  %o3, 3, %o3
   18815      srl  %o4, 8, %o4
   18816      sra  %o5, 12, %o5
   18817      cas  [%o0], %o1, %o2
   18818      casa [%o0] %asi, %o1, %o2
   18819      clr  %g1
   18820 
   18821    And in 64-bit mode `as' will emit:
   18822 
   18823      ldx   [%o0], %o1
   18824      ldxa  [%o0] %asi, %o2
   18825      stx   %o1, [%o0]
   18826      stxa  %o2, [%o0] %asi
   18827      sllx  %o3, 3, %o3
   18828      srlx  %o4, 8, %o4
   18829      srax  %o5, 12, %o5
   18830      casx  [%o0], %o1, %o2
   18831      casxa [%o0] %asi, %o1, %o2
   18832      clrx  %g1
   18833 
   18834    Finally, the `.nword' translating directive is supported as well.
   18835 It is documented in the section on Sparc machine directives.
   18836 
   18837 
   18838 File: as.info,  Node: Sparc-Float,  Next: Sparc-Directives,  Prev: Sparc-Syntax,  Up: Sparc-Dependent
   18839 
   18840 9.42.4 Floating Point
   18841 ---------------------
   18842 
   18843 The Sparc uses IEEE floating-point numbers.
   18844 
   18845 
   18846 File: as.info,  Node: Sparc-Directives,  Prev: Sparc-Float,  Up: Sparc-Dependent
   18847 
   18848 9.42.5 Sparc Machine Directives
   18849 -------------------------------
   18850 
   18851 The Sparc version of `as' supports the following additional machine
   18852 directives:
   18853 
   18854 `.align'
   18855      This must be followed by the desired alignment in bytes.
   18856 
   18857 `.common'
   18858      This must be followed by a symbol name, a positive number, and
   18859      `"bss"'.  This behaves somewhat like `.comm', but the syntax is
   18860      different.
   18861 
   18862 `.half'
   18863      This is functionally identical to `.short'.
   18864 
   18865 `.nword'
   18866      On the Sparc, the `.nword' directive produces native word sized
   18867      value, ie. if assembling with -32 it is equivalent to `.word', if
   18868      assembling with -64 it is equivalent to `.xword'.
   18869 
   18870 `.proc'
   18871      This directive is ignored.  Any text following it on the same line
   18872      is also ignored.
   18873 
   18874 `.register'
   18875      This directive declares use of a global application or system
   18876      register.  It must be followed by a register name %g2, %g3, %g6 or
   18877      %g7, comma and the symbol name for that register.  If symbol name
   18878      is `#scratch', it is a scratch register, if it is `#ignore', it
   18879      just suppresses any errors about using undeclared global register,
   18880      but does not emit any information about it into the object file.
   18881      This can be useful e.g. if you save the register before use and
   18882      restore it after.
   18883 
   18884 `.reserve'
   18885      This must be followed by a symbol name, a positive number, and
   18886      `"bss"'.  This behaves somewhat like `.lcomm', but the syntax is
   18887      different.
   18888 
   18889 `.seg'
   18890      This must be followed by `"text"', `"data"', or `"data1"'.  It
   18891      behaves like `.text', `.data', or `.data 1'.
   18892 
   18893 `.skip'
   18894      This is functionally identical to the `.space' directive.
   18895 
   18896 `.word'
   18897      On the Sparc, the `.word' directive produces 32 bit values,
   18898      instead of the 16 bit values it produces on many other machines.
   18899 
   18900 `.xword'
   18901      On the Sparc V9 processor, the `.xword' directive produces 64 bit
   18902      values.
   18903 
   18904 
   18905 File: as.info,  Node: TIC54X-Dependent,  Next: TIC6X-Dependent,  Prev: Sparc-Dependent,  Up: Machine Dependencies
   18906 
   18907 9.43 TIC54X Dependent Features
   18908 ==============================
   18909 
   18910 * Menu:
   18911 
   18912 * TIC54X-Opts::              Command-line Options
   18913 * TIC54X-Block::             Blocking
   18914 * TIC54X-Env::               Environment Settings
   18915 * TIC54X-Constants::         Constants Syntax
   18916 * TIC54X-Subsyms::           String Substitution
   18917 * TIC54X-Locals::            Local Label Syntax
   18918 * TIC54X-Builtins::          Builtin Assembler Math Functions
   18919 * TIC54X-Ext::               Extended Addressing Support
   18920 * TIC54X-Directives::        Directives
   18921 * TIC54X-Macros::            Macro Features
   18922 * TIC54X-MMRegs::            Memory-mapped Registers
   18923 * TIC54X-Syntax::            Syntax
   18924 
   18925 
   18926 File: as.info,  Node: TIC54X-Opts,  Next: TIC54X-Block,  Up: TIC54X-Dependent
   18927 
   18928 9.43.1 Options
   18929 --------------
   18930 
   18931 The TMS320C54X version of `as' has a few machine-dependent options.
   18932 
   18933    You can use the `-mfar-mode' option to enable extended addressing
   18934 mode.  All addresses will be assumed to be > 16 bits, and the
   18935 appropriate relocation types will be used.  This option is equivalent
   18936 to using the `.far_mode' directive in the assembly code.  If you do not
   18937 use the `-mfar-mode' option, all references will be assumed to be 16
   18938 bits.  This option may be abbreviated to `-mf'.
   18939 
   18940    You can use the `-mcpu' option to specify a particular CPU.  This
   18941 option is equivalent to using the `.version' directive in the assembly
   18942 code.  For recognized CPU codes, see *Note `.version':
   18943 TIC54X-Directives.  The default CPU version is `542'.
   18944 
   18945    You can use the `-merrors-to-file' option to redirect error output
   18946 to a file (this provided for those deficient environments which don't
   18947 provide adequate output redirection).  This option may be abbreviated to
   18948 `-me'.
   18949 
   18950 
   18951 File: as.info,  Node: TIC54X-Block,  Next: TIC54X-Env,  Prev: TIC54X-Opts,  Up: TIC54X-Dependent
   18952 
   18953 9.43.2 Blocking
   18954 ---------------
   18955 
   18956 A blocked section or memory block is guaranteed not to cross the
   18957 blocking boundary (usually a page, or 128 words) if it is smaller than
   18958 the blocking size, or to start on a page boundary if it is larger than
   18959 the blocking size.
   18960 
   18961 
   18962 File: as.info,  Node: TIC54X-Env,  Next: TIC54X-Constants,  Prev: TIC54X-Block,  Up: TIC54X-Dependent
   18963 
   18964 9.43.3 Environment Settings
   18965 ---------------------------
   18966 
   18967 `C54XDSP_DIR' and `A_DIR' are semicolon-separated paths which are added
   18968 to the list of directories normally searched for source and include
   18969 files.  `C54XDSP_DIR' will override `A_DIR'.
   18970 
   18971 
   18972 File: as.info,  Node: TIC54X-Constants,  Next: TIC54X-Subsyms,  Prev: TIC54X-Env,  Up: TIC54X-Dependent
   18973 
   18974 9.43.4 Constants Syntax
   18975 -----------------------
   18976 
   18977 The TIC54X version of `as' allows the following additional constant
   18978 formats, using a suffix to indicate the radix:
   18979 
   18980      Binary                  `000000B, 011000b'
   18981      Octal                   `10Q, 224q'
   18982      Hexadecimal             `45h, 0FH'
   18983 
   18984 
   18985 File: as.info,  Node: TIC54X-Subsyms,  Next: TIC54X-Locals,  Prev: TIC54X-Constants,  Up: TIC54X-Dependent
   18986 
   18987 9.43.5 String Substitution
   18988 --------------------------
   18989 
   18990 A subset of allowable symbols (which we'll call subsyms) may be assigned
   18991 arbitrary string values.  This is roughly equivalent to C preprocessor
   18992 #define macros.  When `as' encounters one of these symbols, the symbol
   18993 is replaced in the input stream by its string value.  Subsym names
   18994 *must* begin with a letter.
   18995 
   18996    Subsyms may be defined using the `.asg' and `.eval' directives
   18997 (*Note `.asg': TIC54X-Directives, *Note `.eval': TIC54X-Directives.
   18998 
   18999    Expansion is recursive until a previously encountered symbol is
   19000 seen, at which point substitution stops.
   19001 
   19002    In this example, x is replaced with SYM2; SYM2 is replaced with
   19003 SYM1, and SYM1 is replaced with x.  At this point, x has already been
   19004 encountered and the substitution stops.
   19005 
   19006       .asg   "x",SYM1
   19007       .asg   "SYM1",SYM2
   19008       .asg   "SYM2",x
   19009       add    x,a             ; final code assembled is "add  x, a"
   19010 
   19011    Macro parameters are converted to subsyms; a side effect of this is
   19012 the normal `as' '\ARG' dereferencing syntax is unnecessary.  Subsyms
   19013 defined within a macro will have global scope, unless the `.var'
   19014 directive is used to identify the subsym as a local macro variable
   19015 *note `.var': TIC54X-Directives.
   19016 
   19017    Substitution may be forced in situations where replacement might be
   19018 ambiguous by placing colons on either side of the subsym.  The following
   19019 code:
   19020 
   19021       .eval  "10",x
   19022      LAB:X:  add     #x, a
   19023 
   19024    When assembled becomes:
   19025 
   19026      LAB10  add     #10, a
   19027 
   19028    Smaller parts of the string assigned to a subsym may be accessed with
   19029 the following syntax:
   19030 
   19031 ``:SYMBOL(CHAR_INDEX):''
   19032      Evaluates to a single-character string, the character at
   19033      CHAR_INDEX.
   19034 
   19035 ``:SYMBOL(START,LENGTH):''
   19036      Evaluates to a substring of SYMBOL beginning at START with length
   19037      LENGTH.
   19038 
   19039 
   19040 File: as.info,  Node: TIC54X-Locals,  Next: TIC54X-Builtins,  Prev: TIC54X-Subsyms,  Up: TIC54X-Dependent
   19041 
   19042 9.43.6 Local Labels
   19043 -------------------
   19044 
   19045 Local labels may be defined in two ways:
   19046 
   19047    * $N, where N is a decimal number between 0 and 9
   19048 
   19049    * LABEL?, where LABEL is any legal symbol name.
   19050 
   19051    Local labels thus defined may be redefined or automatically
   19052 generated.  The scope of a local label is based on when it may be
   19053 undefined or reset.  This happens when one of the following situations
   19054 is encountered:
   19055 
   19056    * .newblock directive *note `.newblock': TIC54X-Directives.
   19057 
   19058    * The current section is changed (.sect, .text, or .data)
   19059 
   19060    * Entering or leaving an included file
   19061 
   19062    * The macro scope where the label was defined is exited
   19063 
   19064 
   19065 File: as.info,  Node: TIC54X-Builtins,  Next: TIC54X-Ext,  Prev: TIC54X-Locals,  Up: TIC54X-Dependent
   19066 
   19067 9.43.7 Math Builtins
   19068 --------------------
   19069 
   19070 The following built-in functions may be used to generate a
   19071 floating-point value.  All return a floating-point value except `$cvi',
   19072 `$int', and `$sgn', which return an integer value.
   19073 
   19074 ``$acos(EXPR)''
   19075      Returns the floating point arccosine of EXPR.
   19076 
   19077 ``$asin(EXPR)''
   19078      Returns the floating point arcsine of EXPR.
   19079 
   19080 ``$atan(EXPR)''
   19081      Returns the floating point arctangent of EXPR.
   19082 
   19083 ``$atan2(EXPR1,EXPR2)''
   19084      Returns the floating point arctangent of EXPR1 / EXPR2.
   19085 
   19086 ``$ceil(EXPR)''
   19087      Returns the smallest integer not less than EXPR as floating point.
   19088 
   19089 ``$cosh(EXPR)''
   19090      Returns the floating point hyperbolic cosine of EXPR.
   19091 
   19092 ``$cos(EXPR)''
   19093      Returns the floating point cosine of EXPR.
   19094 
   19095 ``$cvf(EXPR)''
   19096      Returns the integer value EXPR converted to floating-point.
   19097 
   19098 ``$cvi(EXPR)''
   19099      Returns the floating point value EXPR converted to integer.
   19100 
   19101 ``$exp(EXPR)''
   19102      Returns the floating point value e ^ EXPR.
   19103 
   19104 ``$fabs(EXPR)''
   19105      Returns the floating point absolute value of EXPR.
   19106 
   19107 ``$floor(EXPR)''
   19108      Returns the largest integer that is not greater than EXPR as
   19109      floating point.
   19110 
   19111 ``$fmod(EXPR1,EXPR2)''
   19112      Returns the floating point remainder of EXPR1 / EXPR2.
   19113 
   19114 ``$int(EXPR)''
   19115      Returns 1 if EXPR evaluates to an integer, zero otherwise.
   19116 
   19117 ``$ldexp(EXPR1,EXPR2)''
   19118      Returns the floating point value EXPR1 * 2 ^ EXPR2.
   19119 
   19120 ``$log10(EXPR)''
   19121      Returns the base 10 logarithm of EXPR.
   19122 
   19123 ``$log(EXPR)''
   19124      Returns the natural logarithm of EXPR.
   19125 
   19126 ``$max(EXPR1,EXPR2)''
   19127      Returns the floating point maximum of EXPR1 and EXPR2.
   19128 
   19129 ``$min(EXPR1,EXPR2)''
   19130      Returns the floating point minimum of EXPR1 and EXPR2.
   19131 
   19132 ``$pow(EXPR1,EXPR2)''
   19133      Returns the floating point value EXPR1 ^ EXPR2.
   19134 
   19135 ``$round(EXPR)''
   19136      Returns the nearest integer to EXPR as a floating point number.
   19137 
   19138 ``$sgn(EXPR)''
   19139      Returns -1, 0, or 1 based on the sign of EXPR.
   19140 
   19141 ``$sin(EXPR)''
   19142      Returns the floating point sine of EXPR.
   19143 
   19144 ``$sinh(EXPR)''
   19145      Returns the floating point hyperbolic sine of EXPR.
   19146 
   19147 ``$sqrt(EXPR)''
   19148      Returns the floating point square root of EXPR.
   19149 
   19150 ``$tan(EXPR)''
   19151      Returns the floating point tangent of EXPR.
   19152 
   19153 ``$tanh(EXPR)''
   19154      Returns the floating point hyperbolic tangent of EXPR.
   19155 
   19156 ``$trunc(EXPR)''
   19157      Returns the integer value of EXPR truncated towards zero as
   19158      floating point.
   19159 
   19160 
   19161 
   19162 File: as.info,  Node: TIC54X-Ext,  Next: TIC54X-Directives,  Prev: TIC54X-Builtins,  Up: TIC54X-Dependent
   19163 
   19164 9.43.8 Extended Addressing
   19165 --------------------------
   19166 
   19167 The `LDX' pseudo-op is provided for loading the extended addressing bits
   19168 of a label or address.  For example, if an address `_label' resides in
   19169 extended program memory, the value of `_label' may be loaded as follows:
   19170       ldx     #_label,16,a    ; loads extended bits of _label
   19171       or      #_label,a       ; loads lower 16 bits of _label
   19172       bacc    a               ; full address is in accumulator A
   19173 
   19174 
   19175 File: as.info,  Node: TIC54X-Directives,  Next: TIC54X-Macros,  Prev: TIC54X-Ext,  Up: TIC54X-Dependent
   19176 
   19177 9.43.9 Directives
   19178 -----------------
   19179 
   19180 `.align [SIZE]'
   19181 `.even'
   19182      Align the section program counter on the next boundary, based on
   19183      SIZE.  SIZE may be any power of 2.  `.even' is equivalent to
   19184      `.align' with a SIZE of 2.
   19185     `1'
   19186           Align SPC to word boundary
   19187 
   19188     `2'
   19189           Align SPC to longword boundary (same as .even)
   19190 
   19191     `128'
   19192           Align SPC to page boundary
   19193 
   19194 `.asg STRING, NAME'
   19195      Assign NAME the string STRING.  String replacement is performed on
   19196      STRING before assignment.
   19197 
   19198 `.eval STRING, NAME'
   19199      Evaluate the contents of string STRING and assign the result as a
   19200      string to the subsym NAME.  String replacement is performed on
   19201      STRING before assignment.
   19202 
   19203 `.bss SYMBOL, SIZE [, [BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
   19204      Reserve space for SYMBOL in the .bss section.  SIZE is in words.
   19205      If present, BLOCKING_FLAG indicates the allocated space should be
   19206      aligned on a page boundary if it would otherwise cross a page
   19207      boundary.  If present, ALIGNMENT_FLAG causes the assembler to
   19208      allocate SIZE on a long word boundary.
   19209 
   19210 `.byte VALUE [,...,VALUE_N]'
   19211 `.ubyte VALUE [,...,VALUE_N]'
   19212 `.char VALUE [,...,VALUE_N]'
   19213 `.uchar VALUE [,...,VALUE_N]'
   19214      Place one or more bytes into consecutive words of the current
   19215      section.  The upper 8 bits of each word is zero-filled.  If a
   19216      label is used, it points to the word allocated for the first byte
   19217      encountered.
   19218 
   19219 `.clink ["SECTION_NAME"]'
   19220      Set STYP_CLINK flag for this section, which indicates to the
   19221      linker that if no symbols from this section are referenced, the
   19222      section should not be included in the link.  If SECTION_NAME is
   19223      omitted, the current section is used.
   19224 
   19225 `.c_mode'
   19226      TBD.
   19227 
   19228 `.copy "FILENAME" | FILENAME'
   19229 `.include "FILENAME" | FILENAME'
   19230      Read source statements from FILENAME.  The normal include search
   19231      path is used.  Normally .copy will cause statements from the
   19232      included file to be printed in the assembly listing and .include
   19233      will not, but this distinction is not currently implemented.
   19234 
   19235 `.data'
   19236      Begin assembling code into the .data section.
   19237 
   19238 `.double VALUE [,...,VALUE_N]'
   19239 `.ldouble VALUE [,...,VALUE_N]'
   19240 `.float VALUE [,...,VALUE_N]'
   19241 `.xfloat VALUE [,...,VALUE_N]'
   19242      Place an IEEE single-precision floating-point representation of
   19243      one or more floating-point values into the current section.  All
   19244      but `.xfloat' align the result on a longword boundary.  Values are
   19245      stored most-significant word first.
   19246 
   19247 `.drlist'
   19248 `.drnolist'
   19249      Control printing of directives to the listing file.  Ignored.
   19250 
   19251 `.emsg STRING'
   19252 `.mmsg STRING'
   19253 `.wmsg STRING'
   19254      Emit a user-defined error, message, or warning, respectively.
   19255 
   19256 `.far_mode'
   19257      Use extended addressing when assembling statements.  This should
   19258      appear only once per file, and is equivalent to the -mfar-mode
   19259      option *note `-mfar-mode': TIC54X-Opts.
   19260 
   19261 `.fclist'
   19262 `.fcnolist'
   19263      Control printing of false conditional blocks to the listing file.
   19264 
   19265 `.field VALUE [,SIZE]'
   19266      Initialize a bitfield of SIZE bits in the current section.  If
   19267      VALUE is relocatable, then SIZE must be 16.  SIZE defaults to 16
   19268      bits.  If VALUE does not fit into SIZE bits, the value will be
   19269      truncated.  Successive `.field' directives will pack starting at
   19270      the current word, filling the most significant bits first, and
   19271      aligning to the start of the next word if the field size does not
   19272      fit into the space remaining in the current word.  A `.align'
   19273      directive with an operand of 1 will force the next `.field'
   19274      directive to begin packing into a new word.  If a label is used, it
   19275      points to the word that contains the specified field.
   19276 
   19277 `.global SYMBOL [,...,SYMBOL_N]'
   19278 `.def SYMBOL [,...,SYMBOL_N]'
   19279 `.ref SYMBOL [,...,SYMBOL_N]'
   19280      `.def' nominally identifies a symbol defined in the current file
   19281      and available to other files.  `.ref' identifies a symbol used in
   19282      the current file but defined elsewhere.  Both map to the standard
   19283      `.global' directive.
   19284 
   19285 `.half VALUE [,...,VALUE_N]'
   19286 `.uhalf VALUE [,...,VALUE_N]'
   19287 `.short VALUE [,...,VALUE_N]'
   19288 `.ushort VALUE [,...,VALUE_N]'
   19289 `.int VALUE [,...,VALUE_N]'
   19290 `.uint VALUE [,...,VALUE_N]'
   19291 `.word VALUE [,...,VALUE_N]'
   19292 `.uword VALUE [,...,VALUE_N]'
   19293      Place one or more values into consecutive words of the current
   19294      section.  If a label is used, it points to the word allocated for
   19295      the first value encountered.
   19296 
   19297 `.label SYMBOL'
   19298      Define a special SYMBOL to refer to the load time address of the
   19299      current section program counter.
   19300 
   19301 `.length'
   19302 `.width'
   19303      Set the page length and width of the output listing file.  Ignored.
   19304 
   19305 `.list'
   19306 `.nolist'
   19307      Control whether the source listing is printed.  Ignored.
   19308 
   19309 `.long VALUE [,...,VALUE_N]'
   19310 `.ulong VALUE [,...,VALUE_N]'
   19311 `.xlong VALUE [,...,VALUE_N]'
   19312      Place one or more 32-bit values into consecutive words in the
   19313      current section.  The most significant word is stored first.
   19314      `.long' and `.ulong' align the result on a longword boundary;
   19315      `xlong' does not.
   19316 
   19317 `.loop [COUNT]'
   19318 `.break [CONDITION]'
   19319 `.endloop'
   19320      Repeatedly assemble a block of code.  `.loop' begins the block, and
   19321      `.endloop' marks its termination.  COUNT defaults to 1024, and
   19322      indicates the number of times the block should be repeated.
   19323      `.break' terminates the loop so that assembly begins after the
   19324      `.endloop' directive.  The optional CONDITION will cause the loop
   19325      to terminate only if it evaluates to zero.
   19326 
   19327 `MACRO_NAME .macro [PARAM1][,...PARAM_N]'
   19328 `[.mexit]'
   19329 `.endm'
   19330      See the section on macros for more explanation (*Note
   19331      TIC54X-Macros::.
   19332 
   19333 `.mlib "FILENAME" | FILENAME'
   19334      Load the macro library FILENAME.  FILENAME must be an archived
   19335      library (BFD ar-compatible) of text files, expected to contain
   19336      only macro definitions.   The standard include search path is used.
   19337 
   19338 `.mlist'
   19339 `.mnolist'
   19340      Control whether to include macro and loop block expansions in the
   19341      listing output.  Ignored.
   19342 
   19343 `.mmregs'
   19344      Define global symbolic names for the 'c54x registers.  Supposedly
   19345      equivalent to executing `.set' directives for each register with
   19346      its memory-mapped value, but in reality is provided only for
   19347      compatibility and does nothing.
   19348 
   19349 `.newblock'
   19350      This directive resets any TIC54X local labels currently defined.
   19351      Normal `as' local labels are unaffected.
   19352 
   19353 `.option OPTION_LIST'
   19354      Set listing options.  Ignored.
   19355 
   19356 `.sblock "SECTION_NAME" | SECTION_NAME [,"NAME_N" | NAME_N]'
   19357      Designate SECTION_NAME for blocking.  Blocking guarantees that a
   19358      section will start on a page boundary (128 words) if it would
   19359      otherwise cross a page boundary.  Only initialized sections may be
   19360      designated with this directive.  See also *Note TIC54X-Block::.
   19361 
   19362 `.sect "SECTION_NAME"'
   19363      Define a named initialized section and make it the current section.
   19364 
   19365 `SYMBOL .set "VALUE"'
   19366 `SYMBOL .equ "VALUE"'
   19367      Equate a constant VALUE to a SYMBOL, which is placed in the symbol
   19368      table.  SYMBOL may not be previously defined.
   19369 
   19370 `.space SIZE_IN_BITS'
   19371 `.bes SIZE_IN_BITS'
   19372      Reserve the given number of bits in the current section and
   19373      zero-fill them.  If a label is used with `.space', it points to the
   19374      *first* word reserved.  With `.bes', the label points to the
   19375      *last* word reserved.
   19376 
   19377 `.sslist'
   19378 `.ssnolist'
   19379      Controls the inclusion of subsym replacement in the listing
   19380      output.  Ignored.
   19381 
   19382 `.string "STRING" [,...,"STRING_N"]'
   19383 `.pstring "STRING" [,...,"STRING_N"]'
   19384      Place 8-bit characters from STRING into the current section.
   19385      `.string' zero-fills the upper 8 bits of each word, while
   19386      `.pstring' puts two characters into each word, filling the
   19387      most-significant bits first.  Unused space is zero-filled.  If a
   19388      label is used, it points to the first word initialized.
   19389 
   19390 `[STAG] .struct [OFFSET]'
   19391 `[NAME_1] element [COUNT_1]'
   19392 `[NAME_2] element [COUNT_2]'
   19393 `[TNAME] .tag STAGX [TCOUNT]'
   19394 `...'
   19395 `[NAME_N] element [COUNT_N]'
   19396 `[SSIZE] .endstruct'
   19397 `LABEL .tag [STAG]'
   19398      Assign symbolic offsets to the elements of a structure.  STAG
   19399      defines a symbol to use to reference the structure.  OFFSET
   19400      indicates a starting value to use for the first element
   19401      encountered; otherwise it defaults to zero.  Each element can have
   19402      a named offset, NAME, which is a symbol assigned the value of the
   19403      element's offset into the structure.  If STAG is missing, these
   19404      become global symbols.  COUNT adjusts the offset that many times,
   19405      as if `element' were an array.  `element' may be one of `.byte',
   19406      `.word', `.long', `.float', or any equivalent of those, and the
   19407      structure offset is adjusted accordingly.  `.field' and `.string'
   19408      are also allowed; the size of `.field' is one bit, and `.string'
   19409      is considered to be one word in size.  Only element descriptors,
   19410      structure/union tags, `.align' and conditional assembly directives
   19411      are allowed within `.struct'/`.endstruct'.  `.align' aligns member
   19412      offsets to word boundaries only.  SSIZE, if provided, will always
   19413      be assigned the size of the structure.
   19414 
   19415      The `.tag' directive, in addition to being used to define a
   19416      structure/union element within a structure, may be used to apply a
   19417      structure to a symbol.  Once applied to LABEL, the individual
   19418      structure elements may be applied to LABEL to produce the desired
   19419      offsets using LABEL as the structure base.
   19420 
   19421 `.tab'
   19422      Set the tab size in the output listing.  Ignored.
   19423 
   19424 `[UTAG] .union'
   19425 `[NAME_1] element [COUNT_1]'
   19426 `[NAME_2] element [COUNT_2]'
   19427 `[TNAME] .tag UTAGX[,TCOUNT]'
   19428 `...'
   19429 `[NAME_N] element [COUNT_N]'
   19430 `[USIZE] .endstruct'
   19431 `LABEL .tag [UTAG]'
   19432      Similar to `.struct', but the offset after each element is reset to
   19433      zero, and the USIZE is set to the maximum of all defined elements.
   19434      Starting offset for the union is always zero.
   19435 
   19436 `[SYMBOL] .usect "SECTION_NAME", SIZE, [,[BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
   19437      Reserve space for variables in a named, uninitialized section
   19438      (similar to .bss).  `.usect' allows definitions sections
   19439      independent of .bss.  SYMBOL points to the first location reserved
   19440      by this allocation.  The symbol may be used as a variable name.
   19441      SIZE is the allocated size in words.  BLOCKING_FLAG indicates
   19442      whether to block this section on a page boundary (128 words)
   19443      (*note TIC54X-Block::).  ALIGNMENT FLAG indicates whether the
   19444      section should be longword-aligned.
   19445 
   19446 `.var SYM[,..., SYM_N]'
   19447      Define a subsym to be a local variable within a macro.  See *Note
   19448      TIC54X-Macros::.
   19449 
   19450 `.version VERSION'
   19451      Set which processor to build instructions for.  Though the
   19452      following values are accepted, the op is ignored.
   19453     `541'
   19454     `542'
   19455     `543'
   19456     `545'
   19457     `545LP'
   19458     `546LP'
   19459     `548'
   19460     `549'
   19461 
   19462 
   19463 File: as.info,  Node: TIC54X-Macros,  Next: TIC54X-MMRegs,  Prev: TIC54X-Directives,  Up: TIC54X-Dependent
   19464 
   19465 9.43.10 Macros
   19466 --------------
   19467 
   19468 Macros do not require explicit dereferencing of arguments (i.e., \ARG).
   19469 
   19470    During macro expansion, the macro parameters are converted to
   19471 subsyms.  If the number of arguments passed the macro invocation
   19472 exceeds the number of parameters defined, the last parameter is
   19473 assigned the string equivalent of all remaining arguments.  If fewer
   19474 arguments are given than parameters, the missing parameters are
   19475 assigned empty strings.  To include a comma in an argument, you must
   19476 enclose the argument in quotes.
   19477 
   19478    The following built-in subsym functions allow examination of the
   19479 string value of subsyms (or ordinary strings).  The arguments are
   19480 strings unless otherwise indicated (subsyms passed as args will be
   19481 replaced by the strings they represent).
   19482 ``$symlen(STR)''
   19483      Returns the length of STR.
   19484 
   19485 ``$symcmp(STR1,STR2)''
   19486      Returns 0 if STR1 == STR2, non-zero otherwise.
   19487 
   19488 ``$firstch(STR,CH)''
   19489      Returns index of the first occurrence of character constant CH in
   19490      STR.
   19491 
   19492 ``$lastch(STR,CH)''
   19493      Returns index of the last occurrence of character constant CH in
   19494      STR.
   19495 
   19496 ``$isdefed(SYMBOL)''
   19497      Returns zero if the symbol SYMBOL is not in the symbol table,
   19498      non-zero otherwise.
   19499 
   19500 ``$ismember(SYMBOL,LIST)''
   19501      Assign the first member of comma-separated string LIST to SYMBOL;
   19502      LIST is reassigned the remainder of the list.  Returns zero if
   19503      LIST is a null string.  Both arguments must be subsyms.
   19504 
   19505 ``$iscons(EXPR)''
   19506      Returns 1 if string EXPR is binary, 2 if octal, 3 if hexadecimal,
   19507      4 if a character, 5 if decimal, and zero if not an integer.
   19508 
   19509 ``$isname(NAME)''
   19510      Returns 1 if NAME is a valid symbol name, zero otherwise.
   19511 
   19512 ``$isreg(REG)''
   19513      Returns 1 if REG is a valid predefined register name (AR0-AR7
   19514      only).
   19515 
   19516 ``$structsz(STAG)''
   19517      Returns the size of the structure or union represented by STAG.
   19518 
   19519 ``$structacc(STAG)''
   19520      Returns the reference point of the structure or union represented
   19521      by STAG.   Always returns zero.
   19522 
   19523 
   19524 
   19525 File: as.info,  Node: TIC54X-MMRegs,  Next: TIC54X-Syntax,  Prev: TIC54X-Macros,  Up: TIC54X-Dependent
   19526 
   19527 9.43.11 Memory-mapped Registers
   19528 -------------------------------
   19529 
   19530 The following symbols are recognized as memory-mapped registers:
   19531 
   19532 
   19533 
   19534 File: as.info,  Node: TIC54X-Syntax,  Prev: TIC54X-MMRegs,  Up: TIC54X-Dependent
   19535 
   19536 9.43.12 TIC54X Syntax
   19537 ---------------------
   19538 
   19539 * Menu:
   19540 
   19541 * TIC54X-Chars::                Special Characters
   19542 
   19543 
   19544 File: as.info,  Node: TIC54X-Chars,  Up: TIC54X-Syntax
   19545 
   19546 9.43.12.1 Special Characters
   19547 ............................
   19548 
   19549 The presence of a `;' appearing anywhere on a line indicates the start
   19550 of a comment that extends to the end of that line.
   19551 
   19552    If a `#' appears as the first character of a line then the whole
   19553 line is treated as a comment, but in this case the line can also be a
   19554 logical line number directive (*note Comments::) or a preprocessor
   19555 control command (*note Preprocessing::).
   19556 
   19557    The presence of an asterisk (`*') at the start of a line also
   19558 indicates a comment that extends to the end of that line.
   19559 
   19560    The TIC54X assembler does not currently support a line separator
   19561 character.
   19562 
   19563 
   19564 File: as.info,  Node: TIC6X-Dependent,  Next: TILE-Gx-Dependent,  Prev: TIC54X-Dependent,  Up: Machine Dependencies
   19565 
   19566 9.44 TIC6X Dependent Features
   19567 =============================
   19568 
   19569 * Menu:
   19570 
   19571 * TIC6X Options::            Options
   19572 * TIC6X Syntax::             Syntax
   19573 * TIC6X Directives::         Directives
   19574 
   19575 
   19576 File: as.info,  Node: TIC6X Options,  Next: TIC6X Syntax,  Up: TIC6X-Dependent
   19577 
   19578 9.44.1 TIC6X Options
   19579 --------------------
   19580 
   19581 `-march=ARCH'
   19582      Enable (only) instructions from architecture ARCH.  By default,
   19583      all instructions are permitted.
   19584 
   19585      The following values of ARCH are accepted: `c62x', `c64x',
   19586      `c64x+', `c67x', `c67x+', `c674x'.
   19587 
   19588 `-mdsbt'
   19589 `-mno-dsbt'
   19590      The `-mdsbt' option causes the assembler to generate the
   19591      `Tag_ABI_DSBT' attribute with a value of 1, indicating that the
   19592      code is using DSBT addressing.  The `-mno-dsbt' option, the
   19593      default, causes the tag to have a value of 0, indicating that the
   19594      code does not use DSBT addressing.  The linker will emit a warning
   19595      if objects of different type (DSBT and non-DSBT) are linked
   19596      together.
   19597 
   19598 `-mpid=no'
   19599 `-mpid=near'
   19600 `-mpid=far'
   19601      The `-mpid=' option causes the assembler to generate the
   19602      `Tag_ABI_PID' attribute with a value indicating the form of data
   19603      addressing used by the code.  `-mpid=no', the default, indicates
   19604      position-dependent data addressing, `-mpid=near' indicates
   19605      position-independent addressing with GOT accesses using near DP
   19606      addressing, and `-mpid=far' indicates position-independent
   19607      addressing with GOT accesses using far DP addressing.  The linker
   19608      will emit a warning if objects built with different settings of
   19609      this option are linked together.
   19610 
   19611 `-mpic'
   19612 `-mno-pic'
   19613      The `-mpic' option causes the assembler to generate the
   19614      `Tag_ABI_PIC' attribute with a value of 1, indicating that the
   19615      code is using position-independent code addressing,  The
   19616      `-mno-pic' option, the default, causes the tag to have a value of
   19617      0, indicating position-dependent code addressing.  The linker will
   19618      emit a warning if objects of different type (position-dependent and
   19619      position-independent) are linked together.
   19620 
   19621 `-mbig-endian'
   19622 `-mlittle-endian'
   19623      Generate code for the specified endianness.  The default is
   19624      little-endian.
   19625 
   19626 
   19627 
   19628 File: as.info,  Node: TIC6X Syntax,  Next: TIC6X Directives,  Prev: TIC6X Options,  Up: TIC6X-Dependent
   19629 
   19630 9.44.2 TIC6X Syntax
   19631 -------------------
   19632 
   19633 The presence of a `;' on a line indicates the start of a comment that
   19634 extends to the end of the current line.  If a `#' or `*' appears as the
   19635 first character of a line, the whole line is treated as a comment.
   19636 Note that if a line starts with a `#' character then it can also be a
   19637 logical line number directive (*note Comments::) or a preprocessor
   19638 control command (*note Preprocessing::).
   19639 
   19640    The `@' character can be used instead of a newline to separate
   19641 statements.
   19642 
   19643    Instruction, register and functional unit names are case-insensitive.
   19644 `as' requires fully-specified functional unit names, such as `.S1',
   19645 `.L1X' or `.D1T2', on all instructions using a functional unit.
   19646 
   19647    For some instructions, there may be syntactic ambiguity between
   19648 register or functional unit names and the names of labels or other
   19649 symbols.  To avoid this, enclose the ambiguous symbol name in
   19650 parentheses; register and functional unit names may not be enclosed in
   19651 parentheses.
   19652 
   19653 
   19654 File: as.info,  Node: TIC6X Directives,  Prev: TIC6X Syntax,  Up: TIC6X-Dependent
   19655 
   19656 9.44.3 TIC6X Directives
   19657 -----------------------
   19658 
   19659 Directives controlling the set of instructions accepted by the
   19660 assembler have effect for instructions between the directive and any
   19661 subsequent directive overriding it.
   19662 
   19663 `.arch ARCH'
   19664      This has the same effect as `-march=ARCH'.
   19665 
   19666 `.cantunwind'
   19667      Prevents unwinding through the current function.  No personality
   19668      routine or exception table data is required or permitted.
   19669 
   19670      If this is not specified then frame unwinding information will be
   19671      constructed from CFI directives. *note CFI directives::.
   19672 
   19673 `.c6xabi_attribute TAG, VALUE'
   19674      Set the C6000 EABI build attribute TAG to VALUE.
   19675 
   19676      The TAG is either an attribute number or one of `Tag_ISA',
   19677      `Tag_ABI_wchar_t', `Tag_ABI_stack_align_needed',
   19678      `Tag_ABI_stack_align_preserved', `Tag_ABI_DSBT', `Tag_ABI_PID',
   19679      `Tag_ABI_PIC', `TAG_ABI_array_object_alignment',
   19680      `TAG_ABI_array_object_align_expected', `Tag_ABI_compatibility' and
   19681      `Tag_ABI_conformance'.  The VALUE is either a `number',
   19682      `"string"', or `number, "string"' depending on the tag.
   19683 
   19684 `.ehtype SYMBOL'
   19685      Output an exception type table reference to SYMBOL.
   19686 
   19687 `.endp'
   19688      Marks the end of and exception table or function.  If preceeded by
   19689      a `.handlerdata' directive then this also switched back to the
   19690      previous text section.
   19691 
   19692 `.handlerdata'
   19693      Marks the end of the current function, and the start of the
   19694      exception table entry for that function.  Anything between this
   19695      directive and the `.endp' directive will be added to the exception
   19696      table entry.
   19697 
   19698      Must be preceded by a CFI block containing a `.cfi_lsda' directive.
   19699 
   19700 `.nocmp'
   19701      Disallow use of C64x+ compact instructions in the current text
   19702      section.
   19703 
   19704 `.personalityindex INDEX'
   19705      Sets the personality routine for the current function to the ABI
   19706      specified compact routine number INDEX
   19707 
   19708 `.personality NAME'
   19709      Sets the personality routine for the current function to NAME.
   19710 
   19711 `.scomm SYMBOL, SIZE, ALIGN'
   19712      Like `.comm', creating a common symbol SYMBOL with size SIZE and
   19713      alignment ALIGN, but unlike when using `.comm', this symbol will
   19714      be placed into the small BSS section by the linker.
   19715 
   19716 
   19717 
   19718 File: as.info,  Node: TILE-Gx-Dependent,  Next: TILEPro-Dependent,  Prev: TIC6X-Dependent,  Up: Machine Dependencies
   19719 
   19720 9.45 TILE-Gx Dependent Features
   19721 ===============================
   19722 
   19723 * Menu:
   19724 
   19725 * TILE-Gx Options::		TILE-Gx Options
   19726 * TILE-Gx Syntax::		TILE-Gx Syntax
   19727 * TILE-Gx Directives::		TILE-Gx Directives
   19728 
   19729 
   19730 File: as.info,  Node: TILE-Gx Options,  Next: TILE-Gx Syntax,  Up: TILE-Gx-Dependent
   19731 
   19732 9.45.1 Options
   19733 --------------
   19734 
   19735 The following table lists all available TILE-Gx specific options:
   19736 
   19737 `-m32 | -m64'
   19738      Select the word size, either 32 bits or 64 bits.
   19739 
   19740 `-EB | -EL'
   19741      Select the endianness, either big-endian (-EB) or little-endian
   19742      (-EL).
   19743 
   19744 
   19745 
   19746 File: as.info,  Node: TILE-Gx Syntax,  Next: TILE-Gx Directives,  Prev: TILE-Gx Options,  Up: TILE-Gx-Dependent
   19747 
   19748 9.45.2 Syntax
   19749 -------------
   19750 
   19751 Block comments are delimited by `/*' and `*/'.  End of line comments
   19752 may be introduced by `#'.
   19753 
   19754    Instructions consist of a leading opcode or macro name followed by
   19755 whitespace and an optional comma-separated list of operands:
   19756 
   19757      OPCODE [OPERAND, ...]
   19758 
   19759    Instructions must be separated by a newline or semicolon.
   19760 
   19761    There are two ways to write code: either write naked instructions,
   19762 which the assembler is free to combine into VLIW bundles, or specify
   19763 the VLIW bundles explicitly.
   19764 
   19765    Bundles are specified using curly braces:
   19766 
   19767      { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 }
   19768 
   19769    A bundle can span multiple lines. If you want to put multiple
   19770 instructions on a line, whether in a bundle or not, you need to
   19771 separate them with semicolons as in this example.
   19772 
   19773    A bundle may contain one or more instructions, up to the limit
   19774 specified by the ISA (currently three). If fewer instructions are
   19775 specified than the hardware supports in a bundle, the assembler inserts
   19776 `fnop' instructions automatically.
   19777 
   19778    The assembler will prefer to preserve the ordering of instructions
   19779 within the bundle, putting the first instruction in a lower-numbered
   19780 pipeline than the next one, etc.  This fact, combined with the optional
   19781 use of explicit `fnop' or `nop' instructions, allows precise control
   19782 over which pipeline executes each instruction.
   19783 
   19784    If the instructions cannot be bundled in the listed order, the
   19785 assembler will automatically try to find a valid pipeline assignment.
   19786 If there is no way to bundle the instructions together, the assembler
   19787 reports an error.
   19788 
   19789    The assembler does not yet auto-bundle (automatically combine
   19790 multiple instructions into one bundle), but it reserves the right to do
   19791 so in the future.  If you want to force an instruction to run by
   19792 itself, put it in a bundle explicitly with curly braces and use `nop'
   19793 instructions (not `fnop') to fill the remaining pipeline slots in that
   19794 bundle.
   19795 
   19796 * Menu:
   19797 
   19798 * TILE-Gx Opcodes::              Opcode Naming Conventions.
   19799 * TILE-Gx Registers::            Register Naming.
   19800 * TILE-Gx Modifiers::            Symbolic Operand Modifiers.
   19801 
   19802 
   19803 File: as.info,  Node: TILE-Gx Opcodes,  Next: TILE-Gx Registers,  Up: TILE-Gx Syntax
   19804 
   19805 9.45.2.1 Opcode Names
   19806 .....................
   19807 
   19808 For a complete list of opcodes and descriptions of their semantics, see
   19809 `TILE-Gx Instruction Set Architecture', available upon request at
   19810 www.tilera.com.
   19811 
   19812 
   19813 File: as.info,  Node: TILE-Gx Registers,  Next: TILE-Gx Modifiers,  Prev: TILE-Gx Opcodes,  Up: TILE-Gx Syntax
   19814 
   19815 9.45.2.2 Register Names
   19816 .......................
   19817 
   19818 General-purpose registers are represented by predefined symbols of the
   19819 form `rN', where N represents a number between `0' and `63'.  However,
   19820 the following registers have canonical names that must be used instead:
   19821 
   19822 `r54'
   19823      sp
   19824 
   19825 `r55'
   19826      lr
   19827 
   19828 `r56'
   19829      sn
   19830 
   19831 `r57'
   19832      idn0
   19833 
   19834 `r58'
   19835      idn1
   19836 
   19837 `r59'
   19838      udn0
   19839 
   19840 `r60'
   19841      udn1
   19842 
   19843 `r61'
   19844      udn2
   19845 
   19846 `r62'
   19847      udn3
   19848 
   19849 `r63'
   19850      zero
   19851 
   19852 
   19853    The assembler will emit a warning if a numeric name is used instead
   19854 of the non-numeric name.  The `.no_require_canonical_reg_names'
   19855 assembler pseudo-op turns off this warning.
   19856 `.require_canonical_reg_names' turns it back on.
   19857 
   19858 
   19859 File: as.info,  Node: TILE-Gx Modifiers,  Prev: TILE-Gx Registers,  Up: TILE-Gx Syntax
   19860 
   19861 9.45.2.3 Symbolic Operand Modifiers
   19862 ...................................
   19863 
   19864 The assembler supports several modifiers when using symbol addresses in
   19865 TILE-Gx instruction operands.  The general syntax is the following:
   19866 
   19867      modifier(symbol)
   19868 
   19869    The following modifiers are supported:
   19870 
   19871 `hw0'
   19872      This modifier is used to load bits 0-15 of the symbol's address.
   19873 
   19874 `hw1'
   19875      This modifier is used to load bits 16-31 of the symbol's address.
   19876 
   19877 `hw2'
   19878      This modifier is used to load bits 32-47 of the symbol's address.
   19879 
   19880 `hw3'
   19881      This modifier is used to load bits 48-63 of the symbol's address.
   19882 
   19883 `hw0_last'
   19884      This modifier yields the same value as `hw0', but it also checks
   19885      that the value does not overflow.
   19886 
   19887 `hw1_last'
   19888      This modifier yields the same value as `hw1', but it also checks
   19889      that the value does not overflow.
   19890 
   19891 `hw2_last'
   19892      This modifier yields the same value as `hw2', but it also checks
   19893      that the value does not overflow.
   19894 
   19895      A 48-bit symbolic value is constructed by using the following
   19896      idiom:
   19897 
   19898           moveli r0, hw2_last(sym)
   19899           shl16insli r0, r0, hw1(sym)
   19900           shl16insli r0, r0, hw0(sym)
   19901 
   19902 `hw0_got'
   19903      This modifier is used to load bits 0-15 of the symbol's offset in
   19904      the GOT entry corresponding to the symbol.
   19905 
   19906 `hw0_last_got'
   19907      This modifier yields the same value as `hw0_got', but it also
   19908      checks that the value does not overflow.
   19909 
   19910 `hw1_last_got'
   19911      This modifier is used to load bits 16-31 of the symbol's offset in
   19912      the GOT entry corresponding to the symbol, and it also checks that
   19913      the value does not overflow.
   19914 
   19915 `plt'
   19916      This modifier is used for function symbols.  It causes a
   19917      _procedure linkage table_, an array of code stubs, to be created
   19918      at the time the shared object is created or linked against,
   19919      together with a global offset table entry.  The value is a
   19920      pc-relative offset to the corresponding stub code in the procedure
   19921      linkage table.  This arrangement causes the run-time symbol
   19922      resolver to be called to look up and set the value of the symbol
   19923      the first time the function is called (at latest; depending
   19924      environment variables).  It is only safe to leave the symbol
   19925      unresolved this way if all references are function calls.
   19926 
   19927 `hw0_plt'
   19928      This modifier is used to load bits 0-15 of the pc-relative address
   19929      of a plt entry.
   19930 
   19931 `hw1_plt'
   19932      This modifier is used to load bits 16-31 of the pc-relative
   19933      address of a plt entry.
   19934 
   19935 `hw1_last_plt'
   19936      This modifier yields the same value as `hw1_plt', but it also
   19937      checks that the value does not overflow.
   19938 
   19939 `hw2_last_plt'
   19940      This modifier is used to load bits 32-47 of the pc-relative
   19941      address of a plt entry, and it also checks that the value does not
   19942      overflow.
   19943 
   19944 `hw0_tls_gd'
   19945      This modifier is used to load bits 0-15 of the offset of the GOT
   19946      entry of the symbol's TLS descriptor, to be used for
   19947      general-dynamic TLS accesses.
   19948 
   19949 `hw0_last_tls_gd'
   19950      This modifier yields the same value as `hw0_tls_gd', but it also
   19951      checks that the value does not overflow.
   19952 
   19953 `hw1_last_tls_gd'
   19954      This modifier is used to load bits 16-31 of the offset of the GOT
   19955      entry of the symbol's TLS descriptor, to be used for
   19956      general-dynamic TLS accesses.  It also checks that the value does
   19957      not overflow.
   19958 
   19959 `hw0_tls_ie'
   19960      This modifier is used to load bits 0-15 of the offset of the GOT
   19961      entry containing the offset of the symbol's address from the TCB,
   19962      to be used for initial-exec TLS accesses.
   19963 
   19964 `hw0_last_tls_ie'
   19965      This modifier yields the same value as `hw0_tls_ie', but it also
   19966      checks that the value does not overflow.
   19967 
   19968 `hw1_last_tls_ie'
   19969      This modifier is used to load bits 16-31 of the offset of the GOT
   19970      entry containing the offset of the symbol's address from the TCB,
   19971      to be used for initial-exec TLS accesses.  It also checks that the
   19972      value does not overflow.
   19973 
   19974 `hw0_tls_le'
   19975      This modifier is used to load bits 0-15 of the offset of the
   19976      symbol's address from the TCB, to be used for local-exec TLS
   19977      accesses.
   19978 
   19979 `hw0_last_tls_le'
   19980      This modifier yields the same value as `hw0_tls_le', but it also
   19981      checks that the value does not overflow.
   19982 
   19983 `hw1_last_tls_le'
   19984      This modifier is used to load bits 16-31 of the offset of the
   19985      symbol's address from the TCB, to be used for local-exec TLS
   19986      accesses.  It also checks that the value does not overflow.
   19987 
   19988 `tls_gd_call'
   19989      This modifier is used to tag an instrution as the "call" part of a
   19990      calling sequence for a TLS GD reference of its operand.
   19991 
   19992 `tls_gd_add'
   19993      This modifier is used to tag an instruction as the "add" part of a
   19994      calling sequence for a TLS GD reference of its operand.
   19995 
   19996 `tls_ie_load'
   19997      This modifier is used to tag an instruction as the "load" part of a
   19998      calling sequence for a TLS IE reference of its operand.
   19999 
   20000 
   20001 
   20002 File: as.info,  Node: TILE-Gx Directives,  Prev: TILE-Gx Syntax,  Up: TILE-Gx-Dependent
   20003 
   20004 9.45.3 TILE-Gx Directives
   20005 -------------------------
   20006 
   20007 `.align EXPRESSION [, EXPRESSION]'
   20008      This is the generic .ALIGN directive.  The first argument is the
   20009      requested alignment in bytes.
   20010 
   20011 `.allow_suspicious_bundles'
   20012      Turns on error checking for combinations of instructions in a
   20013      bundle that probably indicate a programming error.  This is on by
   20014      default.
   20015 
   20016 `.no_allow_suspicious_bundles'
   20017      Turns off error checking for combinations of instructions in a
   20018      bundle that probably indicate a programming error.
   20019 
   20020 `.require_canonical_reg_names'
   20021      Require that canonical register names be used, and emit a warning
   20022      if the numeric names are used.  This is on by default.
   20023 
   20024 `.no_require_canonical_reg_names'
   20025      Permit the use of numeric names for registers that have canonical
   20026      names.
   20027 
   20028 
   20029 
   20030 File: as.info,  Node: TILEPro-Dependent,  Next: V850-Dependent,  Prev: TILE-Gx-Dependent,  Up: Machine Dependencies
   20031 
   20032 9.46 TILEPro Dependent Features
   20033 ===============================
   20034 
   20035 * Menu:
   20036 
   20037 * TILEPro Options::		TILEPro Options
   20038 * TILEPro Syntax::		TILEPro Syntax
   20039 * TILEPro Directives::		TILEPro Directives
   20040 
   20041 
   20042 File: as.info,  Node: TILEPro Options,  Next: TILEPro Syntax,  Up: TILEPro-Dependent
   20043 
   20044 9.46.1 Options
   20045 --------------
   20046 
   20047 `as' has no machine-dependent command-line options for TILEPro.
   20048 
   20049 
   20050 File: as.info,  Node: TILEPro Syntax,  Next: TILEPro Directives,  Prev: TILEPro Options,  Up: TILEPro-Dependent
   20051 
   20052 9.46.2 Syntax
   20053 -------------
   20054 
   20055 Block comments are delimited by `/*' and `*/'.  End of line comments
   20056 may be introduced by `#'.
   20057 
   20058    Instructions consist of a leading opcode or macro name followed by
   20059 whitespace and an optional comma-separated list of operands:
   20060 
   20061      OPCODE [OPERAND, ...]
   20062 
   20063    Instructions must be separated by a newline or semicolon.
   20064 
   20065    There are two ways to write code: either write naked instructions,
   20066 which the assembler is free to combine into VLIW bundles, or specify
   20067 the VLIW bundles explicitly.
   20068 
   20069    Bundles are specified using curly braces:
   20070 
   20071      { ADD r3,r4,r5 ; ADD r7,r8,r9 ; LW r10,r11 }
   20072 
   20073    A bundle can span multiple lines. If you want to put multiple
   20074 instructions on a line, whether in a bundle or not, you need to
   20075 separate them with semicolons as in this example.
   20076 
   20077    A bundle may contain one or more instructions, up to the limit
   20078 specified by the ISA (currently three). If fewer instructions are
   20079 specified than the hardware supports in a bundle, the assembler inserts
   20080 `fnop' instructions automatically.
   20081 
   20082    The assembler will prefer to preserve the ordering of instructions
   20083 within the bundle, putting the first instruction in a lower-numbered
   20084 pipeline than the next one, etc.  This fact, combined with the optional
   20085 use of explicit `fnop' or `nop' instructions, allows precise control
   20086 over which pipeline executes each instruction.
   20087 
   20088    If the instructions cannot be bundled in the listed order, the
   20089 assembler will automatically try to find a valid pipeline assignment.
   20090 If there is no way to bundle the instructions together, the assembler
   20091 reports an error.
   20092 
   20093    The assembler does not yet auto-bundle (automatically combine
   20094 multiple instructions into one bundle), but it reserves the right to do
   20095 so in the future.  If you want to force an instruction to run by
   20096 itself, put it in a bundle explicitly with curly braces and use `nop'
   20097 instructions (not `fnop') to fill the remaining pipeline slots in that
   20098 bundle.
   20099 
   20100 * Menu:
   20101 
   20102 * TILEPro Opcodes::              Opcode Naming Conventions.
   20103 * TILEPro Registers::            Register Naming.
   20104 * TILEPro Modifiers::            Symbolic Operand Modifiers.
   20105 
   20106 
   20107 File: as.info,  Node: TILEPro Opcodes,  Next: TILEPro Registers,  Up: TILEPro Syntax
   20108 
   20109 9.46.2.1 Opcode Names
   20110 .....................
   20111 
   20112 For a complete list of opcodes and descriptions of their semantics, see
   20113 `TILE Processor User Architecture Manual', available upon request at
   20114 www.tilera.com.
   20115 
   20116 
   20117 File: as.info,  Node: TILEPro Registers,  Next: TILEPro Modifiers,  Prev: TILEPro Opcodes,  Up: TILEPro Syntax
   20118 
   20119 9.46.2.2 Register Names
   20120 .......................
   20121 
   20122 General-purpose registers are represented by predefined symbols of the
   20123 form `rN', where N represents a number between `0' and `63'.  However,
   20124 the following registers have canonical names that must be used instead:
   20125 
   20126 `r54'
   20127      sp
   20128 
   20129 `r55'
   20130      lr
   20131 
   20132 `r56'
   20133      sn
   20134 
   20135 `r57'
   20136      idn0
   20137 
   20138 `r58'
   20139      idn1
   20140 
   20141 `r59'
   20142      udn0
   20143 
   20144 `r60'
   20145      udn1
   20146 
   20147 `r61'
   20148      udn2
   20149 
   20150 `r62'
   20151      udn3
   20152 
   20153 `r63'
   20154      zero
   20155 
   20156 
   20157    The assembler will emit a warning if a numeric name is used instead
   20158 of the canonical name.  The `.no_require_canonical_reg_names' assembler
   20159 pseudo-op turns off this warning. `.require_canonical_reg_names' turns
   20160 it back on.
   20161 
   20162 
   20163 File: as.info,  Node: TILEPro Modifiers,  Prev: TILEPro Registers,  Up: TILEPro Syntax
   20164 
   20165 9.46.2.3 Symbolic Operand Modifiers
   20166 ...................................
   20167 
   20168 The assembler supports several modifiers when using symbol addresses in
   20169 TILEPro instruction operands.  The general syntax is the following:
   20170 
   20171      modifier(symbol)
   20172 
   20173    The following modifiers are supported:
   20174 
   20175 `lo16'
   20176      This modifier is used to load the low 16 bits of the symbol's
   20177      address, sign-extended to a 32-bit value (sign-extension allows it
   20178      to be range-checked against signed 16 bit immediate operands
   20179      without complaint).
   20180 
   20181 `hi16'
   20182      This modifier is used to load the high 16 bits of the symbol's
   20183      address, also sign-extended to a 32-bit value.
   20184 
   20185 `ha16'
   20186      `ha16(N)' is identical to `hi16(N)', except if `lo16(N)' is
   20187      negative it adds one to the `hi16(N)' value. This way `lo16' and
   20188      `ha16' can be added to create any 32-bit value using `auli'.  For
   20189      example, here is how you move an arbitrary 32-bit address into r3:
   20190 
   20191           moveli r3, lo16(sym)
   20192           auli r3, r3, ha16(sym)
   20193 
   20194 `got'
   20195      This modifier is used to load the offset of the GOT entry
   20196      corresponding to the symbol.
   20197 
   20198 `got_lo16'
   20199      This modifier is used to load the sign-extended low 16 bits of the
   20200      offset of the GOT entry corresponding to the symbol.
   20201 
   20202 `got_hi16'
   20203      This modifier is used to load the sign-extended high 16 bits of the
   20204      offset of the GOT entry corresponding to the symbol.
   20205 
   20206 `got_ha16'
   20207      This modifier is like `got_hi16', but it adds one if `got_lo16' of
   20208      the input value is negative.
   20209 
   20210 `plt'
   20211      This modifier is used for function symbols.  It causes a
   20212      _procedure linkage table_, an array of code stubs, to be created
   20213      at the time the shared object is created or linked against,
   20214      together with a global offset table entry.  The value is a
   20215      pc-relative offset to the corresponding stub code in the procedure
   20216      linkage table.  This arrangement causes the run-time symbol
   20217      resolver to be called to look up and set the value of the symbol
   20218      the first time the function is called (at latest; depending
   20219      environment variables).  It is only safe to leave the symbol
   20220      unresolved this way if all references are function calls.
   20221 
   20222 `tls_gd'
   20223      This modifier is used to load the offset of the GOT entry of the
   20224      symbol's TLS descriptor, to be used for general-dynamic TLS
   20225      accesses.
   20226 
   20227 `tls_gd_lo16'
   20228      This modifier is used to load the sign-extended low 16 bits of the
   20229      offset of the GOT entry of the symbol's TLS descriptor, to be used
   20230      for general dynamic TLS accesses.
   20231 
   20232 `tls_gd_hi16'
   20233      This modifier is used to load the sign-extended high 16 bits of the
   20234      offset of the GOT entry of the symbol's TLS descriptor, to be used
   20235      for general dynamic TLS accesses.
   20236 
   20237 `tls_gd_ha16'
   20238      This modifier is like `tls_gd_hi16', but it adds one to the value
   20239      if `tls_gd_lo16' of the input value is negative.
   20240 
   20241 `tls_ie'
   20242      This modifier is used to load the offset of the GOT entry
   20243      containing the offset of the symbol's address from the TCB, to be
   20244      used for initial-exec TLS accesses.
   20245 
   20246 `tls_ie_lo16'
   20247      This modifier is used to load the low 16 bits of the offset of the
   20248      GOT entry containing the offset of the symbol's address from the
   20249      TCB, to be used for initial-exec TLS accesses.
   20250 
   20251 `tls_ie_hi16'
   20252      This modifier is used to load the high 16 bits of the offset of the
   20253      GOT entry containing the offset of the symbol's address from the
   20254      TCB, to be used for initial-exec TLS accesses.
   20255 
   20256 `tls_ie_ha16'
   20257      This modifier is like `tls_ie_hi16', but it adds one to the value
   20258      if `tls_ie_lo16' of the input value is negative.
   20259 
   20260 `tls_le'
   20261      This modifier is used to load the offset of the symbol's address
   20262      from the TCB, to be used for local-exec TLS accesses.
   20263 
   20264 `tls_le_lo16'
   20265      This modifier is used to load the low 16 bits of the offset of the
   20266      symbol's address from the TCB, to be used for local-exec TLS
   20267      accesses.
   20268 
   20269 `tls_le_hi16'
   20270      This modifier is used to load the high 16 bits of the offset of the
   20271      symbol's address from the TCB, to be used for local-exec TLS
   20272      accesses.
   20273 
   20274 `tls_le_ha16'
   20275      This modifier is like `tls_le_hi16', but it adds one to the value
   20276      if `tls_le_lo16' of the input value is negative.
   20277 
   20278 `tls_gd_call'
   20279      This modifier is used to tag an instrution as the "call" part of a
   20280      calling sequence for a TLS GD reference of its operand.
   20281 
   20282 `tls_gd_add'
   20283      This modifier is used to tag an instruction as the "add" part of a
   20284      calling sequence for a TLS GD reference of its operand.
   20285 
   20286 `tls_ie_load'
   20287      This modifier is used to tag an instruction as the "load" part of a
   20288      calling sequence for a TLS IE reference of its operand.
   20289 
   20290 
   20291 
   20292 File: as.info,  Node: TILEPro Directives,  Prev: TILEPro Syntax,  Up: TILEPro-Dependent
   20293 
   20294 9.46.3 TILEPro Directives
   20295 -------------------------
   20296 
   20297 `.align EXPRESSION [, EXPRESSION]'
   20298      This is the generic .ALIGN directive.  The first argument is the
   20299      requested alignment in bytes.
   20300 
   20301 `.allow_suspicious_bundles'
   20302      Turns on error checking for combinations of instructions in a
   20303      bundle that probably indicate a programming error.  This is on by
   20304      default.
   20305 
   20306 `.no_allow_suspicious_bundles'
   20307      Turns off error checking for combinations of instructions in a
   20308      bundle that probably indicate a programming error.
   20309 
   20310 `.require_canonical_reg_names'
   20311      Require that canonical register names be used, and emit a warning
   20312      if the numeric names are used.  This is on by default.
   20313 
   20314 `.no_require_canonical_reg_names'
   20315      Permit the use of numeric names for registers that have canonical
   20316      names.
   20317 
   20318 
   20319 
   20320 File: as.info,  Node: Z80-Dependent,  Next: Z8000-Dependent,  Prev: Xtensa-Dependent,  Up: Machine Dependencies
   20321 
   20322 9.47 Z80 Dependent Features
   20323 ===========================
   20324 
   20325 * Menu:
   20326 
   20327 * Z80 Options::              Options
   20328 * Z80 Syntax::               Syntax
   20329 * Z80 Floating Point::       Floating Point
   20330 * Z80 Directives::           Z80 Machine Directives
   20331 * Z80 Opcodes::              Opcodes
   20332 
   20333 
   20334 File: as.info,  Node: Z80 Options,  Next: Z80 Syntax,  Up: Z80-Dependent
   20335 
   20336 9.47.1 Options
   20337 --------------
   20338 
   20339 The Zilog Z80 and Ascii R800 version of `as' have a few machine
   20340 dependent options.
   20341 `-z80'
   20342      Produce code for the Z80 processor. There are additional options to
   20343      request warnings and error messages for undocumented instructions.
   20344 
   20345 `-ignore-undocumented-instructions'
   20346 `-Wnud'
   20347      Silently assemble undocumented Z80-instructions that have been
   20348      adopted as documented R800-instructions.
   20349 
   20350 `-ignore-unportable-instructions'
   20351 `-Wnup'
   20352      Silently assemble all undocumented Z80-instructions.
   20353 
   20354 `-warn-undocumented-instructions'
   20355 `-Wud'
   20356      Issue warnings for undocumented Z80-instructions that work on
   20357      R800, do not assemble other undocumented instructions without
   20358      warning.
   20359 
   20360 `-warn-unportable-instructions'
   20361 `-Wup'
   20362      Issue warnings for other undocumented Z80-instructions, do not
   20363      treat any undocumented instructions as errors.
   20364 
   20365 `-forbid-undocumented-instructions'
   20366 `-Fud'
   20367      Treat all undocumented z80-instructions as errors.
   20368 
   20369 `-forbid-unportable-instructions'
   20370 `-Fup'
   20371      Treat undocumented z80-instructions that do not work on R800 as
   20372      errors.
   20373 
   20374 `-r800'
   20375      Produce code for the R800 processor. The assembler does not support
   20376      undocumented instructions for the R800.  In line with common
   20377      practice, `as' uses Z80 instruction names for the R800 processor,
   20378      as far as they exist.
   20379 
   20380 
   20381 File: as.info,  Node: Z80 Syntax,  Next: Z80 Floating Point,  Prev: Z80 Options,  Up: Z80-Dependent
   20382 
   20383 9.47.2 Syntax
   20384 -------------
   20385 
   20386 The assembler syntax closely follows the 'Z80 family CPU User Manual' by
   20387 Zilog.  In expressions a single `=' may be used as "is equal to"
   20388 comparison operator.
   20389 
   20390    Suffices can be used to indicate the radix of integer constants; `H'
   20391 or `h' for hexadecimal, `D' or `d' for decimal, `Q', `O', `q' or `o'
   20392 for octal, and `B' for binary.
   20393 
   20394    The suffix `b' denotes a backreference to local label.
   20395 
   20396 * Menu:
   20397 
   20398 * Z80-Chars::                Special Characters
   20399 * Z80-Regs::                 Register Names
   20400 * Z80-Case::                 Case Sensitivity
   20401 
   20402 
   20403 File: as.info,  Node: Z80-Chars,  Next: Z80-Regs,  Up: Z80 Syntax
   20404 
   20405 9.47.2.1 Special Characters
   20406 ...........................
   20407 
   20408 The semicolon `;' is the line comment character;
   20409 
   20410    If a `#' appears as the first character of a line then the whole
   20411 line is treated as a comment, but in this case the line could also be a
   20412 logical line number directive (*note Comments::) or a preprocessor
   20413 control command (*note Preprocessing::).
   20414 
   20415    The Z80 assembler does not support a line separator character.
   20416 
   20417    The dollar sign `$' can be used as a prefix for hexadecimal numbers
   20418 and as a symbol denoting the current location counter.
   20419 
   20420    A backslash `\' is an ordinary character for the Z80 assembler.
   20421 
   20422    The single quote `'' must be followed by a closing quote. If there
   20423 is one character in between, it is a character constant, otherwise it is
   20424 a string constant.
   20425 
   20426 
   20427 File: as.info,  Node: Z80-Regs,  Next: Z80-Case,  Prev: Z80-Chars,  Up: Z80 Syntax
   20428 
   20429 9.47.2.2 Register Names
   20430 .......................
   20431 
   20432 The registers are referred to with the letters assigned to them by
   20433 Zilog. In addition `as' recognizes `ixl' and `ixh' as the least and
   20434 most significant octet in `ix', and similarly `iyl' and  `iyh' as parts
   20435 of `iy'.
   20436 
   20437 
   20438 File: as.info,  Node: Z80-Case,  Prev: Z80-Regs,  Up: Z80 Syntax
   20439 
   20440 9.47.2.3 Case Sensitivity
   20441 .........................
   20442 
   20443 Upper and lower case are equivalent in register names, opcodes,
   20444 condition codes  and assembler directives.  The case of letters is
   20445 significant in labels and symbol names. The case is also important to
   20446 distinguish the suffix `b' for a backward reference to a local label
   20447 from the suffix `B' for a number in binary notation.
   20448 
   20449 
   20450 File: as.info,  Node: Z80 Floating Point,  Next: Z80 Directives,  Prev: Z80 Syntax,  Up: Z80-Dependent
   20451 
   20452 9.47.3 Floating Point
   20453 ---------------------
   20454 
   20455 Floating-point numbers are not supported.
   20456 
   20457 
   20458 File: as.info,  Node: Z80 Directives,  Next: Z80 Opcodes,  Prev: Z80 Floating Point,  Up: Z80-Dependent
   20459 
   20460 9.47.4 Z80 Assembler Directives
   20461 -------------------------------
   20462 
   20463 `as' for the Z80 supports some additional directives for compatibility
   20464 with other assemblers.
   20465 
   20466    These are the additional directives in `as' for the Z80:
   20467 
   20468 `db EXPRESSION|STRING[,EXPRESSION|STRING...]'
   20469 `defb EXPRESSION|STRING[,EXPRESSION|STRING...]'
   20470      For each STRING the characters are copied to the object file, for
   20471      each other EXPRESSION the value is stored in one byte.  A warning
   20472      is issued in case of an overflow.
   20473 
   20474 `dw EXPRESSION[,EXPRESSION...]'
   20475 `defw EXPRESSION[,EXPRESSION...]'
   20476      For each EXPRESSION the value is stored in two bytes, ignoring
   20477      overflow.
   20478 
   20479 `d24 EXPRESSION[,EXPRESSION...]'
   20480 `def24 EXPRESSION[,EXPRESSION...]'
   20481      For each EXPRESSION the value is stored in three bytes, ignoring
   20482      overflow.
   20483 
   20484 `d32 EXPRESSION[,EXPRESSION...]'
   20485 `def32 EXPRESSION[,EXPRESSION...]'
   20486      For each EXPRESSION the value is stored in four bytes, ignoring
   20487      overflow.
   20488 
   20489 `ds COUNT[, VALUE]'
   20490 `defs COUNT[, VALUE]'
   20491      Fill COUNT bytes in the object file with VALUE, if VALUE is
   20492      omitted it defaults to zero.
   20493 
   20494 `SYMBOL equ EXPRESSION'
   20495 `SYMBOL defl EXPRESSION'
   20496      These directives set the value of SYMBOL to EXPRESSION. If `equ'
   20497      is used, it is an error if SYMBOL is already defined.  Symbols
   20498      defined with `equ' are not protected from redefinition.
   20499 
   20500 `set'
   20501      This is a normal instruction on Z80, and not an assembler
   20502      directive.
   20503 
   20504 `psect NAME'
   20505      A synonym for *Note Section::, no second argument should be given.
   20506 
   20507 
   20508 
   20509 File: as.info,  Node: Z80 Opcodes,  Prev: Z80 Directives,  Up: Z80-Dependent
   20510 
   20511 9.47.5 Opcodes
   20512 --------------
   20513 
   20514 In line with common practice, Z80 mnemonics are used for both the Z80
   20515 and the R800.
   20516 
   20517    In many instructions it is possible to use one of the half index
   20518 registers (`ixl',`ixh',`iyl',`iyh') in stead of an 8-bit general
   20519 purpose register. This yields instructions that are documented on the
   20520 R800 and undocumented on the Z80.  Similarly `in f,(c)' is documented
   20521 on the R800 and undocumented on the Z80.
   20522 
   20523    The assembler also supports the following undocumented
   20524 Z80-instructions, that have not been adopted in the R800 instruction
   20525 set:
   20526 `out (c),0'
   20527      Sends zero to the port pointed to by register c.
   20528 
   20529 `sli M'
   20530      Equivalent to `M = (M<<1)+1', the operand M can be any operand
   20531      that is valid for `sla'. One can use `sll' as a synonym for `sli'.
   20532 
   20533 `OP (ix+D), R'
   20534      This is equivalent to
   20535 
   20536           ld R, (ix+D)
   20537           OPC R
   20538           ld (ix+D), R
   20539 
   20540      The operation `OPC' may be any of `res B,', `set B,', `rl', `rlc',
   20541      `rr', `rrc', `sla', `sli', `sra' and `srl', and the register `R'
   20542      may be any of `a', `b', `c', `d', `e', `h' and `l'.
   20543 
   20544 `OPC (iy+D), R'
   20545      As above, but with `iy' instead of `ix'.
   20546 
   20547    The web site at `http://www.z80.info' is a good starting place to
   20548 find more information on programming the Z80.
   20549 
   20550 
   20551 File: as.info,  Node: Z8000-Dependent,  Next: Vax-Dependent,  Prev: Z80-Dependent,  Up: Machine Dependencies
   20552 
   20553 9.48 Z8000 Dependent Features
   20554 =============================
   20555 
   20556    The Z8000 as supports both members of the Z8000 family: the
   20557 unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with
   20558 24 bit addresses.
   20559 
   20560    When the assembler is in unsegmented mode (specified with the
   20561 `unsegm' directive), an address takes up one word (16 bit) sized
   20562 register.  When the assembler is in segmented mode (specified with the
   20563 `segm' directive), a 24-bit address takes up a long (32 bit) register.
   20564 *Note Assembler Directives for the Z8000: Z8000 Directives, for a list
   20565 of other Z8000 specific assembler directives.
   20566 
   20567 * Menu:
   20568 
   20569 * Z8000 Options::               Command-line options for the Z8000
   20570 * Z8000 Syntax::                Assembler syntax for the Z8000
   20571 * Z8000 Directives::            Special directives for the Z8000
   20572 * Z8000 Opcodes::               Opcodes
   20573 
   20574 
   20575 File: as.info,  Node: Z8000 Options,  Next: Z8000 Syntax,  Up: Z8000-Dependent
   20576 
   20577 9.48.1 Options
   20578 --------------
   20579 
   20580 `-z8001'
   20581      Generate segmented code by default.
   20582 
   20583 `-z8002'
   20584      Generate unsegmented code by default.
   20585 
   20586 
   20587 File: as.info,  Node: Z8000 Syntax,  Next: Z8000 Directives,  Prev: Z8000 Options,  Up: Z8000-Dependent
   20588 
   20589 9.48.2 Syntax
   20590 -------------
   20591 
   20592 * Menu:
   20593 
   20594 * Z8000-Chars::                Special Characters
   20595 * Z8000-Regs::                 Register Names
   20596 * Z8000-Addressing::           Addressing Modes
   20597 
   20598 
   20599 File: as.info,  Node: Z8000-Chars,  Next: Z8000-Regs,  Up: Z8000 Syntax
   20600 
   20601 9.48.2.1 Special Characters
   20602 ...........................
   20603 
   20604 `!' is the line comment character.
   20605 
   20606    If a `#' appears as the first character of a line then the whole
   20607 line is treated as a comment, but in this case the line could also be a
   20608 logical line number directive (*note Comments::) or a preprocessor
   20609 control command (*note Preprocessing::).
   20610 
   20611    You can use `;' instead of a newline to separate statements.
   20612 
   20613 
   20614 File: as.info,  Node: Z8000-Regs,  Next: Z8000-Addressing,  Prev: Z8000-Chars,  Up: Z8000 Syntax
   20615 
   20616 9.48.2.2 Register Names
   20617 .......................
   20618 
   20619 The Z8000 has sixteen 16 bit registers, numbered 0 to 15.  You can refer
   20620 to different sized groups of registers by register number, with the
   20621 prefix `r' for 16 bit registers, `rr' for 32 bit registers and `rq' for
   20622 64 bit registers.  You can also refer to the contents of the first
   20623 eight (of the sixteen 16 bit registers) by bytes.  They are named `rlN'
   20624 and `rhN'.
   20625 
   20626 _byte registers_
   20627      rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3
   20628      rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7
   20629 
   20630 _word registers_
   20631      r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
   20632 
   20633 _long word registers_
   20634      rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14
   20635 
   20636 _quad word registers_
   20637      rq0 rq4 rq8 rq12
   20638 
   20639 
   20640 File: as.info,  Node: Z8000-Addressing,  Prev: Z8000-Regs,  Up: Z8000 Syntax
   20641 
   20642 9.48.2.3 Addressing Modes
   20643 .........................
   20644 
   20645 as understands the following addressing modes for the Z8000:
   20646 
   20647 `rlN'
   20648 `rhN'
   20649 `rN'
   20650 `rrN'
   20651 `rqN'
   20652      Register direct:  8bit, 16bit, 32bit, and 64bit registers.
   20653 
   20654 `@rN'
   20655 `@rrN'
   20656      Indirect register:  @rrN in segmented mode, @rN in unsegmented
   20657      mode.
   20658 
   20659 `ADDR'
   20660      Direct: the 16 bit or 24 bit address (depending on whether the
   20661      assembler is in segmented or unsegmented mode) of the operand is
   20662      in the instruction.
   20663 
   20664 `address(rN)'
   20665      Indexed: the 16 or 24 bit address is added to the 16 bit register
   20666      to produce the final address in memory of the operand.
   20667 
   20668 `rN(#IMM)'
   20669 `rrN(#IMM)'
   20670      Base Address: the 16 or 24 bit register is added to the 16 bit sign
   20671      extended immediate displacement to produce the final address in
   20672      memory of the operand.
   20673 
   20674 `rN(rM)'
   20675 `rrN(rM)'
   20676      Base Index: the 16 or 24 bit register rN or rrN is added to the
   20677      sign extended 16 bit index register rM to produce the final
   20678      address in memory of the operand.
   20679 
   20680 `#XX'
   20681      Immediate data XX.
   20682 
   20683 
   20684 File: as.info,  Node: Z8000 Directives,  Next: Z8000 Opcodes,  Prev: Z8000 Syntax,  Up: Z8000-Dependent
   20685 
   20686 9.48.3 Assembler Directives for the Z8000
   20687 -----------------------------------------
   20688 
   20689 The Z8000 port of as includes additional assembler directives, for
   20690 compatibility with other Z8000 assemblers.  These do not begin with `.'
   20691 (unlike the ordinary as directives).
   20692 
   20693 `segm'
   20694 `.z8001'
   20695      Generate code for the segmented Z8001.
   20696 
   20697 `unsegm'
   20698 `.z8002'
   20699      Generate code for the unsegmented Z8002.
   20700 
   20701 `name'
   20702      Synonym for `.file'
   20703 
   20704 `global'
   20705      Synonym for `.global'
   20706 
   20707 `wval'
   20708      Synonym for `.word'
   20709 
   20710 `lval'
   20711      Synonym for `.long'
   20712 
   20713 `bval'
   20714      Synonym for `.byte'
   20715 
   20716 `sval'
   20717      Assemble a string.  `sval' expects one string literal, delimited by
   20718      single quotes.  It assembles each byte of the string into
   20719      consecutive addresses.  You can use the escape sequence `%XX'
   20720      (where XX represents a two-digit hexadecimal number) to represent
   20721      the character whose ASCII value is XX.  Use this feature to
   20722      describe single quote and other characters that may not appear in
   20723      string literals as themselves.  For example, the C statement
   20724      `char *a = "he said \"it's 50% off\"";' is represented in Z8000
   20725      assembly language (shown with the assembler output in hex at the
   20726      left) as
   20727 
   20728           68652073    sval    'he said %22it%27s 50%25 off%22%00'
   20729           61696420
   20730           22697427
   20731           73203530
   20732           25206F66
   20733           662200
   20734 
   20735 `rsect'
   20736      synonym for `.section'
   20737 
   20738 `block'
   20739      synonym for `.space'
   20740 
   20741 `even'
   20742      special case of `.align'; aligns output to even byte boundary.
   20743 
   20744 
   20745 File: as.info,  Node: Z8000 Opcodes,  Prev: Z8000 Directives,  Up: Z8000-Dependent
   20746 
   20747 9.48.4 Opcodes
   20748 --------------
   20749 
   20750 For detailed information on the Z8000 machine instruction set, see
   20751 `Z8000 Technical Manual'.
   20752 
   20753    The following table summarizes the opcodes and their arguments:
   20754 
   20755                  rs   16 bit source register
   20756                  rd   16 bit destination register
   20757                  rbs   8 bit source register
   20758                  rbd   8 bit destination register
   20759                  rrs   32 bit source register
   20760                  rrd   32 bit destination register
   20761                  rqs   64 bit source register
   20762                  rqd   64 bit destination register
   20763                  addr 16/24 bit address
   20764                  imm  immediate data
   20765 
   20766      adc rd,rs               clrb addr               cpsir @rd,@rs,rr,cc
   20767      adcb rbd,rbs            clrb addr(rd)           cpsirb @rd,@rs,rr,cc
   20768      add rd,@rs              clrb rbd                dab rbd
   20769      add rd,addr             com @rd                 dbjnz rbd,disp7
   20770      add rd,addr(rs)         com addr                dec @rd,imm4m1
   20771      add rd,imm16            com addr(rd)            dec addr(rd),imm4m1
   20772      add rd,rs               com rd                  dec addr,imm4m1
   20773      addb rbd,@rs            comb @rd                dec rd,imm4m1
   20774      addb rbd,addr           comb addr               decb @rd,imm4m1
   20775      addb rbd,addr(rs)       comb addr(rd)           decb addr(rd),imm4m1
   20776      addb rbd,imm8           comb rbd                decb addr,imm4m1
   20777      addb rbd,rbs            comflg flags            decb rbd,imm4m1
   20778      addl rrd,@rs            cp @rd,imm16            di i2
   20779      addl rrd,addr           cp addr(rd),imm16       div rrd,@rs
   20780      addl rrd,addr(rs)       cp addr,imm16           div rrd,addr
   20781      addl rrd,imm32          cp rd,@rs               div rrd,addr(rs)
   20782      addl rrd,rrs            cp rd,addr              div rrd,imm16
   20783      and rd,@rs              cp rd,addr(rs)          div rrd,rs
   20784      and rd,addr             cp rd,imm16             divl rqd,@rs
   20785      and rd,addr(rs)         cp rd,rs                divl rqd,addr
   20786      and rd,imm16            cpb @rd,imm8            divl rqd,addr(rs)
   20787      and rd,rs               cpb addr(rd),imm8       divl rqd,imm32
   20788      andb rbd,@rs            cpb addr,imm8           divl rqd,rrs
   20789      andb rbd,addr           cpb rbd,@rs             djnz rd,disp7
   20790      andb rbd,addr(rs)       cpb rbd,addr            ei i2
   20791      andb rbd,imm8           cpb rbd,addr(rs)        ex rd,@rs
   20792      andb rbd,rbs            cpb rbd,imm8            ex rd,addr
   20793      bit @rd,imm4            cpb rbd,rbs             ex rd,addr(rs)
   20794      bit addr(rd),imm4       cpd rd,@rs,rr,cc        ex rd,rs
   20795      bit addr,imm4           cpdb rbd,@rs,rr,cc      exb rbd,@rs
   20796      bit rd,imm4             cpdr rd,@rs,rr,cc       exb rbd,addr
   20797      bit rd,rs               cpdrb rbd,@rs,rr,cc     exb rbd,addr(rs)
   20798      bitb @rd,imm4           cpi rd,@rs,rr,cc        exb rbd,rbs
   20799      bitb addr(rd),imm4      cpib rbd,@rs,rr,cc      ext0e imm8
   20800      bitb addr,imm4          cpir rd,@rs,rr,cc       ext0f imm8
   20801      bitb rbd,imm4           cpirb rbd,@rs,rr,cc     ext8e imm8
   20802      bitb rbd,rs             cpl rrd,@rs             ext8f imm8
   20803      bpt                     cpl rrd,addr            exts rrd
   20804      call @rd                cpl rrd,addr(rs)        extsb rd
   20805      call addr               cpl rrd,imm32           extsl rqd
   20806      call addr(rd)           cpl rrd,rrs             halt
   20807      calr disp12             cpsd @rd,@rs,rr,cc      in rd,@rs
   20808      clr @rd                 cpsdb @rd,@rs,rr,cc     in rd,imm16
   20809      clr addr                cpsdr @rd,@rs,rr,cc     inb rbd,@rs
   20810      clr addr(rd)            cpsdrb @rd,@rs,rr,cc    inb rbd,imm16
   20811      clr rd                  cpsi @rd,@rs,rr,cc      inc @rd,imm4m1
   20812      clrb @rd                cpsib @rd,@rs,rr,cc     inc addr(rd),imm4m1
   20813      inc addr,imm4m1         ldb rbd,rs(rx)          mult rrd,addr(rs)
   20814      inc rd,imm4m1           ldb rd(imm16),rbs       mult rrd,imm16
   20815      incb @rd,imm4m1         ldb rd(rx),rbs          mult rrd,rs
   20816      incb addr(rd),imm4m1    ldctl ctrl,rs           multl rqd,@rs
   20817      incb addr,imm4m1        ldctl rd,ctrl           multl rqd,addr
   20818      incb rbd,imm4m1         ldd @rs,@rd,rr          multl rqd,addr(rs)
   20819      ind @rd,@rs,ra          lddb @rs,@rd,rr         multl rqd,imm32
   20820      indb @rd,@rs,rba        lddr @rs,@rd,rr         multl rqd,rrs
   20821      inib @rd,@rs,ra         lddrb @rs,@rd,rr        neg @rd
   20822      inibr @rd,@rs,ra        ldi @rd,@rs,rr          neg addr
   20823      iret                    ldib @rd,@rs,rr         neg addr(rd)
   20824      jp cc,@rd               ldir @rd,@rs,rr         neg rd
   20825      jp cc,addr              ldirb @rd,@rs,rr        negb @rd
   20826      jp cc,addr(rd)          ldk rd,imm4             negb addr
   20827      jr cc,disp8             ldl @rd,rrs             negb addr(rd)
   20828      ld @rd,imm16            ldl addr(rd),rrs        negb rbd
   20829      ld @rd,rs               ldl addr,rrs            nop
   20830      ld addr(rd),imm16       ldl rd(imm16),rrs       or rd,@rs
   20831      ld addr(rd),rs          ldl rd(rx),rrs          or rd,addr
   20832      ld addr,imm16           ldl rrd,@rs             or rd,addr(rs)
   20833      ld addr,rs              ldl rrd,addr            or rd,imm16
   20834      ld rd(imm16),rs         ldl rrd,addr(rs)        or rd,rs
   20835      ld rd(rx),rs            ldl rrd,imm32           orb rbd,@rs
   20836      ld rd,@rs               ldl rrd,rrs             orb rbd,addr
   20837      ld rd,addr              ldl rrd,rs(imm16)       orb rbd,addr(rs)
   20838      ld rd,addr(rs)          ldl rrd,rs(rx)          orb rbd,imm8
   20839      ld rd,imm16             ldm @rd,rs,n            orb rbd,rbs
   20840      ld rd,rs                ldm addr(rd),rs,n       out @rd,rs
   20841      ld rd,rs(imm16)         ldm addr,rs,n           out imm16,rs
   20842      ld rd,rs(rx)            ldm rd,@rs,n            outb @rd,rbs
   20843      lda rd,addr             ldm rd,addr(rs),n       outb imm16,rbs
   20844      lda rd,addr(rs)         ldm rd,addr,n           outd @rd,@rs,ra
   20845      lda rd,rs(imm16)        ldps @rs                outdb @rd,@rs,rba
   20846      lda rd,rs(rx)           ldps addr               outib @rd,@rs,ra
   20847      ldar rd,disp16          ldps addr(rs)           outibr @rd,@rs,ra
   20848      ldb @rd,imm8            ldr disp16,rs           pop @rd,@rs
   20849      ldb @rd,rbs             ldr rd,disp16           pop addr(rd),@rs
   20850      ldb addr(rd),imm8       ldrb disp16,rbs         pop addr,@rs
   20851      ldb addr(rd),rbs        ldrb rbd,disp16         pop rd,@rs
   20852      ldb addr,imm8           ldrl disp16,rrs         popl @rd,@rs
   20853      ldb addr,rbs            ldrl rrd,disp16         popl addr(rd),@rs
   20854      ldb rbd,@rs             mbit                    popl addr,@rs
   20855      ldb rbd,addr            mreq rd                 popl rrd,@rs
   20856      ldb rbd,addr(rs)        mres                    push @rd,@rs
   20857      ldb rbd,imm8            mset                    push @rd,addr
   20858      ldb rbd,rbs             mult rrd,@rs            push @rd,addr(rs)
   20859      ldb rbd,rs(imm16)       mult rrd,addr           push @rd,imm16
   20860      push @rd,rs             set addr,imm4           subl rrd,imm32
   20861      pushl @rd,@rs           set rd,imm4             subl rrd,rrs
   20862      pushl @rd,addr          set rd,rs               tcc cc,rd
   20863      pushl @rd,addr(rs)      setb @rd,imm4           tccb cc,rbd
   20864      pushl @rd,rrs           setb addr(rd),imm4      test @rd
   20865      res @rd,imm4            setb addr,imm4          test addr
   20866      res addr(rd),imm4       setb rbd,imm4           test addr(rd)
   20867      res addr,imm4           setb rbd,rs             test rd
   20868      res rd,imm4             setflg imm4             testb @rd
   20869      res rd,rs               sinb rbd,imm16          testb addr
   20870      resb @rd,imm4           sinb rd,imm16           testb addr(rd)
   20871      resb addr(rd),imm4      sind @rd,@rs,ra         testb rbd
   20872      resb addr,imm4          sindb @rd,@rs,rba       testl @rd
   20873      resb rbd,imm4           sinib @rd,@rs,ra        testl addr
   20874      resb rbd,rs             sinibr @rd,@rs,ra       testl addr(rd)
   20875      resflg imm4             sla rd,imm8             testl rrd
   20876      ret cc                  slab rbd,imm8           trdb @rd,@rs,rba
   20877      rl rd,imm1or2           slal rrd,imm8           trdrb @rd,@rs,rba
   20878      rlb rbd,imm1or2         sll rd,imm8             trib @rd,@rs,rbr
   20879      rlc rd,imm1or2          sllb rbd,imm8           trirb @rd,@rs,rbr
   20880      rlcb rbd,imm1or2        slll rrd,imm8           trtdrb @ra,@rb,rbr
   20881      rldb rbb,rba            sout imm16,rs           trtib @ra,@rb,rr
   20882      rr rd,imm1or2           soutb imm16,rbs         trtirb @ra,@rb,rbr
   20883      rrb rbd,imm1or2         soutd @rd,@rs,ra        trtrb @ra,@rb,rbr
   20884      rrc rd,imm1or2          soutdb @rd,@rs,rba      tset @rd
   20885      rrcb rbd,imm1or2        soutib @rd,@rs,ra       tset addr
   20886      rrdb rbb,rba            soutibr @rd,@rs,ra      tset addr(rd)
   20887      rsvd36                  sra rd,imm8             tset rd
   20888      rsvd38                  srab rbd,imm8           tsetb @rd
   20889      rsvd78                  sral rrd,imm8           tsetb addr
   20890      rsvd7e                  srl rd,imm8             tsetb addr(rd)
   20891      rsvd9d                  srlb rbd,imm8           tsetb rbd
   20892      rsvd9f                  srll rrd,imm8           xor rd,@rs
   20893      rsvdb9                  sub rd,@rs              xor rd,addr
   20894      rsvdbf                  sub rd,addr             xor rd,addr(rs)
   20895      sbc rd,rs               sub rd,addr(rs)         xor rd,imm16
   20896      sbcb rbd,rbs            sub rd,imm16            xor rd,rs
   20897      sc imm8                 sub rd,rs               xorb rbd,@rs
   20898      sda rd,rs               subb rbd,@rs            xorb rbd,addr
   20899      sdab rbd,rs             subb rbd,addr           xorb rbd,addr(rs)
   20900      sdal rrd,rs             subb rbd,addr(rs)       xorb rbd,imm8
   20901      sdl rd,rs               subb rbd,imm8           xorb rbd,rbs
   20902      sdlb rbd,rs             subb rbd,rbs            xorb rbd,rbs
   20903      sdll rrd,rs             subl rrd,@rs
   20904      set @rd,imm4            subl rrd,addr
   20905      set addr(rd),imm4       subl rrd,addr(rs)
   20906 
   20907 
   20908 File: as.info,  Node: Vax-Dependent,  Prev: Z8000-Dependent,  Up: Machine Dependencies
   20909 
   20910 9.49 VAX Dependent Features
   20911 ===========================
   20912 
   20913 * Menu:
   20914 
   20915 * VAX-Opts::                    VAX Command-Line Options
   20916 * VAX-float::                   VAX Floating Point
   20917 * VAX-directives::              Vax Machine Directives
   20918 * VAX-opcodes::                 VAX Opcodes
   20919 * VAX-branch::                  VAX Branch Improvement
   20920 * VAX-operands::                VAX Operands
   20921 * VAX-no::                      Not Supported on VAX
   20922 * VAX-Syntax::                  VAX Syntax
   20923 
   20924 
   20925 File: as.info,  Node: VAX-Opts,  Next: VAX-float,  Up: Vax-Dependent
   20926 
   20927 9.49.1 VAX Command-Line Options
   20928 -------------------------------
   20929 
   20930 The Vax version of `as' accepts any of the following options, gives a
   20931 warning message that the option was ignored and proceeds.  These
   20932 options are for compatibility with scripts designed for other people's
   20933 assemblers.
   20934 
   20935 ``-D' (Debug)'
   20936 ``-S' (Symbol Table)'
   20937 ``-T' (Token Trace)'
   20938      These are obsolete options used to debug old assemblers.
   20939 
   20940 ``-d' (Displacement size for JUMPs)'
   20941      This option expects a number following the `-d'.  Like options
   20942      that expect filenames, the number may immediately follow the `-d'
   20943      (old standard) or constitute the whole of the command line
   20944      argument that follows `-d' (GNU standard).
   20945 
   20946 ``-V' (Virtualize Interpass Temporary File)'
   20947      Some other assemblers use a temporary file.  This option commanded
   20948      them to keep the information in active memory rather than in a
   20949      disk file.  `as' always does this, so this option is redundant.
   20950 
   20951 ``-J' (JUMPify Longer Branches)'
   20952      Many 32-bit computers permit a variety of branch instructions to
   20953      do the same job.  Some of these instructions are short (and fast)
   20954      but have a limited range; others are long (and slow) but can
   20955      branch anywhere in virtual memory.  Often there are 3 flavors of
   20956      branch: short, medium and long.  Some other assemblers would emit
   20957      short and medium branches, unless told by this option to emit
   20958      short and long branches.
   20959 
   20960 ``-t' (Temporary File Directory)'
   20961      Some other assemblers may use a temporary file, and this option
   20962      takes a filename being the directory to site the temporary file.
   20963      Since `as' does not use a temporary disk file, this option makes
   20964      no difference.  `-t' needs exactly one filename.
   20965 
   20966    The Vax version of the assembler accepts additional options when
   20967 compiled for VMS:
   20968 
   20969 `-h N'
   20970      External symbol or section (used for global variables) names are
   20971      not case sensitive on VAX/VMS and always mapped to upper case.
   20972      This is contrary to the C language definition which explicitly
   20973      distinguishes upper and lower case.  To implement a standard
   20974      conforming C compiler, names must be changed (mapped) to preserve
   20975      the case information.  The default mapping is to convert all lower
   20976      case characters to uppercase and adding an underscore followed by
   20977      a 6 digit hex value, representing a 24 digit binary value.  The
   20978      one digits in the binary value represent which characters are
   20979      uppercase in the original symbol name.
   20980 
   20981      The `-h N' option determines how we map names.  This takes several
   20982      values.  No `-h' switch at all allows case hacking as described
   20983      above.  A value of zero (`-h0') implies names should be upper
   20984      case, and inhibits the case hack.  A value of 2 (`-h2') implies
   20985      names should be all lower case, with no case hack.  A value of 3
   20986      (`-h3') implies that case should be preserved.  The value 1 is
   20987      unused.  The `-H' option directs `as' to display every mapped
   20988      symbol during assembly.
   20989 
   20990      Symbols whose names include a dollar sign `$' are exceptions to the
   20991      general name mapping.  These symbols are normally only used to
   20992      reference VMS library names.  Such symbols are always mapped to
   20993      upper case.
   20994 
   20995 `-+'
   20996      The `-+' option causes `as' to truncate any symbol name larger
   20997      than 31 characters.  The `-+' option also prevents some code
   20998      following the `_main' symbol normally added to make the object
   20999      file compatible with Vax-11 "C".
   21000 
   21001 `-1'
   21002      This option is ignored for backward compatibility with `as'
   21003      version 1.x.
   21004 
   21005 `-H'
   21006      The `-H' option causes `as' to print every symbol which was
   21007      changed by case mapping.
   21008 
   21009 
   21010 File: as.info,  Node: VAX-float,  Next: VAX-directives,  Prev: VAX-Opts,  Up: Vax-Dependent
   21011 
   21012 9.49.2 VAX Floating Point
   21013 -------------------------
   21014 
   21015 Conversion of flonums to floating point is correct, and compatible with
   21016 previous assemblers.  Rounding is towards zero if the remainder is
   21017 exactly half the least significant bit.
   21018 
   21019    `D', `F', `G' and `H' floating point formats are understood.
   21020 
   21021    Immediate floating literals (_e.g._ `S`$6.9') are rendered
   21022 correctly.  Again, rounding is towards zero in the boundary case.
   21023 
   21024    The `.float' directive produces `f' format numbers.  The `.double'
   21025 directive produces `d' format numbers.
   21026 
   21027 
   21028 File: as.info,  Node: VAX-directives,  Next: VAX-opcodes,  Prev: VAX-float,  Up: Vax-Dependent
   21029 
   21030 9.49.3 Vax Machine Directives
   21031 -----------------------------
   21032 
   21033 The Vax version of the assembler supports four directives for
   21034 generating Vax floating point constants.  They are described in the
   21035 table below.
   21036 
   21037 `.dfloat'
   21038      This expects zero or more flonums, separated by commas, and
   21039      assembles Vax `d' format 64-bit floating point constants.
   21040 
   21041 `.ffloat'
   21042      This expects zero or more flonums, separated by commas, and
   21043      assembles Vax `f' format 32-bit floating point constants.
   21044 
   21045 `.gfloat'
   21046      This expects zero or more flonums, separated by commas, and
   21047      assembles Vax `g' format 64-bit floating point constants.
   21048 
   21049 `.hfloat'
   21050      This expects zero or more flonums, separated by commas, and
   21051      assembles Vax `h' format 128-bit floating point constants.
   21052 
   21053 
   21054 
   21055 File: as.info,  Node: VAX-opcodes,  Next: VAX-branch,  Prev: VAX-directives,  Up: Vax-Dependent
   21056 
   21057 9.49.4 VAX Opcodes
   21058 ------------------
   21059 
   21060 All DEC mnemonics are supported.  Beware that `case...' instructions
   21061 have exactly 3 operands.  The dispatch table that follows the `case...'
   21062 instruction should be made with `.word' statements.  This is compatible
   21063 with all unix assemblers we know of.
   21064 
   21065 
   21066 File: as.info,  Node: VAX-branch,  Next: VAX-operands,  Prev: VAX-opcodes,  Up: Vax-Dependent
   21067 
   21068 9.49.5 VAX Branch Improvement
   21069 -----------------------------
   21070 
   21071 Certain pseudo opcodes are permitted.  They are for branch
   21072 instructions.  They expand to the shortest branch instruction that
   21073 reaches the target.  Generally these mnemonics are made by substituting
   21074 `j' for `b' at the start of a DEC mnemonic.  This feature is included
   21075 both for compatibility and to help compilers.  If you do not need this
   21076 feature, avoid these opcodes.  Here are the mnemonics, and the code
   21077 they can expand into.
   21078 
   21079 `jbsb'
   21080      `Jsb' is already an instruction mnemonic, so we chose `jbsb'.
   21081     (byte displacement)
   21082           `bsbb ...'
   21083 
   21084     (word displacement)
   21085           `bsbw ...'
   21086 
   21087     (long displacement)
   21088           `jsb ...'
   21089 
   21090 `jbr'
   21091 `jr'
   21092      Unconditional branch.
   21093     (byte displacement)
   21094           `brb ...'
   21095 
   21096     (word displacement)
   21097           `brw ...'
   21098 
   21099     (long displacement)
   21100           `jmp ...'
   21101 
   21102 `jCOND'
   21103      COND may be any one of the conditional branches `neq', `nequ',
   21104      `eql', `eqlu', `gtr', `geq', `lss', `gtru', `lequ', `vc', `vs',
   21105      `gequ', `cc', `lssu', `cs'.  COND may also be one of the bit tests
   21106      `bs', `bc', `bss', `bcs', `bsc', `bcc', `bssi', `bcci', `lbs',
   21107      `lbc'.  NOTCOND is the opposite condition to COND.
   21108     (byte displacement)
   21109           `bCOND ...'
   21110 
   21111     (word displacement)
   21112           `bNOTCOND foo ; brw ... ; foo:'
   21113 
   21114     (long displacement)
   21115           `bNOTCOND foo ; jmp ... ; foo:'
   21116 
   21117 `jacbX'
   21118      X may be one of `b d f g h l w'.
   21119     (word displacement)
   21120           `OPCODE ...'
   21121 
   21122     (long displacement)
   21123                OPCODE ..., foo ;
   21124                brb bar ;
   21125                foo: jmp ... ;
   21126                bar:
   21127 
   21128 `jaobYYY'
   21129      YYY may be one of `lss leq'.
   21130 
   21131 `jsobZZZ'
   21132      ZZZ may be one of `geq gtr'.
   21133     (byte displacement)
   21134           `OPCODE ...'
   21135 
   21136     (word displacement)
   21137                OPCODE ..., foo ;
   21138                brb bar ;
   21139                foo: brw DESTINATION ;
   21140                bar:
   21141 
   21142     (long displacement)
   21143                OPCODE ..., foo ;
   21144                brb bar ;
   21145                foo: jmp DESTINATION ;
   21146                bar:
   21147 
   21148 `aobleq'
   21149 `aoblss'
   21150 `sobgeq'
   21151 `sobgtr'
   21152 
   21153     (byte displacement)
   21154           `OPCODE ...'
   21155 
   21156     (word displacement)
   21157                OPCODE ..., foo ;
   21158                brb bar ;
   21159                foo: brw DESTINATION ;
   21160                bar:
   21161 
   21162     (long displacement)
   21163                OPCODE ..., foo ;
   21164                brb bar ;
   21165                foo: jmp DESTINATION ;
   21166                bar:
   21167 
   21168 
   21169 File: as.info,  Node: VAX-operands,  Next: VAX-no,  Prev: VAX-branch,  Up: Vax-Dependent
   21170 
   21171 9.49.6 VAX Operands
   21172 -------------------
   21173 
   21174 The immediate character is `$' for Unix compatibility, not `#' as DEC
   21175 writes it.
   21176 
   21177    The indirect character is `*' for Unix compatibility, not `@' as DEC
   21178 writes it.
   21179 
   21180    The displacement sizing character is ``' (an accent grave) for Unix
   21181 compatibility, not `^' as DEC writes it.  The letter preceding ``' may
   21182 have either case.  `G' is not understood, but all other letters (`b i l
   21183 s w') are understood.
   21184 
   21185    Register names understood are `r0 r1 r2 ... r15 ap fp sp pc'.  Upper
   21186 and lower case letters are equivalent.
   21187 
   21188    For instance
   21189      tstb *w`$4(r5)
   21190 
   21191    Any expression is permitted in an operand.  Operands are comma
   21192 separated.
   21193 
   21194 
   21195 File: as.info,  Node: VAX-no,  Next: VAX-Syntax,  Prev: VAX-operands,  Up: Vax-Dependent
   21196 
   21197 9.49.7 Not Supported on VAX
   21198 ---------------------------
   21199 
   21200 Vax bit fields can not be assembled with `as'.  Someone can add the
   21201 required code if they really need it.
   21202 
   21203 
   21204 File: as.info,  Node: VAX-Syntax,  Prev: VAX-no,  Up: Vax-Dependent
   21205 
   21206 9.49.8 VAX Syntax
   21207 -----------------
   21208 
   21209 * Menu:
   21210 
   21211 * VAX-Chars::                Special Characters
   21212 
   21213 
   21214 File: as.info,  Node: VAX-Chars,  Up: VAX-Syntax
   21215 
   21216 9.49.8.1 Special Characters
   21217 ...........................
   21218 
   21219 The presence of a `#' appearing anywhere on a line indicates the start
   21220 of a comment that extends to the end of that line.
   21221 
   21222    If a `#' appears as the first character of a line then the whole
   21223 line is treated as a comment, but in this case the line can also be a
   21224 logical line number directive (*note Comments::) or a preprocessor
   21225 control command (*note Preprocessing::).
   21226 
   21227    The `;' character can be used to separate statements on the same
   21228 line.
   21229 
   21230 
   21231 File: as.info,  Node: V850-Dependent,  Next: XGATE-Dependent,  Prev: TILEPro-Dependent,  Up: Machine Dependencies
   21232 
   21233 9.50 v850 Dependent Features
   21234 ============================
   21235 
   21236 * Menu:
   21237 
   21238 * V850 Options::              Options
   21239 * V850 Syntax::               Syntax
   21240 * V850 Floating Point::       Floating Point
   21241 * V850 Directives::           V850 Machine Directives
   21242 * V850 Opcodes::              Opcodes
   21243 
   21244 
   21245 File: as.info,  Node: V850 Options,  Next: V850 Syntax,  Up: V850-Dependent
   21246 
   21247 9.50.1 Options
   21248 --------------
   21249 
   21250 `as' supports the following additional command-line options for the
   21251 V850 processor family:
   21252 
   21253 `-wsigned_overflow'
   21254      Causes warnings to be produced when signed immediate values
   21255      overflow the space available for then within their opcodes.  By
   21256      default this option is disabled as it is possible to receive
   21257      spurious warnings due to using exact bit patterns as immediate
   21258      constants.
   21259 
   21260 `-wunsigned_overflow'
   21261      Causes warnings to be produced when unsigned immediate values
   21262      overflow the space available for then within their opcodes.  By
   21263      default this option is disabled as it is possible to receive
   21264      spurious warnings due to using exact bit patterns as immediate
   21265      constants.
   21266 
   21267 `-mv850'
   21268      Specifies that the assembled code should be marked as being
   21269      targeted at the V850 processor.  This allows the linker to detect
   21270      attempts to link such code with code assembled for other
   21271      processors.
   21272 
   21273 `-mv850e'
   21274      Specifies that the assembled code should be marked as being
   21275      targeted at the V850E processor.  This allows the linker to detect
   21276      attempts to link such code with code assembled for other
   21277      processors.
   21278 
   21279 `-mv850e1'
   21280      Specifies that the assembled code should be marked as being
   21281      targeted at the V850E1 processor.  This allows the linker to
   21282      detect attempts to link such code with code assembled for other
   21283      processors.
   21284 
   21285 `-mv850any'
   21286      Specifies that the assembled code should be marked as being
   21287      targeted at the V850 processor but support instructions that are
   21288      specific to the extended variants of the process.  This allows the
   21289      production of binaries that contain target specific code, but
   21290      which are also intended to be used in a generic fashion.  For
   21291      example libgcc.a contains generic routines used by the code
   21292      produced by GCC for all versions of the v850 architecture,
   21293      together with support routines only used by the V850E architecture.
   21294 
   21295 `-mv850e2'
   21296      Specifies that the assembled code should be marked as being
   21297      targeted at the V850E2 processor.  This allows the linker to
   21298      detect attempts to link such code with code assembled for other
   21299      processors.
   21300 
   21301 `-mv850e2v3'
   21302      Specifies that the assembled code should be marked as being
   21303      targeted at the V850E2V3 processor.  This allows the linker to
   21304      detect attempts to link such code with code assembled for other
   21305      processors.
   21306 
   21307 `-mv850e2v4'
   21308      This is an alias for `-mv850e3v5'.
   21309 
   21310 `-mv850e3v5'
   21311      Specifies that the assembled code should be marked as being
   21312      targeted at the V850E3V5 processor.  This allows the linker to
   21313      detect attempts to link such code with code assembled for other
   21314      processors.
   21315 
   21316 `-mrelax'
   21317      Enables relaxation.  This allows the .longcall and .longjump pseudo
   21318      ops to be used in the assembler source code.  These ops label
   21319      sections of code which are either a long function call or a long
   21320      branch.  The assembler will then flag these sections of code and
   21321      the linker will attempt to relax them.
   21322 
   21323 `-mgcc-abi'
   21324      Marks the generated objecy file as supporting the old GCC ABI.
   21325 
   21326 `-mrh850-abi'
   21327      Marks the generated objecy file as supporting the RH850 ABI.  This
   21328      is the default.
   21329 
   21330 `-m8byte-align'
   21331      Marks the generated objecy file as supporting a maximum 64-bits of
   21332      alignment for variables defined in the source code.
   21333 
   21334 `-m4byte-align'
   21335      Marks the generated objecy file as supporting a maximum 32-bits of
   21336      alignment for variables defined in the source code.  This is the
   21337      default.
   21338 
   21339 
   21340 
   21341 File: as.info,  Node: V850 Syntax,  Next: V850 Floating Point,  Prev: V850 Options,  Up: V850-Dependent
   21342 
   21343 9.50.2 Syntax
   21344 -------------
   21345 
   21346 * Menu:
   21347 
   21348 * V850-Chars::                Special Characters
   21349 * V850-Regs::                 Register Names
   21350 
   21351 
   21352 File: as.info,  Node: V850-Chars,  Next: V850-Regs,  Up: V850 Syntax
   21353 
   21354 9.50.2.1 Special Characters
   21355 ...........................
   21356 
   21357 `#' is the line comment character.  If a `#' appears as the first
   21358 character of a line, the whole line is treated as a comment, but in
   21359 this case the line can also be a logical line number directive (*note
   21360 Comments::) or a preprocessor control command (*note Preprocessing::).
   21361 
   21362    Two dashes (`--') can also be used to start a line comment.
   21363 
   21364    The `;' character can be used to separate statements on the same
   21365 line.
   21366 
   21367 
   21368 File: as.info,  Node: V850-Regs,  Prev: V850-Chars,  Up: V850 Syntax
   21369 
   21370 9.50.2.2 Register Names
   21371 .......................
   21372 
   21373 `as' supports the following names for registers:
   21374 `general register 0'
   21375      r0, zero
   21376 
   21377 `general register 1'
   21378      r1
   21379 
   21380 `general register 2'
   21381      r2, hp 
   21382 
   21383 `general register 3'
   21384      r3, sp 
   21385 
   21386 `general register 4'
   21387      r4, gp 
   21388 
   21389 `general register 5'
   21390      r5, tp
   21391 
   21392 `general register 6'
   21393      r6
   21394 
   21395 `general register 7'
   21396      r7
   21397 
   21398 `general register 8'
   21399      r8
   21400 
   21401 `general register 9'
   21402      r9
   21403 
   21404 `general register 10'
   21405      r10
   21406 
   21407 `general register 11'
   21408      r11
   21409 
   21410 `general register 12'
   21411      r12
   21412 
   21413 `general register 13'
   21414      r13
   21415 
   21416 `general register 14'
   21417      r14
   21418 
   21419 `general register 15'
   21420      r15
   21421 
   21422 `general register 16'
   21423      r16
   21424 
   21425 `general register 17'
   21426      r17
   21427 
   21428 `general register 18'
   21429      r18
   21430 
   21431 `general register 19'
   21432      r19
   21433 
   21434 `general register 20'
   21435      r20
   21436 
   21437 `general register 21'
   21438      r21
   21439 
   21440 `general register 22'
   21441      r22
   21442 
   21443 `general register 23'
   21444      r23
   21445 
   21446 `general register 24'
   21447      r24
   21448 
   21449 `general register 25'
   21450      r25
   21451 
   21452 `general register 26'
   21453      r26
   21454 
   21455 `general register 27'
   21456      r27
   21457 
   21458 `general register 28'
   21459      r28
   21460 
   21461 `general register 29'
   21462      r29 
   21463 
   21464 `general register 30'
   21465      r30, ep 
   21466 
   21467 `general register 31'
   21468      r31, lp 
   21469 
   21470 `system register 0'
   21471      eipc 
   21472 
   21473 `system register 1'
   21474      eipsw 
   21475 
   21476 `system register 2'
   21477      fepc 
   21478 
   21479 `system register 3'
   21480      fepsw 
   21481 
   21482 `system register 4'
   21483      ecr 
   21484 
   21485 `system register 5'
   21486      psw 
   21487 
   21488 `system register 16'
   21489      ctpc 
   21490 
   21491 `system register 17'
   21492      ctpsw 
   21493 
   21494 `system register 18'
   21495      dbpc 
   21496 
   21497 `system register 19'
   21498      dbpsw 
   21499 
   21500 `system register 20'
   21501      ctbp
   21502 
   21503 
   21504 File: as.info,  Node: V850 Floating Point,  Next: V850 Directives,  Prev: V850 Syntax,  Up: V850-Dependent
   21505 
   21506 9.50.3 Floating Point
   21507 ---------------------
   21508 
   21509 The V850 family uses IEEE floating-point numbers.
   21510 
   21511 
   21512 File: as.info,  Node: V850 Directives,  Next: V850 Opcodes,  Prev: V850 Floating Point,  Up: V850-Dependent
   21513 
   21514 9.50.4 V850 Machine Directives
   21515 ------------------------------
   21516 
   21517 `.offset <EXPRESSION>'
   21518      Moves the offset into the current section to the specified amount.
   21519 
   21520 `.section "name", <type>'
   21521      This is an extension to the standard .section directive.  It sets
   21522      the current section to be <type> and creates an alias for this
   21523      section called "name".
   21524 
   21525 `.v850'
   21526      Specifies that the assembled code should be marked as being
   21527      targeted at the V850 processor.  This allows the linker to detect
   21528      attempts to link such code with code assembled for other
   21529      processors.
   21530 
   21531 `.v850e'
   21532      Specifies that the assembled code should be marked as being
   21533      targeted at the V850E processor.  This allows the linker to detect
   21534      attempts to link such code with code assembled for other
   21535      processors.
   21536 
   21537 `.v850e1'
   21538      Specifies that the assembled code should be marked as being
   21539      targeted at the V850E1 processor.  This allows the linker to
   21540      detect attempts to link such code with code assembled for other
   21541      processors.
   21542 
   21543 `.v850e2'
   21544      Specifies that the assembled code should be marked as being
   21545      targeted at the V850E2 processor.  This allows the linker to
   21546      detect attempts to link such code with code assembled for other
   21547      processors.
   21548 
   21549 `.v850e2v3'
   21550      Specifies that the assembled code should be marked as being
   21551      targeted at the V850E2V3 processor.  This allows the linker to
   21552      detect attempts to link such code with code assembled for other
   21553      processors.
   21554 
   21555 `.v850e2v4'
   21556      Specifies that the assembled code should be marked as being
   21557      targeted at the V850E3V5 processor.  This allows the linker to
   21558      detect attempts to link such code with code assembled for other
   21559      processors.
   21560 
   21561 `.v850e3v5'
   21562      Specifies that the assembled code should be marked as being
   21563      targeted at the V850E3V5 processor.  This allows the linker to
   21564      detect attempts to link such code with code assembled for other
   21565      processors.
   21566 
   21567 
   21568 
   21569 File: as.info,  Node: V850 Opcodes,  Prev: V850 Directives,  Up: V850-Dependent
   21570 
   21571 9.50.5 Opcodes
   21572 --------------
   21573 
   21574 `as' implements all the standard V850 opcodes.
   21575 
   21576    `as' also implements the following pseudo ops:
   21577 
   21578 `hi0()'
   21579      Computes the higher 16 bits of the given expression and stores it
   21580      into the immediate operand field of the given instruction.  For
   21581      example:
   21582 
   21583      `mulhi hi0(here - there), r5, r6'
   21584 
   21585      computes the difference between the address of labels 'here' and
   21586      'there', takes the upper 16 bits of this difference, shifts it
   21587      down 16 bits and then multiplies it by the lower 16 bits in
   21588      register 5, putting the result into register 6.
   21589 
   21590 `lo()'
   21591      Computes the lower 16 bits of the given expression and stores it
   21592      into the immediate operand field of the given instruction.  For
   21593      example:
   21594 
   21595      `addi lo(here - there), r5, r6'
   21596 
   21597      computes the difference between the address of labels 'here' and
   21598      'there', takes the lower 16 bits of this difference and adds it to
   21599      register 5, putting the result into register 6.
   21600 
   21601 `hi()'
   21602      Computes the higher 16 bits of the given expression and then adds
   21603      the value of the most significant bit of the lower 16 bits of the
   21604      expression and stores the result into the immediate operand field
   21605      of the given instruction.  For example the following code can be
   21606      used to compute the address of the label 'here' and store it into
   21607      register 6:
   21608 
   21609      `movhi hi(here), r0, r6'     `movea lo(here), r6, r6'
   21610 
   21611      The reason for this special behaviour is that movea performs a sign
   21612      extension on its immediate operand.  So for example if the address
   21613      of 'here' was 0xFFFFFFFF then without the special behaviour of the
   21614      hi() pseudo-op the movhi instruction would put 0xFFFF0000 into r6,
   21615      then the movea instruction would takes its immediate operand,
   21616      0xFFFF, sign extend it to 32 bits, 0xFFFFFFFF, and then add it
   21617      into r6 giving 0xFFFEFFFF which is wrong (the fifth nibble is E).
   21618      With the hi() pseudo op adding in the top bit of the lo() pseudo
   21619      op, the movhi instruction actually stores 0 into r6 (0xFFFF + 1 =
   21620      0x0000), so that the movea instruction stores 0xFFFFFFFF into r6 -
   21621      the right value.
   21622 
   21623 `hilo()'
   21624      Computes the 32 bit value of the given expression and stores it
   21625      into the immediate operand field of the given instruction (which
   21626      must be a mov instruction).  For example:
   21627 
   21628      `mov hilo(here), r6'
   21629 
   21630      computes the absolute address of label 'here' and puts the result
   21631      into register 6.
   21632 
   21633 `sdaoff()'
   21634      Computes the offset of the named variable from the start of the
   21635      Small Data Area (whoes address is held in register 4, the GP
   21636      register) and stores the result as a 16 bit signed value in the
   21637      immediate operand field of the given instruction.  For example:
   21638 
   21639      `ld.w sdaoff(_a_variable)[gp],r6'
   21640 
   21641      loads the contents of the location pointed to by the label
   21642      '_a_variable' into register 6, provided that the label is located
   21643      somewhere within +/- 32K of the address held in the GP register.
   21644      [Note the linker assumes that the GP register contains a fixed
   21645      address set to the address of the label called '__gp'.  This can
   21646      either be set up automatically by the linker, or specifically set
   21647      by using the `--defsym __gp=<value>' command line option].
   21648 
   21649 `tdaoff()'
   21650      Computes the offset of the named variable from the start of the
   21651      Tiny Data Area (whoes address is held in register 30, the EP
   21652      register) and stores the result as a 4,5, 7 or 8 bit unsigned
   21653      value in the immediate operand field of the given instruction.
   21654      For example:
   21655 
   21656      `sld.w tdaoff(_a_variable)[ep],r6'
   21657 
   21658      loads the contents of the location pointed to by the label
   21659      '_a_variable' into register 6, provided that the label is located
   21660      somewhere within +256 bytes of the address held in the EP
   21661      register.  [Note the linker assumes that the EP register contains
   21662      a fixed address set to the address of the label called '__ep'.
   21663      This can either be set up automatically by the linker, or
   21664      specifically set by using the `--defsym __ep=<value>' command line
   21665      option].
   21666 
   21667 `zdaoff()'
   21668      Computes the offset of the named variable from address 0 and
   21669      stores the result as a 16 bit signed value in the immediate
   21670      operand field of the given instruction.  For example:
   21671 
   21672      `movea zdaoff(_a_variable),zero,r6'
   21673 
   21674      puts the address of the label '_a_variable' into register 6,
   21675      assuming that the label is somewhere within the first 32K of
   21676      memory.  (Strictly speaking it also possible to access the last
   21677      32K of memory as well, as the offsets are signed).
   21678 
   21679 `ctoff()'
   21680      Computes the offset of the named variable from the start of the
   21681      Call Table Area (whoes address is helg in system register 20, the
   21682      CTBP register) and stores the result a 6 or 16 bit unsigned value
   21683      in the immediate field of then given instruction or piece of data.
   21684      For example:
   21685 
   21686      `callt ctoff(table_func1)'
   21687 
   21688      will put the call the function whoes address is held in the call
   21689      table at the location labeled 'table_func1'.
   21690 
   21691 `.longcall `name''
   21692      Indicates that the following sequence of instructions is a long
   21693      call to function `name'.  The linker will attempt to shorten this
   21694      call sequence if `name' is within a 22bit offset of the call.  Only
   21695      valid if the `-mrelax' command line switch has been enabled.
   21696 
   21697 `.longjump `name''
   21698      Indicates that the following sequence of instructions is a long
   21699      jump to label `name'.  The linker will attempt to shorten this code
   21700      sequence if `name' is within a 22bit offset of the jump.  Only
   21701      valid if the `-mrelax' command line switch has been enabled.
   21702 
   21703 
   21704    For information on the V850 instruction set, see `V850 Family
   21705 32-/16-Bit single-Chip Microcontroller Architecture Manual' from NEC.
   21706 Ltd.
   21707 
   21708 
   21709 File: as.info,  Node: XGATE-Dependent,  Next: XSTORMY16-Dependent,  Prev: V850-Dependent,  Up: Machine Dependencies
   21710 
   21711 9.51 XGATE Dependent Features
   21712 =============================
   21713 
   21714 * Menu:
   21715 
   21716 * XGATE-Opts::                   XGATE Options
   21717 * XGATE-Syntax::                 Syntax
   21718 * XGATE-Directives::             Assembler Directives
   21719 * XGATE-Float::                  Floating Point
   21720 * XGATE-opcodes::                Opcodes
   21721 
   21722 
   21723 File: as.info,  Node: XGATE-Opts,  Next: XGATE-Syntax,  Up: XGATE-Dependent
   21724 
   21725 9.51.1 XGATE Options
   21726 --------------------
   21727 
   21728 The Freescale XGATE version of `as' has a few machine dependent options.
   21729 
   21730 `-mshort'
   21731      This option controls the ABI and indicates to use a 16-bit integer
   21732      ABI.  It has no effect on the assembled instructions.  This is the
   21733      default.
   21734 
   21735 `-mlong'
   21736      This option controls the ABI and indicates to use a 32-bit integer
   21737      ABI.
   21738 
   21739 `-mshort-double'
   21740      This option controls the ABI and indicates to use a 32-bit float
   21741      ABI.  This is the default.
   21742 
   21743 `-mlong-double'
   21744      This option controls the ABI and indicates to use a 64-bit float
   21745      ABI.
   21746 
   21747 `--print-insn-syntax'
   21748      You can use the `--print-insn-syntax' option to obtain the syntax
   21749      description of the instruction when an error is detected.
   21750 
   21751 `--print-opcodes'
   21752      The `--print-opcodes' option prints the list of all the
   21753      instructions with their syntax. Once the list is printed `as'
   21754      exits.
   21755 
   21756 
   21757 
   21758 File: as.info,  Node: XGATE-Syntax,  Next: XGATE-Directives,  Prev: XGATE-Opts,  Up: XGATE-Dependent
   21759 
   21760 9.51.2 Syntax
   21761 -------------
   21762 
   21763 In XGATE RISC syntax, the instruction name comes first and it may be
   21764 followed by up to three operands. Operands are separated by commas
   21765 (`,'). `as' will complain if too many operands are specified for a
   21766 given instruction. The same will happen if you specified too few
   21767 operands.
   21768 
   21769      nop
   21770      ldl  #23
   21771      CMP  R1, R2
   21772 
   21773    The presence of a `;' character or a `!' character anywhere on a
   21774 line indicates the start of a comment that extends to the end of that
   21775 line.
   21776 
   21777    A `*' or a `#' character at the start of a line also introduces a
   21778 line comment, but these characters do not work elsewhere on the line.
   21779 If the first character of the line is a `#' then as well as starting a
   21780 comment, the line could also be logical line number directive (*note
   21781 Comments::) or a preprocessor control command (*note Preprocessing::).
   21782 
   21783    The XGATE assembler does not currently support a line separator
   21784 character.
   21785 
   21786    The following addressing modes are understood for XGATE:
   21787 "Inherent"
   21788      `'
   21789 
   21790 "Immediate 3 Bit Wide"
   21791      `#NUMBER'
   21792 
   21793 "Immediate 4 Bit Wide"
   21794      `#NUMBER'
   21795 
   21796 "Immediate 8 Bit Wide"
   21797      `#NUMBER'
   21798 
   21799 "Monadic Addressing"
   21800      `REG'
   21801 
   21802 "Dyadic Addressing"
   21803      `REG, REG'
   21804 
   21805 "Triadic Addressing"
   21806      `REG, REG, REG'
   21807 
   21808 "Relative Addressing 9 Bit Wide"
   21809      `*SYMBOL'
   21810 
   21811 "Relative Addressing 10 Bit Wide"
   21812      `*SYMBOL'
   21813 
   21814 "Index Register plus Immediate Offset"
   21815      `REG, (REG, #NUMBER)'
   21816 
   21817 "Index Register plus Register Offset"
   21818      `REG, REG, REG'
   21819 
   21820 "Index Register plus Register Offset with Post-increment"
   21821      `REG, REG, REG+'
   21822 
   21823 "Index Register plus Register Offset with Pre-decrement"
   21824      `REG, REG, -REG'
   21825 
   21826      The register can be either `R0', `R1', `R2', `R3', `R4', `R5',
   21827      `R6' or `R7'.
   21828 
   21829 
   21830    Convience macro opcodes to deal with 16-bit values have been added.
   21831 
   21832 "Immediate 16 Bit Wide"
   21833      `#NUMBER', or `*SYMBOL'
   21834 
   21835      For example:
   21836 
   21837           ldw R1, #1024
   21838           ldw R3, timer
   21839           ldw R1, (R1, #0)
   21840           COM R1
   21841           stw R2, (R1, #0)
   21842 
   21843 
   21844 File: as.info,  Node: XGATE-Directives,  Next: XGATE-Float,  Prev: XGATE-Syntax,  Up: XGATE-Dependent
   21845 
   21846 9.51.3 Assembler Directives
   21847 ---------------------------
   21848 
   21849 The XGATE version of `as' have the following specific assembler
   21850 directives:
   21851 
   21852 
   21853 File: as.info,  Node: XGATE-Float,  Next: XGATE-opcodes,  Prev: XGATE-Directives,  Up: XGATE-Dependent
   21854 
   21855 9.51.4 Floating Point
   21856 ---------------------
   21857 
   21858 Packed decimal (P) format floating literals are not supported(yet).
   21859 
   21860    The floating point formats generated by directives are these.
   21861 
   21862 `.float'
   21863      `Single' precision floating point constants.
   21864 
   21865 `.double'
   21866      `Double' precision floating point constants.
   21867 
   21868 `.extend'
   21869 `.ldouble'
   21870      `Extended' precision (`long double') floating point constants.
   21871 
   21872 
   21873 File: as.info,  Node: XGATE-opcodes,  Prev: XGATE-Float,  Up: XGATE-Dependent
   21874 
   21875 9.51.5 Opcodes
   21876 --------------
   21877 
   21878 
   21879 File: as.info,  Node: XSTORMY16-Dependent,  Next: Xtensa-Dependent,  Prev: XGATE-Dependent,  Up: Machine Dependencies
   21880 
   21881 9.52 XStormy16 Dependent Features
   21882 =================================
   21883 
   21884 * Menu:
   21885 
   21886 * XStormy16 Syntax::               Syntax
   21887 * XStormy16 Directives::           Machine Directives
   21888 * XStormy16 Opcodes::              Pseudo-Opcodes
   21889 
   21890 
   21891 File: as.info,  Node: XStormy16 Syntax,  Next: XStormy16 Directives,  Up: XSTORMY16-Dependent
   21892 
   21893 9.52.1 Syntax
   21894 -------------
   21895 
   21896 * Menu:
   21897 
   21898 * XStormy16-Chars::                Special Characters
   21899 
   21900 
   21901 File: as.info,  Node: XStormy16-Chars,  Up: XStormy16 Syntax
   21902 
   21903 9.52.1.1 Special Characters
   21904 ...........................
   21905 
   21906 `#' is the line comment character.  If a `#' appears as the first
   21907 character of a line, the whole line is treated as a comment, but in
   21908 this case the line can also be a logical line number directive (*note
   21909 Comments::) or a preprocessor control command (*note Preprocessing::).
   21910 
   21911    A semicolon (`;') can be used to start a comment that extends from
   21912 wherever the character appears on the line up to the end of the line.
   21913 
   21914    The `|' character can be used to separate statements on the same
   21915 line.
   21916 
   21917 
   21918 File: as.info,  Node: XStormy16 Directives,  Next: XStormy16 Opcodes,  Prev: XStormy16 Syntax,  Up: XSTORMY16-Dependent
   21919 
   21920 9.52.2 XStormy16 Machine Directives
   21921 -----------------------------------
   21922 
   21923 `.16bit_pointers'
   21924      Like the `--16bit-pointers' command line option this directive
   21925      indicates that the assembly code makes use of 16-bit pointers.
   21926 
   21927 `.32bit_pointers'
   21928      Like the `--32bit-pointers' command line option this directive
   21929      indicates that the assembly code makes use of 32-bit pointers.
   21930 
   21931 `.no_pointers'
   21932      Like the `--no-pointers' command line option this directive
   21933      indicates that the assembly code does not makes use pointers.
   21934 
   21935 
   21936 
   21937 File: as.info,  Node: XStormy16 Opcodes,  Prev: XStormy16 Directives,  Up: XSTORMY16-Dependent
   21938 
   21939 9.52.3 XStormy16 Pseudo-Opcodes
   21940 -------------------------------
   21941 
   21942 `as' implements all the standard XStormy16 opcodes.
   21943 
   21944    `as' also implements the following pseudo ops:
   21945 
   21946 `@lo()'
   21947      Computes the lower 16 bits of the given expression and stores it
   21948      into the immediate operand field of the given instruction.  For
   21949      example:
   21950 
   21951      `add r6, @lo(here - there)'
   21952 
   21953      computes the difference between the address of labels 'here' and
   21954      'there', takes the lower 16 bits of this difference and adds it to
   21955      register 6.
   21956 
   21957 `@hi()'
   21958      Computes the higher 16 bits of the given expression and stores it
   21959      into the immediate operand field of the given instruction.  For
   21960      example:
   21961 
   21962      `addc r7, @hi(here - there)'
   21963 
   21964      computes the difference between the address of labels 'here' and
   21965      'there', takes the upper 16 bits of this difference, shifts it
   21966      down 16 bits and then adds it, along with the carry bit, to the
   21967      value in register 7.
   21968 
   21969 
   21970 
   21971 File: as.info,  Node: Xtensa-Dependent,  Next: Z80-Dependent,  Prev: XSTORMY16-Dependent,  Up: Machine Dependencies
   21972 
   21973 9.53 Xtensa Dependent Features
   21974 ==============================
   21975 
   21976    This chapter covers features of the GNU assembler that are specific
   21977 to the Xtensa architecture.  For details about the Xtensa instruction
   21978 set, please consult the `Xtensa Instruction Set Architecture (ISA)
   21979 Reference Manual'.
   21980 
   21981 * Menu:
   21982 
   21983 * Xtensa Options::              Command-line Options.
   21984 * Xtensa Syntax::               Assembler Syntax for Xtensa Processors.
   21985 * Xtensa Optimizations::        Assembler Optimizations.
   21986 * Xtensa Relaxation::           Other Automatic Transformations.
   21987 * Xtensa Directives::           Directives for Xtensa Processors.
   21988 
   21989 
   21990 File: as.info,  Node: Xtensa Options,  Next: Xtensa Syntax,  Up: Xtensa-Dependent
   21991 
   21992 9.53.1 Command Line Options
   21993 ---------------------------
   21994 
   21995 `--text-section-literals | --no-text-section-literals'
   21996      Control the treatment of literal pools.  The default is
   21997      `--no-text-section-literals', which places literals in separate
   21998      sections in the output file.  This allows the literal pool to be
   21999      placed in a data RAM/ROM.  With `--text-section-literals', the
   22000      literals are interspersed in the text section in order to keep
   22001      them as close as possible to their references.  This may be
   22002      necessary for large assembly files, where the literals would
   22003      otherwise be out of range of the `L32R' instructions in the text
   22004      section.  These options only affect literals referenced via
   22005      PC-relative `L32R' instructions; literals for absolute mode `L32R'
   22006      instructions are handled separately.  *Note literal: Literal
   22007      Directive.
   22008 
   22009 `--absolute-literals | --no-absolute-literals'
   22010      Indicate to the assembler whether `L32R' instructions use absolute
   22011      or PC-relative addressing.  If the processor includes the absolute
   22012      addressing option, the default is to use absolute `L32R'
   22013      relocations.  Otherwise, only the PC-relative `L32R' relocations
   22014      can be used.
   22015 
   22016 `--target-align | --no-target-align'
   22017      Enable or disable automatic alignment to reduce branch penalties
   22018      at some expense in code size.  *Note Automatic Instruction
   22019      Alignment: Xtensa Automatic Alignment.  This optimization is
   22020      enabled by default.  Note that the assembler will always align
   22021      instructions like `LOOP' that have fixed alignment requirements.
   22022 
   22023 `--longcalls | --no-longcalls'
   22024      Enable or disable transformation of call instructions to allow
   22025      calls across a greater range of addresses.  *Note Function Call
   22026      Relaxation: Xtensa Call Relaxation.  This option should be used
   22027      when call targets can potentially be out of range.  It may degrade
   22028      both code size and performance, but the linker can generally
   22029      optimize away the unnecessary overhead when a call ends up within
   22030      range.  The default is `--no-longcalls'.
   22031 
   22032 `--transform | --no-transform'
   22033      Enable or disable all assembler transformations of Xtensa
   22034      instructions, including both relaxation and optimization.  The
   22035      default is `--transform'; `--no-transform' should only be used in
   22036      the rare cases when the instructions must be exactly as specified
   22037      in the assembly source.  Using `--no-transform' causes out of range
   22038      instruction operands to be errors.
   22039 
   22040 `--rename-section OLDNAME=NEWNAME'
   22041      Rename the OLDNAME section to NEWNAME.  This option can be used
   22042      multiple times to rename multiple sections.
   22043 
   22044 `--trampolines | --no-trampolines'
   22045      Enable or disable transformation of jump instructions to allow
   22046      jumps across a greater range of addresses.  *Note Jump
   22047      Trampolines: Xtensa Jump Relaxation.  This option should be used
   22048      when jump targets can potentially be out of range.  In the absence
   22049      of such jumps this option does not affect code size or
   22050      performance.  The default is `--trampolines'.
   22051 
   22052 
   22053 File: as.info,  Node: Xtensa Syntax,  Next: Xtensa Optimizations,  Prev: Xtensa Options,  Up: Xtensa-Dependent
   22054 
   22055 9.53.2 Assembler Syntax
   22056 -----------------------
   22057 
   22058 Block comments are delimited by `/*' and `*/'.  End of line comments
   22059 may be introduced with either `#' or `//'.
   22060 
   22061    If a `#' appears as the first character of a line then the whole
   22062 line is treated as a comment, but in this case the line could also be a
   22063 logical line number directive (*note Comments::) or a preprocessor
   22064 control command (*note Preprocessing::).
   22065 
   22066    Instructions consist of a leading opcode or macro name followed by
   22067 whitespace and an optional comma-separated list of operands:
   22068 
   22069      OPCODE [OPERAND, ...]
   22070 
   22071    Instructions must be separated by a newline or semicolon (`;').
   22072 
   22073    FLIX instructions, which bundle multiple opcodes together in a single
   22074 instruction, are specified by enclosing the bundled opcodes inside
   22075 braces:
   22076 
   22077      {
   22078      [FORMAT]
   22079      OPCODE0 [OPERANDS]
   22080      OPCODE1 [OPERANDS]
   22081      OPCODE2 [OPERANDS]
   22082      ...
   22083      }
   22084 
   22085    The opcodes in a FLIX instruction are listed in the same order as the
   22086 corresponding instruction slots in the TIE format declaration.
   22087 Directives and labels are not allowed inside the braces of a FLIX
   22088 instruction.  A particular TIE format name can optionally be specified
   22089 immediately after the opening brace, but this is usually unnecessary.
   22090 The assembler will automatically search for a format that can encode the
   22091 specified opcodes, so the format name need only be specified in rare
   22092 cases where there is more than one applicable format and where it
   22093 matters which of those formats is used.  A FLIX instruction can also be
   22094 specified on a single line by separating the opcodes with semicolons:
   22095 
   22096      { [FORMAT;] OPCODE0 [OPERANDS]; OPCODE1 [OPERANDS]; OPCODE2 [OPERANDS]; ... }
   22097 
   22098    If an opcode can only be encoded in a FLIX instruction but is not
   22099 specified as part of a FLIX bundle, the assembler will choose the
   22100 smallest format where the opcode can be encoded and will fill unused
   22101 instruction slots with no-ops.
   22102 
   22103 * Menu:
   22104 
   22105 * Xtensa Opcodes::              Opcode Naming Conventions.
   22106 * Xtensa Registers::            Register Naming.
   22107 
   22108 
   22109 File: as.info,  Node: Xtensa Opcodes,  Next: Xtensa Registers,  Up: Xtensa Syntax
   22110 
   22111 9.53.2.1 Opcode Names
   22112 .....................
   22113 
   22114 See the `Xtensa Instruction Set Architecture (ISA) Reference Manual'
   22115 for a complete list of opcodes and descriptions of their semantics.
   22116 
   22117    If an opcode name is prefixed with an underscore character (`_'),
   22118 `as' will not transform that instruction in any way.  The underscore
   22119 prefix disables both optimization (*note Xtensa Optimizations: Xtensa
   22120 Optimizations.) and relaxation (*note Xtensa Relaxation: Xtensa
   22121 Relaxation.) for that particular instruction.  Only use the underscore
   22122 prefix when it is essential to select the exact opcode produced by the
   22123 assembler.  Using this feature unnecessarily makes the code less
   22124 efficient by disabling assembler optimization and less flexible by
   22125 disabling relaxation.
   22126 
   22127    Note that this special handling of underscore prefixes only applies
   22128 to Xtensa opcodes, not to either built-in macros or user-defined macros.
   22129 When an underscore prefix is used with a macro (e.g., `_MOV'), it
   22130 refers to a different macro.  The assembler generally provides built-in
   22131 macros both with and without the underscore prefix, where the underscore
   22132 versions behave as if the underscore carries through to the instructions
   22133 in the macros.  For example, `_MOV' may expand to `_MOV.N'.
   22134 
   22135    The underscore prefix only applies to individual instructions, not to
   22136 series of instructions.  For example, if a series of instructions have
   22137 underscore prefixes, the assembler will not transform the individual
   22138 instructions, but it may insert other instructions between them (e.g.,
   22139 to align a `LOOP' instruction).  To prevent the assembler from
   22140 modifying a series of instructions as a whole, use the `no-transform'
   22141 directive.  *Note transform: Transform Directive.
   22142 
   22143 
   22144 File: as.info,  Node: Xtensa Registers,  Prev: Xtensa Opcodes,  Up: Xtensa Syntax
   22145 
   22146 9.53.2.2 Register Names
   22147 .......................
   22148 
   22149 The assembly syntax for a register file entry is the "short" name for a
   22150 TIE register file followed by the index into that register file.  For
   22151 example, the general-purpose `AR' register file has a short name of
   22152 `a', so these registers are named `a0'...`a15'.  As a special feature,
   22153 `sp' is also supported as a synonym for `a1'.  Additional registers may
   22154 be added by processor configuration options and by designer-defined TIE
   22155 extensions.  An initial `$' character is optional in all register names.
   22156 
   22157 
   22158 File: as.info,  Node: Xtensa Optimizations,  Next: Xtensa Relaxation,  Prev: Xtensa Syntax,  Up: Xtensa-Dependent
   22159 
   22160 9.53.3 Xtensa Optimizations
   22161 ---------------------------
   22162 
   22163 The optimizations currently supported by `as' are generation of density
   22164 instructions where appropriate and automatic branch target alignment.
   22165 
   22166 * Menu:
   22167 
   22168 * Density Instructions::        Using Density Instructions.
   22169 * Xtensa Automatic Alignment::  Automatic Instruction Alignment.
   22170 
   22171 
   22172 File: as.info,  Node: Density Instructions,  Next: Xtensa Automatic Alignment,  Up: Xtensa Optimizations
   22173 
   22174 9.53.3.1 Using Density Instructions
   22175 ...................................
   22176 
   22177 The Xtensa instruction set has a code density option that provides
   22178 16-bit versions of some of the most commonly used opcodes.  Use of these
   22179 opcodes can significantly reduce code size.  When possible, the
   22180 assembler automatically translates instructions from the core Xtensa
   22181 instruction set into equivalent instructions from the Xtensa code
   22182 density option.  This translation can be disabled by using underscore
   22183 prefixes (*note Opcode Names: Xtensa Opcodes.), by using the
   22184 `--no-transform' command-line option (*note Command Line Options:
   22185 Xtensa Options.), or by using the `no-transform' directive (*note
   22186 transform: Transform Directive.).
   22187 
   22188    It is a good idea _not_ to use the density instructions directly.
   22189 The assembler will automatically select dense instructions where
   22190 possible.  If you later need to use an Xtensa processor without the code
   22191 density option, the same assembly code will then work without
   22192 modification.
   22193 
   22194 
   22195 File: as.info,  Node: Xtensa Automatic Alignment,  Prev: Density Instructions,  Up: Xtensa Optimizations
   22196 
   22197 9.53.3.2 Automatic Instruction Alignment
   22198 ........................................
   22199 
   22200 The Xtensa assembler will automatically align certain instructions, both
   22201 to optimize performance and to satisfy architectural requirements.
   22202 
   22203    As an optimization to improve performance, the assembler attempts to
   22204 align branch targets so they do not cross instruction fetch boundaries.
   22205 (Xtensa processors can be configured with either 32-bit or 64-bit
   22206 instruction fetch widths.)  An instruction immediately following a call
   22207 is treated as a branch target in this context, because it will be the
   22208 target of a return from the call.  This alignment has the potential to
   22209 reduce branch penalties at some expense in code size.  This
   22210 optimization is enabled by default.  You can disable it with the
   22211 `--no-target-align' command-line option (*note Command Line Options:
   22212 Xtensa Options.).
   22213 
   22214    The target alignment optimization is done without adding instructions
   22215 that could increase the execution time of the program.  If there are
   22216 density instructions in the code preceding a target, the assembler can
   22217 change the target alignment by widening some of those instructions to
   22218 the equivalent 24-bit instructions.  Extra bytes of padding can be
   22219 inserted immediately following unconditional jump and return
   22220 instructions.  This approach is usually successful in aligning many,
   22221 but not all, branch targets.
   22222 
   22223    The `LOOP' family of instructions must be aligned such that the
   22224 first instruction in the loop body does not cross an instruction fetch
   22225 boundary (e.g., with a 32-bit fetch width, a `LOOP' instruction must be
   22226 on either a 1 or 2 mod 4 byte boundary).  The assembler knows about
   22227 this restriction and inserts the minimal number of 2 or 3 byte no-op
   22228 instructions to satisfy it.  When no-op instructions are added, any
   22229 label immediately preceding the original loop will be moved in order to
   22230 refer to the loop instruction, not the newly generated no-op
   22231 instruction.  To preserve binary compatibility across processors with
   22232 different fetch widths, the assembler conservatively assumes a 32-bit
   22233 fetch width when aligning `LOOP' instructions (except if the first
   22234 instruction in the loop is a 64-bit instruction).
   22235 
   22236    Previous versions of the assembler automatically aligned `ENTRY'
   22237 instructions to 4-byte boundaries, but that alignment is now the
   22238 programmer's responsibility.
   22239 
   22240 
   22241 File: as.info,  Node: Xtensa Relaxation,  Next: Xtensa Directives,  Prev: Xtensa Optimizations,  Up: Xtensa-Dependent
   22242 
   22243 9.53.4 Xtensa Relaxation
   22244 ------------------------
   22245 
   22246 When an instruction operand is outside the range allowed for that
   22247 particular instruction field, `as' can transform the code to use a
   22248 functionally-equivalent instruction or sequence of instructions.  This
   22249 process is known as "relaxation".  This is typically done for branch
   22250 instructions because the distance of the branch targets is not known
   22251 until assembly-time.  The Xtensa assembler offers branch relaxation and
   22252 also extends this concept to function calls, `MOVI' instructions and
   22253 other instructions with immediate fields.
   22254 
   22255 * Menu:
   22256 
   22257 * Xtensa Branch Relaxation::        Relaxation of Branches.
   22258 * Xtensa Call Relaxation::          Relaxation of Function Calls.
   22259 * Xtensa Jump Relaxation::          Relaxation of Jumps.
   22260 * Xtensa Immediate Relaxation::     Relaxation of other Immediate Fields.
   22261 
   22262 
   22263 File: as.info,  Node: Xtensa Branch Relaxation,  Next: Xtensa Call Relaxation,  Up: Xtensa Relaxation
   22264 
   22265 9.53.4.1 Conditional Branch Relaxation
   22266 ......................................
   22267 
   22268 When the target of a branch is too far away from the branch itself,
   22269 i.e., when the offset from the branch to the target is too large to fit
   22270 in the immediate field of the branch instruction, it may be necessary to
   22271 replace the branch with a branch around a jump.  For example,
   22272 
   22273          beqz    a2, L
   22274 
   22275    may result in:
   22276 
   22277          bnez.n  a2, M
   22278          j L
   22279      M:
   22280 
   22281    (The `BNEZ.N' instruction would be used in this example only if the
   22282 density option is available.  Otherwise, `BNEZ' would be used.)
   22283 
   22284    This relaxation works well because the unconditional jump instruction
   22285 has a much larger offset range than the various conditional branches.
   22286 However, an error will occur if a branch target is beyond the range of a
   22287 jump instruction.  `as' cannot relax unconditional jumps.  Similarly,
   22288 an error will occur if the original input contains an unconditional
   22289 jump to a target that is out of range.
   22290 
   22291    Branch relaxation is enabled by default.  It can be disabled by using
   22292 underscore prefixes (*note Opcode Names: Xtensa Opcodes.), the
   22293 `--no-transform' command-line option (*note Command Line Options:
   22294 Xtensa Options.), or the `no-transform' directive (*note transform:
   22295 Transform Directive.).
   22296 
   22297 
   22298 File: as.info,  Node: Xtensa Call Relaxation,  Next: Xtensa Jump Relaxation,  Prev: Xtensa Branch Relaxation,  Up: Xtensa Relaxation
   22299 
   22300 9.53.4.2 Function Call Relaxation
   22301 .................................
   22302 
   22303 Function calls may require relaxation because the Xtensa immediate call
   22304 instructions (`CALL0', `CALL4', `CALL8' and `CALL12') provide a
   22305 PC-relative offset of only 512 Kbytes in either direction.  For larger
   22306 programs, it may be necessary to use indirect calls (`CALLX0',
   22307 `CALLX4', `CALLX8' and `CALLX12') where the target address is specified
   22308 in a register.  The Xtensa assembler can automatically relax immediate
   22309 call instructions into indirect call instructions.  This relaxation is
   22310 done by loading the address of the called function into the callee's
   22311 return address register and then using a `CALLX' instruction.  So, for
   22312 example:
   22313 
   22314          call8 func
   22315 
   22316    might be relaxed to:
   22317 
   22318          .literal .L1, func
   22319          l32r    a8, .L1
   22320          callx8  a8
   22321 
   22322    Because the addresses of targets of function calls are not generally
   22323 known until link-time, the assembler must assume the worst and relax all
   22324 the calls to functions in other source files, not just those that really
   22325 will be out of range.  The linker can recognize calls that were
   22326 unnecessarily relaxed, and it will remove the overhead introduced by the
   22327 assembler for those cases where direct calls are sufficient.
   22328 
   22329    Call relaxation is disabled by default because it can have a negative
   22330 effect on both code size and performance, although the linker can
   22331 usually eliminate the unnecessary overhead.  If a program is too large
   22332 and some of the calls are out of range, function call relaxation can be
   22333 enabled using the `--longcalls' command-line option or the `longcalls'
   22334 directive (*note longcalls: Longcalls Directive.).
   22335 
   22336 
   22337 File: as.info,  Node: Xtensa Jump Relaxation,  Next: Xtensa Immediate Relaxation,  Prev: Xtensa Call Relaxation,  Up: Xtensa Relaxation
   22338 
   22339 9.53.4.3 Jump Relaxation
   22340 ........................
   22341 
   22342 Jump instruction may require relaxation because the Xtensa jump
   22343 instruction (`J') provide a PC-relative offset of only 128 Kbytes in
   22344 either direction.  One option is to use jump long (`J.L') instruction,
   22345 which depending on jump distance may be assembled as jump (`J') or
   22346 indirect jump (`JX').  However it needs a free register.  When there's
   22347 no spare register it is possible to plant intermediate jump sites
   22348 (trampolines) between the jump instruction and its target.  These sites
   22349 may be located in areas unreachable by normal code execution flow, in
   22350 that case they only contain intermediate jumps, or they may be inserted
   22351 in the middle of code block, in which case there's an additional jump
   22352 from the beginning of the trampoline to the instruction past its end.
   22353 So, for example:
   22354 
   22355          j 1f
   22356          ...
   22357          retw
   22358          ...
   22359          mov a10, a2
   22360          call8 func
   22361          ...
   22362      1:
   22363          ...
   22364 
   22365    might be relaxed to:
   22366 
   22367          j .L0_TR_1
   22368          ...
   22369          retw
   22370      .L0_TR_1:
   22371          j 1f
   22372          ...
   22373          mov a10, a2
   22374          call8 func
   22375          ...
   22376      1:
   22377          ...
   22378 
   22379    or to:
   22380 
   22381          j .L0_TR_1
   22382          ...
   22383          retw
   22384          ...
   22385          mov a10, a2
   22386          j .L0_TR_0
   22387      .L0_TR_1:
   22388          j 1f
   22389      .L0_TR_0:
   22390          call8 func
   22391          ...
   22392      1:
   22393          ...
   22394 
   22395    The Xtensa assempler uses trampolines with jump around only when it
   22396 cannot find suitable unreachable trampoline.  There may be multiple
   22397 trampolines between the jump instruction and its target.
   22398 
   22399    This relaxation does not apply to jumps to undefined symbols,
   22400 assuming they will reach their targets once resolved.
   22401 
   22402    Jump relaxation is enabled by default because it does not affect
   22403 code size or performance while the code itself is small.  This
   22404 relaxation may be disabled completely with `--no-trampolines' or
   22405 `--no-transform' command-line options (*note Command Line Options:
   22406 Xtensa Options.).
   22407 
   22408 
   22409 File: as.info,  Node: Xtensa Immediate Relaxation,  Prev: Xtensa Jump Relaxation,  Up: Xtensa Relaxation
   22410 
   22411 9.53.4.4 Other Immediate Field Relaxation
   22412 .........................................
   22413 
   22414 The assembler normally performs the following other relaxations.  They
   22415 can be disabled by using underscore prefixes (*note Opcode Names:
   22416 Xtensa Opcodes.), the `--no-transform' command-line option (*note
   22417 Command Line Options: Xtensa Options.), or the `no-transform' directive
   22418 (*note transform: Transform Directive.).
   22419 
   22420    The `MOVI' machine instruction can only materialize values in the
   22421 range from -2048 to 2047.  Values outside this range are best
   22422 materialized with `L32R' instructions.  Thus:
   22423 
   22424          movi a0, 100000
   22425 
   22426    is assembled into the following machine code:
   22427 
   22428          .literal .L1, 100000
   22429          l32r a0, .L1
   22430 
   22431    The `L8UI' machine instruction can only be used with immediate
   22432 offsets in the range from 0 to 255. The `L16SI' and `L16UI' machine
   22433 instructions can only be used with offsets from 0 to 510.  The `L32I'
   22434 machine instruction can only be used with offsets from 0 to 1020.  A
   22435 load offset outside these ranges can be materialized with an `L32R'
   22436 instruction if the destination register of the load is different than
   22437 the source address register.  For example:
   22438 
   22439          l32i a1, a0, 2040
   22440 
   22441    is translated to:
   22442 
   22443          .literal .L1, 2040
   22444          l32r a1, .L1
   22445          add a1, a0, a1
   22446          l32i a1, a1, 0
   22447 
   22448 If the load destination and source address register are the same, an
   22449 out-of-range offset causes an error.
   22450 
   22451    The Xtensa `ADDI' instruction only allows immediate operands in the
   22452 range from -128 to 127.  There are a number of alternate instruction
   22453 sequences for the `ADDI' operation.  First, if the immediate is 0, the
   22454 `ADDI' will be turned into a `MOV.N' instruction (or the equivalent
   22455 `OR' instruction if the code density option is not available).  If the
   22456 `ADDI' immediate is outside of the range -128 to 127, but inside the
   22457 range -32896 to 32639, an `ADDMI' instruction or `ADDMI'/`ADDI'
   22458 sequence will be used.  Finally, if the immediate is outside of this
   22459 range and a free register is available, an `L32R'/`ADD' sequence will
   22460 be used with a literal allocated from the literal pool.
   22461 
   22462    For example:
   22463 
   22464          addi    a5, a6, 0
   22465          addi    a5, a6, 512
   22466          addi    a5, a6, 513
   22467          addi    a5, a6, 50000
   22468 
   22469    is assembled into the following:
   22470 
   22471          .literal .L1, 50000
   22472          mov.n   a5, a6
   22473          addmi   a5, a6, 0x200
   22474          addmi   a5, a6, 0x200
   22475          addi    a5, a5, 1
   22476          l32r    a5, .L1
   22477          add     a5, a6, a5
   22478 
   22479 
   22480 File: as.info,  Node: Xtensa Directives,  Prev: Xtensa Relaxation,  Up: Xtensa-Dependent
   22481 
   22482 9.53.5 Directives
   22483 -----------------
   22484 
   22485 The Xtensa assembler supports a region-based directive syntax:
   22486 
   22487          .begin DIRECTIVE [OPTIONS]
   22488          ...
   22489          .end DIRECTIVE
   22490 
   22491    All the Xtensa-specific directives that apply to a region of code use
   22492 this syntax.
   22493 
   22494    The directive applies to code between the `.begin' and the `.end'.
   22495 The state of the option after the `.end' reverts to what it was before
   22496 the `.begin'.  A nested `.begin'/`.end' region can further change the
   22497 state of the directive without having to be aware of its outer state.
   22498 For example, consider:
   22499 
   22500          .begin no-transform
   22501      L:  add a0, a1, a2
   22502          .begin transform
   22503      M:  add a0, a1, a2
   22504          .end transform
   22505      N:  add a0, a1, a2
   22506          .end no-transform
   22507 
   22508    The `ADD' opcodes at `L' and `N' in the outer `no-transform' region
   22509 both result in `ADD' machine instructions, but the assembler selects an
   22510 `ADD.N' instruction for the `ADD' at `M' in the inner `transform'
   22511 region.
   22512 
   22513    The advantage of this style is that it works well inside macros
   22514 which can preserve the context of their callers.
   22515 
   22516    The following directives are available:
   22517 
   22518 * Menu:
   22519 
   22520 * Schedule Directive::         Enable instruction scheduling.
   22521 * Longcalls Directive::        Use Indirect Calls for Greater Range.
   22522 * Transform Directive::        Disable All Assembler Transformations.
   22523 * Literal Directive::          Intermix Literals with Instructions.
   22524 * Literal Position Directive:: Specify Inline Literal Pool Locations.
   22525 * Literal Prefix Directive::   Specify Literal Section Name Prefix.
   22526 * Absolute Literals Directive:: Control PC-Relative vs. Absolute Literals.
   22527 
   22528 
   22529 File: as.info,  Node: Schedule Directive,  Next: Longcalls Directive,  Up: Xtensa Directives
   22530 
   22531 9.53.5.1 schedule
   22532 .................
   22533 
   22534 The `schedule' directive is recognized only for compatibility with
   22535 Tensilica's assembler.
   22536 
   22537          .begin [no-]schedule
   22538          .end [no-]schedule
   22539 
   22540    This directive is ignored and has no effect on `as'.
   22541 
   22542 
   22543 File: as.info,  Node: Longcalls Directive,  Next: Transform Directive,  Prev: Schedule Directive,  Up: Xtensa Directives
   22544 
   22545 9.53.5.2 longcalls
   22546 ..................
   22547 
   22548 The `longcalls' directive enables or disables function call relaxation.
   22549 *Note Function Call Relaxation: Xtensa Call Relaxation.
   22550 
   22551          .begin [no-]longcalls
   22552          .end [no-]longcalls
   22553 
   22554    Call relaxation is disabled by default unless the `--longcalls'
   22555 command-line option is specified.  The `longcalls' directive overrides
   22556 the default determined by the command-line options.
   22557 
   22558 
   22559 File: as.info,  Node: Transform Directive,  Next: Literal Directive,  Prev: Longcalls Directive,  Up: Xtensa Directives
   22560 
   22561 9.53.5.3 transform
   22562 ..................
   22563 
   22564 This directive enables or disables all assembler transformation,
   22565 including relaxation (*note Xtensa Relaxation: Xtensa Relaxation.) and
   22566 optimization (*note Xtensa Optimizations: Xtensa Optimizations.).
   22567 
   22568          .begin [no-]transform
   22569          .end [no-]transform
   22570 
   22571    Transformations are enabled by default unless the `--no-transform'
   22572 option is used.  The `transform' directive overrides the default
   22573 determined by the command-line options.  An underscore opcode prefix,
   22574 disabling transformation of that opcode, always takes precedence over
   22575 both directives and command-line flags.
   22576 
   22577 
   22578 File: as.info,  Node: Literal Directive,  Next: Literal Position Directive,  Prev: Transform Directive,  Up: Xtensa Directives
   22579 
   22580 9.53.5.4 literal
   22581 ................
   22582 
   22583 The `.literal' directive is used to define literal pool data, i.e.,
   22584 read-only 32-bit data accessed via `L32R' instructions.
   22585 
   22586          .literal LABEL, VALUE[, VALUE...]
   22587 
   22588    This directive is similar to the standard `.word' directive, except
   22589 that the actual location of the literal data is determined by the
   22590 assembler and linker, not by the position of the `.literal' directive.
   22591 Using this directive gives the assembler freedom to locate the literal
   22592 data in the most appropriate place and possibly to combine identical
   22593 literals.  For example, the code:
   22594 
   22595          entry sp, 40
   22596          .literal .L1, sym
   22597          l32r    a4, .L1
   22598 
   22599    can be used to load a pointer to the symbol `sym' into register
   22600 `a4'.  The value of `sym' will not be placed between the `ENTRY' and
   22601 `L32R' instructions; instead, the assembler puts the data in a literal
   22602 pool.
   22603 
   22604    Literal pools are placed by default in separate literal sections;
   22605 however, when using the `--text-section-literals' option (*note Command
   22606 Line Options: Xtensa Options.), the literal pools for PC-relative mode
   22607 `L32R' instructions are placed in the current section.(1) These text
   22608 section literal pools are created automatically before `ENTRY'
   22609 instructions and manually after `.literal_position' directives (*note
   22610 literal_position: Literal Position Directive.).  If there are no
   22611 preceding `ENTRY' instructions, explicit `.literal_position' directives
   22612 must be used to place the text section literal pools; otherwise, `as'
   22613 will report an error.
   22614 
   22615    When literals are placed in separate sections, the literal section
   22616 names are derived from the names of the sections where the literals are
   22617 defined.  The base literal section names are `.literal' for PC-relative
   22618 mode `L32R' instructions and `.lit4' for absolute mode `L32R'
   22619 instructions (*note absolute-literals: Absolute Literals Directive.).
   22620 These base names are used for literals defined in the default `.text'
   22621 section.  For literals defined in other sections or within the scope of
   22622 a `literal_prefix' directive (*note literal_prefix: Literal Prefix
   22623 Directive.), the following rules determine the literal section name:
   22624 
   22625   1. If the current section is a member of a section group, the literal
   22626      section name includes the group name as a suffix to the base
   22627      `.literal' or `.lit4' name, with a period to separate the base
   22628      name and group name.  The literal section is also made a member of
   22629      the group.
   22630 
   22631   2. If the current section name (or `literal_prefix' value) begins with
   22632      "`.gnu.linkonce.KIND.'", the literal section name is formed by
   22633      replacing "`.KIND'" with the base `.literal' or `.lit4' name.  For
   22634      example, for literals defined in a section named
   22635      `.gnu.linkonce.t.func', the literal section will be
   22636      `.gnu.linkonce.literal.func' or `.gnu.linkonce.lit4.func'.
   22637 
   22638   3. If the current section name (or `literal_prefix' value) ends with
   22639      `.text', the literal section name is formed by replacing that
   22640      suffix with the base `.literal' or `.lit4' name.  For example, for
   22641      literals defined in a section named `.iram0.text', the literal
   22642      section will be `.iram0.literal' or `.iram0.lit4'.
   22643 
   22644   4. If none of the preceding conditions apply, the literal section
   22645      name is formed by adding the base `.literal' or `.lit4' name as a
   22646      suffix to the current section name (or `literal_prefix' value).
   22647 
   22648    ---------- Footnotes ----------
   22649 
   22650    (1) Literals for the `.init' and `.fini' sections are always placed
   22651 in separate sections, even when `--text-section-literals' is enabled.
   22652 
   22653 
   22654 File: as.info,  Node: Literal Position Directive,  Next: Literal Prefix Directive,  Prev: Literal Directive,  Up: Xtensa Directives
   22655 
   22656 9.53.5.5 literal_position
   22657 .........................
   22658 
   22659 When using `--text-section-literals' to place literals inline in the
   22660 section being assembled, the `.literal_position' directive can be used
   22661 to mark a potential location for a literal pool.
   22662 
   22663          .literal_position
   22664 
   22665    The `.literal_position' directive is ignored when the
   22666 `--text-section-literals' option is not used or when `L32R'
   22667 instructions use the absolute addressing mode.
   22668 
   22669    The assembler will automatically place text section literal pools
   22670 before `ENTRY' instructions, so the `.literal_position' directive is
   22671 only needed to specify some other location for a literal pool.  You may
   22672 need to add an explicit jump instruction to skip over an inline literal
   22673 pool.
   22674 
   22675    For example, an interrupt vector does not begin with an `ENTRY'
   22676 instruction so the assembler will be unable to automatically find a good
   22677 place to put a literal pool.  Moreover, the code for the interrupt
   22678 vector must be at a specific starting address, so the literal pool
   22679 cannot come before the start of the code.  The literal pool for the
   22680 vector must be explicitly positioned in the middle of the vector (before
   22681 any uses of the literals, due to the negative offsets used by
   22682 PC-relative `L32R' instructions).  The `.literal_position' directive
   22683 can be used to do this.  In the following code, the literal for `M'
   22684 will automatically be aligned correctly and is placed after the
   22685 unconditional jump.
   22686 
   22687          .global M
   22688      code_start:
   22689          j continue
   22690          .literal_position
   22691          .align 4
   22692      continue:
   22693          movi    a4, M
   22694 
   22695 
   22696 File: as.info,  Node: Literal Prefix Directive,  Next: Absolute Literals Directive,  Prev: Literal Position Directive,  Up: Xtensa Directives
   22697 
   22698 9.53.5.6 literal_prefix
   22699 .......................
   22700 
   22701 The `literal_prefix' directive allows you to override the default
   22702 literal section names, which are derived from the names of the sections
   22703 where the literals are defined.
   22704 
   22705          .begin literal_prefix [NAME]
   22706          .end literal_prefix
   22707 
   22708    For literals defined within the delimited region, the literal section
   22709 names are derived from the NAME argument instead of the name of the
   22710 current section.  The rules used to derive the literal section names do
   22711 not change.  *Note literal: Literal Directive.  If the NAME argument is
   22712 omitted, the literal sections revert to the defaults.  This directive
   22713 has no effect when using the `--text-section-literals' option (*note
   22714 Command Line Options: Xtensa Options.).
   22715 
   22716 
   22717 File: as.info,  Node: Absolute Literals Directive,  Prev: Literal Prefix Directive,  Up: Xtensa Directives
   22718 
   22719 9.53.5.7 absolute-literals
   22720 ..........................
   22721 
   22722 The `absolute-literals' and `no-absolute-literals' directives control
   22723 the absolute vs. PC-relative mode for `L32R' instructions.  These are
   22724 relevant only for Xtensa configurations that include the absolute
   22725 addressing option for `L32R' instructions.
   22726 
   22727          .begin [no-]absolute-literals
   22728          .end [no-]absolute-literals
   22729 
   22730    These directives do not change the `L32R' mode--they only cause the
   22731 assembler to emit the appropriate kind of relocation for `L32R'
   22732 instructions and to place the literal values in the appropriate section.
   22733 To change the `L32R' mode, the program must write the `LITBASE' special
   22734 register.  It is the programmer's responsibility to keep track of the
   22735 mode and indicate to the assembler which mode is used in each region of
   22736 code.
   22737 
   22738    If the Xtensa configuration includes the absolute `L32R' addressing
   22739 option, the default is to assume absolute `L32R' addressing unless the
   22740 `--no-absolute-literals' command-line option is specified.  Otherwise,
   22741 the default is to assume PC-relative `L32R' addressing.  The
   22742 `absolute-literals' directive can then be used to override the default
   22743 determined by the command-line options.
   22744 
   22745 
   22746 File: as.info,  Node: Reporting Bugs,  Next: Acknowledgements,  Prev: Machine Dependencies,  Up: Top
   22747 
   22748 10 Reporting Bugs
   22749 *****************
   22750 
   22751 Your bug reports play an essential role in making `as' reliable.
   22752 
   22753    Reporting a bug may help you by bringing a solution to your problem,
   22754 or it may not.  But in any case the principal function of a bug report
   22755 is to help the entire community by making the next version of `as' work
   22756 better.  Bug reports are your contribution to the maintenance of `as'.
   22757 
   22758    In order for a bug report to serve its purpose, you must include the
   22759 information that enables us to fix the bug.
   22760 
   22761 * Menu:
   22762 
   22763 * Bug Criteria::                Have you found a bug?
   22764 * Bug Reporting::               How to report bugs
   22765 
   22766 
   22767 File: as.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Reporting Bugs
   22768 
   22769 10.1 Have You Found a Bug?
   22770 ==========================
   22771 
   22772 If you are not sure whether you have found a bug, here are some
   22773 guidelines:
   22774 
   22775    * If the assembler gets a fatal signal, for any input whatever, that
   22776      is a `as' bug.  Reliable assemblers never crash.
   22777 
   22778    * If `as' produces an error message for valid input, that is a bug.
   22779 
   22780    * If `as' does not produce an error message for invalid input, that
   22781      is a bug.  However, you should note that your idea of "invalid
   22782      input" might be our idea of "an extension" or "support for
   22783      traditional practice".
   22784 
   22785    * If you are an experienced user of assemblers, your suggestions for
   22786      improvement of `as' are welcome in any case.
   22787 
   22788 
   22789 File: as.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Reporting Bugs
   22790 
   22791 10.2 How to Report Bugs
   22792 =======================
   22793 
   22794 A number of companies and individuals offer support for GNU products.
   22795 If you obtained `as' from a support organization, we recommend you
   22796 contact that organization first.
   22797 
   22798    You can find contact information for many support companies and
   22799 individuals in the file `etc/SERVICE' in the GNU Emacs distribution.
   22800 
   22801    In any event, we also recommend that you send bug reports for `as'
   22802 to `http://www.sourceware.org/bugzilla/'.
   22803 
   22804    The fundamental principle of reporting bugs usefully is this:
   22805 *report all the facts*.  If you are not sure whether to state a fact or
   22806 leave it out, state it!
   22807 
   22808    Often people omit facts because they think they know what causes the
   22809 problem and assume that some details do not matter.  Thus, you might
   22810 assume that the name of a symbol you use in an example does not matter.
   22811 Well, probably it does not, but one cannot be sure.  Perhaps the bug
   22812 is a stray memory reference which happens to fetch from the location
   22813 where that name is stored in memory; perhaps, if the name were
   22814 different, the contents of that location would fool the assembler into
   22815 doing the right thing despite the bug.  Play it safe and give a
   22816 specific, complete example.  That is the easiest thing for you to do,
   22817 and the most helpful.
   22818 
   22819    Keep in mind that the purpose of a bug report is to enable us to fix
   22820 the bug if it is new to us.  Therefore, always write your bug reports
   22821 on the assumption that the bug has not been reported previously.
   22822 
   22823    Sometimes people give a few sketchy facts and ask, "Does this ring a
   22824 bell?"  This cannot help us fix a bug, so it is basically useless.  We
   22825 respond by asking for enough details to enable us to investigate.  You
   22826 might as well expedite matters by sending them to begin with.
   22827 
   22828    To enable us to fix the bug, you should include all these things:
   22829 
   22830    * The version of `as'.  `as' announces it if you start it with the
   22831      `--version' argument.
   22832 
   22833      Without this, we will not know whether there is any point in
   22834      looking for the bug in the current version of `as'.
   22835 
   22836    * Any patches you may have applied to the `as' source.
   22837 
   22838    * The type of machine you are using, and the operating system name
   22839      and version number.
   22840 
   22841    * What compiler (and its version) was used to compile `as'--e.g.
   22842      "`gcc-2.7'".
   22843 
   22844    * The command arguments you gave the assembler to assemble your
   22845      example and observe the bug.  To guarantee you will not omit
   22846      something important, list them all.  A copy of the Makefile (or
   22847      the output from make) is sufficient.
   22848 
   22849      If we were to try to guess the arguments, we would probably guess
   22850      wrong and then we might not encounter the bug.
   22851 
   22852    * A complete input file that will reproduce the bug.  If the bug is
   22853      observed when the assembler is invoked via a compiler, send the
   22854      assembler source, not the high level language source.  Most
   22855      compilers will produce the assembler source when run with the `-S'
   22856      option.  If you are using `gcc', use the options `-v
   22857      --save-temps'; this will save the assembler source in a file with
   22858      an extension of `.s', and also show you exactly how `as' is being
   22859      run.
   22860 
   22861    * A description of what behavior you observe that you believe is
   22862      incorrect.  For example, "It gets a fatal signal."
   22863 
   22864      Of course, if the bug is that `as' gets a fatal signal, then we
   22865      will certainly notice it.  But if the bug is incorrect output, we
   22866      might not notice unless it is glaringly wrong.  You might as well
   22867      not give us a chance to make a mistake.
   22868 
   22869      Even if the problem you experience is a fatal signal, you should
   22870      still say so explicitly.  Suppose something strange is going on,
   22871      such as, your copy of `as' is out of sync, or you have encountered
   22872      a bug in the C library on your system.  (This has happened!)  Your
   22873      copy might crash and ours would not.  If you told us to expect a
   22874      crash, then when ours fails to crash, we would know that the bug
   22875      was not happening for us.  If you had not told us to expect a
   22876      crash, then we would not be able to draw any conclusion from our
   22877      observations.
   22878 
   22879    * If you wish to suggest changes to the `as' source, send us context
   22880      diffs, as generated by `diff' with the `-u', `-c', or `-p' option.
   22881      Always send diffs from the old file to the new file.  If you even
   22882      discuss something in the `as' source, refer to it by context, not
   22883      by line number.
   22884 
   22885      The line numbers in our development sources will not match those
   22886      in your sources.  Your line numbers would convey no useful
   22887      information to us.
   22888 
   22889    Here are some things that are not necessary:
   22890 
   22891    * A description of the envelope of the bug.
   22892 
   22893      Often people who encounter a bug spend a lot of time investigating
   22894      which changes to the input file will make the bug go away and which
   22895      changes will not affect it.
   22896 
   22897      This is often time consuming and not very useful, because the way
   22898      we will find the bug is by running a single example under the
   22899      debugger with breakpoints, not by pure deduction from a series of
   22900      examples.  We recommend that you save your time for something else.
   22901 
   22902      Of course, if you can find a simpler example to report _instead_
   22903      of the original one, that is a convenience for us.  Errors in the
   22904      output will be easier to spot, running under the debugger will take
   22905      less time, and so on.
   22906 
   22907      However, simplification is not vital; if you do not want to do
   22908      this, report the bug anyway and send us the entire test case you
   22909      used.
   22910 
   22911    * A patch for the bug.
   22912 
   22913      A patch for the bug does help us if it is a good one.  But do not
   22914      omit the necessary information, such as the test case, on the
   22915      assumption that a patch is all we need.  We might see problems
   22916      with your patch and decide to fix the problem another way, or we
   22917      might not understand it at all.
   22918 
   22919      Sometimes with a program as complicated as `as' it is very hard to
   22920      construct an example that will make the program follow a certain
   22921      path through the code.  If you do not send us the example, we will
   22922      not be able to construct one, so we will not be able to verify
   22923      that the bug is fixed.
   22924 
   22925      And if we cannot understand what bug you are trying to fix, or why
   22926      your patch should be an improvement, we will not install it.  A
   22927      test case will help us to understand.
   22928 
   22929    * A guess about what the bug is or what it depends on.
   22930 
   22931      Such guesses are usually wrong.  Even we cannot guess right about
   22932      such things without first using the debugger to find the facts.
   22933 
   22934 
   22935 File: as.info,  Node: Acknowledgements,  Next: GNU Free Documentation License,  Prev: Reporting Bugs,  Up: Top
   22936 
   22937 11 Acknowledgements
   22938 *******************
   22939 
   22940 If you have contributed to GAS and your name isn't listed here, it is
   22941 not meant as a slight.  We just don't know about it.  Send mail to the
   22942 maintainer, and we'll correct the situation.  Currently the maintainer
   22943 is Nick Clifton (email address `nickc (a] redhat.com').
   22944 
   22945    Dean Elsner wrote the original GNU assembler for the VAX.(1)
   22946 
   22947    Jay Fenlason maintained GAS for a while, adding support for
   22948 GDB-specific debug information and the 68k series machines, most of the
   22949 preprocessing pass, and extensive changes in `messages.c',
   22950 `input-file.c', `write.c'.
   22951 
   22952    K. Richard Pixley maintained GAS for a while, adding various
   22953 enhancements and many bug fixes, including merging support for several
   22954 processors, breaking GAS up to handle multiple object file format back
   22955 ends (including heavy rewrite, testing, an integration of the coff and
   22956 b.out back ends), adding configuration including heavy testing and
   22957 verification of cross assemblers and file splits and renaming,
   22958 converted GAS to strictly ANSI C including full prototypes, added
   22959 support for m680[34]0 and cpu32, did considerable work on i960
   22960 including a COFF port (including considerable amounts of reverse
   22961 engineering), a SPARC opcode file rewrite, DECstation, rs6000, and
   22962 hp300hpux host ports, updated "know" assertions and made them work,
   22963 much other reorganization, cleanup, and lint.
   22964 
   22965    Ken Raeburn wrote the high-level BFD interface code to replace most
   22966 of the code in format-specific I/O modules.
   22967 
   22968    The original VMS support was contributed by David L. Kashtan.  Eric
   22969 Youngdale has done much work with it since.
   22970 
   22971    The Intel 80386 machine description was written by Eliot Dresselhaus.
   22972 
   22973    Minh Tran-Le at IntelliCorp contributed some AIX 386 support.
   22974 
   22975    The Motorola 88k machine description was contributed by Devon Bowen
   22976 of Buffalo University and Torbjorn Granlund of the Swedish Institute of
   22977 Computer Science.
   22978 
   22979    Keith Knowles at the Open Software Foundation wrote the original
   22980 MIPS back end (`tc-mips.c', `tc-mips.h'), and contributed Rose format
   22981 support (which hasn't been merged in yet).  Ralph Campbell worked with
   22982 the MIPS code to support a.out format.
   22983 
   22984    Support for the Zilog Z8k and Renesas H8/300 processors (tc-z8k,
   22985 tc-h8300), and IEEE 695 object file format (obj-ieee), was written by
   22986 Steve Chamberlain of Cygnus Support.  Steve also modified the COFF back
   22987 end to use BFD for some low-level operations, for use with the H8/300
   22988 and AMD 29k targets.
   22989 
   22990    John Gilmore built the AMD 29000 support, added `.include' support,
   22991 and simplified the configuration of which versions accept which
   22992 directives.  He updated the 68k machine description so that Motorola's
   22993 opcodes always produced fixed-size instructions (e.g., `jsr'), while
   22994 synthetic instructions remained shrinkable (`jbsr').  John fixed many
   22995 bugs, including true tested cross-compilation support, and one bug in
   22996 relaxation that took a week and required the proverbial one-bit fix.
   22997 
   22998    Ian Lance Taylor of Cygnus Support merged the Motorola and MIT
   22999 syntax for the 68k, completed support for some COFF targets (68k, i386
   23000 SVR3, and SCO Unix), added support for MIPS ECOFF and ELF targets,
   23001 wrote the initial RS/6000 and PowerPC assembler, and made a few other
   23002 minor patches.
   23003 
   23004    Steve Chamberlain made GAS able to generate listings.
   23005 
   23006    Hewlett-Packard contributed support for the HP9000/300.
   23007 
   23008    Jeff Law wrote GAS and BFD support for the native HPPA object format
   23009 (SOM) along with a fairly extensive HPPA testsuite (for both SOM and
   23010 ELF object formats).  This work was supported by both the Center for
   23011 Software Science at the University of Utah and Cygnus Support.
   23012 
   23013    Support for ELF format files has been worked on by Mark Eichin of
   23014 Cygnus Support (original, incomplete implementation for SPARC), Pete
   23015 Hoogenboom and Jeff Law at the University of Utah (HPPA mainly),
   23016 Michael Meissner of the Open Software Foundation (i386 mainly), and Ken
   23017 Raeburn of Cygnus Support (sparc, and some initial 64-bit support).
   23018 
   23019    Linas Vepstas added GAS support for the ESA/390 "IBM 370"
   23020 architecture.
   23021 
   23022    Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote
   23023 GAS and BFD support for openVMS/Alpha.
   23024 
   23025    Timothy Wall, Michael Hayes, and Greg Smart contributed to the
   23026 various tic* flavors.
   23027 
   23028    David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from
   23029 Tensilica, Inc. added support for Xtensa processors.
   23030 
   23031    Several engineers at Cygnus Support have also provided many small
   23032 bug fixes and configuration enhancements.
   23033 
   23034    Jon Beniston added support for the Lattice Mico32 architecture.
   23035 
   23036    Many others have contributed large or small bugfixes and
   23037 enhancements.  If you have contributed significant work and are not
   23038 mentioned on this list, and want to be, let us know.  Some of the
   23039 history has been lost; we are not intentionally leaving anyone out.
   23040 
   23041    ---------- Footnotes ----------
   23042 
   23043    (1) Any more details?
   23044 
   23045 
   23046 File: as.info,  Node: GNU Free Documentation License,  Next: AS Index,  Prev: Acknowledgements,  Up: Top
   23047 
   23048 Appendix A GNU Free Documentation License
   23049 *****************************************
   23050 
   23051                      Version 1.3, 3 November 2008
   23052 
   23053      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
   23054      `http://fsf.org/'
   23055 
   23056      Everyone is permitted to copy and distribute verbatim copies
   23057      of this license document, but changing it is not allowed.
   23058 
   23059   0. PREAMBLE
   23060 
   23061      The purpose of this License is to make a manual, textbook, or other
   23062      functional and useful document "free" in the sense of freedom: to
   23063      assure everyone the effective freedom to copy and redistribute it,
   23064      with or without modifying it, either commercially or
   23065      noncommercially.  Secondarily, this License preserves for the
   23066      author and publisher a way to get credit for their work, while not
   23067      being considered responsible for modifications made by others.
   23068 
   23069      This License is a kind of "copyleft", which means that derivative
   23070      works of the document must themselves be free in the same sense.
   23071      It complements the GNU General Public License, which is a copyleft
   23072      license designed for free software.
   23073 
   23074      We have designed this License in order to use it for manuals for
   23075      free software, because free software needs free documentation: a
   23076      free program should come with manuals providing the same freedoms
   23077      that the software does.  But this License is not limited to
   23078      software manuals; it can be used for any textual work, regardless
   23079      of subject matter or whether it is published as a printed book.
   23080      We recommend this License principally for works whose purpose is
   23081      instruction or reference.
   23082 
   23083   1. APPLICABILITY AND DEFINITIONS
   23084 
   23085      This License applies to any manual or other work, in any medium,
   23086      that contains a notice placed by the copyright holder saying it
   23087      can be distributed under the terms of this License.  Such a notice
   23088      grants a world-wide, royalty-free license, unlimited in duration,
   23089      to use that work under the conditions stated herein.  The
   23090      "Document", below, refers to any such manual or work.  Any member
   23091      of the public is a licensee, and is addressed as "you".  You
   23092      accept the license if you copy, modify or distribute the work in a
   23093      way requiring permission under copyright law.
   23094 
   23095      A "Modified Version" of the Document means any work containing the
   23096      Document or a portion of it, either copied verbatim, or with
   23097      modifications and/or translated into another language.
   23098 
   23099      A "Secondary Section" is a named appendix or a front-matter section
   23100      of the Document that deals exclusively with the relationship of the
   23101      publishers or authors of the Document to the Document's overall
   23102      subject (or to related matters) and contains nothing that could
   23103      fall directly within that overall subject.  (Thus, if the Document
   23104      is in part a textbook of mathematics, a Secondary Section may not
   23105      explain any mathematics.)  The relationship could be a matter of
   23106      historical connection with the subject or with related matters, or
   23107      of legal, commercial, philosophical, ethical or political position
   23108      regarding them.
   23109 
   23110      The "Invariant Sections" are certain Secondary Sections whose
   23111      titles are designated, as being those of Invariant Sections, in
   23112      the notice that says that the Document is released under this
   23113      License.  If a section does not fit the above definition of
   23114      Secondary then it is not allowed to be designated as Invariant.
   23115      The Document may contain zero Invariant Sections.  If the Document
   23116      does not identify any Invariant Sections then there are none.
   23117 
   23118      The "Cover Texts" are certain short passages of text that are
   23119      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
   23120      that says that the Document is released under this License.  A
   23121      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
   23122      be at most 25 words.
   23123 
   23124      A "Transparent" copy of the Document means a machine-readable copy,
   23125      represented in a format whose specification is available to the
   23126      general public, that is suitable for revising the document
   23127      straightforwardly with generic text editors or (for images
   23128      composed of pixels) generic paint programs or (for drawings) some
   23129      widely available drawing editor, and that is suitable for input to
   23130      text formatters or for automatic translation to a variety of
   23131      formats suitable for input to text formatters.  A copy made in an
   23132      otherwise Transparent file format whose markup, or absence of
   23133      markup, has been arranged to thwart or discourage subsequent
   23134      modification by readers is not Transparent.  An image format is
   23135      not Transparent if used for any substantial amount of text.  A
   23136      copy that is not "Transparent" is called "Opaque".
   23137 
   23138      Examples of suitable formats for Transparent copies include plain
   23139      ASCII without markup, Texinfo input format, LaTeX input format,
   23140      SGML or XML using a publicly available DTD, and
   23141      standard-conforming simple HTML, PostScript or PDF designed for
   23142      human modification.  Examples of transparent image formats include
   23143      PNG, XCF and JPG.  Opaque formats include proprietary formats that
   23144      can be read and edited only by proprietary word processors, SGML or
   23145      XML for which the DTD and/or processing tools are not generally
   23146      available, and the machine-generated HTML, PostScript or PDF
   23147      produced by some word processors for output purposes only.
   23148 
   23149      The "Title Page" means, for a printed book, the title page itself,
   23150      plus such following pages as are needed to hold, legibly, the
   23151      material this License requires to appear in the title page.  For
   23152      works in formats which do not have any title page as such, "Title
   23153      Page" means the text near the most prominent appearance of the
   23154      work's title, preceding the beginning of the body of the text.
   23155 
   23156      The "publisher" means any person or entity that distributes copies
   23157      of the Document to the public.
   23158 
   23159      A section "Entitled XYZ" means a named subunit of the Document
   23160      whose title either is precisely XYZ or contains XYZ in parentheses
   23161      following text that translates XYZ in another language.  (Here XYZ
   23162      stands for a specific section name mentioned below, such as
   23163      "Acknowledgements", "Dedications", "Endorsements", or "History".)
   23164      To "Preserve the Title" of such a section when you modify the
   23165      Document means that it remains a section "Entitled XYZ" according
   23166      to this definition.
   23167 
   23168      The Document may include Warranty Disclaimers next to the notice
   23169      which states that this License applies to the Document.  These
   23170      Warranty Disclaimers are considered to be included by reference in
   23171      this License, but only as regards disclaiming warranties: any other
   23172      implication that these Warranty Disclaimers may have is void and
   23173      has no effect on the meaning of this License.
   23174 
   23175   2. VERBATIM COPYING
   23176 
   23177      You may copy and distribute the Document in any medium, either
   23178      commercially or noncommercially, provided that this License, the
   23179      copyright notices, and the license notice saying this License
   23180      applies to the Document are reproduced in all copies, and that you
   23181      add no other conditions whatsoever to those of this License.  You
   23182      may not use technical measures to obstruct or control the reading
   23183      or further copying of the copies you make or distribute.  However,
   23184      you may accept compensation in exchange for copies.  If you
   23185      distribute a large enough number of copies you must also follow
   23186      the conditions in section 3.
   23187 
   23188      You may also lend copies, under the same conditions stated above,
   23189      and you may publicly display copies.
   23190 
   23191   3. COPYING IN QUANTITY
   23192 
   23193      If you publish printed copies (or copies in media that commonly
   23194      have printed covers) of the Document, numbering more than 100, and
   23195      the Document's license notice requires Cover Texts, you must
   23196      enclose the copies in covers that carry, clearly and legibly, all
   23197      these Cover Texts: Front-Cover Texts on the front cover, and
   23198      Back-Cover Texts on the back cover.  Both covers must also clearly
   23199      and legibly identify you as the publisher of these copies.  The
   23200      front cover must present the full title with all words of the
   23201      title equally prominent and visible.  You may add other material
   23202      on the covers in addition.  Copying with changes limited to the
   23203      covers, as long as they preserve the title of the Document and
   23204      satisfy these conditions, can be treated as verbatim copying in
   23205      other respects.
   23206 
   23207      If the required texts for either cover are too voluminous to fit
   23208      legibly, you should put the first ones listed (as many as fit
   23209      reasonably) on the actual cover, and continue the rest onto
   23210      adjacent pages.
   23211 
   23212      If you publish or distribute Opaque copies of the Document
   23213      numbering more than 100, you must either include a
   23214      machine-readable Transparent copy along with each Opaque copy, or
   23215      state in or with each Opaque copy a computer-network location from
   23216      which the general network-using public has access to download
   23217      using public-standard network protocols a complete Transparent
   23218      copy of the Document, free of added material.  If you use the
   23219      latter option, you must take reasonably prudent steps, when you
   23220      begin distribution of Opaque copies in quantity, to ensure that
   23221      this Transparent copy will remain thus accessible at the stated
   23222      location until at least one year after the last time you
   23223      distribute an Opaque copy (directly or through your agents or
   23224      retailers) of that edition to the public.
   23225 
   23226      It is requested, but not required, that you contact the authors of
   23227      the Document well before redistributing any large number of
   23228      copies, to give them a chance to provide you with an updated
   23229      version of the Document.
   23230 
   23231   4. MODIFICATIONS
   23232 
   23233      You may copy and distribute a Modified Version of the Document
   23234      under the conditions of sections 2 and 3 above, provided that you
   23235      release the Modified Version under precisely this License, with
   23236      the Modified Version filling the role of the Document, thus
   23237      licensing distribution and modification of the Modified Version to
   23238      whoever possesses a copy of it.  In addition, you must do these
   23239      things in the Modified Version:
   23240 
   23241        A. Use in the Title Page (and on the covers, if any) a title
   23242           distinct from that of the Document, and from those of
   23243           previous versions (which should, if there were any, be listed
   23244           in the History section of the Document).  You may use the
   23245           same title as a previous version if the original publisher of
   23246           that version gives permission.
   23247 
   23248        B. List on the Title Page, as authors, one or more persons or
   23249           entities responsible for authorship of the modifications in
   23250           the Modified Version, together with at least five of the
   23251           principal authors of the Document (all of its principal
   23252           authors, if it has fewer than five), unless they release you
   23253           from this requirement.
   23254 
   23255        C. State on the Title page the name of the publisher of the
   23256           Modified Version, as the publisher.
   23257 
   23258        D. Preserve all the copyright notices of the Document.
   23259 
   23260        E. Add an appropriate copyright notice for your modifications
   23261           adjacent to the other copyright notices.
   23262 
   23263        F. Include, immediately after the copyright notices, a license
   23264           notice giving the public permission to use the Modified
   23265           Version under the terms of this License, in the form shown in
   23266           the Addendum below.
   23267 
   23268        G. Preserve in that license notice the full lists of Invariant
   23269           Sections and required Cover Texts given in the Document's
   23270           license notice.
   23271 
   23272        H. Include an unaltered copy of this License.
   23273 
   23274        I. Preserve the section Entitled "History", Preserve its Title,
   23275           and add to it an item stating at least the title, year, new
   23276           authors, and publisher of the Modified Version as given on
   23277           the Title Page.  If there is no section Entitled "History" in
   23278           the Document, create one stating the title, year, authors,
   23279           and publisher of the Document as given on its Title Page,
   23280           then add an item describing the Modified Version as stated in
   23281           the previous sentence.
   23282 
   23283        J. Preserve the network location, if any, given in the Document
   23284           for public access to a Transparent copy of the Document, and
   23285           likewise the network locations given in the Document for
   23286           previous versions it was based on.  These may be placed in
   23287           the "History" section.  You may omit a network location for a
   23288           work that was published at least four years before the
   23289           Document itself, or if the original publisher of the version
   23290           it refers to gives permission.
   23291 
   23292        K. For any section Entitled "Acknowledgements" or "Dedications",
   23293           Preserve the Title of the section, and preserve in the
   23294           section all the substance and tone of each of the contributor
   23295           acknowledgements and/or dedications given therein.
   23296 
   23297        L. Preserve all the Invariant Sections of the Document,
   23298           unaltered in their text and in their titles.  Section numbers
   23299           or the equivalent are not considered part of the section
   23300           titles.
   23301 
   23302        M. Delete any section Entitled "Endorsements".  Such a section
   23303           may not be included in the Modified Version.
   23304 
   23305        N. Do not retitle any existing section to be Entitled
   23306           "Endorsements" or to conflict in title with any Invariant
   23307           Section.
   23308 
   23309        O. Preserve any Warranty Disclaimers.
   23310 
   23311      If the Modified Version includes new front-matter sections or
   23312      appendices that qualify as Secondary Sections and contain no
   23313      material copied from the Document, you may at your option
   23314      designate some or all of these sections as invariant.  To do this,
   23315      add their titles to the list of Invariant Sections in the Modified
   23316      Version's license notice.  These titles must be distinct from any
   23317      other section titles.
   23318 
   23319      You may add a section Entitled "Endorsements", provided it contains
   23320      nothing but endorsements of your Modified Version by various
   23321      parties--for example, statements of peer review or that the text
   23322      has been approved by an organization as the authoritative
   23323      definition of a standard.
   23324 
   23325      You may add a passage of up to five words as a Front-Cover Text,
   23326      and a passage of up to 25 words as a Back-Cover Text, to the end
   23327      of the list of Cover Texts in the Modified Version.  Only one
   23328      passage of Front-Cover Text and one of Back-Cover Text may be
   23329      added by (or through arrangements made by) any one entity.  If the
   23330      Document already includes a cover text for the same cover,
   23331      previously added by you or by arrangement made by the same entity
   23332      you are acting on behalf of, you may not add another; but you may
   23333      replace the old one, on explicit permission from the previous
   23334      publisher that added the old one.
   23335 
   23336      The author(s) and publisher(s) of the Document do not by this
   23337      License give permission to use their names for publicity for or to
   23338      assert or imply endorsement of any Modified Version.
   23339 
   23340   5. COMBINING DOCUMENTS
   23341 
   23342      You may combine the Document with other documents released under
   23343      this License, under the terms defined in section 4 above for
   23344      modified versions, provided that you include in the combination
   23345      all of the Invariant Sections of all of the original documents,
   23346      unmodified, and list them all as Invariant Sections of your
   23347      combined work in its license notice, and that you preserve all
   23348      their Warranty Disclaimers.
   23349 
   23350      The combined work need only contain one copy of this License, and
   23351      multiple identical Invariant Sections may be replaced with a single
   23352      copy.  If there are multiple Invariant Sections with the same name
   23353      but different contents, make the title of each such section unique
   23354      by adding at the end of it, in parentheses, the name of the
   23355      original author or publisher of that section if known, or else a
   23356      unique number.  Make the same adjustment to the section titles in
   23357      the list of Invariant Sections in the license notice of the
   23358      combined work.
   23359 
   23360      In the combination, you must combine any sections Entitled
   23361      "History" in the various original documents, forming one section
   23362      Entitled "History"; likewise combine any sections Entitled
   23363      "Acknowledgements", and any sections Entitled "Dedications".  You
   23364      must delete all sections Entitled "Endorsements."
   23365 
   23366   6. COLLECTIONS OF DOCUMENTS
   23367 
   23368      You may make a collection consisting of the Document and other
   23369      documents released under this License, and replace the individual
   23370      copies of this License in the various documents with a single copy
   23371      that is included in the collection, provided that you follow the
   23372      rules of this License for verbatim copying of each of the
   23373      documents in all other respects.
   23374 
   23375      You may extract a single document from such a collection, and
   23376      distribute it individually under this License, provided you insert
   23377      a copy of this License into the extracted document, and follow
   23378      this License in all other respects regarding verbatim copying of
   23379      that document.
   23380 
   23381   7. AGGREGATION WITH INDEPENDENT WORKS
   23382 
   23383      A compilation of the Document or its derivatives with other
   23384      separate and independent documents or works, in or on a volume of
   23385      a storage or distribution medium, is called an "aggregate" if the
   23386      copyright resulting from the compilation is not used to limit the
   23387      legal rights of the compilation's users beyond what the individual
   23388      works permit.  When the Document is included in an aggregate, this
   23389      License does not apply to the other works in the aggregate which
   23390      are not themselves derivative works of the Document.
   23391 
   23392      If the Cover Text requirement of section 3 is applicable to these
   23393      copies of the Document, then if the Document is less than one half
   23394      of the entire aggregate, the Document's Cover Texts may be placed
   23395      on covers that bracket the Document within the aggregate, or the
   23396      electronic equivalent of covers if the Document is in electronic
   23397      form.  Otherwise they must appear on printed covers that bracket
   23398      the whole aggregate.
   23399 
   23400   8. TRANSLATION
   23401 
   23402      Translation is considered a kind of modification, so you may
   23403      distribute translations of the Document under the terms of section
   23404      4.  Replacing Invariant Sections with translations requires special
   23405      permission from their copyright holders, but you may include
   23406      translations of some or all Invariant Sections in addition to the
   23407      original versions of these Invariant Sections.  You may include a
   23408      translation of this License, and all the license notices in the
   23409      Document, and any Warranty Disclaimers, provided that you also
   23410      include the original English version of this License and the
   23411      original versions of those notices and disclaimers.  In case of a
   23412      disagreement between the translation and the original version of
   23413      this License or a notice or disclaimer, the original version will
   23414      prevail.
   23415 
   23416      If a section in the Document is Entitled "Acknowledgements",
   23417      "Dedications", or "History", the requirement (section 4) to
   23418      Preserve its Title (section 1) will typically require changing the
   23419      actual title.
   23420 
   23421   9. TERMINATION
   23422 
   23423      You may not copy, modify, sublicense, or distribute the Document
   23424      except as expressly provided under this License.  Any attempt
   23425      otherwise to copy, modify, sublicense, or distribute it is void,
   23426      and will automatically terminate your rights under this License.
   23427 
   23428      However, if you cease all violation of this License, then your
   23429      license from a particular copyright holder is reinstated (a)
   23430      provisionally, unless and until the copyright holder explicitly
   23431      and finally terminates your license, and (b) permanently, if the
   23432      copyright holder fails to notify you of the violation by some
   23433      reasonable means prior to 60 days after the cessation.
   23434 
   23435      Moreover, your license from a particular copyright holder is
   23436      reinstated permanently if the copyright holder notifies you of the
   23437      violation by some reasonable means, this is the first time you have
   23438      received notice of violation of this License (for any work) from
   23439      that copyright holder, and you cure the violation prior to 30 days
   23440      after your receipt of the notice.
   23441 
   23442      Termination of your rights under this section does not terminate
   23443      the licenses of parties who have received copies or rights from
   23444      you under this License.  If your rights have been terminated and
   23445      not permanently reinstated, receipt of a copy of some or all of
   23446      the same material does not give you any rights to use it.
   23447 
   23448  10. FUTURE REVISIONS OF THIS LICENSE
   23449 
   23450      The Free Software Foundation may publish new, revised versions of
   23451      the GNU Free Documentation License from time to time.  Such new
   23452      versions will be similar in spirit to the present version, but may
   23453      differ in detail to address new problems or concerns.  See
   23454      `http://www.gnu.org/copyleft/'.
   23455 
   23456      Each version of the License is given a distinguishing version
   23457      number.  If the Document specifies that a particular numbered
   23458      version of this License "or any later version" applies to it, you
   23459      have the option of following the terms and conditions either of
   23460      that specified version or of any later version that has been
   23461      published (not as a draft) by the Free Software Foundation.  If
   23462      the Document does not specify a version number of this License,
   23463      you may choose any version ever published (not as a draft) by the
   23464      Free Software Foundation.  If the Document specifies that a proxy
   23465      can decide which future versions of this License can be used, that
   23466      proxy's public statement of acceptance of a version permanently
   23467      authorizes you to choose that version for the Document.
   23468 
   23469  11. RELICENSING
   23470 
   23471      "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
   23472      World Wide Web server that publishes copyrightable works and also
   23473      provides prominent facilities for anybody to edit those works.  A
   23474      public wiki that anybody can edit is an example of such a server.
   23475      A "Massive Multiauthor Collaboration" (or "MMC") contained in the
   23476      site means any set of copyrightable works thus published on the MMC
   23477      site.
   23478 
   23479      "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
   23480      license published by Creative Commons Corporation, a not-for-profit
   23481      corporation with a principal place of business in San Francisco,
   23482      California, as well as future copyleft versions of that license
   23483      published by that same organization.
   23484 
   23485      "Incorporate" means to publish or republish a Document, in whole or
   23486      in part, as part of another Document.
   23487 
   23488      An MMC is "eligible for relicensing" if it is licensed under this
   23489      License, and if all works that were first published under this
   23490      License somewhere other than this MMC, and subsequently
   23491      incorporated in whole or in part into the MMC, (1) had no cover
   23492      texts or invariant sections, and (2) were thus incorporated prior
   23493      to November 1, 2008.
   23494 
   23495      The operator of an MMC Site may republish an MMC contained in the
   23496      site under CC-BY-SA on the same site at any time before August 1,
   23497      2009, provided the MMC is eligible for relicensing.
   23498 
   23499 
   23500 ADDENDUM: How to use this License for your documents
   23501 ====================================================
   23502 
   23503 To use this License in a document you have written, include a copy of
   23504 the License in the document and put the following copyright and license
   23505 notices just after the title page:
   23506 
   23507        Copyright (C)  YEAR  YOUR NAME.
   23508        Permission is granted to copy, distribute and/or modify this document
   23509        under the terms of the GNU Free Documentation License, Version 1.3
   23510        or any later version published by the Free Software Foundation;
   23511        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
   23512        Texts.  A copy of the license is included in the section entitled ``GNU
   23513        Free Documentation License''.
   23514 
   23515    If you have Invariant Sections, Front-Cover Texts and Back-Cover
   23516 Texts, replace the "with...Texts." line with this:
   23517 
   23518          with the Invariant Sections being LIST THEIR TITLES, with
   23519          the Front-Cover Texts being LIST, and with the Back-Cover Texts
   23520          being LIST.
   23521 
   23522    If you have Invariant Sections without Cover Texts, or some other
   23523 combination of the three, merge those two alternatives to suit the
   23524 situation.
   23525 
   23526    If your document contains nontrivial examples of program code, we
   23527 recommend releasing these examples in parallel under your choice of
   23528 free software license, such as the GNU General Public License, to
   23529 permit their use in free software.
   23530 
   23531 
   23532 File: as.info,  Node: AS Index,  Prev: GNU Free Documentation License,  Up: Top
   23533 
   23534 AS Index
   23535 ********
   23536 
   23537 [index]
   23538 * Menu:
   23539 
   23540 * #:                                     Comments.            (line  33)
   23541 * #APP:                                  Preprocessing.       (line  27)
   23542 * #NO_APP:                               Preprocessing.       (line  27)
   23543 * $ in symbol names <1>:                 D10V-Chars.          (line  53)
   23544 * $ in symbol names <2>:                 SH-Chars.            (line  15)
   23545 * $ in symbol names <3>:                 SH64-Chars.          (line  15)
   23546 * $ in symbol names <4>:                 Meta-Chars.          (line  10)
   23547 * $ in symbol names:                     D30V-Chars.          (line  70)
   23548 * $a:                                    ARM Mapping Symbols. (line   9)
   23549 * $acos math builtin, TIC54X:            TIC54X-Builtins.     (line  10)
   23550 * $asin math builtin, TIC54X:            TIC54X-Builtins.     (line  13)
   23551 * $atan math builtin, TIC54X:            TIC54X-Builtins.     (line  16)
   23552 * $atan2 math builtin, TIC54X:           TIC54X-Builtins.     (line  19)
   23553 * $ceil math builtin, TIC54X:            TIC54X-Builtins.     (line  22)
   23554 * $cos math builtin, TIC54X:             TIC54X-Builtins.     (line  28)
   23555 * $cosh math builtin, TIC54X:            TIC54X-Builtins.     (line  25)
   23556 * $cvf math builtin, TIC54X:             TIC54X-Builtins.     (line  31)
   23557 * $cvi math builtin, TIC54X:             TIC54X-Builtins.     (line  34)
   23558 * $d <1>:                                AArch64 Mapping Symbols.
   23559                                                               (line  12)
   23560 * $d:                                    ARM Mapping Symbols. (line  15)
   23561 * $exp math builtin, TIC54X:             TIC54X-Builtins.     (line  37)
   23562 * $fabs math builtin, TIC54X:            TIC54X-Builtins.     (line  40)
   23563 * $firstch subsym builtin, TIC54X:       TIC54X-Macros.       (line  26)
   23564 * $floor math builtin, TIC54X:           TIC54X-Builtins.     (line  43)
   23565 * $fmod math builtin, TIC54X:            TIC54X-Builtins.     (line  47)
   23566 * $int math builtin, TIC54X:             TIC54X-Builtins.     (line  50)
   23567 * $iscons subsym builtin, TIC54X:        TIC54X-Macros.       (line  43)
   23568 * $isdefed subsym builtin, TIC54X:       TIC54X-Macros.       (line  34)
   23569 * $ismember subsym builtin, TIC54X:      TIC54X-Macros.       (line  38)
   23570 * $isname subsym builtin, TIC54X:        TIC54X-Macros.       (line  47)
   23571 * $isreg subsym builtin, TIC54X:         TIC54X-Macros.       (line  50)
   23572 * $lastch subsym builtin, TIC54X:        TIC54X-Macros.       (line  30)
   23573 * $ldexp math builtin, TIC54X:           TIC54X-Builtins.     (line  53)
   23574 * $log math builtin, TIC54X:             TIC54X-Builtins.     (line  59)
   23575 * $log10 math builtin, TIC54X:           TIC54X-Builtins.     (line  56)
   23576 * $max math builtin, TIC54X:             TIC54X-Builtins.     (line  62)
   23577 * $min math builtin, TIC54X:             TIC54X-Builtins.     (line  65)
   23578 * $pow math builtin, TIC54X:             TIC54X-Builtins.     (line  68)
   23579 * $round math builtin, TIC54X:           TIC54X-Builtins.     (line  71)
   23580 * $sgn math builtin, TIC54X:             TIC54X-Builtins.     (line  74)
   23581 * $sin math builtin, TIC54X:             TIC54X-Builtins.     (line  77)
   23582 * $sinh math builtin, TIC54X:            TIC54X-Builtins.     (line  80)
   23583 * $sqrt math builtin, TIC54X:            TIC54X-Builtins.     (line  83)
   23584 * $structacc subsym builtin, TIC54X:     TIC54X-Macros.       (line  57)
   23585 * $structsz subsym builtin, TIC54X:      TIC54X-Macros.       (line  54)
   23586 * $symcmp subsym builtin, TIC54X:        TIC54X-Macros.       (line  23)
   23587 * $symlen subsym builtin, TIC54X:        TIC54X-Macros.       (line  20)
   23588 * $t:                                    ARM Mapping Symbols. (line  12)
   23589 * $tan math builtin, TIC54X:             TIC54X-Builtins.     (line  86)
   23590 * $tanh math builtin, TIC54X:            TIC54X-Builtins.     (line  89)
   23591 * $trunc math builtin, TIC54X:           TIC54X-Builtins.     (line  92)
   23592 * $x:                                    AArch64 Mapping Symbols.
   23593                                                               (line   9)
   23594 * %gp:                                   RX-Modifiers.        (line   6)
   23595 * %gpreg:                                RX-Modifiers.        (line  22)
   23596 * %pidreg:                               RX-Modifiers.        (line  25)
   23597 * -+ option, VAX/VMS:                    VAX-Opts.            (line  71)
   23598 * --:                                    Command Line.        (line  10)
   23599 * --32 option, i386:                     i386-Options.        (line   8)
   23600 * --32 option, x86-64:                   i386-Options.        (line   8)
   23601 * --64 option, i386:                     i386-Options.        (line   8)
   23602 * --64 option, x86-64:                   i386-Options.        (line   8)
   23603 * --absolute-literals:                   Xtensa Options.      (line  21)
   23604 * --allow-reg-prefix:                    SH Options.          (line   9)
   23605 * --alternate:                           alternate.           (line   6)
   23606 * --base-size-default-16:                M68K-Opts.           (line  65)
   23607 * --base-size-default-32:                M68K-Opts.           (line  65)
   23608 * --big:                                 SH Options.          (line   9)
   23609 * --bitwise-or option, M680x0:           M68K-Opts.           (line  58)
   23610 * --disp-size-default-16:                M68K-Opts.           (line  74)
   23611 * --disp-size-default-32:                M68K-Opts.           (line  74)
   23612 * --divide option, i386:                 i386-Options.        (line  24)
   23613 * --dsp:                                 SH Options.          (line   9)
   23614 * --emulation=crisaout command line option, CRIS: CRIS-Opts.  (line   9)
   23615 * --emulation=criself command line option, CRIS: CRIS-Opts.   (line   9)
   23616 * --enforce-aligned-data:                Sparc-Aligned-Data.  (line  11)
   23617 * --fatal-warnings:                      W.                   (line  16)
   23618 * --fdpic:                               SH Options.          (line  31)
   23619 * --fix-v4bx command line option, ARM:   ARM Options.         (line 173)
   23620 * --fixed-special-register-names command line option, MMIX: MMIX-Opts.
   23621                                                               (line   8)
   23622 * --force-long-branches:                 M68HC11-Opts.        (line  82)
   23623 * --generate-example:                    M68HC11-Opts.        (line  99)
   23624 * --globalize-symbols command line option, MMIX: MMIX-Opts.   (line  12)
   23625 * --gnu-syntax command line option, MMIX: MMIX-Opts.          (line  16)
   23626 * --hash-size=NUMBER:                    Overview.            (line 421)
   23627 * --linker-allocated-gregs command line option, MMIX: MMIX-Opts.
   23628                                                               (line  67)
   23629 * --listing-cont-lines:                  listing.             (line  34)
   23630 * --listing-lhs-width:                   listing.             (line  16)
   23631 * --listing-lhs-width2:                  listing.             (line  21)
   23632 * --listing-rhs-width:                   listing.             (line  28)
   23633 * --little:                              SH Options.          (line   9)
   23634 * --longcalls:                           Xtensa Options.      (line  35)
   23635 * --march=ARCHITECTURE command line option, CRIS: CRIS-Opts.  (line  34)
   23636 * --MD:                                  MD.                  (line   6)
   23637 * --mul-bug-abort command line option, CRIS: CRIS-Opts.       (line  62)
   23638 * --no-absolute-literals:                Xtensa Options.      (line  21)
   23639 * --no-expand command line option, MMIX: MMIX-Opts.           (line  31)
   23640 * --no-longcalls:                        Xtensa Options.      (line  35)
   23641 * --no-merge-gregs command line option, MMIX: MMIX-Opts.      (line  36)
   23642 * --no-mul-bug-abort command line option, CRIS: CRIS-Opts.    (line  62)
   23643 * --no-predefined-syms command line option, MMIX: MMIX-Opts.  (line  22)
   23644 * --no-pushj-stubs command line option, MMIX: MMIX-Opts.      (line  54)
   23645 * --no-stubs command line option, MMIX:  MMIX-Opts.           (line  54)
   23646 * --no-target-align:                     Xtensa Options.      (line  28)
   23647 * --no-text-section-literals:            Xtensa Options.      (line   7)
   23648 * --no-trampolines:                      Xtensa Options.      (line  56)
   23649 * --no-transform:                        Xtensa Options.      (line  44)
   23650 * --no-underscore command line option, CRIS: CRIS-Opts.       (line  15)
   23651 * --no-warn:                             W.                   (line  11)
   23652 * --pcrel:                               M68K-Opts.           (line  86)
   23653 * --pic command line option, CRIS:       CRIS-Opts.           (line  27)
   23654 * --print-insn-syntax <1>:               M68HC11-Opts.        (line  88)
   23655 * --print-insn-syntax:                   XGATE-Opts.          (line  25)
   23656 * --print-opcodes <1>:                   M68HC11-Opts.        (line  92)
   23657 * --print-opcodes:                       XGATE-Opts.          (line  29)
   23658 * --register-prefix-optional option, M680x0: M68K-Opts.       (line  45)
   23659 * --relax:                               SH Options.          (line   9)
   23660 * --relax command line option, MMIX:     MMIX-Opts.           (line  19)
   23661 * --rename-section:                      Xtensa Options.      (line  52)
   23662 * --renesas:                             SH Options.          (line   9)
   23663 * --short-branches:                      M68HC11-Opts.        (line  67)
   23664 * --small:                               SH Options.          (line   9)
   23665 * --statistics:                          statistics.          (line   6)
   23666 * --strict-direct-mode:                  M68HC11-Opts.        (line  57)
   23667 * --target-align:                        Xtensa Options.      (line  28)
   23668 * --text-section-literals:               Xtensa Options.      (line   7)
   23669 * --traditional-format:                  traditional-format.  (line   6)
   23670 * --trampolines:                         Xtensa Options.      (line  56)
   23671 * --transform:                           Xtensa Options.      (line  44)
   23672 * --underscore command line option, CRIS: CRIS-Opts.          (line  15)
   23673 * --warn:                                W.                   (line  19)
   23674 * --x32 option, i386:                    i386-Options.        (line   8)
   23675 * --x32 option, x86-64:                  i386-Options.        (line   8)
   23676 * --xgate-ramoffset:                     M68HC11-Opts.        (line  36)
   23677 * -1 option, VAX/VMS:                    VAX-Opts.            (line  77)
   23678 * -32addr command line option, Alpha:    Alpha Options.       (line  57)
   23679 * -a:                                    a.                   (line   6)
   23680 * -A options, i960:                      Options-i960.        (line   6)
   23681 * -ac:                                   a.                   (line   6)
   23682 * -ad:                                   a.                   (line   6)
   23683 * -ag:                                   a.                   (line   6)
   23684 * -ah:                                   a.                   (line   6)
   23685 * -al:                                   a.                   (line   6)
   23686 * -Aleon:                                Sparc-Opts.          (line  25)
   23687 * -an:                                   a.                   (line   6)
   23688 * -as:                                   a.                   (line   6)
   23689 * -Asparc:                               Sparc-Opts.          (line  25)
   23690 * -Asparcfmaf:                           Sparc-Opts.          (line  25)
   23691 * -Asparcima:                            Sparc-Opts.          (line  25)
   23692 * -Asparclet:                            Sparc-Opts.          (line  25)
   23693 * -Asparclite:                           Sparc-Opts.          (line  25)
   23694 * -Asparcvis:                            Sparc-Opts.          (line  25)
   23695 * -Asparcvis2:                           Sparc-Opts.          (line  25)
   23696 * -Asparcvis3:                           Sparc-Opts.          (line  25)
   23697 * -Asparcvis3r:                          Sparc-Opts.          (line  25)
   23698 * -Av6:                                  Sparc-Opts.          (line  25)
   23699 * -Av7:                                  Sparc-Opts.          (line  25)
   23700 * -Av8:                                  Sparc-Opts.          (line  25)
   23701 * -Av9:                                  Sparc-Opts.          (line  25)
   23702 * -Av9a:                                 Sparc-Opts.          (line  25)
   23703 * -Av9b:                                 Sparc-Opts.          (line  25)
   23704 * -Av9c:                                 Sparc-Opts.          (line  25)
   23705 * -Av9d:                                 Sparc-Opts.          (line  25)
   23706 * -Av9e:                                 Sparc-Opts.          (line  25)
   23707 * -Av9m:                                 Sparc-Opts.          (line  25)
   23708 * -Av9v:                                 Sparc-Opts.          (line  25)
   23709 * -b option, i960:                       Options-i960.        (line  22)
   23710 * -big option, M32R:                     M32R-Opts.           (line  35)
   23711 * -D:                                    D.                   (line   6)
   23712 * -D, ignored on VAX:                    VAX-Opts.            (line  11)
   23713 * -d, VAX option:                        VAX-Opts.            (line  16)
   23714 * -eabi= command line option, ARM:       ARM Options.         (line 156)
   23715 * -EB command line option, AArch64:      AArch64 Options.     (line   6)
   23716 * -EB command line option, ARC:          ARC Options.         (line  31)
   23717 * -EB command line option, ARM:          ARM Options.         (line 161)
   23718 * -EB option (MIPS):                     MIPS Options.        (line  13)
   23719 * -EB option, M32R:                      M32R-Opts.           (line  39)
   23720 * -EB option, TILE-Gx:                   TILE-Gx Options.     (line  11)
   23721 * -EL command line option, AArch64:      AArch64 Options.     (line  10)
   23722 * -EL command line option, ARC:          ARC Options.         (line  35)
   23723 * -EL command line option, ARM:          ARM Options.         (line 165)
   23724 * -EL option (MIPS):                     MIPS Options.        (line  13)
   23725 * -EL option, M32R:                      M32R-Opts.           (line  32)
   23726 * -EL option, TILE-Gx:                   TILE-Gx Options.     (line  11)
   23727 * -f:                                    f.                   (line   6)
   23728 * -F command line option, Alpha:         Alpha Options.       (line  57)
   23729 * -G command line option, Alpha:         Alpha Options.       (line  53)
   23730 * -g command line option, Alpha:         Alpha Options.       (line  47)
   23731 * -G option (MIPS):                      MIPS Options.        (line   8)
   23732 * -h option, VAX/VMS:                    VAX-Opts.            (line  45)
   23733 * -H option, VAX/VMS:                    VAX-Opts.            (line  81)
   23734 * -I PATH:                               I.                   (line   6)
   23735 * -ignore-parallel-conflicts option, M32RX: M32R-Opts.        (line  87)
   23736 * -Ip option, M32RX:                     M32R-Opts.           (line  97)
   23737 * -J, ignored on VAX:                    VAX-Opts.            (line  27)
   23738 * -K:                                    K.                   (line   6)
   23739 * -k command line option, ARM:           ARM Options.         (line 169)
   23740 * -KPIC option, M32R:                    M32R-Opts.           (line  42)
   23741 * -KPIC option, MIPS:                    MIPS Options.        (line  21)
   23742 * -L:                                    L.                   (line   6)
   23743 * -l option, M680x0:                     M68K-Opts.           (line  33)
   23744 * -little option, M32R:                  M32R-Opts.           (line  27)
   23745 * -M:                                    M.                   (line   6)
   23746 * -m11/03:                               PDP-11-Options.      (line 140)
   23747 * -m11/04:                               PDP-11-Options.      (line 143)
   23748 * -m11/05:                               PDP-11-Options.      (line 146)
   23749 * -m11/10:                               PDP-11-Options.      (line 146)
   23750 * -m11/15:                               PDP-11-Options.      (line 149)
   23751 * -m11/20:                               PDP-11-Options.      (line 149)
   23752 * -m11/21:                               PDP-11-Options.      (line 152)
   23753 * -m11/23:                               PDP-11-Options.      (line 155)
   23754 * -m11/24:                               PDP-11-Options.      (line 155)
   23755 * -m11/34:                               PDP-11-Options.      (line 158)
   23756 * -m11/34a:                              PDP-11-Options.      (line 161)
   23757 * -m11/35:                               PDP-11-Options.      (line 164)
   23758 * -m11/40:                               PDP-11-Options.      (line 164)
   23759 * -m11/44:                               PDP-11-Options.      (line 167)
   23760 * -m11/45:                               PDP-11-Options.      (line 170)
   23761 * -m11/50:                               PDP-11-Options.      (line 170)
   23762 * -m11/53:                               PDP-11-Options.      (line 173)
   23763 * -m11/55:                               PDP-11-Options.      (line 170)
   23764 * -m11/60:                               PDP-11-Options.      (line 176)
   23765 * -m11/70:                               PDP-11-Options.      (line 170)
   23766 * -m11/73:                               PDP-11-Options.      (line 173)
   23767 * -m11/83:                               PDP-11-Options.      (line 173)
   23768 * -m11/84:                               PDP-11-Options.      (line 173)
   23769 * -m11/93:                               PDP-11-Options.      (line 173)
   23770 * -m11/94:                               PDP-11-Options.      (line 173)
   23771 * -m16c option, M16C:                    M32C-Opts.           (line  12)
   23772 * -m31 option, s390:                     s390 Options.        (line   8)
   23773 * -m32 option, TILE-Gx:                  TILE-Gx Options.     (line   8)
   23774 * -m32bit-doubles:                       RX-Opts.             (line   9)
   23775 * -m32c option, M32C:                    M32C-Opts.           (line   9)
   23776 * -m32r option, M32R:                    M32R-Opts.           (line  21)
   23777 * -m32rx option, M32R2:                  M32R-Opts.           (line  17)
   23778 * -m32rx option, M32RX:                  M32R-Opts.           (line   9)
   23779 * -m4byte-align command line option, V850: V850 Options.      (line  90)
   23780 * -m64 option, s390:                     s390 Options.        (line   8)
   23781 * -m64 option, TILE-Gx:                  TILE-Gx Options.     (line   8)
   23782 * -m64bit-doubles:                       RX-Opts.             (line  15)
   23783 * -m68000 and related options:           M68K-Opts.           (line  98)
   23784 * -m68hc11:                              M68HC11-Opts.        (line   9)
   23785 * -m68hc12:                              M68HC11-Opts.        (line  14)
   23786 * -m68hcs12:                             M68HC11-Opts.        (line  21)
   23787 * -m8byte-align command line option, V850: V850 Options.      (line  86)
   23788 * -m[no-]68851 command line option, M680x0: M68K-Opts.        (line  21)
   23789 * -m[no-]68881 command line option, M680x0: M68K-Opts.        (line  21)
   23790 * -m[no-]div command line option, M680x0: M68K-Opts.          (line  21)
   23791 * -m[no-]emac command line option, M680x0: M68K-Opts.         (line  21)
   23792 * -m[no-]float command line option, M680x0: M68K-Opts.        (line  21)
   23793 * -m[no-]mac command line option, M680x0: M68K-Opts.          (line  21)
   23794 * -m[no-]usp command line option, M680x0: M68K-Opts.          (line  21)
   23795 * -mabi= command line option, AArch64:   AArch64 Options.     (line  14)
   23796 * -madd-bnd-prefix option, i386:         i386-Options.        (line 126)
   23797 * -madd-bnd-prefix option, x86-64:       i386-Options.        (line 126)
   23798 * -mall:                                 PDP-11-Options.      (line  26)
   23799 * -mall-enabled command line option, LM32: LM32 Options.      (line  30)
   23800 * -mall-extensions:                      PDP-11-Options.      (line  26)
   23801 * -mall-opcodes command line option, AVR: AVR Options.        (line 109)
   23802 * -mapcs-26 command line option, ARM:    ARM Options.         (line 128)
   23803 * -mapcs-32 command line option, ARM:    ARM Options.         (line 128)
   23804 * -mapcs-float command line option, ARM: ARM Options.         (line 142)
   23805 * -mapcs-reentrant command line option, ARM: ARM Options.     (line 147)
   23806 * -marc[5|6|7|8] command line option, ARC: ARC Options.       (line   6)
   23807 * -march= command line option, AArch64:  AArch64 Options.     (line  37)
   23808 * -march= command line option, ARM:      ARM Options.         (line  65)
   23809 * -march= command line option, M680x0:   M68K-Opts.           (line   8)
   23810 * -march= command line option, TIC6X:    TIC6X Options.       (line   6)
   23811 * -march= option, i386:                  i386-Options.        (line  31)
   23812 * -march= option, s390:                  s390 Options.        (line  25)
   23813 * -march= option, x86-64:                i386-Options.        (line  31)
   23814 * -matpcs command line option, ARM:      ARM Options.         (line 134)
   23815 * -mavxscalar= option, i386:             i386-Options.        (line  84)
   23816 * -mavxscalar= option, x86-64:           i386-Options.        (line  84)
   23817 * -mbarrel-shift-enabled command line option, LM32: LM32 Options.
   23818                                                               (line  12)
   23819 * -mbig-endian:                          RX-Opts.             (line  20)
   23820 * -mbig-obj option, x86-64:              i386-Options.        (line 131)
   23821 * -mbreak-enabled command line option, LM32: LM32 Options.    (line  27)
   23822 * -mccs command line option, ARM:        ARM Options.         (line 182)
   23823 * -mcis:                                 PDP-11-Options.      (line  32)
   23824 * -mconstant-gp command line option, IA-64: IA-64 Options.    (line   6)
   23825 * -mCPU command line option, Alpha:      Alpha Options.       (line   6)
   23826 * -mcpu option, cpu:                     TIC54X-Opts.         (line  15)
   23827 * -mcpu=:                                RX-Opts.             (line  75)
   23828 * -mcpu= command line option, AArch64:   AArch64 Options.     (line  19)
   23829 * -mcpu= command line option, ARM:       ARM Options.         (line   6)
   23830 * -mcpu= command line option, Blackfin:  Blackfin Options.    (line   6)
   23831 * -mcpu= command line option, M680x0:    M68K-Opts.           (line  14)
   23832 * -mcsm:                                 PDP-11-Options.      (line  43)
   23833 * -mdcache-enabled command line option, LM32: LM32 Options.   (line  24)
   23834 * -mdebug command line option, Alpha:    Alpha Options.       (line  25)
   23835 * -mdivide-enabled command line option, LM32: LM32 Options.   (line   9)
   23836 * -mdsbt command line option, TIC6X:     TIC6X Options.       (line  13)
   23837 * -me option, stderr redirect:           TIC54X-Opts.         (line  20)
   23838 * -meis:                                 PDP-11-Options.      (line  46)
   23839 * -mepiphany command line option, Epiphany: Epiphany Options. (line   9)
   23840 * -mepiphany16 command line option, Epiphany: Epiphany Options.
   23841                                                               (line  13)
   23842 * -merrors-to-file option, stderr redirect: TIC54X-Opts.      (line  20)
   23843 * -mesa option, s390:                    s390 Options.        (line  17)
   23844 * -mevexlig= option, i386:               i386-Options.        (line  92)
   23845 * -mevexlig= option, x86-64:             i386-Options.        (line  92)
   23846 * -mevexrcig= option, i386:              i386-Options.        (line 144)
   23847 * -mevexrcig= option, x86-64:            i386-Options.        (line 144)
   23848 * -mevexwig= option, i386:               i386-Options.        (line 102)
   23849 * -mevexwig= option, x86-64:             i386-Options.        (line 102)
   23850 * -mf option, far-mode:                  TIC54X-Opts.         (line   8)
   23851 * -mf11:                                 PDP-11-Options.      (line 122)
   23852 * -mfar-mode option, far-mode:           TIC54X-Opts.         (line   8)
   23853 * -mfdpic command line option, Blackfin: Blackfin Options.    (line  19)
   23854 * -mfis:                                 PDP-11-Options.      (line  51)
   23855 * -mfloat-abi= command line option, ARM: ARM Options.         (line 151)
   23856 * -mfp-11:                               PDP-11-Options.      (line  56)
   23857 * -mfpp:                                 PDP-11-Options.      (line  56)
   23858 * -mfpu:                                 PDP-11-Options.      (line  56)
   23859 * -mfpu= command line option, ARM:       ARM Options.         (line  81)
   23860 * -mgcc-abi:                             RX-Opts.             (line  63)
   23861 * -mgcc-abi command line option, V850:   V850 Options.        (line  79)
   23862 * -micache-enabled command line option, LM32: LM32 Options.   (line  21)
   23863 * -mimplicit-it command line option, ARM: ARM Options.        (line 112)
   23864 * -mint-register:                        RX-Opts.             (line  57)
   23865 * -mip2022 option, IP2K:                 IP2K-Opts.           (line  14)
   23866 * -mip2022ext option, IP2022:            IP2K-Opts.           (line   9)
   23867 * -mj11:                                 PDP-11-Options.      (line 126)
   23868 * -mka11:                                PDP-11-Options.      (line  92)
   23869 * -mkb11:                                PDP-11-Options.      (line  95)
   23870 * -mkd11a:                               PDP-11-Options.      (line  98)
   23871 * -mkd11b:                               PDP-11-Options.      (line 101)
   23872 * -mkd11d:                               PDP-11-Options.      (line 104)
   23873 * -mkd11e:                               PDP-11-Options.      (line 107)
   23874 * -mkd11f:                               PDP-11-Options.      (line 110)
   23875 * -mkd11h:                               PDP-11-Options.      (line 110)
   23876 * -mkd11k:                               PDP-11-Options.      (line 114)
   23877 * -mkd11q:                               PDP-11-Options.      (line 110)
   23878 * -mkd11z:                               PDP-11-Options.      (line 118)
   23879 * -mkev11:                               PDP-11-Options.      (line  51)
   23880 * -mlimited-eis:                         PDP-11-Options.      (line  64)
   23881 * -mlittle-endian:                       RX-Opts.             (line  26)
   23882 * -mlong <1>:                            XGATE-Opts.          (line  13)
   23883 * -mlong:                                M68HC11-Opts.        (line  45)
   23884 * -mlong-double <1>:                     XGATE-Opts.          (line  21)
   23885 * -mlong-double:                         M68HC11-Opts.        (line  53)
   23886 * -mm9s12x:                              M68HC11-Opts.        (line  27)
   23887 * -mm9s12xg:                             M68HC11-Opts.        (line  32)
   23888 * -mmcu= command line option, AVR:       AVR Options.         (line   6)
   23889 * -mmfpt:                                PDP-11-Options.      (line  70)
   23890 * -mmicrocode:                           PDP-11-Options.      (line  83)
   23891 * -mmnemonic= option, i386:              i386-Options.        (line 109)
   23892 * -mmnemonic= option, x86-64:            i386-Options.        (line 109)
   23893 * -mmultiply-enabled command line option, LM32: LM32 Options. (line   6)
   23894 * -mmutiproc:                            PDP-11-Options.      (line  73)
   23895 * -mmxps:                                PDP-11-Options.      (line  77)
   23896 * -mnaked-reg option, i386:              i386-Options.        (line 121)
   23897 * -mnaked-reg option, x86-64:            i386-Options.        (line 121)
   23898 * -mnan= command line option, MIPS:      MIPS Options.        (line 339)
   23899 * -mno-cis:                              PDP-11-Options.      (line  32)
   23900 * -mno-csm:                              PDP-11-Options.      (line  43)
   23901 * -mno-dsbt command line option, TIC6X:  TIC6X Options.       (line  13)
   23902 * -mno-eis:                              PDP-11-Options.      (line  46)
   23903 * -mno-extensions:                       PDP-11-Options.      (line  29)
   23904 * -mno-fdpic command line option, Blackfin: Blackfin Options. (line  22)
   23905 * -mno-fis:                              PDP-11-Options.      (line  51)
   23906 * -mno-fp-11:                            PDP-11-Options.      (line  56)
   23907 * -mno-fpp:                              PDP-11-Options.      (line  56)
   23908 * -mno-fpu:                              PDP-11-Options.      (line  56)
   23909 * -mno-kev11:                            PDP-11-Options.      (line  51)
   23910 * -mno-limited-eis:                      PDP-11-Options.      (line  64)
   23911 * -mno-mfpt:                             PDP-11-Options.      (line  70)
   23912 * -mno-microcode:                        PDP-11-Options.      (line  83)
   23913 * -mno-mutiproc:                         PDP-11-Options.      (line  73)
   23914 * -mno-mxps:                             PDP-11-Options.      (line  77)
   23915 * -mno-pic:                              PDP-11-Options.      (line  11)
   23916 * -mno-pic command line option, TIC6X:   TIC6X Options.       (line  36)
   23917 * -mno-regnames option, s390:            s390 Options.        (line  35)
   23918 * -mno-skip-bug command line option, AVR: AVR Options.        (line 112)
   23919 * -mno-spl:                              PDP-11-Options.      (line  80)
   23920 * -mno-sym32:                            MIPS Options.        (line 280)
   23921 * -mno-verbose-error command line option, AArch64: AArch64 Options.
   23922                                                               (line  56)
   23923 * -mno-wrap command line option, AVR:    AVR Options.         (line 115)
   23924 * -mnopic command line option, Blackfin: Blackfin Options.    (line  22)
   23925 * -momit-lock-prefix= option, i386:      i386-Options.        (line 135)
   23926 * -momit-lock-prefix= option, x86-64:    i386-Options.        (line 135)
   23927 * -mpic:                                 PDP-11-Options.      (line  11)
   23928 * -mpic command line option, TIC6X:      TIC6X Options.       (line  36)
   23929 * -mpid:                                 RX-Opts.             (line  50)
   23930 * -mpid= command line option, TIC6X:     TIC6X Options.       (line  23)
   23931 * -mregnames option, s390:               s390 Options.        (line  32)
   23932 * -mrelax command line option, V850:     V850 Options.        (line  72)
   23933 * -mrh850-abi command line option, V850: V850 Options.        (line  82)
   23934 * -mrmw command line option, AVR:        AVR Options.         (line 118)
   23935 * -mrx-abi:                              RX-Opts.             (line  69)
   23936 * -mshort <1>:                           XGATE-Opts.          (line   8)
   23937 * -mshort:                               M68HC11-Opts.        (line  40)
   23938 * -mshort-double <1>:                    M68HC11-Opts.        (line  49)
   23939 * -mshort-double:                        XGATE-Opts.          (line  17)
   23940 * -msign-extend-enabled command line option, LM32: LM32 Options.
   23941                                                               (line  15)
   23942 * -msmall-data-limit:                    RX-Opts.             (line  42)
   23943 * -mspl:                                 PDP-11-Options.      (line  80)
   23944 * -msse-check= option, i386:             i386-Options.        (line  74)
   23945 * -msse-check= option, x86-64:           i386-Options.        (line  74)
   23946 * -msse2avx option, i386:                i386-Options.        (line  70)
   23947 * -msse2avx option, x86-64:              i386-Options.        (line  70)
   23948 * -msym32:                               MIPS Options.        (line 280)
   23949 * -msyntax= option, i386:                i386-Options.        (line 115)
   23950 * -msyntax= option, x86-64:              i386-Options.        (line 115)
   23951 * -mt11:                                 PDP-11-Options.      (line 130)
   23952 * -mthumb command line option, ARM:      ARM Options.         (line 103)
   23953 * -mthumb-interwork command line option, ARM: ARM Options.    (line 108)
   23954 * -mtune= option, i386:                  i386-Options.        (line  62)
   23955 * -mtune= option, x86-64:                i386-Options.        (line  62)
   23956 * -muse-conventional-section-names:      RX-Opts.             (line  33)
   23957 * -muse-renesas-section-names:           RX-Opts.             (line  37)
   23958 * -muser-enabled command line option, LM32: LM32 Options.     (line  18)
   23959 * -mv850 command line option, V850:      V850 Options.        (line  23)
   23960 * -mv850any command line option, V850:   V850 Options.        (line  41)
   23961 * -mv850e command line option, V850:     V850 Options.        (line  29)
   23962 * -mv850e1 command line option, V850:    V850 Options.        (line  35)
   23963 * -mv850e2 command line option, V850:    V850 Options.        (line  51)
   23964 * -mv850e2v3 command line option, V850:  V850 Options.        (line  57)
   23965 * -mv850e2v4 command line option, V850:  V850 Options.        (line  63)
   23966 * -mv850e3v5 command line option, V850:  V850 Options.        (line  66)
   23967 * -mverbose-error command line option, AArch64: AArch64 Options.
   23968                                                               (line  52)
   23969 * -mvxworks-pic option, MIPS:            MIPS Options.        (line  26)
   23970 * -mwarn-areg-zero option, s390:         s390 Options.        (line  38)
   23971 * -mwarn-deprecated command line option, ARM: ARM Options.    (line 177)
   23972 * -mzarch option, s390:                  s390 Options.        (line  17)
   23973 * -N command line option, CRIS:          CRIS-Opts.           (line  58)
   23974 * -nIp option, M32RX:                    M32R-Opts.           (line 101)
   23975 * -no-bitinst, M32R2:                    M32R-Opts.           (line  54)
   23976 * -no-ignore-parallel-conflicts option, M32RX: M32R-Opts.     (line  93)
   23977 * -no-mdebug command line option, Alpha: Alpha Options.       (line  25)
   23978 * -no-parallel option, M32RX:            M32R-Opts.           (line  51)
   23979 * -no-relax option, i960:                Options-i960.        (line  66)
   23980 * -no-warn-explicit-parallel-conflicts option, M32RX: M32R-Opts.
   23981                                                               (line  79)
   23982 * -no-warn-unmatched-high option, M32R:  M32R-Opts.           (line 111)
   23983 * -nocpp ignored (MIPS):                 MIPS Options.        (line 283)
   23984 * -noreplace command line option, Alpha: Alpha Options.       (line  40)
   23985 * -o:                                    o.                   (line   6)
   23986 * -O option, M32RX:                      M32R-Opts.           (line  59)
   23987 * -parallel option, M32RX:               M32R-Opts.           (line  46)
   23988 * -R:                                    R.                   (line   6)
   23989 * -r800 command line option, Z80:        Z80 Options.         (line  41)
   23990 * -relax command line option, Alpha:     Alpha Options.       (line  32)
   23991 * -replace command line option, Alpha:   Alpha Options.       (line  40)
   23992 * -S, ignored on VAX:                    VAX-Opts.            (line  11)
   23993 * -t, ignored on VAX:                    VAX-Opts.            (line  36)
   23994 * -T, ignored on VAX:                    VAX-Opts.            (line  11)
   23995 * -v:                                    v.                   (line   6)
   23996 * -V, redundant on VAX:                  VAX-Opts.            (line  22)
   23997 * -version:                              v.                   (line   6)
   23998 * -W:                                    W.                   (line  11)
   23999 * -warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. (line  65)
   24000 * -warn-unmatched-high option, M32R:     M32R-Opts.           (line 105)
   24001 * -Wnp option, M32RX:                    M32R-Opts.           (line  83)
   24002 * -Wnuh option, M32RX:                   M32R-Opts.           (line 117)
   24003 * -Wp option, M32RX:                     M32R-Opts.           (line  75)
   24004 * -wsigned_overflow command line option, V850: V850 Options.  (line   9)
   24005 * -Wuh option, M32RX:                    M32R-Opts.           (line 114)
   24006 * -wunsigned_overflow command line option, V850: V850 Options.
   24007                                                               (line  16)
   24008 * -x command line option, MMIX:          MMIX-Opts.           (line  44)
   24009 * -z80 command line option, Z80:         Z80 Options.         (line   8)
   24010 * -z8001 command line option, Z8000:     Z8000 Options.       (line   6)
   24011 * -z8002 command line option, Z8000:     Z8000 Options.       (line   9)
   24012 * . (symbol):                            Dot.                 (line   6)
   24013 * .2byte directive, ARM:                 ARM Directives.      (line   6)
   24014 * .4byte directive, ARM:                 ARM Directives.      (line   6)
   24015 * .8byte directive, ARM:                 ARM Directives.      (line   6)
   24016 * .align directive, ARM:                 ARM Directives.      (line  11)
   24017 * .align directive, TILE-Gx:             TILE-Gx Directives.  (line   6)
   24018 * .align directive, TILEPro:             TILEPro Directives.  (line   6)
   24019 * .allow_suspicious_bundles directive, TILE-Gx: TILE-Gx Directives.
   24020                                                               (line  10)
   24021 * .allow_suspicious_bundles directive, TILEPro: TILEPro Directives.
   24022                                                               (line  10)
   24023 * .arch directive, ARM:                  ARM Directives.      (line  18)
   24024 * .arch directive, TIC6X:                TIC6X Directives.    (line  10)
   24025 * .arch_extension directive, ARM:        ARM Directives.      (line  25)
   24026 * .arm directive, ARM:                   ARM Directives.      (line  34)
   24027 * .big directive, M32RX:                 M32R-Directives.     (line  88)
   24028 * .bss directive, AArch64:               AArch64 Directives.  (line   6)
   24029 * .bss directive, ARM:                   ARM Directives.      (line  37)
   24030 * .c6xabi_attribute directive, TIC6X:    TIC6X Directives.    (line  20)
   24031 * .cantunwind directive, ARM:            ARM Directives.      (line  40)
   24032 * .cantunwind directive, TIC6X:          TIC6X Directives.    (line  13)
   24033 * .code directive, ARM:                  ARM Directives.      (line  44)
   24034 * .cpu directive, ARM:                   ARM Directives.      (line  48)
   24035 * .dn and .qn directives, ARM:           ARM Directives.      (line  55)
   24036 * .eabi_attribute directive, ARM:        ARM Directives.      (line  78)
   24037 * .ehtype directive, TIC6X:              TIC6X Directives.    (line  31)
   24038 * .endp directive, TIC6X:                TIC6X Directives.    (line  34)
   24039 * .even directive, ARM:                  ARM Directives.      (line 106)
   24040 * .extend directive, ARM:                ARM Directives.      (line 109)
   24041 * .fnend directive, ARM:                 ARM Directives.      (line 115)
   24042 * .fnstart directive, ARM:               ARM Directives.      (line 124)
   24043 * .force_thumb directive, ARM:           ARM Directives.      (line 127)
   24044 * .fpu directive, ARM:                   ARM Directives.      (line 131)
   24045 * .global:                               MIPS insn.           (line  12)
   24046 * .gnu_attribute 4, N directive, MIPS:   MIPS FP ABI History. (line   6)
   24047 * .gnu_attribute Tag_GNU_MIPS_ABI_FP, N directive, MIPS: MIPS FP ABI History.
   24048                                                               (line   6)
   24049 * .handlerdata directive, ARM:           ARM Directives.      (line 135)
   24050 * .handlerdata directive, TIC6X:         TIC6X Directives.    (line  39)
   24051 * .insn:                                 MIPS insn.           (line   6)
   24052 * .insn directive, s390:                 s390 Directives.     (line  11)
   24053 * .inst directive, ARM:                  ARM Directives.      (line 144)
   24054 * .ldouble directive, ARM:               ARM Directives.      (line 109)
   24055 * .little directive, M32RX:              M32R-Directives.     (line  82)
   24056 * .long directive, s390:                 s390 Directives.     (line  16)
   24057 * .ltorg directive, AArch64:             AArch64 Directives.  (line   9)
   24058 * .ltorg directive, ARM:                 ARM Directives.      (line 154)
   24059 * .ltorg directive, s390:                s390 Directives.     (line  88)
   24060 * .m32r directive, M32R:                 M32R-Directives.     (line  66)
   24061 * .m32r2 directive, M32R2:               M32R-Directives.     (line  77)
   24062 * .m32rx directive, M32RX:               M32R-Directives.     (line  72)
   24063 * .machine directive, s390:              s390 Directives.     (line  93)
   24064 * .machinemode directive, s390:          s390 Directives.     (line 103)
   24065 * .module:                               MIPS assembly options.
   24066                                                               (line   6)
   24067 * .module fp=NN directive, MIPS:         MIPS FP ABI Selection.
   24068                                                               (line   6)
   24069 * .movsp directive, ARM:                 ARM Directives.      (line 168)
   24070 * .nan directive, MIPS:                  MIPS NaN Encodings.  (line   6)
   24071 * .no_pointers directive, XStormy16:     XStormy16 Directives.
   24072                                                               (line  14)
   24073 * .nocmp directive, TIC6X:               TIC6X Directives.    (line  47)
   24074 * .o:                                    Object.              (line   6)
   24075 * .object_arch directive, ARM:           ARM Directives.      (line 173)
   24076 * .packed directive, ARM:                ARM Directives.      (line 179)
   24077 * .pad directive, ARM:                   ARM Directives.      (line 184)
   24078 * .param on HPPA:                        HPPA Directives.     (line  19)
   24079 * .personality directive, ARM:           ARM Directives.      (line 189)
   24080 * .personality directive, TIC6X:         TIC6X Directives.    (line  55)
   24081 * .personalityindex directive, ARM:      ARM Directives.      (line 192)
   24082 * .personalityindex directive, TIC6X:    TIC6X Directives.    (line  51)
   24083 * .pool directive, AArch64:              AArch64 Directives.  (line  23)
   24084 * .pool directive, ARM:                  ARM Directives.      (line 196)
   24085 * .quad directive, s390:                 s390 Directives.     (line  16)
   24086 * .req directive, AArch64:               AArch64 Directives.  (line  26)
   24087 * .req directive, ARM:                   ARM Directives.      (line 199)
   24088 * .require_canonical_reg_names directive, TILE-Gx: TILE-Gx Directives.
   24089                                                               (line  19)
   24090 * .require_canonical_reg_names directive, TILEPro: TILEPro Directives.
   24091                                                               (line  19)
   24092 * .save directive, ARM:                  ARM Directives.      (line 204)
   24093 * .scomm directive, TIC6X:               TIC6X Directives.    (line  58)
   24094 * .secrel32 directive, ARM:              ARM Directives.      (line 242)
   24095 * .set arch=CPU:                         MIPS ISA.            (line  19)
   24096 * .set at:                               MIPS Macros.         (line  42)
   24097 * .set at=REG:                           MIPS Macros.         (line  36)
   24098 * .set autoextend:                       MIPS autoextend.     (line   6)
   24099 * .set doublefloat:                      MIPS Floating-Point. (line  12)
   24100 * .set dsp:                              MIPS ASE Instruction Generation Overrides.
   24101                                                               (line  21)
   24102 * .set dspr2:                            MIPS ASE Instruction Generation Overrides.
   24103                                                               (line  26)
   24104 * .set hardfloat:                        MIPS Floating-Point. (line   6)
   24105 * .set insn32:                           MIPS assembly options.
   24106                                                               (line  18)
   24107 * .set macro:                            MIPS Macros.         (line  31)
   24108 * .set mcu:                              MIPS ASE Instruction Generation Overrides.
   24109                                                               (line  37)
   24110 * .set mdmx:                             MIPS ASE Instruction Generation Overrides.
   24111                                                               (line  16)
   24112 * .set mips3d:                           MIPS ASE Instruction Generation Overrides.
   24113                                                               (line   6)
   24114 * .set mipsN:                            MIPS ISA.            (line   6)
   24115 * .set msa:                              MIPS ASE Instruction Generation Overrides.
   24116                                                               (line  42)
   24117 * .set mt:                               MIPS ASE Instruction Generation Overrides.
   24118                                                               (line  32)
   24119 * .set noat:                             MIPS Macros.         (line  42)
   24120 * .set noautoextend:                     MIPS autoextend.     (line   6)
   24121 * .set nodsp:                            MIPS ASE Instruction Generation Overrides.
   24122                                                               (line  21)
   24123 * .set nodspr2:                          MIPS ASE Instruction Generation Overrides.
   24124                                                               (line  26)
   24125 * .set noinsn32:                         MIPS assembly options.
   24126                                                               (line  18)
   24127 * .set nomacro:                          MIPS Macros.         (line  31)
   24128 * .set nomcu:                            MIPS ASE Instruction Generation Overrides.
   24129                                                               (line  37)
   24130 * .set nomdmx:                           MIPS ASE Instruction Generation Overrides.
   24131                                                               (line  16)
   24132 * .set nomips3d:                         MIPS ASE Instruction Generation Overrides.
   24133                                                               (line   6)
   24134 * .set nomsa:                            MIPS ASE Instruction Generation Overrides.
   24135                                                               (line  42)
   24136 * .set nomt:                             MIPS ASE Instruction Generation Overrides.
   24137                                                               (line  32)
   24138 * .set nosmartmips:                      MIPS ASE Instruction Generation Overrides.
   24139                                                               (line  11)
   24140 * .set nosym32:                          MIPS Symbol Sizes.   (line   6)
   24141 * .set novirt:                           MIPS ASE Instruction Generation Overrides.
   24142                                                               (line  47)
   24143 * .set noxpa:                            MIPS ASE Instruction Generation Overrides.
   24144                                                               (line  52)
   24145 * .set pop:                              MIPS Option Stack.   (line   6)
   24146 * .set push:                             MIPS Option Stack.   (line   6)
   24147 * .set singlefloat:                      MIPS Floating-Point. (line  12)
   24148 * .set smartmips:                        MIPS ASE Instruction Generation Overrides.
   24149                                                               (line  11)
   24150 * .set softfloat:                        MIPS Floating-Point. (line   6)
   24151 * .set sym32:                            MIPS Symbol Sizes.   (line   6)
   24152 * .set virt:                             MIPS ASE Instruction Generation Overrides.
   24153                                                               (line  47)
   24154 * .set xpa:                              MIPS ASE Instruction Generation Overrides.
   24155                                                               (line  52)
   24156 * .setfp directive, ARM:                 ARM Directives.      (line 228)
   24157 * .short directive, s390:                s390 Directives.     (line  16)
   24158 * .syntax directive, ARM:                ARM Directives.      (line 247)
   24159 * .thumb directive, ARM:                 ARM Directives.      (line 251)
   24160 * .thumb_func directive, ARM:            ARM Directives.      (line 254)
   24161 * .thumb_set directive, ARM:             ARM Directives.      (line 265)
   24162 * .tlsdescseq directive, ARM:            ARM Directives.      (line 272)
   24163 * .unreq directive, AArch64:             AArch64 Directives.  (line  31)
   24164 * .unreq directive, ARM:                 ARM Directives.      (line 277)
   24165 * .unwind_raw directive, ARM:            ARM Directives.      (line 288)
   24166 * .v850 directive, V850:                 V850 Directives.     (line  14)
   24167 * .v850e directive, V850:                V850 Directives.     (line  20)
   24168 * .v850e1 directive, V850:               V850 Directives.     (line  26)
   24169 * .v850e2 directive, V850:               V850 Directives.     (line  32)
   24170 * .v850e2v3 directive, V850:             V850 Directives.     (line  38)
   24171 * .v850e2v4 directive, V850:             V850 Directives.     (line  44)
   24172 * .v850e3v5 directive, V850:             V850 Directives.     (line  50)
   24173 * .vsave directive, ARM:                 ARM Directives.      (line 295)
   24174 * .z8001:                                Z8000 Directives.    (line  11)
   24175 * .z8002:                                Z8000 Directives.    (line  15)
   24176 * 16-bit code, i386:                     i386-16bit.          (line   6)
   24177 * 16bit_pointers directive, XStormy16:   XStormy16 Directives.
   24178                                                               (line   6)
   24179 * 16byte directive, Nios II:             Nios II Directives.  (line  28)
   24180 * 2byte directive, ARC:                  ARC Directives.      (line   9)
   24181 * 2byte directive, Nios II:              Nios II Directives.  (line  19)
   24182 * 32bit_pointers directive, XStormy16:   XStormy16 Directives.
   24183                                                               (line  10)
   24184 * 3byte directive, ARC:                  ARC Directives.      (line  12)
   24185 * 3DNow!, i386:                          i386-SIMD.           (line   6)
   24186 * 3DNow!, x86-64:                        i386-SIMD.           (line   6)
   24187 * 430 support:                           MSP430-Dependent.    (line   6)
   24188 * 4byte directive, ARC:                  ARC Directives.      (line  15)
   24189 * 4byte directive, Nios II:              Nios II Directives.  (line  22)
   24190 * 8byte directive, Nios II:              Nios II Directives.  (line  25)
   24191 * : (label):                             Statements.          (line  31)
   24192 * @hi pseudo-op, XStormy16:              XStormy16 Opcodes.   (line  21)
   24193 * @lo pseudo-op, XStormy16:              XStormy16 Opcodes.   (line  10)
   24194 * @word modifier, D10V:                  D10V-Word.           (line   6)
   24195 * \" (doublequote character):            Strings.             (line  43)
   24196 * \\ (\ character):                      Strings.             (line  40)
   24197 * \b (backspace character):              Strings.             (line  15)
   24198 * \DDD (octal character code):           Strings.             (line  30)
   24199 * \f (formfeed character):               Strings.             (line  18)
   24200 * \n (newline character):                Strings.             (line  21)
   24201 * \r (carriage return character):        Strings.             (line  24)
   24202 * \t (tab):                              Strings.             (line  27)
   24203 * \XD... (hex character code):           Strings.             (line  36)
   24204 * _ opcode prefix:                       Xtensa Opcodes.      (line   9)
   24205 * a.out:                                 Object.              (line   6)
   24206 * a.out symbol attributes:               a.out Symbols.       (line   6)
   24207 * A_DIR environment variable, TIC54X:    TIC54X-Env.          (line   6)
   24208 * AArch64 floating point (IEEE):         AArch64 Floating Point.
   24209                                                               (line   6)
   24210 * AArch64 immediate character:           AArch64-Chars.       (line  13)
   24211 * AArch64 line comment character:        AArch64-Chars.       (line   6)
   24212 * AArch64 line separator:                AArch64-Chars.       (line  10)
   24213 * AArch64 machine directives:            AArch64 Directives.  (line   6)
   24214 * AArch64 opcodes:                       AArch64 Opcodes.     (line   6)
   24215 * AArch64 options (none):                AArch64 Options.     (line   6)
   24216 * AArch64 register names:                AArch64-Regs.        (line   6)
   24217 * AArch64 relocations:                   AArch64-Relocations. (line   6)
   24218 * AArch64 support:                       AArch64-Dependent.   (line   6)
   24219 * ABI options, SH64:                     SH64 Options.        (line  29)
   24220 * abort directive:                       Abort.               (line   6)
   24221 * ABORT directive:                       ABORT (COFF).        (line   6)
   24222 * absolute section:                      Ld Sections.         (line  29)
   24223 * absolute-literals directive:           Absolute Literals Directive.
   24224                                                               (line   6)
   24225 * ADDI instructions, relaxation:         Xtensa Immediate Relaxation.
   24226                                                               (line  43)
   24227 * addition, permitted arguments:         Infix Ops.           (line  44)
   24228 * addresses:                             Expressions.         (line   6)
   24229 * addresses, format of:                  Secs Background.     (line  68)
   24230 * addressing modes, D10V:                D10V-Addressing.     (line   6)
   24231 * addressing modes, D30V:                D30V-Addressing.     (line   6)
   24232 * addressing modes, H8/300:              H8/300-Addressing.   (line   6)
   24233 * addressing modes, M680x0:              M68K-Syntax.         (line  21)
   24234 * addressing modes, M68HC11:             M68HC11-Syntax.      (line  30)
   24235 * addressing modes, SH:                  SH-Addressing.       (line   6)
   24236 * addressing modes, SH64:                SH64-Addressing.     (line   6)
   24237 * addressing modes, XGATE:               XGATE-Syntax.        (line  29)
   24238 * addressing modes, Z8000:               Z8000-Addressing.    (line   6)
   24239 * ADR reg,<label> pseudo op, ARM:        ARM Opcodes.         (line  25)
   24240 * ADRL reg,<label> pseudo op, ARM:       ARM Opcodes.         (line  35)
   24241 * ADRP, ADD, LDR/STR group relocations, AArch64: AArch64-Relocations.
   24242                                                               (line  14)
   24243 * advancing location counter:            Org.                 (line   6)
   24244 * align directive:                       Align.               (line   6)
   24245 * align directive, Nios II:              Nios II Directives.  (line   6)
   24246 * align directive, SPARC:                Sparc-Directives.    (line   9)
   24247 * align directive, TIC54X:               TIC54X-Directives.   (line   6)
   24248 * aligned instruction bundle:            Bundle directives.   (line   6)
   24249 * alignment for NEON instructions:       ARM-Neon-Alignment.  (line   6)
   24250 * alignment of branch targets:           Xtensa Automatic Alignment.
   24251                                                               (line   6)
   24252 * alignment of LOOP instructions:        Xtensa Automatic Alignment.
   24253                                                               (line   6)
   24254 * Alpha floating point (IEEE):           Alpha Floating Point.
   24255                                                               (line   6)
   24256 * Alpha line comment character:          Alpha-Chars.         (line   6)
   24257 * Alpha line separator:                  Alpha-Chars.         (line  11)
   24258 * Alpha notes:                           Alpha Notes.         (line   6)
   24259 * Alpha options:                         Alpha Options.       (line   6)
   24260 * Alpha registers:                       Alpha-Regs.          (line   6)
   24261 * Alpha relocations:                     Alpha-Relocs.        (line   6)
   24262 * Alpha support:                         Alpha-Dependent.     (line   6)
   24263 * Alpha Syntax:                          Alpha Options.       (line  61)
   24264 * Alpha-only directives:                 Alpha Directives.    (line  10)
   24265 * Altera Nios II support:                NiosII-Dependent.    (line   6)
   24266 * altered difference tables:             Word.                (line  12)
   24267 * alternate syntax for the 680x0:        M68K-Moto-Syntax.    (line   6)
   24268 * ARC floating point (IEEE):             ARC Floating Point.  (line   6)
   24269 * ARC line comment character:            ARC-Chars.           (line   6)
   24270 * ARC line separator:                    ARC-Chars.           (line  12)
   24271 * ARC machine directives:                ARC Directives.      (line   6)
   24272 * ARC opcodes:                           ARC Opcodes.         (line   6)
   24273 * ARC options (none):                    ARC Options.         (line   6)
   24274 * ARC register names:                    ARC-Regs.            (line   6)
   24275 * ARC support:                           ARC-Dependent.       (line   6)
   24276 * arc5 arc5, ARC:                        ARC Options.         (line  10)
   24277 * arc6 arc6, ARC:                        ARC Options.         (line  13)
   24278 * arc7 arc7, ARC:                        ARC Options.         (line  21)
   24279 * arc8 arc8, ARC:                        ARC Options.         (line  24)
   24280 * arch directive, i386:                  i386-Arch.           (line   6)
   24281 * arch directive, M680x0:                M68K-Directives.     (line  22)
   24282 * arch directive, MSP 430:               MSP430 Directives.   (line  18)
   24283 * arch directive, x86-64:                i386-Arch.           (line   6)
   24284 * architecture options, i960:            Options-i960.        (line   6)
   24285 * architecture options, IP2022:          IP2K-Opts.           (line   9)
   24286 * architecture options, IP2K:            IP2K-Opts.           (line  14)
   24287 * architecture options, M16C:            M32C-Opts.           (line  12)
   24288 * architecture options, M32C:            M32C-Opts.           (line   9)
   24289 * architecture options, M32R:            M32R-Opts.           (line  21)
   24290 * architecture options, M32R2:           M32R-Opts.           (line  17)
   24291 * architecture options, M32RX:           M32R-Opts.           (line   9)
   24292 * architecture options, M680x0:          M68K-Opts.           (line  98)
   24293 * Architecture variant option, CRIS:     CRIS-Opts.           (line  34)
   24294 * architectures, Meta:                   Meta Options.        (line   6)
   24295 * architectures, PowerPC:                PowerPC-Opts.        (line   6)
   24296 * architectures, SCORE:                  SCORE-Opts.          (line   6)
   24297 * architectures, SPARC:                  Sparc-Opts.          (line   6)
   24298 * arguments for addition:                Infix Ops.           (line  44)
   24299 * arguments for subtraction:             Infix Ops.           (line  49)
   24300 * arguments in expressions:              Arguments.           (line   6)
   24301 * arithmetic functions:                  Operators.           (line   6)
   24302 * arithmetic operands:                   Arguments.           (line   6)
   24303 * ARM data relocations:                  ARM-Relocations.     (line   6)
   24304 * ARM floating point (IEEE):             ARM Floating Point.  (line   6)
   24305 * ARM identifiers:                       ARM-Chars.           (line  19)
   24306 * ARM immediate character:               ARM-Chars.           (line  17)
   24307 * ARM line comment character:            ARM-Chars.           (line   6)
   24308 * ARM line separator:                    ARM-Chars.           (line  14)
   24309 * ARM machine directives:                ARM Directives.      (line   6)
   24310 * ARM opcodes:                           ARM Opcodes.         (line   6)
   24311 * ARM options (none):                    ARM Options.         (line   6)
   24312 * ARM register names:                    ARM-Regs.            (line   6)
   24313 * ARM support:                           ARM-Dependent.       (line   6)
   24314 * ascii directive:                       Ascii.               (line   6)
   24315 * asciz directive:                       Asciz.               (line   6)
   24316 * asg directive, TIC54X:                 TIC54X-Directives.   (line  20)
   24317 * assembler bugs, reporting:             Bug Reporting.       (line   6)
   24318 * assembler crash:                       Bug Criteria.        (line   9)
   24319 * assembler directive .3byte, RX:        RX-Directives.       (line   9)
   24320 * assembler directive .arch, CRIS:       CRIS-Pseudos.        (line  45)
   24321 * assembler directive .dword, CRIS:      CRIS-Pseudos.        (line  12)
   24322 * assembler directive .far, M68HC11:     M68HC11-Directives.  (line  20)
   24323 * assembler directive .fetchalign, RX:   RX-Directives.       (line  13)
   24324 * assembler directive .interrupt, M68HC11: M68HC11-Directives.
   24325                                                               (line  26)
   24326 * assembler directive .mode, M68HC11:    M68HC11-Directives.  (line  16)
   24327 * assembler directive .relax, M68HC11:   M68HC11-Directives.  (line  10)
   24328 * assembler directive .syntax, CRIS:     CRIS-Pseudos.        (line  17)
   24329 * assembler directive .xrefb, M68HC11:   M68HC11-Directives.  (line  31)
   24330 * assembler directive BSPEC, MMIX:       MMIX-Pseudos.        (line 131)
   24331 * assembler directive BYTE, MMIX:        MMIX-Pseudos.        (line  97)
   24332 * assembler directive ESPEC, MMIX:       MMIX-Pseudos.        (line 131)
   24333 * assembler directive GREG, MMIX:        MMIX-Pseudos.        (line  50)
   24334 * assembler directive IS, MMIX:          MMIX-Pseudos.        (line  42)
   24335 * assembler directive LOC, MMIX:         MMIX-Pseudos.        (line   7)
   24336 * assembler directive LOCAL, MMIX:       MMIX-Pseudos.        (line  28)
   24337 * assembler directive OCTA, MMIX:        MMIX-Pseudos.        (line 108)
   24338 * assembler directive PREFIX, MMIX:      MMIX-Pseudos.        (line 120)
   24339 * assembler directive TETRA, MMIX:       MMIX-Pseudos.        (line 108)
   24340 * assembler directive WYDE, MMIX:        MMIX-Pseudos.        (line 108)
   24341 * assembler directives, CRIS:            CRIS-Pseudos.        (line   6)
   24342 * assembler directives, M68HC11:         M68HC11-Directives.  (line   6)
   24343 * assembler directives, M68HC12:         M68HC11-Directives.  (line   6)
   24344 * assembler directives, MMIX:            MMIX-Pseudos.        (line   6)
   24345 * assembler directives, RL78:            RL78-Directives.     (line   6)
   24346 * assembler directives, RX:              RX-Directives.       (line   6)
   24347 * assembler directives, XGATE:           XGATE-Directives.    (line   6)
   24348 * assembler internal logic error:        As Sections.         (line  13)
   24349 * assembler version:                     v.                   (line   6)
   24350 * assembler, and linker:                 Secs Background.     (line  10)
   24351 * assembly listings, enabling:           a.                   (line   6)
   24352 * assigning values to symbols <1>:       Equ.                 (line   6)
   24353 * assigning values to symbols:           Setting Symbols.     (line   6)
   24354 * at register, MIPS:                     MIPS Macros.         (line  36)
   24355 * atmp directive, i860:                  Directives-i860.     (line  16)
   24356 * att_syntax pseudo op, i386:            i386-Variations.     (line   6)
   24357 * att_syntax pseudo op, x86-64:          i386-Variations.     (line   6)
   24358 * attributes, symbol:                    Symbol Attributes.   (line   6)
   24359 * auxiliary attributes, COFF symbols:    COFF Symbols.        (line  19)
   24360 * auxiliary symbol information, COFF:    Dim.                 (line   6)
   24361 * AVR line comment character:            AVR-Chars.           (line   6)
   24362 * AVR line separator:                    AVR-Chars.           (line  14)
   24363 * AVR modifiers:                         AVR-Modifiers.       (line   6)
   24364 * AVR opcode summary:                    AVR Opcodes.         (line   6)
   24365 * AVR options (none):                    AVR Options.         (line   6)
   24366 * AVR register names:                    AVR-Regs.            (line   6)
   24367 * AVR support:                           AVR-Dependent.       (line   6)
   24368 * backslash (\\):                        Strings.             (line  40)
   24369 * backspace (\b):                        Strings.             (line  15)
   24370 * balign directive:                      Balign.              (line   6)
   24371 * balignl directive:                     Balign.              (line  27)
   24372 * balignw directive:                     Balign.              (line  27)
   24373 * bes directive, TIC54X:                 TIC54X-Directives.   (line 196)
   24374 * big endian output, MIPS:               Overview.            (line 764)
   24375 * big endian output, PJ:                 Overview.            (line 667)
   24376 * big-endian output, MIPS:               MIPS Options.        (line  13)
   24377 * big-endian output, TIC6X:              TIC6X Options.       (line  46)
   24378 * bignums:                               Bignums.             (line   6)
   24379 * binary constants, TIC54X:              TIC54X-Constants.    (line   8)
   24380 * binary files, including:               Incbin.              (line   6)
   24381 * binary integers:                       Integers.            (line   6)
   24382 * bit names, IA-64:                      IA-64-Bits.          (line   6)
   24383 * bitfields, not supported on VAX:       VAX-no.              (line   6)
   24384 * Blackfin directives:                   Blackfin Directives. (line   6)
   24385 * Blackfin options (none):               Blackfin Options.    (line   6)
   24386 * Blackfin support:                      Blackfin-Dependent.  (line   6)
   24387 * Blackfin syntax:                       Blackfin Syntax.     (line   6)
   24388 * block:                                 Z8000 Directives.    (line  55)
   24389 * BMI, i386:                             i386-BMI.            (line   6)
   24390 * BMI, x86-64:                           i386-BMI.            (line   6)
   24391 * branch improvement, M680x0:            M68K-Branch.         (line   6)
   24392 * branch improvement, M68HC11:           M68HC11-Branch.      (line   6)
   24393 * branch improvement, VAX:               VAX-branch.          (line   6)
   24394 * branch instructions, relaxation:       Xtensa Branch Relaxation.
   24395                                                               (line   6)
   24396 * branch recording, i960:                Options-i960.        (line  22)
   24397 * branch statistics table, i960:         Options-i960.        (line  40)
   24398 * branch target alignment:               Xtensa Automatic Alignment.
   24399                                                               (line   6)
   24400 * break directive, TIC54X:               TIC54X-Directives.   (line 143)
   24401 * BSD syntax:                            PDP-11-Syntax.       (line   6)
   24402 * bss directive, i960:                   Directives-i960.     (line   6)
   24403 * bss directive, TIC54X:                 TIC54X-Directives.   (line  29)
   24404 * bss section <1>:                       Ld Sections.         (line  20)
   24405 * bss section:                           bss.                 (line   6)
   24406 * bug criteria:                          Bug Criteria.        (line   6)
   24407 * bug reports:                           Bug Reporting.       (line   6)
   24408 * bugs in assembler:                     Reporting Bugs.      (line   6)
   24409 * Built-in symbols, CRIS:                CRIS-Symbols.        (line   6)
   24410 * builtin math functions, TIC54X:        TIC54X-Builtins.     (line   6)
   24411 * builtin subsym functions, TIC54X:      TIC54X-Macros.       (line  16)
   24412 * bundle:                                Bundle directives.   (line   6)
   24413 * bundle-locked:                         Bundle directives.   (line  35)
   24414 * bundle_align_mode directive:           Bundle directives.   (line   6)
   24415 * bundle_lock directive:                 Bundle directives.   (line  28)
   24416 * bundle_unlock directive:               Bundle directives.   (line  28)
   24417 * bus lock prefixes, i386:               i386-Prefixes.       (line  36)
   24418 * bval:                                  Z8000 Directives.    (line  30)
   24419 * byte directive:                        Byte.                (line   6)
   24420 * byte directive, TIC54X:                TIC54X-Directives.   (line  36)
   24421 * C54XDSP_DIR environment variable, TIC54X: TIC54X-Env.       (line   6)
   24422 * c_mode directive, TIC54X:              TIC54X-Directives.   (line  51)
   24423 * call directive, Nios II:               Nios II Relocations. (line  38)
   24424 * call instructions, i386:               i386-Mnemonics.      (line  56)
   24425 * call instructions, relaxation:         Xtensa Call Relaxation.
   24426                                                               (line   6)
   24427 * call instructions, x86-64:             i386-Mnemonics.      (line  56)
   24428 * call_hiadj directive, Nios II:         Nios II Relocations. (line  38)
   24429 * call_lo directive, Nios II:            Nios II Relocations. (line  38)
   24430 * callj, i960 pseudo-opcode:             callj-i960.          (line   6)
   24431 * carriage return (\r):                  Strings.             (line  24)
   24432 * case sensitivity, Z80:                 Z80-Case.            (line   6)
   24433 * cfi_endproc directive:                 CFI directives.      (line  26)
   24434 * cfi_sections directive:                CFI directives.      (line   6)
   24435 * cfi_startproc directive:               CFI directives.      (line  16)
   24436 * char directive, TIC54X:                TIC54X-Directives.   (line  36)
   24437 * character constant, Z80:               Z80-Chars.           (line  20)
   24438 * character constants:                   Characters.          (line   6)
   24439 * character escape codes:                Strings.             (line  15)
   24440 * character escapes, Z80:                Z80-Chars.           (line  18)
   24441 * character, single:                     Chars.               (line   6)
   24442 * characters used in symbols:            Symbol Intro.        (line   6)
   24443 * clink directive, TIC54X:               TIC54X-Directives.   (line  45)
   24444 * code16 directive, i386:                i386-16bit.          (line   6)
   24445 * code16gcc directive, i386:             i386-16bit.          (line   6)
   24446 * code32 directive, i386:                i386-16bit.          (line   6)
   24447 * code64 directive, i386:                i386-16bit.          (line   6)
   24448 * code64 directive, x86-64:              i386-16bit.          (line   6)
   24449 * COFF auxiliary symbol information:     Dim.                 (line   6)
   24450 * COFF structure debugging:              Tag.                 (line   6)
   24451 * COFF symbol attributes:                COFF Symbols.        (line   6)
   24452 * COFF symbol descriptor:                Desc.                (line   6)
   24453 * COFF symbol storage class:             Scl.                 (line   6)
   24454 * COFF symbol type:                      Type.                (line  11)
   24455 * COFF symbols, debugging:               Def.                 (line   6)
   24456 * COFF value attribute:                  Val.                 (line   6)
   24457 * COMDAT:                                Linkonce.            (line   6)
   24458 * comm directive:                        Comm.                (line   6)
   24459 * command line conventions:              Command Line.        (line   6)
   24460 * command line options, V850:            V850 Options.        (line   9)
   24461 * command-line options ignored, VAX:     VAX-Opts.            (line   6)
   24462 * comment character, XStormy16:          XStormy16-Chars.     (line  11)
   24463 * comments:                              Comments.            (line   6)
   24464 * comments, M680x0:                      M68K-Chars.          (line   6)
   24465 * comments, removed by preprocessor:     Preprocessing.       (line  11)
   24466 * common directive, SPARC:               Sparc-Directives.    (line  12)
   24467 * common sections:                       Linkonce.            (line   6)
   24468 * common variable storage:               bss.                 (line   6)
   24469 * compare and jump expansions, i960:     Compare-and-branch-i960.
   24470                                                               (line  13)
   24471 * compare/branch instructions, i960:     Compare-and-branch-i960.
   24472                                                               (line   6)
   24473 * comparison expressions:                Infix Ops.           (line  55)
   24474 * conditional assembly:                  If.                  (line   6)
   24475 * constant, single character:            Chars.               (line   6)
   24476 * constants:                             Constants.           (line   6)
   24477 * constants, bignum:                     Bignums.             (line   6)
   24478 * constants, character:                  Characters.          (line   6)
   24479 * constants, converted by preprocessor:  Preprocessing.       (line  14)
   24480 * constants, floating point:             Flonums.             (line   6)
   24481 * constants, integer:                    Integers.            (line   6)
   24482 * constants, number:                     Numbers.             (line   6)
   24483 * constants, Sparc:                      Sparc-Constants.     (line   6)
   24484 * constants, string:                     Strings.             (line   6)
   24485 * constants, TIC54X:                     TIC54X-Constants.    (line   6)
   24486 * conversion instructions, i386:         i386-Mnemonics.      (line  37)
   24487 * conversion instructions, x86-64:       i386-Mnemonics.      (line  37)
   24488 * coprocessor wait, i386:                i386-Prefixes.       (line  40)
   24489 * copy directive, TIC54X:                TIC54X-Directives.   (line  54)
   24490 * cpu directive, M680x0:                 M68K-Directives.     (line  30)
   24491 * cpu directive, MSP 430:                MSP430 Directives.   (line  22)
   24492 * CR16 line comment character:           CR16-Chars.          (line   6)
   24493 * CR16 line separator:                   CR16-Chars.          (line  13)
   24494 * CR16 Operand Qualifiers:               CR16 Operand Qualifiers.
   24495                                                               (line   6)
   24496 * CR16 support:                          CR16-Dependent.      (line   6)
   24497 * crash of assembler:                    Bug Criteria.        (line   9)
   24498 * CRIS --emulation=crisaout command line option: CRIS-Opts.   (line   9)
   24499 * CRIS --emulation=criself command line option: CRIS-Opts.    (line   9)
   24500 * CRIS --march=ARCHITECTURE command line option: CRIS-Opts.   (line  34)
   24501 * CRIS --mul-bug-abort command line option: CRIS-Opts.        (line  62)
   24502 * CRIS --no-mul-bug-abort command line option: CRIS-Opts.     (line  62)
   24503 * CRIS --no-underscore command line option: CRIS-Opts.        (line  15)
   24504 * CRIS --pic command line option:        CRIS-Opts.           (line  27)
   24505 * CRIS --underscore command line option: CRIS-Opts.           (line  15)
   24506 * CRIS -N command line option:           CRIS-Opts.           (line  58)
   24507 * CRIS architecture variant option:      CRIS-Opts.           (line  34)
   24508 * CRIS assembler directive .arch:        CRIS-Pseudos.        (line  45)
   24509 * CRIS assembler directive .dword:       CRIS-Pseudos.        (line  12)
   24510 * CRIS assembler directive .syntax:      CRIS-Pseudos.        (line  17)
   24511 * CRIS assembler directives:             CRIS-Pseudos.        (line   6)
   24512 * CRIS built-in symbols:                 CRIS-Symbols.        (line   6)
   24513 * CRIS instruction expansion:            CRIS-Expand.         (line   6)
   24514 * CRIS line comment characters:          CRIS-Chars.          (line   6)
   24515 * CRIS options:                          CRIS-Opts.           (line   6)
   24516 * CRIS position-independent code:        CRIS-Opts.           (line  27)
   24517 * CRIS pseudo-op .arch:                  CRIS-Pseudos.        (line  45)
   24518 * CRIS pseudo-op .dword:                 CRIS-Pseudos.        (line  12)
   24519 * CRIS pseudo-op .syntax:                CRIS-Pseudos.        (line  17)
   24520 * CRIS pseudo-ops:                       CRIS-Pseudos.        (line   6)
   24521 * CRIS register names:                   CRIS-Regs.           (line   6)
   24522 * CRIS support:                          CRIS-Dependent.      (line   6)
   24523 * CRIS symbols in position-independent code: CRIS-Pic.        (line   6)
   24524 * ctbp register, V850:                   V850-Regs.           (line 131)
   24525 * ctoff pseudo-op, V850:                 V850 Opcodes.        (line 111)
   24526 * ctpc register, V850:                   V850-Regs.           (line 119)
   24527 * ctpsw register, V850:                  V850-Regs.           (line 122)
   24528 * current address:                       Dot.                 (line   6)
   24529 * current address, advancing:            Org.                 (line   6)
   24530 * D10V @word modifier:                   D10V-Word.           (line   6)
   24531 * D10V addressing modes:                 D10V-Addressing.     (line   6)
   24532 * D10V floating point:                   D10V-Float.          (line   6)
   24533 * D10V line comment character:           D10V-Chars.          (line   6)
   24534 * D10V opcode summary:                   D10V-Opcodes.        (line   6)
   24535 * D10V optimization:                     Overview.            (line 527)
   24536 * D10V options:                          D10V-Opts.           (line   6)
   24537 * D10V registers:                        D10V-Regs.           (line   6)
   24538 * D10V size modifiers:                   D10V-Size.           (line   6)
   24539 * D10V sub-instruction ordering:         D10V-Chars.          (line  14)
   24540 * D10V sub-instructions:                 D10V-Subs.           (line   6)
   24541 * D10V support:                          D10V-Dependent.      (line   6)
   24542 * D10V syntax:                           D10V-Syntax.         (line   6)
   24543 * D30V addressing modes:                 D30V-Addressing.     (line   6)
   24544 * D30V floating point:                   D30V-Float.          (line   6)
   24545 * D30V Guarded Execution:                D30V-Guarded.        (line   6)
   24546 * D30V line comment character:           D30V-Chars.          (line   6)
   24547 * D30V nops:                             Overview.            (line 535)
   24548 * D30V nops after 32-bit multiply:       Overview.            (line 538)
   24549 * D30V opcode summary:                   D30V-Opcodes.        (line   6)
   24550 * D30V optimization:                     Overview.            (line 532)
   24551 * D30V options:                          D30V-Opts.           (line   6)
   24552 * D30V registers:                        D30V-Regs.           (line   6)
   24553 * D30V size modifiers:                   D30V-Size.           (line   6)
   24554 * D30V sub-instruction ordering:         D30V-Chars.          (line  14)
   24555 * D30V sub-instructions:                 D30V-Subs.           (line   6)
   24556 * D30V support:                          D30V-Dependent.      (line   6)
   24557 * D30V syntax:                           D30V-Syntax.         (line   6)
   24558 * data alignment on SPARC:               Sparc-Aligned-Data.  (line   6)
   24559 * data and text sections, joining:       R.                   (line   6)
   24560 * data directive:                        Data.                (line   6)
   24561 * data directive, TIC54X:                TIC54X-Directives.   (line  61)
   24562 * data relocations, ARM:                 ARM-Relocations.     (line   6)
   24563 * data section:                          Ld Sections.         (line   9)
   24564 * data1 directive, M680x0:               M68K-Directives.     (line   9)
   24565 * data2 directive, M680x0:               M68K-Directives.     (line  12)
   24566 * datalabel, SH64:                       SH64-Addressing.     (line  16)
   24567 * dbpc register, V850:                   V850-Regs.           (line 125)
   24568 * dbpsw register, V850:                  V850-Regs.           (line 128)
   24569 * debuggers, and symbol order:           Symbols.             (line  10)
   24570 * debugging COFF symbols:                Def.                 (line   6)
   24571 * DEC syntax:                            PDP-11-Syntax.       (line   6)
   24572 * decimal integers:                      Integers.            (line  12)
   24573 * def directive:                         Def.                 (line   6)
   24574 * def directive, TIC54X:                 TIC54X-Directives.   (line 103)
   24575 * density instructions:                  Density Instructions.
   24576                                                               (line   6)
   24577 * dependency tracking:                   MD.                  (line   6)
   24578 * deprecated directives:                 Deprecated.          (line   6)
   24579 * desc directive:                        Desc.                (line   6)
   24580 * descriptor, of a.out symbol:           Symbol Desc.         (line   6)
   24581 * dfloat directive, VAX:                 VAX-directives.      (line  10)
   24582 * difference tables altered:             Word.                (line  12)
   24583 * difference tables, warning:            K.                   (line   6)
   24584 * differences, mmixal:                   MMIX-mmixal.         (line   6)
   24585 * dim directive:                         Dim.                 (line   6)
   24586 * directives and instructions:           Statements.          (line  20)
   24587 * directives for PowerPC:                PowerPC-Pseudo.      (line   6)
   24588 * directives for SCORE:                  SCORE-Pseudo.        (line   6)
   24589 * directives, Blackfin:                  Blackfin Directives. (line   6)
   24590 * directives, M32R:                      M32R-Directives.     (line   6)
   24591 * directives, M680x0:                    M68K-Directives.     (line   6)
   24592 * directives, machine independent:       Pseudo Ops.          (line   6)
   24593 * directives, Xtensa:                    Xtensa Directives.   (line   6)
   24594 * directives, Z8000:                     Z8000 Directives.    (line   6)
   24595 * Disable floating-point instructions:   MIPS Floating-Point. (line   6)
   24596 * Disable single-precision floating-point operations: MIPS Floating-Point.
   24597                                                               (line  12)
   24598 * displacement sizing character, VAX:    VAX-operands.        (line  12)
   24599 * dollar local symbols:                  Symbol Names.        (line 110)
   24600 * dot (symbol):                          Dot.                 (line   6)
   24601 * double directive:                      Double.              (line   6)
   24602 * double directive, i386:                i386-Float.          (line  14)
   24603 * double directive, M680x0:              M68K-Float.          (line  14)
   24604 * double directive, M68HC11:             M68HC11-Float.       (line  14)
   24605 * double directive, RX:                  RX-Float.            (line  11)
   24606 * double directive, TIC54X:              TIC54X-Directives.   (line  64)
   24607 * double directive, VAX:                 VAX-float.           (line  15)
   24608 * double directive, x86-64:              i386-Float.          (line  14)
   24609 * double directive, XGATE:               XGATE-Float.         (line  13)
   24610 * doublequote (\"):                      Strings.             (line  43)
   24611 * drlist directive, TIC54X:              TIC54X-Directives.   (line  73)
   24612 * drnolist directive, TIC54X:            TIC54X-Directives.   (line  73)
   24613 * dual directive, i860:                  Directives-i860.     (line   6)
   24614 * dword directive, Nios II:              Nios II Directives.  (line  16)
   24615 * EB command line option, Nios II:       Nios II Options.     (line  23)
   24616 * ecr register, V850:                    V850-Regs.           (line 113)
   24617 * eight-byte integer:                    Quad.                (line   9)
   24618 * eipc register, V850:                   V850-Regs.           (line 101)
   24619 * eipsw register, V850:                  V850-Regs.           (line 104)
   24620 * eject directive:                       Eject.               (line   6)
   24621 * EL command line option, Nios II:       Nios II Options.     (line  26)
   24622 * ELF symbol type:                       Type.                (line  22)
   24623 * else directive:                        Else.                (line   6)
   24624 * elseif directive:                      Elseif.              (line   6)
   24625 * empty expressions:                     Empty Exprs.         (line   6)
   24626 * emsg directive, TIC54X:                TIC54X-Directives.   (line  77)
   24627 * emulation:                             Overview.            (line 946)
   24628 * encoding options, i386:                i386-Mnemonics.      (line  32)
   24629 * encoding options, x86-64:              i386-Mnemonics.      (line  32)
   24630 * end directive:                         End.                 (line   6)
   24631 * enddual directive, i860:               Directives-i860.     (line  11)
   24632 * endef directive:                       Endef.               (line   6)
   24633 * endfunc directive:                     Endfunc.             (line   6)
   24634 * endianness, MIPS:                      Overview.            (line 764)
   24635 * endianness, PJ:                        Overview.            (line 667)
   24636 * endif directive:                       Endif.               (line   6)
   24637 * endloop directive, TIC54X:             TIC54X-Directives.   (line 143)
   24638 * endm directive:                        Macro.               (line 138)
   24639 * endm directive, TIC54X:                TIC54X-Directives.   (line 153)
   24640 * endstruct directive, TIC54X:           TIC54X-Directives.   (line 216)
   24641 * endunion directive, TIC54X:            TIC54X-Directives.   (line 250)
   24642 * environment settings, TIC54X:          TIC54X-Env.          (line   6)
   24643 * EOF, newline must precede:             Statements.          (line  14)
   24644 * ep register, V850:                     V850-Regs.           (line  95)
   24645 * Epiphany line comment character:       Epiphany-Chars.      (line   6)
   24646 * Epiphany line separator:               Epiphany-Chars.      (line  14)
   24647 * Epiphany options:                      Epiphany Options.    (line   6)
   24648 * Epiphany support:                      Epiphany-Dependent.  (line   6)
   24649 * equ directive:                         Equ.                 (line   6)
   24650 * equ directive, TIC54X:                 TIC54X-Directives.   (line 191)
   24651 * equiv directive:                       Equiv.               (line   6)
   24652 * eqv directive:                         Eqv.                 (line   6)
   24653 * err directive:                         Err.                 (line   6)
   24654 * error directive:                       Error.               (line   6)
   24655 * error messages:                        Errors.              (line   6)
   24656 * error on valid input:                  Bug Criteria.        (line  12)
   24657 * errors, caused by warnings:            W.                   (line  16)
   24658 * errors, continuing after:              Z.                   (line   6)
   24659 * ESA/390 floating point (IEEE):         ESA/390 Floating Point.
   24660                                                               (line   6)
   24661 * ESA/390 support:                       ESA/390-Dependent.   (line   6)
   24662 * ESA/390 Syntax:                        ESA/390 Options.     (line   8)
   24663 * ESA/390-only directives:               ESA/390 Directives.  (line  12)
   24664 * escape codes, character:               Strings.             (line  15)
   24665 * eval directive, TIC54X:                TIC54X-Directives.   (line  24)
   24666 * even:                                  Z8000 Directives.    (line  58)
   24667 * even directive, M680x0:                M68K-Directives.     (line  15)
   24668 * even directive, TIC54X:                TIC54X-Directives.   (line   6)
   24669 * exitm directive:                       Macro.               (line 141)
   24670 * expr (internal section):               As Sections.         (line  17)
   24671 * expression arguments:                  Arguments.           (line   6)
   24672 * expressions:                           Expressions.         (line   6)
   24673 * expressions, comparison:               Infix Ops.           (line  55)
   24674 * expressions, empty:                    Empty Exprs.         (line   6)
   24675 * expressions, integer:                  Integer Exprs.       (line   6)
   24676 * extAuxRegister directive, ARC:         ARC Directives.      (line  18)
   24677 * extCondCode directive, ARC:            ARC Directives.      (line  41)
   24678 * extCoreRegister directive, ARC:        ARC Directives.      (line  53)
   24679 * extend directive M680x0:               M68K-Float.          (line  17)
   24680 * extend directive M68HC11:              M68HC11-Float.       (line  17)
   24681 * extend directive XGATE:                XGATE-Float.         (line  16)
   24682 * extended directive, i960:              Directives-i960.     (line  13)
   24683 * extern directive:                      Extern.              (line   6)
   24684 * extInstruction directive, ARC:         ARC Directives.      (line  78)
   24685 * fail directive:                        Fail.                (line   6)
   24686 * far_mode directive, TIC54X:            TIC54X-Directives.   (line  82)
   24687 * faster processing (-f):                f.                   (line   6)
   24688 * fatal signal:                          Bug Criteria.        (line   9)
   24689 * fclist directive, TIC54X:              TIC54X-Directives.   (line  87)
   24690 * fcnolist directive, TIC54X:            TIC54X-Directives.   (line  87)
   24691 * fepc register, V850:                   V850-Regs.           (line 107)
   24692 * fepsw register, V850:                  V850-Regs.           (line 110)
   24693 * ffloat directive, VAX:                 VAX-directives.      (line  14)
   24694 * field directive, TIC54X:               TIC54X-Directives.   (line  91)
   24695 * file directive:                        File.                (line   6)
   24696 * file directive, MSP 430:               MSP430 Directives.   (line   6)
   24697 * file name, logical:                    File.                (line  13)
   24698 * files, including:                      Include.             (line   6)
   24699 * files, input:                          Input Files.         (line   6)
   24700 * fill directive:                        Fill.                (line   6)
   24701 * filling memory <1>:                    Space.               (line   6)
   24702 * filling memory:                        Skip.                (line   6)
   24703 * FLIX syntax:                           Xtensa Syntax.       (line   6)
   24704 * float directive:                       Float.               (line   6)
   24705 * float directive, i386:                 i386-Float.          (line  14)
   24706 * float directive, M680x0:               M68K-Float.          (line  11)
   24707 * float directive, M68HC11:              M68HC11-Float.       (line  11)
   24708 * float directive, RX:                   RX-Float.            (line   8)
   24709 * float directive, TIC54X:               TIC54X-Directives.   (line  64)
   24710 * float directive, VAX:                  VAX-float.           (line  15)
   24711 * float directive, x86-64:               i386-Float.          (line  14)
   24712 * float directive, XGATE:                XGATE-Float.         (line  10)
   24713 * floating point numbers:                Flonums.             (line   6)
   24714 * floating point numbers (double):       Double.              (line   6)
   24715 * floating point numbers (single) <1>:   Single.              (line   6)
   24716 * floating point numbers (single):       Float.               (line   6)
   24717 * floating point, AArch64 (IEEE):        AArch64 Floating Point.
   24718                                                               (line   6)
   24719 * floating point, Alpha (IEEE):          Alpha Floating Point.
   24720                                                               (line   6)
   24721 * floating point, ARC (IEEE):            ARC Floating Point.  (line   6)
   24722 * floating point, ARM (IEEE):            ARM Floating Point.  (line   6)
   24723 * floating point, D10V:                  D10V-Float.          (line   6)
   24724 * floating point, D30V:                  D30V-Float.          (line   6)
   24725 * floating point, ESA/390 (IEEE):        ESA/390 Floating Point.
   24726                                                               (line   6)
   24727 * floating point, H8/300 (IEEE):         H8/300 Floating Point.
   24728                                                               (line   6)
   24729 * floating point, HPPA (IEEE):           HPPA Floating Point. (line   6)
   24730 * floating point, i386:                  i386-Float.          (line   6)
   24731 * floating point, i960 (IEEE):           Floating Point-i960. (line   6)
   24732 * floating point, M680x0:                M68K-Float.          (line   6)
   24733 * floating point, M68HC11:               M68HC11-Float.       (line   6)
   24734 * floating point, MSP 430 (IEEE):        MSP430 Floating Point.
   24735                                                               (line   6)
   24736 * floating point, RX:                    RX-Float.            (line   6)
   24737 * floating point, s390:                  s390 Floating Point. (line   6)
   24738 * floating point, SH (IEEE):             SH Floating Point.   (line   6)
   24739 * floating point, SPARC (IEEE):          Sparc-Float.         (line   6)
   24740 * floating point, V850 (IEEE):           V850 Floating Point. (line   6)
   24741 * floating point, VAX:                   VAX-float.           (line   6)
   24742 * floating point, x86-64:                i386-Float.          (line   6)
   24743 * floating point, XGATE:                 XGATE-Float.         (line   6)
   24744 * floating point, Z80:                   Z80 Floating Point.  (line   6)
   24745 * flonums:                               Flonums.             (line   6)
   24746 * format of error messages:              Errors.              (line  24)
   24747 * format of warning messages:            Errors.              (line  12)
   24748 * formfeed (\f):                         Strings.             (line  18)
   24749 * func directive:                        Func.                (line   6)
   24750 * functions, in expressions:             Operators.           (line   6)
   24751 * gbr960, i960 postprocessor:            Options-i960.        (line  40)
   24752 * gfloat directive, VAX:                 VAX-directives.      (line  18)
   24753 * global:                                Z8000 Directives.    (line  21)
   24754 * global directive:                      Global.              (line   6)
   24755 * global directive, TIC54X:              TIC54X-Directives.   (line 103)
   24756 * got directive, Nios II:                Nios II Relocations. (line  38)
   24757 * got_hiadj directive, Nios II:          Nios II Relocations. (line  38)
   24758 * got_lo directive, Nios II:             Nios II Relocations. (line  38)
   24759 * gotoff directive, Nios II:             Nios II Relocations. (line  38)
   24760 * gotoff_hiadj directive, Nios II:       Nios II Relocations. (line  38)
   24761 * gotoff_lo directive, Nios II:          Nios II Relocations. (line  38)
   24762 * gp register, MIPS:                     MIPS Small Data.     (line   6)
   24763 * gp register, V850:                     V850-Regs.           (line  17)
   24764 * gprel directive, Nios II:              Nios II Relocations. (line  26)
   24765 * grouping data:                         Sub-Sections.        (line   6)
   24766 * H8/300 addressing modes:               H8/300-Addressing.   (line   6)
   24767 * H8/300 floating point (IEEE):          H8/300 Floating Point.
   24768                                                               (line   6)
   24769 * H8/300 line comment character:         H8/300-Chars.        (line   6)
   24770 * H8/300 line separator:                 H8/300-Chars.        (line   8)
   24771 * H8/300 machine directives (none):      H8/300 Directives.   (line   6)
   24772 * H8/300 opcode summary:                 H8/300 Opcodes.      (line   6)
   24773 * H8/300 options:                        H8/300 Options.      (line   6)
   24774 * H8/300 registers:                      H8/300-Regs.         (line   6)
   24775 * H8/300 size suffixes:                  H8/300 Opcodes.      (line 163)
   24776 * H8/300 support:                        H8/300-Dependent.    (line   6)
   24777 * H8/300H, assembling for:               H8/300 Directives.   (line   8)
   24778 * half directive, ARC:                   ARC Directives.      (line 153)
   24779 * half directive, Nios II:               Nios II Directives.  (line  10)
   24780 * half directive, SPARC:                 Sparc-Directives.    (line  17)
   24781 * half directive, TIC54X:                TIC54X-Directives.   (line 111)
   24782 * hex character code (\XD...):           Strings.             (line  36)
   24783 * hexadecimal integers:                  Integers.            (line  15)
   24784 * hexadecimal prefix, Z80:               Z80-Chars.           (line  15)
   24785 * hfloat directive, VAX:                 VAX-directives.      (line  22)
   24786 * hi directive, Nios II:                 Nios II Relocations. (line  20)
   24787 * hi pseudo-op, V850:                    V850 Opcodes.        (line  33)
   24788 * hi0 pseudo-op, V850:                   V850 Opcodes.        (line  10)
   24789 * hiadj directive, Nios II:              Nios II Relocations. (line   6)
   24790 * hidden directive:                      Hidden.              (line   6)
   24791 * high directive, M32R:                  M32R-Directives.     (line  18)
   24792 * hilo pseudo-op, V850:                  V850 Opcodes.        (line  55)
   24793 * HPPA directives not supported:         HPPA Directives.     (line  11)
   24794 * HPPA floating point (IEEE):            HPPA Floating Point. (line   6)
   24795 * HPPA Syntax:                           HPPA Options.        (line   8)
   24796 * HPPA-only directives:                  HPPA Directives.     (line  24)
   24797 * hword directive:                       hword.               (line   6)
   24798 * i370 support:                          ESA/390-Dependent.   (line   6)
   24799 * i386 16-bit code:                      i386-16bit.          (line   6)
   24800 * i386 arch directive:                   i386-Arch.           (line   6)
   24801 * i386 att_syntax pseudo op:             i386-Variations.     (line   6)
   24802 * i386 conversion instructions:          i386-Mnemonics.      (line  37)
   24803 * i386 floating point:                   i386-Float.          (line   6)
   24804 * i386 immediate operands:               i386-Variations.     (line  15)
   24805 * i386 instruction naming:               i386-Mnemonics.      (line   6)
   24806 * i386 instruction prefixes:             i386-Prefixes.       (line   6)
   24807 * i386 intel_syntax pseudo op:           i386-Variations.     (line   6)
   24808 * i386 jump optimization:                i386-Jumps.          (line   6)
   24809 * i386 jump, call, return:               i386-Variations.     (line  41)
   24810 * i386 jump/call operands:               i386-Variations.     (line  15)
   24811 * i386 line comment character:           i386-Chars.          (line   6)
   24812 * i386 line separator:                   i386-Chars.          (line  18)
   24813 * i386 memory references:                i386-Memory.         (line   6)
   24814 * i386 mnemonic compatibility:           i386-Mnemonics.      (line  62)
   24815 * i386 mul, imul instructions:           i386-Notes.          (line   6)
   24816 * i386 options:                          i386-Options.        (line   6)
   24817 * i386 register operands:                i386-Variations.     (line  15)
   24818 * i386 registers:                        i386-Regs.           (line   6)
   24819 * i386 sections:                         i386-Variations.     (line  47)
   24820 * i386 size suffixes:                    i386-Variations.     (line  29)
   24821 * i386 source, destination operands:     i386-Variations.     (line  22)
   24822 * i386 support:                          i386-Dependent.      (line   6)
   24823 * i386 syntax compatibility:             i386-Variations.     (line   6)
   24824 * i80386 support:                        i386-Dependent.      (line   6)
   24825 * i860 line comment character:           i860-Chars.          (line   6)
   24826 * i860 line separator:                   i860-Chars.          (line  14)
   24827 * i860 machine directives:               Directives-i860.     (line   6)
   24828 * i860 opcodes:                          Opcodes for i860.    (line   6)
   24829 * i860 support:                          i860-Dependent.      (line   6)
   24830 * i960 architecture options:             Options-i960.        (line   6)
   24831 * i960 branch recording:                 Options-i960.        (line  22)
   24832 * i960 callj pseudo-opcode:              callj-i960.          (line   6)
   24833 * i960 compare and jump expansions:      Compare-and-branch-i960.
   24834                                                               (line  13)
   24835 * i960 compare/branch instructions:      Compare-and-branch-i960.
   24836                                                               (line   6)
   24837 * i960 floating point (IEEE):            Floating Point-i960. (line   6)
   24838 * i960 line comment character:           i960-Chars.          (line   6)
   24839 * i960 line separator:                   i960-Chars.          (line  14)
   24840 * i960 machine directives:               Directives-i960.     (line   6)
   24841 * i960 opcodes:                          Opcodes for i960.    (line   6)
   24842 * i960 options:                          Options-i960.        (line   6)
   24843 * i960 support:                          i960-Dependent.      (line   6)
   24844 * IA-64 line comment character:          IA-64-Chars.         (line   6)
   24845 * IA-64 line separator:                  IA-64-Chars.         (line   8)
   24846 * IA-64 options:                         IA-64 Options.       (line   6)
   24847 * IA-64 Processor-status-Register bit names: IA-64-Bits.      (line   6)
   24848 * IA-64 registers:                       IA-64-Regs.          (line   6)
   24849 * IA-64 relocations:                     IA-64-Relocs.        (line   6)
   24850 * IA-64 support:                         IA-64-Dependent.     (line   6)
   24851 * IA-64 Syntax:                          IA-64 Options.       (line  87)
   24852 * ident directive:                       Ident.               (line   6)
   24853 * identifiers, ARM:                      ARM-Chars.           (line  19)
   24854 * identifiers, MSP 430:                  MSP430-Chars.        (line  17)
   24855 * if directive:                          If.                  (line   6)
   24856 * ifb directive:                         If.                  (line  21)
   24857 * ifc directive:                         If.                  (line  25)
   24858 * ifdef directive:                       If.                  (line  16)
   24859 * ifeq directive:                        If.                  (line  33)
   24860 * ifeqs directive:                       If.                  (line  36)
   24861 * ifge directive:                        If.                  (line  40)
   24862 * ifgt directive:                        If.                  (line  44)
   24863 * ifle directive:                        If.                  (line  48)
   24864 * iflt directive:                        If.                  (line  52)
   24865 * ifnb directive:                        If.                  (line  56)
   24866 * ifnc directive:                        If.                  (line  61)
   24867 * ifndef directive:                      If.                  (line  65)
   24868 * ifne directive:                        If.                  (line  72)
   24869 * ifnes directive:                       If.                  (line  76)
   24870 * ifnotdef directive:                    If.                  (line  65)
   24871 * immediate character, AArch64:          AArch64-Chars.       (line  13)
   24872 * immediate character, ARM:              ARM-Chars.           (line  17)
   24873 * immediate character, M680x0:           M68K-Chars.          (line  13)
   24874 * immediate character, VAX:              VAX-operands.        (line   6)
   24875 * immediate fields, relaxation:          Xtensa Immediate Relaxation.
   24876                                                               (line   6)
   24877 * immediate operands, i386:              i386-Variations.     (line  15)
   24878 * immediate operands, x86-64:            i386-Variations.     (line  15)
   24879 * imul instruction, i386:                i386-Notes.          (line   6)
   24880 * imul instruction, x86-64:              i386-Notes.          (line   6)
   24881 * incbin directive:                      Incbin.              (line   6)
   24882 * include directive:                     Include.             (line   6)
   24883 * include directive search path:         I.                   (line   6)
   24884 * indirect character, VAX:               VAX-operands.        (line   9)
   24885 * infix operators:                       Infix Ops.           (line   6)
   24886 * inhibiting interrupts, i386:           i386-Prefixes.       (line  36)
   24887 * input:                                 Input Files.         (line   6)
   24888 * input file linenumbers:                Input Files.         (line  35)
   24889 * instruction aliases, s390:             s390 Aliases.        (line   6)
   24890 * instruction bundle:                    Bundle directives.   (line   6)
   24891 * instruction expansion, CRIS:           CRIS-Expand.         (line   6)
   24892 * instruction expansion, MMIX:           MMIX-Expand.         (line   6)
   24893 * instruction formats, s390:             s390 Formats.        (line   6)
   24894 * instruction marker, s390:              s390 Instruction Marker.
   24895                                                               (line   6)
   24896 * instruction mnemonics, s390:           s390 Mnemonics.      (line   6)
   24897 * instruction naming, i386:              i386-Mnemonics.      (line   6)
   24898 * instruction naming, x86-64:            i386-Mnemonics.      (line   6)
   24899 * instruction operand modifier, s390:    s390 Operand Modifier.
   24900                                                               (line   6)
   24901 * instruction operands, s390:            s390 Operands.       (line   6)
   24902 * instruction prefixes, i386:            i386-Prefixes.       (line   6)
   24903 * instruction set, M680x0:               M68K-opcodes.        (line   6)
   24904 * instruction set, M68HC11:              M68HC11-opcodes.     (line   6)
   24905 * instruction set, XGATE:                XGATE-opcodes.       (line   6)
   24906 * instruction summary, AVR:              AVR Opcodes.         (line   6)
   24907 * instruction summary, D10V:             D10V-Opcodes.        (line   6)
   24908 * instruction summary, D30V:             D30V-Opcodes.        (line   6)
   24909 * instruction summary, H8/300:           H8/300 Opcodes.      (line   6)
   24910 * instruction summary, LM32:             LM32 Opcodes.        (line   6)
   24911 * instruction summary, SH:               SH Opcodes.          (line   6)
   24912 * instruction summary, SH64:             SH64 Opcodes.        (line   6)
   24913 * instruction summary, Z8000:            Z8000 Opcodes.       (line   6)
   24914 * instruction syntax, s390:              s390 Syntax.         (line   6)
   24915 * instructions and directives:           Statements.          (line  20)
   24916 * int directive:                         Int.                 (line   6)
   24917 * int directive, H8/300:                 H8/300 Directives.   (line   6)
   24918 * int directive, i386:                   i386-Float.          (line  21)
   24919 * int directive, TIC54X:                 TIC54X-Directives.   (line 111)
   24920 * int directive, x86-64:                 i386-Float.          (line  21)
   24921 * integer expressions:                   Integer Exprs.       (line   6)
   24922 * integer, 16-byte:                      Octa.                (line   6)
   24923 * integer, 8-byte:                       Quad.                (line   9)
   24924 * integers:                              Integers.            (line   6)
   24925 * integers, 16-bit:                      hword.               (line   6)
   24926 * integers, 32-bit:                      Int.                 (line   6)
   24927 * integers, binary:                      Integers.            (line   6)
   24928 * integers, decimal:                     Integers.            (line  12)
   24929 * integers, hexadecimal:                 Integers.            (line  15)
   24930 * integers, octal:                       Integers.            (line   9)
   24931 * integers, one byte:                    Byte.                (line   6)
   24932 * intel_syntax pseudo op, i386:          i386-Variations.     (line   6)
   24933 * intel_syntax pseudo op, x86-64:        i386-Variations.     (line   6)
   24934 * internal assembler sections:           As Sections.         (line   6)
   24935 * internal directive:                    Internal.            (line   6)
   24936 * invalid input:                         Bug Criteria.        (line  14)
   24937 * invocation summary:                    Overview.            (line   6)
   24938 * IP2K architecture options:             IP2K-Opts.           (line   9)
   24939 * IP2K line comment character:           IP2K-Chars.          (line   6)
   24940 * IP2K line separator:                   IP2K-Chars.          (line  14)
   24941 * IP2K options:                          IP2K-Opts.           (line   6)
   24942 * IP2K support:                          IP2K-Dependent.      (line   6)
   24943 * irp directive:                         Irp.                 (line   6)
   24944 * irpc directive:                        Irpc.                (line   6)
   24945 * ISA options, SH64:                     SH64 Options.        (line   6)
   24946 * joining text and data sections:        R.                   (line   6)
   24947 * jump instructions, i386:               i386-Mnemonics.      (line  56)
   24948 * jump instructions, relaxation:         Xtensa Jump Relaxation.
   24949                                                               (line   6)
   24950 * jump instructions, x86-64:             i386-Mnemonics.      (line  56)
   24951 * jump optimization, i386:               i386-Jumps.          (line   6)
   24952 * jump optimization, x86-64:             i386-Jumps.          (line   6)
   24953 * jump/call operands, i386:              i386-Variations.     (line  15)
   24954 * jump/call operands, x86-64:            i386-Variations.     (line  15)
   24955 * L16SI instructions, relaxation:        Xtensa Immediate Relaxation.
   24956                                                               (line  23)
   24957 * L16UI instructions, relaxation:        Xtensa Immediate Relaxation.
   24958                                                               (line  23)
   24959 * L32I instructions, relaxation:         Xtensa Immediate Relaxation.
   24960                                                               (line  23)
   24961 * L8UI instructions, relaxation:         Xtensa Immediate Relaxation.
   24962                                                               (line  23)
   24963 * label (:):                             Statements.          (line  31)
   24964 * label directive, TIC54X:               TIC54X-Directives.   (line 123)
   24965 * labels:                                Labels.              (line   6)
   24966 * lcomm directive:                       Lcomm.               (line   6)
   24967 * lcomm directive, COFF:                 i386-Directives.     (line   6)
   24968 * ld:                                    Object.              (line  15)
   24969 * ldouble directive M680x0:              M68K-Float.          (line  17)
   24970 * ldouble directive M68HC11:             M68HC11-Float.       (line  17)
   24971 * ldouble directive XGATE:               XGATE-Float.         (line  16)
   24972 * ldouble directive, TIC54X:             TIC54X-Directives.   (line  64)
   24973 * LDR reg,=<expr> pseudo op, AArch64:    AArch64 Opcodes.     (line   9)
   24974 * LDR reg,=<label> pseudo op, ARM:       ARM Opcodes.         (line  15)
   24975 * leafproc directive, i960:              Directives-i960.     (line  18)
   24976 * length directive, TIC54X:              TIC54X-Directives.   (line 127)
   24977 * length of symbols:                     Symbol Intro.        (line  14)
   24978 * lflags directive (ignored):            Lflags.              (line   6)
   24979 * line comment character:                Comments.            (line  19)
   24980 * line comment character, AArch64:       AArch64-Chars.       (line   6)
   24981 * line comment character, Alpha:         Alpha-Chars.         (line   6)
   24982 * line comment character, ARC:           ARC-Chars.           (line   6)
   24983 * line comment character, ARM:           ARM-Chars.           (line   6)
   24984 * line comment character, AVR:           AVR-Chars.           (line   6)
   24985 * line comment character, CR16:          CR16-Chars.          (line   6)
   24986 * line comment character, D10V:          D10V-Chars.          (line   6)
   24987 * line comment character, D30V:          D30V-Chars.          (line   6)
   24988 * line comment character, Epiphany:      Epiphany-Chars.      (line   6)
   24989 * line comment character, H8/300:        H8/300-Chars.        (line   6)
   24990 * line comment character, i386:          i386-Chars.          (line   6)
   24991 * line comment character, i860:          i860-Chars.          (line   6)
   24992 * line comment character, i960:          i960-Chars.          (line   6)
   24993 * line comment character, IA-64:         IA-64-Chars.         (line   6)
   24994 * line comment character, IP2K:          IP2K-Chars.          (line   6)
   24995 * line comment character, LM32:          LM32-Chars.          (line   6)
   24996 * line comment character, M32C:          M32C-Chars.          (line   6)
   24997 * line comment character, M680x0:        M68K-Chars.          (line   6)
   24998 * line comment character, M68HC11:       M68HC11-Syntax.      (line  17)
   24999 * line comment character, Meta:          Meta-Chars.          (line   6)
   25000 * line comment character, MicroBlaze:    MicroBlaze-Chars.    (line   6)
   25001 * line comment character, MIPS:          MIPS-Chars.          (line   6)
   25002 * line comment character, MSP 430:       MSP430-Chars.        (line   6)
   25003 * line comment character, Nios II:       Nios II Chars.       (line   6)
   25004 * line comment character, NS32K:         NS32K-Chars.         (line   6)
   25005 * line comment character, PJ:            PJ-Chars.            (line   6)
   25006 * line comment character, PowerPC:       PowerPC-Chars.       (line   6)
   25007 * line comment character, RL78:          RL78-Chars.          (line   6)
   25008 * line comment character, RX:            RX-Chars.            (line   6)
   25009 * line comment character, s390:          s390 Characters.     (line   6)
   25010 * line comment character, SCORE:         SCORE-Chars.         (line   6)
   25011 * line comment character, SH:            SH-Chars.            (line   6)
   25012 * line comment character, SH64:          SH64-Chars.          (line   6)
   25013 * line comment character, Sparc:         Sparc-Chars.         (line   6)
   25014 * line comment character, TIC54X:        TIC54X-Chars.        (line   6)
   25015 * line comment character, TIC6X:         TIC6X Syntax.        (line   6)
   25016 * line comment character, V850:          V850-Chars.          (line   6)
   25017 * line comment character, VAX:           VAX-Chars.           (line   6)
   25018 * line comment character, XGATE:         XGATE-Syntax.        (line  16)
   25019 * line comment character, XStormy16:     XStormy16-Chars.     (line   6)
   25020 * line comment character, Z80:           Z80-Chars.           (line   6)
   25021 * line comment character, Z8000:         Z8000-Chars.         (line   6)
   25022 * line comment characters, CRIS:         CRIS-Chars.          (line   6)
   25023 * line comment characters, MMIX:         MMIX-Chars.          (line   6)
   25024 * line directive:                        Line.                (line   6)
   25025 * line directive, MSP 430:               MSP430 Directives.   (line  14)
   25026 * line numbers, in input files:          Input Files.         (line  35)
   25027 * line numbers, in warnings/errors:      Errors.              (line  16)
   25028 * line separator character:              Statements.          (line   6)
   25029 * line separator character, Nios II:     Nios II Chars.       (line   6)
   25030 * line separator, AArch64:               AArch64-Chars.       (line  10)
   25031 * line separator, Alpha:                 Alpha-Chars.         (line  11)
   25032 * line separator, ARC:                   ARC-Chars.           (line  12)
   25033 * line separator, ARM:                   ARM-Chars.           (line  14)
   25034 * line separator, AVR:                   AVR-Chars.           (line  14)
   25035 * line separator, CR16:                  CR16-Chars.          (line  13)
   25036 * line separator, Epiphany:              Epiphany-Chars.      (line  14)
   25037 * line separator, H8/300:                H8/300-Chars.        (line   8)
   25038 * line separator, i386:                  i386-Chars.          (line  18)
   25039 * line separator, i860:                  i860-Chars.          (line  14)
   25040 * line separator, i960:                  i960-Chars.          (line  14)
   25041 * line separator, IA-64:                 IA-64-Chars.         (line   8)
   25042 * line separator, IP2K:                  IP2K-Chars.          (line  14)
   25043 * line separator, LM32:                  LM32-Chars.          (line  12)
   25044 * line separator, M32C:                  M32C-Chars.          (line  14)
   25045 * line separator, M680x0:                M68K-Chars.          (line  20)
   25046 * line separator, M68HC11:               M68HC11-Syntax.      (line  27)
   25047 * line separator, Meta:                  Meta-Chars.          (line   8)
   25048 * line separator, MicroBlaze:            MicroBlaze-Chars.    (line  14)
   25049 * line separator, MIPS:                  MIPS-Chars.          (line  14)
   25050 * line separator, MSP 430:               MSP430-Chars.        (line  14)
   25051 * line separator, NS32K:                 NS32K-Chars.         (line  18)
   25052 * line separator, PJ:                    PJ-Chars.            (line  14)
   25053 * line separator, PowerPC:               PowerPC-Chars.       (line  18)
   25054 * line separator, RL78:                  RL78-Chars.          (line  14)
   25055 * line separator, RX:                    RX-Chars.            (line  14)
   25056 * line separator, s390:                  s390 Characters.     (line  13)
   25057 * line separator, SCORE:                 SCORE-Chars.         (line  14)
   25058 * line separator, SH:                    SH-Chars.            (line   8)
   25059 * line separator, SH64:                  SH64-Chars.          (line  13)
   25060 * line separator, Sparc:                 Sparc-Chars.         (line  14)
   25061 * line separator, TIC54X:                TIC54X-Chars.        (line  17)
   25062 * line separator, TIC6X:                 TIC6X Syntax.        (line  13)
   25063 * line separator, V850:                  V850-Chars.          (line  13)
   25064 * line separator, VAX:                   VAX-Chars.           (line  14)
   25065 * line separator, XGATE:                 XGATE-Syntax.        (line  26)
   25066 * line separator, XStormy16:             XStormy16-Chars.     (line  14)
   25067 * line separator, Z80:                   Z80-Chars.           (line  13)
   25068 * line separator, Z8000:                 Z8000-Chars.         (line  13)
   25069 * lines starting with #:                 Comments.            (line  33)
   25070 * linker:                                Object.              (line  15)
   25071 * linker, and assembler:                 Secs Background.     (line  10)
   25072 * linkonce directive:                    Linkonce.            (line   6)
   25073 * list directive:                        List.                (line   6)
   25074 * list directive, TIC54X:                TIC54X-Directives.   (line 131)
   25075 * listing control, turning off:          Nolist.              (line   6)
   25076 * listing control, turning on:           List.                (line   6)
   25077 * listing control: new page:             Eject.               (line   6)
   25078 * listing control: paper size:           Psize.               (line   6)
   25079 * listing control: subtitle:             Sbttl.               (line   6)
   25080 * listing control: title line:           Title.               (line   6)
   25081 * listings, enabling:                    a.                   (line   6)
   25082 * literal directive:                     Literal Directive.   (line   6)
   25083 * literal pool entries, s390:            s390 Literal Pool Entries.
   25084                                                               (line   6)
   25085 * literal_position directive:            Literal Position Directive.
   25086                                                               (line   6)
   25087 * literal_prefix directive:              Literal Prefix Directive.
   25088                                                               (line   6)
   25089 * little endian output, MIPS:            Overview.            (line 767)
   25090 * little endian output, PJ:              Overview.            (line 670)
   25091 * little-endian output, MIPS:            MIPS Options.        (line  13)
   25092 * little-endian output, TIC6X:           TIC6X Options.       (line  46)
   25093 * LM32 line comment character:           LM32-Chars.          (line   6)
   25094 * LM32 line separator:                   LM32-Chars.          (line  12)
   25095 * LM32 modifiers:                        LM32-Modifiers.      (line   6)
   25096 * LM32 opcode summary:                   LM32 Opcodes.        (line   6)
   25097 * LM32 options (none):                   LM32 Options.        (line   6)
   25098 * LM32 register names:                   LM32-Regs.           (line   6)
   25099 * LM32 support:                          LM32-Dependent.      (line   6)
   25100 * ln directive:                          Ln.                  (line   6)
   25101 * lo directive, Nios II:                 Nios II Relocations. (line  23)
   25102 * lo pseudo-op, V850:                    V850 Opcodes.        (line  22)
   25103 * loc directive:                         Loc.                 (line   6)
   25104 * loc_mark_labels directive:             Loc_mark_labels.     (line   6)
   25105 * local common symbols:                  Lcomm.               (line   6)
   25106 * local directive:                       Local.               (line   6)
   25107 * local labels:                          Symbol Names.        (line  40)
   25108 * local symbol names:                    Symbol Names.        (line  27)
   25109 * local symbols, retaining in output:    L.                   (line   6)
   25110 * location counter:                      Dot.                 (line   6)
   25111 * location counter, advancing:           Org.                 (line   6)
   25112 * location counter, Z80:                 Z80-Chars.           (line  15)
   25113 * logical file name:                     File.                (line  13)
   25114 * logical line number:                   Line.                (line   6)
   25115 * logical line numbers:                  Comments.            (line  33)
   25116 * long directive:                        Long.                (line   6)
   25117 * long directive, ARC:                   ARC Directives.      (line 156)
   25118 * long directive, i386:                  i386-Float.          (line  21)
   25119 * long directive, TIC54X:                TIC54X-Directives.   (line 135)
   25120 * long directive, x86-64:                i386-Float.          (line  21)
   25121 * longcall pseudo-op, V850:              V850 Opcodes.        (line 123)
   25122 * longcalls directive:                   Longcalls Directive. (line   6)
   25123 * longjump pseudo-op, V850:              V850 Opcodes.        (line 129)
   25124 * loop directive, TIC54X:                TIC54X-Directives.   (line 143)
   25125 * LOOP instructions, alignment:          Xtensa Automatic Alignment.
   25126                                                               (line   6)
   25127 * low directive, M32R:                   M32R-Directives.     (line   9)
   25128 * lp register, V850:                     V850-Regs.           (line  98)
   25129 * lval:                                  Z8000 Directives.    (line  27)
   25130 * LWP, i386:                             i386-LWP.            (line   6)
   25131 * LWP, x86-64:                           i386-LWP.            (line   6)
   25132 * M16C architecture option:              M32C-Opts.           (line  12)
   25133 * M32C architecture option:              M32C-Opts.           (line   9)
   25134 * M32C line comment character:           M32C-Chars.          (line   6)
   25135 * M32C line separator:                   M32C-Chars.          (line  14)
   25136 * M32C modifiers:                        M32C-Modifiers.      (line   6)
   25137 * M32C options:                          M32C-Opts.           (line   6)
   25138 * M32C support:                          M32C-Dependent.      (line   6)
   25139 * M32R architecture options:             M32R-Opts.           (line  17)
   25140 * M32R directives:                       M32R-Directives.     (line   6)
   25141 * M32R options:                          M32R-Opts.           (line   6)
   25142 * M32R support:                          M32R-Dependent.      (line   6)
   25143 * M32R warnings:                         M32R-Warnings.       (line   6)
   25144 * M680x0 addressing modes:               M68K-Syntax.         (line  21)
   25145 * M680x0 architecture options:           M68K-Opts.           (line  98)
   25146 * M680x0 branch improvement:             M68K-Branch.         (line   6)
   25147 * M680x0 directives:                     M68K-Directives.     (line   6)
   25148 * M680x0 floating point:                 M68K-Float.          (line   6)
   25149 * M680x0 immediate character:            M68K-Chars.          (line  13)
   25150 * M680x0 line comment character:         M68K-Chars.          (line   6)
   25151 * M680x0 line separator:                 M68K-Chars.          (line  20)
   25152 * M680x0 opcodes:                        M68K-opcodes.        (line   6)
   25153 * M680x0 options:                        M68K-Opts.           (line   6)
   25154 * M680x0 pseudo-opcodes:                 M68K-Branch.         (line   6)
   25155 * M680x0 size modifiers:                 M68K-Syntax.         (line   8)
   25156 * M680x0 support:                        M68K-Dependent.      (line   6)
   25157 * M680x0 syntax:                         M68K-Syntax.         (line   8)
   25158 * M68HC11 addressing modes:              M68HC11-Syntax.      (line  30)
   25159 * M68HC11 and M68HC12 support:           M68HC11-Dependent.   (line   6)
   25160 * M68HC11 assembler directive .far:      M68HC11-Directives.  (line  20)
   25161 * M68HC11 assembler directive .interrupt: M68HC11-Directives. (line  26)
   25162 * M68HC11 assembler directive .mode:     M68HC11-Directives.  (line  16)
   25163 * M68HC11 assembler directive .relax:    M68HC11-Directives.  (line  10)
   25164 * M68HC11 assembler directive .xrefb:    M68HC11-Directives.  (line  31)
   25165 * M68HC11 assembler directives:          M68HC11-Directives.  (line   6)
   25166 * M68HC11 branch improvement:            M68HC11-Branch.      (line   6)
   25167 * M68HC11 floating point:                M68HC11-Float.       (line   6)
   25168 * M68HC11 line comment character:        M68HC11-Syntax.      (line  17)
   25169 * M68HC11 line separator:                M68HC11-Syntax.      (line  27)
   25170 * M68HC11 modifiers:                     M68HC11-Modifiers.   (line   6)
   25171 * M68HC11 opcodes:                       M68HC11-opcodes.     (line   6)
   25172 * M68HC11 options:                       M68HC11-Opts.        (line   6)
   25173 * M68HC11 pseudo-opcodes:                M68HC11-Branch.      (line   6)
   25174 * M68HC11 syntax:                        M68HC11-Syntax.      (line   6)
   25175 * M68HC12 assembler directives:          M68HC11-Directives.  (line   6)
   25176 * machine dependencies:                  Machine Dependencies.
   25177                                                               (line   6)
   25178 * machine directives, AArch64:           AArch64 Directives.  (line   6)
   25179 * machine directives, ARC:               ARC Directives.      (line   6)
   25180 * machine directives, ARM:               ARM Directives.      (line   6)
   25181 * machine directives, H8/300 (none):     H8/300 Directives.   (line   6)
   25182 * machine directives, i860:              Directives-i860.     (line   6)
   25183 * machine directives, i960:              Directives-i960.     (line   6)
   25184 * machine directives, MSP 430:           MSP430 Directives.   (line   6)
   25185 * machine directives, Nios II:           Nios II Directives.  (line   6)
   25186 * machine directives, SH:                SH Directives.       (line   6)
   25187 * machine directives, SH64:              SH64 Directives.     (line   9)
   25188 * machine directives, SPARC:             Sparc-Directives.    (line   6)
   25189 * machine directives, TIC54X:            TIC54X-Directives.   (line   6)
   25190 * machine directives, TIC6X:             TIC6X Directives.    (line   6)
   25191 * machine directives, TILE-Gx:           TILE-Gx Directives.  (line   6)
   25192 * machine directives, TILEPro:           TILEPro Directives.  (line   6)
   25193 * machine directives, V850:              V850 Directives.     (line   6)
   25194 * machine directives, VAX:               VAX-directives.      (line   6)
   25195 * machine directives, x86:               i386-Directives.     (line   6)
   25196 * machine directives, XStormy16:         XStormy16 Directives.
   25197                                                               (line   6)
   25198 * machine independent directives:        Pseudo Ops.          (line   6)
   25199 * machine instructions (not covered):    Manual.              (line  14)
   25200 * machine relocations, Nios II:          Nios II Relocations. (line   6)
   25201 * machine-independent syntax:            Syntax.              (line   6)
   25202 * macro directive:                       Macro.               (line  28)
   25203 * macro directive, TIC54X:               TIC54X-Directives.   (line 153)
   25204 * macros:                                Macro.               (line   6)
   25205 * macros, count executed:                Macro.               (line 143)
   25206 * Macros, MSP 430:                       MSP430-Macros.       (line   6)
   25207 * macros, TIC54X:                        TIC54X-Macros.       (line   6)
   25208 * make rules:                            MD.                  (line   6)
   25209 * manual, structure and purpose:         Manual.              (line   6)
   25210 * math builtins, TIC54X:                 TIC54X-Builtins.     (line   6)
   25211 * Maximum number of continuation lines:  listing.             (line  34)
   25212 * memory references, i386:               i386-Memory.         (line   6)
   25213 * memory references, x86-64:             i386-Memory.         (line   6)
   25214 * memory-mapped registers, TIC54X:       TIC54X-MMRegs.       (line   6)
   25215 * merging text and data sections:        R.                   (line   6)
   25216 * messages from assembler:               Errors.              (line   6)
   25217 * Meta architectures:                    Meta Options.        (line   6)
   25218 * Meta line comment character:           Meta-Chars.          (line   6)
   25219 * Meta line separator:                   Meta-Chars.          (line   8)
   25220 * Meta options:                          Meta Options.        (line   6)
   25221 * Meta registers:                        Meta-Regs.           (line   6)
   25222 * Meta support:                          Meta-Dependent.      (line   6)
   25223 * MicroBlaze architectures:              MicroBlaze-Dependent.
   25224                                                               (line   6)
   25225 * MicroBlaze directives:                 MicroBlaze Directives.
   25226                                                               (line   6)
   25227 * MicroBlaze line comment character:     MicroBlaze-Chars.    (line   6)
   25228 * MicroBlaze line separator:             MicroBlaze-Chars.    (line  14)
   25229 * MicroBlaze support:                    MicroBlaze-Dependent.
   25230                                                               (line  13)
   25231 * minus, permitted arguments:            Infix Ops.           (line  49)
   25232 * MIPS 32-bit microMIPS instruction generation override: MIPS assembly options.
   25233                                                               (line  18)
   25234 * MIPS architecture options:             MIPS Options.        (line  29)
   25235 * MIPS big-endian output:                MIPS Options.        (line  13)
   25236 * MIPS CPU override:                     MIPS ISA.            (line  19)
   25237 * MIPS directives to override command line options: MIPS assembly options.
   25238                                                               (line   6)
   25239 * MIPS DSP Release 1 instruction generation override: MIPS ASE Instruction Generation Overrides.
   25240                                                               (line  21)
   25241 * MIPS DSP Release 2 instruction generation override: MIPS ASE Instruction Generation Overrides.
   25242                                                               (line  26)
   25243 * MIPS endianness:                       Overview.            (line 764)
   25244 * MIPS eXtended Physical Address (XPA) instruction generation override: MIPS ASE Instruction Generation Overrides.
   25245                                                               (line  52)
   25246 * MIPS IEEE 754 NaN data encoding selection: MIPS NaN Encodings.
   25247                                                               (line   6)
   25248 * MIPS ISA:                              Overview.            (line 770)
   25249 * MIPS ISA override:                     MIPS ISA.            (line   6)
   25250 * MIPS line comment character:           MIPS-Chars.          (line   6)
   25251 * MIPS line separator:                   MIPS-Chars.          (line  14)
   25252 * MIPS little-endian output:             MIPS Options.        (line  13)
   25253 * MIPS MCU instruction generation override: MIPS ASE Instruction Generation Overrides.
   25254                                                               (line  37)
   25255 * MIPS MDMX instruction generation override: MIPS ASE Instruction Generation Overrides.
   25256                                                               (line  16)
   25257 * MIPS MIPS-3D instruction generation override: MIPS ASE Instruction Generation Overrides.
   25258                                                               (line   6)
   25259 * MIPS MT instruction generation override: MIPS ASE Instruction Generation Overrides.
   25260                                                               (line  32)
   25261 * MIPS option stack:                     MIPS Option Stack.   (line   6)
   25262 * MIPS processor:                        MIPS-Dependent.      (line   6)
   25263 * MIPS SIMD Architecture instruction generation override: MIPS ASE Instruction Generation Overrides.
   25264                                                               (line  42)
   25265 * MIT:                                   M68K-Syntax.         (line   6)
   25266 * mlib directive, TIC54X:                TIC54X-Directives.   (line 159)
   25267 * mlist directive, TIC54X:               TIC54X-Directives.   (line 164)
   25268 * MMIX assembler directive BSPEC:        MMIX-Pseudos.        (line 131)
   25269 * MMIX assembler directive BYTE:         MMIX-Pseudos.        (line  97)
   25270 * MMIX assembler directive ESPEC:        MMIX-Pseudos.        (line 131)
   25271 * MMIX assembler directive GREG:         MMIX-Pseudos.        (line  50)
   25272 * MMIX assembler directive IS:           MMIX-Pseudos.        (line  42)
   25273 * MMIX assembler directive LOC:          MMIX-Pseudos.        (line   7)
   25274 * MMIX assembler directive LOCAL:        MMIX-Pseudos.        (line  28)
   25275 * MMIX assembler directive OCTA:         MMIX-Pseudos.        (line 108)
   25276 * MMIX assembler directive PREFIX:       MMIX-Pseudos.        (line 120)
   25277 * MMIX assembler directive TETRA:        MMIX-Pseudos.        (line 108)
   25278 * MMIX assembler directive WYDE:         MMIX-Pseudos.        (line 108)
   25279 * MMIX assembler directives:             MMIX-Pseudos.        (line   6)
   25280 * MMIX line comment characters:          MMIX-Chars.          (line   6)
   25281 * MMIX options:                          MMIX-Opts.           (line   6)
   25282 * MMIX pseudo-op BSPEC:                  MMIX-Pseudos.        (line 131)
   25283 * MMIX pseudo-op BYTE:                   MMIX-Pseudos.        (line  97)
   25284 * MMIX pseudo-op ESPEC:                  MMIX-Pseudos.        (line 131)
   25285 * MMIX pseudo-op GREG:                   MMIX-Pseudos.        (line  50)
   25286 * MMIX pseudo-op IS:                     MMIX-Pseudos.        (line  42)
   25287 * MMIX pseudo-op LOC:                    MMIX-Pseudos.        (line   7)
   25288 * MMIX pseudo-op LOCAL:                  MMIX-Pseudos.        (line  28)
   25289 * MMIX pseudo-op OCTA:                   MMIX-Pseudos.        (line 108)
   25290 * MMIX pseudo-op PREFIX:                 MMIX-Pseudos.        (line 120)
   25291 * MMIX pseudo-op TETRA:                  MMIX-Pseudos.        (line 108)
   25292 * MMIX pseudo-op WYDE:                   MMIX-Pseudos.        (line 108)
   25293 * MMIX pseudo-ops:                       MMIX-Pseudos.        (line   6)
   25294 * MMIX register names:                   MMIX-Regs.           (line   6)
   25295 * MMIX support:                          MMIX-Dependent.      (line   6)
   25296 * mmixal differences:                    MMIX-mmixal.         (line   6)
   25297 * mmregs directive, TIC54X:              TIC54X-Directives.   (line 169)
   25298 * mmsg directive, TIC54X:                TIC54X-Directives.   (line  77)
   25299 * MMX, i386:                             i386-SIMD.           (line   6)
   25300 * MMX, x86-64:                           i386-SIMD.           (line   6)
   25301 * mnemonic compatibility, i386:          i386-Mnemonics.      (line  62)
   25302 * mnemonic suffixes, i386:               i386-Variations.     (line  29)
   25303 * mnemonic suffixes, x86-64:             i386-Variations.     (line  29)
   25304 * mnemonics for opcodes, VAX:            VAX-opcodes.         (line   6)
   25305 * mnemonics, AVR:                        AVR Opcodes.         (line   6)
   25306 * mnemonics, D10V:                       D10V-Opcodes.        (line   6)
   25307 * mnemonics, D30V:                       D30V-Opcodes.        (line   6)
   25308 * mnemonics, H8/300:                     H8/300 Opcodes.      (line   6)
   25309 * mnemonics, LM32:                       LM32 Opcodes.        (line   6)
   25310 * mnemonics, SH:                         SH Opcodes.          (line   6)
   25311 * mnemonics, SH64:                       SH64 Opcodes.        (line   6)
   25312 * mnemonics, Z8000:                      Z8000 Opcodes.       (line   6)
   25313 * mnolist directive, TIC54X:             TIC54X-Directives.   (line 164)
   25314 * modifiers, M32C:                       M32C-Modifiers.      (line   6)
   25315 * Motorola syntax for the 680x0:         M68K-Moto-Syntax.    (line   6)
   25316 * MOVI instructions, relaxation:         Xtensa Immediate Relaxation.
   25317                                                               (line  12)
   25318 * MOVN, MOVZ and MOVK group relocations, AArch64: AArch64-Relocations.
   25319                                                               (line   6)
   25320 * MOVW and MOVT relocations, ARM:        ARM-Relocations.     (line  21)
   25321 * MRI compatibility mode:                M.                   (line   6)
   25322 * mri directive:                         MRI.                 (line   6)
   25323 * MRI mode, temporarily:                 MRI.                 (line   6)
   25324 * MSP 430 floating point (IEEE):         MSP430 Floating Point.
   25325                                                               (line   6)
   25326 * MSP 430 identifiers:                   MSP430-Chars.        (line  17)
   25327 * MSP 430 line comment character:        MSP430-Chars.        (line   6)
   25328 * MSP 430 line separator:                MSP430-Chars.        (line  14)
   25329 * MSP 430 machine directives:            MSP430 Directives.   (line   6)
   25330 * MSP 430 macros:                        MSP430-Macros.       (line   6)
   25331 * MSP 430 opcodes:                       MSP430 Opcodes.      (line   6)
   25332 * MSP 430 options (none):                MSP430 Options.      (line   6)
   25333 * MSP 430 profiling capability:          MSP430 Profiling Capability.
   25334                                                               (line   6)
   25335 * MSP 430 register names:                MSP430-Regs.         (line   6)
   25336 * MSP 430 support:                       MSP430-Dependent.    (line   6)
   25337 * MSP430 Assembler Extensions:           MSP430-Ext.          (line   6)
   25338 * mul instruction, i386:                 i386-Notes.          (line   6)
   25339 * mul instruction, x86-64:               i386-Notes.          (line   6)
   25340 * N32K support:                          NS32K-Dependent.     (line   6)
   25341 * name:                                  Z8000 Directives.    (line  18)
   25342 * named section:                         Section.             (line   6)
   25343 * named sections:                        Ld Sections.         (line   8)
   25344 * names, symbol:                         Symbol Names.        (line   6)
   25345 * naming object file:                    o.                   (line   6)
   25346 * NDS32 options:                         NDS32 Options.       (line   6)
   25347 * NDS32 processor:                       NDS32-Dependent.     (line   6)
   25348 * new page, in listings:                 Eject.               (line   6)
   25349 * newblock directive, TIC54X:            TIC54X-Directives.   (line 175)
   25350 * newline (\n):                          Strings.             (line  21)
   25351 * newline, required at file end:         Statements.          (line  14)
   25352 * Nios II line comment character:        Nios II Chars.       (line   6)
   25353 * Nios II line separator character:      Nios II Chars.       (line   6)
   25354 * Nios II machine directives:            Nios II Directives.  (line   6)
   25355 * Nios II machine relocations:           Nios II Relocations. (line   6)
   25356 * Nios II opcodes:                       Nios II Opcodes.     (line   6)
   25357 * Nios II options:                       Nios II Options.     (line   6)
   25358 * Nios II support:                       NiosII-Dependent.    (line   6)
   25359 * Nios support:                          NiosII-Dependent.    (line   6)
   25360 * no-absolute-literals directive:        Absolute Literals Directive.
   25361                                                               (line   6)
   25362 * no-longcalls directive:                Longcalls Directive. (line   6)
   25363 * no-relax command line option, Nios II: Nios II Options.     (line  20)
   25364 * no-schedule directive:                 Schedule Directive.  (line   6)
   25365 * no-transform directive:                Transform Directive. (line   6)
   25366 * nolist directive:                      Nolist.              (line   6)
   25367 * nolist directive, TIC54X:              TIC54X-Directives.   (line 131)
   25368 * NOP pseudo op, ARM:                    ARM Opcodes.         (line   9)
   25369 * notes for Alpha:                       Alpha Notes.         (line   6)
   25370 * NS32K line comment character:          NS32K-Chars.         (line   6)
   25371 * NS32K line separator:                  NS32K-Chars.         (line  18)
   25372 * null-terminated strings:               Asciz.               (line   6)
   25373 * number constants:                      Numbers.             (line   6)
   25374 * number of macros executed:             Macro.               (line 143)
   25375 * numbered subsections:                  Sub-Sections.        (line   6)
   25376 * numbers, 16-bit:                       hword.               (line   6)
   25377 * numeric values:                        Expressions.         (line   6)
   25378 * nword directive, SPARC:                Sparc-Directives.    (line  20)
   25379 * object attributes:                     Object Attributes.   (line   6)
   25380 * object file:                           Object.              (line   6)
   25381 * object file format:                    Object Formats.      (line   6)
   25382 * object file name:                      o.                   (line   6)
   25383 * object file, after errors:             Z.                   (line   6)
   25384 * obsolescent directives:                Deprecated.          (line   6)
   25385 * octa directive:                        Octa.                (line   6)
   25386 * octal character code (\DDD):           Strings.             (line  30)
   25387 * octal integers:                        Integers.            (line   9)
   25388 * offset directive:                      Offset.              (line   6)
   25389 * offset directive, V850:                V850 Directives.     (line   6)
   25390 * opcode mnemonics, VAX:                 VAX-opcodes.         (line   6)
   25391 * opcode names, TILE-Gx:                 TILE-Gx Opcodes.     (line   6)
   25392 * opcode names, TILEPro:                 TILEPro Opcodes.     (line   6)
   25393 * opcode names, Xtensa:                  Xtensa Opcodes.      (line   6)
   25394 * opcode summary, AVR:                   AVR Opcodes.         (line   6)
   25395 * opcode summary, D10V:                  D10V-Opcodes.        (line   6)
   25396 * opcode summary, D30V:                  D30V-Opcodes.        (line   6)
   25397 * opcode summary, H8/300:                H8/300 Opcodes.      (line   6)
   25398 * opcode summary, LM32:                  LM32 Opcodes.        (line   6)
   25399 * opcode summary, SH:                    SH Opcodes.          (line   6)
   25400 * opcode summary, SH64:                  SH64 Opcodes.        (line   6)
   25401 * opcode summary, Z8000:                 Z8000 Opcodes.       (line   6)
   25402 * opcodes for AArch64:                   AArch64 Opcodes.     (line   6)
   25403 * opcodes for ARC:                       ARC Opcodes.         (line   6)
   25404 * opcodes for ARM:                       ARM Opcodes.         (line   6)
   25405 * opcodes for MSP 430:                   MSP430 Opcodes.      (line   6)
   25406 * opcodes for Nios II:                   Nios II Opcodes.     (line   6)
   25407 * opcodes for V850:                      V850 Opcodes.        (line   6)
   25408 * opcodes, i860:                         Opcodes for i860.    (line   6)
   25409 * opcodes, i960:                         Opcodes for i960.    (line   6)
   25410 * opcodes, M680x0:                       M68K-opcodes.        (line   6)
   25411 * opcodes, M68HC11:                      M68HC11-opcodes.     (line   6)
   25412 * operand delimiters, i386:              i386-Variations.     (line  15)
   25413 * operand delimiters, x86-64:            i386-Variations.     (line  15)
   25414 * operand notation, VAX:                 VAX-operands.        (line   6)
   25415 * operands in expressions:               Arguments.           (line   6)
   25416 * operator precedence:                   Infix Ops.           (line  11)
   25417 * operators, in expressions:             Operators.           (line   6)
   25418 * operators, permitted arguments:        Infix Ops.           (line   6)
   25419 * optimization, D10V:                    Overview.            (line 527)
   25420 * optimization, D30V:                    Overview.            (line 532)
   25421 * optimizations:                         Xtensa Optimizations.
   25422                                                               (line   6)
   25423 * option directive, ARC:                 ARC Directives.      (line 159)
   25424 * option directive, TIC54X:              TIC54X-Directives.   (line 179)
   25425 * option summary:                        Overview.            (line   6)
   25426 * options for AArch64 (none):            AArch64 Options.     (line   6)
   25427 * options for Alpha:                     Alpha Options.       (line   6)
   25428 * options for ARC (none):                ARC Options.         (line   6)
   25429 * options for ARM (none):                ARM Options.         (line   6)
   25430 * options for AVR (none):                AVR Options.         (line   6)
   25431 * options for Blackfin (none):           Blackfin Options.    (line   6)
   25432 * options for i386:                      i386-Options.        (line   6)
   25433 * options for IA-64:                     IA-64 Options.       (line   6)
   25434 * options for LM32 (none):               LM32 Options.        (line   6)
   25435 * options for Meta:                      Meta Options.        (line   6)
   25436 * options for MSP430 (none):             MSP430 Options.      (line   6)
   25437 * options for NDS32:                     NDS32 Options.       (line   6)
   25438 * options for Nios II:                   Nios II Options.     (line   6)
   25439 * options for PDP-11:                    PDP-11-Options.      (line   6)
   25440 * options for PowerPC:                   PowerPC-Opts.        (line   6)
   25441 * options for s390:                      s390 Options.        (line   6)
   25442 * options for SCORE:                     SCORE-Opts.          (line   6)
   25443 * options for SPARC:                     Sparc-Opts.          (line   6)
   25444 * options for TIC6X:                     TIC6X Options.       (line   6)
   25445 * options for V850 (none):               V850 Options.        (line   6)
   25446 * options for VAX/VMS:                   VAX-Opts.            (line  42)
   25447 * options for x86-64:                    i386-Options.        (line   6)
   25448 * options for Z80:                       Z80 Options.         (line   6)
   25449 * options, all versions of assembler:    Invoking.            (line   6)
   25450 * options, command line:                 Command Line.        (line  13)
   25451 * options, CRIS:                         CRIS-Opts.           (line   6)
   25452 * options, D10V:                         D10V-Opts.           (line   6)
   25453 * options, D30V:                         D30V-Opts.           (line   6)
   25454 * options, Epiphany:                     Epiphany Options.    (line   6)
   25455 * options, H8/300:                       H8/300 Options.      (line   6)
   25456 * options, i960:                         Options-i960.        (line   6)
   25457 * options, IP2K:                         IP2K-Opts.           (line   6)
   25458 * options, M32C:                         M32C-Opts.           (line   6)
   25459 * options, M32R:                         M32R-Opts.           (line   6)
   25460 * options, M680x0:                       M68K-Opts.           (line   6)
   25461 * options, M68HC11:                      M68HC11-Opts.        (line   6)
   25462 * options, MMIX:                         MMIX-Opts.           (line   6)
   25463 * options, PJ:                           PJ Options.          (line   6)
   25464 * options, RL78:                         RL78-Opts.           (line   6)
   25465 * options, RX:                           RX-Opts.             (line   6)
   25466 * options, SH:                           SH Options.          (line   6)
   25467 * options, SH64:                         SH64 Options.        (line   6)
   25468 * options, TIC54X:                       TIC54X-Opts.         (line   6)
   25469 * options, XGATE:                        XGATE-Opts.          (line   6)
   25470 * options, Z8000:                        Z8000 Options.       (line   6)
   25471 * org directive:                         Org.                 (line   6)
   25472 * other attribute, of a.out symbol:      Symbol Other.        (line   6)
   25473 * output file:                           Object.              (line   6)
   25474 * p2align directive:                     P2align.             (line   6)
   25475 * p2alignl directive:                    P2align.             (line  28)
   25476 * p2alignw directive:                    P2align.             (line  28)
   25477 * padding the location counter:          Align.               (line   6)
   25478 * padding the location counter given a power of two: P2align. (line   6)
   25479 * padding the location counter given number of bytes: Balign. (line   6)
   25480 * page, in listings:                     Eject.               (line   6)
   25481 * paper size, for listings:              Psize.               (line   6)
   25482 * paths for .include:                    I.                   (line   6)
   25483 * patterns, writing in memory:           Fill.                (line   6)
   25484 * PDP-11 comments:                       PDP-11-Syntax.       (line  16)
   25485 * PDP-11 floating-point register syntax: PDP-11-Syntax.       (line  13)
   25486 * PDP-11 general-purpose register syntax: PDP-11-Syntax.      (line  10)
   25487 * PDP-11 instruction naming:             PDP-11-Mnemonics.    (line   6)
   25488 * PDP-11 line separator:                 PDP-11-Syntax.       (line  19)
   25489 * PDP-11 support:                        PDP-11-Dependent.    (line   6)
   25490 * PDP-11 syntax:                         PDP-11-Syntax.       (line   6)
   25491 * PIC code generation for ARM:           ARM Options.         (line 169)
   25492 * PIC code generation for M32R:          M32R-Opts.           (line  42)
   25493 * PIC selection, MIPS:                   MIPS Options.        (line  21)
   25494 * PJ endianness:                         Overview.            (line 667)
   25495 * PJ line comment character:             PJ-Chars.            (line   6)
   25496 * PJ line separator:                     PJ-Chars.            (line  14)
   25497 * PJ options:                            PJ Options.          (line   6)
   25498 * PJ support:                            PJ-Dependent.        (line   6)
   25499 * plus, permitted arguments:             Infix Ops.           (line  44)
   25500 * popsection directive:                  PopSection.          (line   6)
   25501 * Position-independent code, CRIS:       CRIS-Opts.           (line  27)
   25502 * Position-independent code, symbols in, CRIS: CRIS-Pic.      (line   6)
   25503 * PowerPC architectures:                 PowerPC-Opts.        (line   6)
   25504 * PowerPC directives:                    PowerPC-Pseudo.      (line   6)
   25505 * PowerPC line comment character:        PowerPC-Chars.       (line   6)
   25506 * PowerPC line separator:                PowerPC-Chars.       (line  18)
   25507 * PowerPC options:                       PowerPC-Opts.        (line   6)
   25508 * PowerPC support:                       PPC-Dependent.       (line   6)
   25509 * precedence of operators:               Infix Ops.           (line  11)
   25510 * precision, floating point:             Flonums.             (line   6)
   25511 * prefix operators:                      Prefix Ops.          (line   6)
   25512 * prefixes, i386:                        i386-Prefixes.       (line   6)
   25513 * preprocessing:                         Preprocessing.       (line   6)
   25514 * preprocessing, turning on and off:     Preprocessing.       (line  27)
   25515 * previous directive:                    Previous.            (line   6)
   25516 * primary attributes, COFF symbols:      COFF Symbols.        (line  13)
   25517 * print directive:                       Print.               (line   6)
   25518 * proc directive, SPARC:                 Sparc-Directives.    (line  25)
   25519 * profiler directive, MSP 430:           MSP430 Directives.   (line  26)
   25520 * profiling capability for MSP 430:      MSP430 Profiling Capability.
   25521                                                               (line   6)
   25522 * protected directive:                   Protected.           (line   6)
   25523 * pseudo-op .arch, CRIS:                 CRIS-Pseudos.        (line  45)
   25524 * pseudo-op .dword, CRIS:                CRIS-Pseudos.        (line  12)
   25525 * pseudo-op .syntax, CRIS:               CRIS-Pseudos.        (line  17)
   25526 * pseudo-op BSPEC, MMIX:                 MMIX-Pseudos.        (line 131)
   25527 * pseudo-op BYTE, MMIX:                  MMIX-Pseudos.        (line  97)
   25528 * pseudo-op ESPEC, MMIX:                 MMIX-Pseudos.        (line 131)
   25529 * pseudo-op GREG, MMIX:                  MMIX-Pseudos.        (line  50)
   25530 * pseudo-op IS, MMIX:                    MMIX-Pseudos.        (line  42)
   25531 * pseudo-op LOC, MMIX:                   MMIX-Pseudos.        (line   7)
   25532 * pseudo-op LOCAL, MMIX:                 MMIX-Pseudos.        (line  28)
   25533 * pseudo-op OCTA, MMIX:                  MMIX-Pseudos.        (line 108)
   25534 * pseudo-op PREFIX, MMIX:                MMIX-Pseudos.        (line 120)
   25535 * pseudo-op TETRA, MMIX:                 MMIX-Pseudos.        (line 108)
   25536 * pseudo-op WYDE, MMIX:                  MMIX-Pseudos.        (line 108)
   25537 * pseudo-opcodes for XStormy16:          XStormy16 Opcodes.   (line   6)
   25538 * pseudo-opcodes, M680x0:                M68K-Branch.         (line   6)
   25539 * pseudo-opcodes, M68HC11:               M68HC11-Branch.      (line   6)
   25540 * pseudo-ops for branch, VAX:            VAX-branch.          (line   6)
   25541 * pseudo-ops, CRIS:                      CRIS-Pseudos.        (line   6)
   25542 * pseudo-ops, machine independent:       Pseudo Ops.          (line   6)
   25543 * pseudo-ops, MMIX:                      MMIX-Pseudos.        (line   6)
   25544 * psize directive:                       Psize.               (line   6)
   25545 * PSR bits:                              IA-64-Bits.          (line   6)
   25546 * pstring directive, TIC54X:             TIC54X-Directives.   (line 208)
   25547 * psw register, V850:                    V850-Regs.           (line 116)
   25548 * purgem directive:                      Purgem.              (line   6)
   25549 * purpose of GNU assembler:              GNU Assembler.       (line  12)
   25550 * pushsection directive:                 PushSection.         (line   6)
   25551 * quad directive:                        Quad.                (line   6)
   25552 * quad directive, i386:                  i386-Float.          (line  21)
   25553 * quad directive, x86-64:                i386-Float.          (line  21)
   25554 * real-mode code, i386:                  i386-16bit.          (line   6)
   25555 * ref directive, TIC54X:                 TIC54X-Directives.   (line 103)
   25556 * refsym directive, MSP 430:             MSP430 Directives.   (line  30)
   25557 * register directive, SPARC:             Sparc-Directives.    (line  29)
   25558 * register names, AArch64:               AArch64-Regs.        (line   6)
   25559 * register names, Alpha:                 Alpha-Regs.          (line   6)
   25560 * register names, ARC:                   ARC-Regs.            (line   6)
   25561 * register names, ARM:                   ARM-Regs.            (line   6)
   25562 * register names, AVR:                   AVR-Regs.            (line   6)
   25563 * register names, CRIS:                  CRIS-Regs.           (line   6)
   25564 * register names, H8/300:                H8/300-Regs.         (line   6)
   25565 * register names, IA-64:                 IA-64-Regs.          (line   6)
   25566 * register names, LM32:                  LM32-Regs.           (line   6)
   25567 * register names, MMIX:                  MMIX-Regs.           (line   6)
   25568 * register names, MSP 430:               MSP430-Regs.         (line   6)
   25569 * register names, Sparc:                 Sparc-Regs.          (line   6)
   25570 * register names, TILE-Gx:               TILE-Gx Registers.   (line   6)
   25571 * register names, TILEPro:               TILEPro Registers.   (line   6)
   25572 * register names, V850:                  V850-Regs.           (line   6)
   25573 * register names, VAX:                   VAX-operands.        (line  17)
   25574 * register names, Xtensa:                Xtensa Registers.    (line   6)
   25575 * register names, Z80:                   Z80-Regs.            (line   6)
   25576 * register naming, s390:                 s390 Register.       (line   6)
   25577 * register operands, i386:               i386-Variations.     (line  15)
   25578 * register operands, x86-64:             i386-Variations.     (line  15)
   25579 * registers, D10V:                       D10V-Regs.           (line   6)
   25580 * registers, D30V:                       D30V-Regs.           (line   6)
   25581 * registers, i386:                       i386-Regs.           (line   6)
   25582 * registers, Meta:                       Meta-Regs.           (line   6)
   25583 * registers, SH:                         SH-Regs.             (line   6)
   25584 * registers, SH64:                       SH64-Regs.           (line   6)
   25585 * registers, TIC54X memory-mapped:       TIC54X-MMRegs.       (line   6)
   25586 * registers, x86-64:                     i386-Regs.           (line   6)
   25587 * registers, Z8000:                      Z8000-Regs.          (line   6)
   25588 * relax-all command line option, Nios II: Nios II Options.    (line  13)
   25589 * relax-section command line option, Nios II: Nios II Options.
   25590                                                               (line   6)
   25591 * relaxation:                            Xtensa Relaxation.   (line   6)
   25592 * relaxation of ADDI instructions:       Xtensa Immediate Relaxation.
   25593                                                               (line  43)
   25594 * relaxation of branch instructions:     Xtensa Branch Relaxation.
   25595                                                               (line   6)
   25596 * relaxation of call instructions:       Xtensa Call Relaxation.
   25597                                                               (line   6)
   25598 * relaxation of immediate fields:        Xtensa Immediate Relaxation.
   25599                                                               (line   6)
   25600 * relaxation of jump instructions:       Xtensa Jump Relaxation.
   25601                                                               (line   6)
   25602 * relaxation of L16SI instructions:      Xtensa Immediate Relaxation.
   25603                                                               (line  23)
   25604 * relaxation of L16UI instructions:      Xtensa Immediate Relaxation.
   25605                                                               (line  23)
   25606 * relaxation of L32I instructions:       Xtensa Immediate Relaxation.
   25607                                                               (line  23)
   25608 * relaxation of L8UI instructions:       Xtensa Immediate Relaxation.
   25609                                                               (line  23)
   25610 * relaxation of MOVI instructions:       Xtensa Immediate Relaxation.
   25611                                                               (line  12)
   25612 * reloc directive:                       Reloc.               (line   6)
   25613 * relocation:                            Sections.            (line   6)
   25614 * relocation example:                    Ld Sections.         (line  40)
   25615 * relocations, AArch64:                  AArch64-Relocations. (line   6)
   25616 * relocations, Alpha:                    Alpha-Relocs.        (line   6)
   25617 * relocations, Sparc:                    Sparc-Relocs.        (line   6)
   25618 * repeat prefixes, i386:                 i386-Prefixes.       (line  44)
   25619 * reporting bugs in assembler:           Reporting Bugs.      (line   6)
   25620 * rept directive:                        Rept.                (line   6)
   25621 * reserve directive, SPARC:              Sparc-Directives.    (line  39)
   25622 * return instructions, i386:             i386-Variations.     (line  41)
   25623 * return instructions, x86-64:           i386-Variations.     (line  41)
   25624 * REX prefixes, i386:                    i386-Prefixes.       (line  46)
   25625 * RL78 assembler directives:             RL78-Directives.     (line   6)
   25626 * RL78 line comment character:           RL78-Chars.          (line   6)
   25627 * RL78 line separator:                   RL78-Chars.          (line  14)
   25628 * RL78 modifiers:                        RL78-Modifiers.      (line   6)
   25629 * RL78 options:                          RL78-Opts.           (line   6)
   25630 * RL78 support:                          RL78-Dependent.      (line   6)
   25631 * rsect:                                 Z8000 Directives.    (line  52)
   25632 * RX assembler directive .3byte:         RX-Directives.       (line   9)
   25633 * RX assembler directive .fetchalign:    RX-Directives.       (line  13)
   25634 * RX assembler directives:               RX-Directives.       (line   6)
   25635 * RX floating point:                     RX-Float.            (line   6)
   25636 * RX line comment character:             RX-Chars.            (line   6)
   25637 * RX line separator:                     RX-Chars.            (line  14)
   25638 * RX modifiers:                          RX-Modifiers.        (line   6)
   25639 * RX options:                            RX-Opts.             (line   6)
   25640 * RX support:                            RX-Dependent.        (line   6)
   25641 * s390 floating point:                   s390 Floating Point. (line   6)
   25642 * s390 instruction aliases:              s390 Aliases.        (line   6)
   25643 * s390 instruction formats:              s390 Formats.        (line   6)
   25644 * s390 instruction marker:               s390 Instruction Marker.
   25645                                                               (line   6)
   25646 * s390 instruction mnemonics:            s390 Mnemonics.      (line   6)
   25647 * s390 instruction operand modifier:     s390 Operand Modifier.
   25648                                                               (line   6)
   25649 * s390 instruction operands:             s390 Operands.       (line   6)
   25650 * s390 instruction syntax:               s390 Syntax.         (line   6)
   25651 * s390 line comment character:           s390 Characters.     (line   6)
   25652 * s390 line separator:                   s390 Characters.     (line  13)
   25653 * s390 literal pool entries:             s390 Literal Pool Entries.
   25654                                                               (line   6)
   25655 * s390 options:                          s390 Options.        (line   6)
   25656 * s390 register naming:                  s390 Register.       (line   6)
   25657 * s390 support:                          S/390-Dependent.     (line   6)
   25658 * sblock directive, TIC54X:              TIC54X-Directives.   (line 182)
   25659 * sbttl directive:                       Sbttl.               (line   6)
   25660 * schedule directive:                    Schedule Directive.  (line   6)
   25661 * scl directive:                         Scl.                 (line   6)
   25662 * SCORE architectures:                   SCORE-Opts.          (line   6)
   25663 * SCORE directives:                      SCORE-Pseudo.        (line   6)
   25664 * SCORE line comment character:          SCORE-Chars.         (line   6)
   25665 * SCORE line separator:                  SCORE-Chars.         (line  14)
   25666 * SCORE options:                         SCORE-Opts.          (line   6)
   25667 * SCORE processor:                       SCORE-Dependent.     (line   6)
   25668 * sdaoff pseudo-op, V850:                V850 Opcodes.        (line  65)
   25669 * search path for .include:              I.                   (line   6)
   25670 * sect directive, TIC54X:                TIC54X-Directives.   (line 188)
   25671 * section directive (COFF version):      Section.             (line  16)
   25672 * section directive (ELF version):       Section.             (line  76)
   25673 * section directive, V850:               V850 Directives.     (line   9)
   25674 * section override prefixes, i386:       i386-Prefixes.       (line  23)
   25675 * Section Stack <1>:                     Previous.            (line   6)
   25676 * Section Stack <2>:                     Section.             (line  71)
   25677 * Section Stack <3>:                     PopSection.          (line   6)
   25678 * Section Stack <4>:                     SubSection.          (line   6)
   25679 * Section Stack:                         PushSection.         (line   6)
   25680 * section-relative addressing:           Secs Background.     (line  68)
   25681 * sections:                              Sections.            (line   6)
   25682 * sections in messages, internal:        As Sections.         (line   6)
   25683 * sections, i386:                        i386-Variations.     (line  47)
   25684 * sections, named:                       Ld Sections.         (line   8)
   25685 * sections, x86-64:                      i386-Variations.     (line  47)
   25686 * seg directive, SPARC:                  Sparc-Directives.    (line  44)
   25687 * segm:                                  Z8000 Directives.    (line  10)
   25688 * set at directive, Nios II:             Nios II Directives.  (line  35)
   25689 * set break directive, Nios II:          Nios II Directives.  (line  43)
   25690 * set directive:                         Set.                 (line   6)
   25691 * set directive, Nios II:                Nios II Directives.  (line  57)
   25692 * set directive, TIC54X:                 TIC54X-Directives.   (line 191)
   25693 * set noat directive, Nios II:           Nios II Directives.  (line  31)
   25694 * set nobreak directive, Nios II:        Nios II Directives.  (line  39)
   25695 * set norelax directive, Nios II:        Nios II Directives.  (line  46)
   25696 * set relaxall directive, Nios II:       Nios II Directives.  (line  53)
   25697 * set relaxsection directive, Nios II:   Nios II Directives.  (line  49)
   25698 * SH addressing modes:                   SH-Addressing.       (line   6)
   25699 * SH floating point (IEEE):              SH Floating Point.   (line   6)
   25700 * SH line comment character:             SH-Chars.            (line   6)
   25701 * SH line separator:                     SH-Chars.            (line   8)
   25702 * SH machine directives:                 SH Directives.       (line   6)
   25703 * SH opcode summary:                     SH Opcodes.          (line   6)
   25704 * SH options:                            SH Options.          (line   6)
   25705 * SH registers:                          SH-Regs.             (line   6)
   25706 * SH support:                            SH-Dependent.        (line   6)
   25707 * SH64 ABI options:                      SH64 Options.        (line  29)
   25708 * SH64 addressing modes:                 SH64-Addressing.     (line   6)
   25709 * SH64 ISA options:                      SH64 Options.        (line   6)
   25710 * SH64 line comment character:           SH64-Chars.          (line   6)
   25711 * SH64 line separator:                   SH64-Chars.          (line  13)
   25712 * SH64 machine directives:               SH64 Directives.     (line   9)
   25713 * SH64 opcode summary:                   SH64 Opcodes.        (line   6)
   25714 * SH64 options:                          SH64 Options.        (line   6)
   25715 * SH64 registers:                        SH64-Regs.           (line   6)
   25716 * SH64 support:                          SH64-Dependent.      (line   6)
   25717 * shigh directive, M32R:                 M32R-Directives.     (line  26)
   25718 * short directive:                       Short.               (line   6)
   25719 * short directive, ARC:                  ARC Directives.      (line 168)
   25720 * short directive, TIC54X:               TIC54X-Directives.   (line 111)
   25721 * SIMD, i386:                            i386-SIMD.           (line   6)
   25722 * SIMD, x86-64:                          i386-SIMD.           (line   6)
   25723 * single character constant:             Chars.               (line   6)
   25724 * single directive:                      Single.              (line   6)
   25725 * single directive, i386:                i386-Float.          (line  14)
   25726 * single directive, x86-64:              i386-Float.          (line  14)
   25727 * single quote, Z80:                     Z80-Chars.           (line  20)
   25728 * sixteen bit integers:                  hword.               (line   6)
   25729 * sixteen byte integer:                  Octa.                (line   6)
   25730 * size directive (COFF version):         Size.                (line  11)
   25731 * size directive (ELF version):          Size.                (line  19)
   25732 * size modifiers, D10V:                  D10V-Size.           (line   6)
   25733 * size modifiers, D30V:                  D30V-Size.           (line   6)
   25734 * size modifiers, M680x0:                M68K-Syntax.         (line   8)
   25735 * size prefixes, i386:                   i386-Prefixes.       (line  27)
   25736 * size suffixes, H8/300:                 H8/300 Opcodes.      (line 163)
   25737 * size, translations, Sparc:             Sparc-Size-Translations.
   25738                                                               (line   6)
   25739 * sizes operands, i386:                  i386-Variations.     (line  29)
   25740 * sizes operands, x86-64:                i386-Variations.     (line  29)
   25741 * skip directive:                        Skip.                (line   6)
   25742 * skip directive, M680x0:                M68K-Directives.     (line  19)
   25743 * skip directive, SPARC:                 Sparc-Directives.    (line  48)
   25744 * sleb128 directive:                     Sleb128.             (line   6)
   25745 * small data, MIPS:                      MIPS Small Data.     (line   6)
   25746 * SmartMIPS instruction generation override: MIPS ASE Instruction Generation Overrides.
   25747                                                               (line  11)
   25748 * SOM symbol attributes:                 SOM Symbols.         (line   6)
   25749 * source program:                        Input Files.         (line   6)
   25750 * source, destination operands; i386:    i386-Variations.     (line  22)
   25751 * source, destination operands; x86-64:  i386-Variations.     (line  22)
   25752 * sp register:                           Xtensa Registers.    (line   6)
   25753 * sp register, V850:                     V850-Regs.           (line  14)
   25754 * space directive:                       Space.               (line   6)
   25755 * space directive, TIC54X:               TIC54X-Directives.   (line 196)
   25756 * space used, maximum for assembly:      statistics.          (line   6)
   25757 * SPARC architectures:                   Sparc-Opts.          (line   6)
   25758 * Sparc constants:                       Sparc-Constants.     (line   6)
   25759 * SPARC data alignment:                  Sparc-Aligned-Data.  (line   6)
   25760 * SPARC floating point (IEEE):           Sparc-Float.         (line   6)
   25761 * Sparc line comment character:          Sparc-Chars.         (line   6)
   25762 * Sparc line separator:                  Sparc-Chars.         (line  14)
   25763 * SPARC machine directives:              Sparc-Directives.    (line   6)
   25764 * SPARC options:                         Sparc-Opts.          (line   6)
   25765 * Sparc registers:                       Sparc-Regs.          (line   6)
   25766 * Sparc relocations:                     Sparc-Relocs.        (line   6)
   25767 * Sparc size translations:               Sparc-Size-Translations.
   25768                                                               (line   6)
   25769 * SPARC support:                         Sparc-Dependent.     (line   6)
   25770 * SPARC syntax:                          Sparc-Aligned-Data.  (line  21)
   25771 * special characters, M680x0:            M68K-Chars.          (line   6)
   25772 * special purpose registers, MSP 430:    MSP430-Regs.         (line  11)
   25773 * sslist directive, TIC54X:              TIC54X-Directives.   (line 203)
   25774 * ssnolist directive, TIC54X:            TIC54X-Directives.   (line 203)
   25775 * stabd directive:                       Stab.                (line  38)
   25776 * stabn directive:                       Stab.                (line  48)
   25777 * stabs directive:                       Stab.                (line  51)
   25778 * stabX directives:                      Stab.                (line   6)
   25779 * standard assembler sections:           Secs Background.     (line  27)
   25780 * standard input, as input file:         Command Line.        (line  10)
   25781 * statement separator character:         Statements.          (line   6)
   25782 * statement separator, AArch64:          AArch64-Chars.       (line  10)
   25783 * statement separator, Alpha:            Alpha-Chars.         (line  11)
   25784 * statement separator, ARC:              ARC-Chars.           (line  12)
   25785 * statement separator, ARM:              ARM-Chars.           (line  14)
   25786 * statement separator, AVR:              AVR-Chars.           (line  14)
   25787 * statement separator, CR16:             CR16-Chars.          (line  13)
   25788 * statement separator, Epiphany:         Epiphany-Chars.      (line  14)
   25789 * statement separator, H8/300:           H8/300-Chars.        (line   8)
   25790 * statement separator, i386:             i386-Chars.          (line  18)
   25791 * statement separator, i860:             i860-Chars.          (line  14)
   25792 * statement separator, i960:             i960-Chars.          (line  14)
   25793 * statement separator, IA-64:            IA-64-Chars.         (line   8)
   25794 * statement separator, IP2K:             IP2K-Chars.          (line  14)
   25795 * statement separator, LM32:             LM32-Chars.          (line  12)
   25796 * statement separator, M32C:             M32C-Chars.          (line  14)
   25797 * statement separator, M68HC11:          M68HC11-Syntax.      (line  27)
   25798 * statement separator, Meta:             Meta-Chars.          (line   8)
   25799 * statement separator, MicroBlaze:       MicroBlaze-Chars.    (line  14)
   25800 * statement separator, MIPS:             MIPS-Chars.          (line  14)
   25801 * statement separator, MSP 430:          MSP430-Chars.        (line  14)
   25802 * statement separator, NS32K:            NS32K-Chars.         (line  18)
   25803 * statement separator, PJ:               PJ-Chars.            (line  14)
   25804 * statement separator, PowerPC:          PowerPC-Chars.       (line  18)
   25805 * statement separator, RL78:             RL78-Chars.          (line  14)
   25806 * statement separator, RX:               RX-Chars.            (line  14)
   25807 * statement separator, s390:             s390 Characters.     (line  13)
   25808 * statement separator, SCORE:            SCORE-Chars.         (line  14)
   25809 * statement separator, SH:               SH-Chars.            (line   8)
   25810 * statement separator, SH64:             SH64-Chars.          (line  13)
   25811 * statement separator, Sparc:            Sparc-Chars.         (line  14)
   25812 * statement separator, TIC54X:           TIC54X-Chars.        (line  17)
   25813 * statement separator, TIC6X:            TIC6X Syntax.        (line  13)
   25814 * statement separator, V850:             V850-Chars.          (line  13)
   25815 * statement separator, VAX:              VAX-Chars.           (line  14)
   25816 * statement separator, XGATE:            XGATE-Syntax.        (line  26)
   25817 * statement separator, XStormy16:        XStormy16-Chars.     (line  14)
   25818 * statement separator, Z80:              Z80-Chars.           (line  13)
   25819 * statement separator, Z8000:            Z8000-Chars.         (line  13)
   25820 * statements, structure of:              Statements.          (line   6)
   25821 * statistics, about assembly:            statistics.          (line   6)
   25822 * stopping the assembly:                 Abort.               (line   6)
   25823 * string constants:                      Strings.             (line   6)
   25824 * string directive:                      String.              (line   8)
   25825 * string directive on HPPA:              HPPA Directives.     (line 137)
   25826 * string directive, TIC54X:              TIC54X-Directives.   (line 208)
   25827 * string literals:                       Ascii.               (line   6)
   25828 * string, copying to object file:        String.              (line   8)
   25829 * string16 directive:                    String.              (line   8)
   25830 * string16, copying to object file:      String.              (line   8)
   25831 * string32 directive:                    String.              (line   8)
   25832 * string32, copying to object file:      String.              (line   8)
   25833 * string64 directive:                    String.              (line   8)
   25834 * string64, copying to object file:      String.              (line   8)
   25835 * string8 directive:                     String.              (line   8)
   25836 * string8, copying to object file:       String.              (line   8)
   25837 * struct directive:                      Struct.              (line   6)
   25838 * struct directive, TIC54X:              TIC54X-Directives.   (line 216)
   25839 * structure debugging, COFF:             Tag.                 (line   6)
   25840 * sub-instruction ordering, D10V:        D10V-Chars.          (line  14)
   25841 * sub-instruction ordering, D30V:        D30V-Chars.          (line  14)
   25842 * sub-instructions, D10V:                D10V-Subs.           (line   6)
   25843 * sub-instructions, D30V:                D30V-Subs.           (line   6)
   25844 * subexpressions:                        Arguments.           (line  24)
   25845 * subsection directive:                  SubSection.          (line   6)
   25846 * subsym builtins, TIC54X:               TIC54X-Macros.       (line  16)
   25847 * subtitles for listings:                Sbttl.               (line   6)
   25848 * subtraction, permitted arguments:      Infix Ops.           (line  49)
   25849 * summary of options:                    Overview.            (line   6)
   25850 * support:                               HPPA-Dependent.      (line   6)
   25851 * supporting files, including:           Include.             (line   6)
   25852 * suppressing warnings:                  W.                   (line  11)
   25853 * sval:                                  Z8000 Directives.    (line  33)
   25854 * symbol attributes:                     Symbol Attributes.   (line   6)
   25855 * symbol attributes, a.out:              a.out Symbols.       (line   6)
   25856 * symbol attributes, COFF:               COFF Symbols.        (line   6)
   25857 * symbol attributes, SOM:                SOM Symbols.         (line   6)
   25858 * symbol descriptor, COFF:               Desc.                (line   6)
   25859 * symbol modifiers <1>:                  AVR-Modifiers.       (line  12)
   25860 * symbol modifiers <2>:                  LM32-Modifiers.      (line  12)
   25861 * symbol modifiers <3>:                  M68HC11-Modifiers.   (line  12)
   25862 * symbol modifiers:                      M32C-Modifiers.      (line  11)
   25863 * symbol modifiers, TILE-Gx:             TILE-Gx Modifiers.   (line   6)
   25864 * symbol modifiers, TILEPro:             TILEPro Modifiers.   (line   6)
   25865 * symbol names:                          Symbol Names.        (line   6)
   25866 * symbol names, $ in <1>:                SH-Chars.            (line  15)
   25867 * symbol names, $ in <2>:                Meta-Chars.          (line  10)
   25868 * symbol names, $ in <3>:                D30V-Chars.          (line  70)
   25869 * symbol names, $ in <4>:                SH64-Chars.          (line  15)
   25870 * symbol names, $ in:                    D10V-Chars.          (line  53)
   25871 * symbol names, local:                   Symbol Names.        (line  27)
   25872 * symbol names, temporary:               Symbol Names.        (line  40)
   25873 * symbol storage class (COFF):           Scl.                 (line   6)
   25874 * symbol type:                           Symbol Type.         (line   6)
   25875 * symbol type, COFF:                     Type.                (line  11)
   25876 * symbol type, ELF:                      Type.                (line  22)
   25877 * symbol value:                          Symbol Value.        (line   6)
   25878 * symbol value, setting:                 Set.                 (line   6)
   25879 * symbol values, assigning:              Setting Symbols.     (line   6)
   25880 * symbol versioning:                     Symver.              (line   6)
   25881 * symbol, common:                        Comm.                (line   6)
   25882 * symbol, making visible to linker:      Global.              (line   6)
   25883 * symbolic debuggers, information for:   Stab.                (line   6)
   25884 * symbols:                               Symbols.             (line   6)
   25885 * Symbols in position-independent code, CRIS: CRIS-Pic.       (line   6)
   25886 * symbols with uppercase, VAX/VMS:       VAX-Opts.            (line  42)
   25887 * symbols, assigning values to:          Equ.                 (line   6)
   25888 * Symbols, built-in, CRIS:               CRIS-Symbols.        (line   6)
   25889 * Symbols, CRIS, built-in:               CRIS-Symbols.        (line   6)
   25890 * symbols, local common:                 Lcomm.               (line   6)
   25891 * symver directive:                      Symver.              (line   6)
   25892 * syntax compatibility, i386:            i386-Variations.     (line   6)
   25893 * syntax compatibility, x86-64:          i386-Variations.     (line   6)
   25894 * syntax, AVR:                           AVR-Modifiers.       (line   6)
   25895 * syntax, Blackfin:                      Blackfin Syntax.     (line   6)
   25896 * syntax, D10V:                          D10V-Syntax.         (line   6)
   25897 * syntax, D30V:                          D30V-Syntax.         (line   6)
   25898 * syntax, LM32:                          LM32-Modifiers.      (line   6)
   25899 * syntax, M680x0:                        M68K-Syntax.         (line   8)
   25900 * syntax, M68HC11 <1>:                   M68HC11-Syntax.      (line   6)
   25901 * syntax, M68HC11:                       M68HC11-Modifiers.   (line   6)
   25902 * syntax, machine-independent:           Syntax.              (line   6)
   25903 * syntax, RL78:                          RL78-Modifiers.      (line   6)
   25904 * syntax, RX:                            RX-Modifiers.        (line   6)
   25905 * syntax, SPARC:                         Sparc-Aligned-Data.  (line  21)
   25906 * syntax, TILE-Gx:                       TILE-Gx Syntax.      (line   6)
   25907 * syntax, TILEPro:                       TILEPro Syntax.      (line   6)
   25908 * syntax, XGATE:                         XGATE-Syntax.        (line   6)
   25909 * syntax, Xtensa assembler:              Xtensa Syntax.       (line   6)
   25910 * sysproc directive, i960:               Directives-i960.     (line  37)
   25911 * tab (\t):                              Strings.             (line  27)
   25912 * tab directive, TIC54X:                 TIC54X-Directives.   (line 247)
   25913 * tag directive:                         Tag.                 (line   6)
   25914 * tag directive, TIC54X:                 TIC54X-Directives.   (line 216)
   25915 * TBM, i386:                             i386-TBM.            (line   6)
   25916 * TBM, x86-64:                           i386-TBM.            (line   6)
   25917 * tdaoff pseudo-op, V850:                V850 Opcodes.        (line  81)
   25918 * temporary symbol names:                Symbol Names.        (line  40)
   25919 * text and data sections, joining:       R.                   (line   6)
   25920 * text directive:                        Text.                (line   6)
   25921 * text section:                          Ld Sections.         (line   9)
   25922 * tfloat directive, i386:                i386-Float.          (line  14)
   25923 * tfloat directive, x86-64:              i386-Float.          (line  14)
   25924 * Thumb support:                         ARM-Dependent.       (line   6)
   25925 * TIC54X builtin math functions:         TIC54X-Builtins.     (line   6)
   25926 * TIC54X line comment character:         TIC54X-Chars.        (line   6)
   25927 * TIC54X line separator:                 TIC54X-Chars.        (line  17)
   25928 * TIC54X machine directives:             TIC54X-Directives.   (line   6)
   25929 * TIC54X memory-mapped registers:        TIC54X-MMRegs.       (line   6)
   25930 * TIC54X options:                        TIC54X-Opts.         (line   6)
   25931 * TIC54X subsym builtins:                TIC54X-Macros.       (line  16)
   25932 * TIC54X support:                        TIC54X-Dependent.    (line   6)
   25933 * TIC54X-specific macros:                TIC54X-Macros.       (line   6)
   25934 * TIC6X big-endian output:               TIC6X Options.       (line  46)
   25935 * TIC6X line comment character:          TIC6X Syntax.        (line   6)
   25936 * TIC6X line separator:                  TIC6X Syntax.        (line  13)
   25937 * TIC6X little-endian output:            TIC6X Options.       (line  46)
   25938 * TIC6X machine directives:              TIC6X Directives.    (line   6)
   25939 * TIC6X options:                         TIC6X Options.       (line   6)
   25940 * TIC6X support:                         TIC6X-Dependent.     (line   6)
   25941 * TILE-Gx machine directives:            TILE-Gx Directives.  (line   6)
   25942 * TILE-Gx modifiers:                     TILE-Gx Modifiers.   (line   6)
   25943 * TILE-Gx opcode names:                  TILE-Gx Opcodes.     (line   6)
   25944 * TILE-Gx register names:                TILE-Gx Registers.   (line   6)
   25945 * TILE-Gx support:                       TILE-Gx-Dependent.   (line   6)
   25946 * TILE-Gx syntax:                        TILE-Gx Syntax.      (line   6)
   25947 * TILEPro machine directives:            TILEPro Directives.  (line   6)
   25948 * TILEPro modifiers:                     TILEPro Modifiers.   (line   6)
   25949 * TILEPro opcode names:                  TILEPro Opcodes.     (line   6)
   25950 * TILEPro register names:                TILEPro Registers.   (line   6)
   25951 * TILEPro support:                       TILEPro-Dependent.   (line   6)
   25952 * TILEPro syntax:                        TILEPro Syntax.      (line   6)
   25953 * time, total for assembly:              statistics.          (line   6)
   25954 * title directive:                       Title.               (line   6)
   25955 * tls_gd directive, Nios II:             Nios II Relocations. (line  38)
   25956 * tls_ie directive, Nios II:             Nios II Relocations. (line  38)
   25957 * tls_ldm directive, Nios II:            Nios II Relocations. (line  38)
   25958 * tls_ldo directive, Nios II:            Nios II Relocations. (line  38)
   25959 * tls_le directive, Nios II:             Nios II Relocations. (line  38)
   25960 * TMS320C6X support:                     TIC6X-Dependent.     (line   6)
   25961 * tp register, V850:                     V850-Regs.           (line  20)
   25962 * transform directive:                   Transform Directive. (line   6)
   25963 * trusted compiler:                      f.                   (line   6)
   25964 * turning preprocessing on and off:      Preprocessing.       (line  27)
   25965 * type directive (COFF version):         Type.                (line  11)
   25966 * type directive (ELF version):          Type.                (line  22)
   25967 * type of a symbol:                      Symbol Type.         (line   6)
   25968 * ualong directive, SH:                  SH Directives.       (line   6)
   25969 * uaquad directive, SH:                  SH Directives.       (line   6)
   25970 * uaword directive, SH:                  SH Directives.       (line   6)
   25971 * ubyte directive, TIC54X:               TIC54X-Directives.   (line  36)
   25972 * uchar directive, TIC54X:               TIC54X-Directives.   (line  36)
   25973 * uhalf directive, TIC54X:               TIC54X-Directives.   (line 111)
   25974 * uint directive, TIC54X:                TIC54X-Directives.   (line 111)
   25975 * uleb128 directive:                     Uleb128.             (line   6)
   25976 * ulong directive, TIC54X:               TIC54X-Directives.   (line 135)
   25977 * undefined section:                     Ld Sections.         (line  36)
   25978 * union directive, TIC54X:               TIC54X-Directives.   (line 250)
   25979 * unsegm:                                Z8000 Directives.    (line  14)
   25980 * usect directive, TIC54X:               TIC54X-Directives.   (line 262)
   25981 * ushort directive, TIC54X:              TIC54X-Directives.   (line 111)
   25982 * uword directive, TIC54X:               TIC54X-Directives.   (line 111)
   25983 * V850 command line options:             V850 Options.        (line   9)
   25984 * V850 floating point (IEEE):            V850 Floating Point. (line   6)
   25985 * V850 line comment character:           V850-Chars.          (line   6)
   25986 * V850 line separator:                   V850-Chars.          (line  13)
   25987 * V850 machine directives:               V850 Directives.     (line   6)
   25988 * V850 opcodes:                          V850 Opcodes.        (line   6)
   25989 * V850 options (none):                   V850 Options.        (line   6)
   25990 * V850 register names:                   V850-Regs.           (line   6)
   25991 * V850 support:                          V850-Dependent.      (line   6)
   25992 * val directive:                         Val.                 (line   6)
   25993 * value attribute, COFF:                 Val.                 (line   6)
   25994 * value of a symbol:                     Symbol Value.        (line   6)
   25995 * var directive, TIC54X:                 TIC54X-Directives.   (line 272)
   25996 * VAX bitfields not supported:           VAX-no.              (line   6)
   25997 * VAX branch improvement:                VAX-branch.          (line   6)
   25998 * VAX command-line options ignored:      VAX-Opts.            (line   6)
   25999 * VAX displacement sizing character:     VAX-operands.        (line  12)
   26000 * VAX floating point:                    VAX-float.           (line   6)
   26001 * VAX immediate character:               VAX-operands.        (line   6)
   26002 * VAX indirect character:                VAX-operands.        (line   9)
   26003 * VAX line comment character:            VAX-Chars.           (line   6)
   26004 * VAX line separator:                    VAX-Chars.           (line  14)
   26005 * VAX machine directives:                VAX-directives.      (line   6)
   26006 * VAX opcode mnemonics:                  VAX-opcodes.         (line   6)
   26007 * VAX operand notation:                  VAX-operands.        (line   6)
   26008 * VAX register names:                    VAX-operands.        (line  17)
   26009 * VAX support:                           Vax-Dependent.       (line   6)
   26010 * Vax-11 C compatibility:                VAX-Opts.            (line  42)
   26011 * VAX/VMS options:                       VAX-Opts.            (line  42)
   26012 * version directive:                     Version.             (line   6)
   26013 * version directive, TIC54X:             TIC54X-Directives.   (line 276)
   26014 * version of assembler:                  v.                   (line   6)
   26015 * versions of symbols:                   Symver.              (line   6)
   26016 * Virtualization instruction generation override: MIPS ASE Instruction Generation Overrides.
   26017                                                               (line  47)
   26018 * visibility <1>:                        Internal.            (line   6)
   26019 * visibility <2>:                        Protected.           (line   6)
   26020 * visibility:                            Hidden.              (line   6)
   26021 * VMS (VAX) options:                     VAX-Opts.            (line  42)
   26022 * vtable_entry directive:                VTableEntry.         (line   6)
   26023 * vtable_inherit directive:              VTableInherit.       (line   6)
   26024 * warning directive:                     Warning.             (line   6)
   26025 * warning for altered difference tables: K.                   (line   6)
   26026 * warning messages:                      Errors.              (line   6)
   26027 * warnings, causing error:               W.                   (line  16)
   26028 * warnings, M32R:                        M32R-Warnings.       (line   6)
   26029 * warnings, suppressing:                 W.                   (line  11)
   26030 * warnings, switching on:                W.                   (line  19)
   26031 * weak directive:                        Weak.                (line   6)
   26032 * weakref directive:                     Weakref.             (line   6)
   26033 * whitespace:                            Whitespace.          (line   6)
   26034 * whitespace, removed by preprocessor:   Preprocessing.       (line   7)
   26035 * wide floating point directives, VAX:   VAX-directives.      (line  10)
   26036 * width directive, TIC54X:               TIC54X-Directives.   (line 127)
   26037 * Width of continuation lines of disassembly output: listing. (line  21)
   26038 * Width of first line disassembly output: listing.            (line  16)
   26039 * Width of source line output:           listing.             (line  28)
   26040 * wmsg directive, TIC54X:                TIC54X-Directives.   (line  77)
   26041 * word directive:                        Word.                (line   6)
   26042 * word directive, ARC:                   ARC Directives.      (line 171)
   26043 * word directive, H8/300:                H8/300 Directives.   (line   6)
   26044 * word directive, i386:                  i386-Float.          (line  21)
   26045 * word directive, Nios II:               Nios II Directives.  (line  13)
   26046 * word directive, SPARC:                 Sparc-Directives.    (line  51)
   26047 * word directive, TIC54X:                TIC54X-Directives.   (line 111)
   26048 * word directive, x86-64:                i386-Float.          (line  21)
   26049 * writing patterns in memory:            Fill.                (line   6)
   26050 * wval:                                  Z8000 Directives.    (line  24)
   26051 * x86 machine directives:                i386-Directives.     (line   6)
   26052 * x86-64 arch directive:                 i386-Arch.           (line   6)
   26053 * x86-64 att_syntax pseudo op:           i386-Variations.     (line   6)
   26054 * x86-64 conversion instructions:        i386-Mnemonics.      (line  37)
   26055 * x86-64 floating point:                 i386-Float.          (line   6)
   26056 * x86-64 immediate operands:             i386-Variations.     (line  15)
   26057 * x86-64 instruction naming:             i386-Mnemonics.      (line   6)
   26058 * x86-64 intel_syntax pseudo op:         i386-Variations.     (line   6)
   26059 * x86-64 jump optimization:              i386-Jumps.          (line   6)
   26060 * x86-64 jump, call, return:             i386-Variations.     (line  41)
   26061 * x86-64 jump/call operands:             i386-Variations.     (line  15)
   26062 * x86-64 memory references:              i386-Memory.         (line   6)
   26063 * x86-64 options:                        i386-Options.        (line   6)
   26064 * x86-64 register operands:              i386-Variations.     (line  15)
   26065 * x86-64 registers:                      i386-Regs.           (line   6)
   26066 * x86-64 sections:                       i386-Variations.     (line  47)
   26067 * x86-64 size suffixes:                  i386-Variations.     (line  29)
   26068 * x86-64 source, destination operands:   i386-Variations.     (line  22)
   26069 * x86-64 support:                        i386-Dependent.      (line   6)
   26070 * x86-64 syntax compatibility:           i386-Variations.     (line   6)
   26071 * xfloat directive, TIC54X:              TIC54X-Directives.   (line  64)
   26072 * XGATE addressing modes:                XGATE-Syntax.        (line  29)
   26073 * XGATE assembler directives:            XGATE-Directives.    (line   6)
   26074 * XGATE floating point:                  XGATE-Float.         (line   6)
   26075 * XGATE line comment character:          XGATE-Syntax.        (line  16)
   26076 * XGATE line separator:                  XGATE-Syntax.        (line  26)
   26077 * XGATE opcodes:                         XGATE-opcodes.       (line   6)
   26078 * XGATE options:                         XGATE-Opts.          (line   6)
   26079 * XGATE support:                         XGATE-Dependent.     (line   6)
   26080 * XGATE syntax:                          XGATE-Syntax.        (line   6)
   26081 * xlong directive, TIC54X:               TIC54X-Directives.   (line 135)
   26082 * XStormy16 comment character:           XStormy16-Chars.     (line  11)
   26083 * XStormy16 line comment character:      XStormy16-Chars.     (line   6)
   26084 * XStormy16 line separator:              XStormy16-Chars.     (line  14)
   26085 * XStormy16 machine directives:          XStormy16 Directives.
   26086                                                               (line   6)
   26087 * XStormy16 pseudo-opcodes:              XStormy16 Opcodes.   (line   6)
   26088 * XStormy16 support:                     XSTORMY16-Dependent. (line   6)
   26089 * Xtensa architecture:                   Xtensa-Dependent.    (line   6)
   26090 * Xtensa assembler syntax:               Xtensa Syntax.       (line   6)
   26091 * Xtensa directives:                     Xtensa Directives.   (line   6)
   26092 * Xtensa opcode names:                   Xtensa Opcodes.      (line   6)
   26093 * Xtensa register names:                 Xtensa Registers.    (line   6)
   26094 * xword directive, SPARC:                Sparc-Directives.    (line  55)
   26095 * Z80 $:                                 Z80-Chars.           (line  15)
   26096 * Z80 ':                                 Z80-Chars.           (line  20)
   26097 * Z80 floating point:                    Z80 Floating Point.  (line   6)
   26098 * Z80 line comment character:            Z80-Chars.           (line   6)
   26099 * Z80 line separator:                    Z80-Chars.           (line  13)
   26100 * Z80 options:                           Z80 Options.         (line   6)
   26101 * Z80 registers:                         Z80-Regs.            (line   6)
   26102 * Z80 support:                           Z80-Dependent.       (line   6)
   26103 * Z80 Syntax:                            Z80 Options.         (line  47)
   26104 * Z80, \:                                Z80-Chars.           (line  18)
   26105 * Z80, case sensitivity:                 Z80-Case.            (line   6)
   26106 * Z80-only directives:                   Z80 Directives.      (line   9)
   26107 * Z800 addressing modes:                 Z8000-Addressing.    (line   6)
   26108 * Z8000 directives:                      Z8000 Directives.    (line   6)
   26109 * Z8000 line comment character:          Z8000-Chars.         (line   6)
   26110 * Z8000 line separator:                  Z8000-Chars.         (line  13)
   26111 * Z8000 opcode summary:                  Z8000 Opcodes.       (line   6)
   26112 * Z8000 options:                         Z8000 Options.       (line   6)
   26113 * Z8000 registers:                       Z8000-Regs.          (line   6)
   26114 * Z8000 support:                         Z8000-Dependent.     (line   6)
   26115 * zdaoff pseudo-op, V850:                V850 Opcodes.        (line  99)
   26116 * zero register, V850:                   V850-Regs.           (line   7)
   26117 * zero-terminated strings:               Asciz.               (line   6)
   26118 
   26119 
   26120 
   26121 Tag Table:
   26122 Node: Top739
   26123 Node: Overview1725
   26124 Node: Manual36226
   26125 Node: GNU Assembler37170
   26126 Node: Object Formats38341
   26127 Node: Command Line38793
   26128 Node: Input Files39880
   26129 Node: Object41861
   26130 Node: Errors42757
   26131 Node: Invoking43952
   26132 Node: a45907
   26133 Node: alternate47818
   26134 Node: D47990
   26135 Node: f48223
   26136 Node: I48731
   26137 Node: K49275
   26138 Node: L49579
   26139 Node: listing50318
   26140 Node: M51977
   26141 Node: MD56378
   26142 Node: o56804
   26143 Node: R57259
   26144 Node: statistics58289
   26145 Node: traditional-format58696
   26146 Node: v59169
   26147 Node: W59444
   26148 Node: Z60351
   26149 Node: Syntax60873
   26150 Node: Preprocessing61465
   26151 Node: Whitespace63028
   26152 Node: Comments63424
   26153 Node: Symbol Intro65435
   26154 Node: Statements66162
   26155 Node: Constants68151
   26156 Node: Characters68782
   26157 Node: Strings69284
   26158 Node: Chars71450
   26159 Node: Numbers72204
   26160 Node: Integers72744
   26161 Node: Bignums73400
   26162 Node: Flonums73756
   26163 Node: Sections75503
   26164 Node: Secs Background75881
   26165 Node: Ld Sections80920
   26166 Node: As Sections83304
   26167 Node: Sub-Sections84214
   26168 Node: bss87359
   26169 Node: Symbols88309
   26170 Node: Labels88957
   26171 Node: Setting Symbols89688
   26172 Node: Symbol Names90242
   26173 Node: Dot95533
   26174 Node: Symbol Attributes95980
   26175 Node: Symbol Value96717
   26176 Node: Symbol Type97762
   26177 Node: a.out Symbols98150
   26178 Node: Symbol Desc98412
   26179 Node: Symbol Other98707
   26180 Node: COFF Symbols98876
   26181 Node: SOM Symbols99549
   26182 Node: Expressions99991
   26183 Node: Empty Exprs100740
   26184 Node: Integer Exprs101087
   26185 Node: Arguments101482
   26186 Node: Operators102588
   26187 Node: Prefix Ops102923
   26188 Node: Infix Ops103251
   26189 Node: Pseudo Ops105641
   26190 Node: Abort111265
   26191 Node: ABORT (COFF)111677
   26192 Node: Align111885
   26193 Node: Altmacro114167
   26194 Node: Ascii115496
   26195 Node: Asciz115805
   26196 Node: Balign116050
   26197 Node: Bundle directives117926
   26198 Node: Byte120855
   26199 Node: CFI directives121116
   26200 Node: Comm126745
   26201 Ref: Comm-Footnote-1128346
   26202 Node: Data128708
   26203 Node: Def129025
   26204 Node: Desc129257
   26205 Node: Dim129757
   26206 Node: Double130014
   26207 Node: Eject130352
   26208 Node: Else130527
   26209 Node: Elseif130827
   26210 Node: End131121
   26211 Node: Endef131336
   26212 Node: Endfunc131513
   26213 Node: Endif131688
   26214 Node: Equ131949
   26215 Node: Equiv132463
   26216 Node: Eqv133019
   26217 Node: Err133383
   26218 Node: Error133694
   26219 Node: Exitm134139
   26220 Node: Extern134308
   26221 Node: Fail134569
   26222 Node: File135014
   26223 Node: Fill136343
   26224 Node: Float137307
   26225 Node: Func137649
   26226 Node: Global138239
   26227 Node: Gnu_attribute138996
   26228 Node: Hidden139221
   26229 Node: hword139807
   26230 Node: Ident140135
   26231 Node: If140709
   26232 Node: Incbin143768
   26233 Node: Include144463
   26234 Node: Int145014
   26235 Node: Internal145395
   26236 Node: Irp146043
   26237 Node: Irpc146922
   26238 Node: Lcomm147839
   26239 Node: Lflags148587
   26240 Node: Line148781
   26241 Node: Linkonce149694
   26242 Node: List150923
   26243 Node: Ln151531
   26244 Node: Loc151681
   26245 Node: Loc_mark_labels153067
   26246 Node: Local153551
   26247 Node: Long154163
   26248 Node: Macro154341
   26249 Node: MRI160263
   26250 Node: Noaltmacro160601
   26251 Node: Nolist160770
   26252 Node: Octa161200
   26253 Node: Offset161537
   26254 Node: Org161864
   26255 Node: P2align163149
   26256 Node: PopSection165077
   26257 Node: Previous165585
   26258 Node: Print166998
   26259 Node: Protected167227
   26260 Node: Psize167874
   26261 Node: Purgem168558
   26262 Node: PushSection168779
   26263 Node: Quad169522
   26264 Node: Reloc169978
   26265 Node: Rept170739
   26266 Node: Sbttl171153
   26267 Node: Scl171518
   26268 Node: Section171859
   26269 Node: Set178013
   26270 Node: Short178586
   26271 Node: Single178909
   26272 Node: Size179256
   26273 Node: Skip179930
   26274 Node: Sleb128180254
   26275 Node: Space180578
   26276 Node: Stab181219
   26277 Node: String183223
   26278 Node: Struct184217
   26279 Node: SubSection184942
   26280 Node: Symver185505
   26281 Node: Tag187898
   26282 Node: Text188280
   26283 Node: Title188601
   26284 Node: Type188982
   26285 Node: Uleb128191295
   26286 Node: Val191619
   26287 Node: Version191869
   26288 Node: VTableEntry192144
   26289 Node: VTableInherit192434
   26290 Node: Warning192884
   26291 Node: Weak193118
   26292 Node: Weakref193787
   26293 Node: Word194752
   26294 Node: Deprecated196598
   26295 Node: Object Attributes196833
   26296 Node: GNU Object Attributes198553
   26297 Node: Defining New Object Attributes201780
   26298 Node: Machine Dependencies202577
   26299 Node: AArch64-Dependent206470
   26300 Node: AArch64 Options206952
   26301 Node: AArch64 Extensions209419
   26302 Node: AArch64 Syntax210887
   26303 Node: AArch64-Chars211187
   26304 Node: AArch64-Regs211673
   26305 Node: AArch64-Relocations211967
   26306 Node: AArch64 Floating Point213041
   26307 Node: AArch64 Directives213266
   26308 Node: AArch64 Opcodes214811
   26309 Node: AArch64 Mapping Symbols215489
   26310 Node: Alpha-Dependent215871
   26311 Node: Alpha Notes216311
   26312 Node: Alpha Options216592
   26313 Node: Alpha Syntax219067
   26314 Node: Alpha-Chars219536
   26315 Node: Alpha-Regs219948
   26316 Node: Alpha-Relocs220335
   26317 Node: Alpha Floating Point226593
   26318 Node: Alpha Directives226815
   26319 Node: Alpha Opcodes232338
   26320 Node: ARC-Dependent232633
   26321 Node: ARC Options233016
   26322 Node: ARC Syntax234085
   26323 Node: ARC-Chars234317
   26324 Node: ARC-Regs234798
   26325 Node: ARC Floating Point234922
   26326 Node: ARC Directives235233
   26327 Node: ARC Opcodes241198
   26328 Node: ARM-Dependent241424
   26329 Node: ARM Options241889
   26330 Node: ARM Syntax250813
   26331 Node: ARM-Instruction-Set251181
   26332 Node: ARM-Chars252401
   26333 Node: ARM-Regs253112
   26334 Node: ARM-Relocations253321
   26335 Node: ARM-Neon-Alignment254455
   26336 Node: ARM Floating Point254919
   26337 Node: ARM Directives255118
   26338 Ref: arm_fnend259566
   26339 Ref: arm_fnstart259890
   26340 Ref: arm_pad262298
   26341 Ref: arm_save262900
   26342 Ref: arm_setfp263601
   26343 Node: ARM Opcodes266893
   26344 Node: ARM Mapping Symbols268981
   26345 Node: ARM Unwinding Tutorial269791
   26346 Node: AVR-Dependent275993
   26347 Node: AVR Options276283
   26348 Node: AVR Syntax282004
   26349 Node: AVR-Chars282291
   26350 Node: AVR-Regs282850
   26351 Node: AVR-Modifiers283429
   26352 Node: AVR Opcodes285489
   26353 Node: Blackfin-Dependent290735
   26354 Node: Blackfin Options291047
   26355 Node: Blackfin Syntax292021
   26356 Node: Blackfin Directives298228
   26357 Node: CR16-Dependent298974
   26358 Node: CR16 Operand Qualifiers299274
   26359 Node: CR16 Syntax302003
   26360 Node: CR16-Chars302189
   26361 Node: CRIS-Dependent302726
   26362 Node: CRIS-Opts303072
   26363 Ref: march-option304758
   26364 Node: CRIS-Expand306575
   26365 Node: CRIS-Symbols307758
   26366 Node: CRIS-Syntax308927
   26367 Node: CRIS-Chars309263
   26368 Node: CRIS-Pic309814
   26369 Ref: crispic310010
   26370 Node: CRIS-Regs313550
   26371 Node: CRIS-Pseudos313967
   26372 Ref: crisnous314743
   26373 Node: D10V-Dependent316025
   26374 Node: D10V-Opts316376
   26375 Node: D10V-Syntax317338
   26376 Node: D10V-Size317867
   26377 Node: D10V-Subs318840
   26378 Node: D10V-Chars319875
   26379 Node: D10V-Regs321787
   26380 Node: D10V-Addressing322832
   26381 Node: D10V-Word323518
   26382 Node: D10V-Float324033
   26383 Node: D10V-Opcodes324344
   26384 Node: D30V-Dependent324737
   26385 Node: D30V-Opts325094
   26386 Node: D30V-Syntax325771
   26387 Node: D30V-Size326305
   26388 Node: D30V-Subs327278
   26389 Node: D30V-Chars328315
   26390 Node: D30V-Guarded330923
   26391 Node: D30V-Regs331605
   26392 Node: D30V-Addressing332746
   26393 Node: D30V-Float333416
   26394 Node: D30V-Opcodes333729
   26395 Node: Epiphany-Dependent334124
   26396 Node: Epiphany Options334412
   26397 Node: Epiphany Syntax334811
   26398 Node: Epiphany-Chars335012
   26399 Node: H8/300-Dependent335566
   26400 Node: H8/300 Options335982
   26401 Node: H8/300 Syntax336249
   26402 Node: H8/300-Chars336550
   26403 Node: H8/300-Regs336849
   26404 Node: H8/300-Addressing337768
   26405 Node: H8/300 Floating Point338809
   26406 Node: H8/300 Directives339136
   26407 Node: H8/300 Opcodes340264
   26408 Node: HPPA-Dependent348586
   26409 Node: HPPA Notes349021
   26410 Node: HPPA Options349779
   26411 Node: HPPA Syntax349974
   26412 Node: HPPA Floating Point351244
   26413 Node: HPPA Directives351450
   26414 Node: HPPA Opcodes360136
   26415 Node: ESA/390-Dependent360395
   26416 Node: ESA/390 Notes360855
   26417 Node: ESA/390 Options361646
   26418 Node: ESA/390 Syntax361856
   26419 Node: ESA/390 Floating Point364029
   26420 Node: ESA/390 Directives364308
   26421 Node: ESA/390 Opcodes367597
   26422 Node: i386-Dependent367859
   26423 Node: i386-Options369189
   26424 Node: i386-Directives375839
   26425 Node: i386-Syntax376577
   26426 Node: i386-Variations376882
   26427 Node: i386-Chars379423
   26428 Node: i386-Mnemonics380152
   26429 Node: i386-Regs383463
   26430 Node: i386-Prefixes385508
   26431 Node: i386-Memory388268
   26432 Node: i386-Jumps391205
   26433 Node: i386-Float392326
   26434 Node: i386-SIMD394157
   26435 Node: i386-LWP395266
   26436 Node: i386-BMI396100
   26437 Node: i386-TBM396478
   26438 Node: i386-16bit397008
   26439 Node: i386-Bugs399079
   26440 Node: i386-Arch399833
   26441 Node: i386-Notes402943
   26442 Node: i860-Dependent403801
   26443 Node: Notes-i860404241
   26444 Node: Options-i860405146
   26445 Node: Directives-i860406509
   26446 Node: Opcodes for i860407578
   26447 Node: Syntax of i860409768
   26448 Node: i860-Chars409952
   26449 Node: i960-Dependent410511
   26450 Node: Options-i960410958
   26451 Node: Floating Point-i960414843
   26452 Node: Directives-i960415111
   26453 Node: Opcodes for i960417145
   26454 Node: callj-i960417785
   26455 Node: Compare-and-branch-i960418274
   26456 Node: Syntax of i960420178
   26457 Node: i960-Chars420378
   26458 Node: IA-64-Dependent420921
   26459 Node: IA-64 Options421222
   26460 Node: IA-64 Syntax424373
   26461 Node: IA-64-Chars424779
   26462 Node: IA-64-Regs425009
   26463 Node: IA-64-Bits425935
   26464 Node: IA-64-Relocs426465
   26465 Node: IA-64 Opcodes426937
   26466 Node: IP2K-Dependent427209
   26467 Node: IP2K-Opts427481
   26468 Node: IP2K-Syntax427981
   26469 Node: IP2K-Chars428155
   26470 Node: LM32-Dependent428698
   26471 Node: LM32 Options428993
   26472 Node: LM32 Syntax429627
   26473 Node: LM32-Regs429923
   26474 Node: LM32-Modifiers430882
   26475 Node: LM32-Chars432257
   26476 Node: LM32 Opcodes432765
   26477 Node: M32C-Dependent433069
   26478 Node: M32C-Opts433578
   26479 Node: M32C-Syntax433998
   26480 Node: M32C-Modifiers434233
   26481 Node: M32C-Chars436022
   26482 Node: M32R-Dependent436588
   26483 Node: M32R-Opts436909
   26484 Node: M32R-Directives441072
   26485 Node: M32R-Warnings445047
   26486 Node: M68K-Dependent448053
   26487 Node: M68K-Opts448520
   26488 Node: M68K-Syntax455893
   26489 Node: M68K-Moto-Syntax457733
   26490 Node: M68K-Float460323
   26491 Node: M68K-Directives460843
   26492 Node: M68K-opcodes462171
   26493 Node: M68K-Branch462397
   26494 Node: M68K-Chars466595
   26495 Node: M68HC11-Dependent467458
   26496 Node: M68HC11-Opts467989
   26497 Node: M68HC11-Syntax472294
   26498 Node: M68HC11-Modifiers475085
   26499 Node: M68HC11-Directives476913
   26500 Node: M68HC11-Float478289
   26501 Node: M68HC11-opcodes478817
   26502 Node: M68HC11-Branch478999
   26503 Node: Meta-Dependent481448
   26504 Node: Meta Options481733
   26505 Node: Meta Syntax482395
   26506 Node: Meta-Chars482607
   26507 Node: Meta-Regs482907
   26508 Node: MicroBlaze-Dependent483183
   26509 Node: MicroBlaze Directives483872
   26510 Node: MicroBlaze Syntax485255
   26511 Node: MicroBlaze-Chars485487
   26512 Node: MIPS-Dependent486039
   26513 Node: MIPS Options487476
   26514 Node: MIPS Macros502130
   26515 Ref: MIPS Macros-Footnote-1504844
   26516 Node: MIPS Symbol Sizes504987
   26517 Node: MIPS Small Data506659
   26518 Node: MIPS ISA508822
   26519 Node: MIPS assembly options510607
   26520 Node: MIPS autoextend511740
   26521 Node: MIPS insn512474
   26522 Node: MIPS FP ABIs513754
   26523 Node: MIPS FP ABI History514206
   26524 Node: MIPS FP ABI Variants514966
   26525 Node: MIPS FP ABI Selection517520
   26526 Node: MIPS FP ABI Compatibility518584
   26527 Node: MIPS NaN Encodings519394
   26528 Node: MIPS Option Stack521357
   26529 Node: MIPS ASE Instruction Generation Overrides522142
   26530 Node: MIPS Floating-Point524856
   26531 Node: MIPS Syntax525762
   26532 Node: MIPS-Chars526024
   26533 Node: MMIX-Dependent526566
   26534 Node: MMIX-Opts526946
   26535 Node: MMIX-Expand530550
   26536 Node: MMIX-Syntax531865
   26537 Ref: mmixsite532222
   26538 Node: MMIX-Chars533063
   26539 Node: MMIX-Symbols533937
   26540 Node: MMIX-Regs536005
   26541 Node: MMIX-Pseudos537030
   26542 Ref: MMIX-loc537171
   26543 Ref: MMIX-local538251
   26544 Ref: MMIX-is538783
   26545 Ref: MMIX-greg539054
   26546 Ref: GREG-base539973
   26547 Ref: MMIX-byte541290
   26548 Ref: MMIX-constants541761
   26549 Ref: MMIX-prefix542407
   26550 Ref: MMIX-spec542781
   26551 Node: MMIX-mmixal543115
   26552 Node: MSP430-Dependent546613
   26553 Node: MSP430 Options547082
   26554 Node: MSP430 Syntax549045
   26555 Node: MSP430-Macros549361
   26556 Node: MSP430-Chars550092
   26557 Node: MSP430-Regs550807
   26558 Node: MSP430-Ext551367
   26559 Node: MSP430 Floating Point553188
   26560 Node: MSP430 Directives553412
   26561 Node: MSP430 Opcodes554733
   26562 Node: MSP430 Profiling Capability555128
   26563 Node: NDS32-Dependent557457
   26564 Node: NDS32 Options558069
   26565 Node: NDS32 Syntax559970
   26566 Node: NDS32-Chars560238
   26567 Node: NDS32-Regs560705
   26568 Node: NDS32-Ops561559
   26569 Node: NiosII-Dependent565154
   26570 Node: Nios II Options565573
   26571 Node: Nios II Syntax566494
   26572 Node: Nios II Chars566700
   26573 Node: Nios II Relocations566891
   26574 Node: Nios II Directives568463
   26575 Node: Nios II Opcodes570026
   26576 Node: NS32K-Dependent570301
   26577 Node: NS32K Syntax570524
   26578 Node: NS32K-Chars570673
   26579 Node: PDP-11-Dependent571413
   26580 Node: PDP-11-Options571802
   26581 Node: PDP-11-Pseudos576873
   26582 Node: PDP-11-Syntax577218
   26583 Node: PDP-11-Mnemonics578050
   26584 Node: PDP-11-Synthetic578352
   26585 Node: PJ-Dependent578570
   26586 Node: PJ Options578833
   26587 Node: PJ Syntax579128
   26588 Node: PJ-Chars579293
   26589 Node: PPC-Dependent579842
   26590 Node: PowerPC-Opts580175
   26591 Node: PowerPC-Pseudo583671
   26592 Node: PowerPC-Syntax584293
   26593 Node: PowerPC-Chars584483
   26594 Node: RL78-Dependent585234
   26595 Node: RL78-Opts585632
   26596 Node: RL78-Modifiers586171
   26597 Node: RL78-Directives586947
   26598 Node: RL78-Syntax587552
   26599 Node: RL78-Chars587748
   26600 Node: RX-Dependent588304
   26601 Node: RX-Opts588735
   26602 Node: RX-Modifiers592142
   26603 Node: RX-Directives593246
   26604 Node: RX-Float593986
   26605 Node: RX-Syntax594627
   26606 Node: RX-Chars594806
   26607 Node: S/390-Dependent595358
   26608 Node: s390 Options596074
   26609 Node: s390 Characters597620
   26610 Node: s390 Syntax598141
   26611 Node: s390 Register599042
   26612 Node: s390 Mnemonics599855
   26613 Node: s390 Operands602875
   26614 Node: s390 Formats605494
   26615 Node: s390 Aliases613365
   26616 Node: s390 Operand Modifier617262
   26617 Node: s390 Instruction Marker621063
   26618 Node: s390 Literal Pool Entries622079
   26619 Node: s390 Directives624002
   26620 Node: s390 Floating Point629058
   26621 Node: SCORE-Dependent629504
   26622 Node: SCORE-Opts629809
   26623 Node: SCORE-Pseudo631097
   26624 Node: SCORE-Syntax633174
   26625 Node: SCORE-Chars633356
   26626 Node: SH-Dependent633914
   26627 Node: SH Options634325
   26628 Node: SH Syntax635380
   26629 Node: SH-Chars635653
   26630 Node: SH-Regs636196
   26631 Node: SH-Addressing636810
   26632 Node: SH Floating Point637719
   26633 Node: SH Directives638813
   26634 Node: SH Opcodes639214
   26635 Node: SH64-Dependent643536
   26636 Node: SH64 Options643899
   26637 Node: SH64 Syntax645696
   26638 Node: SH64-Chars645979
   26639 Node: SH64-Regs646528
   26640 Node: SH64-Addressing647624
   26641 Node: SH64 Directives648807
   26642 Node: SH64 Opcodes649792
   26643 Node: Sparc-Dependent650508
   26644 Node: Sparc-Opts650920
   26645 Node: Sparc-Aligned-Data655934
   26646 Node: Sparc-Syntax656766
   26647 Node: Sparc-Chars657340
   26648 Node: Sparc-Regs657903
   26649 Node: Sparc-Constants663204
   26650 Node: Sparc-Relocs667964
   26651 Node: Sparc-Size-Translations673100
   26652 Node: Sparc-Float674749
   26653 Node: Sparc-Directives674944
   26654 Node: TIC54X-Dependent676904
   26655 Node: TIC54X-Opts677667
   26656 Node: TIC54X-Block678710
   26657 Node: TIC54X-Env679070
   26658 Node: TIC54X-Constants679418
   26659 Node: TIC54X-Subsyms679820
   26660 Node: TIC54X-Locals681729
   26661 Node: TIC54X-Builtins682473
   26662 Node: TIC54X-Ext684944
   26663 Node: TIC54X-Directives685515
   26664 Node: TIC54X-Macros696416
   26665 Node: TIC54X-MMRegs698527
   26666 Node: TIC54X-Syntax698765
   26667 Node: TIC54X-Chars698955
   26668 Node: TIC6X-Dependent699646
   26669 Node: TIC6X Options699949
   26670 Node: TIC6X Syntax701950
   26671 Node: TIC6X Directives703052
   26672 Node: TILE-Gx-Dependent705337
   26673 Node: TILE-Gx Options705647
   26674 Node: TILE-Gx Syntax705997
   26675 Node: TILE-Gx Opcodes708231
   26676 Node: TILE-Gx Registers708519
   26677 Node: TILE-Gx Modifiers709291
   26678 Node: TILE-Gx Directives714263
   26679 Node: TILEPro-Dependent715167
   26680 Node: TILEPro Options715476
   26681 Node: TILEPro Syntax715660
   26682 Node: TILEPro Opcodes717894
   26683 Node: TILEPro Registers718185
   26684 Node: TILEPro Modifiers718955
   26685 Node: TILEPro Directives723720
   26686 Node: Z80-Dependent724624
   26687 Node: Z80 Options725012
   26688 Node: Z80 Syntax726435
   26689 Node: Z80-Chars727107
   26690 Node: Z80-Regs727957
   26691 Node: Z80-Case728309
   26692 Node: Z80 Floating Point728754
   26693 Node: Z80 Directives728948
   26694 Node: Z80 Opcodes730573
   26695 Node: Z8000-Dependent731917
   26696 Node: Z8000 Options732878
   26697 Node: Z8000 Syntax733095
   26698 Node: Z8000-Chars733385
   26699 Node: Z8000-Regs733867
   26700 Node: Z8000-Addressing734657
   26701 Node: Z8000 Directives735774
   26702 Node: Z8000 Opcodes737383
   26703 Node: Vax-Dependent747325
   26704 Node: VAX-Opts747885
   26705 Node: VAX-float751620
   26706 Node: VAX-directives752252
   26707 Node: VAX-opcodes753113
   26708 Node: VAX-branch753502
   26709 Node: VAX-operands756009
   26710 Node: VAX-no756772
   26711 Node: VAX-Syntax757028
   26712 Node: VAX-Chars757194
   26713 Node: V850-Dependent757748
   26714 Node: V850 Options758146
   26715 Node: V850 Syntax761792
   26716 Node: V850-Chars762032
   26717 Node: V850-Regs762576
   26718 Node: V850 Floating Point764144
   26719 Node: V850 Directives764350
   26720 Node: V850 Opcodes766417
   26721 Node: XGATE-Dependent772309
   26722 Node: XGATE-Opts772729
   26723 Node: XGATE-Syntax773720
   26724 Node: XGATE-Directives775799
   26725 Node: XGATE-Float776038
   26726 Node: XGATE-opcodes776535
   26727 Node: XSTORMY16-Dependent776647
   26728 Node: XStormy16 Syntax776993
   26729 Node: XStormy16-Chars777183
   26730 Node: XStormy16 Directives777796
   26731 Node: XStormy16 Opcodes778451
   26732 Node: Xtensa-Dependent779507
   26733 Node: Xtensa Options780241
   26734 Node: Xtensa Syntax783395
   26735 Node: Xtensa Opcodes785539
   26736 Node: Xtensa Registers787333
   26737 Node: Xtensa Optimizations787966
   26738 Node: Density Instructions788418
   26739 Node: Xtensa Automatic Alignment789520
   26740 Node: Xtensa Relaxation791967
   26741 Node: Xtensa Branch Relaxation792932
   26742 Node: Xtensa Call Relaxation794304
   26743 Node: Xtensa Jump Relaxation796085
   26744 Node: Xtensa Immediate Relaxation798185
   26745 Node: Xtensa Directives800759
   26746 Node: Schedule Directive802468
   26747 Node: Longcalls Directive802808
   26748 Node: Transform Directive803352
   26749 Node: Literal Directive804094
   26750 Ref: Literal Directive-Footnote-1807633
   26751 Node: Literal Position Directive807775
   26752 Node: Literal Prefix Directive809474
   26753 Node: Absolute Literals Directive810372
   26754 Node: Reporting Bugs811679
   26755 Node: Bug Criteria812405
   26756 Node: Bug Reporting813172
   26757 Node: Acknowledgements819821
   26758 Ref: Acknowledgements-Footnote-1824786
   26759 Node: GNU Free Documentation License824812
   26760 Node: AS Index849981
   26761 
   26762 End Tag Table
   26763