Home | History | Annotate | Download | only in info
      1 This is as.info, produced by makeinfo version 4.11 from /home/jingyu/projects/gcc/android-toolchainsrc/build/../binutils/binutils-2.19/gas/doc/as.texinfo.
      2 
      3 START-INFO-DIR-ENTRY
      4 * As: (as).                     The GNU assembler.
      5 * Gas: (as).                    The GNU assembler.
      6 END-INFO-DIR-ENTRY
      7 
      8    This file documents the GNU Assembler "as".
      9 
     10    Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002,
     11 2006, 2007 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.1 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.19.
     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       [-debug-prefix-map OLD=NEW]
     61       [-defsym SYM=VAL] [-f] [-g] [-gstabs]
     62       [-gstabs+] [-gdwarf-2] [-help] [-I DIR] [-J]
     63       [-K] [-L] [-listing-lhs-width=NUM]
     64       [-listing-lhs-width2=NUM] [-listing-rhs-width=NUM]
     65       [-listing-cont-lines=NUM] [-keep-locals] [-o
     66       OBJFILE] [-R] [-reduce-memory-overheads] [-statistics]
     67       [-v] [-version] [-version] [-W] [-warn]
     68       [-fatal-warnings] [-w] [-x] [-Z] [@FILE]
     69       [-target-help] [TARGET-OPTIONS]
     70       [-|FILES ...]
     71 
     72      _Target Alpha options:_
     73         [-mCPU]
     74         [-mdebug | -no-mdebug]
     75         [-relax] [-g] [-GSIZE]
     76         [-F] [-32addr]
     77 
     78      _Target ARC options:_
     79         [-marc[5|6|7|8]]
     80         [-EB|-EL]
     81 
     82      _Target ARM options:_
     83         [-mcpu=PROCESSOR[+EXTENSION...]]
     84         [-march=ARCHITECTURE[+EXTENSION...]]
     85         [-mfpu=FLOATING-POINT-FORMAT]
     86         [-mfloat-abi=ABI]
     87         [-meabi=VER]
     88         [-mthumb]
     89         [-EB|-EL]
     90         [-mapcs-32|-mapcs-26|-mapcs-float|
     91          -mapcs-reentrant]
     92         [-mthumb-interwork] [-k]
     93 
     94      _Target CRIS options:_
     95         [-underscore | -no-underscore]
     96         [-pic] [-N]
     97         [-emulation=criself | -emulation=crisaout]
     98         [-march=v0_v10 | -march=v10 | -march=v32 | -march=common_v10_v32]
     99 
    100      _Target D10V options:_
    101         [-O]
    102 
    103      _Target D30V options:_
    104         [-O|-n|-N]
    105 
    106      _Target H8/300 options:_
    107         [-h-tick-hex]
    108 
    109      _Target i386 options:_
    110         [-32|-64] [-n]
    111         [-march=CPU[+EXTENSION...]] [-mtune=CPU]
    112 
    113      _Target i960 options:_
    114         [-ACA|-ACA_A|-ACB|-ACC|-AKA|-AKB|
    115          -AKC|-AMC]
    116         [-b] [-no-relax]
    117 
    118      _Target IA-64 options:_
    119         [-mconstant-gp|-mauto-pic]
    120         [-milp32|-milp64|-mlp64|-mp64]
    121         [-mle|mbe]
    122         [-mtune=itanium1|-mtune=itanium2]
    123         [-munwind-check=warning|-munwind-check=error]
    124         [-mhint.b=ok|-mhint.b=warning|-mhint.b=error]
    125         [-x|-xexplicit] [-xauto] [-xdebug]
    126 
    127      _Target IP2K options:_
    128         [-mip2022|-mip2022ext]
    129 
    130      _Target M32C options:_
    131         [-m32c|-m16c] [-relax] [-h-tick-hex]
    132 
    133      _Target M32R options:_
    134         [-m32rx|-[no-]warn-explicit-parallel-conflicts|
    135         -W[n]p]
    136 
    137      _Target M680X0 options:_
    138         [-l] [-m68000|-m68010|-m68020|...]
    139 
    140      _Target M68HC11 options:_
    141         [-m68hc11|-m68hc12|-m68hcs12]
    142         [-mshort|-mlong]
    143         [-mshort-double|-mlong-double]
    144         [-force-long-branches] [-short-branches]
    145         [-strict-direct-mode] [-print-insn-syntax]
    146         [-print-opcodes] [-generate-example]
    147 
    148      _Target MCORE options:_
    149         [-jsri2bsr] [-sifilter] [-relax]
    150         [-mcpu=[210|340]]
    151 
    152      _Target MIPS options:_
    153         [-nocpp] [-EL] [-EB] [-O[OPTIMIZATION LEVEL]]
    154         [-g[DEBUG LEVEL]] [-G NUM] [-KPIC] [-call_shared]
    155         [-non_shared] [-xgot [-mvxworks-pic]
    156         [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32]
    157         [-march=CPU] [-mtune=CPU] [-mips1] [-mips2]
    158         [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2]
    159         [-mips64] [-mips64r2]
    160         [-construct-floats] [-no-construct-floats]
    161         [-trap] [-no-break] [-break] [-no-trap]
    162         [-mfix7000] [-mno-fix7000]
    163         [-mips16] [-no-mips16]
    164         [-msmartmips] [-mno-smartmips]
    165         [-mips3d] [-no-mips3d]
    166         [-mdmx] [-no-mdmx]
    167         [-mdsp] [-mno-dsp]
    168         [-mdspr2] [-mno-dspr2]
    169         [-mmt] [-mno-mt]
    170         [-mdebug] [-no-mdebug]
    171         [-mpdr] [-mno-pdr]
    172 
    173      _Target MMIX options:_
    174         [-fixed-special-register-names] [-globalize-symbols]
    175         [-gnu-syntax] [-relax] [-no-predefined-symbols]
    176         [-no-expand] [-no-merge-gregs] [-x]
    177         [-linker-allocated-gregs]
    178 
    179      _Target PDP11 options:_
    180         [-mpic|-mno-pic] [-mall] [-mno-extensions]
    181         [-mEXTENSION|-mno-EXTENSION]
    182         [-mCPU] [-mMACHINE]
    183 
    184      _Target picoJava options:_
    185         [-mb|-me]
    186 
    187      _Target PowerPC options:_
    188         [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604|
    189          -m403|-m405|-mppc64|-m620|-mppc64bridge|-mbooke|
    190          -mbooke32|-mbooke64]
    191         [-mcom|-many|-maltivec|-mvsx] [-memb]
    192         [-mregnames|-mno-regnames]
    193         [-mrelocatable|-mrelocatable-lib]
    194         [-mlittle|-mlittle-endian|-mbig|-mbig-endian]
    195         [-msolaris|-mno-solaris]
    196 
    197      _Target SPARC options:_
    198         [-Av6|-Av7|-Av8|-Asparclet|-Asparclite
    199          -Av8plus|-Av8plusa|-Av9|-Av9a]
    200         [-xarch=v8plus|-xarch=v8plusa] [-bump]
    201         [-32|-64]
    202 
    203      _Target TIC54X options:_
    204       [-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf]
    205       [-merrors-to-file <FILENAME>|-me <FILENAME>]
    206 
    207 
    208      _Target Z80 options:_
    209        [-z80] [-r800]
    210        [ -ignore-undocumented-instructions] [-Wnud]
    211        [ -ignore-unportable-instructions] [-Wnup]
    212        [ -warn-undocumented-instructions] [-Wud]
    213        [ -warn-unportable-instructions] [-Wup]
    214        [ -forbid-undocumented-instructions] [-Fud]
    215        [ -forbid-unportable-instructions] [-Fup]
    216 
    217 
    218      _Target Xtensa options:_
    219       [-[no-]text-section-literals] [-[no-]absolute-literals]
    220       [-[no-]target-align] [-[no-]longcalls]
    221       [-[no-]transform]
    222       [-rename-section OLDNAME=NEWNAME]
    223 
    224 `@FILE'
    225      Read command-line options from FILE.  The options read are
    226      inserted in place of the original @FILE option.  If FILE does not
    227      exist, or cannot be read, then the option will be treated
    228      literally, and not removed.
    229 
    230      Options in FILE are separated by whitespace.  A whitespace
    231      character may be included in an option by surrounding the entire
    232      option in either single or double quotes.  Any character
    233      (including a backslash) may be included by prefixing the character
    234      to be included with a backslash.  The FILE may itself contain
    235      additional @FILE options; any such options will be processed
    236      recursively.
    237 
    238 `-a[cdghlmns]'
    239      Turn on listings, in any of a variety of ways:
    240 
    241     `-ac'
    242           omit false conditionals
    243 
    244     `-ad'
    245           omit debugging directives
    246 
    247     `-ag'
    248           include general information, like as version and options
    249           passed
    250 
    251     `-ah'
    252           include high-level source
    253 
    254     `-al'
    255           include assembly
    256 
    257     `-am'
    258           include macro expansions
    259 
    260     `-an'
    261           omit forms processing
    262 
    263     `-as'
    264           include symbols
    265 
    266     `=file'
    267           set the name of the listing file
    268 
    269      You may combine these options; for example, use `-aln' for assembly
    270      listing without forms processing.  The `=file' option, if used,
    271      must be the last one.  By itself, `-a' defaults to `-ahls'.
    272 
    273 `--alternate'
    274      Begin in alternate macro mode.  *Note `.altmacro': Altmacro.
    275 
    276 `-D'
    277      Ignored.  This option is accepted for script compatibility with
    278      calls to other assemblers.
    279 
    280 `--debug-prefix-map OLD=NEW'
    281      When assembling files in directory `OLD', record debugging
    282      information describing them as in `NEW' instead.
    283 
    284 `--defsym SYM=VALUE'
    285      Define the symbol SYM to be VALUE before assembling the input file.
    286      VALUE must be an integer constant.  As in C, a leading `0x'
    287      indicates a hexadecimal value, and a leading `0' indicates an octal
    288      value.  The value of the symbol can be overridden inside a source
    289      file via the use of a `.set' pseudo-op.
    290 
    291 `-f'
    292      "fast"--skip whitespace and comment preprocessing (assume source is
    293      compiler output).
    294 
    295 `-g'
    296 `--gen-debug'
    297      Generate debugging information for each assembler source line
    298      using whichever debug format is preferred by the target.  This
    299      currently means either STABS, ECOFF or DWARF2.
    300 
    301 `--gstabs'
    302      Generate stabs debugging information for each assembler line.  This
    303      may help debugging assembler code, if the debugger can handle it.
    304 
    305 `--gstabs+'
    306      Generate stabs debugging information for each assembler line, with
    307      GNU extensions that probably only gdb can handle, and that could
    308      make other debuggers crash or refuse to read your program.  This
    309      may help debugging assembler code.  Currently the only GNU
    310      extension is the location of the current working directory at
    311      assembling time.
    312 
    313 `--gdwarf-2'
    314      Generate DWARF2 debugging information for each assembler line.
    315      This may help debugging assembler code, if the debugger can handle
    316      it.  Note--this option is only supported by some targets, not all
    317      of them.
    318 
    319 `--help'
    320      Print a summary of the command line options and exit.
    321 
    322 `--target-help'
    323      Print a summary of all target specific options and exit.
    324 
    325 `-I DIR'
    326      Add directory DIR to the search list for `.include' directives.
    327 
    328 `-J'
    329      Don't warn about signed overflow.
    330 
    331 `-K'
    332      Issue warnings when difference tables altered for long
    333      displacements.
    334 
    335 `-L'
    336 `--keep-locals'
    337      Keep (in the symbol table) local symbols.  These symbols start with
    338      system-specific local label prefixes, typically `.L' for ELF
    339      systems or `L' for traditional a.out systems.  *Note Symbol
    340      Names::.
    341 
    342 `--listing-lhs-width=NUMBER'
    343      Set the maximum width, in words, of the output data column for an
    344      assembler listing to NUMBER.
    345 
    346 `--listing-lhs-width2=NUMBER'
    347      Set the maximum width, in words, of the output data column for
    348      continuation lines in an assembler listing to NUMBER.
    349 
    350 `--listing-rhs-width=NUMBER'
    351      Set the maximum width of an input source line, as displayed in a
    352      listing, to NUMBER bytes.
    353 
    354 `--listing-cont-lines=NUMBER'
    355      Set the maximum number of lines printed in a listing for a single
    356      line of input to NUMBER + 1.
    357 
    358 `-o OBJFILE'
    359      Name the object-file output from `as' OBJFILE.
    360 
    361 `-R'
    362      Fold the data section into the text section.
    363 
    364      Set the default size of GAS's hash tables to a prime number close
    365      to NUMBER.  Increasing this value can reduce the length of time it
    366      takes the assembler to perform its tasks, at the expense of
    367      increasing the assembler's memory requirements.  Similarly
    368      reducing this value can reduce the memory requirements at the
    369      expense of speed.
    370 
    371 `--reduce-memory-overheads'
    372      This option reduces GAS's memory requirements, at the expense of
    373      making the assembly processes slower.  Currently this switch is a
    374      synonym for `--hash-size=4051', but in the future it may have
    375      other effects as well.
    376 
    377 `--statistics'
    378      Print the maximum space (in bytes) and total time (in seconds)
    379      used by assembly.
    380 
    381 `--strip-local-absolute'
    382      Remove local absolute symbols from the outgoing symbol table.
    383 
    384 `-v'
    385 `-version'
    386      Print the `as' version.
    387 
    388 `--version'
    389      Print the `as' version and exit.
    390 
    391 `-W'
    392 `--no-warn'
    393      Suppress warning messages.
    394 
    395 `--fatal-warnings'
    396      Treat warnings as errors.
    397 
    398 `--warn'
    399      Don't suppress warning messages or treat them as errors.
    400 
    401 `-w'
    402      Ignored.
    403 
    404 `-x'
    405      Ignored.
    406 
    407 `-Z'
    408      Generate an object file even after errors.
    409 
    410 `-- | FILES ...'
    411      Standard input, or source files to assemble.
    412 
    413 
    414    The following options are available when as is configured for an ARC
    415 processor.
    416 
    417 `-marc[5|6|7|8]'
    418      This option selects the core processor variant.
    419 
    420 `-EB | -EL'
    421      Select either big-endian (-EB) or little-endian (-EL) output.
    422 
    423    The following options are available when as is configured for the ARM
    424 processor family.
    425 
    426 `-mcpu=PROCESSOR[+EXTENSION...]'
    427      Specify which ARM processor variant is the target.
    428 
    429 `-march=ARCHITECTURE[+EXTENSION...]'
    430      Specify which ARM architecture variant is used by the target.
    431 
    432 `-mfpu=FLOATING-POINT-FORMAT'
    433      Select which Floating Point architecture is the target.
    434 
    435 `-mfloat-abi=ABI'
    436      Select which floating point ABI is in use.
    437 
    438 `-mthumb'
    439      Enable Thumb only instruction decoding.
    440 
    441 `-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant'
    442      Select which procedure calling convention is in use.
    443 
    444 `-EB | -EL'
    445      Select either big-endian (-EB) or little-endian (-EL) output.
    446 
    447 `-mthumb-interwork'
    448      Specify that the code has been generated with interworking between
    449      Thumb and ARM code in mind.
    450 
    451 `-k'
    452      Specify that PIC code has been generated.
    453 
    454    See the info pages for documentation of the CRIS-specific options.
    455 
    456    The following options are available when as is configured for a D10V
    457 processor.
    458 `-O'
    459      Optimize output by parallelizing instructions.
    460 
    461    The following options are available when as is configured for a D30V
    462 processor.
    463 `-O'
    464      Optimize output by parallelizing instructions.
    465 
    466 `-n'
    467      Warn when nops are generated.
    468 
    469 `-N'
    470      Warn when a nop after a 32-bit multiply instruction is generated.
    471 
    472    The following options are available when as is configured for the
    473 Intel 80960 processor.
    474 
    475 `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
    476      Specify which variant of the 960 architecture is the target.
    477 
    478 `-b'
    479      Add code to collect statistics about branches taken.
    480 
    481 `-no-relax'
    482      Do not alter compare-and-branch instructions for long
    483      displacements; error if necessary.
    484 
    485 
    486    The following options are available when as is configured for the
    487 Ubicom IP2K series.
    488 
    489 `-mip2022ext'
    490      Specifies that the extended IP2022 instructions are allowed.
    491 
    492 `-mip2022'
    493      Restores the default behaviour, which restricts the permitted
    494      instructions to just the basic IP2022 ones.
    495 
    496 
    497    The following options are available when as is configured for the
    498 Renesas M32C and M16C processors.
    499 
    500 `-m32c'
    501      Assemble M32C instructions.
    502 
    503 `-m16c'
    504      Assemble M16C instructions (the default).
    505 
    506 `-relax'
    507      Enable support for link-time relaxations.
    508 
    509 `-h-tick-hex'
    510      Support H'00 style hex constants in addition to 0x00 style.
    511 
    512 
    513    The following options are available when as is configured for the
    514 Renesas M32R (formerly Mitsubishi M32R) series.
    515 
    516 `--m32rx'
    517      Specify which processor in the M32R family is the target.  The
    518      default is normally the M32R, but this option changes it to the
    519      M32RX.
    520 
    521 `--warn-explicit-parallel-conflicts or --Wp'
    522      Produce warning messages when questionable parallel constructs are
    523      encountered.
    524 
    525 `--no-warn-explicit-parallel-conflicts or --Wnp'
    526      Do not produce warning messages when questionable parallel
    527      constructs are encountered.
    528 
    529 
    530    The following options are available when as is configured for the
    531 Motorola 68000 series.
    532 
    533 `-l'
    534      Shorten references to undefined symbols, to one word instead of
    535      two.
    536 
    537 `-m68000 | -m68008 | -m68010 | -m68020 | -m68030'
    538 `| -m68040 | -m68060 | -m68302 | -m68331 | -m68332'
    539 `| -m68333 | -m68340 | -mcpu32 | -m5200'
    540      Specify what processor in the 68000 family is the target.  The
    541      default is normally the 68020, but this can be changed at
    542      configuration time.
    543 
    544 `-m68881 | -m68882 | -mno-68881 | -mno-68882'
    545      The target machine does (or does not) have a floating-point
    546      coprocessor.  The default is to assume a coprocessor for 68020,
    547      68030, and cpu32.  Although the basic 68000 is not compatible with
    548      the 68881, a combination of the two can be specified, since it's
    549      possible to do emulation of the coprocessor instructions with the
    550      main processor.
    551 
    552 `-m68851 | -mno-68851'
    553      The target machine does (or does not) have a memory-management
    554      unit coprocessor.  The default is to assume an MMU for 68020 and
    555      up.
    556 
    557 
    558    For details about the PDP-11 machine dependent features options, see
    559 *note PDP-11-Options::.
    560 
    561 `-mpic | -mno-pic'
    562      Generate position-independent (or position-dependent) code.  The
    563      default is `-mpic'.
    564 
    565 `-mall'
    566 `-mall-extensions'
    567      Enable all instruction set extensions.  This is the default.
    568 
    569 `-mno-extensions'
    570      Disable all instruction set extensions.
    571 
    572 `-mEXTENSION | -mno-EXTENSION'
    573      Enable (or disable) a particular instruction set extension.
    574 
    575 `-mCPU'
    576      Enable the instruction set extensions supported by a particular
    577      CPU, and disable all other extensions.
    578 
    579 `-mMACHINE'
    580      Enable the instruction set extensions supported by a particular
    581      machine model, and disable all other extensions.
    582 
    583    The following options are available when as is configured for a
    584 picoJava processor.
    585 
    586 `-mb'
    587      Generate "big endian" format output.
    588 
    589 `-ml'
    590      Generate "little endian" format output.
    591 
    592 
    593    The following options are available when as is configured for the
    594 Motorola 68HC11 or 68HC12 series.
    595 
    596 `-m68hc11 | -m68hc12 | -m68hcs12'
    597      Specify what processor is the target.  The default is defined by
    598      the configuration option when building the assembler.
    599 
    600 `-mshort'
    601      Specify to use the 16-bit integer ABI.
    602 
    603 `-mlong'
    604      Specify to use the 32-bit integer ABI.
    605 
    606 `-mshort-double'
    607      Specify to use the 32-bit double ABI.
    608 
    609 `-mlong-double'
    610      Specify to use the 64-bit double ABI.
    611 
    612 `--force-long-branches'
    613      Relative branches are turned into absolute ones. This concerns
    614      conditional branches, unconditional branches and branches to a sub
    615      routine.
    616 
    617 `-S | --short-branches'
    618      Do not turn relative branches into absolute ones when the offset
    619      is out of range.
    620 
    621 `--strict-direct-mode'
    622      Do not turn the direct addressing mode into extended addressing
    623      mode when the instruction does not support direct addressing mode.
    624 
    625 `--print-insn-syntax'
    626      Print the syntax of instruction in case of error.
    627 
    628 `--print-opcodes'
    629      print the list of instructions with syntax and then exit.
    630 
    631 `--generate-example'
    632      print an example of instruction for each possible instruction and
    633      then exit.  This option is only useful for testing `as'.
    634 
    635 
    636    The following options are available when `as' is configured for the
    637 SPARC architecture:
    638 
    639 `-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite'
    640 `-Av8plus | -Av8plusa | -Av9 | -Av9a'
    641      Explicitly select a variant of the SPARC architecture.
    642 
    643      `-Av8plus' and `-Av8plusa' select a 32 bit environment.  `-Av9'
    644      and `-Av9a' select a 64 bit environment.
    645 
    646      `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with
    647      UltraSPARC extensions.
    648 
    649 `-xarch=v8plus | -xarch=v8plusa'
    650      For compatibility with the Solaris v9 assembler.  These options are
    651      equivalent to -Av8plus and -Av8plusa, respectively.
    652 
    653 `-bump'
    654      Warn when the assembler switches to another architecture.
    655 
    656    The following options are available when as is configured for the
    657 'c54x architecture.
    658 
    659 `-mfar-mode'
    660      Enable extended addressing mode.  All addresses and relocations
    661      will assume extended addressing (usually 23 bits).
    662 
    663 `-mcpu=CPU_VERSION'
    664      Sets the CPU version being compiled for.
    665 
    666 `-merrors-to-file FILENAME'
    667      Redirect error output to a file, for broken systems which don't
    668      support such behaviour in the shell.
    669 
    670    The following options are available when as is configured for a MIPS
    671 processor.
    672 
    673 `-G NUM'
    674      This option sets the largest size of an object that can be
    675      referenced implicitly with the `gp' register.  It is only accepted
    676      for targets that use ECOFF format, such as a DECstation running
    677      Ultrix.  The default value is 8.
    678 
    679 `-EB'
    680      Generate "big endian" format output.
    681 
    682 `-EL'
    683      Generate "little endian" format output.
    684 
    685 `-mips1'
    686 `-mips2'
    687 `-mips3'
    688 `-mips4'
    689 `-mips5'
    690 `-mips32'
    691 `-mips32r2'
    692 `-mips64'
    693 `-mips64r2'
    694      Generate code for a particular MIPS Instruction Set Architecture
    695      level.  `-mips1' is an alias for `-march=r3000', `-mips2' is an
    696      alias for `-march=r6000', `-mips3' is an alias for `-march=r4000'
    697      and `-mips4' is an alias for `-march=r8000'.  `-mips5', `-mips32',
    698      `-mips32r2', `-mips64', and `-mips64r2' correspond to generic
    699      `MIPS V', `MIPS32', `MIPS32 Release 2', `MIPS64', and `MIPS64
    700      Release 2' ISA processors, respectively.
    701 
    702 `-march=CPU'
    703      Generate code for a particular MIPS cpu.
    704 
    705 `-mtune=CPU'
    706      Schedule and tune for a particular MIPS cpu.
    707 
    708 `-mfix7000'
    709 `-mno-fix7000'
    710      Cause nops to be inserted if the read of the destination register
    711      of an mfhi or mflo instruction occurs in the following two
    712      instructions.
    713 
    714 `-mdebug'
    715 `-no-mdebug'
    716      Cause stabs-style debugging output to go into an ECOFF-style
    717      .mdebug section instead of the standard ELF .stabs sections.
    718 
    719 `-mpdr'
    720 `-mno-pdr'
    721      Control generation of `.pdr' sections.
    722 
    723 `-mgp32'
    724 `-mfp32'
    725      The register sizes are normally inferred from the ISA and ABI, but
    726      these flags force a certain group of registers to be treated as 32
    727      bits wide at all times.  `-mgp32' controls the size of
    728      general-purpose registers and `-mfp32' controls the size of
    729      floating-point registers.
    730 
    731 `-mips16'
    732 `-no-mips16'
    733      Generate code for the MIPS 16 processor.  This is equivalent to
    734      putting `.set mips16' at the start of the assembly file.
    735      `-no-mips16' turns off this option.
    736 
    737 `-msmartmips'
    738 `-mno-smartmips'
    739      Enables the SmartMIPS extension to the MIPS32 instruction set.
    740      This is equivalent to putting `.set smartmips' at the start of the
    741      assembly file.  `-mno-smartmips' turns off this option.
    742 
    743 `-mips3d'
    744 `-no-mips3d'
    745      Generate code for the MIPS-3D Application Specific Extension.
    746      This tells the assembler to accept MIPS-3D instructions.
    747      `-no-mips3d' turns off this option.
    748 
    749 `-mdmx'
    750 `-no-mdmx'
    751      Generate code for the MDMX Application Specific Extension.  This
    752      tells the assembler to accept MDMX instructions.  `-no-mdmx' turns
    753      off this option.
    754 
    755 `-mdsp'
    756 `-mno-dsp'
    757      Generate code for the DSP Release 1 Application Specific Extension.
    758      This tells the assembler to accept DSP Release 1 instructions.
    759      `-mno-dsp' turns off this option.
    760 
    761 `-mdspr2'
    762 `-mno-dspr2'
    763      Generate code for the DSP Release 2 Application Specific Extension.
    764      This option implies -mdsp.  This tells the assembler to accept DSP
    765      Release 2 instructions.  `-mno-dspr2' turns off this option.
    766 
    767 `-mmt'
    768 `-mno-mt'
    769      Generate code for the MT Application Specific Extension.  This
    770      tells the assembler to accept MT instructions.  `-mno-mt' turns
    771      off this option.
    772 
    773 `--construct-floats'
    774 `--no-construct-floats'
    775      The `--no-construct-floats' option disables the construction of
    776      double width floating point constants by loading the two halves of
    777      the value into the two single width floating point registers that
    778      make up the double width register.  By default
    779      `--construct-floats' is selected, allowing construction of these
    780      floating point constants.
    781 
    782 `--emulation=NAME'
    783      This option causes `as' to emulate `as' configured for some other
    784      target, in all respects, including output format (choosing between
    785      ELF and ECOFF only), handling of pseudo-opcodes which may generate
    786      debugging information or store symbol table information, and
    787      default endianness.  The available configuration names are:
    788      `mipsecoff', `mipself', `mipslecoff', `mipsbecoff', `mipslelf',
    789      `mipsbelf'.  The first two do not alter the default endianness
    790      from that of the primary target for which the assembler was
    791      configured; the others change the default to little- or big-endian
    792      as indicated by the `b' or `l' in the name.  Using `-EB' or `-EL'
    793      will override the endianness selection in any case.
    794 
    795      This option is currently supported only when the primary target
    796      `as' is configured for is a MIPS ELF or ECOFF target.
    797      Furthermore, the primary target or others specified with
    798      `--enable-targets=...' at configuration time must include support
    799      for the other format, if both are to be available.  For example,
    800      the Irix 5 configuration includes support for both.
    801 
    802      Eventually, this option will support more configurations, with more
    803      fine-grained control over the assembler's behavior, and will be
    804      supported for more processors.
    805 
    806 `-nocpp'
    807      `as' ignores this option.  It is accepted for compatibility with
    808      the native tools.
    809 
    810 `--trap'
    811 `--no-trap'
    812 `--break'
    813 `--no-break'
    814      Control how to deal with multiplication overflow and division by
    815      zero.  `--trap' or `--no-break' (which are synonyms) take a trap
    816      exception (and only work for Instruction Set Architecture level 2
    817      and higher); `--break' or `--no-trap' (also synonyms, and the
    818      default) take a break exception.
    819 
    820 `-n'
    821      When this option is used, `as' will issue a warning every time it
    822      generates a nop instruction from a macro.
    823 
    824    The following options are available when as is configured for an
    825 MCore processor.
    826 
    827 `-jsri2bsr'
    828 `-nojsri2bsr'
    829      Enable or disable the JSRI to BSR transformation.  By default this
    830      is enabled.  The command line option `-nojsri2bsr' can be used to
    831      disable it.
    832 
    833 `-sifilter'
    834 `-nosifilter'
    835      Enable or disable the silicon filter behaviour.  By default this
    836      is disabled.  The default can be overridden by the `-sifilter'
    837      command line option.
    838 
    839 `-relax'
    840      Alter jump instructions for long displacements.
    841 
    842 `-mcpu=[210|340]'
    843      Select the cpu type on the target hardware.  This controls which
    844      instructions can be assembled.
    845 
    846 `-EB'
    847      Assemble for a big endian target.
    848 
    849 `-EL'
    850      Assemble for a little endian target.
    851 
    852 
    853    See the info pages for documentation of the MMIX-specific options.
    854 
    855    The following options are available when as is configured for an
    856 Xtensa processor.
    857 
    858 `--text-section-literals | --no-text-section-literals'
    859      With `--text-section-literals', literal pools are interspersed in
    860      the text section.  The default is `--no-text-section-literals',
    861      which places literals in a separate section in the output file.
    862      These options only affect literals referenced via PC-relative
    863      `L32R' instructions; literals for absolute mode `L32R'
    864      instructions are handled separately.
    865 
    866 `--absolute-literals | --no-absolute-literals'
    867      Indicate to the assembler whether `L32R' instructions use absolute
    868      or PC-relative addressing.  The default is to assume absolute
    869      addressing if the Xtensa processor includes the absolute `L32R'
    870      addressing option.  Otherwise, only the PC-relative `L32R' mode
    871      can be used.
    872 
    873 `--target-align | --no-target-align'
    874      Enable or disable automatic alignment to reduce branch penalties
    875      at the expense of some code density.  The default is
    876      `--target-align'.
    877 
    878 `--longcalls | --no-longcalls'
    879      Enable or disable transformation of call instructions to allow
    880      calls across a greater range of addresses.  The default is
    881      `--no-longcalls'.
    882 
    883 `--transform | --no-transform'
    884      Enable or disable all assembler transformations of Xtensa
    885      instructions.  The default is `--transform'; `--no-transform'
    886      should be used only in the rare cases when the instructions must
    887      be exactly as specified in the assembly source.
    888 
    889 `--rename-section OLDNAME=NEWNAME'
    890      When generating output sections, rename the OLDNAME section to
    891      NEWNAME.
    892 
    893    The following options are available when as is configured for a Z80
    894 family processor.
    895 `-z80'
    896      Assemble for Z80 processor.
    897 
    898 `-r800'
    899      Assemble for R800 processor.
    900 
    901 `-ignore-undocumented-instructions'
    902 `-Wnud'
    903      Assemble undocumented Z80 instructions that also work on R800
    904      without warning.
    905 
    906 `-ignore-unportable-instructions'
    907 `-Wnup'
    908      Assemble all undocumented Z80 instructions without warning.
    909 
    910 `-warn-undocumented-instructions'
    911 `-Wud'
    912      Issue a warning for undocumented Z80 instructions that also work
    913      on R800.
    914 
    915 `-warn-unportable-instructions'
    916 `-Wup'
    917      Issue a warning for undocumented Z80 instructions that do not work
    918      on R800.
    919 
    920 `-forbid-undocumented-instructions'
    921 `-Fud'
    922      Treat all undocumented instructions as errors.
    923 
    924 `-forbid-unportable-instructions'
    925 `-Fup'
    926      Treat undocumented Z80 instructions that do not work on R800 as
    927      errors.
    928 
    929 * Menu:
    930 
    931 * Manual::                      Structure of this Manual
    932 * GNU Assembler::               The GNU Assembler
    933 * Object Formats::              Object File Formats
    934 * Command Line::                Command Line
    935 * Input Files::                 Input Files
    936 * Object::                      Output (Object) File
    937 * Errors::                      Error and Warning Messages
    938 
    939 
    940 File: as.info,  Node: Manual,  Next: GNU Assembler,  Up: Overview
    941 
    942 1.1 Structure of this Manual
    943 ============================
    944 
    945 This manual is intended to describe what you need to know to use GNU
    946 `as'.  We cover the syntax expected in source files, including notation
    947 for symbols, constants, and expressions; the directives that `as'
    948 understands; and of course how to invoke `as'.
    949 
    950    This manual also describes some of the machine-dependent features of
    951 various flavors of the assembler.
    952 
    953    On the other hand, this manual is _not_ intended as an introduction
    954 to programming in assembly language--let alone programming in general!
    955 In a similar vein, we make no attempt to introduce the machine
    956 architecture; we do _not_ describe the instruction set, standard
    957 mnemonics, registers or addressing modes that are standard to a
    958 particular architecture.  You may want to consult the manufacturer's
    959 machine architecture manual for this information.
    960 
    961 
    962 File: as.info,  Node: GNU Assembler,  Next: Object Formats,  Prev: Manual,  Up: Overview
    963 
    964 1.2 The GNU Assembler
    965 =====================
    966 
    967 GNU `as' is really a family of assemblers.  If you use (or have used)
    968 the GNU assembler on one architecture, you should find a fairly similar
    969 environment when you use it on another architecture.  Each version has
    970 much in common with the others, including object file formats, most
    971 assembler directives (often called "pseudo-ops") and assembler syntax.
    972 
    973    `as' is primarily intended to assemble the output of the GNU C
    974 compiler `gcc' for use by the linker `ld'.  Nevertheless, we've tried
    975 to make `as' assemble correctly everything that other assemblers for
    976 the same machine would assemble.  Any exceptions are documented
    977 explicitly (*note Machine Dependencies::).  This doesn't mean `as'
    978 always uses the same syntax as another assembler for the same
    979 architecture; for example, we know of several incompatible versions of
    980 680x0 assembly language syntax.
    981 
    982    Unlike older assemblers, `as' is designed to assemble a source
    983 program in one pass of the source file.  This has a subtle impact on the
    984 `.org' directive (*note `.org': Org.).
    985 
    986 
    987 File: as.info,  Node: Object Formats,  Next: Command Line,  Prev: GNU Assembler,  Up: Overview
    988 
    989 1.3 Object File Formats
    990 =======================
    991 
    992 The GNU assembler can be configured to produce several alternative
    993 object file formats.  For the most part, this does not affect how you
    994 write assembly language programs; but directives for debugging symbols
    995 are typically different in different file formats.  *Note Symbol
    996 Attributes: Symbol Attributes.
    997 
    998 
    999 File: as.info,  Node: Command Line,  Next: Input Files,  Prev: Object Formats,  Up: Overview
   1000 
   1001 1.4 Command Line
   1002 ================
   1003 
   1004 After the program name `as', the command line may contain options and
   1005 file names.  Options may appear in any order, and may be before, after,
   1006 or between file names.  The order of file names is significant.
   1007 
   1008    `--' (two hyphens) by itself names the standard input file
   1009 explicitly, as one of the files for `as' to assemble.
   1010 
   1011    Except for `--' any command line argument that begins with a hyphen
   1012 (`-') is an option.  Each option changes the behavior of `as'.  No
   1013 option changes the way another option works.  An option is a `-'
   1014 followed by one or more letters; the case of the letter is important.
   1015 All options are optional.
   1016 
   1017    Some options expect exactly one file name to follow them.  The file
   1018 name may either immediately follow the option's letter (compatible with
   1019 older assemblers) or it may be the next command argument (GNU
   1020 standard).  These two command lines are equivalent:
   1021 
   1022      as -o my-object-file.o mumble.s
   1023      as -omy-object-file.o mumble.s
   1024 
   1025 
   1026 File: as.info,  Node: Input Files,  Next: Object,  Prev: Command Line,  Up: Overview
   1027 
   1028 1.5 Input Files
   1029 ===============
   1030 
   1031 We use the phrase "source program", abbreviated "source", to describe
   1032 the program input to one run of `as'.  The program may be in one or
   1033 more files; how the source is partitioned into files doesn't change the
   1034 meaning of the source.
   1035 
   1036    The source program is a concatenation of the text in all the files,
   1037 in the order specified.
   1038 
   1039    Each time you run `as' it assembles exactly one source program.  The
   1040 source program is made up of one or more files.  (The standard input is
   1041 also a file.)
   1042 
   1043    You give `as' a command line that has zero or more input file names.
   1044 The input files are read (from left file name to right).  A command
   1045 line argument (in any position) that has no special meaning is taken to
   1046 be an input file name.
   1047 
   1048    If you give `as' no file names it attempts to read one input file
   1049 from the `as' standard input, which is normally your terminal.  You may
   1050 have to type <ctl-D> to tell `as' there is no more program to assemble.
   1051 
   1052    Use `--' if you need to explicitly name the standard input file in
   1053 your command line.
   1054 
   1055    If the source is empty, `as' produces a small, empty object file.
   1056 
   1057 Filenames and Line-numbers
   1058 --------------------------
   1059 
   1060 There are two ways of locating a line in the input file (or files) and
   1061 either may be used in reporting error messages.  One way refers to a
   1062 line number in a physical file; the other refers to a line number in a
   1063 "logical" file.  *Note Error and Warning Messages: Errors.
   1064 
   1065    "Physical files" are those files named in the command line given to
   1066 `as'.
   1067 
   1068    "Logical files" are simply names declared explicitly by assembler
   1069 directives; they bear no relation to physical files.  Logical file
   1070 names help error messages reflect the original source file, when `as'
   1071 source is itself synthesized from other files.  `as' understands the
   1072 `#' directives emitted by the `gcc' preprocessor.  See also *note
   1073 `.file': File.
   1074 
   1075 
   1076 File: as.info,  Node: Object,  Next: Errors,  Prev: Input Files,  Up: Overview
   1077 
   1078 1.6 Output (Object) File
   1079 ========================
   1080 
   1081 Every time you run `as' it produces an output file, which is your
   1082 assembly language program translated into numbers.  This file is the
   1083 object file.  Its default name is `a.out'.  You can give it another
   1084 name by using the `-o' option.  Conventionally, object file names end
   1085 with `.o'.  The default name is used for historical reasons: older
   1086 assemblers were capable of assembling self-contained programs directly
   1087 into a runnable program.  (For some formats, this isn't currently
   1088 possible, but it can be done for the `a.out' format.)
   1089 
   1090    The object file is meant for input to the linker `ld'.  It contains
   1091 assembled program code, information to help `ld' integrate the
   1092 assembled program into a runnable file, and (optionally) symbolic
   1093 information for the debugger.
   1094 
   1095 
   1096 File: as.info,  Node: Errors,  Prev: Object,  Up: Overview
   1097 
   1098 1.7 Error and Warning Messages
   1099 ==============================
   1100 
   1101 `as' may write warnings and error messages to the standard error file
   1102 (usually your terminal).  This should not happen when  a compiler runs
   1103 `as' automatically.  Warnings report an assumption made so that `as'
   1104 could keep assembling a flawed program; errors report a grave problem
   1105 that stops the assembly.
   1106 
   1107    Warning messages have the format
   1108 
   1109      file_name:NNN:Warning Message Text
   1110 
   1111 (where NNN is a line number).  If a logical file name has been given
   1112 (*note `.file': File.) it is used for the filename, otherwise the name
   1113 of the current input file is used.  If a logical line number was given
   1114 (*note `.line': Line.)  then it is used to calculate the number printed,
   1115 otherwise the actual line in the current source file is printed.  The
   1116 message text is intended to be self explanatory (in the grand Unix
   1117 tradition).
   1118 
   1119    Error messages have the format
   1120      file_name:NNN:FATAL:Error Message Text
   1121    The file name and line number are derived as for warning messages.
   1122 The actual message text may be rather less explanatory because many of
   1123 them aren't supposed to happen.
   1124 
   1125 
   1126 File: as.info,  Node: Invoking,  Next: Syntax,  Prev: Overview,  Up: Top
   1127 
   1128 2 Command-Line Options
   1129 **********************
   1130 
   1131 This chapter describes command-line options available in _all_ versions
   1132 of the GNU assembler; see *note Machine Dependencies::, for options
   1133 specific to particular machine architectures.
   1134 
   1135    If you are invoking `as' via the GNU C compiler, you can use the
   1136 `-Wa' option to pass arguments through to the assembler.  The assembler
   1137 arguments must be separated from each other (and the `-Wa') by commas.
   1138 For example:
   1139 
   1140      gcc -c -g -O -Wa,-alh,-L file.c
   1141 
   1142 This passes two options to the assembler: `-alh' (emit a listing to
   1143 standard output with high-level and assembly source) and `-L' (retain
   1144 local symbols in the symbol table).
   1145 
   1146    Usually you do not need to use this `-Wa' mechanism, since many
   1147 compiler command-line options are automatically passed to the assembler
   1148 by the compiler.  (You can call the GNU compiler driver with the `-v'
   1149 option to see precisely what options it passes to each compilation
   1150 pass, including the assembler.)
   1151 
   1152 * Menu:
   1153 
   1154 * a::             -a[cdghlns] enable listings
   1155 * alternate::     --alternate enable alternate macro syntax
   1156 * D::             -D for compatibility
   1157 * f::             -f to work faster
   1158 * I::             -I for .include search path
   1159 
   1160 * K::             -K for difference tables
   1161 
   1162 * L::             -L to retain local symbols
   1163 * listing::       --listing-XXX to configure listing output
   1164 * M::		  -M or --mri to assemble in MRI compatibility mode
   1165 * MD::            --MD for dependency tracking
   1166 * o::             -o to name the object file
   1167 * R::             -R to join data and text sections
   1168 * statistics::    --statistics to see statistics about assembly
   1169 * traditional-format:: --traditional-format for compatible output
   1170 * v::             -v to announce version
   1171 * W::             -W, --no-warn, --warn, --fatal-warnings to control warnings
   1172 * Z::             -Z to make object file even after errors
   1173 
   1174 
   1175 File: as.info,  Node: a,  Next: alternate,  Up: Invoking
   1176 
   1177 2.1 Enable Listings: `-a[cdghlns]'
   1178 ==================================
   1179 
   1180 These options enable listing output from the assembler.  By itself,
   1181 `-a' requests high-level, assembly, and symbols listing.  You can use
   1182 other letters to select specific options for the list: `-ah' requests a
   1183 high-level language listing, `-al' requests an output-program assembly
   1184 listing, and `-as' requests a symbol table listing.  High-level
   1185 listings require that a compiler debugging option like `-g' be used,
   1186 and that assembly listings (`-al') be requested also.
   1187 
   1188    Use the `-ag' option to print a first section with general assembly
   1189 information, like as version, switches passed, or time stamp.
   1190 
   1191    Use the `-ac' option to omit false conditionals from a listing.  Any
   1192 lines which are not assembled because of a false `.if' (or `.ifdef', or
   1193 any other conditional), or a true `.if' followed by an `.else', will be
   1194 omitted from the listing.
   1195 
   1196    Use the `-ad' option to omit debugging directives from the listing.
   1197 
   1198    Once you have specified one of these options, you can further control
   1199 listing output and its appearance using the directives `.list',
   1200 `.nolist', `.psize', `.eject', `.title', and `.sbttl'.  The `-an'
   1201 option turns off all forms processing.  If you do not request listing
   1202 output with one of the `-a' options, the listing-control directives
   1203 have no effect.
   1204 
   1205    The letters after `-a' may be combined into one option, _e.g._,
   1206 `-aln'.
   1207 
   1208    Note if the assembler source is coming from the standard input (e.g.,
   1209 because it is being created by `gcc' and the `-pipe' command line switch
   1210 is being used) then the listing will not contain any comments or
   1211 preprocessor directives.  This is because the listing code buffers
   1212 input source lines from stdin only after they have been preprocessed by
   1213 the assembler.  This reduces memory usage and makes the code more
   1214 efficient.
   1215 
   1216 
   1217 File: as.info,  Node: alternate,  Next: D,  Prev: a,  Up: Invoking
   1218 
   1219 2.2 `--alternate'
   1220 =================
   1221 
   1222 Begin in alternate macro mode, see *note `.altmacro': Altmacro.
   1223 
   1224 
   1225 File: as.info,  Node: D,  Next: f,  Prev: alternate,  Up: Invoking
   1226 
   1227 2.3 `-D'
   1228 ========
   1229 
   1230 This option has no effect whatsoever, but it is accepted to make it more
   1231 likely that scripts written for other assemblers also work with `as'.
   1232 
   1233 
   1234 File: as.info,  Node: f,  Next: I,  Prev: D,  Up: Invoking
   1235 
   1236 2.4 Work Faster: `-f'
   1237 =====================
   1238 
   1239 `-f' should only be used when assembling programs written by a
   1240 (trusted) compiler.  `-f' stops the assembler from doing whitespace and
   1241 comment preprocessing on the input file(s) before assembling them.
   1242 *Note Preprocessing: Preprocessing.
   1243 
   1244      _Warning:_ if you use `-f' when the files actually need to be
   1245      preprocessed (if they contain comments, for example), `as' does
   1246      not work correctly.
   1247 
   1248 
   1249 File: as.info,  Node: I,  Next: K,  Prev: f,  Up: Invoking
   1250 
   1251 2.5 `.include' Search Path: `-I' PATH
   1252 =====================================
   1253 
   1254 Use this option to add a PATH to the list of directories `as' searches
   1255 for files specified in `.include' directives (*note `.include':
   1256 Include.).  You may use `-I' as many times as necessary to include a
   1257 variety of paths.  The current working directory is always searched
   1258 first; after that, `as' searches any `-I' directories in the same order
   1259 as they were specified (left to right) on the command line.
   1260 
   1261 
   1262 File: as.info,  Node: K,  Next: L,  Prev: I,  Up: Invoking
   1263 
   1264 2.6 Difference Tables: `-K'
   1265 ===========================
   1266 
   1267 `as' sometimes alters the code emitted for directives of the form
   1268 `.word SYM1-SYM2'.  *Note `.word': Word.  You can use the `-K' option
   1269 if you want a warning issued when this is done.
   1270 
   1271 
   1272 File: as.info,  Node: L,  Next: listing,  Prev: K,  Up: Invoking
   1273 
   1274 2.7 Include Local Symbols: `-L'
   1275 ===============================
   1276 
   1277 Symbols beginning with system-specific local label prefixes, typically
   1278 `.L' for ELF systems or `L' for traditional a.out systems, are called
   1279 "local symbols".  *Note Symbol Names::.  Normally you do not see such
   1280 symbols when debugging, because they are intended for the use of
   1281 programs (like compilers) that compose assembler programs, not for your
   1282 notice.  Normally both `as' and `ld' discard such symbols, so you do
   1283 not normally debug with them.
   1284 
   1285    This option tells `as' to retain those local symbols in the object
   1286 file.  Usually if you do this you also tell the linker `ld' to preserve
   1287 those symbols.
   1288 
   1289 
   1290 File: as.info,  Node: listing,  Next: M,  Prev: L,  Up: Invoking
   1291 
   1292 2.8 Configuring listing output: `--listing'
   1293 ===========================================
   1294 
   1295 The listing feature of the assembler can be enabled via the command
   1296 line switch `-a' (*note a::).  This feature combines the input source
   1297 file(s) with a hex dump of the corresponding locations in the output
   1298 object file, and displays them as a listing file.  The format of this
   1299 listing can be controlled by directives inside the assembler source
   1300 (i.e., `.list' (*note List::), `.title' (*note Title::), `.sbttl'
   1301 (*note Sbttl::), `.psize' (*note Psize::), and `.eject' (*note Eject::)
   1302 and also by the following switches:
   1303 
   1304 `--listing-lhs-width=`number''
   1305      Sets the maximum width, in words, of the first line of the hex
   1306      byte dump.  This dump appears on the left hand side of the listing
   1307      output.
   1308 
   1309 `--listing-lhs-width2=`number''
   1310      Sets the maximum width, in words, of any further lines of the hex
   1311      byte dump for a given input source line.  If this value is not
   1312      specified, it defaults to being the same as the value specified
   1313      for `--listing-lhs-width'.  If neither switch is used the default
   1314      is to one.
   1315 
   1316 `--listing-rhs-width=`number''
   1317      Sets the maximum width, in characters, of the source line that is
   1318      displayed alongside the hex dump.  The default value for this
   1319      parameter is 100.  The source line is displayed on the right hand
   1320      side of the listing output.
   1321 
   1322 `--listing-cont-lines=`number''
   1323      Sets the maximum number of continuation lines of hex dump that
   1324      will be displayed for a given single line of source input.  The
   1325      default value is 4.
   1326 
   1327 
   1328 File: as.info,  Node: M,  Next: MD,  Prev: listing,  Up: Invoking
   1329 
   1330 2.9 Assemble in MRI Compatibility Mode: `-M'
   1331 ============================================
   1332 
   1333 The `-M' or `--mri' option selects MRI compatibility mode.  This
   1334 changes the syntax and pseudo-op handling of `as' to make it compatible
   1335 with the `ASM68K' or the `ASM960' (depending upon the configured
   1336 target) assembler from Microtec Research.  The exact nature of the MRI
   1337 syntax will not be documented here; see the MRI manuals for more
   1338 information.  Note in particular that the handling of macros and macro
   1339 arguments is somewhat different.  The purpose of this option is to
   1340 permit assembling existing MRI assembler code using `as'.
   1341 
   1342    The MRI compatibility is not complete.  Certain operations of the
   1343 MRI assembler depend upon its object file format, and can not be
   1344 supported using other object file formats.  Supporting these would
   1345 require enhancing each object file format individually.  These are:
   1346 
   1347    * global symbols in common section
   1348 
   1349      The m68k MRI assembler supports common sections which are merged
   1350      by the linker.  Other object file formats do not support this.
   1351      `as' handles common sections by treating them as a single common
   1352      symbol.  It permits local symbols to be defined within a common
   1353      section, but it can not support global symbols, since it has no
   1354      way to describe them.
   1355 
   1356    * complex relocations
   1357 
   1358      The MRI assemblers support relocations against a negated section
   1359      address, and relocations which combine the start addresses of two
   1360      or more sections.  These are not support by other object file
   1361      formats.
   1362 
   1363    * `END' pseudo-op specifying start address
   1364 
   1365      The MRI `END' pseudo-op permits the specification of a start
   1366      address.  This is not supported by other object file formats.  The
   1367      start address may instead be specified using the `-e' option to
   1368      the linker, or in a linker script.
   1369 
   1370    * `IDNT', `.ident' and `NAME' pseudo-ops
   1371 
   1372      The MRI `IDNT', `.ident' and `NAME' pseudo-ops assign a module
   1373      name to the output file.  This is not supported by other object
   1374      file formats.
   1375 
   1376    * `ORG' pseudo-op
   1377 
   1378      The m68k MRI `ORG' pseudo-op begins an absolute section at a given
   1379      address.  This differs from the usual `as' `.org' pseudo-op, which
   1380      changes the location within the current section.  Absolute
   1381      sections are not supported by other object file formats.  The
   1382      address of a section may be assigned within a linker script.
   1383 
   1384    There are some other features of the MRI assembler which are not
   1385 supported by `as', typically either because they are difficult or
   1386 because they seem of little consequence.  Some of these may be
   1387 supported in future releases.
   1388 
   1389    * EBCDIC strings
   1390 
   1391      EBCDIC strings are not supported.
   1392 
   1393    * packed binary coded decimal
   1394 
   1395      Packed binary coded decimal is not supported.  This means that the
   1396      `DC.P' and `DCB.P' pseudo-ops are not supported.
   1397 
   1398    * `FEQU' pseudo-op
   1399 
   1400      The m68k `FEQU' pseudo-op is not supported.
   1401 
   1402    * `NOOBJ' pseudo-op
   1403 
   1404      The m68k `NOOBJ' pseudo-op is not supported.
   1405 
   1406    * `OPT' branch control options
   1407 
   1408      The m68k `OPT' branch control options--`B', `BRS', `BRB', `BRL',
   1409      and `BRW'--are ignored.  `as' automatically relaxes all branches,
   1410      whether forward or backward, to an appropriate size, so these
   1411      options serve no purpose.
   1412 
   1413    * `OPT' list control options
   1414 
   1415      The following m68k `OPT' list control options are ignored: `C',
   1416      `CEX', `CL', `CRE', `E', `G', `I', `M', `MEX', `MC', `MD', `X'.
   1417 
   1418    * other `OPT' options
   1419 
   1420      The following m68k `OPT' options are ignored: `NEST', `O', `OLD',
   1421      `OP', `P', `PCO', `PCR', `PCS', `R'.
   1422 
   1423    * `OPT' `D' option is default
   1424 
   1425      The m68k `OPT' `D' option is the default, unlike the MRI assembler.
   1426      `OPT NOD' may be used to turn it off.
   1427 
   1428    * `XREF' pseudo-op.
   1429 
   1430      The m68k `XREF' pseudo-op is ignored.
   1431 
   1432    * `.debug' pseudo-op
   1433 
   1434      The i960 `.debug' pseudo-op is not supported.
   1435 
   1436    * `.extended' pseudo-op
   1437 
   1438      The i960 `.extended' pseudo-op is not supported.
   1439 
   1440    * `.list' pseudo-op.
   1441 
   1442      The various options of the i960 `.list' pseudo-op are not
   1443      supported.
   1444 
   1445    * `.optimize' pseudo-op
   1446 
   1447      The i960 `.optimize' pseudo-op is not supported.
   1448 
   1449    * `.output' pseudo-op
   1450 
   1451      The i960 `.output' pseudo-op is not supported.
   1452 
   1453    * `.setreal' pseudo-op
   1454 
   1455      The i960 `.setreal' pseudo-op is not supported.
   1456 
   1457 
   1458 
   1459 File: as.info,  Node: MD,  Next: o,  Prev: M,  Up: Invoking
   1460 
   1461 2.10 Dependency Tracking: `--MD'
   1462 ================================
   1463 
   1464 `as' can generate a dependency file for the file it creates.  This file
   1465 consists of a single rule suitable for `make' describing the
   1466 dependencies of the main source file.
   1467 
   1468    The rule is written to the file named in its argument.
   1469 
   1470    This feature is used in the automatic updating of makefiles.
   1471 
   1472 
   1473 File: as.info,  Node: o,  Next: R,  Prev: MD,  Up: Invoking
   1474 
   1475 2.11 Name the Object File: `-o'
   1476 ===============================
   1477 
   1478 There is always one object file output when you run `as'.  By default
   1479 it has the name `a.out' (or `b.out', for Intel 960 targets only).  You
   1480 use this option (which takes exactly one filename) to give the object
   1481 file a different name.
   1482 
   1483    Whatever the object file is called, `as' overwrites any existing
   1484 file of the same name.
   1485 
   1486 
   1487 File: as.info,  Node: R,  Next: statistics,  Prev: o,  Up: Invoking
   1488 
   1489 2.12 Join Data and Text Sections: `-R'
   1490 ======================================
   1491 
   1492 `-R' tells `as' to write the object file as if all data-section data
   1493 lives in the text section.  This is only done at the very last moment:
   1494 your binary data are the same, but data section parts are relocated
   1495 differently.  The data section part of your object file is zero bytes
   1496 long because all its bytes are appended to the text section.  (*Note
   1497 Sections and Relocation: Sections.)
   1498 
   1499    When you specify `-R' it would be possible to generate shorter
   1500 address displacements (because we do not have to cross between text and
   1501 data section).  We refrain from doing this simply for compatibility with
   1502 older versions of `as'.  In future, `-R' may work this way.
   1503 
   1504    When `as' is configured for COFF or ELF output, this option is only
   1505 useful if you use sections named `.text' and `.data'.
   1506 
   1507    `-R' is not supported for any of the HPPA targets.  Using `-R'
   1508 generates a warning from `as'.
   1509 
   1510 
   1511 File: as.info,  Node: statistics,  Next: traditional-format,  Prev: R,  Up: Invoking
   1512 
   1513 2.13 Display Assembly Statistics: `--statistics'
   1514 ================================================
   1515 
   1516 Use `--statistics' to display two statistics about the resources used by
   1517 `as': the maximum amount of space allocated during the assembly (in
   1518 bytes), and the total execution time taken for the assembly (in CPU
   1519 seconds).
   1520 
   1521 
   1522 File: as.info,  Node: traditional-format,  Next: v,  Prev: statistics,  Up: Invoking
   1523 
   1524 2.14 Compatible Output: `--traditional-format'
   1525 ==============================================
   1526 
   1527 For some targets, the output of `as' is different in some ways from the
   1528 output of some existing assembler.  This switch requests `as' to use
   1529 the traditional format instead.
   1530 
   1531    For example, it disables the exception frame optimizations which
   1532 `as' normally does by default on `gcc' output.
   1533 
   1534 
   1535 File: as.info,  Node: v,  Next: W,  Prev: traditional-format,  Up: Invoking
   1536 
   1537 2.15 Announce Version: `-v'
   1538 ===========================
   1539 
   1540 You can find out what version of as is running by including the option
   1541 `-v' (which you can also spell as `-version') on the command line.
   1542 
   1543 
   1544 File: as.info,  Node: W,  Next: Z,  Prev: v,  Up: Invoking
   1545 
   1546 2.16 Control Warnings: `-W', `--warn', `--no-warn', `--fatal-warnings'
   1547 ======================================================================
   1548 
   1549 `as' should never give a warning or error message when assembling
   1550 compiler output.  But programs written by people often cause `as' to
   1551 give a warning that a particular assumption was made.  All such
   1552 warnings are directed to the standard error file.
   1553 
   1554    If you use the `-W' and `--no-warn' options, no warnings are issued.
   1555 This only affects the warning messages: it does not change any
   1556 particular of how `as' assembles your file.  Errors, which stop the
   1557 assembly, are still reported.
   1558 
   1559    If you use the `--fatal-warnings' option, `as' considers files that
   1560 generate warnings to be in error.
   1561 
   1562    You can switch these options off again by specifying `--warn', which
   1563 causes warnings to be output as usual.
   1564 
   1565 
   1566 File: as.info,  Node: Z,  Prev: W,  Up: Invoking
   1567 
   1568 2.17 Generate Object File in Spite of Errors: `-Z'
   1569 ==================================================
   1570 
   1571 After an error message, `as' normally produces no output.  If for some
   1572 reason you are interested in object file output even after `as' gives
   1573 an error message on your program, use the `-Z' option.  If there are
   1574 any errors, `as' continues anyways, and writes an object file after a
   1575 final warning message of the form `N errors, M warnings, generating bad
   1576 object file.'
   1577 
   1578 
   1579 File: as.info,  Node: Syntax,  Next: Sections,  Prev: Invoking,  Up: Top
   1580 
   1581 3 Syntax
   1582 ********
   1583 
   1584 This chapter describes the machine-independent syntax allowed in a
   1585 source file.  `as' syntax is similar to what many other assemblers use;
   1586 it is inspired by the BSD 4.2 assembler, except that `as' does not
   1587 assemble Vax bit-fields.
   1588 
   1589 * Menu:
   1590 
   1591 * Preprocessing::              Preprocessing
   1592 * Whitespace::                  Whitespace
   1593 * Comments::                    Comments
   1594 * Symbol Intro::                Symbols
   1595 * Statements::                  Statements
   1596 * Constants::                   Constants
   1597 
   1598 
   1599 File: as.info,  Node: Preprocessing,  Next: Whitespace,  Up: Syntax
   1600 
   1601 3.1 Preprocessing
   1602 =================
   1603 
   1604 The `as' internal preprocessor:
   1605    * adjusts and removes extra whitespace.  It leaves one space or tab
   1606      before the keywords on a line, and turns any other whitespace on
   1607      the line into a single space.
   1608 
   1609    * removes all comments, replacing them with a single space, or an
   1610      appropriate number of newlines.
   1611 
   1612    * converts character constants into the appropriate numeric values.
   1613 
   1614    It does not do macro processing, include file handling, or anything
   1615 else you may get from your C compiler's preprocessor.  You can do
   1616 include file processing with the `.include' directive (*note
   1617 `.include': Include.).  You can use the GNU C compiler driver to get
   1618 other "CPP" style preprocessing by giving the input file a `.S' suffix.
   1619 *Note Options Controlling the Kind of Output: (gcc.info)Overall Options.
   1620 
   1621    Excess whitespace, comments, and character constants cannot be used
   1622 in the portions of the input text that are not preprocessed.
   1623 
   1624    If the first line of an input file is `#NO_APP' or if you use the
   1625 `-f' option, whitespace and comments are not removed from the input
   1626 file.  Within an input file, you can ask for whitespace and comment
   1627 removal in specific portions of the by putting a line that says `#APP'
   1628 before the text that may contain whitespace or comments, and putting a
   1629 line that says `#NO_APP' after this text.  This feature is mainly
   1630 intend to support `asm' statements in compilers whose output is
   1631 otherwise free of comments and whitespace.
   1632 
   1633 
   1634 File: as.info,  Node: Whitespace,  Next: Comments,  Prev: Preprocessing,  Up: Syntax
   1635 
   1636 3.2 Whitespace
   1637 ==============
   1638 
   1639 "Whitespace" is one or more blanks or tabs, in any order.  Whitespace
   1640 is used to separate symbols, and to make programs neater for people to
   1641 read.  Unless within character constants (*note Character Constants:
   1642 Characters.), any whitespace means the same as exactly one space.
   1643 
   1644 
   1645 File: as.info,  Node: Comments,  Next: Symbol Intro,  Prev: Whitespace,  Up: Syntax
   1646 
   1647 3.3 Comments
   1648 ============
   1649 
   1650 There are two ways of rendering comments to `as'.  In both cases the
   1651 comment is equivalent to one space.
   1652 
   1653    Anything from `/*' through the next `*/' is a comment.  This means
   1654 you may not nest these comments.
   1655 
   1656      /*
   1657        The only way to include a newline ('\n') in a comment
   1658        is to use this sort of comment.
   1659      */
   1660 
   1661      /* This sort of comment does not nest. */
   1662 
   1663    Anything from the "line comment" character to the next newline is
   1664 considered a comment and is ignored.  The line comment character is `;'
   1665 on the ARC; `@' on the ARM; `;' for the H8/300 family; `;' for the HPPA;
   1666 `#' on the i386 and x86-64; `#' on the i960; `;' for the PDP-11; `;'
   1667 for picoJava; `#' for Motorola PowerPC; `!' for the Renesas / SuperH SH;
   1668 `!' on the SPARC; `#' on the ip2k; `#' on the m32c; `#' on the m32r;
   1669 `|' on the 680x0; `#' on the 68HC11 and 68HC12; `#' on the Vax; `;' for
   1670 the Z80; `!' for the Z8000; `#' on the V850; `#' for Xtensa systems;
   1671 see *note Machine Dependencies::.
   1672 
   1673    On some machines there are two different line comment characters.
   1674 One character only begins a comment if it is the first non-whitespace
   1675 character on a line, while the other always begins a comment.
   1676 
   1677    The V850 assembler also supports a double dash as starting a comment
   1678 that extends to the end of the line.
   1679 
   1680    `--';
   1681 
   1682    To be compatible with past assemblers, lines that begin with `#'
   1683 have a special interpretation.  Following the `#' should be an absolute
   1684 expression (*note Expressions::): the logical line number of the _next_
   1685 line.  Then a string (*note Strings: Strings.) is allowed: if present
   1686 it is a new logical file name.  The rest of the line, if any, should be
   1687 whitespace.
   1688 
   1689    If the first non-whitespace characters on the line are not numeric,
   1690 the line is ignored.  (Just like a comment.)
   1691 
   1692                                # This is an ordinary comment.
   1693      # 42-6 "new_file_name"    # New logical file name
   1694                                # This is logical line # 36.
   1695    This feature is deprecated, and may disappear from future versions
   1696 of `as'.
   1697 
   1698 
   1699 File: as.info,  Node: Symbol Intro,  Next: Statements,  Prev: Comments,  Up: Syntax
   1700 
   1701 3.4 Symbols
   1702 ===========
   1703 
   1704 A "symbol" is one or more characters chosen from the set of all letters
   1705 (both upper and lower case), digits and the three characters `_.$'.  On
   1706 most machines, you can also use `$' in symbol names; exceptions are
   1707 noted in *note Machine Dependencies::.  No symbol may begin with a
   1708 digit.  Case is significant.  There is no length limit: all characters
   1709 are significant.  Symbols are delimited by characters not in that set,
   1710 or by the beginning of a file (since the source program must end with a
   1711 newline, the end of a file is not a possible symbol delimiter).  *Note
   1712 Symbols::.  
   1713 
   1714 
   1715 File: as.info,  Node: Statements,  Next: Constants,  Prev: Symbol Intro,  Up: Syntax
   1716 
   1717 3.5 Statements
   1718 ==============
   1719 
   1720 A "statement" ends at a newline character (`\n') or line separator
   1721 character.  (The line separator is usually `;', unless this conflicts
   1722 with the comment character; see *note Machine Dependencies::.)  The
   1723 newline or separator character is considered part of the preceding
   1724 statement.  Newlines and separators within character constants are an
   1725 exception: they do not end statements.
   1726 
   1727 It is an error to end any statement with end-of-file:  the last
   1728 character of any input file should be a newline.
   1729 
   1730    An empty statement is allowed, and may include whitespace.  It is
   1731 ignored.
   1732 
   1733    A statement begins with zero or more labels, optionally followed by a
   1734 key symbol which determines what kind of statement it is.  The key
   1735 symbol determines the syntax of the rest of the statement.  If the
   1736 symbol begins with a dot `.' then the statement is an assembler
   1737 directive: typically valid for any computer.  If the symbol begins with
   1738 a letter the statement is an assembly language "instruction": it
   1739 assembles into a machine language instruction.  Different versions of
   1740 `as' for different computers recognize different instructions.  In
   1741 fact, the same symbol may represent a different instruction in a
   1742 different computer's assembly language.
   1743 
   1744    A label is a symbol immediately followed by a colon (`:').
   1745 Whitespace before a label or after a colon is permitted, but you may not
   1746 have whitespace between a label's symbol and its colon. *Note Labels::.
   1747 
   1748    For HPPA targets, labels need not be immediately followed by a
   1749 colon, but the definition of a label must begin in column zero.  This
   1750 also implies that only one label may be defined on each line.
   1751 
   1752      label:     .directive    followed by something
   1753      another_label:           # This is an empty statement.
   1754                 instruction   operand_1, operand_2, ...
   1755 
   1756 
   1757 File: as.info,  Node: Constants,  Prev: Statements,  Up: Syntax
   1758 
   1759 3.6 Constants
   1760 =============
   1761 
   1762 A constant is a number, written so that its value is known by
   1763 inspection, without knowing any context.  Like this:
   1764      .byte  74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
   1765      .ascii "Ring the bell\7"                  # A string constant.
   1766      .octa  0x123456789abcdef0123456789ABCDEF0 # A bignum.
   1767      .float 0f-314159265358979323846264338327\
   1768      95028841971.693993751E-40                 # - pi, a flonum.
   1769 
   1770 * Menu:
   1771 
   1772 * Characters::                  Character Constants
   1773 * Numbers::                     Number Constants
   1774 
   1775 
   1776 File: as.info,  Node: Characters,  Next: Numbers,  Up: Constants
   1777 
   1778 3.6.1 Character Constants
   1779 -------------------------
   1780 
   1781 There are two kinds of character constants.  A "character" stands for
   1782 one character in one byte and its value may be used in numeric
   1783 expressions.  String constants (properly called string _literals_) are
   1784 potentially many bytes and their values may not be used in arithmetic
   1785 expressions.
   1786 
   1787 * Menu:
   1788 
   1789 * Strings::                     Strings
   1790 * Chars::                       Characters
   1791 
   1792 
   1793 File: as.info,  Node: Strings,  Next: Chars,  Up: Characters
   1794 
   1795 3.6.1.1 Strings
   1796 ...............
   1797 
   1798 A "string" is written between double-quotes.  It may contain
   1799 double-quotes or null characters.  The way to get special characters
   1800 into a string is to "escape" these characters: precede them with a
   1801 backslash `\' character.  For example `\\' represents one backslash:
   1802 the first `\' is an escape which tells `as' to interpret the second
   1803 character literally as a backslash (which prevents `as' from
   1804 recognizing the second `\' as an escape character).  The complete list
   1805 of escapes follows.
   1806 
   1807 `\b'
   1808      Mnemonic for backspace; for ASCII this is octal code 010.
   1809 
   1810 `\f'
   1811      Mnemonic for FormFeed; for ASCII this is octal code 014.
   1812 
   1813 `\n'
   1814      Mnemonic for newline; for ASCII this is octal code 012.
   1815 
   1816 `\r'
   1817      Mnemonic for carriage-Return; for ASCII this is octal code 015.
   1818 
   1819 `\t'
   1820      Mnemonic for horizontal Tab; for ASCII this is octal code 011.
   1821 
   1822 `\ DIGIT DIGIT DIGIT'
   1823      An octal character code.  The numeric code is 3 octal digits.  For
   1824      compatibility with other Unix systems, 8 and 9 are accepted as
   1825      digits: for example, `\008' has the value 010, and `\009' the
   1826      value 011.
   1827 
   1828 `\`x' HEX-DIGITS...'
   1829      A hex character code.  All trailing hex digits are combined.
   1830      Either upper or lower case `x' works.
   1831 
   1832 `\\'
   1833      Represents one `\' character.
   1834 
   1835 `\"'
   1836      Represents one `"' character.  Needed in strings to represent this
   1837      character, because an unescaped `"' would end the string.
   1838 
   1839 `\ ANYTHING-ELSE'
   1840      Any other character when escaped by `\' gives a warning, but
   1841      assembles as if the `\' was not present.  The idea is that if you
   1842      used an escape sequence you clearly didn't want the literal
   1843      interpretation of the following character.  However `as' has no
   1844      other interpretation, so `as' knows it is giving you the wrong
   1845      code and warns you of the fact.
   1846 
   1847    Which characters are escapable, and what those escapes represent,
   1848 varies widely among assemblers.  The current set is what we think the
   1849 BSD 4.2 assembler recognizes, and is a subset of what most C compilers
   1850 recognize.  If you are in doubt, do not use an escape sequence.
   1851 
   1852 
   1853 File: as.info,  Node: Chars,  Prev: Strings,  Up: Characters
   1854 
   1855 3.6.1.2 Characters
   1856 ..................
   1857 
   1858 A single character may be written as a single quote immediately
   1859 followed by that character.  The same escapes apply to characters as to
   1860 strings.  So if you want to write the character backslash, you must
   1861 write `'\\' where the first `\' escapes the second `\'.  As you can
   1862 see, the quote is an acute accent, not a grave accent.  A newline
   1863 immediately following an acute accent is taken as a literal character
   1864 and does not count as the end of a statement.  The value of a character
   1865 constant in a numeric expression is the machine's byte-wide code for
   1866 that character.  `as' assumes your character code is ASCII: `'A' means
   1867 65, `'B' means 66, and so on.
   1868 
   1869 
   1870 File: as.info,  Node: Numbers,  Prev: Characters,  Up: Constants
   1871 
   1872 3.6.2 Number Constants
   1873 ----------------------
   1874 
   1875 `as' distinguishes three kinds of numbers according to how they are
   1876 stored in the target machine.  _Integers_ are numbers that would fit
   1877 into an `int' in the C language.  _Bignums_ are integers, but they are
   1878 stored in more than 32 bits.  _Flonums_ are floating point numbers,
   1879 described below.
   1880 
   1881 * Menu:
   1882 
   1883 * Integers::                    Integers
   1884 * Bignums::                     Bignums
   1885 * Flonums::                     Flonums
   1886 
   1887 
   1888 File: as.info,  Node: Integers,  Next: Bignums,  Up: Numbers
   1889 
   1890 3.6.2.1 Integers
   1891 ................
   1892 
   1893 A binary integer is `0b' or `0B' followed by zero or more of the binary
   1894 digits `01'.
   1895 
   1896    An octal integer is `0' followed by zero or more of the octal digits
   1897 (`01234567').
   1898 
   1899    A decimal integer starts with a non-zero digit followed by zero or
   1900 more digits (`0123456789').
   1901 
   1902    A hexadecimal integer is `0x' or `0X' followed by one or more
   1903 hexadecimal digits chosen from `0123456789abcdefABCDEF'.
   1904 
   1905    Integers have the usual values.  To denote a negative integer, use
   1906 the prefix operator `-' discussed under expressions (*note Prefix
   1907 Operators: Prefix Ops.).
   1908 
   1909 
   1910 File: as.info,  Node: Bignums,  Next: Flonums,  Prev: Integers,  Up: Numbers
   1911 
   1912 3.6.2.2 Bignums
   1913 ...............
   1914 
   1915 A "bignum" has the same syntax and semantics as an integer except that
   1916 the number (or its negative) takes more than 32 bits to represent in
   1917 binary.  The distinction is made because in some places integers are
   1918 permitted while bignums are not.
   1919 
   1920 
   1921 File: as.info,  Node: Flonums,  Prev: Bignums,  Up: Numbers
   1922 
   1923 3.6.2.3 Flonums
   1924 ...............
   1925 
   1926 A "flonum" represents a floating point number.  The translation is
   1927 indirect: a decimal floating point number from the text is converted by
   1928 `as' to a generic binary floating point number of more than sufficient
   1929 precision.  This generic floating point number is converted to a
   1930 particular computer's floating point format (or formats) by a portion
   1931 of `as' specialized to that computer.
   1932 
   1933    A flonum is written by writing (in order)
   1934    * The digit `0'.  (`0' is optional on the HPPA.)
   1935 
   1936    * A letter, to tell `as' the rest of the number is a flonum.  `e' is
   1937      recommended.  Case is not important.
   1938 
   1939      On the H8/300, Renesas / SuperH SH, and AMD 29K architectures, the
   1940      letter must be one of the letters `DFPRSX' (in upper or lower
   1941      case).
   1942 
   1943      On the ARC, the letter must be one of the letters `DFRS' (in upper
   1944      or lower case).
   1945 
   1946      On the Intel 960 architecture, the letter must be one of the
   1947      letters `DFT' (in upper or lower case).
   1948 
   1949      On the HPPA architecture, the letter must be `E' (upper case only).
   1950 
   1951    * An optional sign: either `+' or `-'.
   1952 
   1953    * An optional "integer part": zero or more decimal digits.
   1954 
   1955    * An optional "fractional part": `.' followed by zero or more
   1956      decimal digits.
   1957 
   1958    * An optional exponent, consisting of:
   1959 
   1960         * An `E' or `e'.
   1961 
   1962         * Optional sign: either `+' or `-'.
   1963 
   1964         * One or more decimal digits.
   1965 
   1966 
   1967    At least one of the integer part or the fractional part must be
   1968 present.  The floating point number has the usual base-10 value.
   1969 
   1970    `as' does all processing using integers.  Flonums are computed
   1971 independently of any floating point hardware in the computer running
   1972 `as'.
   1973 
   1974 
   1975 File: as.info,  Node: Sections,  Next: Symbols,  Prev: Syntax,  Up: Top
   1976 
   1977 4 Sections and Relocation
   1978 *************************
   1979 
   1980 * Menu:
   1981 
   1982 * Secs Background::             Background
   1983 * Ld Sections::                 Linker Sections
   1984 * As Sections::                 Assembler Internal Sections
   1985 * Sub-Sections::                Sub-Sections
   1986 * bss::                         bss Section
   1987 
   1988 
   1989 File: as.info,  Node: Secs Background,  Next: Ld Sections,  Up: Sections
   1990 
   1991 4.1 Background
   1992 ==============
   1993 
   1994 Roughly, a section is a range of addresses, with no gaps; all data "in"
   1995 those addresses is treated the same for some particular purpose.  For
   1996 example there may be a "read only" section.
   1997 
   1998    The linker `ld' reads many object files (partial programs) and
   1999 combines their contents to form a runnable program.  When `as' emits an
   2000 object file, the partial program is assumed to start at address 0.
   2001 `ld' assigns the final addresses for the partial program, so that
   2002 different partial programs do not overlap.  This is actually an
   2003 oversimplification, but it suffices to explain how `as' uses sections.
   2004 
   2005    `ld' moves blocks of bytes of your program to their run-time
   2006 addresses.  These blocks slide to their run-time addresses as rigid
   2007 units; their length does not change and neither does the order of bytes
   2008 within them.  Such a rigid unit is called a _section_.  Assigning
   2009 run-time addresses to sections is called "relocation".  It includes the
   2010 task of adjusting mentions of object-file addresses so they refer to
   2011 the proper run-time addresses.  For the H8/300, and for the Renesas /
   2012 SuperH SH, `as' pads sections if needed to ensure they end on a word
   2013 (sixteen bit) boundary.
   2014 
   2015    An object file written by `as' has at least three sections, any of
   2016 which may be empty.  These are named "text", "data" and "bss" sections.
   2017 
   2018    When it generates COFF or ELF output, `as' can also generate
   2019 whatever other named sections you specify using the `.section'
   2020 directive (*note `.section': Section.).  If you do not use any
   2021 directives that place output in the `.text' or `.data' sections, these
   2022 sections still exist, but are empty.
   2023 
   2024    When `as' generates SOM or ELF output for the HPPA, `as' can also
   2025 generate whatever other named sections you specify using the `.space'
   2026 and `.subspace' directives.  See `HP9000 Series 800 Assembly Language
   2027 Reference Manual' (HP 92432-90001) for details on the `.space' and
   2028 `.subspace' assembler directives.
   2029 
   2030    Additionally, `as' uses different names for the standard text, data,
   2031 and bss sections when generating SOM output.  Program text is placed
   2032 into the `$CODE$' section, data into `$DATA$', and BSS into `$BSS$'.
   2033 
   2034    Within the object file, the text section starts at address `0', the
   2035 data section follows, and the bss section follows the data section.
   2036 
   2037    When generating either SOM or ELF output files on the HPPA, the text
   2038 section starts at address `0', the data section at address `0x4000000',
   2039 and the bss section follows the data section.
   2040 
   2041    To let `ld' know which data changes when the sections are relocated,
   2042 and how to change that data, `as' also writes to the object file
   2043 details of the relocation needed.  To perform relocation `ld' must
   2044 know, each time an address in the object file is mentioned:
   2045    * Where in the object file is the beginning of this reference to an
   2046      address?
   2047 
   2048    * How long (in bytes) is this reference?
   2049 
   2050    * Which section does the address refer to?  What is the numeric
   2051      value of
   2052           (ADDRESS) - (START-ADDRESS OF SECTION)?
   2053 
   2054    * Is the reference to an address "Program-Counter relative"?
   2055 
   2056    In fact, every address `as' ever uses is expressed as
   2057      (SECTION) + (OFFSET INTO SECTION)
   2058    Further, most expressions `as' computes have this section-relative
   2059 nature.  (For some object formats, such as SOM for the HPPA, some
   2060 expressions are symbol-relative instead.)
   2061 
   2062    In this manual we use the notation {SECNAME N} to mean "offset N
   2063 into section SECNAME."
   2064 
   2065    Apart from text, data and bss sections you need to know about the
   2066 "absolute" section.  When `ld' mixes partial programs, addresses in the
   2067 absolute section remain unchanged.  For example, address `{absolute 0}'
   2068 is "relocated" to run-time address 0 by `ld'.  Although the linker
   2069 never arranges two partial programs' data sections with overlapping
   2070 addresses after linking, _by definition_ their absolute sections must
   2071 overlap.  Address `{absolute 239}' in one part of a program is always
   2072 the same address when the program is running as address `{absolute
   2073 239}' in any other part of the program.
   2074 
   2075    The idea of sections is extended to the "undefined" section.  Any
   2076 address whose section is unknown at assembly time is by definition
   2077 rendered {undefined U}--where U is filled in later.  Since numbers are
   2078 always defined, the only way to generate an undefined address is to
   2079 mention an undefined symbol.  A reference to a named common block would
   2080 be such a symbol: its value is unknown at assembly time so it has
   2081 section _undefined_.
   2082 
   2083    By analogy the word _section_ is used to describe groups of sections
   2084 in the linked program.  `ld' puts all partial programs' text sections
   2085 in contiguous addresses in the linked program.  It is customary to
   2086 refer to the _text section_ of a program, meaning all the addresses of
   2087 all partial programs' text sections.  Likewise for data and bss
   2088 sections.
   2089 
   2090    Some sections are manipulated by `ld'; others are invented for use
   2091 of `as' and have no meaning except during assembly.
   2092 
   2093 
   2094 File: as.info,  Node: Ld Sections,  Next: As Sections,  Prev: Secs Background,  Up: Sections
   2095 
   2096 4.2 Linker Sections
   2097 ===================
   2098 
   2099 `ld' deals with just four kinds of sections, summarized below.
   2100 
   2101 *named sections*
   2102 *text section*
   2103 *data section*
   2104      These sections hold your program.  `as' and `ld' treat them as
   2105      separate but equal sections.  Anything you can say of one section
   2106      is true of another.  When the program is running, however, it is
   2107      customary for the text section to be unalterable.  The text
   2108      section is often shared among processes: it contains instructions,
   2109      constants and the like.  The data section of a running program is
   2110      usually alterable: for example, C variables would be stored in the
   2111      data section.
   2112 
   2113 *bss section*
   2114      This section contains zeroed bytes when your program begins
   2115      running.  It is used to hold uninitialized variables or common
   2116      storage.  The length of each partial program's bss section is
   2117      important, but because it starts out containing zeroed bytes there
   2118      is no need to store explicit zero bytes in the object file.  The
   2119      bss section was invented to eliminate those explicit zeros from
   2120      object files.
   2121 
   2122 *absolute section*
   2123      Address 0 of this section is always "relocated" to runtime address
   2124      0.  This is useful if you want to refer to an address that `ld'
   2125      must not change when relocating.  In this sense we speak of
   2126      absolute addresses being "unrelocatable": they do not change
   2127      during relocation.
   2128 
   2129 *undefined section*
   2130      This "section" is a catch-all for address references to objects
   2131      not in the preceding sections.
   2132 
   2133    An idealized example of three relocatable sections follows.  The
   2134 example uses the traditional section names `.text' and `.data'.  Memory
   2135 addresses are on the horizontal axis.
   2136 
   2137                            +-----+----+--+
   2138      partial program # 1:  |ttttt|dddd|00|
   2139                            +-----+----+--+
   2140 
   2141                            text   data bss
   2142                            seg.   seg. seg.
   2143 
   2144                            +---+---+---+
   2145      partial program # 2:  |TTT|DDD|000|
   2146                            +---+---+---+
   2147 
   2148                            +--+---+-----+--+----+---+-----+~~
   2149      linked program:       |  |TTT|ttttt|  |dddd|DDD|00000|
   2150                            +--+---+-----+--+----+---+-----+~~
   2151 
   2152          addresses:        0 ...
   2153 
   2154 
   2155 File: as.info,  Node: As Sections,  Next: Sub-Sections,  Prev: Ld Sections,  Up: Sections
   2156 
   2157 4.3 Assembler Internal Sections
   2158 ===============================
   2159 
   2160 These sections are meant only for the internal use of `as'.  They have
   2161 no meaning at run-time.  You do not really need to know about these
   2162 sections for most purposes; but they can be mentioned in `as' warning
   2163 messages, so it might be helpful to have an idea of their meanings to
   2164 `as'.  These sections are used to permit the value of every expression
   2165 in your assembly language program to be a section-relative address.
   2166 
   2167 ASSEMBLER-INTERNAL-LOGIC-ERROR!
   2168      An internal assembler logic error has been found.  This means
   2169      there is a bug in the assembler.
   2170 
   2171 expr section
   2172      The assembler stores complex expression internally as combinations
   2173      of symbols.  When it needs to represent an expression as a symbol,
   2174      it puts it in the expr section.
   2175 
   2176 
   2177 File: as.info,  Node: Sub-Sections,  Next: bss,  Prev: As Sections,  Up: Sections
   2178 
   2179 4.4 Sub-Sections
   2180 ================
   2181 
   2182 Assembled bytes conventionally fall into two sections: text and data.
   2183 You may have separate groups of data in named sections that you want to
   2184 end up near to each other in the object file, even though they are not
   2185 contiguous in the assembler source.  `as' allows you to use
   2186 "subsections" for this purpose.  Within each section, there can be
   2187 numbered subsections with values from 0 to 8192.  Objects assembled
   2188 into the same subsection go into the object file together with other
   2189 objects in the same subsection.  For example, a compiler might want to
   2190 store constants in the text section, but might not want to have them
   2191 interspersed with the program being assembled.  In this case, the
   2192 compiler could issue a `.text 0' before each section of code being
   2193 output, and a `.text 1' before each group of constants being output.
   2194 
   2195 Subsections are optional.  If you do not use subsections, everything
   2196 goes in subsection number zero.
   2197 
   2198    Each subsection is zero-padded up to a multiple of four bytes.
   2199 (Subsections may be padded a different amount on different flavors of
   2200 `as'.)
   2201 
   2202    Subsections appear in your object file in numeric order, lowest
   2203 numbered to highest.  (All this to be compatible with other people's
   2204 assemblers.)  The object file contains no representation of
   2205 subsections; `ld' and other programs that manipulate object files see
   2206 no trace of them.  They just see all your text subsections as a text
   2207 section, and all your data subsections as a data section.
   2208 
   2209    To specify which subsection you want subsequent statements assembled
   2210 into, use a numeric argument to specify it, in a `.text EXPRESSION' or
   2211 a `.data EXPRESSION' statement.  When generating COFF output, you can
   2212 also use an extra subsection argument with arbitrary named sections:
   2213 `.section NAME, EXPRESSION'.  When generating ELF output, you can also
   2214 use the `.subsection' directive (*note SubSection::) to specify a
   2215 subsection: `.subsection EXPRESSION'.  EXPRESSION should be an absolute
   2216 expression (*note Expressions::).  If you just say `.text' then `.text
   2217 0' is assumed.  Likewise `.data' means `.data 0'.  Assembly begins in
   2218 `text 0'.  For instance:
   2219      .text 0     # The default subsection is text 0 anyway.
   2220      .ascii "This lives in the first text subsection. *"
   2221      .text 1
   2222      .ascii "But this lives in the second text subsection."
   2223      .data 0
   2224      .ascii "This lives in the data section,"
   2225      .ascii "in the first data subsection."
   2226      .text 0
   2227      .ascii "This lives in the first text section,"
   2228      .ascii "immediately following the asterisk (*)."
   2229 
   2230    Each section has a "location counter" incremented by one for every
   2231 byte assembled into that section.  Because subsections are merely a
   2232 convenience restricted to `as' there is no concept of a subsection
   2233 location counter.  There is no way to directly manipulate a location
   2234 counter--but the `.align' directive changes it, and any label
   2235 definition captures its current value.  The location counter of the
   2236 section where statements are being assembled is said to be the "active"
   2237 location counter.
   2238 
   2239 
   2240 File: as.info,  Node: bss,  Prev: Sub-Sections,  Up: Sections
   2241 
   2242 4.5 bss Section
   2243 ===============
   2244 
   2245 The bss section is used for local common variable storage.  You may
   2246 allocate address space in the bss section, but you may not dictate data
   2247 to load into it before your program executes.  When your program starts
   2248 running, all the contents of the bss section are zeroed bytes.
   2249 
   2250    The `.lcomm' pseudo-op defines a symbol in the bss section; see
   2251 *note `.lcomm': Lcomm.
   2252 
   2253    The `.comm' pseudo-op may be used to declare a common symbol, which
   2254 is another form of uninitialized symbol; see *note `.comm': Comm.
   2255 
   2256    When assembling for a target which supports multiple sections, such
   2257 as ELF or COFF, you may switch into the `.bss' section and define
   2258 symbols as usual; see *note `.section': Section.  You may only assemble
   2259 zero values into the section.  Typically the section will only contain
   2260 symbol definitions and `.skip' directives (*note `.skip': Skip.).
   2261 
   2262 
   2263 File: as.info,  Node: Symbols,  Next: Expressions,  Prev: Sections,  Up: Top
   2264 
   2265 5 Symbols
   2266 *********
   2267 
   2268 Symbols are a central concept: the programmer uses symbols to name
   2269 things, the linker uses symbols to link, and the debugger uses symbols
   2270 to debug.
   2271 
   2272      _Warning:_ `as' does not place symbols in the object file in the
   2273      same order they were declared.  This may break some debuggers.
   2274 
   2275 * Menu:
   2276 
   2277 * Labels::                      Labels
   2278 * Setting Symbols::             Giving Symbols Other Values
   2279 * Symbol Names::                Symbol Names
   2280 * Dot::                         The Special Dot Symbol
   2281 * Symbol Attributes::           Symbol Attributes
   2282 
   2283 
   2284 File: as.info,  Node: Labels,  Next: Setting Symbols,  Up: Symbols
   2285 
   2286 5.1 Labels
   2287 ==========
   2288 
   2289 A "label" is written as a symbol immediately followed by a colon `:'.
   2290 The symbol then represents the current value of the active location
   2291 counter, and is, for example, a suitable instruction operand.  You are
   2292 warned if you use the same symbol to represent two different locations:
   2293 the first definition overrides any other definitions.
   2294 
   2295    On the HPPA, the usual form for a label need not be immediately
   2296 followed by a colon, but instead must start in column zero.  Only one
   2297 label may be defined on a single line.  To work around this, the HPPA
   2298 version of `as' also provides a special directive `.label' for defining
   2299 labels more flexibly.
   2300 
   2301 
   2302 File: as.info,  Node: Setting Symbols,  Next: Symbol Names,  Prev: Labels,  Up: Symbols
   2303 
   2304 5.2 Giving Symbols Other Values
   2305 ===============================
   2306 
   2307 A symbol can be given an arbitrary value by writing a symbol, followed
   2308 by an equals sign `=', followed by an expression (*note Expressions::).
   2309 This is equivalent to using the `.set' directive.  *Note `.set': Set.
   2310 In the same way, using a double equals sign `='`=' here represents an
   2311 equivalent of the `.eqv' directive.  *Note `.eqv': Eqv.
   2312 
   2313 
   2314 File: as.info,  Node: Symbol Names,  Next: Dot,  Prev: Setting Symbols,  Up: Symbols
   2315 
   2316 5.3 Symbol Names
   2317 ================
   2318 
   2319 Symbol names begin with a letter or with one of `._'.  On most
   2320 machines, you can also use `$' in symbol names; exceptions are noted in
   2321 *note Machine Dependencies::.  That character may be followed by any
   2322 string of digits, letters, dollar signs (unless otherwise noted for a
   2323 particular target machine), and underscores.
   2324 
   2325 Case of letters is significant: `foo' is a different symbol name than
   2326 `Foo'.
   2327 
   2328    Each symbol has exactly one name.  Each name in an assembly language
   2329 program refers to exactly one symbol.  You may use that symbol name any
   2330 number of times in a program.
   2331 
   2332 Local Symbol Names
   2333 ------------------
   2334 
   2335 A local symbol is any symbol beginning with certain local label
   2336 prefixes.  By default, the local label prefix is `.L' for ELF systems or
   2337 `L' for traditional a.out systems, but each target may have its own set
   2338 of local label prefixes.  On the HPPA local symbols begin with `L$'.
   2339 
   2340    Local symbols are defined and used within the assembler, but they are
   2341 normally not saved in object files.  Thus, they are not visible when
   2342 debugging.  You may use the `-L' option (*note Include Local Symbols:
   2343 `-L': L.) to retain the local symbols in the object files.
   2344 
   2345 Local Labels
   2346 ------------
   2347 
   2348 Local labels help compilers and programmers use names temporarily.
   2349 They create symbols which are guaranteed to be unique over the entire
   2350 scope of the input source code and which can be referred to by a simple
   2351 notation.  To define a local label, write a label of the form `N:'
   2352 (where N represents any positive integer).  To refer to the most recent
   2353 previous definition of that label write `Nb', using the same number as
   2354 when you defined the label.  To refer to the next definition of a local
   2355 label, write `Nf'--the `b' stands for "backwards" and the `f' stands
   2356 for "forwards".
   2357 
   2358    There is no restriction on how you can use these labels, and you can
   2359 reuse them too.  So that it is possible to repeatedly define the same
   2360 local label (using the same number `N'), although you can only refer to
   2361 the most recently defined local label of that number (for a backwards
   2362 reference) or the next definition of a specific local label for a
   2363 forward reference.  It is also worth noting that the first 10 local
   2364 labels (`0:'...`9:') are implemented in a slightly more efficient
   2365 manner than the others.
   2366 
   2367    Here is an example:
   2368 
   2369      1:        branch 1f
   2370      2:        branch 1b
   2371      1:        branch 2f
   2372      2:        branch 1b
   2373 
   2374    Which is the equivalent of:
   2375 
   2376      label_1:  branch label_3
   2377      label_2:  branch label_1
   2378      label_3:  branch label_4
   2379      label_4:  branch label_3
   2380 
   2381    Local label names are only a notational device.  They are immediately
   2382 transformed into more conventional symbol names before the assembler
   2383 uses them.  The symbol names are stored in the symbol table, appear in
   2384 error messages, and are optionally emitted to the object file.  The
   2385 names are constructed using these parts:
   2386 
   2387 `_local label prefix_'
   2388      All local symbols begin with the system-specific local label
   2389      prefix.  Normally both `as' and `ld' forget symbols that start
   2390      with the local label prefix.  These labels are used for symbols
   2391      you are never intended to see.  If you use the `-L' option then
   2392      `as' retains these symbols in the object file. If you also
   2393      instruct `ld' to retain these symbols, you may use them in
   2394      debugging.
   2395 
   2396 `NUMBER'
   2397      This is the number that was used in the local label definition.
   2398      So if the label is written `55:' then the number is `55'.
   2399 
   2400 `C-B'
   2401      This unusual character is included so you do not accidentally
   2402      invent a symbol of the same name.  The character has ASCII value
   2403      of `\002' (control-B).
   2404 
   2405 `_ordinal number_'
   2406      This is a serial number to keep the labels distinct.  The first
   2407      definition of `0:' gets the number `1'.  The 15th definition of
   2408      `0:' gets the number `15', and so on.  Likewise the first
   2409      definition of `1:' gets the number `1' and its 15th definition
   2410      gets `15' as well.
   2411 
   2412    So for example, the first `1:' may be named `.L1C-B1', and the 44th
   2413 `3:' may be named `.L3C-B44'.
   2414 
   2415 Dollar Local Labels
   2416 -------------------
   2417 
   2418 `as' also supports an even more local form of local labels called
   2419 dollar labels.  These labels go out of scope (i.e., they become
   2420 undefined) as soon as a non-local label is defined.  Thus they remain
   2421 valid for only a small region of the input source code.  Normal local
   2422 labels, by contrast, remain in scope for the entire file, or until they
   2423 are redefined by another occurrence of the same local label.
   2424 
   2425    Dollar labels are defined in exactly the same way as ordinary local
   2426 labels, except that instead of being terminated by a colon, they are
   2427 terminated by a dollar sign, e.g., `55$'.
   2428 
   2429    They can also be distinguished from ordinary local labels by their
   2430 transformed names which use ASCII character `\001' (control-A) as the
   2431 magic character to distinguish them from ordinary labels.  For example,
   2432 the fifth definition of `6$' may be named `.L6C-A5'.
   2433 
   2434 
   2435 File: as.info,  Node: Dot,  Next: Symbol Attributes,  Prev: Symbol Names,  Up: Symbols
   2436 
   2437 5.4 The Special Dot Symbol
   2438 ==========================
   2439 
   2440 The special symbol `.' refers to the current address that `as' is
   2441 assembling into.  Thus, the expression `melvin: .long .' defines
   2442 `melvin' to contain its own address.  Assigning a value to `.' is
   2443 treated the same as a `.org' directive.  Thus, the expression `.=.+4'
   2444 is the same as saying `.space 4'.
   2445 
   2446 
   2447 File: as.info,  Node: Symbol Attributes,  Prev: Dot,  Up: Symbols
   2448 
   2449 5.5 Symbol Attributes
   2450 =====================
   2451 
   2452 Every symbol has, as well as its name, the attributes "Value" and
   2453 "Type".  Depending on output format, symbols can also have auxiliary
   2454 attributes.
   2455 
   2456    If you use a symbol without defining it, `as' assumes zero for all
   2457 these attributes, and probably won't warn you.  This makes the symbol
   2458 an externally defined symbol, which is generally what you would want.
   2459 
   2460 * Menu:
   2461 
   2462 * Symbol Value::                Value
   2463 * Symbol Type::                 Type
   2464 
   2465 
   2466 * a.out Symbols::               Symbol Attributes: `a.out'
   2467 
   2468 * COFF Symbols::                Symbol Attributes for COFF
   2469 
   2470 * SOM Symbols::                Symbol Attributes for SOM
   2471 
   2472 
   2473 File: as.info,  Node: Symbol Value,  Next: Symbol Type,  Up: Symbol Attributes
   2474 
   2475 5.5.1 Value
   2476 -----------
   2477 
   2478 The value of a symbol is (usually) 32 bits.  For a symbol which labels a
   2479 location in the text, data, bss or absolute sections the value is the
   2480 number of addresses from the start of that section to the label.
   2481 Naturally for text, data and bss sections the value of a symbol changes
   2482 as `ld' changes section base addresses during linking.  Absolute
   2483 symbols' values do not change during linking: that is why they are
   2484 called absolute.
   2485 
   2486    The value of an undefined symbol is treated in a special way.  If it
   2487 is 0 then the symbol is not defined in this assembler source file, and
   2488 `ld' tries to determine its value from other files linked into the same
   2489 program.  You make this kind of symbol simply by mentioning a symbol
   2490 name without defining it.  A non-zero value represents a `.comm' common
   2491 declaration.  The value is how much common storage to reserve, in bytes
   2492 (addresses).  The symbol refers to the first address of the allocated
   2493 storage.
   2494 
   2495 
   2496 File: as.info,  Node: Symbol Type,  Next: a.out Symbols,  Prev: Symbol Value,  Up: Symbol Attributes
   2497 
   2498 5.5.2 Type
   2499 ----------
   2500 
   2501 The type attribute of a symbol contains relocation (section)
   2502 information, any flag settings indicating that a symbol is external, and
   2503 (optionally), other information for linkers and debuggers.  The exact
   2504 format depends on the object-code output format in use.
   2505 
   2506 
   2507 File: as.info,  Node: a.out Symbols,  Next: COFF Symbols,  Prev: Symbol Type,  Up: Symbol Attributes
   2508 
   2509 5.5.3 Symbol Attributes: `a.out'
   2510 --------------------------------
   2511 
   2512 * Menu:
   2513 
   2514 * Symbol Desc::                 Descriptor
   2515 * Symbol Other::                Other
   2516 
   2517 
   2518 File: as.info,  Node: Symbol Desc,  Next: Symbol Other,  Up: a.out Symbols
   2519 
   2520 5.5.3.1 Descriptor
   2521 ..................
   2522 
   2523 This is an arbitrary 16-bit value.  You may establish a symbol's
   2524 descriptor value by using a `.desc' statement (*note `.desc': Desc.).
   2525 A descriptor value means nothing to `as'.
   2526 
   2527 
   2528 File: as.info,  Node: Symbol Other,  Prev: Symbol Desc,  Up: a.out Symbols
   2529 
   2530 5.5.3.2 Other
   2531 .............
   2532 
   2533 This is an arbitrary 8-bit value.  It means nothing to `as'.
   2534 
   2535 
   2536 File: as.info,  Node: COFF Symbols,  Next: SOM Symbols,  Prev: a.out Symbols,  Up: Symbol Attributes
   2537 
   2538 5.5.4 Symbol Attributes for COFF
   2539 --------------------------------
   2540 
   2541 The COFF format supports a multitude of auxiliary symbol attributes;
   2542 like the primary symbol attributes, they are set between `.def' and
   2543 `.endef' directives.
   2544 
   2545 5.5.4.1 Primary Attributes
   2546 ..........................
   2547 
   2548 The symbol name is set with `.def'; the value and type, respectively,
   2549 with `.val' and `.type'.
   2550 
   2551 5.5.4.2 Auxiliary Attributes
   2552 ............................
   2553 
   2554 The `as' directives `.dim', `.line', `.scl', `.size', `.tag', and
   2555 `.weak' can generate auxiliary symbol table information for COFF.
   2556 
   2557 
   2558 File: as.info,  Node: SOM Symbols,  Prev: COFF Symbols,  Up: Symbol Attributes
   2559 
   2560 5.5.5 Symbol Attributes for SOM
   2561 -------------------------------
   2562 
   2563 The SOM format for the HPPA supports a multitude of symbol attributes
   2564 set with the `.EXPORT' and `.IMPORT' directives.
   2565 
   2566    The attributes are described in `HP9000 Series 800 Assembly Language
   2567 Reference Manual' (HP 92432-90001) under the `IMPORT' and `EXPORT'
   2568 assembler directive documentation.
   2569 
   2570 
   2571 File: as.info,  Node: Expressions,  Next: Pseudo Ops,  Prev: Symbols,  Up: Top
   2572 
   2573 6 Expressions
   2574 *************
   2575 
   2576 An "expression" specifies an address or numeric value.  Whitespace may
   2577 precede and/or follow an expression.
   2578 
   2579    The result of an expression must be an absolute number, or else an
   2580 offset into a particular section.  If an expression is not absolute,
   2581 and there is not enough information when `as' sees the expression to
   2582 know its section, a second pass over the source program might be
   2583 necessary to interpret the expression--but the second pass is currently
   2584 not implemented.  `as' aborts with an error message in this situation.
   2585 
   2586 * Menu:
   2587 
   2588 * Empty Exprs::                 Empty Expressions
   2589 * Integer Exprs::               Integer Expressions
   2590 
   2591 
   2592 File: as.info,  Node: Empty Exprs,  Next: Integer Exprs,  Up: Expressions
   2593 
   2594 6.1 Empty Expressions
   2595 =====================
   2596 
   2597 An empty expression has no value: it is just whitespace or null.
   2598 Wherever an absolute expression is required, you may omit the
   2599 expression, and `as' assumes a value of (absolute) 0.  This is
   2600 compatible with other assemblers.
   2601 
   2602 
   2603 File: as.info,  Node: Integer Exprs,  Prev: Empty Exprs,  Up: Expressions
   2604 
   2605 6.2 Integer Expressions
   2606 =======================
   2607 
   2608 An "integer expression" is one or more _arguments_ delimited by
   2609 _operators_.
   2610 
   2611 * Menu:
   2612 
   2613 * Arguments::                   Arguments
   2614 * Operators::                   Operators
   2615 * Prefix Ops::                  Prefix Operators
   2616 * Infix Ops::                   Infix Operators
   2617 
   2618 
   2619 File: as.info,  Node: Arguments,  Next: Operators,  Up: Integer Exprs
   2620 
   2621 6.2.1 Arguments
   2622 ---------------
   2623 
   2624 "Arguments" are symbols, numbers or subexpressions.  In other contexts
   2625 arguments are sometimes called "arithmetic operands".  In this manual,
   2626 to avoid confusing them with the "instruction operands" of the machine
   2627 language, we use the term "argument" to refer to parts of expressions
   2628 only, reserving the word "operand" to refer only to machine instruction
   2629 operands.
   2630 
   2631    Symbols are evaluated to yield {SECTION NNN} where SECTION is one of
   2632 text, data, bss, absolute, or undefined.  NNN is a signed, 2's
   2633 complement 32 bit integer.
   2634 
   2635    Numbers are usually integers.
   2636 
   2637    A number can be a flonum or bignum.  In this case, you are warned
   2638 that only the low order 32 bits are used, and `as' pretends these 32
   2639 bits are an integer.  You may write integer-manipulating instructions
   2640 that act on exotic constants, compatible with other assemblers.
   2641 
   2642    Subexpressions are a left parenthesis `(' followed by an integer
   2643 expression, followed by a right parenthesis `)'; or a prefix operator
   2644 followed by an argument.
   2645 
   2646 
   2647 File: as.info,  Node: Operators,  Next: Prefix Ops,  Prev: Arguments,  Up: Integer Exprs
   2648 
   2649 6.2.2 Operators
   2650 ---------------
   2651 
   2652 "Operators" are arithmetic functions, like `+' or `%'.  Prefix
   2653 operators are followed by an argument.  Infix operators appear between
   2654 their arguments.  Operators may be preceded and/or followed by
   2655 whitespace.
   2656 
   2657 
   2658 File: as.info,  Node: Prefix Ops,  Next: Infix Ops,  Prev: Operators,  Up: Integer Exprs
   2659 
   2660 6.2.3 Prefix Operator
   2661 ---------------------
   2662 
   2663 `as' has the following "prefix operators".  They each take one
   2664 argument, which must be absolute.
   2665 
   2666 `-'
   2667      "Negation".  Two's complement negation.
   2668 
   2669 `~'
   2670      "Complementation".  Bitwise not.
   2671 
   2672 
   2673 File: as.info,  Node: Infix Ops,  Prev: Prefix Ops,  Up: Integer Exprs
   2674 
   2675 6.2.4 Infix Operators
   2676 ---------------------
   2677 
   2678 "Infix operators" take two arguments, one on either side.  Operators
   2679 have precedence, but operations with equal precedence are performed left
   2680 to right.  Apart from `+' or `-', both arguments must be absolute, and
   2681 the result is absolute.
   2682 
   2683   1. Highest Precedence
   2684 
   2685     `*'
   2686           "Multiplication".
   2687 
   2688     `/'
   2689           "Division".  Truncation is the same as the C operator `/'
   2690 
   2691     `%'
   2692           "Remainder".
   2693 
   2694     `<<'
   2695           "Shift Left".  Same as the C operator `<<'.
   2696 
   2697     `>>'
   2698           "Shift Right".  Same as the C operator `>>'.
   2699 
   2700   2. Intermediate precedence
   2701 
   2702     `|'
   2703           "Bitwise Inclusive Or".
   2704 
   2705     `&'
   2706           "Bitwise And".
   2707 
   2708     `^'
   2709           "Bitwise Exclusive Or".
   2710 
   2711     `!'
   2712           "Bitwise Or Not".
   2713 
   2714   3. Low Precedence
   2715 
   2716     `+'
   2717           "Addition".  If either argument is absolute, the result has
   2718           the section of the other argument.  You may not add together
   2719           arguments from different sections.
   2720 
   2721     `-'
   2722           "Subtraction".  If the right argument is absolute, the result
   2723           has the section of the left argument.  If both arguments are
   2724           in the same section, the result is absolute.  You may not
   2725           subtract arguments from different sections.
   2726 
   2727     `=='
   2728           "Is Equal To"
   2729 
   2730     `<>'
   2731     `!='
   2732           "Is Not Equal To"
   2733 
   2734     `<'
   2735           "Is Less Than"
   2736 
   2737     `>'
   2738           "Is Greater Than"
   2739 
   2740     `>='
   2741           "Is Greater Than Or Equal To"
   2742 
   2743     `<='
   2744           "Is Less Than Or Equal To"
   2745 
   2746           The comparison operators can be used as infix operators.  A
   2747           true results has a value of -1 whereas a false result has a
   2748           value of 0.   Note, these operators perform signed
   2749           comparisons.
   2750 
   2751   4. Lowest Precedence
   2752 
   2753     `&&'
   2754           "Logical And".
   2755 
   2756     `||'
   2757           "Logical Or".
   2758 
   2759           These two logical operations can be used to combine the
   2760           results of sub expressions.  Note, unlike the comparison
   2761           operators a true result returns a value of 1 but a false
   2762           results does still return 0.  Also note that the logical or
   2763           operator has a slightly lower precedence than logical and.
   2764 
   2765 
   2766    In short, it's only meaningful to add or subtract the _offsets_ in an
   2767 address; you can only have a defined section in one of the two
   2768 arguments.
   2769 
   2770 
   2771 File: as.info,  Node: Pseudo Ops,  Next: Object Attributes,  Prev: Expressions,  Up: Top
   2772 
   2773 7 Assembler Directives
   2774 **********************
   2775 
   2776 All assembler directives have names that begin with a period (`.').
   2777 The rest of the name is letters, usually in lower case.
   2778 
   2779    This chapter discusses directives that are available regardless of
   2780 the target machine configuration for the GNU assembler.  Some machine
   2781 configurations provide additional directives.  *Note Machine
   2782 Dependencies::.
   2783 
   2784 * Menu:
   2785 
   2786 * Abort::                       `.abort'
   2787 
   2788 * ABORT (COFF)::                `.ABORT'
   2789 
   2790 * Align::                       `.align ABS-EXPR , ABS-EXPR'
   2791 * Altmacro::                    `.altmacro'
   2792 * Ascii::                       `.ascii "STRING"'...
   2793 * Asciz::                       `.asciz "STRING"'...
   2794 * Balign::                      `.balign ABS-EXPR , ABS-EXPR'
   2795 * Byte::                        `.byte EXPRESSIONS'
   2796 * Comm::                        `.comm SYMBOL , LENGTH '
   2797 
   2798 * CFI directives::		`.cfi_startproc [simple]', `.cfi_endproc', etc.
   2799 
   2800 * Data::                        `.data SUBSECTION'
   2801 
   2802 * Def::                         `.def NAME'
   2803 
   2804 * Desc::                        `.desc SYMBOL, ABS-EXPRESSION'
   2805 
   2806 * Dim::                         `.dim'
   2807 
   2808 * Double::                      `.double FLONUMS'
   2809 * Eject::                       `.eject'
   2810 * Else::                        `.else'
   2811 * Elseif::                      `.elseif'
   2812 * End::				`.end'
   2813 
   2814 * Endef::                       `.endef'
   2815 
   2816 * Endfunc::                     `.endfunc'
   2817 * Endif::                       `.endif'
   2818 * Equ::                         `.equ SYMBOL, EXPRESSION'
   2819 * Equiv::                       `.equiv SYMBOL, EXPRESSION'
   2820 * Eqv::                         `.eqv SYMBOL, EXPRESSION'
   2821 * Err::				`.err'
   2822 * Error::			`.error STRING'
   2823 * Exitm::			`.exitm'
   2824 * Extern::                      `.extern'
   2825 * Fail::			`.fail'
   2826 
   2827 * File::                        `.file STRING'
   2828 
   2829 * Fill::                        `.fill REPEAT , SIZE , VALUE'
   2830 * Float::                       `.float FLONUMS'
   2831 * Func::                        `.func'
   2832 * Global::                      `.global SYMBOL', `.globl SYMBOL'
   2833 
   2834 * Gnu_attribute::               `.gnu_attribute TAG,VALUE'
   2835 * Hidden::                      `.hidden NAMES'
   2836 
   2837 * hword::                       `.hword EXPRESSIONS'
   2838 * Ident::                       `.ident'
   2839 * If::                          `.if ABSOLUTE EXPRESSION'
   2840 * Incbin::                      `.incbin "FILE"[,SKIP[,COUNT]]'
   2841 * Include::                     `.include "FILE"'
   2842 * Int::                         `.int EXPRESSIONS'
   2843 
   2844 * Internal::                    `.internal NAMES'
   2845 
   2846 * Irp::				`.irp SYMBOL,VALUES'...
   2847 * Irpc::			`.irpc SYMBOL,VALUES'...
   2848 * Lcomm::                       `.lcomm SYMBOL , LENGTH'
   2849 * Lflags::                      `.lflags'
   2850 
   2851 * Line::                        `.line LINE-NUMBER'
   2852 
   2853 * Linkonce::			`.linkonce [TYPE]'
   2854 * List::                        `.list'
   2855 * Ln::                          `.ln LINE-NUMBER'
   2856 
   2857 * LNS directives::              `.file', `.loc', etc.
   2858 
   2859 * Long::                        `.long EXPRESSIONS'
   2860 
   2861 * Macro::			`.macro NAME ARGS'...
   2862 * MRI::				`.mri VAL'
   2863 * Noaltmacro::                  `.noaltmacro'
   2864 * Nolist::                      `.nolist'
   2865 * Octa::                        `.octa BIGNUMS'
   2866 * Org::                         `.org NEW-LC, FILL'
   2867 * P2align::                     `.p2align ABS-EXPR, ABS-EXPR, ABS-EXPR'
   2868 
   2869 * PopSection::                  `.popsection'
   2870 * Previous::                    `.previous'
   2871 
   2872 * Print::			`.print STRING'
   2873 
   2874 * Protected::                   `.protected NAMES'
   2875 
   2876 * Psize::                       `.psize LINES, COLUMNS'
   2877 * Purgem::			`.purgem NAME'
   2878 
   2879 * PushSection::                 `.pushsection NAME'
   2880 
   2881 * Quad::                        `.quad BIGNUMS'
   2882 * Reloc::			`.reloc OFFSET, RELOC_NAME[, EXPRESSION]'
   2883 * Rept::			`.rept COUNT'
   2884 * Sbttl::                       `.sbttl "SUBHEADING"'
   2885 
   2886 * Scl::                         `.scl CLASS'
   2887 
   2888 * Section::                     `.section NAME[, FLAGS]'
   2889 
   2890 * Set::                         `.set SYMBOL, EXPRESSION'
   2891 * Short::                       `.short EXPRESSIONS'
   2892 * Single::                      `.single FLONUMS'
   2893 
   2894 * Size::                        `.size [NAME , EXPRESSION]'
   2895 
   2896 * Skip::                        `.skip SIZE , FILL'
   2897 * Sleb128::			`.sleb128 EXPRESSIONS'
   2898 * Space::                       `.space SIZE , FILL'
   2899 
   2900 * Stab::                        `.stabd, .stabn, .stabs'
   2901 
   2902 * String::                      `.string "STR"', `.string8 "STR"', `.string16 "STR"', `.string32 "STR"', `.string64 "STR"'
   2903 * Struct::			`.struct EXPRESSION'
   2904 
   2905 * SubSection::                  `.subsection'
   2906 * Symver::                      `.symver NAME,NAME2@NODENAME'
   2907 
   2908 
   2909 * Tag::                         `.tag STRUCTNAME'
   2910 
   2911 * Text::                        `.text SUBSECTION'
   2912 * Title::                       `.title "HEADING"'
   2913 
   2914 * Type::                        `.type <INT | NAME , TYPE DESCRIPTION>'
   2915 
   2916 * Uleb128::                     `.uleb128 EXPRESSIONS'
   2917 
   2918 * Val::                         `.val ADDR'
   2919 
   2920 
   2921 * Version::                     `.version "STRING"'
   2922 * VTableEntry::                 `.vtable_entry TABLE, OFFSET'
   2923 * VTableInherit::               `.vtable_inherit CHILD, PARENT'
   2924 
   2925 * Warning::			`.warning STRING'
   2926 * Weak::                        `.weak NAMES'
   2927 * Weakref::                     `.weakref ALIAS, SYMBOL'
   2928 * Word::                        `.word EXPRESSIONS'
   2929 * Deprecated::                  Deprecated Directives
   2930 
   2931 
   2932 File: as.info,  Node: Abort,  Next: ABORT (COFF),  Up: Pseudo Ops
   2933 
   2934 7.1 `.abort'
   2935 ============
   2936 
   2937 This directive stops the assembly immediately.  It is for compatibility
   2938 with other assemblers.  The original idea was that the assembly
   2939 language source would be piped into the assembler.  If the sender of
   2940 the source quit, it could use this directive tells `as' to quit also.
   2941 One day `.abort' will not be supported.
   2942 
   2943 
   2944 File: as.info,  Node: ABORT (COFF),  Next: Align,  Prev: Abort,  Up: Pseudo Ops
   2945 
   2946 7.2 `.ABORT' (COFF)
   2947 ===================
   2948 
   2949 When producing COFF output, `as' accepts this directive as a synonym
   2950 for `.abort'.
   2951 
   2952 
   2953 File: as.info,  Node: Align,  Next: Altmacro,  Prev: ABORT (COFF),  Up: Pseudo Ops
   2954 
   2955 7.3 `.align ABS-EXPR, ABS-EXPR, ABS-EXPR'
   2956 =========================================
   2957 
   2958 Pad the location counter (in the current subsection) to a particular
   2959 storage boundary.  The first expression (which must be absolute) is the
   2960 alignment required, as described below.
   2961 
   2962    The second expression (also absolute) gives the fill value to be
   2963 stored in the padding bytes.  It (and the comma) may be omitted.  If it
   2964 is omitted, the padding bytes are normally zero.  However, on some
   2965 systems, if the section is marked as containing code and the fill value
   2966 is omitted, the space is filled with no-op instructions.
   2967 
   2968    The third expression is also absolute, and is also optional.  If it
   2969 is present, it is the maximum number of bytes that should be skipped by
   2970 this alignment directive.  If doing the alignment would require
   2971 skipping more bytes than the specified maximum, then the alignment is
   2972 not done at all.  You can omit the fill value (the second argument)
   2973 entirely by simply using two commas after the required alignment; this
   2974 can be useful if you want the alignment to be filled with no-op
   2975 instructions when appropriate.
   2976 
   2977    The way the required alignment is specified varies from system to
   2978 system.  For the arc, hppa, i386 using ELF, i860, iq2000, m68k, or32,
   2979 s390, sparc, tic4x, tic80 and xtensa, the first expression is the
   2980 alignment request in bytes.  For example `.align 8' advances the
   2981 location counter until it is a multiple of 8.  If the location counter
   2982 is already a multiple of 8, no change is needed.  For the tic54x, the
   2983 first expression is the alignment request in words.
   2984 
   2985    For other systems, including ppc, i386 using a.out format, arm and
   2986 strongarm, it is the number of low-order zero bits the location counter
   2987 must have after advancement.  For example `.align 3' advances the
   2988 location counter until it a multiple of 8.  If the location counter is
   2989 already a multiple of 8, no change is needed.
   2990 
   2991    This inconsistency is due to the different behaviors of the various
   2992 native assemblers for these systems which GAS must emulate.  GAS also
   2993 provides `.balign' and `.p2align' directives, described later, which
   2994 have a consistent behavior across all architectures (but are specific
   2995 to GAS).
   2996 
   2997 
   2998 File: as.info,  Node: Ascii,  Next: Asciz,  Prev: Altmacro,  Up: Pseudo Ops
   2999 
   3000 7.4 `.ascii "STRING"'...
   3001 ========================
   3002 
   3003 `.ascii' expects zero or more string literals (*note Strings::)
   3004 separated by commas.  It assembles each string (with no automatic
   3005 trailing zero byte) into consecutive addresses.
   3006 
   3007 
   3008 File: as.info,  Node: Asciz,  Next: Balign,  Prev: Ascii,  Up: Pseudo Ops
   3009 
   3010 7.5 `.asciz "STRING"'...
   3011 ========================
   3012 
   3013 `.asciz' is just like `.ascii', but each string is followed by a zero
   3014 byte.  The "z" in `.asciz' stands for "zero".
   3015 
   3016 
   3017 File: as.info,  Node: Balign,  Next: Byte,  Prev: Asciz,  Up: Pseudo Ops
   3018 
   3019 7.6 `.balign[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR'
   3020 ==============================================
   3021 
   3022 Pad the location counter (in the current subsection) to a particular
   3023 storage boundary.  The first expression (which must be absolute) is the
   3024 alignment request in bytes.  For example `.balign 8' advances the
   3025 location counter until it is a multiple of 8.  If the location counter
   3026 is already a multiple of 8, no change is needed.
   3027 
   3028    The second expression (also absolute) gives the fill value to be
   3029 stored in the padding bytes.  It (and the comma) may be omitted.  If it
   3030 is omitted, the padding bytes are normally zero.  However, on some
   3031 systems, if the section is marked as containing code and the fill value
   3032 is omitted, the space is filled with no-op instructions.
   3033 
   3034    The third expression is also absolute, and is also optional.  If it
   3035 is present, it is the maximum number of bytes that should be skipped by
   3036 this alignment directive.  If doing the alignment would require
   3037 skipping more bytes than the specified maximum, then the alignment is
   3038 not done at all.  You can omit the fill value (the second argument)
   3039 entirely by simply using two commas after the required alignment; this
   3040 can be useful if you want the alignment to be filled with no-op
   3041 instructions when appropriate.
   3042 
   3043    The `.balignw' and `.balignl' directives are variants of the
   3044 `.balign' directive.  The `.balignw' directive treats the fill pattern
   3045 as a two byte word value.  The `.balignl' directives treats the fill
   3046 pattern as a four byte longword value.  For example, `.balignw
   3047 4,0x368d' will align to a multiple of 4.  If it skips two bytes, they
   3048 will be filled in with the value 0x368d (the exact placement of the
   3049 bytes depends upon the endianness of the processor).  If it skips 1 or
   3050 3 bytes, the fill value is undefined.
   3051 
   3052 
   3053 File: as.info,  Node: Byte,  Next: Comm,  Prev: Balign,  Up: Pseudo Ops
   3054 
   3055 7.7 `.byte EXPRESSIONS'
   3056 =======================
   3057 
   3058 `.byte' expects zero or more expressions, separated by commas.  Each
   3059 expression is assembled into the next byte.
   3060 
   3061 
   3062 File: as.info,  Node: Comm,  Next: CFI directives,  Prev: Byte,  Up: Pseudo Ops
   3063 
   3064 7.8 `.comm SYMBOL , LENGTH '
   3065 ============================
   3066 
   3067 `.comm' declares a common symbol named SYMBOL.  When linking, a common
   3068 symbol in one object file may be merged with a defined or common symbol
   3069 of the same name in another object file.  If `ld' does not see a
   3070 definition for the symbol-just one or more common symbols-then it will
   3071 allocate LENGTH bytes of uninitialized memory.  LENGTH must be an
   3072 absolute expression.  If `ld' sees multiple common symbols with the
   3073 same name, and they do not all have the same size, it will allocate
   3074 space using the largest size.
   3075 
   3076    When using ELF, the `.comm' directive takes an optional third
   3077 argument.  This is the desired alignment of the symbol, specified as a
   3078 byte boundary (for example, an alignment of 16 means that the least
   3079 significant 4 bits of the address should be zero).  The alignment must
   3080 be an absolute expression, and it must be a power of two.  If `ld'
   3081 allocates uninitialized memory for the common symbol, it will use the
   3082 alignment when placing the symbol.  If no alignment is specified, `as'
   3083 will set the alignment to the largest power of two less than or equal
   3084 to the size of the symbol, up to a maximum of 16.
   3085 
   3086    The syntax for `.comm' differs slightly on the HPPA.  The syntax is
   3087 `SYMBOL .comm, LENGTH'; SYMBOL is optional.
   3088 
   3089 
   3090 File: as.info,  Node: CFI directives,  Next: Data,  Prev: Comm,  Up: Pseudo Ops
   3091 
   3092 7.9 `.cfi_startproc [simple]'
   3093 =============================
   3094 
   3095 `.cfi_startproc' is used at the beginning of each function that should
   3096 have an entry in `.eh_frame'. It initializes some internal data
   3097 structures. Don't forget to close the function by `.cfi_endproc'.
   3098 
   3099    Unless `.cfi_startproc' is used along with parameter `simple' it
   3100 also emits some architecture dependent initial CFI instructions.
   3101 
   3102 7.10 `.cfi_endproc'
   3103 ===================
   3104 
   3105 `.cfi_endproc' is used at the end of a function where it closes its
   3106 unwind entry previously opened by `.cfi_startproc', and emits it to
   3107 `.eh_frame'.
   3108 
   3109 7.11 `.cfi_personality ENCODING [, EXP]'
   3110 ========================================
   3111 
   3112 `.cfi_personality' defines personality routine and its encoding.
   3113 ENCODING must be a constant determining how the personality should be
   3114 encoded.  If it is 255 (`DW_EH_PE_omit'), second argument is not
   3115 present, otherwise second argument should be a constant or a symbol
   3116 name.  When using indirect encodings, the symbol provided should be the
   3117 location where personality can be loaded from, not the personality
   3118 routine itself.  The default after `.cfi_startproc' is
   3119 `.cfi_personality 0xff', no personality routine.
   3120 
   3121 7.12 `.cfi_lsda ENCODING [, EXP]'
   3122 =================================
   3123 
   3124 `.cfi_lsda' defines LSDA and its encoding.  ENCODING must be a constant
   3125 determining how the LSDA should be encoded.  If it is 255
   3126 (`DW_EH_PE_omit'), second argument is not present, otherwise second
   3127 argument should be a constant or a symbol name.  The default after
   3128 `.cfi_startproc' is `.cfi_lsda 0xff', no LSDA.
   3129 
   3130 7.13 `.cfi_def_cfa REGISTER, OFFSET'
   3131 ====================================
   3132 
   3133 `.cfi_def_cfa' defines a rule for computing CFA as: take address from
   3134 REGISTER and add OFFSET to it.
   3135 
   3136 7.14 `.cfi_def_cfa_register REGISTER'
   3137 =====================================
   3138 
   3139 `.cfi_def_cfa_register' modifies a rule for computing CFA. From now on
   3140 REGISTER will be used instead of the old one. Offset remains the same.
   3141 
   3142 7.15 `.cfi_def_cfa_offset OFFSET'
   3143 =================================
   3144 
   3145 `.cfi_def_cfa_offset' modifies a rule for computing CFA. Register
   3146 remains the same, but OFFSET is new. Note that it is the absolute
   3147 offset that will be added to a defined register to compute CFA address.
   3148 
   3149 7.16 `.cfi_adjust_cfa_offset OFFSET'
   3150 ====================================
   3151 
   3152 Same as `.cfi_def_cfa_offset' but OFFSET is a relative value that is
   3153 added/substracted from the previous offset.
   3154 
   3155 7.17 `.cfi_offset REGISTER, OFFSET'
   3156 ===================================
   3157 
   3158 Previous value of REGISTER is saved at offset OFFSET from CFA.
   3159 
   3160 7.18 `.cfi_rel_offset REGISTER, OFFSET'
   3161 =======================================
   3162 
   3163 Previous value of REGISTER is saved at offset OFFSET from the current
   3164 CFA register.  This is transformed to `.cfi_offset' using the known
   3165 displacement of the CFA register from the CFA.  This is often easier to
   3166 use, because the number will match the code it's annotating.
   3167 
   3168 7.19 `.cfi_register REGISTER1, REGISTER2'
   3169 =========================================
   3170 
   3171 Previous value of REGISTER1 is saved in register REGISTER2.
   3172 
   3173 7.20 `.cfi_restore REGISTER'
   3174 ============================
   3175 
   3176 `.cfi_restore' says that the rule for REGISTER is now the same as it
   3177 was at the beginning of the function, after all initial instruction
   3178 added by `.cfi_startproc' were executed.
   3179 
   3180 7.21 `.cfi_undefined REGISTER'
   3181 ==============================
   3182 
   3183 From now on the previous value of REGISTER can't be restored anymore.
   3184 
   3185 7.22 `.cfi_same_value REGISTER'
   3186 ===============================
   3187 
   3188 Current value of REGISTER is the same like in the previous frame, i.e.
   3189 no restoration needed.
   3190 
   3191 7.23 `.cfi_remember_state',
   3192 ===========================
   3193 
   3194 First save all current rules for all registers by `.cfi_remember_state',
   3195 then totally screw them up by subsequent `.cfi_*' directives and when
   3196 everything is hopelessly bad, use `.cfi_restore_state' to restore the
   3197 previous saved state.
   3198 
   3199 7.24 `.cfi_return_column REGISTER'
   3200 ==================================
   3201 
   3202 Change return column REGISTER, i.e. the return address is either
   3203 directly in REGISTER or can be accessed by rules for REGISTER.
   3204 
   3205 7.25 `.cfi_signal_frame'
   3206 ========================
   3207 
   3208 Mark current function as signal trampoline.
   3209 
   3210 7.26 `.cfi_window_save'
   3211 =======================
   3212 
   3213 SPARC register window has been saved.
   3214 
   3215 7.27 `.cfi_escape' EXPRESSION[, ...]
   3216 ====================================
   3217 
   3218 Allows the user to add arbitrary bytes to the unwind info.  One might
   3219 use this to add OS-specific CFI opcodes, or generic CFI opcodes that
   3220 GAS does not yet support.
   3221 
   3222 7.28 `.cfi_val_encoded_addr REGISTER, ENCODING, LABEL'
   3223 ======================================================
   3224 
   3225 The current value of REGISTER is LABEL.  The value of LABEL will be
   3226 encoded in the output file according to ENCODING; see the description
   3227 of `.cfi_personality' for details on this encoding.
   3228 
   3229    The usefulness of equating a register to a fixed label is probably
   3230 limited to the return address register.  Here, it can be useful to mark
   3231 a code segment that has only one return address which is reached by a
   3232 direct branch and no copy of the return address exists in memory or
   3233 another register.
   3234 
   3235 
   3236 File: as.info,  Node: LNS directives,  Next: Long,  Prev: Ln,  Up: Pseudo Ops
   3237 
   3238 7.29 `.file FILENO FILENAME'
   3239 ============================
   3240 
   3241 When emitting dwarf2 line number information `.file' assigns filenames
   3242 to the `.debug_line' file name table.  The FILENO operand should be a
   3243 unique positive integer to use as the index of the entry in the table.
   3244 The FILENAME operand is a C string literal.
   3245 
   3246    The detail of filename indices is exposed to the user because the
   3247 filename table is shared with the `.debug_info' section of the dwarf2
   3248 debugging information, and thus the user must know the exact indices
   3249 that table entries will have.
   3250 
   3251 7.30 `.loc FILENO LINENO [COLUMN] [OPTIONS]'
   3252 ============================================
   3253 
   3254 The `.loc' directive will add row to the `.debug_line' line number
   3255 matrix corresponding to the immediately following assembly instruction.
   3256 The FILENO, LINENO, and optional COLUMN arguments will be applied to
   3257 the `.debug_line' state machine before the row is added.
   3258 
   3259    The OPTIONS are a sequence of the following tokens in any order:
   3260 
   3261 `basic_block'
   3262      This option will set the `basic_block' register in the
   3263      `.debug_line' state machine to `true'.
   3264 
   3265 `prologue_end'
   3266      This option will set the `prologue_end' register in the
   3267      `.debug_line' state machine to `true'.
   3268 
   3269 `epilogue_begin'
   3270      This option will set the `epilogue_begin' register in the
   3271      `.debug_line' state machine to `true'.
   3272 
   3273 `is_stmt VALUE'
   3274      This option will set the `is_stmt' register in the `.debug_line'
   3275      state machine to `value', which must be either 0 or 1.
   3276 
   3277 `isa VALUE'
   3278      This directive will set the `isa' register in the `.debug_line'
   3279      state machine to VALUE, which must be an unsigned integer.
   3280 
   3281 
   3282 7.31 `.loc_mark_labels ENABLE'
   3283 ==============================
   3284 
   3285 The `.loc_mark_labels' directive makes the assembler emit an entry to
   3286 the `.debug_line' line number matrix with the `basic_block' register in
   3287 the state machine set whenever a code label is seen.  The ENABLE
   3288 argument should be either 1 or 0, to enable or disable this function
   3289 respectively.
   3290 
   3291 
   3292 File: as.info,  Node: Data,  Next: Def,  Prev: CFI directives,  Up: Pseudo Ops
   3293 
   3294 7.32 `.data SUBSECTION'
   3295 =======================
   3296 
   3297 `.data' tells `as' to assemble the following statements onto the end of
   3298 the data subsection numbered SUBSECTION (which is an absolute
   3299 expression).  If SUBSECTION is omitted, it defaults to zero.
   3300 
   3301 
   3302 File: as.info,  Node: Def,  Next: Desc,  Prev: Data,  Up: Pseudo Ops
   3303 
   3304 7.33 `.def NAME'
   3305 ================
   3306 
   3307 Begin defining debugging information for a symbol NAME; the definition
   3308 extends until the `.endef' directive is encountered.
   3309 
   3310 
   3311 File: as.info,  Node: Desc,  Next: Dim,  Prev: Def,  Up: Pseudo Ops
   3312 
   3313 7.34 `.desc SYMBOL, ABS-EXPRESSION'
   3314 ===================================
   3315 
   3316 This directive sets the descriptor of the symbol (*note Symbol
   3317 Attributes::) to the low 16 bits of an absolute expression.
   3318 
   3319    The `.desc' directive is not available when `as' is configured for
   3320 COFF output; it is only for `a.out' or `b.out' object format.  For the
   3321 sake of compatibility, `as' accepts it, but produces no output, when
   3322 configured for COFF.
   3323 
   3324 
   3325 File: as.info,  Node: Dim,  Next: Double,  Prev: Desc,  Up: Pseudo Ops
   3326 
   3327 7.35 `.dim'
   3328 ===========
   3329 
   3330 This directive is generated by compilers to include auxiliary debugging
   3331 information in the symbol table.  It is only permitted inside
   3332 `.def'/`.endef' pairs.
   3333 
   3334 
   3335 File: as.info,  Node: Double,  Next: Eject,  Prev: Dim,  Up: Pseudo Ops
   3336 
   3337 7.36 `.double FLONUMS'
   3338 ======================
   3339 
   3340 `.double' expects zero or more flonums, separated by commas.  It
   3341 assembles floating point numbers.  The exact kind of floating point
   3342 numbers emitted depends on how `as' is configured.  *Note Machine
   3343 Dependencies::.
   3344 
   3345 
   3346 File: as.info,  Node: Eject,  Next: Else,  Prev: Double,  Up: Pseudo Ops
   3347 
   3348 7.37 `.eject'
   3349 =============
   3350 
   3351 Force a page break at this point, when generating assembly listings.
   3352 
   3353 
   3354 File: as.info,  Node: Else,  Next: Elseif,  Prev: Eject,  Up: Pseudo Ops
   3355 
   3356 7.38 `.else'
   3357 ============
   3358 
   3359 `.else' is part of the `as' support for conditional assembly; see *note
   3360 `.if': If.  It marks the beginning of a section of code to be assembled
   3361 if the condition for the preceding `.if' was false.
   3362 
   3363 
   3364 File: as.info,  Node: Elseif,  Next: End,  Prev: Else,  Up: Pseudo Ops
   3365 
   3366 7.39 `.elseif'
   3367 ==============
   3368 
   3369 `.elseif' is part of the `as' support for conditional assembly; see
   3370 *note `.if': If.  It is shorthand for beginning a new `.if' block that
   3371 would otherwise fill the entire `.else' section.
   3372 
   3373 
   3374 File: as.info,  Node: End,  Next: Endef,  Prev: Elseif,  Up: Pseudo Ops
   3375 
   3376 7.40 `.end'
   3377 ===========
   3378 
   3379 `.end' marks the end of the assembly file.  `as' does not process
   3380 anything in the file past the `.end' directive.
   3381 
   3382 
   3383 File: as.info,  Node: Endef,  Next: Endfunc,  Prev: End,  Up: Pseudo Ops
   3384 
   3385 7.41 `.endef'
   3386 =============
   3387 
   3388 This directive flags the end of a symbol definition begun with `.def'.
   3389 
   3390 
   3391 File: as.info,  Node: Endfunc,  Next: Endif,  Prev: Endef,  Up: Pseudo Ops
   3392 
   3393 7.42 `.endfunc'
   3394 ===============
   3395 
   3396 `.endfunc' marks the end of a function specified with `.func'.
   3397 
   3398 
   3399 File: as.info,  Node: Endif,  Next: Equ,  Prev: Endfunc,  Up: Pseudo Ops
   3400 
   3401 7.43 `.endif'
   3402 =============
   3403 
   3404 `.endif' is part of the `as' support for conditional assembly; it marks
   3405 the end of a block of code that is only assembled conditionally.  *Note
   3406 `.if': If.
   3407 
   3408 
   3409 File: as.info,  Node: Equ,  Next: Equiv,  Prev: Endif,  Up: Pseudo Ops
   3410 
   3411 7.44 `.equ SYMBOL, EXPRESSION'
   3412 ==============================
   3413 
   3414 This directive sets the value of SYMBOL to EXPRESSION.  It is
   3415 synonymous with `.set'; see *note `.set': Set.
   3416 
   3417    The syntax for `equ' on the HPPA is `SYMBOL .equ EXPRESSION'.
   3418 
   3419    The syntax for `equ' on the Z80 is `SYMBOL equ EXPRESSION'.  On the
   3420 Z80 it is an eror if SYMBOL is already defined, but the symbol is not
   3421 protected from later redefinition.  Compare *note Equiv::.
   3422 
   3423 
   3424 File: as.info,  Node: Equiv,  Next: Eqv,  Prev: Equ,  Up: Pseudo Ops
   3425 
   3426 7.45 `.equiv SYMBOL, EXPRESSION'
   3427 ================================
   3428 
   3429 The `.equiv' directive is like `.equ' and `.set', except that the
   3430 assembler will signal an error if SYMBOL is already defined.  Note a
   3431 symbol which has been referenced but not actually defined is considered
   3432 to be undefined.
   3433 
   3434    Except for the contents of the error message, this is roughly
   3435 equivalent to
   3436      .ifdef SYM
   3437      .err
   3438      .endif
   3439      .equ SYM,VAL
   3440    plus it protects the symbol from later redefinition.
   3441 
   3442 
   3443 File: as.info,  Node: Eqv,  Next: Err,  Prev: Equiv,  Up: Pseudo Ops
   3444 
   3445 7.46 `.eqv SYMBOL, EXPRESSION'
   3446 ==============================
   3447 
   3448 The `.eqv' directive is like `.equiv', but no attempt is made to
   3449 evaluate the expression or any part of it immediately.  Instead each
   3450 time the resulting symbol is used in an expression, a snapshot of its
   3451 current value is taken.
   3452 
   3453 
   3454 File: as.info,  Node: Err,  Next: Error,  Prev: Eqv,  Up: Pseudo Ops
   3455 
   3456 7.47 `.err'
   3457 ===========
   3458 
   3459 If `as' assembles a `.err' directive, it will print an error message
   3460 and, unless the `-Z' option was used, it will not generate an object
   3461 file.  This can be used to signal an error in conditionally compiled
   3462 code.
   3463 
   3464 
   3465 File: as.info,  Node: Error,  Next: Exitm,  Prev: Err,  Up: Pseudo Ops
   3466 
   3467 7.48 `.error "STRING"'
   3468 ======================
   3469 
   3470 Similarly to `.err', this directive emits an error, but you can specify
   3471 a string that will be emitted as the error message.  If you don't
   3472 specify the message, it defaults to `".error directive invoked in
   3473 source file"'.  *Note Error and Warning Messages: Errors.
   3474 
   3475       .error "This code has not been assembled and tested."
   3476 
   3477 
   3478 File: as.info,  Node: Exitm,  Next: Extern,  Prev: Error,  Up: Pseudo Ops
   3479 
   3480 7.49 `.exitm'
   3481 =============
   3482 
   3483 Exit early from the current macro definition.  *Note Macro::.
   3484 
   3485 
   3486 File: as.info,  Node: Extern,  Next: Fail,  Prev: Exitm,  Up: Pseudo Ops
   3487 
   3488 7.50 `.extern'
   3489 ==============
   3490 
   3491 `.extern' is accepted in the source program--for compatibility with
   3492 other assemblers--but it is ignored.  `as' treats all undefined symbols
   3493 as external.
   3494 
   3495 
   3496 File: as.info,  Node: Fail,  Next: File,  Prev: Extern,  Up: Pseudo Ops
   3497 
   3498 7.51 `.fail EXPRESSION'
   3499 =======================
   3500 
   3501 Generates an error or a warning.  If the value of the EXPRESSION is 500
   3502 or more, `as' will print a warning message.  If the value is less than
   3503 500, `as' will print an error message.  The message will include the
   3504 value of EXPRESSION.  This can occasionally be useful inside complex
   3505 nested macros or conditional assembly.
   3506 
   3507 
   3508 File: as.info,  Node: File,  Next: Fill,  Prev: Fail,  Up: Pseudo Ops
   3509 
   3510 7.52 `.file STRING'
   3511 ===================
   3512 
   3513 `.file' tells `as' that we are about to start a new logical file.
   3514 STRING is the new file name.  In general, the filename is recognized
   3515 whether or not it is surrounded by quotes `"'; but if you wish to
   3516 specify an empty file name, you must give the quotes-`""'.  This
   3517 statement may go away in future: it is only recognized to be compatible
   3518 with old `as' programs.
   3519 
   3520 
   3521 File: as.info,  Node: Fill,  Next: Float,  Prev: File,  Up: Pseudo Ops
   3522 
   3523 7.53 `.fill REPEAT , SIZE , VALUE'
   3524 ==================================
   3525 
   3526 REPEAT, SIZE and VALUE are absolute expressions.  This emits REPEAT
   3527 copies of SIZE bytes.  REPEAT may be zero or more.  SIZE may be zero or
   3528 more, but if it is more than 8, then it is deemed to have the value 8,
   3529 compatible with other people's assemblers.  The contents of each REPEAT
   3530 bytes is taken from an 8-byte number.  The highest order 4 bytes are
   3531 zero.  The lowest order 4 bytes are VALUE rendered in the byte-order of
   3532 an integer on the computer `as' is assembling for.  Each SIZE bytes in
   3533 a repetition is taken from the lowest order SIZE bytes of this number.
   3534 Again, this bizarre behavior is compatible with other people's
   3535 assemblers.
   3536 
   3537    SIZE and VALUE are optional.  If the second comma and VALUE are
   3538 absent, VALUE is assumed zero.  If the first comma and following tokens
   3539 are absent, SIZE is assumed to be 1.
   3540 
   3541 
   3542 File: as.info,  Node: Float,  Next: Func,  Prev: Fill,  Up: Pseudo Ops
   3543 
   3544 7.54 `.float FLONUMS'
   3545 =====================
   3546 
   3547 This directive assembles zero or more flonums, separated by commas.  It
   3548 has the same effect as `.single'.  The exact kind of floating point
   3549 numbers emitted depends on how `as' is configured.  *Note Machine
   3550 Dependencies::.
   3551 
   3552 
   3553 File: as.info,  Node: Func,  Next: Global,  Prev: Float,  Up: Pseudo Ops
   3554 
   3555 7.55 `.func NAME[,LABEL]'
   3556 =========================
   3557 
   3558 `.func' emits debugging information to denote function NAME, and is
   3559 ignored unless the file is assembled with debugging enabled.  Only
   3560 `--gstabs[+]' is currently supported.  LABEL is the entry point of the
   3561 function and if omitted NAME prepended with the `leading char' is used.
   3562 `leading char' is usually `_' or nothing, depending on the target.  All
   3563 functions are currently defined to have `void' return type.  The
   3564 function must be terminated with `.endfunc'.
   3565 
   3566 
   3567 File: as.info,  Node: Global,  Next: Gnu_attribute,  Prev: Func,  Up: Pseudo Ops
   3568 
   3569 7.56 `.global SYMBOL', `.globl SYMBOL'
   3570 ======================================
   3571 
   3572 `.global' makes the symbol visible to `ld'.  If you define SYMBOL in
   3573 your partial program, its value is made available to other partial
   3574 programs that are linked with it.  Otherwise, SYMBOL takes its
   3575 attributes from a symbol of the same name from another file linked into
   3576 the same program.
   3577 
   3578    Both spellings (`.globl' and `.global') are accepted, for
   3579 compatibility with other assemblers.
   3580 
   3581    On the HPPA, `.global' is not always enough to make it accessible to
   3582 other partial programs.  You may need the HPPA-only `.EXPORT' directive
   3583 as well.  *Note HPPA Assembler Directives: HPPA Directives.
   3584 
   3585 
   3586 File: as.info,  Node: Gnu_attribute,  Next: Hidden,  Prev: Global,  Up: Pseudo Ops
   3587 
   3588 7.57 `.gnu_attribute TAG,VALUE'
   3589 ===============================
   3590 
   3591 Record a GNU object attribute for this file.  *Note Object Attributes::.
   3592 
   3593 
   3594 File: as.info,  Node: Hidden,  Next: hword,  Prev: Gnu_attribute,  Up: Pseudo Ops
   3595 
   3596 7.58 `.hidden NAMES'
   3597 ====================
   3598 
   3599 This is one of the ELF visibility directives.  The other two are
   3600 `.internal' (*note `.internal': Internal.) and `.protected' (*note
   3601 `.protected': Protected.).
   3602 
   3603    This directive overrides the named symbols default visibility (which
   3604 is set by their binding: local, global or weak).  The directive sets
   3605 the visibility to `hidden' which means that the symbols are not visible
   3606 to other components.  Such symbols are always considered to be
   3607 `protected' as well.
   3608 
   3609 
   3610 File: as.info,  Node: hword,  Next: Ident,  Prev: Hidden,  Up: Pseudo Ops
   3611 
   3612 7.59 `.hword EXPRESSIONS'
   3613 =========================
   3614 
   3615 This expects zero or more EXPRESSIONS, and emits a 16 bit number for
   3616 each.
   3617 
   3618    This directive is a synonym for `.short'; depending on the target
   3619 architecture, it may also be a synonym for `.word'.
   3620 
   3621 
   3622 File: as.info,  Node: Ident,  Next: If,  Prev: hword,  Up: Pseudo Ops
   3623 
   3624 7.60 `.ident'
   3625 =============
   3626 
   3627 This directive is used by some assemblers to place tags in object
   3628 files.  The behavior of this directive varies depending on the target.
   3629 When using the a.out object file format, `as' simply accepts the
   3630 directive for source-file compatibility with existing assemblers, but
   3631 does not emit anything for it.  When using COFF, comments are emitted
   3632 to the `.comment' or `.rdata' section, depending on the target.  When
   3633 using ELF, comments are emitted to the `.comment' section.
   3634 
   3635 
   3636 File: as.info,  Node: If,  Next: Incbin,  Prev: Ident,  Up: Pseudo Ops
   3637 
   3638 7.61 `.if ABSOLUTE EXPRESSION'
   3639 ==============================
   3640 
   3641 `.if' marks the beginning of a section of code which is only considered
   3642 part of the source program being assembled if the argument (which must
   3643 be an ABSOLUTE EXPRESSION) is non-zero.  The end of the conditional
   3644 section of code must be marked by `.endif' (*note `.endif': Endif.);
   3645 optionally, you may include code for the alternative condition, flagged
   3646 by `.else' (*note `.else': Else.).  If you have several conditions to
   3647 check, `.elseif' may be used to avoid nesting blocks if/else within
   3648 each subsequent `.else' block.
   3649 
   3650    The following variants of `.if' are also supported:
   3651 `.ifdef SYMBOL'
   3652      Assembles the following section of code if the specified SYMBOL
   3653      has been defined.  Note a symbol which has been referenced but not
   3654      yet defined is considered to be undefined.
   3655 
   3656 `.ifb TEXT'
   3657      Assembles the following section of code if the operand is blank
   3658      (empty).
   3659 
   3660 `.ifc STRING1,STRING2'
   3661      Assembles the following section of code if the two strings are the
   3662      same.  The strings may be optionally quoted with single quotes.
   3663      If they are not quoted, the first string stops at the first comma,
   3664      and the second string stops at the end of the line.  Strings which
   3665      contain whitespace should be quoted.  The string comparison is
   3666      case sensitive.
   3667 
   3668 `.ifeq ABSOLUTE EXPRESSION'
   3669      Assembles the following section of code if the argument is zero.
   3670 
   3671 `.ifeqs STRING1,STRING2'
   3672      Another form of `.ifc'.  The strings must be quoted using double
   3673      quotes.
   3674 
   3675 `.ifge ABSOLUTE EXPRESSION'
   3676      Assembles the following section of code if the argument is greater
   3677      than or equal to zero.
   3678 
   3679 `.ifgt ABSOLUTE EXPRESSION'
   3680      Assembles the following section of code if the argument is greater
   3681      than zero.
   3682 
   3683 `.ifle ABSOLUTE EXPRESSION'
   3684      Assembles the following section of code if the argument is less
   3685      than or equal to zero.
   3686 
   3687 `.iflt ABSOLUTE EXPRESSION'
   3688      Assembles the following section of code if the argument is less
   3689      than zero.
   3690 
   3691 `.ifnb TEXT'
   3692      Like `.ifb', but the sense of the test is reversed: this assembles
   3693      the following section of code if the operand is non-blank
   3694      (non-empty).
   3695 
   3696 `.ifnc STRING1,STRING2.'
   3697      Like `.ifc', but the sense of the test is reversed: this assembles
   3698      the following section of code if the two strings are not the same.
   3699 
   3700 `.ifndef SYMBOL'
   3701 `.ifnotdef SYMBOL'
   3702      Assembles the following section of code if the specified SYMBOL
   3703      has not been defined.  Both spelling variants are equivalent.
   3704      Note a symbol which has been referenced but not yet defined is
   3705      considered to be undefined.
   3706 
   3707 `.ifne ABSOLUTE EXPRESSION'
   3708      Assembles the following section of code if the argument is not
   3709      equal to zero (in other words, this is equivalent to `.if').
   3710 
   3711 `.ifnes STRING1,STRING2'
   3712      Like `.ifeqs', but the sense of the test is reversed: this
   3713      assembles the following section of code if the two strings are not
   3714      the same.
   3715 
   3716 
   3717 File: as.info,  Node: Incbin,  Next: Include,  Prev: If,  Up: Pseudo Ops
   3718 
   3719 7.62 `.incbin "FILE"[,SKIP[,COUNT]]'
   3720 ====================================
   3721 
   3722 The `incbin' directive includes FILE verbatim at the current location.
   3723 You can control the search paths used with the `-I' command-line option
   3724 (*note Command-Line Options: Invoking.).  Quotation marks are required
   3725 around FILE.
   3726 
   3727    The SKIP argument skips a number of bytes from the start of the
   3728 FILE.  The COUNT argument indicates the maximum number of bytes to
   3729 read.  Note that the data is not aligned in any way, so it is the user's
   3730 responsibility to make sure that proper alignment is provided both
   3731 before and after the `incbin' directive.
   3732 
   3733 
   3734 File: as.info,  Node: Include,  Next: Int,  Prev: Incbin,  Up: Pseudo Ops
   3735 
   3736 7.63 `.include "FILE"'
   3737 ======================
   3738 
   3739 This directive provides a way to include supporting files at specified
   3740 points in your source program.  The code from FILE is assembled as if
   3741 it followed the point of the `.include'; when the end of the included
   3742 file is reached, assembly of the original file continues.  You can
   3743 control the search paths used with the `-I' command-line option (*note
   3744 Command-Line Options: Invoking.).  Quotation marks are required around
   3745 FILE.
   3746 
   3747 
   3748 File: as.info,  Node: Int,  Next: Internal,  Prev: Include,  Up: Pseudo Ops
   3749 
   3750 7.64 `.int EXPRESSIONS'
   3751 =======================
   3752 
   3753 Expect zero or more EXPRESSIONS, of any section, separated by commas.
   3754 For each expression, emit a number that, at run time, is the value of
   3755 that expression.  The byte order and bit size of the number depends on
   3756 what kind of target the assembly is for.
   3757 
   3758 
   3759 File: as.info,  Node: Internal,  Next: Irp,  Prev: Int,  Up: Pseudo Ops
   3760 
   3761 7.65 `.internal NAMES'
   3762 ======================
   3763 
   3764 This is one of the ELF visibility directives.  The other two are
   3765 `.hidden' (*note `.hidden': Hidden.) and `.protected' (*note
   3766 `.protected': Protected.).
   3767 
   3768    This directive overrides the named symbols default visibility (which
   3769 is set by their binding: local, global or weak).  The directive sets
   3770 the visibility to `internal' which means that the symbols are
   3771 considered to be `hidden' (i.e., not visible to other components), and
   3772 that some extra, processor specific processing must also be performed
   3773 upon the  symbols as well.
   3774 
   3775 
   3776 File: as.info,  Node: Irp,  Next: Irpc,  Prev: Internal,  Up: Pseudo Ops
   3777 
   3778 7.66 `.irp SYMBOL,VALUES'...
   3779 ============================
   3780 
   3781 Evaluate a sequence of statements assigning different values to SYMBOL.
   3782 The sequence of statements starts at the `.irp' directive, and is
   3783 terminated by an `.endr' directive.  For each VALUE, SYMBOL is set to
   3784 VALUE, and the sequence of statements is assembled.  If no VALUE is
   3785 listed, the sequence of statements is assembled once, with SYMBOL set
   3786 to the null string.  To refer to SYMBOL within the sequence of
   3787 statements, use \SYMBOL.
   3788 
   3789    For example, assembling
   3790 
   3791              .irp    param,1,2,3
   3792              move    d\param,sp@-
   3793              .endr
   3794 
   3795    is equivalent to assembling
   3796 
   3797              move    d1,sp@-
   3798              move    d2,sp@-
   3799              move    d3,sp@-
   3800 
   3801    For some caveats with the spelling of SYMBOL, see also *note Macro::.
   3802 
   3803 
   3804 File: as.info,  Node: Irpc,  Next: Lcomm,  Prev: Irp,  Up: Pseudo Ops
   3805 
   3806 7.67 `.irpc SYMBOL,VALUES'...
   3807 =============================
   3808 
   3809 Evaluate a sequence of statements assigning different values to SYMBOL.
   3810 The sequence of statements starts at the `.irpc' directive, and is
   3811 terminated by an `.endr' directive.  For each character in VALUE,
   3812 SYMBOL is set to the character, and the sequence of statements is
   3813 assembled.  If no VALUE is listed, the sequence of statements is
   3814 assembled once, with SYMBOL set to the null string.  To refer to SYMBOL
   3815 within the sequence of statements, use \SYMBOL.
   3816 
   3817    For example, assembling
   3818 
   3819              .irpc    param,123
   3820              move    d\param,sp@-
   3821              .endr
   3822 
   3823    is equivalent to assembling
   3824 
   3825              move    d1,sp@-
   3826              move    d2,sp@-
   3827              move    d3,sp@-
   3828 
   3829    For some caveats with the spelling of SYMBOL, see also the discussion
   3830 at *Note Macro::.
   3831 
   3832 
   3833 File: as.info,  Node: Lcomm,  Next: Lflags,  Prev: Irpc,  Up: Pseudo Ops
   3834 
   3835 7.68 `.lcomm SYMBOL , LENGTH'
   3836 =============================
   3837 
   3838 Reserve LENGTH (an absolute expression) bytes for a local common
   3839 denoted by SYMBOL.  The section and value of SYMBOL are those of the
   3840 new local common.  The addresses are allocated in the bss section, so
   3841 that at run-time the bytes start off zeroed.  SYMBOL is not declared
   3842 global (*note `.global': Global.), so is normally not visible to `ld'.
   3843 
   3844    Some targets permit a third argument to be used with `.lcomm'.  This
   3845 argument specifies the desired alignment of the symbol in the bss
   3846 section.
   3847 
   3848    The syntax for `.lcomm' differs slightly on the HPPA.  The syntax is
   3849 `SYMBOL .lcomm, LENGTH'; SYMBOL is optional.
   3850 
   3851 
   3852 File: as.info,  Node: Lflags,  Next: Line,  Prev: Lcomm,  Up: Pseudo Ops
   3853 
   3854 7.69 `.lflags'
   3855 ==============
   3856 
   3857 `as' accepts this directive, for compatibility with other assemblers,
   3858 but ignores it.
   3859 
   3860 
   3861 File: as.info,  Node: Line,  Next: Linkonce,  Prev: Lflags,  Up: Pseudo Ops
   3862 
   3863 7.70 `.line LINE-NUMBER'
   3864 ========================
   3865 
   3866    Change the logical line number.  LINE-NUMBER must be an absolute
   3867 expression.  The next line has that logical line number.  Therefore any
   3868 other statements on the current line (after a statement separator
   3869 character) are reported as on logical line number LINE-NUMBER - 1.  One
   3870 day `as' will no longer support this directive: it is recognized only
   3871 for compatibility with existing assembler programs.
   3872 
   3873    Even though this is a directive associated with the `a.out' or
   3874 `b.out' object-code formats, `as' still recognizes it when producing
   3875 COFF output, and treats `.line' as though it were the COFF `.ln' _if_
   3876 it is found outside a `.def'/`.endef' pair.
   3877 
   3878    Inside a `.def', `.line' is, instead, one of the directives used by
   3879 compilers to generate auxiliary symbol information for debugging.
   3880 
   3881 
   3882 File: as.info,  Node: Linkonce,  Next: List,  Prev: Line,  Up: Pseudo Ops
   3883 
   3884 7.71 `.linkonce [TYPE]'
   3885 =======================
   3886 
   3887 Mark the current section so that the linker only includes a single copy
   3888 of it.  This may be used to include the same section in several
   3889 different object files, but ensure that the linker will only include it
   3890 once in the final output file.  The `.linkonce' pseudo-op must be used
   3891 for each instance of the section.  Duplicate sections are detected
   3892 based on the section name, so it should be unique.
   3893 
   3894    This directive is only supported by a few object file formats; as of
   3895 this writing, the only object file format which supports it is the
   3896 Portable Executable format used on Windows NT.
   3897 
   3898    The TYPE argument is optional.  If specified, it must be one of the
   3899 following strings.  For example:
   3900      .linkonce same_size
   3901    Not all types may be supported on all object file formats.
   3902 
   3903 `discard'
   3904      Silently discard duplicate sections.  This is the default.
   3905 
   3906 `one_only'
   3907      Warn if there are duplicate sections, but still keep only one copy.
   3908 
   3909 `same_size'
   3910      Warn if any of the duplicates have different sizes.
   3911 
   3912 `same_contents'
   3913      Warn if any of the duplicates do not have exactly the same
   3914      contents.
   3915 
   3916 
   3917 File: as.info,  Node: Ln,  Next: LNS directives,  Prev: List,  Up: Pseudo Ops
   3918 
   3919 7.72 `.ln LINE-NUMBER'
   3920 ======================
   3921 
   3922 `.ln' is a synonym for `.line'.
   3923 
   3924 
   3925 File: as.info,  Node: MRI,  Next: Noaltmacro,  Prev: Macro,  Up: Pseudo Ops
   3926 
   3927 7.73 `.mri VAL'
   3928 ===============
   3929 
   3930 If VAL is non-zero, this tells `as' to enter MRI mode.  If VAL is zero,
   3931 this tells `as' to exit MRI mode.  This change affects code assembled
   3932 until the next `.mri' directive, or until the end of the file.  *Note
   3933 MRI mode: M.
   3934 
   3935 
   3936 File: as.info,  Node: List,  Next: Ln,  Prev: Linkonce,  Up: Pseudo Ops
   3937 
   3938 7.74 `.list'
   3939 ============
   3940 
   3941 Control (in conjunction with the `.nolist' directive) whether or not
   3942 assembly listings are generated.  These two directives maintain an
   3943 internal counter (which is zero initially).   `.list' increments the
   3944 counter, and `.nolist' decrements it.  Assembly listings are generated
   3945 whenever the counter is greater than zero.
   3946 
   3947    By default, listings are disabled.  When you enable them (with the
   3948 `-a' command line option; *note Command-Line Options: Invoking.), the
   3949 initial value of the listing counter is one.
   3950 
   3951 
   3952 File: as.info,  Node: Long,  Next: Macro,  Prev: LNS directives,  Up: Pseudo Ops
   3953 
   3954 7.75 `.long EXPRESSIONS'
   3955 ========================
   3956 
   3957 `.long' is the same as `.int'.  *Note `.int': Int.
   3958 
   3959 
   3960 File: as.info,  Node: Macro,  Next: MRI,  Prev: Long,  Up: Pseudo Ops
   3961 
   3962 7.76 `.macro'
   3963 =============
   3964 
   3965 The commands `.macro' and `.endm' allow you to define macros that
   3966 generate assembly output.  For example, this definition specifies a
   3967 macro `sum' that puts a sequence of numbers into memory:
   3968 
   3969              .macro  sum from=0, to=5
   3970              .long   \from
   3971              .if     \to-\from
   3972              sum     "(\from+1)",\to
   3973              .endif
   3974              .endm
   3975 
   3976 With that definition, `SUM 0,5' is equivalent to this assembly input:
   3977 
   3978              .long   0
   3979              .long   1
   3980              .long   2
   3981              .long   3
   3982              .long   4
   3983              .long   5
   3984 
   3985 `.macro MACNAME'
   3986 `.macro MACNAME MACARGS ...'
   3987      Begin the definition of a macro called MACNAME.  If your macro
   3988      definition requires arguments, specify their names after the macro
   3989      name, separated by commas or spaces.  You can qualify the macro
   3990      argument to indicate whether all invocations must specify a
   3991      non-blank value (through `:`req''), or whether it takes all of the
   3992      remaining arguments (through `:`vararg'').  You can supply a
   3993      default value for any macro argument by following the name with
   3994      `=DEFLT'.  You cannot define two macros with the same MACNAME
   3995      unless it has been subject to the `.purgem' directive (*note
   3996      Purgem::) between the two definitions.  For example, these are all
   3997      valid `.macro' statements:
   3998 
   3999     `.macro comm'
   4000           Begin the definition of a macro called `comm', which takes no
   4001           arguments.
   4002 
   4003     `.macro plus1 p, p1'
   4004     `.macro plus1 p p1'
   4005           Either statement begins the definition of a macro called
   4006           `plus1', which takes two arguments; within the macro
   4007           definition, write `\p' or `\p1' to evaluate the arguments.
   4008 
   4009     `.macro reserve_str p1=0 p2'
   4010           Begin the definition of a macro called `reserve_str', with two
   4011           arguments.  The first argument has a default value, but not
   4012           the second.  After the definition is complete, you can call
   4013           the macro either as `reserve_str A,B' (with `\p1' evaluating
   4014           to A and `\p2' evaluating to B), or as `reserve_str ,B' (with
   4015           `\p1' evaluating as the default, in this case `0', and `\p2'
   4016           evaluating to B).
   4017 
   4018     `.macro m p1:req, p2=0, p3:vararg'
   4019           Begin the definition of a macro called `m', with at least
   4020           three arguments.  The first argument must always have a value
   4021           specified, but not the second, which instead has a default
   4022           value. The third formal will get assigned all remaining
   4023           arguments specified at invocation time.
   4024 
   4025           When you call a macro, you can specify the argument values
   4026           either by position, or by keyword.  For example, `sum 9,17'
   4027           is equivalent to `sum to=17, from=9'.
   4028 
   4029 
   4030      Note that since each of the MACARGS can be an identifier exactly
   4031      as any other one permitted by the target architecture, there may be
   4032      occasional problems if the target hand-crafts special meanings to
   4033      certain characters when they occur in a special position.  For
   4034      example, if the colon (`:') is generally permitted to be part of a
   4035      symbol name, but the architecture specific code special-cases it
   4036      when occurring as the final character of a symbol (to denote a
   4037      label), then the macro parameter replacement code will have no way
   4038      of knowing that and consider the whole construct (including the
   4039      colon) an identifier, and check only this identifier for being the
   4040      subject to parameter substitution.  So for example this macro
   4041      definition:
   4042 
   4043           	.macro label l
   4044           \l:
   4045           	.endm
   4046 
   4047      might not work as expected.  Invoking `label foo' might not create
   4048      a label called `foo' but instead just insert the text `\l:' into
   4049      the assembler source, probably generating an error about an
   4050      unrecognised identifier.
   4051 
   4052      Similarly problems might occur with the period character (`.')
   4053      which is often allowed inside opcode names (and hence identifier
   4054      names).  So for example constructing a macro to build an opcode
   4055      from a base name and a length specifier like this:
   4056 
   4057           	.macro opcode base length
   4058                   \base.\length
   4059           	.endm
   4060 
   4061      and invoking it as `opcode store l' will not create a `store.l'
   4062      instruction but instead generate some kind of error as the
   4063      assembler tries to interpret the text `\base.\length'.
   4064 
   4065      There are several possible ways around this problem:
   4066 
   4067     `Insert white space'
   4068           If it is possible to use white space characters then this is
   4069           the simplest solution.  eg:
   4070 
   4071                	.macro label l
   4072                \l :
   4073                	.endm
   4074 
   4075     `Use `\()''
   4076           The string `\()' can be used to separate the end of a macro
   4077           argument from the following text.  eg:
   4078 
   4079                	.macro opcode base length
   4080                        \base\().\length
   4081                	.endm
   4082 
   4083     `Use the alternate macro syntax mode'
   4084           In the alternative macro syntax mode the ampersand character
   4085           (`&') can be used as a separator.  eg:
   4086 
   4087                	.altmacro
   4088                	.macro label l
   4089                l&:
   4090                	.endm
   4091 
   4092      Note: this problem of correctly identifying string parameters to
   4093      pseudo ops also applies to the identifiers used in `.irp' (*note
   4094      Irp::) and `.irpc' (*note Irpc::) as well.
   4095 
   4096 `.endm'
   4097      Mark the end of a macro definition.
   4098 
   4099 `.exitm'
   4100      Exit early from the current macro definition.
   4101 
   4102 `\@'
   4103      `as' maintains a counter of how many macros it has executed in
   4104      this pseudo-variable; you can copy that number to your output with
   4105      `\@', but _only within a macro definition_.
   4106 
   4107 `LOCAL NAME [ , ... ]'
   4108      _Warning: `LOCAL' is only available if you select "alternate macro
   4109      syntax" with `--alternate' or `.altmacro'._ *Note `.altmacro':
   4110      Altmacro.
   4111 
   4112 
   4113 File: as.info,  Node: Altmacro,  Next: Ascii,  Prev: Align,  Up: Pseudo Ops
   4114 
   4115 7.77 `.altmacro'
   4116 ================
   4117 
   4118 Enable alternate macro mode, enabling:
   4119 
   4120 `LOCAL NAME [ , ... ]'
   4121      One additional directive, `LOCAL', is available.  It is used to
   4122      generate a string replacement for each of the NAME arguments, and
   4123      replace any instances of NAME in each macro expansion.  The
   4124      replacement string is unique in the assembly, and different for
   4125      each separate macro expansion.  `LOCAL' allows you to write macros
   4126      that define symbols, without fear of conflict between separate
   4127      macro expansions.
   4128 
   4129 `String delimiters'
   4130      You can write strings delimited in these other ways besides
   4131      `"STRING"':
   4132 
   4133     `'STRING''
   4134           You can delimit strings with single-quote characters.
   4135 
   4136     `<STRING>'
   4137           You can delimit strings with matching angle brackets.
   4138 
   4139 `single-character string escape'
   4140      To include any single character literally in a string (even if the
   4141      character would otherwise have some special meaning), you can
   4142      prefix the character with `!' (an exclamation mark).  For example,
   4143      you can write `<4.3 !> 5.4!!>' to get the literal text `4.3 >
   4144      5.4!'.
   4145 
   4146 `Expression results as strings'
   4147      You can write `%EXPR' to evaluate the expression EXPR and use the
   4148      result as a string.
   4149 
   4150 
   4151 File: as.info,  Node: Noaltmacro,  Next: Nolist,  Prev: MRI,  Up: Pseudo Ops
   4152 
   4153 7.78 `.noaltmacro'
   4154 ==================
   4155 
   4156 Disable alternate macro mode.  *Note Altmacro::.
   4157 
   4158 
   4159 File: as.info,  Node: Nolist,  Next: Octa,  Prev: Noaltmacro,  Up: Pseudo Ops
   4160 
   4161 7.79 `.nolist'
   4162 ==============
   4163 
   4164 Control (in conjunction with the `.list' directive) whether or not
   4165 assembly listings are generated.  These two directives maintain an
   4166 internal counter (which is zero initially).   `.list' increments the
   4167 counter, and `.nolist' decrements it.  Assembly listings are generated
   4168 whenever the counter is greater than zero.
   4169 
   4170 
   4171 File: as.info,  Node: Octa,  Next: Org,  Prev: Nolist,  Up: Pseudo Ops
   4172 
   4173 7.80 `.octa BIGNUMS'
   4174 ====================
   4175 
   4176 This directive expects zero or more bignums, separated by commas.  For
   4177 each bignum, it emits a 16-byte integer.
   4178 
   4179    The term "octa" comes from contexts in which a "word" is two bytes;
   4180 hence _octa_-word for 16 bytes.
   4181 
   4182 
   4183 File: as.info,  Node: Org,  Next: P2align,  Prev: Octa,  Up: Pseudo Ops
   4184 
   4185 7.81 `.org NEW-LC , FILL'
   4186 =========================
   4187 
   4188 Advance the location counter of the current section to NEW-LC.  NEW-LC
   4189 is either an absolute expression or an expression with the same section
   4190 as the current subsection.  That is, you can't use `.org' to cross
   4191 sections: if NEW-LC has the wrong section, the `.org' directive is
   4192 ignored.  To be compatible with former assemblers, if the section of
   4193 NEW-LC is absolute, `as' issues a warning, then pretends the section of
   4194 NEW-LC is the same as the current subsection.
   4195 
   4196    `.org' may only increase the location counter, or leave it
   4197 unchanged; you cannot use `.org' to move the location counter backwards.
   4198 
   4199    Because `as' tries to assemble programs in one pass, NEW-LC may not
   4200 be undefined.  If you really detest this restriction we eagerly await a
   4201 chance to share your improved assembler.
   4202 
   4203    Beware that the origin is relative to the start of the section, not
   4204 to the start of the subsection.  This is compatible with other people's
   4205 assemblers.
   4206 
   4207    When the location counter (of the current subsection) is advanced,
   4208 the intervening bytes are filled with FILL which should be an absolute
   4209 expression.  If the comma and FILL are omitted, FILL defaults to zero.
   4210 
   4211 
   4212 File: as.info,  Node: P2align,  Next: PopSection,  Prev: Org,  Up: Pseudo Ops
   4213 
   4214 7.82 `.p2align[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR'
   4215 ================================================
   4216 
   4217 Pad the location counter (in the current subsection) to a particular
   4218 storage boundary.  The first expression (which must be absolute) is the
   4219 number of low-order zero bits the location counter must have after
   4220 advancement.  For example `.p2align 3' advances the location counter
   4221 until it a multiple of 8.  If the location counter is already a
   4222 multiple of 8, no change is needed.
   4223 
   4224    The second expression (also absolute) gives the fill value to be
   4225 stored in the padding bytes.  It (and the comma) may be omitted.  If it
   4226 is omitted, the padding bytes are normally zero.  However, on some
   4227 systems, if the section is marked as containing code and the fill value
   4228 is omitted, the space is filled with no-op instructions.
   4229 
   4230    The third expression is also absolute, and is also optional.  If it
   4231 is present, it is the maximum number of bytes that should be skipped by
   4232 this alignment directive.  If doing the alignment would require
   4233 skipping more bytes than the specified maximum, then the alignment is
   4234 not done at all.  You can omit the fill value (the second argument)
   4235 entirely by simply using two commas after the required alignment; this
   4236 can be useful if you want the alignment to be filled with no-op
   4237 instructions when appropriate.
   4238 
   4239    The `.p2alignw' and `.p2alignl' directives are variants of the
   4240 `.p2align' directive.  The `.p2alignw' directive treats the fill
   4241 pattern as a two byte word value.  The `.p2alignl' directives treats the
   4242 fill pattern as a four byte longword value.  For example, `.p2alignw
   4243 2,0x368d' will align to a multiple of 4.  If it skips two bytes, they
   4244 will be filled in with the value 0x368d (the exact placement of the
   4245 bytes depends upon the endianness of the processor).  If it skips 1 or
   4246 3 bytes, the fill value is undefined.
   4247 
   4248 
   4249 File: as.info,  Node: Previous,  Next: Print,  Prev: PopSection,  Up: Pseudo Ops
   4250 
   4251 7.83 `.previous'
   4252 ================
   4253 
   4254 This is one of the ELF section stack manipulation directives.  The
   4255 others are `.section' (*note Section::), `.subsection' (*note
   4256 SubSection::), `.pushsection' (*note PushSection::), and `.popsection'
   4257 (*note PopSection::).
   4258 
   4259    This directive swaps the current section (and subsection) with most
   4260 recently referenced section/subsection pair prior to this one.  Multiple
   4261 `.previous' directives in a row will flip between two sections (and
   4262 their subsections).  For example:
   4263 
   4264      .section A
   4265       .subsection 1
   4266        .word 0x1234
   4267       .subsection 2
   4268        .word 0x5678
   4269      .previous
   4270       .word 0x9abc
   4271 
   4272    Will place 0x1234 and 0x9abc into subsection 1 and 0x5678 into
   4273 subsection 2 of section A.  Whilst:
   4274 
   4275      .section A
   4276      .subsection 1
   4277        # Now in section A subsection 1
   4278        .word 0x1234
   4279      .section B
   4280      .subsection 0
   4281        # Now in section B subsection 0
   4282        .word 0x5678
   4283      .subsection 1
   4284        # Now in section B subsection 1
   4285        .word 0x9abc
   4286      .previous
   4287        # Now in section B subsection 0
   4288        .word 0xdef0
   4289 
   4290    Will place 0x1234 into section A, 0x5678 and 0xdef0 into subsection
   4291 0 of section B and 0x9abc into subsection 1 of section B.
   4292 
   4293    In terms of the section stack, this directive swaps the current
   4294 section with the top section on the section stack.
   4295 
   4296 
   4297 File: as.info,  Node: PopSection,  Next: Previous,  Prev: P2align,  Up: Pseudo Ops
   4298 
   4299 7.84 `.popsection'
   4300 ==================
   4301 
   4302 This is one of the ELF section stack manipulation directives.  The
   4303 others are `.section' (*note Section::), `.subsection' (*note
   4304 SubSection::), `.pushsection' (*note PushSection::), and `.previous'
   4305 (*note Previous::).
   4306 
   4307    This directive replaces the current section (and subsection) with
   4308 the top section (and subsection) on the section stack.  This section is
   4309 popped off the stack.
   4310 
   4311 
   4312 File: as.info,  Node: Print,  Next: Protected,  Prev: Previous,  Up: Pseudo Ops
   4313 
   4314 7.85 `.print STRING'
   4315 ====================
   4316 
   4317 `as' will print STRING on the standard output during assembly.  You
   4318 must put STRING in double quotes.
   4319 
   4320 
   4321 File: as.info,  Node: Protected,  Next: Psize,  Prev: Print,  Up: Pseudo Ops
   4322 
   4323 7.86 `.protected NAMES'
   4324 =======================
   4325 
   4326 This is one of the ELF visibility directives.  The other two are
   4327 `.hidden' (*note Hidden::) and `.internal' (*note Internal::).
   4328 
   4329    This directive overrides the named symbols default visibility (which
   4330 is set by their binding: local, global or weak).  The directive sets
   4331 the visibility to `protected' which means that any references to the
   4332 symbols from within the components that defines them must be resolved
   4333 to the definition in that component, even if a definition in another
   4334 component would normally preempt this.
   4335 
   4336 
   4337 File: as.info,  Node: Psize,  Next: Purgem,  Prev: Protected,  Up: Pseudo Ops
   4338 
   4339 7.87 `.psize LINES , COLUMNS'
   4340 =============================
   4341 
   4342 Use this directive to declare the number of lines--and, optionally, the
   4343 number of columns--to use for each page, when generating listings.
   4344 
   4345    If you do not use `.psize', listings use a default line-count of 60.
   4346 You may omit the comma and COLUMNS specification; the default width is
   4347 200 columns.
   4348 
   4349    `as' generates formfeeds whenever the specified number of lines is
   4350 exceeded (or whenever you explicitly request one, using `.eject').
   4351 
   4352    If you specify LINES as `0', no formfeeds are generated save those
   4353 explicitly specified with `.eject'.
   4354 
   4355 
   4356 File: as.info,  Node: Purgem,  Next: PushSection,  Prev: Psize,  Up: Pseudo Ops
   4357 
   4358 7.88 `.purgem NAME'
   4359 ===================
   4360 
   4361 Undefine the macro NAME, so that later uses of the string will not be
   4362 expanded.  *Note Macro::.
   4363 
   4364 
   4365 File: as.info,  Node: PushSection,  Next: Quad,  Prev: Purgem,  Up: Pseudo Ops
   4366 
   4367 7.89 `.pushsection NAME [, SUBSECTION] [, "FLAGS"[, @TYPE[,ARGUMENTS]]]'
   4368 ========================================================================
   4369 
   4370 This is one of the ELF section stack manipulation directives.  The
   4371 others are `.section' (*note Section::), `.subsection' (*note
   4372 SubSection::), `.popsection' (*note PopSection::), and `.previous'
   4373 (*note Previous::).
   4374 
   4375    This directive pushes the current section (and subsection) onto the
   4376 top of the section stack, and then replaces the current section and
   4377 subsection with `name' and `subsection'. The optional `flags', `type'
   4378 and `arguments' are treated the same as in the `.section' (*note
   4379 Section::) directive.
   4380 
   4381 
   4382 File: as.info,  Node: Quad,  Next: Reloc,  Prev: PushSection,  Up: Pseudo Ops
   4383 
   4384 7.90 `.quad BIGNUMS'
   4385 ====================
   4386 
   4387 `.quad' expects zero or more bignums, separated by commas.  For each
   4388 bignum, it emits an 8-byte integer.  If the bignum won't fit in 8
   4389 bytes, it prints a warning message; and just takes the lowest order 8
   4390 bytes of the bignum.  
   4391 
   4392    The term "quad" comes from contexts in which a "word" is two bytes;
   4393 hence _quad_-word for 8 bytes.
   4394 
   4395 
   4396 File: as.info,  Node: Reloc,  Next: Rept,  Prev: Quad,  Up: Pseudo Ops
   4397 
   4398 7.91 `.reloc OFFSET, RELOC_NAME[, EXPRESSION]'
   4399 ==============================================
   4400 
   4401 Generate a relocation at OFFSET of type RELOC_NAME with value
   4402 EXPRESSION.  If OFFSET is a number, the relocation is generated in the
   4403 current section.  If OFFSET is an expression that resolves to a symbol
   4404 plus offset, the relocation is generated in the given symbol's section.
   4405 EXPRESSION, if present, must resolve to a symbol plus addend or to an
   4406 absolute value, but note that not all targets support an addend.  e.g.
   4407 ELF REL targets such as i386 store an addend in the section contents
   4408 rather than in the relocation.  This low level interface does not
   4409 support addends stored in the section.
   4410 
   4411 
   4412 File: as.info,  Node: Rept,  Next: Sbttl,  Prev: Reloc,  Up: Pseudo Ops
   4413 
   4414 7.92 `.rept COUNT'
   4415 ==================
   4416 
   4417 Repeat the sequence of lines between the `.rept' directive and the next
   4418 `.endr' directive COUNT times.
   4419 
   4420    For example, assembling
   4421 
   4422              .rept   3
   4423              .long   0
   4424              .endr
   4425 
   4426    is equivalent to assembling
   4427 
   4428              .long   0
   4429              .long   0
   4430              .long   0
   4431 
   4432 
   4433 File: as.info,  Node: Sbttl,  Next: Scl,  Prev: Rept,  Up: Pseudo Ops
   4434 
   4435 7.93 `.sbttl "SUBHEADING"'
   4436 ==========================
   4437 
   4438 Use SUBHEADING as the title (third line, immediately after the title
   4439 line) when generating assembly listings.
   4440 
   4441    This directive affects subsequent pages, as well as the current page
   4442 if it appears within ten lines of the top of a page.
   4443 
   4444 
   4445 File: as.info,  Node: Scl,  Next: Section,  Prev: Sbttl,  Up: Pseudo Ops
   4446 
   4447 7.94 `.scl CLASS'
   4448 =================
   4449 
   4450 Set the storage-class value for a symbol.  This directive may only be
   4451 used inside a `.def'/`.endef' pair.  Storage class may flag whether a
   4452 symbol is static or external, or it may record further symbolic
   4453 debugging information.
   4454 
   4455 
   4456 File: as.info,  Node: Section,  Next: Set,  Prev: Scl,  Up: Pseudo Ops
   4457 
   4458 7.95 `.section NAME'
   4459 ====================
   4460 
   4461 Use the `.section' directive to assemble the following code into a
   4462 section named NAME.
   4463 
   4464    This directive is only supported for targets that actually support
   4465 arbitrarily named sections; on `a.out' targets, for example, it is not
   4466 accepted, even with a standard `a.out' section name.
   4467 
   4468 COFF Version
   4469 ------------
   4470 
   4471    For COFF targets, the `.section' directive is used in one of the
   4472 following ways:
   4473 
   4474      .section NAME[, "FLAGS"]
   4475      .section NAME[, SUBSECTION]
   4476 
   4477    If the optional argument is quoted, it is taken as flags to use for
   4478 the section.  Each flag is a single character.  The following flags are
   4479 recognized:
   4480 `b'
   4481      bss section (uninitialized data)
   4482 
   4483 `n'
   4484      section is not loaded
   4485 
   4486 `w'
   4487      writable section
   4488 
   4489 `d'
   4490      data section
   4491 
   4492 `r'
   4493      read-only section
   4494 
   4495 `x'
   4496      executable section
   4497 
   4498 `s'
   4499      shared section (meaningful for PE targets)
   4500 
   4501 `a'
   4502      ignored.  (For compatibility with the ELF version)
   4503 
   4504    If no flags are specified, the default flags depend upon the section
   4505 name.  If the section name is not recognized, the default will be for
   4506 the section to be loaded and writable.  Note the `n' and `w' flags
   4507 remove attributes from the section, rather than adding them, so if they
   4508 are used on their own it will be as if no flags had been specified at
   4509 all.
   4510 
   4511    If the optional argument to the `.section' directive is not quoted,
   4512 it is taken as a subsection number (*note Sub-Sections::).
   4513 
   4514 ELF Version
   4515 -----------
   4516 
   4517    This is one of the ELF section stack manipulation directives.  The
   4518 others are `.subsection' (*note SubSection::), `.pushsection' (*note
   4519 PushSection::), `.popsection' (*note PopSection::), and `.previous'
   4520 (*note Previous::).
   4521 
   4522    For ELF targets, the `.section' directive is used like this:
   4523 
   4524      .section NAME [, "FLAGS"[, @TYPE[,FLAG_SPECIFIC_ARGUMENTS]]]
   4525 
   4526    The optional FLAGS argument is a quoted string which may contain any
   4527 combination of the following characters:
   4528 `a'
   4529      section is allocatable
   4530 
   4531 `w'
   4532      section is writable
   4533 
   4534 `x'
   4535      section is executable
   4536 
   4537 `M'
   4538      section is mergeable
   4539 
   4540 `S'
   4541      section contains zero terminated strings
   4542 
   4543 `G'
   4544      section is a member of a section group
   4545 
   4546 `T'
   4547      section is used for thread-local-storage
   4548 
   4549    The optional TYPE argument may contain one of the following
   4550 constants:
   4551 `@progbits'
   4552      section contains data
   4553 
   4554 `@nobits'
   4555      section does not contain data (i.e., section only occupies space)
   4556 
   4557 `@note'
   4558      section contains data which is used by things other than the
   4559      program
   4560 
   4561 `@init_array'
   4562      section contains an array of pointers to init functions
   4563 
   4564 `@fini_array'
   4565      section contains an array of pointers to finish functions
   4566 
   4567 `@preinit_array'
   4568      section contains an array of pointers to pre-init functions
   4569 
   4570    Many targets only support the first three section types.
   4571 
   4572    Note on targets where the `@' character is the start of a comment (eg
   4573 ARM) then another character is used instead.  For example the ARM port
   4574 uses the `%' character.
   4575 
   4576    If FLAGS contains the `M' symbol then the TYPE argument must be
   4577 specified as well as an extra argument--ENTSIZE--like this:
   4578 
   4579      .section NAME , "FLAGS"M, @TYPE, ENTSIZE
   4580 
   4581    Sections with the `M' flag but not `S' flag must contain fixed size
   4582 constants, each ENTSIZE octets long. Sections with both `M' and `S'
   4583 must contain zero terminated strings where each character is ENTSIZE
   4584 bytes long. The linker may remove duplicates within sections with the
   4585 same name, same entity size and same flags.  ENTSIZE must be an
   4586 absolute expression.
   4587 
   4588    If FLAGS contains the `G' symbol then the TYPE argument must be
   4589 present along with an additional field like this:
   4590 
   4591      .section NAME , "FLAGS"G, @TYPE, GROUPNAME[, LINKAGE]
   4592 
   4593    The GROUPNAME field specifies the name of the section group to which
   4594 this particular section belongs.  The optional linkage field can
   4595 contain:
   4596 `comdat'
   4597      indicates that only one copy of this section should be retained
   4598 
   4599 `.gnu.linkonce'
   4600      an alias for comdat
   4601 
   4602    Note: if both the M and G flags are present then the fields for the
   4603 Merge flag should come first, like this:
   4604 
   4605      .section NAME , "FLAGS"MG, @TYPE, ENTSIZE, GROUPNAME[, LINKAGE]
   4606 
   4607    If no flags are specified, the default flags depend upon the section
   4608 name.  If the section name is not recognized, the default will be for
   4609 the section to have none of the above flags: it will not be allocated
   4610 in memory, nor writable, nor executable.  The section will contain data.
   4611 
   4612    For ELF targets, the assembler supports another type of `.section'
   4613 directive for compatibility with the Solaris assembler:
   4614 
   4615      .section "NAME"[, FLAGS...]
   4616 
   4617    Note that the section name is quoted.  There may be a sequence of
   4618 comma separated flags:
   4619 `#alloc'
   4620      section is allocatable
   4621 
   4622 `#write'
   4623      section is writable
   4624 
   4625 `#execinstr'
   4626      section is executable
   4627 
   4628 `#tls'
   4629      section is used for thread local storage
   4630 
   4631    This directive replaces the current section and subsection.  See the
   4632 contents of the gas testsuite directory `gas/testsuite/gas/elf' for
   4633 some examples of how this directive and the other section stack
   4634 directives work.
   4635 
   4636 
   4637 File: as.info,  Node: Set,  Next: Short,  Prev: Section,  Up: Pseudo Ops
   4638 
   4639 7.96 `.set SYMBOL, EXPRESSION'
   4640 ==============================
   4641 
   4642 Set the value of SYMBOL to EXPRESSION.  This changes SYMBOL's value and
   4643 type to conform to EXPRESSION.  If SYMBOL was flagged as external, it
   4644 remains flagged (*note Symbol Attributes::).
   4645 
   4646    You may `.set' a symbol many times in the same assembly.
   4647 
   4648    If you `.set' a global symbol, the value stored in the object file
   4649 is the last value stored into it.
   4650 
   4651    The syntax for `set' on the HPPA is `SYMBOL .set EXPRESSION'.
   4652 
   4653    On Z80 `set' is a real instruction, use `SYMBOL defl EXPRESSION'
   4654 instead.
   4655 
   4656 
   4657 File: as.info,  Node: Short,  Next: Single,  Prev: Set,  Up: Pseudo Ops
   4658 
   4659 7.97 `.short EXPRESSIONS'
   4660 =========================
   4661 
   4662 `.short' is normally the same as `.word'.  *Note `.word': Word.
   4663 
   4664    In some configurations, however, `.short' and `.word' generate
   4665 numbers of different lengths.  *Note Machine Dependencies::.
   4666 
   4667 
   4668 File: as.info,  Node: Single,  Next: Size,  Prev: Short,  Up: Pseudo Ops
   4669 
   4670 7.98 `.single FLONUMS'
   4671 ======================
   4672 
   4673 This directive assembles zero or more flonums, separated by commas.  It
   4674 has the same effect as `.float'.  The exact kind of floating point
   4675 numbers emitted depends on how `as' is configured.  *Note Machine
   4676 Dependencies::.
   4677 
   4678 
   4679 File: as.info,  Node: Size,  Next: Skip,  Prev: Single,  Up: Pseudo Ops
   4680 
   4681 7.99 `.size'
   4682 ============
   4683 
   4684 This directive is used to set the size associated with a symbol.
   4685 
   4686 COFF Version
   4687 ------------
   4688 
   4689    For COFF targets, the `.size' directive is only permitted inside
   4690 `.def'/`.endef' pairs.  It is used like this:
   4691 
   4692      .size EXPRESSION
   4693 
   4694 ELF Version
   4695 -----------
   4696 
   4697    For ELF targets, the `.size' directive is used like this:
   4698 
   4699      .size NAME , EXPRESSION
   4700 
   4701    This directive sets the size associated with a symbol NAME.  The
   4702 size in bytes is computed from EXPRESSION which can make use of label
   4703 arithmetic.  This directive is typically used to set the size of
   4704 function symbols.
   4705 
   4706 
   4707 File: as.info,  Node: Sleb128,  Next: Space,  Prev: Skip,  Up: Pseudo Ops
   4708 
   4709 7.100 `.sleb128 EXPRESSIONS'
   4710 ============================
   4711 
   4712 SLEB128 stands for "signed little endian base 128."  This is a compact,
   4713 variable length representation of numbers used by the DWARF symbolic
   4714 debugging format.  *Note `.uleb128': Uleb128.
   4715 
   4716 
   4717 File: as.info,  Node: Skip,  Next: Sleb128,  Prev: Size,  Up: Pseudo Ops
   4718 
   4719 7.101 `.skip SIZE , FILL'
   4720 =========================
   4721 
   4722 This directive emits SIZE bytes, each of value FILL.  Both SIZE and
   4723 FILL are absolute expressions.  If the comma and FILL are omitted, FILL
   4724 is assumed to be zero.  This is the same as `.space'.
   4725 
   4726 
   4727 File: as.info,  Node: Space,  Next: Stab,  Prev: Sleb128,  Up: Pseudo Ops
   4728 
   4729 7.102 `.space SIZE , FILL'
   4730 ==========================
   4731 
   4732 This directive emits SIZE bytes, each of value FILL.  Both SIZE and
   4733 FILL are absolute expressions.  If the comma and FILL are omitted, FILL
   4734 is assumed to be zero.  This is the same as `.skip'.
   4735 
   4736      _Warning:_ `.space' has a completely different meaning for HPPA
   4737      targets; use `.block' as a substitute.  See `HP9000 Series 800
   4738      Assembly Language Reference Manual' (HP 92432-90001) for the
   4739      meaning of the `.space' directive.  *Note HPPA Assembler
   4740      Directives: HPPA Directives, for a summary.
   4741 
   4742 
   4743 File: as.info,  Node: Stab,  Next: String,  Prev: Space,  Up: Pseudo Ops
   4744 
   4745 7.103 `.stabd, .stabn, .stabs'
   4746 ==============================
   4747 
   4748 There are three directives that begin `.stab'.  All emit symbols (*note
   4749 Symbols::), for use by symbolic debuggers.  The symbols are not entered
   4750 in the `as' hash table: they cannot be referenced elsewhere in the
   4751 source file.  Up to five fields are required:
   4752 
   4753 STRING
   4754      This is the symbol's name.  It may contain any character except
   4755      `\000', so is more general than ordinary symbol names.  Some
   4756      debuggers used to code arbitrarily complex structures into symbol
   4757      names using this field.
   4758 
   4759 TYPE
   4760      An absolute expression.  The symbol's type is set to the low 8
   4761      bits of this expression.  Any bit pattern is permitted, but `ld'
   4762      and debuggers choke on silly bit patterns.
   4763 
   4764 OTHER
   4765      An absolute expression.  The symbol's "other" attribute is set to
   4766      the low 8 bits of this expression.
   4767 
   4768 DESC
   4769      An absolute expression.  The symbol's descriptor is set to the low
   4770      16 bits of this expression.
   4771 
   4772 VALUE
   4773      An absolute expression which becomes the symbol's value.
   4774 
   4775    If a warning is detected while reading a `.stabd', `.stabn', or
   4776 `.stabs' statement, the symbol has probably already been created; you
   4777 get a half-formed symbol in your object file.  This is compatible with
   4778 earlier assemblers!
   4779 
   4780 `.stabd TYPE , OTHER , DESC'
   4781      The "name" of the symbol generated is not even an empty string.
   4782      It is a null pointer, for compatibility.  Older assemblers used a
   4783      null pointer so they didn't waste space in object files with empty
   4784      strings.
   4785 
   4786      The symbol's value is set to the location counter, relocatably.
   4787      When your program is linked, the value of this symbol is the
   4788      address of the location counter when the `.stabd' was assembled.
   4789 
   4790 `.stabn TYPE , OTHER , DESC , VALUE'
   4791      The name of the symbol is set to the empty string `""'.
   4792 
   4793 `.stabs STRING ,  TYPE , OTHER , DESC , VALUE'
   4794      All five fields are specified.
   4795 
   4796 
   4797 File: as.info,  Node: String,  Next: Struct,  Prev: Stab,  Up: Pseudo Ops
   4798 
   4799 7.104 `.string' "STR", `.string8' "STR", `.string16'
   4800 ====================================================
   4801 
   4802 "STR", `.string32' "STR", `.string64' "STR"
   4803 
   4804    Copy the characters in STR to the object file.  You may specify more
   4805 than one string to copy, separated by commas.  Unless otherwise
   4806 specified for a particular machine, the assembler marks the end of each
   4807 string with a 0 byte.  You can use any of the escape sequences
   4808 described in *note Strings: Strings.
   4809 
   4810    The variants `string16', `string32' and `string64' differ from the
   4811 `string' pseudo opcode in that each 8-bit character from STR is copied
   4812 and expanded to 16, 32 or 64 bits respectively.  The expanded characters
   4813 are stored in target endianness byte order.
   4814 
   4815    Example:
   4816      	.string32 "BYE"
   4817      expands to:
   4818      	.string   "B\0\0\0Y\0\0\0E\0\0\0"  /* On little endian targets.  */
   4819      	.string   "\0\0\0B\0\0\0Y\0\0\0E"  /* On big endian targets.  */
   4820 
   4821 
   4822 File: as.info,  Node: Struct,  Next: SubSection,  Prev: String,  Up: Pseudo Ops
   4823 
   4824 7.105 `.struct EXPRESSION'
   4825 ==========================
   4826 
   4827 Switch to the absolute section, and set the section offset to
   4828 EXPRESSION, which must be an absolute expression.  You might use this
   4829 as follows:
   4830              .struct 0
   4831      field1:
   4832              .struct field1 + 4
   4833      field2:
   4834              .struct field2 + 4
   4835      field3:
   4836    This would define the symbol `field1' to have the value 0, the symbol
   4837 `field2' to have the value 4, and the symbol `field3' to have the value
   4838 8.  Assembly would be left in the absolute section, and you would need
   4839 to use a `.section' directive of some sort to change to some other
   4840 section before further assembly.
   4841 
   4842 
   4843 File: as.info,  Node: SubSection,  Next: Symver,  Prev: Struct,  Up: Pseudo Ops
   4844 
   4845 7.106 `.subsection NAME'
   4846 ========================
   4847 
   4848 This is one of the ELF section stack manipulation directives.  The
   4849 others are `.section' (*note Section::), `.pushsection' (*note
   4850 PushSection::), `.popsection' (*note PopSection::), and `.previous'
   4851 (*note Previous::).
   4852 
   4853    This directive replaces the current subsection with `name'.  The
   4854 current section is not changed.  The replaced subsection is put onto
   4855 the section stack in place of the then current top of stack subsection.
   4856 
   4857 
   4858 File: as.info,  Node: Symver,  Next: Tag,  Prev: SubSection,  Up: Pseudo Ops
   4859 
   4860 7.107 `.symver'
   4861 ===============
   4862 
   4863 Use the `.symver' directive to bind symbols to specific version nodes
   4864 within a source file.  This is only supported on ELF platforms, and is
   4865 typically used when assembling files to be linked into a shared library.
   4866 There are cases where it may make sense to use this in objects to be
   4867 bound into an application itself so as to override a versioned symbol
   4868 from a shared library.
   4869 
   4870    For ELF targets, the `.symver' directive can be used like this:
   4871      .symver NAME, NAME2@NODENAME
   4872    If the symbol NAME is defined within the file being assembled, the
   4873 `.symver' directive effectively creates a symbol alias with the name
   4874 NAME2@NODENAME, and in fact the main reason that we just don't try and
   4875 create a regular alias is that the @ character isn't permitted in
   4876 symbol names.  The NAME2 part of the name is the actual name of the
   4877 symbol by which it will be externally referenced.  The name NAME itself
   4878 is merely a name of convenience that is used so that it is possible to
   4879 have definitions for multiple versions of a function within a single
   4880 source file, and so that the compiler can unambiguously know which
   4881 version of a function is being mentioned.  The NODENAME portion of the
   4882 alias should be the name of a node specified in the version script
   4883 supplied to the linker when building a shared library.  If you are
   4884 attempting to override a versioned symbol from a shared library, then
   4885 NODENAME should correspond to the nodename of the symbol you are trying
   4886 to override.
   4887 
   4888    If the symbol NAME is not defined within the file being assembled,
   4889 all references to NAME will be changed to NAME2@NODENAME.  If no
   4890 reference to NAME is made, NAME2@NODENAME will be removed from the
   4891 symbol table.
   4892 
   4893    Another usage of the `.symver' directive is:
   4894      .symver NAME, NAME2@@NODENAME
   4895    In this case, the symbol NAME must exist and be defined within the
   4896 file being assembled. It is similar to NAME2@NODENAME. The difference
   4897 is NAME2@@NODENAME will also be used to resolve references to NAME2 by
   4898 the linker.
   4899 
   4900    The third usage of the `.symver' directive is:
   4901      .symver NAME, NAME2@@@NODENAME
   4902    When NAME is not defined within the file being assembled, it is
   4903 treated as NAME2@NODENAME. When NAME is defined within the file being
   4904 assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME.
   4905 
   4906 
   4907 File: as.info,  Node: Tag,  Next: Text,  Prev: Symver,  Up: Pseudo Ops
   4908 
   4909 7.108 `.tag STRUCTNAME'
   4910 =======================
   4911 
   4912 This directive is generated by compilers to include auxiliary debugging
   4913 information in the symbol table.  It is only permitted inside
   4914 `.def'/`.endef' pairs.  Tags are used to link structure definitions in
   4915 the symbol table with instances of those structures.
   4916 
   4917 
   4918 File: as.info,  Node: Text,  Next: Title,  Prev: Tag,  Up: Pseudo Ops
   4919 
   4920 7.109 `.text SUBSECTION'
   4921 ========================
   4922 
   4923 Tells `as' to assemble the following statements onto the end of the
   4924 text subsection numbered SUBSECTION, which is an absolute expression.
   4925 If SUBSECTION is omitted, subsection number zero is used.
   4926 
   4927 
   4928 File: as.info,  Node: Title,  Next: Type,  Prev: Text,  Up: Pseudo Ops
   4929 
   4930 7.110 `.title "HEADING"'
   4931 ========================
   4932 
   4933 Use HEADING as the title (second line, immediately after the source
   4934 file name and pagenumber) when generating assembly listings.
   4935 
   4936    This directive affects subsequent pages, as well as the current page
   4937 if it appears within ten lines of the top of a page.
   4938 
   4939 
   4940 File: as.info,  Node: Type,  Next: Uleb128,  Prev: Title,  Up: Pseudo Ops
   4941 
   4942 7.111 `.type'
   4943 =============
   4944 
   4945 This directive is used to set the type of a symbol.
   4946 
   4947 COFF Version
   4948 ------------
   4949 
   4950    For COFF targets, this directive is permitted only within
   4951 `.def'/`.endef' pairs.  It is used like this:
   4952 
   4953      .type INT
   4954 
   4955    This records the integer INT as the type attribute of a symbol table
   4956 entry.
   4957 
   4958 ELF Version
   4959 -----------
   4960 
   4961    For ELF targets, the `.type' directive is used like this:
   4962 
   4963      .type NAME , TYPE DESCRIPTION
   4964 
   4965    This sets the type of symbol NAME to be either a function symbol or
   4966 an object symbol.  There are five different syntaxes supported for the
   4967 TYPE DESCRIPTION field, in order to provide compatibility with various
   4968 other assemblers.
   4969 
   4970    Because some of the characters used in these syntaxes (such as `@'
   4971 and `#') are comment characters for some architectures, some of the
   4972 syntaxes below do not work on all architectures.  The first variant
   4973 will be accepted by the GNU assembler on all architectures so that
   4974 variant should be used for maximum portability, if you do not need to
   4975 assemble your code with other assemblers.
   4976 
   4977    The syntaxes supported are:
   4978 
   4979        .type <name> STT_<TYPE_IN_UPPER_CASE>
   4980        .type <name>,#<type>
   4981        .type <name>,@<type>
   4982        .type <name>,%>type>
   4983        .type <name>,"<type>"
   4984 
   4985    The types supported are:
   4986 
   4987 `STT_FUNC'
   4988 `function'
   4989      Mark the symbol as being a function name.
   4990 
   4991 `STT_OBJECT'
   4992 `object'
   4993      Mark the symbol as being a data object.
   4994 
   4995 `STT_TLS'
   4996 `tls_object'
   4997      Mark the symbol as being a thead-local data object.
   4998 
   4999 `STT_COMMON'
   5000 `common'
   5001      Mark the symbol as being a common data object.
   5002 
   5003    Note: Some targets support extra types in addition to those listed
   5004 above.
   5005 
   5006 
   5007 File: as.info,  Node: Uleb128,  Next: Val,  Prev: Type,  Up: Pseudo Ops
   5008 
   5009 7.112 `.uleb128 EXPRESSIONS'
   5010 ============================
   5011 
   5012 ULEB128 stands for "unsigned little endian base 128."  This is a
   5013 compact, variable length representation of numbers used by the DWARF
   5014 symbolic debugging format.  *Note `.sleb128': Sleb128.
   5015 
   5016 
   5017 File: as.info,  Node: Val,  Next: Version,  Prev: Uleb128,  Up: Pseudo Ops
   5018 
   5019 7.113 `.val ADDR'
   5020 =================
   5021 
   5022 This directive, permitted only within `.def'/`.endef' pairs, records
   5023 the address ADDR as the value attribute of a symbol table entry.
   5024 
   5025 
   5026 File: as.info,  Node: Version,  Next: VTableEntry,  Prev: Val,  Up: Pseudo Ops
   5027 
   5028 7.114 `.version "STRING"'
   5029 =========================
   5030 
   5031 This directive creates a `.note' section and places into it an ELF
   5032 formatted note of type NT_VERSION.  The note's name is set to `string'.
   5033 
   5034 
   5035 File: as.info,  Node: VTableEntry,  Next: VTableInherit,  Prev: Version,  Up: Pseudo Ops
   5036 
   5037 7.115 `.vtable_entry TABLE, OFFSET'
   5038 ===================================
   5039 
   5040 This directive finds or creates a symbol `table' and creates a
   5041 `VTABLE_ENTRY' relocation for it with an addend of `offset'.
   5042 
   5043 
   5044 File: as.info,  Node: VTableInherit,  Next: Warning,  Prev: VTableEntry,  Up: Pseudo Ops
   5045 
   5046 7.116 `.vtable_inherit CHILD, PARENT'
   5047 =====================================
   5048 
   5049 This directive finds the symbol `child' and finds or creates the symbol
   5050 `parent' and then creates a `VTABLE_INHERIT' relocation for the parent
   5051 whose addend is the value of the child symbol.  As a special case the
   5052 parent name of `0' is treated as referring to the `*ABS*' section.
   5053 
   5054 
   5055 File: as.info,  Node: Warning,  Next: Weak,  Prev: VTableInherit,  Up: Pseudo Ops
   5056 
   5057 7.117 `.warning "STRING"'
   5058 =========================
   5059 
   5060 Similar to the directive `.error' (*note `.error "STRING"': Error.),
   5061 but just emits a warning.
   5062 
   5063 
   5064 File: as.info,  Node: Weak,  Next: Weakref,  Prev: Warning,  Up: Pseudo Ops
   5065 
   5066 7.118 `.weak NAMES'
   5067 ===================
   5068 
   5069 This directive sets the weak attribute on the comma separated list of
   5070 symbol `names'.  If the symbols do not already exist, they will be
   5071 created.
   5072 
   5073    On COFF targets other than PE, weak symbols are a GNU extension.
   5074 This directive sets the weak attribute on the comma separated list of
   5075 symbol `names'.  If the symbols do not already exist, they will be
   5076 created.
   5077 
   5078    On the PE target, weak symbols are supported natively as weak
   5079 aliases.  When a weak symbol is created that is not an alias, GAS
   5080 creates an alternate symbol to hold the default value.
   5081 
   5082 
   5083 File: as.info,  Node: Weakref,  Next: Word,  Prev: Weak,  Up: Pseudo Ops
   5084 
   5085 7.119 `.weakref ALIAS, TARGET'
   5086 ==============================
   5087 
   5088 This directive creates an alias to the target symbol that enables the
   5089 symbol to be referenced with weak-symbol semantics, but without
   5090 actually making it weak.  If direct references or definitions of the
   5091 symbol are present, then the symbol will not be weak, but if all
   5092 references to it are through weak references, the symbol will be marked
   5093 as weak in the symbol table.
   5094 
   5095    The effect is equivalent to moving all references to the alias to a
   5096 separate assembly source file, renaming the alias to the symbol in it,
   5097 declaring the symbol as weak there, and running a reloadable link to
   5098 merge the object files resulting from the assembly of the new source
   5099 file and the old source file that had the references to the alias
   5100 removed.
   5101 
   5102    The alias itself never makes to the symbol table, and is entirely
   5103 handled within the assembler.
   5104 
   5105 
   5106 File: as.info,  Node: Word,  Next: Deprecated,  Prev: Weakref,  Up: Pseudo Ops
   5107 
   5108 7.120 `.word EXPRESSIONS'
   5109 =========================
   5110 
   5111 This directive expects zero or more EXPRESSIONS, of any section,
   5112 separated by commas.
   5113 
   5114    The size of the number emitted, and its byte order, depend on what
   5115 target computer the assembly is for.
   5116 
   5117      _Warning: Special Treatment to support Compilers_
   5118 
   5119    Machines with a 32-bit address space, but that do less than 32-bit
   5120 addressing, require the following special treatment.  If the machine of
   5121 interest to you does 32-bit addressing (or doesn't require it; *note
   5122 Machine Dependencies::), you can ignore this issue.
   5123 
   5124    In order to assemble compiler output into something that works, `as'
   5125 occasionally does strange things to `.word' directives.  Directives of
   5126 the form `.word sym1-sym2' are often emitted by compilers as part of
   5127 jump tables.  Therefore, when `as' assembles a directive of the form
   5128 `.word sym1-sym2', and the difference between `sym1' and `sym2' does
   5129 not fit in 16 bits, `as' creates a "secondary jump table", immediately
   5130 before the next label.  This secondary jump table is preceded by a
   5131 short-jump to the first byte after the secondary table.  This
   5132 short-jump prevents the flow of control from accidentally falling into
   5133 the new table.  Inside the table is a long-jump to `sym2'.  The
   5134 original `.word' contains `sym1' minus the address of the long-jump to
   5135 `sym2'.
   5136 
   5137    If there were several occurrences of `.word sym1-sym2' before the
   5138 secondary jump table, all of them are adjusted.  If there was a `.word
   5139 sym3-sym4', that also did not fit in sixteen bits, a long-jump to
   5140 `sym4' is included in the secondary jump table, and the `.word'
   5141 directives are adjusted to contain `sym3' minus the address of the
   5142 long-jump to `sym4'; and so on, for as many entries in the original
   5143 jump table as necessary.
   5144 
   5145 
   5146 File: as.info,  Node: Deprecated,  Prev: Word,  Up: Pseudo Ops
   5147 
   5148 7.121 Deprecated Directives
   5149 ===========================
   5150 
   5151 One day these directives won't work.  They are included for
   5152 compatibility with older assemblers.
   5153 .abort
   5154 
   5155 .line
   5156 
   5157 
   5158 File: as.info,  Node: Object Attributes,  Next: Machine Dependencies,  Prev: Pseudo Ops,  Up: Top
   5159 
   5160 8 Object Attributes
   5161 *******************
   5162 
   5163 `as' assembles source files written for a specific architecture into
   5164 object files for that architecture.  But not all object files are alike.
   5165 Many architectures support incompatible variations.  For instance,
   5166 floating point arguments might be passed in floating point registers if
   5167 the object file requires hardware floating point support--or floating
   5168 point arguments might be passed in integer registers if the object file
   5169 supports processors with no hardware floating point unit.  Or, if two
   5170 objects are built for different generations of the same architecture,
   5171 the combination may require the newer generation at run-time.
   5172 
   5173    This information is useful during and after linking.  At link time,
   5174 `ld' can warn about incompatible object files.  After link time, tools
   5175 like `gdb' can use it to process the linked file correctly.
   5176 
   5177    Compatibility information is recorded as a series of object
   5178 attributes.  Each attribute has a "vendor", "tag", and "value".  The
   5179 vendor is a string, and indicates who sets the meaning of the tag.  The
   5180 tag is an integer, and indicates what property the attribute describes.
   5181 The value may be a string or an integer, and indicates how the property
   5182 affects this object.  Missing attributes are the same as attributes
   5183 with a zero value or empty string value.
   5184 
   5185    Object attributes were developed as part of the ABI for the ARM
   5186 Architecture.  The file format is documented in `ELF for the ARM
   5187 Architecture'.
   5188 
   5189 * Menu:
   5190 
   5191 * GNU Object Attributes::               GNU Object Attributes
   5192 * Defining New Object Attributes::      Defining New Object Attributes
   5193 
   5194 
   5195 File: as.info,  Node: GNU Object Attributes,  Next: Defining New Object Attributes,  Up: Object Attributes
   5196 
   5197 8.1 GNU Object Attributes
   5198 =========================
   5199 
   5200 The `.gnu_attribute' directive records an object attribute with vendor
   5201 `gnu'.
   5202 
   5203    Except for `Tag_compatibility', which has both an integer and a
   5204 string for its value, GNU attributes have a string value if the tag
   5205 number is odd and an integer value if the tag number is even.  The
   5206 second bit (`TAG & 2' is set for architecture-independent attributes
   5207 and clear for architecture-dependent ones.
   5208 
   5209 8.1.1 Common GNU attributes
   5210 ---------------------------
   5211 
   5212 These attributes are valid on all architectures.
   5213 
   5214 Tag_compatibility (32)
   5215      The compatibility attribute takes an integer flag value and a
   5216      vendor name.  If the flag value is 0, the file is compatible with
   5217      other toolchains.  If it is 1, then the file is only compatible
   5218      with the named toolchain.  If it is greater than 1, the file can
   5219      only be processed by other toolchains under some private
   5220      arrangement indicated by the flag value and the vendor name.
   5221 
   5222 8.1.2 MIPS Attributes
   5223 ---------------------
   5224 
   5225 Tag_GNU_MIPS_ABI_FP (4)
   5226      The floating-point ABI used by this object file.  The value will
   5227      be:
   5228 
   5229         * 0 for files not affected by the floating-point ABI.
   5230 
   5231         * 1 for files using the hardware floating-point with a standard
   5232           double-precision FPU.
   5233 
   5234         * 2 for files using the hardware floating-point ABI with a
   5235           single-precision FPU.
   5236 
   5237         * 3 for files using the software floating-point ABI.
   5238 
   5239         * 4 for files using the hardware floating-point ABI with 64-bit
   5240           wide double-precision floating-point registers and 32-bit
   5241           wide general purpose registers.
   5242 
   5243 8.1.3 PowerPC Attributes
   5244 ------------------------
   5245 
   5246 Tag_GNU_Power_ABI_FP (4)
   5247      The floating-point ABI used by this object file.  The value will
   5248      be:
   5249 
   5250         * 0 for files not affected by the floating-point ABI.
   5251 
   5252         * 1 for files using double-precision hardware floating-point
   5253           ABI.
   5254 
   5255         * 2 for files using the software floating-point ABI.
   5256 
   5257         * 3 for files using single-precision hardware floating-point
   5258           ABI.
   5259 
   5260 Tag_GNU_Power_ABI_Vector (8)
   5261      The vector ABI used by this object file.  The value will be:
   5262 
   5263         * 0 for files not affected by the vector ABI.
   5264 
   5265         * 1 for files using general purpose registers to pass vectors.
   5266 
   5267         * 2 for files using AltiVec registers to pass vectors.
   5268 
   5269         * 3 for files using SPE registers to pass vectors.
   5270 
   5271 
   5272 File: as.info,  Node: Defining New Object Attributes,  Prev: GNU Object Attributes,  Up: Object Attributes
   5273 
   5274 8.2 Defining New Object Attributes
   5275 ==================================
   5276 
   5277 If you want to define a new GNU object attribute, here are the places
   5278 you will need to modify.  New attributes should be discussed on the
   5279 `binutils' mailing list.
   5280 
   5281    * This manual, which is the official register of attributes.
   5282 
   5283    * The header for your architecture `include/elf', to define the tag.
   5284 
   5285    * The `bfd' support file for your architecture, to merge the
   5286      attribute and issue any appropriate link warnings.
   5287 
   5288    * Test cases in `ld/testsuite' for merging and link warnings.
   5289 
   5290    * `binutils/readelf.c' to display your attribute.
   5291 
   5292    * GCC, if you want the compiler to mark the attribute automatically.
   5293 
   5294 
   5295 File: as.info,  Node: Machine Dependencies,  Next: Reporting Bugs,  Prev: Object Attributes,  Up: Top
   5296 
   5297 9 Machine Dependent Features
   5298 ****************************
   5299 
   5300 The machine instruction sets are (almost by definition) different on
   5301 each machine where `as' runs.  Floating point representations vary as
   5302 well, and `as' often supports a few additional directives or
   5303 command-line options for compatibility with other assemblers on a
   5304 particular platform.  Finally, some versions of `as' support special
   5305 pseudo-instructions for branch optimization.
   5306 
   5307    This chapter discusses most of these differences, though it does not
   5308 include details on any machine's instruction set.  For details on that
   5309 subject, see the hardware manufacturer's manual.
   5310 
   5311 * Menu:
   5312 
   5313 
   5314 * Alpha-Dependent::		Alpha Dependent Features
   5315 
   5316 * ARC-Dependent::               ARC Dependent Features
   5317 
   5318 * ARM-Dependent::               ARM Dependent Features
   5319 
   5320 * AVR-Dependent::               AVR Dependent Features
   5321 
   5322 * BFIN-Dependent::		BFIN Dependent Features
   5323 
   5324 * CR16-Dependent::              CR16 Dependent Features
   5325 
   5326 * CRIS-Dependent::              CRIS Dependent Features
   5327 
   5328 * D10V-Dependent::              D10V Dependent Features
   5329 
   5330 * D30V-Dependent::              D30V Dependent Features
   5331 
   5332 * H8/300-Dependent::            Renesas H8/300 Dependent Features
   5333 
   5334 * HPPA-Dependent::              HPPA Dependent Features
   5335 
   5336 * ESA/390-Dependent::           IBM ESA/390 Dependent Features
   5337 
   5338 * i386-Dependent::              Intel 80386 and AMD x86-64 Dependent Features
   5339 
   5340 * i860-Dependent::              Intel 80860 Dependent Features
   5341 
   5342 * i960-Dependent::              Intel 80960 Dependent Features
   5343 
   5344 * IA-64-Dependent::             Intel IA-64 Dependent Features
   5345 
   5346 * IP2K-Dependent::              IP2K Dependent Features
   5347 
   5348 * M32C-Dependent::              M32C Dependent Features
   5349 
   5350 * M32R-Dependent::              M32R Dependent Features
   5351 
   5352 * M68K-Dependent::              M680x0 Dependent Features
   5353 
   5354 * M68HC11-Dependent::           M68HC11 and 68HC12 Dependent Features
   5355 
   5356 * MIPS-Dependent::              MIPS Dependent Features
   5357 
   5358 * MMIX-Dependent::              MMIX Dependent Features
   5359 
   5360 * MSP430-Dependent::		MSP430 Dependent Features
   5361 
   5362 * SH-Dependent::                Renesas / SuperH SH Dependent Features
   5363 * SH64-Dependent::              SuperH SH64 Dependent Features
   5364 
   5365 * PDP-11-Dependent::            PDP-11 Dependent Features
   5366 
   5367 * PJ-Dependent::                picoJava Dependent Features
   5368 
   5369 * PPC-Dependent::               PowerPC Dependent Features
   5370 
   5371 * Sparc-Dependent::             SPARC Dependent Features
   5372 
   5373 * TIC54X-Dependent::            TI TMS320C54x Dependent Features
   5374 
   5375 * V850-Dependent::              V850 Dependent Features
   5376 
   5377 * Xtensa-Dependent::            Xtensa Dependent Features
   5378 
   5379 * Z80-Dependent::               Z80 Dependent Features
   5380 
   5381 * Z8000-Dependent::             Z8000 Dependent Features
   5382 
   5383 * Vax-Dependent::               VAX Dependent Features
   5384 
   5385 
   5386 File: as.info,  Node: Alpha-Dependent,  Next: ARC-Dependent,  Up: Machine Dependencies
   5387 
   5388 9.1 Alpha Dependent Features
   5389 ============================
   5390 
   5391 * Menu:
   5392 
   5393 * Alpha Notes::                Notes
   5394 * Alpha Options::              Options
   5395 * Alpha Syntax::               Syntax
   5396 * Alpha Floating Point::       Floating Point
   5397 * Alpha Directives::           Alpha Machine Directives
   5398 * Alpha Opcodes::              Opcodes
   5399 
   5400 
   5401 File: as.info,  Node: Alpha Notes,  Next: Alpha Options,  Up: Alpha-Dependent
   5402 
   5403 9.1.1 Notes
   5404 -----------
   5405 
   5406 The documentation here is primarily for the ELF object format.  `as'
   5407 also supports the ECOFF and EVAX formats, but features specific to
   5408 these formats are not yet documented.
   5409 
   5410 
   5411 File: as.info,  Node: Alpha Options,  Next: Alpha Syntax,  Prev: Alpha Notes,  Up: Alpha-Dependent
   5412 
   5413 9.1.2 Options
   5414 -------------
   5415 
   5416 `-mCPU'
   5417      This option specifies the target processor.  If an attempt is made
   5418      to assemble an instruction which will not execute on the target
   5419      processor, the assembler may either expand the instruction as a
   5420      macro or issue an error message.  This option is equivalent to the
   5421      `.arch' directive.
   5422 
   5423      The following processor names are recognized: `21064', `21064a',
   5424      `21066', `21068', `21164', `21164a', `21164pc', `21264', `21264a',
   5425      `21264b', `ev4', `ev5', `lca45', `ev5', `ev56', `pca56', `ev6',
   5426      `ev67', `ev68'.  The special name `all' may be used to allow the
   5427      assembler to accept instructions valid for any Alpha processor.
   5428 
   5429      In order to support existing practice in OSF/1 with respect to
   5430      `.arch', and existing practice within `MILO' (the Linux ARC
   5431      bootloader), the numbered processor names (e.g. 21064) enable the
   5432      processor-specific PALcode instructions, while the
   5433      "electro-vlasic" names (e.g. `ev4') do not.
   5434 
   5435 `-mdebug'
   5436 `-no-mdebug'
   5437      Enables or disables the generation of `.mdebug' encapsulation for
   5438      stabs directives and procedure descriptors.  The default is to
   5439      automatically enable `.mdebug' when the first stabs directive is
   5440      seen.
   5441 
   5442 `-relax'
   5443      This option forces all relocations to be put into the object file,
   5444      instead of saving space and resolving some relocations at assembly
   5445      time.  Note that this option does not propagate all symbol
   5446      arithmetic into the object file, because not all symbol arithmetic
   5447      can be represented.  However, the option can still be useful in
   5448      specific applications.
   5449 
   5450 `-g'
   5451      This option is used when the compiler generates debug information.
   5452      When `gcc' is using `mips-tfile' to generate debug information for
   5453      ECOFF, local labels must be passed through to the object file.
   5454      Otherwise this option has no effect.
   5455 
   5456 `-GSIZE'
   5457      A local common symbol larger than SIZE is placed in `.bss', while
   5458      smaller symbols are placed in `.sbss'.
   5459 
   5460 `-F'
   5461 `-32addr'
   5462      These options are ignored for backward compatibility.
   5463 
   5464 
   5465 File: as.info,  Node: Alpha Syntax,  Next: Alpha Floating Point,  Prev: Alpha Options,  Up: Alpha-Dependent
   5466 
   5467 9.1.3 Syntax
   5468 ------------
   5469 
   5470 The assembler syntax closely follow the Alpha Reference Manual;
   5471 assembler directives and general syntax closely follow the OSF/1 and
   5472 OpenVMS syntax, with a few differences for ELF.
   5473 
   5474 * Menu:
   5475 
   5476 * Alpha-Chars::                Special Characters
   5477 * Alpha-Regs::                 Register Names
   5478 * Alpha-Relocs::               Relocations
   5479 
   5480 
   5481 File: as.info,  Node: Alpha-Chars,  Next: Alpha-Regs,  Up: Alpha Syntax
   5482 
   5483 9.1.3.1 Special Characters
   5484 ..........................
   5485 
   5486 `#' is the line comment character.
   5487 
   5488    `;' can be used instead of a newline to separate statements.
   5489 
   5490 
   5491 File: as.info,  Node: Alpha-Regs,  Next: Alpha-Relocs,  Prev: Alpha-Chars,  Up: Alpha Syntax
   5492 
   5493 9.1.3.2 Register Names
   5494 ......................
   5495 
   5496 The 32 integer registers are referred to as `$N' or `$rN'.  In
   5497 addition, registers 15, 28, 29, and 30 may be referred to by the
   5498 symbols `$fp', `$at', `$gp', and `$sp' respectively.
   5499 
   5500    The 32 floating-point registers are referred to as `$fN'.
   5501 
   5502 
   5503 File: as.info,  Node: Alpha-Relocs,  Prev: Alpha-Regs,  Up: Alpha Syntax
   5504 
   5505 9.1.3.3 Relocations
   5506 ...................
   5507 
   5508 Some of these relocations are available for ECOFF, but mostly only for
   5509 ELF.  They are modeled after the relocation format introduced in
   5510 Digital Unix 4.0, but there are additions.
   5511 
   5512    The format is `!TAG' or `!TAG!NUMBER' where TAG is the name of the
   5513 relocation.  In some cases NUMBER is used to relate specific
   5514 instructions.
   5515 
   5516    The relocation is placed at the end of the instruction like so:
   5517 
   5518      ldah  $0,a($29)    !gprelhigh
   5519      lda   $0,a($0)     !gprellow
   5520      ldq   $1,b($29)    !literal!100
   5521      ldl   $2,0($1)     !lituse_base!100
   5522 
   5523 `!literal'
   5524 `!literal!N'
   5525      Used with an `ldq' instruction to load the address of a symbol
   5526      from the GOT.
   5527 
   5528      A sequence number N is optional, and if present is used to pair
   5529      `lituse' relocations with this `literal' relocation.  The `lituse'
   5530      relocations are used by the linker to optimize the code based on
   5531      the final location of the symbol.
   5532 
   5533      Note that these optimizations are dependent on the data flow of the
   5534      program.  Therefore, if _any_ `lituse' is paired with a `literal'
   5535      relocation, then _all_ uses of the register set by the `literal'
   5536      instruction must also be marked with `lituse' relocations.  This
   5537      is because the original `literal' instruction may be deleted or
   5538      transformed into another instruction.
   5539 
   5540      Also note that there may be a one-to-many relationship between
   5541      `literal' and `lituse', but not a many-to-one.  That is, if there
   5542      are two code paths that load up the same address and feed the
   5543      value to a single use, then the use may not use a `lituse'
   5544      relocation.
   5545 
   5546 `!lituse_base!N'
   5547      Used with any memory format instruction (e.g. `ldl') to indicate
   5548      that the literal is used for an address load.  The offset field of
   5549      the instruction must be zero.  During relaxation, the code may be
   5550      altered to use a gp-relative load.
   5551 
   5552 `!lituse_jsr!N'
   5553      Used with a register branch format instruction (e.g. `jsr') to
   5554      indicate that the literal is used for a call.  During relaxation,
   5555      the code may be altered to use a direct branch (e.g. `bsr').
   5556 
   5557 `!lituse_jsrdirect!N'
   5558      Similar to `lituse_jsr', but also that this call cannot be vectored
   5559      through a PLT entry.  This is useful for functions with special
   5560      calling conventions which do not allow the normal call-clobbered
   5561      registers to be clobbered.
   5562 
   5563 `!lituse_bytoff!N'
   5564      Used with a byte mask instruction (e.g. `extbl') to indicate that
   5565      only the low 3 bits of the address are relevant.  During
   5566      relaxation, the code may be altered to use an immediate instead of
   5567      a register shift.
   5568 
   5569 `!lituse_addr!N'
   5570      Used with any other instruction to indicate that the original
   5571      address is in fact used, and the original `ldq' instruction may
   5572      not be altered or deleted.  This is useful in conjunction with
   5573      `lituse_jsr' to test whether a weak symbol is defined.
   5574 
   5575           ldq  $27,foo($29)   !literal!1
   5576           beq  $27,is_undef   !lituse_addr!1
   5577           jsr  $26,($27),foo  !lituse_jsr!1
   5578 
   5579 `!lituse_tlsgd!N'
   5580      Used with a register branch format instruction to indicate that the
   5581      literal is the call to `__tls_get_addr' used to compute the
   5582      address of the thread-local storage variable whose descriptor was
   5583      loaded with `!tlsgd!N'.
   5584 
   5585 `!lituse_tlsldm!N'
   5586      Used with a register branch format instruction to indicate that the
   5587      literal is the call to `__tls_get_addr' used to compute the
   5588      address of the base of the thread-local storage block for the
   5589      current module.  The descriptor for the module must have been
   5590      loaded with `!tlsldm!N'.
   5591 
   5592 `!gpdisp!N'
   5593      Used with `ldah' and `lda' to load the GP from the current
   5594      address, a-la the `ldgp' macro.  The source register for the
   5595      `ldah' instruction must contain the address of the `ldah'
   5596      instruction.  There must be exactly one `lda' instruction paired
   5597      with the `ldah' instruction, though it may appear anywhere in the
   5598      instruction stream.  The immediate operands must be zero.
   5599 
   5600           bsr  $26,foo
   5601           ldah $29,0($26)     !gpdisp!1
   5602           lda  $29,0($29)     !gpdisp!1
   5603 
   5604 `!gprelhigh'
   5605      Used with an `ldah' instruction to add the high 16 bits of a
   5606      32-bit displacement from the GP.
   5607 
   5608 `!gprellow'
   5609      Used with any memory format instruction to add the low 16 bits of a
   5610      32-bit displacement from the GP.
   5611 
   5612 `!gprel'
   5613      Used with any memory format instruction to add a 16-bit
   5614      displacement from the GP.
   5615 
   5616 `!samegp'
   5617      Used with any branch format instruction to skip the GP load at the
   5618      target address.  The referenced symbol must have the same GP as the
   5619      source object file, and it must be declared to either not use `$27'
   5620      or perform a standard GP load in the first two instructions via the
   5621      `.prologue' directive.
   5622 
   5623 `!tlsgd'
   5624 `!tlsgd!N'
   5625      Used with an `lda' instruction to load the address of a TLS
   5626      descriptor for a symbol in the GOT.
   5627 
   5628      The sequence number N is optional, and if present it used to pair
   5629      the descriptor load with both the `literal' loading the address of
   5630      the `__tls_get_addr' function and the `lituse_tlsgd' marking the
   5631      call to that function.
   5632 
   5633      For proper relaxation, both the `tlsgd', `literal' and `lituse'
   5634      relocations must be in the same extended basic block.  That is,
   5635      the relocation with the lowest address must be executed first at
   5636      runtime.
   5637 
   5638 `!tlsldm'
   5639 `!tlsldm!N'
   5640      Used with an `lda' instruction to load the address of a TLS
   5641      descriptor for the current module in the GOT.
   5642 
   5643      Similar in other respects to `tlsgd'.
   5644 
   5645 `!gotdtprel'
   5646      Used with an `ldq' instruction to load the offset of the TLS
   5647      symbol within its module's thread-local storage block.  Also known
   5648      as the dynamic thread pointer offset or dtp-relative offset.
   5649 
   5650 `!dtprelhi'
   5651 `!dtprello'
   5652 `!dtprel'
   5653      Like `gprel' relocations except they compute dtp-relative offsets.
   5654 
   5655 `!gottprel'
   5656      Used with an `ldq' instruction to load the offset of the TLS
   5657      symbol from the thread pointer.  Also known as the tp-relative
   5658      offset.
   5659 
   5660 `!tprelhi'
   5661 `!tprello'
   5662 `!tprel'
   5663      Like `gprel' relocations except they compute tp-relative offsets.
   5664 
   5665 
   5666 File: as.info,  Node: Alpha Floating Point,  Next: Alpha Directives,  Prev: Alpha Syntax,  Up: Alpha-Dependent
   5667 
   5668 9.1.4 Floating Point
   5669 --------------------
   5670 
   5671 The Alpha family uses both IEEE and VAX floating-point numbers.
   5672 
   5673 
   5674 File: as.info,  Node: Alpha Directives,  Next: Alpha Opcodes,  Prev: Alpha Floating Point,  Up: Alpha-Dependent
   5675 
   5676 9.1.5 Alpha Assembler Directives
   5677 --------------------------------
   5678 
   5679 `as' for the Alpha supports many additional directives for
   5680 compatibility with the native assembler.  This section describes them
   5681 only briefly.
   5682 
   5683    These are the additional directives in `as' for the Alpha:
   5684 
   5685 `.arch CPU'
   5686      Specifies the target processor.  This is equivalent to the `-mCPU'
   5687      command-line option.  *Note Options: Alpha Options, for a list of
   5688      values for CPU.
   5689 
   5690 `.ent FUNCTION[, N]'
   5691      Mark the beginning of FUNCTION.  An optional number may follow for
   5692      compatibility with the OSF/1 assembler, but is ignored.  When
   5693      generating `.mdebug' information, this will create a procedure
   5694      descriptor for the function.  In ELF, it will mark the symbol as a
   5695      function a-la the generic `.type' directive.
   5696 
   5697 `.end FUNCTION'
   5698      Mark the end of FUNCTION.  In ELF, it will set the size of the
   5699      symbol a-la the generic `.size' directive.
   5700 
   5701 `.mask MASK, OFFSET'
   5702      Indicate which of the integer registers are saved in the current
   5703      function's stack frame.  MASK is interpreted a bit mask in which
   5704      bit N set indicates that register N is saved.  The registers are
   5705      saved in a block located OFFSET bytes from the "canonical frame
   5706      address" (CFA) which is the value of the stack pointer on entry to
   5707      the function.  The registers are saved sequentially, except that
   5708      the return address register (normally `$26') is saved first.
   5709 
   5710      This and the other directives that describe the stack frame are
   5711      currently only used when generating `.mdebug' information.  They
   5712      may in the future be used to generate DWARF2 `.debug_frame' unwind
   5713      information for hand written assembly.
   5714 
   5715 `.fmask MASK, OFFSET'
   5716      Indicate which of the floating-point registers are saved in the
   5717      current stack frame.  The MASK and OFFSET parameters are
   5718      interpreted as with `.mask'.
   5719 
   5720 `.frame FRAMEREG, FRAMEOFFSET, RETREG[, ARGOFFSET]'
   5721      Describes the shape of the stack frame.  The frame pointer in use
   5722      is FRAMEREG; normally this is either `$fp' or `$sp'.  The frame
   5723      pointer is FRAMEOFFSET bytes below the CFA.  The return address is
   5724      initially located in RETREG until it is saved as indicated in
   5725      `.mask'.  For compatibility with OSF/1 an optional ARGOFFSET
   5726      parameter is accepted and ignored.  It is believed to indicate the
   5727      offset from the CFA to the saved argument registers.
   5728 
   5729 `.prologue N'
   5730      Indicate that the stack frame is set up and all registers have been
   5731      spilled.  The argument N indicates whether and how the function
   5732      uses the incoming "procedure vector" (the address of the called
   5733      function) in `$27'.  0 indicates that `$27' is not used; 1
   5734      indicates that the first two instructions of the function use `$27'
   5735      to perform a load of the GP register; 2 indicates that `$27' is
   5736      used in some non-standard way and so the linker cannot elide the
   5737      load of the procedure vector during relaxation.
   5738 
   5739 `.usepv FUNCTION, WHICH'
   5740      Used to indicate the use of the `$27' register, similar to
   5741      `.prologue', but without the other semantics of needing to be
   5742      inside an open `.ent'/`.end' block.
   5743 
   5744      The WHICH argument should be either `no', indicating that `$27' is
   5745      not used, or `std', indicating that the first two instructions of
   5746      the function perform a GP load.
   5747 
   5748      One might use this directive instead of `.prologue' if you are
   5749      also using dwarf2 CFI directives.
   5750 
   5751 `.gprel32 EXPRESSION'
   5752      Computes the difference between the address in EXPRESSION and the
   5753      GP for the current object file, and stores it in 4 bytes.  In
   5754      addition to being smaller than a full 8 byte address, this also
   5755      does not require a dynamic relocation when used in a shared
   5756      library.
   5757 
   5758 `.t_floating EXPRESSION'
   5759      Stores EXPRESSION as an IEEE double precision value.
   5760 
   5761 `.s_floating EXPRESSION'
   5762      Stores EXPRESSION as an IEEE single precision value.
   5763 
   5764 `.f_floating EXPRESSION'
   5765      Stores EXPRESSION as a VAX F format value.
   5766 
   5767 `.g_floating EXPRESSION'
   5768      Stores EXPRESSION as a VAX G format value.
   5769 
   5770 `.d_floating EXPRESSION'
   5771      Stores EXPRESSION as a VAX D format value.
   5772 
   5773 `.set FEATURE'
   5774      Enables or disables various assembler features.  Using the positive
   5775      name of the feature enables while using `noFEATURE' disables.
   5776 
   5777     `at'
   5778           Indicates that macro expansions may clobber the "assembler
   5779           temporary" (`$at' or `$28') register.  Some macros may not be
   5780           expanded without this and will generate an error message if
   5781           `noat' is in effect.  When `at' is in effect, a warning will
   5782           be generated if `$at' is used by the programmer.
   5783 
   5784     `macro'
   5785           Enables the expansion of macro instructions.  Note that
   5786           variants of real instructions, such as `br label' vs `br
   5787           $31,label' are considered alternate forms and not macros.
   5788 
   5789     `move'
   5790     `reorder'
   5791     `volatile'
   5792           These control whether and how the assembler may re-order
   5793           instructions.  Accepted for compatibility with the OSF/1
   5794           assembler, but `as' does not do instruction scheduling, so
   5795           these features are ignored.
   5796 
   5797    The following directives are recognized for compatibility with the
   5798 OSF/1 assembler but are ignored.
   5799 
   5800      .proc           .aproc
   5801      .reguse         .livereg
   5802      .option         .aent
   5803      .ugen           .eflag
   5804      .alias          .noalias
   5805 
   5806 
   5807 File: as.info,  Node: Alpha Opcodes,  Prev: Alpha Directives,  Up: Alpha-Dependent
   5808 
   5809 9.1.6 Opcodes
   5810 -------------
   5811 
   5812 For detailed information on the Alpha machine instruction set, see the
   5813 Alpha Architecture Handbook
   5814 (ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf).
   5815 
   5816 
   5817 File: as.info,  Node: ARC-Dependent,  Next: ARM-Dependent,  Prev: Alpha-Dependent,  Up: Machine Dependencies
   5818 
   5819 9.2 ARC Dependent Features
   5820 ==========================
   5821 
   5822 * Menu:
   5823 
   5824 * ARC Options::              Options
   5825 * ARC Syntax::               Syntax
   5826 * ARC Floating Point::       Floating Point
   5827 * ARC Directives::           ARC Machine Directives
   5828 * ARC Opcodes::              Opcodes
   5829 
   5830 
   5831 File: as.info,  Node: ARC Options,  Next: ARC Syntax,  Up: ARC-Dependent
   5832 
   5833 9.2.1 Options
   5834 -------------
   5835 
   5836 `-marc[5|6|7|8]'
   5837      This option selects the core processor variant.  Using `-marc' is
   5838      the same as `-marc6', which is also the default.
   5839 
   5840     `arc5'
   5841           Base instruction set.
   5842 
   5843     `arc6'
   5844           Jump-and-link (jl) instruction.  No requirement of an
   5845           instruction between setting flags and conditional jump.  For
   5846           example:
   5847 
   5848                  mov.f r0,r1
   5849                  beq   foo
   5850 
   5851     `arc7'
   5852           Break (brk) and sleep (sleep) instructions.
   5853 
   5854     `arc8'
   5855           Software interrupt (swi) instruction.
   5856 
   5857 
   5858      Note: the `.option' directive can to be used to select a core
   5859      variant from within assembly code.
   5860 
   5861 `-EB'
   5862      This option specifies that the output generated by the assembler
   5863      should be marked as being encoded for a big-endian processor.
   5864 
   5865 `-EL'
   5866      This option specifies that the output generated by the assembler
   5867      should be marked as being encoded for a little-endian processor -
   5868      this is the default.
   5869 
   5870 
   5871 
   5872 File: as.info,  Node: ARC Syntax,  Next: ARC Floating Point,  Prev: ARC Options,  Up: ARC-Dependent
   5873 
   5874 9.2.2 Syntax
   5875 ------------
   5876 
   5877 * Menu:
   5878 
   5879 * ARC-Chars::                Special Characters
   5880 * ARC-Regs::                 Register Names
   5881 
   5882 
   5883 File: as.info,  Node: ARC-Chars,  Next: ARC-Regs,  Up: ARC Syntax
   5884 
   5885 9.2.2.1 Special Characters
   5886 ..........................
   5887 
   5888 *TODO*
   5889 
   5890 
   5891 File: as.info,  Node: ARC-Regs,  Prev: ARC-Chars,  Up: ARC Syntax
   5892 
   5893 9.2.2.2 Register Names
   5894 ......................
   5895 
   5896 *TODO*
   5897 
   5898 
   5899 File: as.info,  Node: ARC Floating Point,  Next: ARC Directives,  Prev: ARC Syntax,  Up: ARC-Dependent
   5900 
   5901 9.2.3 Floating Point
   5902 --------------------
   5903 
   5904 The ARC core does not currently have hardware floating point support.
   5905 Software floating point support is provided by `GCC' and uses IEEE
   5906 floating-point numbers.
   5907 
   5908 
   5909 File: as.info,  Node: ARC Directives,  Next: ARC Opcodes,  Prev: ARC Floating Point,  Up: ARC-Dependent
   5910 
   5911 9.2.4 ARC Machine Directives
   5912 ----------------------------
   5913 
   5914 The ARC version of `as' supports the following additional machine
   5915 directives:
   5916 
   5917 `.2byte EXPRESSIONS'
   5918      *TODO*
   5919 
   5920 `.3byte EXPRESSIONS'
   5921      *TODO*
   5922 
   5923 `.4byte EXPRESSIONS'
   5924      *TODO*
   5925 
   5926 `.extAuxRegister NAME,ADDRESS,MODE'
   5927      The ARCtangent A4 has extensible auxiliary register space.  The
   5928      auxiliary registers can be defined in the assembler source code by
   5929      using this directive.  The first parameter is the NAME of the new
   5930      auxiallry register.  The second parameter is the ADDRESS of the
   5931      register in the auxiliary register memory map for the variant of
   5932      the ARC.  The third parameter specifies the MODE in which the
   5933      register can be operated is and it can be one of:
   5934 
   5935     `r          (readonly)'
   5936 
   5937     `w          (write only)'
   5938 
   5939     `r|w        (read or write)'
   5940 
   5941      For example:
   5942 
   5943             .extAuxRegister mulhi,0x12,w
   5944 
   5945      This specifies an extension auxiliary register called _mulhi_
   5946      which is at address 0x12 in the memory space and which is only
   5947      writable.
   5948 
   5949 `.extCondCode SUFFIX,VALUE'
   5950      The condition codes on the ARCtangent A4 are extensible and can be
   5951      specified by means of this assembler directive.  They are specified
   5952      by the suffix and the value for the condition code.  They can be
   5953      used to specify extra condition codes with any values.  For
   5954      example:
   5955 
   5956             .extCondCode is_busy,0x14
   5957 
   5958              add.is_busy  r1,r2,r3
   5959              bis_busy     _main
   5960 
   5961 `.extCoreRegister NAME,REGNUM,MODE,SHORTCUT'
   5962      Specifies an extension core register NAME for the application.
   5963      This allows a register NAME with a valid REGNUM between 0 and 60,
   5964      with the following as valid values for MODE
   5965 
   5966     `_r_   (readonly)'
   5967 
   5968     `_w_   (write only)'
   5969 
   5970     `_r|w_ (read or write)'
   5971 
   5972      The other parameter gives a description of the register having a
   5973      SHORTCUT in the pipeline.  The valid values are:
   5974 
   5975     `can_shortcut'
   5976 
   5977     `cannot_shortcut'
   5978 
   5979      For example:
   5980 
   5981             .extCoreRegister mlo,57,r,can_shortcut
   5982 
   5983      This defines an extension core register mlo with the value 57 which
   5984      can shortcut the pipeline.
   5985 
   5986 `.extInstruction NAME,OPCODE,SUBOPCODE,SUFFIXCLASS,SYNTAXCLASS'
   5987      The ARCtangent A4 allows the user to specify extension
   5988      instructions.  The extension instructions are not macros.  The
   5989      assembler creates encodings for use of these instructions
   5990      according to the specification by the user.  The parameters are:
   5991 
   5992     *NAME
   5993           Name of the extension instruction
   5994 
   5995     *OPCODE
   5996           Opcode to be used. (Bits 27:31 in the encoding).  Valid values
   5997           0x10-0x1f or 0x03
   5998 
   5999     *SUBOPCODE
   6000           Subopcode to be used.  Valid values are from 0x09-0x3f.
   6001           However the correct value also depends on SYNTAXCLASS
   6002 
   6003     *SUFFIXCLASS
   6004           Determines the kinds of suffixes to be allowed.  Valid values
   6005           are `SUFFIX_NONE', `SUFFIX_COND', `SUFFIX_FLAG' which
   6006           indicates the absence or presence of conditional suffixes and
   6007           flag setting by the extension instruction.  It is also
   6008           possible to specify that an instruction sets the flags and is
   6009           conditional by using `SUFFIX_CODE' | `SUFFIX_FLAG'.
   6010 
   6011     *SYNTAXCLASS
   6012           Determines the syntax class for the instruction.  It can have
   6013           the following values:
   6014 
   6015          ``SYNTAX_2OP':'
   6016                2 Operand Instruction
   6017 
   6018          ``SYNTAX_3OP':'
   6019                3 Operand Instruction
   6020 
   6021           In addition there could be modifiers for the syntax class as
   6022           described below:
   6023 
   6024                Syntax Class Modifiers are:
   6025 
   6026              - `OP1_MUST_BE_IMM': Modifies syntax class SYNTAX_3OP,
   6027                specifying that the first operand of a three-operand
   6028                instruction must be an immediate (i.e., the result is
   6029                discarded).  OP1_MUST_BE_IMM is used by bitwise ORing it
   6030                with SYNTAX_3OP as given in the example below.  This
   6031                could usually be used to set the flags using specific
   6032                instructions and not retain results.
   6033 
   6034              - `OP1_IMM_IMPLIED': Modifies syntax class SYNTAX_20P, it
   6035                specifies that there is an implied immediate destination
   6036                operand which does not appear in the syntax.  For
   6037                example, if the source code contains an instruction like:
   6038 
   6039                     inst r1,r2
   6040 
   6041                it really means that the first argument is an implied
   6042                immediate (that is, the result is discarded).  This is
   6043                the same as though the source code were: inst 0,r1,r2.
   6044                You use OP1_IMM_IMPLIED by bitwise ORing it with
   6045                SYNTAX_20P.
   6046 
   6047 
   6048      For example, defining 64-bit multiplier with immediate operands:
   6049 
   6050           .extInstruction mp64,0x14,0x0,SUFFIX_COND | SUFFIX_FLAG ,
   6051                           SYNTAX_3OP|OP1_MUST_BE_IMM
   6052 
   6053      The above specifies an extension instruction called mp64 which has
   6054      3 operands, sets the flags, can be used with a condition code, for
   6055      which the first operand is an immediate.  (Equivalent to
   6056      discarding the result of the operation).
   6057 
   6058            .extInstruction mul64,0x14,0x00,SUFFIX_COND, SYNTAX_2OP|OP1_IMM_IMPLIED
   6059 
   6060      This describes a 2 operand instruction with an implicit first
   6061      immediate operand.  The result of this operation would be
   6062      discarded.
   6063 
   6064 `.half EXPRESSIONS'
   6065      *TODO*
   6066 
   6067 `.long EXPRESSIONS'
   6068      *TODO*
   6069 
   6070 `.option ARC|ARC5|ARC6|ARC7|ARC8'
   6071      The `.option' directive must be followed by the desired core
   6072      version. Again `arc' is an alias for `arc6'.
   6073 
   6074      Note: the `.option' directive overrides the command line option
   6075      `-marc'; a warning is emitted when the version is not consistent
   6076      between the two - even for the implicit default core version
   6077      (arc6).
   6078 
   6079 `.short EXPRESSIONS'
   6080      *TODO*
   6081 
   6082 `.word EXPRESSIONS'
   6083      *TODO*
   6084 
   6085 
   6086 
   6087 File: as.info,  Node: ARC Opcodes,  Prev: ARC Directives,  Up: ARC-Dependent
   6088 
   6089 9.2.5 Opcodes
   6090 -------------
   6091 
   6092 For information on the ARC instruction set, see `ARC Programmers
   6093 Reference Manual', ARC International (www.arc.com)
   6094 
   6095 
   6096 File: as.info,  Node: ARM-Dependent,  Next: AVR-Dependent,  Prev: ARC-Dependent,  Up: Machine Dependencies
   6097 
   6098 9.3 ARM Dependent Features
   6099 ==========================
   6100 
   6101 * Menu:
   6102 
   6103 * ARM Options::              Options
   6104 * ARM Syntax::               Syntax
   6105 * ARM Floating Point::       Floating Point
   6106 * ARM Directives::           ARM Machine Directives
   6107 * ARM Opcodes::              Opcodes
   6108 * ARM Mapping Symbols::      Mapping Symbols
   6109 * ARM Unwinding Tutorial::   Unwinding
   6110 
   6111 
   6112 File: as.info,  Node: ARM Options,  Next: ARM Syntax,  Up: ARM-Dependent
   6113 
   6114 9.3.1 Options
   6115 -------------
   6116 
   6117 `-mcpu=PROCESSOR[+EXTENSION...]'
   6118      This option specifies the target processor.  The assembler will
   6119      issue an error message if an attempt is made to assemble an
   6120      instruction which will not execute on the target processor.  The
   6121      following processor names are recognized: `arm1', `arm2', `arm250',
   6122      `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
   6123      `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
   6124      `arm700i', `arm710', `arm710t', `arm720', `arm720t', `arm740t',
   6125      `arm710c', `arm7100', `arm7500', `arm7500fe', `arm7t', `arm7tdmi',
   6126      `arm7tdmi-s', `arm8', `arm810', `strongarm', `strongarm1',
   6127      `strongarm110', `strongarm1100', `strongarm1110', `arm9', `arm920',
   6128      `arm920t', `arm922t', `arm940t', `arm9tdmi', `fa526' (Faraday
   6129      FA526 processor), `fa626' (Faraday FA626 processor), `arm9e',
   6130      `arm926e', `arm926ej-s', `arm946e-r0', `arm946e', `arm946e-s',
   6131      `arm966e-r0', `arm966e', `arm966e-s', `arm968e-s', `arm10t',
   6132      `arm10tdmi', `arm10e', `arm1020', `arm1020t', `arm1020e',
   6133      `arm1022e', `arm1026ej-s', `fa626te' (Faraday FA626TE processor),
   6134      `fa726te' (Faraday FA726TE processor), `arm1136j-s', `arm1136jf-s',
   6135      `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s',
   6136      `mpcore', `mpcorenovfp', `cortex-a8', `cortex-a9', `cortex-r4',
   6137      `cortex-m3', `ep9312' (ARM920 with Cirrus Maverick coprocessor),
   6138      `i80200' (Intel XScale processor) `iwmmxt' (Intel(r) XScale
   6139      processor with Wireless MMX(tm) technology coprocessor) and
   6140      `xscale'.  The special name `all' may be used to allow the
   6141      assembler to accept instructions valid for any ARM processor.
   6142 
   6143      In addition to the basic instruction set, the assembler can be
   6144      told to accept various extension mnemonics that extend the
   6145      processor using the co-processor instruction space.  For example,
   6146      `-mcpu=arm920+maverick' is equivalent to specifying
   6147      `-mcpu=ep9312'.  The following extensions are currently supported:
   6148      `+maverick' `+iwmmxt' and `+xscale'.
   6149 
   6150 `-march=ARCHITECTURE[+EXTENSION...]'
   6151      This option specifies the target architecture.  The assembler will
   6152      issue an error message if an attempt is made to assemble an
   6153      instruction which will not execute on the target architecture.
   6154      The following architecture names are recognized: `armv1', `armv2',
   6155      `armv2a', `armv2s', `armv3', `armv3m', `armv4', `armv4xm',
   6156      `armv4t', `armv4txm', `armv5', `armv5t', `armv5txm', `armv5te',
   6157      `armv5texp', `armv6', `armv6j', `armv6k', `armv6z', `armv6zk',
   6158      `armv7', `armv7-a', `armv7-r', `armv7-m', `iwmmxt' and `xscale'.
   6159      If both `-mcpu' and `-march' are specified, the assembler will use
   6160      the setting for `-mcpu'.
   6161 
   6162      The architecture option can be extended with the same instruction
   6163      set extension options as the `-mcpu' option.
   6164 
   6165 `-mfpu=FLOATING-POINT-FORMAT'
   6166      This option specifies the floating point format to assemble for.
   6167      The assembler will issue an error message if an attempt is made to
   6168      assemble an instruction which will not execute on the target
   6169      floating point unit.  The following format options are recognized:
   6170      `softfpa', `fpe', `fpe2', `fpe3', `fpa', `fpa10', `fpa11',
   6171      `arm7500fe', `softvfp', `softvfp+vfp', `vfp', `vfp10', `vfp10-r0',
   6172      `vfp9', `vfpxd', `vfpv2' `vfpv3' `vfpv3-d16' `arm1020t',
   6173      `arm1020e', `arm1136jf-s', `maverick' and `neon'.
   6174 
   6175      In addition to determining which instructions are assembled, this
   6176      option also affects the way in which the `.double' assembler
   6177      directive behaves when assembling little-endian code.
   6178 
   6179      The default is dependent on the processor selected.  For
   6180      Architecture 5 or later, the default is to assembler for VFP
   6181      instructions; for earlier architectures the default is to assemble
   6182      for FPA instructions.
   6183 
   6184 `-mthumb'
   6185      This option specifies that the assembler should start assembling
   6186      Thumb instructions; that is, it should behave as though the file
   6187      starts with a `.code 16' directive.
   6188 
   6189 `-mthumb-interwork'
   6190      This option specifies that the output generated by the assembler
   6191      should be marked as supporting interworking.
   6192 
   6193 `-mapcs `[26|32]''
   6194      This option specifies that the output generated by the assembler
   6195      should be marked as supporting the indicated version of the Arm
   6196      Procedure.  Calling Standard.
   6197 
   6198 `-matpcs'
   6199      This option specifies that the output generated by the assembler
   6200      should be marked as supporting the Arm/Thumb Procedure Calling
   6201      Standard.  If enabled this option will cause the assembler to
   6202      create an empty debugging section in the object file called
   6203      .arm.atpcs.  Debuggers can use this to determine the ABI being
   6204      used by.
   6205 
   6206 `-mapcs-float'
   6207      This indicates the floating point variant of the APCS should be
   6208      used.  In this variant floating point arguments are passed in FP
   6209      registers rather than integer registers.
   6210 
   6211 `-mapcs-reentrant'
   6212      This indicates that the reentrant variant of the APCS should be
   6213      used.  This variant supports position independent code.
   6214 
   6215 `-mfloat-abi=ABI'
   6216      This option specifies that the output generated by the assembler
   6217      should be marked as using specified floating point ABI.  The
   6218      following values are recognized: `soft', `softfp' and `hard'.
   6219 
   6220 `-meabi=VER'
   6221      This option specifies which EABI version the produced object files
   6222      should conform to.  The following values are recognized: `gnu', `4'
   6223      and `5'.
   6224 
   6225 `-EB'
   6226      This option specifies that the output generated by the assembler
   6227      should be marked as being encoded for a big-endian processor.
   6228 
   6229 `-EL'
   6230      This option specifies that the output generated by the assembler
   6231      should be marked as being encoded for a little-endian processor.
   6232 
   6233 `-k'
   6234      This option specifies that the output of the assembler should be
   6235      marked as position-independent code (PIC).
   6236 
   6237 `--fix-v4bx'
   6238      Allow `BX' instructions in ARMv4 code.  This is intended for use
   6239      with the linker option of the same name.
   6240 
   6241 
   6242 
   6243 File: as.info,  Node: ARM Syntax,  Next: ARM Floating Point,  Prev: ARM Options,  Up: ARM-Dependent
   6244 
   6245 9.3.2 Syntax
   6246 ------------
   6247 
   6248 * Menu:
   6249 
   6250 * ARM-Chars::                Special Characters
   6251 * ARM-Regs::                 Register Names
   6252 * ARM-Relocations::	     Relocations
   6253 
   6254 
   6255 File: as.info,  Node: ARM-Chars,  Next: ARM-Regs,  Up: ARM Syntax
   6256 
   6257 9.3.2.1 Special Characters
   6258 ..........................
   6259 
   6260 The presence of a `@' on a line indicates the start of a comment that
   6261 extends to the end of the current line.  If a `#' appears as the first
   6262 character of a line, the whole line is treated as a comment.
   6263 
   6264    The `;' character can be used instead of a newline to separate
   6265 statements.
   6266 
   6267    Either `#' or `$' can be used to indicate immediate operands.
   6268 
   6269    *TODO* Explain about /data modifier on symbols.
   6270 
   6271 
   6272 File: as.info,  Node: ARM-Regs,  Next: ARM-Relocations,  Prev: ARM-Chars,  Up: ARM Syntax
   6273 
   6274 9.3.2.2 Register Names
   6275 ......................
   6276 
   6277 *TODO* Explain about ARM register naming, and the predefined names.
   6278 
   6279 
   6280 File: as.info,  Node: ARM Floating Point,  Next: ARM Directives,  Prev: ARM Syntax,  Up: ARM-Dependent
   6281 
   6282 9.3.3 Floating Point
   6283 --------------------
   6284 
   6285 The ARM family uses IEEE floating-point numbers.
   6286 
   6287 
   6288 File: as.info,  Node: ARM-Relocations,  Prev: ARM-Regs,  Up: ARM Syntax
   6289 
   6290 9.3.3.1 ARM relocation generation
   6291 .................................
   6292 
   6293 Specific data relocations can be generated by putting the relocation
   6294 name in parentheses after the symbol name.  For example:
   6295 
   6296              .word foo(TARGET1)
   6297 
   6298    This will generate an `R_ARM_TARGET1' relocation against the symbol
   6299 FOO.  The following relocations are supported: `GOT', `GOTOFF',
   6300 `TARGET1', `TARGET2', `SBREL', `TLSGD', `TLSLDM', `TLSLDO', `GOTTPOFF',
   6301 `GOT_PREL' and `TPOFF'.
   6302 
   6303    For compatibility with older toolchains the assembler also accepts
   6304 `(PLT)' after branch targets.  This will generate the deprecated
   6305 `R_ARM_PLT32' relocation.
   6306 
   6307    Relocations for `MOVW' and `MOVT' instructions can be generated by
   6308 prefixing the value with `#:lower16:' and `#:upper16' respectively.
   6309 For example to load the 32-bit address of foo into r0:
   6310 
   6311              MOVW r0, #:lower16:foo
   6312              MOVT r0, #:upper16:foo
   6313 
   6314 
   6315 File: as.info,  Node: ARM Directives,  Next: ARM Opcodes,  Prev: ARM Floating Point,  Up: ARM-Dependent
   6316 
   6317 9.3.4 ARM Machine Directives
   6318 ----------------------------
   6319 
   6320 `.align EXPRESSION [, EXPRESSION]'
   6321      This is the generic .ALIGN directive.  For the ARM however if the
   6322      first argument is zero (ie no alignment is needed) the assembler
   6323      will behave as if the argument had been 2 (ie pad to the next four
   6324      byte boundary).  This is for compatibility with ARM's own
   6325      assembler.
   6326 
   6327 `NAME .req REGISTER NAME'
   6328      This creates an alias for REGISTER NAME called NAME.  For example:
   6329 
   6330                   foo .req r0
   6331 
   6332 `.unreq ALIAS-NAME'
   6333      This undefines a register alias which was previously defined using
   6334      the `req', `dn' or `qn' directives.  For example:
   6335 
   6336                   foo .req r0
   6337                   .unreq foo
   6338 
   6339      An error occurs if the name is undefined.  Note - this pseudo op
   6340      can be used to delete builtin in register name aliases (eg 'r0').
   6341      This should only be done if it is really necessary.
   6342 
   6343 `NAME .dn REGISTER NAME [.TYPE] [[INDEX]]'
   6344 
   6345 `NAME .qn REGISTER NAME [.TYPE] [[INDEX]]'
   6346      The `dn' and `qn' directives are used to create typed and/or
   6347      indexed register aliases for use in Advanced SIMD Extension (Neon)
   6348      instructions.  The former should be used to create aliases of
   6349      double-precision registers, and the latter to create aliases of
   6350      quad-precision registers.
   6351 
   6352      If these directives are used to create typed aliases, those
   6353      aliases can be used in Neon instructions instead of writing types
   6354      after the mnemonic or after each operand.  For example:
   6355 
   6356                   x .dn d2.f32
   6357                   y .dn d3.f32
   6358                   z .dn d4.f32[1]
   6359                   vmul x,y,z
   6360 
   6361      This is equivalent to writing the following:
   6362 
   6363                   vmul.f32 d2,d3,d4[1]
   6364 
   6365      Aliases created using `dn' or `qn' can be destroyed using `unreq'.
   6366 
   6367 `.code `[16|32]''
   6368      This directive selects the instruction set being generated. The
   6369      value 16 selects Thumb, with the value 32 selecting ARM.
   6370 
   6371 `.thumb'
   6372      This performs the same action as .CODE 16.
   6373 
   6374 `.arm'
   6375      This performs the same action as .CODE 32.
   6376 
   6377 `.force_thumb'
   6378      This directive forces the selection of Thumb instructions, even if
   6379      the target processor does not support those instructions
   6380 
   6381 `.thumb_func'
   6382      This directive specifies that the following symbol is the name of a
   6383      Thumb encoded function.  This information is necessary in order to
   6384      allow the assembler and linker to generate correct code for
   6385      interworking between Arm and Thumb instructions and should be used
   6386      even if interworking is not going to be performed.  The presence
   6387      of this directive also implies `.thumb'
   6388 
   6389      This directive is not neccessary when generating EABI objects.  On
   6390      these targets the encoding is implicit when generating Thumb code.
   6391 
   6392 `.thumb_set'
   6393      This performs the equivalent of a `.set' directive in that it
   6394      creates a symbol which is an alias for another symbol (possibly
   6395      not yet defined).  This directive also has the added property in
   6396      that it marks the aliased symbol as being a thumb function entry
   6397      point, in the same way that the `.thumb_func' directive does.
   6398 
   6399 `.ltorg'
   6400      This directive causes the current contents of the literal pool to
   6401      be dumped into the current section (which is assumed to be the
   6402      .text section) at the current location (aligned to a word
   6403      boundary).  `GAS' maintains a separate literal pool for each
   6404      section and each sub-section.  The `.ltorg' directive will only
   6405      affect the literal pool of the current section and sub-section.
   6406      At the end of assembly all remaining, un-empty literal pools will
   6407      automatically be dumped.
   6408 
   6409      Note - older versions of `GAS' would dump the current literal pool
   6410      any time a section change occurred.  This is no longer done, since
   6411      it prevents accurate control of the placement of literal pools.
   6412 
   6413 `.pool'
   6414      This is a synonym for .ltorg.
   6415 
   6416 `.fnstart'
   6417      Marks the start of a function with an unwind table entry.
   6418 
   6419 `.fnend'
   6420      Marks the end of a function with an unwind table entry.  The
   6421      unwind index table entry is created when this directive is
   6422      processed.
   6423 
   6424      If no personality routine has been specified then standard
   6425      personality routine 0 or 1 will be used, depending on the number
   6426      of unwind opcodes required.
   6427 
   6428 `.cantunwind'
   6429      Prevents unwinding through the current function.  No personality
   6430      routine or exception table data is required or permitted.
   6431 
   6432 `.personality NAME'
   6433      Sets the personality routine for the current function to NAME.
   6434 
   6435 `.personalityindex INDEX'
   6436      Sets the personality routine for the current function to the EABI
   6437      standard routine number INDEX
   6438 
   6439 `.handlerdata'
   6440      Marks the end of the current function, and the start of the
   6441      exception table entry for that function.  Anything between this
   6442      directive and the `.fnend' directive will be added to the
   6443      exception table entry.
   6444 
   6445      Must be preceded by a `.personality' or `.personalityindex'
   6446      directive.
   6447 
   6448 `.save REGLIST'
   6449      Generate unwinder annotations to restore the registers in REGLIST.
   6450      The format of REGLIST is the same as the corresponding
   6451      store-multiple instruction.
   6452 
   6453      _core registers_
   6454             .save {r4, r5, r6, lr}
   6455             stmfd sp!, {r4, r5, r6, lr}
   6456      _FPA registers_
   6457             .save f4, 2
   6458             sfmfd f4, 2, [sp]!
   6459      _VFP registers_
   6460             .save {d8, d9, d10}
   6461             fstmdx sp!, {d8, d9, d10}
   6462      _iWMMXt registers_
   6463             .save {wr10, wr11}
   6464             wstrd wr11, [sp, #-8]!
   6465             wstrd wr10, [sp, #-8]!
   6466           or
   6467             .save wr11
   6468             wstrd wr11, [sp, #-8]!
   6469             .save wr10
   6470             wstrd wr10, [sp, #-8]!
   6471 
   6472 `.vsave VFP-REGLIST'
   6473      Generate unwinder annotations to restore the VFP registers in
   6474      VFP-REGLIST using FLDMD.  Also works for VFPv3 registers that are
   6475      to be restored using VLDM.  The format of VFP-REGLIST is the same
   6476      as the corresponding store-multiple instruction.
   6477 
   6478      _VFP registers_
   6479             .vsave {d8, d9, d10}
   6480             fstmdd sp!, {d8, d9, d10}
   6481      _VFPv3 registers_
   6482             .vsave {d15, d16, d17}
   6483             vstm sp!, {d15, d16, d17}
   6484 
   6485      Since FLDMX and FSTMX are now deprecated, this directive should be
   6486      used in favour of `.save' for saving VFP registers for ARMv6 and
   6487      above.
   6488 
   6489 `.pad #COUNT'
   6490      Generate unwinder annotations for a stack adjustment of COUNT
   6491      bytes.  A positive value indicates the function prologue allocated
   6492      stack space by decrementing the stack pointer.
   6493 
   6494 `.movsp REG [, #OFFSET]'
   6495      Tell the unwinder that REG contains an offset from the current
   6496      stack pointer.  If OFFSET is not specified then it is assumed to be
   6497      zero.
   6498 
   6499 `.setfp FPREG, SPREG [, #OFFSET]'
   6500      Make all unwinder annotations relaive to a frame pointer.  Without
   6501      this the unwinder will use offsets from the stack pointer.
   6502 
   6503      The syntax of this directive is the same as the `sub' or `mov'
   6504      instruction used to set the frame pointer.  SPREG must be either
   6505      `sp' or mentioned in a previous `.movsp' directive.
   6506 
   6507           .movsp ip
   6508           mov ip, sp
   6509           ...
   6510           .setfp fp, ip, #4
   6511           sub fp, ip, #4
   6512 
   6513 `.raw OFFSET, BYTE1, ...'
   6514      Insert one of more arbitary unwind opcode bytes, which are known
   6515      to adjust the stack pointer by OFFSET bytes.
   6516 
   6517      For example `.unwind_raw 4, 0xb1, 0x01' is equivalent to `.save
   6518      {r0}'
   6519 
   6520 `.cpu NAME'
   6521      Select the target processor.  Valid values for NAME are the same as
   6522      for the `-mcpu' commandline option.
   6523 
   6524 `.arch NAME'
   6525      Select the target architecture.  Valid values for NAME are the
   6526      same as for the `-march' commandline option.
   6527 
   6528 `.object_arch NAME'
   6529      Override the architecture recorded in the EABI object attribute
   6530      section.  Valid values for NAME are the same as for the `.arch'
   6531      directive.  Typically this is useful when code uses runtime
   6532      detection of CPU features.
   6533 
   6534 `.fpu NAME'
   6535      Select the floating point unit to assemble for.  Valid values for
   6536      NAME are the same as for the `-mfpu' commandline option.
   6537 
   6538 `.eabi_attribute TAG, VALUE'
   6539      Set the EABI object attribute number TAG to VALUE.  The value is
   6540      either a `number', `"string"', or `number, "string"' depending on
   6541      the tag.
   6542 
   6543 
   6544 
   6545 File: as.info,  Node: ARM Opcodes,  Next: ARM Mapping Symbols,  Prev: ARM Directives,  Up: ARM-Dependent
   6546 
   6547 9.3.5 Opcodes
   6548 -------------
   6549 
   6550 `as' implements all the standard ARM opcodes.  It also implements
   6551 several pseudo opcodes, including several synthetic load instructions.
   6552 
   6553 `NOP'
   6554             nop
   6555 
   6556      This pseudo op will always evaluate to a legal ARM instruction
   6557      that does nothing.  Currently it will evaluate to MOV r0, r0.
   6558 
   6559 `LDR'
   6560             ldr <register> , = <expression>
   6561 
   6562      If expression evaluates to a numeric constant then a MOV or MVN
   6563      instruction will be used in place of the LDR instruction, if the
   6564      constant can be generated by either of these instructions.
   6565      Otherwise the constant will be placed into the nearest literal
   6566      pool (if it not already there) and a PC relative LDR instruction
   6567      will be generated.
   6568 
   6569 `ADR'
   6570             adr <register> <label>
   6571 
   6572      This instruction will load the address of LABEL into the indicated
   6573      register.  The instruction will evaluate to a PC relative ADD or
   6574      SUB instruction depending upon where the label is located.  If the
   6575      label is out of range, or if it is not defined in the same file
   6576      (and section) as the ADR instruction, then an error will be
   6577      generated.  This instruction will not make use of the literal pool.
   6578 
   6579 `ADRL'
   6580             adrl <register> <label>
   6581 
   6582      This instruction will load the address of LABEL into the indicated
   6583      register.  The instruction will evaluate to one or two PC relative
   6584      ADD or SUB instructions depending upon where the label is located.
   6585      If a second instruction is not needed a NOP instruction will be
   6586      generated in its place, so that this instruction is always 8 bytes
   6587      long.
   6588 
   6589      If the label is out of range, or if it is not defined in the same
   6590      file (and section) as the ADRL instruction, then an error will be
   6591      generated.  This instruction will not make use of the literal pool.
   6592 
   6593 
   6594    For information on the ARM or Thumb instruction sets, see `ARM
   6595 Software Development Toolkit Reference Manual', Advanced RISC Machines
   6596 Ltd.
   6597 
   6598 
   6599 File: as.info,  Node: ARM Mapping Symbols,  Next: ARM Unwinding Tutorial,  Prev: ARM Opcodes,  Up: ARM-Dependent
   6600 
   6601 9.3.6 Mapping Symbols
   6602 ---------------------
   6603 
   6604 The ARM ELF specification requires that special symbols be inserted
   6605 into object files to mark certain features:
   6606 
   6607 `$a'
   6608      At the start of a region of code containing ARM instructions.
   6609 
   6610 `$t'
   6611      At the start of a region of code containing THUMB instructions.
   6612 
   6613 `$d'
   6614      At the start of a region of data.
   6615 
   6616 
   6617    The assembler will automatically insert these symbols for you - there
   6618 is no need to code them yourself.  Support for tagging symbols ($b, $f,
   6619 $p and $m) which is also mentioned in the current ARM ELF specification
   6620 is not implemented.  This is because they have been dropped from the
   6621 new EABI and so tools cannot rely upon their presence.
   6622 
   6623 
   6624 File: as.info,  Node: ARM Unwinding Tutorial,  Prev: ARM Mapping Symbols,  Up: ARM-Dependent
   6625 
   6626 9.3.7 Unwinding
   6627 ---------------
   6628 
   6629 The ABI for the ARM Architecture specifies a standard format for
   6630 exception unwind information.  This information is used when an
   6631 exception is thrown to determine where control should be transferred.
   6632 In particular, the unwind information is used to determine which
   6633 function called the function that threw the exception, and which
   6634 function called that one, and so forth.  This information is also used
   6635 to restore the values of callee-saved registers in the function
   6636 catching the exception.
   6637 
   6638    If you are writing functions in assembly code, and those functions
   6639 call other functions that throw exceptions, you must use assembly
   6640 pseudo ops to ensure that appropriate exception unwind information is
   6641 generated.  Otherwise, if one of the functions called by your assembly
   6642 code throws an exception, the run-time library will be unable to unwind
   6643 the stack through your assembly code and your program will not behave
   6644 correctly.
   6645 
   6646    To illustrate the use of these pseudo ops, we will examine the code
   6647 that G++ generates for the following C++ input:
   6648 
   6649 
   6650 void callee (int *);
   6651 
   6652 int
   6653 caller ()
   6654 {
   6655   int i;
   6656   callee (&i);
   6657   return i;
   6658 }
   6659 
   6660    This example does not show how to throw or catch an exception from
   6661 assembly code.  That is a much more complex operation and should always
   6662 be done in a high-level language, such as C++, that directly supports
   6663 exceptions.
   6664 
   6665    The code generated by one particular version of G++ when compiling
   6666 the example above is:
   6667 
   6668 
   6669 _Z6callerv:
   6670 	.fnstart
   6671 .LFB2:
   6672 	@ Function supports interworking.
   6673 	@ args = 0, pretend = 0, frame = 8
   6674 	@ frame_needed = 1, uses_anonymous_args = 0
   6675 	stmfd	sp!, {fp, lr}
   6676 	.save {fp, lr}
   6677 .LCFI0:
   6678 	.setfp fp, sp, #4
   6679 	add	fp, sp, #4
   6680 .LCFI1:
   6681 	.pad #8
   6682 	sub	sp, sp, #8
   6683 .LCFI2:
   6684 	sub	r3, fp, #8
   6685 	mov	r0, r3
   6686 	bl	_Z6calleePi
   6687 	ldr	r3, [fp, #-8]
   6688 	mov	r0, r3
   6689 	sub	sp, fp, #4
   6690 	ldmfd	sp!, {fp, lr}
   6691 	bx	lr
   6692 .LFE2:
   6693 	.fnend
   6694 
   6695    Of course, the sequence of instructions varies based on the options
   6696 you pass to GCC and on the version of GCC in use.  The exact
   6697 instructions are not important since we are focusing on the pseudo ops
   6698 that are used to generate unwind information.
   6699 
   6700    An important assumption made by the unwinder is that the stack frame
   6701 does not change during the body of the function.  In particular, since
   6702 we assume that the assembly code does not itself throw an exception,
   6703 the only point where an exception can be thrown is from a call, such as
   6704 the `bl' instruction above.  At each call site, the same saved
   6705 registers (including `lr', which indicates the return address) must be
   6706 located in the same locations relative to the frame pointer.
   6707 
   6708    The `.fnstart' (*note .fnstart pseudo op: arm_fnstart.) pseudo op
   6709 appears immediately before the first instruction of the function while
   6710 the `.fnend' (*note .fnend pseudo op: arm_fnend.) pseudo op appears
   6711 immediately after the last instruction of the function.  These pseudo
   6712 ops specify the range of the function.
   6713 
   6714    Only the order of the other pseudos ops (e.g., `.setfp' or `.pad')
   6715 matters; their exact locations are irrelevant.  In the example above,
   6716 the compiler emits the pseudo ops with particular instructions.  That
   6717 makes it easier to understand the code, but it is not required for
   6718 correctness.  It would work just as well to emit all of the pseudo ops
   6719 other than `.fnend' in the same order, but immediately after `.fnstart'.
   6720 
   6721    The `.save' (*note .save pseudo op: arm_save.) pseudo op indicates
   6722 registers that have been saved to the stack so that they can be
   6723 restored before the function returns.  The argument to the `.save'
   6724 pseudo op is a list of registers to save.  If a register is
   6725 "callee-saved" (as specified by the ABI) and is modified by the
   6726 function you are writing, then your code must save the value before it
   6727 is modified and restore the original value before the function returns.
   6728 If an exception is thrown, the run-time library restores the values of
   6729 these registers from their locations on the stack before returning
   6730 control to the exception handler.  (Of course, if an exception is not
   6731 thrown, the function that contains the `.save' pseudo op restores these
   6732 registers in the function epilogue, as is done with the `ldmfd'
   6733 instruction above.)
   6734 
   6735    You do not have to save callee-saved registers at the very beginning
   6736 of the function and you do not need to use the `.save' pseudo op
   6737 immediately following the point at which the registers are saved.
   6738 However, if you modify a callee-saved register, you must save it on the
   6739 stack before modifying it and before calling any functions which might
   6740 throw an exception.  And, you must use the `.save' pseudo op to
   6741 indicate that you have done so.
   6742 
   6743    The `.pad' (*note .pad: arm_pad.) pseudo op indicates a modification
   6744 of the stack pointer that does not save any registers.  The argument is
   6745 the number of bytes (in decimal) that are subtracted from the stack
   6746 pointer.  (On ARM CPUs, the stack grows downwards, so subtracting from
   6747 the stack pointer increases the size of the stack.)
   6748 
   6749    The `.setfp' (*note .setfp pseudo op: arm_setfp.) pseudo op
   6750 indicates the register that contains the frame pointer.  The first
   6751 argument is the register that is set, which is typically `fp'.  The
   6752 second argument indicates the register from which the frame pointer
   6753 takes its value.  The third argument, if present, is the value (in
   6754 decimal) added to the register specified by the second argument to
   6755 compute the value of the frame pointer.  You should not modify the
   6756 frame pointer in the body of the function.
   6757 
   6758    If you do not use a frame pointer, then you should not use the
   6759 `.setfp' pseudo op.  If you do not use a frame pointer, then you should
   6760 avoid modifying the stack pointer outside of the function prologue.
   6761 Otherwise, the run-time library will be unable to find saved registers
   6762 when it is unwinding the stack.
   6763 
   6764    The pseudo ops described above are sufficient for writing assembly
   6765 code that calls functions which may throw exceptions.  If you need to
   6766 know more about the object-file format used to represent unwind
   6767 information, you may consult the `Exception Handling ABI for the ARM
   6768 Architecture' available from `http://infocenter.arm.com'.
   6769 
   6770 
   6771 File: as.info,  Node: AVR-Dependent,  Next: BFIN-Dependent,  Prev: ARM-Dependent,  Up: Machine Dependencies
   6772 
   6773 9.4 AVR Dependent Features
   6774 ==========================
   6775 
   6776 * Menu:
   6777 
   6778 * AVR Options::              Options
   6779 * AVR Syntax::               Syntax
   6780 * AVR Opcodes::              Opcodes
   6781 
   6782 
   6783 File: as.info,  Node: AVR Options,  Next: AVR Syntax,  Up: AVR-Dependent
   6784 
   6785 9.4.1 Options
   6786 -------------
   6787 
   6788 `-mmcu=MCU'
   6789      Specify ATMEL AVR instruction set or MCU type.
   6790 
   6791      Instruction set avr1 is for the minimal AVR core, not supported by
   6792      the C compiler, only for assembler programs (MCU types: at90s1200,
   6793      attiny11, attiny12, attiny15, attiny28).
   6794 
   6795      Instruction set avr2 (default) is for the classic AVR core with up
   6796      to 8K program memory space (MCU types: at90s2313, at90s2323,
   6797      at90s2333, at90s2343, attiny22, attiny26, at90s4414, at90s4433,
   6798      at90s4434, at90s8515, at90c8534, at90s8535).
   6799 
   6800      Instruction set avr25 is for the classic AVR core with up to 8K
   6801      program memory space plus the MOVW instruction (MCU types:
   6802      attiny13, attiny13a, attiny2313, attiny24, attiny44, attiny84,
   6803      attiny25, attiny45, attiny85, attiny261, attiny461, attiny861,
   6804      attiny43u, attiny48, attiny88, at86rf401).
   6805 
   6806      Instruction set avr3 is for the classic AVR core with up to 128K
   6807      program memory space (MCU types: at43usb355, at76c711).
   6808 
   6809      Instruction set avr31 is for the classic AVR core with exactly
   6810      128K program memory space (MCU types: atmega103, at43usb320).
   6811 
   6812      Instruction set avr35 is for classic AVR core plus MOVW, CALL, and
   6813      JMP instructions (MCU types: attiny167, at90usb82, at90usb162).
   6814 
   6815      Instruction set avr4 is for the enhanced AVR core with up to 8K
   6816      program memory space (MCU types: atmega48, atmega48p,atmega8,
   6817      atmega88, atmega88p, atmega8515, atmega8535, atmega8hva, at90pwm1,
   6818      at90pwm2, at90pwm2b, at90pwm3, at90pwm3b).
   6819 
   6820      Instruction set avr5 is for the enhanced AVR core with up to 128K
   6821      program memory space (MCU types: atmega16, atmega161, atmega162,
   6822      atmega163, atmega164p, atmega165, atmega165p, atmega168,
   6823      atmega168p, atmega169, atmega169p, atmega32, atmega323,
   6824      atmega324p, atmega325, atmega325p, atmega3250, atmega3250p,
   6825      atmega328p, atmega329, atmega329p, atmega3290, atmega3290p,
   6826      atmega406, atmega64, atmega640, atmega644, atmega644p, atmega645,
   6827      atmega6450, atmega649, atmega6490, atmega16hva, at90can32,
   6828      at90can64, at90pwm216, at90pwm316, atmega16u4, atmega32c1,
   6829      atmega32m1, atmega32u4, at90usb646, at90usb647, at94k).
   6830 
   6831      Instruction set avr51 is for the enhanced AVR core with exactly
   6832      128K program memory space (MCU types: atmega128, atmega1280,
   6833      atmega1281, atmega1284p, at90can128, at90usb1286, at90usb1287).
   6834 
   6835      Instruction set avr6 is for the enhanced AVR core with a 3-byte PC
   6836      (MCU types: atmega2560, atmega2561).
   6837 
   6838 `-mall-opcodes'
   6839      Accept all AVR opcodes, even if not supported by `-mmcu'.
   6840 
   6841 `-mno-skip-bug'
   6842      This option disable warnings for skipping two-word instructions.
   6843 
   6844 `-mno-wrap'
   6845      This option reject `rjmp/rcall' instructions with 8K wrap-around.
   6846 
   6847 
   6848 
   6849 File: as.info,  Node: AVR Syntax,  Next: AVR Opcodes,  Prev: AVR Options,  Up: AVR-Dependent
   6850 
   6851 9.4.2 Syntax
   6852 ------------
   6853 
   6854 * Menu:
   6855 
   6856 * AVR-Chars::                Special Characters
   6857 * AVR-Regs::                 Register Names
   6858 * AVR-Modifiers::            Relocatable Expression Modifiers
   6859 
   6860 
   6861 File: as.info,  Node: AVR-Chars,  Next: AVR-Regs,  Up: AVR Syntax
   6862 
   6863 9.4.2.1 Special Characters
   6864 ..........................
   6865 
   6866 The presence of a `;' on a line indicates the start of a comment that
   6867 extends to the end of the current line.  If a `#' appears as the first
   6868 character of a line, the whole line is treated as a comment.
   6869 
   6870    The `$' character can be used instead of a newline to separate
   6871 statements.
   6872 
   6873 
   6874 File: as.info,  Node: AVR-Regs,  Next: AVR-Modifiers,  Prev: AVR-Chars,  Up: AVR Syntax
   6875 
   6876 9.4.2.2 Register Names
   6877 ......................
   6878 
   6879 The AVR has 32 x 8-bit general purpose working registers `r0', `r1',
   6880 ... `r31'.  Six of the 32 registers can be used as three 16-bit
   6881 indirect address register pointers for Data Space addressing. One of
   6882 the these address pointers can also be used as an address pointer for
   6883 look up tables in Flash program memory. These added function registers
   6884 are the 16-bit `X', `Y' and `Z' - registers.
   6885 
   6886      X = r26:r27
   6887      Y = r28:r29
   6888      Z = r30:r31
   6889 
   6890 
   6891 File: as.info,  Node: AVR-Modifiers,  Prev: AVR-Regs,  Up: AVR Syntax
   6892 
   6893 9.4.2.3 Relocatable Expression Modifiers
   6894 ........................................
   6895 
   6896 The assembler supports several modifiers when using relocatable
   6897 addresses in AVR instruction operands.  The general syntax is the
   6898 following:
   6899 
   6900      modifier(relocatable-expression)
   6901 
   6902 `lo8'
   6903      This modifier allows you to use bits 0 through 7 of an address
   6904      expression as 8 bit relocatable expression.
   6905 
   6906 `hi8'
   6907      This modifier allows you to use bits 7 through 15 of an address
   6908      expression as 8 bit relocatable expression.  This is useful with,
   6909      for example, the AVR `ldi' instruction and `lo8' modifier.
   6910 
   6911      For example
   6912 
   6913           ldi r26, lo8(sym+10)
   6914           ldi r27, hi8(sym+10)
   6915 
   6916 `hh8'
   6917      This modifier allows you to use bits 16 through 23 of an address
   6918      expression as 8 bit relocatable expression.  Also, can be useful
   6919      for loading 32 bit constants.
   6920 
   6921 `hlo8'
   6922      Synonym of `hh8'.
   6923 
   6924 `hhi8'
   6925      This modifier allows you to use bits 24 through 31 of an
   6926      expression as 8 bit expression. This is useful with, for example,
   6927      the AVR `ldi' instruction and `lo8', `hi8', `hlo8', `hhi8',
   6928      modifier.
   6929 
   6930      For example
   6931 
   6932           ldi r26, lo8(285774925)
   6933           ldi r27, hi8(285774925)
   6934           ldi r28, hlo8(285774925)
   6935           ldi r29, hhi8(285774925)
   6936           ; r29,r28,r27,r26 = 285774925
   6937 
   6938 `pm_lo8'
   6939      This modifier allows you to use bits 0 through 7 of an address
   6940      expression as 8 bit relocatable expression.  This modifier useful
   6941      for addressing data or code from Flash/Program memory. The using
   6942      of `pm_lo8' similar to `lo8'.
   6943 
   6944 `pm_hi8'
   6945      This modifier allows you to use bits 8 through 15 of an address
   6946      expression as 8 bit relocatable expression.  This modifier useful
   6947      for addressing data or code from Flash/Program memory.
   6948 
   6949 `pm_hh8'
   6950      This modifier allows you to use bits 15 through 23 of an address
   6951      expression as 8 bit relocatable expression.  This modifier useful
   6952      for addressing data or code from Flash/Program memory.
   6953 
   6954 
   6955 
   6956 File: as.info,  Node: AVR Opcodes,  Prev: AVR Syntax,  Up: AVR-Dependent
   6957 
   6958 9.4.3 Opcodes
   6959 -------------
   6960 
   6961 For detailed information on the AVR machine instruction set, see
   6962 `www.atmel.com/products/AVR'.
   6963 
   6964    `as' implements all the standard AVR opcodes.  The following table
   6965 summarizes the AVR opcodes, and their arguments.
   6966 
   6967      Legend:
   6968         r   any register
   6969         d   `ldi' register (r16-r31)
   6970         v   `movw' even register (r0, r2, ..., r28, r30)
   6971         a   `fmul' register (r16-r23)
   6972         w   `adiw' register (r24,r26,r28,r30)
   6973         e   pointer registers (X,Y,Z)
   6974         b   base pointer register and displacement ([YZ]+disp)
   6975         z   Z pointer register (for [e]lpm Rd,Z[+])
   6976         M   immediate value from 0 to 255
   6977         n   immediate value from 0 to 255 ( n = ~M ). Relocation impossible
   6978         s   immediate value from 0 to 7
   6979         P   Port address value from 0 to 63. (in, out)
   6980         p   Port address value from 0 to 31. (cbi, sbi, sbic, sbis)
   6981         K   immediate value from 0 to 63 (used in `adiw', `sbiw')
   6982         i   immediate value
   6983         l   signed pc relative offset from -64 to 63
   6984         L   signed pc relative offset from -2048 to 2047
   6985         h   absolute code address (call, jmp)
   6986         S   immediate value from 0 to 7 (S = s << 4)
   6987         ?   use this opcode entry if no parameters, else use next opcode entry
   6988 
   6989      1001010010001000   clc
   6990      1001010011011000   clh
   6991      1001010011111000   cli
   6992      1001010010101000   cln
   6993      1001010011001000   cls
   6994      1001010011101000   clt
   6995      1001010010111000   clv
   6996      1001010010011000   clz
   6997      1001010000001000   sec
   6998      1001010001011000   seh
   6999      1001010001111000   sei
   7000      1001010000101000   sen
   7001      1001010001001000   ses
   7002      1001010001101000   set
   7003      1001010000111000   sev
   7004      1001010000011000   sez
   7005      100101001SSS1000   bclr    S
   7006      100101000SSS1000   bset    S
   7007      1001010100001001   icall
   7008      1001010000001001   ijmp
   7009      1001010111001000   lpm     ?
   7010      1001000ddddd010+   lpm     r,z
   7011      1001010111011000   elpm    ?
   7012      1001000ddddd011+   elpm    r,z
   7013      0000000000000000   nop
   7014      1001010100001000   ret
   7015      1001010100011000   reti
   7016      1001010110001000   sleep
   7017      1001010110011000   break
   7018      1001010110101000   wdr
   7019      1001010111101000   spm
   7020      000111rdddddrrrr   adc     r,r
   7021      000011rdddddrrrr   add     r,r
   7022      001000rdddddrrrr   and     r,r
   7023      000101rdddddrrrr   cp      r,r
   7024      000001rdddddrrrr   cpc     r,r
   7025      000100rdddddrrrr   cpse    r,r
   7026      001001rdddddrrrr   eor     r,r
   7027      001011rdddddrrrr   mov     r,r
   7028      100111rdddddrrrr   mul     r,r
   7029      001010rdddddrrrr   or      r,r
   7030      000010rdddddrrrr   sbc     r,r
   7031      000110rdddddrrrr   sub     r,r
   7032      001001rdddddrrrr   clr     r
   7033      000011rdddddrrrr   lsl     r
   7034      000111rdddddrrrr   rol     r
   7035      001000rdddddrrrr   tst     r
   7036      0111KKKKddddKKKK   andi    d,M
   7037      0111KKKKddddKKKK   cbr     d,n
   7038      1110KKKKddddKKKK   ldi     d,M
   7039      11101111dddd1111   ser     d
   7040      0110KKKKddddKKKK   ori     d,M
   7041      0110KKKKddddKKKK   sbr     d,M
   7042      0011KKKKddddKKKK   cpi     d,M
   7043      0100KKKKddddKKKK   sbci    d,M
   7044      0101KKKKddddKKKK   subi    d,M
   7045      1111110rrrrr0sss   sbrc    r,s
   7046      1111111rrrrr0sss   sbrs    r,s
   7047      1111100ddddd0sss   bld     r,s
   7048      1111101ddddd0sss   bst     r,s
   7049      10110PPdddddPPPP   in      r,P
   7050      10111PPrrrrrPPPP   out     P,r
   7051      10010110KKddKKKK   adiw    w,K
   7052      10010111KKddKKKK   sbiw    w,K
   7053      10011000pppppsss   cbi     p,s
   7054      10011010pppppsss   sbi     p,s
   7055      10011001pppppsss   sbic    p,s
   7056      10011011pppppsss   sbis    p,s
   7057      111101lllllll000   brcc    l
   7058      111100lllllll000   brcs    l
   7059      111100lllllll001   breq    l
   7060      111101lllllll100   brge    l
   7061      111101lllllll101   brhc    l
   7062      111100lllllll101   brhs    l
   7063      111101lllllll111   brid    l
   7064      111100lllllll111   brie    l
   7065      111100lllllll000   brlo    l
   7066      111100lllllll100   brlt    l
   7067      111100lllllll010   brmi    l
   7068      111101lllllll001   brne    l
   7069      111101lllllll010   brpl    l
   7070      111101lllllll000   brsh    l
   7071      111101lllllll110   brtc    l
   7072      111100lllllll110   brts    l
   7073      111101lllllll011   brvc    l
   7074      111100lllllll011   brvs    l
   7075      111101lllllllsss   brbc    s,l
   7076      111100lllllllsss   brbs    s,l
   7077      1101LLLLLLLLLLLL   rcall   L
   7078      1100LLLLLLLLLLLL   rjmp    L
   7079      1001010hhhhh111h   call    h
   7080      1001010hhhhh110h   jmp     h
   7081      1001010rrrrr0101   asr     r
   7082      1001010rrrrr0000   com     r
   7083      1001010rrrrr1010   dec     r
   7084      1001010rrrrr0011   inc     r
   7085      1001010rrrrr0110   lsr     r
   7086      1001010rrrrr0001   neg     r
   7087      1001000rrrrr1111   pop     r
   7088      1001001rrrrr1111   push    r
   7089      1001010rrrrr0111   ror     r
   7090      1001010rrrrr0010   swap    r
   7091      00000001ddddrrrr   movw    v,v
   7092      00000010ddddrrrr   muls    d,d
   7093      000000110ddd0rrr   mulsu   a,a
   7094      000000110ddd1rrr   fmul    a,a
   7095      000000111ddd0rrr   fmuls   a,a
   7096      000000111ddd1rrr   fmulsu  a,a
   7097      1001001ddddd0000   sts     i,r
   7098      1001000ddddd0000   lds     r,i
   7099      10o0oo0dddddbooo   ldd     r,b
   7100      100!000dddddee-+   ld      r,e
   7101      10o0oo1rrrrrbooo   std     b,r
   7102      100!001rrrrree-+   st      e,r
   7103      1001010100011001   eicall
   7104      1001010000011001   eijmp
   7105 
   7106 
   7107 File: as.info,  Node: BFIN-Dependent,  Next: CR16-Dependent,  Prev: AVR-Dependent,  Up: Machine Dependencies
   7108 
   7109 9.5 Blackfin Dependent Features
   7110 ===============================
   7111 
   7112 * Menu:
   7113 
   7114 * BFIN Syntax::			BFIN Syntax
   7115 * BFIN Directives::		BFIN Directives
   7116 
   7117 
   7118 File: as.info,  Node: BFIN Syntax,  Next: BFIN Directives,  Up: BFIN-Dependent
   7119 
   7120 9.5.1 Syntax
   7121 ------------
   7122 
   7123 `Special Characters'
   7124      Assembler input is free format and may appear anywhere on the line.
   7125      One instruction may extend across multiple lines or more than one
   7126      instruction may appear on the same line.  White space (space, tab,
   7127      comments or newline) may appear anywhere between tokens.  A token
   7128      must not have embedded spaces.  Tokens include numbers, register
   7129      names, keywords, user identifiers, and also some multicharacter
   7130      special symbols like "+=", "/*" or "||".
   7131 
   7132 `Instruction Delimiting'
   7133      A semicolon must terminate every instruction.  Sometimes a complete
   7134      instruction will consist of more than one operation.  There are two
   7135      cases where this occurs.  The first is when two general operations
   7136      are combined.  Normally a comma separates the different parts, as
   7137      in
   7138 
   7139           a0= r3.h * r2.l, a1 = r3.l * r2.h ;
   7140 
   7141      The second case occurs when a general instruction is combined with
   7142      one or two memory references for joint issue.  The latter portions
   7143      are set off by a "||" token.
   7144 
   7145           a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++];
   7146 
   7147 `Register Names'
   7148      The assembler treats register names and instruction keywords in a
   7149      case insensitive manner.  User identifiers are case sensitive.
   7150      Thus, R3.l, R3.L, r3.l and r3.L are all equivalent input to the
   7151      assembler.
   7152 
   7153      Register names are reserved and may not be used as program
   7154      identifiers.
   7155 
   7156      Some operations (such as "Move Register") require a register pair.
   7157      Register pairs are always data registers and are denoted using a
   7158      colon, eg., R3:2.  The larger number must be written firsts.  Note
   7159      that the hardware only supports odd-even pairs, eg., R7:6, R5:4,
   7160      R3:2, and R1:0.
   7161 
   7162      Some instructions (such as -SP (Push Multiple)) require a group of
   7163      adjacent registers.  Adjacent registers are denoted in the syntax
   7164      by the range enclosed in parentheses and separated by a colon,
   7165      eg., (R7:3).  Again, the larger number appears first.
   7166 
   7167      Portions of a particular register may be individually specified.
   7168      This is written with a dot (".") following the register name and
   7169      then a letter denoting the desired portion.  For 32-bit registers,
   7170      ".H" denotes the most significant ("High") portion.  ".L" denotes
   7171      the least-significant portion.  The subdivisions of the 40-bit
   7172      registers are described later.
   7173 
   7174 `Accumulators'
   7175      The set of 40-bit registers A1 and A0 that normally contain data
   7176      that is being manipulated.  Each accumulator can be accessed in
   7177      four ways.
   7178 
   7179     `one 40-bit register'
   7180           The register will be referred to as A1 or A0.
   7181 
   7182     `one 32-bit register'
   7183           The registers are designated as A1.W or A0.W.
   7184 
   7185     `two 16-bit registers'
   7186           The registers are designated as A1.H, A1.L, A0.H or A0.L.
   7187 
   7188     `one 8-bit register'
   7189           The registers are designated as A1.X or A0.X for the bits that
   7190           extend beyond bit 31.
   7191 
   7192 `Data Registers'
   7193      The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7)
   7194      that normally contain data for manipulation.  These are
   7195      abbreviated as D-register or Dreg.  Data registers can be accessed
   7196      as 32-bit registers or as two independent 16-bit registers.  The
   7197      least significant 16 bits of each register is called the "low"
   7198      half and is designated with ".L" following the register name.  The
   7199      most significant 16 bits are called the "high" half and is
   7200      designated with ".H" following the name.
   7201 
   7202              R7.L, r2.h, r4.L, R0.H
   7203 
   7204 `Pointer Registers'
   7205      The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP)
   7206      that normally contain byte addresses of data structures.  These are
   7207      abbreviated as P-register or Preg.
   7208 
   7209           p2, p5, fp, sp
   7210 
   7211 `Stack Pointer SP'
   7212      The stack pointer contains the 32-bit address of the last occupied
   7213      byte location in the stack.  The stack grows by decrementing the
   7214      stack pointer.
   7215 
   7216 `Frame Pointer FP'
   7217      The frame pointer contains the 32-bit address of the previous frame
   7218      pointer in the stack.  It is located at the top of a frame.
   7219 
   7220 `Loop Top'
   7221      LT0 and LT1.  These registers contain the 32-bit address of the
   7222      top of a zero overhead loop.
   7223 
   7224 `Loop Count'
   7225      LC0 and LC1.  These registers contain the 32-bit counter of the
   7226      zero overhead loop executions.
   7227 
   7228 `Loop Bottom'
   7229      LB0 and LB1.  These registers contain the 32-bit address of the
   7230      bottom of a zero overhead loop.
   7231 
   7232 `Index Registers'
   7233      The set of 32-bit registers (I0, I1, I2, I3) that normally contain
   7234      byte addresses of data structures.  Abbreviated I-register or Ireg.
   7235 
   7236 `Modify Registers'
   7237      The set of 32-bit registers (M0, M1, M2, M3) that normally contain
   7238      offset values that are added and subracted to one of the index
   7239      registers.  Abbreviated as Mreg.
   7240 
   7241 `Length Registers'
   7242      The set of 32-bit registers (L0, L1, L2, L3) that normally contain
   7243      the length in bytes of the circular buffer.  Abbreviated as Lreg.
   7244      Clear the Lreg to disable circular addressing for the
   7245      corresponding Ireg.
   7246 
   7247 `Base Registers'
   7248      The set of 32-bit registers (B0, B1, B2, B3) that normally contain
   7249      the base address in bytes of the circular buffer.  Abbreviated as
   7250      Breg.
   7251 
   7252 `Floating Point'
   7253      The Blackfin family has no hardware floating point but the .float
   7254      directive generates ieee floating point numbers for use with
   7255      software floating point libraries.
   7256 
   7257 `Blackfin Opcodes'
   7258      For detailed information on the Blackfin machine instruction set,
   7259      see the Blackfin(r) Processor Instruction Set Reference.
   7260 
   7261 
   7262 
   7263 File: as.info,  Node: BFIN Directives,  Prev: BFIN Syntax,  Up: BFIN-Dependent
   7264 
   7265 9.5.2 Directives
   7266 ----------------
   7267 
   7268 The following directives are provided for compatibility with the VDSP
   7269 assembler.
   7270 
   7271 `.byte2'
   7272      Initializes a four byte data object.
   7273 
   7274 `.byte4'
   7275      Initializes a two byte data object.
   7276 
   7277 `.db'
   7278      TBD
   7279 
   7280 `.dd'
   7281      TBD
   7282 
   7283 `.dw'
   7284      TBD
   7285 
   7286 `.var'
   7287      Define and initialize a 32 bit data object.
   7288 
   7289 
   7290 File: as.info,  Node: CR16-Dependent,  Next: CRIS-Dependent,  Prev: BFIN-Dependent,  Up: Machine Dependencies
   7291 
   7292 9.6 CR16 Dependent Features
   7293 ===========================
   7294 
   7295 * Menu:
   7296 
   7297 * CR16 Operand Qualifiers::     CR16 Machine Operand Qualifiers
   7298 
   7299 
   7300 File: as.info,  Node: CR16 Operand Qualifiers,  Up: CR16-Dependent
   7301 
   7302 9.6.1 CR16 Operand Qualifiers
   7303 -----------------------------
   7304 
   7305 The National Semiconductor CR16 target of `as' has a few machine
   7306 dependent operand qualifiers.
   7307 
   7308    Operand expression type qualifier is an optional field in the
   7309 instruction operand, to determines the type of the expression field of
   7310 an operand. The `@' is required. CR16 architecture uses one of the
   7311 following expression qualifiers:
   7312 
   7313 `s'
   7314      - `Specifies expression operand type as small'
   7315 
   7316 `m'
   7317      - `Specifies expression operand type as medium'
   7318 
   7319 `l'
   7320      - `Specifies expression operand type as large'
   7321 
   7322 `c'
   7323      - `Specifies the CR16 Assembler generates a relocation entry for
   7324      the operand, where pc has implied bit, the expression is adjusted
   7325      accordingly. The linker uses the relocation entry to update the
   7326      operand address at link time.'
   7327 
   7328    CR16 target operand qualifiers and its size (in bits):
   7329 
   7330 `Immediate Operand'
   7331      - s --- 4 bits
   7332 
   7333 `'
   7334      - m --- 16 bits, for movb and movw instructions.
   7335 
   7336 `'
   7337      - m --- 20 bits, movd instructions.
   7338 
   7339 `'
   7340      - l --- 32 bits
   7341 
   7342 `Absolute Operand'
   7343      - s --- Illegal specifier for this operand.
   7344 
   7345 `'
   7346      - m --- 20 bits, movd instructions.
   7347 
   7348 `Displacement Operand'
   7349      - s --- 8 bits
   7350 
   7351 `'
   7352      - m --- 16 bits
   7353 
   7354 `'
   7355      - l --- 24 bits
   7356 
   7357    For example:
   7358      1   `movw $_myfun@c,r1'
   7359 
   7360          This loads the address of _myfun, shifted right by 1, into r1.
   7361 
   7362      2   `movd $_myfun@c,(r2,r1)'
   7363 
   7364          This loads the address of _myfun, shifted right by 1, into register-pair r2-r1.
   7365 
   7366      3   `_myfun_ptr:'
   7367          `.long _myfun@c'
   7368          `loadd _myfun_ptr, (r1,r0)'
   7369          `jal (r1,r0)'
   7370 
   7371          This .long directive, the address of _myfunc, shifted right by 1 at link time.
   7372 
   7373 
   7374 File: as.info,  Node: CRIS-Dependent,  Next: D10V-Dependent,  Prev: CR16-Dependent,  Up: Machine Dependencies
   7375 
   7376 9.7 CRIS Dependent Features
   7377 ===========================
   7378 
   7379 * Menu:
   7380 
   7381 * CRIS-Opts::              Command-line Options
   7382 * CRIS-Expand::            Instruction expansion
   7383 * CRIS-Symbols::           Symbols
   7384 * CRIS-Syntax::            Syntax
   7385 
   7386 
   7387 File: as.info,  Node: CRIS-Opts,  Next: CRIS-Expand,  Up: CRIS-Dependent
   7388 
   7389 9.7.1 Command-line Options
   7390 --------------------------
   7391 
   7392 The CRIS version of `as' has these machine-dependent command-line
   7393 options.
   7394 
   7395    The format of the generated object files can be either ELF or a.out,
   7396 specified by the command-line options `--emulation=crisaout' and
   7397 `--emulation=criself'.  The default is ELF (criself), unless `as' has
   7398 been configured specifically for a.out by using the configuration name
   7399 `cris-axis-aout'.
   7400 
   7401    There are two different link-incompatible ELF object file variants
   7402 for CRIS, for use in environments where symbols are expected to be
   7403 prefixed by a leading `_' character and for environments without such a
   7404 symbol prefix.  The variant used for GNU/Linux port has no symbol
   7405 prefix.  Which variant to produce is specified by either of the options
   7406 `--underscore' and `--no-underscore'.  The default is `--underscore'.
   7407 Since symbols in CRIS a.out objects are expected to have a `_' prefix,
   7408 specifying `--no-underscore' when generating a.out objects is an error.
   7409 Besides the object format difference, the effect of this option is to
   7410 parse register names differently (*note crisnous::).  The
   7411 `--no-underscore' option makes a `$' register prefix mandatory.
   7412 
   7413    The option `--pic' must be passed to `as' in order to recognize the
   7414 symbol syntax used for ELF (SVR4 PIC) position-independent-code (*note
   7415 crispic::).  This will also affect expansion of instructions.  The
   7416 expansion with `--pic' will use PC-relative rather than (slightly
   7417 faster) absolute addresses in those expansions.
   7418 
   7419    The option `--march=ARCHITECTURE' specifies the recognized
   7420 instruction set and recognized register names.  It also controls the
   7421 architecture type of the object file.  Valid values for ARCHITECTURE
   7422 are:
   7423 `v0_v10'
   7424      All instructions and register names for any architecture variant
   7425      in the set v0...v10 are recognized.  This is the default if the
   7426      target is configured as cris-*.
   7427 
   7428 `v10'
   7429      Only instructions and register names for CRIS v10 (as found in
   7430      ETRAX 100 LX) are recognized.  This is the default if the target
   7431      is configured as crisv10-*.
   7432 
   7433 `v32'
   7434      Only instructions and register names for CRIS v32 (code name
   7435      Guinness) are recognized.  This is the default if the target is
   7436      configured as crisv32-*.  This value implies `--no-mul-bug-abort'.
   7437      (A subsequent `--mul-bug-abort' will turn it back on.)
   7438 
   7439 `common_v10_v32'
   7440      Only instructions with register names and addressing modes with
   7441      opcodes common to the v10 and v32 are recognized.
   7442 
   7443    When `-N' is specified, `as' will emit a warning when a 16-bit
   7444 branch instruction is expanded into a 32-bit multiple-instruction
   7445 construct (*note CRIS-Expand::).
   7446 
   7447    Some versions of the CRIS v10, for example in the Etrax 100 LX,
   7448 contain a bug that causes destabilizing memory accesses when a multiply
   7449 instruction is executed with certain values in the first operand just
   7450 before a cache-miss.  When the `--mul-bug-abort' command line option is
   7451 active (the default value), `as' will refuse to assemble a file
   7452 containing a multiply instruction at a dangerous offset, one that could
   7453 be the last on a cache-line, or is in a section with insufficient
   7454 alignment.  This placement checking does not catch any case where the
   7455 multiply instruction is dangerously placed because it is located in a
   7456 delay-slot.  The `--mul-bug-abort' command line option turns off the
   7457 checking.
   7458 
   7459 
   7460 File: as.info,  Node: CRIS-Expand,  Next: CRIS-Symbols,  Prev: CRIS-Opts,  Up: CRIS-Dependent
   7461 
   7462 9.7.2 Instruction expansion
   7463 ---------------------------
   7464 
   7465 `as' will silently choose an instruction that fits the operand size for
   7466 `[register+constant]' operands.  For example, the offset `127' in
   7467 `move.d [r3+127],r4' fits in an instruction using a signed-byte offset.
   7468 Similarly, `move.d [r2+32767],r1' will generate an instruction using a
   7469 16-bit offset.  For symbolic expressions and constants that do not fit
   7470 in 16 bits including the sign bit, a 32-bit offset is generated.
   7471 
   7472    For branches, `as' will expand from a 16-bit branch instruction into
   7473 a sequence of instructions that can reach a full 32-bit address.  Since
   7474 this does not correspond to a single instruction, such expansions can
   7475 optionally be warned about.  *Note CRIS-Opts::.
   7476 
   7477    If the operand is found to fit the range, a `lapc' mnemonic will
   7478 translate to a `lapcq' instruction.  Use `lapc.d' to force the 32-bit
   7479 `lapc' instruction.
   7480 
   7481    Similarly, the `addo' mnemonic will translate to the shortest
   7482 fitting instruction of `addoq', `addo.w' and `addo.d', when used with a
   7483 operand that is a constant known at assembly time.
   7484 
   7485 
   7486 File: as.info,  Node: CRIS-Symbols,  Next: CRIS-Syntax,  Prev: CRIS-Expand,  Up: CRIS-Dependent
   7487 
   7488 9.7.3 Symbols
   7489 -------------
   7490 
   7491 Some symbols are defined by the assembler.  They're intended to be used
   7492 in conditional assembly, for example:
   7493       .if ..asm.arch.cris.v32
   7494       CODE FOR CRIS V32
   7495       .elseif ..asm.arch.cris.common_v10_v32
   7496       CODE COMMON TO CRIS V32 AND CRIS V10
   7497       .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10
   7498       CODE FOR V10
   7499       .else
   7500       .error "Code needs to be added here."
   7501       .endif
   7502 
   7503    These symbols are defined in the assembler, reflecting command-line
   7504 options, either when specified or the default.  They are always
   7505 defined, to 0 or 1.
   7506 `..asm.arch.cris.any_v0_v10'
   7507      This symbol is non-zero when `--march=v0_v10' is specified or the
   7508      default.
   7509 
   7510 `..asm.arch.cris.common_v10_v32'
   7511      Set according to the option `--march=common_v10_v32'.
   7512 
   7513 `..asm.arch.cris.v10'
   7514      Reflects the option `--march=v10'.
   7515 
   7516 `..asm.arch.cris.v32'
   7517      Corresponds to `--march=v10'.
   7518 
   7519    Speaking of symbols, when a symbol is used in code, it can have a
   7520 suffix modifying its value for use in position-independent code. *Note
   7521 CRIS-Pic::.
   7522 
   7523 
   7524 File: as.info,  Node: CRIS-Syntax,  Prev: CRIS-Symbols,  Up: CRIS-Dependent
   7525 
   7526 9.7.4 Syntax
   7527 ------------
   7528 
   7529 There are different aspects of the CRIS assembly syntax.
   7530 
   7531 * Menu:
   7532 
   7533 * CRIS-Chars::		        Special Characters
   7534 * CRIS-Pic::			Position-Independent Code Symbols
   7535 * CRIS-Regs::			Register Names
   7536 * CRIS-Pseudos::		Assembler Directives
   7537 
   7538 
   7539 File: as.info,  Node: CRIS-Chars,  Next: CRIS-Pic,  Up: CRIS-Syntax
   7540 
   7541 9.7.4.1 Special Characters
   7542 ..........................
   7543 
   7544 The character `#' is a line comment character.  It starts a comment if
   7545 and only if it is placed at the beginning of a line.
   7546 
   7547    A `;' character starts a comment anywhere on the line, causing all
   7548 characters up to the end of the line to be ignored.
   7549 
   7550    A `@' character is handled as a line separator equivalent to a
   7551 logical new-line character (except in a comment), so separate
   7552 instructions can be specified on a single line.
   7553 
   7554 
   7555 File: as.info,  Node: CRIS-Pic,  Next: CRIS-Regs,  Prev: CRIS-Chars,  Up: CRIS-Syntax
   7556 
   7557 9.7.4.2 Symbols in position-independent code
   7558 ............................................
   7559 
   7560 When generating position-independent code (SVR4 PIC) for use in
   7561 cris-axis-linux-gnu or crisv32-axis-linux-gnu shared libraries, symbol
   7562 suffixes are used to specify what kind of run-time symbol lookup will
   7563 be used, expressed in the object as different _relocation types_.
   7564 Usually, all absolute symbol values must be located in a table, the
   7565 _global offset table_, leaving the code position-independent;
   7566 independent of values of global symbols and independent of the address
   7567 of the code.  The suffix modifies the value of the symbol, into for
   7568 example an index into the global offset table where the real symbol
   7569 value is entered, or a PC-relative value, or a value relative to the
   7570 start of the global offset table.  All symbol suffixes start with the
   7571 character `:' (omitted in the list below).  Every symbol use in code or
   7572 a read-only section must therefore have a PIC suffix to enable a useful
   7573 shared library to be created.  Usually, these constructs must not be
   7574 used with an additive constant offset as is usually allowed, i.e. no 4
   7575 as in `symbol + 4' is allowed.  This restriction is checked at
   7576 link-time, not at assembly-time.
   7577 
   7578 `GOT'
   7579      Attaching this suffix to a symbol in an instruction causes the
   7580      symbol to be entered into the global offset table.  The value is a
   7581      32-bit index for that symbol into the global offset table.  The
   7582      name of the corresponding relocation is `R_CRIS_32_GOT'.  Example:
   7583      `move.d [$r0+extsym:GOT],$r9'
   7584 
   7585 `GOT16'
   7586      Same as for `GOT', but the value is a 16-bit index into the global
   7587      offset table.  The corresponding relocation is `R_CRIS_16_GOT'.
   7588      Example: `move.d [$r0+asymbol:GOT16],$r10'
   7589 
   7590 `PLT'
   7591      This suffix is used for function symbols.  It causes a _procedure
   7592      linkage table_, an array of code stubs, to be created at the time
   7593      the shared object is created or linked against, together with a
   7594      global offset table entry.  The value is a pc-relative offset to
   7595      the corresponding stub code in the procedure linkage table.  This
   7596      arrangement causes the run-time symbol resolver to be called to
   7597      look up and set the value of the symbol the first time the
   7598      function is called (at latest; depending environment variables).
   7599      It is only safe to leave the symbol unresolved this way if all
   7600      references are function calls.  The name of the relocation is
   7601      `R_CRIS_32_PLT_PCREL'.  Example: `add.d fnname:PLT,$pc'
   7602 
   7603 `PLTG'
   7604      Like PLT, but the value is relative to the beginning of the global
   7605      offset table.  The relocation is `R_CRIS_32_PLT_GOTREL'.  Example:
   7606      `move.d fnname:PLTG,$r3'
   7607 
   7608 `GOTPLT'
   7609      Similar to `PLT', but the value of the symbol is a 32-bit index
   7610      into the global offset table.  This is somewhat of a mix between
   7611      the effect of the `GOT' and the `PLT' suffix; the difference to
   7612      `GOT' is that there will be a procedure linkage table entry
   7613      created, and that the symbol is assumed to be a function entry and
   7614      will be resolved by the run-time resolver as with `PLT'.  The
   7615      relocation is `R_CRIS_32_GOTPLT'.  Example: `jsr
   7616      [$r0+fnname:GOTPLT]'
   7617 
   7618 `GOTPLT16'
   7619      A variant of `GOTPLT' giving a 16-bit value.  Its relocation name
   7620      is `R_CRIS_16_GOTPLT'.  Example: `jsr [$r0+fnname:GOTPLT16]'
   7621 
   7622 `GOTOFF'
   7623      This suffix must only be attached to a local symbol, but may be
   7624      used in an expression adding an offset.  The value is the address
   7625      of the symbol relative to the start of the global offset table.
   7626      The relocation name is `R_CRIS_32_GOTREL'.  Example: `move.d
   7627      [$r0+localsym:GOTOFF],r3'
   7628 
   7629 
   7630 File: as.info,  Node: CRIS-Regs,  Next: CRIS-Pseudos,  Prev: CRIS-Pic,  Up: CRIS-Syntax
   7631 
   7632 9.7.4.3 Register names
   7633 ......................
   7634 
   7635 A `$' character may always prefix a general or special register name in
   7636 an instruction operand but is mandatory when the option
   7637 `--no-underscore' is specified or when the `.syntax register_prefix'
   7638 directive is in effect (*note crisnous::).  Register names are
   7639 case-insensitive.
   7640 
   7641 
   7642 File: as.info,  Node: CRIS-Pseudos,  Prev: CRIS-Regs,  Up: CRIS-Syntax
   7643 
   7644 9.7.4.4 Assembler Directives
   7645 ............................
   7646 
   7647 There are a few CRIS-specific pseudo-directives in addition to the
   7648 generic ones.  *Note Pseudo Ops::.  Constants emitted by
   7649 pseudo-directives are in little-endian order for CRIS.  There is no
   7650 support for floating-point-specific directives for CRIS.
   7651 
   7652 `.dword EXPRESSIONS'
   7653      The `.dword' directive is a synonym for `.int', expecting zero or
   7654      more EXPRESSIONS, separated by commas.  For each expression, a
   7655      32-bit little-endian constant is emitted.
   7656 
   7657 `.syntax ARGUMENT'
   7658      The `.syntax' directive takes as ARGUMENT one of the following
   7659      case-sensitive choices.
   7660 
   7661     `no_register_prefix'
   7662           The `.syntax no_register_prefix' directive makes a `$'
   7663           character prefix on all registers optional.  It overrides a
   7664           previous setting, including the corresponding effect of the
   7665           option `--no-underscore'.  If this directive is used when
   7666           ordinary symbols do not have a `_' character prefix, care
   7667           must be taken to avoid ambiguities whether an operand is a
   7668           register or a symbol; using symbols with names the same as
   7669           general or special registers then invoke undefined behavior.
   7670 
   7671     `register_prefix'
   7672           This directive makes a `$' character prefix on all registers
   7673           mandatory.  It overrides a previous setting, including the
   7674           corresponding effect of the option `--underscore'.
   7675 
   7676     `leading_underscore'
   7677           This is an assertion directive, emitting an error if the
   7678           `--no-underscore' option is in effect.
   7679 
   7680     `no_leading_underscore'
   7681           This is the opposite of the `.syntax leading_underscore'
   7682           directive and emits an error if the option `--underscore' is
   7683           in effect.
   7684 
   7685 `.arch ARGUMENT'
   7686      This is an assertion directive, giving an error if the specified
   7687      ARGUMENT is not the same as the specified or default value for the
   7688      `--march=ARCHITECTURE' option (*note march-option::).
   7689 
   7690 
   7691 
   7692 File: as.info,  Node: D10V-Dependent,  Next: D30V-Dependent,  Prev: CRIS-Dependent,  Up: Machine Dependencies
   7693 
   7694 9.8 D10V Dependent Features
   7695 ===========================
   7696 
   7697 * Menu:
   7698 
   7699 * D10V-Opts::                   D10V Options
   7700 * D10V-Syntax::                 Syntax
   7701 * D10V-Float::                  Floating Point
   7702 * D10V-Opcodes::                Opcodes
   7703 
   7704 
   7705 File: as.info,  Node: D10V-Opts,  Next: D10V-Syntax,  Up: D10V-Dependent
   7706 
   7707 9.8.1 D10V Options
   7708 ------------------
   7709 
   7710 The Mitsubishi D10V version of `as' has a few machine dependent options.
   7711 
   7712 `-O'
   7713      The D10V can often execute two sub-instructions in parallel. When
   7714      this option is used, `as' will attempt to optimize its output by
   7715      detecting when instructions can be executed in parallel.
   7716 
   7717 `--nowarnswap'
   7718      To optimize execution performance, `as' will sometimes swap the
   7719      order of instructions. Normally this generates a warning. When
   7720      this option is used, no warning will be generated when
   7721      instructions are swapped.
   7722 
   7723 `--gstabs-packing'
   7724 
   7725 `--no-gstabs-packing'
   7726      `as' packs adjacent short instructions into a single packed
   7727      instruction. `--no-gstabs-packing' turns instruction packing off if
   7728      `--gstabs' is specified as well; `--gstabs-packing' (the default)
   7729      turns instruction packing on even when `--gstabs' is specified.
   7730 
   7731 
   7732 File: as.info,  Node: D10V-Syntax,  Next: D10V-Float,  Prev: D10V-Opts,  Up: D10V-Dependent
   7733 
   7734 9.8.2 Syntax
   7735 ------------
   7736 
   7737 The D10V syntax is based on the syntax in Mitsubishi's D10V
   7738 architecture manual.  The differences are detailed below.
   7739 
   7740 * Menu:
   7741 
   7742 * D10V-Size::                 Size Modifiers
   7743 * D10V-Subs::                 Sub-Instructions
   7744 * D10V-Chars::                Special Characters
   7745 * D10V-Regs::                 Register Names
   7746 * D10V-Addressing::           Addressing Modes
   7747 * D10V-Word::                 @WORD Modifier
   7748 
   7749 
   7750 File: as.info,  Node: D10V-Size,  Next: D10V-Subs,  Up: D10V-Syntax
   7751 
   7752 9.8.2.1 Size Modifiers
   7753 ......................
   7754 
   7755 The D10V version of `as' uses the instruction names in the D10V
   7756 Architecture Manual.  However, the names in the manual are sometimes
   7757 ambiguous.  There are instruction names that can assemble to a short or
   7758 long form opcode.  How does the assembler pick the correct form?  `as'
   7759 will always pick the smallest form if it can.  When dealing with a
   7760 symbol that is not defined yet when a line is being assembled, it will
   7761 always use the long form.  If you need to force the assembler to use
   7762 either the short or long form of the instruction, you can append either
   7763 `.s' (short) or `.l' (long) to it.  For example, if you are writing an
   7764 assembly program and you want to do a branch to a symbol that is
   7765 defined later in your program, you can write `bra.s   foo'.  Objdump
   7766 and GDB will always append `.s' or `.l' to instructions which have both
   7767 short and long forms.
   7768 
   7769 
   7770 File: as.info,  Node: D10V-Subs,  Next: D10V-Chars,  Prev: D10V-Size,  Up: D10V-Syntax
   7771 
   7772 9.8.2.2 Sub-Instructions
   7773 ........................
   7774 
   7775 The D10V assembler takes as input a series of instructions, either
   7776 one-per-line, or in the special two-per-line format described in the
   7777 next section.  Some of these instructions will be short-form or
   7778 sub-instructions.  These sub-instructions can be packed into a single
   7779 instruction.  The assembler will do this automatically.  It will also
   7780 detect when it should not pack instructions.  For example, when a label
   7781 is defined, the next instruction will never be packaged with the
   7782 previous one.  Whenever a branch and link instruction is called, it
   7783 will not be packaged with the next instruction so the return address
   7784 will be valid.  Nops are automatically inserted when necessary.
   7785 
   7786    If you do not want the assembler automatically making these
   7787 decisions, you can control the packaging and execution type (parallel
   7788 or sequential) with the special execution symbols described in the next
   7789 section.
   7790 
   7791 
   7792 File: as.info,  Node: D10V-Chars,  Next: D10V-Regs,  Prev: D10V-Subs,  Up: D10V-Syntax
   7793 
   7794 9.8.2.3 Special Characters
   7795 ..........................
   7796 
   7797 `;' and `#' are the line comment characters.  Sub-instructions may be
   7798 executed in order, in reverse-order, or in parallel.  Instructions
   7799 listed in the standard one-per-line format will be executed
   7800 sequentially.  To specify the executing order, use the following
   7801 symbols:
   7802 `->'
   7803      Sequential with instruction on the left first.
   7804 
   7805 `<-'
   7806      Sequential with instruction on the right first.
   7807 
   7808 `||'
   7809      Parallel
   7810    The D10V syntax allows either one instruction per line, one
   7811 instruction per line with the execution symbol, or two instructions per
   7812 line.  For example
   7813 `abs       a1      ->      abs     r0'
   7814      Execute these sequentially.  The instruction on the right is in
   7815      the right container and is executed second.
   7816 
   7817 `abs       r0      <-      abs     a1'
   7818      Execute these reverse-sequentially.  The instruction on the right
   7819      is in the right container, and is executed first.
   7820 
   7821 `ld2w    r2,@r8+         ||      mac     a0,r0,r7'
   7822      Execute these in parallel.
   7823 
   7824 `ld2w    r2,@r8+         ||'
   7825 `mac     a0,r0,r7'
   7826      Two-line format. Execute these in parallel.
   7827 
   7828 `ld2w    r2,@r8+'
   7829 `mac     a0,r0,r7'
   7830      Two-line format. Execute these sequentially.  Assembler will put
   7831      them in the proper containers.
   7832 
   7833 `ld2w    r2,@r8+         ->'
   7834 `mac     a0,r0,r7'
   7835      Two-line format. Execute these sequentially.  Same as above but
   7836      second instruction will always go into right container.
   7837    Since `$' has no special meaning, you may use it in symbol names.
   7838 
   7839 
   7840 File: as.info,  Node: D10V-Regs,  Next: D10V-Addressing,  Prev: D10V-Chars,  Up: D10V-Syntax
   7841 
   7842 9.8.2.4 Register Names
   7843 ......................
   7844 
   7845 You can use the predefined symbols `r0' through `r15' to refer to the
   7846 D10V registers.  You can also use `sp' as an alias for `r15'.  The
   7847 accumulators are `a0' and `a1'.  There are special register-pair names
   7848 that may optionally be used in opcodes that require even-numbered
   7849 registers. Register names are not case sensitive.
   7850 
   7851    Register Pairs
   7852 `r0-r1'
   7853 
   7854 `r2-r3'
   7855 
   7856 `r4-r5'
   7857 
   7858 `r6-r7'
   7859 
   7860 `r8-r9'
   7861 
   7862 `r10-r11'
   7863 
   7864 `r12-r13'
   7865 
   7866 `r14-r15'
   7867 
   7868    The D10V also has predefined symbols for these control registers and
   7869 status bits:
   7870 `psw'
   7871      Processor Status Word
   7872 
   7873 `bpsw'
   7874      Backup Processor Status Word
   7875 
   7876 `pc'
   7877      Program Counter
   7878 
   7879 `bpc'
   7880      Backup Program Counter
   7881 
   7882 `rpt_c'
   7883      Repeat Count
   7884 
   7885 `rpt_s'
   7886      Repeat Start address
   7887 
   7888 `rpt_e'
   7889      Repeat End address
   7890 
   7891 `mod_s'
   7892      Modulo Start address
   7893 
   7894 `mod_e'
   7895      Modulo End address
   7896 
   7897 `iba'
   7898      Instruction Break Address
   7899 
   7900 `f0'
   7901      Flag 0
   7902 
   7903 `f1'
   7904      Flag 1
   7905 
   7906 `c'
   7907      Carry flag
   7908 
   7909 
   7910 File: as.info,  Node: D10V-Addressing,  Next: D10V-Word,  Prev: D10V-Regs,  Up: D10V-Syntax
   7911 
   7912 9.8.2.5 Addressing Modes
   7913 ........................
   7914 
   7915 `as' understands the following addressing modes for the D10V.  `RN' in
   7916 the following refers to any of the numbered registers, but _not_ the
   7917 control registers.
   7918 `RN'
   7919      Register direct
   7920 
   7921 `@RN'
   7922      Register indirect
   7923 
   7924 `@RN+'
   7925      Register indirect with post-increment
   7926 
   7927 `@RN-'
   7928      Register indirect with post-decrement
   7929 
   7930 `@-SP'
   7931      Register indirect with pre-decrement
   7932 
   7933 `@(DISP, RN)'
   7934      Register indirect with displacement
   7935 
   7936 `ADDR'
   7937      PC relative address (for branch or rep).
   7938 
   7939 `#IMM'
   7940      Immediate data (the `#' is optional and ignored)
   7941 
   7942 
   7943 File: as.info,  Node: D10V-Word,  Prev: D10V-Addressing,  Up: D10V-Syntax
   7944 
   7945 9.8.2.6 @WORD Modifier
   7946 ......................
   7947 
   7948 Any symbol followed by `@word' will be replaced by the symbol's value
   7949 shifted right by 2.  This is used in situations such as loading a
   7950 register with the address of a function (or any other code fragment).
   7951 For example, if you want to load a register with the location of the
   7952 function `main' then jump to that function, you could do it as follows:
   7953      ldi     r2, main@word
   7954      jmp     r2
   7955 
   7956 
   7957 File: as.info,  Node: D10V-Float,  Next: D10V-Opcodes,  Prev: D10V-Syntax,  Up: D10V-Dependent
   7958 
   7959 9.8.3 Floating Point
   7960 --------------------
   7961 
   7962 The D10V has no hardware floating point, but the `.float' and `.double'
   7963 directives generates IEEE floating-point numbers for compatibility with
   7964 other development tools.
   7965 
   7966 
   7967 File: as.info,  Node: D10V-Opcodes,  Prev: D10V-Float,  Up: D10V-Dependent
   7968 
   7969 9.8.4 Opcodes
   7970 -------------
   7971 
   7972 For detailed information on the D10V machine instruction set, see `D10V
   7973 Architecture: A VLIW Microprocessor for Multimedia Applications'
   7974 (Mitsubishi Electric Corp.).  `as' implements all the standard D10V
   7975 opcodes.  The only changes are those described in the section on size
   7976 modifiers
   7977 
   7978 
   7979 File: as.info,  Node: D30V-Dependent,  Next: H8/300-Dependent,  Prev: D10V-Dependent,  Up: Machine Dependencies
   7980 
   7981 9.9 D30V Dependent Features
   7982 ===========================
   7983 
   7984 * Menu:
   7985 
   7986 * D30V-Opts::                   D30V Options
   7987 * D30V-Syntax::                 Syntax
   7988 * D30V-Float::                  Floating Point
   7989 * D30V-Opcodes::                Opcodes
   7990 
   7991 
   7992 File: as.info,  Node: D30V-Opts,  Next: D30V-Syntax,  Up: D30V-Dependent
   7993 
   7994 9.9.1 D30V Options
   7995 ------------------
   7996 
   7997 The Mitsubishi D30V version of `as' has a few machine dependent options.
   7998 
   7999 `-O'
   8000      The D30V can often execute two sub-instructions in parallel. When
   8001      this option is used, `as' will attempt to optimize its output by
   8002      detecting when instructions can be executed in parallel.
   8003 
   8004 `-n'
   8005      When this option is used, `as' will issue a warning every time it
   8006      adds a nop instruction.
   8007 
   8008 `-N'
   8009      When this option is used, `as' will issue a warning if it needs to
   8010      insert a nop after a 32-bit multiply before a load or 16-bit
   8011      multiply instruction.
   8012 
   8013 
   8014 File: as.info,  Node: D30V-Syntax,  Next: D30V-Float,  Prev: D30V-Opts,  Up: D30V-Dependent
   8015 
   8016 9.9.2 Syntax
   8017 ------------
   8018 
   8019 The D30V syntax is based on the syntax in Mitsubishi's D30V
   8020 architecture manual.  The differences are detailed below.
   8021 
   8022 * Menu:
   8023 
   8024 * D30V-Size::                 Size Modifiers
   8025 * D30V-Subs::                 Sub-Instructions
   8026 * D30V-Chars::                Special Characters
   8027 * D30V-Guarded::              Guarded Execution
   8028 * D30V-Regs::                 Register Names
   8029 * D30V-Addressing::           Addressing Modes
   8030 
   8031 
   8032 File: as.info,  Node: D30V-Size,  Next: D30V-Subs,  Up: D30V-Syntax
   8033 
   8034 9.9.2.1 Size Modifiers
   8035 ......................
   8036 
   8037 The D30V version of `as' uses the instruction names in the D30V
   8038 Architecture Manual.  However, the names in the manual are sometimes
   8039 ambiguous.  There are instruction names that can assemble to a short or
   8040 long form opcode.  How does the assembler pick the correct form?  `as'
   8041 will always pick the smallest form if it can.  When dealing with a
   8042 symbol that is not defined yet when a line is being assembled, it will
   8043 always use the long form.  If you need to force the assembler to use
   8044 either the short or long form of the instruction, you can append either
   8045 `.s' (short) or `.l' (long) to it.  For example, if you are writing an
   8046 assembly program and you want to do a branch to a symbol that is
   8047 defined later in your program, you can write `bra.s foo'.  Objdump and
   8048 GDB will always append `.s' or `.l' to instructions which have both
   8049 short and long forms.
   8050 
   8051 
   8052 File: as.info,  Node: D30V-Subs,  Next: D30V-Chars,  Prev: D30V-Size,  Up: D30V-Syntax
   8053 
   8054 9.9.2.2 Sub-Instructions
   8055 ........................
   8056 
   8057 The D30V assembler takes as input a series of instructions, either
   8058 one-per-line, or in the special two-per-line format described in the
   8059 next section.  Some of these instructions will be short-form or
   8060 sub-instructions.  These sub-instructions can be packed into a single
   8061 instruction.  The assembler will do this automatically.  It will also
   8062 detect when it should not pack instructions.  For example, when a label
   8063 is defined, the next instruction will never be packaged with the
   8064 previous one.  Whenever a branch and link instruction is called, it
   8065 will not be packaged with the next instruction so the return address
   8066 will be valid.  Nops are automatically inserted when necessary.
   8067 
   8068    If you do not want the assembler automatically making these
   8069 decisions, you can control the packaging and execution type (parallel
   8070 or sequential) with the special execution symbols described in the next
   8071 section.
   8072 
   8073 
   8074 File: as.info,  Node: D30V-Chars,  Next: D30V-Guarded,  Prev: D30V-Subs,  Up: D30V-Syntax
   8075 
   8076 9.9.2.3 Special Characters
   8077 ..........................
   8078 
   8079 `;' and `#' are the line comment characters.  Sub-instructions may be
   8080 executed in order, in reverse-order, or in parallel.  Instructions
   8081 listed in the standard one-per-line format will be executed
   8082 sequentially unless you use the `-O' option.
   8083 
   8084    To specify the executing order, use the following symbols:
   8085 `->'
   8086      Sequential with instruction on the left first.
   8087 
   8088 `<-'
   8089      Sequential with instruction on the right first.
   8090 
   8091 `||'
   8092      Parallel
   8093 
   8094    The D30V syntax allows either one instruction per line, one
   8095 instruction per line with the execution symbol, or two instructions per
   8096 line.  For example
   8097 `abs r2,r3 -> abs r4,r5'
   8098      Execute these sequentially.  The instruction on the right is in
   8099      the right container and is executed second.
   8100 
   8101 `abs r2,r3 <- abs r4,r5'
   8102      Execute these reverse-sequentially.  The instruction on the right
   8103      is in the right container, and is executed first.
   8104 
   8105 `abs r2,r3 || abs r4,r5'
   8106      Execute these in parallel.
   8107 
   8108 `ldw r2,@(r3,r4) ||'
   8109 `mulx r6,r8,r9'
   8110      Two-line format. Execute these in parallel.
   8111 
   8112 `mulx a0,r8,r9'
   8113 `stw r2,@(r3,r4)'
   8114      Two-line format. Execute these sequentially unless `-O' option is
   8115      used.  If the `-O' option is used, the assembler will determine if
   8116      the instructions could be done in parallel (the above two
   8117      instructions can be done in parallel), and if so, emit them as
   8118      parallel instructions.  The assembler will put them in the proper
   8119      containers.  In the above example, the assembler will put the
   8120      `stw' instruction in left container and the `mulx' instruction in
   8121      the right container.
   8122 
   8123 `stw r2,@(r3,r4) ->'
   8124 `mulx a0,r8,r9'
   8125      Two-line format.  Execute the `stw' instruction followed by the
   8126      `mulx' instruction sequentially.  The first instruction goes in the
   8127      left container and the second instruction goes into right
   8128      container.  The assembler will give an error if the machine
   8129      ordering constraints are violated.
   8130 
   8131 `stw r2,@(r3,r4) <-'
   8132 `mulx a0,r8,r9'
   8133      Same as previous example, except that the `mulx' instruction is
   8134      executed before the `stw' instruction.
   8135 
   8136    Since `$' has no special meaning, you may use it in symbol names.
   8137 
   8138 
   8139 File: as.info,  Node: D30V-Guarded,  Next: D30V-Regs,  Prev: D30V-Chars,  Up: D30V-Syntax
   8140 
   8141 9.9.2.4 Guarded Execution
   8142 .........................
   8143 
   8144 `as' supports the full range of guarded execution directives for each
   8145 instruction.  Just append the directive after the instruction proper.
   8146 The directives are:
   8147 
   8148 `/tx'
   8149      Execute the instruction if flag f0 is true.
   8150 
   8151 `/fx'
   8152      Execute the instruction if flag f0 is false.
   8153 
   8154 `/xt'
   8155      Execute the instruction if flag f1 is true.
   8156 
   8157 `/xf'
   8158      Execute the instruction if flag f1 is false.
   8159 
   8160 `/tt'
   8161      Execute the instruction if both flags f0 and f1 are true.
   8162 
   8163 `/tf'
   8164      Execute the instruction if flag f0 is true and flag f1 is false.
   8165 
   8166 
   8167 File: as.info,  Node: D30V-Regs,  Next: D30V-Addressing,  Prev: D30V-Guarded,  Up: D30V-Syntax
   8168 
   8169 9.9.2.5 Register Names
   8170 ......................
   8171 
   8172 You can use the predefined symbols `r0' through `r63' to refer to the
   8173 D30V registers.  You can also use `sp' as an alias for `r63' and `link'
   8174 as an alias for `r62'.  The accumulators are `a0' and `a1'.
   8175 
   8176    The D30V also has predefined symbols for these control registers and
   8177 status bits:
   8178 `psw'
   8179      Processor Status Word
   8180 
   8181 `bpsw'
   8182      Backup Processor Status Word
   8183 
   8184 `pc'
   8185      Program Counter
   8186 
   8187 `bpc'
   8188      Backup Program Counter
   8189 
   8190 `rpt_c'
   8191      Repeat Count
   8192 
   8193 `rpt_s'
   8194      Repeat Start address
   8195 
   8196 `rpt_e'
   8197      Repeat End address
   8198 
   8199 `mod_s'
   8200      Modulo Start address
   8201 
   8202 `mod_e'
   8203      Modulo End address
   8204 
   8205 `iba'
   8206      Instruction Break Address
   8207 
   8208 `f0'
   8209      Flag 0
   8210 
   8211 `f1'
   8212      Flag 1
   8213 
   8214 `f2'
   8215      Flag 2
   8216 
   8217 `f3'
   8218      Flag 3
   8219 
   8220 `f4'
   8221      Flag 4
   8222 
   8223 `f5'
   8224      Flag 5
   8225 
   8226 `f6'
   8227      Flag 6
   8228 
   8229 `f7'
   8230      Flag 7
   8231 
   8232 `s'
   8233      Same as flag 4 (saturation flag)
   8234 
   8235 `v'
   8236      Same as flag 5 (overflow flag)
   8237 
   8238 `va'
   8239      Same as flag 6 (sticky overflow flag)
   8240 
   8241 `c'
   8242      Same as flag 7 (carry/borrow flag)
   8243 
   8244 `b'
   8245      Same as flag 7 (carry/borrow flag)
   8246 
   8247 
   8248 File: as.info,  Node: D30V-Addressing,  Prev: D30V-Regs,  Up: D30V-Syntax
   8249 
   8250 9.9.2.6 Addressing Modes
   8251 ........................
   8252 
   8253 `as' understands the following addressing modes for the D30V.  `RN' in
   8254 the following refers to any of the numbered registers, but _not_ the
   8255 control registers.
   8256 `RN'
   8257      Register direct
   8258 
   8259 `@RN'
   8260      Register indirect
   8261 
   8262 `@RN+'
   8263      Register indirect with post-increment
   8264 
   8265 `@RN-'
   8266      Register indirect with post-decrement
   8267 
   8268 `@-SP'
   8269      Register indirect with pre-decrement
   8270 
   8271 `@(DISP, RN)'
   8272      Register indirect with displacement
   8273 
   8274 `ADDR'
   8275      PC relative address (for branch or rep).
   8276 
   8277 `#IMM'
   8278      Immediate data (the `#' is optional and ignored)
   8279 
   8280 
   8281 File: as.info,  Node: D30V-Float,  Next: D30V-Opcodes,  Prev: D30V-Syntax,  Up: D30V-Dependent
   8282 
   8283 9.9.3 Floating Point
   8284 --------------------
   8285 
   8286 The D30V has no hardware floating point, but the `.float' and `.double'
   8287 directives generates IEEE floating-point numbers for compatibility with
   8288 other development tools.
   8289 
   8290 
   8291 File: as.info,  Node: D30V-Opcodes,  Prev: D30V-Float,  Up: D30V-Dependent
   8292 
   8293 9.9.4 Opcodes
   8294 -------------
   8295 
   8296 For detailed information on the D30V machine instruction set, see `D30V
   8297 Architecture: A VLIW Microprocessor for Multimedia Applications'
   8298 (Mitsubishi Electric Corp.).  `as' implements all the standard D30V
   8299 opcodes.  The only changes are those described in the section on size
   8300 modifiers
   8301 
   8302 
   8303 File: as.info,  Node: H8/300-Dependent,  Next: HPPA-Dependent,  Prev: D30V-Dependent,  Up: Machine Dependencies
   8304 
   8305 9.10 H8/300 Dependent Features
   8306 ==============================
   8307 
   8308 * Menu:
   8309 
   8310 * H8/300 Options::              Options
   8311 * H8/300 Syntax::               Syntax
   8312 * H8/300 Floating Point::       Floating Point
   8313 * H8/300 Directives::           H8/300 Machine Directives
   8314 * H8/300 Opcodes::              Opcodes
   8315 
   8316 
   8317 File: as.info,  Node: H8/300 Options,  Next: H8/300 Syntax,  Up: H8/300-Dependent
   8318 
   8319 9.10.1 Options
   8320 --------------
   8321 
   8322 The Renesas H8/300 version of `as' has one machine-dependent option:
   8323 
   8324 `-h-tick-hex'
   8325      Support H'00 style hex constants in addition to 0x00 style.
   8326 
   8327 
   8328 
   8329 File: as.info,  Node: H8/300 Syntax,  Next: H8/300 Floating Point,  Prev: H8/300 Options,  Up: H8/300-Dependent
   8330 
   8331 9.10.2 Syntax
   8332 -------------
   8333 
   8334 * Menu:
   8335 
   8336 * H8/300-Chars::                Special Characters
   8337 * H8/300-Regs::                 Register Names
   8338 * H8/300-Addressing::           Addressing Modes
   8339 
   8340 
   8341 File: as.info,  Node: H8/300-Chars,  Next: H8/300-Regs,  Up: H8/300 Syntax
   8342 
   8343 9.10.2.1 Special Characters
   8344 ...........................
   8345 
   8346 `;' is the line comment character.
   8347 
   8348    `$' can be used instead of a newline to separate statements.
   8349 Therefore _you may not use `$' in symbol names_ on the H8/300.
   8350 
   8351 
   8352 File: as.info,  Node: H8/300-Regs,  Next: H8/300-Addressing,  Prev: H8/300-Chars,  Up: H8/300 Syntax
   8353 
   8354 9.10.2.2 Register Names
   8355 .......................
   8356 
   8357 You can use predefined symbols of the form `rNh' and `rNl' to refer to
   8358 the H8/300 registers as sixteen 8-bit general-purpose registers.  N is
   8359 a digit from `0' to `7'); for instance, both `r0h' and `r7l' are valid
   8360 register names.
   8361 
   8362    You can also use the eight predefined symbols `rN' to refer to the
   8363 H8/300 registers as 16-bit registers (you must use this form for
   8364 addressing).
   8365 
   8366    On the H8/300H, you can also use the eight predefined symbols `erN'
   8367 (`er0' ... `er7') to refer to the 32-bit general purpose registers.
   8368 
   8369    The two control registers are called `pc' (program counter; a 16-bit
   8370 register, except on the H8/300H where it is 24 bits) and `ccr'
   8371 (condition code register; an 8-bit register).  `r7' is used as the
   8372 stack pointer, and can also be called `sp'.
   8373 
   8374 
   8375 File: as.info,  Node: H8/300-Addressing,  Prev: H8/300-Regs,  Up: H8/300 Syntax
   8376 
   8377 9.10.2.3 Addressing Modes
   8378 .........................
   8379 
   8380 as understands the following addressing modes for the H8/300:
   8381 `rN'
   8382      Register direct
   8383 
   8384 `@rN'
   8385      Register indirect
   8386 
   8387 `@(D, rN)'
   8388 `@(D:16, rN)'
   8389 `@(D:24, rN)'
   8390      Register indirect: 16-bit or 24-bit displacement D from register
   8391      N.  (24-bit displacements are only meaningful on the H8/300H.)
   8392 
   8393 `@rN+'
   8394      Register indirect with post-increment
   8395 
   8396 `@-rN'
   8397      Register indirect with pre-decrement
   8398 
   8399 ``@'AA'
   8400 ``@'AA:8'
   8401 ``@'AA:16'
   8402 ``@'AA:24'
   8403      Absolute address `aa'.  (The address size `:24' only makes sense
   8404      on the H8/300H.)
   8405 
   8406 `#XX'
   8407 `#XX:8'
   8408 `#XX:16'
   8409 `#XX:32'
   8410      Immediate data XX.  You may specify the `:8', `:16', or `:32' for
   8411      clarity, if you wish; but `as' neither requires this nor uses
   8412      it--the data size required is taken from context.
   8413 
   8414 ``@'`@'AA'
   8415 ``@'`@'AA:8'
   8416      Memory indirect.  You may specify the `:8' for clarity, if you
   8417      wish; but `as' neither requires this nor uses it.
   8418 
   8419 
   8420 File: as.info,  Node: H8/300 Floating Point,  Next: H8/300 Directives,  Prev: H8/300 Syntax,  Up: H8/300-Dependent
   8421 
   8422 9.10.3 Floating Point
   8423 ---------------------
   8424 
   8425 The H8/300 family has no hardware floating point, but the `.float'
   8426 directive generates IEEE floating-point numbers for compatibility with
   8427 other development tools.
   8428 
   8429 
   8430 File: as.info,  Node: H8/300 Directives,  Next: H8/300 Opcodes,  Prev: H8/300 Floating Point,  Up: H8/300-Dependent
   8431 
   8432 9.10.4 H8/300 Machine Directives
   8433 --------------------------------
   8434 
   8435 `as' has the following machine-dependent directives for the H8/300:
   8436 
   8437 `.h8300h'
   8438      Recognize and emit additional instructions for the H8/300H
   8439      variant, and also make `.int' emit 32-bit numbers rather than the
   8440      usual (16-bit) for the H8/300 family.
   8441 
   8442 `.h8300s'
   8443      Recognize and emit additional instructions for the H8S variant, and
   8444      also make `.int' emit 32-bit numbers rather than the usual (16-bit)
   8445      for the H8/300 family.
   8446 
   8447 `.h8300hn'
   8448      Recognize and emit additional instructions for the H8/300H variant
   8449      in normal mode, and also make `.int' emit 32-bit numbers rather
   8450      than the usual (16-bit) for the H8/300 family.
   8451 
   8452 `.h8300sn'
   8453      Recognize and emit additional instructions for the H8S variant in
   8454      normal mode, and also make `.int' emit 32-bit numbers rather than
   8455      the usual (16-bit) for the H8/300 family.
   8456 
   8457    On the H8/300 family (including the H8/300H) `.word' directives
   8458 generate 16-bit numbers.
   8459 
   8460 
   8461 File: as.info,  Node: H8/300 Opcodes,  Prev: H8/300 Directives,  Up: H8/300-Dependent
   8462 
   8463 9.10.5 Opcodes
   8464 --------------
   8465 
   8466 For detailed information on the H8/300 machine instruction set, see
   8467 `H8/300 Series Programming Manual'.  For information specific to the
   8468 H8/300H, see `H8/300H Series Programming Manual' (Renesas).
   8469 
   8470    `as' implements all the standard H8/300 opcodes.  No additional
   8471 pseudo-instructions are needed on this family.
   8472 
   8473    The following table summarizes the H8/300 opcodes, and their
   8474 arguments.  Entries marked `*' are opcodes used only on the H8/300H.
   8475 
   8476               Legend:
   8477                  Rs   source register
   8478                  Rd   destination register
   8479                  abs  absolute address
   8480                  imm  immediate data
   8481               disp:N  N-bit displacement from a register
   8482              pcrel:N  N-bit displacement relative to program counter
   8483 
   8484         add.b #imm,rd              *  andc #imm,ccr
   8485         add.b rs,rd                   band #imm,rd
   8486         add.w rs,rd                   band #imm,@rd
   8487      *  add.w #imm,rd                 band #imm,@abs:8
   8488      *  add.l rs,rd                   bra  pcrel:8
   8489      *  add.l #imm,rd              *  bra  pcrel:16
   8490         adds #imm,rd                  bt   pcrel:8
   8491         addx #imm,rd               *  bt   pcrel:16
   8492         addx rs,rd                    brn  pcrel:8
   8493         and.b #imm,rd              *  brn  pcrel:16
   8494         and.b rs,rd                   bf   pcrel:8
   8495      *  and.w rs,rd                *  bf   pcrel:16
   8496      *  and.w #imm,rd                 bhi  pcrel:8
   8497      *  and.l #imm,rd              *  bhi  pcrel:16
   8498      *  and.l rs,rd                   bls  pcrel:8
   8499 
   8500      *  bls  pcrel:16                 bld  #imm,rd
   8501         bcc  pcrel:8                  bld  #imm,@rd
   8502      *  bcc  pcrel:16                 bld  #imm,@abs:8
   8503         bhs  pcrel:8                  bnot #imm,rd
   8504      *  bhs  pcrel:16                 bnot #imm,@rd
   8505         bcs  pcrel:8                  bnot #imm,@abs:8
   8506      *  bcs  pcrel:16                 bnot rs,rd
   8507         blo  pcrel:8                  bnot rs,@rd
   8508      *  blo  pcrel:16                 bnot rs,@abs:8
   8509         bne  pcrel:8                  bor  #imm,rd
   8510      *  bne  pcrel:16                 bor  #imm,@rd
   8511         beq  pcrel:8                  bor  #imm,@abs:8
   8512      *  beq  pcrel:16                 bset #imm,rd
   8513         bvc  pcrel:8                  bset #imm,@rd
   8514      *  bvc  pcrel:16                 bset #imm,@abs:8
   8515         bvs  pcrel:8                  bset rs,rd
   8516      *  bvs  pcrel:16                 bset rs,@rd
   8517         bpl  pcrel:8                  bset rs,@abs:8
   8518      *  bpl  pcrel:16                 bsr  pcrel:8
   8519         bmi  pcrel:8                  bsr  pcrel:16
   8520      *  bmi  pcrel:16                 bst  #imm,rd
   8521         bge  pcrel:8                  bst  #imm,@rd
   8522      *  bge  pcrel:16                 bst  #imm,@abs:8
   8523         blt  pcrel:8                  btst #imm,rd
   8524      *  blt  pcrel:16                 btst #imm,@rd
   8525         bgt  pcrel:8                  btst #imm,@abs:8
   8526      *  bgt  pcrel:16                 btst rs,rd
   8527         ble  pcrel:8                  btst rs,@rd
   8528      *  ble  pcrel:16                 btst rs,@abs:8
   8529         bclr #imm,rd                  bxor #imm,rd
   8530         bclr #imm,@rd                 bxor #imm,@rd
   8531         bclr #imm,@abs:8              bxor #imm,@abs:8
   8532         bclr rs,rd                    cmp.b #imm,rd
   8533         bclr rs,@rd                   cmp.b rs,rd
   8534         bclr rs,@abs:8                cmp.w rs,rd
   8535         biand #imm,rd                 cmp.w rs,rd
   8536         biand #imm,@rd             *  cmp.w #imm,rd
   8537         biand #imm,@abs:8          *  cmp.l #imm,rd
   8538         bild #imm,rd               *  cmp.l rs,rd
   8539         bild #imm,@rd                 daa  rs
   8540         bild #imm,@abs:8              das  rs
   8541         bior #imm,rd                  dec.b rs
   8542         bior #imm,@rd              *  dec.w #imm,rd
   8543         bior #imm,@abs:8           *  dec.l #imm,rd
   8544         bist #imm,rd                  divxu.b rs,rd
   8545         bist #imm,@rd              *  divxu.w rs,rd
   8546         bist #imm,@abs:8           *  divxs.b rs,rd
   8547         bixor #imm,rd              *  divxs.w rs,rd
   8548         bixor #imm,@rd                eepmov
   8549         bixor #imm,@abs:8          *  eepmovw
   8550 
   8551      *  exts.w rd                     mov.w rs,@abs:16
   8552      *  exts.l rd                  *  mov.l #imm,rd
   8553      *  extu.w rd                  *  mov.l rs,rd
   8554      *  extu.l rd                  *  mov.l @rs,rd
   8555         inc  rs                    *  mov.l @(disp:16,rs),rd
   8556      *  inc.w #imm,rd              *  mov.l @(disp:24,rs),rd
   8557      *  inc.l #imm,rd              *  mov.l @rs+,rd
   8558         jmp  @rs                   *  mov.l @abs:16,rd
   8559         jmp  abs                   *  mov.l @abs:24,rd
   8560         jmp  @@abs:8               *  mov.l rs,@rd
   8561         jsr  @rs                   *  mov.l rs,@(disp:16,rd)
   8562         jsr  abs                   *  mov.l rs,@(disp:24,rd)
   8563         jsr  @@abs:8               *  mov.l rs,@-rd
   8564         ldc  #imm,ccr              *  mov.l rs,@abs:16
   8565         ldc  rs,ccr                *  mov.l rs,@abs:24
   8566      *  ldc  @abs:16,ccr              movfpe @abs:16,rd
   8567      *  ldc  @abs:24,ccr              movtpe rs,@abs:16
   8568      *  ldc  @(disp:16,rs),ccr        mulxu.b rs,rd
   8569      *  ldc  @(disp:24,rs),ccr     *  mulxu.w rs,rd
   8570      *  ldc  @rs+,ccr              *  mulxs.b rs,rd
   8571      *  ldc  @rs,ccr               *  mulxs.w rs,rd
   8572      *  mov.b @(disp:24,rs),rd        neg.b rs
   8573      *  mov.b rs,@(disp:24,rd)     *  neg.w rs
   8574         mov.b @abs:16,rd           *  neg.l rs
   8575         mov.b rs,rd                   nop
   8576         mov.b @abs:8,rd               not.b rs
   8577         mov.b rs,@abs:8            *  not.w rs
   8578         mov.b rs,rd                *  not.l rs
   8579         mov.b #imm,rd                 or.b #imm,rd
   8580         mov.b @rs,rd                  or.b rs,rd
   8581         mov.b @(disp:16,rs),rd     *  or.w #imm,rd
   8582         mov.b @rs+,rd              *  or.w rs,rd
   8583         mov.b @abs:8,rd            *  or.l #imm,rd
   8584         mov.b rs,@rd               *  or.l rs,rd
   8585         mov.b rs,@(disp:16,rd)        orc  #imm,ccr
   8586         mov.b rs,@-rd                 pop.w rs
   8587         mov.b rs,@abs:8            *  pop.l rs
   8588         mov.w rs,@rd                  push.w rs
   8589      *  mov.w @(disp:24,rs),rd     *  push.l rs
   8590      *  mov.w rs,@(disp:24,rd)        rotl.b rs
   8591      *  mov.w @abs:24,rd           *  rotl.w rs
   8592      *  mov.w rs,@abs:24           *  rotl.l rs
   8593         mov.w rs,rd                   rotr.b rs
   8594         mov.w #imm,rd              *  rotr.w rs
   8595         mov.w @rs,rd               *  rotr.l rs
   8596         mov.w @(disp:16,rs),rd        rotxl.b rs
   8597         mov.w @rs+,rd              *  rotxl.w rs
   8598         mov.w @abs:16,rd           *  rotxl.l rs
   8599         mov.w rs,@(disp:16,rd)        rotxr.b rs
   8600         mov.w rs,@-rd              *  rotxr.w rs
   8601 
   8602      *  rotxr.l rs                 *  stc  ccr,@(disp:24,rd)
   8603         bpt                        *  stc  ccr,@-rd
   8604         rte                        *  stc  ccr,@abs:16
   8605         rts                        *  stc  ccr,@abs:24
   8606         shal.b rs                     sub.b rs,rd
   8607      *  shal.w rs                     sub.w rs,rd
   8608      *  shal.l rs                  *  sub.w #imm,rd
   8609         shar.b rs                  *  sub.l rs,rd
   8610      *  shar.w rs                  *  sub.l #imm,rd
   8611      *  shar.l rs                     subs #imm,rd
   8612         shll.b rs                     subx #imm,rd
   8613      *  shll.w rs                     subx rs,rd
   8614      *  shll.l rs                  *  trapa #imm
   8615         shlr.b rs                     xor  #imm,rd
   8616      *  shlr.w rs                     xor  rs,rd
   8617      *  shlr.l rs                  *  xor.w #imm,rd
   8618         sleep                      *  xor.w rs,rd
   8619         stc  ccr,rd                *  xor.l #imm,rd
   8620      *  stc  ccr,@rs               *  xor.l rs,rd
   8621      *  stc  ccr,@(disp:16,rd)        xorc #imm,ccr
   8622 
   8623    Four H8/300 instructions (`add', `cmp', `mov', `sub') are defined
   8624 with variants using the suffixes `.b', `.w', and `.l' to specify the
   8625 size of a memory operand.  `as' supports these suffixes, but does not
   8626 require them; since one of the operands is always a register, `as' can
   8627 deduce the correct size.
   8628 
   8629    For example, since `r0' refers to a 16-bit register,
   8630      mov    r0,@foo
   8631 is equivalent to
   8632      mov.w  r0,@foo
   8633 
   8634    If you use the size suffixes, `as' issues a warning when the suffix
   8635 and the register size do not match.
   8636 
   8637 
   8638 File: as.info,  Node: HPPA-Dependent,  Next: ESA/390-Dependent,  Prev: H8/300-Dependent,  Up: Machine Dependencies
   8639 
   8640 9.11 HPPA Dependent Features
   8641 ============================
   8642 
   8643 * Menu:
   8644 
   8645 * HPPA Notes::                Notes
   8646 * HPPA Options::              Options
   8647 * HPPA Syntax::               Syntax
   8648 * HPPA Floating Point::       Floating Point
   8649 * HPPA Directives::           HPPA Machine Directives
   8650 * HPPA Opcodes::              Opcodes
   8651 
   8652 
   8653 File: as.info,  Node: HPPA Notes,  Next: HPPA Options,  Up: HPPA-Dependent
   8654 
   8655 9.11.1 Notes
   8656 ------------
   8657 
   8658 As a back end for GNU CC `as' has been throughly tested and should work
   8659 extremely well.  We have tested it only minimally on hand written
   8660 assembly code and no one has tested it much on the assembly output from
   8661 the HP compilers.
   8662 
   8663    The format of the debugging sections has changed since the original
   8664 `as' port (version 1.3X) was released; therefore, you must rebuild all
   8665 HPPA objects and libraries with the new assembler so that you can debug
   8666 the final executable.
   8667 
   8668    The HPPA `as' port generates a small subset of the relocations
   8669 available in the SOM and ELF object file formats.  Additional relocation
   8670 support will be added as it becomes necessary.
   8671 
   8672 
   8673 File: as.info,  Node: HPPA Options,  Next: HPPA Syntax,  Prev: HPPA Notes,  Up: HPPA-Dependent
   8674 
   8675 9.11.2 Options
   8676 --------------
   8677 
   8678 `as' has no machine-dependent command-line options for the HPPA.
   8679 
   8680 
   8681 File: as.info,  Node: HPPA Syntax,  Next: HPPA Floating Point,  Prev: HPPA Options,  Up: HPPA-Dependent
   8682 
   8683 9.11.3 Syntax
   8684 -------------
   8685 
   8686 The assembler syntax closely follows the HPPA instruction set reference
   8687 manual; assembler directives and general syntax closely follow the HPPA
   8688 assembly language reference manual, with a few noteworthy differences.
   8689 
   8690    First, a colon may immediately follow a label definition.  This is
   8691 simply for compatibility with how most assembly language programmers
   8692 write code.
   8693 
   8694    Some obscure expression parsing problems may affect hand written
   8695 code which uses the `spop' instructions, or code which makes significant
   8696 use of the `!' line separator.
   8697 
   8698    `as' is much less forgiving about missing arguments and other
   8699 similar oversights than the HP assembler.  `as' notifies you of missing
   8700 arguments as syntax errors; this is regarded as a feature, not a bug.
   8701 
   8702    Finally, `as' allows you to use an external symbol without
   8703 explicitly importing the symbol.  _Warning:_ in the future this will be
   8704 an error for HPPA targets.
   8705 
   8706    Special characters for HPPA targets include:
   8707 
   8708    `;' is the line comment character.
   8709 
   8710    `!' can be used instead of a newline to separate statements.
   8711 
   8712    Since `$' has no special meaning, you may use it in symbol names.
   8713 
   8714 
   8715 File: as.info,  Node: HPPA Floating Point,  Next: HPPA Directives,  Prev: HPPA Syntax,  Up: HPPA-Dependent
   8716 
   8717 9.11.4 Floating Point
   8718 ---------------------
   8719 
   8720 The HPPA family uses IEEE floating-point numbers.
   8721 
   8722 
   8723 File: as.info,  Node: HPPA Directives,  Next: HPPA Opcodes,  Prev: HPPA Floating Point,  Up: HPPA-Dependent
   8724 
   8725 9.11.5 HPPA Assembler Directives
   8726 --------------------------------
   8727 
   8728 `as' for the HPPA supports many additional directives for compatibility
   8729 with the native assembler.  This section describes them only briefly.
   8730 For detailed information on HPPA-specific assembler directives, see
   8731 `HP9000 Series 800 Assembly Language Reference Manual' (HP 92432-90001).
   8732 
   8733    `as' does _not_ support the following assembler directives described
   8734 in the HP manual:
   8735 
   8736      .endm           .liston
   8737      .enter          .locct
   8738      .leave          .macro
   8739      .listoff
   8740 
   8741    Beyond those implemented for compatibility, `as' supports one
   8742 additional assembler directive for the HPPA: `.param'.  It conveys
   8743 register argument locations for static functions.  Its syntax closely
   8744 follows the `.export' directive.
   8745 
   8746    These are the additional directives in `as' for the HPPA:
   8747 
   8748 `.block N'
   8749 `.blockz N'
   8750      Reserve N bytes of storage, and initialize them to zero.
   8751 
   8752 `.call'
   8753      Mark the beginning of a procedure call.  Only the special case
   8754      with _no arguments_ is allowed.
   8755 
   8756 `.callinfo [ PARAM=VALUE, ... ]  [ FLAG, ... ]'
   8757      Specify a number of parameters and flags that define the
   8758      environment for a procedure.
   8759 
   8760      PARAM may be any of `frame' (frame size), `entry_gr' (end of
   8761      general register range), `entry_fr' (end of float register range),
   8762      `entry_sr' (end of space register range).
   8763 
   8764      The values for FLAG are `calls' or `caller' (proc has
   8765      subroutines), `no_calls' (proc does not call subroutines),
   8766      `save_rp' (preserve return pointer), `save_sp' (proc preserves
   8767      stack pointer), `no_unwind' (do not unwind this proc), `hpux_int'
   8768      (proc is interrupt routine).
   8769 
   8770 `.code'
   8771      Assemble into the standard section called `$TEXT$', subsection
   8772      `$CODE$'.
   8773 
   8774 `.copyright "STRING"'
   8775      In the SOM object format, insert STRING into the object code,
   8776      marked as a copyright string.
   8777 
   8778 `.copyright "STRING"'
   8779      In the ELF object format, insert STRING into the object code,
   8780      marked as a version string.
   8781 
   8782 `.enter'
   8783      Not yet supported; the assembler rejects programs containing this
   8784      directive.
   8785 
   8786 `.entry'
   8787      Mark the beginning of a procedure.
   8788 
   8789 `.exit'
   8790      Mark the end of a procedure.
   8791 
   8792 `.export NAME [ ,TYP ]  [ ,PARAM=R ]'
   8793      Make a procedure NAME available to callers.  TYP, if present, must
   8794      be one of `absolute', `code' (ELF only, not SOM), `data', `entry',
   8795      `data', `entry', `millicode', `plabel', `pri_prog', or `sec_prog'.
   8796 
   8797      PARAM, if present, provides either relocation information for the
   8798      procedure arguments and result, or a privilege level.  PARAM may be
   8799      `argwN' (where N ranges from `0' to `3', and indicates one of four
   8800      one-word arguments); `rtnval' (the procedure's result); or
   8801      `priv_lev' (privilege level).  For arguments or the result, R
   8802      specifies how to relocate, and must be one of `no' (not
   8803      relocatable), `gr' (argument is in general register), `fr' (in
   8804      floating point register), or `fu' (upper half of float register).
   8805      For `priv_lev', R is an integer.
   8806 
   8807 `.half N'
   8808      Define a two-byte integer constant N; synonym for the portable
   8809      `as' directive `.short'.
   8810 
   8811 `.import NAME [ ,TYP ]'
   8812      Converse of `.export'; make a procedure available to call.  The
   8813      arguments use the same conventions as the first two arguments for
   8814      `.export'.
   8815 
   8816 `.label NAME'
   8817      Define NAME as a label for the current assembly location.
   8818 
   8819 `.leave'
   8820      Not yet supported; the assembler rejects programs containing this
   8821      directive.
   8822 
   8823 `.origin LC'
   8824      Advance location counter to LC. Synonym for the `as' portable
   8825      directive `.org'.
   8826 
   8827 `.param NAME [ ,TYP ]  [ ,PARAM=R ]'
   8828      Similar to `.export', but used for static procedures.
   8829 
   8830 `.proc'
   8831      Use preceding the first statement of a procedure.
   8832 
   8833 `.procend'
   8834      Use following the last statement of a procedure.
   8835 
   8836 `LABEL .reg EXPR'
   8837      Synonym for `.equ'; define LABEL with the absolute expression EXPR
   8838      as its value.
   8839 
   8840 `.space SECNAME [ ,PARAMS ]'
   8841      Switch to section SECNAME, creating a new section by that name if
   8842      necessary.  You may only use PARAMS when creating a new section,
   8843      not when switching to an existing one.  SECNAME may identify a
   8844      section by number rather than by name.
   8845 
   8846      If specified, the list PARAMS declares attributes of the section,
   8847      identified by keywords.  The keywords recognized are `spnum=EXP'
   8848      (identify this section by the number EXP, an absolute expression),
   8849      `sort=EXP' (order sections according to this sort key when linking;
   8850      EXP is an absolute expression), `unloadable' (section contains no
   8851      loadable data), `notdefined' (this section defined elsewhere), and
   8852      `private' (data in this section not available to other programs).
   8853 
   8854 `.spnum SECNAM'
   8855      Allocate four bytes of storage, and initialize them with the
   8856      section number of the section named SECNAM.  (You can define the
   8857      section number with the HPPA `.space' directive.)
   8858 
   8859 `.string "STR"'
   8860      Copy the characters in the string STR to the object file.  *Note
   8861      Strings: Strings, for information on escape sequences you can use
   8862      in `as' strings.
   8863 
   8864      _Warning!_ The HPPA version of `.string' differs from the usual
   8865      `as' definition: it does _not_ write a zero byte after copying STR.
   8866 
   8867 `.stringz "STR"'
   8868      Like `.string', but appends a zero byte after copying STR to object
   8869      file.
   8870 
   8871 `.subspa NAME [ ,PARAMS ]'
   8872 `.nsubspa NAME [ ,PARAMS ]'
   8873      Similar to `.space', but selects a subsection NAME within the
   8874      current section.  You may only specify PARAMS when you create a
   8875      subsection (in the first instance of `.subspa' for this NAME).
   8876 
   8877      If specified, the list PARAMS declares attributes of the
   8878      subsection, identified by keywords.  The keywords recognized are
   8879      `quad=EXPR' ("quadrant" for this subsection), `align=EXPR'
   8880      (alignment for beginning of this subsection; a power of two),
   8881      `access=EXPR' (value for "access rights" field), `sort=EXPR'
   8882      (sorting order for this subspace in link), `code_only' (subsection
   8883      contains only code), `unloadable' (subsection cannot be loaded
   8884      into memory), `comdat' (subsection is comdat), `common'
   8885      (subsection is common block), `dup_comm' (subsection may have
   8886      duplicate names), or `zero' (subsection is all zeros, do not write
   8887      in object file).
   8888 
   8889      `.nsubspa' always creates a new subspace with the given name, even
   8890      if one with the same name already exists.
   8891 
   8892      `comdat', `common' and `dup_comm' can be used to implement various
   8893      flavors of one-only support when using the SOM linker.  The SOM
   8894      linker only supports specific combinations of these flags.  The
   8895      details are not documented.  A brief description is provided here.
   8896 
   8897      `comdat' provides a form of linkonce support.  It is useful for
   8898      both code and data subspaces.  A `comdat' subspace has a key symbol
   8899      marked by the `is_comdat' flag or `ST_COMDAT'.  Only the first
   8900      subspace for any given key is selected.  The key symbol becomes
   8901      universal in shared links.  This is similar to the behavior of
   8902      `secondary_def' symbols.
   8903 
   8904      `common' provides Fortran named common support.  It is only useful
   8905      for data subspaces.  Symbols with the flag `is_common' retain this
   8906      flag in shared links.  Referencing a `is_common' symbol in a shared
   8907      library from outside the library doesn't work.  Thus, `is_common'
   8908      symbols must be output whenever they are needed.
   8909 
   8910      `common' and `dup_comm' together provide Cobol common support.
   8911      The subspaces in this case must all be the same length.
   8912      Otherwise, this support is similar to the Fortran common support.
   8913 
   8914      `dup_comm' by itself provides a type of one-only support for code.
   8915      Only the first `dup_comm' subspace is selected.  There is a rather
   8916      complex algorithm to compare subspaces.  Code symbols marked with
   8917      the `dup_common' flag are hidden.  This support was intended for
   8918      "C++ duplicate inlines".
   8919 
   8920      A simplified technique is used to mark the flags of symbols based
   8921      on the flags of their subspace.  A symbol with the scope
   8922      SS_UNIVERSAL and type ST_ENTRY, ST_CODE or ST_DATA is marked with
   8923      the corresponding settings of `comdat', `common' and `dup_comm'
   8924      from the subspace, respectively.  This avoids having to introduce
   8925      additional directives to mark these symbols.  The HP assembler
   8926      sets `is_common' from `common'.  However, it doesn't set the
   8927      `dup_common' from `dup_comm'.  It doesn't have `comdat' support.
   8928 
   8929 `.version "STR"'
   8930      Write STR as version identifier in object code.
   8931 
   8932 
   8933 File: as.info,  Node: HPPA Opcodes,  Prev: HPPA Directives,  Up: HPPA-Dependent
   8934 
   8935 9.11.6 Opcodes
   8936 --------------
   8937 
   8938 For detailed information on the HPPA machine instruction set, see
   8939 `PA-RISC Architecture and Instruction Set Reference Manual' (HP
   8940 09740-90039).
   8941 
   8942 
   8943 File: as.info,  Node: ESA/390-Dependent,  Next: i386-Dependent,  Prev: HPPA-Dependent,  Up: Machine Dependencies
   8944 
   8945 9.12 ESA/390 Dependent Features
   8946 ===============================
   8947 
   8948 * Menu:
   8949 
   8950 * ESA/390 Notes::                Notes
   8951 * ESA/390 Options::              Options
   8952 * ESA/390 Syntax::               Syntax
   8953 * ESA/390 Floating Point::       Floating Point
   8954 * ESA/390 Directives::           ESA/390 Machine Directives
   8955 * ESA/390 Opcodes::              Opcodes
   8956 
   8957 
   8958 File: as.info,  Node: ESA/390 Notes,  Next: ESA/390 Options,  Up: ESA/390-Dependent
   8959 
   8960 9.12.1 Notes
   8961 ------------
   8962 
   8963 The ESA/390 `as' port is currently intended to be a back-end for the
   8964 GNU CC compiler.  It is not HLASM compatible, although it does support
   8965 a subset of some of the HLASM directives.  The only supported binary
   8966 file format is ELF; none of the usual MVS/VM/OE/USS object file
   8967 formats, such as ESD or XSD, are supported.
   8968 
   8969    When used with the GNU CC compiler, the ESA/390 `as' will produce
   8970 correct, fully relocated, functional binaries, and has been used to
   8971 compile and execute large projects.  However, many aspects should still
   8972 be considered experimental; these include shared library support,
   8973 dynamically loadable objects, and any relocation other than the 31-bit
   8974 relocation.
   8975 
   8976 
   8977 File: as.info,  Node: ESA/390 Options,  Next: ESA/390 Syntax,  Prev: ESA/390 Notes,  Up: ESA/390-Dependent
   8978 
   8979 9.12.2 Options
   8980 --------------
   8981 
   8982 `as' has no machine-dependent command-line options for the ESA/390.
   8983 
   8984 
   8985 File: as.info,  Node: ESA/390 Syntax,  Next: ESA/390 Floating Point,  Prev: ESA/390 Options,  Up: ESA/390-Dependent
   8986 
   8987 9.12.3 Syntax
   8988 -------------
   8989 
   8990 The opcode/operand syntax follows the ESA/390 Principles of Operation
   8991 manual; assembler directives and general syntax are loosely based on the
   8992 prevailing AT&T/SVR4/ELF/Solaris style notation.  HLASM-style directives
   8993 are _not_ supported for the most part, with the exception of those
   8994 described herein.
   8995 
   8996    A leading dot in front of directives is optional, and the case of
   8997 directives is ignored; thus for example, .using and USING have the same
   8998 effect.
   8999 
   9000    A colon may immediately follow a label definition.  This is simply
   9001 for compatibility with how most assembly language programmers write
   9002 code.
   9003 
   9004    `#' is the line comment character.
   9005 
   9006    `;' can be used instead of a newline to separate statements.
   9007 
   9008    Since `$' has no special meaning, you may use it in symbol names.
   9009 
   9010    Registers can be given the symbolic names r0..r15, fp0, fp2, fp4,
   9011 fp6.  By using thesse symbolic names, `as' can detect simple syntax
   9012 errors. The name rarg or r.arg is a synonym for r11, rtca or r.tca for
   9013 r12, sp, r.sp, dsa r.dsa for r13, lr or r.lr for r14, rbase or r.base
   9014 for r3 and rpgt or r.pgt for r4.
   9015 
   9016    `*' is the current location counter.  Unlike `.' it is always
   9017 relative to the last USING directive.  Note that this means that
   9018 expressions cannot use multiplication, as any occurrence of `*' will be
   9019 interpreted as a location counter.
   9020 
   9021    All labels are relative to the last USING.  Thus, branches to a label
   9022 always imply the use of base+displacement.
   9023 
   9024    Many of the usual forms of address constants / address literals are
   9025 supported.  Thus,
   9026      	.using	*,r3
   9027      	L	r15,=A(some_routine)
   9028      	LM	r6,r7,=V(some_longlong_extern)
   9029      	A	r1,=F'12'
   9030      	AH	r0,=H'42'
   9031      	ME	r6,=E'3.1416'
   9032      	MD	r6,=D'3.14159265358979'
   9033      	O	r6,=XL4'cacad0d0'
   9034      	.ltorg
   9035    should all behave as expected: that is, an entry in the literal pool
   9036 will be created (or reused if it already exists), and the instruction
   9037 operands will be the displacement into the literal pool using the
   9038 current base register (as last declared with the `.using' directive).
   9039 
   9040 
   9041 File: as.info,  Node: ESA/390 Floating Point,  Next: ESA/390 Directives,  Prev: ESA/390 Syntax,  Up: ESA/390-Dependent
   9042 
   9043 9.12.4 Floating Point
   9044 ---------------------
   9045 
   9046 The assembler generates only IEEE floating-point numbers.  The older
   9047 floating point formats are not supported.
   9048 
   9049 
   9050 File: as.info,  Node: ESA/390 Directives,  Next: ESA/390 Opcodes,  Prev: ESA/390 Floating Point,  Up: ESA/390-Dependent
   9051 
   9052 9.12.5 ESA/390 Assembler Directives
   9053 -----------------------------------
   9054 
   9055 `as' for the ESA/390 supports all of the standard ELF/SVR4 assembler
   9056 directives that are documented in the main part of this documentation.
   9057 Several additional directives are supported in order to implement the
   9058 ESA/390 addressing model.  The most important of these are `.using' and
   9059 `.ltorg'
   9060 
   9061    These are the additional directives in `as' for the ESA/390:
   9062 
   9063 `.dc'
   9064      A small subset of the usual DC directive is supported.
   9065 
   9066 `.drop REGNO'
   9067      Stop using REGNO as the base register.  The REGNO must have been
   9068      previously declared with a `.using' directive in the same section
   9069      as the current section.
   9070 
   9071 `.ebcdic STRING'
   9072      Emit the EBCDIC equivalent of the indicated string.  The emitted
   9073      string will be null terminated.  Note that the directives
   9074      `.string' etc. emit ascii strings by default.
   9075 
   9076 `EQU'
   9077      The standard HLASM-style EQU directive is not supported; however,
   9078      the standard `as' directive .equ can be used to the same effect.
   9079 
   9080 `.ltorg'
   9081      Dump the literal pool accumulated so far; begin a new literal pool.
   9082      The literal pool will be written in the current section; in order
   9083      to generate correct assembly, a `.using' must have been previously
   9084      specified in the same section.
   9085 
   9086 `.using EXPR,REGNO'
   9087      Use REGNO as the base register for all subsequent RX, RS, and SS
   9088      form instructions. The EXPR will be evaluated to obtain the base
   9089      address; usually, EXPR will merely be `*'.
   9090 
   9091      This assembler allows two `.using' directives to be simultaneously
   9092      outstanding, one in the `.text' section, and one in another section
   9093      (typically, the `.data' section).  This feature allows dynamically
   9094      loaded objects to be implemented in a relatively straightforward
   9095      way.  A `.using' directive must always be specified in the `.text'
   9096      section; this will specify the base register that will be used for
   9097      branches in the `.text' section.  A second `.using' may be
   9098      specified in another section; this will specify the base register
   9099      that is used for non-label address literals.  When a second
   9100      `.using' is specified, then the subsequent `.ltorg' must be put in
   9101      the same section; otherwise an error will result.
   9102 
   9103      Thus, for example, the following code uses `r3' to address branch
   9104      targets and `r4' to address the literal pool, which has been
   9105      written to the `.data' section.  The is, the constants
   9106      `=A(some_routine)', `=H'42'' and `=E'3.1416'' will all appear in
   9107      the `.data' section.
   9108 
   9109           .data
   9110           	.using  LITPOOL,r4
   9111           .text
   9112           	BASR	r3,0
   9113           	.using	*,r3
   9114                   B       START
   9115           	.long	LITPOOL
   9116           START:
   9117           	L	r4,4(,r3)
   9118           	L	r15,=A(some_routine)
   9119           	LTR	r15,r15
   9120           	BNE	LABEL
   9121           	AH	r0,=H'42'
   9122           LABEL:
   9123           	ME	r6,=E'3.1416'
   9124           .data
   9125           LITPOOL:
   9126           	.ltorg
   9127 
   9128      Note that this dual-`.using' directive semantics extends and is
   9129      not compatible with HLASM semantics.  Note that this assembler
   9130      directive does not support the full range of HLASM semantics.
   9131 
   9132 
   9133 
   9134 File: as.info,  Node: ESA/390 Opcodes,  Prev: ESA/390 Directives,  Up: ESA/390-Dependent
   9135 
   9136 9.12.6 Opcodes
   9137 --------------
   9138 
   9139 For detailed information on the ESA/390 machine instruction set, see
   9140 `ESA/390 Principles of Operation' (IBM Publication Number DZ9AR004).
   9141 
   9142 
   9143 File: as.info,  Node: i386-Dependent,  Next: i860-Dependent,  Prev: ESA/390-Dependent,  Up: Machine Dependencies
   9144 
   9145 9.13 80386 Dependent Features
   9146 =============================
   9147 
   9148    The i386 version `as' supports both the original Intel 386
   9149 architecture in both 16 and 32-bit mode as well as AMD x86-64
   9150 architecture extending the Intel architecture to 64-bits.
   9151 
   9152 * Menu:
   9153 
   9154 * i386-Options::                Options
   9155 * i386-Directives::             X86 specific directives
   9156 * i386-Syntax::                 AT&T Syntax versus Intel Syntax
   9157 * i386-Mnemonics::              Instruction Naming
   9158 * i386-Regs::                   Register Naming
   9159 * i386-Prefixes::               Instruction Prefixes
   9160 * i386-Memory::                 Memory References
   9161 * i386-Jumps::                  Handling of Jump Instructions
   9162 * i386-Float::                  Floating Point
   9163 * i386-SIMD::                   Intel's MMX and AMD's 3DNow! SIMD Operations
   9164 * i386-16bit::                  Writing 16-bit Code
   9165 * i386-Arch::                   Specifying an x86 CPU architecture
   9166 * i386-Bugs::                   AT&T Syntax bugs
   9167 * i386-Notes::                  Notes
   9168 
   9169 
   9170 File: as.info,  Node: i386-Options,  Next: i386-Directives,  Up: i386-Dependent
   9171 
   9172 9.13.1 Options
   9173 --------------
   9174 
   9175 The i386 version of `as' has a few machine dependent options:
   9176 
   9177 `--32 | --64'
   9178      Select the word size, either 32 bits or 64 bits. Selecting 32-bit
   9179      implies Intel i386 architecture, while 64-bit implies AMD x86-64
   9180      architecture.
   9181 
   9182      These options are only available with the ELF object file format,
   9183      and require that the necessary BFD support has been included (on a
   9184      32-bit platform you have to add -enable-64-bit-bfd to configure
   9185      enable 64-bit usage and use x86-64 as target platform).
   9186 
   9187 `-n'
   9188      By default, x86 GAS replaces multiple nop instructions used for
   9189      alignment within code sections with multi-byte nop instructions
   9190      such as leal 0(%esi,1),%esi.  This switch disables the
   9191      optimization.
   9192 
   9193 `--divide'
   9194      On SVR4-derived platforms, the character `/' is treated as a
   9195      comment character, which means that it cannot be used in
   9196      expressions.  The `--divide' option turns `/' into a normal
   9197      character.  This does not disable `/' at the beginning of a line
   9198      starting a comment, or affect using `#' for starting a comment.
   9199 
   9200 `-march=CPU[+EXTENSION...]'
   9201      This option specifies the target processor.  The assembler will
   9202      issue an error message if an attempt is made to assemble an
   9203      instruction which will not execute on the target processor.  The
   9204      following processor names are recognized: `i8086', `i186', `i286',
   9205      `i386', `i486', `i586', `i686', `pentium', `pentiumpro',
   9206      `pentiumii', `pentiumiii', `pentium4', `prescott', `nocona',
   9207      `core', `core2', `k6', `k6_2', `athlon', `opteron', `k8',
   9208      `amdfam10', `generic32' and `generic64'.
   9209 
   9210      In addition to the basic instruction set, the assembler can be
   9211      told to accept various extension mnemonics.  For example,
   9212      `-march=i686+sse4+vmx' extends I686 with SSE4 and VMX.  The
   9213      following extensions are currently supported: `mmx', `sse', `sse2',
   9214      `sse3', `ssse3', `sse4.1', `sse4.2', `sse4', `avx', `vmx', `smx',
   9215      `xsave', `aes', `pclmul', `fma', `movbe', `ept', `3dnow', `3dnowa',
   9216      `sse4a', `sse5', `svme', `abm' and `padlock'.
   9217 
   9218      When the `.arch' directive is used with `-march', the `.arch'
   9219      directive will take precedent.
   9220 
   9221 `-mtune=CPU'
   9222      This option specifies a processor to optimize for. When used in
   9223      conjunction with the `-march' option, only instructions of the
   9224      processor specified by the `-march' option will be generated.
   9225 
   9226      Valid CPU values are identical to the processor list of
   9227      `-march=CPU'.
   9228 
   9229 `-msse2avx'
   9230      This option specifies that the assembler should encode SSE
   9231      instructions with VEX prefix.
   9232 
   9233 `-msse-check=NONE'
   9234 
   9235 `-msse-check=WARNING'
   9236 
   9237 `-msse-check=ERROR'
   9238      These options control if the assembler should check SSE
   9239      intructions.  `-msse-check=NONE' will make the assembler not to
   9240      check SSE instructions,  which is the default.
   9241      `-msse-check=WARNING' will make the assembler issue a warning for
   9242      any SSE intruction.  `-msse-check=ERROR' will make the assembler
   9243      issue an error for any SSE intruction.
   9244 
   9245 `-mmnemonic=ATT'
   9246 
   9247 `-mmnemonic=INTEL'
   9248      This option specifies instruction mnemonic for matching
   9249      instructions.  The `.att_mnemonic' and `.intel_mnemonic'
   9250      directives will take precedent.
   9251 
   9252 `-msyntax=ATT'
   9253 
   9254 `-msyntax=INTEL'
   9255      This option specifies instruction syntax when processing
   9256      instructions.  The `.att_syntax' and `.intel_syntax' directives
   9257      will take precedent.
   9258 
   9259 `-mnaked-reg'
   9260      This opetion specifies that registers don't require a `%' prefix.
   9261      The `.att_syntax' and `.intel_syntax' directives will take
   9262      precedent.
   9263 
   9264 
   9265 
   9266 File: as.info,  Node: i386-Directives,  Next: i386-Syntax,  Prev: i386-Options,  Up: i386-Dependent
   9267 
   9268 9.13.2 x86 specific Directives
   9269 ------------------------------
   9270 
   9271 `.lcomm SYMBOL , LENGTH[, ALIGNMENT]'
   9272      Reserve LENGTH (an absolute expression) bytes for a local common
   9273      denoted by SYMBOL.  The section and value of SYMBOL are those of
   9274      the new local common.  The addresses are allocated in the bss
   9275      section, so that at run-time the bytes start off zeroed.  Since
   9276      SYMBOL is not declared global, it is normally not visible to `ld'.
   9277      The optional third parameter, ALIGNMENT, specifies the desired
   9278      alignment of the symbol in the bss section.
   9279 
   9280      This directive is only available for COFF based x86 targets.
   9281 
   9282 
   9283 
   9284 File: as.info,  Node: i386-Syntax,  Next: i386-Mnemonics,  Prev: i386-Directives,  Up: i386-Dependent
   9285 
   9286 9.13.3 AT&T Syntax versus Intel Syntax
   9287 --------------------------------------
   9288 
   9289 `as' now supports assembly using Intel assembler syntax.
   9290 `.intel_syntax' selects Intel mode, and `.att_syntax' switches back to
   9291 the usual AT&T mode for compatibility with the output of `gcc'.  Either
   9292 of these directives may have an optional argument, `prefix', or
   9293 `noprefix' specifying whether registers require a `%' prefix.  AT&T
   9294 System V/386 assembler syntax is quite different from Intel syntax.  We
   9295 mention these differences because almost all 80386 documents use Intel
   9296 syntax.  Notable differences between the two syntaxes are:
   9297 
   9298    * AT&T immediate operands are preceded by `$'; Intel immediate
   9299      operands are undelimited (Intel `push 4' is AT&T `pushl $4').
   9300      AT&T register operands are preceded by `%'; Intel register operands
   9301      are undelimited.  AT&T absolute (as opposed to PC relative)
   9302      jump/call operands are prefixed by `*'; they are undelimited in
   9303      Intel syntax.
   9304 
   9305    * AT&T and Intel syntax use the opposite order for source and
   9306      destination operands.  Intel `add eax, 4' is `addl $4, %eax'.  The
   9307      `source, dest' convention is maintained for compatibility with
   9308      previous Unix assemblers.  Note that `bound', `invlpga', and
   9309      instructions with 2 immediate operands, such as the `enter'
   9310      instruction, do _not_ have reversed order.  *note i386-Bugs::.
   9311 
   9312    * In AT&T syntax the size of memory operands is determined from the
   9313      last character of the instruction mnemonic.  Mnemonic suffixes of
   9314      `b', `w', `l' and `q' specify byte (8-bit), word (16-bit), long
   9315      (32-bit) and quadruple word (64-bit) memory references.  Intel
   9316      syntax accomplishes this by prefixing memory operands (_not_ the
   9317      instruction mnemonics) with `byte ptr', `word ptr', `dword ptr'
   9318      and `qword ptr'.  Thus, Intel `mov al, byte ptr FOO' is `movb FOO,
   9319      %al' in AT&T syntax.
   9320 
   9321    * Immediate form long jumps and calls are `lcall/ljmp $SECTION,
   9322      $OFFSET' in AT&T syntax; the Intel syntax is `call/jmp far
   9323      SECTION:OFFSET'.  Also, the far return instruction is `lret
   9324      $STACK-ADJUST' in AT&T syntax; Intel syntax is `ret far
   9325      STACK-ADJUST'.
   9326 
   9327    * The AT&T assembler does not provide support for multiple section
   9328      programs.  Unix style systems expect all programs to be single
   9329      sections.
   9330 
   9331 
   9332 File: as.info,  Node: i386-Mnemonics,  Next: i386-Regs,  Prev: i386-Syntax,  Up: i386-Dependent
   9333 
   9334 9.13.4 Instruction Naming
   9335 -------------------------
   9336 
   9337 Instruction mnemonics are suffixed with one character modifiers which
   9338 specify the size of operands.  The letters `b', `w', `l' and `q'
   9339 specify byte, word, long and quadruple word operands.  If no suffix is
   9340 specified by an instruction then `as' tries to fill in the missing
   9341 suffix based on the destination register operand (the last one by
   9342 convention).  Thus, `mov %ax, %bx' is equivalent to `movw %ax, %bx';
   9343 also, `mov $1, %bx' is equivalent to `movw $1, bx'.  Note that this is
   9344 incompatible with the AT&T Unix assembler which assumes that a missing
   9345 mnemonic suffix implies long operand size.  (This incompatibility does
   9346 not affect compiler output since compilers always explicitly specify
   9347 the mnemonic suffix.)
   9348 
   9349    Almost all instructions have the same names in AT&T and Intel format.
   9350 There are a few exceptions.  The sign extend and zero extend
   9351 instructions need two sizes to specify them.  They need a size to
   9352 sign/zero extend _from_ and a size to zero extend _to_.  This is
   9353 accomplished by using two instruction mnemonic suffixes in AT&T syntax.
   9354 Base names for sign extend and zero extend are `movs...' and `movz...'
   9355 in AT&T syntax (`movsx' and `movzx' in Intel syntax).  The instruction
   9356 mnemonic suffixes are tacked on to this base name, the _from_ suffix
   9357 before the _to_ suffix.  Thus, `movsbl %al, %edx' is AT&T syntax for
   9358 "move sign extend _from_ %al _to_ %edx."  Possible suffixes, thus, are
   9359 `bl' (from byte to long), `bw' (from byte to word), `wl' (from word to
   9360 long), `bq' (from byte to quadruple word), `wq' (from word to quadruple
   9361 word), and `lq' (from long to quadruple word).
   9362 
   9363    The Intel-syntax conversion instructions
   9364 
   9365    * `cbw' -- sign-extend byte in `%al' to word in `%ax',
   9366 
   9367    * `cwde' -- sign-extend word in `%ax' to long in `%eax',
   9368 
   9369    * `cwd' -- sign-extend word in `%ax' to long in `%dx:%ax',
   9370 
   9371    * `cdq' -- sign-extend dword in `%eax' to quad in `%edx:%eax',
   9372 
   9373    * `cdqe' -- sign-extend dword in `%eax' to quad in `%rax' (x86-64
   9374      only),
   9375 
   9376    * `cqo' -- sign-extend quad in `%rax' to octuple in `%rdx:%rax'
   9377      (x86-64 only),
   9378 
   9379 are called `cbtw', `cwtl', `cwtd', `cltd', `cltq', and `cqto' in AT&T
   9380 naming.  `as' accepts either naming for these instructions.
   9381 
   9382    Far call/jump instructions are `lcall' and `ljmp' in AT&T syntax,
   9383 but are `call far' and `jump far' in Intel convention.
   9384 
   9385 9.13.5 AT&T Mnemonic versus Intel Mnemonic
   9386 ------------------------------------------
   9387 
   9388 `as' supports assembly using Intel mnemonic.  `.intel_mnemonic' selects
   9389 Intel mnemonic with Intel syntax, and `.att_mnemonic' switches back to
   9390 the usual AT&T mnemonic with AT&T syntax for compatibility with the
   9391 output of `gcc'.  Several x87 instructions, `fadd', `fdiv', `fdivp',
   9392 `fdivr', `fdivrp', `fmul', `fsub', `fsubp', `fsubr' and `fsubrp',  are
   9393 implemented in AT&T System V/386 assembler with different mnemonics
   9394 from those in Intel IA32 specification.  `gcc' generates those
   9395 instructions with AT&T mnemonic.
   9396 
   9397 
   9398 File: as.info,  Node: i386-Regs,  Next: i386-Prefixes,  Prev: i386-Mnemonics,  Up: i386-Dependent
   9399 
   9400 9.13.6 Register Naming
   9401 ----------------------
   9402 
   9403 Register operands are always prefixed with `%'.  The 80386 registers
   9404 consist of
   9405 
   9406    * the 8 32-bit registers `%eax' (the accumulator), `%ebx', `%ecx',
   9407      `%edx', `%edi', `%esi', `%ebp' (the frame pointer), and `%esp'
   9408      (the stack pointer).
   9409 
   9410    * the 8 16-bit low-ends of these: `%ax', `%bx', `%cx', `%dx', `%di',
   9411      `%si', `%bp', and `%sp'.
   9412 
   9413    * the 8 8-bit registers: `%ah', `%al', `%bh', `%bl', `%ch', `%cl',
   9414      `%dh', and `%dl' (These are the high-bytes and low-bytes of `%ax',
   9415      `%bx', `%cx', and `%dx')
   9416 
   9417    * the 6 section registers `%cs' (code section), `%ds' (data
   9418      section), `%ss' (stack section), `%es', `%fs', and `%gs'.
   9419 
   9420    * the 3 processor control registers `%cr0', `%cr2', and `%cr3'.
   9421 
   9422    * the 6 debug registers `%db0', `%db1', `%db2', `%db3', `%db6', and
   9423      `%db7'.
   9424 
   9425    * the 2 test registers `%tr6' and `%tr7'.
   9426 
   9427    * the 8 floating point register stack `%st' or equivalently
   9428      `%st(0)', `%st(1)', `%st(2)', `%st(3)', `%st(4)', `%st(5)',
   9429      `%st(6)', and `%st(7)'.  These registers are overloaded by 8 MMX
   9430      registers `%mm0', `%mm1', `%mm2', `%mm3', `%mm4', `%mm5', `%mm6'
   9431      and `%mm7'.
   9432 
   9433    * the 8 SSE registers registers `%xmm0', `%xmm1', `%xmm2', `%xmm3',
   9434      `%xmm4', `%xmm5', `%xmm6' and `%xmm7'.
   9435 
   9436    The AMD x86-64 architecture extends the register set by:
   9437 
   9438    * enhancing the 8 32-bit registers to 64-bit: `%rax' (the
   9439      accumulator), `%rbx', `%rcx', `%rdx', `%rdi', `%rsi', `%rbp' (the
   9440      frame pointer), `%rsp' (the stack pointer)
   9441 
   9442    * the 8 extended registers `%r8'-`%r15'.
   9443 
   9444    * the 8 32-bit low ends of the extended registers: `%r8d'-`%r15d'
   9445 
   9446    * the 8 16-bit low ends of the extended registers: `%r8w'-`%r15w'
   9447 
   9448    * the 8 8-bit low ends of the extended registers: `%r8b'-`%r15b'
   9449 
   9450    * the 4 8-bit registers: `%sil', `%dil', `%bpl', `%spl'.
   9451 
   9452    * the 8 debug registers: `%db8'-`%db15'.
   9453 
   9454    * the 8 SSE registers: `%xmm8'-`%xmm15'.
   9455 
   9456 
   9457 File: as.info,  Node: i386-Prefixes,  Next: i386-Memory,  Prev: i386-Regs,  Up: i386-Dependent
   9458 
   9459 9.13.7 Instruction Prefixes
   9460 ---------------------------
   9461 
   9462 Instruction prefixes are used to modify the following instruction.  They
   9463 are used to repeat string instructions, to provide section overrides, to
   9464 perform bus lock operations, and to change operand and address sizes.
   9465 (Most instructions that normally operate on 32-bit operands will use
   9466 16-bit operands if the instruction has an "operand size" prefix.)
   9467 Instruction prefixes are best written on the same line as the
   9468 instruction they act upon. For example, the `scas' (scan string)
   9469 instruction is repeated with:
   9470 
   9471              repne scas %es:(%edi),%al
   9472 
   9473    You may also place prefixes on the lines immediately preceding the
   9474 instruction, but this circumvents checks that `as' does with prefixes,
   9475 and will not work with all prefixes.
   9476 
   9477    Here is a list of instruction prefixes:
   9478 
   9479    * Section override prefixes `cs', `ds', `ss', `es', `fs', `gs'.
   9480      These are automatically added by specifying using the
   9481      SECTION:MEMORY-OPERAND form for memory references.
   9482 
   9483    * Operand/Address size prefixes `data16' and `addr16' change 32-bit
   9484      operands/addresses into 16-bit operands/addresses, while `data32'
   9485      and `addr32' change 16-bit ones (in a `.code16' section) into
   9486      32-bit operands/addresses.  These prefixes _must_ appear on the
   9487      same line of code as the instruction they modify. For example, in
   9488      a 16-bit `.code16' section, you might write:
   9489 
   9490                   addr32 jmpl *(%ebx)
   9491 
   9492    * The bus lock prefix `lock' inhibits interrupts during execution of
   9493      the instruction it precedes.  (This is only valid with certain
   9494      instructions; see a 80386 manual for details).
   9495 
   9496    * The wait for coprocessor prefix `wait' waits for the coprocessor to
   9497      complete the current instruction.  This should never be needed for
   9498      the 80386/80387 combination.
   9499 
   9500    * The `rep', `repe', and `repne' prefixes are added to string
   9501      instructions to make them repeat `%ecx' times (`%cx' times if the
   9502      current address size is 16-bits).  
   9503 
   9504    * The `rex' family of prefixes is used by x86-64 to encode
   9505      extensions to i386 instruction set.  The `rex' prefix has four
   9506      bits -- an operand size overwrite (`64') used to change operand
   9507      size from 32-bit to 64-bit and X, Y and Z extensions bits used to
   9508      extend the register set.
   9509 
   9510      You may write the `rex' prefixes directly. The `rex64xyz'
   9511      instruction emits `rex' prefix with all the bits set.  By omitting
   9512      the `64', `x', `y' or `z' you may write other prefixes as well.
   9513      Normally, there is no need to write the prefixes explicitly, since
   9514      gas will automatically generate them based on the instruction
   9515      operands.
   9516 
   9517 
   9518 File: as.info,  Node: i386-Memory,  Next: i386-Jumps,  Prev: i386-Prefixes,  Up: i386-Dependent
   9519 
   9520 9.13.8 Memory References
   9521 ------------------------
   9522 
   9523 An Intel syntax indirect memory reference of the form
   9524 
   9525      SECTION:[BASE + INDEX*SCALE + DISP]
   9526 
   9527 is translated into the AT&T syntax
   9528 
   9529      SECTION:DISP(BASE, INDEX, SCALE)
   9530 
   9531 where BASE and INDEX are the optional 32-bit base and index registers,
   9532 DISP is the optional displacement, and SCALE, taking the values 1, 2,
   9533 4, and 8, multiplies INDEX to calculate the address of the operand.  If
   9534 no SCALE is specified, SCALE is taken to be 1.  SECTION specifies the
   9535 optional section register for the memory operand, and may override the
   9536 default section register (see a 80386 manual for section register
   9537 defaults). Note that section overrides in AT&T syntax _must_ be
   9538 preceded by a `%'.  If you specify a section override which coincides
   9539 with the default section register, `as' does _not_ output any section
   9540 register override prefixes to assemble the given instruction.  Thus,
   9541 section overrides can be specified to emphasize which section register
   9542 is used for a given memory operand.
   9543 
   9544    Here are some examples of Intel and AT&T style memory references:
   9545 
   9546 AT&T: `-4(%ebp)', Intel:  `[ebp - 4]'
   9547      BASE is `%ebp'; DISP is `-4'. SECTION is missing, and the default
   9548      section is used (`%ss' for addressing with `%ebp' as the base
   9549      register).  INDEX, SCALE are both missing.
   9550 
   9551 AT&T: `foo(,%eax,4)', Intel: `[foo + eax*4]'
   9552      INDEX is `%eax' (scaled by a SCALE 4); DISP is `foo'.  All other
   9553      fields are missing.  The section register here defaults to `%ds'.
   9554 
   9555 AT&T: `foo(,1)'; Intel `[foo]'
   9556      This uses the value pointed to by `foo' as a memory operand.  Note
   9557      that BASE and INDEX are both missing, but there is only _one_ `,'.
   9558      This is a syntactic exception.
   9559 
   9560 AT&T: `%gs:foo'; Intel `gs:foo'
   9561      This selects the contents of the variable `foo' with section
   9562      register SECTION being `%gs'.
   9563 
   9564    Absolute (as opposed to PC relative) call and jump operands must be
   9565 prefixed with `*'.  If no `*' is specified, `as' always chooses PC
   9566 relative addressing for jump/call labels.
   9567 
   9568    Any instruction that has a memory operand, but no register operand,
   9569 _must_ specify its size (byte, word, long, or quadruple) with an
   9570 instruction mnemonic suffix (`b', `w', `l' or `q', respectively).
   9571 
   9572    The x86-64 architecture adds an RIP (instruction pointer relative)
   9573 addressing.  This addressing mode is specified by using `rip' as a base
   9574 register.  Only constant offsets are valid. For example:
   9575 
   9576 AT&T: `1234(%rip)', Intel: `[rip + 1234]'
   9577      Points to the address 1234 bytes past the end of the current
   9578      instruction.
   9579 
   9580 AT&T: `symbol(%rip)', Intel: `[rip + symbol]'
   9581      Points to the `symbol' in RIP relative way, this is shorter than
   9582      the default absolute addressing.
   9583 
   9584    Other addressing modes remain unchanged in x86-64 architecture,
   9585 except registers used are 64-bit instead of 32-bit.
   9586 
   9587 
   9588 File: as.info,  Node: i386-Jumps,  Next: i386-Float,  Prev: i386-Memory,  Up: i386-Dependent
   9589 
   9590 9.13.9 Handling of Jump Instructions
   9591 ------------------------------------
   9592 
   9593 Jump instructions are always optimized to use the smallest possible
   9594 displacements.  This is accomplished by using byte (8-bit) displacement
   9595 jumps whenever the target is sufficiently close.  If a byte displacement
   9596 is insufficient a long displacement is used.  We do not support word
   9597 (16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump
   9598 instruction with the `data16' instruction prefix), since the 80386
   9599 insists upon masking `%eip' to 16 bits after the word displacement is
   9600 added. (See also *note i386-Arch::)
   9601 
   9602    Note that the `jcxz', `jecxz', `loop', `loopz', `loope', `loopnz'
   9603 and `loopne' instructions only come in byte displacements, so that if
   9604 you use these instructions (`gcc' does not use them) you may get an
   9605 error message (and incorrect code).  The AT&T 80386 assembler tries to
   9606 get around this problem by expanding `jcxz foo' to
   9607 
   9608               jcxz cx_zero
   9609               jmp cx_nonzero
   9610      cx_zero: jmp foo
   9611      cx_nonzero:
   9612 
   9613 
   9614 File: as.info,  Node: i386-Float,  Next: i386-SIMD,  Prev: i386-Jumps,  Up: i386-Dependent
   9615 
   9616 9.13.10 Floating Point
   9617 ----------------------
   9618 
   9619 All 80387 floating point types except packed BCD are supported.  (BCD
   9620 support may be added without much difficulty).  These data types are
   9621 16-, 32-, and 64- bit integers, and single (32-bit), double (64-bit),
   9622 and extended (80-bit) precision floating point.  Each supported type
   9623 has an instruction mnemonic suffix and a constructor associated with
   9624 it.  Instruction mnemonic suffixes specify the operand's data type.
   9625 Constructors build these data types into memory.
   9626 
   9627    * Floating point constructors are `.float' or `.single', `.double',
   9628      and `.tfloat' for 32-, 64-, and 80-bit formats.  These correspond
   9629      to instruction mnemonic suffixes `s', `l', and `t'. `t' stands for
   9630      80-bit (ten byte) real.  The 80387 only supports this format via
   9631      the `fldt' (load 80-bit real to stack top) and `fstpt' (store
   9632      80-bit real and pop stack) instructions.
   9633 
   9634    * Integer constructors are `.word', `.long' or `.int', and `.quad'
   9635      for the 16-, 32-, and 64-bit integer formats.  The corresponding
   9636      instruction mnemonic suffixes are `s' (single), `l' (long), and
   9637      `q' (quad).  As with the 80-bit real format, the 64-bit `q' format
   9638      is only present in the `fildq' (load quad integer to stack top)
   9639      and `fistpq' (store quad integer and pop stack) instructions.
   9640 
   9641    Register to register operations should not use instruction mnemonic
   9642 suffixes.  `fstl %st, %st(1)' will give a warning, and be assembled as
   9643 if you wrote `fst %st, %st(1)', since all register to register
   9644 operations use 80-bit floating point operands. (Contrast this with
   9645 `fstl %st, mem', which converts `%st' from 80-bit to 64-bit floating
   9646 point format, then stores the result in the 4 byte location `mem')
   9647 
   9648 
   9649 File: as.info,  Node: i386-SIMD,  Next: i386-16bit,  Prev: i386-Float,  Up: i386-Dependent
   9650 
   9651 9.13.11 Intel's MMX and AMD's 3DNow! SIMD Operations
   9652 ----------------------------------------------------
   9653 
   9654 `as' supports Intel's MMX instruction set (SIMD instructions for
   9655 integer data), available on Intel's Pentium MMX processors and Pentium
   9656 II processors, AMD's K6 and K6-2 processors, Cyrix' M2 processor, and
   9657 probably others.  It also supports AMD's 3DNow!  instruction set (SIMD
   9658 instructions for 32-bit floating point data) available on AMD's K6-2
   9659 processor and possibly others in the future.
   9660 
   9661    Currently, `as' does not support Intel's floating point SIMD, Katmai
   9662 (KNI).
   9663 
   9664    The eight 64-bit MMX operands, also used by 3DNow!, are called
   9665 `%mm0', `%mm1', ... `%mm7'.  They contain eight 8-bit integers, four
   9666 16-bit integers, two 32-bit integers, one 64-bit integer, or two 32-bit
   9667 floating point values.  The MMX registers cannot be used at the same
   9668 time as the floating point stack.
   9669 
   9670    See Intel and AMD documentation, keeping in mind that the operand
   9671 order in instructions is reversed from the Intel syntax.
   9672 
   9673 
   9674 File: as.info,  Node: i386-16bit,  Next: i386-Arch,  Prev: i386-SIMD,  Up: i386-Dependent
   9675 
   9676 9.13.12 Writing 16-bit Code
   9677 ---------------------------
   9678 
   9679 While `as' normally writes only "pure" 32-bit i386 code or 64-bit
   9680 x86-64 code depending on the default configuration, it also supports
   9681 writing code to run in real mode or in 16-bit protected mode code
   9682 segments.  To do this, put a `.code16' or `.code16gcc' directive before
   9683 the assembly language instructions to be run in 16-bit mode.  You can
   9684 switch `as' back to writing normal 32-bit code with the `.code32'
   9685 directive.
   9686 
   9687    `.code16gcc' provides experimental support for generating 16-bit
   9688 code from gcc, and differs from `.code16' in that `call', `ret',
   9689 `enter', `leave', `push', `pop', `pusha', `popa', `pushf', and `popf'
   9690 instructions default to 32-bit size.  This is so that the stack pointer
   9691 is manipulated in the same way over function calls, allowing access to
   9692 function parameters at the same stack offsets as in 32-bit mode.
   9693 `.code16gcc' also automatically adds address size prefixes where
   9694 necessary to use the 32-bit addressing modes that gcc generates.
   9695 
   9696    The code which `as' generates in 16-bit mode will not necessarily
   9697 run on a 16-bit pre-80386 processor.  To write code that runs on such a
   9698 processor, you must refrain from using _any_ 32-bit constructs which
   9699 require `as' to output address or operand size prefixes.
   9700 
   9701    Note that writing 16-bit code instructions by explicitly specifying a
   9702 prefix or an instruction mnemonic suffix within a 32-bit code section
   9703 generates different machine instructions than those generated for a
   9704 16-bit code segment.  In a 32-bit code section, the following code
   9705 generates the machine opcode bytes `66 6a 04', which pushes the value
   9706 `4' onto the stack, decrementing `%esp' by 2.
   9707 
   9708              pushw $4
   9709 
   9710    The same code in a 16-bit code section would generate the machine
   9711 opcode bytes `6a 04' (i.e., without the operand size prefix), which is
   9712 correct since the processor default operand size is assumed to be 16
   9713 bits in a 16-bit code section.
   9714 
   9715 
   9716 File: as.info,  Node: i386-Bugs,  Next: i386-Notes,  Prev: i386-Arch,  Up: i386-Dependent
   9717 
   9718 9.13.13 AT&T Syntax bugs
   9719 ------------------------
   9720 
   9721 The UnixWare assembler, and probably other AT&T derived ix86 Unix
   9722 assemblers, generate floating point instructions with reversed source
   9723 and destination registers in certain cases.  Unfortunately, gcc and
   9724 possibly many other programs use this reversed syntax, so we're stuck
   9725 with it.
   9726 
   9727    For example
   9728 
   9729              fsub %st,%st(3)
   9730    results in `%st(3)' being updated to `%st - %st(3)' rather than the
   9731 expected `%st(3) - %st'.  This happens with all the non-commutative
   9732 arithmetic floating point operations with two register operands where
   9733 the source register is `%st' and the destination register is `%st(i)'.
   9734 
   9735 
   9736 File: as.info,  Node: i386-Arch,  Next: i386-Bugs,  Prev: i386-16bit,  Up: i386-Dependent
   9737 
   9738 9.13.14 Specifying CPU Architecture
   9739 -----------------------------------
   9740 
   9741 `as' may be told to assemble for a particular CPU (sub-)architecture
   9742 with the `.arch CPU_TYPE' directive.  This directive enables a warning
   9743 when gas detects an instruction that is not supported on the CPU
   9744 specified.  The choices for CPU_TYPE are:
   9745 
   9746 `i8086'        `i186'         `i286'         `i386'
   9747 `i486'         `i586'         `i686'         `pentium'
   9748 `pentiumpro'   `pentiumii'    `pentiumiii'   `pentium4'
   9749 `prescott'     `nocona'       `core'         `core2'
   9750 `k6'           `k6_2'         `athlon'       `k8'
   9751 `amdfam10'                                   
   9752 `generic32'    `generic64'                   
   9753 `.mmx'         `.sse'         `.sse2'        `.sse3'
   9754 `.ssse3'       `.sse4.1'      `.sse4.2'      `.sse4'
   9755 `.avx'         `.vmx'         `.smx'         `.xsave'
   9756 `.aes'         `.pclmul'      `.fma'         `.movbe'
   9757 `.ept'                                       
   9758 `.3dnow'       `.3dnowa'      `.sse4a'       `.sse5'
   9759 `.svme'        `.abm'                        
   9760 `.padlock'                                   
   9761 
   9762    Apart from the warning, there are only two other effects on `as'
   9763 operation;  Firstly, if you specify a CPU other than `i486', then shift
   9764 by one instructions such as `sarl $1, %eax' will automatically use a
   9765 two byte opcode sequence.  The larger three byte opcode sequence is
   9766 used on the 486 (and when no architecture is specified) because it
   9767 executes faster on the 486.  Note that you can explicitly request the
   9768 two byte opcode by writing `sarl %eax'.  Secondly, if you specify
   9769 `i8086', `i186', or `i286', _and_ `.code16' or `.code16gcc' then byte
   9770 offset conditional jumps will be promoted when necessary to a two
   9771 instruction sequence consisting of a conditional jump of the opposite
   9772 sense around an unconditional jump to the target.
   9773 
   9774    Following the CPU architecture (but not a sub-architecture, which
   9775 are those starting with a dot), you may specify `jumps' or `nojumps' to
   9776 control automatic promotion of conditional jumps. `jumps' is the
   9777 default, and enables jump promotion;  All external jumps will be of the
   9778 long variety, and file-local jumps will be promoted as necessary.
   9779 (*note i386-Jumps::)  `nojumps' leaves external conditional jumps as
   9780 byte offset jumps, and warns about file-local conditional jumps that
   9781 `as' promotes.  Unconditional jumps are treated as for `jumps'.
   9782 
   9783    For example
   9784 
   9785       .arch i8086,nojumps
   9786 
   9787 
   9788 File: as.info,  Node: i386-Notes,  Prev: i386-Bugs,  Up: i386-Dependent
   9789 
   9790 9.13.15 Notes
   9791 -------------
   9792 
   9793 There is some trickery concerning the `mul' and `imul' instructions
   9794 that deserves mention.  The 16-, 32-, 64- and 128-bit expanding
   9795 multiplies (base opcode `0xf6'; extension 4 for `mul' and 5 for `imul')
   9796 can be output only in the one operand form.  Thus, `imul %ebx, %eax'
   9797 does _not_ select the expanding multiply; the expanding multiply would
   9798 clobber the `%edx' register, and this would confuse `gcc' output.  Use
   9799 `imul %ebx' to get the 64-bit product in `%edx:%eax'.
   9800 
   9801    We have added a two operand form of `imul' when the first operand is
   9802 an immediate mode expression and the second operand is a register.
   9803 This is just a shorthand, so that, multiplying `%eax' by 69, for
   9804 example, can be done with `imul $69, %eax' rather than `imul $69, %eax,
   9805 %eax'.
   9806 
   9807 
   9808 File: as.info,  Node: i860-Dependent,  Next: i960-Dependent,  Prev: i386-Dependent,  Up: Machine Dependencies
   9809 
   9810 9.14 Intel i860 Dependent Features
   9811 ==================================
   9812 
   9813 * Menu:
   9814 
   9815 * Notes-i860::                  i860 Notes
   9816 * Options-i860::                i860 Command-line Options
   9817 * Directives-i860::             i860 Machine Directives
   9818 * Opcodes for i860::            i860 Opcodes
   9819 
   9820 
   9821 File: as.info,  Node: Notes-i860,  Next: Options-i860,  Up: i860-Dependent
   9822 
   9823 9.14.1 i860 Notes
   9824 -----------------
   9825 
   9826 This is a fairly complete i860 assembler which is compatible with the
   9827 UNIX System V/860 Release 4 assembler. However, it does not currently
   9828 support SVR4 PIC (i.e., `@GOT, @GOTOFF, @PLT').
   9829 
   9830    Like the SVR4/860 assembler, the output object format is ELF32.
   9831 Currently, this is the only supported object format. If there is
   9832 sufficient interest, other formats such as COFF may be implemented.
   9833 
   9834    Both the Intel and AT&T/SVR4 syntaxes are supported, with the latter
   9835 being the default.  One difference is that AT&T syntax requires the '%'
   9836 prefix on register names while Intel syntax does not.  Another
   9837 difference is in the specification of relocatable expressions.  The
   9838 Intel syntax is `ha%expression' whereas the SVR4 syntax is
   9839 `[expression]@ha' (and similarly for the "l" and "h" selectors).
   9840 
   9841 
   9842 File: as.info,  Node: Options-i860,  Next: Directives-i860,  Prev: Notes-i860,  Up: i860-Dependent
   9843 
   9844 9.14.2 i860 Command-line Options
   9845 --------------------------------
   9846 
   9847 9.14.2.1 SVR4 compatibility options
   9848 ...................................
   9849 
   9850 `-V'
   9851      Print assembler version.
   9852 
   9853 `-Qy'
   9854      Ignored.
   9855 
   9856 `-Qn'
   9857      Ignored.
   9858 
   9859 9.14.2.2 Other options
   9860 ......................
   9861 
   9862 `-EL'
   9863      Select little endian output (this is the default).
   9864 
   9865 `-EB'
   9866      Select big endian output. Note that the i860 always reads
   9867      instructions as little endian data, so this option only effects
   9868      data and not instructions.
   9869 
   9870 `-mwarn-expand'
   9871      Emit a warning message if any pseudo-instruction expansions
   9872      occurred.  For example, a `or' instruction with an immediate
   9873      larger than 16-bits will be expanded into two instructions. This
   9874      is a very undesirable feature to rely on, so this flag can help
   9875      detect any code where it happens. One use of it, for instance, has
   9876      been to find and eliminate any place where `gcc' may emit these
   9877      pseudo-instructions.
   9878 
   9879 `-mxp'
   9880      Enable support for the i860XP instructions and control registers.
   9881      By default, this option is disabled so that only the base
   9882      instruction set (i.e., i860XR) is supported.
   9883 
   9884 `-mintel-syntax'
   9885      The i860 assembler defaults to AT&T/SVR4 syntax.  This option
   9886      enables the Intel syntax.
   9887 
   9888 
   9889 File: as.info,  Node: Directives-i860,  Next: Opcodes for i860,  Prev: Options-i860,  Up: i860-Dependent
   9890 
   9891 9.14.3 i860 Machine Directives
   9892 ------------------------------
   9893 
   9894 `.dual'
   9895      Enter dual instruction mode. While this directive is supported, the
   9896      preferred way to use dual instruction mode is to explicitly code
   9897      the dual bit with the `d.' prefix.
   9898 
   9899 `.enddual'
   9900      Exit dual instruction mode. While this directive is supported, the
   9901      preferred way to use dual instruction mode is to explicitly code
   9902      the dual bit with the `d.' prefix.
   9903 
   9904 `.atmp'
   9905      Change the temporary register used when expanding pseudo
   9906      operations. The default register is `r31'.
   9907 
   9908    The `.dual', `.enddual', and `.atmp' directives are available only
   9909 in the Intel syntax mode.
   9910 
   9911    Both syntaxes allow for the standard `.align' directive.  However,
   9912 the Intel syntax additionally allows keywords for the alignment
   9913 parameter: "`.align type'", where `type' is one of `.short', `.long',
   9914 `.quad', `.single', `.double' representing alignments of 2, 4, 16, 4,
   9915 and 8, respectively.
   9916 
   9917 
   9918 File: as.info,  Node: Opcodes for i860,  Prev: Directives-i860,  Up: i860-Dependent
   9919 
   9920 9.14.4 i860 Opcodes
   9921 -------------------
   9922 
   9923 All of the Intel i860XR and i860XP machine instructions are supported.
   9924 Please see either _i860 Microprocessor Programmer's Reference Manual_
   9925 or _i860 Microprocessor Architecture_ for more information.
   9926 
   9927 9.14.4.1 Other instruction support (pseudo-instructions)
   9928 ........................................................
   9929 
   9930 For compatibility with some other i860 assemblers, a number of
   9931 pseudo-instructions are supported. While these are supported, they are
   9932 a very undesirable feature that should be avoided - in particular, when
   9933 they result in an expansion to multiple actual i860 instructions. Below
   9934 are the pseudo-instructions that result in expansions.
   9935    * Load large immediate into general register:
   9936 
   9937      The pseudo-instruction `mov imm,%rn' (where the immediate does not
   9938      fit within a signed 16-bit field) will be expanded into:
   9939           orh large_imm@h,%r0,%rn
   9940           or large_imm@l,%rn,%rn
   9941 
   9942    * Load/store with relocatable address expression:
   9943 
   9944      For example, the pseudo-instruction `ld.b addr_exp(%rx),%rn' will
   9945      be expanded into:
   9946           orh addr_exp@ha,%rx,%r31
   9947           ld.l addr_exp@l(%r31),%rn
   9948 
   9949      The analogous expansions apply to `ld.x, st.x, fld.x, pfld.x,
   9950      fst.x', and `pst.x' as well.
   9951 
   9952    * Signed large immediate with add/subtract:
   9953 
   9954      If any of the arithmetic operations `adds, addu, subs, subu' are
   9955      used with an immediate larger than 16-bits (signed), then they
   9956      will be expanded.  For instance, the pseudo-instruction `adds
   9957      large_imm,%rx,%rn' expands to:
   9958           orh large_imm@h,%r0,%r31
   9959           or large_imm@l,%r31,%r31
   9960           adds %r31,%rx,%rn
   9961 
   9962    * Unsigned large immediate with logical operations:
   9963 
   9964      Logical operations (`or, andnot, or, xor') also result in
   9965      expansions.  The pseudo-instruction `or large_imm,%rx,%rn' results
   9966      in:
   9967           orh large_imm@h,%rx,%r31
   9968           or large_imm@l,%r31,%rn
   9969 
   9970      Similarly for the others, except for `and' which expands to:
   9971           andnot (-1 - large_imm)@h,%rx,%r31
   9972           andnot (-1 - large_imm)@l,%r31,%rn
   9973 
   9974 
   9975 File: as.info,  Node: i960-Dependent,  Next: IA-64-Dependent,  Prev: i860-Dependent,  Up: Machine Dependencies
   9976 
   9977 9.15 Intel 80960 Dependent Features
   9978 ===================================
   9979 
   9980 * Menu:
   9981 
   9982 * Options-i960::                i960 Command-line Options
   9983 * Floating Point-i960::         Floating Point
   9984 * Directives-i960::             i960 Machine Directives
   9985 * Opcodes for i960::            i960 Opcodes
   9986 
   9987 
   9988 File: as.info,  Node: Options-i960,  Next: Floating Point-i960,  Up: i960-Dependent
   9989 
   9990 9.15.1 i960 Command-line Options
   9991 --------------------------------
   9992 
   9993 `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
   9994      Select the 80960 architecture.  Instructions or features not
   9995      supported by the selected architecture cause fatal errors.
   9996 
   9997      `-ACA' is equivalent to `-ACA_A'; `-AKC' is equivalent to `-AMC'.
   9998      Synonyms are provided for compatibility with other tools.
   9999 
   10000      If you do not specify any of these options, `as' generates code
   10001      for any instruction or feature that is supported by _some_ version
   10002      of the 960 (even if this means mixing architectures!).  In
   10003      principle, `as' attempts to deduce the minimal sufficient
   10004      processor type if none is specified; depending on the object code
   10005      format, the processor type may be recorded in the object file.  If
   10006      it is critical that the `as' output match a specific architecture,
   10007      specify that architecture explicitly.
   10008 
   10009 `-b'
   10010      Add code to collect information about conditional branches taken,
   10011      for later optimization using branch prediction bits.  (The
   10012      conditional branch instructions have branch prediction bits in the
   10013      CA, CB, and CC architectures.)  If BR represents a conditional
   10014      branch instruction, the following represents the code generated by
   10015      the assembler when `-b' is specified:
   10016 
   10017                   call    INCREMENT ROUTINE
   10018                   .word   0       # pre-counter
   10019           Label:  BR
   10020                   call    INCREMENT ROUTINE
   10021                   .word   0       # post-counter
   10022 
   10023      The counter following a branch records the number of times that
   10024      branch was _not_ taken; the difference between the two counters is
   10025      the number of times the branch _was_ taken.
   10026 
   10027      A table of every such `Label' is also generated, so that the
   10028      external postprocessor `gbr960' (supplied by Intel) can locate all
   10029      the counters.  This table is always labeled `__BRANCH_TABLE__';
   10030      this is a local symbol to permit collecting statistics for many
   10031      separate object files.  The table is word aligned, and begins with
   10032      a two-word header.  The first word, initialized to 0, is used in
   10033      maintaining linked lists of branch tables.  The second word is a
   10034      count of the number of entries in the table, which follow
   10035      immediately: each is a word, pointing to one of the labels
   10036      illustrated above.
   10037 
   10038            +------------+------------+------------+ ... +------------+
   10039            |            |            |            |     |            |
   10040            |  *NEXT     |  COUNT: N  | *BRLAB 1   |     | *BRLAB N   |
   10041            |            |            |            |     |            |
   10042            +------------+------------+------------+ ... +------------+
   10043 
   10044                          __BRANCH_TABLE__ layout
   10045 
   10046      The first word of the header is used to locate multiple branch
   10047      tables, since each object file may contain one. Normally the links
   10048      are maintained with a call to an initialization routine, placed at
   10049      the beginning of each function in the file.  The GNU C compiler
   10050      generates these calls automatically when you give it a `-b' option.
   10051      For further details, see the documentation of `gbr960'.
   10052 
   10053 `-no-relax'
   10054      Normally, Compare-and-Branch instructions with targets that require
   10055      displacements greater than 13 bits (or that have external targets)
   10056      are replaced with the corresponding compare (or `chkbit') and
   10057      branch instructions.  You can use the `-no-relax' option to
   10058      specify that `as' should generate errors instead, if the target
   10059      displacement is larger than 13 bits.
   10060 
   10061      This option does not affect the Compare-and-Jump instructions; the
   10062      code emitted for them is _always_ adjusted when necessary
   10063      (depending on displacement size), regardless of whether you use
   10064      `-no-relax'.
   10065 
   10066 
   10067 File: as.info,  Node: Floating Point-i960,  Next: Directives-i960,  Prev: Options-i960,  Up: i960-Dependent
   10068 
   10069 9.15.2 Floating Point
   10070 ---------------------
   10071 
   10072 `as' generates IEEE floating-point numbers for the directives `.float',
   10073 `.double', `.extended', and `.single'.
   10074 
   10075 
   10076 File: as.info,  Node: Directives-i960,  Next: Opcodes for i960,  Prev: Floating Point-i960,  Up: i960-Dependent
   10077 
   10078 9.15.3 i960 Machine Directives
   10079 ------------------------------
   10080 
   10081 `.bss SYMBOL, LENGTH, ALIGN'
   10082      Reserve LENGTH bytes in the bss section for a local SYMBOL,
   10083      aligned to the power of two specified by ALIGN.  LENGTH and ALIGN
   10084      must be positive absolute expressions.  This directive differs
   10085      from `.lcomm' only in that it permits you to specify an alignment.
   10086      *Note `.lcomm': Lcomm.
   10087 
   10088 `.extended FLONUMS'
   10089      `.extended' expects zero or more flonums, separated by commas; for
   10090      each flonum, `.extended' emits an IEEE extended-format (80-bit)
   10091      floating-point number.
   10092 
   10093 `.leafproc CALL-LAB, BAL-LAB'
   10094      You can use the `.leafproc' directive in conjunction with the
   10095      optimized `callj' instruction to enable faster calls of leaf
   10096      procedures.  If a procedure is known to call no other procedures,
   10097      you may define an entry point that skips procedure prolog code
   10098      (and that does not depend on system-supplied saved context), and
   10099      declare it as the BAL-LAB using `.leafproc'.  If the procedure
   10100      also has an entry point that goes through the normal prolog, you
   10101      can specify that entry point as CALL-LAB.
   10102 
   10103      A `.leafproc' declaration is meant for use in conjunction with the
   10104      optimized call instruction `callj'; the directive records the data
   10105      needed later to choose between converting the `callj' into a `bal'
   10106      or a `call'.
   10107 
   10108      CALL-LAB is optional; if only one argument is present, or if the
   10109      two arguments are identical, the single argument is assumed to be
   10110      the `bal' entry point.
   10111 
   10112 `.sysproc NAME, INDEX'
   10113      The `.sysproc' directive defines a name for a system procedure.
   10114      After you define it using `.sysproc', you can use NAME to refer to
   10115      the system procedure identified by INDEX when calling procedures
   10116      with the optimized call instruction `callj'.
   10117 
   10118      Both arguments are required; INDEX must be between 0 and 31
   10119      (inclusive).
   10120 
   10121 
   10122 File: as.info,  Node: Opcodes for i960,  Prev: Directives-i960,  Up: i960-Dependent
   10123 
   10124 9.15.4 i960 Opcodes
   10125 -------------------
   10126 
   10127 All Intel 960 machine instructions are supported; *note i960
   10128 Command-line Options: Options-i960. for a discussion of selecting the
   10129 instruction subset for a particular 960 architecture.
   10130 
   10131    Some opcodes are processed beyond simply emitting a single
   10132 corresponding instruction: `callj', and Compare-and-Branch or
   10133 Compare-and-Jump instructions with target displacements larger than 13
   10134 bits.
   10135 
   10136 * Menu:
   10137 
   10138 * callj-i960::                  `callj'
   10139 * Compare-and-branch-i960::     Compare-and-Branch
   10140 
   10141 
   10142 File: as.info,  Node: callj-i960,  Next: Compare-and-branch-i960,  Up: Opcodes for i960
   10143 
   10144 9.15.4.1 `callj'
   10145 ................
   10146 
   10147 You can write `callj' to have the assembler or the linker determine the
   10148 most appropriate form of subroutine call: `call', `bal', or `calls'.
   10149 If the assembly source contains enough information--a `.leafproc' or
   10150 `.sysproc' directive defining the operand--then `as' translates the
   10151 `callj'; if not, it simply emits the `callj', leaving it for the linker
   10152 to resolve.
   10153 
   10154 
   10155 File: as.info,  Node: Compare-and-branch-i960,  Prev: callj-i960,  Up: Opcodes for i960
   10156 
   10157 9.15.4.2 Compare-and-Branch
   10158 ...........................
   10159 
   10160 The 960 architectures provide combined Compare-and-Branch instructions
   10161 that permit you to store the branch target in the lower 13 bits of the
   10162 instruction word itself.  However, if you specify a branch target far
   10163 enough away that its address won't fit in 13 bits, the assembler can
   10164 either issue an error, or convert your Compare-and-Branch instruction
   10165 into separate instructions to do the compare and the branch.
   10166 
   10167    Whether `as' gives an error or expands the instruction depends on
   10168 two choices you can make: whether you use the `-no-relax' option, and
   10169 whether you use a "Compare and Branch" instruction or a "Compare and
   10170 Jump" instruction.  The "Jump" instructions are _always_ expanded if
   10171 necessary; the "Branch" instructions are expanded when necessary
   10172 _unless_ you specify `-no-relax'--in which case `as' gives an error
   10173 instead.
   10174 
   10175    These are the Compare-and-Branch instructions, their "Jump" variants,
   10176 and the instruction pairs they may expand into:
   10177 
   10178              Compare and
   10179           Branch      Jump       Expanded to
   10180           ------    ------       ------------
   10181              bbc                 chkbit; bno
   10182              bbs                 chkbit; bo
   10183           cmpibe    cmpije       cmpi; be
   10184           cmpibg    cmpijg       cmpi; bg
   10185          cmpibge   cmpijge       cmpi; bge
   10186           cmpibl    cmpijl       cmpi; bl
   10187          cmpible   cmpijle       cmpi; ble
   10188          cmpibno   cmpijno       cmpi; bno
   10189          cmpibne   cmpijne       cmpi; bne
   10190           cmpibo    cmpijo       cmpi; bo
   10191           cmpobe    cmpoje       cmpo; be
   10192           cmpobg    cmpojg       cmpo; bg
   10193          cmpobge   cmpojge       cmpo; bge
   10194           cmpobl    cmpojl       cmpo; bl
   10195          cmpoble   cmpojle       cmpo; ble
   10196          cmpobne   cmpojne       cmpo; bne
   10197 
   10198 
   10199 File: as.info,  Node: IA-64-Dependent,  Next: IP2K-Dependent,  Prev: i960-Dependent,  Up: Machine Dependencies
   10200 
   10201 9.16 IA-64 Dependent Features
   10202 =============================
   10203 
   10204 * Menu:
   10205 
   10206 * IA-64 Options::              Options
   10207 * IA-64 Syntax::               Syntax
   10208 * IA-64 Opcodes::              Opcodes
   10209 
   10210 
   10211 File: as.info,  Node: IA-64 Options,  Next: IA-64 Syntax,  Up: IA-64-Dependent
   10212 
   10213 9.16.1 Options
   10214 --------------
   10215 
   10216 `-mconstant-gp'
   10217      This option instructs the assembler to mark the resulting object
   10218      file as using the "constant GP" model.  With this model, it is
   10219      assumed that the entire program uses a single global pointer (GP)
   10220      value.  Note that this option does not in any fashion affect the
   10221      machine code emitted by the assembler.  All it does is turn on the
   10222      EF_IA_64_CONS_GP flag in the ELF file header.
   10223 
   10224 `-mauto-pic'
   10225      This option instructs the assembler to mark the resulting object
   10226      file as using the "constant GP without function descriptor" data
   10227      model.  This model is like the "constant GP" model, except that it
   10228      additionally does away with function descriptors.  What this means
   10229      is that the address of a function refers directly to the
   10230      function's code entry-point.  Normally, such an address would
   10231      refer to a function descriptor, which contains both the code
   10232      entry-point and the GP-value needed by the function.  Note that
   10233      this option does not in any fashion affect the machine code
   10234      emitted by the assembler.  All it does is turn on the
   10235      EF_IA_64_NOFUNCDESC_CONS_GP flag in the ELF file header.
   10236 
   10237 `-milp32'
   10238 
   10239 `-milp64'
   10240 
   10241 `-mlp64'
   10242 
   10243 `-mp64'
   10244      These options select the data model.  The assembler defaults to
   10245      `-mlp64' (LP64 data model).
   10246 
   10247 `-mle'
   10248 
   10249 `-mbe'
   10250      These options select the byte order.  The `-mle' option selects
   10251      little-endian byte order (default) and `-mbe' selects big-endian
   10252      byte order.  Note that IA-64 machine code always uses
   10253      little-endian byte order.
   10254 
   10255 `-mtune=itanium1'
   10256 
   10257 `-mtune=itanium2'
   10258      Tune for a particular IA-64 CPU, ITANIUM1 or ITANIUM2. The default
   10259      is ITANIUM2.
   10260 
   10261 `-munwind-check=warning'
   10262 
   10263 `-munwind-check=error'
   10264      These options control what the assembler will do when performing
   10265      consistency checks on unwind directives.  `-munwind-check=warning'
   10266      will make the assembler issue a warning when an unwind directive
   10267      check fails.  This is the default.  `-munwind-check=error' will
   10268      make the assembler issue an error when an unwind directive check
   10269      fails.
   10270 
   10271 `-mhint.b=ok'
   10272 
   10273 `-mhint.b=warning'
   10274 
   10275 `-mhint.b=error'
   10276      These options control what the assembler will do when the `hint.b'
   10277      instruction is used.  `-mhint.b=ok' will make the assembler accept
   10278      `hint.b'.  `-mint.b=warning' will make the assembler issue a
   10279      warning when `hint.b' is used.  `-mhint.b=error' will make the
   10280      assembler treat `hint.b' as an error, which is the default.
   10281 
   10282 `-x'
   10283 
   10284 `-xexplicit'
   10285      These options turn on dependency violation checking.
   10286 
   10287 `-xauto'
   10288      This option instructs the assembler to automatically insert stop
   10289      bits where necessary to remove dependency violations.  This is the
   10290      default mode.
   10291 
   10292 `-xnone'
   10293      This option turns off dependency violation checking.
   10294 
   10295 `-xdebug'
   10296      This turns on debug output intended to help tracking down bugs in
   10297      the dependency violation checker.
   10298 
   10299 `-xdebugn'
   10300      This is a shortcut for -xnone -xdebug.
   10301 
   10302 `-xdebugx'
   10303      This is a shortcut for -xexplicit -xdebug.
   10304 
   10305 
   10306 
   10307 File: as.info,  Node: IA-64 Syntax,  Next: IA-64 Opcodes,  Prev: IA-64 Options,  Up: IA-64-Dependent
   10308 
   10309 9.16.2 Syntax
   10310 -------------
   10311 
   10312 The assembler syntax closely follows the IA-64 Assembly Language
   10313 Reference Guide.
   10314 
   10315 * Menu:
   10316 
   10317 * IA-64-Chars::                Special Characters
   10318 * IA-64-Regs::                 Register Names
   10319 * IA-64-Bits::                 Bit Names
   10320 
   10321 
   10322 File: as.info,  Node: IA-64-Chars,  Next: IA-64-Regs,  Up: IA-64 Syntax
   10323 
   10324 9.16.2.1 Special Characters
   10325 ...........................
   10326 
   10327 `//' is the line comment token.
   10328 
   10329    `;' can be used instead of a newline to separate statements.
   10330 
   10331 
   10332 File: as.info,  Node: IA-64-Regs,  Next: IA-64-Bits,  Prev: IA-64-Chars,  Up: IA-64 Syntax
   10333 
   10334 9.16.2.2 Register Names
   10335 .......................
   10336 
   10337 The 128 integer registers are referred to as `rN'.  The 128
   10338 floating-point registers are referred to as `fN'.  The 128 application
   10339 registers are referred to as `arN'.  The 128 control registers are
   10340 referred to as `crN'.  The 64 one-bit predicate registers are referred
   10341 to as `pN'.  The 8 branch registers are referred to as `bN'.  In
   10342 addition, the assembler defines a number of aliases: `gp' (`r1'), `sp'
   10343 (`r12'), `rp' (`b0'), `ret0' (`r8'), `ret1' (`r9'), `ret2' (`r10'),
   10344 `ret3' (`r9'), `fargN' (`f8+N'), and `fretN' (`f8+N').
   10345 
   10346    For convenience, the assembler also defines aliases for all named
   10347 application and control registers.  For example, `ar.bsp' refers to the
   10348 register backing store pointer (`ar17').  Similarly, `cr.eoi' refers to
   10349 the end-of-interrupt register (`cr67').
   10350 
   10351 
   10352 File: as.info,  Node: IA-64-Bits,  Prev: IA-64-Regs,  Up: IA-64 Syntax
   10353 
   10354 9.16.2.3 IA-64 Processor-Status-Register (PSR) Bit Names
   10355 ........................................................
   10356 
   10357 The assembler defines bit masks for each of the bits in the IA-64
   10358 processor status register.  For example, `psr.ic' corresponds to a
   10359 value of 0x2000.  These masks are primarily intended for use with the
   10360 `ssm'/`sum' and `rsm'/`rum' instructions, but they can be used anywhere
   10361 else where an integer constant is expected.
   10362 
   10363 
   10364 File: as.info,  Node: IA-64 Opcodes,  Prev: IA-64 Syntax,  Up: IA-64-Dependent
   10365 
   10366 9.16.3 Opcodes
   10367 --------------
   10368 
   10369 For detailed information on the IA-64 machine instruction set, see the
   10370 IA-64 Architecture Handbook
   10371 (http://developer.intel.com/design/itanium/arch_spec.htm).
   10372 
   10373 
   10374 File: as.info,  Node: IP2K-Dependent,  Next: M32C-Dependent,  Prev: IA-64-Dependent,  Up: Machine Dependencies
   10375 
   10376 9.17 IP2K Dependent Features
   10377 ============================
   10378 
   10379 * Menu:
   10380 
   10381 * IP2K-Opts::                   IP2K Options
   10382 
   10383 
   10384 File: as.info,  Node: IP2K-Opts,  Up: IP2K-Dependent
   10385 
   10386 9.17.1 IP2K Options
   10387 -------------------
   10388 
   10389 The Ubicom IP2K version of `as' has a few machine dependent options:
   10390 
   10391 `-mip2022ext'
   10392      `as' can assemble the extended IP2022 instructions, but it will
   10393      only do so if this is specifically allowed via this command line
   10394      option.
   10395 
   10396 `-mip2022'
   10397      This option restores the assembler's default behaviour of not
   10398      permitting the extended IP2022 instructions to be assembled.
   10399 
   10400 
   10401 
   10402 File: as.info,  Node: M32C-Dependent,  Next: M32R-Dependent,  Prev: IP2K-Dependent,  Up: Machine Dependencies
   10403 
   10404 9.18 M32C Dependent Features
   10405 ============================
   10406 
   10407    `as' can assemble code for several different members of the Renesas
   10408 M32C family.  Normally the default is to assemble code for the M16C
   10409 microprocessor.  The `-m32c' option may be used to change the default
   10410 to the M32C microprocessor.
   10411 
   10412 * Menu:
   10413 
   10414 * M32C-Opts::                   M32C Options
   10415 * M32C-Modifiers::              Symbolic Operand Modifiers
   10416 
   10417 
   10418 File: as.info,  Node: M32C-Opts,  Next: M32C-Modifiers,  Up: M32C-Dependent
   10419 
   10420 9.18.1 M32C Options
   10421 -------------------
   10422 
   10423 The Renesas M32C version of `as' has these machine-dependent options:
   10424 
   10425 `-m32c'
   10426      Assemble M32C instructions.
   10427 
   10428 `-m16c'
   10429      Assemble M16C instructions (default).
   10430 
   10431 `-relax'
   10432      Enable support for link-time relaxations.
   10433 
   10434 `-h-tick-hex'
   10435      Support H'00 style hex constants in addition to 0x00 style.
   10436 
   10437 
   10438 
   10439 File: as.info,  Node: M32C-Modifiers,  Prev: M32C-Opts,  Up: M32C-Dependent
   10440 
   10441 9.18.2 Symbolic Operand Modifiers
   10442 ---------------------------------
   10443 
   10444 The assembler supports several modifiers when using symbol addresses in
   10445 M32C instruction operands.  The general syntax is the following:
   10446 
   10447      %modifier(symbol)
   10448 
   10449 `%dsp8'
   10450 `%dsp16'
   10451      These modifiers override the assembler's assumptions about how big
   10452      a symbol's address is.  Normally, when it sees an operand like
   10453      `sym[a0]' it assumes `sym' may require the widest displacement
   10454      field (16 bits for `-m16c', 24 bits for `-m32c').  These modifiers
   10455      tell it to assume the address will fit in an 8 or 16 bit
   10456      (respectively) unsigned displacement.  Note that, of course, if it
   10457      doesn't actually fit you will get linker errors.  Example:
   10458 
   10459           mov.w %dsp8(sym)[a0],r1
   10460           mov.b #0,%dsp8(sym)[a0]
   10461 
   10462 `%hi8'
   10463      This modifier allows you to load bits 16 through 23 of a 24 bit
   10464      address into an 8 bit register.  This is useful with, for example,
   10465      the M16C `smovf' instruction, which expects a 20 bit address in
   10466      `r1h' and `a0'.  Example:
   10467 
   10468           mov.b #%hi8(sym),r1h
   10469           mov.w #%lo16(sym),a0
   10470           smovf.b
   10471 
   10472 `%lo16'
   10473      Likewise, this modifier allows you to load bits 0 through 15 of a
   10474      24 bit address into a 16 bit register.
   10475 
   10476 `%hi16'
   10477      This modifier allows you to load bits 16 through 31 of a 32 bit
   10478      address into a 16 bit register.  While the M32C family only has 24
   10479      bits of address space, it does support addresses in pairs of 16 bit
   10480      registers (like `a1a0' for the `lde' instruction).  This modifier
   10481      is for loading the upper half in such cases.  Example:
   10482 
   10483           mov.w #%hi16(sym),a1
   10484           mov.w #%lo16(sym),a0
   10485           ...
   10486           lde.w [a1a0],r1
   10487 
   10488 
   10489 
   10490 File: as.info,  Node: M32R-Dependent,  Next: M68K-Dependent,  Prev: M32C-Dependent,  Up: Machine Dependencies
   10491 
   10492 9.19 M32R Dependent Features
   10493 ============================
   10494 
   10495 * Menu:
   10496 
   10497 * M32R-Opts::                   M32R Options
   10498 * M32R-Directives::             M32R Directives
   10499 * M32R-Warnings::               M32R Warnings
   10500 
   10501 
   10502 File: as.info,  Node: M32R-Opts,  Next: M32R-Directives,  Up: M32R-Dependent
   10503 
   10504 9.19.1 M32R Options
   10505 -------------------
   10506 
   10507 The Renease M32R version of `as' has a few machine dependent options:
   10508 
   10509 `-m32rx'
   10510      `as' can assemble code for several different members of the
   10511      Renesas M32R family.  Normally the default is to assemble code for
   10512      the M32R microprocessor.  This option may be used to change the
   10513      default to the M32RX microprocessor, which adds some more
   10514      instructions to the basic M32R instruction set, and some
   10515      additional parameters to some of the original instructions.
   10516 
   10517 `-m32r2'
   10518      This option changes the target processor to the the M32R2
   10519      microprocessor.
   10520 
   10521 `-m32r'
   10522      This option can be used to restore the assembler's default
   10523      behaviour of assembling for the M32R microprocessor.  This can be
   10524      useful if the default has been changed by a previous command line
   10525      option.
   10526 
   10527 `-little'
   10528      This option tells the assembler to produce little-endian code and
   10529      data.  The default is dependent upon how the toolchain was
   10530      configured.
   10531 
   10532 `-EL'
   10533      This is a synonym for _-little_.
   10534 
   10535 `-big'
   10536      This option tells the assembler to produce big-endian code and
   10537      data.
   10538 
   10539 `-EB'
   10540      This is a synonum for _-big_.
   10541 
   10542 `-KPIC'
   10543      This option specifies that the output of the assembler should be
   10544      marked as position-independent code (PIC).
   10545 
   10546 `-parallel'
   10547      This option tells the assembler to attempts to combine two
   10548      sequential instructions into a single, parallel instruction, where
   10549      it is legal to do so.
   10550 
   10551 `-no-parallel'
   10552      This option disables a previously enabled _-parallel_ option.
   10553 
   10554 `-no-bitinst'
   10555      This option disables the support for the extended bit-field
   10556      instructions provided by the M32R2.  If this support needs to be
   10557      re-enabled the _-bitinst_ switch can be used to restore it.
   10558 
   10559 `-O'
   10560      This option tells the assembler to attempt to optimize the
   10561      instructions that it produces.  This includes filling delay slots
   10562      and converting sequential instructions into parallel ones.  This
   10563      option implies _-parallel_.
   10564 
   10565 `-warn-explicit-parallel-conflicts'
   10566      Instructs `as' to produce warning messages when questionable
   10567      parallel instructions are encountered.  This option is enabled by
   10568      default, but `gcc' disables it when it invokes `as' directly.
   10569      Questionable instructions are those whose behaviour would be
   10570      different if they were executed sequentially.  For example the
   10571      code fragment `mv r1, r2 || mv r3, r1' produces a different result
   10572      from `mv r1, r2 \n mv r3, r1' since the former moves r1 into r3
   10573      and then r2 into r1, whereas the later moves r2 into r1 and r3.
   10574 
   10575 `-Wp'
   10576      This is a shorter synonym for the
   10577      _-warn-explicit-parallel-conflicts_ option.
   10578 
   10579 `-no-warn-explicit-parallel-conflicts'
   10580      Instructs `as' not to produce warning messages when questionable
   10581      parallel instructions are encountered.
   10582 
   10583 `-Wnp'
   10584      This is a shorter synonym for the
   10585      _-no-warn-explicit-parallel-conflicts_ option.
   10586 
   10587 `-ignore-parallel-conflicts'
   10588      This option tells the assembler's to stop checking parallel
   10589      instructions for constraint violations.  This ability is provided
   10590      for hardware vendors testing chip designs and should not be used
   10591      under normal circumstances.
   10592 
   10593 `-no-ignore-parallel-conflicts'
   10594      This option restores the assembler's default behaviour of checking
   10595      parallel instructions to detect constraint violations.
   10596 
   10597 `-Ip'
   10598      This is a shorter synonym for the _-ignore-parallel-conflicts_
   10599      option.
   10600 
   10601 `-nIp'
   10602      This is a shorter synonym for the _-no-ignore-parallel-conflicts_
   10603      option.
   10604 
   10605 `-warn-unmatched-high'
   10606      This option tells the assembler to produce a warning message if a
   10607      `.high' pseudo op is encountered without a matching `.low' pseudo
   10608      op.  The presence of such an unmatched pseudo op usually indicates
   10609      a programming error.
   10610 
   10611 `-no-warn-unmatched-high'
   10612      Disables a previously enabled _-warn-unmatched-high_ option.
   10613 
   10614 `-Wuh'
   10615      This is a shorter synonym for the _-warn-unmatched-high_ option.
   10616 
   10617 `-Wnuh'
   10618      This is a shorter synonym for the _-no-warn-unmatched-high_ option.
   10619 
   10620 
   10621 
   10622 File: as.info,  Node: M32R-Directives,  Next: M32R-Warnings,  Prev: M32R-Opts,  Up: M32R-Dependent
   10623 
   10624 9.19.2 M32R Directives
   10625 ----------------------
   10626 
   10627 The Renease M32R version of `as' has a few architecture specific
   10628 directives:
   10629 
   10630 `low EXPRESSION'
   10631      The `low' directive computes the value of its expression and
   10632      places the lower 16-bits of the result into the immediate-field of
   10633      the instruction.  For example:
   10634 
   10635              or3   r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678
   10636              add3, r0, r0, #low(fred)   ; compute r0 = r0 + low 16-bits of address of fred
   10637 
   10638 `high EXPRESSION'
   10639      The `high' directive computes the value of its expression and
   10640      places the upper 16-bits of the result into the immediate-field of
   10641      the instruction.  For example:
   10642 
   10643              seth  r0, #high(0x12345678) ; compute r0 = 0x12340000
   10644              seth, r0, #high(fred)       ; compute r0 = upper 16-bits of address of fred
   10645 
   10646 `shigh EXPRESSION'
   10647      The `shigh' directive is very similar to the `high' directive.  It
   10648      also computes the value of its expression and places the upper
   10649      16-bits of the result into the immediate-field of the instruction.
   10650      The difference is that `shigh' also checks to see if the lower
   10651      16-bits could be interpreted as a signed number, and if so it
   10652      assumes that a borrow will occur from the upper-16 bits.  To
   10653      compensate for this the `shigh' directive pre-biases the upper 16
   10654      bit value by adding one to it.  For example:
   10655 
   10656      For example:
   10657 
   10658              seth  r0, #shigh(0x12345678) ; compute r0 = 0x12340000
   10659              seth  r0, #shigh(0x00008000) ; compute r0 = 0x00010000
   10660 
   10661      In the second example the lower 16-bits are 0x8000.  If these are
   10662      treated as a signed value and sign extended to 32-bits then the
   10663      value becomes 0xffff8000.  If this value is then added to
   10664      0x00010000 then the result is 0x00008000.
   10665 
   10666      This behaviour is to allow for the different semantics of the
   10667      `or3' and `add3' instructions.  The `or3' instruction treats its
   10668      16-bit immediate argument as unsigned whereas the `add3' treats
   10669      its 16-bit immediate as a signed value.  So for example:
   10670 
   10671              seth  r0, #shigh(0x00008000)
   10672              add3  r0, r0, #low(0x00008000)
   10673 
   10674      Produces the correct result in r0, whereas:
   10675 
   10676              seth  r0, #shigh(0x00008000)
   10677              or3   r0, r0, #low(0x00008000)
   10678 
   10679      Stores 0xffff8000 into r0.
   10680 
   10681      Note - the `shigh' directive does not know where in the assembly
   10682      source code the lower 16-bits of the value are going set, so it
   10683      cannot check to make sure that an `or3' instruction is being used
   10684      rather than an `add3' instruction.  It is up to the programmer to
   10685      make sure that correct directives are used.
   10686 
   10687 `.m32r'
   10688      The directive performs a similar thing as the _-m32r_ command line
   10689      option.  It tells the assembler to only accept M32R instructions
   10690      from now on.  An instructions from later M32R architectures are
   10691      refused.
   10692 
   10693 `.m32rx'
   10694      The directive performs a similar thing as the _-m32rx_ command
   10695      line option.  It tells the assembler to start accepting the extra
   10696      instructions in the M32RX ISA as well as the ordinary M32R ISA.
   10697 
   10698 `.m32r2'
   10699      The directive performs a similar thing as the _-m32r2_ command
   10700      line option.  It tells the assembler to start accepting the extra
   10701      instructions in the M32R2 ISA as well as the ordinary M32R ISA.
   10702 
   10703 `.little'
   10704      The directive performs a similar thing as the _-little_ command
   10705      line option.  It tells the assembler to start producing
   10706      little-endian code and data.  This option should be used with care
   10707      as producing mixed-endian binary files is fraught with danger.
   10708 
   10709 `.big'
   10710      The directive performs a similar thing as the _-big_ command line
   10711      option.  It tells the assembler to start producing big-endian code
   10712      and data.  This option should be used with care as producing
   10713      mixed-endian binary files is fraught with danger.
   10714 
   10715 
   10716 
   10717 File: as.info,  Node: M32R-Warnings,  Prev: M32R-Directives,  Up: M32R-Dependent
   10718 
   10719 9.19.3 M32R Warnings
   10720 --------------------
   10721 
   10722 There are several warning and error messages that can be produced by
   10723 `as' which are specific to the M32R:
   10724 
   10725 `output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?'
   10726      This message is only produced if warnings for explicit parallel
   10727      conflicts have been enabled.  It indicates that the assembler has
   10728      encountered a parallel instruction in which the destination
   10729      register of the left hand instruction is used as an input register
   10730      in the right hand instruction.  For example in this code fragment
   10731      `mv r1, r2 || neg r3, r1' register r1 is the destination of the
   10732      move instruction and the input to the neg instruction.
   10733 
   10734 `output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?'
   10735      This message is only produced if warnings for explicit parallel
   10736      conflicts have been enabled.  It indicates that the assembler has
   10737      encountered a parallel instruction in which the destination
   10738      register of the right hand instruction is used as an input
   10739      register in the left hand instruction.  For example in this code
   10740      fragment `mv r1, r2 || neg r2, r3' register r2 is the destination
   10741      of the neg instruction and the input to the move instruction.
   10742 
   10743 `instruction `...' is for the M32RX only'
   10744      This message is produced when the assembler encounters an
   10745      instruction which is only supported by the M32Rx processor, and
   10746      the `-m32rx' command line flag has not been specified to allow
   10747      assembly of such instructions.
   10748 
   10749 `unknown instruction `...''
   10750      This message is produced when the assembler encounters an
   10751      instruction which it does not recognize.
   10752 
   10753 `only the NOP instruction can be issued in parallel on the m32r'
   10754      This message is produced when the assembler encounters a parallel
   10755      instruction which does not involve a NOP instruction and the
   10756      `-m32rx' command line flag has not been specified.  Only the M32Rx
   10757      processor is able to execute two instructions in parallel.
   10758 
   10759 `instruction `...' cannot be executed in parallel.'
   10760      This message is produced when the assembler encounters a parallel
   10761      instruction which is made up of one or two instructions which
   10762      cannot be executed in parallel.
   10763 
   10764 `Instructions share the same execution pipeline'
   10765      This message is produced when the assembler encounters a parallel
   10766      instruction whoes components both use the same execution pipeline.
   10767 
   10768 `Instructions write to the same destination register.'
   10769      This message is produced when the assembler encounters a parallel
   10770      instruction where both components attempt to modify the same
   10771      register.  For example these code fragments will produce this
   10772      message: `mv r1, r2 || neg r1, r3' `jl r0 || mv r14, r1' `st r2,
   10773      @-r1 || mv r1, r3' `mv r1, r2 || ld r0, @r1+' `cmp r1, r2 || addx
   10774      r3, r4' (Both write to the condition bit)
   10775 
   10776 
   10777 
   10778 File: as.info,  Node: M68K-Dependent,  Next: M68HC11-Dependent,  Prev: M32R-Dependent,  Up: Machine Dependencies
   10779 
   10780 9.20 M680x0 Dependent Features
   10781 ==============================
   10782 
   10783 * Menu:
   10784 
   10785 * M68K-Opts::                   M680x0 Options
   10786 * M68K-Syntax::                 Syntax
   10787 * M68K-Moto-Syntax::            Motorola Syntax
   10788 * M68K-Float::                  Floating Point
   10789 * M68K-Directives::             680x0 Machine Directives
   10790 * M68K-opcodes::                Opcodes
   10791 
   10792 
   10793 File: as.info,  Node: M68K-Opts,  Next: M68K-Syntax,  Up: M68K-Dependent
   10794 
   10795 9.20.1 M680x0 Options
   10796 ---------------------
   10797 
   10798 The Motorola 680x0 version of `as' has a few machine dependent options:
   10799 
   10800 `-march=ARCHITECTURE'
   10801      This option specifies a target architecture.  The following
   10802      architectures are recognized: `68000', `68010', `68020', `68030',
   10803      `68040', `68060', `cpu32', `isaa', `isaaplus', `isab', `isac' and
   10804      `cfv4e'.
   10805 
   10806 `-mcpu=CPU'
   10807      This option specifies a target cpu.  When used in conjunction with
   10808      the `-march' option, the cpu must be within the specified
   10809      architecture.  Also, the generic features of the architecture are
   10810      used for instruction generation, rather than those of the specific
   10811      chip.
   10812 
   10813 `-m[no-]68851'
   10814 
   10815 `-m[no-]68881'
   10816 
   10817 `-m[no-]div'
   10818 
   10819 `-m[no-]usp'
   10820 
   10821 `-m[no-]float'
   10822 
   10823 `-m[no-]mac'
   10824 
   10825 `-m[no-]emac'
   10826      Enable or disable various architecture specific features.  If a
   10827      chip or architecture by default supports an option (for instance
   10828      `-march=isaaplus' includes the `-mdiv' option), explicitly
   10829      disabling the option will override the default.
   10830 
   10831 `-l'
   10832      You can use the `-l' option to shorten the size of references to
   10833      undefined symbols.  If you do not use the `-l' option, references
   10834      to undefined symbols are wide enough for a full `long' (32 bits).
   10835      (Since `as' cannot know where these symbols end up, `as' can only
   10836      allocate space for the linker to fill in later.  Since `as' does
   10837      not know how far away these symbols are, it allocates as much
   10838      space as it can.)  If you use this option, the references are only
   10839      one word wide (16 bits).  This may be useful if you want the
   10840      object file to be as small as possible, and you know that the
   10841      relevant symbols are always less than 17 bits away.
   10842 
   10843 `--register-prefix-optional'
   10844      For some configurations, especially those where the compiler
   10845      normally does not prepend an underscore to the names of user
   10846      variables, the assembler requires a `%' before any use of a
   10847      register name.  This is intended to let the assembler distinguish
   10848      between C variables and functions named `a0' through `a7', and so
   10849      on.  The `%' is always accepted, but is not required for certain
   10850      configurations, notably `sun3'.  The `--register-prefix-optional'
   10851      option may be used to permit omitting the `%' even for
   10852      configurations for which it is normally required.  If this is
   10853      done, it will generally be impossible to refer to C variables and
   10854      functions with the same names as register names.
   10855 
   10856 `--bitwise-or'
   10857      Normally the character `|' is treated as a comment character, which
   10858      means that it can not be used in expressions.  The `--bitwise-or'
   10859      option turns `|' into a normal character.  In this mode, you must
   10860      either use C style comments, or start comments with a `#' character
   10861      at the beginning of a line.
   10862 
   10863 `--base-size-default-16  --base-size-default-32'
   10864      If you use an addressing mode with a base register without
   10865      specifying the size, `as' will normally use the full 32 bit value.
   10866      For example, the addressing mode `%a0@(%d0)' is equivalent to
   10867      `%a0@(%d0:l)'.  You may use the `--base-size-default-16' option to
   10868      tell `as' to default to using the 16 bit value.  In this case,
   10869      `%a0@(%d0)' is equivalent to `%a0@(%d0:w)'.  You may use the
   10870      `--base-size-default-32' option to restore the default behaviour.
   10871 
   10872 `--disp-size-default-16  --disp-size-default-32'
   10873      If you use an addressing mode with a displacement, and the value
   10874      of the displacement is not known, `as' will normally assume that
   10875      the value is 32 bits.  For example, if the symbol `disp' has not
   10876      been defined, `as' will assemble the addressing mode
   10877      `%a0@(disp,%d0)' as though `disp' is a 32 bit value.  You may use
   10878      the `--disp-size-default-16' option to tell `as' to instead assume
   10879      that the displacement is 16 bits.  In this case, `as' will
   10880      assemble `%a0@(disp,%d0)' as though `disp' is a 16 bit value.  You
   10881      may use the `--disp-size-default-32' option to restore the default
   10882      behaviour.
   10883 
   10884 `--pcrel'
   10885      Always keep branches PC-relative.  In the M680x0 architecture all
   10886      branches are defined as PC-relative.  However, on some processors
   10887      they are limited to word displacements maximum.  When `as' needs a
   10888      long branch that is not available, it normally emits an absolute
   10889      jump instead.  This option disables this substitution.  When this
   10890      option is given and no long branches are available, only word
   10891      branches will be emitted.  An error message will be generated if a
   10892      word branch cannot reach its target.  This option has no effect on
   10893      68020 and other processors that have long branches.  *note Branch
   10894      Improvement: M68K-Branch.
   10895 
   10896 `-m68000'
   10897      `as' can assemble code for several different members of the
   10898      Motorola 680x0 family.  The default depends upon how `as' was
   10899      configured when it was built; normally, the default is to assemble
   10900      code for the 68020 microprocessor.  The following options may be
   10901      used to change the default.  These options control which
   10902      instructions and addressing modes are permitted.  The members of
   10903      the 680x0 family are very similar.  For detailed information about
   10904      the differences, see the Motorola manuals.
   10905 
   10906     `-m68000'
   10907     `-m68ec000'
   10908     `-m68hc000'
   10909     `-m68hc001'
   10910     `-m68008'
   10911     `-m68302'
   10912     `-m68306'
   10913     `-m68307'
   10914     `-m68322'
   10915     `-m68356'
   10916           Assemble for the 68000. `-m68008', `-m68302', and so on are
   10917           synonyms for `-m68000', since the chips are the same from the
   10918           point of view of the assembler.
   10919 
   10920     `-m68010'
   10921           Assemble for the 68010.
   10922 
   10923     `-m68020'
   10924     `-m68ec020'
   10925           Assemble for the 68020.  This is normally the default.
   10926 
   10927     `-m68030'
   10928     `-m68ec030'
   10929           Assemble for the 68030.
   10930 
   10931     `-m68040'
   10932     `-m68ec040'
   10933           Assemble for the 68040.
   10934 
   10935     `-m68060'
   10936     `-m68ec060'
   10937           Assemble for the 68060.
   10938 
   10939     `-mcpu32'
   10940     `-m68330'
   10941     `-m68331'
   10942     `-m68332'
   10943     `-m68333'
   10944     `-m68334'
   10945     `-m68336'
   10946     `-m68340'
   10947     `-m68341'
   10948     `-m68349'
   10949     `-m68360'
   10950           Assemble for the CPU32 family of chips.
   10951 
   10952     `-m5200'
   10953 
   10954     `-m5202'
   10955 
   10956     `-m5204'
   10957 
   10958     `-m5206'
   10959 
   10960     `-m5206e'
   10961 
   10962     `-m521x'
   10963 
   10964     `-m5249'
   10965 
   10966     `-m528x'
   10967 
   10968     `-m5307'
   10969 
   10970     `-m5407'
   10971 
   10972     `-m547x'
   10973 
   10974     `-m548x'
   10975 
   10976     `-mcfv4'
   10977 
   10978     `-mcfv4e'
   10979           Assemble for the ColdFire family of chips.
   10980 
   10981     `-m68881'
   10982     `-m68882'
   10983           Assemble 68881 floating point instructions.  This is the
   10984           default for the 68020, 68030, and the CPU32.  The 68040 and
   10985           68060 always support floating point instructions.
   10986 
   10987     `-mno-68881'
   10988           Do not assemble 68881 floating point instructions.  This is
   10989           the default for 68000 and the 68010.  The 68040 and 68060
   10990           always support floating point instructions, even if this
   10991           option is used.
   10992 
   10993     `-m68851'
   10994           Assemble 68851 MMU instructions.  This is the default for the
   10995           68020, 68030, and 68060.  The 68040 accepts a somewhat
   10996           different set of MMU instructions; `-m68851' and `-m68040'
   10997           should not be used together.
   10998 
   10999     `-mno-68851'
   11000           Do not assemble 68851 MMU instructions.  This is the default
   11001           for the 68000, 68010, and the CPU32.  The 68040 accepts a
   11002           somewhat different set of MMU instructions.
   11003 
   11004 
   11005 File: as.info,  Node: M68K-Syntax,  Next: M68K-Moto-Syntax,  Prev: M68K-Opts,  Up: M68K-Dependent
   11006 
   11007 9.20.2 Syntax
   11008 -------------
   11009 
   11010 This syntax for the Motorola 680x0 was developed at MIT.
   11011 
   11012    The 680x0 version of `as' uses instructions names and syntax
   11013 compatible with the Sun assembler.  Intervening periods are ignored;
   11014 for example, `movl' is equivalent to `mov.l'.
   11015 
   11016    In the following table APC stands for any of the address registers
   11017 (`%a0' through `%a7'), the program counter (`%pc'), the zero-address
   11018 relative to the program counter (`%zpc'), a suppressed address register
   11019 (`%za0' through `%za7'), or it may be omitted entirely.  The use of
   11020 SIZE means one of `w' or `l', and it may be omitted, along with the
   11021 leading colon, unless a scale is also specified.  The use of SCALE
   11022 means one of `1', `2', `4', or `8', and it may always be omitted along
   11023 with the leading colon.
   11024 
   11025    The following addressing modes are understood:
   11026 "Immediate"
   11027      `#NUMBER'
   11028 
   11029 "Data Register"
   11030      `%d0' through `%d7'
   11031 
   11032 "Address Register"
   11033      `%a0' through `%a7'
   11034      `%a7' is also known as `%sp', i.e., the Stack Pointer.  `%a6' is
   11035      also known as `%fp', the Frame Pointer.
   11036 
   11037 "Address Register Indirect"
   11038      `%a0@' through `%a7@'
   11039 
   11040 "Address Register Postincrement"
   11041      `%a0@+' through `%a7@+'
   11042 
   11043 "Address Register Predecrement"
   11044      `%a0@-' through `%a7@-'
   11045 
   11046 "Indirect Plus Offset"
   11047      `APC@(NUMBER)'
   11048 
   11049 "Index"
   11050      `APC@(NUMBER,REGISTER:SIZE:SCALE)'
   11051 
   11052      The NUMBER may be omitted.
   11053 
   11054 "Postindex"
   11055      `APC@(NUMBER)@(ONUMBER,REGISTER:SIZE:SCALE)'
   11056 
   11057      The ONUMBER or the REGISTER, but not both, may be omitted.
   11058 
   11059 "Preindex"
   11060      `APC@(NUMBER,REGISTER:SIZE:SCALE)@(ONUMBER)'
   11061 
   11062      The NUMBER may be omitted.  Omitting the REGISTER produces the
   11063      Postindex addressing mode.
   11064 
   11065 "Absolute"
   11066      `SYMBOL', or `DIGITS', optionally followed by `:b', `:w', or `:l'.
   11067 
   11068 
   11069 File: as.info,  Node: M68K-Moto-Syntax,  Next: M68K-Float,  Prev: M68K-Syntax,  Up: M68K-Dependent
   11070 
   11071 9.20.3 Motorola Syntax
   11072 ----------------------
   11073 
   11074 The standard Motorola syntax for this chip differs from the syntax
   11075 already discussed (*note Syntax: M68K-Syntax.).  `as' can accept
   11076 Motorola syntax for operands, even if MIT syntax is used for other
   11077 operands in the same instruction.  The two kinds of syntax are fully
   11078 compatible.
   11079 
   11080    In the following table APC stands for any of the address registers
   11081 (`%a0' through `%a7'), the program counter (`%pc'), the zero-address
   11082 relative to the program counter (`%zpc'), or a suppressed address
   11083 register (`%za0' through `%za7').  The use of SIZE means one of `w' or
   11084 `l', and it may always be omitted along with the leading dot.  The use
   11085 of SCALE means one of `1', `2', `4', or `8', and it may always be
   11086 omitted along with the leading asterisk.
   11087 
   11088    The following additional addressing modes are understood:
   11089 
   11090 "Address Register Indirect"
   11091      `(%a0)' through `(%a7)'
   11092      `%a7' is also known as `%sp', i.e., the Stack Pointer.  `%a6' is
   11093      also known as `%fp', the Frame Pointer.
   11094 
   11095 "Address Register Postincrement"
   11096      `(%a0)+' through `(%a7)+'
   11097 
   11098 "Address Register Predecrement"
   11099      `-(%a0)' through `-(%a7)'
   11100 
   11101 "Indirect Plus Offset"
   11102      `NUMBER(%A0)' through `NUMBER(%A7)', or `NUMBER(%PC)'.
   11103 
   11104      The NUMBER may also appear within the parentheses, as in
   11105      `(NUMBER,%A0)'.  When used with the PC, the NUMBER may be omitted
   11106      (with an address register, omitting the NUMBER produces Address
   11107      Register Indirect mode).
   11108 
   11109 "Index"
   11110      `NUMBER(APC,REGISTER.SIZE*SCALE)'
   11111 
   11112      The NUMBER may be omitted, or it may appear within the
   11113      parentheses.  The APC may be omitted.  The REGISTER and the APC
   11114      may appear in either order.  If both APC and REGISTER are address
   11115      registers, and the SIZE and SCALE are omitted, then the first
   11116      register is taken as the base register, and the second as the
   11117      index register.
   11118 
   11119 "Postindex"
   11120      `([NUMBER,APC],REGISTER.SIZE*SCALE,ONUMBER)'
   11121 
   11122      The ONUMBER, or the REGISTER, or both, may be omitted.  Either the
   11123      NUMBER or the APC may be omitted, but not both.
   11124 
   11125 "Preindex"
   11126      `([NUMBER,APC,REGISTER.SIZE*SCALE],ONUMBER)'
   11127 
   11128      The NUMBER, or the APC, or the REGISTER, or any two of them, may
   11129      be omitted.  The ONUMBER may be omitted.  The REGISTER and the APC
   11130      may appear in either order.  If both APC and REGISTER are address
   11131      registers, and the SIZE and SCALE are omitted, then the first
   11132      register is taken as the base register, and the second as the
   11133      index register.
   11134 
   11135 
   11136 File: as.info,  Node: M68K-Float,  Next: M68K-Directives,  Prev: M68K-Moto-Syntax,  Up: M68K-Dependent
   11137 
   11138 9.20.4 Floating Point
   11139 ---------------------
   11140 
   11141 Packed decimal (P) format floating literals are not supported.  Feel
   11142 free to add the code!
   11143 
   11144    The floating point formats generated by directives are these.
   11145 
   11146 `.float'
   11147      `Single' precision floating point constants.
   11148 
   11149 `.double'
   11150      `Double' precision floating point constants.
   11151 
   11152 `.extend'
   11153 `.ldouble'
   11154      `Extended' precision (`long double') floating point constants.
   11155 
   11156 
   11157 File: as.info,  Node: M68K-Directives,  Next: M68K-opcodes,  Prev: M68K-Float,  Up: M68K-Dependent
   11158 
   11159 9.20.5 680x0 Machine Directives
   11160 -------------------------------
   11161 
   11162 In order to be compatible with the Sun assembler the 680x0 assembler
   11163 understands the following directives.
   11164 
   11165 `.data1'
   11166      This directive is identical to a `.data 1' directive.
   11167 
   11168 `.data2'
   11169      This directive is identical to a `.data 2' directive.
   11170 
   11171 `.even'
   11172      This directive is a special case of the `.align' directive; it
   11173      aligns the output to an even byte boundary.
   11174 
   11175 `.skip'
   11176      This directive is identical to a `.space' directive.
   11177 
   11178 `.arch NAME'
   11179      Select the target architecture and extension features.  Valid
   11180      values for NAME are the same as for the `-march' command line
   11181      option.  This directive cannot be specified after any instructions
   11182      have been assembled.  If it is given multiple times, or in
   11183      conjunction with the `-march' option, all uses must be for the
   11184      same architecture and extension set.
   11185 
   11186 `.cpu NAME'
   11187      Select the target cpu.  Valid valuse for NAME are the same as for
   11188      the `-mcpu' command line option.  This directive cannot be
   11189      specified after any instructions have been assembled.  If it is
   11190      given multiple times, or in conjunction with the `-mopt' option,
   11191      all uses must be for the same cpu.
   11192 
   11193 
   11194 
   11195 File: as.info,  Node: M68K-opcodes,  Prev: M68K-Directives,  Up: M68K-Dependent
   11196 
   11197 9.20.6 Opcodes
   11198 --------------
   11199 
   11200 * Menu:
   11201 
   11202 * M68K-Branch::                 Branch Improvement
   11203 * M68K-Chars::                  Special Characters
   11204 
   11205 
   11206 File: as.info,  Node: M68K-Branch,  Next: M68K-Chars,  Up: M68K-opcodes
   11207 
   11208 9.20.6.1 Branch Improvement
   11209 ...........................
   11210 
   11211 Certain pseudo opcodes are permitted for branch instructions.  They
   11212 expand to the shortest branch instruction that reach the target.
   11213 Generally these mnemonics are made by substituting `j' for `b' at the
   11214 start of a Motorola mnemonic.
   11215 
   11216    The following table summarizes the pseudo-operations.  A `*' flags
   11217 cases that are more fully described after the table:
   11218 
   11219                Displacement
   11220                +------------------------------------------------------------
   11221                |                68020           68000/10, not PC-relative OK
   11222      Pseudo-Op |BYTE    WORD    LONG            ABSOLUTE LONG JUMP    **
   11223                +------------------------------------------------------------
   11224           jbsr |bsrs    bsrw    bsrl            jsr
   11225            jra |bras    braw    bral            jmp
   11226      *     jXX |bXXs    bXXw    bXXl            bNXs;jmp
   11227      *    dbXX | N/A    dbXXw   dbXX;bras;bral  dbXX;bras;jmp
   11228           fjXX | N/A    fbXXw   fbXXl            N/A
   11229 
   11230      XX: condition
   11231      NX: negative of condition XX
   11232                        `*'--see full description below
   11233          `**'--this expansion mode is disallowed by `--pcrel'
   11234 
   11235 `jbsr'
   11236 `jra'
   11237      These are the simplest jump pseudo-operations; they always map to
   11238      one particular machine instruction, depending on the displacement
   11239      to the branch target.  This instruction will be a byte or word
   11240      branch is that is sufficient.  Otherwise, a long branch will be
   11241      emitted if available.  If no long branches are available and the
   11242      `--pcrel' option is not given, an absolute long jump will be
   11243      emitted instead.  If no long branches are available, the `--pcrel'
   11244      option is given, and a word branch cannot reach the target, an
   11245      error message is generated.
   11246 
   11247      In addition to standard branch operands, `as' allows these
   11248      pseudo-operations to have all operands that are allowed for jsr
   11249      and jmp, substituting these instructions if the operand given is
   11250      not valid for a branch instruction.
   11251 
   11252 `jXX'
   11253      Here, `jXX' stands for an entire family of pseudo-operations,
   11254      where XX is a conditional branch or condition-code test.  The full
   11255      list of pseudo-ops in this family is:
   11256            jhi   jls   jcc   jcs   jne   jeq   jvc
   11257            jvs   jpl   jmi   jge   jlt   jgt   jle
   11258 
   11259      Usually, each of these pseudo-operations expands to a single branch
   11260      instruction.  However, if a word branch is not sufficient, no long
   11261      branches are available, and the `--pcrel' option is not given, `as'
   11262      issues a longer code fragment in terms of NX, the opposite
   11263      condition to XX.  For example, under these conditions:
   11264               jXX foo
   11265      gives
   11266                bNXs oof
   11267                jmp foo
   11268            oof:
   11269 
   11270 `dbXX'
   11271      The full family of pseudo-operations covered here is
   11272            dbhi   dbls   dbcc   dbcs   dbne   dbeq   dbvc
   11273            dbvs   dbpl   dbmi   dbge   dblt   dbgt   dble
   11274            dbf    dbra   dbt
   11275 
   11276      Motorola `dbXX' instructions allow word displacements only.  When
   11277      a word displacement is sufficient, each of these pseudo-operations
   11278      expands to the corresponding Motorola instruction.  When a word
   11279      displacement is not sufficient and long branches are available,
   11280      when the source reads `dbXX foo', `as' emits
   11281                dbXX oo1
   11282                bras oo2
   11283            oo1:bral foo
   11284            oo2:
   11285 
   11286      If, however, long branches are not available and the `--pcrel'
   11287      option is not given, `as' emits
   11288                dbXX oo1
   11289                bras oo2
   11290            oo1:jmp foo
   11291            oo2:
   11292 
   11293 `fjXX'
   11294      This family includes
   11295            fjne   fjeq   fjge   fjlt   fjgt   fjle   fjf
   11296            fjt    fjgl   fjgle  fjnge  fjngl  fjngle fjngt
   11297            fjnle  fjnlt  fjoge  fjogl  fjogt  fjole  fjolt
   11298            fjor   fjseq  fjsf   fjsne  fjst   fjueq  fjuge
   11299            fjugt  fjule  fjult  fjun
   11300 
   11301      Each of these pseudo-operations always expands to a single Motorola
   11302      coprocessor branch instruction, word or long.  All Motorola
   11303      coprocessor branch instructions allow both word and long
   11304      displacements.
   11305 
   11306 
   11307 
   11308 File: as.info,  Node: M68K-Chars,  Prev: M68K-Branch,  Up: M68K-opcodes
   11309 
   11310 9.20.6.2 Special Characters
   11311 ...........................
   11312 
   11313 The immediate character is `#' for Sun compatibility.  The line-comment
   11314 character is `|' (unless the `--bitwise-or' option is used).  If a `#'
   11315 appears at the beginning of a line, it is treated as a comment unless
   11316 it looks like `# line file', in which case it is treated normally.
   11317 
   11318 
   11319 File: as.info,  Node: M68HC11-Dependent,  Next: MIPS-Dependent,  Prev: M68K-Dependent,  Up: Machine Dependencies
   11320 
   11321 9.21 M68HC11 and M68HC12 Dependent Features
   11322 ===========================================
   11323 
   11324 * Menu:
   11325 
   11326 * M68HC11-Opts::                   M68HC11 and M68HC12 Options
   11327 * M68HC11-Syntax::                 Syntax
   11328 * M68HC11-Modifiers::              Symbolic Operand Modifiers
   11329 * M68HC11-Directives::             Assembler Directives
   11330 * M68HC11-Float::                  Floating Point
   11331 * M68HC11-opcodes::                Opcodes
   11332 
   11333 
   11334 File: as.info,  Node: M68HC11-Opts,  Next: M68HC11-Syntax,  Up: M68HC11-Dependent
   11335 
   11336 9.21.1 M68HC11 and M68HC12 Options
   11337 ----------------------------------
   11338 
   11339 The Motorola 68HC11 and 68HC12 version of `as' have a few machine
   11340 dependent options.
   11341 
   11342 `-m68hc11'
   11343      This option switches the assembler in the M68HC11 mode. In this
   11344      mode, the assembler only accepts 68HC11 operands and mnemonics. It
   11345      produces code for the 68HC11.
   11346 
   11347 `-m68hc12'
   11348      This option switches the assembler in the M68HC12 mode. In this
   11349      mode, the assembler also accepts 68HC12 operands and mnemonics. It
   11350      produces code for the 68HC12. A few 68HC11 instructions are
   11351      replaced by some 68HC12 instructions as recommended by Motorola
   11352      specifications.
   11353 
   11354 `-m68hcs12'
   11355      This option switches the assembler in the M68HCS12 mode.  This
   11356      mode is similar to `-m68hc12' but specifies to assemble for the
   11357      68HCS12 series.  The only difference is on the assembling of the
   11358      `movb' and `movw' instruction when a PC-relative operand is used.
   11359 
   11360 `-mshort'
   11361      This option controls the ABI and indicates to use a 16-bit integer
   11362      ABI.  It has no effect on the assembled instructions.  This is the
   11363      default.
   11364 
   11365 `-mlong'
   11366      This option controls the ABI and indicates to use a 32-bit integer
   11367      ABI.
   11368 
   11369 `-mshort-double'
   11370      This option controls the ABI and indicates to use a 32-bit float
   11371      ABI.  This is the default.
   11372 
   11373 `-mlong-double'
   11374      This option controls the ABI and indicates to use a 64-bit float
   11375      ABI.
   11376 
   11377 `--strict-direct-mode'
   11378      You can use the `--strict-direct-mode' option to disable the
   11379      automatic translation of direct page mode addressing into extended
   11380      mode when the instruction does not support direct mode.  For
   11381      example, the `clr' instruction does not support direct page mode
   11382      addressing. When it is used with the direct page mode, `as' will
   11383      ignore it and generate an absolute addressing.  This option
   11384      prevents `as' from doing this, and the wrong usage of the direct
   11385      page mode will raise an error.
   11386 
   11387 `--short-branches'
   11388      The `--short-branches' option turns off the translation of
   11389      relative branches into absolute branches when the branch offset is
   11390      out of range. By default `as' transforms the relative branch
   11391      (`bsr', `bgt', `bge', `beq', `bne', `ble', `blt', `bhi', `bcc',
   11392      `bls', `bcs', `bmi', `bvs', `bvs', `bra') into an absolute branch
   11393      when the offset is out of the -128 .. 127 range.  In that case,
   11394      the `bsr' instruction is translated into a `jsr', the `bra'
   11395      instruction is translated into a `jmp' and the conditional
   11396      branches instructions are inverted and followed by a `jmp'. This
   11397      option disables these translations and `as' will generate an error
   11398      if a relative branch is out of range. This option does not affect
   11399      the optimization associated to the `jbra', `jbsr' and `jbXX'
   11400      pseudo opcodes.
   11401 
   11402 `--force-long-branches'
   11403      The `--force-long-branches' option forces the translation of
   11404      relative branches into absolute branches. This option does not
   11405      affect the optimization associated to the `jbra', `jbsr' and
   11406      `jbXX' pseudo opcodes.
   11407 
   11408 `--print-insn-syntax'
   11409      You can use the `--print-insn-syntax' option to obtain the syntax
   11410      description of the instruction when an error is detected.
   11411 
   11412 `--print-opcodes'
   11413      The `--print-opcodes' option prints the list of all the
   11414      instructions with their syntax. The first item of each line
   11415      represents the instruction name and the rest of the line indicates
   11416      the possible operands for that instruction. The list is printed in
   11417      alphabetical order. Once the list is printed `as' exits.
   11418 
   11419 `--generate-example'
   11420      The `--generate-example' option is similar to `--print-opcodes'
   11421      but it generates an example for each instruction instead.
   11422 
   11423 
   11424 File: as.info,  Node: M68HC11-Syntax,  Next: M68HC11-Modifiers,  Prev: M68HC11-Opts,  Up: M68HC11-Dependent
   11425 
   11426 9.21.2 Syntax
   11427 -------------
   11428 
   11429 In the M68HC11 syntax, the instruction name comes first and it may be
   11430 followed by one or several operands (up to three). Operands are
   11431 separated by comma (`,'). In the normal mode, `as' will complain if too
   11432 many operands are specified for a given instruction. In the MRI mode
   11433 (turned on with `-M' option), it will treat them as comments. Example:
   11434 
   11435      inx
   11436      lda  #23
   11437      bset 2,x #4
   11438      brclr *bot #8 foo
   11439 
   11440    The following addressing modes are understood for 68HC11 and 68HC12:
   11441 "Immediate"
   11442      `#NUMBER'
   11443 
   11444 "Address Register"
   11445      `NUMBER,X', `NUMBER,Y'
   11446 
   11447      The NUMBER may be omitted in which case 0 is assumed.
   11448 
   11449 "Direct Addressing mode"
   11450      `*SYMBOL', or `*DIGITS'
   11451 
   11452 "Absolute"
   11453      `SYMBOL', or `DIGITS'
   11454 
   11455    The M68HC12 has other more complex addressing modes. All of them are
   11456 supported and they are represented below:
   11457 
   11458 "Constant Offset Indexed Addressing Mode"
   11459      `NUMBER,REG'
   11460 
   11461      The NUMBER may be omitted in which case 0 is assumed.  The
   11462      register can be either `X', `Y', `SP' or `PC'.  The assembler will
   11463      use the smaller post-byte definition according to the constant
   11464      value (5-bit constant offset, 9-bit constant offset or 16-bit
   11465      constant offset).  If the constant is not known by the assembler
   11466      it will use the 16-bit constant offset post-byte and the value
   11467      will be resolved at link time.
   11468 
   11469 "Offset Indexed Indirect"
   11470      `[NUMBER,REG]'
   11471 
   11472      The register can be either `X', `Y', `SP' or `PC'.
   11473 
   11474 "Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement"
   11475      `NUMBER,-REG' `NUMBER,+REG' `NUMBER,REG-' `NUMBER,REG+'
   11476 
   11477      The number must be in the range `-8'..`+8' and must not be 0.  The
   11478      register can be either `X', `Y', `SP' or `PC'.
   11479 
   11480 "Accumulator Offset"
   11481      `ACC,REG'
   11482 
   11483      The accumulator register can be either `A', `B' or `D'.  The
   11484      register can be either `X', `Y', `SP' or `PC'.
   11485 
   11486 "Accumulator D offset indexed-indirect"
   11487      `[D,REG]'
   11488 
   11489      The register can be either `X', `Y', `SP' or `PC'.
   11490 
   11491 
   11492    For example:
   11493 
   11494      ldab 1024,sp
   11495      ldd [10,x]
   11496      orab 3,+x
   11497      stab -2,y-
   11498      ldx a,pc
   11499      sty [d,sp]
   11500 
   11501 
   11502 File: as.info,  Node: M68HC11-Modifiers,  Next: M68HC11-Directives,  Prev: M68HC11-Syntax,  Up: M68HC11-Dependent
   11503 
   11504 9.21.3 Symbolic Operand Modifiers
   11505 ---------------------------------
   11506 
   11507 The assembler supports several modifiers when using symbol addresses in
   11508 68HC11 and 68HC12 instruction operands.  The general syntax is the
   11509 following:
   11510 
   11511      %modifier(symbol)
   11512 
   11513 `%addr'
   11514      This modifier indicates to the assembler and linker to use the
   11515      16-bit physical address corresponding to the symbol.  This is
   11516      intended to be used on memory window systems to map a symbol in
   11517      the memory bank window.  If the symbol is in a memory expansion
   11518      part, the physical address corresponds to the symbol address
   11519      within the memory bank window.  If the symbol is not in a memory
   11520      expansion part, this is the symbol address (using or not using the
   11521      %addr modifier has no effect in that case).
   11522 
   11523 `%page'
   11524      This modifier indicates to use the memory page number corresponding
   11525      to the symbol.  If the symbol is in a memory expansion part, its
   11526      page number is computed by the linker as a number used to map the
   11527      page containing the symbol in the memory bank window.  If the
   11528      symbol is not in a memory expansion part, the page number is 0.
   11529 
   11530 `%hi'
   11531      This modifier indicates to use the 8-bit high part of the physical
   11532      address of the symbol.
   11533 
   11534 `%lo'
   11535      This modifier indicates to use the 8-bit low part of the physical
   11536      address of the symbol.
   11537 
   11538 
   11539    For example a 68HC12 call to a function `foo_example' stored in
   11540 memory expansion part could be written as follows:
   11541 
   11542      call %addr(foo_example),%page(foo_example)
   11543 
   11544    and this is equivalent to
   11545 
   11546      call foo_example
   11547 
   11548    And for 68HC11 it could be written as follows:
   11549 
   11550      ldab #%page(foo_example)
   11551      stab _page_switch
   11552      jsr  %addr(foo_example)
   11553 
   11554 
   11555 File: as.info,  Node: M68HC11-Directives,  Next: M68HC11-Float,  Prev: M68HC11-Modifiers,  Up: M68HC11-Dependent
   11556 
   11557 9.21.4 Assembler Directives
   11558 ---------------------------
   11559 
   11560 The 68HC11 and 68HC12 version of `as' have the following specific
   11561 assembler directives:
   11562 
   11563 `.relax'
   11564      The relax directive is used by the `GNU Compiler' to emit a
   11565      specific relocation to mark a group of instructions for linker
   11566      relaxation.  The sequence of instructions within the group must be
   11567      known to the linker so that relaxation can be performed.
   11568 
   11569 `.mode [mshort|mlong|mshort-double|mlong-double]'
   11570      This directive specifies the ABI.  It overrides the `-mshort',
   11571      `-mlong', `-mshort-double' and `-mlong-double' options.
   11572 
   11573 `.far SYMBOL'
   11574      This directive marks the symbol as a `far' symbol meaning that it
   11575      uses a `call/rtc' calling convention as opposed to `jsr/rts'.
   11576      During a final link, the linker will identify references to the
   11577      `far' symbol and will verify the proper calling convention.
   11578 
   11579 `.interrupt SYMBOL'
   11580      This directive marks the symbol as an interrupt entry point.  This
   11581      information is then used by the debugger to correctly unwind the
   11582      frame across interrupts.
   11583 
   11584 `.xrefb SYMBOL'
   11585      This directive is defined for compatibility with the
   11586      `Specification for Motorola 8 and 16-Bit Assembly Language Input
   11587      Standard' and is ignored.
   11588 
   11589 
   11590 
   11591 File: as.info,  Node: M68HC11-Float,  Next: M68HC11-opcodes,  Prev: M68HC11-Directives,  Up: M68HC11-Dependent
   11592 
   11593 9.21.5 Floating Point
   11594 ---------------------
   11595 
   11596 Packed decimal (P) format floating literals are not supported.  Feel
   11597 free to add the code!
   11598 
   11599    The floating point formats generated by directives are these.
   11600 
   11601 `.float'
   11602      `Single' precision floating point constants.
   11603 
   11604 `.double'
   11605      `Double' precision floating point constants.
   11606 
   11607 `.extend'
   11608 `.ldouble'
   11609      `Extended' precision (`long double') floating point constants.
   11610 
   11611 
   11612 File: as.info,  Node: M68HC11-opcodes,  Prev: M68HC11-Float,  Up: M68HC11-Dependent
   11613 
   11614 9.21.6 Opcodes
   11615 --------------
   11616 
   11617 * Menu:
   11618 
   11619 * M68HC11-Branch::                 Branch Improvement
   11620 
   11621 
   11622 File: as.info,  Node: M68HC11-Branch,  Up: M68HC11-opcodes
   11623 
   11624 9.21.6.1 Branch Improvement
   11625 ...........................
   11626 
   11627 Certain pseudo opcodes are permitted for branch instructions.  They
   11628 expand to the shortest branch instruction that reach the target.
   11629 Generally these mnemonics are made by prepending `j' to the start of
   11630 Motorola mnemonic. These pseudo opcodes are not affected by the
   11631 `--short-branches' or `--force-long-branches' options.
   11632 
   11633    The following table summarizes the pseudo-operations.
   11634 
   11635                              Displacement Width
   11636           +-------------------------------------------------------------+
   11637           |                     Options                                 |
   11638           |    --short-branches           --force-long-branches         |
   11639           +--------------------------+----------------------------------+
   11640        Op |BYTE             WORD     | BYTE          WORD               |
   11641           +--------------------------+----------------------------------+
   11642       bsr | bsr <pc-rel>    <error>  |               jsr <abs>          |
   11643       bra | bra <pc-rel>    <error>  |               jmp <abs>          |
   11644      jbsr | bsr <pc-rel>   jsr <abs> | bsr <pc-rel>  jsr <abs>          |
   11645      jbra | bra <pc-rel>   jmp <abs> | bra <pc-rel>  jmp <abs>          |
   11646       bXX | bXX <pc-rel>    <error>  |               bNX +3; jmp <abs>  |
   11647      jbXX | bXX <pc-rel>   bNX +3;   | bXX <pc-rel>  bNX +3; jmp <abs>  |
   11648           |                jmp <abs> |                                  |
   11649           +--------------------------+----------------------------------+
   11650      XX: condition
   11651      NX: negative of condition XX
   11652 
   11653 `jbsr'
   11654 `jbra'
   11655      These are the simplest jump pseudo-operations; they always map to
   11656      one particular machine instruction, depending on the displacement
   11657      to the branch target.
   11658 
   11659 `jbXX'
   11660      Here, `jbXX' stands for an entire family of pseudo-operations,
   11661      where XX is a conditional branch or condition-code test.  The full
   11662      list of pseudo-ops in this family is:
   11663            jbcc   jbeq   jbge   jbgt   jbhi   jbvs   jbpl  jblo
   11664            jbcs   jbne   jblt   jble   jbls   jbvc   jbmi
   11665 
   11666      For the cases of non-PC relative displacements and long
   11667      displacements, `as' issues a longer code fragment in terms of NX,
   11668      the opposite condition to XX.  For example, for the non-PC
   11669      relative case:
   11670               jbXX foo
   11671      gives
   11672                bNXs oof
   11673                jmp foo
   11674            oof:
   11675 
   11676 
   11677 
   11678 File: as.info,  Node: MIPS-Dependent,  Next: MMIX-Dependent,  Prev: M68HC11-Dependent,  Up: Machine Dependencies
   11679 
   11680 9.22 MIPS Dependent Features
   11681 ============================
   11682 
   11683    GNU `as' for MIPS architectures supports several different MIPS
   11684 processors, and MIPS ISA levels I through V, MIPS32, and MIPS64.  For
   11685 information about the MIPS instruction set, see `MIPS RISC
   11686 Architecture', by Kane and Heindrich (Prentice-Hall).  For an overview
   11687 of MIPS assembly conventions, see "Appendix D: Assembly Language
   11688 Programming" in the same work.
   11689 
   11690 * Menu:
   11691 
   11692 * MIPS Opts::   	Assembler options
   11693 * MIPS Object:: 	ECOFF object code
   11694 * MIPS Stabs::  	Directives for debugging information
   11695 * MIPS ISA::    	Directives to override the ISA level
   11696 * MIPS symbol sizes::   Directives to override the size of symbols
   11697 * MIPS autoextend::	Directives for extending MIPS 16 bit instructions
   11698 * MIPS insn::		Directive to mark data as an instruction
   11699 * MIPS option stack::	Directives to save and restore options
   11700 * MIPS ASE instruction generation overrides:: Directives to control
   11701   			generation of MIPS ASE instructions
   11702 * MIPS floating-point:: Directives to override floating-point options
   11703 
   11704 
   11705 File: as.info,  Node: MIPS Opts,  Next: MIPS Object,  Up: MIPS-Dependent
   11706 
   11707 9.22.1 Assembler options
   11708 ------------------------
   11709 
   11710 The MIPS configurations of GNU `as' support these special options:
   11711 
   11712 `-G NUM'
   11713      This option sets the largest size of an object that can be
   11714      referenced implicitly with the `gp' register.  It is only accepted
   11715      for targets that use ECOFF format.  The default value is 8.
   11716 
   11717 `-EB'
   11718 `-EL'
   11719      Any MIPS configuration of `as' can select big-endian or
   11720      little-endian output at run time (unlike the other GNU development
   11721      tools, which must be configured for one or the other).  Use `-EB'
   11722      to select big-endian output, and `-EL' for little-endian.
   11723 
   11724 `-KPIC'
   11725      Generate SVR4-style PIC.  This option tells the assembler to
   11726      generate SVR4-style position-independent macro expansions.  It
   11727      also tells the assembler to mark the output file as PIC.
   11728 
   11729 `-mvxworks-pic'
   11730      Generate VxWorks PIC.  This option tells the assembler to generate
   11731      VxWorks-style position-independent macro expansions.
   11732 
   11733 `-mips1'
   11734 `-mips2'
   11735 `-mips3'
   11736 `-mips4'
   11737 `-mips5'
   11738 `-mips32'
   11739 `-mips32r2'
   11740 `-mips64'
   11741 `-mips64r2'
   11742      Generate code for a particular MIPS Instruction Set Architecture
   11743      level.  `-mips1' corresponds to the R2000 and R3000 processors,
   11744      `-mips2' to the R6000 processor, `-mips3' to the R4000 processor,
   11745      and `-mips4' to the R8000 and R10000 processors.  `-mips5',
   11746      `-mips32', `-mips32r2', `-mips64', and `-mips64r2' correspond to
   11747      generic MIPS V, MIPS32, MIPS32 RELEASE 2, MIPS64, and MIPS64
   11748      RELEASE 2 ISA processors, respectively.  You can also switch
   11749      instruction sets during the assembly; see *note Directives to
   11750      override the ISA level: MIPS ISA.
   11751 
   11752 `-mgp32'
   11753 `-mfp32'
   11754      Some macros have different expansions for 32-bit and 64-bit
   11755      registers.  The register sizes are normally inferred from the ISA
   11756      and ABI, but these flags force a certain group of registers to be
   11757      treated as 32 bits wide at all times.  `-mgp32' controls the size
   11758      of general-purpose registers and `-mfp32' controls the size of
   11759      floating-point registers.
   11760 
   11761      The `.set gp=32' and `.set fp=32' directives allow the size of
   11762      registers to be changed for parts of an object. The default value
   11763      is restored by `.set gp=default' and `.set fp=default'.
   11764 
   11765      On some MIPS variants there is a 32-bit mode flag; when this flag
   11766      is set, 64-bit instructions generate a trap.  Also, some 32-bit
   11767      OSes only save the 32-bit registers on a context switch, so it is
   11768      essential never to use the 64-bit registers.
   11769 
   11770 `-mgp64'
   11771 `-mfp64'
   11772      Assume that 64-bit registers are available.  This is provided in
   11773      the interests of symmetry with `-mgp32' and `-mfp32'.
   11774 
   11775      The `.set gp=64' and `.set fp=64' directives allow the size of
   11776      registers to be changed for parts of an object. The default value
   11777      is restored by `.set gp=default' and `.set fp=default'.
   11778 
   11779 `-mips16'
   11780 `-no-mips16'
   11781      Generate code for the MIPS 16 processor.  This is equivalent to
   11782      putting `.set mips16' at the start of the assembly file.
   11783      `-no-mips16' turns off this option.
   11784 
   11785 `-msmartmips'
   11786 `-mno-smartmips'
   11787      Enables the SmartMIPS extensions to the MIPS32 instruction set,
   11788      which provides a number of new instructions which target smartcard
   11789      and cryptographic applications.  This is equivalent to putting
   11790      `.set smartmips' at the start of the assembly file.
   11791      `-mno-smartmips' turns off this option.
   11792 
   11793 `-mips3d'
   11794 `-no-mips3d'
   11795      Generate code for the MIPS-3D Application Specific Extension.
   11796      This tells the assembler to accept MIPS-3D instructions.
   11797      `-no-mips3d' turns off this option.
   11798 
   11799 `-mdmx'
   11800 `-no-mdmx'
   11801      Generate code for the MDMX Application Specific Extension.  This
   11802      tells the assembler to accept MDMX instructions.  `-no-mdmx' turns
   11803      off this option.
   11804 
   11805 `-mdsp'
   11806 `-mno-dsp'
   11807      Generate code for the DSP Release 1 Application Specific Extension.
   11808      This tells the assembler to accept DSP Release 1 instructions.
   11809      `-mno-dsp' turns off this option.
   11810 
   11811 `-mdspr2'
   11812 `-mno-dspr2'
   11813      Generate code for the DSP Release 2 Application Specific Extension.
   11814      This option implies -mdsp.  This tells the assembler to accept DSP
   11815      Release 2 instructions.  `-mno-dspr2' turns off this option.
   11816 
   11817 `-mmt'
   11818 `-mno-mt'
   11819      Generate code for the MT Application Specific Extension.  This
   11820      tells the assembler to accept MT instructions.  `-mno-mt' turns
   11821      off this option.
   11822 
   11823 `-mfix7000'
   11824 `-mno-fix7000'
   11825      Cause nops to be inserted if the read of the destination register
   11826      of an mfhi or mflo instruction occurs in the following two
   11827      instructions.
   11828 
   11829 `-mfix-vr4120'
   11830 `-no-mfix-vr4120'
   11831      Insert nops to work around certain VR4120 errata.  This option is
   11832      intended to be used on GCC-generated code: it is not designed to
   11833      catch all problems in hand-written assembler code.
   11834 
   11835 `-mfix-vr4130'
   11836 `-no-mfix-vr4130'
   11837      Insert nops to work around the VR4130 `mflo'/`mfhi' errata.
   11838 
   11839 `-m4010'
   11840 `-no-m4010'
   11841      Generate code for the LSI R4010 chip.  This tells the assembler to
   11842      accept the R4010 specific instructions (`addciu', `ffc', etc.),
   11843      and to not schedule `nop' instructions around accesses to the `HI'
   11844      and `LO' registers.  `-no-m4010' turns off this option.
   11845 
   11846 `-m4650'
   11847 `-no-m4650'
   11848      Generate code for the MIPS R4650 chip.  This tells the assembler
   11849      to accept the `mad' and `madu' instruction, and to not schedule
   11850      `nop' instructions around accesses to the `HI' and `LO' registers.
   11851      `-no-m4650' turns off this option.
   11852 
   11853 `-m3900'
   11854 `-no-m3900'
   11855 `-m4100'
   11856 `-no-m4100'
   11857      For each option `-mNNNN', generate code for the MIPS RNNNN chip.
   11858      This tells the assembler to accept instructions specific to that
   11859      chip, and to schedule for that chip's hazards.
   11860 
   11861 `-march=CPU'
   11862      Generate code for a particular MIPS cpu.  It is exactly equivalent
   11863      to `-mCPU', except that there are more value of CPU understood.
   11864      Valid CPU value are:
   11865 
   11866           2000, 3000, 3900, 4000, 4010, 4100, 4111, vr4120, vr4130,
   11867           vr4181, 4300, 4400, 4600, 4650, 5000, rm5200, rm5230, rm5231,
   11868           rm5261, rm5721, vr5400, vr5500, 6000, rm7000, 8000, rm9000,
   11869           10000, 12000, 4kc, 4km, 4kp, 4ksc, 4kec, 4kem, 4kep, 4ksd,
   11870           m4k, m4kp, 24kc, 24kf2_1, 24kf, 24kf1_1, 24kec, 24kef2_1,
   11871           24kef, 24kef1_1, 34kc, 34kf2_1, 34kf, 34kf1_1, 74kc, 74kf2_1,
   11872           74kf, 74kf1_1, 74kf3_2, 5kc, 5kf, 20kc, 25kf, sb1, sb1a,
   11873           loongson2e, loongson2f, octeon
   11874 
   11875      For compatibility reasons, `Nx' and `Bfx' are accepted as synonyms
   11876      for `Nf1_1'.  These values are deprecated.
   11877 
   11878 `-mtune=CPU'
   11879      Schedule and tune for a particular MIPS cpu.  Valid CPU values are
   11880      identical to `-march=CPU'.
   11881 
   11882 `-mabi=ABI'
   11883      Record which ABI the source code uses.  The recognized arguments
   11884      are: `32', `n32', `o64', `64' and `eabi'.
   11885 
   11886 `-msym32'
   11887 `-mno-sym32'
   11888      Equivalent to adding `.set sym32' or `.set nosym32' to the
   11889      beginning of the assembler input.  *Note MIPS symbol sizes::.
   11890 
   11891 `-nocpp'
   11892      This option is ignored.  It is accepted for command-line
   11893      compatibility with other assemblers, which use it to turn off C
   11894      style preprocessing.  With GNU `as', there is no need for
   11895      `-nocpp', because the GNU assembler itself never runs the C
   11896      preprocessor.
   11897 
   11898 `-msoft-float'
   11899 `-mhard-float'
   11900      Disable or enable floating-point instructions.  Note that by
   11901      default floating-point instructions are always allowed even with
   11902      CPU targets that don't have support for these instructions.
   11903 
   11904 `-msingle-float'
   11905 `-mdouble-float'
   11906      Disable or enable double-precision floating-point operations.  Note
   11907      that by default double-precision floating-point operations are
   11908      always allowed even with CPU targets that don't have support for
   11909      these operations.
   11910 
   11911 `--construct-floats'
   11912 `--no-construct-floats'
   11913      The `--no-construct-floats' option disables the construction of
   11914      double width floating point constants by loading the two halves of
   11915      the value into the two single width floating point registers that
   11916      make up the double width register.  This feature is useful if the
   11917      processor support the FR bit in its status  register, and this bit
   11918      is known (by the programmer) to be set.  This bit prevents the
   11919      aliasing of the double width register by the single width
   11920      registers.
   11921 
   11922      By default `--construct-floats' is selected, allowing construction
   11923      of these floating point constants.
   11924 
   11925 `--trap'
   11926 `--no-break'
   11927      `as' automatically macro expands certain division and
   11928      multiplication instructions to check for overflow and division by
   11929      zero.  This option causes `as' to generate code to take a trap
   11930      exception rather than a break exception when an error is detected.
   11931      The trap instructions are only supported at Instruction Set
   11932      Architecture level 2 and higher.
   11933 
   11934 `--break'
   11935 `--no-trap'
   11936      Generate code to take a break exception rather than a trap
   11937      exception when an error is detected.  This is the default.
   11938 
   11939 `-mpdr'
   11940 `-mno-pdr'
   11941      Control generation of `.pdr' sections.  Off by default on IRIX, on
   11942      elsewhere.
   11943 
   11944 `-mshared'
   11945 `-mno-shared'
   11946      When generating code using the Unix calling conventions (selected
   11947      by `-KPIC' or `-mcall_shared'), gas will normally generate code
   11948      which can go into a shared library.  The `-mno-shared' option
   11949      tells gas to generate code which uses the calling convention, but
   11950      can not go into a shared library.  The resulting code is slightly
   11951      more efficient.  This option only affects the handling of the
   11952      `.cpload' and `.cpsetup' pseudo-ops.
   11953 
   11954 
   11955 File: as.info,  Node: MIPS Object,  Next: MIPS Stabs,  Prev: MIPS Opts,  Up: MIPS-Dependent
   11956 
   11957 9.22.2 MIPS ECOFF object code
   11958 -----------------------------
   11959 
   11960 Assembling for a MIPS ECOFF target supports some additional sections
   11961 besides the usual `.text', `.data' and `.bss'.  The additional sections
   11962 are `.rdata', used for read-only data, `.sdata', used for small data,
   11963 and `.sbss', used for small common objects.
   11964 
   11965    When assembling for ECOFF, the assembler uses the `$gp' (`$28')
   11966 register to form the address of a "small object".  Any object in the
   11967 `.sdata' or `.sbss' sections is considered "small" in this sense.  For
   11968 external objects, or for objects in the `.bss' section, you can use the
   11969 `gcc' `-G' option to control the size of objects addressed via `$gp';
   11970 the default value is 8, meaning that a reference to any object eight
   11971 bytes or smaller uses `$gp'.  Passing `-G 0' to `as' prevents it from
   11972 using the `$gp' register on the basis of object size (but the assembler
   11973 uses `$gp' for objects in `.sdata' or `sbss' in any case).  The size of
   11974 an object in the `.bss' section is set by the `.comm' or `.lcomm'
   11975 directive that defines it.  The size of an external object may be set
   11976 with the `.extern' directive.  For example, `.extern sym,4' declares
   11977 that the object at `sym' is 4 bytes in length, whie leaving `sym'
   11978 otherwise undefined.
   11979 
   11980    Using small ECOFF objects requires linker support, and assumes that
   11981 the `$gp' register is correctly initialized (normally done
   11982 automatically by the startup code).  MIPS ECOFF assembly code must not
   11983 modify the `$gp' register.
   11984 
   11985 
   11986 File: as.info,  Node: MIPS Stabs,  Next: MIPS ISA,  Prev: MIPS Object,  Up: MIPS-Dependent
   11987 
   11988 9.22.3 Directives for debugging information
   11989 -------------------------------------------
   11990 
   11991 MIPS ECOFF `as' supports several directives used for generating
   11992 debugging information which are not support by traditional MIPS
   11993 assemblers.  These are `.def', `.endef', `.dim', `.file', `.scl',
   11994 `.size', `.tag', `.type', `.val', `.stabd', `.stabn', and `.stabs'.
   11995 The debugging information generated by the three `.stab' directives can
   11996 only be read by GDB, not by traditional MIPS debuggers (this
   11997 enhancement is required to fully support C++ debugging).  These
   11998 directives are primarily used by compilers, not assembly language
   11999 programmers!
   12000 
   12001 
   12002 File: as.info,  Node: MIPS symbol sizes,  Next: MIPS autoextend,  Prev: MIPS ISA,  Up: MIPS-Dependent
   12003 
   12004 9.22.4 Directives to override the size of symbols
   12005 -------------------------------------------------
   12006 
   12007 The n64 ABI allows symbols to have any 64-bit value.  Although this
   12008 provides a great deal of flexibility, it means that some macros have
   12009 much longer expansions than their 32-bit counterparts.  For example,
   12010 the non-PIC expansion of `dla $4,sym' is usually:
   12011 
   12012      lui     $4,%highest(sym)
   12013      lui     $1,%hi(sym)
   12014      daddiu  $4,$4,%higher(sym)
   12015      daddiu  $1,$1,%lo(sym)
   12016      dsll32  $4,$4,0
   12017      daddu   $4,$4,$1
   12018 
   12019    whereas the 32-bit expansion is simply:
   12020 
   12021      lui     $4,%hi(sym)
   12022      daddiu  $4,$4,%lo(sym)
   12023 
   12024    n64 code is sometimes constructed in such a way that all symbolic
   12025 constants are known to have 32-bit values, and in such cases, it's
   12026 preferable to use the 32-bit expansion instead of the 64-bit expansion.
   12027 
   12028    You can use the `.set sym32' directive to tell the assembler that,
   12029 from this point on, all expressions of the form `SYMBOL' or `SYMBOL +
   12030 OFFSET' have 32-bit values.  For example:
   12031 
   12032      .set sym32
   12033      dla     $4,sym
   12034      lw      $4,sym+16
   12035      sw      $4,sym+0x8000($4)
   12036 
   12037    will cause the assembler to treat `sym', `sym+16' and `sym+0x8000'
   12038 as 32-bit values.  The handling of non-symbolic addresses is not
   12039 affected.
   12040 
   12041    The directive `.set nosym32' ends a `.set sym32' block and reverts
   12042 to the normal behavior.  It is also possible to change the symbol size
   12043 using the command-line options `-msym32' and `-mno-sym32'.
   12044 
   12045    These options and directives are always accepted, but at present,
   12046 they have no effect for anything other than n64.
   12047 
   12048 
   12049 File: as.info,  Node: MIPS ISA,  Next: MIPS symbol sizes,  Prev: MIPS Stabs,  Up: MIPS-Dependent
   12050 
   12051 9.22.5 Directives to override the ISA level
   12052 -------------------------------------------
   12053 
   12054 GNU `as' supports an additional directive to change the MIPS
   12055 Instruction Set Architecture level on the fly: `.set mipsN'.  N should
   12056 be a number from 0 to 5, or 32, 32r2, 64 or 64r2.  The values other
   12057 than 0 make the assembler accept instructions for the corresponding ISA
   12058 level, from that point on in the assembly.  `.set mipsN' affects not
   12059 only which instructions are permitted, but also how certain macros are
   12060 expanded.  `.set mips0' restores the ISA level to its original level:
   12061 either the level you selected with command line options, or the default
   12062 for your configuration.  You can use this feature to permit specific
   12063 MIPS3 instructions while assembling in 32 bit mode.  Use this directive
   12064 with care!
   12065 
   12066    The `.set arch=CPU' directive provides even finer control.  It
   12067 changes the effective CPU target and allows the assembler to use
   12068 instructions specific to a particular CPU.  All CPUs supported by the
   12069 `-march' command line option are also selectable by this directive.
   12070 The original value is restored by `.set arch=default'.
   12071 
   12072    The directive `.set mips16' puts the assembler into MIPS 16 mode, in
   12073 which it will assemble instructions for the MIPS 16 processor.  Use
   12074 `.set nomips16' to return to normal 32 bit mode.
   12075 
   12076    Traditional MIPS assemblers do not support this directive.
   12077 
   12078 
   12079 File: as.info,  Node: MIPS autoextend,  Next: MIPS insn,  Prev: MIPS symbol sizes,  Up: MIPS-Dependent
   12080 
   12081 9.22.6 Directives for extending MIPS 16 bit instructions
   12082 --------------------------------------------------------
   12083 
   12084 By default, MIPS 16 instructions are automatically extended to 32 bits
   12085 when necessary.  The directive `.set noautoextend' will turn this off.
   12086 When `.set noautoextend' is in effect, any 32 bit instruction must be
   12087 explicitly extended with the `.e' modifier (e.g., `li.e $4,1000').  The
   12088 directive `.set autoextend' may be used to once again automatically
   12089 extend instructions when necessary.
   12090 
   12091    This directive is only meaningful when in MIPS 16 mode.  Traditional
   12092 MIPS assemblers do not support this directive.
   12093 
   12094 
   12095 File: as.info,  Node: MIPS insn,  Next: MIPS option stack,  Prev: MIPS autoextend,  Up: MIPS-Dependent
   12096 
   12097 9.22.7 Directive to mark data as an instruction
   12098 -----------------------------------------------
   12099 
   12100 The `.insn' directive tells `as' that the following data is actually
   12101 instructions.  This makes a difference in MIPS 16 mode: when loading
   12102 the address of a label which precedes instructions, `as' automatically
   12103 adds 1 to the value, so that jumping to the loaded address will do the
   12104 right thing.
   12105 
   12106 
   12107 File: as.info,  Node: MIPS option stack,  Next: MIPS ASE instruction generation overrides,  Prev: MIPS insn,  Up: MIPS-Dependent
   12108 
   12109 9.22.8 Directives to save and restore options
   12110 ---------------------------------------------
   12111 
   12112 The directives `.set push' and `.set pop' may be used to save and
   12113 restore the current settings for all the options which are controlled
   12114 by `.set'.  The `.set push' directive saves the current settings on a
   12115 stack.  The `.set pop' directive pops the stack and restores the
   12116 settings.
   12117 
   12118    These directives can be useful inside an macro which must change an
   12119 option such as the ISA level or instruction reordering but does not want
   12120 to change the state of the code which invoked the macro.
   12121 
   12122    Traditional MIPS assemblers do not support these directives.
   12123 
   12124 
   12125 File: as.info,  Node: MIPS ASE instruction generation overrides,  Next: MIPS floating-point,  Prev: MIPS option stack,  Up: MIPS-Dependent
   12126 
   12127 9.22.9 Directives to control generation of MIPS ASE instructions
   12128 ----------------------------------------------------------------
   12129 
   12130 The directive `.set mips3d' makes the assembler accept instructions
   12131 from the MIPS-3D Application Specific Extension from that point on in
   12132 the assembly.  The `.set nomips3d' directive prevents MIPS-3D
   12133 instructions from being accepted.
   12134 
   12135    The directive `.set smartmips' makes the assembler accept
   12136 instructions from the SmartMIPS Application Specific Extension to the
   12137 MIPS32 ISA from that point on in the assembly.  The `.set nosmartmips'
   12138 directive prevents SmartMIPS instructions from being accepted.
   12139 
   12140    The directive `.set mdmx' makes the assembler accept instructions
   12141 from the MDMX Application Specific Extension from that point on in the
   12142 assembly.  The `.set nomdmx' directive prevents MDMX instructions from
   12143 being accepted.
   12144 
   12145    The directive `.set dsp' makes the assembler accept instructions
   12146 from the DSP Release 1 Application Specific Extension from that point
   12147 on in the assembly.  The `.set nodsp' directive prevents DSP Release 1
   12148 instructions from being accepted.
   12149 
   12150    The directive `.set dspr2' makes the assembler accept instructions
   12151 from the DSP Release 2 Application Specific Extension from that point
   12152 on in the assembly.  This dirctive implies `.set dsp'.  The `.set
   12153 nodspr2' directive prevents DSP Release 2 instructions from being
   12154 accepted.
   12155 
   12156    The directive `.set mt' makes the assembler accept instructions from
   12157 the MT Application Specific Extension from that point on in the
   12158 assembly.  The `.set nomt' directive prevents MT instructions from
   12159 being accepted.
   12160 
   12161    Traditional MIPS assemblers do not support these directives.
   12162 
   12163 
   12164 File: as.info,  Node: MIPS floating-point,  Prev: MIPS ASE instruction generation overrides,  Up: MIPS-Dependent
   12165 
   12166 9.22.10 Directives to override floating-point options
   12167 -----------------------------------------------------
   12168 
   12169 The directives `.set softfloat' and `.set hardfloat' provide finer
   12170 control of disabling and enabling float-point instructions.  These
   12171 directives always override the default (that hard-float instructions
   12172 are accepted) or the command-line options (`-msoft-float' and
   12173 `-mhard-float').
   12174 
   12175    The directives `.set singlefloat' and `.set doublefloat' provide
   12176 finer control of disabling and enabling double-precision float-point
   12177 operations.  These directives always override the default (that
   12178 double-precision operations are accepted) or the command-line options
   12179 (`-msingle-float' and `-mdouble-float').
   12180 
   12181    Traditional MIPS assemblers do not support these directives.
   12182 
   12183 
   12184 File: as.info,  Node: MMIX-Dependent,  Next: MSP430-Dependent,  Prev: MIPS-Dependent,  Up: Machine Dependencies
   12185 
   12186 9.23 MMIX Dependent Features
   12187 ============================
   12188 
   12189 * Menu:
   12190 
   12191 * MMIX-Opts::              Command-line Options
   12192 * MMIX-Expand::            Instruction expansion
   12193 * MMIX-Syntax::            Syntax
   12194 * MMIX-mmixal::		   Differences to `mmixal' syntax and semantics
   12195 
   12196 
   12197 File: as.info,  Node: MMIX-Opts,  Next: MMIX-Expand,  Up: MMIX-Dependent
   12198 
   12199 9.23.1 Command-line Options
   12200 ---------------------------
   12201 
   12202 The MMIX version of `as' has some machine-dependent options.
   12203 
   12204    When `--fixed-special-register-names' is specified, only the register
   12205 names specified in *note MMIX-Regs:: are recognized in the instructions
   12206 `PUT' and `GET'.
   12207 
   12208    You can use the `--globalize-symbols' to make all symbols global.
   12209 This option is useful when splitting up a `mmixal' program into several
   12210 files.
   12211 
   12212    The `--gnu-syntax' turns off most syntax compatibility with
   12213 `mmixal'.  Its usability is currently doubtful.
   12214 
   12215    The `--relax' option is not fully supported, but will eventually make
   12216 the object file prepared for linker relaxation.
   12217 
   12218    If you want to avoid inadvertently calling a predefined symbol and
   12219 would rather get an error, for example when using `as' with a compiler
   12220 or other machine-generated code, specify `--no-predefined-syms'.  This
   12221 turns off built-in predefined definitions of all such symbols,
   12222 including rounding-mode symbols, segment symbols, `BIT' symbols, and
   12223 `TRAP' symbols used in `mmix' "system calls".  It also turns off
   12224 predefined special-register names, except when used in `PUT' and `GET'
   12225 instructions.
   12226 
   12227    By default, some instructions are expanded to fit the size of the
   12228 operand or an external symbol (*note MMIX-Expand::).  By passing
   12229 `--no-expand', no such expansion will be done, instead causing errors
   12230 at link time if the operand does not fit.
   12231 
   12232    The `mmixal' documentation (*note mmixsite::) specifies that global
   12233 registers allocated with the `GREG' directive (*note MMIX-greg::) and
   12234 initialized to the same non-zero value, will refer to the same global
   12235 register.  This isn't strictly enforceable in `as' since the final
   12236 addresses aren't known until link-time, but it will do an effort unless
   12237 the `--no-merge-gregs' option is specified.  (Register merging isn't
   12238 yet implemented in `ld'.)
   12239 
   12240    `as' will warn every time it expands an instruction to fit an
   12241 operand unless the option `-x' is specified.  It is believed that this
   12242 behaviour is more useful than just mimicking `mmixal''s behaviour, in
   12243 which instructions are only expanded if the `-x' option is specified,
   12244 and assembly fails otherwise, when an instruction needs to be expanded.
   12245 It needs to be kept in mind that `mmixal' is both an assembler and
   12246 linker, while `as' will expand instructions that at link stage can be
   12247 contracted.  (Though linker relaxation isn't yet implemented in `ld'.)
   12248 The option `-x' also imples `--linker-allocated-gregs'.
   12249 
   12250    If instruction expansion is enabled, `as' can expand a `PUSHJ'
   12251 instruction into a series of instructions.  The shortest expansion is
   12252 to not expand it, but just mark the call as redirectable to a stub,
   12253 which `ld' creates at link-time, but only if the original `PUSHJ'
   12254 instruction is found not to reach the target.  The stub consists of the
   12255 necessary instructions to form a jump to the target.  This happens if
   12256 `as' can assert that the `PUSHJ' instruction can reach such a stub.
   12257 The option `--no-pushj-stubs' disables this shorter expansion, and the
   12258 longer series of instructions is then created at assembly-time.  The
   12259 option `--no-stubs' is a synonym, intended for compatibility with
   12260 future releases, where generation of stubs for other instructions may
   12261 be implemented.
   12262 
   12263    Usually a two-operand-expression (*note GREG-base::) without a
   12264 matching `GREG' directive is treated as an error by `as'.  When the
   12265 option `--linker-allocated-gregs' is in effect, they are instead passed
   12266 through to the linker, which will allocate as many global registers as
   12267 is needed.
   12268 
   12269 
   12270 File: as.info,  Node: MMIX-Expand,  Next: MMIX-Syntax,  Prev: MMIX-Opts,  Up: MMIX-Dependent
   12271 
   12272 9.23.2 Instruction expansion
   12273 ----------------------------
   12274 
   12275 When `as' encounters an instruction with an operand that is either not
   12276 known or does not fit the operand size of the instruction, `as' (and
   12277 `ld') will expand the instruction into a sequence of instructions
   12278 semantically equivalent to the operand fitting the instruction.
   12279 Expansion will take place for the following instructions:
   12280 
   12281 `GETA'
   12282      Expands to a sequence of four instructions: `SETL', `INCML',
   12283      `INCMH' and `INCH'.  The operand must be a multiple of four.
   12284 
   12285 Conditional branches
   12286      A branch instruction is turned into a branch with the complemented
   12287      condition and prediction bit over five instructions; four
   12288      instructions setting `$255' to the operand value, which like with
   12289      `GETA' must be a multiple of four, and a final `GO $255,$255,0'.
   12290 
   12291 `PUSHJ'
   12292      Similar to expansion for conditional branches; four instructions
   12293      set `$255' to the operand value, followed by a `PUSHGO
   12294      $255,$255,0'.
   12295 
   12296 `JMP'
   12297      Similar to conditional branches and `PUSHJ'.  The final instruction
   12298      is `GO $255,$255,0'.
   12299 
   12300    The linker `ld' is expected to shrink these expansions for code
   12301 assembled with `--relax' (though not currently implemented).
   12302 
   12303 
   12304 File: as.info,  Node: MMIX-Syntax,  Next: MMIX-mmixal,  Prev: MMIX-Expand,  Up: MMIX-Dependent
   12305 
   12306 9.23.3 Syntax
   12307 -------------
   12308 
   12309 The assembly syntax is supposed to be upward compatible with that
   12310 described in Sections 1.3 and 1.4 of `The Art of Computer Programming,
   12311 Volume 1'.  Draft versions of those chapters as well as other MMIX
   12312 information is located at
   12313 `http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html'.  Most code
   12314 examples from the mmixal package located there should work unmodified
   12315 when assembled and linked as single files, with a few noteworthy
   12316 exceptions (*note MMIX-mmixal::).
   12317 
   12318    Before an instruction is emitted, the current location is aligned to
   12319 the next four-byte boundary.  If a label is defined at the beginning of
   12320 the line, its value will be the aligned value.
   12321 
   12322    In addition to the traditional hex-prefix `0x', a hexadecimal number
   12323 can also be specified by the prefix character `#'.
   12324 
   12325    After all operands to an MMIX instruction or directive have been
   12326 specified, the rest of the line is ignored, treated as a comment.
   12327 
   12328 * Menu:
   12329 
   12330 * MMIX-Chars::		        Special Characters
   12331 * MMIX-Symbols::		Symbols
   12332 * MMIX-Regs::			Register Names
   12333 * MMIX-Pseudos::		Assembler Directives
   12334 
   12335 
   12336 File: as.info,  Node: MMIX-Chars,  Next: MMIX-Symbols,  Up: MMIX-Syntax
   12337 
   12338 9.23.3.1 Special Characters
   12339 ...........................
   12340 
   12341 The characters `*' and `#' are line comment characters; each start a
   12342 comment at the beginning of a line, but only at the beginning of a
   12343 line.  A `#' prefixes a hexadecimal number if found elsewhere on a line.
   12344 
   12345    Two other characters, `%' and `!', each start a comment anywhere on
   12346 the line.  Thus you can't use the `modulus' and `not' operators in
   12347 expressions normally associated with these two characters.
   12348 
   12349    A `;' is a line separator, treated as a new-line, so separate
   12350 instructions can be specified on a single line.
   12351 
   12352 
   12353 File: as.info,  Node: MMIX-Symbols,  Next: MMIX-Regs,  Prev: MMIX-Chars,  Up: MMIX-Syntax
   12354 
   12355 9.23.3.2 Symbols
   12356 ................
   12357 
   12358 The character `:' is permitted in identifiers.  There are two
   12359 exceptions to it being treated as any other symbol character: if a
   12360 symbol begins with `:', it means that the symbol is in the global
   12361 namespace and that the current prefix should not be prepended to that
   12362 symbol (*note MMIX-prefix::).  The `:' is then not considered part of
   12363 the symbol.  For a symbol in the label position (first on a line), a `:'
   12364 at the end of a symbol is silently stripped off.  A label is permitted,
   12365 but not required, to be followed by a `:', as with many other assembly
   12366 formats.
   12367 
   12368    The character `@' in an expression, is a synonym for `.', the
   12369 current location.
   12370 
   12371    In addition to the common forward and backward local symbol formats
   12372 (*note Symbol Names::), they can be specified with upper-case `B' and
   12373 `F', as in `8B' and `9F'.  A local label defined for the current
   12374 position is written with a `H' appended to the number:
   12375      3H LDB $0,$1,2
   12376    This and traditional local-label formats cannot be mixed: a label
   12377 must be defined and referred to using the same format.
   12378 
   12379    There's a minor caveat: just as for the ordinary local symbols, the
   12380 local symbols are translated into ordinary symbols using control
   12381 characters are to hide the ordinal number of the symbol.
   12382 Unfortunately, these symbols are not translated back in error messages.
   12383 Thus you may see confusing error messages when local symbols are used.
   12384 Control characters `\003' (control-C) and `\004' (control-D) are used
   12385 for the MMIX-specific local-symbol syntax.
   12386 
   12387    The symbol `Main' is handled specially; it is always global.
   12388 
   12389    By defining the symbols `__.MMIX.start..text' and
   12390 `__.MMIX.start..data', the address of respectively the `.text' and
   12391 `.data' segments of the final program can be defined, though when
   12392 linking more than one object file, the code or data in the object file
   12393 containing the symbol is not guaranteed to be start at that position;
   12394 just the final executable.  *Note MMIX-loc::.
   12395 
   12396 
   12397 File: as.info,  Node: MMIX-Regs,  Next: MMIX-Pseudos,  Prev: MMIX-Symbols,  Up: MMIX-Syntax
   12398 
   12399 9.23.3.3 Register names
   12400 .......................
   12401 
   12402 Local and global registers are specified as `$0' to `$255'.  The
   12403 recognized special register names are `rJ', `rA', `rB', `rC', `rD',
   12404 `rE', `rF', `rG', `rH', `rI', `rK', `rL', `rM', `rN', `rO', `rP', `rQ',
   12405 `rR', `rS', `rT', `rU', `rV', `rW', `rX', `rY', `rZ', `rBB', `rTT',
   12406 `rWW', `rXX', `rYY' and `rZZ'.  A leading `:' is optional for special
   12407 register names.
   12408 
   12409    Local and global symbols can be equated to register names and used in
   12410 place of ordinary registers.
   12411 
   12412    Similarly for special registers, local and global symbols can be
   12413 used.  Also, symbols equated from numbers and constant expressions are
   12414 allowed in place of a special register, except when either of the
   12415 options `--no-predefined-syms' and `--fixed-special-register-names' are
   12416 specified.  Then only the special register names above are allowed for
   12417 the instructions having a special register operand; `GET' and `PUT'.
   12418 
   12419 
   12420 File: as.info,  Node: MMIX-Pseudos,  Prev: MMIX-Regs,  Up: MMIX-Syntax
   12421 
   12422 9.23.3.4 Assembler Directives
   12423 .............................
   12424 
   12425 `LOC'
   12426      The `LOC' directive sets the current location to the value of the
   12427      operand field, which may include changing sections.  If the
   12428      operand is a constant, the section is set to either `.data' if the
   12429      value is `0x2000000000000000' or larger, else it is set to `.text'.
   12430      Within a section, the current location may only be changed to
   12431      monotonically higher addresses.  A LOC expression must be a
   12432      previously defined symbol or a "pure" constant.
   12433 
   12434      An example, which sets the label PREV to the current location, and
   12435      updates the current location to eight bytes forward:
   12436           prev LOC @+8
   12437 
   12438      When a LOC has a constant as its operand, a symbol
   12439      `__.MMIX.start..text' or `__.MMIX.start..data' is defined
   12440      depending on the address as mentioned above.  Each such symbol is
   12441      interpreted as special by the linker, locating the section at that
   12442      address.  Note that if multiple files are linked, the first object
   12443      file with that section will be mapped to that address (not
   12444      necessarily the file with the LOC definition).
   12445 
   12446 `LOCAL'
   12447      Example:
   12448            LOCAL external_symbol
   12449            LOCAL 42
   12450            .local asymbol
   12451 
   12452      This directive-operation generates a link-time assertion that the
   12453      operand does not correspond to a global register.  The operand is
   12454      an expression that at link-time resolves to a register symbol or a
   12455      number.  A number is treated as the register having that number.
   12456      There is one restriction on the use of this directive: the
   12457      pseudo-directive must be placed in a section with contents, code
   12458      or data.
   12459 
   12460 `IS'
   12461      The `IS' directive:
   12462           asymbol IS an_expression
   12463      sets the symbol `asymbol' to `an_expression'.  A symbol may not be
   12464      set more than once using this directive.  Local labels may be set
   12465      using this directive, for example:
   12466           5H IS @+4
   12467 
   12468 `GREG'
   12469      This directive reserves a global register, gives it an initial
   12470      value and optionally gives it a symbolic name.  Some examples:
   12471 
   12472           areg GREG
   12473           breg GREG data_value
   12474                GREG data_buffer
   12475                .greg creg, another_data_value
   12476 
   12477      The symbolic register name can be used in place of a (non-special)
   12478      register.  If a value isn't provided, it defaults to zero.  Unless
   12479      the option `--no-merge-gregs' is specified, non-zero registers
   12480      allocated with this directive may be eliminated by `as'; another
   12481      register with the same value used in its place.  Any of the
   12482      instructions `CSWAP', `GO', `LDA', `LDBU', `LDB', `LDHT', `LDOU',
   12483      `LDO', `LDSF', `LDTU', `LDT', `LDUNC', `LDVTS', `LDWU', `LDW',
   12484      `PREGO', `PRELD', `PREST', `PUSHGO', `STBU', `STB', `STCO', `STHT',
   12485      `STOU', `STSF', `STTU', `STT', `STUNC', `SYNCD', `SYNCID', can
   12486      have a value nearby an initial value in place of its second and
   12487      third operands.  Here, "nearby" is defined as within the range
   12488      0...255 from the initial value of such an allocated register.
   12489 
   12490           buffer1 BYTE 0,0,0,0,0
   12491           buffer2 BYTE 0,0,0,0,0
   12492            ...
   12493            GREG buffer1
   12494            LDOU $42,buffer2
   12495      In the example above, the `Y' field of the `LDOUI' instruction
   12496      (LDOU with a constant Z) will be replaced with the global register
   12497      allocated for `buffer1', and the `Z' field will have the value 5,
   12498      the offset from `buffer1' to `buffer2'.  The result is equivalent
   12499      to this code:
   12500           buffer1 BYTE 0,0,0,0,0
   12501           buffer2 BYTE 0,0,0,0,0
   12502            ...
   12503           tmpreg GREG buffer1
   12504            LDOU $42,tmpreg,(buffer2-buffer1)
   12505 
   12506      Global registers allocated with this directive are allocated in
   12507      order higher-to-lower within a file.  Other than that, the exact
   12508      order of register allocation and elimination is undefined.  For
   12509      example, the order is undefined when more than one file with such
   12510      directives are linked together.  With the options `-x' and
   12511      `--linker-allocated-gregs', `GREG' directives for two-operand
   12512      cases like the one mentioned above can be omitted.  Sufficient
   12513      global registers will then be allocated by the linker.
   12514 
   12515 `BYTE'
   12516      The `BYTE' directive takes a series of operands separated by a
   12517      comma.  If an operand is a string (*note Strings::), each
   12518      character of that string is emitted as a byte.  Other operands
   12519      must be constant expressions without forward references, in the
   12520      range 0...255.  If you need operands having expressions with
   12521      forward references, use `.byte' (*note Byte::).  An operand can be
   12522      omitted, defaulting to a zero value.
   12523 
   12524 `WYDE'
   12525 `TETRA'
   12526 `OCTA'
   12527      The directives `WYDE', `TETRA' and `OCTA' emit constants of two,
   12528      four and eight bytes size respectively.  Before anything else
   12529      happens for the directive, the current location is aligned to the
   12530      respective constant-size boundary.  If a label is defined at the
   12531      beginning of the line, its value will be that after the alignment.
   12532      A single operand can be omitted, defaulting to a zero value
   12533      emitted for the directive.  Operands can be expressed as strings
   12534      (*note Strings::), in which case each character in the string is
   12535      emitted as a separate constant of the size indicated by the
   12536      directive.
   12537 
   12538 `PREFIX'
   12539      The `PREFIX' directive sets a symbol name prefix to be prepended to
   12540      all symbols (except local symbols, *note MMIX-Symbols::), that are
   12541      not prefixed with `:', until the next `PREFIX' directive.  Such
   12542      prefixes accumulate.  For example,
   12543            PREFIX a
   12544            PREFIX b
   12545           c IS 0
   12546      defines a symbol `abc' with the value 0.
   12547 
   12548 `BSPEC'
   12549 `ESPEC'
   12550      A pair of `BSPEC' and `ESPEC' directives delimit a section of
   12551      special contents (without specified semantics).  Example:
   12552            BSPEC 42
   12553            TETRA 1,2,3
   12554            ESPEC
   12555      The single operand to `BSPEC' must be number in the range 0...255.
   12556      The `BSPEC' number 80 is used by the GNU binutils implementation.
   12557 
   12558 
   12559 File: as.info,  Node: MMIX-mmixal,  Prev: MMIX-Syntax,  Up: MMIX-Dependent
   12560 
   12561 9.23.4 Differences to `mmixal'
   12562 ------------------------------
   12563 
   12564 The binutils `as' and `ld' combination has a few differences in
   12565 function compared to `mmixal' (*note mmixsite::).
   12566 
   12567    The replacement of a symbol with a GREG-allocated register (*note
   12568 GREG-base::) is not handled the exactly same way in `as' as in
   12569 `mmixal'.  This is apparent in the `mmixal' example file `inout.mms',
   12570 where different registers with different offsets, eventually yielding
   12571 the same address, are used in the first instruction.  This type of
   12572 difference should however not affect the function of any program unless
   12573 it has specific assumptions about the allocated register number.
   12574 
   12575    Line numbers (in the `mmo' object format) are currently not
   12576 supported.
   12577 
   12578    Expression operator precedence is not that of mmixal: operator
   12579 precedence is that of the C programming language.  It's recommended to
   12580 use parentheses to explicitly specify wanted operator precedence
   12581 whenever more than one type of operators are used.
   12582 
   12583    The serialize unary operator `&', the fractional division operator
   12584 `//', the logical not operator `!' and the modulus operator `%' are not
   12585 available.
   12586 
   12587    Symbols are not global by default, unless the option
   12588 `--globalize-symbols' is passed.  Use the `.global' directive to
   12589 globalize symbols (*note Global::).
   12590 
   12591    Operand syntax is a bit stricter with `as' than `mmixal'.  For
   12592 example, you can't say `addu 1,2,3', instead you must write `addu
   12593 $1,$2,3'.
   12594 
   12595    You can't LOC to a lower address than those already visited (i.e.,
   12596 "backwards").
   12597 
   12598    A LOC directive must come before any emitted code.
   12599 
   12600    Predefined symbols are visible as file-local symbols after use.  (In
   12601 the ELF file, that is--the linked mmo file has no notion of a file-local
   12602 symbol.)
   12603 
   12604    Some mapping of constant expressions to sections in LOC expressions
   12605 is attempted, but that functionality is easily confused and should be
   12606 avoided unless compatibility with `mmixal' is required.  A LOC
   12607 expression to `0x2000000000000000' or higher, maps to the `.data'
   12608 section and lower addresses map to the `.text' section (*note
   12609 MMIX-loc::).
   12610 
   12611    The code and data areas are each contiguous.  Sparse programs with
   12612 far-away LOC directives will take up the same amount of space as a
   12613 contiguous program with zeros filled in the gaps between the LOC
   12614 directives.  If you need sparse programs, you might try and get the
   12615 wanted effect with a linker script and splitting up the code parts into
   12616 sections (*note Section::).  Assembly code for this, to be compatible
   12617 with `mmixal', would look something like:
   12618       .if 0
   12619       LOC away_expression
   12620       .else
   12621       .section away,"ax"
   12622       .fi
   12623    `as' will not execute the LOC directive and `mmixal' ignores the
   12624 lines with `.'.  This construct can be used generally to help
   12625 compatibility.
   12626 
   12627    Symbols can't be defined twice-not even to the same value.
   12628 
   12629    Instruction mnemonics are recognized case-insensitive, though the
   12630 `IS' and `GREG' pseudo-operations must be specified in upper-case
   12631 characters.
   12632 
   12633    There's no unicode support.
   12634 
   12635    The following is a list of programs in `mmix.tar.gz', available at
   12636 `http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html', last
   12637 checked with the version dated 2001-08-25 (md5sum
   12638 c393470cfc86fac040487d22d2bf0172) that assemble with `mmixal' but do
   12639 not assemble with `as':
   12640 
   12641 `silly.mms'
   12642      LOC to a previous address.
   12643 
   12644 `sim.mms'
   12645      Redefines symbol `Done'.
   12646 
   12647 `test.mms'
   12648      Uses the serial operator `&'.
   12649 
   12650 
   12651 File: as.info,  Node: MSP430-Dependent,  Next: SH-Dependent,  Prev: MMIX-Dependent,  Up: Machine Dependencies
   12652 
   12653 9.24 MSP 430 Dependent Features
   12654 ===============================
   12655 
   12656 * Menu:
   12657 
   12658 * MSP430 Options::              Options
   12659 * MSP430 Syntax::               Syntax
   12660 * MSP430 Floating Point::       Floating Point
   12661 * MSP430 Directives::           MSP 430 Machine Directives
   12662 * MSP430 Opcodes::              Opcodes
   12663 * MSP430 Profiling Capability::	Profiling Capability
   12664 
   12665 
   12666 File: as.info,  Node: MSP430 Options,  Next: MSP430 Syntax,  Up: MSP430-Dependent
   12667 
   12668 9.24.1 Options
   12669 --------------
   12670 
   12671 `-m'
   12672      select the mpu arch. Currently has no effect.
   12673 
   12674 `-mP'
   12675      enables polymorph instructions handler.
   12676 
   12677 `-mQ'
   12678      enables relaxation at assembly time. DANGEROUS!
   12679 
   12680 
   12681 
   12682 File: as.info,  Node: MSP430 Syntax,  Next: MSP430 Floating Point,  Prev: MSP430 Options,  Up: MSP430-Dependent
   12683 
   12684 9.24.2 Syntax
   12685 -------------
   12686 
   12687 * Menu:
   12688 
   12689 * MSP430-Macros::		Macros
   12690 * MSP430-Chars::                Special Characters
   12691 * MSP430-Regs::                 Register Names
   12692 * MSP430-Ext::			Assembler Extensions
   12693 
   12694 
   12695 File: as.info,  Node: MSP430-Macros,  Next: MSP430-Chars,  Up: MSP430 Syntax
   12696 
   12697 9.24.2.1 Macros
   12698 ...............
   12699 
   12700 The macro syntax used on the MSP 430 is like that described in the MSP
   12701 430 Family Assembler Specification.  Normal `as' macros should still
   12702 work.
   12703 
   12704    Additional built-in macros are:
   12705 
   12706 `llo(exp)'
   12707      Extracts least significant word from 32-bit expression 'exp'.
   12708 
   12709 `lhi(exp)'
   12710      Extracts most significant word from 32-bit expression 'exp'.
   12711 
   12712 `hlo(exp)'
   12713      Extracts 3rd word from 64-bit expression 'exp'.
   12714 
   12715 `hhi(exp)'
   12716      Extracts 4rd word from 64-bit expression 'exp'.
   12717 
   12718 
   12719    They normally being used as an immediate source operand.
   12720          mov	#llo(1), r10	;	== mov	#1, r10
   12721          mov	#lhi(1), r10	;	== mov	#0, r10
   12722 
   12723 
   12724 File: as.info,  Node: MSP430-Chars,  Next: MSP430-Regs,  Prev: MSP430-Macros,  Up: MSP430 Syntax
   12725 
   12726 9.24.2.2 Special Characters
   12727 ...........................
   12728 
   12729 `;' is the line comment character.
   12730 
   12731    The character `$' in jump instructions indicates current location and
   12732 implemented only for TI syntax compatibility.
   12733 
   12734 
   12735 File: as.info,  Node: MSP430-Regs,  Next: MSP430-Ext,  Prev: MSP430-Chars,  Up: MSP430 Syntax
   12736 
   12737 9.24.2.3 Register Names
   12738 .......................
   12739 
   12740 General-purpose registers are represented by predefined symbols of the
   12741 form `rN' (for global registers), where N represents a number between
   12742 `0' and `15'.  The leading letters may be in either upper or lower
   12743 case; for example, `r13' and `R7' are both valid register names.
   12744 
   12745    Register names `PC', `SP' and `SR' cannot be used as register names
   12746 and will be treated as variables. Use `r0', `r1', and `r2' instead.
   12747 
   12748 
   12749 File: as.info,  Node: MSP430-Ext,  Prev: MSP430-Regs,  Up: MSP430 Syntax
   12750 
   12751 9.24.2.4 Assembler Extensions
   12752 .............................
   12753 
   12754 `@rN'
   12755      As destination operand being treated as `0(rn)'
   12756 
   12757 `0(rN)'
   12758      As source operand being treated as `@rn'
   12759 
   12760 `jCOND +N'
   12761      Skips next N bytes followed by jump instruction and equivalent to
   12762      `jCOND $+N+2'
   12763 
   12764 
   12765    Also, there are some instructions, which cannot be found in other
   12766 assemblers.  These are branch instructions, which has different opcodes
   12767 upon jump distance.  They all got PC relative addressing mode.
   12768 
   12769 `beq label'
   12770      A polymorph instruction which is `jeq label' in case if jump
   12771      distance within allowed range for cpu's jump instruction. If not,
   12772      this unrolls into a sequence of
   12773             jne $+6
   12774             br  label
   12775 
   12776 `bne label'
   12777      A polymorph instruction which is `jne label' or `jeq +4; br label'
   12778 
   12779 `blt label'
   12780      A polymorph instruction which is `jl label' or `jge +4; br label'
   12781 
   12782 `bltn label'
   12783      A polymorph instruction which is `jn label' or `jn +2; jmp +4; br
   12784      label'
   12785 
   12786 `bltu label'
   12787      A polymorph instruction which is `jlo label' or `jhs +2; br label'
   12788 
   12789 `bge label'
   12790      A polymorph instruction which is `jge label' or `jl +4; br label'
   12791 
   12792 `bgeu label'
   12793      A polymorph instruction which is `jhs label' or `jlo +4; br label'
   12794 
   12795 `bgt label'
   12796      A polymorph instruction which is `jeq +2; jge label' or `jeq +6;
   12797      jl  +4; br label'
   12798 
   12799 `bgtu label'
   12800      A polymorph instruction which is `jeq +2; jhs label' or `jeq +6;
   12801      jlo +4; br label'
   12802 
   12803 `bleu label'
   12804      A polymorph instruction which is `jeq label; jlo label' or `jeq
   12805      +2; jhs +4; br label'
   12806 
   12807 `ble label'
   12808      A polymorph instruction which is `jeq label; jl  label' or `jeq
   12809      +2; jge +4; br label'
   12810 
   12811 `jump label'
   12812      A polymorph instruction which is `jmp label' or `br label'
   12813 
   12814 
   12815 File: as.info,  Node: MSP430 Floating Point,  Next: MSP430 Directives,  Prev: MSP430 Syntax,  Up: MSP430-Dependent
   12816 
   12817 9.24.3 Floating Point
   12818 ---------------------
   12819 
   12820 The MSP 430 family uses IEEE 32-bit floating-point numbers.
   12821 
   12822 
   12823 File: as.info,  Node: MSP430 Directives,  Next: MSP430 Opcodes,  Prev: MSP430 Floating Point,  Up: MSP430-Dependent
   12824 
   12825 9.24.4 MSP 430 Machine Directives
   12826 ---------------------------------
   12827 
   12828 `.file'
   12829      This directive is ignored; it is accepted for compatibility with
   12830      other MSP 430 assemblers.
   12831 
   12832           _Warning:_ in other versions of the GNU assembler, `.file' is
   12833           used for the directive called `.app-file' in the MSP 430
   12834           support.
   12835 
   12836 `.line'
   12837      This directive is ignored; it is accepted for compatibility with
   12838      other MSP 430 assemblers.
   12839 
   12840 `.arch'
   12841      Currently this directive is ignored; it is accepted for
   12842      compatibility with other MSP 430 assemblers.
   12843 
   12844 `.profiler'
   12845      This directive instructs assembler to add new profile entry to the
   12846      object file.
   12847 
   12848 
   12849 
   12850 File: as.info,  Node: MSP430 Opcodes,  Next: MSP430 Profiling Capability,  Prev: MSP430 Directives,  Up: MSP430-Dependent
   12851 
   12852 9.24.5 Opcodes
   12853 --------------
   12854 
   12855 `as' implements all the standard MSP 430 opcodes.  No additional
   12856 pseudo-instructions are needed on this family.
   12857 
   12858    For information on the 430 machine instruction set, see `MSP430
   12859 User's Manual, document slau049d', Texas Instrument, Inc.
   12860 
   12861 
   12862 File: as.info,  Node: MSP430 Profiling Capability,  Prev: MSP430 Opcodes,  Up: MSP430-Dependent
   12863 
   12864 9.24.6 Profiling Capability
   12865 ---------------------------
   12866 
   12867 It is a performance hit to use gcc's profiling approach for this tiny
   12868 target.  Even more - jtag hardware facility does not perform any
   12869 profiling functions.  However we've got gdb's built-in simulator where
   12870 we can do anything.
   12871 
   12872    We define new section `.profiler' which holds all profiling
   12873 information.  We define new pseudo operation `.profiler' which will
   12874 instruct assembler to add new profile entry to the object file. Profile
   12875 should take place at the present address.
   12876 
   12877    Pseudo operation format:
   12878 
   12879    `.profiler flags,function_to_profile [, cycle_corrector, extra]'
   12880 
   12881    where:
   12882 
   12883           `flags' is a combination of the following characters:
   12884 
   12885     `s'
   12886           function entry
   12887 
   12888     `x'
   12889           function exit
   12890 
   12891     `i'
   12892           function is in init section
   12893 
   12894     `f'
   12895           function is in fini section
   12896 
   12897     `l'
   12898           library call
   12899 
   12900     `c'
   12901           libc standard call
   12902 
   12903     `d'
   12904           stack value demand
   12905 
   12906     `I'
   12907           interrupt service routine
   12908 
   12909     `P'
   12910           prologue start
   12911 
   12912     `p'
   12913           prologue end
   12914 
   12915     `E'
   12916           epilogue start
   12917 
   12918     `e'
   12919           epilogue end
   12920 
   12921     `j'
   12922           long jump / sjlj unwind
   12923 
   12924     `a'
   12925           an arbitrary code fragment
   12926 
   12927     `t'
   12928           extra parameter saved (a constant value like frame size)
   12929 
   12930 `function_to_profile'
   12931      a function address
   12932 
   12933 `cycle_corrector'
   12934      a value which should be added to the cycle counter, zero if
   12935      omitted.
   12936 
   12937 `extra'
   12938      any extra parameter, zero if omitted.
   12939 
   12940 
   12941    For example:
   12942      .global fxx
   12943      .type fxx,@function
   12944      fxx:
   12945      .LFrameOffset_fxx=0x08
   12946      .profiler "scdP", fxx     ; function entry.
   12947      			  ; we also demand stack value to be saved
   12948        push r11
   12949        push r10
   12950        push r9
   12951        push r8
   12952      .profiler "cdpt",fxx,0, .LFrameOffset_fxx  ; check stack value at this point
   12953      					  ; (this is a prologue end)
   12954      					  ; note, that spare var filled with
   12955      					  ; the farme size
   12956        mov r15,r8
   12957      ...
   12958      .profiler cdE,fxx         ; check stack
   12959        pop r8
   12960        pop r9
   12961        pop r10
   12962        pop r11
   12963      .profiler xcde,fxx,3      ; exit adds 3 to the cycle counter
   12964        ret                     ; cause 'ret' insn takes 3 cycles
   12965 
   12966 
   12967 File: as.info,  Node: PDP-11-Dependent,  Next: PJ-Dependent,  Prev: SH64-Dependent,  Up: Machine Dependencies
   12968 
   12969 9.25 PDP-11 Dependent Features
   12970 ==============================
   12971 
   12972 * Menu:
   12973 
   12974 * PDP-11-Options::		Options
   12975 * PDP-11-Pseudos::		Assembler Directives
   12976 * PDP-11-Syntax::		DEC Syntax versus BSD Syntax
   12977 * PDP-11-Mnemonics::		Instruction Naming
   12978 * PDP-11-Synthetic::		Synthetic Instructions
   12979 
   12980 
   12981 File: as.info,  Node: PDP-11-Options,  Next: PDP-11-Pseudos,  Up: PDP-11-Dependent
   12982 
   12983 9.25.1 Options
   12984 --------------
   12985 
   12986 The PDP-11 version of `as' has a rich set of machine dependent options.
   12987 
   12988 9.25.1.1 Code Generation Options
   12989 ................................
   12990 
   12991 `-mpic | -mno-pic'
   12992      Generate position-independent (or position-dependent) code.
   12993 
   12994      The default is to generate position-independent code.
   12995 
   12996 9.25.1.2 Instruction Set Extension Options
   12997 ..........................................
   12998 
   12999 These options enables or disables the use of extensions over the base
   13000 line instruction set as introduced by the first PDP-11 CPU: the KA11.
   13001 Most options come in two variants: a `-m'EXTENSION that enables
   13002 EXTENSION, and a `-mno-'EXTENSION that disables EXTENSION.
   13003 
   13004    The default is to enable all extensions.
   13005 
   13006 `-mall | -mall-extensions'
   13007      Enable all instruction set extensions.
   13008 
   13009 `-mno-extensions'
   13010      Disable all instruction set extensions.
   13011 
   13012 `-mcis | -mno-cis'
   13013      Enable (or disable) the use of the commercial instruction set,
   13014      which consists of these instructions: `ADDNI', `ADDN', `ADDPI',
   13015      `ADDP', `ASHNI', `ASHN', `ASHPI', `ASHP', `CMPCI', `CMPC',
   13016      `CMPNI', `CMPN', `CMPPI', `CMPP', `CVTLNI', `CVTLN', `CVTLPI',
   13017      `CVTLP', `CVTNLI', `CVTNL', `CVTNPI', `CVTNP', `CVTPLI', `CVTPL',
   13018      `CVTPNI', `CVTPN', `DIVPI', `DIVP', `L2DR', `L3DR', `LOCCI',
   13019      `LOCC', `MATCI', `MATC', `MOVCI', `MOVC', `MOVRCI', `MOVRC',
   13020      `MOVTCI', `MOVTC', `MULPI', `MULP', `SCANCI', `SCANC', `SKPCI',
   13021      `SKPC', `SPANCI', `SPANC', `SUBNI', `SUBN', `SUBPI', and `SUBP'.
   13022 
   13023 `-mcsm | -mno-csm'
   13024      Enable (or disable) the use of the `CSM' instruction.
   13025 
   13026 `-meis | -mno-eis'
   13027      Enable (or disable) the use of the extended instruction set, which
   13028      consists of these instructions: `ASHC', `ASH', `DIV', `MARK',
   13029      `MUL', `RTT', `SOB' `SXT', and `XOR'.
   13030 
   13031 `-mfis | -mkev11'
   13032 `-mno-fis | -mno-kev11'
   13033      Enable (or disable) the use of the KEV11 floating-point
   13034      instructions: `FADD', `FDIV', `FMUL', and `FSUB'.
   13035 
   13036 `-mfpp | -mfpu | -mfp-11'
   13037 `-mno-fpp | -mno-fpu | -mno-fp-11'
   13038      Enable (or disable) the use of FP-11 floating-point instructions:
   13039      `ABSF', `ADDF', `CFCC', `CLRF', `CMPF', `DIVF', `LDCFF', `LDCIF',
   13040      `LDEXP', `LDF', `LDFPS', `MODF', `MULF', `NEGF', `SETD', `SETF',
   13041      `SETI', `SETL', `STCFF', `STCFI', `STEXP', `STF', `STFPS', `STST',
   13042      `SUBF', and `TSTF'.
   13043 
   13044 `-mlimited-eis | -mno-limited-eis'
   13045      Enable (or disable) the use of the limited extended instruction
   13046      set: `MARK', `RTT', `SOB', `SXT', and `XOR'.
   13047 
   13048      The -mno-limited-eis options also implies -mno-eis.
   13049 
   13050 `-mmfpt | -mno-mfpt'
   13051      Enable (or disable) the use of the `MFPT' instruction.
   13052 
   13053 `-mmultiproc | -mno-multiproc'
   13054      Enable (or disable) the use of multiprocessor instructions:
   13055      `TSTSET' and `WRTLCK'.
   13056 
   13057 `-mmxps | -mno-mxps'
   13058      Enable (or disable) the use of the `MFPS' and `MTPS' instructions.
   13059 
   13060 `-mspl | -mno-spl'
   13061      Enable (or disable) the use of the `SPL' instruction.
   13062 
   13063      Enable (or disable) the use of the microcode instructions: `LDUB',
   13064      `MED', and `XFC'.
   13065 
   13066 9.25.1.3 CPU Model Options
   13067 ..........................
   13068 
   13069 These options enable the instruction set extensions supported by a
   13070 particular CPU, and disables all other extensions.
   13071 
   13072 `-mka11'
   13073      KA11 CPU.  Base line instruction set only.
   13074 
   13075 `-mkb11'
   13076      KB11 CPU.  Enable extended instruction set and `SPL'.
   13077 
   13078 `-mkd11a'
   13079      KD11-A CPU.  Enable limited extended instruction set.
   13080 
   13081 `-mkd11b'
   13082      KD11-B CPU.  Base line instruction set only.
   13083 
   13084 `-mkd11d'
   13085      KD11-D CPU.  Base line instruction set only.
   13086 
   13087 `-mkd11e'
   13088      KD11-E CPU.  Enable extended instruction set, `MFPS', and `MTPS'.
   13089 
   13090 `-mkd11f | -mkd11h | -mkd11q'
   13091      KD11-F, KD11-H, or KD11-Q CPU.  Enable limited extended
   13092      instruction set, `MFPS', and `MTPS'.
   13093 
   13094 `-mkd11k'
   13095      KD11-K CPU.  Enable extended instruction set, `LDUB', `MED',
   13096      `MFPS', `MFPT', `MTPS', and `XFC'.
   13097 
   13098 `-mkd11z'
   13099      KD11-Z CPU.  Enable extended instruction set, `CSM', `MFPS',
   13100      `MFPT', `MTPS', and `SPL'.
   13101 
   13102 `-mf11'
   13103      F11 CPU.  Enable extended instruction set, `MFPS', `MFPT', and
   13104      `MTPS'.
   13105 
   13106 `-mj11'
   13107      J11 CPU.  Enable extended instruction set, `CSM', `MFPS', `MFPT',
   13108      `MTPS', `SPL', `TSTSET', and `WRTLCK'.
   13109 
   13110 `-mt11'
   13111      T11 CPU.  Enable limited extended instruction set, `MFPS', and
   13112      `MTPS'.
   13113 
   13114 9.25.1.4 Machine Model Options
   13115 ..............................
   13116 
   13117 These options enable the instruction set extensions supported by a
   13118 particular machine model, and disables all other extensions.
   13119 
   13120 `-m11/03'
   13121      Same as `-mkd11f'.
   13122 
   13123 `-m11/04'
   13124      Same as `-mkd11d'.
   13125 
   13126 `-m11/05 | -m11/10'
   13127      Same as `-mkd11b'.
   13128 
   13129 `-m11/15 | -m11/20'
   13130      Same as `-mka11'.
   13131 
   13132 `-m11/21'
   13133      Same as `-mt11'.
   13134 
   13135 `-m11/23 | -m11/24'
   13136      Same as `-mf11'.
   13137 
   13138 `-m11/34'
   13139      Same as `-mkd11e'.
   13140 
   13141 `-m11/34a'
   13142      Ame as `-mkd11e' `-mfpp'.
   13143 
   13144 `-m11/35 | -m11/40'
   13145      Same as `-mkd11a'.
   13146 
   13147 `-m11/44'
   13148      Same as `-mkd11z'.
   13149 
   13150 `-m11/45 | -m11/50 | -m11/55 | -m11/70'
   13151      Same as `-mkb11'.
   13152 
   13153 `-m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94'
   13154      Same as `-mj11'.
   13155 
   13156 `-m11/60'
   13157      Same as `-mkd11k'.
   13158 
   13159 
   13160 File: as.info,  Node: PDP-11-Pseudos,  Next: PDP-11-Syntax,  Prev: PDP-11-Options,  Up: PDP-11-Dependent
   13161 
   13162 9.25.2 Assembler Directives
   13163 ---------------------------
   13164 
   13165 The PDP-11 version of `as' has a few machine dependent assembler
   13166 directives.
   13167 
   13168 `.bss'
   13169      Switch to the `bss' section.
   13170 
   13171 `.even'
   13172      Align the location counter to an even number.
   13173 
   13174 
   13175 File: as.info,  Node: PDP-11-Syntax,  Next: PDP-11-Mnemonics,  Prev: PDP-11-Pseudos,  Up: PDP-11-Dependent
   13176 
   13177 9.25.3 PDP-11 Assembly Language Syntax
   13178 --------------------------------------
   13179 
   13180 `as' supports both DEC syntax and BSD syntax.  The only difference is
   13181 that in DEC syntax, a `#' character is used to denote an immediate
   13182 constants, while in BSD syntax the character for this purpose is `$'.
   13183 
   13184    general-purpose registers are named `r0' through `r7'.  Mnemonic
   13185 alternatives for `r6' and `r7' are `sp' and `pc', respectively.
   13186 
   13187    Floating-point registers are named `ac0' through `ac3', or
   13188 alternatively `fr0' through `fr3'.
   13189 
   13190    Comments are started with a `#' or a `/' character, and extend to
   13191 the end of the line.  (FIXME: clash with immediates?)
   13192 
   13193 
   13194 File: as.info,  Node: PDP-11-Mnemonics,  Next: PDP-11-Synthetic,  Prev: PDP-11-Syntax,  Up: PDP-11-Dependent
   13195 
   13196 9.25.4 Instruction Naming
   13197 -------------------------
   13198 
   13199 Some instructions have alternative names.
   13200 
   13201 `BCC'
   13202      `BHIS'
   13203 
   13204 `BCS'
   13205      `BLO'
   13206 
   13207 `L2DR'
   13208      `L2D'
   13209 
   13210 `L3DR'
   13211      `L3D'
   13212 
   13213 `SYS'
   13214      `TRAP'
   13215 
   13216 
   13217 File: as.info,  Node: PDP-11-Synthetic,  Prev: PDP-11-Mnemonics,  Up: PDP-11-Dependent
   13218 
   13219 9.25.5 Synthetic Instructions
   13220 -----------------------------
   13221 
   13222 The `JBR' and `J'CC synthetic instructions are not supported yet.
   13223 
   13224 
   13225 File: as.info,  Node: PJ-Dependent,  Next: PPC-Dependent,  Prev: PDP-11-Dependent,  Up: Machine Dependencies
   13226 
   13227 9.26 picoJava Dependent Features
   13228 ================================
   13229 
   13230 * Menu:
   13231 
   13232 * PJ Options::              Options
   13233 
   13234 
   13235 File: as.info,  Node: PJ Options,  Up: PJ-Dependent
   13236 
   13237 9.26.1 Options
   13238 --------------
   13239 
   13240 `as' has two additional command-line options for the picoJava
   13241 architecture.
   13242 `-ml'
   13243      This option selects little endian data output.
   13244 
   13245 `-mb'
   13246      This option selects big endian data output.
   13247 
   13248 
   13249 File: as.info,  Node: PPC-Dependent,  Next: Sparc-Dependent,  Prev: PJ-Dependent,  Up: Machine Dependencies
   13250 
   13251 9.27 PowerPC Dependent Features
   13252 ===============================
   13253 
   13254 * Menu:
   13255 
   13256 * PowerPC-Opts::                Options
   13257 * PowerPC-Pseudo::              PowerPC Assembler Directives
   13258 
   13259 
   13260 File: as.info,  Node: PowerPC-Opts,  Next: PowerPC-Pseudo,  Up: PPC-Dependent
   13261 
   13262 9.27.1 Options
   13263 --------------
   13264 
   13265 The PowerPC chip family includes several successive levels, using the
   13266 same core instruction set, but including a few additional instructions
   13267 at each level.  There are exceptions to this however.  For details on
   13268 what instructions each variant supports, please see the chip's
   13269 architecture reference manual.
   13270 
   13271    The following table lists all available PowerPC options.
   13272 
   13273 `-mpwrx | -mpwr2'
   13274      Generate code for POWER/2 (RIOS2).
   13275 
   13276 `-mpwr'
   13277      Generate code for POWER (RIOS1)
   13278 
   13279 `-m601'
   13280      Generate code for PowerPC 601.
   13281 
   13282 `-mppc, -mppc32, -m603, -m604'
   13283      Generate code for PowerPC 603/604.
   13284 
   13285 `-m403, -m405'
   13286      Generate code for PowerPC 403/405.
   13287 
   13288 `-m440'
   13289      Generate code for PowerPC 440.  BookE and some 405 instructions.
   13290 
   13291 `-m7400, -m7410, -m7450, -m7455'
   13292      Generate code for PowerPC 7400/7410/7450/7455.
   13293 
   13294 `-m750cl'
   13295      Generate code for PowerPC 750CL.
   13296 
   13297 `-mppc64, -m620'
   13298      Generate code for PowerPC 620/625/630.
   13299 
   13300 `-me500, -me500x2'
   13301      Generate code for Motorola e500 core complex.
   13302 
   13303 `-mspe'
   13304      Generate code for Motorola SPE instructions.
   13305 
   13306 `-mppc64bridge'
   13307      Generate code for PowerPC 64, including bridge insns.
   13308 
   13309 `-mbooke64'
   13310      Generate code for 64-bit BookE.
   13311 
   13312 `-mbooke, mbooke32'
   13313      Generate code for 32-bit BookE.
   13314 
   13315 `-me300'
   13316      Generate code for PowerPC e300 family.
   13317 
   13318 `-maltivec'
   13319      Generate code for processors with AltiVec instructions.
   13320 
   13321 `-mvsx'
   13322      Generate code for processors with Vector-Scalar (VSX) instructions.
   13323 
   13324 `-mpower4'
   13325      Generate code for Power4 architecture.
   13326 
   13327 `-mpower5'
   13328      Generate code for Power5 architecture.
   13329 
   13330 `-mpower6'
   13331      Generate code for Power6 architecture.
   13332 
   13333 `-mpower7'
   13334      Generate code for Power7 architecture.
   13335 
   13336 `-mcell'
   13337      Generate code for Cell Broadband Engine architecture.
   13338 
   13339 `-mcom'
   13340      Generate code Power/PowerPC common instructions.
   13341 
   13342 `-many'
   13343      Generate code for any architecture (PWR/PWRX/PPC).
   13344 
   13345 `-mregnames'
   13346      Allow symbolic names for registers.
   13347 
   13348 `-mno-regnames'
   13349      Do not allow symbolic names for registers.
   13350 
   13351 `-mrelocatable'
   13352      Support for GCC's -mrelocatable option.
   13353 
   13354 `-mrelocatable-lib'
   13355      Support for GCC's -mrelocatable-lib option.
   13356 
   13357 `-memb'
   13358      Set PPC_EMB bit in ELF flags.
   13359 
   13360 `-mlittle, -mlittle-endian'
   13361      Generate code for a little endian machine.
   13362 
   13363 `-mbig, -mbig-endian'
   13364      Generate code for a big endian machine.
   13365 
   13366 `-msolaris'
   13367      Generate code for Solaris.
   13368 
   13369 `-mno-solaris'
   13370      Do not generate code for Solaris.
   13371 
   13372 
   13373 File: as.info,  Node: PowerPC-Pseudo,  Prev: PowerPC-Opts,  Up: PPC-Dependent
   13374 
   13375 9.27.2 PowerPC Assembler Directives
   13376 -----------------------------------
   13377 
   13378 A number of assembler directives are available for PowerPC.  The
   13379 following table is far from complete.
   13380 
   13381 `.machine "string"'
   13382      This directive allows you to change the machine for which code is
   13383      generated.  `"string"' may be any of the -m cpu selection options
   13384      (without the -m) enclosed in double quotes, `"push"', or `"pop"'.
   13385      `.machine "push"' saves the currently selected cpu, which may be
   13386      restored with `.machine "pop"'.
   13387 
   13388 
   13389 File: as.info,  Node: SH-Dependent,  Next: SH64-Dependent,  Prev: MSP430-Dependent,  Up: Machine Dependencies
   13390 
   13391 9.28 Renesas / SuperH SH Dependent Features
   13392 ===========================================
   13393 
   13394 * Menu:
   13395 
   13396 * SH Options::              Options
   13397 * SH Syntax::               Syntax
   13398 * SH Floating Point::       Floating Point
   13399 * SH Directives::           SH Machine Directives
   13400 * SH Opcodes::              Opcodes
   13401 
   13402 
   13403 File: as.info,  Node: SH Options,  Next: SH Syntax,  Up: SH-Dependent
   13404 
   13405 9.28.1 Options
   13406 --------------
   13407 
   13408 `as' has following command-line options for the Renesas (formerly
   13409 Hitachi) / SuperH SH family.
   13410 
   13411 `--little'
   13412      Generate little endian code.
   13413 
   13414 `--big'
   13415      Generate big endian code.
   13416 
   13417 `--relax'
   13418      Alter jump instructions for long displacements.
   13419 
   13420 `--small'
   13421      Align sections to 4 byte boundaries, not 16.
   13422 
   13423 `--dsp'
   13424      Enable sh-dsp insns, and disable sh3e / sh4 insns.
   13425 
   13426 `--renesas'
   13427      Disable optimization with section symbol for compatibility with
   13428      Renesas assembler.
   13429 
   13430 `--allow-reg-prefix'
   13431      Allow '$' as a register name prefix.
   13432 
   13433 `--isa=sh4 | sh4a'
   13434      Specify the sh4 or sh4a instruction set.
   13435 
   13436 `--isa=dsp'
   13437      Enable sh-dsp insns, and disable sh3e / sh4 insns.
   13438 
   13439 `--isa=fp'
   13440      Enable sh2e, sh3e, sh4, and sh4a insn sets.
   13441 
   13442 `--isa=all'
   13443      Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
   13444 
   13445 `-h-tick-hex'
   13446      Support H'00 style hex constants in addition to 0x00 style.
   13447 
   13448 
   13449 
   13450 File: as.info,  Node: SH Syntax,  Next: SH Floating Point,  Prev: SH Options,  Up: SH-Dependent
   13451 
   13452 9.28.2 Syntax
   13453 -------------
   13454 
   13455 * Menu:
   13456 
   13457 * SH-Chars::                Special Characters
   13458 * SH-Regs::                 Register Names
   13459 * SH-Addressing::           Addressing Modes
   13460 
   13461 
   13462 File: as.info,  Node: SH-Chars,  Next: SH-Regs,  Up: SH Syntax
   13463 
   13464 9.28.2.1 Special Characters
   13465 ...........................
   13466 
   13467 `!' is the line comment character.
   13468 
   13469    You can use `;' instead of a newline to separate statements.
   13470 
   13471    Since `$' has no special meaning, you may use it in symbol names.
   13472 
   13473 
   13474 File: as.info,  Node: SH-Regs,  Next: SH-Addressing,  Prev: SH-Chars,  Up: SH Syntax
   13475 
   13476 9.28.2.2 Register Names
   13477 .......................
   13478 
   13479 You can use the predefined symbols `r0', `r1', `r2', `r3', `r4', `r5',
   13480 `r6', `r7', `r8', `r9', `r10', `r11', `r12', `r13', `r14', and `r15' to
   13481 refer to the SH registers.
   13482 
   13483    The SH also has these control registers:
   13484 
   13485 `pr'
   13486      procedure register (holds return address)
   13487 
   13488 `pc'
   13489      program counter
   13490 
   13491 `mach'
   13492 `macl'
   13493      high and low multiply accumulator registers
   13494 
   13495 `sr'
   13496      status register
   13497 
   13498 `gbr'
   13499      global base register
   13500 
   13501 `vbr'
   13502      vector base register (for interrupt vectors)
   13503 
   13504 
   13505 File: as.info,  Node: SH-Addressing,  Prev: SH-Regs,  Up: SH Syntax
   13506 
   13507 9.28.2.3 Addressing Modes
   13508 .........................
   13509 
   13510 `as' understands the following addressing modes for the SH.  `RN' in
   13511 the following refers to any of the numbered registers, but _not_ the
   13512 control registers.
   13513 
   13514 `RN'
   13515      Register direct
   13516 
   13517 `@RN'
   13518      Register indirect
   13519 
   13520 `@-RN'
   13521      Register indirect with pre-decrement
   13522 
   13523 `@RN+'
   13524      Register indirect with post-increment
   13525 
   13526 `@(DISP, RN)'
   13527      Register indirect with displacement
   13528 
   13529 `@(R0, RN)'
   13530      Register indexed
   13531 
   13532 `@(DISP, GBR)'
   13533      `GBR' offset
   13534 
   13535 `@(R0, GBR)'
   13536      GBR indexed
   13537 
   13538 `ADDR'
   13539 `@(DISP, PC)'
   13540      PC relative address (for branch or for addressing memory).  The
   13541      `as' implementation allows you to use the simpler form ADDR
   13542      anywhere a PC relative address is called for; the alternate form
   13543      is supported for compatibility with other assemblers.
   13544 
   13545 `#IMM'
   13546      Immediate data
   13547 
   13548 
   13549 File: as.info,  Node: SH Floating Point,  Next: SH Directives,  Prev: SH Syntax,  Up: SH-Dependent
   13550 
   13551 9.28.3 Floating Point
   13552 ---------------------
   13553 
   13554 SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other
   13555 SH groups can use `.float' directive to generate IEEE floating-point
   13556 numbers.
   13557 
   13558    SH2E and SH3E support single-precision floating point calculations as
   13559 well as entirely PCAPI compatible emulation of double-precision
   13560 floating point calculations. SH2E and SH3E instructions are a subset of
   13561 the floating point calculations conforming to the IEEE754 standard.
   13562 
   13563    In addition to single-precision and double-precision floating-point
   13564 operation capability, the on-chip FPU of SH4 has a 128-bit graphic
   13565 engine that enables 32-bit floating-point data to be processed 128 bits
   13566 at a time. It also supports 4 * 4 array operations and inner product
   13567 operations. Also, a superscalar architecture is employed that enables
   13568 simultaneous execution of two instructions (including FPU
   13569 instructions), providing performance of up to twice that of
   13570 conventional architectures at the same frequency.
   13571 
   13572 
   13573 File: as.info,  Node: SH Directives,  Next: SH Opcodes,  Prev: SH Floating Point,  Up: SH-Dependent
   13574 
   13575 9.28.4 SH Machine Directives
   13576 ----------------------------
   13577 
   13578 `uaword'
   13579 `ualong'
   13580      `as' will issue a warning when a misaligned `.word' or `.long'
   13581      directive is used.  You may use `.uaword' or `.ualong' to indicate
   13582      that the value is intentionally misaligned.
   13583 
   13584 
   13585 File: as.info,  Node: SH Opcodes,  Prev: SH Directives,  Up: SH-Dependent
   13586 
   13587 9.28.5 Opcodes
   13588 --------------
   13589 
   13590 For detailed information on the SH machine instruction set, see
   13591 `SH-Microcomputer User's Manual' (Renesas) or `SH-4 32-bit CPU Core
   13592 Architecture' (SuperH) and `SuperH (SH) 64-Bit RISC Series' (SuperH).
   13593 
   13594    `as' implements all the standard SH opcodes.  No additional
   13595 pseudo-instructions are needed on this family.  Note, however, that
   13596 because `as' supports a simpler form of PC-relative addressing, you may
   13597 simply write (for example)
   13598 
   13599      mov.l  bar,r0
   13600 
   13601 where other assemblers might require an explicit displacement to `bar'
   13602 from the program counter:
   13603 
   13604      mov.l  @(DISP, PC)
   13605 
   13606    Here is a summary of SH opcodes:
   13607 
   13608      Legend:
   13609      Rn        a numbered register
   13610      Rm        another numbered register
   13611      #imm      immediate data
   13612      disp      displacement
   13613      disp8     8-bit displacement
   13614      disp12    12-bit displacement
   13615 
   13616      add #imm,Rn                    lds.l @Rn+,PR
   13617      add Rm,Rn                      mac.w @Rm+,@Rn+
   13618      addc Rm,Rn                     mov #imm,Rn
   13619      addv Rm,Rn                     mov Rm,Rn
   13620      and #imm,R0                    mov.b Rm,@(R0,Rn)
   13621      and Rm,Rn                      mov.b Rm,@-Rn
   13622      and.b #imm,@(R0,GBR)           mov.b Rm,@Rn
   13623      bf disp8                       mov.b @(disp,Rm),R0
   13624      bra disp12                     mov.b @(disp,GBR),R0
   13625      bsr disp12                     mov.b @(R0,Rm),Rn
   13626      bt disp8                       mov.b @Rm+,Rn
   13627      clrmac                         mov.b @Rm,Rn
   13628      clrt                           mov.b R0,@(disp,Rm)
   13629      cmp/eq #imm,R0                 mov.b R0,@(disp,GBR)
   13630      cmp/eq Rm,Rn                   mov.l Rm,@(disp,Rn)
   13631      cmp/ge Rm,Rn                   mov.l Rm,@(R0,Rn)
   13632      cmp/gt Rm,Rn                   mov.l Rm,@-Rn
   13633      cmp/hi Rm,Rn                   mov.l Rm,@Rn
   13634      cmp/hs Rm,Rn                   mov.l @(disp,Rn),Rm
   13635      cmp/pl Rn                      mov.l @(disp,GBR),R0
   13636      cmp/pz Rn                      mov.l @(disp,PC),Rn
   13637      cmp/str Rm,Rn                  mov.l @(R0,Rm),Rn
   13638      div0s Rm,Rn                    mov.l @Rm+,Rn
   13639      div0u                          mov.l @Rm,Rn
   13640      div1 Rm,Rn                     mov.l R0,@(disp,GBR)
   13641      exts.b Rm,Rn                   mov.w Rm,@(R0,Rn)
   13642      exts.w Rm,Rn                   mov.w Rm,@-Rn
   13643      extu.b Rm,Rn                   mov.w Rm,@Rn
   13644      extu.w Rm,Rn                   mov.w @(disp,Rm),R0
   13645      jmp @Rn                        mov.w @(disp,GBR),R0
   13646      jsr @Rn                        mov.w @(disp,PC),Rn
   13647      ldc Rn,GBR                     mov.w @(R0,Rm),Rn
   13648      ldc Rn,SR                      mov.w @Rm+,Rn
   13649      ldc Rn,VBR                     mov.w @Rm,Rn
   13650      ldc.l @Rn+,GBR                 mov.w R0,@(disp,Rm)
   13651      ldc.l @Rn+,SR                  mov.w R0,@(disp,GBR)
   13652      ldc.l @Rn+,VBR                 mova @(disp,PC),R0
   13653      lds Rn,MACH                    movt Rn
   13654      lds Rn,MACL                    muls Rm,Rn
   13655      lds Rn,PR                      mulu Rm,Rn
   13656      lds.l @Rn+,MACH                neg Rm,Rn
   13657      lds.l @Rn+,MACL                negc Rm,Rn
   13658 
   13659      nop                            stc VBR,Rn
   13660      not Rm,Rn                      stc.l GBR,@-Rn
   13661      or #imm,R0                     stc.l SR,@-Rn
   13662      or Rm,Rn                       stc.l VBR,@-Rn
   13663      or.b #imm,@(R0,GBR)            sts MACH,Rn
   13664      rotcl Rn                       sts MACL,Rn
   13665      rotcr Rn                       sts PR,Rn
   13666      rotl Rn                        sts.l MACH,@-Rn
   13667      rotr Rn                        sts.l MACL,@-Rn
   13668      rte                            sts.l PR,@-Rn
   13669      rts                            sub Rm,Rn
   13670      sett                           subc Rm,Rn
   13671      shal Rn                        subv Rm,Rn
   13672      shar Rn                        swap.b Rm,Rn
   13673      shll Rn                        swap.w Rm,Rn
   13674      shll16 Rn                      tas.b @Rn
   13675      shll2 Rn                       trapa #imm
   13676      shll8 Rn                       tst #imm,R0
   13677      shlr Rn                        tst Rm,Rn
   13678      shlr16 Rn                      tst.b #imm,@(R0,GBR)
   13679      shlr2 Rn                       xor #imm,R0
   13680      shlr8 Rn                       xor Rm,Rn
   13681      sleep                          xor.b #imm,@(R0,GBR)
   13682      stc GBR,Rn                     xtrct Rm,Rn
   13683      stc SR,Rn
   13684 
   13685 
   13686 File: as.info,  Node: SH64-Dependent,  Next: PDP-11-Dependent,  Prev: SH-Dependent,  Up: Machine Dependencies
   13687 
   13688 9.29 SuperH SH64 Dependent Features
   13689 ===================================
   13690 
   13691 * Menu:
   13692 
   13693 * SH64 Options::              Options
   13694 * SH64 Syntax::               Syntax
   13695 * SH64 Directives::           SH64 Machine Directives
   13696 * SH64 Opcodes::              Opcodes
   13697 
   13698 
   13699 File: as.info,  Node: SH64 Options,  Next: SH64 Syntax,  Up: SH64-Dependent
   13700 
   13701 9.29.1 Options
   13702 --------------
   13703 
   13704 `-isa=sh4 | sh4a'
   13705      Specify the sh4 or sh4a instruction set.
   13706 
   13707 `-isa=dsp'
   13708      Enable sh-dsp insns, and disable sh3e / sh4 insns.
   13709 
   13710 `-isa=fp'
   13711      Enable sh2e, sh3e, sh4, and sh4a insn sets.
   13712 
   13713 `-isa=all'
   13714      Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
   13715 
   13716 `-isa=shmedia | -isa=shcompact'
   13717      Specify the default instruction set.  `SHmedia' specifies the
   13718      32-bit opcodes, and `SHcompact' specifies the 16-bit opcodes
   13719      compatible with previous SH families.  The default depends on the
   13720      ABI selected; the default for the 64-bit ABI is SHmedia, and the
   13721      default for the 32-bit ABI is SHcompact.  If neither the ABI nor
   13722      the ISA is specified, the default is 32-bit SHcompact.
   13723 
   13724      Note that the `.mode' pseudo-op is not permitted if the ISA is not
   13725      specified on the command line.
   13726 
   13727 `-abi=32 | -abi=64'
   13728      Specify the default ABI.  If the ISA is specified and the ABI is
   13729      not, the default ABI depends on the ISA, with SHmedia defaulting
   13730      to 64-bit and SHcompact defaulting to 32-bit.
   13731 
   13732      Note that the `.abi' pseudo-op is not permitted if the ABI is not
   13733      specified on the command line.  When the ABI is specified on the
   13734      command line, any `.abi' pseudo-ops in the source must match it.
   13735 
   13736 `-shcompact-const-crange'
   13737      Emit code-range descriptors for constants in SHcompact code
   13738      sections.
   13739 
   13740 `-no-mix'
   13741      Disallow SHmedia code in the same section as constants and
   13742      SHcompact code.
   13743 
   13744 `-no-expand'
   13745      Do not expand MOVI, PT, PTA or PTB instructions.
   13746 
   13747 `-expand-pt32'
   13748      With -abi=64, expand PT, PTA and PTB instructions to 32 bits only.
   13749 
   13750 `-h-tick-hex'
   13751      Support H'00 style hex constants in addition to 0x00 style.
   13752 
   13753 
   13754 
   13755 File: as.info,  Node: SH64 Syntax,  Next: SH64 Directives,  Prev: SH64 Options,  Up: SH64-Dependent
   13756 
   13757 9.29.2 Syntax
   13758 -------------
   13759 
   13760 * Menu:
   13761 
   13762 * SH64-Chars::                Special Characters
   13763 * SH64-Regs::                 Register Names
   13764 * SH64-Addressing::           Addressing Modes
   13765 
   13766 
   13767 File: as.info,  Node: SH64-Chars,  Next: SH64-Regs,  Up: SH64 Syntax
   13768 
   13769 9.29.2.1 Special Characters
   13770 ...........................
   13771 
   13772 `!' is the line comment character.
   13773 
   13774    You can use `;' instead of a newline to separate statements.
   13775 
   13776    Since `$' has no special meaning, you may use it in symbol names.
   13777 
   13778 
   13779 File: as.info,  Node: SH64-Regs,  Next: SH64-Addressing,  Prev: SH64-Chars,  Up: SH64 Syntax
   13780 
   13781 9.29.2.2 Register Names
   13782 .......................
   13783 
   13784 You can use the predefined symbols `r0' through `r63' to refer to the
   13785 SH64 general registers, `cr0' through `cr63' for control registers,
   13786 `tr0' through `tr7' for target address registers, `fr0' through `fr63'
   13787 for single-precision floating point registers, `dr0' through `dr62'
   13788 (even numbered registers only) for double-precision floating point
   13789 registers, `fv0' through `fv60' (multiples of four only) for
   13790 single-precision floating point vectors, `fp0' through `fp62' (even
   13791 numbered registers only) for single-precision floating point pairs,
   13792 `mtrx0' through `mtrx48' (multiples of 16 only) for 4x4 matrices of
   13793 single-precision floating point registers, `pc' for the program
   13794 counter, and `fpscr' for the floating point status and control register.
   13795 
   13796    You can also refer to the control registers by the mnemonics `sr',
   13797 `ssr', `pssr', `intevt', `expevt', `pexpevt', `tra', `spc', `pspc',
   13798 `resvec', `vbr', `tea', `dcr', `kcr0', `kcr1', `ctc', and `usr'.
   13799 
   13800 
   13801 File: as.info,  Node: SH64-Addressing,  Prev: SH64-Regs,  Up: SH64 Syntax
   13802 
   13803 9.29.2.3 Addressing Modes
   13804 .........................
   13805 
   13806 SH64 operands consist of either a register or immediate value.  The
   13807 immediate value can be a constant or label reference (or portion of a
   13808 label reference), as in this example:
   13809 
   13810      	movi	4,r2
   13811      	pt	function, tr4
   13812      	movi	(function >> 16) & 65535,r0
   13813      	shori	function & 65535, r0
   13814      	ld.l	r0,4,r0
   13815 
   13816    Instruction label references can reference labels in either SHmedia
   13817 or SHcompact.  To differentiate between the two, labels in SHmedia
   13818 sections will always have the least significant bit set (i.e. they will
   13819 be odd), which SHcompact labels will have the least significant bit
   13820 reset (i.e. they will be even).  If you need to reference the actual
   13821 address of a label, you can use the `datalabel' modifier, as in this
   13822 example:
   13823 
   13824      	.long	function
   13825      	.long	datalabel function
   13826 
   13827    In that example, the first longword may or may not have the least
   13828 significant bit set depending on whether the label is an SHmedia label
   13829 or an SHcompact label.  The second longword will be the actual address
   13830 of the label, regardless of what type of label it is.
   13831 
   13832 
   13833 File: as.info,  Node: SH64 Directives,  Next: SH64 Opcodes,  Prev: SH64 Syntax,  Up: SH64-Dependent
   13834 
   13835 9.29.3 SH64 Machine Directives
   13836 ------------------------------
   13837 
   13838 In addition to the SH directives, the SH64 provides the following
   13839 directives:
   13840 
   13841 `.mode [shmedia|shcompact]'
   13842 `.isa [shmedia|shcompact]'
   13843      Specify the ISA for the following instructions (the two directives
   13844      are equivalent).  Note that programs such as `objdump' rely on
   13845      symbolic labels to determine when such mode switches occur (by
   13846      checking the least significant bit of the label's address), so
   13847      such mode/isa changes should always be followed by a label (in
   13848      practice, this is true anyway).  Note that you cannot use these
   13849      directives if you didn't specify an ISA on the command line.
   13850 
   13851 `.abi [32|64]'
   13852      Specify the ABI for the following instructions.  Note that you
   13853      cannot use this directive unless you specified an ABI on the
   13854      command line, and the ABIs specified must match.
   13855 
   13856 `.uaquad'
   13857      Like .uaword and .ualong, this allows you to specify an
   13858      intentionally unaligned quadword (64 bit word).
   13859 
   13860 
   13861 
   13862 File: as.info,  Node: SH64 Opcodes,  Prev: SH64 Directives,  Up: SH64-Dependent
   13863 
   13864 9.29.4 Opcodes
   13865 --------------
   13866 
   13867 For detailed information on the SH64 machine instruction set, see
   13868 `SuperH 64 bit RISC Series Architecture Manual' (SuperH, Inc.).
   13869 
   13870    `as' implements all the standard SH64 opcodes.  In addition, the
   13871 following pseudo-opcodes may be expanded into one or more alternate
   13872 opcodes:
   13873 
   13874 `movi'
   13875      If the value doesn't fit into a standard `movi' opcode, `as' will
   13876      replace the `movi' with a sequence of `movi' and `shori' opcodes.
   13877 
   13878 `pt'
   13879      This expands to a sequence of `movi' and `shori' opcode, followed
   13880      by a `ptrel' opcode, or to a `pta' or `ptb' opcode, depending on
   13881      the label referenced.
   13882 
   13883 
   13884 
   13885 File: as.info,  Node: Sparc-Dependent,  Next: TIC54X-Dependent,  Prev: PPC-Dependent,  Up: Machine Dependencies
   13886 
   13887 9.30 SPARC Dependent Features
   13888 =============================
   13889 
   13890 * Menu:
   13891 
   13892 * Sparc-Opts::                  Options
   13893 * Sparc-Aligned-Data::		Option to enforce aligned data
   13894 * Sparc-Syntax::		Syntax
   13895 * Sparc-Float::                 Floating Point
   13896 * Sparc-Directives::            Sparc Machine Directives
   13897 
   13898 
   13899 File: as.info,  Node: Sparc-Opts,  Next: Sparc-Aligned-Data,  Up: Sparc-Dependent
   13900 
   13901 9.30.1 Options
   13902 --------------
   13903 
   13904 The SPARC chip family includes several successive versions, using the
   13905 same core instruction set, but including a few additional instructions
   13906 at each version.  There are exceptions to this however.  For details on
   13907 what instructions each variant supports, please see the chip's
   13908 architecture reference manual.
   13909 
   13910    By default, `as' assumes the core instruction set (SPARC v6), but
   13911 "bumps" the architecture level as needed: it switches to successively
   13912 higher architectures as it encounters instructions that only exist in
   13913 the higher levels.
   13914 
   13915    If not configured for SPARC v9 (`sparc64-*-*') GAS will not bump
   13916 past sparclite by default, an option must be passed to enable the v9
   13917 instructions.
   13918 
   13919    GAS treats sparclite as being compatible with v8, unless an
   13920 architecture is explicitly requested.  SPARC v9 is always incompatible
   13921 with sparclite.
   13922 
   13923 `-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite'
   13924 `-Av8plus | -Av8plusa | -Av9 | -Av9a'
   13925      Use one of the `-A' options to select one of the SPARC
   13926      architectures explicitly.  If you select an architecture
   13927      explicitly, `as' reports a fatal error if it encounters an
   13928      instruction or feature requiring an incompatible or higher level.
   13929 
   13930      `-Av8plus' and `-Av8plusa' select a 32 bit environment.
   13931 
   13932      `-Av9' and `-Av9a' select a 64 bit environment and are not
   13933      available unless GAS is explicitly configured with 64 bit
   13934      environment support.
   13935 
   13936      `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with
   13937      UltraSPARC extensions.
   13938 
   13939 `-xarch=v8plus | -xarch=v8plusa'
   13940      For compatibility with the SunOS v9 assembler.  These options are
   13941      equivalent to -Av8plus and -Av8plusa, respectively.
   13942 
   13943 `-bump'
   13944      Warn whenever it is necessary to switch to another level.  If an
   13945      architecture level is explicitly requested, GAS will not issue
   13946      warnings until that level is reached, and will then bump the level
   13947      as required (except between incompatible levels).
   13948 
   13949 `-32 | -64'
   13950      Select the word size, either 32 bits or 64 bits.  These options
   13951      are only available with the ELF object file format, and require
   13952      that the necessary BFD support has been included.
   13953 
   13954 
   13955 File: as.info,  Node: Sparc-Aligned-Data,  Next: Sparc-Syntax,  Prev: Sparc-Opts,  Up: Sparc-Dependent
   13956 
   13957 9.30.2 Enforcing aligned data
   13958 -----------------------------
   13959 
   13960 SPARC GAS normally permits data to be misaligned.  For example, it
   13961 permits the `.long' pseudo-op to be used on a byte boundary.  However,
   13962 the native SunOS assemblers issue an error when they see misaligned
   13963 data.
   13964 
   13965    You can use the `--enforce-aligned-data' option to make SPARC GAS
   13966 also issue an error about misaligned data, just as the SunOS assemblers
   13967 do.
   13968 
   13969    The `--enforce-aligned-data' option is not the default because gcc
   13970 issues misaligned data pseudo-ops when it initializes certain packed
   13971 data structures (structures defined using the `packed' attribute).  You
   13972 may have to assemble with GAS in order to initialize packed data
   13973 structures in your own code.
   13974 
   13975 
   13976 File: as.info,  Node: Sparc-Syntax,  Next: Sparc-Float,  Prev: Sparc-Aligned-Data,  Up: Sparc-Dependent
   13977 
   13978 9.30.3 Sparc Syntax
   13979 -------------------
   13980 
   13981 The assembler syntax closely follows The Sparc Architecture Manual,
   13982 versions 8 and 9, as well as most extensions defined by Sun for their
   13983 UltraSPARC and Niagara line of processors.
   13984 
   13985 * Menu:
   13986 
   13987 * Sparc-Chars::                Special Characters
   13988 * Sparc-Regs::                 Register Names
   13989 * Sparc-Constants::            Constant Names
   13990 * Sparc-Relocs::               Relocations
   13991 * Sparc-Size-Translations::    Size Translations
   13992 
   13993 
   13994 File: as.info,  Node: Sparc-Chars,  Next: Sparc-Regs,  Up: Sparc-Syntax
   13995 
   13996 9.30.3.1 Special Characters
   13997 ...........................
   13998 
   13999 `#' is the line comment character.
   14000 
   14001    `;' can be used instead of a newline to separate statements.
   14002 
   14003 
   14004 File: as.info,  Node: Sparc-Regs,  Next: Sparc-Constants,  Prev: Sparc-Chars,  Up: Sparc-Syntax
   14005 
   14006 9.30.3.2 Register Names
   14007 .......................
   14008 
   14009 The Sparc integer register file is broken down into global, outgoing,
   14010 local, and incoming.
   14011 
   14012    * The 8 global registers are referred to as `%gN'.
   14013 
   14014    * The 8 outgoing registers are referred to as `%oN'.
   14015 
   14016    * The 8 local registers are referred to as `%lN'.
   14017 
   14018    * The 8 incoming registers are referred to as `%iN'.
   14019 
   14020    * The frame pointer register `%i6' can be referenced using the alias
   14021      `%fp'.
   14022 
   14023    * The stack pointer register `%o6' can be referenced using the alias
   14024      `%sp'.
   14025 
   14026    Floating point registers are simply referred to as `%fN'.  When
   14027 assembling for pre-V9, only 32 floating point registers are available.
   14028 For V9 and later there are 64, but there are restrictions when
   14029 referencing the upper 32 registers.  They can only be accessed as
   14030 double or quad, and thus only even or quad numbered accesses are
   14031 allowed.  For example, `%f34' is a legal floating point register, but
   14032 `%f35' is not.
   14033 
   14034    Certain V9 instructions allow access to ancillary state registers.
   14035 Most simply they can be referred to as `%asrN' where N can be from 16
   14036 to 31.  However, there are some aliases defined to reference ASR
   14037 registers defined for various UltraSPARC processors:
   14038 
   14039    * The tick compare register is referred to as `%tick_cmpr'.
   14040 
   14041    * The system tick register is referred to as `%stick'.  An alias,
   14042      `%sys_tick', exists but is deprecated and should not be used by
   14043      new software.
   14044 
   14045    * The system tick compare register is referred to as `%stick_cmpr'.
   14046      An alias, `%sys_tick_cmpr', exists but is deprecated and should
   14047      not be used by new software.
   14048 
   14049    * The software interrupt register is referred to as `%softint'.
   14050 
   14051    * The set software interrupt register is referred to as
   14052      `%set_softint'.  The mnemonic `%softint_set' is provided as an
   14053      alias.
   14054 
   14055    * The clear software interrupt register is referred to as
   14056      `%clear_softint'.  The mnemonic `%softint_clear' is provided as an
   14057      alias.
   14058 
   14059    * The performance instrumentation counters register is referred to as
   14060      `%pic'.
   14061 
   14062    * The performance control register is referred to as `%pcr'.
   14063 
   14064    * The graphics status register is referred to as `%gsr'.
   14065 
   14066    * The V9 dispatch control register is referred to as `%dcr'.
   14067 
   14068    Various V9 branch and conditional move instructions allow
   14069 specification of which set of integer condition codes to test.  These
   14070 are referred to as `%xcc' and `%icc'.
   14071 
   14072    In V9, there are 4 sets of floating point condition codes which are
   14073 referred to as `%fccN'.
   14074 
   14075    Several special privileged and non-privileged registers exist:
   14076 
   14077    * The V9 address space identifier register is referred to as `%asi'.
   14078 
   14079    * The V9 restorable windows register is referred to as `%canrestore'.
   14080 
   14081    * The V9 savable windows register is referred to as `%cansave'.
   14082 
   14083    * The V9 clean windows register is referred to as `%cleanwin'.
   14084 
   14085    * The V9 current window pointer register is referred to as `%cwp'.
   14086 
   14087    * The floating-point queue register is referred to as `%fq'.
   14088 
   14089    * The V8 co-processor queue register is referred to as `%cq'.
   14090 
   14091    * The floating point status register is referred to as `%fsr'.
   14092 
   14093    * The other windows register is referred to as `%otherwin'.
   14094 
   14095    * The V9 program counter register is referred to as `%pc'.
   14096 
   14097    * The V9 next program counter register is referred to as `%npc'.
   14098 
   14099    * The V9 processor interrupt level register is referred to as `%pil'.
   14100 
   14101    * The V9 processor state register is referred to as `%pstate'.
   14102 
   14103    * The trap base address register is referred to as `%tba'.
   14104 
   14105    * The V9 tick register is referred to as `%tick'.
   14106 
   14107    * The V9 trap level is referred to as `%tl'.
   14108 
   14109    * The V9 trap program counter is referred to as `%tpc'.
   14110 
   14111    * The V9 trap next program counter is referred to as `%tnpc'.
   14112 
   14113    * The V9 trap state is referred to as `%tstate'.
   14114 
   14115    * The V9 trap type is referred to as `%tt'.
   14116 
   14117    * The V9 condition codes is referred to as `%ccr'.
   14118 
   14119    * The V9 floating-point registers state is referred to as `%fprs'.
   14120 
   14121    * The V9 version register is referred to as `%ver'.
   14122 
   14123    * The V9 window state register is referred to as `%wstate'.
   14124 
   14125    * The Y register is referred to as `%y'.
   14126 
   14127    * The V8 window invalid mask register is referred to as `%wim'.
   14128 
   14129    * The V8 processor state register is referred to as `%psr'.
   14130 
   14131    * The V9 global register level register is referred to as `%gl'.
   14132 
   14133    Several special register names exist for hypervisor mode code:
   14134 
   14135    * The hyperprivileged processor state register is referred to as
   14136      `%hpstate'.
   14137 
   14138    * The hyperprivileged trap state register is referred to as
   14139      `%htstate'.
   14140 
   14141    * The hyperprivileged interrupt pending register is referred to as
   14142      `%hintp'.
   14143 
   14144    * The hyperprivileged trap base address register is referred to as
   14145      `%htba'.
   14146 
   14147    * The hyperprivileged implementation version register is referred to
   14148      as `%hver'.
   14149 
   14150    * The hyperprivileged system tick compare register is referred to as
   14151      `%hstick_cmpr'.  Note that there is no `%hstick' register, the
   14152      normal `%stick' is used.
   14153 
   14154 
   14155 File: as.info,  Node: Sparc-Constants,  Next: Sparc-Relocs,  Prev: Sparc-Regs,  Up: Sparc-Syntax
   14156 
   14157 9.30.3.3 Constants
   14158 ..................
   14159 
   14160 Several Sparc instructions take an immediate operand field for which
   14161 mnemonic names exist.  Two such examples are `membar' and `prefetch'.
   14162 Another example are the set of V9 memory access instruction that allow
   14163 specification of an address space identifier.
   14164 
   14165    The `membar' instruction specifies a memory barrier that is the
   14166 defined by the operand which is a bitmask.  The supported mask
   14167 mnemonics are:
   14168 
   14169    * `#Sync' requests that all operations (including nonmemory
   14170      reference operations) appearing prior to the `membar' must have
   14171      been performed and the effects of any exceptions become visible
   14172      before any instructions after the `membar' may be initiated.  This
   14173      corresponds to `membar' cmask field bit 2.
   14174 
   14175    * `#MemIssue' requests that all memory reference operations
   14176      appearing prior to the `membar' must have been performed before
   14177      any memory operation after the `membar' may be initiated.  This
   14178      corresponds to `membar' cmask field bit 1.
   14179 
   14180    * `#Lookaside' requests that a store appearing prior to the `membar'
   14181      must complete before any load following the `membar' referencing
   14182      the same address can be initiated.  This corresponds to `membar'
   14183      cmask field bit 0.
   14184 
   14185    * `#StoreStore' defines that the effects of all stores appearing
   14186      prior to the `membar' instruction must be visible to all
   14187      processors before the effect of any stores following the `membar'.
   14188      Equivalent to the deprecated `stbar' instruction.  This
   14189      corresponds to `membar' mmask field bit 3.
   14190 
   14191    * `#LoadStore' defines all loads appearing prior to the `membar'
   14192      instruction must have been performed before the effect of any
   14193      stores following the `membar' is visible to any other processor.
   14194      This corresponds to `membar' mmask field bit 2.
   14195 
   14196    * `#StoreLoad' defines that the effects of all stores appearing
   14197      prior to the `membar' instruction must be visible to all
   14198      processors before loads following the `membar' may be performed.
   14199      This corresponds to `membar' mmask field bit 1.
   14200 
   14201    * `#LoadLoad' defines that all loads appearing prior to the `membar'
   14202      instruction must have been performed before any loads following
   14203      the `membar' may be performed.  This corresponds to `membar' mmask
   14204      field bit 0.
   14205 
   14206 
   14207    These values can be ored together, for example:
   14208 
   14209      membar #Sync
   14210      membar #StoreLoad | #LoadLoad
   14211      membar #StoreLoad | #StoreStore
   14212 
   14213    The `prefetch' and `prefetcha' instructions take a prefetch function
   14214 code.  The following prefetch function code constant mnemonics are
   14215 available:
   14216 
   14217    * `#n_reads' requests a prefetch for several reads, and corresponds
   14218      to a prefetch function code of 0.
   14219 
   14220      `#one_read' requests a prefetch for one read, and corresponds to a
   14221      prefetch function code of 1.
   14222 
   14223      `#n_writes' requests a prefetch for several writes (and possibly
   14224      reads), and corresponds to a prefetch function code of 2.
   14225 
   14226      `#one_write' requests a prefetch for one write, and corresponds to
   14227      a prefetch function code of 3.
   14228 
   14229      `#page' requests a prefetch page, and corresponds to a prefetch
   14230      function code of 4.
   14231 
   14232      `#invalidate' requests a prefetch invalidate, and corresponds to a
   14233      prefetch function code of 16.
   14234 
   14235      `#unified' requests a prefetch to the nearest unified cache, and
   14236      corresponds to a prefetch function code of 17.
   14237 
   14238      `#n_reads_strong' requests a strong prefetch for several reads,
   14239      and corresponds to a prefetch function code of 20.
   14240 
   14241      `#one_read_strong' requests a strong prefetch for one read, and
   14242      corresponds to a prefetch function code of 21.
   14243 
   14244      `#n_writes_strong' requests a strong prefetch for several writes,
   14245      and corresponds to a prefetch function code of 22.
   14246 
   14247      `#one_write_strong' requests a strong prefetch for one write, and
   14248      corresponds to a prefetch function code of 23.
   14249 
   14250      Onle one prefetch code may be specified.  Here are some examples:
   14251 
   14252           prefetch  [%l0 + %l2], #one_read
   14253           prefetch  [%g2 + 8], #n_writes
   14254           prefetcha [%g1] 0x8, #unified
   14255           prefetcha [%o0 + 0x10] %asi, #n_reads
   14256 
   14257      The actual behavior of a given prefetch function code is processor
   14258      specific.  If a processor does not implement a given prefetch
   14259      function code, it will treat the prefetch instruction as a nop.
   14260 
   14261      For instructions that accept an immediate address space identifier,
   14262      `as' provides many mnemonics corresponding to V9 defined as well
   14263      as UltraSPARC and Niagara extended values.  For example, `#ASI_P'
   14264      and `#ASI_BLK_INIT_QUAD_LDD_AIUS'.  See the V9 and processor
   14265      specific manuals for details.
   14266 
   14267 
   14268 
   14269 File: as.info,  Node: Sparc-Relocs,  Next: Sparc-Size-Translations,  Prev: Sparc-Constants,  Up: Sparc-Syntax
   14270 
   14271 9.30.3.4 Relocations
   14272 ....................
   14273 
   14274 ELF relocations are available as defined in the 32-bit and 64-bit Sparc
   14275 ELF specifications.
   14276 
   14277    `R_SPARC_HI22' is obtained using `%hi' and `R_SPARC_LO10' is
   14278 obtained using `%lo'.  Likewise `R_SPARC_HIX22' is obtained from `%hix'
   14279 and `R_SPARC_LOX10' is obtained using `%lox'.  For example:
   14280 
   14281      sethi %hi(symbol), %g1
   14282      or    %g1, %lo(symbol), %g1
   14283 
   14284      sethi %hix(symbol), %g1
   14285      xor   %g1, %lox(symbol), %g1
   14286 
   14287    These "high" mnemonics extract bits 31:10 of their operand, and the
   14288 "low" mnemonics extract bits 9:0 of their operand.
   14289 
   14290    V9 code model relocations can be requested as follows:
   14291 
   14292    * `R_SPARC_HH22' is requested using `%hh'.  It can also be generated
   14293      using `%uhi'.
   14294 
   14295    * `R_SPARC_HM10' is requested using `%hm'.  It can also be generated
   14296      using `%ulo'.
   14297 
   14298    * `R_SPARC_LM22' is requested using `%lm'.
   14299 
   14300    * `R_SPARC_H44' is requested using `%h44'.
   14301 
   14302    * `R_SPARC_M44' is requested using `%m44'.
   14303 
   14304    * `R_SPARC_L44' is requested using `%l44'.
   14305 
   14306    The PC relative relocation `R_SPARC_PC22' can be obtained by
   14307 enclosing an operand inside of `%pc22'.  Likewise, the `R_SPARC_PC10'
   14308 relocation can be obtained using `%pc10'.  These are mostly used when
   14309 assembling PIC code.  For example, the standard PIC sequence on Sparc
   14310 to get the base of the global offset table, PC relative, into a
   14311 register, can be performed as:
   14312 
   14313      sethi %pc22(_GLOBAL_OFFSET_TABLE_-4), %l7
   14314      add   %l7, %pc10(_GLOBAL_OFFSET_TABLE_+4), %l7
   14315 
   14316    Several relocations exist to allow the link editor to potentially
   14317 optimize GOT data references.  The `R_SPARC_GOTDATA_OP_HIX22'
   14318 relocation can obtained by enclosing an operand inside of
   14319 `%gdop_hix22'.  The `R_SPARC_GOTDATA_OP_LOX10' relocation can obtained
   14320 by enclosing an operand inside of `%gdop_lox10'.  Likewise,
   14321 `R_SPARC_GOTDATA_OP' can be obtained by enclosing an operand inside of
   14322 `%gdop'.  For example, assuming the GOT base is in register `%l7':
   14323 
   14324      sethi %gdop_hix22(symbol), %l1
   14325      xor   %l1, %gdop_lox10(symbol), %l1
   14326      ld    [%l7 + %l1], %l2, %gdop(symbol)
   14327 
   14328    There are many relocations that can be requested for access to
   14329 thread local storage variables.  All of the Sparc TLS mnemonics are
   14330 supported:
   14331 
   14332    * `R_SPARC_TLS_GD_HI22' is requested using `%tgd_hi22'.
   14333 
   14334    * `R_SPARC_TLS_GD_LO10' is requested using `%tgd_lo10'.
   14335 
   14336    * `R_SPARC_TLS_GD_ADD' is requested using `%tgd_add'.
   14337 
   14338    * `R_SPARC_TLS_GD_CALL' is requested using `%tgd_call'.
   14339 
   14340    * `R_SPARC_TLS_LDM_HI22' is requested using `%tldm_hi22'.
   14341 
   14342    * `R_SPARC_TLS_LDM_LO10' is requested using `%tldm_lo10'.
   14343 
   14344    * `R_SPARC_TLS_LDM_ADD' is requested using `%tldm_add'.
   14345 
   14346    * `R_SPARC_TLS_LDM_CALL' is requested using `%tldm_call'.
   14347 
   14348    * `R_SPARC_TLS_LDO_HIX22' is requested using `%tldo_hix22'.
   14349 
   14350    * `R_SPARC_TLS_LDO_LOX10' is requested using `%tldo_lox10'.
   14351 
   14352    * `R_SPARC_TLS_LDO_ADD' is requested using `%tldo_add'.
   14353 
   14354    * `R_SPARC_TLS_IE_HI22' is requested using `%tie_hi22'.
   14355 
   14356    * `R_SPARC_TLS_IE_LO10' is requested using `%tie_lo10'.
   14357 
   14358    * `R_SPARC_TLS_IE_LD' is requested using `%tie_ld'.
   14359 
   14360    * `R_SPARC_TLS_IE_LDX' is requested using `%tie_ldx'.
   14361 
   14362    * `R_SPARC_TLS_IE_ADD' is requested using `%tie_add'.
   14363 
   14364    * `R_SPARC_TLS_LE_HIX22' is requested using `%tle_hix22'.
   14365 
   14366    * `R_SPARC_TLS_LE_LOX10' is requested using `%tle_lox10'.
   14367 
   14368    Here are some example TLS model sequences.
   14369 
   14370    First, General Dynamic:
   14371 
   14372      sethi  %tgd_hi22(symbol), %l1
   14373      add    %l1, %tgd_lo10(symbol), %l1
   14374      add    %l7, %l1, %o0, %tgd_add(symbol)
   14375      call   __tls_get_addr, %tgd_call(symbol)
   14376      nop
   14377 
   14378    Local Dynamic:
   14379 
   14380      sethi  %tldm_hi22(symbol), %l1
   14381      add    %l1, %tldm_lo10(symbol), %l1
   14382      add    %l7, %l1, %o0, %tldm_add(symbol)
   14383      call   __tls_get_addr, %tldm_call(symbol)
   14384      nop
   14385 
   14386      sethi  %tldo_hix22(symbol), %l1
   14387      xor    %l1, %tldo_lox10(symbol), %l1
   14388      add    %o0, %l1, %l1, %tldo_add(symbol)
   14389 
   14390    Initial Exec:
   14391 
   14392      sethi  %tie_hi22(symbol), %l1
   14393      add    %l1, %tie_lo10(symbol), %l1
   14394      ld     [%l7 + %l1], %o0, %tie_ld(symbol)
   14395      add    %g7, %o0, %o0, %tie_add(symbol)
   14396 
   14397      sethi  %tie_hi22(symbol), %l1
   14398      add    %l1, %tie_lo10(symbol), %l1
   14399      ldx    [%l7 + %l1], %o0, %tie_ldx(symbol)
   14400      add    %g7, %o0, %o0, %tie_add(symbol)
   14401 
   14402    And finally, Local Exec:
   14403 
   14404      sethi  %tle_hix22(symbol), %l1
   14405      add    %l1, %tle_lox10(symbol), %l1
   14406      add    %g7, %l1, %l1
   14407 
   14408    When assembling for 64-bit, and a secondary constant addend is
   14409 specified in an address expression that would normally generate an
   14410 `R_SPARC_LO10' relocation, the assembler will emit an `R_SPARC_OLO10'
   14411 instead.
   14412 
   14413 
   14414 File: as.info,  Node: Sparc-Size-Translations,  Prev: Sparc-Relocs,  Up: Sparc-Syntax
   14415 
   14416 9.30.3.5 Size Translations
   14417 ..........................
   14418 
   14419 Often it is desirable to write code in an operand size agnostic manner.
   14420 `as' provides support for this via operand size opcode translations.
   14421 Translations are supported for loads, stores, shifts, compare-and-swap
   14422 atomics, and the `clr' synthetic instruction.
   14423 
   14424    If generating 32-bit code, `as' will generate the 32-bit opcode.
   14425 Whereas if 64-bit code is being generated, the 64-bit opcode will be
   14426 emitted.  For example `ldn' will be transformed into `ld' for 32-bit
   14427 code and `ldx' for 64-bit code.
   14428 
   14429    Here is an example meant to demonstrate all the supported opcode
   14430 translations:
   14431 
   14432      ldn   [%o0], %o1
   14433      ldna  [%o0] %asi, %o2
   14434      stn   %o1, [%o0]
   14435      stna  %o2, [%o0] %asi
   14436      slln  %o3, 3, %o3
   14437      srln  %o4, 8, %o4
   14438      sran  %o5, 12, %o5
   14439      casn  [%o0], %o1, %o2
   14440      casna [%o0] %asi, %o1, %o2
   14441      clrn  %g1
   14442 
   14443    In 32-bit mode `as' will emit:
   14444 
   14445      ld   [%o0], %o1
   14446      lda  [%o0] %asi, %o2
   14447      st   %o1, [%o0]
   14448      sta  %o2, [%o0] %asi
   14449      sll  %o3, 3, %o3
   14450      srl  %o4, 8, %o4
   14451      sra  %o5, 12, %o5
   14452      cas  [%o0], %o1, %o2
   14453      casa [%o0] %asi, %o1, %o2
   14454      clr  %g1
   14455 
   14456    And in 64-bit mode `as' will emit:
   14457 
   14458      ldx   [%o0], %o1
   14459      ldxa  [%o0] %asi, %o2
   14460      stx   %o1, [%o0]
   14461      stxa  %o2, [%o0] %asi
   14462      sllx  %o3, 3, %o3
   14463      srlx  %o4, 8, %o4
   14464      srax  %o5, 12, %o5
   14465      casx  [%o0], %o1, %o2
   14466      casxa [%o0] %asi, %o1, %o2
   14467      clrx  %g1
   14468 
   14469    Finally, the `.nword' translating directive is supported as well.
   14470 It is documented in the section on Sparc machine directives.
   14471 
   14472 
   14473 File: as.info,  Node: Sparc-Float,  Next: Sparc-Directives,  Prev: Sparc-Syntax,  Up: Sparc-Dependent
   14474 
   14475 9.30.4 Floating Point
   14476 ---------------------
   14477 
   14478 The Sparc uses IEEE floating-point numbers.
   14479 
   14480 
   14481 File: as.info,  Node: Sparc-Directives,  Prev: Sparc-Float,  Up: Sparc-Dependent
   14482 
   14483 9.30.5 Sparc Machine Directives
   14484 -------------------------------
   14485 
   14486 The Sparc version of `as' supports the following additional machine
   14487 directives:
   14488 
   14489 `.align'
   14490      This must be followed by the desired alignment in bytes.
   14491 
   14492 `.common'
   14493      This must be followed by a symbol name, a positive number, and
   14494      `"bss"'.  This behaves somewhat like `.comm', but the syntax is
   14495      different.
   14496 
   14497 `.half'
   14498      This is functionally identical to `.short'.
   14499 
   14500 `.nword'
   14501      On the Sparc, the `.nword' directive produces native word sized
   14502      value, ie. if assembling with -32 it is equivalent to `.word', if
   14503      assembling with -64 it is equivalent to `.xword'.
   14504 
   14505 `.proc'
   14506      This directive is ignored.  Any text following it on the same line
   14507      is also ignored.
   14508 
   14509 `.register'
   14510      This directive declares use of a global application or system
   14511      register.  It must be followed by a register name %g2, %g3, %g6 or
   14512      %g7, comma and the symbol name for that register.  If symbol name
   14513      is `#scratch', it is a scratch register, if it is `#ignore', it
   14514      just suppresses any errors about using undeclared global register,
   14515      but does not emit any information about it into the object file.
   14516      This can be useful e.g. if you save the register before use and
   14517      restore it after.
   14518 
   14519 `.reserve'
   14520      This must be followed by a symbol name, a positive number, and
   14521      `"bss"'.  This behaves somewhat like `.lcomm', but the syntax is
   14522      different.
   14523 
   14524 `.seg'
   14525      This must be followed by `"text"', `"data"', or `"data1"'.  It
   14526      behaves like `.text', `.data', or `.data 1'.
   14527 
   14528 `.skip'
   14529      This is functionally identical to the `.space' directive.
   14530 
   14531 `.word'
   14532      On the Sparc, the `.word' directive produces 32 bit values,
   14533      instead of the 16 bit values it produces on many other machines.
   14534 
   14535 `.xword'
   14536      On the Sparc V9 processor, the `.xword' directive produces 64 bit
   14537      values.
   14538 
   14539 
   14540 File: as.info,  Node: TIC54X-Dependent,  Next: V850-Dependent,  Prev: Sparc-Dependent,  Up: Machine Dependencies
   14541 
   14542 9.31 TIC54X Dependent Features
   14543 ==============================
   14544 
   14545 * Menu:
   14546 
   14547 * TIC54X-Opts::              Command-line Options
   14548 * TIC54X-Block::             Blocking
   14549 * TIC54X-Env::               Environment Settings
   14550 * TIC54X-Constants::         Constants Syntax
   14551 * TIC54X-Subsyms::           String Substitution
   14552 * TIC54X-Locals::            Local Label Syntax
   14553 * TIC54X-Builtins::          Builtin Assembler Math Functions
   14554 * TIC54X-Ext::               Extended Addressing Support
   14555 * TIC54X-Directives::        Directives
   14556 * TIC54X-Macros::            Macro Features
   14557 * TIC54X-MMRegs::            Memory-mapped Registers
   14558 
   14559 
   14560 File: as.info,  Node: TIC54X-Opts,  Next: TIC54X-Block,  Up: TIC54X-Dependent
   14561 
   14562 9.31.1 Options
   14563 --------------
   14564 
   14565 The TMS320C54X version of `as' has a few machine-dependent options.
   14566 
   14567    You can use the `-mfar-mode' option to enable extended addressing
   14568 mode.  All addresses will be assumed to be > 16 bits, and the
   14569 appropriate relocation types will be used.  This option is equivalent
   14570 to using the `.far_mode' directive in the assembly code.  If you do not
   14571 use the `-mfar-mode' option, all references will be assumed to be 16
   14572 bits.  This option may be abbreviated to `-mf'.
   14573 
   14574    You can use the `-mcpu' option to specify a particular CPU.  This
   14575 option is equivalent to using the `.version' directive in the assembly
   14576 code.  For recognized CPU codes, see *Note `.version':
   14577 TIC54X-Directives.  The default CPU version is `542'.
   14578 
   14579    You can use the `-merrors-to-file' option to redirect error output
   14580 to a file (this provided for those deficient environments which don't
   14581 provide adequate output redirection).  This option may be abbreviated to
   14582 `-me'.
   14583 
   14584 
   14585 File: as.info,  Node: TIC54X-Block,  Next: TIC54X-Env,  Prev: TIC54X-Opts,  Up: TIC54X-Dependent
   14586 
   14587 9.31.2 Blocking
   14588 ---------------
   14589 
   14590 A blocked section or memory block is guaranteed not to cross the
   14591 blocking boundary (usually a page, or 128 words) if it is smaller than
   14592 the blocking size, or to start on a page boundary if it is larger than
   14593 the blocking size.
   14594 
   14595 
   14596 File: as.info,  Node: TIC54X-Env,  Next: TIC54X-Constants,  Prev: TIC54X-Block,  Up: TIC54X-Dependent
   14597 
   14598 9.31.3 Environment Settings
   14599 ---------------------------
   14600 
   14601 `C54XDSP_DIR' and `A_DIR' are semicolon-separated paths which are added
   14602 to the list of directories normally searched for source and include
   14603 files.  `C54XDSP_DIR' will override `A_DIR'.
   14604 
   14605 
   14606 File: as.info,  Node: TIC54X-Constants,  Next: TIC54X-Subsyms,  Prev: TIC54X-Env,  Up: TIC54X-Dependent
   14607 
   14608 9.31.4 Constants Syntax
   14609 -----------------------
   14610 
   14611 The TIC54X version of `as' allows the following additional constant
   14612 formats, using a suffix to indicate the radix:
   14613 
   14614      Binary                  `000000B, 011000b'
   14615      Octal                   `10Q, 224q'
   14616      Hexadecimal             `45h, 0FH'
   14617 
   14618 
   14619 File: as.info,  Node: TIC54X-Subsyms,  Next: TIC54X-Locals,  Prev: TIC54X-Constants,  Up: TIC54X-Dependent
   14620 
   14621 9.31.5 String Substitution
   14622 --------------------------
   14623 
   14624 A subset of allowable symbols (which we'll call subsyms) may be assigned
   14625 arbitrary string values.  This is roughly equivalent to C preprocessor
   14626 #define macros.  When `as' encounters one of these symbols, the symbol
   14627 is replaced in the input stream by its string value.  Subsym names
   14628 *must* begin with a letter.
   14629 
   14630    Subsyms may be defined using the `.asg' and `.eval' directives
   14631 (*Note `.asg': TIC54X-Directives, *Note `.eval': TIC54X-Directives.
   14632 
   14633    Expansion is recursive until a previously encountered symbol is
   14634 seen, at which point substitution stops.
   14635 
   14636    In this example, x is replaced with SYM2; SYM2 is replaced with
   14637 SYM1, and SYM1 is replaced with x.  At this point, x has already been
   14638 encountered and the substitution stops.
   14639 
   14640       .asg   "x",SYM1
   14641       .asg   "SYM1",SYM2
   14642       .asg   "SYM2",x
   14643       add    x,a             ; final code assembled is "add  x, a"
   14644 
   14645    Macro parameters are converted to subsyms; a side effect of this is
   14646 the normal `as' '\ARG' dereferencing syntax is unnecessary.  Subsyms
   14647 defined within a macro will have global scope, unless the `.var'
   14648 directive is used to identify the subsym as a local macro variable
   14649 *note `.var': TIC54X-Directives.
   14650 
   14651    Substitution may be forced in situations where replacement might be
   14652 ambiguous by placing colons on either side of the subsym.  The following
   14653 code:
   14654 
   14655       .eval  "10",x
   14656      LAB:X:  add     #x, a
   14657 
   14658    When assembled becomes:
   14659 
   14660      LAB10  add     #10, a
   14661 
   14662    Smaller parts of the string assigned to a subsym may be accessed with
   14663 the following syntax:
   14664 
   14665 ``:SYMBOL(CHAR_INDEX):''
   14666      Evaluates to a single-character string, the character at
   14667      CHAR_INDEX.
   14668 
   14669 ``:SYMBOL(START,LENGTH):''
   14670      Evaluates to a substring of SYMBOL beginning at START with length
   14671      LENGTH.
   14672 
   14673 
   14674 File: as.info,  Node: TIC54X-Locals,  Next: TIC54X-Builtins,  Prev: TIC54X-Subsyms,  Up: TIC54X-Dependent
   14675 
   14676 9.31.6 Local Labels
   14677 -------------------
   14678 
   14679 Local labels may be defined in two ways:
   14680 
   14681    * $N, where N is a decimal number between 0 and 9
   14682 
   14683    * LABEL?, where LABEL is any legal symbol name.
   14684 
   14685    Local labels thus defined may be redefined or automatically
   14686 generated.  The scope of a local label is based on when it may be
   14687 undefined or reset.  This happens when one of the following situations
   14688 is encountered:
   14689 
   14690    * .newblock directive *note `.newblock': TIC54X-Directives.
   14691 
   14692    * The current section is changed (.sect, .text, or .data)
   14693 
   14694    * Entering or leaving an included file
   14695 
   14696    * The macro scope where the label was defined is exited
   14697 
   14698 
   14699 File: as.info,  Node: TIC54X-Builtins,  Next: TIC54X-Ext,  Prev: TIC54X-Locals,  Up: TIC54X-Dependent
   14700 
   14701 9.31.7 Math Builtins
   14702 --------------------
   14703 
   14704 The following built-in functions may be used to generate a
   14705 floating-point value.  All return a floating-point value except `$cvi',
   14706 `$int', and `$sgn', which return an integer value.
   14707 
   14708 ``$acos(EXPR)''
   14709      Returns the floating point arccosine of EXPR.
   14710 
   14711 ``$asin(EXPR)''
   14712      Returns the floating point arcsine of EXPR.
   14713 
   14714 ``$atan(EXPR)''
   14715      Returns the floating point arctangent of EXPR.
   14716 
   14717 ``$atan2(EXPR1,EXPR2)''
   14718      Returns the floating point arctangent of EXPR1 / EXPR2.
   14719 
   14720 ``$ceil(EXPR)''
   14721      Returns the smallest integer not less than EXPR as floating point.
   14722 
   14723 ``$cosh(EXPR)''
   14724      Returns the floating point hyperbolic cosine of EXPR.
   14725 
   14726 ``$cos(EXPR)''
   14727      Returns the floating point cosine of EXPR.
   14728 
   14729 ``$cvf(EXPR)''
   14730      Returns the integer value EXPR converted to floating-point.
   14731 
   14732 ``$cvi(EXPR)''
   14733      Returns the floating point value EXPR converted to integer.
   14734 
   14735 ``$exp(EXPR)''
   14736      Returns the floating point value e ^ EXPR.
   14737 
   14738 ``$fabs(EXPR)''
   14739      Returns the floating point absolute value of EXPR.
   14740 
   14741 ``$floor(EXPR)''
   14742      Returns the largest integer that is not greater than EXPR as
   14743      floating point.
   14744 
   14745 ``$fmod(EXPR1,EXPR2)''
   14746      Returns the floating point remainder of EXPR1 / EXPR2.
   14747 
   14748 ``$int(EXPR)''
   14749      Returns 1 if EXPR evaluates to an integer, zero otherwise.
   14750 
   14751 ``$ldexp(EXPR1,EXPR2)''
   14752      Returns the floating point value EXPR1 * 2 ^ EXPR2.
   14753 
   14754 ``$log10(EXPR)''
   14755      Returns the base 10 logarithm of EXPR.
   14756 
   14757 ``$log(EXPR)''
   14758      Returns the natural logarithm of EXPR.
   14759 
   14760 ``$max(EXPR1,EXPR2)''
   14761      Returns the floating point maximum of EXPR1 and EXPR2.
   14762 
   14763 ``$min(EXPR1,EXPR2)''
   14764      Returns the floating point minimum of EXPR1 and EXPR2.
   14765 
   14766 ``$pow(EXPR1,EXPR2)''
   14767      Returns the floating point value EXPR1 ^ EXPR2.
   14768 
   14769 ``$round(EXPR)''
   14770      Returns the nearest integer to EXPR as a floating point number.
   14771 
   14772 ``$sgn(EXPR)''
   14773      Returns -1, 0, or 1 based on the sign of EXPR.
   14774 
   14775 ``$sin(EXPR)''
   14776      Returns the floating point sine of EXPR.
   14777 
   14778 ``$sinh(EXPR)''
   14779      Returns the floating point hyperbolic sine of EXPR.
   14780 
   14781 ``$sqrt(EXPR)''
   14782      Returns the floating point square root of EXPR.
   14783 
   14784 ``$tan(EXPR)''
   14785      Returns the floating point tangent of EXPR.
   14786 
   14787 ``$tanh(EXPR)''
   14788      Returns the floating point hyperbolic tangent of EXPR.
   14789 
   14790 ``$trunc(EXPR)''
   14791      Returns the integer value of EXPR truncated towards zero as
   14792      floating point.
   14793 
   14794 
   14795 
   14796 File: as.info,  Node: TIC54X-Ext,  Next: TIC54X-Directives,  Prev: TIC54X-Builtins,  Up: TIC54X-Dependent
   14797 
   14798 9.31.8 Extended Addressing
   14799 --------------------------
   14800 
   14801 The `LDX' pseudo-op is provided for loading the extended addressing bits
   14802 of a label or address.  For example, if an address `_label' resides in
   14803 extended program memory, the value of `_label' may be loaded as follows:
   14804       ldx     #_label,16,a    ; loads extended bits of _label
   14805       or      #_label,a       ; loads lower 16 bits of _label
   14806       bacc    a               ; full address is in accumulator A
   14807 
   14808 
   14809 File: as.info,  Node: TIC54X-Directives,  Next: TIC54X-Macros,  Prev: TIC54X-Ext,  Up: TIC54X-Dependent
   14810 
   14811 9.31.9 Directives
   14812 -----------------
   14813 
   14814 `.align [SIZE]'
   14815 `.even'
   14816      Align the section program counter on the next boundary, based on
   14817      SIZE.  SIZE may be any power of 2.  `.even' is equivalent to
   14818      `.align' with a SIZE of 2.
   14819     `1'
   14820           Align SPC to word boundary
   14821 
   14822     `2'
   14823           Align SPC to longword boundary (same as .even)
   14824 
   14825     `128'
   14826           Align SPC to page boundary
   14827 
   14828 `.asg STRING, NAME'
   14829      Assign NAME the string STRING.  String replacement is performed on
   14830      STRING before assignment.
   14831 
   14832 `.eval STRING, NAME'
   14833      Evaluate the contents of string STRING and assign the result as a
   14834      string to the subsym NAME.  String replacement is performed on
   14835      STRING before assignment.
   14836 
   14837 `.bss SYMBOL, SIZE [, [BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
   14838      Reserve space for SYMBOL in the .bss section.  SIZE is in words.
   14839      If present, BLOCKING_FLAG indicates the allocated space should be
   14840      aligned on a page boundary if it would otherwise cross a page
   14841      boundary.  If present, ALIGNMENT_FLAG causes the assembler to
   14842      allocate SIZE on a long word boundary.
   14843 
   14844 `.byte VALUE [,...,VALUE_N]'
   14845 `.ubyte VALUE [,...,VALUE_N]'
   14846 `.char VALUE [,...,VALUE_N]'
   14847 `.uchar VALUE [,...,VALUE_N]'
   14848      Place one or more bytes into consecutive words of the current
   14849      section.  The upper 8 bits of each word is zero-filled.  If a
   14850      label is used, it points to the word allocated for the first byte
   14851      encountered.
   14852 
   14853 `.clink ["SECTION_NAME"]'
   14854      Set STYP_CLINK flag for this section, which indicates to the
   14855      linker that if no symbols from this section are referenced, the
   14856      section should not be included in the link.  If SECTION_NAME is
   14857      omitted, the current section is used.
   14858 
   14859 `.c_mode'
   14860      TBD.
   14861 
   14862 `.copy "FILENAME" | FILENAME'
   14863 `.include "FILENAME" | FILENAME'
   14864      Read source statements from FILENAME.  The normal include search
   14865      path is used.  Normally .copy will cause statements from the
   14866      included file to be printed in the assembly listing and .include
   14867      will not, but this distinction is not currently implemented.
   14868 
   14869 `.data'
   14870      Begin assembling code into the .data section.
   14871 
   14872 `.double VALUE [,...,VALUE_N]'
   14873 `.ldouble VALUE [,...,VALUE_N]'
   14874 `.float VALUE [,...,VALUE_N]'
   14875 `.xfloat VALUE [,...,VALUE_N]'
   14876      Place an IEEE single-precision floating-point representation of
   14877      one or more floating-point values into the current section.  All
   14878      but `.xfloat' align the result on a longword boundary.  Values are
   14879      stored most-significant word first.
   14880 
   14881 `.drlist'
   14882 `.drnolist'
   14883      Control printing of directives to the listing file.  Ignored.
   14884 
   14885 `.emsg STRING'
   14886 `.mmsg STRING'
   14887 `.wmsg STRING'
   14888      Emit a user-defined error, message, or warning, respectively.
   14889 
   14890 `.far_mode'
   14891      Use extended addressing when assembling statements.  This should
   14892      appear only once per file, and is equivalent to the -mfar-mode
   14893      option *note `-mfar-mode': TIC54X-Opts.
   14894 
   14895 `.fclist'
   14896 `.fcnolist'
   14897      Control printing of false conditional blocks to the listing file.
   14898 
   14899 `.field VALUE [,SIZE]'
   14900      Initialize a bitfield of SIZE bits in the current section.  If
   14901      VALUE is relocatable, then SIZE must be 16.  SIZE defaults to 16
   14902      bits.  If VALUE does not fit into SIZE bits, the value will be
   14903      truncated.  Successive `.field' directives will pack starting at
   14904      the current word, filling the most significant bits first, and
   14905      aligning to the start of the next word if the field size does not
   14906      fit into the space remaining in the current word.  A `.align'
   14907      directive with an operand of 1 will force the next `.field'
   14908      directive to begin packing into a new word.  If a label is used, it
   14909      points to the word that contains the specified field.
   14910 
   14911 `.global SYMBOL [,...,SYMBOL_N]'
   14912 `.def SYMBOL [,...,SYMBOL_N]'
   14913 `.ref SYMBOL [,...,SYMBOL_N]'
   14914      `.def' nominally identifies a symbol defined in the current file
   14915      and available to other files.  `.ref' identifies a symbol used in
   14916      the current file but defined elsewhere.  Both map to the standard
   14917      `.global' directive.
   14918 
   14919 `.half VALUE [,...,VALUE_N]'
   14920 `.uhalf VALUE [,...,VALUE_N]'
   14921 `.short VALUE [,...,VALUE_N]'
   14922 `.ushort VALUE [,...,VALUE_N]'
   14923 `.int VALUE [,...,VALUE_N]'
   14924 `.uint VALUE [,...,VALUE_N]'
   14925 `.word VALUE [,...,VALUE_N]'
   14926 `.uword VALUE [,...,VALUE_N]'
   14927      Place one or more values into consecutive words of the current
   14928      section.  If a label is used, it points to the word allocated for
   14929      the first value encountered.
   14930 
   14931 `.label SYMBOL'
   14932      Define a special SYMBOL to refer to the load time address of the
   14933      current section program counter.
   14934 
   14935 `.length'
   14936 `.width'
   14937      Set the page length and width of the output listing file.  Ignored.
   14938 
   14939 `.list'
   14940 `.nolist'
   14941      Control whether the source listing is printed.  Ignored.
   14942 
   14943 `.long VALUE [,...,VALUE_N]'
   14944 `.ulong VALUE [,...,VALUE_N]'
   14945 `.xlong VALUE [,...,VALUE_N]'
   14946      Place one or more 32-bit values into consecutive words in the
   14947      current section.  The most significant word is stored first.
   14948      `.long' and `.ulong' align the result on a longword boundary;
   14949      `xlong' does not.
   14950 
   14951 `.loop [COUNT]'
   14952 `.break [CONDITION]'
   14953 `.endloop'
   14954      Repeatedly assemble a block of code.  `.loop' begins the block, and
   14955      `.endloop' marks its termination.  COUNT defaults to 1024, and
   14956      indicates the number of times the block should be repeated.
   14957      `.break' terminates the loop so that assembly begins after the
   14958      `.endloop' directive.  The optional CONDITION will cause the loop
   14959      to terminate only if it evaluates to zero.
   14960 
   14961 `MACRO_NAME .macro [PARAM1][,...PARAM_N]'
   14962 `[.mexit]'
   14963 `.endm'
   14964      See the section on macros for more explanation (*Note
   14965      TIC54X-Macros::.
   14966 
   14967 `.mlib "FILENAME" | FILENAME'
   14968      Load the macro library FILENAME.  FILENAME must be an archived
   14969      library (BFD ar-compatible) of text files, expected to contain
   14970      only macro definitions.   The standard include search path is used.
   14971 
   14972 `.mlist'
   14973 
   14974 `.mnolist'
   14975      Control whether to include macro and loop block expansions in the
   14976      listing output.  Ignored.
   14977 
   14978 `.mmregs'
   14979      Define global symbolic names for the 'c54x registers.  Supposedly
   14980      equivalent to executing `.set' directives for each register with
   14981      its memory-mapped value, but in reality is provided only for
   14982      compatibility and does nothing.
   14983 
   14984 `.newblock'
   14985      This directive resets any TIC54X local labels currently defined.
   14986      Normal `as' local labels are unaffected.
   14987 
   14988 `.option OPTION_LIST'
   14989      Set listing options.  Ignored.
   14990 
   14991 `.sblock "SECTION_NAME" | SECTION_NAME [,"NAME_N" | NAME_N]'
   14992      Designate SECTION_NAME for blocking.  Blocking guarantees that a
   14993      section will start on a page boundary (128 words) if it would
   14994      otherwise cross a page boundary.  Only initialized sections may be
   14995      designated with this directive.  See also *Note TIC54X-Block::.
   14996 
   14997 `.sect "SECTION_NAME"'
   14998      Define a named initialized section and make it the current section.
   14999 
   15000 `SYMBOL .set "VALUE"'
   15001 `SYMBOL .equ "VALUE"'
   15002      Equate a constant VALUE to a SYMBOL, which is placed in the symbol
   15003      table.  SYMBOL may not be previously defined.
   15004 
   15005 `.space SIZE_IN_BITS'
   15006 `.bes SIZE_IN_BITS'
   15007      Reserve the given number of bits in the current section and
   15008      zero-fill them.  If a label is used with `.space', it points to the
   15009      *first* word reserved.  With `.bes', the label points to the
   15010      *last* word reserved.
   15011 
   15012 `.sslist'
   15013 `.ssnolist'
   15014      Controls the inclusion of subsym replacement in the listing
   15015      output.  Ignored.
   15016 
   15017 `.string "STRING" [,...,"STRING_N"]'
   15018 `.pstring "STRING" [,...,"STRING_N"]'
   15019      Place 8-bit characters from STRING into the current section.
   15020      `.string' zero-fills the upper 8 bits of each word, while
   15021      `.pstring' puts two characters into each word, filling the
   15022      most-significant bits first.  Unused space is zero-filled.  If a
   15023      label is used, it points to the first word initialized.
   15024 
   15025 `[STAG] .struct [OFFSET]'
   15026 `[NAME_1] element [COUNT_1]'
   15027 `[NAME_2] element [COUNT_2]'
   15028 `[TNAME] .tag STAGX [TCOUNT]'
   15029 `...'
   15030 `[NAME_N] element [COUNT_N]'
   15031 `[SSIZE] .endstruct'
   15032 `LABEL .tag [STAG]'
   15033      Assign symbolic offsets to the elements of a structure.  STAG
   15034      defines a symbol to use to reference the structure.  OFFSET
   15035      indicates a starting value to use for the first element
   15036      encountered; otherwise it defaults to zero.  Each element can have
   15037      a named offset, NAME, which is a symbol assigned the value of the
   15038      element's offset into the structure.  If STAG is missing, these
   15039      become global symbols.  COUNT adjusts the offset that many times,
   15040      as if `element' were an array.  `element' may be one of `.byte',
   15041      `.word', `.long', `.float', or any equivalent of those, and the
   15042      structure offset is adjusted accordingly.  `.field' and `.string'
   15043      are also allowed; the size of `.field' is one bit, and `.string'
   15044      is considered to be one word in size.  Only element descriptors,
   15045      structure/union tags, `.align' and conditional assembly directives
   15046      are allowed within `.struct'/`.endstruct'.  `.align' aligns member
   15047      offsets to word boundaries only.  SSIZE, if provided, will always
   15048      be assigned the size of the structure.
   15049 
   15050      The `.tag' directive, in addition to being used to define a
   15051      structure/union element within a structure, may be used to apply a
   15052      structure to a symbol.  Once applied to LABEL, the individual
   15053      structure elements may be applied to LABEL to produce the desired
   15054      offsets using LABEL as the structure base.
   15055 
   15056 `.tab'
   15057      Set the tab size in the output listing.  Ignored.
   15058 
   15059 `[UTAG] .union'
   15060 `[NAME_1] element [COUNT_1]'
   15061 `[NAME_2] element [COUNT_2]'
   15062 `[TNAME] .tag UTAGX[,TCOUNT]'
   15063 `...'
   15064 `[NAME_N] element [COUNT_N]'
   15065 `[USIZE] .endstruct'
   15066 `LABEL .tag [UTAG]'
   15067      Similar to `.struct', but the offset after each element is reset to
   15068      zero, and the USIZE is set to the maximum of all defined elements.
   15069      Starting offset for the union is always zero.
   15070 
   15071 `[SYMBOL] .usect "SECTION_NAME", SIZE, [,[BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
   15072      Reserve space for variables in a named, uninitialized section
   15073      (similar to .bss).  `.usect' allows definitions sections
   15074      independent of .bss.  SYMBOL points to the first location reserved
   15075      by this allocation.  The symbol may be used as a variable name.
   15076      SIZE is the allocated size in words.  BLOCKING_FLAG indicates
   15077      whether to block this section on a page boundary (128 words)
   15078      (*note TIC54X-Block::).  ALIGNMENT FLAG indicates whether the
   15079      section should be longword-aligned.
   15080 
   15081 `.var SYM[,..., SYM_N]'
   15082      Define a subsym to be a local variable within a macro.  See *Note
   15083      TIC54X-Macros::.
   15084 
   15085 `.version VERSION'
   15086      Set which processor to build instructions for.  Though the
   15087      following values are accepted, the op is ignored.
   15088     `541'
   15089     `542'
   15090     `543'
   15091     `545'
   15092     `545LP'
   15093     `546LP'
   15094     `548'
   15095     `549'
   15096 
   15097 
   15098 File: as.info,  Node: TIC54X-Macros,  Next: TIC54X-MMRegs,  Prev: TIC54X-Directives,  Up: TIC54X-Dependent
   15099 
   15100 9.31.10 Macros
   15101 --------------
   15102 
   15103 Macros do not require explicit dereferencing of arguments (i.e., \ARG).
   15104 
   15105    During macro expansion, the macro parameters are converted to
   15106 subsyms.  If the number of arguments passed the macro invocation
   15107 exceeds the number of parameters defined, the last parameter is
   15108 assigned the string equivalent of all remaining arguments.  If fewer
   15109 arguments are given than parameters, the missing parameters are
   15110 assigned empty strings.  To include a comma in an argument, you must
   15111 enclose the argument in quotes.
   15112 
   15113    The following built-in subsym functions allow examination of the
   15114 string value of subsyms (or ordinary strings).  The arguments are
   15115 strings unless otherwise indicated (subsyms passed as args will be
   15116 replaced by the strings they represent).
   15117 ``$symlen(STR)''
   15118      Returns the length of STR.
   15119 
   15120 ``$symcmp(STR1,STR2)''
   15121      Returns 0 if STR1 == STR2, non-zero otherwise.
   15122 
   15123 ``$firstch(STR,CH)''
   15124      Returns index of the first occurrence of character constant CH in
   15125      STR.
   15126 
   15127 ``$lastch(STR,CH)''
   15128      Returns index of the last occurrence of character constant CH in
   15129      STR.
   15130 
   15131 ``$isdefed(SYMBOL)''
   15132      Returns zero if the symbol SYMBOL is not in the symbol table,
   15133      non-zero otherwise.
   15134 
   15135 ``$ismember(SYMBOL,LIST)''
   15136      Assign the first member of comma-separated string LIST to SYMBOL;
   15137      LIST is reassigned the remainder of the list.  Returns zero if
   15138      LIST is a null string.  Both arguments must be subsyms.
   15139 
   15140 ``$iscons(EXPR)''
   15141      Returns 1 if string EXPR is binary, 2 if octal, 3 if hexadecimal,
   15142      4 if a character, 5 if decimal, and zero if not an integer.
   15143 
   15144 ``$isname(NAME)''
   15145      Returns 1 if NAME is a valid symbol name, zero otherwise.
   15146 
   15147 ``$isreg(REG)''
   15148      Returns 1 if REG is a valid predefined register name (AR0-AR7
   15149      only).
   15150 
   15151 ``$structsz(STAG)''
   15152      Returns the size of the structure or union represented by STAG.
   15153 
   15154 ``$structacc(STAG)''
   15155      Returns the reference point of the structure or union represented
   15156      by STAG.   Always returns zero.
   15157 
   15158 
   15159 
   15160 File: as.info,  Node: TIC54X-MMRegs,  Prev: TIC54X-Macros,  Up: TIC54X-Dependent
   15161 
   15162 9.31.11 Memory-mapped Registers
   15163 -------------------------------
   15164 
   15165 The following symbols are recognized as memory-mapped registers:
   15166 
   15167 
   15168 
   15169 File: as.info,  Node: Z80-Dependent,  Next: Z8000-Dependent,  Prev: Xtensa-Dependent,  Up: Machine Dependencies
   15170 
   15171 9.32 Z80 Dependent Features
   15172 ===========================
   15173 
   15174 * Menu:
   15175 
   15176 * Z80 Options::              Options
   15177 * Z80 Syntax::               Syntax
   15178 * Z80 Floating Point::       Floating Point
   15179 * Z80 Directives::           Z80 Machine Directives
   15180 * Z80 Opcodes::              Opcodes
   15181 
   15182 
   15183 File: as.info,  Node: Z80 Options,  Next: Z80 Syntax,  Up: Z80-Dependent
   15184 
   15185 9.32.1 Options
   15186 --------------
   15187 
   15188 The Zilog Z80 and Ascii R800 version of `as' have a few machine
   15189 dependent options.
   15190 `-z80'
   15191      Produce code for the Z80 processor. There are additional options to
   15192      request warnings and error messages for undocumented instructions.
   15193 
   15194 `-ignore-undocumented-instructions'
   15195 `-Wnud'
   15196      Silently assemble undocumented Z80-instructions that have been
   15197      adopted as documented R800-instructions.
   15198 
   15199 `-ignore-unportable-instructions'
   15200 `-Wnup'
   15201      Silently assemble all undocumented Z80-instructions.
   15202 
   15203 `-warn-undocumented-instructions'
   15204 `-Wud'
   15205      Issue warnings for undocumented Z80-instructions that work on
   15206      R800, do not assemble other undocumented instructions without
   15207      warning.
   15208 
   15209 `-warn-unportable-instructions'
   15210 `-Wup'
   15211      Issue warnings for other undocumented Z80-instructions, do not
   15212      treat any undocumented instructions as errors.
   15213 
   15214 `-forbid-undocumented-instructions'
   15215 `-Fud'
   15216      Treat all undocumented z80-instructions as errors.
   15217 
   15218 `-forbid-unportable-instructions'
   15219 `-Fup'
   15220      Treat undocumented z80-instructions that do not work on R800 as
   15221      errors.
   15222 
   15223 `-r800'
   15224      Produce code for the R800 processor. The assembler does not support
   15225      undocumented instructions for the R800.  In line with common
   15226      practice, `as' uses Z80 instruction names for the R800 processor,
   15227      as far as they exist.
   15228 
   15229 
   15230 File: as.info,  Node: Z80 Syntax,  Next: Z80 Floating Point,  Prev: Z80 Options,  Up: Z80-Dependent
   15231 
   15232 9.32.2 Syntax
   15233 -------------
   15234 
   15235 The assembler syntax closely follows the 'Z80 family CPU User Manual' by
   15236 Zilog.  In expressions a single `=' may be used as "is equal to"
   15237 comparison operator.
   15238 
   15239    Suffices can be used to indicate the radix of integer constants; `H'
   15240 or `h' for hexadecimal, `D' or `d' for decimal, `Q', `O', `q' or `o'
   15241 for octal, and `B' for binary.
   15242 
   15243    The suffix `b' denotes a backreference to local label.
   15244 
   15245 * Menu:
   15246 
   15247 * Z80-Chars::                Special Characters
   15248 * Z80-Regs::                 Register Names
   15249 * Z80-Case::                 Case Sensitivity
   15250 
   15251 
   15252 File: as.info,  Node: Z80-Chars,  Next: Z80-Regs,  Up: Z80 Syntax
   15253 
   15254 9.32.2.1 Special Characters
   15255 ...........................
   15256 
   15257 The semicolon `;' is the line comment character;
   15258 
   15259    The dollar sign `$' can be used as a prefix for hexadecimal numbers
   15260 and as a symbol denoting the current location counter.
   15261 
   15262    A backslash `\' is an ordinary character for the Z80 assembler.
   15263 
   15264    The single quote `'' must be followed by a closing quote. If there
   15265 is one character in between, it is a character constant, otherwise it is
   15266 a string constant.
   15267 
   15268 
   15269 File: as.info,  Node: Z80-Regs,  Next: Z80-Case,  Prev: Z80-Chars,  Up: Z80 Syntax
   15270 
   15271 9.32.2.2 Register Names
   15272 .......................
   15273 
   15274 The registers are referred to with the letters assigned to them by
   15275 Zilog. In addition `as' recognizes `ixl' and `ixh' as the least and
   15276 most significant octet in `ix', and similarly `iyl' and  `iyh' as parts
   15277 of `iy'.
   15278 
   15279 
   15280 File: as.info,  Node: Z80-Case,  Prev: Z80-Regs,  Up: Z80 Syntax
   15281 
   15282 9.32.2.3 Case Sensitivity
   15283 .........................
   15284 
   15285 Upper and lower case are equivalent in register names, opcodes,
   15286 condition codes  and assembler directives.  The case of letters is
   15287 significant in labels and symbol names. The case is also important to
   15288 distinguish the suffix `b' for a backward reference to a local label
   15289 from the suffix `B' for a number in binary notation.
   15290 
   15291 
   15292 File: as.info,  Node: Z80 Floating Point,  Next: Z80 Directives,  Prev: Z80 Syntax,  Up: Z80-Dependent
   15293 
   15294 9.32.3 Floating Point
   15295 ---------------------
   15296 
   15297 Floating-point numbers are not supported.
   15298 
   15299 
   15300 File: as.info,  Node: Z80 Directives,  Next: Z80 Opcodes,  Prev: Z80 Floating Point,  Up: Z80-Dependent
   15301 
   15302 9.32.4 Z80 Assembler Directives
   15303 -------------------------------
   15304 
   15305 `as' for the Z80 supports some additional directives for compatibility
   15306 with other assemblers.
   15307 
   15308    These are the additional directives in `as' for the Z80:
   15309 
   15310 `db EXPRESSION|STRING[,EXPRESSION|STRING...]'
   15311 `defb EXPRESSION|STRING[,EXPRESSION|STRING...]'
   15312      For each STRING the characters are copied to the object file, for
   15313      each other EXPRESSION the value is stored in one byte.  A warning
   15314      is issued in case of an overflow.
   15315 
   15316 `dw EXPRESSION[,EXPRESSION...]'
   15317 `defw EXPRESSION[,EXPRESSION...]'
   15318      For each EXPRESSION the value is stored in two bytes, ignoring
   15319      overflow.
   15320 
   15321 `d24 EXPRESSION[,EXPRESSION...]'
   15322 `def24 EXPRESSION[,EXPRESSION...]'
   15323      For each EXPRESSION the value is stored in three bytes, ignoring
   15324      overflow.
   15325 
   15326 `d32 EXPRESSION[,EXPRESSION...]'
   15327 `def32 EXPRESSION[,EXPRESSION...]'
   15328      For each EXPRESSION the value is stored in four bytes, ignoring
   15329      overflow.
   15330 
   15331 `ds COUNT[, VALUE]'
   15332 `defs COUNT[, VALUE]'
   15333      Fill COUNT bytes in the object file with VALUE, if VALUE is
   15334      omitted it defaults to zero.
   15335 
   15336 `SYMBOL equ EXPRESSION'
   15337 `SYMBOL defl EXPRESSION'
   15338      These directives set the value of SYMBOL to EXPRESSION. If `equ'
   15339      is used, it is an error if SYMBOL is already defined.  Symbols
   15340      defined with `equ' are not protected from redefinition.
   15341 
   15342 `set'
   15343      This is a normal instruction on Z80, and not an assembler
   15344      directive.
   15345 
   15346 `psect NAME'
   15347      A synonym for *Note Section::, no second argument should be given.
   15348 
   15349 
   15350 
   15351 File: as.info,  Node: Z80 Opcodes,  Prev: Z80 Directives,  Up: Z80-Dependent
   15352 
   15353 9.32.5 Opcodes
   15354 --------------
   15355 
   15356 In line with common practice, Z80 mnemonics are used for both the Z80
   15357 and the R800.
   15358 
   15359    In many instructions it is possible to use one of the half index
   15360 registers (`ixl',`ixh',`iyl',`iyh') in stead of an 8-bit general
   15361 purpose register. This yields instructions that are documented on the
   15362 R800 and undocumented on the Z80.  Similarly `in f,(c)' is documented
   15363 on the R800 and undocumented on the Z80.
   15364 
   15365    The assembler also supports the following undocumented
   15366 Z80-instructions, that have not been adopted in the R800 instruction
   15367 set:
   15368 `out (c),0'
   15369      Sends zero to the port pointed to by register c.
   15370 
   15371 `sli M'
   15372      Equivalent to `M = (M<<1)+1', the operand M can be any operand
   15373      that is valid for `sla'. One can use `sll' as a synonym for `sli'.
   15374 
   15375 `OP (ix+D), R'
   15376      This is equivalent to
   15377 
   15378           ld R, (ix+D)
   15379           OPC R
   15380           ld (ix+D), R
   15381 
   15382      The operation `OPC' may be any of `res B,', `set B,', `rl', `rlc',
   15383      `rr', `rrc', `sla', `sli', `sra' and `srl', and the register `R'
   15384      may be any of `a', `b', `c', `d', `e', `h' and `l'.
   15385 
   15386 `OPC (iy+D), R'
   15387      As above, but with `iy' instead of `ix'.
   15388 
   15389    The web site at `http://www.z80.info' is a good starting place to
   15390 find more information on programming the Z80.
   15391 
   15392 
   15393 File: as.info,  Node: Z8000-Dependent,  Next: Vax-Dependent,  Prev: Z80-Dependent,  Up: Machine Dependencies
   15394 
   15395 9.33 Z8000 Dependent Features
   15396 =============================
   15397 
   15398    The Z8000 as supports both members of the Z8000 family: the
   15399 unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with
   15400 24 bit addresses.
   15401 
   15402    When the assembler is in unsegmented mode (specified with the
   15403 `unsegm' directive), an address takes up one word (16 bit) sized
   15404 register.  When the assembler is in segmented mode (specified with the
   15405 `segm' directive), a 24-bit address takes up a long (32 bit) register.
   15406 *Note Assembler Directives for the Z8000: Z8000 Directives, for a list
   15407 of other Z8000 specific assembler directives.
   15408 
   15409 * Menu:
   15410 
   15411 * Z8000 Options::               Command-line options for the Z8000
   15412 * Z8000 Syntax::                Assembler syntax for the Z8000
   15413 * Z8000 Directives::            Special directives for the Z8000
   15414 * Z8000 Opcodes::               Opcodes
   15415 
   15416 
   15417 File: as.info,  Node: Z8000 Options,  Next: Z8000 Syntax,  Up: Z8000-Dependent
   15418 
   15419 9.33.1 Options
   15420 --------------
   15421 
   15422 `-z8001'
   15423      Generate segmented code by default.
   15424 
   15425 `-z8002'
   15426      Generate unsegmented code by default.
   15427 
   15428 
   15429 File: as.info,  Node: Z8000 Syntax,  Next: Z8000 Directives,  Prev: Z8000 Options,  Up: Z8000-Dependent
   15430 
   15431 9.33.2 Syntax
   15432 -------------
   15433 
   15434 * Menu:
   15435 
   15436 * Z8000-Chars::                Special Characters
   15437 * Z8000-Regs::                 Register Names
   15438 * Z8000-Addressing::           Addressing Modes
   15439 
   15440 
   15441 File: as.info,  Node: Z8000-Chars,  Next: Z8000-Regs,  Up: Z8000 Syntax
   15442 
   15443 9.33.2.1 Special Characters
   15444 ...........................
   15445 
   15446 `!' is the line comment character.
   15447 
   15448    You can use `;' instead of a newline to separate statements.
   15449 
   15450 
   15451 File: as.info,  Node: Z8000-Regs,  Next: Z8000-Addressing,  Prev: Z8000-Chars,  Up: Z8000 Syntax
   15452 
   15453 9.33.2.2 Register Names
   15454 .......................
   15455 
   15456 The Z8000 has sixteen 16 bit registers, numbered 0 to 15.  You can refer
   15457 to different sized groups of registers by register number, with the
   15458 prefix `r' for 16 bit registers, `rr' for 32 bit registers and `rq' for
   15459 64 bit registers.  You can also refer to the contents of the first
   15460 eight (of the sixteen 16 bit registers) by bytes.  They are named `rlN'
   15461 and `rhN'.
   15462 
   15463 _byte registers_
   15464      rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3
   15465      rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7
   15466 
   15467 _word registers_
   15468      r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
   15469 
   15470 _long word registers_
   15471      rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14
   15472 
   15473 _quad word registers_
   15474      rq0 rq4 rq8 rq12
   15475 
   15476 
   15477 File: as.info,  Node: Z8000-Addressing,  Prev: Z8000-Regs,  Up: Z8000 Syntax
   15478 
   15479 9.33.2.3 Addressing Modes
   15480 .........................
   15481 
   15482 as understands the following addressing modes for the Z8000:
   15483 
   15484 `rlN'
   15485 `rhN'
   15486 `rN'
   15487 `rrN'
   15488 `rqN'
   15489      Register direct:  8bit, 16bit, 32bit, and 64bit registers.
   15490 
   15491 `@rN'
   15492 `@rrN'
   15493      Indirect register:  @rrN in segmented mode, @rN in unsegmented
   15494      mode.
   15495 
   15496 `ADDR'
   15497      Direct: the 16 bit or 24 bit address (depending on whether the
   15498      assembler is in segmented or unsegmented mode) of the operand is
   15499      in the instruction.
   15500 
   15501 `address(rN)'
   15502      Indexed: the 16 or 24 bit address is added to the 16 bit register
   15503      to produce the final address in memory of the operand.
   15504 
   15505 `rN(#IMM)'
   15506 `rrN(#IMM)'
   15507      Base Address: the 16 or 24 bit register is added to the 16 bit sign
   15508      extended immediate displacement to produce the final address in
   15509      memory of the operand.
   15510 
   15511 `rN(rM)'
   15512 `rrN(rM)'
   15513      Base Index: the 16 or 24 bit register rN or rrN is added to the
   15514      sign extended 16 bit index register rM to produce the final
   15515      address in memory of the operand.
   15516 
   15517 `#XX'
   15518      Immediate data XX.
   15519 
   15520 
   15521 File: as.info,  Node: Z8000 Directives,  Next: Z8000 Opcodes,  Prev: Z8000 Syntax,  Up: Z8000-Dependent
   15522 
   15523 9.33.3 Assembler Directives for the Z8000
   15524 -----------------------------------------
   15525 
   15526 The Z8000 port of as includes additional assembler directives, for
   15527 compatibility with other Z8000 assemblers.  These do not begin with `.'
   15528 (unlike the ordinary as directives).
   15529 
   15530 `segm'
   15531 `.z8001'
   15532      Generate code for the segmented Z8001.
   15533 
   15534 `unsegm'
   15535 `.z8002'
   15536      Generate code for the unsegmented Z8002.
   15537 
   15538 `name'
   15539      Synonym for `.file'
   15540 
   15541 `global'
   15542      Synonym for `.global'
   15543 
   15544 `wval'
   15545      Synonym for `.word'
   15546 
   15547 `lval'
   15548      Synonym for `.long'
   15549 
   15550 `bval'
   15551      Synonym for `.byte'
   15552 
   15553 `sval'
   15554      Assemble a string.  `sval' expects one string literal, delimited by
   15555      single quotes.  It assembles each byte of the string into
   15556      consecutive addresses.  You can use the escape sequence `%XX'
   15557      (where XX represents a two-digit hexadecimal number) to represent
   15558      the character whose ASCII value is XX.  Use this feature to
   15559      describe single quote and other characters that may not appear in
   15560      string literals as themselves.  For example, the C statement
   15561      `char *a = "he said \"it's 50% off\"";' is represented in Z8000
   15562      assembly language (shown with the assembler output in hex at the
   15563      left) as
   15564 
   15565           68652073    sval    'he said %22it%27s 50%25 off%22%00'
   15566           61696420
   15567           22697427
   15568           73203530
   15569           25206F66
   15570           662200
   15571 
   15572 `rsect'
   15573      synonym for `.section'
   15574 
   15575 `block'
   15576      synonym for `.space'
   15577 
   15578 `even'
   15579      special case of `.align'; aligns output to even byte boundary.
   15580 
   15581 
   15582 File: as.info,  Node: Z8000 Opcodes,  Prev: Z8000 Directives,  Up: Z8000-Dependent
   15583 
   15584 9.33.4 Opcodes
   15585 --------------
   15586 
   15587 For detailed information on the Z8000 machine instruction set, see
   15588 `Z8000 Technical Manual'.
   15589 
   15590    The following table summarizes the opcodes and their arguments:
   15591 
   15592                  rs   16 bit source register
   15593                  rd   16 bit destination register
   15594                  rbs   8 bit source register
   15595                  rbd   8 bit destination register
   15596                  rrs   32 bit source register
   15597                  rrd   32 bit destination register
   15598                  rqs   64 bit source register
   15599                  rqd   64 bit destination register
   15600                  addr 16/24 bit address
   15601                  imm  immediate data
   15602 
   15603      adc rd,rs               clrb addr               cpsir @rd,@rs,rr,cc
   15604      adcb rbd,rbs            clrb addr(rd)           cpsirb @rd,@rs,rr,cc
   15605      add rd,@rs              clrb rbd                dab rbd
   15606      add rd,addr             com @rd                 dbjnz rbd,disp7
   15607      add rd,addr(rs)         com addr                dec @rd,imm4m1
   15608      add rd,imm16            com addr(rd)            dec addr(rd),imm4m1
   15609      add rd,rs               com rd                  dec addr,imm4m1
   15610      addb rbd,@rs            comb @rd                dec rd,imm4m1
   15611      addb rbd,addr           comb addr               decb @rd,imm4m1
   15612      addb rbd,addr(rs)       comb addr(rd)           decb addr(rd),imm4m1
   15613      addb rbd,imm8           comb rbd                decb addr,imm4m1
   15614      addb rbd,rbs            comflg flags            decb rbd,imm4m1
   15615      addl rrd,@rs            cp @rd,imm16            di i2
   15616      addl rrd,addr           cp addr(rd),imm16       div rrd,@rs
   15617      addl rrd,addr(rs)       cp addr,imm16           div rrd,addr
   15618      addl rrd,imm32          cp rd,@rs               div rrd,addr(rs)
   15619      addl rrd,rrs            cp rd,addr              div rrd,imm16
   15620      and rd,@rs              cp rd,addr(rs)          div rrd,rs
   15621      and rd,addr             cp rd,imm16             divl rqd,@rs
   15622      and rd,addr(rs)         cp rd,rs                divl rqd,addr
   15623      and rd,imm16            cpb @rd,imm8            divl rqd,addr(rs)
   15624      and rd,rs               cpb addr(rd),imm8       divl rqd,imm32
   15625      andb rbd,@rs            cpb addr,imm8           divl rqd,rrs
   15626      andb rbd,addr           cpb rbd,@rs             djnz rd,disp7
   15627      andb rbd,addr(rs)       cpb rbd,addr            ei i2
   15628      andb rbd,imm8           cpb rbd,addr(rs)        ex rd,@rs
   15629      andb rbd,rbs            cpb rbd,imm8            ex rd,addr
   15630      bit @rd,imm4            cpb rbd,rbs             ex rd,addr(rs)
   15631      bit addr(rd),imm4       cpd rd,@rs,rr,cc        ex rd,rs
   15632      bit addr,imm4           cpdb rbd,@rs,rr,cc      exb rbd,@rs
   15633      bit rd,imm4             cpdr rd,@rs,rr,cc       exb rbd,addr
   15634      bit rd,rs               cpdrb rbd,@rs,rr,cc     exb rbd,addr(rs)
   15635      bitb @rd,imm4           cpi rd,@rs,rr,cc        exb rbd,rbs
   15636      bitb addr(rd),imm4      cpib rbd,@rs,rr,cc      ext0e imm8
   15637      bitb addr,imm4          cpir rd,@rs,rr,cc       ext0f imm8
   15638      bitb rbd,imm4           cpirb rbd,@rs,rr,cc     ext8e imm8
   15639      bitb rbd,rs             cpl rrd,@rs             ext8f imm8
   15640      bpt                     cpl rrd,addr            exts rrd
   15641      call @rd                cpl rrd,addr(rs)        extsb rd
   15642      call addr               cpl rrd,imm32           extsl rqd
   15643      call addr(rd)           cpl rrd,rrs             halt
   15644      calr disp12             cpsd @rd,@rs,rr,cc      in rd,@rs
   15645      clr @rd                 cpsdb @rd,@rs,rr,cc     in rd,imm16
   15646      clr addr                cpsdr @rd,@rs,rr,cc     inb rbd,@rs
   15647      clr addr(rd)            cpsdrb @rd,@rs,rr,cc    inb rbd,imm16
   15648      clr rd                  cpsi @rd,@rs,rr,cc      inc @rd,imm4m1
   15649      clrb @rd                cpsib @rd,@rs,rr,cc     inc addr(rd),imm4m1
   15650      inc addr,imm4m1         ldb rbd,rs(rx)          mult rrd,addr(rs)
   15651      inc rd,imm4m1           ldb rd(imm16),rbs       mult rrd,imm16
   15652      incb @rd,imm4m1         ldb rd(rx),rbs          mult rrd,rs
   15653      incb addr(rd),imm4m1    ldctl ctrl,rs           multl rqd,@rs
   15654      incb addr,imm4m1        ldctl rd,ctrl           multl rqd,addr
   15655      incb rbd,imm4m1         ldd @rs,@rd,rr          multl rqd,addr(rs)
   15656      ind @rd,@rs,ra          lddb @rs,@rd,rr         multl rqd,imm32
   15657      indb @rd,@rs,rba        lddr @rs,@rd,rr         multl rqd,rrs
   15658      inib @rd,@rs,ra         lddrb @rs,@rd,rr        neg @rd
   15659      inibr @rd,@rs,ra        ldi @rd,@rs,rr          neg addr
   15660      iret                    ldib @rd,@rs,rr         neg addr(rd)
   15661      jp cc,@rd               ldir @rd,@rs,rr         neg rd
   15662      jp cc,addr              ldirb @rd,@rs,rr        negb @rd
   15663      jp cc,addr(rd)          ldk rd,imm4             negb addr
   15664      jr cc,disp8             ldl @rd,rrs             negb addr(rd)
   15665      ld @rd,imm16            ldl addr(rd),rrs        negb rbd
   15666      ld @rd,rs               ldl addr,rrs            nop
   15667      ld addr(rd),imm16       ldl rd(imm16),rrs       or rd,@rs
   15668      ld addr(rd),rs          ldl rd(rx),rrs          or rd,addr
   15669      ld addr,imm16           ldl rrd,@rs             or rd,addr(rs)
   15670      ld addr,rs              ldl rrd,addr            or rd,imm16
   15671      ld rd(imm16),rs         ldl rrd,addr(rs)        or rd,rs
   15672      ld rd(rx),rs            ldl rrd,imm32           orb rbd,@rs
   15673      ld rd,@rs               ldl rrd,rrs             orb rbd,addr
   15674      ld rd,addr              ldl rrd,rs(imm16)       orb rbd,addr(rs)
   15675      ld rd,addr(rs)          ldl rrd,rs(rx)          orb rbd,imm8
   15676      ld rd,imm16             ldm @rd,rs,n            orb rbd,rbs
   15677      ld rd,rs                ldm addr(rd),rs,n       out @rd,rs
   15678      ld rd,rs(imm16)         ldm addr,rs,n           out imm16,rs
   15679      ld rd,rs(rx)            ldm rd,@rs,n            outb @rd,rbs
   15680      lda rd,addr             ldm rd,addr(rs),n       outb imm16,rbs
   15681      lda rd,addr(rs)         ldm rd,addr,n           outd @rd,@rs,ra
   15682      lda rd,rs(imm16)        ldps @rs                outdb @rd,@rs,rba
   15683      lda rd,rs(rx)           ldps addr               outib @rd,@rs,ra
   15684      ldar rd,disp16          ldps addr(rs)           outibr @rd,@rs,ra
   15685      ldb @rd,imm8            ldr disp16,rs           pop @rd,@rs
   15686      ldb @rd,rbs             ldr rd,disp16           pop addr(rd),@rs
   15687      ldb addr(rd),imm8       ldrb disp16,rbs         pop addr,@rs
   15688      ldb addr(rd),rbs        ldrb rbd,disp16         pop rd,@rs
   15689      ldb addr,imm8           ldrl disp16,rrs         popl @rd,@rs
   15690      ldb addr,rbs            ldrl rrd,disp16         popl addr(rd),@rs
   15691      ldb rbd,@rs             mbit                    popl addr,@rs
   15692      ldb rbd,addr            mreq rd                 popl rrd,@rs
   15693      ldb rbd,addr(rs)        mres                    push @rd,@rs
   15694      ldb rbd,imm8            mset                    push @rd,addr
   15695      ldb rbd,rbs             mult rrd,@rs            push @rd,addr(rs)
   15696      ldb rbd,rs(imm16)       mult rrd,addr           push @rd,imm16
   15697      push @rd,rs             set addr,imm4           subl rrd,imm32
   15698      pushl @rd,@rs           set rd,imm4             subl rrd,rrs
   15699      pushl @rd,addr          set rd,rs               tcc cc,rd
   15700      pushl @rd,addr(rs)      setb @rd,imm4           tccb cc,rbd
   15701      pushl @rd,rrs           setb addr(rd),imm4      test @rd
   15702      res @rd,imm4            setb addr,imm4          test addr
   15703      res addr(rd),imm4       setb rbd,imm4           test addr(rd)
   15704      res addr,imm4           setb rbd,rs             test rd
   15705      res rd,imm4             setflg imm4             testb @rd
   15706      res rd,rs               sinb rbd,imm16          testb addr
   15707      resb @rd,imm4           sinb rd,imm16           testb addr(rd)
   15708      resb addr(rd),imm4      sind @rd,@rs,ra         testb rbd
   15709      resb addr,imm4          sindb @rd,@rs,rba       testl @rd
   15710      resb rbd,imm4           sinib @rd,@rs,ra        testl addr
   15711      resb rbd,rs             sinibr @rd,@rs,ra       testl addr(rd)
   15712      resflg imm4             sla rd,imm8             testl rrd
   15713      ret cc                  slab rbd,imm8           trdb @rd,@rs,rba
   15714      rl rd,imm1or2           slal rrd,imm8           trdrb @rd,@rs,rba
   15715      rlb rbd,imm1or2         sll rd,imm8             trib @rd,@rs,rbr
   15716      rlc rd,imm1or2          sllb rbd,imm8           trirb @rd,@rs,rbr
   15717      rlcb rbd,imm1or2        slll rrd,imm8           trtdrb @ra,@rb,rbr
   15718      rldb rbb,rba            sout imm16,rs           trtib @ra,@rb,rr
   15719      rr rd,imm1or2           soutb imm16,rbs         trtirb @ra,@rb,rbr
   15720      rrb rbd,imm1or2         soutd @rd,@rs,ra        trtrb @ra,@rb,rbr
   15721      rrc rd,imm1or2          soutdb @rd,@rs,rba      tset @rd
   15722      rrcb rbd,imm1or2        soutib @rd,@rs,ra       tset addr
   15723      rrdb rbb,rba            soutibr @rd,@rs,ra      tset addr(rd)
   15724      rsvd36                  sra rd,imm8             tset rd
   15725      rsvd38                  srab rbd,imm8           tsetb @rd
   15726      rsvd78                  sral rrd,imm8           tsetb addr
   15727      rsvd7e                  srl rd,imm8             tsetb addr(rd)
   15728      rsvd9d                  srlb rbd,imm8           tsetb rbd
   15729      rsvd9f                  srll rrd,imm8           xor rd,@rs
   15730      rsvdb9                  sub rd,@rs              xor rd,addr
   15731      rsvdbf                  sub rd,addr             xor rd,addr(rs)
   15732      sbc rd,rs               sub rd,addr(rs)         xor rd,imm16
   15733      sbcb rbd,rbs            sub rd,imm16            xor rd,rs
   15734      sc imm8                 sub rd,rs               xorb rbd,@rs
   15735      sda rd,rs               subb rbd,@rs            xorb rbd,addr
   15736      sdab rbd,rs             subb rbd,addr           xorb rbd,addr(rs)
   15737      sdal rrd,rs             subb rbd,addr(rs)       xorb rbd,imm8
   15738      sdl rd,rs               subb rbd,imm8           xorb rbd,rbs
   15739      sdlb rbd,rs             subb rbd,rbs            xorb rbd,rbs
   15740      sdll rrd,rs             subl rrd,@rs
   15741      set @rd,imm4            subl rrd,addr
   15742      set addr(rd),imm4       subl rrd,addr(rs)
   15743 
   15744 
   15745 File: as.info,  Node: Vax-Dependent,  Prev: Z8000-Dependent,  Up: Machine Dependencies
   15746 
   15747 9.34 VAX Dependent Features
   15748 ===========================
   15749 
   15750 * Menu:
   15751 
   15752 * VAX-Opts::                    VAX Command-Line Options
   15753 * VAX-float::                   VAX Floating Point
   15754 * VAX-directives::              Vax Machine Directives
   15755 * VAX-opcodes::                 VAX Opcodes
   15756 * VAX-branch::                  VAX Branch Improvement
   15757 * VAX-operands::                VAX Operands
   15758 * VAX-no::                      Not Supported on VAX
   15759 
   15760 
   15761 File: as.info,  Node: VAX-Opts,  Next: VAX-float,  Up: Vax-Dependent
   15762 
   15763 9.34.1 VAX Command-Line Options
   15764 -------------------------------
   15765 
   15766 The Vax version of `as' accepts any of the following options, gives a
   15767 warning message that the option was ignored and proceeds.  These
   15768 options are for compatibility with scripts designed for other people's
   15769 assemblers.
   15770 
   15771 ``-D' (Debug)'
   15772 ``-S' (Symbol Table)'
   15773 ``-T' (Token Trace)'
   15774      These are obsolete options used to debug old assemblers.
   15775 
   15776 ``-d' (Displacement size for JUMPs)'
   15777      This option expects a number following the `-d'.  Like options
   15778      that expect filenames, the number may immediately follow the `-d'
   15779      (old standard) or constitute the whole of the command line
   15780      argument that follows `-d' (GNU standard).
   15781 
   15782 ``-V' (Virtualize Interpass Temporary File)'
   15783      Some other assemblers use a temporary file.  This option commanded
   15784      them to keep the information in active memory rather than in a
   15785      disk file.  `as' always does this, so this option is redundant.
   15786 
   15787 ``-J' (JUMPify Longer Branches)'
   15788      Many 32-bit computers permit a variety of branch instructions to
   15789      do the same job.  Some of these instructions are short (and fast)
   15790      but have a limited range; others are long (and slow) but can
   15791      branch anywhere in virtual memory.  Often there are 3 flavors of
   15792      branch: short, medium and long.  Some other assemblers would emit
   15793      short and medium branches, unless told by this option to emit
   15794      short and long branches.
   15795 
   15796 ``-t' (Temporary File Directory)'
   15797      Some other assemblers may use a temporary file, and this option
   15798      takes a filename being the directory to site the temporary file.
   15799      Since `as' does not use a temporary disk file, this option makes
   15800      no difference.  `-t' needs exactly one filename.
   15801 
   15802    The Vax version of the assembler accepts additional options when
   15803 compiled for VMS:
   15804 
   15805 `-h N'
   15806      External symbol or section (used for global variables) names are
   15807      not case sensitive on VAX/VMS and always mapped to upper case.
   15808      This is contrary to the C language definition which explicitly
   15809      distinguishes upper and lower case.  To implement a standard
   15810      conforming C compiler, names must be changed (mapped) to preserve
   15811      the case information.  The default mapping is to convert all lower
   15812      case characters to uppercase and adding an underscore followed by
   15813      a 6 digit hex value, representing a 24 digit binary value.  The
   15814      one digits in the binary value represent which characters are
   15815      uppercase in the original symbol name.
   15816 
   15817      The `-h N' option determines how we map names.  This takes several
   15818      values.  No `-h' switch at all allows case hacking as described
   15819      above.  A value of zero (`-h0') implies names should be upper
   15820      case, and inhibits the case hack.  A value of 2 (`-h2') implies
   15821      names should be all lower case, with no case hack.  A value of 3
   15822      (`-h3') implies that case should be preserved.  The value 1 is
   15823      unused.  The `-H' option directs `as' to display every mapped
   15824      symbol during assembly.
   15825 
   15826      Symbols whose names include a dollar sign `$' are exceptions to the
   15827      general name mapping.  These symbols are normally only used to
   15828      reference VMS library names.  Such symbols are always mapped to
   15829      upper case.
   15830 
   15831 `-+'
   15832      The `-+' option causes `as' to truncate any symbol name larger
   15833      than 31 characters.  The `-+' option also prevents some code
   15834      following the `_main' symbol normally added to make the object
   15835      file compatible with Vax-11 "C".
   15836 
   15837 `-1'
   15838      This option is ignored for backward compatibility with `as'
   15839      version 1.x.
   15840 
   15841 `-H'
   15842      The `-H' option causes `as' to print every symbol which was
   15843      changed by case mapping.
   15844 
   15845 
   15846 File: as.info,  Node: VAX-float,  Next: VAX-directives,  Prev: VAX-Opts,  Up: Vax-Dependent
   15847 
   15848 9.34.2 VAX Floating Point
   15849 -------------------------
   15850 
   15851 Conversion of flonums to floating point is correct, and compatible with
   15852 previous assemblers.  Rounding is towards zero if the remainder is
   15853 exactly half the least significant bit.
   15854 
   15855    `D', `F', `G' and `H' floating point formats are understood.
   15856 
   15857    Immediate floating literals (_e.g._ `S`$6.9') are rendered
   15858 correctly.  Again, rounding is towards zero in the boundary case.
   15859 
   15860    The `.float' directive produces `f' format numbers.  The `.double'
   15861 directive produces `d' format numbers.
   15862 
   15863 
   15864 File: as.info,  Node: VAX-directives,  Next: VAX-opcodes,  Prev: VAX-float,  Up: Vax-Dependent
   15865 
   15866 9.34.3 Vax Machine Directives
   15867 -----------------------------
   15868 
   15869 The Vax version of the assembler supports four directives for
   15870 generating Vax floating point constants.  They are described in the
   15871 table below.
   15872 
   15873 `.dfloat'
   15874      This expects zero or more flonums, separated by commas, and
   15875      assembles Vax `d' format 64-bit floating point constants.
   15876 
   15877 `.ffloat'
   15878      This expects zero or more flonums, separated by commas, and
   15879      assembles Vax `f' format 32-bit floating point constants.
   15880 
   15881 `.gfloat'
   15882      This expects zero or more flonums, separated by commas, and
   15883      assembles Vax `g' format 64-bit floating point constants.
   15884 
   15885 `.hfloat'
   15886      This expects zero or more flonums, separated by commas, and
   15887      assembles Vax `h' format 128-bit floating point constants.
   15888 
   15889 
   15890 
   15891 File: as.info,  Node: VAX-opcodes,  Next: VAX-branch,  Prev: VAX-directives,  Up: Vax-Dependent
   15892 
   15893 9.34.4 VAX Opcodes
   15894 ------------------
   15895 
   15896 All DEC mnemonics are supported.  Beware that `case...' instructions
   15897 have exactly 3 operands.  The dispatch table that follows the `case...'
   15898 instruction should be made with `.word' statements.  This is compatible
   15899 with all unix assemblers we know of.
   15900 
   15901 
   15902 File: as.info,  Node: VAX-branch,  Next: VAX-operands,  Prev: VAX-opcodes,  Up: Vax-Dependent
   15903 
   15904 9.34.5 VAX Branch Improvement
   15905 -----------------------------
   15906 
   15907 Certain pseudo opcodes are permitted.  They are for branch
   15908 instructions.  They expand to the shortest branch instruction that
   15909 reaches the target.  Generally these mnemonics are made by substituting
   15910 `j' for `b' at the start of a DEC mnemonic.  This feature is included
   15911 both for compatibility and to help compilers.  If you do not need this
   15912 feature, avoid these opcodes.  Here are the mnemonics, and the code
   15913 they can expand into.
   15914 
   15915 `jbsb'
   15916      `Jsb' is already an instruction mnemonic, so we chose `jbsb'.
   15917     (byte displacement)
   15918           `bsbb ...'
   15919 
   15920     (word displacement)
   15921           `bsbw ...'
   15922 
   15923     (long displacement)
   15924           `jsb ...'
   15925 
   15926 `jbr'
   15927 `jr'
   15928      Unconditional branch.
   15929     (byte displacement)
   15930           `brb ...'
   15931 
   15932     (word displacement)
   15933           `brw ...'
   15934 
   15935     (long displacement)
   15936           `jmp ...'
   15937 
   15938 `jCOND'
   15939      COND may be any one of the conditional branches `neq', `nequ',
   15940      `eql', `eqlu', `gtr', `geq', `lss', `gtru', `lequ', `vc', `vs',
   15941      `gequ', `cc', `lssu', `cs'.  COND may also be one of the bit tests
   15942      `bs', `bc', `bss', `bcs', `bsc', `bcc', `bssi', `bcci', `lbs',
   15943      `lbc'.  NOTCOND is the opposite condition to COND.
   15944     (byte displacement)
   15945           `bCOND ...'
   15946 
   15947     (word displacement)
   15948           `bNOTCOND foo ; brw ... ; foo:'
   15949 
   15950     (long displacement)
   15951           `bNOTCOND foo ; jmp ... ; foo:'
   15952 
   15953 `jacbX'
   15954      X may be one of `b d f g h l w'.
   15955     (word displacement)
   15956           `OPCODE ...'
   15957 
   15958     (long displacement)
   15959                OPCODE ..., foo ;
   15960                brb bar ;
   15961                foo: jmp ... ;
   15962                bar:
   15963 
   15964 `jaobYYY'
   15965      YYY may be one of `lss leq'.
   15966 
   15967 `jsobZZZ'
   15968      ZZZ may be one of `geq gtr'.
   15969     (byte displacement)
   15970           `OPCODE ...'
   15971 
   15972     (word displacement)
   15973                OPCODE ..., foo ;
   15974                brb bar ;
   15975                foo: brw DESTINATION ;
   15976                bar:
   15977 
   15978     (long displacement)
   15979                OPCODE ..., foo ;
   15980                brb bar ;
   15981                foo: jmp DESTINATION ;
   15982                bar:
   15983 
   15984 `aobleq'
   15985 `aoblss'
   15986 `sobgeq'
   15987 `sobgtr'
   15988 
   15989     (byte displacement)
   15990           `OPCODE ...'
   15991 
   15992     (word displacement)
   15993                OPCODE ..., foo ;
   15994                brb bar ;
   15995                foo: brw DESTINATION ;
   15996                bar:
   15997 
   15998     (long displacement)
   15999                OPCODE ..., foo ;
   16000                brb bar ;
   16001                foo: jmp DESTINATION ;
   16002                bar:
   16003 
   16004 
   16005 File: as.info,  Node: VAX-operands,  Next: VAX-no,  Prev: VAX-branch,  Up: Vax-Dependent
   16006 
   16007 9.34.6 VAX Operands
   16008 -------------------
   16009 
   16010 The immediate character is `$' for Unix compatibility, not `#' as DEC
   16011 writes it.
   16012 
   16013    The indirect character is `*' for Unix compatibility, not `@' as DEC
   16014 writes it.
   16015 
   16016    The displacement sizing character is ``' (an accent grave) for Unix
   16017 compatibility, not `^' as DEC writes it.  The letter preceding ``' may
   16018 have either case.  `G' is not understood, but all other letters (`b i l
   16019 s w') are understood.
   16020 
   16021    Register names understood are `r0 r1 r2 ... r15 ap fp sp pc'.  Upper
   16022 and lower case letters are equivalent.
   16023 
   16024    For instance
   16025      tstb *w`$4(r5)
   16026 
   16027    Any expression is permitted in an operand.  Operands are comma
   16028 separated.
   16029 
   16030 
   16031 File: as.info,  Node: VAX-no,  Prev: VAX-operands,  Up: Vax-Dependent
   16032 
   16033 9.34.7 Not Supported on VAX
   16034 ---------------------------
   16035 
   16036 Vax bit fields can not be assembled with `as'.  Someone can add the
   16037 required code if they really need it.
   16038 
   16039 
   16040 File: as.info,  Node: V850-Dependent,  Next: Xtensa-Dependent,  Prev: TIC54X-Dependent,  Up: Machine Dependencies
   16041 
   16042 9.35 v850 Dependent Features
   16043 ============================
   16044 
   16045 * Menu:
   16046 
   16047 * V850 Options::              Options
   16048 * V850 Syntax::               Syntax
   16049 * V850 Floating Point::       Floating Point
   16050 * V850 Directives::           V850 Machine Directives
   16051 * V850 Opcodes::              Opcodes
   16052 
   16053 
   16054 File: as.info,  Node: V850 Options,  Next: V850 Syntax,  Up: V850-Dependent
   16055 
   16056 9.35.1 Options
   16057 --------------
   16058 
   16059 `as' supports the following additional command-line options for the
   16060 V850 processor family:
   16061 
   16062 `-wsigned_overflow'
   16063      Causes warnings to be produced when signed immediate values
   16064      overflow the space available for then within their opcodes.  By
   16065      default this option is disabled as it is possible to receive
   16066      spurious warnings due to using exact bit patterns as immediate
   16067      constants.
   16068 
   16069 `-wunsigned_overflow'
   16070      Causes warnings to be produced when unsigned immediate values
   16071      overflow the space available for then within their opcodes.  By
   16072      default this option is disabled as it is possible to receive
   16073      spurious warnings due to using exact bit patterns as immediate
   16074      constants.
   16075 
   16076 `-mv850'
   16077      Specifies that the assembled code should be marked as being
   16078      targeted at the V850 processor.  This allows the linker to detect
   16079      attempts to link such code with code assembled for other
   16080      processors.
   16081 
   16082 `-mv850e'
   16083      Specifies that the assembled code should be marked as being
   16084      targeted at the V850E processor.  This allows the linker to detect
   16085      attempts to link such code with code assembled for other
   16086      processors.
   16087 
   16088 `-mv850e1'
   16089      Specifies that the assembled code should be marked as being
   16090      targeted at the V850E1 processor.  This allows the linker to
   16091      detect attempts to link such code with code assembled for other
   16092      processors.
   16093 
   16094 `-mv850any'
   16095      Specifies that the assembled code should be marked as being
   16096      targeted at the V850 processor but support instructions that are
   16097      specific to the extended variants of the process.  This allows the
   16098      production of binaries that contain target specific code, but
   16099      which are also intended to be used in a generic fashion.  For
   16100      example libgcc.a contains generic routines used by the code
   16101      produced by GCC for all versions of the v850 architecture,
   16102      together with support routines only used by the V850E architecture.
   16103 
   16104 `-mrelax'
   16105      Enables relaxation.  This allows the .longcall and .longjump pseudo
   16106      ops to be used in the assembler source code.  These ops label
   16107      sections of code which are either a long function call or a long
   16108      branch.  The assembler will then flag these sections of code and
   16109      the linker will attempt to relax them.
   16110 
   16111 
   16112 
   16113 File: as.info,  Node: V850 Syntax,  Next: V850 Floating Point,  Prev: V850 Options,  Up: V850-Dependent
   16114 
   16115 9.35.2 Syntax
   16116 -------------
   16117 
   16118 * Menu:
   16119 
   16120 * V850-Chars::                Special Characters
   16121 * V850-Regs::                 Register Names
   16122 
   16123 
   16124 File: as.info,  Node: V850-Chars,  Next: V850-Regs,  Up: V850 Syntax
   16125 
   16126 9.35.2.1 Special Characters
   16127 ...........................
   16128 
   16129 `#' is the line comment character.
   16130 
   16131 
   16132 File: as.info,  Node: V850-Regs,  Prev: V850-Chars,  Up: V850 Syntax
   16133 
   16134 9.35.2.2 Register Names
   16135 .......................
   16136 
   16137 `as' supports the following names for registers:
   16138 `general register 0'
   16139      r0, zero
   16140 
   16141 `general register 1'
   16142      r1
   16143 
   16144 `general register 2'
   16145      r2, hp 
   16146 
   16147 `general register 3'
   16148      r3, sp 
   16149 
   16150 `general register 4'
   16151      r4, gp 
   16152 
   16153 `general register 5'
   16154      r5, tp
   16155 
   16156 `general register 6'
   16157      r6
   16158 
   16159 `general register 7'
   16160      r7
   16161 
   16162 `general register 8'
   16163      r8
   16164 
   16165 `general register 9'
   16166      r9
   16167 
   16168 `general register 10'
   16169      r10
   16170 
   16171 `general register 11'
   16172      r11
   16173 
   16174 `general register 12'
   16175      r12
   16176 
   16177 `general register 13'
   16178      r13
   16179 
   16180 `general register 14'
   16181      r14
   16182 
   16183 `general register 15'
   16184      r15
   16185 
   16186 `general register 16'
   16187      r16
   16188 
   16189 `general register 17'
   16190      r17
   16191 
   16192 `general register 18'
   16193      r18
   16194 
   16195 `general register 19'
   16196      r19
   16197 
   16198 `general register 20'
   16199      r20
   16200 
   16201 `general register 21'
   16202      r21
   16203 
   16204 `general register 22'
   16205      r22
   16206 
   16207 `general register 23'
   16208      r23
   16209 
   16210 `general register 24'
   16211      r24
   16212 
   16213 `general register 25'
   16214      r25
   16215 
   16216 `general register 26'
   16217      r26
   16218 
   16219 `general register 27'
   16220      r27
   16221 
   16222 `general register 28'
   16223      r28
   16224 
   16225 `general register 29'
   16226      r29 
   16227 
   16228 `general register 30'
   16229      r30, ep 
   16230 
   16231 `general register 31'
   16232      r31, lp 
   16233 
   16234 `system register 0'
   16235      eipc 
   16236 
   16237 `system register 1'
   16238      eipsw 
   16239 
   16240 `system register 2'
   16241      fepc 
   16242 
   16243 `system register 3'
   16244      fepsw 
   16245 
   16246 `system register 4'
   16247      ecr 
   16248 
   16249 `system register 5'
   16250      psw 
   16251 
   16252 `system register 16'
   16253      ctpc 
   16254 
   16255 `system register 17'
   16256      ctpsw 
   16257 
   16258 `system register 18'
   16259      dbpc 
   16260 
   16261 `system register 19'
   16262      dbpsw 
   16263 
   16264 `system register 20'
   16265      ctbp
   16266 
   16267 
   16268 File: as.info,  Node: V850 Floating Point,  Next: V850 Directives,  Prev: V850 Syntax,  Up: V850-Dependent
   16269 
   16270 9.35.3 Floating Point
   16271 ---------------------
   16272 
   16273 The V850 family uses IEEE floating-point numbers.
   16274 
   16275 
   16276 File: as.info,  Node: V850 Directives,  Next: V850 Opcodes,  Prev: V850 Floating Point,  Up: V850-Dependent
   16277 
   16278 9.35.4 V850 Machine Directives
   16279 ------------------------------
   16280 
   16281 `.offset <EXPRESSION>'
   16282      Moves the offset into the current section to the specified amount.
   16283 
   16284 `.section "name", <type>'
   16285      This is an extension to the standard .section directive.  It sets
   16286      the current section to be <type> and creates an alias for this
   16287      section called "name".
   16288 
   16289 `.v850'
   16290      Specifies that the assembled code should be marked as being
   16291      targeted at the V850 processor.  This allows the linker to detect
   16292      attempts to link such code with code assembled for other
   16293      processors.
   16294 
   16295 `.v850e'
   16296      Specifies that the assembled code should be marked as being
   16297      targeted at the V850E processor.  This allows the linker to detect
   16298      attempts to link such code with code assembled for other
   16299      processors.
   16300 
   16301 `.v850e1'
   16302      Specifies that the assembled code should be marked as being
   16303      targeted at the V850E1 processor.  This allows the linker to
   16304      detect attempts to link such code with code assembled for other
   16305      processors.
   16306 
   16307 
   16308 
   16309 File: as.info,  Node: V850 Opcodes,  Prev: V850 Directives,  Up: V850-Dependent
   16310 
   16311 9.35.5 Opcodes
   16312 --------------
   16313 
   16314 `as' implements all the standard V850 opcodes.
   16315 
   16316    `as' also implements the following pseudo ops:
   16317 
   16318 `hi0()'
   16319      Computes the higher 16 bits of the given expression and stores it
   16320      into the immediate operand field of the given instruction.  For
   16321      example:
   16322 
   16323      `mulhi hi0(here - there), r5, r6'
   16324 
   16325      computes the difference between the address of labels 'here' and
   16326      'there', takes the upper 16 bits of this difference, shifts it
   16327      down 16 bits and then multiplies it by the lower 16 bits in
   16328      register 5, putting the result into register 6.
   16329 
   16330 `lo()'
   16331      Computes the lower 16 bits of the given expression and stores it
   16332      into the immediate operand field of the given instruction.  For
   16333      example:
   16334 
   16335      `addi lo(here - there), r5, r6'
   16336 
   16337      computes the difference between the address of labels 'here' and
   16338      'there', takes the lower 16 bits of this difference and adds it to
   16339      register 5, putting the result into register 6.
   16340 
   16341 `hi()'
   16342      Computes the higher 16 bits of the given expression and then adds
   16343      the value of the most significant bit of the lower 16 bits of the
   16344      expression and stores the result into the immediate operand field
   16345      of the given instruction.  For example the following code can be
   16346      used to compute the address of the label 'here' and store it into
   16347      register 6:
   16348 
   16349      `movhi hi(here), r0, r6'     `movea lo(here), r6, r6'
   16350 
   16351      The reason for this special behaviour is that movea performs a sign
   16352      extension on its immediate operand.  So for example if the address
   16353      of 'here' was 0xFFFFFFFF then without the special behaviour of the
   16354      hi() pseudo-op the movhi instruction would put 0xFFFF0000 into r6,
   16355      then the movea instruction would takes its immediate operand,
   16356      0xFFFF, sign extend it to 32 bits, 0xFFFFFFFF, and then add it
   16357      into r6 giving 0xFFFEFFFF which is wrong (the fifth nibble is E).
   16358      With the hi() pseudo op adding in the top bit of the lo() pseudo
   16359      op, the movhi instruction actually stores 0 into r6 (0xFFFF + 1 =
   16360      0x0000), so that the movea instruction stores 0xFFFFFFFF into r6 -
   16361      the right value.
   16362 
   16363 `hilo()'
   16364      Computes the 32 bit value of the given expression and stores it
   16365      into the immediate operand field of the given instruction (which
   16366      must be a mov instruction).  For example:
   16367 
   16368      `mov hilo(here), r6'
   16369 
   16370      computes the absolute address of label 'here' and puts the result
   16371      into register 6.
   16372 
   16373 `sdaoff()'
   16374      Computes the offset of the named variable from the start of the
   16375      Small Data Area (whoes address is held in register 4, the GP
   16376      register) and stores the result as a 16 bit signed value in the
   16377      immediate operand field of the given instruction.  For example:
   16378 
   16379      `ld.w sdaoff(_a_variable)[gp],r6'
   16380 
   16381      loads the contents of the location pointed to by the label
   16382      '_a_variable' into register 6, provided that the label is located
   16383      somewhere within +/- 32K of the address held in the GP register.
   16384      [Note the linker assumes that the GP register contains a fixed
   16385      address set to the address of the label called '__gp'.  This can
   16386      either be set up automatically by the linker, or specifically set
   16387      by using the `--defsym __gp=<value>' command line option].
   16388 
   16389 `tdaoff()'
   16390      Computes the offset of the named variable from the start of the
   16391      Tiny Data Area (whoes address is held in register 30, the EP
   16392      register) and stores the result as a 4,5, 7 or 8 bit unsigned
   16393      value in the immediate operand field of the given instruction.
   16394      For example:
   16395 
   16396      `sld.w tdaoff(_a_variable)[ep],r6'
   16397 
   16398      loads the contents of the location pointed to by the label
   16399      '_a_variable' into register 6, provided that the label is located
   16400      somewhere within +256 bytes of the address held in the EP
   16401      register.  [Note the linker assumes that the EP register contains
   16402      a fixed address set to the address of the label called '__ep'.
   16403      This can either be set up automatically by the linker, or
   16404      specifically set by using the `--defsym __ep=<value>' command line
   16405      option].
   16406 
   16407 `zdaoff()'
   16408      Computes the offset of the named variable from address 0 and
   16409      stores the result as a 16 bit signed value in the immediate
   16410      operand field of the given instruction.  For example:
   16411 
   16412      `movea zdaoff(_a_variable),zero,r6'
   16413 
   16414      puts the address of the label '_a_variable' into register 6,
   16415      assuming that the label is somewhere within the first 32K of
   16416      memory.  (Strictly speaking it also possible to access the last
   16417      32K of memory as well, as the offsets are signed).
   16418 
   16419 `ctoff()'
   16420      Computes the offset of the named variable from the start of the
   16421      Call Table Area (whoes address is helg in system register 20, the
   16422      CTBP register) and stores the result a 6 or 16 bit unsigned value
   16423      in the immediate field of then given instruction or piece of data.
   16424      For example:
   16425 
   16426      `callt ctoff(table_func1)'
   16427 
   16428      will put the call the function whoes address is held in the call
   16429      table at the location labeled 'table_func1'.
   16430 
   16431 `.longcall `name''
   16432      Indicates that the following sequence of instructions is a long
   16433      call to function `name'.  The linker will attempt to shorten this
   16434      call sequence if `name' is within a 22bit offset of the call.  Only
   16435      valid if the `-mrelax' command line switch has been enabled.
   16436 
   16437 `.longjump `name''
   16438      Indicates that the following sequence of instructions is a long
   16439      jump to label `name'.  The linker will attempt to shorten this code
   16440      sequence if `name' is within a 22bit offset of the jump.  Only
   16441      valid if the `-mrelax' command line switch has been enabled.
   16442 
   16443 
   16444    For information on the V850 instruction set, see `V850 Family
   16445 32-/16-Bit single-Chip Microcontroller Architecture Manual' from NEC.
   16446 Ltd.
   16447 
   16448 
   16449 File: as.info,  Node: Xtensa-Dependent,  Next: Z80-Dependent,  Prev: V850-Dependent,  Up: Machine Dependencies
   16450 
   16451 9.36 Xtensa Dependent Features
   16452 ==============================
   16453 
   16454    This chapter covers features of the GNU assembler that are specific
   16455 to the Xtensa architecture.  For details about the Xtensa instruction
   16456 set, please consult the `Xtensa Instruction Set Architecture (ISA)
   16457 Reference Manual'.
   16458 
   16459 * Menu:
   16460 
   16461 * Xtensa Options::              Command-line Options.
   16462 * Xtensa Syntax::               Assembler Syntax for Xtensa Processors.
   16463 * Xtensa Optimizations::        Assembler Optimizations.
   16464 * Xtensa Relaxation::           Other Automatic Transformations.
   16465 * Xtensa Directives::           Directives for Xtensa Processors.
   16466 
   16467 
   16468 File: as.info,  Node: Xtensa Options,  Next: Xtensa Syntax,  Up: Xtensa-Dependent
   16469 
   16470 9.36.1 Command Line Options
   16471 ---------------------------
   16472 
   16473 The Xtensa version of the GNU assembler supports these special options:
   16474 
   16475 `--text-section-literals | --no-text-section-literals'
   16476      Control the treatment of literal pools.  The default is
   16477      `--no-text-section-literals', which places literals in separate
   16478      sections in the output file.  This allows the literal pool to be
   16479      placed in a data RAM/ROM.  With `--text-section-literals', the
   16480      literals are interspersed in the text section in order to keep
   16481      them as close as possible to their references.  This may be
   16482      necessary for large assembly files, where the literals would
   16483      otherwise be out of range of the `L32R' instructions in the text
   16484      section.  These options only affect literals referenced via
   16485      PC-relative `L32R' instructions; literals for absolute mode `L32R'
   16486      instructions are handled separately.  *Note literal: Literal
   16487      Directive.
   16488 
   16489 `--absolute-literals | --no-absolute-literals'
   16490      Indicate to the assembler whether `L32R' instructions use absolute
   16491      or PC-relative addressing.  If the processor includes the absolute
   16492      addressing option, the default is to use absolute `L32R'
   16493      relocations.  Otherwise, only the PC-relative `L32R' relocations
   16494      can be used.
   16495 
   16496 `--target-align | --no-target-align'
   16497      Enable or disable automatic alignment to reduce branch penalties
   16498      at some expense in code size.  *Note Automatic Instruction
   16499      Alignment: Xtensa Automatic Alignment.  This optimization is
   16500      enabled by default.  Note that the assembler will always align
   16501      instructions like `LOOP' that have fixed alignment requirements.
   16502 
   16503 `--longcalls | --no-longcalls'
   16504      Enable or disable transformation of call instructions to allow
   16505      calls across a greater range of addresses.  *Note Function Call
   16506      Relaxation: Xtensa Call Relaxation.  This option should be used
   16507      when call targets can potentially be out of range.  It may degrade
   16508      both code size and performance, but the linker can generally
   16509      optimize away the unnecessary overhead when a call ends up within
   16510      range.  The default is `--no-longcalls'.
   16511 
   16512 `--transform | --no-transform'
   16513      Enable or disable all assembler transformations of Xtensa
   16514      instructions, including both relaxation and optimization.  The
   16515      default is `--transform'; `--no-transform' should only be used in
   16516      the rare cases when the instructions must be exactly as specified
   16517      in the assembly source.  Using `--no-transform' causes out of range
   16518      instruction operands to be errors.
   16519 
   16520 `--rename-section OLDNAME=NEWNAME'
   16521      Rename the OLDNAME section to NEWNAME.  This option can be used
   16522      multiple times to rename multiple sections.
   16523 
   16524 
   16525 File: as.info,  Node: Xtensa Syntax,  Next: Xtensa Optimizations,  Prev: Xtensa Options,  Up: Xtensa-Dependent
   16526 
   16527 9.36.2 Assembler Syntax
   16528 -----------------------
   16529 
   16530 Block comments are delimited by `/*' and `*/'.  End of line comments
   16531 may be introduced with either `#' or `//'.
   16532 
   16533    Instructions consist of a leading opcode or macro name followed by
   16534 whitespace and an optional comma-separated list of operands:
   16535 
   16536      OPCODE [OPERAND, ...]
   16537 
   16538    Instructions must be separated by a newline or semicolon.
   16539 
   16540    FLIX instructions, which bundle multiple opcodes together in a single
   16541 instruction, are specified by enclosing the bundled opcodes inside
   16542 braces:
   16543 
   16544      {
   16545      [FORMAT]
   16546      OPCODE0 [OPERANDS]
   16547      OPCODE1 [OPERANDS]
   16548      OPCODE2 [OPERANDS]
   16549      ...
   16550      }
   16551 
   16552    The opcodes in a FLIX instruction are listed in the same order as the
   16553 corresponding instruction slots in the TIE format declaration.
   16554 Directives and labels are not allowed inside the braces of a FLIX
   16555 instruction.  A particular TIE format name can optionally be specified
   16556 immediately after the opening brace, but this is usually unnecessary.
   16557 The assembler will automatically search for a format that can encode the
   16558 specified opcodes, so the format name need only be specified in rare
   16559 cases where there is more than one applicable format and where it
   16560 matters which of those formats is used.  A FLIX instruction can also be
   16561 specified on a single line by separating the opcodes with semicolons:
   16562 
   16563      { [FORMAT;] OPCODE0 [OPERANDS]; OPCODE1 [OPERANDS]; OPCODE2 [OPERANDS]; ... }
   16564 
   16565    If an opcode can only be encoded in a FLIX instruction but is not
   16566 specified as part of a FLIX bundle, the assembler will choose the
   16567 smallest format where the opcode can be encoded and will fill unused
   16568 instruction slots with no-ops.
   16569 
   16570 * Menu:
   16571 
   16572 * Xtensa Opcodes::              Opcode Naming Conventions.
   16573 * Xtensa Registers::            Register Naming.
   16574 
   16575 
   16576 File: as.info,  Node: Xtensa Opcodes,  Next: Xtensa Registers,  Up: Xtensa Syntax
   16577 
   16578 9.36.2.1 Opcode Names
   16579 .....................
   16580 
   16581 See the `Xtensa Instruction Set Architecture (ISA) Reference Manual'
   16582 for a complete list of opcodes and descriptions of their semantics.
   16583 
   16584    If an opcode name is prefixed with an underscore character (`_'),
   16585 `as' will not transform that instruction in any way.  The underscore
   16586 prefix disables both optimization (*note Xtensa Optimizations: Xtensa
   16587 Optimizations.) and relaxation (*note Xtensa Relaxation: Xtensa
   16588 Relaxation.) for that particular instruction.  Only use the underscore
   16589 prefix when it is essential to select the exact opcode produced by the
   16590 assembler.  Using this feature unnecessarily makes the code less
   16591 efficient by disabling assembler optimization and less flexible by
   16592 disabling relaxation.
   16593 
   16594    Note that this special handling of underscore prefixes only applies
   16595 to Xtensa opcodes, not to either built-in macros or user-defined macros.
   16596 When an underscore prefix is used with a macro (e.g., `_MOV'), it
   16597 refers to a different macro.  The assembler generally provides built-in
   16598 macros both with and without the underscore prefix, where the underscore
   16599 versions behave as if the underscore carries through to the instructions
   16600 in the macros.  For example, `_MOV' may expand to `_MOV.N'.
   16601 
   16602    The underscore prefix only applies to individual instructions, not to
   16603 series of instructions.  For example, if a series of instructions have
   16604 underscore prefixes, the assembler will not transform the individual
   16605 instructions, but it may insert other instructions between them (e.g.,
   16606 to align a `LOOP' instruction).  To prevent the assembler from
   16607 modifying a series of instructions as a whole, use the `no-transform'
   16608 directive.  *Note transform: Transform Directive.
   16609 
   16610 
   16611 File: as.info,  Node: Xtensa Registers,  Prev: Xtensa Opcodes,  Up: Xtensa Syntax
   16612 
   16613 9.36.2.2 Register Names
   16614 .......................
   16615 
   16616 The assembly syntax for a register file entry is the "short" name for a
   16617 TIE register file followed by the index into that register file.  For
   16618 example, the general-purpose `AR' register file has a short name of
   16619 `a', so these registers are named `a0'...`a15'.  As a special feature,
   16620 `sp' is also supported as a synonym for `a1'.  Additional registers may
   16621 be added by processor configuration options and by designer-defined TIE
   16622 extensions.  An initial `$' character is optional in all register names.
   16623 
   16624 
   16625 File: as.info,  Node: Xtensa Optimizations,  Next: Xtensa Relaxation,  Prev: Xtensa Syntax,  Up: Xtensa-Dependent
   16626 
   16627 9.36.3 Xtensa Optimizations
   16628 ---------------------------
   16629 
   16630 The optimizations currently supported by `as' are generation of density
   16631 instructions where appropriate and automatic branch target alignment.
   16632 
   16633 * Menu:
   16634 
   16635 * Density Instructions::        Using Density Instructions.
   16636 * Xtensa Automatic Alignment::  Automatic Instruction Alignment.
   16637 
   16638 
   16639 File: as.info,  Node: Density Instructions,  Next: Xtensa Automatic Alignment,  Up: Xtensa Optimizations
   16640 
   16641 9.36.3.1 Using Density Instructions
   16642 ...................................
   16643 
   16644 The Xtensa instruction set has a code density option that provides
   16645 16-bit versions of some of the most commonly used opcodes.  Use of these
   16646 opcodes can significantly reduce code size.  When possible, the
   16647 assembler automatically translates instructions from the core Xtensa
   16648 instruction set into equivalent instructions from the Xtensa code
   16649 density option.  This translation can be disabled by using underscore
   16650 prefixes (*note Opcode Names: Xtensa Opcodes.), by using the
   16651 `--no-transform' command-line option (*note Command Line Options:
   16652 Xtensa Options.), or by using the `no-transform' directive (*note
   16653 transform: Transform Directive.).
   16654 
   16655    It is a good idea _not_ to use the density instructions directly.
   16656 The assembler will automatically select dense instructions where
   16657 possible.  If you later need to use an Xtensa processor without the code
   16658 density option, the same assembly code will then work without
   16659 modification.
   16660 
   16661 
   16662 File: as.info,  Node: Xtensa Automatic Alignment,  Prev: Density Instructions,  Up: Xtensa Optimizations
   16663 
   16664 9.36.3.2 Automatic Instruction Alignment
   16665 ........................................
   16666 
   16667 The Xtensa assembler will automatically align certain instructions, both
   16668 to optimize performance and to satisfy architectural requirements.
   16669 
   16670    As an optimization to improve performance, the assembler attempts to
   16671 align branch targets so they do not cross instruction fetch boundaries.
   16672 (Xtensa processors can be configured with either 32-bit or 64-bit
   16673 instruction fetch widths.)  An instruction immediately following a call
   16674 is treated as a branch target in this context, because it will be the
   16675 target of a return from the call.  This alignment has the potential to
   16676 reduce branch penalties at some expense in code size.  This
   16677 optimization is enabled by default.  You can disable it with the
   16678 `--no-target-align' command-line option (*note Command Line Options:
   16679 Xtensa Options.).
   16680 
   16681    The target alignment optimization is done without adding instructions
   16682 that could increase the execution time of the program.  If there are
   16683 density instructions in the code preceding a target, the assembler can
   16684 change the target alignment by widening some of those instructions to
   16685 the equivalent 24-bit instructions.  Extra bytes of padding can be
   16686 inserted immediately following unconditional jump and return
   16687 instructions.  This approach is usually successful in aligning many,
   16688 but not all, branch targets.
   16689 
   16690    The `LOOP' family of instructions must be aligned such that the
   16691 first instruction in the loop body does not cross an instruction fetch
   16692 boundary (e.g., with a 32-bit fetch width, a `LOOP' instruction must be
   16693 on either a 1 or 2 mod 4 byte boundary).  The assembler knows about
   16694 this restriction and inserts the minimal number of 2 or 3 byte no-op
   16695 instructions to satisfy it.  When no-op instructions are added, any
   16696 label immediately preceding the original loop will be moved in order to
   16697 refer to the loop instruction, not the newly generated no-op
   16698 instruction.  To preserve binary compatibility across processors with
   16699 different fetch widths, the assembler conservatively assumes a 32-bit
   16700 fetch width when aligning `LOOP' instructions (except if the first
   16701 instruction in the loop is a 64-bit instruction).
   16702 
   16703    Previous versions of the assembler automatically aligned `ENTRY'
   16704 instructions to 4-byte boundaries, but that alignment is now the
   16705 programmer's responsibility.
   16706 
   16707 
   16708 File: as.info,  Node: Xtensa Relaxation,  Next: Xtensa Directives,  Prev: Xtensa Optimizations,  Up: Xtensa-Dependent
   16709 
   16710 9.36.4 Xtensa Relaxation
   16711 ------------------------
   16712 
   16713 When an instruction operand is outside the range allowed for that
   16714 particular instruction field, `as' can transform the code to use a
   16715 functionally-equivalent instruction or sequence of instructions.  This
   16716 process is known as "relaxation".  This is typically done for branch
   16717 instructions because the distance of the branch targets is not known
   16718 until assembly-time.  The Xtensa assembler offers branch relaxation and
   16719 also extends this concept to function calls, `MOVI' instructions and
   16720 other instructions with immediate fields.
   16721 
   16722 * Menu:
   16723 
   16724 * Xtensa Branch Relaxation::        Relaxation of Branches.
   16725 * Xtensa Call Relaxation::          Relaxation of Function Calls.
   16726 * Xtensa Immediate Relaxation::     Relaxation of other Immediate Fields.
   16727 
   16728 
   16729 File: as.info,  Node: Xtensa Branch Relaxation,  Next: Xtensa Call Relaxation,  Up: Xtensa Relaxation
   16730 
   16731 9.36.4.1 Conditional Branch Relaxation
   16732 ......................................
   16733 
   16734 When the target of a branch is too far away from the branch itself,
   16735 i.e., when the offset from the branch to the target is too large to fit
   16736 in the immediate field of the branch instruction, it may be necessary to
   16737 replace the branch with a branch around a jump.  For example,
   16738 
   16739          beqz    a2, L
   16740 
   16741    may result in:
   16742 
   16743          bnez.n  a2, M
   16744          j L
   16745      M:
   16746 
   16747    (The `BNEZ.N' instruction would be used in this example only if the
   16748 density option is available.  Otherwise, `BNEZ' would be used.)
   16749 
   16750    This relaxation works well because the unconditional jump instruction
   16751 has a much larger offset range than the various conditional branches.
   16752 However, an error will occur if a branch target is beyond the range of a
   16753 jump instruction.  `as' cannot relax unconditional jumps.  Similarly,
   16754 an error will occur if the original input contains an unconditional
   16755 jump to a target that is out of range.
   16756 
   16757    Branch relaxation is enabled by default.  It can be disabled by using
   16758 underscore prefixes (*note Opcode Names: Xtensa Opcodes.), the
   16759 `--no-transform' command-line option (*note Command Line Options:
   16760 Xtensa Options.), or the `no-transform' directive (*note transform:
   16761 Transform Directive.).
   16762 
   16763 
   16764 File: as.info,  Node: Xtensa Call Relaxation,  Next: Xtensa Immediate Relaxation,  Prev: Xtensa Branch Relaxation,  Up: Xtensa Relaxation
   16765 
   16766 9.36.4.2 Function Call Relaxation
   16767 .................................
   16768 
   16769 Function calls may require relaxation because the Xtensa immediate call
   16770 instructions (`CALL0', `CALL4', `CALL8' and `CALL12') provide a
   16771 PC-relative offset of only 512 Kbytes in either direction.  For larger
   16772 programs, it may be necessary to use indirect calls (`CALLX0',
   16773 `CALLX4', `CALLX8' and `CALLX12') where the target address is specified
   16774 in a register.  The Xtensa assembler can automatically relax immediate
   16775 call instructions into indirect call instructions.  This relaxation is
   16776 done by loading the address of the called function into the callee's
   16777 return address register and then using a `CALLX' instruction.  So, for
   16778 example:
   16779 
   16780          call8 func
   16781 
   16782    might be relaxed to:
   16783 
   16784          .literal .L1, func
   16785          l32r    a8, .L1
   16786          callx8  a8
   16787 
   16788    Because the addresses of targets of function calls are not generally
   16789 known until link-time, the assembler must assume the worst and relax all
   16790 the calls to functions in other source files, not just those that really
   16791 will be out of range.  The linker can recognize calls that were
   16792 unnecessarily relaxed, and it will remove the overhead introduced by the
   16793 assembler for those cases where direct calls are sufficient.
   16794 
   16795    Call relaxation is disabled by default because it can have a negative
   16796 effect on both code size and performance, although the linker can
   16797 usually eliminate the unnecessary overhead.  If a program is too large
   16798 and some of the calls are out of range, function call relaxation can be
   16799 enabled using the `--longcalls' command-line option or the `longcalls'
   16800 directive (*note longcalls: Longcalls Directive.).
   16801 
   16802 
   16803 File: as.info,  Node: Xtensa Immediate Relaxation,  Prev: Xtensa Call Relaxation,  Up: Xtensa Relaxation
   16804 
   16805 9.36.4.3 Other Immediate Field Relaxation
   16806 .........................................
   16807 
   16808 The assembler normally performs the following other relaxations.  They
   16809 can be disabled by using underscore prefixes (*note Opcode Names:
   16810 Xtensa Opcodes.), the `--no-transform' command-line option (*note
   16811 Command Line Options: Xtensa Options.), or the `no-transform' directive
   16812 (*note transform: Transform Directive.).
   16813 
   16814    The `MOVI' machine instruction can only materialize values in the
   16815 range from -2048 to 2047.  Values outside this range are best
   16816 materialized with `L32R' instructions.  Thus:
   16817 
   16818          movi a0, 100000
   16819 
   16820    is assembled into the following machine code:
   16821 
   16822          .literal .L1, 100000
   16823          l32r a0, .L1
   16824 
   16825    The `L8UI' machine instruction can only be used with immediate
   16826 offsets in the range from 0 to 255. The `L16SI' and `L16UI' machine
   16827 instructions can only be used with offsets from 0 to 510.  The `L32I'
   16828 machine instruction can only be used with offsets from 0 to 1020.  A
   16829 load offset outside these ranges can be materialized with an `L32R'
   16830 instruction if the destination register of the load is different than
   16831 the source address register.  For example:
   16832 
   16833          l32i a1, a0, 2040
   16834 
   16835    is translated to:
   16836 
   16837          .literal .L1, 2040
   16838          l32r a1, .L1
   16839          add a1, a0, a1
   16840          l32i a1, a1, 0
   16841 
   16842 If the load destination and source address register are the same, an
   16843 out-of-range offset causes an error.
   16844 
   16845    The Xtensa `ADDI' instruction only allows immediate operands in the
   16846 range from -128 to 127.  There are a number of alternate instruction
   16847 sequences for the `ADDI' operation.  First, if the immediate is 0, the
   16848 `ADDI' will be turned into a `MOV.N' instruction (or the equivalent
   16849 `OR' instruction if the code density option is not available).  If the
   16850 `ADDI' immediate is outside of the range -128 to 127, but inside the
   16851 range -32896 to 32639, an `ADDMI' instruction or `ADDMI'/`ADDI'
   16852 sequence will be used.  Finally, if the immediate is outside of this
   16853 range and a free register is available, an `L32R'/`ADD' sequence will
   16854 be used with a literal allocated from the literal pool.
   16855 
   16856    For example:
   16857 
   16858          addi    a5, a6, 0
   16859          addi    a5, a6, 512
   16860          addi    a5, a6, 513
   16861          addi    a5, a6, 50000
   16862 
   16863    is assembled into the following:
   16864 
   16865          .literal .L1, 50000
   16866          mov.n   a5, a6
   16867          addmi   a5, a6, 0x200
   16868          addmi   a5, a6, 0x200
   16869          addi    a5, a5, 1
   16870          l32r    a5, .L1
   16871          add     a5, a6, a5
   16872 
   16873 
   16874 File: as.info,  Node: Xtensa Directives,  Prev: Xtensa Relaxation,  Up: Xtensa-Dependent
   16875 
   16876 9.36.5 Directives
   16877 -----------------
   16878 
   16879 The Xtensa assembler supports a region-based directive syntax:
   16880 
   16881          .begin DIRECTIVE [OPTIONS]
   16882          ...
   16883          .end DIRECTIVE
   16884 
   16885    All the Xtensa-specific directives that apply to a region of code use
   16886 this syntax.
   16887 
   16888    The directive applies to code between the `.begin' and the `.end'.
   16889 The state of the option after the `.end' reverts to what it was before
   16890 the `.begin'.  A nested `.begin'/`.end' region can further change the
   16891 state of the directive without having to be aware of its outer state.
   16892 For example, consider:
   16893 
   16894          .begin no-transform
   16895      L:  add a0, a1, a2
   16896          .begin transform
   16897      M:  add a0, a1, a2
   16898          .end transform
   16899      N:  add a0, a1, a2
   16900          .end no-transform
   16901 
   16902    The `ADD' opcodes at `L' and `N' in the outer `no-transform' region
   16903 both result in `ADD' machine instructions, but the assembler selects an
   16904 `ADD.N' instruction for the `ADD' at `M' in the inner `transform'
   16905 region.
   16906 
   16907    The advantage of this style is that it works well inside macros
   16908 which can preserve the context of their callers.
   16909 
   16910    The following directives are available:
   16911 
   16912 * Menu:
   16913 
   16914 * Schedule Directive::         Enable instruction scheduling.
   16915 * Longcalls Directive::        Use Indirect Calls for Greater Range.
   16916 * Transform Directive::        Disable All Assembler Transformations.
   16917 * Literal Directive::          Intermix Literals with Instructions.
   16918 * Literal Position Directive:: Specify Inline Literal Pool Locations.
   16919 * Literal Prefix Directive::   Specify Literal Section Name Prefix.
   16920 * Absolute Literals Directive:: Control PC-Relative vs. Absolute Literals.
   16921 
   16922 
   16923 File: as.info,  Node: Schedule Directive,  Next: Longcalls Directive,  Up: Xtensa Directives
   16924 
   16925 9.36.5.1 schedule
   16926 .................
   16927 
   16928 The `schedule' directive is recognized only for compatibility with
   16929 Tensilica's assembler.
   16930 
   16931          .begin [no-]schedule
   16932          .end [no-]schedule
   16933 
   16934    This directive is ignored and has no effect on `as'.
   16935 
   16936 
   16937 File: as.info,  Node: Longcalls Directive,  Next: Transform Directive,  Prev: Schedule Directive,  Up: Xtensa Directives
   16938 
   16939 9.36.5.2 longcalls
   16940 ..................
   16941 
   16942 The `longcalls' directive enables or disables function call relaxation.
   16943 *Note Function Call Relaxation: Xtensa Call Relaxation.
   16944 
   16945          .begin [no-]longcalls
   16946          .end [no-]longcalls
   16947 
   16948    Call relaxation is disabled by default unless the `--longcalls'
   16949 command-line option is specified.  The `longcalls' directive overrides
   16950 the default determined by the command-line options.
   16951 
   16952 
   16953 File: as.info,  Node: Transform Directive,  Next: Literal Directive,  Prev: Longcalls Directive,  Up: Xtensa Directives
   16954 
   16955 9.36.5.3 transform
   16956 ..................
   16957 
   16958 This directive enables or disables all assembler transformation,
   16959 including relaxation (*note Xtensa Relaxation: Xtensa Relaxation.) and
   16960 optimization (*note Xtensa Optimizations: Xtensa Optimizations.).
   16961 
   16962          .begin [no-]transform
   16963          .end [no-]transform
   16964 
   16965    Transformations are enabled by default unless the `--no-transform'
   16966 option is used.  The `transform' directive overrides the default
   16967 determined by the command-line options.  An underscore opcode prefix,
   16968 disabling transformation of that opcode, always takes precedence over
   16969 both directives and command-line flags.
   16970 
   16971 
   16972 File: as.info,  Node: Literal Directive,  Next: Literal Position Directive,  Prev: Transform Directive,  Up: Xtensa Directives
   16973 
   16974 9.36.5.4 literal
   16975 ................
   16976 
   16977 The `.literal' directive is used to define literal pool data, i.e.,
   16978 read-only 32-bit data accessed via `L32R' instructions.
   16979 
   16980          .literal LABEL, VALUE[, VALUE...]
   16981 
   16982    This directive is similar to the standard `.word' directive, except
   16983 that the actual location of the literal data is determined by the
   16984 assembler and linker, not by the position of the `.literal' directive.
   16985 Using this directive gives the assembler freedom to locate the literal
   16986 data in the most appropriate place and possibly to combine identical
   16987 literals.  For example, the code:
   16988 
   16989          entry sp, 40
   16990          .literal .L1, sym
   16991          l32r    a4, .L1
   16992 
   16993    can be used to load a pointer to the symbol `sym' into register
   16994 `a4'.  The value of `sym' will not be placed between the `ENTRY' and
   16995 `L32R' instructions; instead, the assembler puts the data in a literal
   16996 pool.
   16997 
   16998    Literal pools are placed by default in separate literal sections;
   16999 however, when using the `--text-section-literals' option (*note Command
   17000 Line Options: Xtensa Options.), the literal pools for PC-relative mode
   17001 `L32R' instructions are placed in the current section.(1) These text
   17002 section literal pools are created automatically before `ENTRY'
   17003 instructions and manually after `.literal_position' directives (*note
   17004 literal_position: Literal Position Directive.).  If there are no
   17005 preceding `ENTRY' instructions, explicit `.literal_position' directives
   17006 must be used to place the text section literal pools; otherwise, `as'
   17007 will report an error.
   17008 
   17009    When literals are placed in separate sections, the literal section
   17010 names are derived from the names of the sections where the literals are
   17011 defined.  The base literal section names are `.literal' for PC-relative
   17012 mode `L32R' instructions and `.lit4' for absolute mode `L32R'
   17013 instructions (*note absolute-literals: Absolute Literals Directive.).
   17014 These base names are used for literals defined in the default `.text'
   17015 section.  For literals defined in other sections or within the scope of
   17016 a `literal_prefix' directive (*note literal_prefix: Literal Prefix
   17017 Directive.), the following rules determine the literal section name:
   17018 
   17019   1. If the current section is a member of a section group, the literal
   17020      section name includes the group name as a suffix to the base
   17021      `.literal' or `.lit4' name, with a period to separate the base
   17022      name and group name.  The literal section is also made a member of
   17023      the group.
   17024 
   17025   2. If the current section name (or `literal_prefix' value) begins with
   17026      "`.gnu.linkonce.KIND.'", the literal section name is formed by
   17027      replacing "`.KIND'" with the base `.literal' or `.lit4' name.  For
   17028      example, for literals defined in a section named
   17029      `.gnu.linkonce.t.func', the literal section will be
   17030      `.gnu.linkonce.literal.func' or `.gnu.linkonce.lit4.func'.
   17031 
   17032   3. If the current section name (or `literal_prefix' value) ends with
   17033      `.text', the literal section name is formed by replacing that
   17034      suffix with the base `.literal' or `.lit4' name.  For example, for
   17035      literals defined in a section named `.iram0.text', the literal
   17036      section will be `.iram0.literal' or `.iram0.lit4'.
   17037 
   17038   4. If none of the preceding conditions apply, the literal section
   17039      name is formed by adding the base `.literal' or `.lit4' name as a
   17040      suffix to the current section name (or `literal_prefix' value).
   17041 
   17042    ---------- Footnotes ----------
   17043 
   17044    (1) Literals for the `.init' and `.fini' sections are always placed
   17045 in separate sections, even when `--text-section-literals' is enabled.
   17046 
   17047 
   17048 File: as.info,  Node: Literal Position Directive,  Next: Literal Prefix Directive,  Prev: Literal Directive,  Up: Xtensa Directives
   17049 
   17050 9.36.5.5 literal_position
   17051 .........................
   17052 
   17053 When using `--text-section-literals' to place literals inline in the
   17054 section being assembled, the `.literal_position' directive can be used
   17055 to mark a potential location for a literal pool.
   17056 
   17057          .literal_position
   17058 
   17059    The `.literal_position' directive is ignored when the
   17060 `--text-section-literals' option is not used or when `L32R'
   17061 instructions use the absolute addressing mode.
   17062 
   17063    The assembler will automatically place text section literal pools
   17064 before `ENTRY' instructions, so the `.literal_position' directive is
   17065 only needed to specify some other location for a literal pool.  You may
   17066 need to add an explicit jump instruction to skip over an inline literal
   17067 pool.
   17068 
   17069    For example, an interrupt vector does not begin with an `ENTRY'
   17070 instruction so the assembler will be unable to automatically find a good
   17071 place to put a literal pool.  Moreover, the code for the interrupt
   17072 vector must be at a specific starting address, so the literal pool
   17073 cannot come before the start of the code.  The literal pool for the
   17074 vector must be explicitly positioned in the middle of the vector (before
   17075 any uses of the literals, due to the negative offsets used by
   17076 PC-relative `L32R' instructions).  The `.literal_position' directive
   17077 can be used to do this.  In the following code, the literal for `M'
   17078 will automatically be aligned correctly and is placed after the
   17079 unconditional jump.
   17080 
   17081          .global M
   17082      code_start:
   17083          j continue
   17084          .literal_position
   17085          .align 4
   17086      continue:
   17087          movi    a4, M
   17088 
   17089 
   17090 File: as.info,  Node: Literal Prefix Directive,  Next: Absolute Literals Directive,  Prev: Literal Position Directive,  Up: Xtensa Directives
   17091 
   17092 9.36.5.6 literal_prefix
   17093 .......................
   17094 
   17095 The `literal_prefix' directive allows you to override the default
   17096 literal section names, which are derived from the names of the sections
   17097 where the literals are defined.
   17098 
   17099          .begin literal_prefix [NAME]
   17100          .end literal_prefix
   17101 
   17102    For literals defined within the delimited region, the literal section
   17103 names are derived from the NAME argument instead of the name of the
   17104 current section.  The rules used to derive the literal section names do
   17105 not change.  *Note literal: Literal Directive.  If the NAME argument is
   17106 omitted, the literal sections revert to the defaults.  This directive
   17107 has no effect when using the `--text-section-literals' option (*note
   17108 Command Line Options: Xtensa Options.).
   17109 
   17110 
   17111 File: as.info,  Node: Absolute Literals Directive,  Prev: Literal Prefix Directive,  Up: Xtensa Directives
   17112 
   17113 9.36.5.7 absolute-literals
   17114 ..........................
   17115 
   17116 The `absolute-literals' and `no-absolute-literals' directives control
   17117 the absolute vs. PC-relative mode for `L32R' instructions.  These are
   17118 relevant only for Xtensa configurations that include the absolute
   17119 addressing option for `L32R' instructions.
   17120 
   17121          .begin [no-]absolute-literals
   17122          .end [no-]absolute-literals
   17123 
   17124    These directives do not change the `L32R' mode--they only cause the
   17125 assembler to emit the appropriate kind of relocation for `L32R'
   17126 instructions and to place the literal values in the appropriate section.
   17127 To change the `L32R' mode, the program must write the `LITBASE' special
   17128 register.  It is the programmer's responsibility to keep track of the
   17129 mode and indicate to the assembler which mode is used in each region of
   17130 code.
   17131 
   17132    If the Xtensa configuration includes the absolute `L32R' addressing
   17133 option, the default is to assume absolute `L32R' addressing unless the
   17134 `--no-absolute-literals' command-line option is specified.  Otherwise,
   17135 the default is to assume PC-relative `L32R' addressing.  The
   17136 `absolute-literals' directive can then be used to override the default
   17137 determined by the command-line options.
   17138 
   17139 
   17140 File: as.info,  Node: Reporting Bugs,  Next: Acknowledgements,  Prev: Machine Dependencies,  Up: Top
   17141 
   17142 10 Reporting Bugs
   17143 *****************
   17144 
   17145 Your bug reports play an essential role in making `as' reliable.
   17146 
   17147    Reporting a bug may help you by bringing a solution to your problem,
   17148 or it may not.  But in any case the principal function of a bug report
   17149 is to help the entire community by making the next version of `as' work
   17150 better.  Bug reports are your contribution to the maintenance of `as'.
   17151 
   17152    In order for a bug report to serve its purpose, you must include the
   17153 information that enables us to fix the bug.
   17154 
   17155 * Menu:
   17156 
   17157 * Bug Criteria::                Have you found a bug?
   17158 * Bug Reporting::               How to report bugs
   17159 
   17160 
   17161 File: as.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Reporting Bugs
   17162 
   17163 10.1 Have You Found a Bug?
   17164 ==========================
   17165 
   17166 If you are not sure whether you have found a bug, here are some
   17167 guidelines:
   17168 
   17169    * If the assembler gets a fatal signal, for any input whatever, that
   17170      is a `as' bug.  Reliable assemblers never crash.
   17171 
   17172    * If `as' produces an error message for valid input, that is a bug.
   17173 
   17174    * If `as' does not produce an error message for invalid input, that
   17175      is a bug.  However, you should note that your idea of "invalid
   17176      input" might be our idea of "an extension" or "support for
   17177      traditional practice".
   17178 
   17179    * If you are an experienced user of assemblers, your suggestions for
   17180      improvement of `as' are welcome in any case.
   17181 
   17182 
   17183 File: as.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Reporting Bugs
   17184 
   17185 10.2 How to Report Bugs
   17186 =======================
   17187 
   17188 A number of companies and individuals offer support for GNU products.
   17189 If you obtained `as' from a support organization, we recommend you
   17190 contact that organization first.
   17191 
   17192    You can find contact information for many support companies and
   17193 individuals in the file `etc/SERVICE' in the GNU Emacs distribution.
   17194 
   17195    In any event, we also recommend that you send bug reports for `as'
   17196 to `http://www.sourceware.org/bugzilla/'.
   17197 
   17198    The fundamental principle of reporting bugs usefully is this:
   17199 *report all the facts*.  If you are not sure whether to state a fact or
   17200 leave it out, state it!
   17201 
   17202    Often people omit facts because they think they know what causes the
   17203 problem and assume that some details do not matter.  Thus, you might
   17204 assume that the name of a symbol you use in an example does not matter.
   17205 Well, probably it does not, but one cannot be sure.  Perhaps the bug is
   17206 a stray memory reference which happens to fetch from the location where
   17207 that name is stored in memory; perhaps, if the name were different, the
   17208 contents of that location would fool the assembler into doing the right
   17209 thing despite the bug.  Play it safe and give a specific, complete
   17210 example.  That is the easiest thing for you to do, and the most helpful.
   17211 
   17212    Keep in mind that the purpose of a bug report is to enable us to fix
   17213 the bug if it is new to us.  Therefore, always write your bug reports
   17214 on the assumption that the bug has not been reported previously.
   17215 
   17216    Sometimes people give a few sketchy facts and ask, "Does this ring a
   17217 bell?"  This cannot help us fix a bug, so it is basically useless.  We
   17218 respond by asking for enough details to enable us to investigate.  You
   17219 might as well expedite matters by sending them to begin with.
   17220 
   17221    To enable us to fix the bug, you should include all these things:
   17222 
   17223    * The version of `as'.  `as' announces it if you start it with the
   17224      `--version' argument.
   17225 
   17226      Without this, we will not know whether there is any point in
   17227      looking for the bug in the current version of `as'.
   17228 
   17229    * Any patches you may have applied to the `as' source.
   17230 
   17231    * The type of machine you are using, and the operating system name
   17232      and version number.
   17233 
   17234    * What compiler (and its version) was used to compile `as'--e.g.
   17235      "`gcc-2.7'".
   17236 
   17237    * The command arguments you gave the assembler to assemble your
   17238      example and observe the bug.  To guarantee you will not omit
   17239      something important, list them all.  A copy of the Makefile (or
   17240      the output from make) is sufficient.
   17241 
   17242      If we were to try to guess the arguments, we would probably guess
   17243      wrong and then we might not encounter the bug.
   17244 
   17245    * A complete input file that will reproduce the bug.  If the bug is
   17246      observed when the assembler is invoked via a compiler, send the
   17247      assembler source, not the high level language source.  Most
   17248      compilers will produce the assembler source when run with the `-S'
   17249      option.  If you are using `gcc', use the options `-v
   17250      --save-temps'; this will save the assembler source in a file with
   17251      an extension of `.s', and also show you exactly how `as' is being
   17252      run.
   17253 
   17254    * A description of what behavior you observe that you believe is
   17255      incorrect.  For example, "It gets a fatal signal."
   17256 
   17257      Of course, if the bug is that `as' gets a fatal signal, then we
   17258      will certainly notice it.  But if the bug is incorrect output, we
   17259      might not notice unless it is glaringly wrong.  You might as well
   17260      not give us a chance to make a mistake.
   17261 
   17262      Even if the problem you experience is a fatal signal, you should
   17263      still say so explicitly.  Suppose something strange is going on,
   17264      such as, your copy of `as' is out of sync, or you have encountered
   17265      a bug in the C library on your system.  (This has happened!)  Your
   17266      copy might crash and ours would not.  If you told us to expect a
   17267      crash, then when ours fails to crash, we would know that the bug
   17268      was not happening for us.  If you had not told us to expect a
   17269      crash, then we would not be able to draw any conclusion from our
   17270      observations.
   17271 
   17272    * If you wish to suggest changes to the `as' source, send us context
   17273      diffs, as generated by `diff' with the `-u', `-c', or `-p' option.
   17274      Always send diffs from the old file to the new file.  If you even
   17275      discuss something in the `as' source, refer to it by context, not
   17276      by line number.
   17277 
   17278      The line numbers in our development sources will not match those
   17279      in your sources.  Your line numbers would convey no useful
   17280      information to us.
   17281 
   17282    Here are some things that are not necessary:
   17283 
   17284    * A description of the envelope of the bug.
   17285 
   17286      Often people who encounter a bug spend a lot of time investigating
   17287      which changes to the input file will make the bug go away and which
   17288      changes will not affect it.
   17289 
   17290      This is often time consuming and not very useful, because the way
   17291      we will find the bug is by running a single example under the
   17292      debugger with breakpoints, not by pure deduction from a series of
   17293      examples.  We recommend that you save your time for something else.
   17294 
   17295      Of course, if you can find a simpler example to report _instead_
   17296      of the original one, that is a convenience for us.  Errors in the
   17297      output will be easier to spot, running under the debugger will take
   17298      less time, and so on.
   17299 
   17300      However, simplification is not vital; if you do not want to do
   17301      this, report the bug anyway and send us the entire test case you
   17302      used.
   17303 
   17304    * A patch for the bug.
   17305 
   17306      A patch for the bug does help us if it is a good one.  But do not
   17307      omit the necessary information, such as the test case, on the
   17308      assumption that a patch is all we need.  We might see problems
   17309      with your patch and decide to fix the problem another way, or we
   17310      might not understand it at all.
   17311 
   17312      Sometimes with a program as complicated as `as' it is very hard to
   17313      construct an example that will make the program follow a certain
   17314      path through the code.  If you do not send us the example, we will
   17315      not be able to construct one, so we will not be able to verify
   17316      that the bug is fixed.
   17317 
   17318      And if we cannot understand what bug you are trying to fix, or why
   17319      your patch should be an improvement, we will not install it.  A
   17320      test case will help us to understand.
   17321 
   17322    * A guess about what the bug is or what it depends on.
   17323 
   17324      Such guesses are usually wrong.  Even we cannot guess right about
   17325      such things without first using the debugger to find the facts.
   17326 
   17327 
   17328 File: as.info,  Node: Acknowledgements,  Next: GNU Free Documentation License,  Prev: Reporting Bugs,  Up: Top
   17329 
   17330 11 Acknowledgements
   17331 *******************
   17332 
   17333 If you have contributed to GAS and your name isn't listed here, it is
   17334 not meant as a slight.  We just don't know about it.  Send mail to the
   17335 maintainer, and we'll correct the situation.  Currently the maintainer
   17336 is Ken Raeburn (email address `raeburn (a] cygnus.com').
   17337 
   17338    Dean Elsner wrote the original GNU assembler for the VAX.(1)
   17339 
   17340    Jay Fenlason maintained GAS for a while, adding support for
   17341 GDB-specific debug information and the 68k series machines, most of the
   17342 preprocessing pass, and extensive changes in `messages.c',
   17343 `input-file.c', `write.c'.
   17344 
   17345    K. Richard Pixley maintained GAS for a while, adding various
   17346 enhancements and many bug fixes, including merging support for several
   17347 processors, breaking GAS up to handle multiple object file format back
   17348 ends (including heavy rewrite, testing, an integration of the coff and
   17349 b.out back ends), adding configuration including heavy testing and
   17350 verification of cross assemblers and file splits and renaming,
   17351 converted GAS to strictly ANSI C including full prototypes, added
   17352 support for m680[34]0 and cpu32, did considerable work on i960
   17353 including a COFF port (including considerable amounts of reverse
   17354 engineering), a SPARC opcode file rewrite, DECstation, rs6000, and
   17355 hp300hpux host ports, updated "know" assertions and made them work,
   17356 much other reorganization, cleanup, and lint.
   17357 
   17358    Ken Raeburn wrote the high-level BFD interface code to replace most
   17359 of the code in format-specific I/O modules.
   17360 
   17361    The original VMS support was contributed by David L. Kashtan.  Eric
   17362 Youngdale has done much work with it since.
   17363 
   17364    The Intel 80386 machine description was written by Eliot Dresselhaus.
   17365 
   17366    Minh Tran-Le at IntelliCorp contributed some AIX 386 support.
   17367 
   17368    The Motorola 88k machine description was contributed by Devon Bowen
   17369 of Buffalo University and Torbjorn Granlund of the Swedish Institute of
   17370 Computer Science.
   17371 
   17372    Keith Knowles at the Open Software Foundation wrote the original
   17373 MIPS back end (`tc-mips.c', `tc-mips.h'), and contributed Rose format
   17374 support (which hasn't been merged in yet).  Ralph Campbell worked with
   17375 the MIPS code to support a.out format.
   17376 
   17377    Support for the Zilog Z8k and Renesas H8/300 processors (tc-z8k,
   17378 tc-h8300), and IEEE 695 object file format (obj-ieee), was written by
   17379 Steve Chamberlain of Cygnus Support.  Steve also modified the COFF back
   17380 end to use BFD for some low-level operations, for use with the H8/300
   17381 and AMD 29k targets.
   17382 
   17383    John Gilmore built the AMD 29000 support, added `.include' support,
   17384 and simplified the configuration of which versions accept which
   17385 directives.  He updated the 68k machine description so that Motorola's
   17386 opcodes always produced fixed-size instructions (e.g., `jsr'), while
   17387 synthetic instructions remained shrinkable (`jbsr').  John fixed many
   17388 bugs, including true tested cross-compilation support, and one bug in
   17389 relaxation that took a week and required the proverbial one-bit fix.
   17390 
   17391    Ian Lance Taylor of Cygnus Support merged the Motorola and MIT
   17392 syntax for the 68k, completed support for some COFF targets (68k, i386
   17393 SVR3, and SCO Unix), added support for MIPS ECOFF and ELF targets,
   17394 wrote the initial RS/6000 and PowerPC assembler, and made a few other
   17395 minor patches.
   17396 
   17397    Steve Chamberlain made GAS able to generate listings.
   17398 
   17399    Hewlett-Packard contributed support for the HP9000/300.
   17400 
   17401    Jeff Law wrote GAS and BFD support for the native HPPA object format
   17402 (SOM) along with a fairly extensive HPPA testsuite (for both SOM and
   17403 ELF object formats).  This work was supported by both the Center for
   17404 Software Science at the University of Utah and Cygnus Support.
   17405 
   17406    Support for ELF format files has been worked on by Mark Eichin of
   17407 Cygnus Support (original, incomplete implementation for SPARC), Pete
   17408 Hoogenboom and Jeff Law at the University of Utah (HPPA mainly),
   17409 Michael Meissner of the Open Software Foundation (i386 mainly), and Ken
   17410 Raeburn of Cygnus Support (sparc, and some initial 64-bit support).
   17411 
   17412    Linas Vepstas added GAS support for the ESA/390 "IBM 370"
   17413 architecture.
   17414 
   17415    Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote
   17416 GAS and BFD support for openVMS/Alpha.
   17417 
   17418    Timothy Wall, Michael Hayes, and Greg Smart contributed to the
   17419 various tic* flavors.
   17420 
   17421    David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from
   17422 Tensilica, Inc. added support for Xtensa processors.
   17423 
   17424    Several engineers at Cygnus Support have also provided many small
   17425 bug fixes and configuration enhancements.
   17426 
   17427    Many others have contributed large or small bugfixes and
   17428 enhancements.  If you have contributed significant work and are not
   17429 mentioned on this list, and want to be, let us know.  Some of the
   17430 history has been lost; we are not intentionally leaving anyone out.
   17431 
   17432    ---------- Footnotes ----------
   17433 
   17434    (1) Any more details?
   17435 
   17436 
   17437 File: as.info,  Node: GNU Free Documentation License,  Next: AS Index,  Prev: Acknowledgements,  Up: Top
   17438 
   17439 Appendix A GNU Free Documentation License
   17440 *****************************************
   17441 
   17442                         Version 1.1, March 2000
   17443 
   17444      Copyright (C) 2000, 2003 Free Software Foundation, Inc.
   17445      51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
   17446 
   17447      Everyone is permitted to copy and distribute verbatim copies
   17448      of this license document, but changing it is not allowed.
   17449 
   17450 
   17451   0. PREAMBLE
   17452 
   17453      The purpose of this License is to make a manual, textbook, or other
   17454      written document "free" in the sense of freedom: to assure everyone
   17455      the effective freedom to copy and redistribute it, with or without
   17456      modifying it, either commercially or noncommercially.  Secondarily,
   17457      this License preserves for the author and publisher a way to get
   17458      credit for their work, while not being considered responsible for
   17459      modifications made by others.
   17460 
   17461      This License is a kind of "copyleft", which means that derivative
   17462      works of the document must themselves be free in the same sense.
   17463      It complements the GNU General Public License, which is a copyleft
   17464      license designed for free software.
   17465 
   17466      We have designed this License in order to use it for manuals for
   17467      free software, because free software needs free documentation: a
   17468      free program should come with manuals providing the same freedoms
   17469      that the software does.  But this License is not limited to
   17470      software manuals; it can be used for any textual work, regardless
   17471      of subject matter or whether it is published as a printed book.
   17472      We recommend this License principally for works whose purpose is
   17473      instruction or reference.
   17474 
   17475 
   17476   1. APPLICABILITY AND DEFINITIONS
   17477 
   17478      This License applies to any manual or other work that contains a
   17479      notice placed by the copyright holder saying it can be distributed
   17480      under the terms of this License.  The "Document", below, refers to
   17481      any such manual or work.  Any member of the public is a licensee,
   17482      and is addressed as "you."
   17483 
   17484      A "Modified Version" of the Document means any work containing the
   17485      Document or a portion of it, either copied verbatim, or with
   17486      modifications and/or translated into another language.
   17487 
   17488      A "Secondary Section" is a named appendix or a front-matter
   17489      section of the Document that deals exclusively with the
   17490      relationship of the publishers or authors of the Document to the
   17491      Document's overall subject (or to related matters) and contains
   17492      nothing that could fall directly within that overall subject.
   17493      (For example, if the Document is in part a textbook of
   17494      mathematics, a Secondary Section may not explain any mathematics.)
   17495      The relationship could be a matter of historical connection with
   17496      the subject or with related matters, or of legal, commercial,
   17497      philosophical, ethical or political position regarding them.
   17498 
   17499      The "Invariant Sections" are certain Secondary Sections whose
   17500      titles are designated, as being those of Invariant Sections, in
   17501      the notice that says that the Document is released under this
   17502      License.
   17503 
   17504      The "Cover Texts" are certain short passages of text that are
   17505      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
   17506      that says that the Document is released under this License.
   17507 
   17508      A "Transparent" copy of the Document means a machine-readable copy,
   17509      represented in a format whose specification is available to the
   17510      general public, whose contents can be viewed and edited directly
   17511      and straightforwardly with generic text editors or (for images
   17512      composed of pixels) generic paint programs or (for drawings) some
   17513      widely available drawing editor, and that is suitable for input to
   17514      text formatters or for automatic translation to a variety of
   17515      formats suitable for input to text formatters.  A copy made in an
   17516      otherwise Transparent file format whose markup has been designed
   17517      to thwart or discourage subsequent modification by readers is not
   17518      Transparent.  A copy that is not "Transparent" is called "Opaque."
   17519 
   17520      Examples of suitable formats for Transparent copies include plain
   17521      ASCII without markup, Texinfo input format, LaTeX input format,
   17522      SGML or XML using a publicly available DTD, and
   17523      standard-conforming simple HTML designed for human modification.
   17524      Opaque formats include PostScript, PDF, proprietary formats that
   17525      can be read and edited only by proprietary word processors, SGML
   17526      or XML for which the DTD and/or processing tools are not generally
   17527      available, and the machine-generated HTML produced by some word
   17528      processors for output purposes only.
   17529 
   17530      The "Title Page" means, for a printed book, the title page itself,
   17531      plus such following pages as are needed to hold, legibly, the
   17532      material this License requires to appear in the title page.  For
   17533      works in formats which do not have any title page as such, "Title
   17534      Page" means the text near the most prominent appearance of the
   17535      work's title, preceding the beginning of the body of the text.
   17536 
   17537   2. VERBATIM COPYING
   17538 
   17539      You may copy and distribute the Document in any medium, either
   17540      commercially or noncommercially, provided that this License, the
   17541      copyright notices, and the license notice saying this License
   17542      applies to the Document are reproduced in all copies, and that you
   17543      add no other conditions whatsoever to those of this License.  You
   17544      may not use technical measures to obstruct or control the reading
   17545      or further copying of the copies you make or distribute.  However,
   17546      you may accept compensation in exchange for copies.  If you
   17547      distribute a large enough number of copies you must also follow
   17548      the conditions in section 3.
   17549 
   17550      You may also lend copies, under the same conditions stated above,
   17551      and you may publicly display copies.
   17552 
   17553   3. COPYING IN QUANTITY
   17554 
   17555      If you publish printed copies of the Document numbering more than
   17556      100, and the Document's license notice requires Cover Texts, you
   17557      must enclose the copies in covers that carry, clearly and legibly,
   17558      all these Cover Texts: Front-Cover Texts on the front cover, and
   17559      Back-Cover Texts on the back cover.  Both covers must also clearly
   17560      and legibly identify you as the publisher of these copies.  The
   17561      front cover must present the full title with all words of the
   17562      title equally prominent and visible.  You may add other material
   17563      on the covers in addition.  Copying with changes limited to the
   17564      covers, as long as they preserve the title of the Document and
   17565      satisfy these conditions, can be treated as verbatim copying in
   17566      other respects.
   17567 
   17568      If the required texts for either cover are too voluminous to fit
   17569      legibly, you should put the first ones listed (as many as fit
   17570      reasonably) on the actual cover, and continue the rest onto
   17571      adjacent pages.
   17572 
   17573      If you publish or distribute Opaque copies of the Document
   17574      numbering more than 100, you must either include a
   17575      machine-readable Transparent copy along with each Opaque copy, or
   17576      state in or with each Opaque copy a publicly-accessible
   17577      computer-network location containing a complete Transparent copy
   17578      of the Document, free of added material, which the general
   17579      network-using public has access to download anonymously at no
   17580      charge using public-standard network protocols.  If you use the
   17581      latter option, you must take reasonably prudent steps, when you
   17582      begin distribution of Opaque copies in quantity, to ensure that
   17583      this Transparent copy will remain thus accessible at the stated
   17584      location until at least one year after the last time you
   17585      distribute an Opaque copy (directly or through your agents or
   17586      retailers) of that edition to the public.
   17587 
   17588      It is requested, but not required, that you contact the authors of
   17589      the Document well before redistributing any large number of
   17590      copies, to give them a chance to provide you with an updated
   17591      version of the Document.
   17592 
   17593   4. MODIFICATIONS
   17594 
   17595      You may copy and distribute a Modified Version of the Document
   17596      under the conditions of sections 2 and 3 above, provided that you
   17597      release the Modified Version under precisely this License, with
   17598      the Modified Version filling the role of the Document, thus
   17599      licensing distribution and modification of the Modified Version to
   17600      whoever possesses a copy of it.  In addition, you must do these
   17601      things in the Modified Version:
   17602 
   17603      A. Use in the Title Page (and on the covers, if any) a title
   17604      distinct    from that of the Document, and from those of previous
   17605      versions    (which should, if there were any, be listed in the
   17606      History section    of the Document).  You may use the same title
   17607      as a previous version    if the original publisher of that version
   17608      gives permission.
   17609      B. List on the Title Page, as authors, one or more persons or
   17610      entities    responsible for authorship of the modifications in the
   17611      Modified    Version, together with at least five of the principal
   17612      authors of the    Document (all of its principal authors, if it
   17613      has less than five).
   17614      C. State on the Title page the name of the publisher of the
   17615      Modified Version, as the publisher.
   17616      D. Preserve all the copyright notices of the Document.
   17617      E. Add an appropriate copyright notice for your modifications
   17618      adjacent to the other copyright notices.
   17619      F. Include, immediately after the copyright notices, a license
   17620      notice    giving the public permission to use the Modified Version
   17621      under the    terms of this License, in the form shown in the
   17622      Addendum below.
   17623      G. Preserve in that license notice the full lists of Invariant
   17624      Sections    and required Cover Texts given in the Document's
   17625      license notice.
   17626      H. Include an unaltered copy of this License.
   17627      I. Preserve the section entitled "History", and its title, and add
   17628      to    it an item stating at least the title, year, new authors, and
   17629        publisher of the Modified Version as given on the Title Page.  If
   17630        there is no section entitled "History" in the Document, create
   17631      one    stating the title, year, authors, and publisher of the
   17632      Document as    given on its Title Page, then add an item
   17633      describing the Modified    Version as stated in the previous
   17634      sentence.
   17635      J. Preserve the network location, if any, given in the Document for
   17636        public access to a Transparent copy of the Document, and likewise
   17637        the network locations given in the Document for previous versions
   17638        it was based on.  These may be placed in the "History" section.
   17639        You may omit a network location for a work that was published at
   17640        least four years before the Document itself, or if the original
   17641       publisher of the version it refers to gives permission.
   17642      K. In any section entitled "Acknowledgements" or "Dedications",
   17643      preserve the section's title, and preserve in the section all the
   17644       substance and tone of each of the contributor acknowledgements
   17645      and/or dedications given therein.
   17646      L. Preserve all the Invariant Sections of the Document,
   17647      unaltered in their text and in their titles.  Section numbers
   17648      or the equivalent are not considered part of the section titles.
   17649      M. Delete any section entitled "Endorsements."  Such a section
   17650      may not be included in the Modified Version.
   17651      N. Do not retitle any existing section as "Endorsements"    or to
   17652      conflict in title with any Invariant Section.
   17653 
   17654      If the Modified Version includes new front-matter sections or
   17655      appendices that qualify as Secondary Sections and contain no
   17656      material copied from the Document, you may at your option
   17657      designate some or all of these sections as invariant.  To do this,
   17658      add their titles to the list of Invariant Sections in the Modified
   17659      Version's license notice.  These titles must be distinct from any
   17660      other section titles.
   17661 
   17662      You may add a section entitled "Endorsements", provided it contains
   17663      nothing but endorsements of your Modified Version by various
   17664      parties-for example, statements of peer review or that the text has
   17665      been approved by an organization as the authoritative definition
   17666      of a standard.
   17667 
   17668      You may add a passage of up to five words as a Front-Cover Text,
   17669      and a passage of up to 25 words as a Back-Cover Text, to the end
   17670      of the list of Cover Texts in the Modified Version.  Only one
   17671      passage of Front-Cover Text and one of Back-Cover Text may be
   17672      added by (or through arrangements made by) any one entity.  If the
   17673      Document already includes a cover text for the same cover,
   17674      previously added by you or by arrangement made by the same entity
   17675      you are acting on behalf of, you may not add another; but you may
   17676      replace the old one, on explicit permission from the previous
   17677      publisher that added the old one.
   17678 
   17679      The author(s) and publisher(s) of the Document do not by this
   17680      License give permission to use their names for publicity for or to
   17681      assert or imply endorsement of any Modified Version.
   17682 
   17683   5. COMBINING DOCUMENTS
   17684 
   17685      You may combine the Document with other documents released under
   17686      this License, under the terms defined in section 4 above for
   17687      modified versions, provided that you include in the combination
   17688      all of the Invariant Sections of all of the original documents,
   17689      unmodified, and list them all as Invariant Sections of your
   17690      combined work in its license notice.
   17691 
   17692      The combined work need only contain one copy of this License, and
   17693      multiple identical Invariant Sections may be replaced with a single
   17694      copy.  If there are multiple Invariant Sections with the same name
   17695      but different contents, make the title of each such section unique
   17696      by adding at the end of it, in parentheses, the name of the
   17697      original author or publisher of that section if known, or else a
   17698      unique number.  Make the same adjustment to the section titles in
   17699      the list of Invariant Sections in the license notice of the
   17700      combined work.
   17701 
   17702      In the combination, you must combine any sections entitled
   17703      "History" in the various original documents, forming one section
   17704      entitled "History"; likewise combine any sections entitled
   17705      "Acknowledgements", and any sections entitled "Dedications."  You
   17706      must delete all sections entitled "Endorsements."
   17707 
   17708   6. COLLECTIONS OF DOCUMENTS
   17709 
   17710      You may make a collection consisting of the Document and other
   17711      documents released under this License, and replace the individual
   17712      copies of this License in the various documents with a single copy
   17713      that is included in the collection, provided that you follow the
   17714      rules of this License for verbatim copying of each of the
   17715      documents in all other respects.
   17716 
   17717      You may extract a single document from such a collection, and
   17718      distribute it individually under this License, provided you insert
   17719      a copy of this License into the extracted document, and follow
   17720      this License in all other respects regarding verbatim copying of
   17721      that document.
   17722 
   17723   7. AGGREGATION WITH INDEPENDENT WORKS
   17724 
   17725      A compilation of the Document or its derivatives with other
   17726      separate and independent documents or works, in or on a volume of
   17727      a storage or distribution medium, does not as a whole count as a
   17728      Modified Version of the Document, provided no compilation
   17729      copyright is claimed for the compilation.  Such a compilation is
   17730      called an "aggregate", and this License does not apply to the
   17731      other self-contained works thus compiled with the Document, on
   17732      account of their being thus compiled, if they are not themselves
   17733      derivative works of the Document.
   17734 
   17735      If the Cover Text requirement of section 3 is applicable to these
   17736      copies of the Document, then if the Document is less than one
   17737      quarter of the entire aggregate, the Document's Cover Texts may be
   17738      placed on covers that surround only the Document within the
   17739      aggregate.  Otherwise they must appear on covers around the whole
   17740      aggregate.
   17741 
   17742   8. TRANSLATION
   17743 
   17744      Translation is considered a kind of modification, so you may
   17745      distribute translations of the Document under the terms of section
   17746      4.  Replacing Invariant Sections with translations requires special
   17747      permission from their copyright holders, but you may include
   17748      translations of some or all Invariant Sections in addition to the
   17749      original versions of these Invariant Sections.  You may include a
   17750      translation of this License provided that you also include the
   17751      original English version of this License.  In case of a
   17752      disagreement between the translation and the original English
   17753      version of this License, the original English version will prevail.
   17754 
   17755   9. TERMINATION
   17756 
   17757      You may not copy, modify, sublicense, or distribute the Document
   17758      except as expressly provided for under this License.  Any other
   17759      attempt to copy, modify, sublicense or distribute the Document is
   17760      void, and will automatically terminate your rights under this
   17761      License.  However, parties who have received copies, or rights,
   17762      from you under this License will not have their licenses
   17763      terminated so long as such parties remain in full compliance.
   17764 
   17765  10. FUTURE REVISIONS OF THIS LICENSE
   17766 
   17767      The Free Software Foundation may publish new, revised versions of
   17768      the GNU Free Documentation License from time to time.  Such new
   17769      versions will be similar in spirit to the present version, but may
   17770      differ in detail to address new problems or concerns.  See
   17771      http://www.gnu.org/copyleft/.
   17772 
   17773      Each version of the License is given a distinguishing version
   17774      number.  If the Document specifies that a particular numbered
   17775      version of this License "or any later version" applies to it, you
   17776      have the option of following the terms and conditions either of
   17777      that specified version or of any later version that has been
   17778      published (not as a draft) by the Free Software Foundation.  If
   17779      the Document does not specify a version number of this License,
   17780      you may choose any version ever published (not as a draft) by the
   17781      Free Software Foundation.
   17782 
   17783 
   17784 ADDENDUM: How to use this License for your documents
   17785 ====================================================
   17786 
   17787 To use this License in a document you have written, include a copy of
   17788 the License in the document and put the following copyright and license
   17789 notices just after the title page:
   17790 
   17791      Copyright (C)  YEAR  YOUR NAME.
   17792      Permission is granted to copy, distribute and/or modify this document
   17793      under the terms of the GNU Free Documentation License, Version 1.1
   17794      or any later version published by the Free Software Foundation;
   17795      with the Invariant Sections being LIST THEIR TITLES, with the
   17796      Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
   17797      A copy of the license is included in the section entitled "GNU
   17798      Free Documentation License."
   17799 
   17800    If you have no Invariant Sections, write "with no Invariant Sections"
   17801 instead of saying which ones are invariant.  If you have no Front-Cover
   17802 Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being
   17803 LIST"; likewise for Back-Cover Texts.
   17804 
   17805    If your document contains nontrivial examples of program code, we
   17806 recommend releasing these examples in parallel under your choice of
   17807 free software license, such as the GNU General Public License, to
   17808 permit their use in free software.
   17809 
   17810 
   17811 File: as.info,  Node: AS Index,  Prev: GNU Free Documentation License,  Up: Top
   17812 
   17813 AS Index
   17814 ********
   17815 
   17816 [index]
   17817 * Menu:
   17818 
   17819 * #:                                     Comments.            (line  38)
   17820 * #APP:                                  Preprocessing.       (line  26)
   17821 * #NO_APP:                               Preprocessing.       (line  26)
   17822 * $ in symbol names <1>:                 SH64-Chars.          (line  10)
   17823 * $ in symbol names <2>:                 SH-Chars.            (line  10)
   17824 * $ in symbol names <3>:                 D30V-Chars.          (line  63)
   17825 * $ in symbol names:                     D10V-Chars.          (line  46)
   17826 * $a:                                    ARM Mapping Symbols. (line   9)
   17827 * $acos math builtin, TIC54X:            TIC54X-Builtins.     (line  10)
   17828 * $asin math builtin, TIC54X:            TIC54X-Builtins.     (line  13)
   17829 * $atan math builtin, TIC54X:            TIC54X-Builtins.     (line  16)
   17830 * $atan2 math builtin, TIC54X:           TIC54X-Builtins.     (line  19)
   17831 * $ceil math builtin, TIC54X:            TIC54X-Builtins.     (line  22)
   17832 * $cos math builtin, TIC54X:             TIC54X-Builtins.     (line  28)
   17833 * $cosh math builtin, TIC54X:            TIC54X-Builtins.     (line  25)
   17834 * $cvf math builtin, TIC54X:             TIC54X-Builtins.     (line  31)
   17835 * $cvi math builtin, TIC54X:             TIC54X-Builtins.     (line  34)
   17836 * $d:                                    ARM Mapping Symbols. (line  15)
   17837 * $exp math builtin, TIC54X:             TIC54X-Builtins.     (line  37)
   17838 * $fabs math builtin, TIC54X:            TIC54X-Builtins.     (line  40)
   17839 * $firstch subsym builtin, TIC54X:       TIC54X-Macros.       (line  26)
   17840 * $floor math builtin, TIC54X:           TIC54X-Builtins.     (line  43)
   17841 * $fmod math builtin, TIC54X:            TIC54X-Builtins.     (line  47)
   17842 * $int math builtin, TIC54X:             TIC54X-Builtins.     (line  50)
   17843 * $iscons subsym builtin, TIC54X:        TIC54X-Macros.       (line  43)
   17844 * $isdefed subsym builtin, TIC54X:       TIC54X-Macros.       (line  34)
   17845 * $ismember subsym builtin, TIC54X:      TIC54X-Macros.       (line  38)
   17846 * $isname subsym builtin, TIC54X:        TIC54X-Macros.       (line  47)
   17847 * $isreg subsym builtin, TIC54X:         TIC54X-Macros.       (line  50)
   17848 * $lastch subsym builtin, TIC54X:        TIC54X-Macros.       (line  30)
   17849 * $ldexp math builtin, TIC54X:           TIC54X-Builtins.     (line  53)
   17850 * $log math builtin, TIC54X:             TIC54X-Builtins.     (line  59)
   17851 * $log10 math builtin, TIC54X:           TIC54X-Builtins.     (line  56)
   17852 * $max math builtin, TIC54X:             TIC54X-Builtins.     (line  62)
   17853 * $min math builtin, TIC54X:             TIC54X-Builtins.     (line  65)
   17854 * $pow math builtin, TIC54X:             TIC54X-Builtins.     (line  68)
   17855 * $round math builtin, TIC54X:           TIC54X-Builtins.     (line  71)
   17856 * $sgn math builtin, TIC54X:             TIC54X-Builtins.     (line  74)
   17857 * $sin math builtin, TIC54X:             TIC54X-Builtins.     (line  77)
   17858 * $sinh math builtin, TIC54X:            TIC54X-Builtins.     (line  80)
   17859 * $sqrt math builtin, TIC54X:            TIC54X-Builtins.     (line  83)
   17860 * $structacc subsym builtin, TIC54X:     TIC54X-Macros.       (line  57)
   17861 * $structsz subsym builtin, TIC54X:      TIC54X-Macros.       (line  54)
   17862 * $symcmp subsym builtin, TIC54X:        TIC54X-Macros.       (line  23)
   17863 * $symlen subsym builtin, TIC54X:        TIC54X-Macros.       (line  20)
   17864 * $t:                                    ARM Mapping Symbols. (line  12)
   17865 * $tan math builtin, TIC54X:             TIC54X-Builtins.     (line  86)
   17866 * $tanh math builtin, TIC54X:            TIC54X-Builtins.     (line  89)
   17867 * $trunc math builtin, TIC54X:           TIC54X-Builtins.     (line  92)
   17868 * -+ option, VAX/VMS:                    VAX-Opts.            (line  71)
   17869 * --:                                    Command Line.        (line  10)
   17870 * --32 option, i386:                     i386-Options.        (line   8)
   17871 * --32 option, x86-64:                   i386-Options.        (line   8)
   17872 * --64 option, i386:                     i386-Options.        (line   8)
   17873 * --64 option, x86-64:                   i386-Options.        (line   8)
   17874 * --absolute-literals:                   Xtensa Options.      (line  23)
   17875 * --allow-reg-prefix:                    SH Options.          (line   9)
   17876 * --alternate:                           alternate.           (line   6)
   17877 * --base-size-default-16:                M68K-Opts.           (line  71)
   17878 * --base-size-default-32:                M68K-Opts.           (line  71)
   17879 * --big:                                 SH Options.          (line   9)
   17880 * --bitwise-or option, M680x0:           M68K-Opts.           (line  64)
   17881 * --disp-size-default-16:                M68K-Opts.           (line  80)
   17882 * --disp-size-default-32:                M68K-Opts.           (line  80)
   17883 * --divide option, i386:                 i386-Options.        (line  24)
   17884 * --dsp:                                 SH Options.          (line   9)
   17885 * --emulation=crisaout command line option, CRIS: CRIS-Opts.  (line   9)
   17886 * --emulation=criself command line option, CRIS: CRIS-Opts.   (line   9)
   17887 * --enforce-aligned-data:                Sparc-Aligned-Data.  (line  11)
   17888 * --fatal-warnings:                      W.                   (line  16)
   17889 * --fix-v4bx command line option, ARM:   ARM Options.         (line 126)
   17890 * --fixed-special-register-names command line option, MMIX: MMIX-Opts.
   17891                                                               (line   8)
   17892 * --force-long-branches:                 M68HC11-Opts.        (line  69)
   17893 * --generate-example:                    M68HC11-Opts.        (line  86)
   17894 * --globalize-symbols command line option, MMIX: MMIX-Opts.   (line  12)
   17895 * --gnu-syntax command line option, MMIX: MMIX-Opts.          (line  16)
   17896 * --hash-size=NUMBER:                    Overview.            (line 314)
   17897 * --linker-allocated-gregs command line option, MMIX: MMIX-Opts.
   17898                                                               (line  67)
   17899 * --listing-cont-lines:                  listing.             (line  34)
   17900 * --listing-lhs-width:                   listing.             (line  16)
   17901 * --listing-lhs-width2:                  listing.             (line  21)
   17902 * --listing-rhs-width:                   listing.             (line  28)
   17903 * --little:                              SH Options.          (line   9)
   17904 * --longcalls:                           Xtensa Options.      (line  37)
   17905 * --march=ARCHITECTURE command line option, CRIS: CRIS-Opts.  (line  33)
   17906 * --MD:                                  MD.                  (line   6)
   17907 * --mul-bug-abort command line option, CRIS: CRIS-Opts.       (line  61)
   17908 * --no-absolute-literals:                Xtensa Options.      (line  23)
   17909 * --no-expand command line option, MMIX: MMIX-Opts.           (line  31)
   17910 * --no-longcalls:                        Xtensa Options.      (line  37)
   17911 * --no-merge-gregs command line option, MMIX: MMIX-Opts.      (line  36)
   17912 * --no-mul-bug-abort command line option, CRIS: CRIS-Opts.    (line  61)
   17913 * --no-predefined-syms command line option, MMIX: MMIX-Opts.  (line  22)
   17914 * --no-pushj-stubs command line option, MMIX: MMIX-Opts.      (line  54)
   17915 * --no-stubs command line option, MMIX:  MMIX-Opts.           (line  54)
   17916 * --no-target-align:                     Xtensa Options.      (line  30)
   17917 * --no-text-section-literals:            Xtensa Options.      (line   9)
   17918 * --no-transform:                        Xtensa Options.      (line  46)
   17919 * --no-underscore command line option, CRIS: CRIS-Opts.       (line  15)
   17920 * --no-warn:                             W.                   (line  11)
   17921 * --pcrel:                               M68K-Opts.           (line  92)
   17922 * --pic command line option, CRIS:       CRIS-Opts.           (line  27)
   17923 * --print-insn-syntax:                   M68HC11-Opts.        (line  75)
   17924 * --print-opcodes:                       M68HC11-Opts.        (line  79)
   17925 * --register-prefix-optional option, M680x0: M68K-Opts.       (line  51)
   17926 * --relax:                               SH Options.          (line   9)
   17927 * --relax command line option, MMIX:     MMIX-Opts.           (line  19)
   17928 * --rename-section:                      Xtensa Options.      (line  54)
   17929 * --renesas:                             SH Options.          (line   9)
   17930 * --short-branches:                      M68HC11-Opts.        (line  54)
   17931 * --small:                               SH Options.          (line   9)
   17932 * --statistics:                          statistics.          (line   6)
   17933 * --strict-direct-mode:                  M68HC11-Opts.        (line  44)
   17934 * --target-align:                        Xtensa Options.      (line  30)
   17935 * --text-section-literals:               Xtensa Options.      (line   9)
   17936 * --traditional-format:                  traditional-format.  (line   6)
   17937 * --transform:                           Xtensa Options.      (line  46)
   17938 * --underscore command line option, CRIS: CRIS-Opts.          (line  15)
   17939 * --warn:                                W.                   (line  19)
   17940 * -1 option, VAX/VMS:                    VAX-Opts.            (line  77)
   17941 * -32addr command line option, Alpha:    Alpha Options.       (line  50)
   17942 * -a:                                    a.                   (line   6)
   17943 * -A options, i960:                      Options-i960.        (line   6)
   17944 * -ac:                                   a.                   (line   6)
   17945 * -ad:                                   a.                   (line   6)
   17946 * -ag:                                   a.                   (line   6)
   17947 * -ah:                                   a.                   (line   6)
   17948 * -al:                                   a.                   (line   6)
   17949 * -an:                                   a.                   (line   6)
   17950 * -as:                                   a.                   (line   6)
   17951 * -Asparclet:                            Sparc-Opts.          (line  25)
   17952 * -Asparclite:                           Sparc-Opts.          (line  25)
   17953 * -Av6:                                  Sparc-Opts.          (line  25)
   17954 * -Av8:                                  Sparc-Opts.          (line  25)
   17955 * -Av9:                                  Sparc-Opts.          (line  25)
   17956 * -Av9a:                                 Sparc-Opts.          (line  25)
   17957 * -b option, i960:                       Options-i960.        (line  22)
   17958 * -big option, M32R:                     M32R-Opts.           (line  35)
   17959 * -D:                                    D.                   (line   6)
   17960 * -D, ignored on VAX:                    VAX-Opts.            (line  11)
   17961 * -d, VAX option:                        VAX-Opts.            (line  16)
   17962 * -eabi= command line option, ARM:       ARM Options.         (line 109)
   17963 * -EB command line option, ARC:          ARC Options.         (line  31)
   17964 * -EB command line option, ARM:          ARM Options.         (line 114)
   17965 * -EB option (MIPS):                     MIPS Opts.           (line  13)
   17966 * -EB option, M32R:                      M32R-Opts.           (line  39)
   17967 * -EL command line option, ARC:          ARC Options.         (line  35)
   17968 * -EL command line option, ARM:          ARM Options.         (line 118)
   17969 * -EL option (MIPS):                     MIPS Opts.           (line  13)
   17970 * -EL option, M32R:                      M32R-Opts.           (line  32)
   17971 * -f:                                    f.                   (line   6)
   17972 * -F command line option, Alpha:         Alpha Options.       (line  50)
   17973 * -G command line option, Alpha:         Alpha Options.       (line  46)
   17974 * -g command line option, Alpha:         Alpha Options.       (line  40)
   17975 * -G option (MIPS):                      MIPS Opts.           (line   8)
   17976 * -H option, VAX/VMS:                    VAX-Opts.            (line  81)
   17977 * -h option, VAX/VMS:                    VAX-Opts.            (line  45)
   17978 * -I PATH:                               I.                   (line   6)
   17979 * -ignore-parallel-conflicts option, M32RX: M32R-Opts.        (line  87)
   17980 * -Ip option, M32RX:                     M32R-Opts.           (line  97)
   17981 * -J, ignored on VAX:                    VAX-Opts.            (line  27)
   17982 * -K:                                    K.                   (line   6)
   17983 * -k command line option, ARM:           ARM Options.         (line 122)
   17984 * -KPIC option, M32R:                    M32R-Opts.           (line  42)
   17985 * -KPIC option, MIPS:                    MIPS Opts.           (line  21)
   17986 * -L:                                    L.                   (line   6)
   17987 * -l option, M680x0:                     M68K-Opts.           (line  39)
   17988 * -little option, M32R:                  M32R-Opts.           (line  27)
   17989 * -M:                                    M.                   (line   6)
   17990 * -m11/03:                               PDP-11-Options.      (line 140)
   17991 * -m11/04:                               PDP-11-Options.      (line 143)
   17992 * -m11/05:                               PDP-11-Options.      (line 146)
   17993 * -m11/10:                               PDP-11-Options.      (line 146)
   17994 * -m11/15:                               PDP-11-Options.      (line 149)
   17995 * -m11/20:                               PDP-11-Options.      (line 149)
   17996 * -m11/21:                               PDP-11-Options.      (line 152)
   17997 * -m11/23:                               PDP-11-Options.      (line 155)
   17998 * -m11/24:                               PDP-11-Options.      (line 155)
   17999 * -m11/34:                               PDP-11-Options.      (line 158)
   18000 * -m11/34a:                              PDP-11-Options.      (line 161)
   18001 * -m11/35:                               PDP-11-Options.      (line 164)
   18002 * -m11/40:                               PDP-11-Options.      (line 164)
   18003 * -m11/44:                               PDP-11-Options.      (line 167)
   18004 * -m11/45:                               PDP-11-Options.      (line 170)
   18005 * -m11/50:                               PDP-11-Options.      (line 170)
   18006 * -m11/53:                               PDP-11-Options.      (line 173)
   18007 * -m11/55:                               PDP-11-Options.      (line 170)
   18008 * -m11/60:                               PDP-11-Options.      (line 176)
   18009 * -m11/70:                               PDP-11-Options.      (line 170)
   18010 * -m11/73:                               PDP-11-Options.      (line 173)
   18011 * -m11/83:                               PDP-11-Options.      (line 173)
   18012 * -m11/84:                               PDP-11-Options.      (line 173)
   18013 * -m11/93:                               PDP-11-Options.      (line 173)
   18014 * -m11/94:                               PDP-11-Options.      (line 173)
   18015 * -m16c option, M16C:                    M32C-Opts.           (line  12)
   18016 * -m32c option, M32C:                    M32C-Opts.           (line   9)
   18017 * -m32r option, M32R:                    M32R-Opts.           (line  21)
   18018 * -m32rx option, M32R2:                  M32R-Opts.           (line  17)
   18019 * -m32rx option, M32RX:                  M32R-Opts.           (line   9)
   18020 * -m68000 and related options:           M68K-Opts.           (line 104)
   18021 * -m68hc11:                              M68HC11-Opts.        (line   9)
   18022 * -m68hc12:                              M68HC11-Opts.        (line  14)
   18023 * -m68hcs12:                             M68HC11-Opts.        (line  21)
   18024 * -m[no-]68851 command line option, M680x0: M68K-Opts.        (line  21)
   18025 * -m[no-]68881 command line option, M680x0: M68K-Opts.        (line  21)
   18026 * -m[no-]div command line option, M680x0: M68K-Opts.          (line  21)
   18027 * -m[no-]emac command line option, M680x0: M68K-Opts.         (line  21)
   18028 * -m[no-]float command line option, M680x0: M68K-Opts.        (line  21)
   18029 * -m[no-]mac command line option, M680x0: M68K-Opts.          (line  21)
   18030 * -m[no-]usp command line option, M680x0: M68K-Opts.          (line  21)
   18031 * -mall:                                 PDP-11-Options.      (line  26)
   18032 * -mall-extensions:                      PDP-11-Options.      (line  26)
   18033 * -mall-opcodes command line option, AVR: AVR Options.        (line  56)
   18034 * -mapcs command line option, ARM:       ARM Options.         (line  82)
   18035 * -mapcs-float command line option, ARM: ARM Options.         (line  95)
   18036 * -mapcs-reentrant command line option, ARM: ARM Options.     (line 100)
   18037 * -marc[5|6|7|8] command line option, ARC: ARC Options.       (line   6)
   18038 * -march= command line option, ARM:      ARM Options.         (line  39)
   18039 * -march= command line option, M680x0:   M68K-Opts.           (line   8)
   18040 * -march= option, i386:                  i386-Options.        (line  31)
   18041 * -march= option, x86-64:                i386-Options.        (line  31)
   18042 * -matpcs command line option, ARM:      ARM Options.         (line  87)
   18043 * -mcis:                                 PDP-11-Options.      (line  32)
   18044 * -mconstant-gp command line option, IA-64: IA-64 Options.    (line   6)
   18045 * -mCPU command line option, Alpha:      Alpha Options.       (line   6)
   18046 * -mcpu option, cpu:                     TIC54X-Opts.         (line  15)
   18047 * -mcpu= command line option, ARM:       ARM Options.         (line   6)
   18048 * -mcpu= command line option, M680x0:    M68K-Opts.           (line  14)
   18049 * -mcsm:                                 PDP-11-Options.      (line  43)
   18050 * -mdebug command line option, Alpha:    Alpha Options.       (line  25)
   18051 * -me option, stderr redirect:           TIC54X-Opts.         (line  20)
   18052 * -meis:                                 PDP-11-Options.      (line  46)
   18053 * -merrors-to-file option, stderr redirect: TIC54X-Opts.      (line  20)
   18054 * -mf option, far-mode:                  TIC54X-Opts.         (line   8)
   18055 * -mf11:                                 PDP-11-Options.      (line 122)
   18056 * -mfar-mode option, far-mode:           TIC54X-Opts.         (line   8)
   18057 * -mfis:                                 PDP-11-Options.      (line  51)
   18058 * -mfloat-abi= command line option, ARM: ARM Options.         (line 104)
   18059 * -mfp-11:                               PDP-11-Options.      (line  56)
   18060 * -mfpp:                                 PDP-11-Options.      (line  56)
   18061 * -mfpu:                                 PDP-11-Options.      (line  56)
   18062 * -mfpu= command line option, ARM:       ARM Options.         (line  54)
   18063 * -mip2022 option, IP2K:                 IP2K-Opts.           (line  14)
   18064 * -mip2022ext option, IP2022:            IP2K-Opts.           (line   9)
   18065 * -mj11:                                 PDP-11-Options.      (line 126)
   18066 * -mka11:                                PDP-11-Options.      (line  92)
   18067 * -mkb11:                                PDP-11-Options.      (line  95)
   18068 * -mkd11a:                               PDP-11-Options.      (line  98)
   18069 * -mkd11b:                               PDP-11-Options.      (line 101)
   18070 * -mkd11d:                               PDP-11-Options.      (line 104)
   18071 * -mkd11e:                               PDP-11-Options.      (line 107)
   18072 * -mkd11f:                               PDP-11-Options.      (line 110)
   18073 * -mkd11h:                               PDP-11-Options.      (line 110)
   18074 * -mkd11k:                               PDP-11-Options.      (line 114)
   18075 * -mkd11q:                               PDP-11-Options.      (line 110)
   18076 * -mkd11z:                               PDP-11-Options.      (line 118)
   18077 * -mkev11:                               PDP-11-Options.      (line  51)
   18078 * -mlimited-eis:                         PDP-11-Options.      (line  64)
   18079 * -mlong:                                M68HC11-Opts.        (line  32)
   18080 * -mlong-double:                         M68HC11-Opts.        (line  40)
   18081 * -mmcu= command line option, AVR:       AVR Options.         (line   6)
   18082 * -mmfpt:                                PDP-11-Options.      (line  70)
   18083 * -mmicrocode:                           PDP-11-Options.      (line  83)
   18084 * -mmnemonic= option, i386:              i386-Options.        (line  76)
   18085 * -mmnemonic= option, x86-64:            i386-Options.        (line  76)
   18086 * -mmutiproc:                            PDP-11-Options.      (line  73)
   18087 * -mmxps:                                PDP-11-Options.      (line  77)
   18088 * -mnaked-reg option, i386:              i386-Options.        (line  90)
   18089 * -mnaked-reg option, x86-64:            i386-Options.        (line  90)
   18090 * -mno-cis:                              PDP-11-Options.      (line  32)
   18091 * -mno-csm:                              PDP-11-Options.      (line  43)
   18092 * -mno-eis:                              PDP-11-Options.      (line  46)
   18093 * -mno-extensions:                       PDP-11-Options.      (line  29)
   18094 * -mno-fis:                              PDP-11-Options.      (line  51)
   18095 * -mno-fp-11:                            PDP-11-Options.      (line  56)
   18096 * -mno-fpp:                              PDP-11-Options.      (line  56)
   18097 * -mno-fpu:                              PDP-11-Options.      (line  56)
   18098 * -mno-kev11:                            PDP-11-Options.      (line  51)
   18099 * -mno-limited-eis:                      PDP-11-Options.      (line  64)
   18100 * -mno-mfpt:                             PDP-11-Options.      (line  70)
   18101 * -mno-microcode:                        PDP-11-Options.      (line  83)
   18102 * -mno-mutiproc:                         PDP-11-Options.      (line  73)
   18103 * -mno-mxps:                             PDP-11-Options.      (line  77)
   18104 * -mno-pic:                              PDP-11-Options.      (line  11)
   18105 * -mno-skip-bug command line option, AVR: AVR Options.        (line  59)
   18106 * -mno-spl:                              PDP-11-Options.      (line  80)
   18107 * -mno-sym32:                            MIPS Opts.           (line 184)
   18108 * -mno-wrap command line option, AVR:    AVR Options.         (line  62)
   18109 * -mpic:                                 PDP-11-Options.      (line  11)
   18110 * -mrelax command line option, V850:     V850 Options.        (line  51)
   18111 * -mshort:                               M68HC11-Opts.        (line  27)
   18112 * -mshort-double:                        M68HC11-Opts.        (line  36)
   18113 * -mspl:                                 PDP-11-Options.      (line  80)
   18114 * -msse-check= option, i386:             i386-Options.        (line  64)
   18115 * -msse-check= option, x86-64:           i386-Options.        (line  64)
   18116 * -msse2avx option, i386:                i386-Options.        (line  60)
   18117 * -msse2avx option, x86-64:              i386-Options.        (line  60)
   18118 * -msym32:                               MIPS Opts.           (line 184)
   18119 * -msyntax= option, i386:                i386-Options.        (line  83)
   18120 * -msyntax= option, x86-64:              i386-Options.        (line  83)
   18121 * -mt11:                                 PDP-11-Options.      (line 130)
   18122 * -mthumb command line option, ARM:      ARM Options.         (line  73)
   18123 * -mthumb-interwork command line option, ARM: ARM Options.    (line  78)
   18124 * -mtune= option, i386:                  i386-Options.        (line  52)
   18125 * -mtune= option, x86-64:                i386-Options.        (line  52)
   18126 * -mv850 command line option, V850:      V850 Options.        (line  23)
   18127 * -mv850any command line option, V850:   V850 Options.        (line  41)
   18128 * -mv850e command line option, V850:     V850 Options.        (line  29)
   18129 * -mv850e1 command line option, V850:    V850 Options.        (line  35)
   18130 * -mvxworks-pic option, MIPS:            MIPS Opts.           (line  26)
   18131 * -N command line option, CRIS:          CRIS-Opts.           (line  57)
   18132 * -nIp option, M32RX:                    M32R-Opts.           (line 101)
   18133 * -no-bitinst, M32R2:                    M32R-Opts.           (line  54)
   18134 * -no-ignore-parallel-conflicts option, M32RX: M32R-Opts.     (line  93)
   18135 * -no-mdebug command line option, Alpha: Alpha Options.       (line  25)
   18136 * -no-parallel option, M32RX:            M32R-Opts.           (line  51)
   18137 * -no-relax option, i960:                Options-i960.        (line  66)
   18138 * -no-warn-explicit-parallel-conflicts option, M32RX: M32R-Opts.
   18139                                                               (line  79)
   18140 * -no-warn-unmatched-high option, M32R:  M32R-Opts.           (line 111)
   18141 * -nocpp ignored (MIPS):                 MIPS Opts.           (line 187)
   18142 * -o:                                    o.                   (line   6)
   18143 * -O option, M32RX:                      M32R-Opts.           (line  59)
   18144 * -parallel option, M32RX:               M32R-Opts.           (line  46)
   18145 * -R:                                    R.                   (line   6)
   18146 * -r800 command line option, Z80:        Z80 Options.         (line  41)
   18147 * -relax command line option, Alpha:     Alpha Options.       (line  32)
   18148 * -S, ignored on VAX:                    VAX-Opts.            (line  11)
   18149 * -t, ignored on VAX:                    VAX-Opts.            (line  36)
   18150 * -T, ignored on VAX:                    VAX-Opts.            (line  11)
   18151 * -v:                                    v.                   (line   6)
   18152 * -V, redundant on VAX:                  VAX-Opts.            (line  22)
   18153 * -version:                              v.                   (line   6)
   18154 * -W:                                    W.                   (line  11)
   18155 * -warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. (line  65)
   18156 * -warn-unmatched-high option, M32R:     M32R-Opts.           (line 105)
   18157 * -Wnp option, M32RX:                    M32R-Opts.           (line  83)
   18158 * -Wnuh option, M32RX:                   M32R-Opts.           (line 117)
   18159 * -Wp option, M32RX:                     M32R-Opts.           (line  75)
   18160 * -wsigned_overflow command line option, V850: V850 Options.  (line   9)
   18161 * -Wuh option, M32RX:                    M32R-Opts.           (line 114)
   18162 * -wunsigned_overflow command line option, V850: V850 Options.
   18163                                                               (line  16)
   18164 * -x command line option, MMIX:          MMIX-Opts.           (line  44)
   18165 * -z80 command line option, Z80:         Z80 Options.         (line   8)
   18166 * -z8001 command line option, Z8000:     Z8000 Options.       (line   6)
   18167 * -z8002 command line option, Z8000:     Z8000 Options.       (line   9)
   18168 * . (symbol):                            Dot.                 (line   6)
   18169 * .arch directive, ARM:                  ARM Directives.      (line 210)
   18170 * .big directive, M32RX:                 M32R-Directives.     (line  88)
   18171 * .cantunwind directive, ARM:            ARM Directives.      (line 114)
   18172 * .cpu directive, ARM:                   ARM Directives.      (line 206)
   18173 * .eabi_attribute directive, ARM:        ARM Directives.      (line 224)
   18174 * .fnend directive, ARM:                 ARM Directives.      (line 105)
   18175 * .fnstart directive, ARM:               ARM Directives.      (line 102)
   18176 * .fpu directive, ARM:                   ARM Directives.      (line 220)
   18177 * .handlerdata directive, ARM:           ARM Directives.      (line 125)
   18178 * .insn:                                 MIPS insn.           (line   6)
   18179 * .little directive, M32RX:              M32R-Directives.     (line  82)
   18180 * .ltorg directive, ARM:                 ARM Directives.      (line  85)
   18181 * .m32r directive, M32R:                 M32R-Directives.     (line  66)
   18182 * .m32r2 directive, M32R2:               M32R-Directives.     (line  77)
   18183 * .m32rx directive, M32RX:               M32R-Directives.     (line  72)
   18184 * .movsp directive, ARM:                 ARM Directives.      (line 180)
   18185 * .o:                                    Object.              (line   6)
   18186 * .object_arch directive, ARM:           ARM Directives.      (line 214)
   18187 * .pad directive, ARM:                   ARM Directives.      (line 175)
   18188 * .param on HPPA:                        HPPA Directives.     (line  19)
   18189 * .personality directive, ARM:           ARM Directives.      (line 118)
   18190 * .personalityindex directive, ARM:      ARM Directives.      (line 121)
   18191 * .pool directive, ARM:                  ARM Directives.      (line  99)
   18192 * .save directive, ARM:                  ARM Directives.      (line 134)
   18193 * .set arch=CPU:                         MIPS ISA.            (line  18)
   18194 * .set autoextend:                       MIPS autoextend.     (line   6)
   18195 * .set dsp:                              MIPS ASE instruction generation overrides.
   18196                                                               (line  21)
   18197 * .set dspr2:                            MIPS ASE instruction generation overrides.
   18198                                                               (line  26)
   18199 * .set hardfloat:                        MIPS floating-point. (line   6)
   18200 * .set mdmx:                             MIPS ASE instruction generation overrides.
   18201                                                               (line  16)
   18202 * .set mips3d:                           MIPS ASE instruction generation overrides.
   18203                                                               (line   6)
   18204 * .set mipsN:                            MIPS ISA.            (line   6)
   18205 * .set mt:                               MIPS ASE instruction generation overrides.
   18206                                                               (line  32)
   18207 * .set noautoextend:                     MIPS autoextend.     (line   6)
   18208 * .set nodsp:                            MIPS ASE instruction generation overrides.
   18209                                                               (line  21)
   18210 * .set nodspr2:                          MIPS ASE instruction generation overrides.
   18211                                                               (line  26)
   18212 * .set nomdmx:                           MIPS ASE instruction generation overrides.
   18213                                                               (line  16)
   18214 * .set nomips3d:                         MIPS ASE instruction generation overrides.
   18215                                                               (line   6)
   18216 * .set nomt:                             MIPS ASE instruction generation overrides.
   18217                                                               (line  32)
   18218 * .set nosmartmips:                      MIPS ASE instruction generation overrides.
   18219                                                               (line  11)
   18220 * .set nosym32:                          MIPS symbol sizes.   (line   6)
   18221 * .set pop:                              MIPS option stack.   (line   6)
   18222 * .set push:                             MIPS option stack.   (line   6)
   18223 * .set smartmips:                        MIPS ASE instruction generation overrides.
   18224                                                               (line  11)
   18225 * .set softfloat:                        MIPS floating-point. (line   6)
   18226 * .set sym32:                            MIPS symbol sizes.   (line   6)
   18227 * .setfp directive, ARM:                 ARM Directives.      (line 185)
   18228 * .unwind_raw directive, ARM:            ARM Directives.      (line 199)
   18229 * .v850 directive, V850:                 V850 Directives.     (line  14)
   18230 * .v850e directive, V850:                V850 Directives.     (line  20)
   18231 * .v850e1 directive, V850:               V850 Directives.     (line  26)
   18232 * .vsave directive, ARM:                 ARM Directives.      (line 158)
   18233 * .z8001:                                Z8000 Directives.    (line  11)
   18234 * .z8002:                                Z8000 Directives.    (line  15)
   18235 * 16-bit code, i386:                     i386-16bit.          (line   6)
   18236 * 2byte directive, ARC:                  ARC Directives.      (line   9)
   18237 * 3byte directive, ARC:                  ARC Directives.      (line  12)
   18238 * 3DNow!, i386:                          i386-SIMD.           (line   6)
   18239 * 3DNow!, x86-64:                        i386-SIMD.           (line   6)
   18240 * 430 support:                           MSP430-Dependent.    (line   6)
   18241 * 4byte directive, ARC:                  ARC Directives.      (line  15)
   18242 * : (label):                             Statements.          (line  30)
   18243 * @word modifier, D10V:                  D10V-Word.           (line   6)
   18244 * \" (doublequote character):            Strings.             (line  43)
   18245 * \\ (\ character):                      Strings.             (line  40)
   18246 * \b (backspace character):              Strings.             (line  15)
   18247 * \DDD (octal character code):           Strings.             (line  30)
   18248 * \f (formfeed character):               Strings.             (line  18)
   18249 * \n (newline character):                Strings.             (line  21)
   18250 * \r (carriage return character):        Strings.             (line  24)
   18251 * \t (tab):                              Strings.             (line  27)
   18252 * \XD... (hex character code):           Strings.             (line  36)
   18253 * _ opcode prefix:                       Xtensa Opcodes.      (line   9)
   18254 * a.out:                                 Object.              (line   6)
   18255 * a.out symbol attributes:               a.out Symbols.       (line   6)
   18256 * A_DIR environment variable, TIC54X:    TIC54X-Env.          (line   6)
   18257 * ABI options, SH64:                     SH64 Options.        (line  29)
   18258 * ABORT directive:                       ABORT (COFF).        (line   6)
   18259 * abort directive:                       Abort.               (line   6)
   18260 * absolute section:                      Ld Sections.         (line  29)
   18261 * absolute-literals directive:           Absolute Literals Directive.
   18262                                                               (line   6)
   18263 * ADDI instructions, relaxation:         Xtensa Immediate Relaxation.
   18264                                                               (line  43)
   18265 * addition, permitted arguments:         Infix Ops.           (line  44)
   18266 * addresses:                             Expressions.         (line   6)
   18267 * addresses, format of:                  Secs Background.     (line  68)
   18268 * addressing modes, D10V:                D10V-Addressing.     (line   6)
   18269 * addressing modes, D30V:                D30V-Addressing.     (line   6)
   18270 * addressing modes, H8/300:              H8/300-Addressing.   (line   6)
   18271 * addressing modes, M680x0:              M68K-Syntax.         (line  21)
   18272 * addressing modes, M68HC11:             M68HC11-Syntax.      (line  17)
   18273 * addressing modes, SH:                  SH-Addressing.       (line   6)
   18274 * addressing modes, SH64:                SH64-Addressing.     (line   6)
   18275 * addressing modes, Z8000:               Z8000-Addressing.    (line   6)
   18276 * ADR reg,<label> pseudo op, ARM:        ARM Opcodes.         (line  25)
   18277 * ADRL reg,<label> pseudo op, ARM:       ARM Opcodes.         (line  35)
   18278 * advancing location counter:            Org.                 (line   6)
   18279 * align directive:                       Align.               (line   6)
   18280 * align directive, ARM:                  ARM Directives.      (line   6)
   18281 * align directive, SPARC:                Sparc-Directives.    (line   9)
   18282 * align directive, TIC54X:               TIC54X-Directives.   (line   6)
   18283 * alignment of branch targets:           Xtensa Automatic Alignment.
   18284                                                               (line   6)
   18285 * alignment of LOOP instructions:        Xtensa Automatic Alignment.
   18286                                                               (line   6)
   18287 * Alpha floating point (IEEE):           Alpha Floating Point.
   18288                                                               (line   6)
   18289 * Alpha line comment character:          Alpha-Chars.         (line   6)
   18290 * Alpha line separator:                  Alpha-Chars.         (line   8)
   18291 * Alpha notes:                           Alpha Notes.         (line   6)
   18292 * Alpha options:                         Alpha Options.       (line   6)
   18293 * Alpha registers:                       Alpha-Regs.          (line   6)
   18294 * Alpha relocations:                     Alpha-Relocs.        (line   6)
   18295 * Alpha support:                         Alpha-Dependent.     (line   6)
   18296 * Alpha Syntax:                          Alpha Options.       (line  54)
   18297 * Alpha-only directives:                 Alpha Directives.    (line  10)
   18298 * altered difference tables:             Word.                (line  12)
   18299 * alternate syntax for the 680x0:        M68K-Moto-Syntax.    (line   6)
   18300 * ARC floating point (IEEE):             ARC Floating Point.  (line   6)
   18301 * ARC machine directives:                ARC Directives.      (line   6)
   18302 * ARC opcodes:                           ARC Opcodes.         (line   6)
   18303 * ARC options (none):                    ARC Options.         (line   6)
   18304 * ARC register names:                    ARC-Regs.            (line   6)
   18305 * ARC special characters:                ARC-Chars.           (line   6)
   18306 * ARC support:                           ARC-Dependent.       (line   6)
   18307 * arc5 arc5, ARC:                        ARC Options.         (line  10)
   18308 * arc6 arc6, ARC:                        ARC Options.         (line  13)
   18309 * arc7 arc7, ARC:                        ARC Options.         (line  21)
   18310 * arc8 arc8, ARC:                        ARC Options.         (line  24)
   18311 * arch directive, i386:                  i386-Arch.           (line   6)
   18312 * arch directive, M680x0:                M68K-Directives.     (line  22)
   18313 * arch directive, x86-64:                i386-Arch.           (line   6)
   18314 * architecture options, i960:            Options-i960.        (line   6)
   18315 * architecture options, IP2022:          IP2K-Opts.           (line   9)
   18316 * architecture options, IP2K:            IP2K-Opts.           (line  14)
   18317 * architecture options, M16C:            M32C-Opts.           (line  12)
   18318 * architecture options, M32C:            M32C-Opts.           (line   9)
   18319 * architecture options, M32R:            M32R-Opts.           (line  21)
   18320 * architecture options, M32R2:           M32R-Opts.           (line  17)
   18321 * architecture options, M32RX:           M32R-Opts.           (line   9)
   18322 * architecture options, M680x0:          M68K-Opts.           (line 104)
   18323 * Architecture variant option, CRIS:     CRIS-Opts.           (line  33)
   18324 * architectures, PowerPC:                PowerPC-Opts.        (line   6)
   18325 * architectures, SPARC:                  Sparc-Opts.          (line   6)
   18326 * arguments for addition:                Infix Ops.           (line  44)
   18327 * arguments for subtraction:             Infix Ops.           (line  49)
   18328 * arguments in expressions:              Arguments.           (line   6)
   18329 * arithmetic functions:                  Operators.           (line   6)
   18330 * arithmetic operands:                   Arguments.           (line   6)
   18331 * ARM data relocations:                  ARM-Relocations.     (line   6)
   18332 * arm directive, ARM:                    ARM Directives.      (line  60)
   18333 * ARM floating point (IEEE):             ARM Floating Point.  (line   6)
   18334 * ARM identifiers:                       ARM-Chars.           (line  15)
   18335 * ARM immediate character:               ARM-Chars.           (line  13)
   18336 * ARM line comment character:            ARM-Chars.           (line   6)
   18337 * ARM line separator:                    ARM-Chars.           (line  10)
   18338 * ARM machine directives:                ARM Directives.      (line   6)
   18339 * ARM opcodes:                           ARM Opcodes.         (line   6)
   18340 * ARM options (none):                    ARM Options.         (line   6)
   18341 * ARM register names:                    ARM-Regs.            (line   6)
   18342 * ARM support:                           ARM-Dependent.       (line   6)
   18343 * ascii directive:                       Ascii.               (line   6)
   18344 * asciz directive:                       Asciz.               (line   6)
   18345 * asg directive, TIC54X:                 TIC54X-Directives.   (line  20)
   18346 * assembler bugs, reporting:             Bug Reporting.       (line   6)
   18347 * assembler crash:                       Bug Criteria.        (line   9)
   18348 * assembler directive .arch, CRIS:       CRIS-Pseudos.        (line  45)
   18349 * assembler directive .dword, CRIS:      CRIS-Pseudos.        (line  12)
   18350 * assembler directive .far, M68HC11:     M68HC11-Directives.  (line  20)
   18351 * assembler directive .interrupt, M68HC11: M68HC11-Directives.
   18352                                                               (line  26)
   18353 * assembler directive .mode, M68HC11:    M68HC11-Directives.  (line  16)
   18354 * assembler directive .relax, M68HC11:   M68HC11-Directives.  (line  10)
   18355 * assembler directive .syntax, CRIS:     CRIS-Pseudos.        (line  17)
   18356 * assembler directive .xrefb, M68HC11:   M68HC11-Directives.  (line  31)
   18357 * assembler directive BSPEC, MMIX:       MMIX-Pseudos.        (line 131)
   18358 * assembler directive BYTE, MMIX:        MMIX-Pseudos.        (line  97)
   18359 * assembler directive ESPEC, MMIX:       MMIX-Pseudos.        (line 131)
   18360 * assembler directive GREG, MMIX:        MMIX-Pseudos.        (line  50)
   18361 * assembler directive IS, MMIX:          MMIX-Pseudos.        (line  42)
   18362 * assembler directive LOC, MMIX:         MMIX-Pseudos.        (line   7)
   18363 * assembler directive LOCAL, MMIX:       MMIX-Pseudos.        (line  28)
   18364 * assembler directive OCTA, MMIX:        MMIX-Pseudos.        (line 108)
   18365 * assembler directive PREFIX, MMIX:      MMIX-Pseudos.        (line 120)
   18366 * assembler directive TETRA, MMIX:       MMIX-Pseudos.        (line 108)
   18367 * assembler directive WYDE, MMIX:        MMIX-Pseudos.        (line 108)
   18368 * assembler directives, CRIS:            CRIS-Pseudos.        (line   6)
   18369 * assembler directives, M68HC11:         M68HC11-Directives.  (line   6)
   18370 * assembler directives, M68HC12:         M68HC11-Directives.  (line   6)
   18371 * assembler directives, MMIX:            MMIX-Pseudos.        (line   6)
   18372 * assembler internal logic error:        As Sections.         (line  13)
   18373 * assembler version:                     v.                   (line   6)
   18374 * assembler, and linker:                 Secs Background.     (line  10)
   18375 * assembly listings, enabling:           a.                   (line   6)
   18376 * assigning values to symbols <1>:       Equ.                 (line   6)
   18377 * assigning values to symbols:           Setting Symbols.     (line   6)
   18378 * atmp directive, i860:                  Directives-i860.     (line  16)
   18379 * att_syntax pseudo op, i386:            i386-Syntax.         (line   6)
   18380 * att_syntax pseudo op, x86-64:          i386-Syntax.         (line   6)
   18381 * attributes, symbol:                    Symbol Attributes.   (line   6)
   18382 * auxiliary attributes, COFF symbols:    COFF Symbols.        (line  19)
   18383 * auxiliary symbol information, COFF:    Dim.                 (line   6)
   18384 * Av7:                                   Sparc-Opts.          (line  25)
   18385 * AVR line comment character:            AVR-Chars.           (line   6)
   18386 * AVR line separator:                    AVR-Chars.           (line  10)
   18387 * AVR modifiers:                         AVR-Modifiers.       (line   6)
   18388 * AVR opcode summary:                    AVR Opcodes.         (line   6)
   18389 * AVR options (none):                    AVR Options.         (line   6)
   18390 * AVR register names:                    AVR-Regs.            (line   6)
   18391 * AVR support:                           AVR-Dependent.       (line   6)
   18392 * backslash (\\):                        Strings.             (line  40)
   18393 * backspace (\b):                        Strings.             (line  15)
   18394 * balign directive:                      Balign.              (line   6)
   18395 * balignl directive:                     Balign.              (line  27)
   18396 * balignw directive:                     Balign.              (line  27)
   18397 * bes directive, TIC54X:                 TIC54X-Directives.   (line 197)
   18398 * BFIN directives:                       BFIN Directives.     (line   6)
   18399 * BFIN syntax:                           BFIN Syntax.         (line   6)
   18400 * big endian output, MIPS:               Overview.            (line 629)
   18401 * big endian output, PJ:                 Overview.            (line 536)
   18402 * big-endian output, MIPS:               MIPS Opts.           (line  13)
   18403 * bignums:                               Bignums.             (line   6)
   18404 * binary constants, TIC54X:              TIC54X-Constants.    (line   8)
   18405 * binary files, including:               Incbin.              (line   6)
   18406 * binary integers:                       Integers.            (line   6)
   18407 * bit names, IA-64:                      IA-64-Bits.          (line   6)
   18408 * bitfields, not supported on VAX:       VAX-no.              (line   6)
   18409 * Blackfin support:                      BFIN-Dependent.      (line   6)
   18410 * block:                                 Z8000 Directives.    (line  55)
   18411 * branch improvement, M680x0:            M68K-Branch.         (line   6)
   18412 * branch improvement, M68HC11:           M68HC11-Branch.      (line   6)
   18413 * branch improvement, VAX:               VAX-branch.          (line   6)
   18414 * branch instructions, relaxation:       Xtensa Branch Relaxation.
   18415                                                               (line   6)
   18416 * branch recording, i960:                Options-i960.        (line  22)
   18417 * branch statistics table, i960:         Options-i960.        (line  40)
   18418 * branch target alignment:               Xtensa Automatic Alignment.
   18419                                                               (line   6)
   18420 * break directive, TIC54X:               TIC54X-Directives.   (line 143)
   18421 * BSD syntax:                            PDP-11-Syntax.       (line   6)
   18422 * bss directive, i960:                   Directives-i960.     (line   6)
   18423 * bss directive, TIC54X:                 TIC54X-Directives.   (line  29)
   18424 * bss section <1>:                       bss.                 (line   6)
   18425 * bss section:                           Ld Sections.         (line  20)
   18426 * bug criteria:                          Bug Criteria.        (line   6)
   18427 * bug reports:                           Bug Reporting.       (line   6)
   18428 * bugs in assembler:                     Reporting Bugs.      (line   6)
   18429 * Built-in symbols, CRIS:                CRIS-Symbols.        (line   6)
   18430 * builtin math functions, TIC54X:        TIC54X-Builtins.     (line   6)
   18431 * builtin subsym functions, TIC54X:      TIC54X-Macros.       (line  16)
   18432 * bus lock prefixes, i386:               i386-Prefixes.       (line  36)
   18433 * bval:                                  Z8000 Directives.    (line  30)
   18434 * byte directive:                        Byte.                (line   6)
   18435 * byte directive, TIC54X:                TIC54X-Directives.   (line  36)
   18436 * C54XDSP_DIR environment variable, TIC54X: TIC54X-Env.       (line   6)
   18437 * c_mode directive, TIC54X:              TIC54X-Directives.   (line  51)
   18438 * call instructions, i386:               i386-Mnemonics.      (line  51)
   18439 * call instructions, relaxation:         Xtensa Call Relaxation.
   18440                                                               (line   6)
   18441 * call instructions, x86-64:             i386-Mnemonics.      (line  51)
   18442 * callj, i960 pseudo-opcode:             callj-i960.          (line   6)
   18443 * carriage return (\r):                  Strings.             (line  24)
   18444 * case sensitivity, Z80:                 Z80-Case.            (line   6)
   18445 * cfi_endproc directive:                 CFI directives.      (line  16)
   18446 * cfi_startproc directive:               CFI directives.      (line   6)
   18447 * char directive, TIC54X:                TIC54X-Directives.   (line  36)
   18448 * character constant, Z80:               Z80-Chars.           (line  13)
   18449 * character constants:                   Characters.          (line   6)
   18450 * character escape codes:                Strings.             (line  15)
   18451 * character escapes, Z80:                Z80-Chars.           (line  11)
   18452 * character, single:                     Chars.               (line   6)
   18453 * characters used in symbols:            Symbol Intro.        (line   6)
   18454 * clink directive, TIC54X:               TIC54X-Directives.   (line  45)
   18455 * code directive, ARM:                   ARM Directives.      (line  53)
   18456 * code16 directive, i386:                i386-16bit.          (line   6)
   18457 * code16gcc directive, i386:             i386-16bit.          (line   6)
   18458 * code32 directive, i386:                i386-16bit.          (line   6)
   18459 * code64 directive, i386:                i386-16bit.          (line   6)
   18460 * code64 directive, x86-64:              i386-16bit.          (line   6)
   18461 * COFF auxiliary symbol information:     Dim.                 (line   6)
   18462 * COFF structure debugging:              Tag.                 (line   6)
   18463 * COFF symbol attributes:                COFF Symbols.        (line   6)
   18464 * COFF symbol descriptor:                Desc.                (line   6)
   18465 * COFF symbol storage class:             Scl.                 (line   6)
   18466 * COFF symbol type:                      Type.                (line  11)
   18467 * COFF symbols, debugging:               Def.                 (line   6)
   18468 * COFF value attribute:                  Val.                 (line   6)
   18469 * COMDAT:                                Linkonce.            (line   6)
   18470 * comm directive:                        Comm.                (line   6)
   18471 * command line conventions:              Command Line.        (line   6)
   18472 * command line options, V850:            V850 Options.        (line   9)
   18473 * command-line options ignored, VAX:     VAX-Opts.            (line   6)
   18474 * comments:                              Comments.            (line   6)
   18475 * comments, M680x0:                      M68K-Chars.          (line   6)
   18476 * comments, removed by preprocessor:     Preprocessing.       (line  11)
   18477 * common directive, SPARC:               Sparc-Directives.    (line  12)
   18478 * common sections:                       Linkonce.            (line   6)
   18479 * common variable storage:               bss.                 (line   6)
   18480 * compare and jump expansions, i960:     Compare-and-branch-i960.
   18481                                                               (line  13)
   18482 * compare/branch instructions, i960:     Compare-and-branch-i960.
   18483                                                               (line   6)
   18484 * comparison expressions:                Infix Ops.           (line  55)
   18485 * conditional assembly:                  If.                  (line   6)
   18486 * constant, single character:            Chars.               (line   6)
   18487 * constants:                             Constants.           (line   6)
   18488 * constants, bignum:                     Bignums.             (line   6)
   18489 * constants, character:                  Characters.          (line   6)
   18490 * constants, converted by preprocessor:  Preprocessing.       (line  14)
   18491 * constants, floating point:             Flonums.             (line   6)
   18492 * constants, integer:                    Integers.            (line   6)
   18493 * constants, number:                     Numbers.             (line   6)
   18494 * constants, Sparc:                      Sparc-Constants.     (line   6)
   18495 * constants, string:                     Strings.             (line   6)
   18496 * constants, TIC54X:                     TIC54X-Constants.    (line   6)
   18497 * conversion instructions, i386:         i386-Mnemonics.      (line  32)
   18498 * conversion instructions, x86-64:       i386-Mnemonics.      (line  32)
   18499 * coprocessor wait, i386:                i386-Prefixes.       (line  40)
   18500 * copy directive, TIC54X:                TIC54X-Directives.   (line  54)
   18501 * cpu directive, M680x0:                 M68K-Directives.     (line  30)
   18502 * CR16 Operand Qualifiers:               CR16 Operand Qualifiers.
   18503                                                               (line   6)
   18504 * CR16 support:                          CR16-Dependent.      (line   6)
   18505 * crash of assembler:                    Bug Criteria.        (line   9)
   18506 * CRIS --emulation=crisaout command line option: CRIS-Opts.   (line   9)
   18507 * CRIS --emulation=criself command line option: CRIS-Opts.    (line   9)
   18508 * CRIS --march=ARCHITECTURE command line option: CRIS-Opts.   (line  33)
   18509 * CRIS --mul-bug-abort command line option: CRIS-Opts.        (line  61)
   18510 * CRIS --no-mul-bug-abort command line option: CRIS-Opts.     (line  61)
   18511 * CRIS --no-underscore command line option: CRIS-Opts.        (line  15)
   18512 * CRIS --pic command line option:        CRIS-Opts.           (line  27)
   18513 * CRIS --underscore command line option: CRIS-Opts.           (line  15)
   18514 * CRIS -N command line option:           CRIS-Opts.           (line  57)
   18515 * CRIS architecture variant option:      CRIS-Opts.           (line  33)
   18516 * CRIS assembler directive .arch:        CRIS-Pseudos.        (line  45)
   18517 * CRIS assembler directive .dword:       CRIS-Pseudos.        (line  12)
   18518 * CRIS assembler directive .syntax:      CRIS-Pseudos.        (line  17)
   18519 * CRIS assembler directives:             CRIS-Pseudos.        (line   6)
   18520 * CRIS built-in symbols:                 CRIS-Symbols.        (line   6)
   18521 * CRIS instruction expansion:            CRIS-Expand.         (line   6)
   18522 * CRIS line comment characters:          CRIS-Chars.          (line   6)
   18523 * CRIS options:                          CRIS-Opts.           (line   6)
   18524 * CRIS position-independent code:        CRIS-Opts.           (line  27)
   18525 * CRIS pseudo-op .arch:                  CRIS-Pseudos.        (line  45)
   18526 * CRIS pseudo-op .dword:                 CRIS-Pseudos.        (line  12)
   18527 * CRIS pseudo-op .syntax:                CRIS-Pseudos.        (line  17)
   18528 * CRIS pseudo-ops:                       CRIS-Pseudos.        (line   6)
   18529 * CRIS register names:                   CRIS-Regs.           (line   6)
   18530 * CRIS support:                          CRIS-Dependent.      (line   6)
   18531 * CRIS symbols in position-independent code: CRIS-Pic.        (line   6)
   18532 * ctbp register, V850:                   V850-Regs.           (line 131)
   18533 * ctoff pseudo-op, V850:                 V850 Opcodes.        (line 111)
   18534 * ctpc register, V850:                   V850-Regs.           (line 119)
   18535 * ctpsw register, V850:                  V850-Regs.           (line 122)
   18536 * current address:                       Dot.                 (line   6)
   18537 * current address, advancing:            Org.                 (line   6)
   18538 * D10V @word modifier:                   D10V-Word.           (line   6)
   18539 * D10V addressing modes:                 D10V-Addressing.     (line   6)
   18540 * D10V floating point:                   D10V-Float.          (line   6)
   18541 * D10V line comment character:           D10V-Chars.          (line   6)
   18542 * D10V opcode summary:                   D10V-Opcodes.        (line   6)
   18543 * D10V optimization:                     Overview.            (line 408)
   18544 * D10V options:                          D10V-Opts.           (line   6)
   18545 * D10V registers:                        D10V-Regs.           (line   6)
   18546 * D10V size modifiers:                   D10V-Size.           (line   6)
   18547 * D10V sub-instruction ordering:         D10V-Chars.          (line   6)
   18548 * D10V sub-instructions:                 D10V-Subs.           (line   6)
   18549 * D10V support:                          D10V-Dependent.      (line   6)
   18550 * D10V syntax:                           D10V-Syntax.         (line   6)
   18551 * D30V addressing modes:                 D30V-Addressing.     (line   6)
   18552 * D30V floating point:                   D30V-Float.          (line   6)
   18553 * D30V Guarded Execution:                D30V-Guarded.        (line   6)
   18554 * D30V line comment character:           D30V-Chars.          (line   6)
   18555 * D30V nops:                             Overview.            (line 416)
   18556 * D30V nops after 32-bit multiply:       Overview.            (line 419)
   18557 * D30V opcode summary:                   D30V-Opcodes.        (line   6)
   18558 * D30V optimization:                     Overview.            (line 413)
   18559 * D30V options:                          D30V-Opts.           (line   6)
   18560 * D30V registers:                        D30V-Regs.           (line   6)
   18561 * D30V size modifiers:                   D30V-Size.           (line   6)
   18562 * D30V sub-instruction ordering:         D30V-Chars.          (line   6)
   18563 * D30V sub-instructions:                 D30V-Subs.           (line   6)
   18564 * D30V support:                          D30V-Dependent.      (line   6)
   18565 * D30V syntax:                           D30V-Syntax.         (line   6)
   18566 * data alignment on SPARC:               Sparc-Aligned-Data.  (line   6)
   18567 * data and text sections, joining:       R.                   (line   6)
   18568 * data directive:                        Data.                (line   6)
   18569 * data directive, TIC54X:                TIC54X-Directives.   (line  61)
   18570 * data relocations, ARM:                 ARM-Relocations.     (line   6)
   18571 * data section:                          Ld Sections.         (line   9)
   18572 * data1 directive, M680x0:               M68K-Directives.     (line   9)
   18573 * data2 directive, M680x0:               M68K-Directives.     (line  12)
   18574 * datalabel, SH64:                       SH64-Addressing.     (line  16)
   18575 * dbpc register, V850:                   V850-Regs.           (line 125)
   18576 * dbpsw register, V850:                  V850-Regs.           (line 128)
   18577 * debuggers, and symbol order:           Symbols.             (line  10)
   18578 * debugging COFF symbols:                Def.                 (line   6)
   18579 * DEC syntax:                            PDP-11-Syntax.       (line   6)
   18580 * decimal integers:                      Integers.            (line  12)
   18581 * def directive:                         Def.                 (line   6)
   18582 * def directive, TIC54X:                 TIC54X-Directives.   (line 103)
   18583 * density instructions:                  Density Instructions.
   18584                                                               (line   6)
   18585 * dependency tracking:                   MD.                  (line   6)
   18586 * deprecated directives:                 Deprecated.          (line   6)
   18587 * desc directive:                        Desc.                (line   6)
   18588 * descriptor, of a.out symbol:           Symbol Desc.         (line   6)
   18589 * dfloat directive, VAX:                 VAX-directives.      (line  10)
   18590 * difference tables altered:             Word.                (line  12)
   18591 * difference tables, warning:            K.                   (line   6)
   18592 * differences, mmixal:                   MMIX-mmixal.         (line   6)
   18593 * dim directive:                         Dim.                 (line   6)
   18594 * directives and instructions:           Statements.          (line  19)
   18595 * directives for PowerPC:                PowerPC-Pseudo.      (line   6)
   18596 * directives, BFIN:                      BFIN Directives.     (line   6)
   18597 * directives, M32R:                      M32R-Directives.     (line   6)
   18598 * directives, M680x0:                    M68K-Directives.     (line   6)
   18599 * directives, machine independent:       Pseudo Ops.          (line   6)
   18600 * directives, Xtensa:                    Xtensa Directives.   (line   6)
   18601 * directives, Z8000:                     Z8000 Directives.    (line   6)
   18602 * Disable floating-point instructions:   MIPS floating-point. (line   6)
   18603 * Disable single-precision floating-point operations: MIPS floating-point.
   18604                                                               (line  12)
   18605 * displacement sizing character, VAX:    VAX-operands.        (line  12)
   18606 * dn and qn directives, ARM:             ARM Directives.      (line  29)
   18607 * dollar local symbols:                  Symbol Names.        (line 105)
   18608 * dot (symbol):                          Dot.                 (line   6)
   18609 * double directive:                      Double.              (line   6)
   18610 * double directive, i386:                i386-Float.          (line  14)
   18611 * double directive, M680x0:              M68K-Float.          (line  14)
   18612 * double directive, M68HC11:             M68HC11-Float.       (line  14)
   18613 * double directive, TIC54X:              TIC54X-Directives.   (line  64)
   18614 * double directive, VAX:                 VAX-float.           (line  15)
   18615 * double directive, x86-64:              i386-Float.          (line  14)
   18616 * doublequote (\"):                      Strings.             (line  43)
   18617 * drlist directive, TIC54X:              TIC54X-Directives.   (line  73)
   18618 * drnolist directive, TIC54X:            TIC54X-Directives.   (line  73)
   18619 * dual directive, i860:                  Directives-i860.     (line   6)
   18620 * ECOFF sections:                        MIPS Object.         (line   6)
   18621 * ecr register, V850:                    V850-Regs.           (line 113)
   18622 * eight-byte integer:                    Quad.                (line   9)
   18623 * eipc register, V850:                   V850-Regs.           (line 101)
   18624 * eipsw register, V850:                  V850-Regs.           (line 104)
   18625 * eject directive:                       Eject.               (line   6)
   18626 * ELF symbol type:                       Type.                (line  22)
   18627 * else directive:                        Else.                (line   6)
   18628 * elseif directive:                      Elseif.              (line   6)
   18629 * empty expressions:                     Empty Exprs.         (line   6)
   18630 * emsg directive, TIC54X:                TIC54X-Directives.   (line  77)
   18631 * emulation:                             Overview.            (line 732)
   18632 * end directive:                         End.                 (line   6)
   18633 * enddual directive, i860:               Directives-i860.     (line  11)
   18634 * endef directive:                       Endef.               (line   6)
   18635 * endfunc directive:                     Endfunc.             (line   6)
   18636 * endianness, MIPS:                      Overview.            (line 629)
   18637 * endianness, PJ:                        Overview.            (line 536)
   18638 * endif directive:                       Endif.               (line   6)
   18639 * endloop directive, TIC54X:             TIC54X-Directives.   (line 143)
   18640 * endm directive:                        Macro.               (line 138)
   18641 * endm directive, TIC54X:                TIC54X-Directives.   (line 153)
   18642 * endstruct directive, TIC54X:           TIC54X-Directives.   (line 217)
   18643 * endunion directive, TIC54X:            TIC54X-Directives.   (line 251)
   18644 * environment settings, TIC54X:          TIC54X-Env.          (line   6)
   18645 * EOF, newline must precede:             Statements.          (line  13)
   18646 * ep register, V850:                     V850-Regs.           (line  95)
   18647 * equ directive:                         Equ.                 (line   6)
   18648 * equ directive, TIC54X:                 TIC54X-Directives.   (line 192)
   18649 * equiv directive:                       Equiv.               (line   6)
   18650 * eqv directive:                         Eqv.                 (line   6)
   18651 * err directive:                         Err.                 (line   6)
   18652 * error directive:                       Error.               (line   6)
   18653 * error messages:                        Errors.              (line   6)
   18654 * error on valid input:                  Bug Criteria.        (line  12)
   18655 * errors, caused by warnings:            W.                   (line  16)
   18656 * errors, continuing after:              Z.                   (line   6)
   18657 * ESA/390 floating point (IEEE):         ESA/390 Floating Point.
   18658                                                               (line   6)
   18659 * ESA/390 support:                       ESA/390-Dependent.   (line   6)
   18660 * ESA/390 Syntax:                        ESA/390 Options.     (line   8)
   18661 * ESA/390-only directives:               ESA/390 Directives.  (line  12)
   18662 * escape codes, character:               Strings.             (line  15)
   18663 * eval directive, TIC54X:                TIC54X-Directives.   (line  24)
   18664 * even:                                  Z8000 Directives.    (line  58)
   18665 * even directive, M680x0:                M68K-Directives.     (line  15)
   18666 * even directive, TIC54X:                TIC54X-Directives.   (line   6)
   18667 * exitm directive:                       Macro.               (line 141)
   18668 * expr (internal section):               As Sections.         (line  17)
   18669 * expression arguments:                  Arguments.           (line   6)
   18670 * expressions:                           Expressions.         (line   6)
   18671 * expressions, comparison:               Infix Ops.           (line  55)
   18672 * expressions, empty:                    Empty Exprs.         (line   6)
   18673 * expressions, integer:                  Integer Exprs.       (line   6)
   18674 * extAuxRegister directive, ARC:         ARC Directives.      (line  18)
   18675 * extCondCode directive, ARC:            ARC Directives.      (line  41)
   18676 * extCoreRegister directive, ARC:        ARC Directives.      (line  53)
   18677 * extend directive M680x0:               M68K-Float.          (line  17)
   18678 * extend directive M68HC11:              M68HC11-Float.       (line  17)
   18679 * extended directive, i960:              Directives-i960.     (line  13)
   18680 * extern directive:                      Extern.              (line   6)
   18681 * extInstruction directive, ARC:         ARC Directives.      (line  78)
   18682 * fail directive:                        Fail.                (line   6)
   18683 * far_mode directive, TIC54X:            TIC54X-Directives.   (line  82)
   18684 * faster processing (-f):                f.                   (line   6)
   18685 * fatal signal:                          Bug Criteria.        (line   9)
   18686 * fclist directive, TIC54X:              TIC54X-Directives.   (line  87)
   18687 * fcnolist directive, TIC54X:            TIC54X-Directives.   (line  87)
   18688 * fepc register, V850:                   V850-Regs.           (line 107)
   18689 * fepsw register, V850:                  V850-Regs.           (line 110)
   18690 * ffloat directive, VAX:                 VAX-directives.      (line  14)
   18691 * field directive, TIC54X:               TIC54X-Directives.   (line  91)
   18692 * file directive <1>:                    File.                (line   6)
   18693 * file directive:                        LNS directives.      (line   6)
   18694 * file directive, MSP 430:               MSP430 Directives.   (line   6)
   18695 * file name, logical:                    File.                (line   6)
   18696 * files, including:                      Include.             (line   6)
   18697 * files, input:                          Input Files.         (line   6)
   18698 * fill directive:                        Fill.                (line   6)
   18699 * filling memory <1>:                    Space.               (line   6)
   18700 * filling memory:                        Skip.                (line   6)
   18701 * FLIX syntax:                           Xtensa Syntax.       (line   6)
   18702 * float directive:                       Float.               (line   6)
   18703 * float directive, i386:                 i386-Float.          (line  14)
   18704 * float directive, M680x0:               M68K-Float.          (line  11)
   18705 * float directive, M68HC11:              M68HC11-Float.       (line  11)
   18706 * float directive, TIC54X:               TIC54X-Directives.   (line  64)
   18707 * float directive, VAX:                  VAX-float.           (line  15)
   18708 * float directive, x86-64:               i386-Float.          (line  14)
   18709 * floating point numbers:                Flonums.             (line   6)
   18710 * floating point numbers (double):       Double.              (line   6)
   18711 * floating point numbers (single) <1>:   Single.              (line   6)
   18712 * floating point numbers (single):       Float.               (line   6)
   18713 * floating point, Alpha (IEEE):          Alpha Floating Point.
   18714                                                               (line   6)
   18715 * floating point, ARC (IEEE):            ARC Floating Point.  (line   6)
   18716 * floating point, ARM (IEEE):            ARM Floating Point.  (line   6)
   18717 * floating point, D10V:                  D10V-Float.          (line   6)
   18718 * floating point, D30V:                  D30V-Float.          (line   6)
   18719 * floating point, ESA/390 (IEEE):        ESA/390 Floating Point.
   18720                                                               (line   6)
   18721 * floating point, H8/300 (IEEE):         H8/300 Floating Point.
   18722                                                               (line   6)
   18723 * floating point, HPPA (IEEE):           HPPA Floating Point. (line   6)
   18724 * floating point, i386:                  i386-Float.          (line   6)
   18725 * floating point, i960 (IEEE):           Floating Point-i960. (line   6)
   18726 * floating point, M680x0:                M68K-Float.          (line   6)
   18727 * floating point, M68HC11:               M68HC11-Float.       (line   6)
   18728 * floating point, MSP 430 (IEEE):        MSP430 Floating Point.
   18729                                                               (line   6)
   18730 * floating point, SH (IEEE):             SH Floating Point.   (line   6)
   18731 * floating point, SPARC (IEEE):          Sparc-Float.         (line   6)
   18732 * floating point, V850 (IEEE):           V850 Floating Point. (line   6)
   18733 * floating point, VAX:                   VAX-float.           (line   6)
   18734 * floating point, x86-64:                i386-Float.          (line   6)
   18735 * floating point, Z80:                   Z80 Floating Point.  (line   6)
   18736 * flonums:                               Flonums.             (line   6)
   18737 * force_thumb directive, ARM:            ARM Directives.      (line  63)
   18738 * format of error messages:              Errors.              (line  24)
   18739 * format of warning messages:            Errors.              (line  12)
   18740 * formfeed (\f):                         Strings.             (line  18)
   18741 * func directive:                        Func.                (line   6)
   18742 * functions, in expressions:             Operators.           (line   6)
   18743 * gbr960, i960 postprocessor:            Options-i960.        (line  40)
   18744 * gfloat directive, VAX:                 VAX-directives.      (line  18)
   18745 * global:                                Z8000 Directives.    (line  21)
   18746 * global directive:                      Global.              (line   6)
   18747 * global directive, TIC54X:              TIC54X-Directives.   (line 103)
   18748 * gp register, MIPS:                     MIPS Object.         (line  11)
   18749 * gp register, V850:                     V850-Regs.           (line  17)
   18750 * grouping data:                         Sub-Sections.        (line   6)
   18751 * H8/300 addressing modes:               H8/300-Addressing.   (line   6)
   18752 * H8/300 floating point (IEEE):          H8/300 Floating Point.
   18753                                                               (line   6)
   18754 * H8/300 line comment character:         H8/300-Chars.        (line   6)
   18755 * H8/300 line separator:                 H8/300-Chars.        (line   8)
   18756 * H8/300 machine directives (none):      H8/300 Directives.   (line   6)
   18757 * H8/300 opcode summary:                 H8/300 Opcodes.      (line   6)
   18758 * H8/300 options:                        H8/300 Options.      (line   6)
   18759 * H8/300 registers:                      H8/300-Regs.         (line   6)
   18760 * H8/300 size suffixes:                  H8/300 Opcodes.      (line 163)
   18761 * H8/300 support:                        H8/300-Dependent.    (line   6)
   18762 * H8/300H, assembling for:               H8/300 Directives.   (line   8)
   18763 * half directive, ARC:                   ARC Directives.      (line 156)
   18764 * half directive, SPARC:                 Sparc-Directives.    (line  17)
   18765 * half directive, TIC54X:                TIC54X-Directives.   (line 111)
   18766 * hex character code (\XD...):           Strings.             (line  36)
   18767 * hexadecimal integers:                  Integers.            (line  15)
   18768 * hexadecimal prefix, Z80:               Z80-Chars.           (line   8)
   18769 * hfloat directive, VAX:                 VAX-directives.      (line  22)
   18770 * hi pseudo-op, V850:                    V850 Opcodes.        (line  33)
   18771 * hi0 pseudo-op, V850:                   V850 Opcodes.        (line  10)
   18772 * hidden directive:                      Hidden.              (line   6)
   18773 * high directive, M32R:                  M32R-Directives.     (line  18)
   18774 * hilo pseudo-op, V850:                  V850 Opcodes.        (line  55)
   18775 * HPPA directives not supported:         HPPA Directives.     (line  11)
   18776 * HPPA floating point (IEEE):            HPPA Floating Point. (line   6)
   18777 * HPPA Syntax:                           HPPA Options.        (line   8)
   18778 * HPPA-only directives:                  HPPA Directives.     (line  24)
   18779 * hword directive:                       hword.               (line   6)
   18780 * i370 support:                          ESA/390-Dependent.   (line   6)
   18781 * i386 16-bit code:                      i386-16bit.          (line   6)
   18782 * i386 arch directive:                   i386-Arch.           (line   6)
   18783 * i386 att_syntax pseudo op:             i386-Syntax.         (line   6)
   18784 * i386 conversion instructions:          i386-Mnemonics.      (line  32)
   18785 * i386 floating point:                   i386-Float.          (line   6)
   18786 * i386 immediate operands:               i386-Syntax.         (line  15)
   18787 * i386 instruction naming:               i386-Mnemonics.      (line   6)
   18788 * i386 instruction prefixes:             i386-Prefixes.       (line   6)
   18789 * i386 intel_syntax pseudo op:           i386-Syntax.         (line   6)
   18790 * i386 jump optimization:                i386-Jumps.          (line   6)
   18791 * i386 jump, call, return:               i386-Syntax.         (line  38)
   18792 * i386 jump/call operands:               i386-Syntax.         (line  15)
   18793 * i386 memory references:                i386-Memory.         (line   6)
   18794 * i386 mnemonic compatibility:           i386-Mnemonics.      (line  57)
   18795 * i386 mul, imul instructions:           i386-Notes.          (line   6)
   18796 * i386 options:                          i386-Options.        (line   6)
   18797 * i386 register operands:                i386-Syntax.         (line  15)
   18798 * i386 registers:                        i386-Regs.           (line   6)
   18799 * i386 sections:                         i386-Syntax.         (line  44)
   18800 * i386 size suffixes:                    i386-Syntax.         (line  29)
   18801 * i386 source, destination operands:     i386-Syntax.         (line  22)
   18802 * i386 support:                          i386-Dependent.      (line   6)
   18803 * i386 syntax compatibility:             i386-Syntax.         (line   6)
   18804 * i80306 support:                        i386-Dependent.      (line   6)
   18805 * i860 machine directives:               Directives-i860.     (line   6)
   18806 * i860 opcodes:                          Opcodes for i860.    (line   6)
   18807 * i860 support:                          i860-Dependent.      (line   6)
   18808 * i960 architecture options:             Options-i960.        (line   6)
   18809 * i960 branch recording:                 Options-i960.        (line  22)
   18810 * i960 callj pseudo-opcode:              callj-i960.          (line   6)
   18811 * i960 compare and jump expansions:      Compare-and-branch-i960.
   18812                                                               (line  13)
   18813 * i960 compare/branch instructions:      Compare-and-branch-i960.
   18814                                                               (line   6)
   18815 * i960 floating point (IEEE):            Floating Point-i960. (line   6)
   18816 * i960 machine directives:               Directives-i960.     (line   6)
   18817 * i960 opcodes:                          Opcodes for i960.    (line   6)
   18818 * i960 options:                          Options-i960.        (line   6)
   18819 * i960 support:                          i960-Dependent.      (line   6)
   18820 * IA-64 line comment character:          IA-64-Chars.         (line   6)
   18821 * IA-64 line separator:                  IA-64-Chars.         (line   8)
   18822 * IA-64 options:                         IA-64 Options.       (line   6)
   18823 * IA-64 Processor-status-Register bit names: IA-64-Bits.      (line   6)
   18824 * IA-64 registers:                       IA-64-Regs.          (line   6)
   18825 * IA-64 support:                         IA-64-Dependent.     (line   6)
   18826 * IA-64 Syntax:                          IA-64 Options.       (line  96)
   18827 * ident directive:                       Ident.               (line   6)
   18828 * identifiers, ARM:                      ARM-Chars.           (line  15)
   18829 * identifiers, MSP 430:                  MSP430-Chars.        (line   8)
   18830 * if directive:                          If.                  (line   6)
   18831 * ifb directive:                         If.                  (line  21)
   18832 * ifc directive:                         If.                  (line  25)
   18833 * ifdef directive:                       If.                  (line  16)
   18834 * ifeq directive:                        If.                  (line  33)
   18835 * ifeqs directive:                       If.                  (line  36)
   18836 * ifge directive:                        If.                  (line  40)
   18837 * ifgt directive:                        If.                  (line  44)
   18838 * ifle directive:                        If.                  (line  48)
   18839 * iflt directive:                        If.                  (line  52)
   18840 * ifnb directive:                        If.                  (line  56)
   18841 * ifnc directive:                        If.                  (line  61)
   18842 * ifndef directive:                      If.                  (line  65)
   18843 * ifne directive:                        If.                  (line  72)
   18844 * ifnes directive:                       If.                  (line  76)
   18845 * ifnotdef directive:                    If.                  (line  65)
   18846 * immediate character, ARM:              ARM-Chars.           (line  13)
   18847 * immediate character, M680x0:           M68K-Chars.          (line   6)
   18848 * immediate character, VAX:              VAX-operands.        (line   6)
   18849 * immediate fields, relaxation:          Xtensa Immediate Relaxation.
   18850                                                               (line   6)
   18851 * immediate operands, i386:              i386-Syntax.         (line  15)
   18852 * immediate operands, x86-64:            i386-Syntax.         (line  15)
   18853 * imul instruction, i386:                i386-Notes.          (line   6)
   18854 * imul instruction, x86-64:              i386-Notes.          (line   6)
   18855 * incbin directive:                      Incbin.              (line   6)
   18856 * include directive:                     Include.             (line   6)
   18857 * include directive search path:         I.                   (line   6)
   18858 * indirect character, VAX:               VAX-operands.        (line   9)
   18859 * infix operators:                       Infix Ops.           (line   6)
   18860 * inhibiting interrupts, i386:           i386-Prefixes.       (line  36)
   18861 * input:                                 Input Files.         (line   6)
   18862 * input file linenumbers:                Input Files.         (line  35)
   18863 * instruction expansion, CRIS:           CRIS-Expand.         (line   6)
   18864 * instruction expansion, MMIX:           MMIX-Expand.         (line   6)
   18865 * instruction naming, i386:              i386-Mnemonics.      (line   6)
   18866 * instruction naming, x86-64:            i386-Mnemonics.      (line   6)
   18867 * instruction prefixes, i386:            i386-Prefixes.       (line   6)
   18868 * instruction set, M680x0:               M68K-opcodes.        (line   6)
   18869 * instruction set, M68HC11:              M68HC11-opcodes.     (line   6)
   18870 * instruction summary, AVR:              AVR Opcodes.         (line   6)
   18871 * instruction summary, D10V:             D10V-Opcodes.        (line   6)
   18872 * instruction summary, D30V:             D30V-Opcodes.        (line   6)
   18873 * instruction summary, H8/300:           H8/300 Opcodes.      (line   6)
   18874 * instruction summary, SH:               SH Opcodes.          (line   6)
   18875 * instruction summary, SH64:             SH64 Opcodes.        (line   6)
   18876 * instruction summary, Z8000:            Z8000 Opcodes.       (line   6)
   18877 * instructions and directives:           Statements.          (line  19)
   18878 * int directive:                         Int.                 (line   6)
   18879 * int directive, H8/300:                 H8/300 Directives.   (line   6)
   18880 * int directive, i386:                   i386-Float.          (line  21)
   18881 * int directive, TIC54X:                 TIC54X-Directives.   (line 111)
   18882 * int directive, x86-64:                 i386-Float.          (line  21)
   18883 * integer expressions:                   Integer Exprs.       (line   6)
   18884 * integer, 16-byte:                      Octa.                (line   6)
   18885 * integer, 8-byte:                       Quad.                (line   9)
   18886 * integers:                              Integers.            (line   6)
   18887 * integers, 16-bit:                      hword.               (line   6)
   18888 * integers, 32-bit:                      Int.                 (line   6)
   18889 * integers, binary:                      Integers.            (line   6)
   18890 * integers, decimal:                     Integers.            (line  12)
   18891 * integers, hexadecimal:                 Integers.            (line  15)
   18892 * integers, octal:                       Integers.            (line   9)
   18893 * integers, one byte:                    Byte.                (line   6)
   18894 * intel_syntax pseudo op, i386:          i386-Syntax.         (line   6)
   18895 * intel_syntax pseudo op, x86-64:        i386-Syntax.         (line   6)
   18896 * internal assembler sections:           As Sections.         (line   6)
   18897 * internal directive:                    Internal.            (line   6)
   18898 * invalid input:                         Bug Criteria.        (line  14)
   18899 * invocation summary:                    Overview.            (line   6)
   18900 * IP2K architecture options:             IP2K-Opts.           (line   9)
   18901 * IP2K options:                          IP2K-Opts.           (line   6)
   18902 * IP2K support:                          IP2K-Dependent.      (line   6)
   18903 * irp directive:                         Irp.                 (line   6)
   18904 * irpc directive:                        Irpc.                (line   6)
   18905 * ISA options, SH64:                     SH64 Options.        (line   6)
   18906 * joining text and data sections:        R.                   (line   6)
   18907 * jump instructions, i386:               i386-Mnemonics.      (line  51)
   18908 * jump instructions, x86-64:             i386-Mnemonics.      (line  51)
   18909 * jump optimization, i386:               i386-Jumps.          (line   6)
   18910 * jump optimization, x86-64:             i386-Jumps.          (line   6)
   18911 * jump/call operands, i386:              i386-Syntax.         (line  15)
   18912 * jump/call operands, x86-64:            i386-Syntax.         (line  15)
   18913 * L16SI instructions, relaxation:        Xtensa Immediate Relaxation.
   18914                                                               (line  23)
   18915 * L16UI instructions, relaxation:        Xtensa Immediate Relaxation.
   18916                                                               (line  23)
   18917 * L32I instructions, relaxation:         Xtensa Immediate Relaxation.
   18918                                                               (line  23)
   18919 * L8UI instructions, relaxation:         Xtensa Immediate Relaxation.
   18920                                                               (line  23)
   18921 * label (:):                             Statements.          (line  30)
   18922 * label directive, TIC54X:               TIC54X-Directives.   (line 123)
   18923 * labels:                                Labels.              (line   6)
   18924 * lcomm directive:                       Lcomm.               (line   6)
   18925 * lcomm directive, COFF:                 i386-Directives.     (line   6)
   18926 * ld:                                    Object.              (line  15)
   18927 * ldouble directive M680x0:              M68K-Float.          (line  17)
   18928 * ldouble directive M68HC11:             M68HC11-Float.       (line  17)
   18929 * ldouble directive, TIC54X:             TIC54X-Directives.   (line  64)
   18930 * LDR reg,=<label> pseudo op, ARM:       ARM Opcodes.         (line  15)
   18931 * leafproc directive, i960:              Directives-i960.     (line  18)
   18932 * length directive, TIC54X:              TIC54X-Directives.   (line 127)
   18933 * length of symbols:                     Symbol Intro.        (line  14)
   18934 * lflags directive (ignored):            Lflags.              (line   6)
   18935 * line comment character:                Comments.            (line  19)
   18936 * line comment character, Alpha:         Alpha-Chars.         (line   6)
   18937 * line comment character, ARM:           ARM-Chars.           (line   6)
   18938 * line comment character, AVR:           AVR-Chars.           (line   6)
   18939 * line comment character, D10V:          D10V-Chars.          (line   6)
   18940 * line comment character, D30V:          D30V-Chars.          (line   6)
   18941 * line comment character, H8/300:        H8/300-Chars.        (line   6)
   18942 * line comment character, IA-64:         IA-64-Chars.         (line   6)
   18943 * line comment character, M680x0:        M68K-Chars.          (line   6)
   18944 * line comment character, MSP 430:       MSP430-Chars.        (line   6)
   18945 * line comment character, SH:            SH-Chars.            (line   6)
   18946 * line comment character, SH64:          SH64-Chars.          (line   6)
   18947 * line comment character, Sparc:         Sparc-Chars.         (line   6)
   18948 * line comment character, V850:          V850-Chars.          (line   6)
   18949 * line comment character, Z80:           Z80-Chars.           (line   6)
   18950 * line comment character, Z8000:         Z8000-Chars.         (line   6)
   18951 * line comment characters, CRIS:         CRIS-Chars.          (line   6)
   18952 * line comment characters, MMIX:         MMIX-Chars.          (line   6)
   18953 * line directive:                        Line.                (line   6)
   18954 * line directive, MSP 430:               MSP430 Directives.   (line  14)
   18955 * line numbers, in input files:          Input Files.         (line  35)
   18956 * line numbers, in warnings/errors:      Errors.              (line  16)
   18957 * line separator character:              Statements.          (line   6)
   18958 * line separator, Alpha:                 Alpha-Chars.         (line   8)
   18959 * line separator, ARM:                   ARM-Chars.           (line  10)
   18960 * line separator, AVR:                   AVR-Chars.           (line  10)
   18961 * line separator, H8/300:                H8/300-Chars.        (line   8)
   18962 * line separator, IA-64:                 IA-64-Chars.         (line   8)
   18963 * line separator, SH:                    SH-Chars.            (line   8)
   18964 * line separator, SH64:                  SH64-Chars.          (line   8)
   18965 * line separator, Sparc:                 Sparc-Chars.         (line   8)
   18966 * line separator, Z8000:                 Z8000-Chars.         (line   8)
   18967 * lines starting with #:                 Comments.            (line  38)
   18968 * linker:                                Object.              (line  15)
   18969 * linker, and assembler:                 Secs Background.     (line  10)
   18970 * linkonce directive:                    Linkonce.            (line   6)
   18971 * list directive:                        List.                (line   6)
   18972 * list directive, TIC54X:                TIC54X-Directives.   (line 131)
   18973 * listing control, turning off:          Nolist.              (line   6)
   18974 * listing control, turning on:           List.                (line   6)
   18975 * listing control: new page:             Eject.               (line   6)
   18976 * listing control: paper size:           Psize.               (line   6)
   18977 * listing control: subtitle:             Sbttl.               (line   6)
   18978 * listing control: title line:           Title.               (line   6)
   18979 * listings, enabling:                    a.                   (line   6)
   18980 * literal directive:                     Literal Directive.   (line   6)
   18981 * literal_position directive:            Literal Position Directive.
   18982                                                               (line   6)
   18983 * literal_prefix directive:              Literal Prefix Directive.
   18984                                                               (line   6)
   18985 * little endian output, MIPS:            Overview.            (line 632)
   18986 * little endian output, PJ:              Overview.            (line 539)
   18987 * little-endian output, MIPS:            MIPS Opts.           (line  13)
   18988 * ln directive:                          Ln.                  (line   6)
   18989 * lo pseudo-op, V850:                    V850 Opcodes.        (line  22)
   18990 * loc directive:                         LNS directives.      (line  19)
   18991 * loc_mark_labels directive:             LNS directives.      (line  50)
   18992 * local common symbols:                  Lcomm.               (line   6)
   18993 * local labels:                          Symbol Names.        (line  35)
   18994 * local symbol names:                    Symbol Names.        (line  22)
   18995 * local symbols, retaining in output:    L.                   (line   6)
   18996 * location counter:                      Dot.                 (line   6)
   18997 * location counter, advancing:           Org.                 (line   6)
   18998 * location counter, Z80:                 Z80-Chars.           (line   8)
   18999 * logical file name:                     File.                (line   6)
   19000 * logical line number:                   Line.                (line   6)
   19001 * logical line numbers:                  Comments.            (line  38)
   19002 * long directive:                        Long.                (line   6)
   19003 * long directive, ARC:                   ARC Directives.      (line 159)
   19004 * long directive, i386:                  i386-Float.          (line  21)
   19005 * long directive, TIC54X:                TIC54X-Directives.   (line 135)
   19006 * long directive, x86-64:                i386-Float.          (line  21)
   19007 * longcall pseudo-op, V850:              V850 Opcodes.        (line 123)
   19008 * longcalls directive:                   Longcalls Directive. (line   6)
   19009 * longjump pseudo-op, V850:              V850 Opcodes.        (line 129)
   19010 * loop directive, TIC54X:                TIC54X-Directives.   (line 143)
   19011 * LOOP instructions, alignment:          Xtensa Automatic Alignment.
   19012                                                               (line   6)
   19013 * low directive, M32R:                   M32R-Directives.     (line   9)
   19014 * lp register, V850:                     V850-Regs.           (line  98)
   19015 * lval:                                  Z8000 Directives.    (line  27)
   19016 * M16C architecture option:              M32C-Opts.           (line  12)
   19017 * M32C architecture option:              M32C-Opts.           (line   9)
   19018 * M32C modifiers:                        M32C-Modifiers.      (line   6)
   19019 * M32C options:                          M32C-Opts.           (line   6)
   19020 * M32C support:                          M32C-Dependent.      (line   6)
   19021 * M32R architecture options:             M32R-Opts.           (line   9)
   19022 * M32R directives:                       M32R-Directives.     (line   6)
   19023 * M32R options:                          M32R-Opts.           (line   6)
   19024 * M32R support:                          M32R-Dependent.      (line   6)
   19025 * M32R warnings:                         M32R-Warnings.       (line   6)
   19026 * M680x0 addressing modes:               M68K-Syntax.         (line  21)
   19027 * M680x0 architecture options:           M68K-Opts.           (line 104)
   19028 * M680x0 branch improvement:             M68K-Branch.         (line   6)
   19029 * M680x0 directives:                     M68K-Directives.     (line   6)
   19030 * M680x0 floating point:                 M68K-Float.          (line   6)
   19031 * M680x0 immediate character:            M68K-Chars.          (line   6)
   19032 * M680x0 line comment character:         M68K-Chars.          (line   6)
   19033 * M680x0 opcodes:                        M68K-opcodes.        (line   6)
   19034 * M680x0 options:                        M68K-Opts.           (line   6)
   19035 * M680x0 pseudo-opcodes:                 M68K-Branch.         (line   6)
   19036 * M680x0 size modifiers:                 M68K-Syntax.         (line   8)
   19037 * M680x0 support:                        M68K-Dependent.      (line   6)
   19038 * M680x0 syntax:                         M68K-Syntax.         (line   8)
   19039 * M68HC11 addressing modes:              M68HC11-Syntax.      (line  17)
   19040 * M68HC11 and M68HC12 support:           M68HC11-Dependent.   (line   6)
   19041 * M68HC11 assembler directive .far:      M68HC11-Directives.  (line  20)
   19042 * M68HC11 assembler directive .interrupt: M68HC11-Directives. (line  26)
   19043 * M68HC11 assembler directive .mode:     M68HC11-Directives.  (line  16)
   19044 * M68HC11 assembler directive .relax:    M68HC11-Directives.  (line  10)
   19045 * M68HC11 assembler directive .xrefb:    M68HC11-Directives.  (line  31)
   19046 * M68HC11 assembler directives:          M68HC11-Directives.  (line   6)
   19047 * M68HC11 branch improvement:            M68HC11-Branch.      (line   6)
   19048 * M68HC11 floating point:                M68HC11-Float.       (line   6)
   19049 * M68HC11 modifiers:                     M68HC11-Modifiers.   (line   6)
   19050 * M68HC11 opcodes:                       M68HC11-opcodes.     (line   6)
   19051 * M68HC11 options:                       M68HC11-Opts.        (line   6)
   19052 * M68HC11 pseudo-opcodes:                M68HC11-Branch.      (line   6)
   19053 * M68HC11 syntax:                        M68HC11-Syntax.      (line   6)
   19054 * M68HC12 assembler directives:          M68HC11-Directives.  (line   6)
   19055 * machine dependencies:                  Machine Dependencies.
   19056                                                               (line   6)
   19057 * machine directives, ARC:               ARC Directives.      (line   6)
   19058 * machine directives, ARM:               ARM Directives.      (line   6)
   19059 * machine directives, H8/300 (none):     H8/300 Directives.   (line   6)
   19060 * machine directives, i860:              Directives-i860.     (line   6)
   19061 * machine directives, i960:              Directives-i960.     (line   6)
   19062 * machine directives, MSP 430:           MSP430 Directives.   (line   6)
   19063 * machine directives, SH:                SH Directives.       (line   6)
   19064 * machine directives, SH64:              SH64 Directives.     (line   9)
   19065 * machine directives, SPARC:             Sparc-Directives.    (line   6)
   19066 * machine directives, TIC54X:            TIC54X-Directives.   (line   6)
   19067 * machine directives, V850:              V850 Directives.     (line   6)
   19068 * machine directives, VAX:               VAX-directives.      (line   6)
   19069 * machine directives, x86:               i386-Directives.     (line   6)
   19070 * machine independent directives:        Pseudo Ops.          (line   6)
   19071 * machine instructions (not covered):    Manual.              (line  14)
   19072 * machine-independent syntax:            Syntax.              (line   6)
   19073 * macro directive:                       Macro.               (line  28)
   19074 * macro directive, TIC54X:               TIC54X-Directives.   (line 153)
   19075 * macros:                                Macro.               (line   6)
   19076 * macros, count executed:                Macro.               (line 143)
   19077 * Macros, MSP 430:                       MSP430-Macros.       (line   6)
   19078 * macros, TIC54X:                        TIC54X-Macros.       (line   6)
   19079 * make rules:                            MD.                  (line   6)
   19080 * manual, structure and purpose:         Manual.              (line   6)
   19081 * math builtins, TIC54X:                 TIC54X-Builtins.     (line   6)
   19082 * Maximum number of continuation lines:  listing.             (line  34)
   19083 * memory references, i386:               i386-Memory.         (line   6)
   19084 * memory references, x86-64:             i386-Memory.         (line   6)
   19085 * memory-mapped registers, TIC54X:       TIC54X-MMRegs.       (line   6)
   19086 * merging text and data sections:        R.                   (line   6)
   19087 * messages from assembler:               Errors.              (line   6)
   19088 * minus, permitted arguments:            Infix Ops.           (line  49)
   19089 * MIPS architecture options:             MIPS Opts.           (line  29)
   19090 * MIPS big-endian output:                MIPS Opts.           (line  13)
   19091 * MIPS CPU override:                     MIPS ISA.            (line  18)
   19092 * MIPS debugging directives:             MIPS Stabs.          (line   6)
   19093 * MIPS DSP Release 1 instruction generation override: MIPS ASE instruction generation overrides.
   19094                                                               (line  21)
   19095 * MIPS DSP Release 2 instruction generation override: MIPS ASE instruction generation overrides.
   19096                                                               (line  26)
   19097 * MIPS ECOFF sections:                   MIPS Object.         (line   6)
   19098 * MIPS endianness:                       Overview.            (line 629)
   19099 * MIPS ISA:                              Overview.            (line 635)
   19100 * MIPS ISA override:                     MIPS ISA.            (line   6)
   19101 * MIPS little-endian output:             MIPS Opts.           (line  13)
   19102 * MIPS MDMX instruction generation override: MIPS ASE instruction generation overrides.
   19103                                                               (line  16)
   19104 * MIPS MIPS-3D instruction generation override: MIPS ASE instruction generation overrides.
   19105                                                               (line   6)
   19106 * MIPS MT instruction generation override: MIPS ASE instruction generation overrides.
   19107                                                               (line  32)
   19108 * MIPS option stack:                     MIPS option stack.   (line   6)
   19109 * MIPS processor:                        MIPS-Dependent.      (line   6)
   19110 * MIT:                                   M68K-Syntax.         (line   6)
   19111 * mlib directive, TIC54X:                TIC54X-Directives.   (line 159)
   19112 * mlist directive, TIC54X:               TIC54X-Directives.   (line 164)
   19113 * MMIX assembler directive BSPEC:        MMIX-Pseudos.        (line 131)
   19114 * MMIX assembler directive BYTE:         MMIX-Pseudos.        (line  97)
   19115 * MMIX assembler directive ESPEC:        MMIX-Pseudos.        (line 131)
   19116 * MMIX assembler directive GREG:         MMIX-Pseudos.        (line  50)
   19117 * MMIX assembler directive IS:           MMIX-Pseudos.        (line  42)
   19118 * MMIX assembler directive LOC:          MMIX-Pseudos.        (line   7)
   19119 * MMIX assembler directive LOCAL:        MMIX-Pseudos.        (line  28)
   19120 * MMIX assembler directive OCTA:         MMIX-Pseudos.        (line 108)
   19121 * MMIX assembler directive PREFIX:       MMIX-Pseudos.        (line 120)
   19122 * MMIX assembler directive TETRA:        MMIX-Pseudos.        (line 108)
   19123 * MMIX assembler directive WYDE:         MMIX-Pseudos.        (line 108)
   19124 * MMIX assembler directives:             MMIX-Pseudos.        (line   6)
   19125 * MMIX line comment characters:          MMIX-Chars.          (line   6)
   19126 * MMIX options:                          MMIX-Opts.           (line   6)
   19127 * MMIX pseudo-op BSPEC:                  MMIX-Pseudos.        (line 131)
   19128 * MMIX pseudo-op BYTE:                   MMIX-Pseudos.        (line  97)
   19129 * MMIX pseudo-op ESPEC:                  MMIX-Pseudos.        (line 131)
   19130 * MMIX pseudo-op GREG:                   MMIX-Pseudos.        (line  50)
   19131 * MMIX pseudo-op IS:                     MMIX-Pseudos.        (line  42)
   19132 * MMIX pseudo-op LOC:                    MMIX-Pseudos.        (line   7)
   19133 * MMIX pseudo-op LOCAL:                  MMIX-Pseudos.        (line  28)
   19134 * MMIX pseudo-op OCTA:                   MMIX-Pseudos.        (line 108)
   19135 * MMIX pseudo-op PREFIX:                 MMIX-Pseudos.        (line 120)
   19136 * MMIX pseudo-op TETRA:                  MMIX-Pseudos.        (line 108)
   19137 * MMIX pseudo-op WYDE:                   MMIX-Pseudos.        (line 108)
   19138 * MMIX pseudo-ops:                       MMIX-Pseudos.        (line   6)
   19139 * MMIX register names:                   MMIX-Regs.           (line   6)
   19140 * MMIX support:                          MMIX-Dependent.      (line   6)
   19141 * mmixal differences:                    MMIX-mmixal.         (line   6)
   19142 * mmregs directive, TIC54X:              TIC54X-Directives.   (line 170)
   19143 * mmsg directive, TIC54X:                TIC54X-Directives.   (line  77)
   19144 * MMX, i386:                             i386-SIMD.           (line   6)
   19145 * MMX, x86-64:                           i386-SIMD.           (line   6)
   19146 * mnemonic compatibility, i386:          i386-Mnemonics.      (line  57)
   19147 * mnemonic suffixes, i386:               i386-Syntax.         (line  29)
   19148 * mnemonic suffixes, x86-64:             i386-Syntax.         (line  29)
   19149 * mnemonics for opcodes, VAX:            VAX-opcodes.         (line   6)
   19150 * mnemonics, AVR:                        AVR Opcodes.         (line   6)
   19151 * mnemonics, D10V:                       D10V-Opcodes.        (line   6)
   19152 * mnemonics, D30V:                       D30V-Opcodes.        (line   6)
   19153 * mnemonics, H8/300:                     H8/300 Opcodes.      (line   6)
   19154 * mnemonics, SH:                         SH Opcodes.          (line   6)
   19155 * mnemonics, SH64:                       SH64 Opcodes.        (line   6)
   19156 * mnemonics, Z8000:                      Z8000 Opcodes.       (line   6)
   19157 * mnolist directive, TIC54X:             TIC54X-Directives.   (line 164)
   19158 * Motorola syntax for the 680x0:         M68K-Moto-Syntax.    (line   6)
   19159 * MOVI instructions, relaxation:         Xtensa Immediate Relaxation.
   19160                                                               (line  12)
   19161 * MOVW and MOVT relocations, ARM:        ARM-Relocations.     (line  20)
   19162 * MRI compatibility mode:                M.                   (line   6)
   19163 * mri directive:                         MRI.                 (line   6)
   19164 * MRI mode, temporarily:                 MRI.                 (line   6)
   19165 * MSP 430 floating point (IEEE):         MSP430 Floating Point.
   19166                                                               (line   6)
   19167 * MSP 430 identifiers:                   MSP430-Chars.        (line   8)
   19168 * MSP 430 line comment character:        MSP430-Chars.        (line   6)
   19169 * MSP 430 machine directives:            MSP430 Directives.   (line   6)
   19170 * MSP 430 macros:                        MSP430-Macros.       (line   6)
   19171 * MSP 430 opcodes:                       MSP430 Opcodes.      (line   6)
   19172 * MSP 430 options (none):                MSP430 Options.      (line   6)
   19173 * MSP 430 profiling capability:          MSP430 Profiling Capability.
   19174                                                               (line   6)
   19175 * MSP 430 register names:                MSP430-Regs.         (line   6)
   19176 * MSP 430 support:                       MSP430-Dependent.    (line   6)
   19177 * MSP430 Assembler Extensions:           MSP430-Ext.          (line   6)
   19178 * mul instruction, i386:                 i386-Notes.          (line   6)
   19179 * mul instruction, x86-64:               i386-Notes.          (line   6)
   19180 * name:                                  Z8000 Directives.    (line  18)
   19181 * named section:                         Section.             (line   6)
   19182 * named sections:                        Ld Sections.         (line   8)
   19183 * names, symbol:                         Symbol Names.        (line   6)
   19184 * naming object file:                    o.                   (line   6)
   19185 * new page, in listings:                 Eject.               (line   6)
   19186 * newblock directive, TIC54X:            TIC54X-Directives.   (line 176)
   19187 * newline (\n):                          Strings.             (line  21)
   19188 * newline, required at file end:         Statements.          (line  13)
   19189 * no-absolute-literals directive:        Absolute Literals Directive.
   19190                                                               (line   6)
   19191 * no-longcalls directive:                Longcalls Directive. (line   6)
   19192 * no-schedule directive:                 Schedule Directive.  (line   6)
   19193 * no-transform directive:                Transform Directive. (line   6)
   19194 * nolist directive:                      Nolist.              (line   6)
   19195 * nolist directive, TIC54X:              TIC54X-Directives.   (line 131)
   19196 * NOP pseudo op, ARM:                    ARM Opcodes.         (line   9)
   19197 * notes for Alpha:                       Alpha Notes.         (line   6)
   19198 * null-terminated strings:               Asciz.               (line   6)
   19199 * number constants:                      Numbers.             (line   6)
   19200 * number of macros executed:             Macro.               (line 143)
   19201 * numbered subsections:                  Sub-Sections.        (line   6)
   19202 * numbers, 16-bit:                       hword.               (line   6)
   19203 * numeric values:                        Expressions.         (line   6)
   19204 * nword directive, SPARC:                Sparc-Directives.    (line  20)
   19205 * object attributes:                     Object Attributes.   (line   6)
   19206 * object file:                           Object.              (line   6)
   19207 * object file format:                    Object Formats.      (line   6)
   19208 * object file name:                      o.                   (line   6)
   19209 * object file, after errors:             Z.                   (line   6)
   19210 * obsolescent directives:                Deprecated.          (line   6)
   19211 * octa directive:                        Octa.                (line   6)
   19212 * octal character code (\DDD):           Strings.             (line  30)
   19213 * octal integers:                        Integers.            (line   9)
   19214 * offset directive, V850:                V850 Directives.     (line   6)
   19215 * opcode mnemonics, VAX:                 VAX-opcodes.         (line   6)
   19216 * opcode names, Xtensa:                  Xtensa Opcodes.      (line   6)
   19217 * opcode summary, AVR:                   AVR Opcodes.         (line   6)
   19218 * opcode summary, D10V:                  D10V-Opcodes.        (line   6)
   19219 * opcode summary, D30V:                  D30V-Opcodes.        (line   6)
   19220 * opcode summary, H8/300:                H8/300 Opcodes.      (line   6)
   19221 * opcode summary, SH:                    SH Opcodes.          (line   6)
   19222 * opcode summary, SH64:                  SH64 Opcodes.        (line   6)
   19223 * opcode summary, Z8000:                 Z8000 Opcodes.       (line   6)
   19224 * opcodes for ARC:                       ARC Opcodes.         (line   6)
   19225 * opcodes for ARM:                       ARM Opcodes.         (line   6)
   19226 * opcodes for MSP 430:                   MSP430 Opcodes.      (line   6)
   19227 * opcodes for V850:                      V850 Opcodes.        (line   6)
   19228 * opcodes, i860:                         Opcodes for i860.    (line   6)
   19229 * opcodes, i960:                         Opcodes for i960.    (line   6)
   19230 * opcodes, M680x0:                       M68K-opcodes.        (line   6)
   19231 * opcodes, M68HC11:                      M68HC11-opcodes.     (line   6)
   19232 * operand delimiters, i386:              i386-Syntax.         (line  15)
   19233 * operand delimiters, x86-64:            i386-Syntax.         (line  15)
   19234 * operand notation, VAX:                 VAX-operands.        (line   6)
   19235 * operands in expressions:               Arguments.           (line   6)
   19236 * operator precedence:                   Infix Ops.           (line  11)
   19237 * operators, in expressions:             Operators.           (line   6)
   19238 * operators, permitted arguments:        Infix Ops.           (line   6)
   19239 * optimization, D10V:                    Overview.            (line 408)
   19240 * optimization, D30V:                    Overview.            (line 413)
   19241 * optimizations:                         Xtensa Optimizations.
   19242                                                               (line   6)
   19243 * option directive, ARC:                 ARC Directives.      (line 162)
   19244 * option directive, TIC54X:              TIC54X-Directives.   (line 180)
   19245 * option summary:                        Overview.            (line   6)
   19246 * options for Alpha:                     Alpha Options.       (line   6)
   19247 * options for ARC (none):                ARC Options.         (line   6)
   19248 * options for ARM (none):                ARM Options.         (line   6)
   19249 * options for AVR (none):                AVR Options.         (line   6)
   19250 * options for i386:                      i386-Options.        (line   6)
   19251 * options for IA-64:                     IA-64 Options.       (line   6)
   19252 * options for MSP430 (none):             MSP430 Options.      (line   6)
   19253 * options for PDP-11:                    PDP-11-Options.      (line   6)
   19254 * options for PowerPC:                   PowerPC-Opts.        (line   6)
   19255 * options for SPARC:                     Sparc-Opts.          (line   6)
   19256 * options for V850 (none):               V850 Options.        (line   6)
   19257 * options for VAX/VMS:                   VAX-Opts.            (line  42)
   19258 * options for x86-64:                    i386-Options.        (line   6)
   19259 * options for Z80:                       Z80 Options.         (line   6)
   19260 * options, all versions of assembler:    Invoking.            (line   6)
   19261 * options, command line:                 Command Line.        (line  13)
   19262 * options, CRIS:                         CRIS-Opts.           (line   6)
   19263 * options, D10V:                         D10V-Opts.           (line   6)
   19264 * options, D30V:                         D30V-Opts.           (line   6)
   19265 * options, H8/300:                       H8/300 Options.      (line   6)
   19266 * options, i960:                         Options-i960.        (line   6)
   19267 * options, IP2K:                         IP2K-Opts.           (line   6)
   19268 * options, M32C:                         M32C-Opts.           (line   6)
   19269 * options, M32R:                         M32R-Opts.           (line   6)
   19270 * options, M680x0:                       M68K-Opts.           (line   6)
   19271 * options, M68HC11:                      M68HC11-Opts.        (line   6)
   19272 * options, MMIX:                         MMIX-Opts.           (line   6)
   19273 * options, PJ:                           PJ Options.          (line   6)
   19274 * options, SH:                           SH Options.          (line   6)
   19275 * options, SH64:                         SH64 Options.        (line   6)
   19276 * options, TIC54X:                       TIC54X-Opts.         (line   6)
   19277 * options, Z8000:                        Z8000 Options.       (line   6)
   19278 * org directive:                         Org.                 (line   6)
   19279 * other attribute, of a.out symbol:      Symbol Other.        (line   6)
   19280 * output file:                           Object.              (line   6)
   19281 * p2align directive:                     P2align.             (line   6)
   19282 * p2alignl directive:                    P2align.             (line  28)
   19283 * p2alignw directive:                    P2align.             (line  28)
   19284 * padding the location counter:          Align.               (line   6)
   19285 * padding the location counter given a power of two: P2align. (line   6)
   19286 * padding the location counter given number of bytes: Balign. (line   6)
   19287 * page, in listings:                     Eject.               (line   6)
   19288 * paper size, for listings:              Psize.               (line   6)
   19289 * paths for .include:                    I.                   (line   6)
   19290 * patterns, writing in memory:           Fill.                (line   6)
   19291 * PDP-11 comments:                       PDP-11-Syntax.       (line  16)
   19292 * PDP-11 floating-point register syntax: PDP-11-Syntax.       (line  13)
   19293 * PDP-11 general-purpose register syntax: PDP-11-Syntax.      (line  10)
   19294 * PDP-11 instruction naming:             PDP-11-Mnemonics.    (line   6)
   19295 * PDP-11 support:                        PDP-11-Dependent.    (line   6)
   19296 * PDP-11 syntax:                         PDP-11-Syntax.       (line   6)
   19297 * PIC code generation for ARM:           ARM Options.         (line 122)
   19298 * PIC code generation for M32R:          M32R-Opts.           (line  42)
   19299 * PIC selection, MIPS:                   MIPS Opts.           (line  21)
   19300 * PJ endianness:                         Overview.            (line 536)
   19301 * PJ options:                            PJ Options.          (line   6)
   19302 * PJ support:                            PJ-Dependent.        (line   6)
   19303 * plus, permitted arguments:             Infix Ops.           (line  44)
   19304 * popsection directive:                  PopSection.          (line   6)
   19305 * Position-independent code, CRIS:       CRIS-Opts.           (line  27)
   19306 * Position-independent code, symbols in, CRIS: CRIS-Pic.      (line   6)
   19307 * PowerPC architectures:                 PowerPC-Opts.        (line   6)
   19308 * PowerPC directives:                    PowerPC-Pseudo.      (line   6)
   19309 * PowerPC options:                       PowerPC-Opts.        (line   6)
   19310 * PowerPC support:                       PPC-Dependent.       (line   6)
   19311 * precedence of operators:               Infix Ops.           (line  11)
   19312 * precision, floating point:             Flonums.             (line   6)
   19313 * prefix operators:                      Prefix Ops.          (line   6)
   19314 * prefixes, i386:                        i386-Prefixes.       (line   6)
   19315 * preprocessing:                         Preprocessing.       (line   6)
   19316 * preprocessing, turning on and off:     Preprocessing.       (line  26)
   19317 * previous directive:                    Previous.            (line   6)
   19318 * primary attributes, COFF symbols:      COFF Symbols.        (line  13)
   19319 * print directive:                       Print.               (line   6)
   19320 * proc directive, SPARC:                 Sparc-Directives.    (line  25)
   19321 * profiler directive, MSP 430:           MSP430 Directives.   (line  22)
   19322 * profiling capability for MSP 430:      MSP430 Profiling Capability.
   19323                                                               (line   6)
   19324 * protected directive:                   Protected.           (line   6)
   19325 * pseudo-op .arch, CRIS:                 CRIS-Pseudos.        (line  45)
   19326 * pseudo-op .dword, CRIS:                CRIS-Pseudos.        (line  12)
   19327 * pseudo-op .syntax, CRIS:               CRIS-Pseudos.        (line  17)
   19328 * pseudo-op BSPEC, MMIX:                 MMIX-Pseudos.        (line 131)
   19329 * pseudo-op BYTE, MMIX:                  MMIX-Pseudos.        (line  97)
   19330 * pseudo-op ESPEC, MMIX:                 MMIX-Pseudos.        (line 131)
   19331 * pseudo-op GREG, MMIX:                  MMIX-Pseudos.        (line  50)
   19332 * pseudo-op IS, MMIX:                    MMIX-Pseudos.        (line  42)
   19333 * pseudo-op LOC, MMIX:                   MMIX-Pseudos.        (line   7)
   19334 * pseudo-op LOCAL, MMIX:                 MMIX-Pseudos.        (line  28)
   19335 * pseudo-op OCTA, MMIX:                  MMIX-Pseudos.        (line 108)
   19336 * pseudo-op PREFIX, MMIX:                MMIX-Pseudos.        (line 120)
   19337 * pseudo-op TETRA, MMIX:                 MMIX-Pseudos.        (line 108)
   19338 * pseudo-op WYDE, MMIX:                  MMIX-Pseudos.        (line 108)
   19339 * pseudo-opcodes, M680x0:                M68K-Branch.         (line   6)
   19340 * pseudo-opcodes, M68HC11:               M68HC11-Branch.      (line   6)
   19341 * pseudo-ops for branch, VAX:            VAX-branch.          (line   6)
   19342 * pseudo-ops, CRIS:                      CRIS-Pseudos.        (line   6)
   19343 * pseudo-ops, machine independent:       Pseudo Ops.          (line   6)
   19344 * pseudo-ops, MMIX:                      MMIX-Pseudos.        (line   6)
   19345 * psize directive:                       Psize.               (line   6)
   19346 * PSR bits:                              IA-64-Bits.          (line   6)
   19347 * pstring directive, TIC54X:             TIC54X-Directives.   (line 209)
   19348 * psw register, V850:                    V850-Regs.           (line 116)
   19349 * purgem directive:                      Purgem.              (line   6)
   19350 * purpose of GNU assembler:              GNU Assembler.       (line  12)
   19351 * pushsection directive:                 PushSection.         (line   6)
   19352 * quad directive:                        Quad.                (line   6)
   19353 * quad directive, i386:                  i386-Float.          (line  21)
   19354 * quad directive, x86-64:                i386-Float.          (line  21)
   19355 * real-mode code, i386:                  i386-16bit.          (line   6)
   19356 * ref directive, TIC54X:                 TIC54X-Directives.   (line 103)
   19357 * register directive, SPARC:             Sparc-Directives.    (line  29)
   19358 * register names, Alpha:                 Alpha-Regs.          (line   6)
   19359 * register names, ARC:                   ARC-Regs.            (line   6)
   19360 * register names, ARM:                   ARM-Regs.            (line   6)
   19361 * register names, AVR:                   AVR-Regs.            (line   6)
   19362 * register names, CRIS:                  CRIS-Regs.           (line   6)
   19363 * register names, H8/300:                H8/300-Regs.         (line   6)
   19364 * register names, IA-64:                 IA-64-Regs.          (line   6)
   19365 * register names, MMIX:                  MMIX-Regs.           (line   6)
   19366 * register names, MSP 430:               MSP430-Regs.         (line   6)
   19367 * register names, Sparc:                 Sparc-Regs.          (line   6)
   19368 * register names, V850:                  V850-Regs.           (line   6)
   19369 * register names, VAX:                   VAX-operands.        (line  17)
   19370 * register names, Xtensa:                Xtensa Registers.    (line   6)
   19371 * register names, Z80:                   Z80-Regs.            (line   6)
   19372 * register operands, i386:               i386-Syntax.         (line  15)
   19373 * register operands, x86-64:             i386-Syntax.         (line  15)
   19374 * registers, D10V:                       D10V-Regs.           (line   6)
   19375 * registers, D30V:                       D30V-Regs.           (line   6)
   19376 * registers, i386:                       i386-Regs.           (line   6)
   19377 * registers, SH:                         SH-Regs.             (line   6)
   19378 * registers, SH64:                       SH64-Regs.           (line   6)
   19379 * registers, TIC54X memory-mapped:       TIC54X-MMRegs.       (line   6)
   19380 * registers, x86-64:                     i386-Regs.           (line   6)
   19381 * registers, Z8000:                      Z8000-Regs.          (line   6)
   19382 * relaxation:                            Xtensa Relaxation.   (line   6)
   19383 * relaxation of ADDI instructions:       Xtensa Immediate Relaxation.
   19384                                                               (line  43)
   19385 * relaxation of branch instructions:     Xtensa Branch Relaxation.
   19386                                                               (line   6)
   19387 * relaxation of call instructions:       Xtensa Call Relaxation.
   19388                                                               (line   6)
   19389 * relaxation of immediate fields:        Xtensa Immediate Relaxation.
   19390                                                               (line   6)
   19391 * relaxation of L16SI instructions:      Xtensa Immediate Relaxation.
   19392                                                               (line  23)
   19393 * relaxation of L16UI instructions:      Xtensa Immediate Relaxation.
   19394                                                               (line  23)
   19395 * relaxation of L32I instructions:       Xtensa Immediate Relaxation.
   19396                                                               (line  23)
   19397 * relaxation of L8UI instructions:       Xtensa Immediate Relaxation.
   19398                                                               (line  23)
   19399 * relaxation of MOVI instructions:       Xtensa Immediate Relaxation.
   19400                                                               (line  12)
   19401 * reloc directive:                       Reloc.               (line   6)
   19402 * relocation:                            Sections.            (line   6)
   19403 * relocation example:                    Ld Sections.         (line  40)
   19404 * relocations, Alpha:                    Alpha-Relocs.        (line   6)
   19405 * relocations, Sparc:                    Sparc-Relocs.        (line   6)
   19406 * repeat prefixes, i386:                 i386-Prefixes.       (line  44)
   19407 * reporting bugs in assembler:           Reporting Bugs.      (line   6)
   19408 * rept directive:                        Rept.                (line   6)
   19409 * req directive, ARM:                    ARM Directives.      (line  13)
   19410 * reserve directive, SPARC:              Sparc-Directives.    (line  39)
   19411 * return instructions, i386:             i386-Syntax.         (line  38)
   19412 * return instructions, x86-64:           i386-Syntax.         (line  38)
   19413 * REX prefixes, i386:                    i386-Prefixes.       (line  46)
   19414 * rsect:                                 Z8000 Directives.    (line  52)
   19415 * sblock directive, TIC54X:              TIC54X-Directives.   (line 183)
   19416 * sbttl directive:                       Sbttl.               (line   6)
   19417 * schedule directive:                    Schedule Directive.  (line   6)
   19418 * scl directive:                         Scl.                 (line   6)
   19419 * sdaoff pseudo-op, V850:                V850 Opcodes.        (line  65)
   19420 * search path for .include:              I.                   (line   6)
   19421 * sect directive, MSP 430:               MSP430 Directives.   (line  18)
   19422 * sect directive, TIC54X:                TIC54X-Directives.   (line 189)
   19423 * section directive (COFF version):      Section.             (line  16)
   19424 * section directive (ELF version):       Section.             (line  67)
   19425 * section directive, V850:               V850 Directives.     (line   9)
   19426 * section override prefixes, i386:       i386-Prefixes.       (line  23)
   19427 * Section Stack <1>:                     SubSection.          (line   6)
   19428 * Section Stack <2>:                     Section.             (line  62)
   19429 * Section Stack <3>:                     PushSection.         (line   6)
   19430 * Section Stack <4>:                     PopSection.          (line   6)
   19431 * Section Stack:                         Previous.            (line   6)
   19432 * section-relative addressing:           Secs Background.     (line  68)
   19433 * sections:                              Sections.            (line   6)
   19434 * sections in messages, internal:        As Sections.         (line   6)
   19435 * sections, i386:                        i386-Syntax.         (line  44)
   19436 * sections, named:                       Ld Sections.         (line   8)
   19437 * sections, x86-64:                      i386-Syntax.         (line  44)
   19438 * seg directive, SPARC:                  Sparc-Directives.    (line  44)
   19439 * segm:                                  Z8000 Directives.    (line  10)
   19440 * set directive:                         Set.                 (line   6)
   19441 * set directive, TIC54X:                 TIC54X-Directives.   (line 192)
   19442 * SH addressing modes:                   SH-Addressing.       (line   6)
   19443 * SH floating point (IEEE):              SH Floating Point.   (line   6)
   19444 * SH line comment character:             SH-Chars.            (line   6)
   19445 * SH line separator:                     SH-Chars.            (line   8)
   19446 * SH machine directives:                 SH Directives.       (line   6)
   19447 * SH opcode summary:                     SH Opcodes.          (line   6)
   19448 * SH options:                            SH Options.          (line   6)
   19449 * SH registers:                          SH-Regs.             (line   6)
   19450 * SH support:                            SH-Dependent.        (line   6)
   19451 * SH64 ABI options:                      SH64 Options.        (line  29)
   19452 * SH64 addressing modes:                 SH64-Addressing.     (line   6)
   19453 * SH64 ISA options:                      SH64 Options.        (line   6)
   19454 * SH64 line comment character:           SH64-Chars.          (line   6)
   19455 * SH64 line separator:                   SH64-Chars.          (line   8)
   19456 * SH64 machine directives:               SH64 Directives.     (line   9)
   19457 * SH64 opcode summary:                   SH64 Opcodes.        (line   6)
   19458 * SH64 options:                          SH64 Options.        (line   6)
   19459 * SH64 registers:                        SH64-Regs.           (line   6)
   19460 * SH64 support:                          SH64-Dependent.      (line   6)
   19461 * shigh directive, M32R:                 M32R-Directives.     (line  26)
   19462 * short directive:                       Short.               (line   6)
   19463 * short directive, ARC:                  ARC Directives.      (line 171)
   19464 * short directive, TIC54X:               TIC54X-Directives.   (line 111)
   19465 * SIMD, i386:                            i386-SIMD.           (line   6)
   19466 * SIMD, x86-64:                          i386-SIMD.           (line   6)
   19467 * single character constant:             Chars.               (line   6)
   19468 * single directive:                      Single.              (line   6)
   19469 * single directive, i386:                i386-Float.          (line  14)
   19470 * single directive, x86-64:              i386-Float.          (line  14)
   19471 * single quote, Z80:                     Z80-Chars.           (line  13)
   19472 * sixteen bit integers:                  hword.               (line   6)
   19473 * sixteen byte integer:                  Octa.                (line   6)
   19474 * size directive (COFF version):         Size.                (line  11)
   19475 * size directive (ELF version):          Size.                (line  19)
   19476 * size modifiers, D10V:                  D10V-Size.           (line   6)
   19477 * size modifiers, D30V:                  D30V-Size.           (line   6)
   19478 * size modifiers, M680x0:                M68K-Syntax.         (line   8)
   19479 * size prefixes, i386:                   i386-Prefixes.       (line  27)
   19480 * size suffixes, H8/300:                 H8/300 Opcodes.      (line 163)
   19481 * size, translations, Sparc:             Sparc-Size-Translations.
   19482                                                               (line   6)
   19483 * sizes operands, i386:                  i386-Syntax.         (line  29)
   19484 * sizes operands, x86-64:                i386-Syntax.         (line  29)
   19485 * skip directive:                        Skip.                (line   6)
   19486 * skip directive, M680x0:                M68K-Directives.     (line  19)
   19487 * skip directive, SPARC:                 Sparc-Directives.    (line  48)
   19488 * sleb128 directive:                     Sleb128.             (line   6)
   19489 * small objects, MIPS ECOFF:             MIPS Object.         (line  11)
   19490 * SmartMIPS instruction generation override: MIPS ASE instruction generation overrides.
   19491                                                               (line  11)
   19492 * SOM symbol attributes:                 SOM Symbols.         (line   6)
   19493 * source program:                        Input Files.         (line   6)
   19494 * source, destination operands; i386:    i386-Syntax.         (line  22)
   19495 * source, destination operands; x86-64:  i386-Syntax.         (line  22)
   19496 * sp register:                           Xtensa Registers.    (line   6)
   19497 * sp register, V850:                     V850-Regs.           (line  14)
   19498 * space directive:                       Space.               (line   6)
   19499 * space directive, TIC54X:               TIC54X-Directives.   (line 197)
   19500 * space used, maximum for assembly:      statistics.          (line   6)
   19501 * SPARC architectures:                   Sparc-Opts.          (line   6)
   19502 * Sparc constants:                       Sparc-Constants.     (line   6)
   19503 * SPARC data alignment:                  Sparc-Aligned-Data.  (line   6)
   19504 * SPARC floating point (IEEE):           Sparc-Float.         (line   6)
   19505 * Sparc line comment character:          Sparc-Chars.         (line   6)
   19506 * Sparc line separator:                  Sparc-Chars.         (line   8)
   19507 * SPARC machine directives:              Sparc-Directives.    (line   6)
   19508 * SPARC options:                         Sparc-Opts.          (line   6)
   19509 * Sparc registers:                       Sparc-Regs.          (line   6)
   19510 * Sparc relocations:                     Sparc-Relocs.        (line   6)
   19511 * Sparc size translations:               Sparc-Size-Translations.
   19512                                                               (line   6)
   19513 * SPARC support:                         Sparc-Dependent.     (line   6)
   19514 * SPARC syntax:                          Sparc-Aligned-Data.  (line  21)
   19515 * special characters, ARC:               ARC-Chars.           (line   6)
   19516 * special characters, M680x0:            M68K-Chars.          (line   6)
   19517 * special purpose registers, MSP 430:    MSP430-Regs.         (line  11)
   19518 * sslist directive, TIC54X:              TIC54X-Directives.   (line 204)
   19519 * ssnolist directive, TIC54X:            TIC54X-Directives.   (line 204)
   19520 * stabd directive:                       Stab.                (line  38)
   19521 * stabn directive:                       Stab.                (line  48)
   19522 * stabs directive:                       Stab.                (line  51)
   19523 * stabX directives:                      Stab.                (line   6)
   19524 * standard assembler sections:           Secs Background.     (line  27)
   19525 * standard input, as input file:         Command Line.        (line  10)
   19526 * statement separator character:         Statements.          (line   6)
   19527 * statement separator, Alpha:            Alpha-Chars.         (line   8)
   19528 * statement separator, ARM:              ARM-Chars.           (line  10)
   19529 * statement separator, AVR:              AVR-Chars.           (line  10)
   19530 * statement separator, H8/300:           H8/300-Chars.        (line   8)
   19531 * statement separator, IA-64:            IA-64-Chars.         (line   8)
   19532 * statement separator, SH:               SH-Chars.            (line   8)
   19533 * statement separator, SH64:             SH64-Chars.          (line   8)
   19534 * statement separator, Sparc:            Sparc-Chars.         (line   8)
   19535 * statement separator, Z8000:            Z8000-Chars.         (line   8)
   19536 * statements, structure of:              Statements.          (line   6)
   19537 * statistics, about assembly:            statistics.          (line   6)
   19538 * stopping the assembly:                 Abort.               (line   6)
   19539 * string constants:                      Strings.             (line   6)
   19540 * string directive:                      String.              (line   8)
   19541 * string directive on HPPA:              HPPA Directives.     (line 137)
   19542 * string directive, TIC54X:              TIC54X-Directives.   (line 209)
   19543 * string literals:                       Ascii.               (line   6)
   19544 * string, copying to object file:        String.              (line   8)
   19545 * string16 directive:                    String.              (line   8)
   19546 * string16, copying to object file:      String.              (line   8)
   19547 * string32 directive:                    String.              (line   8)
   19548 * string32, copying to object file:      String.              (line   8)
   19549 * string64 directive:                    String.              (line   8)
   19550 * string64, copying to object file:      String.              (line   8)
   19551 * string8 directive:                     String.              (line   8)
   19552 * string8, copying to object file:       String.              (line   8)
   19553 * struct directive:                      Struct.              (line   6)
   19554 * struct directive, TIC54X:              TIC54X-Directives.   (line 217)
   19555 * structure debugging, COFF:             Tag.                 (line   6)
   19556 * sub-instruction ordering, D10V:        D10V-Chars.          (line   6)
   19557 * sub-instruction ordering, D30V:        D30V-Chars.          (line   6)
   19558 * sub-instructions, D10V:                D10V-Subs.           (line   6)
   19559 * sub-instructions, D30V:                D30V-Subs.           (line   6)
   19560 * subexpressions:                        Arguments.           (line  24)
   19561 * subsection directive:                  SubSection.          (line   6)
   19562 * subsym builtins, TIC54X:               TIC54X-Macros.       (line  16)
   19563 * subtitles for listings:                Sbttl.               (line   6)
   19564 * subtraction, permitted arguments:      Infix Ops.           (line  49)
   19565 * summary of options:                    Overview.            (line   6)
   19566 * support:                               HPPA-Dependent.      (line   6)
   19567 * supporting files, including:           Include.             (line   6)
   19568 * suppressing warnings:                  W.                   (line  11)
   19569 * sval:                                  Z8000 Directives.    (line  33)
   19570 * symbol attributes:                     Symbol Attributes.   (line   6)
   19571 * symbol attributes, a.out:              a.out Symbols.       (line   6)
   19572 * symbol attributes, COFF:               COFF Symbols.        (line   6)
   19573 * symbol attributes, SOM:                SOM Symbols.         (line   6)
   19574 * symbol descriptor, COFF:               Desc.                (line   6)
   19575 * symbol modifiers <1>:                  M68HC11-Modifiers.   (line  12)
   19576 * symbol modifiers <2>:                  M32C-Modifiers.      (line  11)
   19577 * symbol modifiers:                      AVR-Modifiers.       (line  12)
   19578 * symbol names:                          Symbol Names.        (line   6)
   19579 * symbol names, $ in <1>:                SH64-Chars.          (line  10)
   19580 * symbol names, $ in <2>:                SH-Chars.            (line  10)
   19581 * symbol names, $ in <3>:                D30V-Chars.          (line  63)
   19582 * symbol names, $ in:                    D10V-Chars.          (line  46)
   19583 * symbol names, local:                   Symbol Names.        (line  22)
   19584 * symbol names, temporary:               Symbol Names.        (line  35)
   19585 * symbol storage class (COFF):           Scl.                 (line   6)
   19586 * symbol type:                           Symbol Type.         (line   6)
   19587 * symbol type, COFF:                     Type.                (line  11)
   19588 * symbol type, ELF:                      Type.                (line  22)
   19589 * symbol value:                          Symbol Value.        (line   6)
   19590 * symbol value, setting:                 Set.                 (line   6)
   19591 * symbol values, assigning:              Setting Symbols.     (line   6)
   19592 * symbol versioning:                     Symver.              (line   6)
   19593 * symbol, common:                        Comm.                (line   6)
   19594 * symbol, making visible to linker:      Global.              (line   6)
   19595 * symbolic debuggers, information for:   Stab.                (line   6)
   19596 * symbols:                               Symbols.             (line   6)
   19597 * Symbols in position-independent code, CRIS: CRIS-Pic.       (line   6)
   19598 * symbols with uppercase, VAX/VMS:       VAX-Opts.            (line  42)
   19599 * symbols, assigning values to:          Equ.                 (line   6)
   19600 * Symbols, built-in, CRIS:               CRIS-Symbols.        (line   6)
   19601 * Symbols, CRIS, built-in:               CRIS-Symbols.        (line   6)
   19602 * symbols, local common:                 Lcomm.               (line   6)
   19603 * symver directive:                      Symver.              (line   6)
   19604 * syntax compatibility, i386:            i386-Syntax.         (line   6)
   19605 * syntax compatibility, x86-64:          i386-Syntax.         (line   6)
   19606 * syntax, AVR:                           AVR-Modifiers.       (line   6)
   19607 * syntax, BFIN:                          BFIN Syntax.         (line   6)
   19608 * syntax, D10V:                          D10V-Syntax.         (line   6)
   19609 * syntax, D30V:                          D30V-Syntax.         (line   6)
   19610 * syntax, M32C:                          M32C-Modifiers.      (line   6)
   19611 * syntax, M680x0:                        M68K-Syntax.         (line   8)
   19612 * syntax, M68HC11 <1>:                   M68HC11-Modifiers.   (line   6)
   19613 * syntax, M68HC11:                       M68HC11-Syntax.      (line   6)
   19614 * syntax, machine-independent:           Syntax.              (line   6)
   19615 * syntax, SPARC:                         Sparc-Aligned-Data.  (line  21)
   19616 * syntax, Xtensa assembler:              Xtensa Syntax.       (line   6)
   19617 * sysproc directive, i960:               Directives-i960.     (line  37)
   19618 * tab (\t):                              Strings.             (line  27)
   19619 * tab directive, TIC54X:                 TIC54X-Directives.   (line 248)
   19620 * tag directive:                         Tag.                 (line   6)
   19621 * tag directive, TIC54X:                 TIC54X-Directives.   (line 217)
   19622 * tdaoff pseudo-op, V850:                V850 Opcodes.        (line  81)
   19623 * temporary symbol names:                Symbol Names.        (line  35)
   19624 * text and data sections, joining:       R.                   (line   6)
   19625 * text directive:                        Text.                (line   6)
   19626 * text section:                          Ld Sections.         (line   9)
   19627 * tfloat directive, i386:                i386-Float.          (line  14)
   19628 * tfloat directive, x86-64:              i386-Float.          (line  14)
   19629 * thumb directive, ARM:                  ARM Directives.      (line  57)
   19630 * Thumb support:                         ARM-Dependent.       (line   6)
   19631 * thumb_func directive, ARM:             ARM Directives.      (line  67)
   19632 * thumb_set directive, ARM:              ARM Directives.      (line  78)
   19633 * TIC54X builtin math functions:         TIC54X-Builtins.     (line   6)
   19634 * TIC54X machine directives:             TIC54X-Directives.   (line   6)
   19635 * TIC54X memory-mapped registers:        TIC54X-MMRegs.       (line   6)
   19636 * TIC54X options:                        TIC54X-Opts.         (line   6)
   19637 * TIC54X subsym builtins:                TIC54X-Macros.       (line  16)
   19638 * TIC54X support:                        TIC54X-Dependent.    (line   6)
   19639 * TIC54X-specific macros:                TIC54X-Macros.       (line   6)
   19640 * time, total for assembly:              statistics.          (line   6)
   19641 * title directive:                       Title.               (line   6)
   19642 * tp register, V850:                     V850-Regs.           (line  20)
   19643 * transform directive:                   Transform Directive. (line   6)
   19644 * trusted compiler:                      f.                   (line   6)
   19645 * turning preprocessing on and off:      Preprocessing.       (line  26)
   19646 * type directive (COFF version):         Type.                (line  11)
   19647 * type directive (ELF version):          Type.                (line  22)
   19648 * type of a symbol:                      Symbol Type.         (line   6)
   19649 * ualong directive, SH:                  SH Directives.       (line   6)
   19650 * uaword directive, SH:                  SH Directives.       (line   6)
   19651 * ubyte directive, TIC54X:               TIC54X-Directives.   (line  36)
   19652 * uchar directive, TIC54X:               TIC54X-Directives.   (line  36)
   19653 * uhalf directive, TIC54X:               TIC54X-Directives.   (line 111)
   19654 * uint directive, TIC54X:                TIC54X-Directives.   (line 111)
   19655 * uleb128 directive:                     Uleb128.             (line   6)
   19656 * ulong directive, TIC54X:               TIC54X-Directives.   (line 135)
   19657 * undefined section:                     Ld Sections.         (line  36)
   19658 * union directive, TIC54X:               TIC54X-Directives.   (line 251)
   19659 * unreq directive, ARM:                  ARM Directives.      (line  18)
   19660 * unsegm:                                Z8000 Directives.    (line  14)
   19661 * usect directive, TIC54X:               TIC54X-Directives.   (line 263)
   19662 * ushort directive, TIC54X:              TIC54X-Directives.   (line 111)
   19663 * uword directive, TIC54X:               TIC54X-Directives.   (line 111)
   19664 * V850 command line options:             V850 Options.        (line   9)
   19665 * V850 floating point (IEEE):            V850 Floating Point. (line   6)
   19666 * V850 line comment character:           V850-Chars.          (line   6)
   19667 * V850 machine directives:               V850 Directives.     (line   6)
   19668 * V850 opcodes:                          V850 Opcodes.        (line   6)
   19669 * V850 options (none):                   V850 Options.        (line   6)
   19670 * V850 register names:                   V850-Regs.           (line   6)
   19671 * V850 support:                          V850-Dependent.      (line   6)
   19672 * val directive:                         Val.                 (line   6)
   19673 * value attribute, COFF:                 Val.                 (line   6)
   19674 * value of a symbol:                     Symbol Value.        (line   6)
   19675 * var directive, TIC54X:                 TIC54X-Directives.   (line 273)
   19676 * VAX bitfields not supported:           VAX-no.              (line   6)
   19677 * VAX branch improvement:                VAX-branch.          (line   6)
   19678 * VAX command-line options ignored:      VAX-Opts.            (line   6)
   19679 * VAX displacement sizing character:     VAX-operands.        (line  12)
   19680 * VAX floating point:                    VAX-float.           (line   6)
   19681 * VAX immediate character:               VAX-operands.        (line   6)
   19682 * VAX indirect character:                VAX-operands.        (line   9)
   19683 * VAX machine directives:                VAX-directives.      (line   6)
   19684 * VAX opcode mnemonics:                  VAX-opcodes.         (line   6)
   19685 * VAX operand notation:                  VAX-operands.        (line   6)
   19686 * VAX register names:                    VAX-operands.        (line  17)
   19687 * VAX support:                           Vax-Dependent.       (line   6)
   19688 * Vax-11 C compatibility:                VAX-Opts.            (line  42)
   19689 * VAX/VMS options:                       VAX-Opts.            (line  42)
   19690 * version directive:                     Version.             (line   6)
   19691 * version directive, TIC54X:             TIC54X-Directives.   (line 277)
   19692 * version of assembler:                  v.                   (line   6)
   19693 * versions of symbols:                   Symver.              (line   6)
   19694 * visibility <1>:                        Protected.           (line   6)
   19695 * visibility <2>:                        Internal.            (line   6)
   19696 * visibility:                            Hidden.              (line   6)
   19697 * VMS (VAX) options:                     VAX-Opts.            (line  42)
   19698 * vtable_entry directive:                VTableEntry.         (line   6)
   19699 * vtable_inherit directive:              VTableInherit.       (line   6)
   19700 * warning directive:                     Warning.             (line   6)
   19701 * warning for altered difference tables: K.                   (line   6)
   19702 * warning messages:                      Errors.              (line   6)
   19703 * warnings, causing error:               W.                   (line  16)
   19704 * warnings, M32R:                        M32R-Warnings.       (line   6)
   19705 * warnings, suppressing:                 W.                   (line  11)
   19706 * warnings, switching on:                W.                   (line  19)
   19707 * weak directive:                        Weak.                (line   6)
   19708 * weakref directive:                     Weakref.             (line   6)
   19709 * whitespace:                            Whitespace.          (line   6)
   19710 * whitespace, removed by preprocessor:   Preprocessing.       (line   7)
   19711 * wide floating point directives, VAX:   VAX-directives.      (line  10)
   19712 * width directive, TIC54X:               TIC54X-Directives.   (line 127)
   19713 * Width of continuation lines of disassembly output: listing. (line  21)
   19714 * Width of first line disassembly output: listing.            (line  16)
   19715 * Width of source line output:           listing.             (line  28)
   19716 * wmsg directive, TIC54X:                TIC54X-Directives.   (line  77)
   19717 * word directive:                        Word.                (line   6)
   19718 * word directive, ARC:                   ARC Directives.      (line 174)
   19719 * word directive, H8/300:                H8/300 Directives.   (line   6)
   19720 * word directive, i386:                  i386-Float.          (line  21)
   19721 * word directive, SPARC:                 Sparc-Directives.    (line  51)
   19722 * word directive, TIC54X:                TIC54X-Directives.   (line 111)
   19723 * word directive, x86-64:                i386-Float.          (line  21)
   19724 * writing patterns in memory:            Fill.                (line   6)
   19725 * wval:                                  Z8000 Directives.    (line  24)
   19726 * x86 machine directives:                i386-Directives.     (line   6)
   19727 * x86-64 arch directive:                 i386-Arch.           (line   6)
   19728 * x86-64 att_syntax pseudo op:           i386-Syntax.         (line   6)
   19729 * x86-64 conversion instructions:        i386-Mnemonics.      (line  32)
   19730 * x86-64 floating point:                 i386-Float.          (line   6)
   19731 * x86-64 immediate operands:             i386-Syntax.         (line  15)
   19732 * x86-64 instruction naming:             i386-Mnemonics.      (line   6)
   19733 * x86-64 intel_syntax pseudo op:         i386-Syntax.         (line   6)
   19734 * x86-64 jump optimization:              i386-Jumps.          (line   6)
   19735 * x86-64 jump, call, return:             i386-Syntax.         (line  38)
   19736 * x86-64 jump/call operands:             i386-Syntax.         (line  15)
   19737 * x86-64 memory references:              i386-Memory.         (line   6)
   19738 * x86-64 options:                        i386-Options.        (line   6)
   19739 * x86-64 register operands:              i386-Syntax.         (line  15)
   19740 * x86-64 registers:                      i386-Regs.           (line   6)
   19741 * x86-64 sections:                       i386-Syntax.         (line  44)
   19742 * x86-64 size suffixes:                  i386-Syntax.         (line  29)
   19743 * x86-64 source, destination operands:   i386-Syntax.         (line  22)
   19744 * x86-64 support:                        i386-Dependent.      (line   6)
   19745 * x86-64 syntax compatibility:           i386-Syntax.         (line   6)
   19746 * xfloat directive, TIC54X:              TIC54X-Directives.   (line  64)
   19747 * xlong directive, TIC54X:               TIC54X-Directives.   (line 135)
   19748 * Xtensa architecture:                   Xtensa-Dependent.    (line   6)
   19749 * Xtensa assembler syntax:               Xtensa Syntax.       (line   6)
   19750 * Xtensa directives:                     Xtensa Directives.   (line   6)
   19751 * Xtensa opcode names:                   Xtensa Opcodes.      (line   6)
   19752 * Xtensa register names:                 Xtensa Registers.    (line   6)
   19753 * xword directive, SPARC:                Sparc-Directives.    (line  55)
   19754 * Z80 $:                                 Z80-Chars.           (line   8)
   19755 * Z80 ':                                 Z80-Chars.           (line  13)
   19756 * Z80 floating point:                    Z80 Floating Point.  (line   6)
   19757 * Z80 line comment character:            Z80-Chars.           (line   6)
   19758 * Z80 options:                           Z80 Options.         (line   6)
   19759 * Z80 registers:                         Z80-Regs.            (line   6)
   19760 * Z80 support:                           Z80-Dependent.       (line   6)
   19761 * Z80 Syntax:                            Z80 Options.         (line  47)
   19762 * Z80, \:                                Z80-Chars.           (line  11)
   19763 * Z80, case sensitivity:                 Z80-Case.            (line   6)
   19764 * Z80-only directives:                   Z80 Directives.      (line   9)
   19765 * Z800 addressing modes:                 Z8000-Addressing.    (line   6)
   19766 * Z8000 directives:                      Z8000 Directives.    (line   6)
   19767 * Z8000 line comment character:          Z8000-Chars.         (line   6)
   19768 * Z8000 line separator:                  Z8000-Chars.         (line   8)
   19769 * Z8000 opcode summary:                  Z8000 Opcodes.       (line   6)
   19770 * Z8000 options:                         Z8000 Options.       (line   6)
   19771 * Z8000 registers:                       Z8000-Regs.          (line   6)
   19772 * Z8000 support:                         Z8000-Dependent.     (line   6)
   19773 * zdaoff pseudo-op, V850:                V850 Opcodes.        (line  99)
   19774 * zero register, V850:                   V850-Regs.           (line   7)
   19775 * zero-terminated strings:               Asciz.               (line   6)
   19776 
   19777 
   19778 
   19779 Tag Table:
   19780 Node: Top846
   19781 Node: Overview1832
   19782 Node: Manual29723
   19783 Node: GNU Assembler30667
   19784 Node: Object Formats31838
   19785 Node: Command Line32290
   19786 Node: Input Files33377
   19787 Node: Object35358
   19788 Node: Errors36254
   19789 Node: Invoking37449
   19790 Node: a39404
   19791 Node: alternate41315
   19792 Node: D41487
   19793 Node: f41720
   19794 Node: I42228
   19795 Node: K42772
   19796 Node: L43076
   19797 Node: listing43815
   19798 Node: M45474
   19799 Node: MD49875
   19800 Node: o50301
   19801 Node: R50756
   19802 Node: statistics51786
   19803 Node: traditional-format52193
   19804 Node: v52666
   19805 Node: W52941
   19806 Node: Z53848
   19807 Node: Syntax54370
   19808 Node: Preprocessing54961
   19809 Node: Whitespace56524
   19810 Node: Comments56920
   19811 Node: Symbol Intro59073
   19812 Node: Statements59763
   19813 Node: Constants61684
   19814 Node: Characters62315
   19815 Node: Strings62817
   19816 Node: Chars64983
   19817 Node: Numbers65737
   19818 Node: Integers66277
   19819 Node: Bignums66933
   19820 Node: Flonums67289
   19821 Node: Sections69036
   19822 Node: Secs Background69414
   19823 Node: Ld Sections74453
   19824 Node: As Sections76837
   19825 Node: Sub-Sections77747
   19826 Node: bss80892
   19827 Node: Symbols81842
   19828 Node: Labels82490
   19829 Node: Setting Symbols83221
   19830 Node: Symbol Names83717
   19831 Node: Dot88780
   19832 Node: Symbol Attributes89227
   19833 Node: Symbol Value89964
   19834 Node: Symbol Type91009
   19835 Node: a.out Symbols91397
   19836 Node: Symbol Desc91659
   19837 Node: Symbol Other91954
   19838 Node: COFF Symbols92123
   19839 Node: SOM Symbols92796
   19840 Node: Expressions93238
   19841 Node: Empty Exprs93987
   19842 Node: Integer Exprs94334
   19843 Node: Arguments94729
   19844 Node: Operators95835
   19845 Node: Prefix Ops96170
   19846 Node: Infix Ops96498
   19847 Node: Pseudo Ops98888
   19848 Node: Abort104294
   19849 Node: ABORT (COFF)104706
   19850 Node: Align104914
   19851 Node: Ascii107196
   19852 Node: Asciz107505
   19853 Node: Balign107750
   19854 Node: Byte109613
   19855 Node: Comm109851
   19856 Node: CFI directives111225
   19857 Node: LNS directives116420
   19858 Node: Data118495
   19859 Node: Def118822
   19860 Node: Desc119054
   19861 Node: Dim119554
   19862 Node: Double119811
   19863 Node: Eject120149
   19864 Node: Else120324
   19865 Node: Elseif120624
   19866 Node: End120918
   19867 Node: Endef121133
   19868 Node: Endfunc121310
   19869 Node: Endif121485
   19870 Node: Equ121746
   19871 Node: Equiv122260
   19872 Node: Eqv122816
   19873 Node: Err123180
   19874 Node: Error123491
   19875 Node: Exitm123936
   19876 Node: Extern124105
   19877 Node: Fail124366
   19878 Node: File124811
   19879 Node: Fill125288
   19880 Node: Float126252
   19881 Node: Func126594
   19882 Node: Global127184
   19883 Node: Gnu_attribute127941
   19884 Node: Hidden128166
   19885 Node: hword128752
   19886 Node: Ident129080
   19887 Node: If129654
   19888 Node: Incbin132713
   19889 Node: Include133408
   19890 Node: Int133959
   19891 Node: Internal134340
   19892 Node: Irp134988
   19893 Node: Irpc135867
   19894 Node: Lcomm136784
   19895 Node: Lflags137532
   19896 Node: Line137726
   19897 Node: Linkonce138645
   19898 Node: Ln139874
   19899 Node: MRI140035
   19900 Node: List140373
   19901 Node: Long140981
   19902 Node: Macro141168
   19903 Node: Altmacro147090
   19904 Node: Noaltmacro148421
   19905 Node: Nolist148590
   19906 Node: Octa149020
   19907 Node: Org149354
   19908 Node: P2align150637
   19909 Node: Previous152565
   19910 Node: PopSection153978
   19911 Node: Print154486
   19912 Node: Protected154715
   19913 Node: Psize155362
   19914 Node: Purgem156046
   19915 Node: PushSection156267
   19916 Node: Quad157010
   19917 Node: Reloc157466
   19918 Node: Rept158227
   19919 Node: Sbttl158641
   19920 Node: Scl159006
   19921 Node: Section159347
   19922 Node: Set164484
   19923 Node: Short165121
   19924 Node: Single165442
   19925 Node: Size165787
   19926 Node: Sleb128166459
   19927 Node: Skip166783
   19928 Node: Space167107
   19929 Node: Stab167748
   19930 Node: String169752
   19931 Node: Struct170746
   19932 Node: SubSection171471
   19933 Node: Symver172034
   19934 Node: Tag174427
   19935 Node: Text174809
   19936 Node: Title175130
   19937 Node: Type175511
   19938 Node: Uleb128177234
   19939 Node: Val177558
   19940 Node: Version177808
   19941 Node: VTableEntry178083
   19942 Node: VTableInherit178373
   19943 Node: Warning178823
   19944 Node: Weak179057
   19945 Node: Weakref179726
   19946 Node: Word180691
   19947 Node: Deprecated182537
   19948 Node: Object Attributes182772
   19949 Node: GNU Object Attributes184492
   19950 Node: Defining New Object Attributes187045
   19951 Node: Machine Dependencies187842
   19952 Node: Alpha-Dependent190726
   19953 Node: Alpha Notes191140
   19954 Node: Alpha Options191421
   19955 Node: Alpha Syntax193619
   19956 Node: Alpha-Chars194088
   19957 Node: Alpha-Regs194319
   19958 Node: Alpha-Relocs194706
   19959 Node: Alpha Floating Point200964
   19960 Node: Alpha Directives201186
   19961 Node: Alpha Opcodes206709
   19962 Node: ARC-Dependent207004
   19963 Node: ARC Options207387
   19964 Node: ARC Syntax208456
   19965 Node: ARC-Chars208688
   19966 Node: ARC-Regs208820
   19967 Node: ARC Floating Point208944
   19968 Node: ARC Directives209255
   19969 Node: ARC Opcodes215227
   19970 Node: ARM-Dependent215453
   19971 Node: ARM Options215918
   19972 Node: ARM Syntax222051
   19973 Node: ARM-Chars222320
   19974 Node: ARM-Regs222844
   19975 Node: ARM Floating Point223053
   19976 Node: ARM-Relocations223252
   19977 Node: ARM Directives224217
   19978 Ref: arm_fnstart228232
   19979 Ref: arm_fnend228307
   19980 Ref: arm_save229324
   19981 Ref: arm_pad230654
   19982 Ref: arm_movsp230860
   19983 Ref: arm_setfp231038
   19984 Node: ARM Opcodes232589
   19985 Node: ARM Mapping Symbols234677
   19986 Node: ARM Unwinding Tutorial235487
   19987 Node: AVR-Dependent241689
   19988 Node: AVR Options241975
   19989 Node: AVR Syntax244806
   19990 Node: AVR-Chars245093
   19991 Node: AVR-Regs245499
   19992 Node: AVR-Modifiers246078
   19993 Node: AVR Opcodes248138
   19994 Node: BFIN-Dependent253384
   19995 Node: BFIN Syntax253638
   19996 Node: BFIN Directives259334
   19997 Node: CR16-Dependent259741
   19998 Node: CR16 Operand Qualifiers259985
   19999 Node: CRIS-Dependent261751
   20000 Node: CRIS-Opts262097
   20001 Ref: march-option263715
   20002 Node: CRIS-Expand265532
   20003 Node: CRIS-Symbols266715
   20004 Node: CRIS-Syntax267884
   20005 Node: CRIS-Chars268220
   20006 Node: CRIS-Pic268771
   20007 Ref: crispic268967
   20008 Node: CRIS-Regs272507
   20009 Node: CRIS-Pseudos272924
   20010 Ref: crisnous273700
   20011 Node: D10V-Dependent274982
   20012 Node: D10V-Opts275333
   20013 Node: D10V-Syntax276296
   20014 Node: D10V-Size276825
   20015 Node: D10V-Subs277798
   20016 Node: D10V-Chars278833
   20017 Node: D10V-Regs280437
   20018 Node: D10V-Addressing281482
   20019 Node: D10V-Word282168
   20020 Node: D10V-Float282683
   20021 Node: D10V-Opcodes282994
   20022 Node: D30V-Dependent283387
   20023 Node: D30V-Opts283740
   20024 Node: D30V-Syntax284415
   20025 Node: D30V-Size284947
   20026 Node: D30V-Subs285918
   20027 Node: D30V-Chars286953
   20028 Node: D30V-Guarded289251
   20029 Node: D30V-Regs289931
   20030 Node: D30V-Addressing291070
   20031 Node: D30V-Float291738
   20032 Node: D30V-Opcodes292049
   20033 Node: H8/300-Dependent292442
   20034 Node: H8/300 Options292854
   20035 Node: H8/300 Syntax293121
   20036 Node: H8/300-Chars293422
   20037 Node: H8/300-Regs293721
   20038 Node: H8/300-Addressing294640
   20039 Node: H8/300 Floating Point295681
   20040 Node: H8/300 Directives296008
   20041 Node: H8/300 Opcodes297136
   20042 Node: HPPA-Dependent305458
   20043 Node: HPPA Notes305893
   20044 Node: HPPA Options306651
   20045 Node: HPPA Syntax306846
   20046 Node: HPPA Floating Point308116
   20047 Node: HPPA Directives308322
   20048 Node: HPPA Opcodes317008
   20049 Node: ESA/390-Dependent317267
   20050 Node: ESA/390 Notes317727
   20051 Node: ESA/390 Options318518
   20052 Node: ESA/390 Syntax318728
   20053 Node: ESA/390 Floating Point320901
   20054 Node: ESA/390 Directives321180
   20055 Node: ESA/390 Opcodes324469
   20056 Node: i386-Dependent324731
   20057 Node: i386-Options325855
   20058 Node: i386-Directives329557
   20059 Node: i386-Syntax330295
   20060 Node: i386-Mnemonics332728
   20061 Node: i386-Regs335796
   20062 Node: i386-Prefixes337841
   20063 Node: i386-Memory340601
   20064 Node: i386-Jumps343538
   20065 Node: i386-Float344659
   20066 Node: i386-SIMD346490
   20067 Node: i386-16bit347601
   20068 Node: i386-Bugs349641
   20069 Node: i386-Arch350395
   20070 Node: i386-Notes352900
   20071 Node: i860-Dependent353758
   20072 Node: Notes-i860354154
   20073 Node: Options-i860355059
   20074 Node: Directives-i860356422
   20075 Node: Opcodes for i860357491
   20076 Node: i960-Dependent359658
   20077 Node: Options-i960360061
   20078 Node: Floating Point-i960363946
   20079 Node: Directives-i960364214
   20080 Node: Opcodes for i960366248
   20081 Node: callj-i960366865
   20082 Node: Compare-and-branch-i960367354
   20083 Node: IA-64-Dependent369258
   20084 Node: IA-64 Options369559
   20085 Node: IA-64 Syntax372719
   20086 Node: IA-64-Chars373082
   20087 Node: IA-64-Regs373312
   20088 Node: IA-64-Bits374238
   20089 Node: IA-64 Opcodes374747
   20090 Node: IP2K-Dependent375019
   20091 Node: IP2K-Opts375247
   20092 Node: M32C-Dependent375727
   20093 Node: M32C-Opts376251
   20094 Node: M32C-Modifiers376674
   20095 Node: M32R-Dependent378461
   20096 Node: M32R-Opts378782
   20097 Node: M32R-Directives382949
   20098 Node: M32R-Warnings386924
   20099 Node: M68K-Dependent389930
   20100 Node: M68K-Opts390397
   20101 Node: M68K-Syntax397789
   20102 Node: M68K-Moto-Syntax399629
   20103 Node: M68K-Float402219
   20104 Node: M68K-Directives402739
   20105 Node: M68K-opcodes404067
   20106 Node: M68K-Branch404293
   20107 Node: M68K-Chars408491
   20108 Node: M68HC11-Dependent408904
   20109 Node: M68HC11-Opts409435
   20110 Node: M68HC11-Syntax413256
   20111 Node: M68HC11-Modifiers415470
   20112 Node: M68HC11-Directives417298
   20113 Node: M68HC11-Float418674
   20114 Node: M68HC11-opcodes419202
   20115 Node: M68HC11-Branch419384
   20116 Node: MIPS-Dependent421833
   20117 Node: MIPS Opts422993
   20118 Node: MIPS Object432579
   20119 Node: MIPS Stabs434145
   20120 Node: MIPS symbol sizes434867
   20121 Node: MIPS ISA436536
   20122 Node: MIPS autoextend438010
   20123 Node: MIPS insn438740
   20124 Node: MIPS option stack439237
   20125 Node: MIPS ASE instruction generation overrides440011
   20126 Node: MIPS floating-point441825
   20127 Node: MMIX-Dependent442711
   20128 Node: MMIX-Opts443091
   20129 Node: MMIX-Expand446695
   20130 Node: MMIX-Syntax448010
   20131 Ref: mmixsite448367
   20132 Node: MMIX-Chars449208
   20133 Node: MMIX-Symbols449862
   20134 Node: MMIX-Regs451930
   20135 Node: MMIX-Pseudos452955
   20136 Ref: MMIX-loc453096
   20137 Ref: MMIX-local454176
   20138 Ref: MMIX-is454708
   20139 Ref: MMIX-greg454979
   20140 Ref: GREG-base455898
   20141 Ref: MMIX-byte457215
   20142 Ref: MMIX-constants457686
   20143 Ref: MMIX-prefix458332
   20144 Ref: MMIX-spec458706
   20145 Node: MMIX-mmixal459040
   20146 Node: MSP430-Dependent462538
   20147 Node: MSP430 Options463004
   20148 Node: MSP430 Syntax463290
   20149 Node: MSP430-Macros463606
   20150 Node: MSP430-Chars464337
   20151 Node: MSP430-Regs464650
   20152 Node: MSP430-Ext465210
   20153 Node: MSP430 Floating Point467031
   20154 Node: MSP430 Directives467255
   20155 Node: MSP430 Opcodes468046
   20156 Node: MSP430 Profiling Capability468441
   20157 Node: PDP-11-Dependent470770
   20158 Node: PDP-11-Options471159
   20159 Node: PDP-11-Pseudos476230
   20160 Node: PDP-11-Syntax476575
   20161 Node: PDP-11-Mnemonics477327
   20162 Node: PDP-11-Synthetic477629
   20163 Node: PJ-Dependent477847
   20164 Node: PJ Options478072
   20165 Node: PPC-Dependent478349
   20166 Node: PowerPC-Opts478636
   20167 Node: PowerPC-Pseudo481155
   20168 Node: SH-Dependent481754
   20169 Node: SH Options482166
   20170 Node: SH Syntax483174
   20171 Node: SH-Chars483447
   20172 Node: SH-Regs483741
   20173 Node: SH-Addressing484355
   20174 Node: SH Floating Point485264
   20175 Node: SH Directives486358
   20176 Node: SH Opcodes486728
   20177 Node: SH64-Dependent491050
   20178 Node: SH64 Options491413
   20179 Node: SH64 Syntax493210
   20180 Node: SH64-Chars493493
   20181 Node: SH64-Regs493793
   20182 Node: SH64-Addressing494889
   20183 Node: SH64 Directives496072
   20184 Node: SH64 Opcodes497182
   20185 Node: Sparc-Dependent497898
   20186 Node: Sparc-Opts498308
   20187 Node: Sparc-Aligned-Data500565
   20188 Node: Sparc-Syntax501397
   20189 Node: Sparc-Chars501971
   20190 Node: Sparc-Regs502204
   20191 Node: Sparc-Constants507315
   20192 Node: Sparc-Relocs512075
   20193 Node: Sparc-Size-Translations516755
   20194 Node: Sparc-Float518404
   20195 Node: Sparc-Directives518599
   20196 Node: TIC54X-Dependent520559
   20197 Node: TIC54X-Opts521285
   20198 Node: TIC54X-Block522328
   20199 Node: TIC54X-Env522688
   20200 Node: TIC54X-Constants523036
   20201 Node: TIC54X-Subsyms523438
   20202 Node: TIC54X-Locals525347
   20203 Node: TIC54X-Builtins526091
   20204 Node: TIC54X-Ext528562
   20205 Node: TIC54X-Directives529133
   20206 Node: TIC54X-Macros540035
   20207 Node: TIC54X-MMRegs542146
   20208 Node: Z80-Dependent542362
   20209 Node: Z80 Options542750
   20210 Node: Z80 Syntax544173
   20211 Node: Z80-Chars544845
   20212 Node: Z80-Regs545379
   20213 Node: Z80-Case545731
   20214 Node: Z80 Floating Point546176
   20215 Node: Z80 Directives546370
   20216 Node: Z80 Opcodes547995
   20217 Node: Z8000-Dependent549339
   20218 Node: Z8000 Options550300
   20219 Node: Z8000 Syntax550517
   20220 Node: Z8000-Chars550807
   20221 Node: Z8000-Regs551040
   20222 Node: Z8000-Addressing551830
   20223 Node: Z8000 Directives552947
   20224 Node: Z8000 Opcodes554556
   20225 Node: Vax-Dependent564498
   20226 Node: VAX-Opts565015
   20227 Node: VAX-float568750
   20228 Node: VAX-directives569382
   20229 Node: VAX-opcodes570243
   20230 Node: VAX-branch570632
   20231 Node: VAX-operands573139
   20232 Node: VAX-no573902
   20233 Node: V850-Dependent574139
   20234 Node: V850 Options574537
   20235 Node: V850 Syntax576926
   20236 Node: V850-Chars577166
   20237 Node: V850-Regs577331
   20238 Node: V850 Floating Point578899
   20239 Node: V850 Directives579105
   20240 Node: V850 Opcodes580248
   20241 Node: Xtensa-Dependent586140
   20242 Node: Xtensa Options586869
   20243 Node: Xtensa Syntax589679
   20244 Node: Xtensa Opcodes591568
   20245 Node: Xtensa Registers593362
   20246 Node: Xtensa Optimizations593995
   20247 Node: Density Instructions594447
   20248 Node: Xtensa Automatic Alignment595549
   20249 Node: Xtensa Relaxation597996
   20250 Node: Xtensa Branch Relaxation598904
   20251 Node: Xtensa Call Relaxation600276
   20252 Node: Xtensa Immediate Relaxation602062
   20253 Node: Xtensa Directives604636
   20254 Node: Schedule Directive606345
   20255 Node: Longcalls Directive606685
   20256 Node: Transform Directive607229
   20257 Node: Literal Directive607971
   20258 Ref: Literal Directive-Footnote-1611510
   20259 Node: Literal Position Directive611652
   20260 Node: Literal Prefix Directive613351
   20261 Node: Absolute Literals Directive614249
   20262 Node: Reporting Bugs615556
   20263 Node: Bug Criteria616282
   20264 Node: Bug Reporting617049
   20265 Node: Acknowledgements623698
   20266 Ref: Acknowledgements-Footnote-1628596
   20267 Node: GNU Free Documentation License628622
   20268 Node: AS Index648340
   20269 
   20270 End Tag Table
   20271